public function testAddSelectColumnsAlias()
 {
     $c = new Criteria();
     BookTableMap::addSelectColumns($c, 'foo');
     $expected = array('foo.ID', 'foo.TITLE', 'foo.ISBN', 'foo.PRICE', 'foo.PUBLISHER_ID', 'foo.AUTHOR_ID');
     $this->assertEquals($expected, $c->getSelectColumns(), 'addSelectColumns() uses the second parameter as a table alias');
 }
 public function testAddSelectColumnsAlias()
 {
     $c = new Criteria();
     BookTableMap::addSelectColumns($c, 'foo');
     $expected = array('foo.id', 'foo.title', 'foo.isbn', 'foo.price', 'foo.publisher_id', 'foo.author_id');
     $this->assertEquals($expected, $c->getSelectColumns(), 'addSelectColumns() uses the second parameter as a table alias');
 }
 public function testDoCount()
 {
     try {
         $c = new Criteria();
         $c->add(BookTableMap::ID, 12, ' BAD SQL');
         BookTableMap::addSelectColumns($c);
         $c->doCount();
         $this->fail('Missing expected exception on BAD SQL');
     } catch (PropelException $e) {
         $this->assertContains($this->getSql('[SELECT COUNT(*) FROM `book` WHERE book.ID BAD SQL:p1]'), $e->getMessage(), 'SQL query is written in the exception message');
     }
 }
Esempio n. 4
0
 public function testApplyLimitDuplicateColumnNameWithColumn()
 {
     Propel::getServiceContainer()->setAdapter('oracle', new OracleAdapter());
     $c = new Criteria();
     $c->setDbName('oracle');
     BookTableMap::addSelectColumns($c);
     AuthorTableMap::addSelectColumns($c);
     $c->addAsColumn('BOOK_PRICE', BookTableMap::COL_PRICE);
     $c->setLimit(1);
     $params = [];
     $asColumns = $c->getAsColumns();
     $sql = $c->createSelectSql($params);
     $this->assertEquals('SELECT B.* FROM (SELECT A.*, rownum AS PROPEL_ROWNUM FROM (SELECT book.id AS ORA_COL_ALIAS_0, book.title AS ORA_COL_ALIAS_1, book.isbn AS ORA_COL_ALIAS_2, book.price AS ORA_COL_ALIAS_3, book.publisher_id AS ORA_COL_ALIAS_4, book.author_id AS ORA_COL_ALIAS_5, author.id AS ORA_COL_ALIAS_6, author.first_name AS ORA_COL_ALIAS_7, author.last_name AS ORA_COL_ALIAS_8, author.email AS ORA_COL_ALIAS_9, author.age AS ORA_COL_ALIAS_10, book.price AS BOOK_PRICE FROM book, author) A ) B WHERE  B.PROPEL_ROWNUM <= 1', $sql, 'applyLimit() creates a subselect with aliased column names when a duplicate column name is found');
     $this->assertEquals($asColumns, $c->getAsColumns(), 'createSelectSql supplementary add alias column');
 }
 public function testApplyLimitDuplicateColumnNameWithColumn()
 {
     Propel::getServiceContainer()->setAdapter('oracle', new OracleAdapter());
     $c = new Criteria();
     $c->setDbName('oracle');
     BookTableMap::addSelectColumns($c);
     AuthorTableMap::addSelectColumns($c);
     $c->addAsColumn('BOOK_PRICE', BookTableMap::PRICE);
     $c->setLimit(1);
     $params = array();
     $asColumns = $c->getAsColumns();
     $sql = $c->createSelectSql($params);
     $this->assertEquals('SELECT B.* FROM (SELECT A.*, rownum AS PROPEL_ROWNUM FROM (SELECT book.ID AS ORA_COL_ALIAS_0, book.TITLE AS ORA_COL_ALIAS_1, book.ISBN AS ORA_COL_ALIAS_2, book.PRICE AS ORA_COL_ALIAS_3, book.PUBLISHER_ID AS ORA_COL_ALIAS_4, book.AUTHOR_ID AS ORA_COL_ALIAS_5, author.ID AS ORA_COL_ALIAS_6, author.FIRST_NAME AS ORA_COL_ALIAS_7, author.LAST_NAME AS ORA_COL_ALIAS_8, author.EMAIL AS ORA_COL_ALIAS_9, author.AGE AS ORA_COL_ALIAS_10, book.PRICE AS BOOK_PRICE FROM book, author) A ) B WHERE  B.PROPEL_ROWNUM <= 1', $sql, 'applyLimit() creates a subselect with aliased column names when a duplicate column name is found');
     $this->assertEquals($asColumns, $c->getAsColumns(), 'createSelectSql supplementary add alias column');
 }
