X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fpq-gateway;a=blobdiff_plain;f=lib%2Fpq%2FGateway%2FTable.php;h=ebab838bf672b8c01f2229720644a617038a17f0;hp=805ed79353a0926461cc86ce53030e369676f5e3;hb=89caabf7e3ebc62190fccba97e3bc11f7f32b58c;hpb=20d2b6bcce8f1c7a1aaa375b86ffb5be30674956 diff --git a/lib/pq/Gateway/Table.php b/lib/pq/Gateway/Table.php index 805ed79..ebab838 100644 --- a/lib/pq/Gateway/Table.php +++ b/lib/pq/Gateway/Table.php @@ -25,6 +25,11 @@ class Table * @var string */ protected $rowset = "\\pq\\Gateway\\Rowset"; + + /** + * @var \pq\Query\Writer + */ + protected $query; /** * @param string $name @@ -45,6 +50,32 @@ class Table return $this; } + /** + * Get the rowset prototype + * @return mixed + */ + function getRowsetPrototype() { + return $this->rowset; + } + + /** + * Set the query writer + * @param \pq\Query\WriterInterface $query + * @return \pq\Gateway\Table + */ + function setQueryWriter(\pq\Query\WriterInterface $query) { + $this->query = $query; + return $this; + } + + /** + * Get the query writer + * @return \pq\Query\WriterInterface + */ + function getQueryWriter() { + return $this->query ?: new QueryWriter; + } + /** * @return \pq\Connection */ @@ -71,12 +102,10 @@ class Table return $result; } - if (is_callable($this->rowset)) { - return call_user_func($this->rowset, $result); - } - - if ($this->rowset) { - $rowset = $this->rowset; + $rowset = $this->getRowsetPrototype(); + if (is_callable($rowset)) { + return $rowset($result); + } elseif ($rowset) { return new $rowset($this, $result); } @@ -92,7 +121,8 @@ class Table * @return \pq\Result */ function find(array $where = null, $order = null, $limit = 0, $offset = 0) { - $query = new QueryWriter("SELECT * FROM ". $this->conn->quoteName($this->name)); + $query = $this->getQueryWriter()->reset(); + $query->write("SELECT * FROM", $this->conn->quoteName($this->name)); if ($where) { $query->write("WHERE")->criteria($where); } @@ -113,7 +143,8 @@ class Table * @return \pq\Result */ function create(array $data = null, $returning = "*") { - $query = new QueryWriter("INSERT INTO ".$this->conn->quoteName($this->name)); + $query = $this->getQueryWriter()->reset(); + $query->write("INSERT INTO", $this->conn->quoteName($this->name)); if ($data) { $first = true; $params = array(); @@ -141,9 +172,9 @@ class Table * @retunr \pq\Result */ function update(array $where, array $data, $returning = "*") { - $query = new QueryWriter("UPDATE ".$this->conn->quoteName($this->name)); + $query = $this->getQueryWriter()->reset(); + $query->write("UPDATE", $this->conn->quoteName($this->name)); $first = true; - $params = array(); foreach ($data as $key => $val) { $query->write($first ? "SET" : ",", $key, "=", $query->param($val)); $first and $first = false; @@ -162,7 +193,8 @@ class Table * @return pq\Result */ function delete(array $where, $returning = null) { - $query = new QueryWriter("DELETE FROM ".$this->conn->quoteName($this->name)); + $query = $this->getQueryWriter()->reset(); + $query->write("DELETE FROM", $this->conn->quoteName($this->name)); $query->write("WHERE")->criteria($where); if (strlen($returning)) { $query->write("RETURNING", $returning);