/** * Process array condition * * @param AbstractArrayOperatorNode $node Query node * @return AbstractArrayOperatorNode */ private function processArrayNode(AbstractArrayOperatorNode $node) { $copy = clone $node; $copy->setValues(array_map([$this, 'getDbRefValue'], $node->getValues())); return $copy; }
/** * Make string with conditions for ArrayOperatorNode * * @param AbstractArrayOperatorNode $node * @return string */ public function makeArrayOperator(AbstractArrayOperatorNode $node) { $nodeName = $node->getNodeName(); if (!isset($this->literals['ArrayOperator'][$nodeName])) { throw new DataStoresException('The Array Operator not suppoted: ' . $nodeName); } $arrayValues = $node->getValues(); $strQuery = $this->literals['ArrayOperator'][$nodeName]['before']; foreach ($arrayValues as $value) { /* @var $queryNode AbstractQueryNode */ $strQuery = $strQuery . $this->prepareFildValue($value) . $this->literals['ArrayOperator'][$nodeName]['between']; } $strQuery = rtrim($strQuery, $this->literals['ArrayOperator'][$nodeName]['between']); $strQuery = $strQuery . $this->literals['ArrayOperator'][$nodeName]['after']; return $strQuery; }
private function visitArrayNode(Node\Query\AbstractArrayOperatorNode $node, SqlBuilder $sqlBuilder) { static $operators = ['in' => 'IN', 'out' => 'NOT IN']; if (!isset($operators[$node->getNodeName()])) { throw new \LogicException(sprintf('Unknown array node "%s"', $node->getNodeName())); } $sqlBuilder->addWhereCondition($node->getField(), $node->getValues(), $operators[$node->getNodeName()]); }