X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-pq;a=blobdiff_plain;f=tests%2Fconv001.phpt;h=64488b5164e95c2ae11e6495697942e47b80af23;hp=27f41f11af5c1b270070da326d978d1be9aafba5;hb=d3fbce1b02b41d7ee1f3d0b60dc8df411aae7d79;hpb=753359f19c5d29f08faca43ee735c49c217230a7 diff --git a/tests/conv001.phpt b/tests/conv001.phpt index 27f41f1..64488b5 100644 --- a/tests/conv001.phpt +++ b/tests/conv001.phpt @@ -3,6 +3,7 @@ converter --SKIPIF-- --INI-- date.timezone=UTC @@ -27,11 +28,11 @@ class HStoreConverter extends Converter return [ $this->types["hstore"]->oid ]; } - function convertFromString($string) { + function convertFromString($string, $type) { return eval("return [$string];"); } - function convertToString($data) { + function convertToString($data, $type) { $string = ""; foreach ($data as $k => $v) { if (isset($v)) { @@ -53,11 +54,11 @@ class IntVectorConverter extends Converter ]; } - function convertFromString($string) { + function convertFromString($string, $type) { return array_map("intval", explode(" ", $string)); } - function convertToString($data) { + function convertToString($data, $type) { return implode(" ", $data); } } @@ -68,15 +69,52 @@ class JSONConverter extends Converter return [ $this->types["json"]->oid ]; } - function convertFromString($string) { - return json_decode($string); + function convertFromString($string, $type) { + return json_decode($string, true); } - function convertToString($data) { + function convertToString($data, $type) { return json_encode($data); } } +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) { @@ -96,8 +134,10 @@ $c->setConverter(new IntVectorConverter($t)); if (!defined("pq\\Types::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 dt2, \$13 as dt3, \$14 as dt4, \$15 as dt5, \$16 as dt6, \$17 as dt7, \$18 as dt8, \$19 as txta, \$20 as boxa", array( // hstore array( @@ -140,7 +180,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, + // 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, @@ -161,7 +204,8 @@ $r = $c->execParams("SELECT \$1 as hs, \$2 as iv, \$3 as oids, \$4 as js, \$5 as $t["abstime"]->oid, $t["timestamp"]->oid, $t["timestamptz"]->oid, - $t["_text"]->oid + $t["_text"]->oid, + $t["_box"]->oid ) ); @@ -208,11 +252,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"]=> @@ -346,7 +390,7 @@ array(1) { string(3) "UTC" } [17]=> - object(pq\DateTime)#159 (4) { + object(pq\DateTime)#%d (4) { ["format"]=> string(14) "Y-m-d H:i:s.uO" ["date"]=> @@ -365,6 +409,43 @@ array(1) { [2]=> string(1) "1" } + [19]=> + 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