--SKIPIF--
<?php
include "_skipif.inc";
+_ext("json");
?>
--INI--
date.timezone=UTC
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)) {
];
}
- function convertFromString($string) {
+ function convertFromString($string, $type) {
return array_map("intval", explode(" ", $string));
}
- function convertToString($data) {
+ function convertToString($data, $type) {
return implode(" ", $data);
}
}
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) {
$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(
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,
$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
)
);
int(1343423)
}
[3]=>
- object(stdClass)#%d (3) {
+ array(3) {
["int"]=>
int(123)
["obj"]=>
- object(stdClass)#%d (3) {
+ array(3) {
["a"]=>
int(1)
["b"]=>
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"
["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]=>
- object(pq\DateTime)#159 (4) {
+ [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"
[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