upgrade pq\Types
[m6w6/ext-pq] / tests / conv001.phpt
index ec88151d4227c08e1d01748b3286582cceeaa91d..546f00ff7fff58236d43aefe9123eb6155caf96d 100644 (file)
@@ -70,7 +70,7 @@ class JSONConverter extends Converter
        }
        
        function convertFromString($string, $type) {
-               return json_decode($string);
+               return json_decode($string, true);
        }
        
        function convertToString($data, $type) {
@@ -78,6 +78,43 @@ class JSONConverter extends Converter
        }
 }
 
+class Point {
+       public $x;
+       public $y;
+       function __construct($x, $y) {
+               $this->x = $x;
+               $this->y = $y;
+       }
+}
+
+class Box {
+       public $p1;
+       public $p2;
+       function __construct(Point $p1, Point $p2) {
+               $this->p1 = $p1;
+               $this->p2 = $p2;
+       }
+}
+
+class BoxConverter extends Converter
+{
+       function convertTypes() {
+               return [ $this->types["box"]->oid ];
+       }
+
+       function convertToString($box, $type) {
+               return sprintf("(%F,%F),(%F,%F)",
+                               $box->p1->x, $box->p1->y,
+                               $box->p2->x, $box->p2->y
+               );
+       }
+
+       function convertFromString($data, $type) {
+               list($p1x, $p1y, $p2x, $p2y) = sscanf($data, "(%f,%f),(%f,%f)");
+               return new Box(new Point($p1x, $p1y), new Point($p2x, $p2y));
+       }
+}
+
 class Text {
        private $data;
        function __construct($data) {
@@ -94,11 +131,13 @@ $t = new pq\Types($c);
 
 $c->setConverter(new HStoreConverter($t));
 $c->setConverter(new IntVectorConverter($t));
-if (!defined("pq\\Types::JSON")) {
+if (!(defined("pq\\Types::JSON") && defined("pq\\Result::CONV_JSON"))) {
        $c->setConverter(new JSONConverter($t));
 }
+$c->setConverter(new BoxConverter($t));
+
 $r = $c->execParams("SELECT \$1 as hs, \$2 as iv, \$3 as oids, \$4 as js, \$5 as ia, \$6 as ta, \$7 as ba, \$8 as da, \$9 as dbl, \$10 as bln, ".
-               "\$11 as dt1, \$12 as dt2, \$13 as dt3, \$14 as dt4, \$15 as dt5, \$16 as dt6, \$17 as dt7, \$18 as dt8, \$19 as txta ",
+               "\$11 as dt1, \$12 as dt3, \$13 as dt4, \$14 as dt5, \$15 as dt7, \$16 as dt8, \$17 as txta, \$18 as boxa",
        array(
                // hstore
                array(
@@ -139,9 +178,10 @@ $r = $c->execParams("SELECT \$1 as hs, \$2 as iv, \$3 as oids, \$4 as js, \$5 as
                new pq\Datetime,
                new pq\Datetime,
                new pq\Datetime,
-               new pq\Datetime,
-               new pq\Datetime,
+               // text array
                [new Text(0), new Text(" or "), new Text(true)],
+               // box array
+               [new Box(new Point(1,2), new Point(2,3)), new Box(new Point(3,4), new Point(4,5))],
        ),
        array(
                $t["hstore"]->oid,
@@ -155,14 +195,13 @@ $r = $c->execParams("SELECT \$1 as hs, \$2 as iv, \$3 as oids, \$4 as js, \$5 as
                $t["float4"]->oid,
                $t["bool"]->oid,
                $t["date"]->oid,
-               $t["abstime"]->oid,
                $t["timestamp"]->oid,
                $t["timestamptz"]->oid,
                $t["date"]->oid,
-               $t["abstime"]->oid,
                $t["timestamp"]->oid,
                $t["timestamptz"]->oid,
-               $t["_text"]->oid
+               $t["_text"]->oid,
+               $t["_box"]->oid
        )
 );
 
@@ -209,11 +248,11 @@ array(1) {
       int(1343423)
     }
     [3]=>
-    object(stdClass)#%d (3) {
+    array(3) {
       ["int"]=>
       int(123)
       ["obj"]=>
-      object(stdClass)#%d (3) {
+      array(3) {
         ["a"]=>
         int(1)
         ["b"]=>
@@ -281,39 +320,28 @@ array(1) {
       string(3) "UTC"
     }
     [11]=>
-    object(pq\DateTime)#%d (4) {
-      ["format"]=>
-      string(11) "Y-m-d H:i:s"
-      ["date"]=>
-      string(26) "%d-%d-%d %d:%d:%d.000000"
-      ["timezone_type"]=>
-      int(1)
-      ["timezone"]=>
-      string(%d) "%s"
-    }
-    [12]=>
     object(pq\DateTime)#%d (4) {
       ["format"]=>
       string(13) "Y-m-d H:i:s.u"
       ["date"]=>
-      string(26) "%d-%d-%d %d:%d:%d.000000"
+      string(26) "%d-%d-%d %d:%d:%d.%d"
       ["timezone_type"]=>
       int(3)
       ["timezone"]=>
       string(3) "UTC"
     }
-    [13]=>
+    [12]=>
     object(pq\DateTime)#%d (4) {
       ["format"]=>
       string(14) "Y-m-d H:i:s.uO"
       ["date"]=>
-      string(26) "%d-%d-%d %d:%d:%d.000000"
+      string(26) "%d-%d-%d %d:%d:%d.%d"
       ["timezone_type"]=>
       int(1)
       ["timezone"]=>
       string(%d) "%s"
     }
-    [14]=>
+    [13]=>
     object(pq\DateTime)#%d (4) {
       ["format"]=>
       string(5) "Y-m-d"
@@ -324,40 +352,29 @@ array(1) {
       ["timezone"]=>
       string(3) "UTC"
     }
-    [15]=>
-    object(pq\DateTime)#%d (4) {
-      ["format"]=>
-      string(11) "Y-m-d H:i:s"
-      ["date"]=>
-      string(26) "%d-%d-%d %d:%d:%d.000000"
-      ["timezone_type"]=>
-      int(1)
-      ["timezone"]=>
-      string(%d) "%s"
-    }
-    [16]=>
+    [14]=>
     object(pq\DateTime)#%d (4) {
       ["format"]=>
       string(13) "Y-m-d H:i:s.u"
       ["date"]=>
-      string(26) "%d-%d-%d %d:%d:%d.000000"
+      string(26) "%d-%d-%d %d:%d:%d.%d"
       ["timezone_type"]=>
       int(3)
       ["timezone"]=>
       string(3) "UTC"
     }
-    [17]=>
+    [15]=>
     object(pq\DateTime)#%d (4) {
       ["format"]=>
       string(14) "Y-m-d H:i:s.uO"
       ["date"]=>
-      string(26) "%d-%d-%d %d:%d:%d.000000"
+      string(26) "%d-%d-%d %d:%d:%d.%d"
       ["timezone_type"]=>
       int(1)
       ["timezone"]=>
       string(%d) "%s"
     }
-    [18]=>
+    [16]=>
     array(3) {
       [0]=>
       string(1) "0"
@@ -366,6 +383,43 @@ array(1) {
       [2]=>
       string(1) "1"
     }
+    [17]=>
+    array(2) {
+      [0]=>
+      object(Box)#%d (2) {
+        ["p1"]=>
+        object(Point)#%d (2) {
+          ["x"]=>
+          float(2)
+          ["y"]=>
+          float(3)
+        }
+        ["p2"]=>
+        object(Point)#%d (2) {
+          ["x"]=>
+          float(1)
+          ["y"]=>
+          float(2)
+        }
+      }
+      [1]=>
+      object(Box)#%d (2) {
+        ["p1"]=>
+        object(Point)#%d (2) {
+          ["x"]=>
+          float(4)
+          ["y"]=>
+          float(5)
+        }
+        ["p2"]=>
+        object(Point)#%d (2) {
+          ["x"]=>
+          float(3)
+          ["y"]=>
+          float(4)
+        }
+      }
+    }
   }
 }
 Done