6 if (!pq\Types::DEFINED) {
7 die("skip pq\\Types::DEFINED == false\n");
16 abstract class Converter implements pq\ConverterInterface
20 function __construct(\pq\Types $types) {
21 $this->types = $types;
25 class HStoreConverter extends Converter
27 function convertTypes() {
28 return [ $this->types["hstore"]->oid ];
31 function convertFromString($string) {
32 return eval("return [$string];");
35 function convertToString($data) {
37 foreach ($data as $k => $v) {
39 $string .= sprintf("\"%s\"=>\"%s\",", addslashes($k), addslashes($v));
41 $string .= sprintf("\"%s\"=>NULL,", addslashes($k));
48 class IntVectorConverter extends Converter
50 function convertTypes() {
52 $this->types["int2vector"]->oid,
53 $this->types["oidvector"]->oid
57 function convertFromString($string) {
58 return array_map("intval", explode(" ", $string));
61 function convertToString($data) {
62 return implode(" ", $data);
66 class JSONConverter extends Converter
68 function convertTypes() {
69 return [ $this->types["json"]->oid ];
72 function convertFromString($string) {
73 return json_decode($string);
76 function convertToString($data) {
77 return json_encode($data);
81 $c = new pq\Connection(PQ_DSN);
82 $c->exec("CREATE EXTENSION IF NOT EXISTS hstore");
83 $t = new pq\Types($c);
85 $c->setConverter(new HStoreConverter($t));
86 $c->setConverter(new IntVectorConverter($t));
87 $c->setConverter(new JSONConverter($t));
89 $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",
102 2345124, 1431341, 1343423
107 "obj" => (object) array(
115 array(array(array(1,2,3))),
116 array(array("a\"","b}",null)),
122 $t["int2vector"]->oid,
123 $t["oidvector"]->oid,
132 var_dump($r->fetchAll());
175 object(stdClass)#%d (3) {
179 object(stdClass)#%d (3) {