Example #1
0
 public function checkComplexQuery($expr)
 {
     $left = $expr->left();
     $right = $expr->right();
     $oCriteria = array();
     if (DefaultOpCollection::isBoolean($expr)) {
         //$query = '(' . $this->buildComplexQuery($left) . ' ' . $expr->op() . ' ' . $this->buildComplexQuery($right)  . ')';
         $iCriteria = $this->checkComplexQuery($left);
         if (!empty($iCriteria)) {
             //$oCriteria = $iCriteria;
             $oCriteria[] = $iCriteria;
         }
         $iCriteria = $this->checkComplexQuery($right);
         if (!empty($iCriteria)) {
             //$oCriteria = array_merge($oCriteria, $iCriteria);
             $oCriteria[] = $iCriteria;
         }
         /*if ($expr->not())
         		{
         			$query = "NOT $query";
         		}*/
     } else {
         $fieldname = $left->getField();
         $value = addslashes($right->getValue());
         //$not = $expr->not()?' NOT ':'';
         if (empty($value)) {
             // minor hack to prevent the case of 'field:'. results are no 'field:""'
             $value = ' ';
         }
         $rsField = DBUtil::getResultArray("SELECT * FROM document_fields WHERE name = \"{$fieldname}\";");
         if ($rsField[0]['data_type'] == 'LARGE TEXT') {
             $iCriteria = array();
             $iCriteria[0] = array();
             $iCriteria[0]['field'] = $fieldname;
             $iCriteria[0]['value'] = $value;
             $iCriteria[0]['not'] = $expr->not();
             $oCriteria[] = $iCriteria[0];
         }
         //global $default;
         //$default->log->debug("FIELD-TYPE: " . $iCriteria[0]['field']);
         //$default->log->debug("FIELD-TYPE: " . $oCriteria[0]['field']);
         /*if (strpos($value, ' ') === false)
           {
           	$query = "$not$fieldname:$value";
           }
           else
           {
           	$query = "$not$fieldname:\"$value\"";
           }*/
     }
     return $oCriteria;
 }
 public function is_valid()
 {
     return DefaultOpCollection::validateParent($this, DefaultOpCollection::$is);
 }
Example #3
0
 /**
  * Enter description here...
  *
  * @param OpExpr $left
  * @param ExprOp $op
  * @param OpExpr $right
  * @param boolean $not
  */
 public function transform(&$left, &$op, &$right, &$not)
 {
     if (!$left->isOpExpr() || !$right->isOpExpr() || !DefaultOpCollection::isBoolean($op)) {
         return;
     }
     if ($left->isTextOnly() && $right->isDBonly()) {
         // we just swap the items around, to ease other transformations
         $tmp = $left;
         $left = $right;
         $right = $tmp;
         return;
     }
     if ($op != $right->op() || !DefaultOpCollection::isBoolean($right)) {
         return;
     }
     if ($op == ExprOp::OP_OR && ($not || $right->not())) {
         // NOTE: we can't transform. e.g.
         // db or !(db or txt) => db or !db and !txt
         // so nothing to do
         // BUT: db and !(db and txt) => db and !db and !txt
         return;
     }
     $rightLeft = $right->left();
     $rightRight = $right->right();
     if ($left->isDBonly() && $rightLeft->isDBonly()) {
         $newLeft = new OpExpr($left, $op, $rightLeft);
         $right = $rightRight;
         $left = $newLeft;
         return;
     }
     if ($left->isTextOnly() && $rightRight->isTextOnly()) {
         $newRight = new OpExpr($left, $op, $rightRight);
         $left = $rightLeft;
         $right = $newRight;
         return;
     }
 }