Esempio n. 6
0
 public function testNeedsSelectAliases()
 {
     $c = new Criteria();
     $this->assertFalse($c->needsSelectAliases(), 'Empty Criterias don\'t need aliases');
     $c = new Criteria();
     $c->addSelectColumn(BookTableMap::COL_ID);
     $c->addSelectColumn(BookTableMap::COL_TITLE);
     $this->assertFalse($c->needsSelectAliases(), 'Criterias with distinct column names don\'t need aliases');
     $c = new Criteria();
     BookTableMap::addSelectColumns($c);
     $this->assertFalse($c->needsSelectAliases(), 'Criterias with only the columns of a model don\'t need aliases');
     $c = new Criteria();
     $c->addSelectColumn(BookTableMap::COL_ID);
     $c->addSelectColumn(AuthorTableMap::COL_ID);
     $this->assertTrue($c->needsSelectAliases(), 'Criterias with common column names do need aliases');
 }
Esempio n. 7
0
 public function testSubQueryExplicit()
 {
     $subCriteria = new BookQuery();
     BookTableMap::addSelectColumns($subCriteria);
     $subCriteria->orderByTitle(Criteria::ASC);
     $c = new BookQuery();
     BookTableMap::addSelectColumns($c, 'subCriteriaAlias');
     $c->addSelectQuery($subCriteria, 'subCriteriaAlias', false);
     $c->groupBy('subCriteriaAlias.AuthorId');
     if (in_array($this->getDriver(), array('mysql'))) {
         $sql = "SELECT subCriteriaAlias.ID, subCriteriaAlias.TITLE, subCriteriaAlias.ISBN, subCriteriaAlias.PRICE, subCriteriaAlias.PUBLISHER_ID, subCriteriaAlias.AUTHOR_ID FROM (SELECT book.ID, book.TITLE, book.ISBN, book.PRICE, book.PUBLISHER_ID, book.AUTHOR_ID FROM `book` ORDER BY book.TITLE ASC) AS subCriteriaAlias GROUP BY subCriteriaAlias.AUTHOR_ID";
     } else {
         $sql = "SELECT subCriteriaAlias.ID, subCriteriaAlias.TITLE, subCriteriaAlias.ISBN, subCriteriaAlias.PRICE, subCriteriaAlias.PUBLISHER_ID, subCriteriaAlias.AUTHOR_ID FROM (SELECT book.ID, book.TITLE, book.ISBN, book.PRICE, book.PUBLISHER_ID, book.AUTHOR_ID FROM book ORDER BY book.TITLE ASC) AS subCriteriaAlias GROUP BY subCriteriaAlias.AUTHOR_ID";
     }
     $params = array();
     $this->assertCriteriaTranslation($c, $sql, $params, 'addSubQueryCriteriaInFrom() combines two queries successfully');
 }
