/**
  * Make string with conditions for ScalarOperatorNode
  *
  * @param AbstractScalarOperatorNode $node
  * @return string
  * @throws DataStoreException
  */
 public function makeScalarOperator(AbstractScalarOperatorNode $node)
 {
     $nodeName = $node->getNodeName();
     if (!isset($this->literals['ScalarOperator'][$nodeName])) {
         throw new DataStoreException('The Scalar Operator not suppoted: ' . $nodeName);
     }
     $value = $node->getValue() instanceof \DateTime ? $node->getValue()->format("Y-m-d") : $node->getValue();
     $strQuery = $this->literals['ScalarOperator'][$nodeName]['before'] . $this->prepareFieldName($node->getField()) . $this->literals['ScalarOperator'][$nodeName]['between'] . $this->prepareFieldValue($value) . $this->literals['ScalarOperator'][$nodeName]['after'];
     return $strQuery;
 }
 /**
  * Make string with conditions for ScalarOperatorNode
  *
  * @param AbstractScalarOperatorNode $node
  * @return string
  * @throws DataStoreException
  */
 public function makeScalarOperator(AbstractScalarOperatorNode $node)
 {
     $nodeName = $node->getNodeName();
     if (!isset($this->literals['ScalarOperator'][$nodeName])) {
         throw new DataStoreException('The Scalar Operator not suppoted: ' . $nodeName);
     }
     $value = $node->getValue() instanceof \DateTime ? $node->getValue()->format("Y-m-d") : $node->getValue();
     $strQuery = $this->literals['ScalarOperator'][$nodeName]['before'] . $this->prepareFieldName($node->getField());
     if (is_null($value)) {
         if ($nodeName === 'eq') {
             $strQuery .= "IS NULL";
         } else {
             if ($nodeName === 'ne') {
                 $strQuery .= "IS NOT NULL";
             } else {
                 throw new DataStoreException("Can't use `null` for " . $nodeName . ". Only for `eq` or `ne`");
             }
         }
     } else {
         $strQuery .= $this->literals['ScalarOperator'][$nodeName]['between'] . $this->prepareFieldValue($value);
     }
     $strQuery .= $this->literals['ScalarOperator'][$nodeName]['after'];
     return $strQuery;
 }
 /**
  * Process scalar condition
  *
  * @param AbstractScalarOperatorNode $node Query node
  * @return AbstractScalarOperatorNode
  */
 private function processScalarNode(AbstractScalarOperatorNode $node)
 {
     $copy = clone $node;
     $copy->setValue($this->getDbRefValue($node->getValue()));
     return $copy;
 }
 private function visitScalarNode(Node\Query\AbstractScalarOperatorNode $node, SqlBuilder $sqlBuilder)
 {
     static $operators = ['like' => 'LIKE', 'eq' => '=', 'ne' => '<>', 'lt' => '<', 'gt' => '>', 'le' => '<=', 'ge' => '>='];
     if (!isset($operators[$node->getNodeName()])) {
         throw new \LogicException(sprintf('Unknown scalar node "%s"', $node->getNodeName()));
     }
     $value = $node->getValue();
     if ($value instanceof Glob) {
         $value = $value->toLike();
     } elseif ($value instanceof \DateTimeInterface) {
         $value = $value->format(DATE_ISO8601);
     }
     $sqlBuilder->addWhereCondition($node->getField(), $value, $operators[$node->getNodeName()]);
 }