Example #1
0
 /**
  * Test the Criteria::addJoinMultiple() method with join type and operator
  *
  * @link       http://propel.phpdb.org/trac/ticket/606
  */
 public function testAddJoinMultipleWithJoinTypeAndOperator()
 {
     $c = new Criteria();
     $c->clearSelectColumns()->addMultipleJoin(array(array('TABLE_A.FOO_ID', 'TABLE_B.ID', Criteria::GREATER_EQUAL), array('TABLE_A.BAR', 'TABLE_B.BAZ', Criteria::LESS_THAN)), Criteria::LEFT_JOIN)->addSelectColumn("TABLE_A.ID");
     $expect = 'SELECT TABLE_A.ID FROM TABLE_A ' . 'LEFT JOIN TABLE_B ON (TABLE_A.FOO_ID>=TABLE_B.ID AND TABLE_A.BAR<TABLE_B.BAZ)';
     $params = array();
     $result = $c->createSelectSql($params);
     $this->assertEquals($expect, $result);
 }
Example #2
0
 /**
  * Ensures uniqueness of select column names by turning them all into aliases
  * This is necessary for queries on more than one table when the tables share a column name
  *
  * @see http://propel.phpdb.org/trac/ticket/795
  *
  * @param  Criteria $criteria
  * @return Criteria The input, with Select columns replaced by aliases
  */
 public function turnSelectColumnsToAliases(Criteria $criteria)
 {
     $selectColumns = $criteria->getSelectColumns();
     // clearSelectColumns also clears the aliases, so get them too
     $asColumns = $criteria->getAsColumns();
     $criteria->clearSelectColumns();
     $columnAliases = $asColumns;
     // add the select columns back
     foreach ($selectColumns as $clause) {
         // Generate a unique alias
         $baseAlias = preg_replace('/\\W/', '_', $clause);
         $alias = $baseAlias;
         // If it already exists, add a unique suffix
         $i = 0;
         while (isset($columnAliases[$alias])) {
             $i++;
             $alias = $baseAlias . '_' . $i;
         }
         // Add it as an alias
         $criteria->addAsColumn($alias, $clause);
         $columnAliases[$alias] = $clause;
     }
     // Add the aliases back, don't modify them
     foreach ($asColumns as $name => $clause) {
         $criteria->addAsColumn($name, $clause);
     }
     return $criteria;
 }
Example #3
0
 /**
  * Test the Criteria::addJoinMultiple() method with join type and operator
  *
  * @link       http://propel.phpdb.org/trac/ticket/606
  */
 public function testAddJoinMultipleWithJoinTypeAndOperator()
 {
     $c = new Criteria();
     $c->clearSelectColumns()->addMultipleJoin([['TABLE_A.FOO_ID', 'TABLE_B.id', Criteria::GREATER_EQUAL], ['TABLE_A.BAR', 'TABLE_B.BAZ', Criteria::LESS_THAN]], Criteria::LEFT_JOIN)->addSelectColumn("TABLE_A.id");
     $expect = $this->getSql('SELECT TABLE_A.id FROM TABLE_A ' . 'LEFT JOIN TABLE_B ON (TABLE_A.FOO_ID>=TABLE_B.id AND TABLE_A.BAR<TABLE_B.BAZ)');
     $params = [];
     $result = $c->createSelectSql($params);
     $this->assertEquals($expect, $result);
 }