Ejemplo n.º 1
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
  * Moved from BasePeer to PdoAdapter and turned from static to non static
  *
  * @see http://propel.phpdb.org/trac/ticket/795
  *
  * @param     Propel\Runtime\Query\Criteria  $criteria
  * @return    Propel\Runtime\Query\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;
 }
Ejemplo n.º 2
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 = BasePeer::createSelectSql($c, $params);
     $this->assertEquals($expect, $result);
 }