From e5d43557de8059665cbf455565c63f6ee93c5552 Mon Sep 17 00:00:00 2001 From: Riton Date: Fri, 24 Sep 2010 21:12:47 +0200 Subject: [PATCH] Extracted PlSqlJoin out of PlFilter class file Signed-off-by: Riton Signed-off-by: Florent Bruneau --- classes/plfilter.php | 104 ---------------------------------------- classes/plsqljoin.php | 129 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+), 104 deletions(-) create mode 100644 classes/plsqljoin.php diff --git a/classes/plfilter.php b/classes/plfilter.php index 5c23d1c..af8141d 100644 --- a/classes/plfilter.php +++ b/classes/plfilter.php @@ -47,110 +47,6 @@ class PlLimit } // }}} -// {{{ class PlSqlJoin -class PlSqlJoin -{ - private $mode; - private $table; - private $condition; - - const MODE_LEFT = 'LEFT'; - const MODE_RIGHT = 'RIGHT'; - const MODE_INNER = 'INNER'; - - private function __construct($mode, $params) - { - $table = array_shift($params); - $condition = call_user_func_array(array('XDB', 'format'), $params); - if ($mode != self::MODE_LEFT && $mode != self::MODE_RIGHT && $mode != self::MODE_INNER) { - Platal::page()->kill("Join mode error: unknown mode $mode"); - return; - } - $this->mode = $mode; - $this->table = $table; - $this->condition = $condition; - } - - public function mode() - { - return $this->mode; - } - - public function table() - { - return $this->table; - } - - public function condition() - { - return $this->condition; - } - - /** Replace all "metas" in the condition with their translation. - * $ME always becomes the alias of the table - * @param $key The name the joined table will have in the final query - * @param $joinMetas An array of meta => conversion to apply to the condition - */ - public function replaceJoinMetas($key, $joinMetas = array()) - { - $joinMetas['$ME'] = $key; - return str_replace(array_keys($joinMetas), $joinMetas, $this->condition); - } - - /** Create a join command from an array of PlSqlJoin - * @param $joins The list of 'join' to convert into an SQL query - * @param $joinMetas An array of ('$META' => 'conversion') to apply to the joins. - */ - public static function formatJoins(array $joins, array $joinMetas) - { - $str = ''; - foreach ($joins as $key => $join) { - if (!($join instanceof PlSqlJoin)) { - Platal::page()->kill("Error: not a join: $join"); - } - $mode = $join->mode(); - $table = $join->table(); - $str .= ' ' . $mode . ' JOIN ' . $table . ' AS ' . $key; - if ($join->condition() != null) { - $str .= ' ON (' . $join->replaceJoinMetas($key, $joinMetas) . ')'; - } - $str .= "\n"; - } - return $str; - } - - /** Build a left join - * @param table The name of the table. - * @param condition The condition of the jointure - */ - public static function left() - { - $params = func_get_args(); - return new PlSqlJoin(self::MODE_LEFT, $params); - } - - /** Build a right join - * @param table The name of the table. - * @param condition The condition of the jointure - */ - public static function right() - { - $params = func_get_args(); - return new PlSqlJoin(self::MODE_RIGHT, $params); - } - - /** Build a inner join - * @param table The name of the table. - * @param condition The condition of the jointure - */ - public static function inner() - { - $params = func_get_args(); - return new PlSqlJoin(self::MODE_INNER, $params); - } -} -// }}} - // {{{ class PlFilterOrder /** Base class for ordering results of a query. * Parameters for the ordering must be given to the constructor ($desc for a diff --git a/classes/plsqljoin.php b/classes/plsqljoin.php new file mode 100644 index 0000000..b0ea6d1 --- /dev/null +++ b/classes/plsqljoin.php @@ -0,0 +1,129 @@ +kill("Join mode error: unknown mode $mode"); + return; + } + $this->mode = $mode; + $this->table = $table; + $this->condition = $condition; + } + + public function mode() + { + return $this->mode; + } + + public function table() + { + return $this->table; + } + + public function condition() + { + return $this->condition; + } + + /** Replace all "metas" in the condition with their translation. + * $ME always becomes the alias of the table + * @param $key The name the joined table will have in the final query + * @param $joinMetas An array of meta => conversion to apply to the condition + */ + public function replaceJoinMetas($key, $joinMetas = array()) + { + $joinMetas['$ME'] = $key; + return str_replace(array_keys($joinMetas), $joinMetas, $this->condition); + } + + /** Create a join command from an array of PlSqlJoin + * @param $joins The list of 'join' to convert into an SQL query + * @param $joinMetas An array of ('$META' => 'conversion') to apply to the joins. + */ + public static function formatJoins(array $joins, array $joinMetas) + { + $str = ''; + foreach ($joins as $key => $join) { + if (!($join instanceof PlSqlJoin)) { + Platal::page()->kill("Error: not a join: $join"); + } + $mode = $join->mode(); + $table = $join->table(); + $str .= ' ' . $mode . ' JOIN ' . $table . ' AS ' . $key; + if ($join->condition() != null) { + $str .= ' ON (' . $join->replaceJoinMetas($key, $joinMetas) . ')'; + } + $str .= "\n"; + } + return $str; + } + + /** Build a left join + * @param table The name of the table. + * @param condition The condition of the jointure + */ + public static function left() + { + $params = func_get_args(); + return new PlSqlJoin(self::MODE_LEFT, $params); + } + + /** Build a right join + * @param table The name of the table. + * @param condition The condition of the jointure + */ + public static function right() + { + $params = func_get_args(); + return new PlSqlJoin(self::MODE_RIGHT, $params); + } + + /** Build a inner join + * @param table The name of the table. + * @param condition The condition of the jointure + */ + public static function inner() + { + $params = func_get_args(); + return new PlSqlJoin(self::MODE_INNER, $params); + } +} +// }}} + +// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: +?> -- 2.1.4