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;
 }