示例#1
0
 /**
  * process subselects of query
  *
  * @param SelectStatement     $AST
  * @param AclConditionStorage $aclCondition
  */
 protected function processSubRequests(SelectStatement $AST, AclConditionStorage $aclCondition)
 {
     if (!is_null($aclCondition->getSubRequests())) {
         $subRequests = $aclCondition->getSubRequests();
         foreach ($subRequests as $subRequest) {
             /** @var SubRequestAclConditionStorage $subRequest */
             $conditionalExpression = $AST->whereClause->conditionalExpression;
             if (isset($conditionalExpression->conditionalFactors)) {
                 $subselect = $conditionalExpression->conditionalFactors[$subRequest->getFactorId()]->simpleConditionalExpression->subselect;
             } elseif (isset($conditionalExpression->conditionalTerms)) {
                 $subselect = $conditionalExpression->conditionalTerms[$subRequest->getFactorId()]->simpleConditionalExpression->subselect;
             } else {
                 $subselect = $conditionalExpression->simpleConditionalExpression->subselect;
             }
             $whereConditions = $subRequest->getWhereConditions();
             if (!is_null($whereConditions) && count($whereConditions)) {
                 $this->addAclToWhereClause($subselect, $whereConditions);
             }
             $joinConditions = $subRequest->getJoinConditions();
             if (!is_null($joinConditions) && count($joinConditions)) {
                 $this->addAclToJoinClause($subselect, $joinConditions);
             }
         }
     }
 }
示例#2
0
 /**
  * process subselects of query
  *
  * @param SelectStatement     $AST
  * @param AclConditionStorage $aclCondition
  */
 protected function processSubRequests(SelectStatement $AST, AclConditionStorage $aclCondition)
 {
     if (!is_null($aclCondition->getSubRequests())) {
         $subRequests = $aclCondition->getSubRequests();
         foreach ($subRequests as $subRequest) {
             /** @var SubRequestAclConditionStorage $subRequest */
             $conditionalExpression = $AST->whereClause->conditionalExpression;
             if (isset($conditionalExpression->conditionalFactors)) {
                 $factorId = $subRequest->getFactorId();
                 foreach ($conditionalExpression->conditionalFactors as $factor) {
                     $subSelect = $this->getSubSelectFromFactor($factor, $factorId);
                     if ($subSelect) {
                         $this->addRequestConditions($subSelect, $subRequest);
                     }
                 }
             } elseif (isset($conditionalExpression->simpleConditionalExpression)) {
                 $subSelect = $conditionalExpression->simpleConditionalExpression->subselect;
                 $this->addRequestConditions($subSelect, $subRequest);
             }
         }
     }
 }
 public function testStorage()
 {
     $whereConditions = [new AclCondition('test', 'id', [])];
     $joinConditions = [new JoinAclCondition('testJoin', 'id', [])];
     $subRequests = [new SubRequestAclConditionStorage([], [])];
     $storage = new AclConditionStorage([], []);
     $this->assertTrue($storage->isEmpty());
     $storage->setJoinConditions($joinConditions);
     $this->assertFalse($storage->isEmpty());
     $storage->setJoinConditions([]);
     $storage->setWhereConditions($whereConditions);
     $this->assertFalse($storage->isEmpty());
     $storage->setWhereConditions([]);
     $storage->setSubRequests($subRequests);
     $this->assertFalse($storage->isEmpty());
     $storage->setWhereConditions($whereConditions);
     $storage->setJoinConditions($joinConditions);
     $this->assertEquals($whereConditions, $storage->getWhereConditions());
     $this->assertEquals($joinConditions, $storage->getJoinConditions());
     $this->assertEquals($subRequests, $storage->getSubRequests());
 }