@@ -54,32 +54,6 @@ public static function toObject(array $desc)
54
54
}
55
55
56
56
switch ($ desc ['expr_type ' ]) {
57
- case ExpressionType::LIMIT_CONST :
58
- if (substr ($ desc ['base_expr ' ], 0 , 1 ) == ': ' ) {
59
- $ instance = new UnquotedParameter ();
60
- $ instance ->setName (substr ($ desc ['base_expr ' ], 1 ));
61
- } else {
62
- $ instance = new LimitNode ();
63
- $ expr = $ desc ['base_expr ' ];
64
- if (strpos ($ expr , "' " ) === 0 ) {
65
- $ expr = substr ($ expr , 1 );
66
- }
67
- if (strrpos ($ expr , "' " ) === strlen ($ expr ) - 1 ) {
68
- $ expr = substr ($ expr , 0 , strlen ($ expr ) - 1 );
69
- }
70
- $ expr = stripslashes ($ expr );
71
-
72
- $ instance ->setValue ($ expr );
73
- }
74
- // Debug:
75
- unset($ desc ['base_expr ' ]);
76
- unset($ desc ['expr_type ' ]);
77
- unset($ desc ['sub_tree ' ]);
78
- if (!empty ($ desc )) {
79
- throw new \InvalidArgumentException ('Unexpected parameters in exception: ' .var_export ($ desc , true ));
80
- }
81
-
82
- return $ instance ;
83
57
case ExpressionType::CONSTANT :
84
58
$ const = new ConstNode ();
85
59
$ expr = $ desc ['base_expr ' ];
@@ -113,6 +87,7 @@ public static function toObject(array $desc)
113
87
unset($ desc ['base_expr ' ]);
114
88
unset($ desc ['expr_type ' ]);
115
89
unset($ desc ['sub_tree ' ]);
90
+ unset($ desc ['delim ' ]);
116
91
117
92
if (!empty ($ desc )) {
118
93
throw new \InvalidArgumentException ('Unexpected parameters in exception: ' .var_export ($ desc , true ));
@@ -137,18 +112,31 @@ public static function toObject(array $desc)
137
112
return $ operator ;
138
113
139
114
case ExpressionType::COLREF :
140
- if (substr ($ desc ['base_expr ' ], 0 , 1 ) == ': ' ) {
115
+ if (substr ($ desc ['base_expr ' ], 0 , 1 ) === ': ' ) {
141
116
$ instance = new Parameter ();
142
117
$ instance ->setName (substr ($ desc ['base_expr ' ], 1 ));
143
118
} else {
144
119
$ instance = new ColRef ();
145
- $ lastDot = strrpos ( $ desc [ ' base_expr ' ], ' . ' );
146
- if ($ lastDot === false ) {
147
- $ instance -> setColumn ( str_replace ( ' ` ' , '' , $ desc ['base_expr ' ])) ;
120
+
121
+ if (isset ( $ desc [ ' no_quotes ' ]) ) {
122
+ $ parts = $ desc ['no_quotes ' ][ ' parts ' ] ;
148
123
} else {
149
- $ instance ->setColumn (str_replace ('` ' , '' , substr ($ desc ['base_expr ' ], $ lastDot + 1 )));
150
- $ instance ->setTable (str_replace ('` ' , '' , substr ($ desc ['base_expr ' ], 0 , $ lastDot )));
124
+ $ parts = explode ('. ' , str_replace ('` ' , '' , $ desc ['base_expr ' ]));
151
125
}
126
+
127
+ $ columnName = array_pop ($ parts );
128
+ $ instance ->setColumn ($ columnName );
129
+
130
+ if (!empty ($ parts )) {
131
+ $ tableName = array_pop ($ parts );
132
+ $ instance ->setTable ($ tableName );
133
+ }
134
+
135
+ if (!empty ($ parts )) {
136
+ $ baseName = array_pop ($ parts );
137
+ $ instance ->setDatabase ($ baseName );
138
+ }
139
+
152
140
if (!empty ($ desc ['alias ' ])) {
153
141
$ instance ->setAlias ($ desc ['alias ' ]['name ' ]);
154
142
}
@@ -167,13 +155,32 @@ public static function toObject(array $desc)
167
155
}
168
156
unset($ desc ['sub_tree ' ]);
169
157
unset($ desc ['alias ' ]);
158
+ unset($ desc ['no_quotes ' ]);
159
+ unset($ desc ['delim ' ]);
170
160
if (!empty ($ desc )) {
171
161
throw new \InvalidArgumentException ('Unexpected parameters in exception: ' .var_export ($ desc , true ));
172
162
}
173
163
174
164
return $ instance ;
175
165
case ExpressionType::TABLE :
176
166
$ expr = new Table ();
167
+
168
+ if (isset ($ desc ['no_quotes ' ])) {
169
+ $ parts = $ desc ['no_quotes ' ]['parts ' ];
170
+
171
+ $ tableName = array_pop ($ parts );
172
+ $ expr ->setTable ($ tableName );
173
+
174
+ if (!empty ($ parts )) {
175
+ $ baseName = array_pop ($ parts );
176
+ $ expr ->setDatabase ($ baseName );
177
+ }
178
+ } else {
179
+ $ expr ->setTable ($ desc ['table ' ]);
180
+ }
181
+
182
+
183
+
177
184
$ expr ->setTable (str_replace ('` ' , '' , $ desc ['table ' ]));
178
185
switch ($ desc ['join_type ' ]) {
179
186
case 'CROSS ' :
@@ -225,6 +232,8 @@ public static function toObject(array $desc)
225
232
unset($ desc ['table ' ]);
226
233
unset($ desc ['ref_type ' ]);
227
234
unset($ desc ['ref_clause ' ]);
235
+ unset($ desc ['hints ' ]);
236
+ unset($ desc ['no_quotes ' ]);
228
237
if (!empty ($ desc )) {
229
238
throw new \InvalidArgumentException ('Unexpected parameters in exception: ' .var_export ($ desc , true ));
230
239
}
@@ -279,8 +288,9 @@ public static function toObject(array $desc)
279
288
unset($ desc ['expr_type ' ]);
280
289
unset($ desc ['sub_tree ' ]);
281
290
unset($ desc ['alias ' ]);
291
+ unset($ desc ['delim ' ]);
282
292
if (!empty ($ desc )) {
283
- throw new \InvalidArgumentException ('Unexpected parameters in exception : ' .var_export ($ desc , true ));
293
+ throw new \InvalidArgumentException ('Unexpected parameters in aggregate function : ' .var_export ($ desc , true ));
284
294
}
285
295
286
296
return $ expr ;
@@ -305,6 +315,7 @@ public static function toObject(array $desc)
305
315
unset($ desc ['sub_tree ' ]);
306
316
unset($ desc ['alias ' ]);
307
317
unset($ desc ['direction ' ]);
318
+ unset($ desc ['delim ' ]);
308
319
if (!empty ($ desc )) {
309
320
throw new \InvalidArgumentException ('Unexpected parameters in simple function: ' .var_export ($ desc , true ));
310
321
}
@@ -393,6 +404,7 @@ public static function toObject(array $desc)
393
404
unset($ desc ['sub_tree ' ]);
394
405
unset($ desc ['alias ' ]);
395
406
unset($ desc ['direction ' ]);
407
+ unset($ desc ['delim ' ]);
396
408
if (!empty ($ desc )) {
397
409
throw new \InvalidArgumentException ('Unexpected parameters in exception: ' .var_export ($ desc , true ));
398
410
}
@@ -403,6 +415,34 @@ public static function toObject(array $desc)
403
415
}
404
416
}
405
417
418
+
419
+ /**
420
+ * Transforms a limit or offset value/parameter into a node.
421
+ *
422
+ * @param string $value
423
+ * @return NodeInterface
424
+ */
425
+ public static function toLimitNode ($ value )
426
+ {
427
+ if (substr ($ value , 0 , 1 ) === ': ' ) {
428
+ $ instance = new UnquotedParameter ();
429
+ $ instance ->setName (substr ($ value , 1 ));
430
+ } else {
431
+ $ instance = new LimitNode ();
432
+ $ expr = $ value ;
433
+ if (strpos ($ expr , "' " ) === 0 ) {
434
+ $ expr = substr ($ expr , 1 );
435
+ }
436
+ if (strrpos ($ expr , "' " ) === strlen ($ expr ) - 1 ) {
437
+ $ expr = substr ($ expr , 0 , -1 );
438
+ }
439
+ $ expr = stripslashes ($ expr );
440
+
441
+ $ instance ->setValue ($ expr );
442
+ }
443
+ return $ instance ;
444
+ }
445
+
406
446
private static function buildFromSubtree ($ subTree )
407
447
{
408
448
if ($ subTree && is_array ($ subTree )) {
0 commit comments