00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00018 final class Expression extends StaticFactory
00019 {
00023 public static function expAnd($left, $right)
00024 {
00025 return new BinaryExpression(
00026 $left, $right, BinaryExpression::EXPRESSION_AND
00027 );
00028 }
00029
00033 public static function expOr($left, $right)
00034 {
00035 return new BinaryExpression(
00036 $left, $right, BinaryExpression::EXPRESSION_OR
00037 );
00038 }
00039
00043 public static function eq($field, $value)
00044 {
00045 return new BinaryExpression($field, $value, BinaryExpression::EQUALS);
00046 }
00047
00051 public static function eqId($field, Identifiable $object)
00052 {
00053 return self::eq($field, $object->getId());
00054 }
00055
00059 public static function notEq($field, $value)
00060 {
00061 return new BinaryExpression(
00062 $field, $value, BinaryExpression::NOT_EQUALS
00063 );
00064 }
00065
00071 public static function gt($field, $value)
00072 {
00073 return new BinaryExpression(
00074 $field, $value, BinaryExpression::GREATER_THAN
00075 );
00076 }
00077
00083 public static function gtEq($field, $value)
00084 {
00085 return new BinaryExpression(
00086 $field, $value, BinaryExpression::GREATER_OR_EQUALS
00087 );
00088 }
00089
00095 public static function lt($field, $value)
00096 {
00097 return new BinaryExpression(
00098 $field, $value, BinaryExpression::LOWER_THAN
00099 );
00100 }
00101
00107 public static function ltEq($field, $value)
00108 {
00109 return new BinaryExpression(
00110 $field, $value, BinaryExpression::LOWER_OR_EQUALS
00111 );
00112 }
00113
00117 public static function notNull($field)
00118 {
00119 return new PostfixUnaryExpression($field, PostfixUnaryExpression::IS_NOT_NULL);
00120 }
00121
00125 public static function isNull($field)
00126 {
00127 return new PostfixUnaryExpression($field, PostfixUnaryExpression::IS_NULL);
00128 }
00129
00133 public static function isTrue($field)
00134 {
00135 return new PostfixUnaryExpression($field, PostfixUnaryExpression::IS_TRUE);
00136 }
00137
00141 public static function isFalse($field)
00142 {
00143 return new PostfixUnaryExpression($field, PostfixUnaryExpression::IS_FALSE);
00144 }
00145
00149 public static function like($field, $value)
00150 {
00151 return new BinaryExpression($field, $value, BinaryExpression::LIKE);
00152 }
00153
00157 public static function notLike($field, $value)
00158 {
00159 return new BinaryExpression($field, $value, BinaryExpression::NOT_LIKE);
00160 }
00161
00165 public static function ilike($field, $value)
00166 {
00167 return new BinaryExpression($field, $value, BinaryExpression::ILIKE);
00168 }
00169
00173 public static function notIlike($field, $value)
00174 {
00175 return new BinaryExpression($field, $value, BinaryExpression::NOT_ILIKE);
00176 }
00177
00181 public static function similar($field, $value)
00182 {
00183 return new BinaryExpression($field, $value, BinaryExpression::SIMILAR_TO);
00184 }
00185
00189 public static function notSimilar($field, $value)
00190 {
00191 return new BinaryExpression($field, $value, BinaryExpression::NOT_SIMILAR_TO);
00192 }
00193
00197 public static function eqLower($field, $value)
00198 {
00199 return new EqualsLowerExpression($field, $value);
00200 }
00201
00205 public static function between($field, $left, $right)
00206 {
00207 return new LogicalBetween($field, $left, $right);
00208 }
00209
00215 public static function in($field, $value)
00216 {
00217 if (is_numeric($value) && $value == (int) $value)
00218 return self::eq($field, $value);
00219 elseif (is_array($value) && count($value) == 1)
00220 return self::eq($field, current($value));
00221 else {
00222 return new InExpression(
00223 $field, $value, InExpression::IN
00224 );
00225 }
00226 }
00227
00231 public static function notIn($field, $value)
00232 {
00233 if (is_numeric($value) && $value == (int) $value)
00234 return self::notEq($field, $value);
00235 elseif (is_array($value) && count($value) == 1)
00236 return self::notEq($field, current($value));
00237 else {
00238 return new InExpression(
00239 $field, $value, InExpression::NOT_IN
00240 );
00241 }
00242 }
00243
00249 public static function add($field, $value)
00250 {
00251 return new BinaryExpression($field, $value, BinaryExpression::ADD);
00252 }
00253
00259 public static function sub($field, $value)
00260 {
00261 return new BinaryExpression($field, $value, BinaryExpression::SUBSTRACT);
00262 }
00263
00269 public static function mul($field, $value)
00270 {
00271 return new BinaryExpression($field, $value, BinaryExpression::MULTIPLY);
00272 }
00273
00279 public static function div($field, $value)
00280 {
00281 return new BinaryExpression($field, $value, BinaryExpression::DIVIDE);
00282 }
00283
00287 public static function fullTextAnd($field, $wordsList)
00288 {
00289 return new FullTextSearch($field, $wordsList, DB::FULL_TEXT_AND);
00290 }
00291
00295 public static function fullTextOr($field, $wordsList)
00296 {
00297 return new FullTextSearch($field, $wordsList, DB::FULL_TEXT_OR);
00298 }
00299
00303 public static function fullTextRankOr($field, $wordsList)
00304 {
00305 return new FullTextRank($field, $wordsList, DB::FULL_TEXT_OR);
00306 }
00307
00311 public static function fullTextRankAnd($field, $wordsList)
00312 {
00313 return new FullTextRank($field, $wordsList, DB::FULL_TEXT_AND);
00314 }
00315
00319 public static function orBlock()
00320 {
00321 return self::block(
00322 func_get_args(),
00323 BinaryExpression::EXPRESSION_OR
00324 );
00325 }
00326
00330 public static function andBlock()
00331 {
00332 return self::block(
00333 func_get_args(),
00334 BinaryExpression::EXPRESSION_AND
00335 );
00336 }
00337
00341 public static function chain()
00342 {
00343 return new LogicalChain();
00344 }
00345
00349 public static function not($field)
00350 {
00351 return new PrefixUnaryExpression(PrefixUnaryExpression::NOT, $field);
00352 }
00353
00357 public static function minus($field)
00358 {
00359 return new PrefixUnaryExpression(PrefixUnaryExpression::MINUS, $field);
00360 }
00361
00365 private static function block($args, $logic)
00366 {
00367 return LogicalChain::block($args, $logic);
00368 }
00369 }
00370 ?>