3020945136aecebbca5718e8b514917143c8e8b9
[m6w6/ext-pq] / tests / conv001.phpt
1 --TEST--
2 converter
3 --SKIPIF--
4 <?php
5 include "_skipif.inc";
6 ?>
7 --FILE--
8 <?php
9 echo "Test\n";
10
11 include "_setup.inc";
12
13 abstract class Converter implements pq\ConverterInterface
14 {
15 protected $types;
16
17 function __construct(\pq\Types $types) {
18 $this->types = $types;
19 }
20 }
21
22 class HStoreConverter extends Converter
23 {
24 function convertTypes() {
25 return [ $this->types["hstore"]->oid ];
26 }
27
28 function convertFromString($string) {
29 return eval("return [$string];");
30 }
31
32 function convertToString($data) {
33 $string = "";
34 foreach ($data as $k => $v) {
35 if (isset($v)) {
36 $string .= sprintf("\"%s\"=>\"%s\",", addslashes($k), addslashes($v));
37 } else {
38 $string .= sprintf("\"%s\"=>NULL,", addslashes($k));
39 }
40 }
41 return $string;
42 }
43 }
44
45 class IntVectorConverter extends Converter
46 {
47 function convertTypes() {
48 return [
49 $this->types["int2vector"]->oid,
50 $this->types["oidvector"]->oid
51 ];
52 }
53
54 function convertFromString($string) {
55 return array_map("intval", explode(" ", $string));
56 }
57
58 function convertToString($data) {
59 return implode(" ", $data);
60 }
61 }
62
63 class JSONConverter extends Converter
64 {
65 function convertTypes() {
66 return [ $this->types["json"]->oid ];
67 }
68
69 function convertFromString($string) {
70 return json_decode($string);
71 }
72
73 function convertToString($data) {
74 return json_encode($data);
75 }
76 }
77
78 $c = new pq\Connection(PQ_DSN);
79 $c->exec("CREATE EXTENSION IF NOT EXISTS hstore");
80 $t = new pq\Types($c);
81
82 $c->setConverter(new HStoreConverter($t));
83 $c->setConverter(new IntVectorConverter($t));
84 $c->setConverter(new JSONConverter($t));
85
86 $r = $c->execParams("SELECT \$1 as hs, \$2 as iv, \$3 as oids, \$4 as js",
87 array(
88 // hstore
89 array(
90 "k1" => "v1",
91 "k2" => "v2",
92 "k3" => null
93 ),
94 // vectors
95 array(
96 1, 3, 5, 7, 9, 11
97 ),
98 array(
99 2345124, 1431341, 1343423
100 ),
101 // JSON
102 (object) array(
103 "int" => 123,
104 "obj" => (object) array(
105 "a" => 1,
106 "b" => 2,
107 "c" => 3,
108 ),
109 "str" => "äüö"
110 )
111 ),
112 array(
113 $t["hstore"]->oid,
114 $t["int2vector"]->oid,
115 $t["oidvector"]->oid,
116 $t["json"]->oid
117 )
118 );
119
120 var_dump($r->fetchAll());
121
122 ?>
123 Done
124 --EXPECTF--
125 Test
126 array(1) {
127 [0]=>
128 array(4) {
129 [0]=>
130 array(3) {
131 ["k1"]=>
132 string(2) "v1"
133 ["k2"]=>
134 string(2) "v2"
135 ["k3"]=>
136 NULL
137 }
138 [1]=>
139 array(6) {
140 [0]=>
141 int(1)
142 [1]=>
143 int(3)
144 [2]=>
145 int(5)
146 [3]=>
147 int(7)
148 [4]=>
149 int(9)
150 [5]=>
151 int(11)
152 }
153 [2]=>
154 array(3) {
155 [0]=>
156 int(2345124)
157 [1]=>
158 int(1431341)
159 [2]=>
160 int(1343423)
161 }
162 [3]=>
163 object(stdClass)#%d (3) {
164 ["int"]=>
165 int(123)
166 ["obj"]=>
167 object(stdClass)#%d (3) {
168 ["a"]=>
169 int(1)
170 ["b"]=>
171 int(2)
172 ["c"]=>
173 int(3)
174 }
175 ["str"]=>
176 string(6) "äüö"
177 }
178 }
179 }
180 Done