--TEST-- converter --SKIPIF-- --FILE-- types = $types; } } class HStoreConverter extends Converter { function convertTypes() { return [ $this->types["hstore"]->oid ]; } function convertFromString($string) { return eval("return [$string];"); } function convertToString($data) { $string = ""; foreach ($data as $k => $v) { if (isset($v)) { $string .= sprintf("\"%s\"=>\"%s\",", addslashes($k), addslashes($v)); } else { $string .= sprintf("\"%s\"=>NULL,", addslashes($k)); } } return $string; } } class IntVectorConverter extends Converter { function convertTypes() { return [ $this->types["int2vector"]->oid, $this->types["oidvector"]->oid ]; } function convertFromString($string) { return array_map("intval", explode(" ", $string)); } function convertToString($data) { return implode(" ", $data); } } class JSONConverter extends Converter { function convertTypes() { return [ $this->types["json"]->oid ]; } function convertFromString($string) { return json_decode($string); } function convertToString($data) { return json_encode($data); } } $c = new pq\Connection(PQ_DSN); $c->exec("CREATE EXTENSION IF NOT EXISTS hstore"); $t = new pq\Types($c); $c->setConverter(new HStoreConverter($t)); $c->setConverter(new IntVectorConverter($t)); $c->setConverter(new JSONConverter($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", array( // hstore array( "k1" => "v1", "k2" => "v2", "k3" => null ), // vectors array( 1, 3, 5, 7, 9, 11 ), array( 2345124, 1431341, 1343423 ), // JSON (object) array( "int" => 123, "obj" => (object) array( "a" => 1, "b" => 2, "c" => 3, ), "str" => "äüö" ), // arrays array(array(array(1,2,3))), array(array("a\"","b}",null)), array(true,false), array(1.1,2.2) ), array( $t["hstore"]->oid, $t["int2vector"]->oid, $t["oidvector"]->oid, $t["json"]->oid, $t["_int4"]->oid, $t["_text"]->oid, $t["_bool"]->oid, $t["_float8"]->oid ) ); var_dump($r->fetchAll()); ?> Done --EXPECTF-- Test array(1) { [0]=> array(%d) { [0]=> array(3) { ["k1"]=> string(2) "v1" ["k2"]=> string(2) "v2" ["k3"]=> NULL } [1]=> array(6) { [0]=> int(1) [1]=> int(3) [2]=> int(5) [3]=> int(7) [4]=> int(9) [5]=> int(11) } [2]=> array(3) { [0]=> int(2345124) [1]=> int(1431341) [2]=> int(1343423) } [3]=> object(stdClass)#%d (3) { ["int"]=> int(123) ["obj"]=> object(stdClass)#%d (3) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) } ["str"]=> string(6) "äüö" } [4]=> array(1) { [0]=> array(1) { [0]=> array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } } } [5]=> array(1) { [0]=> array(3) { [0]=> string(2) "a"" [1]=> string(2) "b}" [2]=> NULL } } [6]=> array(2) { [0]=> bool(true) [1]=> bool(false) } [7]=> array(2) { [0]=> float(1.1) [1]=> float(2.2) } } } Done