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'); } }