00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00017 final class Expression extends StaticFactory
00018 {
00022 public static function expAnd($left, $right)
00023 {
00024 return new BinaryExpression(
00025 $left, $right, BinaryExpression::EXPRESSION_AND
00026 );
00027 }
00028
00032 public static function expOr($left, $right)
00033 {
00034 return new BinaryExpression(
00035 $left, $right, BinaryExpression::EXPRESSION_OR
00036 );
00037 }
00038
00042 public static function eq($field, $value)
00043 {
00044 return new BinaryExpression($field, $value, BinaryExpression::EQUALS);
00045 }
00046
00050 public static function eqId($field, Identifiable $object)
00051 {
00052 return self::eq($field, $object->getId());
00053 }
00054
00058 public static function notEq($field, $value)
00059 {
00060 return new BinaryExpression(
00061 $field, $value, BinaryExpression::NOT_EQUALS
00062 );
00063 }
00064
00070 public static function gt($field, $value)
00071 {
00072 return new BinaryExpression(
00073 $field, $value, BinaryExpression::GREATER_THAN
00074 );
00075 }
00076
00082 public static function gtEq($field, $value)
00083 {
00084 return new BinaryExpression(
00085 $field, $value, BinaryExpression::GREATER_OR_EQUALS
00086 );
00087 }
00088
00094 public static function lt($field, $value)
00095 {
00096 return new BinaryExpression(
00097 $field, $value, BinaryExpression::LOWER_THAN
00098 );
00099 }
00100
00106 public static function ltEq($field, $value)
00107 {
00108 return new BinaryExpression(
00109 $field, $value, BinaryExpression::LOWER_OR_EQUALS
00110 );
00111 }
00112
00116 public static function notNull($field)
00117 {
00118 return new PostfixUnaryExpression($field, PostfixUnaryExpression::IS_NOT_NULL);
00119 }
00120
00124 public static function isNull($field)
00125 {
00126 return new PostfixUnaryExpression($field, PostfixUnaryExpression::IS_NULL);
00127 }
00128
00132 public static function isTrue($field)
00133 {
00134 return new PostfixUnaryExpression($field, PostfixUnaryExpression::IS_TRUE);
00135 }
00136
00140 public static function isFalse($field)
00141 {
00142 return new PostfixUnaryExpression($field, PostfixUnaryExpression::IS_FALSE);
00143 }
00144
00148 public static function like($field, $value)
00149 {
00150 return new BinaryExpression($field, $value, BinaryExpression::LIKE);
00151 }
00152
00156 public static function notLike($field, $value)
00157 {
00158 return new BinaryExpression($field, $value, BinaryExpression::NOT_LIKE);
00159 }
00160
00164 public static function ilike($field, $value)
00165 {
00166 return new BinaryExpression($field, $value, BinaryExpression::ILIKE);
00167 }
00168
00172 public static function notIlike($field, $value)
00173 {
00174 return new BinaryExpression($field, $value, BinaryExpression::NOT_ILIKE);
00175 }
00176
00180 public static function similar($field, $value)
00181 {
00182 return new BinaryExpression($field, $value, BinaryExpression::SIMILAR_TO);
00183 }
00184
00188 public static function notSimilar($field, $value)
00189 {
00190 return new BinaryExpression($field, $value, BinaryExpression::NOT_SIMILAR_TO);
00191 }
00192
00196 public static function eqLower($field, $value)
00197 {
00198 return new EqualsLowerExpression($field, $value);
00199 }
00200
00204 public static function between($field, $left, $right)
00205 {
00206 return new LogicalBetween($field, $left, $right);
00207 }
00208
00214 public static function in($field, $value)
00215 {
00216 if (is_numeric($value) && $value == (int) $value)
00217 return self::eq($field, $value);
00218 elseif (is_array($value) && count($value) == 1)
00219 return self::eq($field, current($value));
00220 else {
00221 return new InExpression(
00222 $field, $value, InExpression::IN
00223 );
00224 }
00225 }
00226
00230 public static function notIn($field, $value)
00231 {
00232 if (is_numeric($value) && $value == (int) $value)
00233 return self::notEq($field, $value);
00234 elseif (is_array($value) && count($value) == 1)
00235 return self::notEq($field, current($value));
00236 else {
00237 return new InExpression(
00238 $field, $value, InExpression::NOT_IN
00239 );
00240 }
00241 }
00242
00248 public static function add($field, $value)
00249 {
00250 return new BinaryExpression($field, $value, BinaryExpression::ADD);
00251 }
00252
00258 public static function sub($field, $value)
00259 {
00260 return new BinaryExpression($field, $value, BinaryExpression::SUBSTRACT);
00261 }
00262
00268 public static function mul($field, $value)
00269 {
00270 return new BinaryExpression($field, $value, BinaryExpression::MULTIPLY);
00271 }
00272
00278 public static function div($field, $value)
00279 {
00280 return new BinaryExpression($field, $value, BinaryExpression::DIVIDE);
00281 }
00282
00288 public static function mod($field, $value)
00289 {
00290 return new BinaryExpression($field, $value, BinaryExpression::MOD);
00291 }
00292
00296 public static function fullTextAnd($field, $wordsList)
00297 {
00298 return new FullTextSearch($field, $wordsList, DB::FULL_TEXT_AND);
00299 }
00300
00304 public static function fullTextOr($field, $wordsList)
00305 {
00306 return new FullTextSearch($field, $wordsList, DB::FULL_TEXT_OR);
00307 }
00308
00312 public static function fullTextRankOr($field, $wordsList)
00313 {
00314 return new FullTextRank($field, $wordsList, DB::FULL_TEXT_OR);
00315 }
00316
00320 public static function fullTextRankAnd($field, $wordsList)
00321 {
00322 return new FullTextRank($field, $wordsList, DB::FULL_TEXT_AND);
00323 }
00324
00328 public static function orBlock()
00329 {
00330 return self::block(
00331 func_get_args(),
00332 BinaryExpression::EXPRESSION_OR
00333 );
00334 }
00335
00339 public static function andBlock()
00340 {
00341 return self::block(
00342 func_get_args(),
00343 BinaryExpression::EXPRESSION_AND
00344 );
00345 }
00346
00350 public static function chain()
00351 {
00352 return new LogicalChain();
00353 }
00354
00358 public static function not($field)
00359 {
00360 return new PrefixUnaryExpression(PrefixUnaryExpression::NOT, $field);
00361 }
00362
00366 public static function minus($field)
00367 {
00368 return new PrefixUnaryExpression(PrefixUnaryExpression::MINUS, $field);
00369 }
00370
00374 private static function block($args, $logic)
00375 {
00376 return LogicalChain::block($args, $logic);
00377 }
00378 }
00379 ?>