remove obsolete thing that never worked
[scpubgit/Q-Branch.git] / t / 24order_by_chunks.t
1 use strict;
2 use warnings;
3 use Test::More;
4 use Test::Exception;
5 use Data::Dumper::Concise;
6
7 use SQL::Abstract;
8
9 use SQL::Abstract::Test import => ['is_same_sql_bind'];
10 my @cases = (
11   [
12     undef,
13     [
14       \"colA DESC"
15     ],
16     [
17       "colA DESC"
18     ]
19   ],
20   [
21     "`",
22     [
23       \"colA DESC"
24     ],
25     [
26       "colA DESC"
27     ]
28   ],
29   [
30     undef,
31     [
32       "colA"
33     ],
34     [
35       "colA"
36     ]
37   ],
38   [
39     "`",
40     [
41       "colA"
42     ],
43     [
44       "`colA`"
45     ]
46   ],
47   [
48     undef,
49     [
50       "colA DESC"
51     ],
52     [
53       "colA DESC"
54     ]
55   ],
56   [
57     "`",
58     [
59       "colA DESC"
60     ],
61     [
62       "`colA DESC`"
63     ]
64   ],
65   [
66     undef,
67     [
68       "colA"
69     ],
70     [
71       "colA"
72     ]
73   ],
74   [
75     undef,
76     [
77       "colB"
78     ],
79     [
80       "colB"
81     ]
82   ],
83   [
84     undef,
85     [
86       [
87         "colA",
88         "colB"
89       ]
90     ],
91     [
92       "colA",
93       "colB"
94     ]
95   ],
96   [
97     "`",
98     [
99       "colA"
100     ],
101     [
102       "`colA`"
103     ]
104   ],
105   [
106     "`",
107     [
108       "colB"
109     ],
110     [
111       "`colB`"
112     ]
113   ],
114   [
115     "`",
116     [
117       [
118         "colA",
119         "colB"
120       ]
121     ],
122     [
123       "`colA`",
124       "`colB`"
125     ]
126   ],
127   [
128     undef,
129     [
130       "colA ASC"
131     ],
132     [
133       "colA ASC"
134     ]
135   ],
136   [
137     undef,
138     [
139       "colB DESC"
140     ],
141     [
142       "colB DESC"
143     ]
144   ],
145   [
146     undef,
147     [
148       [
149         "colA ASC",
150         "colB DESC"
151       ]
152     ],
153     [
154       "colA ASC",
155       "colB DESC"
156     ]
157   ],
158   [
159     "`",
160     [
161       "colA ASC"
162     ],
163     [
164       "`colA ASC`"
165     ]
166   ],
167   [
168     "`",
169     [
170       "colB DESC"
171     ],
172     [
173       "`colB DESC`"
174     ]
175   ],
176   [
177     "`",
178     [
179       [
180         "colA ASC",
181         "colB DESC"
182       ]
183     ],
184     [
185       "`colA ASC`",
186       "`colB DESC`"
187     ]
188   ],
189   [
190     undef,
191     [
192       "colA"
193     ],
194     [
195       "colA"
196     ]
197   ],
198   [
199     undef,
200     [
201       {
202         "-asc" => "colA"
203       }
204     ],
205     [
206       [
207         "colA ASC"
208       ]
209     ]
210   ],
211   [
212     "`",
213     [
214       "colA"
215     ],
216     [
217       "`colA`"
218     ]
219   ],
220   [
221     "`",
222     [
223       {
224         "-asc" => "colA"
225       }
226     ],
227     [
228       [
229         "`colA` ASC"
230       ]
231     ]
232   ],
233   [
234     undef,
235     [
236       "colB"
237     ],
238     [
239       "colB"
240     ]
241   ],
242   [
243     undef,
244     [
245       {
246         "-desc" => "colB"
247       }
248     ],
249     [
250       [
251         "colB DESC"
252       ]
253     ]
254   ],
255   [
256     "`",
257     [
258       "colB"
259     ],
260     [
261       "`colB`"
262     ]
263   ],
264   [
265     "`",
266     [
267       {
268         "-desc" => "colB"
269       }
270     ],
271     [
272       [
273         "`colB` DESC"
274       ]
275     ]
276   ],
277   [
278     undef,
279     [
280       "colA"
281     ],
282     [
283       "colA"
284     ]
285   ],
286   [
287     undef,
288     [
289       {
290         "-asc" => "colA"
291       }
292     ],
293     [
294       [
295         "colA ASC"
296       ]
297     ]
298   ],
299   [
300     undef,
301     [
302       "colB"
303     ],
304     [
305       "colB"
306     ]
307   ],
308   [
309     undef,
310     [
311       {
312         "-desc" => "colB"
313       }
314     ],
315     [
316       [
317         "colB DESC"
318       ]
319     ]
320   ],
321   [
322     undef,
323     [
324       [
325         {
326           "-asc" => "colA"
327         },
328         {
329           "-desc" => "colB"
330         }
331       ]
332     ],
333     [
334       [
335         "colA ASC"
336       ],
337       [
338         "colB DESC"
339       ]
340     ]
341   ],
342   [
343     "`",
344     [
345       "colA"
346     ],
347     [
348       "`colA`"
349     ]
350   ],
351   [
352     "`",
353     [
354       {
355         "-asc" => "colA"
356       }
357     ],
358     [
359       [
360         "`colA` ASC"
361       ]
362     ]
363   ],
364   [
365     "`",
366     [
367       "colB"
368     ],
369     [
370       "`colB`"
371     ]
372   ],
373   [
374     "`",
375     [
376       {
377         "-desc" => "colB"
378       }
379     ],
380     [
381       [
382         "`colB` DESC"
383       ]
384     ]
385   ],
386   [
387     "`",
388     [
389       [
390         {
391           "-asc" => "colA"
392         },
393         {
394           "-desc" => "colB"
395         }
396       ]
397     ],
398     [
399       [
400         "`colA` ASC"
401       ],
402       [
403         "`colB` DESC"
404       ]
405     ]
406   ],
407   [
408     undef,
409     [
410       "colA"
411     ],
412     [
413       "colA"
414     ]
415   ],
416   [
417     undef,
418     [
419       "colB"
420     ],
421     [
422       "colB"
423     ]
424   ],
425   [
426     undef,
427     [
428       {
429         "-desc" => "colB"
430       }
431     ],
432     [
433       [
434         "colB DESC"
435       ]
436     ]
437   ],
438   [
439     undef,
440     [
441       [
442         "colA",
443         {
444           "-desc" => "colB"
445         }
446       ]
447     ],
448     [
449       "colA",
450       [
451         "colB DESC"
452       ]
453     ]
454   ],
455   [
456     "`",
457     [
458       "colA"
459     ],
460     [
461       "`colA`"
462     ]
463   ],
464   [
465     "`",
466     [
467       "colB"
468     ],
469     [
470       "`colB`"
471     ]
472   ],
473   [
474     "`",
475     [
476       {
477         "-desc" => "colB"
478       }
479     ],
480     [
481       [
482         "`colB` DESC"
483       ]
484     ]
485   ],
486   [
487     "`",
488     [
489       [
490         "colA",
491         {
492           "-desc" => "colB"
493         }
494       ]
495     ],
496     [
497       "`colA`",
498       [
499         "`colB` DESC"
500       ]
501     ]
502   ],
503   [
504     undef,
505     [
506       "colA"
507     ],
508     [
509       "colA"
510     ]
511   ],
512   [
513     undef,
514     [
515       "colB"
516     ],
517     [
518       "colB"
519     ]
520   ],
521   [
522     undef,
523     [
524       [
525         "colA",
526         "colB"
527       ]
528     ],
529     [
530       "colA",
531       "colB"
532     ]
533   ],
534   [
535     undef,
536     [
537       {
538         "-desc" => [
539           "colA",
540           "colB"
541         ]
542       }
543     ],
544     [
545       [
546         "colA DESC"
547       ],
548       [
549         "colB DESC"
550       ]
551     ]
552   ],
553   [
554     undef,
555     [
556       [
557         {
558           "-desc" => [
559             "colA",
560             "colB"
561           ]
562         }
563       ]
564     ],
565     [
566       [
567         "colA DESC"
568       ],
569       [
570         "colB DESC"
571       ]
572     ]
573   ],
574   [
575     "`",
576     [
577       "colA"
578     ],
579     [
580       "`colA`"
581     ]
582   ],
583   [
584     "`",
585     [
586       "colB"
587     ],
588     [
589       "`colB`"
590     ]
591   ],
592   [
593     "`",
594     [
595       [
596         "colA",
597         "colB"
598       ]
599     ],
600     [
601       "`colA`",
602       "`colB`"
603     ]
604   ],
605   [
606     "`",
607     [
608       {
609         "-desc" => [
610           "colA",
611           "colB"
612         ]
613       }
614     ],
615     [
616       [
617         "`colA` DESC"
618       ],
619       [
620         "`colB` DESC"
621       ]
622     ]
623   ],
624   [
625     "`",
626     [
627       [
628         {
629           "-desc" => [
630             "colA",
631             "colB"
632           ]
633         }
634       ]
635     ],
636     [
637       [
638         "`colA` DESC"
639       ],
640       [
641         "`colB` DESC"
642       ]
643     ]
644   ],
645   [
646     undef,
647     [
648       "colA"
649     ],
650     [
651       "colA"
652     ]
653   ],
654   [
655     undef,
656     [
657       "colB"
658     ],
659     [
660       "colB"
661     ]
662   ],
663   [
664     undef,
665     [
666       [
667         "colA",
668         "colB"
669       ]
670     ],
671     [
672       "colA",
673       "colB"
674     ]
675   ],
676   [
677     undef,
678     [
679       {
680         "-desc" => [
681           "colA",
682           "colB"
683         ]
684       }
685     ],
686     [
687       [
688         "colA DESC"
689       ],
690       [
691         "colB DESC"
692       ]
693     ]
694   ],
695   [
696     undef,
697     [
698       "colC"
699     ],
700     [
701       "colC"
702     ]
703   ],
704   [
705     undef,
706     [
707       {
708         "-asc" => "colC"
709       }
710     ],
711     [
712       [
713         "colC ASC"
714       ]
715     ]
716   ],
717   [
718     undef,
719     [
720       [
721         {
722           "-desc" => [
723             "colA",
724             "colB"
725           ]
726         },
727         {
728           "-asc" => "colC"
729         }
730       ]
731     ],
732     [
733       [
734         "colA DESC"
735       ],
736       [
737         "colB DESC"
738       ],
739       [
740         "colC ASC"
741       ]
742     ]
743   ],
744   [
745     "`",
746     [
747       "colA"
748     ],
749     [
750       "`colA`"
751     ]
752   ],
753   [
754     "`",
755     [
756       "colB"
757     ],
758     [
759       "`colB`"
760     ]
761   ],
762   [
763     "`",
764     [
765       [
766         "colA",
767         "colB"
768       ]
769     ],
770     [
771       "`colA`",
772       "`colB`"
773     ]
774   ],
775   [
776     "`",
777     [
778       {
779         "-desc" => [
780           "colA",
781           "colB"
782         ]
783       }
784     ],
785     [
786       [
787         "`colA` DESC"
788       ],
789       [
790         "`colB` DESC"
791       ]
792     ]
793   ],
794   [
795     "`",
796     [
797       "colC"
798     ],
799     [
800       "`colC`"
801     ]
802   ],
803   [
804     "`",
805     [
806       {
807         "-asc" => "colC"
808       }
809     ],
810     [
811       [
812         "`colC` ASC"
813       ]
814     ]
815   ],
816   [
817     "`",
818     [
819       [
820         {
821           "-desc" => [
822             "colA",
823             "colB"
824           ]
825         },
826         {
827           "-asc" => "colC"
828         }
829       ]
830     ],
831     [
832       [
833         "`colA` DESC"
834       ],
835       [
836         "`colB` DESC"
837       ],
838       [
839         "`colC` ASC"
840       ]
841     ]
842   ],
843   [
844     undef,
845     [
846       "colA"
847     ],
848     [
849       "colA"
850     ]
851   ],
852   [
853     undef,
854     [
855       "colB"
856     ],
857     [
858       "colB"
859     ]
860   ],
861   [
862     undef,
863     [
864       [
865         "colA",
866         "colB"
867       ]
868     ],
869     [
870       "colA",
871       "colB"
872     ]
873   ],
874   [
875     undef,
876     [
877       {
878         "-desc" => [
879           "colA",
880           "colB"
881         ]
882       }
883     ],
884     [
885       [
886         "colA DESC"
887       ],
888       [
889         "colB DESC"
890       ]
891     ]
892   ],
893   [
894     undef,
895     [
896       "colC"
897     ],
898     [
899       "colC"
900     ]
901   ],
902   [
903     undef,
904     [
905       "colD"
906     ],
907     [
908       "colD"
909     ]
910   ],
911   [
912     undef,
913     [
914       [
915         "colC",
916         "colD"
917       ]
918     ],
919     [
920       "colC",
921       "colD"
922     ]
923   ],
924   [
925     undef,
926     [
927       {
928         "-asc" => [
929           "colC",
930           "colD"
931         ]
932       }
933     ],
934     [
935       [
936         "colC ASC"
937       ],
938       [
939         "colD ASC"
940       ]
941     ]
942   ],
943   [
944     undef,
945     [
946       [
947         {
948           "-desc" => [
949             "colA",
950             "colB"
951           ]
952         },
953         {
954           "-asc" => [
955             "colC",
956             "colD"
957           ]
958         }
959       ]
960     ],
961     [
962       [
963         "colA DESC"
964       ],
965       [
966         "colB DESC"
967       ],
968       [
969         "colC ASC"
970       ],
971       [
972         "colD ASC"
973       ]
974     ]
975   ],
976   [
977     "`",
978     [
979       "colA"
980     ],
981     [
982       "`colA`"
983     ]
984   ],
985   [
986     "`",
987     [
988       "colB"
989     ],
990     [
991       "`colB`"
992     ]
993   ],
994   [
995     "`",
996     [
997       [
998         "colA",
999         "colB"
1000       ]
1001     ],
1002     [
1003       "`colA`",
1004       "`colB`"
1005     ]
1006   ],
1007   [
1008     "`",
1009     [
1010       {
1011         "-desc" => [
1012           "colA",
1013           "colB"
1014         ]
1015       }
1016     ],
1017     [
1018       [
1019         "`colA` DESC"
1020       ],
1021       [
1022         "`colB` DESC"
1023       ]
1024     ]
1025   ],
1026   [
1027     "`",
1028     [
1029       "colC"
1030     ],
1031     [
1032       "`colC`"
1033     ]
1034   ],
1035   [
1036     "`",
1037     [
1038       "colD"
1039     ],
1040     [
1041       "`colD`"
1042     ]
1043   ],
1044   [
1045     "`",
1046     [
1047       [
1048         "colC",
1049         "colD"
1050       ]
1051     ],
1052     [
1053       "`colC`",
1054       "`colD`"
1055     ]
1056   ],
1057   [
1058     "`",
1059     [
1060       {
1061         "-asc" => [
1062           "colC",
1063           "colD"
1064         ]
1065       }
1066     ],
1067     [
1068       [
1069         "`colC` ASC"
1070       ],
1071       [
1072         "`colD` ASC"
1073       ]
1074     ]
1075   ],
1076   [
1077     "`",
1078     [
1079       [
1080         {
1081           "-desc" => [
1082             "colA",
1083             "colB"
1084           ]
1085         },
1086         {
1087           "-asc" => [
1088             "colC",
1089             "colD"
1090           ]
1091         }
1092       ]
1093     ],
1094     [
1095       [
1096         "`colA` DESC"
1097       ],
1098       [
1099         "`colB` DESC"
1100       ],
1101       [
1102         "`colC` ASC"
1103       ],
1104       [
1105         "`colD` ASC"
1106       ]
1107     ]
1108   ],
1109   [
1110     undef,
1111     [
1112       "colA"
1113     ],
1114     [
1115       "colA"
1116     ]
1117   ],
1118   [
1119     undef,
1120     [
1121       "colB"
1122     ],
1123     [
1124       "colB"
1125     ]
1126   ],
1127   [
1128     undef,
1129     [
1130       [
1131         "colA",
1132         "colB"
1133       ]
1134     ],
1135     [
1136       "colA",
1137       "colB"
1138     ]
1139   ],
1140   [
1141     undef,
1142     [
1143       {
1144         "-desc" => [
1145           "colA",
1146           "colB"
1147         ]
1148       }
1149     ],
1150     [
1151       [
1152         "colA DESC"
1153       ],
1154       [
1155         "colB DESC"
1156       ]
1157     ]
1158   ],
1159   [
1160     undef,
1161     [
1162       "colC"
1163     ],
1164     [
1165       "colC"
1166     ]
1167   ],
1168   [
1169     undef,
1170     [
1171       {
1172         "-desc" => "colC"
1173       }
1174     ],
1175     [
1176       [
1177         "colC DESC"
1178       ]
1179     ]
1180   ],
1181   [
1182     undef,
1183     [
1184       [
1185         {
1186           "-desc" => [
1187             "colA",
1188             "colB"
1189           ]
1190         },
1191         {
1192           "-desc" => "colC"
1193         }
1194       ]
1195     ],
1196     [
1197       [
1198         "colA DESC"
1199       ],
1200       [
1201         "colB DESC"
1202       ],
1203       [
1204         "colC DESC"
1205       ]
1206     ]
1207   ],
1208   [
1209     "`",
1210     [
1211       "colA"
1212     ],
1213     [
1214       "`colA`"
1215     ]
1216   ],
1217   [
1218     "`",
1219     [
1220       "colB"
1221     ],
1222     [
1223       "`colB`"
1224     ]
1225   ],
1226   [
1227     "`",
1228     [
1229       [
1230         "colA",
1231         "colB"
1232       ]
1233     ],
1234     [
1235       "`colA`",
1236       "`colB`"
1237     ]
1238   ],
1239   [
1240     "`",
1241     [
1242       {
1243         "-desc" => [
1244           "colA",
1245           "colB"
1246         ]
1247       }
1248     ],
1249     [
1250       [
1251         "`colA` DESC"
1252       ],
1253       [
1254         "`colB` DESC"
1255       ]
1256     ]
1257   ],
1258   [
1259     "`",
1260     [
1261       "colC"
1262     ],
1263     [
1264       "`colC`"
1265     ]
1266   ],
1267   [
1268     "`",
1269     [
1270       {
1271         "-desc" => "colC"
1272       }
1273     ],
1274     [
1275       [
1276         "`colC` DESC"
1277       ]
1278     ]
1279   ],
1280   [
1281     "`",
1282     [
1283       [
1284         {
1285           "-desc" => [
1286             "colA",
1287             "colB"
1288           ]
1289         },
1290         {
1291           "-desc" => "colC"
1292         }
1293       ]
1294     ],
1295     [
1296       [
1297         "`colA` DESC"
1298       ],
1299       [
1300         "`colB` DESC"
1301       ],
1302       [
1303         "`colC` DESC"
1304       ]
1305     ]
1306   ],
1307   [
1308     undef,
1309     [
1310       "colA"
1311     ],
1312     [
1313       "colA"
1314     ]
1315   ],
1316   [
1317     undef,
1318     [
1319       {
1320         "-asc" => "colA"
1321       }
1322     ],
1323     [
1324       [
1325         "colA ASC"
1326       ]
1327     ]
1328   ],
1329   [
1330     undef,
1331     [
1332       "colB"
1333     ],
1334     [
1335       "colB"
1336     ]
1337   ],
1338   [
1339     undef,
1340     [
1341       [
1342         "colB"
1343       ]
1344     ],
1345     [
1346       "colB"
1347     ]
1348   ],
1349   [
1350     undef,
1351     [
1352       {
1353         "-desc" => [
1354           "colB"
1355         ]
1356       }
1357     ],
1358     [
1359       [
1360         "colB DESC"
1361       ]
1362     ]
1363   ],
1364   [
1365     undef,
1366     [
1367       "colC"
1368     ],
1369     [
1370       "colC"
1371     ]
1372   ],
1373   [
1374     undef,
1375     [
1376       "colD"
1377     ],
1378     [
1379       "colD"
1380     ]
1381   ],
1382   [
1383     undef,
1384     [
1385       [
1386         "colC",
1387         "colD"
1388       ]
1389     ],
1390     [
1391       "colC",
1392       "colD"
1393     ]
1394   ],
1395   [
1396     undef,
1397     [
1398       {
1399         "-asc" => [
1400           "colC",
1401           "colD"
1402         ]
1403       }
1404     ],
1405     [
1406       [
1407         "colC ASC"
1408       ],
1409       [
1410         "colD ASC"
1411       ]
1412     ]
1413   ],
1414   [
1415     undef,
1416     [
1417       [
1418         {
1419           "-asc" => "colA"
1420         },
1421         {
1422           "-desc" => [
1423             "colB"
1424           ]
1425         },
1426         {
1427           "-asc" => [
1428             "colC",
1429             "colD"
1430           ]
1431         }
1432       ]
1433     ],
1434     [
1435       [
1436         "colA ASC"
1437       ],
1438       [
1439         "colB DESC"
1440       ],
1441       [
1442         "colC ASC"
1443       ],
1444       [
1445         "colD ASC"
1446       ]
1447     ]
1448   ],
1449   [
1450     "`",
1451     [
1452       "colA"
1453     ],
1454     [
1455       "`colA`"
1456     ]
1457   ],
1458   [
1459     "`",
1460     [
1461       {
1462         "-asc" => "colA"
1463       }
1464     ],
1465     [
1466       [
1467         "`colA` ASC"
1468       ]
1469     ]
1470   ],
1471   [
1472     "`",
1473     [
1474       "colB"
1475     ],
1476     [
1477       "`colB`"
1478     ]
1479   ],
1480   [
1481     "`",
1482     [
1483       [
1484         "colB"
1485       ]
1486     ],
1487     [
1488       "`colB`"
1489     ]
1490   ],
1491   [
1492     "`",
1493     [
1494       {
1495         "-desc" => [
1496           "colB"
1497         ]
1498       }
1499     ],
1500     [
1501       [
1502         "`colB` DESC"
1503       ]
1504     ]
1505   ],
1506   [
1507     "`",
1508     [
1509       "colC"
1510     ],
1511     [
1512       "`colC`"
1513     ]
1514   ],
1515   [
1516     "`",
1517     [
1518       "colD"
1519     ],
1520     [
1521       "`colD`"
1522     ]
1523   ],
1524   [
1525     "`",
1526     [
1527       [
1528         "colC",
1529         "colD"
1530       ]
1531     ],
1532     [
1533       "`colC`",
1534       "`colD`"
1535     ]
1536   ],
1537   [
1538     "`",
1539     [
1540       {
1541         "-asc" => [
1542           "colC",
1543           "colD"
1544         ]
1545       }
1546     ],
1547     [
1548       [
1549         "`colC` ASC"
1550       ],
1551       [
1552         "`colD` ASC"
1553       ]
1554     ]
1555   ],
1556   [
1557     "`",
1558     [
1559       [
1560         {
1561           "-asc" => "colA"
1562         },
1563         {
1564           "-desc" => [
1565             "colB"
1566           ]
1567         },
1568         {
1569           "-asc" => [
1570             "colC",
1571             "colD"
1572           ]
1573         }
1574       ]
1575     ],
1576     [
1577       [
1578         "`colA` ASC"
1579       ],
1580       [
1581         "`colB` DESC"
1582       ],
1583       [
1584         "`colC` ASC"
1585       ],
1586       [
1587         "`colD` ASC"
1588       ]
1589     ]
1590   ],
1591   [
1592     undef,
1593     [
1594       \[
1595           "colA LIKE ?",
1596           "test"
1597         ]
1598     ],
1599     [
1600       [
1601         "colA LIKE ?",
1602         "test"
1603       ]
1604     ]
1605   ],
1606   [
1607     undef,
1608     [
1609       {
1610         "-desc" => \[
1611             "colA LIKE ?",
1612             "test"
1613           ]
1614       }
1615     ],
1616     [
1617       [
1618         "colA LIKE ? DESC",
1619         "test"
1620       ]
1621     ]
1622   ],
1623   [
1624     "`",
1625     [
1626       \[
1627           "colA LIKE ?",
1628           "test"
1629         ]
1630     ],
1631     [
1632       [
1633         "colA LIKE ?",
1634         "test"
1635       ]
1636     ]
1637   ],
1638   [
1639     "`",
1640     [
1641       {
1642         "-desc" => \[
1643             "colA LIKE ?",
1644             "test"
1645           ]
1646       }
1647     ],
1648     [
1649       [
1650         "colA LIKE ? DESC",
1651         "test"
1652       ]
1653     ]
1654   ],
1655   [
1656     undef,
1657     [
1658       \[
1659           "colA LIKE ? DESC",
1660           "test"
1661         ]
1662     ],
1663     [
1664       [
1665         "colA LIKE ? DESC",
1666         "test"
1667       ]
1668     ]
1669   ],
1670   [
1671     "`",
1672     [
1673       \[
1674           "colA LIKE ? DESC",
1675           "test"
1676         ]
1677     ],
1678     [
1679       [
1680         "colA LIKE ? DESC",
1681         "test"
1682       ]
1683     ]
1684   ],
1685   [
1686     undef,
1687     [
1688       \[
1689           "colA"
1690         ]
1691     ],
1692     [
1693       [
1694         "colA"
1695       ]
1696     ]
1697   ],
1698   [
1699     undef,
1700     [
1701       {
1702         "-asc" => \[
1703             "colA"
1704           ]
1705       }
1706     ],
1707     [
1708       [
1709         "colA ASC"
1710       ]
1711     ]
1712   ],
1713   [
1714     undef,
1715     [
1716       \[
1717           "colB LIKE ?",
1718           "test"
1719         ]
1720     ],
1721     [
1722       [
1723         "colB LIKE ?",
1724         "test"
1725       ]
1726     ]
1727   ],
1728   [
1729     undef,
1730     [
1731       {
1732         "-desc" => \[
1733             "colB LIKE ?",
1734             "test"
1735           ]
1736       }
1737     ],
1738     [
1739       [
1740         "colB LIKE ? DESC",
1741         "test"
1742       ]
1743     ]
1744   ],
1745   [
1746     undef,
1747     [
1748       \[
1749           "colC LIKE ?",
1750           "tost"
1751         ]
1752     ],
1753     [
1754       [
1755         "colC LIKE ?",
1756         "tost"
1757       ]
1758     ]
1759   ],
1760   [
1761     undef,
1762     [
1763       {
1764         "-asc" => \[
1765             "colC LIKE ?",
1766             "tost"
1767           ]
1768       }
1769     ],
1770     [
1771       [
1772         "colC LIKE ? ASC",
1773         "tost"
1774       ]
1775     ]
1776   ],
1777   [
1778     undef,
1779     [
1780       [
1781         {
1782           "-asc" => \[
1783               "colA"
1784             ]
1785         },
1786         {
1787           "-desc" => \[
1788               "colB LIKE ?",
1789               "test"
1790             ]
1791         },
1792         {
1793           "-asc" => \[
1794               "colC LIKE ?",
1795               "tost"
1796             ]
1797         }
1798       ]
1799     ],
1800     [
1801       [
1802         "colA ASC"
1803       ],
1804       [
1805         "colB LIKE ? DESC",
1806         "test"
1807       ],
1808       [
1809         "colC LIKE ? ASC",
1810         "tost"
1811       ]
1812     ]
1813   ],
1814   [
1815     "`",
1816     [
1817       \[
1818           "colA"
1819         ]
1820     ],
1821     [
1822       [
1823         "colA"
1824       ]
1825     ]
1826   ],
1827   [
1828     "`",
1829     [
1830       {
1831         "-asc" => \[
1832             "colA"
1833           ]
1834       }
1835     ],
1836     [
1837       [
1838         "colA ASC"
1839       ]
1840     ]
1841   ],
1842   [
1843     "`",
1844     [
1845       \[
1846           "colB LIKE ?",
1847           "test"
1848         ]
1849     ],
1850     [
1851       [
1852         "colB LIKE ?",
1853         "test"
1854       ]
1855     ]
1856   ],
1857   [
1858     "`",
1859     [
1860       {
1861         "-desc" => \[
1862             "colB LIKE ?",
1863             "test"
1864           ]
1865       }
1866     ],
1867     [
1868       [
1869         "colB LIKE ? DESC",
1870         "test"
1871       ]
1872     ]
1873   ],
1874   [
1875     "`",
1876     [
1877       \[
1878           "colC LIKE ?",
1879           "tost"
1880         ]
1881     ],
1882     [
1883       [
1884         "colC LIKE ?",
1885         "tost"
1886       ]
1887     ]
1888   ],
1889   [
1890     "`",
1891     [
1892       {
1893         "-asc" => \[
1894             "colC LIKE ?",
1895             "tost"
1896           ]
1897       }
1898     ],
1899     [
1900       [
1901         "colC LIKE ? ASC",
1902         "tost"
1903       ]
1904     ]
1905   ],
1906   [
1907     "`",
1908     [
1909       [
1910         {
1911           "-asc" => \[
1912               "colA"
1913             ]
1914         },
1915         {
1916           "-desc" => \[
1917               "colB LIKE ?",
1918               "test"
1919             ]
1920         },
1921         {
1922           "-asc" => \[
1923               "colC LIKE ?",
1924               "tost"
1925             ]
1926         }
1927       ]
1928     ],
1929     [
1930       [
1931         "colA ASC"
1932       ],
1933       [
1934         "colB LIKE ? DESC",
1935         "test"
1936       ],
1937       [
1938         "colC LIKE ? ASC",
1939         "tost"
1940       ]
1941     ],
1942   ],
1943   [
1944     undef,
1945     [{}],
1946     [],
1947   ],
1948 );
1949
1950 for my $case (@cases) {
1951   my ($quote, $expr, $out) = @$case;
1952   my $sqla = SQL::Abstract->new({ quote_char => $quote });
1953
1954   if (
1955     @$expr == 1
1956     and ref($expr->[0]) eq 'REF'
1957     and ref(${$expr->[0]}) eq 'ARRAY'
1958     and @${$expr->[0]} == 1
1959   ) {
1960     # \[ 'foo' ] is exactly equivalent to \'foo' and the new code knows that
1961     $out = $out->[0];
1962   }
1963
1964   my @chunks = $sqla->_order_by_chunks($expr);
1965
1966   unless (is(Dumper(\@chunks), Dumper($out))) {
1967     diag("Above failure from expr: ".Dumper($expr));
1968   }
1969 }
1970
1971 done_testing;