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 fenc=utf-8: ?>