public function __construct(OqlObjectQuery $oLeftQuery, OqlQuery $oRightQueryOrUnion)
 {
     $this->aQueries[] = $oLeftQuery;
     if ($oRightQueryOrUnion instanceof OqlUnionQuery) {
         foreach ($oRightQueryOrUnion->GetQueries() as $oSingleQuery) {
             $this->aQueries[] = $oSingleQuery;
         }
     } else {
         $this->aQueries[] = $oRightQueryOrUnion;
     }
 }
 public function InitFromOqlQuery(OqlQuery $oOqlQuery, $sQuery)
 {
     $oModelReflection = new ModelReflectionRuntime();
     $sClass = $oOqlQuery->GetClass($oModelReflection);
     $sClassAlias = $oOqlQuery->GetClassAlias();
     $aAliases = array($sClassAlias => $sClass);
     // Maintain an array of filters, because the flat list is in fact referring to a tree
     // And this will be an easy way to dispatch the conditions
     // $this will be referenced by the other filters, or the other way around...
     $aJoinItems = array($sClassAlias => $this);
     $aJoinSpecs = $oOqlQuery->GetJoins();
     if (is_array($aJoinSpecs)) {
         foreach ($aJoinSpecs as $oJoinSpec) {
             $sJoinClass = $oJoinSpec->GetClass();
             $sJoinClassAlias = $oJoinSpec->GetClassAlias();
             // Assumption: ext key on the left only !!!
             // normalization should take care of this
             $oLeftField = $oJoinSpec->GetLeftField();
             $sFromClass = $oLeftField->GetParent();
             $sExtKeyAttCode = $oLeftField->GetName();
             $oRightField = $oJoinSpec->GetRightField();
             $sToClass = $oRightField->GetParent();
             $aAliases[$sJoinClassAlias] = $sJoinClass;
             $aJoinItems[$sJoinClassAlias] = new DBObjectSearch($sJoinClass, $sJoinClassAlias);
             if ($sFromClass == $sJoinClassAlias) {
                 $oReceiver = $aJoinItems[$sToClass];
                 $oNewComer = $aJoinItems[$sFromClass];
                 $aAliasTranslation = array();
                 $oReceiver->AddCondition_ReferencedBy_InNameSpace($oNewComer, $sExtKeyAttCode, $oReceiver->m_aClasses, $aAliasTranslation);
             } else {
                 $sOperator = $oJoinSpec->GetOperator();
                 switch ($sOperator) {
                     case '=':
                         $iOperatorCode = TREE_OPERATOR_EQUALS;
                         break;
                     case 'BELOW':
                         $iOperatorCode = TREE_OPERATOR_BELOW;
                         break;
                     case 'BELOW_STRICT':
                         $iOperatorCode = TREE_OPERATOR_BELOW_STRICT;
                         break;
                     case 'NOT_BELOW':
                         $iOperatorCode = TREE_OPERATOR_NOT_BELOW;
                         break;
                     case 'NOT_BELOW_STRICT':
                         $iOperatorCode = TREE_OPERATOR_NOT_BELOW_STRICT;
                         break;
                     case 'ABOVE':
                         $iOperatorCode = TREE_OPERATOR_ABOVE;
                         break;
                     case 'ABOVE_STRICT':
                         $iOperatorCode = TREE_OPERATOR_ABOVE_STRICT;
                         break;
                     case 'NOT_ABOVE':
                         $iOperatorCode = TREE_OPERATOR_NOT_ABOVE;
                         break;
                     case 'NOT_ABOVE_STRICT':
                         $iOperatorCode = TREE_OPERATOR_NOT_ABOVE_STRICT;
                         break;
                 }
                 $oReceiver = $aJoinItems[$sFromClass];
                 $oNewComer = $aJoinItems[$sToClass];
                 $aAliasTranslation = array();
                 $oReceiver->AddCondition_PointingTo_InNameSpace($oNewComer, $sExtKeyAttCode, $oReceiver->m_aClasses, $aAliasTranslation, $iOperatorCode);
             }
         }
     }
     // Check and prepare the select information
     $this->m_aSelectedClasses = array();
     foreach ($oOqlQuery->GetSelectedClasses() as $oClassDetails) {
         $sClassToSelect = $oClassDetails->GetValue();
         $this->m_aSelectedClasses[$sClassToSelect] = $aAliases[$sClassToSelect];
     }
     $this->m_aClasses = $aAliases;
     $oConditionTree = $oOqlQuery->GetCondition();
     if ($oConditionTree instanceof Expression) {
         $this->m_oSearchCondition = $this->OQLExpressionToCondition($sQuery, $oConditionTree, $aAliases);
     }
 }
 /**
  * @return OqlSelectClauseTest
  **/
 private function assertCriteria(OqlQuery $query, Criteria $criteria)
 {
     $dialect = PostgresDialect::me();
     $this->assertEquals($query->toCriteria()->toDialectString($dialect), $criteria->toDialectString($dialect));
     return $this;
 }
 public function __construct($oClass, $oClassAlias, $oCondition = null, $aJoins = null, $aSelect = null)
 {
     $this->m_aSelect = $aSelect;
     $this->m_oClass = $oClass;
     $this->m_oClassAlias = $oClassAlias;
     parent::__construct($oCondition, $aJoins);
 }
 /**
  * @return OqlSelectClauseTest
  **/
 private function assertCriteria(OqlQuery $query, Criteria $criteria)
 {
     $dialect = $this->getDbByType('PgSQL')->getDialect();
     $this->assertEquals($query->toCriteria()->toDialectString($dialect), $criteria->toDialectString($dialect));
     return $this;
 }