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()]); }
/** * Make string with conditions for ArrayOperatorNode * * @param AbstractArrayOperatorNode $node * @return string * @throws DataStoreException */ public function makeArrayOperator(AbstractArrayOperatorNode $node) { $nodeName = $node->getNodeName(); if (!isset($this->literals['ArrayOperator'][$nodeName])) { throw new DataStoreException('The Array Operator not suppoted: ' . $nodeName); } $arrayValues = $node->getValues(); $strQuery = $this->literals['ArrayOperator'][$nodeName]['before'] . $this->prepareFieldName($node->getField()) . $this->literals['ArrayOperator'][$nodeName]['between']; foreach ($arrayValues as $value) { $strQuery = $strQuery . $this->prepareFieldValue($value) . $this->literals['ArrayOperator'][$nodeName]['delimiter']; } $strQuery = rtrim($strQuery, $this->literals['ArrayOperator'][$nodeName]['delimiter']); $strQuery = $strQuery . $this->literals['ArrayOperator'][$nodeName]['after']; return $strQuery; }