<?php

namespace Doctrine\Tests\ORM\Functional\Ticket;

/**
 * @group DDC-2193
 */
class DDC2193Test extends \Doctrine\Tests\OrmFunctionalTestCase
{
    public function testIssue()
    {
        $metadata = $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC2193HTHotelItem');
        $query    = $this->_em->getRepository($metadata->name)->createNativeNamedQuery('find-hotel-item');
        $expected = 'SELECT Top 1 VEI_SN AS SN
            FROM tourmanager.dbo.VEndorInfo vi
INNER JOIN tourmanager.dbo.VEndorInfo2 vi2 ON
vi.VEI_SN = vi2.VEI2_VEI_SN LEFT OUTER JOIN tourmanager.dbo.HotelInfo hi
ON hi.hotelid = vi2.VEI2_VEI_SN INNER JOIN tourmanager.dbo.HotelInfo2
hi2 ON hi2.hotelid = vi2.VEI2_VEI_SN AND hi2.LGC = 1 ';

        $this->assertEquals($expected, $query->getSQL());

        try {
            // failure,  the database does not exists
            $query->getResult();
        } catch (\Exception $exc) {}


        $sql = end($this->_sqlLoggerStack->queries);
        $this->assertEquals($expected, $sql['sql']);
    }
}

/**
 * @Entity
 * @Table
 *
 * @NamedNativeQueries({
 *      @NamedNativeQuery(
 *          name             = "find-hotel-item",
 *          resultSetMapping = "mapping-find-item",
 *          query            = "SELECT Top 1 VEI_SN AS SN
            FROM tourmanager.dbo.VEndorInfo vi
INNER JOIN tourmanager.dbo.VEndorInfo2 vi2 ON
vi.VEI_SN = vi2.VEI2_VEI_SN LEFT OUTER JOIN tourmanager.dbo.HotelInfo hi
ON hi.hotelid = vi2.VEI2_VEI_SN INNER JOIN tourmanager.dbo.HotelInfo2
hi2 ON hi2.hotelid = vi2.VEI2_VEI_SN AND hi2.LGC = 1 "
 *      )
 * })
 *
 * @SqlResultSetMappings({
 *      @SqlResultSetMapping(
 *          name    = "mapping-find-item",
 *          entities= {
 *              @EntityResult(
 *                  entityClass = "DDC2193HTHotelItem",
 *                  fields = {
 *                      @FieldResult(name = "id",   column="SN")
 *                  }
 *              )
 *          }
 *      )
 * })
 *
 */

class DDC2193HTHotelItem
{
    /**
     * @Id 
     * @GeneratedValue
     * @Column(type="integer")
     */
    protected $id;

    /** @Column */
    protected $name;

    /** @Column */
    protected $city;

    /** @Column */
    protected $url;

    public function getId()
    {
        return $this->id;
    }

    public function getName()
    {
        return $this->name;
    }

    public function getCity()
    {
        return $this->city;
    }

    public function getUrl()
    {
        return $this->url;
    }
}