From cd6629ad23ba9468002d063483e9c49b59e200aa Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Fri, 23 Jan 2009 08:07:37 +0000 Subject: Add support for parenthetical grouping to Database queries. Turns out that this is something they kind of want for Kohana :-) Upstream ticket for this change: http://dev.kohanaphp.com/ticket/1070 --- core/libraries/MY_Database.php | 45 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 core/libraries/MY_Database.php (limited to 'core/libraries/MY_Database.php') diff --git a/core/libraries/MY_Database.php b/core/libraries/MY_Database.php new file mode 100644 index 00000000..f5e412a6 --- /dev/null +++ b/core/libraries/MY_Database.php @@ -0,0 +1,45 @@ +where[] = "("; + return $this; + } + + public function close_paren() { + // Search backwards for the last opening paren and resolve it + $i = count($this->where) - 1; + $this->where[$i] .= ")"; + while (--$i >= 0) { + if ($this->where[$i] == "(") { + // Remove the paren from the where clauses, and add it to the right of the operator of the + // next where clause. If removing the paren makes the next where clause the first element + // in the where list, then the operator shouldn't be there. It's there because we + // calculate whether or not we need an operator based on the number of where clauses, and + // the open paren seems like a where clause even though it isn't. + array_splice($this->where, $i, 1); + $this->where[$i] = preg_replace("/^(AND|OR) /", $i ? "\\1 (" : "(", $this->where[$i]); + return $this; + } + } + + throw new Kohana_Database_Exception('database.missing_open_paren'); + } +} \ No newline at end of file -- cgit v1.2.3