@@ -5,8 +5,8 @@ interface DatabaseInterface {
5
5
public function getSql ($ name );
6
6
public function connect ($ hostname ,$ username ,$ password ,$ database ,$ port ,$ socket ,$ charset );
7
7
public function query ($ sql ,$ params =array ());
8
- public function fetchAssoc ($ result, $ fields = false );
9
- public function fetchRow ($ result, $ fields = false );
8
+ public function fetchAssoc ($ result );
9
+ public function fetchRow ($ result );
10
10
public function insertId ($ result );
11
11
public function affectedRows ($ result );
12
12
public function close ($ result );
@@ -16,6 +16,7 @@ public function likeEscape($string);
16
16
public function isNumericType ($ field );
17
17
public function isBinaryType ($ field );
18
18
public function isGeometryType ($ field );
19
+ public function isJsonType ($ field );
19
20
public function getDefaultCharset ();
20
21
public function beginTransaction ();
21
22
public function commitTransaction ();
@@ -117,8 +118,8 @@ public function query($sql,$params=array()) {
117
118
$ param = array_shift ($ params );
118
119
if ($ matches [0 ]=='! ' ) {
119
120
$ key = preg_replace ('/[^a-zA-Z0-9\-_=<> ]/ ' ,'' ,is_object ($ param )?$ param ->key :$ param );
120
- if (is_object ($ param ) && $ param ->type =='base64 ' ) {
121
- return "TO_BASE64 ( \"$ key \") as \"$ key \"" ;
121
+ if (is_object ($ param ) && $ param ->type =='hex ' ) {
122
+ return "HEX ( \"$ key \") as \"$ key \"" ;
122
123
}
123
124
if (is_object ($ param ) && $ param ->type =='wkt ' ) {
124
125
return "ST_AsText( \"$ key \") as \"$ key \"" ;
@@ -128,8 +129,8 @@ public function query($sql,$params=array()) {
128
129
if (is_array ($ param )) return '( ' .implode (', ' ,array_map (function ($ v ) use (&$ db ) {
129
130
return "' " .mysqli_real_escape_string ($ db ,$ v )."' " ;
130
131
},$ param )).') ' ;
131
- if (is_object ($ param ) && $ param ->type =='base64 ' ) {
132
- return "x' " .bin2hex ( base64_decode ( $ param ->value )) ."' " ;
132
+ if (is_object ($ param ) && $ param ->type =='hex ' ) {
133
+ return "x' " .$ param ->value ."' " ;
133
134
}
134
135
if (is_object ($ param ) && $ param ->type =='wkt ' ) {
135
136
return "ST_GeomFromText(' " .mysqli_real_escape_string ($ db ,$ param ->value )."') " ;
@@ -143,29 +144,12 @@ public function query($sql,$params=array()) {
143
144
return mysqli_query ($ db ,$ sql );
144
145
}
145
146
146
- protected function convertFloatAndInt ($ result ,&$ values ,&$ fields ) {
147
- array_walk ($ values , function (&$ v ,$ i ) use ($ result ,$ fields ){
148
- if (is_string ($ v ) && $ this ->isNumericType ($ fields [$ i ])) {
149
- $ v +=0 ;
150
- }
151
- });
152
- }
153
-
154
- public function fetchAssoc ($ result ,$ fields =false ) {
155
- $ values = mysqli_fetch_assoc ($ result );
156
- if ($ values && $ fields && !defined ('MYSQLI_OPT_INT_AND_FLOAT_NATIVE ' )) {
157
- $ this ->convertFloatAndInt ($ result ,$ values ,$ fields );
158
- }
159
- return $ values ;
147
+ public function fetchAssoc ($ result ) {
148
+ return mysqli_fetch_assoc ($ result );
160
149
}
161
150
162
- public function fetchRow ($ result ,$ fields =false ) {
163
- $ values = mysqli_fetch_row ($ result );
164
- if ($ values && $ fields && !defined ('MYSQLI_OPT_INT_AND_FLOAT_NATIVE ' )) {
165
- $ fields = array_values ($ fields );
166
- $ this ->convertFloatAndInt ($ result ,$ values ,$ fields );
167
- }
168
- return $ values ;
151
+ public function fetchRow ($ result ) {
152
+ return mysqli_fetch_row ($ result );
169
153
}
170
154
171
155
public function insertId ($ result ) {
@@ -210,6 +194,10 @@ public function isGeometryType($field) {
210
194
return ($ field ->type ==255 );
211
195
}
212
196
197
+ public function isJsonType ($ field ) {
198
+ return ($ field ->type ==245 );
199
+ }
200
+
213
201
public function getDefaultCharset () {
214
202
return 'utf8 ' ;
215
203
}
@@ -358,8 +346,8 @@ public function query($sql,$params=array()) {
358
346
$ param = array_shift ($ params );
359
347
if ($ matches [0 ]=='! ' ) {
360
348
$ key = preg_replace ('/[^a-zA-Z0-9\-_=<> ]/ ' ,'' ,is_object ($ param )?$ param ->key :$ param );
361
- if (is_object ($ param ) && $ param ->type =='base64 ' ) {
362
- return "encode( \"$ key \",'base64 ') as \"$ key \"" ;
349
+ if (is_object ($ param ) && $ param ->type =='hex ' ) {
350
+ return "encode( \"$ key \",'hex ') as \"$ key \"" ;
363
351
}
364
352
if (is_object ($ param ) && $ param ->type =='wkt ' ) {
365
353
return "ST_AsText( \"$ key \") as \"$ key \"" ;
@@ -369,8 +357,8 @@ public function query($sql,$params=array()) {
369
357
if (is_array ($ param )) return '( ' .implode (', ' ,array_map (function ($ v ) use (&$ db ) {
370
358
return "' " .pg_escape_string ($ db ,$ v )."' " ;
371
359
},$ param )).') ' ;
372
- if (is_object ($ param ) && $ param ->type =='base64 ' ) {
373
- return "'\x " .bin2hex ( base64_decode ( $ param ->value )) ."' " ;
360
+ if (is_object ($ param ) && $ param ->type =='hex ' ) {
361
+ return "'\x " .$ param ->value ."' " ;
374
362
}
375
363
if (is_object ($ param ) && $ param ->type =='wkt ' ) {
376
364
return "ST_GeomFromText(' " .pg_escape_string ($ db ,$ param ->value )."') " ;
@@ -386,29 +374,12 @@ public function query($sql,$params=array()) {
386
374
return @pg_query ($ db ,$ sql );
387
375
}
388
376
389
- protected function convertFloatAndInt ($ result ,&$ values ,&$ fields ) {
390
- array_walk ($ values , function (&$ v ,$ i ) use ($ result ,$ fields ){
391
- if (is_string ($ v ) && $ this ->isNumericType ($ fields [$ i ])) {
392
- $ v +=0 ;
393
- }
394
- });
395
- }
396
-
397
- public function fetchAssoc ($ result ,$ fields =false ) {
398
- $ values = pg_fetch_assoc ($ result );
399
- if ($ values && $ fields ) {
400
- $ this ->convertFloatAndInt ($ result ,$ values ,$ fields );
401
- }
402
- return $ values ;
377
+ public function fetchAssoc ($ result ) {
378
+ return pg_fetch_assoc ($ result );
403
379
}
404
380
405
- public function fetchRow ($ result ,$ fields =false ) {
406
- $ values = pg_fetch_row ($ result );
407
- if ($ values && $ fields ) {
408
- $ fields = array_values ($ fields );
409
- $ this ->convertFloatAndInt ($ result ,$ values ,$ fields );
410
- }
411
- return $ values ;
381
+ public function fetchRow ($ result ) {
382
+ return pg_fetch_row ($ result );
412
383
}
413
384
414
385
public function insertId ($ result ) {
@@ -460,6 +431,10 @@ public function isGeometryType($field) {
460
431
return $ field ->type == 'geometry ' ;
461
432
}
462
433
434
+ public function isJsonType ($ field ) {
435
+ return $ field ->type == 'jsonb ' ;
436
+ }
437
+
463
438
public function getDefaultCharset () {
464
439
return 'UTF8 ' ;
465
440
}
@@ -595,8 +570,8 @@ public function query($sql,$params=array()) {
595
570
$ param = $ params [$ i ];
596
571
if ($ matches [0 ]=='! ' ) {
597
572
$ key = preg_replace ('/[^a-zA-Z0-9\-_=<> ]/ ' ,'' ,is_object ($ param )?$ param ->key :$ param );
598
- if (is_object ($ param ) && $ param ->type =='base64 ' ) {
599
- return "CAST(N'' AS XML).value('xs:base64Binary(xs:hexBinary(sql:column( \"$ key \")))', 'VARCHAR(MAX)' ) as \"$ key \"" ;
573
+ if (is_object ($ param ) && $ param ->type =='hex ' ) {
574
+ return "CONVERT(varchar(max), \"$ key \", 2 ) as \"$ key \"" ;
600
575
}
601
576
if (is_object ($ param ) && $ param ->type =='wkt ' ) {
602
577
return "\"$ key \".STAsText() as \"$ key \"" ;
@@ -611,8 +586,8 @@ public function query($sql,$params=array()) {
611
586
$ args = array_merge ($ args ,$ param );
612
587
return '( ' .implode (', ' ,str_split (str_repeat ('? ' ,count ($ param )))).') ' ;
613
588
}
614
- if (is_object ($ param ) && $ param ->type =='base64 ' ) {
615
- $ args [] = bin2hex ( base64_decode ( $ param ->value )) ;
589
+ if (is_object ($ param ) && $ param ->type =='hex ' ) {
590
+ $ args [] = $ param ->value ;
616
591
return 'CONVERT(VARBINARY(MAX),?,2) ' ;
617
592
}
618
593
if (is_object ($ param ) && $ param ->type =='wkt ' ) {
@@ -633,11 +608,11 @@ public function query($sql,$params=array()) {
633
608
return sqlsrv_query ($ db ,$ sql ,$ args )?:null ;
634
609
}
635
610
636
- public function fetchAssoc ($ result, $ fields = false ) {
611
+ public function fetchAssoc ($ result ) {
637
612
return sqlsrv_fetch_array ($ result , SQLSRV_FETCH_ASSOC );
638
613
}
639
614
640
- public function fetchRow ($ result, $ fields = false ) {
615
+ public function fetchRow ($ result ) {
641
616
return sqlsrv_fetch_array ($ result , SQLSRV_FETCH_NUMERIC );
642
617
}
643
618
@@ -721,6 +696,10 @@ public function isGeometryType($field) {
721
696
return ($ field ->type ==-151 );
722
697
}
723
698
699
+ public function isJsonType ($ field ) {
700
+ return ($ field ->type ==-152 );
701
+ }
702
+
724
703
public function getDefaultCharset () {
725
704
return 'UTF-8 ' ;
726
705
}
@@ -862,7 +841,10 @@ public function query($sql,$params=array()) {
862
841
if (is_array ($ param )) return '( ' .implode (', ' ,array_map (function ($ v ) use (&$ db ) {
863
842
return "' " .$ db ->escapeString ($ v )."' " ;
864
843
},$ param )).') ' ;
865
- if (is_object ($ param ) && $ param ->type =='base64 ' ) {
844
+ if (is_object ($ param ) && $ param ->type =='hex ' ) {
845
+ return "' " .$ db ->escapeString ($ param ->value )."' " ;
846
+ }
847
+ if (is_object ($ param ) && $ param ->type =='wkt ' ) {
866
848
return "' " .$ db ->escapeString ($ param ->value )."' " ;
867
849
}
868
850
if ($ param ===null ) return 'NULL ' ;
@@ -874,11 +856,11 @@ public function query($sql,$params=array()) {
874
856
return $ result ;
875
857
}
876
858
877
- public function fetchAssoc ($ result, $ fields = false ) {
859
+ public function fetchAssoc ($ result ) {
878
860
return $ result ->fetchArray (SQLITE3_ASSOC );
879
861
}
880
862
881
- public function fetchRow ($ result, $ fields = false ) {
863
+ public function fetchRow ($ result ) {
882
864
return $ result ->fetchArray (SQLITE3_NUM );
883
865
}
884
866
@@ -924,7 +906,11 @@ public function isBinaryType($field) {
924
906
}
925
907
926
908
public function isGeometryType ($ field ) {
927
- return false ;
909
+ return in_array ($ field ->type ,array ('geometry ' ));;
910
+ }
911
+
912
+ public function isJsonType ($ field ) {
913
+ return in_array ($ field ->type ,array ('json ' ,'jsonb ' ));;
928
914
}
929
915
930
916
public function getDefaultCharset () {
@@ -1292,7 +1278,7 @@ protected function retrieveObject($key,$fields,$filters,$tables) {
1292
1278
$ this ->addWhereFromFilters ($ filters [$ table ],$ sql ,$ params );
1293
1279
$ object = null ;
1294
1280
if ($ result = $ this ->db ->query ($ sql ,$ params )) {
1295
- $ object = $ this ->db -> fetchAssoc ($ result ,$ fields [$ table ]);
1281
+ $ object = $ this ->fetchAssoc ($ result ,$ fields [$ table ]);
1296
1282
$ this ->db ->close ($ result );
1297
1283
}
1298
1284
return $ object ;
@@ -1615,19 +1601,22 @@ protected function convertInputs(&$input,$fields) {
1615
1601
if (isset ($ input ->$ key ) && $ input ->$ key && $ this ->db ->isBinaryType ($ field )) {
1616
1602
$ value = $ input ->$ key ;
1617
1603
$ value = str_pad (strtr ($ value , '-_ ' , '+/ ' ), ceil (strlen ($ value ) / 4 ) * 4 , '= ' , STR_PAD_RIGHT );
1618
- $ input ->$ key = (object )array ('type ' =>'base64 ' ,'value ' =>$ value );
1604
+ $ input ->$ key = (object )array ('type ' =>'hex ' ,'value ' =>bin2hex ( base64_decode ( $ value)) );
1619
1605
}
1620
1606
if (isset ($ input ->$ key ) && $ input ->$ key && $ this ->db ->isGeometryType ($ field )) {
1621
1607
$ input ->$ key = (object )array ('type ' =>'wkt ' ,'value ' =>$ input ->$ key );
1622
1608
}
1609
+ if (isset ($ input ->$ key ) && $ input ->$ key && $ this ->db ->isJsonType ($ field )) {
1610
+ $ input ->$ key = (object )array ('type ' =>'json ' ,'value ' =>json_encode ($ input ->$ key ));
1611
+ }
1623
1612
}
1624
1613
}
1625
1614
1626
1615
protected function convertOutputs (&$ sql , &$ params , $ fields ) {
1627
1616
$ sql .= implode (', ' ,str_split (str_repeat ('! ' ,count ($ fields ))));
1628
1617
foreach ($ fields as $ key =>$ field ) {
1629
1618
if ($ this ->db ->isBinaryType ($ field )) {
1630
- $ params [] = (object )array ('type ' =>'base64 ' ,'key ' =>$ key );
1619
+ $ params [] = (object )array ('type ' =>'hex ' ,'key ' =>$ key );
1631
1620
}
1632
1621
else if ($ this ->db ->isGeometryType ($ field )) {
1633
1622
$ params [] = (object )array ('type ' =>'wkt ' ,'key ' =>$ key );
@@ -1638,6 +1627,39 @@ protected function convertOutputs(&$sql, &$params, $fields) {
1638
1627
}
1639
1628
}
1640
1629
1630
+ protected function convertTypes ($ result ,&$ values ,&$ fields ) {
1631
+ array_walk ($ values , function (&$ v ,$ i ) use ($ result ,$ fields ){
1632
+ if (is_string ($ v )) {
1633
+ if ($ this ->db ->isNumericType ($ fields [$ i ])) {
1634
+ $ v +=0 ;
1635
+ }
1636
+ else if ($ this ->db ->isBinaryType ($ fields [$ i ])) {
1637
+ $ v =base64_encode (hex2bin ($ v ));
1638
+ }
1639
+ else if ($ this ->db ->isJsonType ($ fields [$ i ])) {
1640
+ $ v =json_decode ($ v );
1641
+ }
1642
+ }
1643
+ });
1644
+ }
1645
+
1646
+ protected function fetchAssoc ($ result ,$ fields =false ) {
1647
+ $ values = $ this ->db ->fetchAssoc ($ result );
1648
+ if ($ values && $ fields ) {
1649
+ $ this ->convertTypes ($ result ,$ values ,$ fields );
1650
+ }
1651
+ return $ values ;
1652
+ }
1653
+
1654
+ protected function fetchRow ($ result ,$ fields =false ) {
1655
+ $ values = $ this ->db ->fetchRow ($ result ,$ fields );
1656
+ if ($ values && $ fields ) {
1657
+ $ fields = array_values ($ fields );
1658
+ $ this ->convertTypes ($ result ,$ values ,$ fields );
1659
+ }
1660
+ return $ values ;
1661
+ }
1662
+
1641
1663
protected function getParameters ($ settings ) {
1642
1664
extract ($ settings );
1643
1665
@@ -1742,7 +1764,7 @@ protected function listCommandInternal($parameters) {
1742
1764
}
1743
1765
if ($ result = $ this ->db ->query ($ sql ,$ params )) {
1744
1766
while ($ pages = $ this ->db ->fetchRow ($ result )) {
1745
- $ count = $ pages [0 ];
1767
+ $ count = ( int ) $ pages [0 ];
1746
1768
}
1747
1769
}
1748
1770
}
@@ -1767,7 +1789,7 @@ protected function listCommandInternal($parameters) {
1767
1789
$ keys = array_flip ($ keys );
1768
1790
echo ',"records":[ ' ;
1769
1791
$ first_row = true ;
1770
- while ($ row = $ this ->db -> fetchRow ($ result ,$ fields [$ table ])) {
1792
+ while ($ row = $ this ->fetchRow ($ result ,$ fields [$ table ])) {
1771
1793
if ($ first_row ) $ first_row = false ;
1772
1794
else echo ', ' ;
1773
1795
if (isset ($ collect [$ table ])) {
@@ -1817,7 +1839,7 @@ protected function listCommandInternal($parameters) {
1817
1839
$ keys = array_flip ($ keys );
1818
1840
echo ',"records":[ ' ;
1819
1841
$ first_row = true ;
1820
- while ($ row = $ this ->db -> fetchRow ($ result ,$ fields [$ table ])) {
1842
+ while ($ row = $ this ->fetchRow ($ result ,$ fields [$ table ])) {
1821
1843
if ($ first_row ) $ first_row = false ;
1822
1844
else echo ', ' ;
1823
1845
if (isset ($ collect [$ table ])) {
0 commit comments