311 $arRecursiveJoins = $arJoins;
312 $value = $this->
GetQueryEx($value, $arRecursiveJoins, $level+1);
314 $result[] =
"(".$value.
"\n".str_repeat(
"\t", $level).
")";
316 foreach($arRecursiveJoins as $TABLE_ALIAS=>$bLeftJoin)
321 $arJoins[$TABLE_ALIAS] |=
true;
323 $arJoins[$TABLE_ALIAS] &=
true;
328 $arJoins[$TABLE_ALIAS] |=
false;
330 $arJoins[$TABLE_ALIAS] &=
false;
337 $key = mb_strtoupper($operation[
"FIELD"]);
338 $operation = $operation[
"OPERATION"];
340 if(isset($this->fields[
$key]))
342 $FIELD_NAME = $this->fields[
$key][
"FIELD_NAME"];
343 $FIELD_TYPE = $this->fields[
$key][
"FIELD_TYPE"];
345 if (!isset($this->c_joins[
$key]))
347 $this->c_joins[
$key] = 0;
349 $this->c_joins[
$key]++;
351 if (!empty($this->fields[
$key][
"TABLE_ALIAS"]))
355 ($operation==
"I" || $operation==
"E" || $operation==
"S" || $operation==
"M")
359 ($FIELD_TYPE==
"int" && intval($value)==0)
360 || ($FIELD_TYPE==
"double" && doubleval($value)==0)
367 ($operation==
"NI" || $operation==
"N" || $operation==
"NS" || $operation==
"NB" || $operation==
"NM")
368 && !is_object($value)
372 ($FIELD_TYPE==
"int" && intval($value)!=0)
373 || ($FIELD_TYPE==
"double" && doubleval($value)!=0)
374 || ($FIELD_TYPE!=
"int" && $FIELD_TYPE!=
"double" && is_scalar($value) && $value <>
'')
381 $arJoins[$this->fields[
$key][
"TABLE_ALIAS"]] |=
true;
383 $arJoins[$this->fields[
$key][
"TABLE_ALIAS"]] &=
true;
388 $arJoins[$this->fields[
$key][
"TABLE_ALIAS"]] |=
false;
390 $arJoins[$this->fields[
$key][
"TABLE_ALIAS"]] &=
false;
409 if($FIELD_TYPE ==
"date" || $this->fields[
$key][
"USER_TYPE_ID"] ==
"date")
419 $res = call_user_func_array($this->fields[
$key][
"CALLBACK"],
array(
435 return "\n".str_repeat(
"\t", $level).($inverted ?
'NOT (' :
'').implode(
"\n".str_repeat(
"\t", $level).$logic.
" ",
$result).($inverted ?
')' :
'');
468 if (is_array($value))
469 $FIELD_VALUE = array_map(
"intval", $value);
470 elseif (is_object($value))
471 $FIELD_VALUE = $value;
473 $FIELD_VALUE = intval($value);
482 if (is_array($FIELD_VALUE))
484 if (!empty($FIELD_VALUE))
485 $result[] =
"(".$this->_NumberIN($FIELD_NAME, $FIELD_VALUE).
")";
490 $this->bDistinctReqired =
true;
492 elseif (is_object($FIELD_VALUE))
493 $result[] = $FIELD_NAME.
" = ".$FIELD_VALUE->compile();
494 elseif ($FIELD_VALUE == 0 && $operation !==
"SE")
495 $result[] =
"(".$FIELD_NAME.
" IS NULL OR ".$FIELD_NAME.
" = 0)";
497 $result[] = $FIELD_NAME.
" = ".$FIELD_VALUE;
503 if (is_array($FIELD_VALUE))
505 if (!empty($FIELD_VALUE))
506 $result[] =
"(".$this->_NumberNotIN($FIELD_NAME, $FIELD_VALUE).
")";
512 $result[] = $FIELD_NAME.
" <> ".$FIELD_VALUE->compile();
514 elseif ($FIELD_VALUE == 0)
515 $result[] =
"(".$FIELD_NAME.
" IS NOT NULL AND ".$FIELD_NAME.
" <> 0)";
517 $result[] = $FIELD_NAME.
" <> ".$FIELD_VALUE;
520 $this->bDistinctReqired =
true;
523 if (is_array($FIELD_VALUE))
525 if (isset($FIELD_VALUE[0]))
527 $result[] = $FIELD_NAME.
" > ".$FIELD_VALUE[0];
536 $result[] = $FIELD_NAME.
" > ".$FIELD_VALUE->compile();
539 $result[] = $FIELD_NAME.
" > ".$FIELD_VALUE;
542 $this->bDistinctReqired =
true;
545 if (is_array($FIELD_VALUE))
547 if (isset($FIELD_VALUE[0]))
549 $result[] = $FIELD_NAME.
" < ".$FIELD_VALUE[0];
558 $result[] = $FIELD_NAME.
" < ".$FIELD_VALUE->compile();
561 $result[] = $FIELD_NAME.
" < ".$FIELD_VALUE;
564 $this->bDistinctReqired =
true;
567 if (is_array($FIELD_VALUE))
569 if (isset($FIELD_VALUE[0]))
571 $result[] = $FIELD_NAME.
" >= ".$FIELD_VALUE[0];
580 $result[] = $FIELD_NAME.
" >= ".$FIELD_VALUE->compile();
583 $result[] = $FIELD_NAME.
" >= ".$FIELD_VALUE;
586 $this->bDistinctReqired =
true;
589 if (is_array($FIELD_VALUE))
591 if (isset($FIELD_VALUE[0]))
593 $result[] = $FIELD_NAME.
" <= ".$FIELD_VALUE[0];
602 $result[] = $FIELD_NAME.
" <= ".$FIELD_VALUE->compile();
605 $result[] = $FIELD_NAME.
" <= ".$FIELD_VALUE;
608 $this->bDistinctReqired =
true;
611 if (is_array($FIELD_VALUE) &&
count($FIELD_VALUE) > 1)
612 $result[] = $FIELD_NAME.
" between ".$FIELD_VALUE[0].
" AND ".$FIELD_VALUE[1];
615 $this->bDistinctReqired =
true;
618 if (is_array($FIELD_VALUE) &&
count($FIELD_VALUE) > 1)
619 $result[] = $FIELD_NAME.
" not between ".$FIELD_VALUE[0].
" AND ".$FIELD_VALUE[1];
622 $this->bDistinctReqired =
true;
625 if(is_object($FIELD_VALUE))
626 $result[] = $FIELD_NAME.
" IN (".$FIELD_VALUE->compile().
")";
627 elseif(is_array($FIELD_VALUE))
628 $result[] = $FIELD_NAME.
" IN (".implode(
",", $FIELD_VALUE).
")";
630 $result[] = $FIELD_NAME.
" IN (".$FIELD_VALUE.
")";
633 if(is_object($FIELD_VALUE))
634 $result[] = $FIELD_NAME.
" NOT IN (".$FIELD_VALUE->compile().
")";
635 elseif(is_array($FIELD_VALUE))
636 $result[] = $FIELD_NAME.
" NOT IN (".implode(
",", $FIELD_VALUE).
")";
638 $result[] = $FIELD_NAME.
" NOT IN (".$FIELD_VALUE.
")";
645 if (is_array($value))
648 foreach($value as
$i =>
$val)
650 $FIELD_VALUE[
$i] = doubleval(
$val);
651 if(!is_finite($FIELD_VALUE[
$i]))
653 $FIELD_VALUE[
$i] = 0;
657 elseif (is_object($value))
659 $FIELD_VALUE = $value;
663 $FIELD_VALUE = doubleval($value);
664 if(!is_finite($FIELD_VALUE))
676 if (is_array($FIELD_VALUE))
678 if (!empty($FIELD_VALUE))
679 $result[] =
"(".$this->_NumberIN($FIELD_NAME, $FIELD_VALUE).
")";
684 $this->bDistinctReqired =
true;
686 elseif (is_object($FIELD_VALUE))
687 $result[] = $FIELD_NAME.
" = ".$FIELD_VALUE->compile();
688 elseif ($FIELD_VALUE == 0)
689 $result[] =
"(".$FIELD_NAME.
" IS NULL OR ".$FIELD_NAME.
" = 0)";
691 $result[] = $FIELD_NAME.
" = ".$FIELD_VALUE;
697 if (is_array($FIELD_VALUE))
699 if (!empty($FIELD_VALUE))
700 $result[] =
"(".$this->_NumberNotIN($FIELD_NAME, $FIELD_VALUE).
")";
704 elseif ($FIELD_VALUE == 0)
705 $result[] =
"(".$FIELD_NAME.
" IS NOT NULL AND ".$FIELD_NAME.
" <> 0)";
707 $result[] = $FIELD_NAME.
" <> ".$FIELD_VALUE;
710 $this->bDistinctReqired =
true;
713 if (is_array($FIELD_VALUE))
715 if (isset($FIELD_VALUE[0]))
717 $result[] = $FIELD_NAME.
" > ".$FIELD_VALUE[0];
725 $result[] = $FIELD_NAME.
" > ".$FIELD_VALUE;
728 $this->bDistinctReqired =
true;
731 if (is_array($FIELD_VALUE))
733 if (is_array($FIELD_VALUE))
735 if (isset($FIELD_VALUE[0]))
737 $result[] = $FIELD_NAME.
" < ".$FIELD_VALUE[0];
746 $result[] = $FIELD_NAME.
" < ".$FIELD_VALUE;
749 $this->bDistinctReqired =
true;
752 if (is_array($FIELD_VALUE))
754 if (is_array($FIELD_VALUE))
756 if (isset($FIELD_VALUE[0]))
758 $result[] = $FIELD_NAME.
" >= ".$FIELD_VALUE[0];
767 $result[] = $FIELD_NAME.
" >= ".$FIELD_VALUE;
770 $this->bDistinctReqired =
true;
773 if (is_array($FIELD_VALUE))
775 if (isset($FIELD_VALUE[0]))
777 $result[] = $FIELD_NAME.
" <= ".$FIELD_VALUE[0];
785 $result[] = $FIELD_NAME.
" <= ".$FIELD_VALUE;
788 $this->bDistinctReqired =
true;
791 if (is_array($FIELD_VALUE) &&
count($FIELD_VALUE)>1)
792 $result[] = $FIELD_NAME.
" between ".$FIELD_VALUE[0].
" AND ".$FIELD_VALUE[1];
795 $this->bDistinctReqired =
true;
798 if (is_array($FIELD_VALUE) &&
count($FIELD_VALUE)>1)
799 $result[] = $FIELD_NAME.
" not between ".$FIELD_VALUE[0].
" AND ".$FIELD_VALUE[1];
802 $this->bDistinctReqired =
true;
805 $result[] = $FIELD_NAME.
" IN (".$FIELD_VALUE->compile().
")";
808 $result[] = $FIELD_NAME.
" NOT IN (".$FIELD_VALUE->compile().
")";
817 if (is_array($value))
819 $FIELD_VALUE =
array();
820 if ($operation==
"S" || $operation==
"NS")
822 foreach ($value as
$val)
823 $FIELD_VALUE[] = $this->
ForLIKE(mb_strtoupper((
string)
$val));
827 foreach ($value as
$val)
828 $FIELD_VALUE[] =
$DB->ForSQL((
string)
$val);
831 elseif (is_object($value))
833 $FIELD_VALUE = $value;
837 if ($operation==
"S" || $operation==
"NS")
838 $FIELD_VALUE = $this->
ForLIKE(mb_strtoupper((
string)$value));
840 $FIELD_VALUE =
$DB->ForSQL((
string)$value);
846 if (is_array($FIELD_VALUE))
850 $this->bDistinctReqired =
true;
852 elseif (is_object($FIELD_VALUE))
856 elseif ($FIELD_VALUE ==
'')
862 if (is_array($FIELD_VALUE))
863 $result[] =
"(".$this->_Upper($FIELD_NAME).
" like upper('".implode(
"') OR ".$this->
_Upper($FIELD_NAME).
" like upper('", $FIELD_VALUE).
"'))";
864 elseif (is_object($FIELD_VALUE))
866 elseif($FIELD_VALUE ==
'')
871 if (preg_match(
"/[^0-9]/", $FIELD_VALUE))
872 $result[] = $this->
_Upper($FIELD_NAME).
" like upper('".$FIELD_VALUE.
"')";
878 $this->bDistinctReqired =
true;
881 if (is_array($FIELD_VALUE))
882 $result[] =
"(".$this->_Upper($FIELD_NAME).
" like '%".implode(
"%' ESCAPE '!' OR ".$this->
_Upper($FIELD_NAME).
" like '%", $FIELD_VALUE).
"%' ESCAPE '!')";
883 elseif (is_object($FIELD_VALUE))
884 $result[] = $this->
_Upper($FIELD_NAME).
" like ".$FIELD_VALUE->compile().
" ESCAPE '!'";
885 elseif ($FIELD_VALUE ==
'')
888 $result[] = $this->
_Upper($FIELD_NAME).
" like '%".$FIELD_VALUE.
"%' ESCAPE '!'";
891 $this->bDistinctReqired =
true;
894 if (is_array($FIELD_VALUE))
895 $result[] =
"(".$FIELD_NAME.
" like '".implode(
"' OR ".$FIELD_NAME.
" like '", $FIELD_VALUE).
"')";
896 elseif (is_object($FIELD_VALUE))
898 elseif ($FIELD_VALUE ==
'')
903 if (preg_match(
"/[^0-9]/", $FIELD_VALUE))
904 $result[] = $FIELD_NAME.
" like '".$FIELD_VALUE.
"'";
910 $this->bDistinctReqired =
true;
913 if (is_array($FIELD_VALUE))
915 elseif (is_object($FIELD_VALUE))
917 elseif ($FIELD_VALUE ==
'')
923 $this->bDistinctReqired =
true;
926 if (is_array($FIELD_VALUE))
927 $result[] =
"(".$this->_Upper($FIELD_NAME).
" not like upper('".implode(
"') AND ".$this->
_Upper($FIELD_NAME).
" not like upper('", $FIELD_VALUE).
"'))";
928 elseif (is_object($FIELD_VALUE))
929 $result[] = $this->
_Upper($FIELD_NAME).
" not like ".$FIELD_VALUE->compile();
930 elseif ($FIELD_VALUE ==
'')
933 $result[] = $this->
_Upper($FIELD_NAME).
" not like upper('".$FIELD_VALUE.
"')";
936 $this->bDistinctReqired =
true;
939 if (is_array($FIELD_VALUE))
940 $result[] =
"(".$this->_Upper($FIELD_NAME).
" not like '%".implode(
"%' ESCAPE '!' AND ".$this->
_Upper($FIELD_NAME).
" not like '%", $FIELD_VALUE).
"%' ESCAPE '!')";
941 elseif (is_object($FIELD_VALUE))
942 $result[] = $this->
_Upper($FIELD_NAME).
" not like ".$FIELD_VALUE->compile();
943 elseif ($FIELD_VALUE ==
'')
946 $result[] = $this->
_Upper($FIELD_NAME).
" not like '%".$FIELD_VALUE.
"%' ESCAPE '!'";
949 $this->bDistinctReqired =
true;
952 if(is_array($FIELD_VALUE))
953 $result[] =
"(".$FIELD_NAME.
" not like '".implode(
"' AND ".$FIELD_NAME.
" not like '", $FIELD_VALUE).
"')";
954 elseif (is_object($FIELD_VALUE))
955 $result[] = $FIELD_NAME.
" not like ".$FIELD_VALUE->compile();
956 elseif ($FIELD_VALUE ==
'')
959 $result[] = $FIELD_NAME.
" not like '".$FIELD_VALUE.
"'";
962 $this->bDistinctReqired =
true;
965 if (is_array($FIELD_VALUE))
967 if (isset($FIELD_VALUE[0]))
969 $result[] = $FIELD_NAME.
" > '".$FIELD_VALUE[0].
"'";
976 elseif (is_object($FIELD_VALUE))
977 $result[] = $FIELD_NAME.
" > ".$FIELD_VALUE->compile();
979 $result[] = $FIELD_NAME.
" > '".$FIELD_VALUE.
"'";
982 $this->bDistinctReqired =
true;
985 if (is_array($FIELD_VALUE))
987 if (isset($FIELD_VALUE[0]))
989 $result[] = $FIELD_NAME.
" < '".$FIELD_VALUE[0].
"'";
996 elseif (is_object($FIELD_VALUE))
997 $result[] = $FIELD_NAME.
" < ".$FIELD_VALUE->compile();
999 $result[] = $FIELD_NAME.
" < '".$FIELD_VALUE.
"'";
1002 $this->bDistinctReqired =
true;
1005 if (is_array($FIELD_VALUE))
1007 if (isset($FIELD_VALUE[0]))
1009 $result[] = $FIELD_NAME.
" >= '".$FIELD_VALUE[0].
"'";
1016 elseif (is_object($FIELD_VALUE))
1017 $result[] = $FIELD_NAME.
" >= ".$FIELD_VALUE->compile();
1019 $result[] = $FIELD_NAME.
" >= '".$FIELD_VALUE.
"'";
1022 $this->bDistinctReqired =
true;
1025 if (is_array($FIELD_VALUE))
1027 if (isset($FIELD_VALUE[0]))
1029 $result[] = $FIELD_NAME.
" <= '".$FIELD_VALUE[0].
"'";
1036 elseif (is_object($FIELD_VALUE))
1037 $result[] = $FIELD_NAME.
" <= ".$FIELD_VALUE->compile();
1039 $result[] = $FIELD_NAME.
" <= '".$FIELD_VALUE.
"'";
1042 $this->bDistinctReqired =
true;
1045 if (is_array($FIELD_VALUE) &&
count($FIELD_VALUE) > 1)
1046 $result[] = $FIELD_NAME.
" between '".$FIELD_VALUE[0].
"' AND '".$FIELD_VALUE[1].
"'";
1049 $this->bDistinctReqired =
true;
1052 if (is_array($FIELD_VALUE) &&
count($FIELD_VALUE) > 1)
1053 $result[] = $FIELD_NAME.
" not between '".$FIELD_VALUE[0].
"' AND '".$FIELD_VALUE[1].
"'";
1056 $this->bDistinctReqired =
true;
1059 if (is_scalar($FIELD_VALUE) && mb_strlen($FIELD_VALUE))
1068 if(is_object($FIELD_VALUE))
1069 $result[] = $FIELD_NAME.
" IN (".$FIELD_VALUE->compile().
")";
1070 elseif(is_array($FIELD_VALUE))
1071 $result[] = $FIELD_NAME.
" IN ('".implode(
"', '", $FIELD_VALUE).
"')";
1073 $result[] = $FIELD_NAME.
" IN ('".$FIELD_VALUE.
"')";
1076 if(is_object($FIELD_VALUE))
1077 $result[] = $FIELD_NAME.
" NOT IN (".$FIELD_VALUE->compile().
")";
1078 elseif(is_array($FIELD_VALUE))
1079 $result[] = $FIELD_NAME.
" NOT IN ('".implode(
"', '", $FIELD_VALUE).
"')";
1081 $result[] = $FIELD_NAME.
" NOT IN ('".$FIELD_VALUE.
"')";
1085 $part = $this->
match($FIELD_NAME, $value, ($operation ==
"FT"));
1091 $this->bDistinctReqired =
true;
1095 $part = $this->
matchLike($FIELD_NAME, $value);
1101 $this->bDistinctReqired =
true;
1111 if (is_array($value))
1113 $FIELD_VALUE =
array();
1114 foreach ($value as
$val)
1118 $FIELD_VALUE[] =
$DB->CharToDateFunction((
string)
$val, $format);
1122 $FIELD_VALUE[] =
$val->compile();
1126 $FIELD_VALUE[] =
$DB->CharToDateFunction(
$val, $format);
1130 $FIELD_VALUE[] =
'NULL';
1136 $FIELD_VALUE =
$DB->CharToDateFunction((
string)$value, $format);
1138 elseif (is_object($value))
1140 $FIELD_VALUE = $value->compile();
1144 $FIELD_VALUE =
$DB->CharToDateFunction($value, $format);
1148 $FIELD_VALUE =
'NULL';
1157 if (is_array($FIELD_VALUE))
1159 $result[] = $FIELD_NAME.
" in (".implode(
", ", $FIELD_VALUE).
")";
1161 $this->bDistinctReqired =
true;
1164 $result[] =
"(".$FIELD_NAME.
" IS NULL)";
1166 $result[] = $FIELD_NAME.
" = ".$FIELD_VALUE;
1172 if (is_array($FIELD_VALUE))
1173 $result[] = $FIELD_NAME.
" not in (".implode(
", ", $FIELD_VALUE).
")";
1175 $result[] =
"(".$FIELD_NAME.
" IS NOT NULL)";
1177 $result[] = $FIELD_NAME.
" <> ".$FIELD_VALUE;
1180 $this->bDistinctReqired =
true;
1183 if (is_array($FIELD_VALUE))
1185 if (isset($FIELD_VALUE[0]))
1187 $result[] = $FIELD_NAME.
" > ".$FIELD_VALUE[0];
1195 $result[] = $FIELD_NAME.
" > ".$FIELD_VALUE;
1198 $this->bDistinctReqired =
true;
1201 if (is_array($FIELD_VALUE))
1203 if (isset($FIELD_VALUE[0]))
1205 $result[] = $FIELD_NAME.
" < ".$FIELD_VALUE[0];
1213 $result[] = $FIELD_NAME.
" < ".$FIELD_VALUE;
1216 $this->bDistinctReqired =
true;
1219 if (is_array($FIELD_VALUE))
1221 if (isset($FIELD_VALUE[0]))
1223 $result[] = $FIELD_NAME.
" >= ".$FIELD_VALUE[0];
1231 $result[] = $FIELD_NAME.
" >= ".$FIELD_VALUE;
1234 $this->bDistinctReqired =
true;
1237 if (is_array($FIELD_VALUE))
1239 if (isset($FIELD_VALUE[0]))
1241 $result[] = $FIELD_NAME.
" <= ".$FIELD_VALUE[0];
1249 $result[] = $FIELD_NAME.
" <= ".$FIELD_VALUE;
1252 $this->bDistinctReqired =
true;
1255 if (is_array($FIELD_VALUE) &&
count($FIELD_VALUE) > 1)
1256 $result[] = $FIELD_NAME.
" between ".$FIELD_VALUE[0].
" AND ".$FIELD_VALUE[1];
1259 $this->bDistinctReqired =
true;
1262 if (is_array($FIELD_VALUE) &&
count($FIELD_VALUE) > 1)
1263 $result[] = $FIELD_NAME.
" not between ".$FIELD_VALUE[0].
" AND ".$FIELD_VALUE[1];
1266 $this->bDistinctReqired =
true;
1269 $result[] = $FIELD_NAME.
" IN (".$FIELD_VALUE->compile().
")";