flush
[m6w6/pq-gateway] / lib / pq / Query / Writer.php
index e25a1fc7d15c71b991b05de81339771b4f531e36..6e069450d046332460cae6becb0b71444186ed6d 100644 (file)
@@ -5,7 +5,7 @@ namespace pq\Query;
 /**
  * A very simple query writer used by \pq\Gateway
  */
-class Writer
+class Writer implements WriterInterface
 {
        /**
         * @var string
@@ -94,6 +94,9 @@ class Writer
         * @return string
         */
        function param($param, $type = null) {
+               if ($param instanceof ExpressibleInterface) {
+                       $param = $param->get();
+               }
                if ($param instanceof Expr) {
                        return (string) $param;
                }
@@ -111,14 +114,13 @@ class Writer
         */
        function criteria(array $criteria) {
                if ((list($left, $right) = each($criteria))) {
-                       array_shift($criteria);
                        $this->write("(");
                        if (is_array($right)) {
                                $this->criteria($right);
                        } else {
                                $this->write("(", $left, $this->param($right), ")");
                        }
-                       foreach ($criteria as $left => $right) {
+                       while ((list($left, $right) = each($criteria))) {
                                $this->write(is_int($left) && is_array($right) ? "OR" : "AND");
                                if (is_array($right)) {
                                        $this->criteria($right);
@@ -130,15 +132,4 @@ class Writer
                }
                return $this;
        }
-
-       /**
-        * Execute the query through \pq\Connection::execParams($this, $this->params, $this->types)
-        * @param \pq\Connection $c
-        * @return \pq\Result
-        */
-       function exec(\pq\Connection $c) {
-               fprintf(STDERR, "Q: %s\n", $this);
-               fprintf(STDERR, "P: %s\n", implode(", ", $this->params));
-               return $c->execParams($this, $this->params, $this->types);
-       }
 }