Esempio n. 8
0
 public function testSubQueryExplicit()
 {
     $subCriteria = new BookQuery();
     BookTableMap::addSelectColumns($subCriteria);
     $subCriteria->orderByTitle(Criteria::ASC);
     $c = new BookQuery();
     BookTableMap::addSelectColumns($c, 'subCriteriaAlias');
     $c->addSelectQuery($subCriteria, 'subCriteriaAlias', false);
     $c->groupBy('subCriteriaAlias.AuthorId');
     if ($this->isDb('pgsql')) {
         $sql = $this->getSql("SELECT subCriteriaAlias.id, subCriteriaAlias.title, subCriteriaAlias.isbn, subCriteriaAlias.price, subCriteriaAlias.publisher_id, subCriteriaAlias.author_id FROM (SELECT book.id, book.title, book.isbn, book.price, book.publisher_id, book.author_id FROM book ORDER BY book.title ASC) AS subCriteriaAlias GROUP BY subCriteriaAlias.author_id,subCriteriaAlias.id,subCriteriaAlias.title,subCriteriaAlias.isbn,subCriteriaAlias.price,subCriteriaAlias.publisher_id");
     } else {
         $sql = $this->getSql("SELECT subCriteriaAlias.id, subCriteriaAlias.title, subCriteriaAlias.isbn, subCriteriaAlias.price, subCriteriaAlias.publisher_id, subCriteriaAlias.author_id FROM (SELECT book.id, book.title, book.isbn, book.price, book.publisher_id, book.author_id FROM book ORDER BY book.title ASC) AS subCriteriaAlias GROUP BY subCriteriaAlias.author_id");
     }
     $params = array();
     $this->assertCriteriaTranslation($c, $sql, $params, 'addSubQueryCriteriaInFrom() combines two queries successfully');
 }
 public function testWithAliasAddsSelectColumns()
 {
     $c = new TestableModelCriteria('bookstore', 'Propel\\Tests\\Bookstore\\Book');
     BookTableMap::addSelectColumns($c);
     $c->join('Propel\\Tests\\Bookstore\\Book.Author a');
     $c->with('a');
     $expectedColumns = array(BookTableMap::COL_ID, BookTableMap::COL_TITLE, BookTableMap::COL_ISBN, BookTableMap::COL_PRICE, BookTableMap::COL_PUBLISHER_ID, BookTableMap::COL_AUTHOR_ID, 'a.id', 'a.first_name', 'a.last_name', 'a.email', 'a.age');
     $this->assertEquals($expectedColumns, $c->getSelectColumns(), 'with() adds the columns of the related table');
 }
Esempio n. 10
0
 public function testOrderByIgnoreCase()
 {
     $originalDB = Propel::getServiceContainer()->getAdapter();
     Propel::getServiceContainer()->setAdapter(Propel::getServiceContainer()->getDefaultDatasource(), new MysqlAdapter());
     $criteria = new Criteria();
     $criteria->setIgnoreCase(true);
     $criteria->addAscendingOrderByColumn(BookTableMap::TITLE);
     BookTableMap::addSelectColumns($criteria);
     $params = array();
     $sql = $criteria->createSelectSql($params);
     $expectedSQL = 'SELECT book.ID, book.TITLE, book.ISBN, book.PRICE, book.PUBLISHER_ID, book.AUTHOR_ID, UPPER(book.TITLE) FROM `book` ORDER BY UPPER(book.TITLE) ASC';
     $this->assertEquals($expectedSQL, $sql);
     Propel::getServiceContainer()->setAdapter(Propel::getServiceContainer()->getDefaultDatasource(), $originalDB);
 }
 public function testWithAliasAddsSelectColumns()
 {
     $c = new TestableModelCriteria('bookstore', 'Propel\\Tests\\Bookstore\\Book');
     BookTableMap::addSelectColumns($c);
     $c->join('Propel\\Tests\\Bookstore\\Book.Author a');
     $c->with('a');
     $expectedColumns = array(BookTableMap::ID, BookTableMap::TITLE, BookTableMap::ISBN, BookTableMap::PRICE, BookTableMap::PUBLISHER_ID, BookTableMap::AUTHOR_ID, 'a.ID', 'a.FIRST_NAME', 'a.LAST_NAME', 'a.EMAIL', 'a.AGE');
     $this->assertEquals($expectedColumns, $c->getSelectColumns(), 'with() adds the columns of the related table');
 }
Esempio n. 12
0
 public function testOrderByIgnoreCase()
 {
     $originalDB = Propel::getServiceContainer()->getAdapter();
     Propel::getServiceContainer()->setAdapter(Propel::getServiceContainer()->getDefaultDatasource(), new MysqlAdapter());
     Propel::getServiceContainer()->setDefaultDatasource('bookstore');
     $criteria = new Criteria();
     $criteria->setIgnoreCase(true);
     $criteria->addAscendingOrderByColumn(BookTableMap::COL_TITLE);
     BookTableMap::addSelectColumns($criteria);
     $params = [];
     $sql = $criteria->createSelectSql($params);
     $expectedSQL = 'SELECT book.id, book.title, book.isbn, book.price, book.publisher_id, book.author_id, UPPER(book.title) FROM book ORDER BY UPPER(book.title) ASC';
     $this->assertEquals($expectedSQL, $sql);
     Propel::getServiceContainer()->setAdapter(Propel::getServiceContainer()->getDefaultDatasource(), $originalDB);
 }