15 abstract class Converter implements pq\Converter
19 function __construct(\pq\Types $types) {
20 $this->types = $types;
24 class HStoreConverter extends Converter
26 function convertTypes() {
27 return [ $this->types["hstore"]->oid ];
30 function convertFromString($string, $type) {
31 return eval("return [$string];");
34 function convertToString($data, $type) {
36 foreach ($data as $k => $v) {
38 $string .= sprintf("\"%s\"=>\"%s\",", addslashes($k), addslashes($v));
40 $string .= sprintf("\"%s\"=>NULL,", addslashes($k));
47 class IntVectorConverter extends Converter
49 function convertTypes() {
51 $this->types["int2vector"]->oid,
52 $this->types["oidvector"]->oid
56 function convertFromString($string, $type) {
57 return array_map("intval", explode(" ", $string));
60 function convertToString($data, $type) {
61 return implode(" ", $data);
65 class JSONConverter extends Converter
67 function convertTypes() {
68 return [ $this->types["json"]->oid ];
71 function convertFromString($string, $type) {
72 return json_decode($string);
75 function convertToString($data, $type) {
76 return json_encode($data);
82 function __construct($data) {
85 function __toString() {
86 return (string) $this->data;
90 $c = new pq\Connection(PQ_DSN);
91 $c->exec("CREATE EXTENSION IF NOT EXISTS hstore");
92 $t = new pq\Types($c);
94 $c->setConverter(new HStoreConverter($t));
95 $c->setConverter(new IntVectorConverter($t));
96 if (!defined("pq\\Types::JSON")) {
97 $c->setConverter(new JSONConverter($t));
99 $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, ".
100 "\$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 ",
113 2345124, 1431341, 1343423
118 "obj" => (object) array(
126 array(array(array(1,2,3))),
127 array(array("a\"","b}",null)),
143 [new Text(0), new Text(" or "), new Text(true)],
147 $t["int2vector"]->oid,
148 $t["oidvector"]->oid,
158 $t["timestamp"]->oid,
159 $t["timestamptz"]->oid,
162 $t["timestamp"]->oid,
163 $t["timestamptz"]->oid,
168 var_dump($r->fetchAll());
211 object(stdClass)#%d (3) {
215 object(stdClass)#%d (3) {
272 object(pq\DateTime)#%d (4) {
276 string(26) "%d-%d-%d 00:00:00.000000"
283 object(pq\DateTime)#%d (4) {
285 string(11) "Y-m-d H:i:s"
287 string(26) "%d-%d-%d %d:%d:%d.000000"
294 object(pq\DateTime)#%d (4) {
296 string(13) "Y-m-d H:i:s.u"
298 string(26) "%d-%d-%d %d:%d:%d.000000"
305 object(pq\DateTime)#%d (4) {
307 string(14) "Y-m-d H:i:s.uO"
309 string(26) "%d-%d-%d %d:%d:%d.000000"
316 object(pq\DateTime)#%d (4) {
320 string(26) "%d-%d-%d 00:00:00.000000"
327 object(pq\DateTime)#%d (4) {
329 string(11) "Y-m-d H:i:s"
331 string(26) "%d-%d-%d %d:%d:%d.000000"
338 object(pq\DateTime)#%d (4) {
340 string(13) "Y-m-d H:i:s.u"
342 string(26) "%d-%d-%d %d:%d:%d.000000"
349 object(pq\DateTime)#%d (4) {
351 string(14) "Y-m-d H:i:s.uO"
353 string(26) "%d-%d-%d %d:%d:%d.000000"