Expression.class.php

Go to the documentation of this file.
00001 <?php
00002 /***************************************************************************
00003  *   Copyright (C) 2004-2007 by Konstantin V. Arkhipov                     *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU Lesser General Public License as        *
00007  *   published by the Free Software Foundation; either version 3 of the    *
00008  *   License, or (at your option) any later version.                       *
00009  *                                                                         *
00010  ***************************************************************************/
00011 /* $Id: Expression.class.php 4687 2007-12-09 18:57:18Z voxus $ */
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 ?>

Generated on Sun Dec 9 21:56:23 2007 for onPHP by  doxygen 1.5.4