zmc
2023-12-22 9fdbf60165db0400c2e8e6be2dc6e88138ac719a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
U
¸ý°d/ã^@sJ
UdZddlmZddlZddlmZddlZddlm    Z    ddl
Z
ddl Z ddl Z ddl mZddlZddlmZddlmZddlmZdd    lmZdd
lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddl%m&Z&ddl%m'Z'ddl%m(Z(ddl%m)Z)dd l%m*Z*dd!l%m+Z+dd"l%m,Z,dd#l%m-Z-dd$l%m.Z.dd%l%m/Z/dd&l%m0Z1dd'l2m3Z3dd(l2m4Z4dd)l&m5Z5dd*l&m6Z6dd+l&m7Z7dd,l&m8Z8dd-l&m9Z9dd.l)m:Z:dd/l)m;Z;dd0l-m<Z<dd1l/m=Z=dd2l>m?Z?dd3l@mAZAdd4l@mBZBd5d6l%mCZCd5d&l%m0Z0d5d7l0mDZDd5d8lEmFZFd5d9lEmGZGd5d:lEmHZHej#r‚dd;lImJZJdd<l&mKZKdd=l&mLZLdd>lMmNZNdd?lOmPZPdd@lQmRZRddAlQmSZSddBlQmTZTddCl)mUZUddDl)mVZVddEl)mWZWddFl)mXZXddGl)mYZYddHl*mZZZddIl-m[Z[ddJl.m\Z\ddKl.m]Z]ddLl.m^Z^ddMl.m_Z_ddNl.m`Z`ddOl.maZaddPl.mbZbddQl.mcZcddRl>mdZdddSl>meZed5dTlfmgZgd5dUlhmiZid5dVlhmjZjd5dWlhmkZkd5dXlhmlZld5dYlhmmZmd5dZlhmnZnd5d[lhmoZod5d\lhmpZpd5d]lhmqZqed^erfZsd_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dd€dd‚dƒd„d…d†d‡dˆd‰dŠd‹dŒddŽddd‘d’d“d”d•d–d—d˜d™dšd›dœddždŸd d¡d¢d£d¤d¥d¦d§d¨d©dªd«d¬d­d®d¯d°d±d²d³d´dµd¶d·d¸d¹dºd»d¼h^Zte  ud½e jv¡Zwe  ud¾e jv¡Zxd¿dÀ„eyddÁƒDƒ zdÂg¡Z{e  udÃe jv¡Z|e  udÃe jv¡Z}e  udÄe jv¡Z~e  udÅe j¡Z€e  udÆe j¡ZdÇZ‚e‚dÈdÉdÊdËdÌd͜Zƒe+j„dÎe+j…dÏe+j†dÐe+j‡dÑe+jˆdÒe+j‰dÓe+jŠdÔe+j‹dÕe+jŒdÖe+jd×e+jŽdØe+jdÙe+jdÚe+j‘dÛe+j’dÜe+j“dÝe+j”dÞe+j•dße+j–dàe+j—dáe+j˜dâe+j™dãe+jšdäe+j›dåe+jœdæe+jdçe+jždèe+jŸdée+j dêe+j¡dëe+j¢dìe+j£díe+j¤dîe+j¥dïe+j¦dðe+j§dñe+j¨dòe+j©dóe+jªdôe+j«dõe+j¬döi)Z­e*j®d÷e*j¯døe*j°dùe*j±dúe*j²dûe*j³düe*j´dýe*jµdþe*j¶dÿe*j·de*j¸de*j¹de*jºde*j»diZ¼de½d<ddd    d
d d d dddddddddœZ¾e.j¿jÀde.j¿jÁde.j¿jde.j¿jÐde.j¿jĐde.j¿jŐdiZÆGdd„deƒZÇGdd „d eGƒZÈdZɐd!e½d"<dZʐd#e½d$<d5Zːd%e½d&<d'Z̐d(e½d)<Gd*d+„d+eHƒZÍGd,d-„d-e͐d.d/ZÎGd0d1„d1eƒZÏGd2d3„d3eƒZÐGd4d5„d5eƒZÑGd6d7„d7eDƒZÒGd8d9„d9e    ƒZÓGd:d;„d;e    ƒZÔeÕeԃ\ZÖZ×ZØZÙGd<d=„d=e Úd=d>d?g¡ƒZÛGd@dA„dAƒZÜGdBdC„dCe0j݃ZÞGdDdE„dEe,jßee)jàƒZáGdFdG„dGe,jßee)jàƒZâGdHdI„dIe܃ZãGdJdK„dKeãƒZäGdLdM„dMe܃ZåGdNdO„dOeރZæGdPdQ„dQeæƒZçGdRdS„dSeGƒZèGdTdU„dUeGƒZéGdVdW„dWƒZêdS(Xa]Base SQL and DDL compiler implementations.
 
Classes provided include:
 
:class:`.compiler.SQLCompiler` - renders SQL
strings
 
:class:`.compiler.DDLCompiler` - renders DDL
(data definition language) strings
 
:class:`.compiler.GenericTypeCompiler` - renders
type specification strings.
 
To generate user-defined SQL strings, see
:doc:`/ext/compiler`.
 
é)Ú annotationsN)ÚIntEnum)Ú perf_counter)ÚAny)ÚCallable)Úcast)ÚClassVar)ÚDict)Ú    FrozenSet)ÚIterable)ÚIterator)ÚList)ÚMapping)ÚMutableMapping)Ú
NamedTuple)ÚNoReturn)ÚOptional)ÚPattern)ÚSequence)ÚSet)ÚTuple)ÚType)Ú TYPE_CHECKING)ÚUnioné)Úbase)Ú    coercions)Úcrud)Úelements)Ú    functions)Ú    operators)Úroles)Úschema)Ú
selectable)Úsqltypes)Úutil©Úis_column_element)Úis_dml)Ú _from_objects)Ú
_NONE_NAME)Ú _SentinelDefaultCharacterization)Ú
Executable)ÚNO_ARG)Ú ClauseElement)Ú quoted_name)ÚColumn)Ú    TupleType)Ú
TypeEngine)Úprefix_anon_map)Ú    Visitableé)Úexc)Ú FastIntFlag)ÚLiteral)ÚProtocol)Ú    TypedDict)Ú_AnnotationDict)Ú_AmbiguousTableNameMap)Ú CompileState)ÚCacheKey)ÚExecutableDDLElement)ÚInsert)Ú
UpdateBase)Ú
ValuesBase)Ú_truncated_label)Ú BindParameter)Ú ColumnClause)Ú ColumnElement)ÚLabel)ÚFunction)ÚTable)ÚAliasedReturnsRows)ÚCompoundSelectState)ÚCTE)Ú
FromClause)ÚNamedFromClause)Ú ReturnsRows)ÚSelect)Ú SelectState)Ú_BindProcessorType)Ú_SentinelProcessorType)ÚCursorResultMetaData)Ú_CoreSingleExecuteParams)Ú_DBAPIAnyExecuteParams)Ú_DBAPIMultiExecuteParams)Ú_DBAPISingleExecuteParams)Ú_ExecuteOptions)Ú_GenericSetInputSizesType)Ú_MutableCoreSingleExecuteParams)ÚDialect)ÚSchemaTranslateMapTyperMÚallZanalyseZanalyzeÚandÚanyÚarrayÚasZascZ
asymmetricÚ authorizationZbetweenÚbinaryZbothZcaserÚcheckÚcollateÚcolumnÚ
constraintÚcreateZcrossÚ current_dateZ current_roleÚ current_timeÚcurrent_timestampÚ current_userÚdefaultÚ
deferrableÚdescZdistinctZdoÚelseÚendÚexceptÚfalseÚforZforeignÚfreezeÚfromÚfullZgrantÚgroupZhavingZilikeÚinÚ    initiallyÚinnerZ    intersectZintoÚisZisnullÚjoinÚleadingÚleftZlikeÚlimitÚ    localtimeÚlocaltimestampZnaturalÚnewÚnotZnotnullÚnullÚoffÚoffsetÚoldÚonÚonlyÚorÚorderÚouterÚoverlapsZplacingZprimaryZ
referencesÚrightÚselectÚ session_userÚsetZsimilarZsomeÚ    symmetricÚtableZthenÚtoZtrailingÚtrueÚunionÚuniqueÚuserZusingÚverboseÚwhenÚwherez ^[A-Z0-9_$]+$z^[A-Z0-9_ $]+$cCsh|] }t|ƒ’qS©)Ústr)Ú.0ÚxržržúNd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\sqlalchemy/sql/compiler.pyÚ    <setcomp>åsr£é
ú$z5^(?:RESTRICT|CASCADE|SET NULL|NO ACTION|SET DEFAULT)$z^(?:DEFERRED|IMMEDIATE)$z%(?<![:\w\$\x5c]):([\w\$]+)(?![:\w\$])z\x5c(:[\w\$]*)(?![:\w\$])z %%(%(name)s)sú?z%%sz :[_POSITION]z $[_POSITION]z    :%(name)s)ÚpyformatÚqmarkÚformatÚnumericÚnumeric_dollarÚnamedz AND z OR z + z * z - ú % ú-z < z <= z != z > z >= z = z IS DISTINCT FROM z IS NOT DISTINCT FROM z || z MATCH z  NOT MATCH z IN z NOT IN ú, z FROM ú AS z IS z IS NOT z     COLLATE zEXISTS ú    DISTINCT zNOT zANY zALL z DESCz ASCz  NULLS FIRSTz  NULLS LASTz ^ z | z & ú~z << z >> ÚcoalesceZ CURRENT_DATEZ CURRENT_TIMEZCURRENT_TIMESTAMPZ CURRENT_USERZ    LOCALTIMEZLOCALTIMESTAMPÚrandomÚsysdateZ SESSION_USERÚUSERZCUBEZROLLUPz GROUPING SETSzDict[Type[Function[Any]], str]Ú    FUNCTIONSÚmonthÚdayÚyearÚsecondÚhourÚdoyÚminuteÚquarterÚdowÚweekÚepochÚ millisecondsÚ microsecondsÚ timezone_hourÚtimezone_minute)r¸r¹rºr»r¼r½r¾r¿rÀrÁrÂrÃrÄrÅrÆÚUNIONz    UNION ALLÚEXCEPTz
EXCEPT ALLÚ    INTERSECTz INTERSECT ALLc@s2eZdZUdZded<ded<ded<ded<d    S)
ÚResultColumnsEntryaTracks a column expression that is expected to be represented
    in the result rows for this statement.
 
    This normally refers to the columns clause of a SELECT statement
    but may also refer to a RETURNING clause, as well as for dialect-specific
    emulations.
 
    rŸÚkeynameÚnameúTuple[Any, ...]ÚobjectsúTypeEngine[Any]ÚtypeN©Ú__name__Ú
__module__Ú __qualname__Ú__doc__Ú__annotations__ržržržr¢rÊZs
    rÊc@s"eZdZddddddœdd„ZdS)    Ú_ResultMapAppenderrŸú Sequence[Any]rÏÚNone©rËrÌrÎÚtype_ÚreturncCsdS©Nrž©ÚselfrËrÌrÎrÛržržr¢Ú__call__zsz_ResultMapAppender.__call__N©rÒrÓrÔràržržržr¢r×ysr×z
Literal[0]ÚRM_RENDERED_NAMEz
Literal[1]ÚRM_NAMEz
Literal[2]Ú
RM_OBJECTSéz
Literal[3]ÚRM_TYPEc@s&eZdZUded<ded<ded<dS)Ú_BaseCompilerStackEntryzSet[FromClause]Ú asfrom_fromsÚcorrelate_fromsrOr#N©rÒrÓrÔrÖržržržr¢rçŒs
rçc@s6eZdZUded<ded<ded<ded<ded    <d
S) Ú_CompilerStackEntryr=Ú compile_stateÚboolÚneed_result_map_for_nestedÚneed_result_map_for_compoundrOÚselect_0ú Select[Any]Úinsert_from_selectNrêržržržr¢rë’s
 
rëF)Útotalc@s^eZdZUdZded<ded<ded<ded    <d
ed <ed d œdd„ƒZedd œdd„ƒZdS)Ú ExpandedStatea¹represents state to use when producing "expanded" and
    "post compile" bound parameters for a statement.
 
    "expanded" parameters are parameters that are generated at
    statement execution time to suit a number of parameters passed, the most
    prominent example being the individual elements inside of an IN expression.
 
    "post compile" parameters are parameters where the SQL literal value
    will be rendered into the SQL statement at execution time, rather than
    being passed as separate parameters to the driver.
 
    To create an :class:`.ExpandedState` instance, use the
    :meth:`.SQLCompiler.construct_expanded_state` method on any
    :class:`.SQLCompiler` instance.
 
    rŸÚ    statementrUÚ
parametersú%Mapping[str, _BindProcessorType[Any]]Ú
processorsúOptional[Sequence[str]]Ú positiontupzMapping[str, List[str]]Zparameter_expansionrÍ©rÜcs,ˆjdkrt d¡‚t‡fdd„ˆjDƒƒS)zrTuple of positional parameters, for statements that were compiled
        using a positional paramstyle.
 
        Nz.statement does not use a positional paramstylec3s|]}ˆj|VqdSrÝ©rö©r Úkey©rßržr¢Ú    <genexpr>Ïsz6ExpandedState.positional_parameters.<locals>.<genexpr>)rúr6ÚInvalidRequestErrorÚtuplerÿržrÿr¢Úpositional_parametersÅs
 
ÿz#ExpandedState.positional_parameterscCs|jS)z.synonym for :attr:`.ExpandedState.parameters`.rürÿržržr¢Úadditional_parametersÑsz#ExpandedState.additional_parametersN)rÒrÓrÔrÕrÖÚpropertyrrržržržr¢rôšs
 
 rôc@s†eZdZUdZded<ded<ded<ded    <d
Zded <d
Zded <d Zded<dZded<d Z    ded<d
Z
ded<d
Z ded<d S)Ú_InsertManyValuesarepresents state to use for executing an "insertmanyvalues" statement.
 
    The primary consumers of this object are the
    :meth:`.SQLCompiler._deliver_insertmanyvalues_batches` and
    :meth:`.DefaultDialect._deliver_insertmanyvalues_batches` methods.
 
    .. versionadded:: 2.0
 
    ríÚis_default_exprrŸÚsingle_values_exprúList[crud._CrudParamElementStr]Úinsert_crud_paramsÚintÚnum_positional_params_countedFÚsort_by_parameter_orderÚincludes_upsert_behaviorsNúOptional[Sequence[Column[Any]]]Úsentinel_columnsrÚnum_sentinel_columnsz#Optional[Sequence[Union[str, int]]]Úsentinel_param_keysÚimplicit_sentinelÚembed_values_counter) rÒrÓrÔrÕrÖr rrrrrrržržržr¢r×s
 
        rc@sZeZdZUdZded<ded<ded<ded    <d
ed <d
ed <d
ed <ded<ded<dS)Ú_InsertManyValuesBatchasrepresents an individual batch SQL statement for insertmanyvalues.
 
    This is passed through the
    :meth:`.SQLCompiler._deliver_insertmanyvalues_batches` and
    :meth:`.DefaultDialect._deliver_insertmanyvalues_batches` methods out
    to the :class:`.Connection` within the
    :meth:`.Connection._exec_insertmany_context` method.
 
    .. versionadded:: 2.0.10
 
    rŸÚreplaced_statementrVÚreplaced_parametersú#Optional[_GenericSetInputSizesType]Úprocessed_setinputsizesú#Sequence[_DBAPISingleExecuteParams]Úbatchr Ú
batch_sizeÚbatchnumÚ total_batchesríZ rows_sortedZ is_downgradedNrÑržržržr¢rJs
 rc@s<eZdZdZdZdZdZdZeeBeBZeeBZ    dZ
dZ dS)    ÚInsertmanyvaluesSentinelOptszcbitflag enum indicating styles of PK defaults
    which can work as implicit sentinel columns
 
    rr5éééé@N) rÒrÓrÔrÕZ NOT_SUPPORTEDÚ AUTOINCREMENTÚIDENTITYÚSEQUENCEÚANY_AUTOINCREMENTÚ_SUPPORTED_OR_NOTÚUSE_INSERT_FROM_SELECTÚRENDER_SELECT_COL_CASTSržržržr¢rbs rc@seZdZdZdZdZdS)Ú CompilerStaterrr5N)rÒrÓrÔÚ    COMPILINGÚSTRING_APPLIEDÚ NO_STATEMENTržržržr¢r+tsr+c@s$eZdZdZdZdZdZeeBZdS)ÚLintingzžrepresent preferences for the 'SQL linting' feature.
 
    this feature currently includes support for flagging cartesian products
    in SQL statements.
 
    rrr5N)rÒrÓrÔrÕÚ
NO_LINTINGÚCOLLECT_CARTESIAN_PRODUCTSÚ WARN_LINTINGÚ FROM_LINTINGržržržr¢r/„s r/c@s$eZdZdZddd„Zd    dd„ZdS)
Ú
FromLinterzKrepresents current state for the "cartesian product" detection
    feature.Ncs°|j}|sdSt|jƒ}t|ƒ}|dk    r8|}| |¡n| ¡}t |g¡}|rœ|rœ| ¡‰| ˆ¡‡fdd„|Dƒ}|     ‡fdd„|Dƒ¡| 
|¡qL|r¨||fSdSdS)N)NNcsh|]}ˆ|kr|’qSržrž©r Zedge©Únoderžr¢r£¼sz"FromLinter.lint.<locals>.<setcomp>c3s|]}|| ˆ¡ VqdSrÝ)Úindexr5r6ržr¢rÀsz"FromLinter.lint.<locals>.<genexpr>) Úfromsr“ÚedgesÚremoveÚpopÚ collectionsÚdequeÚpopleftÚdiscardÚ
extendleftÚdifference_update)rßÚstartr9r:Úthe_restÚ
start_withÚstackZ    to_removeržr6r¢Úlint¤s&
 
 zFromLinter.lintÚSELECTcsXˆ ¡\}}|rT|}|rTd}d ‡fdd„|Dƒ¡}|j||ˆj|d}t |¡dS)Nz£{stmt_type} statement has a cartesian product between FROM element(s) {froms} and FROM element "{start}".  Apply join condition(s) between each element to resolve.r¯c3s |]}dˆj|›dVqdS)ú"N)r9)r Úfrom_rÿržr¢r×sz"FromLinter.warn.<locals>.<genexpr>)Ú    stmt_typer9rC)rGr~r©r9r%Úwarn)rßrKrDrEr9ÚtemplateZ    froms_strÚmessageržrÿr¢rLÉs ÿÿýzFromLinter.warn)N)rH)rÒrÓrÔrÕrGrLržržržr¢r4 s
%r4r9r:csPeZdZUdZdZded<dZded<ded    <d
Zd
ZdZ    d ed <dZ
d ed<dZ ded<e j Zded<ded<e j Zded<dZded<dZded<dZded<ded<dd
e  ¡fddddd d!œd"d#„Zd$d%œ‡fd&d'„ Zed(d)„ƒZd*d+„Zd,d-„Zed.d/„ƒZd0d1dd2œd3d4„Zdd%œd5d6„Zd@d8d9dd:d;œd<d=„Zed>d?„ƒZ‡Z S)AÚCompiledaRepresent a compiled SQL or DDL expression.
 
    The ``__str__`` method of the ``Compiled`` object should produce
    the actual text of the statement.  ``Compiled`` objects are
    specific to their underlying database dialect, and also may
    or may not be specific to the columns referenced within a
    particular set of bind parameters.  In no case should the
    ``Compiled`` object be dependent on the actual values of those
    bind parameters, even though it may reference those values as
    defaults.
    NúOptional[ClauseElement]rõÚrŸÚstringr+ÚstateFzOptional[CursorResultMetaData]Ú_cached_metadataz"Optional[List[ResultColumnsEntry]]Ú_result_columnsú Optional[SchemaTranslateMapType]Úschema_translate_maprYÚexecution_optionsÚIdentifierPreparerÚpreparerr;Ú _annotationszOptional[CompileState]rìÚdml_compile_stateúOptional[CacheKey]Ú    cache_keyÚfloatÚ    _gen_timer\ríúMapping[str, Any]©ÚdialectrõrWÚrender_schema_translateÚcompile_kwargscCs´||_|jj|_|r(||_|j |¡|_|dk    r tj|_||_|j    |_
|j |_ |j
rnt rft |tƒsft‚|j|_|j|jf|Ž|_|r–|j |j|¡|_tj|_ntj|_tƒ|_dS)aûConstruct a new :class:`.Compiled` object.
 
        :param dialect: :class:`.Dialect` to compile against.
 
        :param statement: :class:`_expression.ClauseElement` to be compiled.
 
        :param schema_translate_map: dictionary of schema names to be
         translated when forming the resultant SQL
 
         .. seealso::
 
            :ref:`schema_translating`
 
        :param compile_kwargs: additional kwargs that will be
         passed to the initial call to :meth:`.Compiled.process`.
 
 
        N)rcÚidentifier_preparerrZrWÚ_with_schema_translater+r,rSrõZsupports_executionÚ can_executer[rÚ
isinstancer,ÚAssertionErrorZ_execution_optionsrXÚprocessrRÚ_render_schema_translatesr-r.rr`©rßrcrõrWrdreržržr¢Ú__init__8s2
ÿÿ
zCompiled.__init__rÙrûcs| ¡tƒ ¡SrÝ)Ú_init_compiler_clsÚsuperÚ__init_subclass__©Úcls©Ú    __class__ržr¢rqpszCompiled.__init_subclass__cCsdSrÝržrrržržr¢rotszCompiled._init_compiler_clscCs$|jr| |||¡St |j¡‚dSrÝ)rhZ_execute_compiledr6ZObjectNotExecutableErrorrõ)rßÚ
connectionZdistilled_paramsrXržržr¢Ú_execute_on_connectionxsÿzCompiled._execute_on_connectioncKst |t|ƒ¡|‚dSrÝ©r6ÚUnsupportedCompilationErrorrЩrßÚelementÚerrÚkwržržr¢Úvisit_unsupported_compilation‚sz&Compiled.visit_unsupported_compilationcCs
tƒ‚dS)zReturn a Compiled that is capable of processing SQL expressions.
 
        If this compiler is one, it would likely just return 'self'.
 
        N©ÚNotImplementedErrorrÿržržr¢Ú sql_compiler…szCompiled.sql_compilerr4r)ÚobjÚkwargsrÜcKs|j|f|ŽSrÝ©Ú_compiler_dispatch)rßr‚rƒržržr¢rkszCompiled.processcCs|jtjkr|jSdSdS)z3Return the string text of the generated SQL or DDL.rQN)rSr+r-rRrÿržržr¢Ú__str__’s zCompiled.__str__Tú"Optional[_CoreSingleExecuteParams]ú&Optional[Sequence[BindParameter[Any]]]ú)Optional[_MutableCoreSingleExecuteParams]©ÚparamsÚextracted_parametersÚ escape_namesrÜcCs
tƒ‚dS)zâReturn the bind params for this compiled object.
 
        :param params: a dict of string/object pairs whose values will
                       override bind values compiled in to the
                       statement.
        Nr©rßr‹rŒrržržr¢Úconstruct_paramsšs zCompiled.construct_paramscCs| ¡S)z0Return the bind params for this compiled object.©rrÿržržr¢r‹©szCompiled.params)NNT)!rÒrÓrÔrÕrõrÖrRÚis_sqlÚis_ddlrTrUrWr%Ú
EMPTY_DICTrXr[rìr\r^Ú immutabledictrnrqÚ classmethodrorwr~rrrkr†rr‹Ú __classcell__ržržrtr¢rOãsF
       ú8
 
 
    
ürOc@sHeZdZdZdZddœdd„Zddd    d
œd d „Zdd dddœdd„ZdS)Ú TypeCompilerz2Produces DDL specification for TypeEngine objects.z    visit_\w+r\©rccCs
||_dSrÝr˜)rßrcržržr¢rn´szTypeCompiler.__init__rÏrrŸ)rÛr}rÜcKs0|jr"|jj|jkr"|j|jj}|j|f|ŽSrÝ)Z_variant_mappingrcrÌr…©rßrÛr}ržržr¢rk·s ÿ þzTypeCompiler.processÚ    Exceptionr)r{r|r}rÜcKst ||¡|‚dSrÝ)r6ryrzržržr¢r~¿sz*TypeCompiler.visit_unsupported_compilationN)rÒrÓrÔrÕZ ensure_kwargrnrkr~ržržržr¢r—¯s
r—c@sBeZdZdZdZdZddd„Zedd„ƒZed    d
„ƒZ    d d „Z
d S)Ú _CompileLabelz;lightweight label object which acts as an expression.Label.Úlabel©r{rÌÚ
_alt_namesržcCs||_||_|f||_dSrÝr)rßÚcolrÌÚ    alt_namesržržr¢rnÐsz_CompileLabel.__init__cCs|jjSrÝ©r{Ú    proxy_setrÿržržr¢r¢Õsz_CompileLabel.proxy_setcCs|jjSrÝ©r{rÐrÿržržr¢rÐÙsz_CompileLabel.typecKs|SrÝrž©rßr}ržržr¢Ú
self_groupÝsz_CompileLabel.self_groupN)rž) rÒrÓrÔrÕÚ__visit_name__Ú    __slots__rnrr¢rÐr¥ržržržr¢r›Çs
 
 
r›c@sHeZdZdZdZdZdd„Zedd„ƒZedd    „ƒZ    d
d „Z
d d „Z dS)Úilike_case_insensitiveaproduce a wrapping element for a case-insensitive portion of
    an ILIKE construct.
 
    The construct usually renders the ``lower()`` function, but on
    PostgreSQL will pass silently with the assumption that "ILIKE"
    is being used.
 
    .. versionadded:: 2.0
 
    Zilike_case_insensitive_operand©r{Z
comparatorcCs||_|j|_dSrÝr©)rßr{ržržr¢rnòszilike_case_insensitive.__init__cCs|jjSrÝr¡rÿržržr¢r¢ösz ilike_case_insensitive.proxy_setcCs|jjSrÝr£rÿržržr¢rÐúszilike_case_insensitive.typecKs|SrÝržr¤ržržr¢r¥þsz!ilike_case_insensitive.self_groupcCst|j |¡ƒSrÝ)r¨r{Ú_with_binary_element_type)rßrÛržržr¢rªs
ÿz0ilike_case_insensitive._with_binary_element_typeN) rÒrÓrÔrÕr¦r§rnrr¢rÐr¥rªržržržr¢r¨ás 
 
r¨c @sò eZdZUdZeZe dddddddddœ¡Zde    d    <d
e    d <de    d <d Z
e Z dZ de    d<dZde    d<dZde    d<de    d<dZde    d<dZde    d<dZde    d<dZde    d<de    d<de    d <d!e    d"<dZde    d#<dZde    d$<dZde    d%<d&e    d'<d&e    d(<d&e    d)<d*e    d+<dZde    d,<dZde    d-<d Zde    d.<dZde    d/<dZde    d0<dZde    d1<dZd2e    d3<dZd4e    d5<dZd6e    d7<dZ d8e    d9<dZ!d:e    d;<e"ƒZ#d<e    d=<e"ƒZ$d<e    d><ej%Z&d?e    d@<dZ'dZ(dZ)dAe    dB<dZ*d6e    dC<dZ+d6e    dD<dZ,d6e    dE<dZ-de    dF<dGe    dH<dIe    dJ<dKe    dL<de    dM<e. /dN¡Z0e. /dO¡Z1e. /e1j2›dPe0j2›¡Z3e4dQdR„ƒZ5e4dSdT„ƒZ6ddde7fdUdVdWdXddYdZd[œd\d]„Z8e9d4d^œd_d`„ƒZ:ej;dd^œdadb„ƒZ<e9dcdd„ƒZ=e9dedf„ƒZ>e9dgdh„ƒZ?ej@did^œdjdk„ƒZAejBdld^œdmdn„ƒZCeDjEdodp„ƒZFdqdr„ZGdsdt„ZHej@dud^œdvdw„ƒZIej@dxd^œdydz„ƒZJd{d|„ZKe9d}d~„ƒZLdåddd€dœd‚dƒ„ZMdædd„dd…ddd†d‡œdˆd‰„ZNejBdŠd‹„ƒZOe9dŒd„ƒZPdçd†dd€dŽœdd„ZQe Rd‘¡d’d“„ƒZSd”e    d•<ej@d–d^œd—d˜„ƒZTej@e Rd™¡dšd›„ƒƒZUej@e Rd™¡dœd„ƒƒZVdždŸ„ZWdèd d¡„ZXd¢d£„ZYdéd¤d¥„ZZdêd¦d§„Z[dëd¨d©„Z\dªd«„Z]d¬d­„Z^dìd®d¯dd°d±dZd&d²œd³d´„Z_dµd¶„Z`d·d¸„Zad¹dº„Zbd»d¼„Zcd½d¾„Zdd¿dÀ„ZedídÁd„ZfdîdÃdĄZgdÅdƄZhdÇdȄZidÉdʄZjdËd̄ZkdÍd΄ZldÏdЄZmdÑd҄ZndÓdԄZodÕdքZpd×d؄ZqdÙdڄZrdÛd܄ZsdÝdބZtdßdà„Zudádâ„Zvdãdä„Zwdådæ„Zxdïdçd¯dZd&dèœdédê„Zydëdì„Zzdídî„Z{dïdð„Z|dðdñdò„Z}dódô„Z~dõdö„Zdñd÷dø„Z€dùdú„Zdûdü„Z‚dýdþ„Zƒdÿd„Z„dd„Z…dd„Z†dd„Z‡dd„Zˆdòd    d
„Z‰d d „ZАdód d„Z‹dd„ZŒdd„Zdd„Zސdd„Zdd„Zdôdd„Z‘dd„Z’dd„Z“ej@dd „ƒZ”d!d"„Z•d#d$„Z–d%d&„Z—d'd(„Z˜d)d*„Z™d+d,„Zšd-d.„Z›d/d0„Zœd1d2„Zd3d4„Zžd5d6„ZŸd7d8„Z d9d:„Z¡d;d<„Z¢d=d>„Z£d?d@„Z¤dAdB„Z¥dCdD„Z¦dEdF„Z§dGdH„Z¨dIdJ„Z©dKdL„ZªdõdMdN„Z«dOdP„Z¬e­dfdQdR„Z®dSdT„Z¯dUdV„Z°d&dWd&dXœdYdZ„Z±d&d&d[œd\d]„Z²död&ddd4d^d_d6dZd&d`œ    dadb„Z³dcdd„Z´dddddeµ ¶d¡fdedddfdgdhdidZd4djœ    dkdl„Z·dmdn„Z¸dodp„Z¹d÷dqdr„Zºdsdt„Z»dudv„Z¼dødwdx„Z½dydz„Z¾dùd{d|„Z¿d}d~„ZÀdd€„ZÁd&d&d°dd‚dƒœd„d…„Zdúd†d‡„ZÐdûdˆd‰„ZĐdАd‹„ZŐdŒd„ZƐdސd„Zǐdd‘„ZȐd’d“„Zɐd”e    d•<eÊjː    sÂe d–e"ƒfd—e"ƒfg¡Z̐düd˜d™„ZÍdZÎdZe    dš<dýd›dœ„ZϐddždŸœd d¡„ZАd¢d£„Zѐd¤d¥„ZҐd¦d§„ZӐdþd¨d©„ZԐdªd«„ZՐd¬d­„Z֐d®d¯„Zאd°d±„Zؐd²d³„Zِd´dµddZd&d¶œd·d¸„Zڐd¹dº„Zېdÿd»d¼„Zܐdd½d¾„Zݐdd¿dÀ„ZސdÁd„Zße eàjáeâjãeàjäeâjãeàjåeâjãeàjæeâjæeàjçeâjçi¡Zèeè éeàjåeâjêi¡ZëdÐdĐdŜdƐdDŽZìd&dȐdɐdÊddːd̜d͐d΄ZíddϐdЄZîdѐd҄ZïdӐdԄZðdՐdքZñdאd؄ZòdِdڄZódېd܄ZôdݐdބZõdߐdà„Zödádâ„Z÷dãdä„ZødS(Ú SQLCompilerz~Default implementation of :class:`.Compiled`.
 
    Compiles :class:`_expression.ClauseElement` objects into SQL strings.
 
    ÚPÚAÚZÚCÚ_)ú%ú(ú)ú:Ú.ú[ú]ú zClassVar[Mapping[str, str]]Úbindname_escape_characterszClassVar[Pattern[str]]Ú_bind_translate_reÚ_bind_translate_charsTFríÚisdeleteÚisinsertÚisupdatezOptional[List[Column[Any]]]Z    postfetchržzSequence[Column[Any]]Úinsert_prefetchÚupdate_prefetchNz&Optional[Sequence[ColumnElement[Any]]]Úimplicit_returningÚ isplaintextzDict[str, BindParameter[Any]]ÚbindszDict[BindParameter[Any], str]Ú
bind_nameszList[_CompilerStackEntry]rFÚreturning_precedes_valuesÚ'render_table_with_column_in_update_fromÚansi_bind_rulesrŸÚ bindtemplateÚcompilation_bindtemplateÚ_numeric_binds_identifier_charzList[ResultColumnsEntry]rUÚ_textual_ordered_columnsÚ_ad_hoc_textualÚ_ordered_columnsÚ_loose_column_name_matchingÚ_numeric_bindsÚ_render_postcompilezOptional[ExpandedState]Ú_post_compile_expanded_stateú Optional[str]Ú_pre_expanded_stringzOptional[List[str]]Ú_pre_expanded_positiontupzOptional[_InsertManyValues]Ú_insertmanyvaluesz!Optional[crud._CrudParamSequence]Ú_insert_crud_paramszFrozenSet[BindParameter[Any]]Úliteral_execute_paramsÚpost_compile_paramszutil.immutabledict[str, str]Úescaped_bind_nameszbOptional[Tuple[Dict[BindParameter[Any], List[BindParameter[Any]]], Dict[str, BindParameter[Any]]]]Ú_cache_key_bind_matchrúÚ_values_bindparamÚ_visited_bindparamÚinlinez"Optional[MutableMapping[CTE, str]]ÚcteszDict[Tuple[int, str], CTE]Úctes_by_level_namez/Dict[CTE, Tuple[int, str, selectable._CTEOpts]]Úlevel_name_by_cteÚctes_recursivez"__\[POSTCOMPILE_(\S+?)(~~.+?~~)?\]z%\(([^)]+?)\)sú|cCs | ¡dSrÝ)Ú_init_bind_translaterrržržr¢ro0szSQLCompiler._init_compiler_clscCs2t d |j¡¡}t d|›d¡|_|j|_dS)NrQr¶r·)ÚreÚescaper~r¹Úcompilerºr»)rsÚregržržr¢rã4sz SQLCompiler._init_bind_translater\rPr]rùr/r)rcrõr^Ú column_keysÚfor_executemanyÚlintingrƒc KsÜ||_||_|r>dd„|dDƒ}dd„|dDƒ}    |    |f|_||_||_i|_t ¡|_g|_    g|_
|j |_ |j r¦|j   d¡|_}
|
rž|j dkr˜dnd|_t|_n t|j |_d    |_|jpÂ|j|_tƒ|_i|_i|_tj|||f|Ž|js|js|jrxtrt |t!ƒst"‚|js*|jrxtr@t |t#ƒs@t"‚|j$rPd
|_%n(|jrx|jrr|j&j'rx|j(rxd
|_%t|j |_)|j*t+j,krØ|j r´|jr¬| -¡n| .¡|j/rØ|j0d d
d } |j1| d
d d    S)a‚Construct a new :class:`.SQLCompiler` object.
 
        :param dialect: :class:`.Dialect` to be used
 
        :param statement: :class:`_expression.ClauseElement` to be compiled
 
        :param column_keys:  a list of column names to be compiled into an
         INSERT or UPDATE statement.
 
        :param for_executemany: whether INSERT / UPDATE statements should
         expect that they are to be invoked in an "executemany" style,
         which may impact how the statement will be expected to return the
         values of defaults and autoincrement / sequences and similar.
         Depending on the backend and driver in use, support for retrieving
         these values may be disabled which means SQL expressions may
         be rendered inline, RETURNING may not be rendered, etc.
 
        :param kwargs: additional keyword arguments to be consumed by the
         superclass.
 
        cSsi|] }|j|“qSrž©rþ©r Úbržržr¢Ú
<dictcomp>^sz(SQLCompiler.__init__.<locals>.<dictcomp>rcSsi|] }||g“qSržržrìržržr¢rî_srªr«r¥r´NTF©rÚ_no_postcompile)Ú_populate_self)2rèr^rÚrérêrÃr%Z column_dictrÄrFrUÚ
positionalÚ
paramstyleÚ
startswithrÏrÊÚ_pyformat_templaterÉÚBIND_TEMPLATESrÞÚ label_lengthÚmax_identifier_lengthr3Úanon_mapÚtruncated_namesÚ_truncated_countersrOrnr½r¾r¼rrirArjrBZ_inlinerÝrcZinsert_executemany_returningZ_return_defaultsrÈrSr+r-Ú_process_numericÚ_process_positionalrÐrÚ#_process_parameters_for_postcompile) rßrcrõr^rèrérêrƒÚcksmÚckbmÚnbröržržr¢rn:st
 
ÿ 
ÿÿýü 
þÿzSQLCompiler.__init__rûcCs|jdkrdS|jjSdS)aøWhen an INSERT is compiled with a single set of parameters inside
        a VALUES expression, the string is assigned here, where it can be
        used for insert batching schemes to rewrite the VALUES expression.
 
        .. versionadded:: 1.3.8
 
        .. versionchanged:: 2.0 This collection is no longer used by
           SQLAlchemy's built-in dialects, in favor of the currently
           internal ``_insertmanyvalues`` collection that is used only by
           :class:`.SQLCompiler`.
 
        N)rÕrrÿržržr¢Úinsert_single_values_expr¹s
z%SQLCompiler.insert_single_values_exprcCs:|jr |jS|jdk    r2t|jƒr2dd„|jjDƒSdSdS)aâThe effective "returning" columns for INSERT, UPDATE or DELETE.
 
        This is either the so-called "implicit returning" columns which are
        calculated by the compiler on the fly, or those present based on what's
        present in ``self.statement._returning`` (expanded into individual
        columns using the ``._all_selected_columns`` attribute) i.e. those set
        explicitly using the :meth:`.UpdateBase.returning` method.
 
        .. versionadded:: 2.0
 
        NcSsg|]}t|ƒr|‘qSržr&©r Úcržržr¢Ú
<listcomp>Üsþz3SQLCompiler.effective_returning.<locals>.<listcomp>)rÁrõr(Ú_all_selected_columnsrÿržržr¢Úeffective_returningÌs þzSQLCompiler.effective_returningcCs|jS)zVbackwards compatibility; returns the
        effective_returning collection.
 
        )rrÿržržr¢Ú    returningåszSQLCompiler.returningc
CsBz|jddWStk
r<}ztdƒ|‚W5d}~XYnXdS)a±Return the current 'executable' that is being compiled.
 
        This is currently the :class:`_sql.Select`, :class:`_sql.Insert`,
        :class:`_sql.Update`, :class:`_sql.Delete`,
        :class:`_sql.CompoundSelect` object that is being compiled.
        Specifically it's assigned to the ``self.stack`` list of elements.
 
        When a statement like the above is being compiled, it normally
        is also assigned to the ``.statement`` attribute of the
        :class:`_sql.Compiler` object.   However, all SQL constructs are
        ultimately nestable, and this attribute should never be consulted
        by a ``visit_`` method, as it is not guaranteed to be assigned
        nor guaranteed to correspond to the current statement being compiled.
 
        .. versionadded:: 1.3.21
 
            For compatibility with previous versions, use the following
            recipe::
 
                statement = getattr(self, "current_executable", False)
                if statement is False:
                    statement = self.stack[-1]["selectable"]
 
            For versions 1.4 and above, ensure only .current_executable
            is used; the format of "self.stack" may change.
 
 
        éÿÿÿÿr#z$Compiler does not have a stack entryN)rFÚ
IndexError)rßZieržržr¢Úcurrent_executableíszSQLCompiler.current_executablecCst|jƒt|jƒSrÝ)Úlistr¿rÀrÿržržr¢ÚprefetchszSQLCompiler.prefetchzDict[Any, Any]cCsiSrÝržrÿržržr¢Ú_global_attributesszSQLCompiler._global_attributeszMutableMapping[CTE, str]cCs$t ¡}||_i|_i|_d|_|S)z’Initialize collections related to CTEs only if
        a CTE is located, to save on the overhead of
        these collections otherwise.
 
        F)r%Ú OrderedDictrÞrßràrá)rßrÞržržr¢Ú_init_cte_states     zSQLCompiler._init_cte_statec    csp|j|j}}gd|_|_z0|jr8|jd}d|d<nd}|j|jfVW5|r\| d¡|||_|_XdS)z;special API to support the use case of 'nested result sets'Frîr    TN)rUrÍr<rF)rßZresult_columnsZordered_columnsÚentryržržr¢Ú_nested_result0sþ
 
 
þzSQLCompiler._nested_resultcs<ˆjr
t‚ˆjtjkst‚ˆjr$t‚ˆjjdkr6d‰nˆjjdksFt‚d‰g‰dddœ‡‡fdd    „ ‰t     ˆj
ˆˆj ¡ˆ_ ˆj r¾d
d „ˆj   ¡Dƒ‰tˆj ƒtˆƒks¨t‚‡fd d „ˆDƒˆ_nˆˆ_ˆjr8g‰t     ˆj
ˆˆjj¡}‡‡fdd „ˆjjDƒ}ˆjjdk    r ‡fdd „ˆjjDƒnd}ˆjj|||dˆ_dS)Nr©ú%sr¨r¦z re.Match[str]rŸ)ÚmrÜcs:| d¡}|rˆ |¡ˆSˆ | d¡¡| d¡SdS)Nrr5r)ryÚappend)rZ normal_bind)Ú placeholderÚ    positionsržr¢Ú find_positionUs 
 
z6SQLCompiler._process_positional.<locals>.find_positioncSsi|]\}}||“qSržrž)r ÚkÚvržržr¢rîdsz3SQLCompiler._process_positional.<locals>.<dictcomp>csg|]}ˆ ||¡‘qSrž©Úget©r rÌ)Úreverse_escaperžr¢rfsz3SQLCompiler._process_positional.<locals>.<listcomp>c
s4g|],}|d|dt ˆjˆ|d¡|df‘qS)rrr5rå)räÚsubÚ_positional_pattern©r r)rrßržr¢rts ûücsg|]}ˆj tt|ƒ¡‘qSrž©rúr8rrŸ©r Z
_param_keyrÿržr¢rsÿ©rr
r)rúrjrSr+r-rÏrcrórärr rRrÙÚitemsÚlenrÕrr
rÚ_replace)rßrr
Úsentinel_param_int_idxsrž)rrrrrßr¢rýHsT
 
 
ÿ
ÿ
ý ù
üþú    ýzSQLCompiler._process_positionalc
s†ˆjs
t‚ˆjtjkst‚d}i‰ˆjrZˆjdk    rZt ‡fdd„ˆj     
¡Dƒˆj     
¡¡}n
ˆj     
¡}|D]T}|ˆkrvqhˆj |}|ˆj ks”|ˆj krždˆ|<qhˆj›|›}|d7}|ˆ|<qh|ˆ_tˆƒˆ_ˆjrtˆƒ}‡fdd„ˆ ¡Dƒ‰tˆƒ|kst‚ˆj ‡fdd„ˆj¡ˆ_ˆjr‚ˆjjˆ}dd    „ˆjjDƒ}ˆjjdk    rj‡fd
d    „ˆjjDƒnd}    ˆjj|||    d ˆ_dS) Nrc3s|]}|ˆjkr|VqdSrÝ)rÛrrÿržr¢r™s
þz/SQLCompiler._process_numeric.<locals>.<genexpr>cs i|]\}}ˆj ||¡|“qSrž)rÙr)r rÌÚposrÿržr¢rî¸sÿ z0SQLCompiler._process_numeric.<locals>.<dictcomp>csˆ| d¡S©Nr©ry©r©Ú    param_posržr¢Ú<lambda>Àóz.SQLCompiler._process_numeric.<locals>.<lambda>cSs$g|]}|d|dd|df‘qS)rrrråržr!ržržr¢rÊsÿz0SQLCompiler._process_numeric.<locals>.<listcomp>csg|]}ˆj tt|ƒ¡‘qSržr"r#rÿržr¢rÐsÿr$)rÏrjrSr+r-rÕrÛÚ    itertoolsÚchainrÄÚvaluesrÃrØr×rÊÚnext_numeric_posr rúrÙr&r%Ú_pyformat_patternrrRrr
rr')
rßÚnumrÚ    bind_nameÚbindÚphZ
len_beforerr
r(rž)r.rßr¢rüsn
 
þú    
 
ÿþ
 
 
 
þ
ÿÿýþ
 
üþú    ûzSQLCompiler._process_numericzVMutableMapping[str, Union[_BindProcessorType[Any], Sequence[_BindProcessorType[Any]]]]csdd„‡fdd„ˆjDƒDƒS)NcSsi|]\}}|dk    r||“qSrÝrž©r rþÚvalueržržr¢rîés óz0SQLCompiler._bind_processors.<locals>.<dictcomp>c3sN|]F}ˆj||jjs$|j ˆj¡nt‡fdd„tt|jƒjDƒƒfVqdS)c3s|]}| ˆj¡VqdSrÝ)Ú_cached_bind_processorrc)r Z    elem_typerÿržr¢rðsÿz9SQLCompiler._bind_processors.<locals>.<genexpr>.<genexpr>N)    rÄrÐÚ_is_tuple_typer<rcrrr1Útypes)r Ú    bindparamrÿržr¢rës
øÿ  þüz/SQLCompiler._bind_processors.<locals>.<genexpr>)rÄrÿržrÿr¢Ú_bind_processorsàs
    
 
öþzSQLCompiler._bind_processorsz9Optional[Sequence[Optional[_SentinelProcessorType[Any]]]]csHˆj}|dks|jdkrdS‡fdd„|jDƒ}tj |¡r@dS|SdS)Ncsg|]}|j ˆj¡‘qSrž)rÐZ _cached_sentinel_value_processorrc)r Z_scolrÿržr¢rsÿz=SQLCompiler._imv_sentinel_value_resolvers.<locals>.<listcomp>)rÕrr%ZNONE_SETÚ
issuperset)rßÚimvZsentinel_value_resolversržrÿr¢Ú_imv_sentinel_value_resolversús
þ z)SQLCompiler._imv_sentinel_value_resolverscCst|jƒdkSr*)r&rFrÿržržr¢Ú is_subquery szSQLCompiler.is_subquerycCs|SrÝržrÿržržr¢rszSQLCompiler.sql_compilerr‡rô)r‹rrÜcCs|j||dd}| |¡S)aRReturn a new :class:`.ExpandedState` for a given parameter set.
 
        For queries that use "expanding" or other late-rendered parameters,
        this method will provide for both the finalized SQL string as well
        as the parameters that would be used for a particular parameter set.
 
        .. versionadded:: 2.0.0rc1
 
        Trï)rrþ)rßr‹rröržržr¢Úconstruct_expanded_statesýÿz$SQLCompiler.construct_expanded_staterˆz Optional[int]r[)r‹rŒrÚ _group_numberÚ_checkrðrÜcs2|jr2|s2|jdk    st‚|s(t|jjƒSt d¡‚|o>t|jƒ}|r˜|j    dkrZt 
d¡‚n
|j    d}|j }    |    dk    svt‚|    \‰}
‡fdd„t ||ƒDƒ} nd} |r€i} |j  ¡D]Ê\} }|rÊ|j ||¡n|}| j|krè|| j| |<q°||kr||| |<q°|rD| jrD|r.tjd| j|fdd    ‚ntjd
| jdd    ‚q°| rX|  | | ¡}n| }| jrp|j| |<q°|j| |<q°| Si} |j  ¡D]š\} }|rª|j ||¡n|}|rð| jrð|rÜtjd| j|fdd    ‚ntjd
| jdd    ‚| r|  | | ¡}n| }| jr|j| |<n
|j| |<qŽ| SdS) z5return a dictionary of bind parameter keys and valuesNzÂcan't construct new parameters when render_postcompile is used; the statement is hard-linked to the original parameters.  Use construct_expanded_state to generate a new statement and parameters.zcThis compiled object has no original cache key; can't pass extracted_parameters to construct_paramsrcs$i|]\}}ˆ|D]
}||“qqSržrž)r ríZ    extractedr8©rržr¢rîUs
 
þz0SQLCompiler.construct_params.<locals>.<dictcomp>z@A value is required for bind parameter %r, in parameter group %dZcd3x)Úcodez)A value is required for bind parameter %r)rÐrÑrjÚdictrör6rrírÙr^Ú CompileErrorrÚÚziprÄr%rrþÚrequiredÚcallableÚeffective_valuer;)rßr‹rŒrrFrGrðZhas_escaped_namesZorig_extractedÚ
ckbm_tupler°Zresolved_extractedÚpdr?rÌÚ escaped_nameZ value_paramržrHr¢r)s¦
 ÿ
ÿ
 
þÿý
 
þüÿýÿ  ÿýþüÿý zSQLCompiler.construct_paramscs†|j‰ˆj‰ˆj‰ˆj‰‡‡‡‡fdd„‰i}|j}|jD]F}||krHq:|jjrr‡fdd„tt    |jƒj
Dƒ||<q:ˆ|jƒ||<q:|S)NcsD| ˆ¡ ˆ¡}|dk    r<ˆdks(|ˆkr<ˆdks8|ˆkr<|SdSdSrÝ)Ú_unwrapped_dialect_implZget_dbapi_type)ÚtypZdbtype)ÚdbapircÚ exclude_typesÚ include_typesržr¢Ú lookup_type´sÿþþýýz<SQLCompiler._get_set_input_sizes_lookup.<locals>.lookup_typecsg|] }ˆ|ƒ‘qSržrž)r rT)rXržr¢rÉsÿz;SQLCompiler._get_set_input_sizes_lookup.<locals>.<listcomp>) rcZinclude_set_input_sizesZexclude_set_input_sizesrUr×rÄrÐr=rr1r>)rßZ
inputsizesr×r?rž)rUrcrVrWrXr¢Ú_get_set_input_sizes_lookup«s  
 
 þ z'SQLCompiler._get_set_input_sizes_lookupcCs |jddS)zýReturn the bind param dictionary embedded into this
        compiled object, for those values that are present.
 
        .. seealso::
 
            :ref:`faq_sql_expression_string` - includes a usage example for
            debugging use cases.
 
        F)rGrrÿržržr¢r‹Òs zSQLCompiler.params)rörñrÜcsÐi}ˆj}|dkrˆj}ˆjr8g}ˆj}|dkr@ˆj}nd}}ˆj}td|ƒ‰td|ƒ‰i}i‰i}    d}
ˆjrˆ|dk    rˆ|} ˆjr’g}
n
ˆj     ¡} ˆj
} | D]p‰| r²|   ˆˆ¡nˆ} ˆj ˆ}|ˆj krð| ˆkrÜ| | ¡}ˆj||dˆ| <qœ|ˆjkrü| ˆkr|    | }d}n0| ˆ¡}ˆ | ||¡}|\}}||    | <|ˆ| <|js| |¡|jjr|dk    snt‚| ‡‡fdd„t|dƒDƒ¡n| ‡‡fdd„|Dƒ¡|
dk    rÊ|
 d    d„|Dƒ¡n|dk    rè| d
d„|Dƒ¡d d „|Dƒ|ˆ<qœ|dk    rœ| ˆ¡qœ‡fd d„}t ˆj||¡}|
dk    r~|dk    sDt‚‡fdd„t|
ˆjƒDƒ‰ˆj ‡fdd„|¡}| |
¡t|||||ƒ}|rÌ|ˆ_|ˆ_|j ˆ_ˆjrÀt!|jp¼dƒndˆ_|ˆ_"|S)ažhandle special post compile parameters.
 
        These include:
 
        * "expanding" parameters -typically IN tuples that are rendered
          on a per-parameter basis for an otherwise fixed SQL statement string.
 
        * literal_binds compiled with the literal_execute flag.  Used for
          things like SQL Server "TOP N" where the driver does not accommodate
          N as a bound parameter.
 
        Nr÷z/Mapping[str, Sequence[_BindProcessorType[Any]]]©Úrender_literal_valuec3s`|]X\}}t|dƒD]D\}}ˆˆkrˆˆ|ddk    rdˆ||fˆˆ|dfVqqdS)rNú%s_%s_%s©Ú    enumerate)r ÚiÚ tuple_elementÚjr°)rÌÚtuple_processorsržr¢rNs ú þzBSQLCompiler._process_parameters_for_postcompile.<locals>.<genexpr>rc3s&|]\}}ˆˆkr|ˆˆfVqdSrÝrž)r rþr°)rÌÚsingle_processorsržr¢rYsþcss|]\}}|VqdSrÝrž©r rÌr°ržržr¢r_scss|]\}}|VqdSrÝržrdržržr¢rfscSsg|] \}}|‘qSržrž)r Z
expand_keyr°ržržr¢rgszCSQLCompiler._process_parameters_for_postcompile.<locals>.<listcomp>csb| d¡}ˆ|}| d¡r^| d¡ d¡}|d|d‰‰d ‡‡fdd„| d¡Dƒ¡}|S)Nrr5ú~~rår¯c3s|]}dˆ|ˆfVqdS©z%s%s%sNrž)r Úexp©Úbe_leftÚbe_rightržr¢rvsÿz]SQLCompiler._process_parameters_for_postcompile.<locals>.process_expanding.<locals>.<genexpr>)ryÚsplitr~)rrþÚexprÚtok)Úreplacement_expressionsrhr¢Úprocess_expandingms
 
þzJSQLCompiler._process_parameters_for_postcompile.<locals>.process_expandingcs i|]\}}|ˆj›|›“qSrž©rÊ)r r6rþrÿržr¢rî‚sÿzCSQLCompiler._process_parameters_for_postcompile.<locals>.<dictcomp>csˆ| d¡Sr*r+r,r-ržr¢r/Šr0zASQLCompiler._process_parameters_for_postcompile.<locals>.<lambda>rž)#rÓrRròrÔrúr@rrÏrÄr3rÙrrÃr×r<Úrender_literal_bindparamrØÚ$_literal_execute_expanding_parameterÚliteral_executeÚupdaterÐr=rjr^ÚextendrrärÚ_post_compile_patternr4r5rôrõr rÑ)rßrörñZexpanded_parametersZpre_expanded_stringZnew_positiontupZpre_expanded_positiontuprøZnew_processorsZto_update_setsZnumeric_positiontupÚnamesZebnrRÚ    parameterr;Ú    to_updater3Zleep_resÚreplacement_exprrorõZexpanded_staterž)rÌr.rnrßrcrbr¢rþßsâÿÿ    
 
 
 
 
þþÿ 
 
ÿ
 
û
þ
 
ÿ
 
ÿ   ÿ
 
ÿþ
ÿ
ûÿýz/SQLCompiler._process_parameters_for_postcompilezsqlalchemy.engine.cursorcCstjj}|j |j¡S)z(utility method used for unit tests only.)r%Ú    preloadedZ engine_cursorrTZ_create_description_match_maprU)rßÚcursorržržr¢Ú_create_result_map¦sÿzSQLCompiler._create_result_mapÚ_BindNameForColProtocolÚ_get_bind_name_for_colzCallable[[Any], str]cCs
|j}|SrÝ)r)rßÚgetterržržr¢Ú_within_exec_param_key_getter±sz)SQLCompiler._within_exec_param_key_getterzsqlalchemy.engine.resultcsÈtjj}|j‰|jdk    st‚|jj}tr6t|t    ƒs6t‚|j
}‡fdd„|j Dƒ‰d‰|j ‰ˆdk    r–ˆj  |jd¡‰ˆˆƒ‰ˆ|jkrš‡fdd„}|‰nd‰| dd„|j Dƒ¡‰‡‡‡‡‡fdd„}|S)Ncs"g|]}t dˆ|ƒd¡|f‘qS)rN)ÚoperatorÚ methodcaller©r rŸ)Úparam_key_getterržr¢rÅsÿzKSQLCompiler._inserted_primary_key_from_lastrowid_getter.<locals>.<listcomp>cs | ˆ|¡}|dk    r|S|SdSrÝr)Ú    lastrowidröZ param_value)Ú autoinc_keyržr¢Ú_autoinc_getterÚs zPSQLCompiler._inserted_primary_key_from_lastrowid_getter.<locals>._autoinc_gettercSsg|]
}|j‘qSržrër„ržržr¢rìscsNˆdk    rˆˆƒ‰ˆdkr.ˆ‡fdd„ˆDƒƒSˆ‡‡‡‡fdd„ˆDƒƒSdS)agiven cursor.lastrowid value and the parameters used for INSERT,
            return a "row" that represents the primary key, either by
            using the "lastrowid" or by extracting values from the parameters
            that were sent along with the INSERT.
 
            Nc3s|]\}}|ˆƒVqdSrÝrž©r r€rŸrüržr¢rùszWSQLCompiler._inserted_primary_key_from_lastrowid_getter.<locals>.get.<locals>.<genexpr>c3s8|]0\}}|ˆkr(ˆdk    r$ˆˆˆƒq.ˆn|ˆƒVqdSrÝržr‰)Ú autoinc_colÚautoinc_getterr†röržr¢rûsþûÿ ýrž©r†rö)rŠr‹ÚgettersÚlastrowid_processorÚrow_fnrŒr¢rîsøzDSQLCompiler._inserted_primary_key_from_lastrowid_getter.<locals>.get)r%r{Ú engine_resultrrìrjrõrrir@r•Ú primary_keyZ_autoincrement_columnrÐZ_cached_result_processorrcrÃÚ result_tuple)rßÚresultrõr•rˆrrž)rŠr‹r‡rrŽr…rr¢Ú+_inserted_primary_key_from_lastrowid_getter¶s2
þÿ
 z7SQLCompiler._inserted_primary_key_from_lastrowid_gettercs¸tjrddlm}ntjj}|jdk    s*t‚|jj    }trDt
|t ƒsDt‚|j ‰|j }|j}|dk    sbt‚dd„t|ƒDƒ‰td‡‡fdd„|jDƒƒ‰| dd„|jDƒ¡‰‡‡fd    d
„}|S) Nr5)r“cSsi|]\}}||“qSržrž)r ÚidxrŸržržr¢rî    szKSQLCompiler._inserted_primary_key_from_returning_getter.<locals>.<dictcomp>z'List[Tuple[Callable[[Any], Any], bool]]cs<g|]4}|ˆkr"t ˆ|¡dfnt dˆ|ƒd¡df‘qS)TrNF)r‚Ú
itemgetterrƒr„)r…Úretržr¢r    s ûÿþzKSQLCompiler._inserted_primary_key_from_returning_getter.<locals>.<listcomp>cSsg|]
}|j‘qSržrër„ržržr¢r*    scsˆ‡‡fdd„ˆDƒƒS)Nc3s&|]\}}|r|ˆƒn|ˆƒVqdSrÝrž)r r€Zuse_row©röÚrowržr¢r-    sÿzWSQLCompiler._inserted_primary_key_from_returning_getter.<locals>.get.<locals>.<genexpr>rž)r™rö)rrr˜r¢r,    sþzDSQLCompiler._inserted_primary_key_from_returning_getter.<locals>.get)ÚtypingrZenginer“r%r{rrìrjrõrir@rr•rÁr^rr‘r’)rßr“rõr•rrrž)rr…r—rr¢Ú+_inserted_primary_key_from_returning_getter    s*  ùþ z7SQLCompiler._inserted_primary_key_from_returning_gettercCsdS)z´Called when a SELECT statement has no froms, and no FROM clause is
        to be appended.
 
        Gives Oracle a chance to tack on a ``FROM DUAL`` to the string output.
 
        rQržrÿržržr¢Ú default_from4    szSQLCompiler.default_fromcKsd|jj|f|ŽdS©Nr²r³©r{r…)rßÚgroupingÚasfromrƒržržr¢Úvisit_grouping=    szSQLCompiler.visit_groupingcKsd|jj|f|ŽdSrrž)rßrŸrƒržržr¢Úvisit_select_statement_grouping@    sz+SQLCompiler.visit_select_statement_groupingc
Ks¾|jr¦|jjr¦ztd|jddƒ}Wn.tk
rT}zt d¡|‚W5d}~XYnX|j\}}}|rl|}    n|}    |jj    }
|
dk    r¦|
j
|    kr¦|
  |    |
j
¡r¦|jj    |d<|j |jfd|i|—ŽS)Nú'Union[SelectState, CompoundSelectState]r    rìúECan't resolve label reference for ORDER BY / GROUP BY / DISTINCT etc.Úrender_label_as_labelÚwithin_columns_clause) rFrcZsupports_simple_order_by_labelrÚKeyErrorr6rKÚ_label_resolve_dictr{Z_order_by_label_elementrÌZshares_lineagerk) rßr{r¦rƒrìÚkeÚ    with_colsÚ
only_fromsÚ    only_colsZ resolve_dictZ order_by_elemržržr¢Úvisit_label_referenceC    sP þÿý    üÿþÿý    þÿÿþýz!SQLCompiler.visit_label_referencec
Ksê|js| |j¡Sztd|jddƒ}Wn8tk
rb}ztj|jdtj    |dW5d}~XYnX|j
\}}}z|r‚||j}    n
||j}    Wn8tk
rÆ}
ztj|jdtj    |
dW5d}
~
XYn X|    |d<|j|    fd|i|—ŽSdS)Nr£r    rìr¤)ÚextraZexc_clsr|r¥r¦) rFrkZ _text_clauserr§rZ_no_text_coercionr{r6rKr¨) rßr{r¦rƒrìr©rªr«r¬rŸr|ržržr¢Úvisit_textual_label_referencer    sD  þù
 ù
ÿÿÿz)SQLCompiler.visit_textual_label_referencec KsÊ|o| }||k}    |    s|r>t|jtjƒr8| d|j¡}
n|j}
|rœ|dk    rj||
|j||
f|j||jƒ|jj|fdddœ|—Žt    t
j |j   ||
¡S|    r®|j   ||
¡S|jj|fddi|—ŽSdS)NÚcolidentT)r¦Úwithin_label_clauser¦F)rirÌrrCÚ_truncated_identifierržrÐr{r…Ú    OPERATORSr Úas_rZÚ format_label) rßrœÚadd_to_result_mapr±r¦r¥Úresult_map_targetsr}Zrender_label_with_asZrender_label_onlyZ    labelnameržržr¢Ú visit_labelŸ    sJÿüÿýüú ùÿ
ÿÿÿzSQLCompiler.visit_labelcCst d¡‚dS)Nz:Cannot compile Column object until its 'name' is assigned.©r6rK©rßrgržržr¢Ú_fallback_column_nameР   sÿz!SQLCompiler._fallback_column_namecKs|j}|j|f|ŽSrÝ)Z    _resolvedrk)rßr{r}Z sql_elementržržr¢Úvisit_lambda_elementÕ    sz SQLCompiler.visit_lambda_elementúColumnClause[Any]zOptional[_ResultMapAppender]rÍz Optional[_AmbiguousTableNameMap])rgr¶Ú include_tabler·Úambiguous_table_name_maprƒrÜcKsB|j}}|dkr| |¡}|j}    |    s>t|tjƒr>| d|¡}|dk    rx|||jf|}
|jrh|
|jf7}
||||
|j    ƒ|    rˆ| 
|¡}n |j   |¡}|j } | dks¬|r¬| js°|S|j  | ¡} | rÒ|j  | ¡d} nd} trèt| tƒsèt‚| j}| s |r ||kr ||}t|tjƒr&| d|¡}| |j   |¡d|SdS)Nr°rµrQÚalias)rÌr»Ú
is_literalrirrCr²rþÚ    _tq_labelrÐÚescape_literal_columnrZÚquoter•Znamed_with_columnÚschema_for_objectÚ quote_schemarrNrj)rßrgr¶r¾r·r¿rƒrÌÚ    orig_namerÁÚtargetsr•Úeffective_schemaZ schema_prefixZ    tablenameržržr¢Ú visit_columnÙ    sF    
 
     ÿÿþý zSQLCompiler.visit_columncKs|j |j¡SrÝ)rZÚformat_collationÚ    collation©rßr{r}ržržr¢Úvisit_collation
szSQLCompiler.visit_collationcKs|jSrÝ©rÌ)rßZ
fromclauserƒržržr¢Úvisit_fromclause
szSQLCompiler.visit_fromclausecKs|jSrÝrÏ)rßr8rƒržržr¢Ú visit_index
szSQLCompiler.visit_indexcKs&||d<|j|d<|jjj|jf|ŽS)NÚtype_expressionrf)rZrcÚtype_compiler_instancerkrÐ)rßÚ
typeclauser}ržržr¢Úvisit_typeclause
s
ÿÿzSQLCompiler.visit_typeclausecCs|jjr| dd¡}|S©Nr±ú%%©rZÚ_double_percentsÚreplace©rßÚtextržržr¢Úpost_process_text$
s zSQLCompiler.post_process_textcCs|jjr| dd¡}|SrÖrØrÛržržr¢rÃ)
s z!SQLCompiler.escape_literal_columnc     sR‡‡‡fdd„}ˆjsdˆ_|r2|ddˆftjƒt dd„t |ˆ ˆj¡¡¡S)Ncs:| d¡}|ˆjkr(ˆjˆj|fˆŽSˆj|fˆŽSdSr*)ryZ _bindparamsrkÚbindparam_string)rrÌ©r}rßÚ
textclauseržr¢Ú do_bindparam/
s
 
z2SQLCompiler.visit_textclause.<locals>.do_bindparamTcSs
| d¡Sr*r+r,ržržr¢r/A
r0z.SQLCompiler.visit_textclause.<locals>.<lambda>)    rFrÂr$ÚNULLTYPEÚBIND_PARAMS_ESCrÚ BIND_PARAMSrÝrÜ)rßràr¶r}ráržrßr¢Úvisit_textclause.
s
ÿþzSQLCompiler.visit_textclausec Ksú|j }|r|jn|jd}tƒtƒ|dœ}|j |¡|jrJ| ||¡|pl|dkrb| dd¡pl| dd¡}|r²|j|_|_    |j ot
|j ƒ|_ |j D]}    |j |    d|jdqš|j |jf|Ž}
|jrê|sÖt|jƒnd} |j| d    |
}
|j d¡|
S)
Nr    ©rérèr#rrïFrîT)r¦r¶©Ú nesting_level)rFÚ_default_stack_entryr“rÚ_independent_ctesÚ_dispatch_independent_ctesrròrÍrËríZ column_argsrÎrkÚ_add_to_result_mapr{rÞr&Ú_render_cte_clauser<) rßZtafÚcompound_indexr r}ÚtoplevelrÚ    new_entryÚpopulate_result_maprrÜrèržržr¢Úvisit_textual_selectG
sDý  
ý
ú    þ
ÿ
ý z SQLCompiler.visit_textual_selectcKsdS©NÚNULLrž©rßrlr}ržržr¢Ú
visit_null|
szSQLCompiler.visit_nullcKs|jjr dSdSdS)Nr—Ú1©rcÚsupports_native_booleanrõržržr¢Ú
visit_true
szSQLCompiler.visit_truecKs|jjr dSdSdS)NrtÚ0rørõržržr¢Ú visit_false…
szSQLCompiler.visit_falsec s$| dd„‡‡fdd„|DƒDƒ¡S)Ncss|]}|r|VqdSrÝrž©r Úsržržr¢rŒ
sþz7SQLCompiler._generate_delimited_list.<locals>.<genexpr>c3s|]}|jˆfˆŽVqdSrÝr„r©r}rßržr¢rŽ
s©r~)rßrÚ    separatorr}ržrÿr¢Ú_generate_delimited_list‹
s
þz$SQLCompiler._generate_delimited_listc sltj tjtjjtjj|¡\}}|dkr:|djˆfˆŽSt    tj}| 
dd„‡‡fdd„|DƒDƒ¡SdS)Nrrcss|]}|r|VqdSrÝržrýržržr¢rž
sþz;SQLCompiler._generate_delimited_and_list.<locals>.<genexpr>c3s|]}|jˆfˆŽVqdSrÝr„rrÿržr¢r 
s) rZBooleanClauseListZ_process_clauses_for_booleanr Úand_ZTrue_Z
_singletonZFalse_r…r³r~)rßÚclausesr}Zlccrržrÿr¢Ú_generate_delimited_and_list’
sü
 
þz(SQLCompiler._generate_delimited_and_listcKsd|j|f|ŽS©Nú(%s))Úvisit_clauselist)rßÚ
clauselistr}ržržr¢Ú visit_tuple¤
szSQLCompiler.visit_tuplecKs0|j}|dkrd}n
t|j}|j|j|f|ŽS©Nr¸)r‚r³rr)rßr    r}Úsepržržr¢r§
s
 
zSQLCompiler.visit_clauselistc
Ksz|j}| |dd¡}|r&|||f|ŽSz t|}Wn0tk
rb}zt ||¡|‚W5d}~XYnX|j|j|f|ŽSdS)NZexpression_clauselist)r‚Ú_get_operator_dispatchr³r§r6ryrr)rßr    r}Ú    operator_ÚdispÚopstringr|ržržr¢Úvisit_expression_clauselist°
s$ÿ  ÿÿz'SQLCompiler.visit_expression_clauselistcKs”d}|jdk    r&||jj|f|Žd7}|jD]4\}}|d|j|f|Žd|j|f|Žd7}q,|jdk    rˆ|d|jj|f|Žd7}|d7}|S)NzCASE r¸zWHEN z THEN zELSE ZEND)r;r…ZwhensZelse_)rßÚclauserƒr¡Zcondr“ržržr¢Ú
visit_caseÂ
s*
 ÿþ ýüÿ
ÿzSQLCompiler.visit_casecKs|jj|f|ŽSrÝ)Ztyped_expressionr…)rßZ type_coercer}ržržr¢Úvisit_type_coerceÕ
szSQLCompiler.visit_type_coercecKs$d|jj|f|Ž|jj|f|ŽfS)NzCAST(%s AS %s))rr…rÔ)rßrrƒržržr¢Ú
visit_castØ
sþzSQLCompiler.visit_castc    Ksäd|dtjkrdn\|dtjkr&dnJ|ddkrTd|jt t|dƒ¡f|Žfnd|jt |d¡f|Žf|dtjkr‚dn\|dtjkr”dnJ|ddkrÂd|jt t|dƒ¡f|Žfnd|jt |d¡f|ŽffS)    Nz    %s AND %srzUNBOUNDED PRECEDINGz CURRENT ROWz %s PRECEDINGz %s FOLLOWINGrzUNBOUNDED FOLLOWING)rZRANGE_UNBOUNDEDZ RANGE_CURRENTrkÚliteralÚabs)rßÚrange_r}ržržr¢Ú_format_frame_clauseÞ
s0 ÿ ÿ
þÿÿ ÿ ÿ
þÿÿïz SQLCompiler._format_frame_clausec sŒ|jjˆfˆŽ}|jr,dˆj|jfˆŽ}n |jrHdˆj|jfˆŽ}nd}d|d ‡‡fdd„d|jfd|jffDƒ|r€|gng¡fS)    NzRANGE BETWEEN %szROWS BETWEEN %sz %s OVER (%s)r¸cs6g|].\}}|dk    rt|ƒrd||jˆfˆŽf‘qS)Nz%s BY %s)r&r…)r Úwordr©rƒrßržr¢r s úÿz*SQLCompiler.visit_over.<locals>.<listcomp>Z    PARTITIONÚORDER)r{r…rrÚrowsr~Z partition_byÚorder_by)rßZoverrƒrÜrržrr¢Ú
visit_overõ
s4ÿÿÿÿ þý     ÷ÿþzSQLCompiler.visit_overcKs$d|jj|f|Ž|jj|f|ŽfS)Nz%s WITHIN GROUP (ORDER BY %s))r{r…r)rßZ withingrouprƒržržr¢Úvisit_withingroup sþzSQLCompiler.visit_withingroupcKs$d|jj|f|Ž|jj|f|ŽfS)Nz%s FILTER (WHERE %s))Úfuncr…Z    criterion)rßZ
funcfilterrƒržržr¢Úvisit_funcfilter sþzSQLCompiler.visit_funcfiltercKs*|j |j|j¡}d||jj|f|ŽfS)NzEXTRACT(%s FROM %s))Ú extract_maprÚfieldrlr…)rßÚextractrƒr$ržržr¢Ú visit_extract s
þzSQLCompiler.visit_extractcKs*|j|jf|Ž}|j|f|Ž}d||fS)Nz(%s).%s)Úvisit_functionÚfnrÊ)rßr{r}Z compiled_fnZ compiled_colržržr¢Úvisit_scalar_function_column% sz(SQLCompiler.visit_scalar_function_columnz Function[Any])r!r¶rƒrÜc sæ|dk    r||j|jd|jƒtˆd|j ¡dƒ}|rD||f|Ž}nt | ¡jd¡‰ˆrj|jr ˆd7‰n6|j‰ˆj     
ˆ¡sˆt ˆt j ƒr”ˆj     ˆ¡nˆ‰ˆd‰d ‡‡fdd„|jDƒˆg¡dˆj|f|Ži}|jrâ|d7}|S)    Nržz visit_%s_funcz%(expr)srµcs4g|],}ˆj |¡s tˆtjƒr,ˆj |¡n|‘qSrž)rZÚ_requires_quotes_illegal_charsrirr/rÄ)r rm©rÌrßržr¢rH s ü
ÿ
þz.SQLCompiler.visit_function.<locals>.<listcomp>rlz WITH ORDINALITY)rÌrÐÚgetattrÚlowerr·rZ _deannotateruZ    _has_argsrZr*rirr/rÄr~Z packagenamesÚfunction_argspecZ_with_ordinality)rßr!r¶rƒrrÜržr+r¢r'* s:
 
ÿ
þü ù    ÷ÿ õ zSQLCompiler.visit_functioncKs | |j¡SrÝ)Úvisit_sequenceÚsequence)rßZ
next_valuer}ržržr¢Úvisit_next_value_funcX sz!SQLCompiler.visit_next_value_funccKstd|jjƒ‚dS)Nz2Dialect '%s' does not support sequence increments.©r€rcrÌ)rßr0r}ržržr¢r/[ s
ÿÿzSQLCompiler.visit_sequencecKs|jj|f|ŽSrÝ)Z clause_exprr…)rßr!rƒržržr¢r.a szSQLCompiler.function_argspecc  sbˆj }|j|ˆfˆŽ}|r(ˆjs(|ˆ_|j}|r8ˆjnˆjd}|pV| oV| dd¡}    |dkrh||d<ˆj |d|d|||    dœ¡|jršˆ |ˆ¡ˆj    |j
}
d    |
d      ‡‡‡fd
d „t |j ƒDƒ¡} dˆd <| ˆj|ftfd ˆiˆ—ŽŽ7} | ˆj|fˆŽ7} |jr$| ˆj|fˆŽ7} ˆjrR|s<tˆjƒnd} ˆj| dd| } ˆj d¡| S)Nr    rïFrrðrérè)rérèr#rìrïr¸c3s*|]"\}}|jˆfˆ|dœˆ—ŽVqdS))r rîNr„)r r_r©r rƒrßržr¢rŠ sýÿÿÿz4SQLCompiler.visit_compound_select.<locals>.<genexpr>r¾r T©rèÚinclude_following_stack)rFÚ_compile_state_factoryrìrõrérrrêrëÚcompound_keywordsÚkeywordr~r^ZselectsÚgroup_by_clauserJÚorder_by_clauseÚ_has_row_limiting_clauseÚ_row_limit_clauserÞr&rír<) rßÚcsr rîrƒrïrìZ compound_stmtrZneed_result_mapr8rÜrèržr3r¢Úvisit_compound_selectd sX
 
þûÿ
   üÿ     þüÿ z!SQLCompiler.visit_compound_selectcKs*|jdk    r|j|f|ŽS|j|f|ŽSdSrÝ)Ú _fetch_clauseÚ fetch_clauseÚ limit_clause)rßr=rƒržržr¢r<¥ s
zSQLCompiler._row_limit_clausecCs(d|j||rd|ndf}t||dƒS)Nz visit_%s_%s%sr°rQ)rÒr,)rßrZ
qualifier1Z
qualifier2Úattrnameržržr¢r « s ýz"SQLCompiler._get_operator_dispatchcKsÄ|dk    r"||f7}||d<||d<|jrt|jr8t d¡‚| |jdd¡}|r\|||jf|ŽS|j|t|jf|ŽSnL|jr¶| |jdd¡}|rž|||jf|ŽS|j|t|jf|ŽSn
t d¡‚dS)Nr¶r·zFUnary expression does not support operator and modifier simultaneouslyÚunaryr‚Úmodifierz,Unary expression has no operator or modifier)r‚rDr6rKr Ú _generate_generic_unary_operatorr³Ú _generate_generic_unary_modifier)rßrCr¶r·r}rržržr¢Ú visit_unary³ sN
ÿÿÿÿÿÿÿÿzSQLCompiler.visit_unarycKsx|jjrP|j|jf|Žd|jt |j|jjjt    j
kr>|jjnt     
¡¡f|ŽS|j|jf|Žd|j|jf|ŽSdS)Nú / ) rcÚdiv_is_floordivrkr€rZCastrrÐÚ_type_affinityr$ZNumeric©rßrdr‚r}ržržr¢Úvisit_truediv_binaryÚ s,ÿÿ
üÿùüÿÿþÿz SQLCompiler.visit_truediv_binarycKsh|jjr<|jjjtjkr<|j|jf|Žd|j|jf|ŽSd|j|jf|Žd|j|jf|ŽSdS)NrHz    FLOOR(%s))    rcrIrrÐrJr$ZIntegerrkr€rKržržr¢Úvisit_floordiv_binaryò s"ÿþÿþÿÿþÿz!SQLCompiler.visit_floordiv_binarycKs6|js|jjr|j|jf|ŽSd|j|jf|ŽSdS)Nz%s = 1©Z_is_implicitly_booleanrcrùrkr{©rßr{r‚r}ržržr¢Úvisit_is_true_unary_operator s ÿþz(SQLCompiler.visit_is_true_unary_operatorcKs:|js|jjr"d|j|jf|ŽSd|j|jf|ŽSdS)NúNOT %sz%s = 0rNrOržržr¢Úvisit_is_false_unary_operator s ÿþz)SQLCompiler.visit_is_false_unary_operatorcKsd|j|tjdS)NrQ)Úoverride_operator)Ú visit_binaryr Úmatch_oprKržržr¢Úvisit_not_match_op_binary sÿz%SQLCompiler.visit_not_match_op_binarycKsd|j|t|f|ŽSr)Ú_generate_generic_binaryr³rKržržr¢Úvisit_not_in_op_binary s ÿÿz"SQLCompiler.visit_not_in_op_binarycKsv|tjkr4t|ƒdkr.dd dd„|Dƒ¡SdSn>|tjkrht|ƒdkrbdd dd„|Dƒ¡Sd    Sn
| |¡SdS)
Nrz(%s)) OR (1 = 1r¯css|]
}dVqdS©rôNrž©r r{ržržr¢r& sz6SQLCompiler.visit_empty_set_op_expr.<locals>.<genexpr>zNULL) OR (1 = 1z(%s)) AND (1 != 1css|]
}dVqdSrYržrZržržr¢r- szNULL) AND (1 != 1)r Ú    not_in_opr&r~Úin_opÚvisit_empty_set_expr)rßrÛÚ    expand_opr}ržržr¢Úvisit_empty_set_op_expr" s
 ÿ
 ÿz#SQLCompiler.visit_empty_set_op_exprcKstd|jjƒ‚dS)Nz3Dialect '%s' does not support empty set expression.r2)rßZ element_typesr}ržržr¢r]4 s
ÿÿz SQLCompiler.visit_empty_set_exprc    sLˆj ˆj¡}|sP|jr<ˆjjr$dndˆ ˆjjˆj¡}nˆ ˆjgˆj¡}nô|js~|jr¼t    |dt
j ƒr¼t    |dt t fƒs¼|jrŒtdƒ‚ˆjjr˜dndd ‡‡fdd„t|ƒDƒ¡}nˆ|r*ˆj}| |¡}|rà| d¡sètd    ƒ‚| d¡ d
¡}|d |d ‰‰d ‡‡‡‡fd d„|Dƒ¡}nd ‡‡fdd„|Dƒ¡}d|fS)NúVALUES rQrz?bind_expression() on TupleType not supported with literal_bindsr¯c3s8|]0\}}dd ‡fdd„t|ˆjjƒDƒ¡VqdS)rr¯c3s|]\}}ˆ ||¡VqdSrÝrZ)r r;Z
param_typerÿržr¢rb sÿz[SQLCompiler._literal_execute_expanding_parameter_literal_binds.<locals>.<genexpr>.<genexpr>N)r~rLrÐr>)r r_r`©rxrßržr¢r_ s
÷ÿþþzQSQLCompiler._literal_execute_expanding_parameter_literal_binds.<locals>.<genexpr>r5ú)unexpected format for expanding parameterrerråc3s&|]}dˆˆ |ˆj¡ˆfVqdSrf©r[rЩr r;©rirjrxrßržr¢ru sú ýÿc3s|]}ˆ |ˆj¡VqdSrÝrcrdraržr¢r sÿrž)rÐrSrcr=Útuple_in_valuesr_r>r^Ú_isnullriÚcollections_abcrrŸÚbytesÚ_has_bind_expressionr€r~r^rvÚsearchryrjrk)    rßrxr3Úbind_expression_templateÚtyp_dialect_implÚreplacement_expressionZpost_compile_patternrrmržrer¢Ú2_literal_execute_expanding_parameter_literal_binds: s\ÿþÿÿþýÿ
öþ
ÿþù
 
þz>SQLCompiler._literal_execute_expanding_parameter_literal_bindscsXˆjrˆ ˆ|¡Sˆj}ˆj |¡‰ˆjr2ˆj‰nˆj‰ˆjjrZˆj    rZ‡‡‡‡fdd„‰n ‡fdd„‰|sœg‰ˆj
rˆˆ  ˆjj ˆj ¡}nˆ  ˆjgˆj ¡}n´ˆj
sЈjr t|dtjƒr t|dttfƒs ˆjrÚt‚‡fdd„t|dƒDƒ‰|jrüdnd    d
 ‡‡fd d „t|ƒDƒ¡}n0‡fd d„t|dƒDƒ‰d
 ‡fdd „ˆDƒ¡}ˆ|fS)Ncsˆ ˆjˆˆd|i¡S©NrÌ)Úrender_bind_castrÐrÏ)Ú bind_templaterxrßrmržr¢Ú_render_bindtemplateš s
 
ýzNSQLCompiler._literal_execute_expanding_parameter.<locals>._render_bindtemplatecs ˆd|iSrpržrÏ)rrržr¢rs£ srcs6g|].\}}t|dƒD]\}}dˆ||f|f‘qqS)rr\r])r r_r`rar;rÏržr¢r¸ s þzDSQLCompiler._literal_execute_expanding_parameter.<locals>.<listcomp>rr`rQr¯c3s8|]0\‰‰dd ‡‡‡‡fdd„tˆƒDƒ¡VqdS)rr¯c3s.|]&\}}ˆˆˆtˆƒ|dƒVqdS)rN)r&)r rar;)rsr_ryr`ržr¢rà sýÿzMSQLCompiler._literal_execute_expanding_parameter.<locals>.<genexpr>.<genexpr>N)r~r^)r )rsry)r_r`r¢rÀ s 
÷üþzCSQLCompiler._literal_execute_expanding_parameter.<locals>.<genexpr>cs g|]\}}dˆ|f|f‘qS)z%s_%srž)r r_r;rÏržr¢rÍ sÿc3s|]\}}ˆ|ƒVqdSrÝržr:)rsržr¢rÑ s)rsrorcrÐrSrÏrÉrÈÚ_bind_typing_render_castsrqr=r_r>r^rgrirhrrŸriZ    _is_arrayrjr^rfr~)rßrÌrxr3rcrnrž)rsrrrÌrxrßryrmr¢rr† sdÿ ÿþ     ÿÿÿþý
 
þ 
öþ
þÿz0SQLCompiler._literal_execute_expanding_parameterc
Ks|rft |j¡rf|dk    rJ|d}|j t |jj|g|j    j|g¡¡n|j t |jj|j    j¡¡|j
rt |jt j ƒrt |j    t j ƒrd|d<|p˜|j}| |dd¡}    |    rº|    ||f|ŽSz t|}
Wn0tk
rö} zt ||¡| ‚W5d} ~ XYnX|j||
f||dœ|—ŽSdS)NÚenclosing_lateralTrsrd)Ú from_linterÚlateral_from_linter)r Z is_comparisonr‚r:rtr1Úproductr€r)rrÇrirrDr r³r§r6ryrW) rßrdrSÚeager_groupingrvrwr}rurrrr|ržržr¢rT× sN      þÿÿÿÿ þ ý
  þüûzSQLCompiler.visit_binarycKs|j|jf|ŽSrÝ)rkZ sql_functionrOržržr¢Ú&visit_function_as_comparison_op_binary
sz2SQLCompiler.visit_function_as_comparison_op_binarycKsT|jjr,|j|jf|Žd|j|jf|ŽS|j|jf|Žd|j|jf|ŽSdS)Nz %% r­)rZrÙrkr€rrKržržr¢Úvisit_mod_binary sÿþÿÿþÿzSQLCompiler.visit_mod_binarycKs*|j|d<|j|d| |j¡df|ŽS)Nryr¸)ryrWrÃrrOržržr¢Úvisit_custom_op_binary s
þýz"SQLCompiler.visit_custom_op_binarycKs|j|| |j¡df|ŽSr )rErÃrrOržržr¢Úvisit_custom_op_unary_operator# s ÿÿz*SQLCompiler.visit_custom_op_unary_operatorcKs|j|d| |j¡f|ŽSr )rFrÃrrOržržr¢Úvisit_custom_op_unary_modifier( s ÿÿz*SQLCompiler.visit_custom_op_unary_modifiercKsf| dd¡}d|d<|j|d<|jj|fd|i|—Ž||jj|fd|i|—Ž}|rb|rbd|}|S)NÚ
_in_binaryFTÚ
_binary_opryr)rr‚r€r…r)rßrdrryr}rrÜržržr¢rW- s0 
ÿÿÿýÿÿÿüÿ
z$SQLCompiler._generate_generic_binarycKs||jj|f|ŽSrÝrž©rßrCrr}ržržr¢rEC sz,SQLCompiler._generate_generic_unary_operatorcKs|jj|f|Ž|SrÝržrržržr¢rFF sz,SQLCompiler._generate_generic_unary_modifiercCstjdtjdS)Nz'%')rÛ)rZliteral_columnr$Ú
STRINGTYPErÿržržr¢Ú_like_percent_literalI sz!SQLCompiler._like_percent_literalcKsd|jj|f|Ž›dS)Nzlower(r³ržrÍržržr¢Ú$visit_ilike_case_insensitive_operandM sz0SQLCompiler.visit_ilike_case_insensitive_operandcKs2| ¡}|j}| |j¡ |¡|_|j||f|ŽSrÝ©Ú_clonerƒÚconcatrÚvisit_like_op_binary©rßrdr‚r}Úpercentržržr¢Úvisit_contains_op_binaryP sz$SQLCompiler.visit_contains_op_binarycKs2| ¡}|j}| |j¡ |¡|_|j||f|ŽSrÝ©r†rƒr‡rÚvisit_not_like_op_binaryr‰ržržr¢Úvisit_not_contains_op_binaryV sz(SQLCompiler.visit_not_contains_op_binarycKsB| ¡}|j}t|jƒ|_| t|jƒ¡ |¡|_|j||f|ŽSrÝ©r†rƒr¨r€r‡rÚvisit_ilike_op_binaryr‰ržržr¢Úvisit_icontains_op_binary\ s ÿþz%SQLCompiler.visit_icontains_op_binarycKsB| ¡}|j}t|jƒ|_| t|jƒ¡ |¡|_|j||f|ŽSrÝ©r†rƒr¨r€r‡rÚvisit_not_ilike_op_binaryr‰ržržr¢Úvisit_not_icontains_op_binarye s ÿþz)SQLCompiler.visit_not_icontains_op_binarycKs,| ¡}|j}| |j¡|_|j||f|ŽSrÝ)r†rƒÚ_rconcatrrˆr‰ržržr¢Úvisit_startswith_op_binaryn sz&SQLCompiler.visit_startswith_op_binarycKs,| ¡}|j}| |j¡|_|j||f|ŽSrÝ)r†rƒr•rrr‰ržržr¢Úvisit_not_startswith_op_binaryt sz*SQLCompiler.visit_not_startswith_op_binarycKs<| ¡}|j}t|jƒ|_| t|jƒ¡|_|j||f|ŽSrÝ)r†rƒr¨r€r•rrr‰ržržr¢Úvisit_istartswith_op_binaryz s
 z'SQLCompiler.visit_istartswith_op_binarycKs<| ¡}|j}t|jƒ|_| t|jƒ¡|_|j||f|ŽSrÝ)r†rƒr¨r€r•rr“r‰ržržr¢Úvisit_not_istartswith_op_binary s
 z+SQLCompiler.visit_not_istartswith_op_binarycKs,| ¡}|j}| |j¡|_|j||f|ŽSrÝr…r‰ržržr¢Úvisit_endswith_op_binaryˆ sz$SQLCompiler.visit_endswith_op_binarycKs,| ¡}|j}| |j¡|_|j||f|ŽSrÝrŒr‰ržržr¢Úvisit_not_endswith_op_binaryŽ sz(SQLCompiler.visit_not_endswith_op_binarycKs<| ¡}|j}t|jƒ|_| t|jƒ¡|_|j||f|ŽSrÝrr‰ržržr¢Úvisit_iendswith_op_binary” s
 z%SQLCompiler.visit_iendswith_op_binarycKs<| ¡}|j}t|jƒ|_| t|jƒ¡|_|j||f|ŽSrÝr’r‰ržržr¢Úvisit_not_iendswith_op_binary› s
 z)SQLCompiler.visit_not_iendswith_op_binarycKsL|j dd¡}d|jj|f|Ž|jj|f|Žf|rFd| |tj¡ndS)Nråz
%s LIKE %sú ESCAPE rQ©Ú    modifiersrr€r…rr[r$r‚©rßrdr‚r}råržržr¢rˆ¢ sþÿúz SQLCompiler.visit_like_op_binarycKsL|j dd¡}d|jj|f|Ž|jj|f|Žf|rFd| |tj¡ndS)Nråz%s NOT LIKE %sržrQrŸr¡ržržr¢r® sþÿúz$SQLCompiler.visit_not_like_op_binarycKs:|tjkr*| ¡}t|jƒ|_t|jƒ|_|j||f|ŽSrÝ)r Zilike_opr†r¨r€rrˆrKržržr¢r¹ s
 
  z!SQLCompiler.visit_ilike_op_binarycKs:|tjkr*| ¡}t|jƒ|_t|jƒ|_|j||f|ŽSrÝ)r Z not_ilike_opr†r¨r€rrrKržržr¢r“ s
 
  z%SQLCompiler.visit_not_ilike_op_binarycKs&|j dd¡}|j||rdndf|ŽS)Nr”Fz BETWEEN SYMMETRIC z     BETWEEN ©r rrW©rßrdr‚r}r”ržržr¢Úvisit_between_op_binaryË s
ÿÿz#SQLCompiler.visit_between_op_binarycKs&|j dd¡}|j||rdndf|ŽS)Nr”Fz NOT BETWEEN SYMMETRIC z  NOT BETWEEN r¢r£ržržr¢Úvisit_not_between_op_binaryÑ s
þýz'SQLCompiler.visit_not_between_op_binarycKst d|jj¡‚dS©Nz/%s dialect does not support regular expressions©r6rKrcrÌrKržržr¢Úvisit_regexp_match_op_binaryÙ s
ÿÿz(SQLCompiler.visit_regexp_match_op_binarycKst d|jj¡‚dSr¦r§rKržržr¢Ú visit_not_regexp_match_op_binaryß s
ÿÿz,SQLCompiler.visit_not_regexp_match_op_binarycKst d|jj¡‚dS)Nz;%s dialect does not support regular expression replacementsr§rKržržr¢Úvisit_regexp_replace_op_binaryå s
ÿÿz*SQLCompiler.visit_regexp_replace_op_binarycKs®|s®|j |j¡}|jr®| |¡}    |j|    fd||o8|j ||dœ|—Ž}
|jrªt d|
¡} | sft    dƒ‚d|  
d¡|  
d¡|  
d¡f}
|rª|j |fd|
d    œ|—Ž} d
| S|
S|sÒ|pÄ|j pÄ|oÄ|j }|pÎ|j} nd } |r|j |fd di|—Ž} |jrd
| } | S| |¡}||jkrØ|j|}||k    rØ|js@|jrp|j |j¡sp|j |j¡spt d |¡‚nh|j|jkrt d|f¡‚nH|js |jrØ|jr¼|jr¼t d¡‚nt d|j›d|j›d¡‚||j|j<|j|<|j}|r4|\}}|jD]*}|j|kr||j}|| |¡q|jrBd|_| r||rTd|_|rl|j|hO_n|j|hO_|j|f| |j|jdœ|—Ž} |jrªd
| } | S)NT)Úskip_bind_expressionr¦Ú literal_bindsrsÚrender_postcompilez&^(.*)\(__\[POSTCOMPILE_(\S+?)\]\)(.*)$rbz$(__[POSTCOMPILE_%s~~%s~~REPL~~%s~~])r5rrå)r¦rlrFr¦zIBind parameter '%s' conflicts with unique bind parameter of the same nameaCan't reuse bound parameter name '%s' in both 'expanding' (e.g. within an IN expression) and non-expanding contexts.  If this parameter is to receive a list/array value, set 'expanding=True' on it for expressions that aren't IN, otherwise use a different parameter name.a)Encountered unsupported case when compiling an INSERT or UPDATE statement.  If this is a multi-table UPDATE statement, please provide string-named arguments to the values() method with distinct names; support for multi-table UPDATE statements that target multiple tables for UPDATE is very limitedzbindparam() name 'zÌ' is reserved for automatic usage in the VALUES or SET clause of this insert/update statement.   Please use a name other than column name when using bindparam() with insert() or update() (for example, 'b_z').)Ú post_compileÚ    expandingÚbindparam_type) rÐÚ dialect_implrcrjÚbind_expressionrkr¯räÚmatchrjryrqrsrÇÚ_truncate_bindparamrÃr™r¢Ú intersectionZ _cloned_setr6rKZ_is_crudrþrÚrZ
isoutparamÚhas_out_parametersrÐr×rØrÞ)rßr?r¦r¬r«rsr­rƒÚimplr²Úwrappedrr—r®rÌÚexistingrPrrÿZbpÚcbržržr¢Úvisit_bindparamë sî
 
ÿ
úù    ÿ ýÿýüÿý ÿÿÿ
 
 
ÿÿÿþÿû    ÿÿûÿÿ ÿ 
 
 
ÿüûzSQLCompiler.visit_bindparamcCs
tƒ‚dSrÝr)rßrÛZ
dbapi_typeÚsqltextržržr¢rqszSQLCompiler.render_bind_castc
Ksœ|tk    r|}nZ|jdkrb|jdkrb| dd¡}|rR|tjtjfkrRt d|j    f¡|j
t j f|ŽS|j }|jrŠ|j}||||d\}}    |    S| ||j¡SdS)Nr€z‰Bound parameter '%s' rendering literal NULL in a SQL expression; comparisons to NULL should not use operators outside of 'is' or 'is not')rl)r-r;rNrr Úis_Úis_notr%Z warn_limitedrþrkr$rârOr¯ror[rÐ)
rßr?r[rlr}r;ÚopZleepryrzržržr¢rq’s( üý
z$SQLCompiler.render_literal_bindparamc
Cs€| |j¡}|r`z
||ƒWStk
r\}z$t dt |¡›d|›d¡|‚W5d}~XYq|Xnt dt |¡›d|›¡‚dS)aRender the value of a bind parameter as a quoted literal.
 
        This is used for statement sections that do not accept bind parameters
        on the target driver/database.
 
        This should be implemented by subclasses using the quoting services
        of the DBAPI.
 
        z Could not render literal value "z" with datatype z); see parent stack trace for more detail.Nz:No literal value renderer is available for literal value ")Z_cached_literal_processorrcršr6rKÚsql_utilZ_repr_single_value)rßr;rÛÚ    processorÚeržržr¢r[³s 
ÿú    ÿz SQLCompiler.render_literal_valuecCs@||jkr|j|S|j}t|tjƒr2| d|¡}||j|<|S)Nr?)rÄrþrirrCr²)rßr?r7ržržr¢r´Òs
 
 
zSQLCompiler._truncate_bindparamrC)Ú ident_classrÌrÜcCsš||f|jkr|j||fS| |j¡}t|ƒ|jdkr„|j |d¡}|dt|jddƒ…dt|ƒdd…}|d|j|<n|}||j||f<|S)Nérrr°r5)    rúÚ    apply_maprùr&r÷rûrÚmaxÚhex)rßrÃrÌZanonnameÚcounterZ    truncnameržržr¢r²ßs ÿþÿz!SQLCompiler._truncated_identifier)rÌrÜcCs
||jSrÝ©rù©rßrÌržržr¢Ú
_anonymizeôszSQLCompiler._anonymizezOptional[TypeEngine[Any]]zOptional[Set[str]])    rÌr®r¯Ú escaped_fromr°Úaccumulate_bind_namesÚvisited_bindparamr}rÜc  s |dk    r| |¡|dk    r$| |¡|sRˆj |¡rRˆj ‡fdd„|¡}    |}|    }|rhˆj ||i¡ˆ_|r¨d|}
|r||
S|dk    r¤| ˆj¡} | j    r¤ˆ 
|| |
¡}
|
Sˆj t j krĈjd|i}
nˆjd|i}
|dk    rˆjjr| ˆj¡} | j
rˆ 
|| |
¡}
|
S)Ncsˆj| d¡S)Nr)r»ryr,rÿržr¢r/r0z.SQLCompiler.bindparam_string.<locals>.<lambda>z__[POSTCOMPILE_%s]rÌ)ÚaddrrºrkrrÙr˜rSrcZrender_literal_castrqrSr+r,rÉrÈrt) rßrÌr®r¯rÌr°rÍrÎr}Únew_namer—Z    type_implržrÿr¢rÞ÷sL
 
 
þÿÿ ÿþ zSQLCompiler.bindparam_stringcCsF| ¡}| dd¡t|j|jƒD]\}}|j|fd|i|—Žq"dS)NÚcte_opts)Úcopyr<rLrêZ_independent_ctes_optsr…)rßÚstmtr}Zlocal_kwÚcteÚoptržržr¢rë<s ÿ z&SQLCompiler._dispatch_independent_ctesrLzOptional[_FromHintsType]z Optional[CTE]zOptional[FromLinter]zselectable._CTEOpts)    rÔr ÚashintÚ    fromhintsÚ visiting_ctervrÑrƒrÜc sÞˆ ¡}    |    ˆjkst‚||d<|j}
t|
tjƒr<ˆ d|
¡}
d} d} | ¡} |j    pV|j    }| ˆj
krðˆj
| \}}}||
ks~t‚||
f}ˆj |}|j    rî|j    r¦t   d¡‚||
f}|r¼tˆjƒnd}||
f}}ˆj |=|ˆj |<||fˆj
| <n6|rþtˆjƒnd}||
f}|ˆj kr"ˆj |}nd}|dk    rÌ||k} ||jksN||krTd} nx||jkr”|    |=| ¡}|| ks|t‚||ksŠt‚ˆj
|=n8|jdk    s¬|jdk    r¾| |¡r¾d} nt   d|
¡‚|sÜ| sÜdS|jdk    r|j}|jj}t|tjƒrˆ d|¡}n|}d}| r\|ˆj |<||fˆj
| <|ˆjkrTˆj|f|Ž|s\||    kr\|jrrdˆ_ˆj ||
¡}|jrÂ|j}dd    „| d¡Dƒ}|d
d  ‡fd d „|Dƒ¡7}| dd¡dksØt‚ˆjsø|jjˆfd|i|—ŽSˆj||jf|Ž}|jjˆfddi|—Ž}|d||f7}|j rT|dˆj||j f|Ž7}||    |<|rÚ|rr|
|j!|<| sŒ| rŒˆj ||
¡S|r̈j ||¡}ˆj "|
¡rºˆj #|
¡}
|ˆ $|
¡7}|Sˆj ||
¡SdS)NrØrÀTFz6CTE is stated as 'nest_here' in more than one locationrz5Multiple, unrelated CTEs found with the same name: %rcSs"g|]\}}}}}|s|p|‘qSržrž)r r°Ú
proxy_nameÚfallback_label_namerÚrepeatedržržr¢rÊsøz)SQLCompiler.visit_cte.<locals>.<listcomp>rr¯c3s |]}ˆjj|ˆjdVqdS)rÉN)rZÚformat_label_namerù)r Úidentrÿržr¢rÛs
ýÿz(SQLCompiler.visit_cte.<locals>.<genexpr>Úsubqueryr z  AS %s
(%s)r¸)%rrÞrjrÌrirrCr²Ú_get_reference_cteÚnestingràrßr6rKr&rFZ    _restatesZ _is_clone_ofÚcompareZ
_cte_aliasÚ    visit_cteÚ    recursiverárZÚ format_aliasr{Ú_generate_columns_plus_namesr~rr…Ú_generate_prefixesÚ    _prefixesÚ    _suffixesr9Ú_requires_quotesrÄÚget_render_as_alias_suffix)rßrÔr rÖr×rØrvrÑrƒZ    self_ctesÚcte_nameZ
is_new_cteZembedded_in_current_named_cteZ_reference_cteràÚ    cte_levelr°Zexisting_cte_optsZcte_level_nameZ existing_cteZold_level_nameZnew_level_nameZexisting_cte_reference_cteZ pre_alias_cteZcte_pre_alias_namerÜZ
col_sourceZ
recur_colsÚprefixesr|ržrÿr¢râDs     
ÿ
 
ÿ 
ÿ  
 
ÿþýÿÿ  ÿ
ÿ   ôüÿ    ÿÿÿÿÿÿÿÿÿÿ
  zSQLCompiler.visit_ctecKs4|jrd|d<|jr"|j|f|ŽS|j|f|ŽSdS)Nrv)Zjoins_implicitlyÚ _is_lateralÚ visit_lateralÚ visit_aliasrÍržržr¢Úvisit_table_valued_aliass
z$SQLCompiler.visit_table_valued_aliascKs|j|f|ŽSrÝ)rÊrÍržržr¢Úvisit_table_valued_columnsz%SQLCompiler.visit_table_valued_columnc
     s¢|r:dˆkrˆjst‚ˆˆd<|    r:dˆkr:dˆkr:|    ˆd<|dk    rˆ|jˆkrˆˆjjˆf|||||ˆdœˆ—Ž} |r„|sz|r„d| f} | Sˆ}ˆd<|sœ|rÀtˆjtjƒrºˆ dˆj¡} nˆj} |r҈j     
ˆ| ¡S|r†|    ræ| |    j ˆ<ˆjjˆfd|dœˆ—Ž} |rd| f} | ˆ  ˆj     
ˆ| ¡¡} ˆj r^ˆjr^| dd     ‡‡‡fd
d „ˆjDƒ¡7} |r‚ˆ|kr‚ˆ | ˆ|ˆ|¡} | Sˆjjˆfd |iˆ—ŽSdS) Nrurw)r rÖÚiscrudr×ÚlateralÚenclosing_aliasrrõrÀT)r rôr¯c3sB|]:}dˆj |j¡ˆjr2dˆjjj|jfˆŽndfVqdS)z%s%sú %srQN)rZrÄrÌZ_render_derived_w_typesrcrÓrkrÐr„©rÀrƒrßržr¢rbs ö üÿÿÿùÿz*SQLCompiler.visit_alias.<locals>.<genexpr>rô)rîrjr{r…rirÌrrCr²rZrär9rêZ_supports_derived_columnsZ_render_derivedr~rÚformat_from_hint_text)rßrÀr rÖrór×rÞrôrõrvrƒr|Z
alias_namer—ržr÷r¢rðsŽ
ÿþýÿùø
 
 
ÿÿÿ
 ÿ õÿÿÿÿÿzSQLCompiler.visit_aliascKsd|d<|j|f|ŽS)NTrÞ©rð)rßrÞr}ržržr¢Úvisit_subquery}szSQLCompiler.visit_subquerycKsd|d<d|j|f|ŽS)NTrôz
LATERAL %srù)rßZlateral_r}ržržr¢rïszSQLCompiler.visit_lateralcKsRd|j|fddi|—Ž| ¡j|f|Žf}|jdk    rN|d|jj|f|Ž7}|S)Nz%s TABLESAMPLE %sr Tz REPEATABLE (%s))rðZ _get_methodr…Úseed)rßZ tablesampler r}rÜržržr¢Úvisit_tablesample…sþ
ÿzSQLCompiler.visit_tablesamplec s6ˆ dˆj¡d ‡‡‡fdd„ˆjDƒ¡}d|›S)Nr¬r¯c3s8|]0}|D]&}ˆjtj|dˆjiŽ ¡fˆŽVq
qdS)r>N)rkrrZ _column_typesr¥)r ÚchunkÚelem©r{r}rßržr¢r”sùÿÿÿüz-SQLCompiler._render_values.<locals>.<genexpr>r`)Ú
setdefaultr¬r~Ú_data)rßr{r}Ztuplesržrÿr¢Ú_render_values’s
ù
zSQLCompiler._render_valuesc     s¸ˆj|fˆŽ}|jrd}n$t|jtjƒr8ˆ d|j¡}n|j}|jrJd}nd}|r´|rl|dk    rb|nd|j|<|r¨d||ˆ     ˆj
  |¡¡d  ‡‡fdd„|j Dƒ¡f}n d    ||f}|S)
Nr3zLATERAL rQz(unnamed VALUES element)z %s(%s)%s (%s)r¯c3s$|]}|jˆfddiˆ—ŽVqdS)r¾FNr„rrÿržr¢r»sýÿÿÿz+SQLCompiler.visit_values.<locals>.<genexpr>z%s(%s))rZ_unnamedrirÌrrCr²rîr9rêrZrÄr~Úcolumns)rßr{r rvr}rrÌrôržrÿr¢Ú visit_values s0ÿüû zSQLCompiler.visit_valuescKsd|j|f|Ž›dSr)rrÍržržr¢Úvisit_scalar_valuesÇszSQLCompiler.visit_scalar_valuescCsd|S)Nr°rž)rßZalias_name_textržržr¢rêÊsz&SQLCompiler.get_render_as_alias_suffixrÏrÙrÚcCsF|dks|dkrd|_d|_|jr,t d¡‚|j t||||ƒ¡dS)NÚ*FTzxMost backends don't support SELECTing from a tuple() object.  If this is an ORM query, consider using the Bundle object.)rÍrÌr=r6rKrUrrÊrÞržržr¢rìÍsÿ ÿzSQLCompiler._add_to_result_mapcKs"|jd||d|dkrin|f|ŽS)aLRender a column with necessary labels inside of a RETURNING clause.
 
        This method is provided for individual dialects in place of calling
        the _label_select_column method directly, so that the two use cases
        of RETURNING vs. SELECT can be disambiguated going forward.
 
        .. versionadded:: 1.4.21
 
        NF©Ú_label_select_column)rßrÓrgrñÚcolumn_clause_argsr}ržržr¢Ú_label_returning_columnás ûúz#SQLCompiler._label_returning_columnc s̈j |j¡} | jr(| s|r(|  ˆ¡}nˆ}|rh|j}|
rL|‰‡fdd„}ql|ˆk    rl|‰‡‡fdd„}nd}|    sxtdƒ‚tˆtj    ƒrª|ˆk    r¢t
|ˆj ˆj fd}n|}n|rÔ|dk    s¾tdƒ‚t
|||ˆj fd}nÚ|ˆk    râd}n~tˆtjƒr |oˆj oˆjdk    }nTtˆtjƒr d    }n@tˆtjƒr<ˆjp8|}n$tˆtjƒs\ˆjdkr\d}nd    }|rª|s||
rvt‚ˆj}t|tjƒs”t |¡n|}t
|||fd}n|}|j|    || d
|j|f|ŽS) z.produce labeled columns present in a select().csˆ||d|ƒdS)Nržrž©rËrÌrÎrÛ)rìržr¢r¶sz;SQLCompiler._label_select_column.<locals>.add_to_result_mapcsˆ||ˆf||ƒdSrÝržr ©rìrgržr¢r¶$s ÿNzX_label_select_column is only relevant within the columns clause of a SELECT or RETURNING)r z*proxy_name is required if 'name' is passedTF)r¦r¶r¾)rÐr±rcZ_has_column_expressionZcolumn_expressionrìrjrirrGr›rÌr{rÂrErÁr•Z
TextClauseZUnaryExpressionZwraps_column_expressionZ NamedColumnZ_non_anon_labelZ_anon_name_labelrCrtr…)rßr‘rgrñr r    rÌrÙrÚr¦Úcolumn_is_repeatedÚneed_column_expressionsr¾r·Zcol_exprr¶Z result_exprZrender_with_labelržr r¢rös¢ÿÿ ÿ ÿÿþùýÿý
ü ô
ÿÿûÿýz SQLCompiler._label_select_columncCs | ||¡}|r|d|7}|Sr )Úget_from_hint_text)rßr¼r•ÚhintróÚhinttextržržr¢røšs  z!SQLCompiler.format_from_hint_textcCsdSrÝrž)rßZbyfromsržržr¢Úget_select_hint_text sz SQLCompiler.get_select_hint_textcCsdSrÝrž©rßr•rÜržržr¢r£szSQLCompiler.get_from_hint_textcCsdSrÝržrržržr¢Úget_crud_hint_text¦szSQLCompiler.get_crud_hint_textcCs
d |¡Sr r)rßZ
hint_textsržržr¢Úget_statement_hint_text©sz#SQLCompiler.get_statement_hint_textrërérérèc Ksh|j }|r|jn|jd}| ||¡}|d}|d}    |rV|sV|j| |    ¡dd}
n|j||    d}
|
S)Nr    rérèrž©Zexplicit_correlate_fromsZimplicit_correlate_froms)rFrér6Ú_get_display_fromsÚ
difference) rßÚ select_stmtr rôr}rïrrìrérèr9ržržr¢Ú_display_froms_for_select³s" ÿüþz%SQLCompiler._display_froms_for_selectÚtranslate_select_structurec    
s¼|dkstdƒ‚d|    d<ˆjˆˆf|    Ž}
|
j|    d<|
j‰ˆj } | rPˆjsP|
ˆ_|dk    pZ|} ˆjr¢ˆjˆfdˆi|    —Ž} | ˆk    r¢|
}ˆ}| ‰ˆjˆˆf|    Ž}
|
j‰| r¬ˆjnˆjd}| pÐ| dd¡pÐ| dd¡‰‰|rÞd‰ˆsðd    |    krð|    d    =ˆ     ˆ|
|ˆ||¡}|     
¡‰ˆ  ddd
œ¡d }ˆj rJˆ  ˆ¡\}}|rN||d 7}nd}ˆjrbˆ ˆ|    ¡ˆjr€|ˆjˆˆjf|    Ž7}|ˆjˆf|    Ž7}d d„‡‡‡‡‡‡fdd„|
jDƒDƒ}ˆr|dk    rttdd„|
jDƒdd„|jDƒƒƒ‰‡fdd„ˆjDƒˆ_ˆ |ˆ|
|||| |    ¡}ˆjrR‡fdd„ˆjDƒ}|rR|d ˆ |¡7}ˆjrŠ| rf| rŠ| svtˆjƒnd}ˆj|d|}ˆjr¬|d ˆjˆˆjf|    Ž7}ˆj d¡|S)NzpSQLAlchemy 1.4 requires use of the translate_select_structure hook for structural translations of SELECT objectsFr¦r¿r r    rïrîr¶)r±r¦zSELECT r¸cSsg|]}|dk    r|‘qSrÝržrržržr¢rDsêz,SQLCompiler.visit_select.<locals>.<listcomp>cs4g|],\}}}}}ˆjˆ|ˆˆˆ||||ˆd
‘qS))rÌrÙrÚr rr©r rÌrÙrÚrgrÛ)r r    rrñrrßržr¢rFs$ ïöcSsg|]\}}}}}|‘qSržrž©r rþrÙrÚrÌrÛržržr¢rdsúcSsg|]\}}}}}|‘qSržržrržržr¢rnsúc    s4g|],\}}}}t||t‡fdd„|Dƒƒ|ƒ‘qS)c3s|]}ˆ ||¡VqdSrÝr)r Úo©Ú    translateržr¢r}sz6SQLCompiler.visit_select.<locals>.<listcomp>.<genexpr>)rÊr)r rþrÌr‚rÛrržr¢r{s
ýÿcs$g|]\}}|dˆjjfkr|‘qS©r©rcrÌ)r Ú dialect_nameÚhtrÿržr¢rŽsþrç)rjr6Z_ambiguous_table_name_maprõrFrìrrérÚ_setup_select_stackrÒrtÚ_hintsÚ_setup_select_hintsrêrërçræÚget_select_precolumnsÚcolumns_plus_namesrJrLrUÚ_compose_select_bodyZ_statement_hintsrrÞr&rírèr<)rßrr Ú insert_intor×rîZselect_wraps_forrôrvrƒrìrïZis_embedded_selectZnew_select_stmtZcompile_state_wraps_forrr9rÜÚ    hint_textÚbyfromÚ inner_columnsZ per_dialectrèrž)r r    rrñrrßr r¢Ú visit_select×sö
ÿ ÿÿþÿ
 ÿÿÿÿÿ
ÿ
ý ÿÿ ÿÿíþø
øõÿ
üø 
þÿÿ zSQLCompiler.visit_selectrñzTuple[str, _FromHintsType])r‘rÜcs*‡fdd„|j ¡Dƒ}ˆ |¡}||fS)Nc    s<i|]4\\}}}|dˆjjfkr||d|jˆddi“qS)rrÌT)rÖ©rcrÌr…)r rJrcrrÿržr¢rî§s 
ýÿz3SQLCompiler._setup_select_hints.<locals>.<dictcomp>)r&r%r)rßr‘r-r,ržrÿr¢r'¤s
 
ý
zSQLCompiler._setup_select_hintscCsÆ|d}|d}|dkr"||d<nD|rf|d}    t|    jƒ}
t|jƒ|
krft dd|
|dt|jƒf¡‚|r„|s„|j| |¡dd} n|j||d} tt| Žƒ} |      |¡} | | ||d    œ}|j
  |¡| S)
Nrérèrrðz}All selectables passed to CompoundSelect must have identical numbers of columns; select #%d has %d columns, select #%d has %drržr)rèrér#rì) r&rr)r6rKrrr“r)r˜rFr)rßr‘rìrr rôrîrérèrðZnumcolsr9Znew_correlate_fromsZall_correlate_fromsrðržržr¢r%°sJ
 
üüÿ ÿüþ 
ü zSQLCompiler._setup_select_stackc     s’|d |¡7}ˆjt@r:titƒƒ‰ˆjt@}    |rBˆˆ_nd‰d}    |sN| ¡}|r¦|d7}|jr„|d ‡‡‡‡fdd„|Dƒ¡7}q²|d ‡‡‡fdd„|Dƒ¡7}n |ˆ     ¡7}|j
ràˆj |j
fdˆiˆ—Ž}
|
rà|d|
7}|    røˆdk    sðt ‚ˆ  ¡|jr|ˆj|fˆŽ7}|jr<ˆj |jfˆŽ}
|
r<|d    |
7}|jrV|ˆj|fˆŽ7}|jrp|ˆj|fˆŽ7}|jdk    rŽ|ˆj|fˆŽ7}|S)
Nr¯Fz 
FROM cs&g|]}|jˆfdˆˆdœˆ—Ž‘qS)T)r r×rvr„©r Úf©r-rvrƒrßržr¢r    sùÿüûz4SQLCompiler._compose_select_body.<locals>.<listcomp>cs$g|]}|jˆfdˆdœˆ—Ž‘qS)T©r rvr„r1)rvrƒrßržr¢rsúÿýürvz 
WHERE z     
HAVING )r~rêr1r4r“r2rvÚrstripr&rœÚ_where_criteriarrjrLÚ_group_by_clausesr9Z_having_criteriaÚ_order_by_clausesr:r;r<Z_for_update_argÚfor_update_clause) rßrÜr‘rìr.r9r-rïrƒÚ warn_lintingÚtržr3r¢r*äsl 
 
    øÿ ùÿ ÿÿÿ  ÿÿ  z SQLCompiler._compose_select_bodyc s*d ‡‡fdd„|Dƒ¡}|r&|d7}|S)Nr¸c3s4|],\}}|dks|ˆjjkr|jˆfˆŽVqdS))NrNr0)r Úprefixr#rÿržr¢rDs þz1SQLCompiler._generate_prefixes.<locals>.<genexpr>r)rßrÓrír}rržrÿr¢ræCs þzSQLCompiler._generate_prefixesc Cs0|js
dS|r„|dkr„t ¡}t|j ¡ƒD]T}|j| ¡\}}}|jpN|j}||kpf|of||dk}    |r,|    srq,|j|||<q,n|j}|s’dStdd„|Dƒƒ}
|     |
¡d} | d 
dd„|  ¡Dƒ¡7} | d7} |r,|dkr,t| ¡ƒD]8}|j| ¡\}}}|j|=|j ||f=|j| ¡=qò| S)    zå
        include_following_stack
            Also render the nesting CTEs on the next stack. Useful for
            SQL structures like UNION or INSERT that can wrap SELECT
            statements containing nesting CTEs.
        rQrcSsg|]
}|j‘qSrž)rã)r rÔržržr¢rqsz2SQLCompiler._render_cte_clause.<locals>.<listcomp>r¸ú, 
cSsg|]}|‘qSržrž)r Útxtržržr¢rtsz
 ) rÞr%rr Úkeysràrßràr`Úget_cte_preambler~r3rß) rßrèr5rÞrÔrìrërÑràZis_rendered_levelráZcte_textržržr¢ríMs>  ÿ
 ÿÿ
 zSQLCompiler._render_cte_clausecCs|rdSdSdS)NzWITH RECURSIVEZWITHrž)rßrãržržr¢r@‚szSQLCompiler.get_cte_preamblecKs"|jrtjddd|jrdSdS)zcCalled when building a ``SELECT`` statement, position is just
        before column list.
 
        a DISTINCT ON is currently supported only by the PostgreSQL dialect.  Use of DISTINCT ON for other backends is currently silently ignored, however this usage is deprecated, and will raise CompileError in a future release for all backends that do not support this syntax.z1.4©Úversionr±rQ)Z _distinct_onr%Úwarn_deprecatedZ    _distinct©rßr‘r}ržržr¢r(ˆs úz!SQLCompiler.get_select_precolumnscKs,|j|jttjf|Ž}|r$d|SdSdS)z5allow dialects to customize how GROUP BY is rendered.z
 GROUP BY rQN)rr7r³r Úcomma_op)rßr‘r}Zgroup_byržržr¢r9˜sÿÿzSQLCompiler.group_by_clausecKs,|j|jttjf|Ž}|r$d|SdSdS)z5allow dialects to customize how ORDER BY is rendered.z
 ORDER BY rQN)rr8r³r rE)rßr‘r}rržržr¢r:£sÿÿzSQLCompiler.order_by_clausecKsdS)Nz  FOR UPDATEržrDržržr¢r9¯szSQLCompiler.for_update_clauserAúSequence[ColumnElement[Any]]©rÓÚreturning_colsrñr}rÜc s6‡‡‡‡fdd„ˆjdt |¡dDƒ}dd |¡S)Nc    s6g|].\}}}}}ˆjˆ|ˆf||||dœˆ—Ž‘qS))rÚr rÌrÙ)r
r©r}rñrßrÓržr¢r»s$ ñýùøz0SQLCompiler.returning_clause.<locals>.<listcomp>T)Úcolsú
RETURNING r¯)rårÚ_select_iterablesr~©rßrÓrHrñr}rržrIr¢Úreturning_clause²s    ÿïzSQLCompiler.returning_clausecKs^d}|jdk    r&|d|j|jf|Ž7}|jdk    rZ|jdkrB|d7}|d|j|jf|Ž7}|S)NrQz
 LIMIT z
 
 LIMIT -1z OFFSET )Z _limit_clauserkÚ_offset_clause)rßr‘r}rÜržržr¢rAÓs
 
 
zSQLCompiler.limit_clausec
KsÈ|dkr|j}|j}n
dddœ}d}|jdk    rf|j}|rJ| |¡rJ| ¡}|j|f|Ž}    |d|    7}n |rr|d7}|dk    rÄ|r| |¡r| ¡}|d|j|f|Ž|dr¬dnd|d    rºd
nd f7}|S) NF)rŠÚ    with_tiesrQz
 OFFSET %s ROWSz
 OFFSET 0 ROWSz
 FETCH FIRST %s%s ROWS %srŠz PERCENTrPz    WITH TIESZONLY)r?Z_fetch_clause_optionsrOZ_simple_int_clauseZrender_literal_executerk)
rßr‘r@Zrequire_offsetZ"use_literal_execute_for_simple_intr}Zfetch_clause_optionsrÜZ offset_clauseZ
offset_strržržr¢r@Ýs8
 
ÿþÿþ ýzSQLCompiler.fetch_clausec     KsÂ|r|j|j|<|s|rº|j |¡}
|rL|
rL|j |
¡d|j |j¡} nJ|j |j¡} |
s–|r–|j|kr–| d||j¡} | | |j     d| ¡¡} |r¶||kr¶| 
| ||||¡} | SdSdS)NrµrÀrQ) Úfullnamer9rZrÅrÆrÄrÌr²rêrärø) rßr•r rórÖr×Ú
use_schemarvr¿rƒrÉr—Z    anon_nameržržr¢Ú visit_tablesD   
ÿ þÿÿþýÿ ÿ ÿzSQLCompiler.visit_tablecKs|r |j t |jj|jj¡¡|jr,d}n|jr8d}nd}|jj    |fd|dœ|—Ž||jj    |fd|dœ|—Žd|j
j    |fd|i|—ŽS)Nz FULL OUTER JOIN z LEFT OUTER JOIN z JOIN Tr4z ON rv) r:rtr1rxr€r)rrxZisouterr…Zonclause)rßr~r rvrƒZ    join_typeržržr¢Ú
visit_join6sTÿÿÿÿÿýÿÿÿüù    ÿÿÿ÷ÿzSQLCompiler.visit_joincsB‡fdd„|j ¡Dƒ}|j|kr:ˆ ||j||jd¡}||fS)Ncs*i|]"\\}}}|dˆjjfkr||“qSr!r")r r•rcr,rÿržr¢rîTs
þz1SQLCompiler._setup_crud_hints.<locals>.<dictcomp>T)r&r%r•rø)rßrÓÚ
table_textÚ dialect_hintsržrÿr¢Ú_setup_crud_hintsSs
þ
ÿzSQLCompiler._setup_crud_hintsrIr)r•rÜcCs~|jj}|j}|j}|dkr dS|jr8|j |jd¡}n|j |jd¡}||@rT|S|j    rzt
  d|d›d|jj ›d¡‚dS)a)given a :class:`.Table`, return a usable sentinel column or
        columns for this dialect if any.
 
        Return None if no sentinel columns could be identified, or raise an
        error if a column was marked as a sentinel explicitly but isn't
        compatible with this dialect.
 
        NrzColumn z@ can't be explicitly marked as a sentinel column when using the a dialect, as the particular type of default generation on this column is not currently compatible with this dialect's specific INSERT..RETURNING syntax which can receive the server-generated value in a deterministic way.  To remove this error, remove insert_sentinel=True from primary key autoincrement columns; these columns are automatically used as sentinels for supported dialects in any case.) rcÚ"insertmanyvalues_implicit_sentinelZ _sentinel_column_characteristicsrZ
is_autoincÚ_sentinel_col_autoinc_lookuprZdefault_characterizationÚ _sentinel_col_non_autoinc_lookupZ is_explicitr6rrÌ)rßr•Z sentinel_optsZsentinel_characteristicsZ    sent_colsZbitmaskržržr¢Ú_get_sentinel_column_for_tables* ÿÿÿz*SQLCompiler._get_sentinel_column_for_tablerWrr z Iterator[_InsertManyValuesBatch])rõröÚgeneric_setinputsizesrr rÜc* #sÔˆ
j}|dk    st‚tˆ    ƒ}|jr2ˆ
jjs2d}d}    n4ˆ
jjrT|r^ˆ
jr^|jdksT|j    r^d}d}    nd}d}    |r¤t
t dˆ    ƒdƒD]$\}
‰t |ˆˆˆg||
|||    ƒ    VqzdSd|j ›d} | | d¡}ˆ
jj} | røtˆ
jƒ} t|jƒ}| |}t|| ||ƒ}tˆ    ƒ}d}d}
||||rdnd}|j}|dk    s6t‚d‰‰ˆ
jsàˆ
jrVˆ
j‰ni‰tˆ    dƒ}‡‡
fd    d
„‰|jr‚d }nd }dd  ‡fdd„|Dƒ¡›|›d}| ‡fdd„|Dƒ¡}‡    fdd„| |¡Dƒ}d ‰nØd }tƒ}i}|jrd|j ›d‰nd|j ›d‰tƒ‰|jD]}ˆ |d¡q ˆrˆ
j}|dk    sPt‚‡fdd„t
|ƒDƒ}t|ƒ‰t|ƒd‰t|ƒˆˆkst‚ˆ
jr¸t  ˆ
j!¡}t "|›ddˆ¡‰|rÐt d|d|…ƒ}g|d|…<ˆrdd„‡fdd„t#t|ƒƒDƒDƒ}ˆ
jr,|j$}|t|dƒkr4d}} |}!n4|ddˆ…}|dˆd…} ‡‡fdd„|Dƒ}!|jr–d  ‡fd d„t
|ƒDƒ¡dd!…}"nˆt|ƒdd!…}"ˆ
jr|dkr| rÆt‚ˆd}#|t|ƒ|#}$t%‡
fd"d„t#|#|$ƒDƒƒ}%|"|%}"| d|"¡}&t%t&j' (|!¡ƒ}'||'| }'n~g}(| )¡}'t
|ƒD]V\‰‰| d#t*ˆƒ¡})|jrp|) d$t*ˆƒ¡})|( +|)¡|' ‡‡fd%d„|Dƒ¡q@| dd  |(¡¡}&t |&|'||||
||dƒ    V|
d7}
q¸dS)&NTFrrr²r³Z__EXECMANY_TOKEN__rcs@|D]6}ˆ ||¡}| ˆjd|iˆjd|›di¡}q|S)NrÌZ__EXECMANY_INDEX__)rrÚrÈ)r?Ú    formattedrþ)rÙrßržr¢Úapply_placeholders$s   ÿþzISQLCompiler._deliver_insertmanyvalues_batches.<locals>.apply_placeholdersz, _IMV_VALUES_COUNTERrQr¯c3s |]\}}}}ˆ||ƒVqdSrÝrž)r r°r]Ú    bind_keys)r^ržr¢r2s
ÿz@SQLCompiler._deliver_insertmanyvalues_batches.<locals>.<genexpr>c3s,|]$\}}}}|D]}ˆ ||¡VqqdSrÝr)r r°r_rþ)rÙržr¢r7s
þcsi|]}|ˆd|“qS)rržrýrüržr¢rî<sÿzASQLCompiler._deliver_insertmanyvalues_batches.<locals>.<dictcomp>z, _IMV_VALUES_COUNTER), z), råcsh|]\}}|ˆkr|’qSržrž)r r•rÌ)Úall_names_we_will_expandržr¢r£Ysþz@SQLCompiler._deliver_insertmanyvalues_batches.<locals>.<setcomp>z\d+rrØcSsg|]\}}}|||f‘qSržrž)r Znew_keyÚlen_rTržržr¢rssÿzASQLCompiler._deliver_insertmanyvalues_batches.<locals>.<listcomp>c3s2|]*}ˆD] \}}}|›d|›||fVq
qdS)r°Nrž)r r8rþrarT)r\ržr¢rusþržc3s|]}|ˆˆ…VqdSrÝržrì)Úexpand_pos_lower_indexÚexpand_pos_upper_indexržr¢r‡sÿc3s"|]\}}ˆ dt|ƒ¡VqdS)Ú_IMV_VALUES_COUNTERN)rÚrŸ©r r_r°)Úexecutemany_values_w_commaržr¢rŽs
ýÿéþÿÿÿc3s|]}ˆj›|›VqdSrÝrp©r r_rÿržr¢r«sÿZEXECMANY_INDEX__rdcs i|]}|›dˆ›ˆ|“qS)Ú__ržrý)r_Úparamržr¢rîÍs ),rÕrjr&rrcÚsupports_default_metavalueÚsupports_multivalues_insertrUrrr^rrrrÚZinsertmanyvalues_max_parametersrÄr
Úminr ròrÙr“rr~rµrrtrúrÆrÏrärårÊrÚranger rr1r2Ú from_iterablerÒrŸr)*rßrõrör\rr rBZ    lenparamsZuse_row_at_a_timeZ
downgradedrZexecutemany_valuesZ
max_paramsZtotal_num_of_paramsZnum_params_per_batchZnum_params_outside_of_batchZbatchesrrr
Zall_keysZimv_values_counterZformatted_values_clauseZkeys_to_replaceZbase_parametersrþrúZall_expand_positionsÚescapedrZnum_ins_paramsZextra_params_leftZextra_params_rightZbatch_iteratorZexpanded_values_stringrCrrrrrZreplaced_values_clausesZfmvrž) r`r^rÙrfrbrcr\r_rjrörßr¢Ú!_deliver_insertmanyvalues_batches½sz  ÿþýýÿ ÷  
 
ÿÿýÿ 
þýþ
þ ÿ
 
þ ÿÿ ÿ 
 
þþ
 þüÿù
 
ÿþ
 
 þÿ
ÿÿþÿÿ
ÿþ÷ z-SQLCompiler._deliver_insertmanyvalues_batchesc  s°|j|ˆf|Ž}|j}ˆj }|r@dˆ_ˆjs4|ˆ_ˆjs@|ˆ_ˆj tƒtƒ|dœ¡d}d}ˆjrvd|k}|svg}t    j
ˆ|||fd|i|—Ž}ˆjrÎ|dk    rÎt |ƒ}ˆj rΈj dk    rȈj |7_ n|ˆ_ |j}    |    s
ˆjjs
ˆjjs
ˆjjs
t dˆjj¡‚|jrZˆjjs0t dˆjj¡‚n"ˆjs@|jrR|jrRt d¡‚|j}    n|j}    ˆj}
ˆjj} d    } |jr| ˆj||jf|Ž7} | d
7} |
 |j¡} |j r¼ˆ !|| ¡\}} |j"rЈ #||¡| | 7} |    sä| s| d d  $d d„|    Dƒ¡7} |j%}d}d}d}ˆjp|j}|r|j&}|dk    râ|s@t'‚dd„|    Dƒ}g}|D]F}||krnd}qžˆ (|¡}|||krd}qž| |¡qV|dkr҈jj)t*j+@r¾d}n|dj,rÒt'dƒ‚t-|ƒt-|ƒ}ˆj.|||d}ˆj/r | d|7} nd}|j0dk    rŠˆj1ˆjddfddi|—Ž}ˆj2rzˆjj3rz|sZt ˆjƒnd}| dˆj4|dd|f7} n | d|7} n–|    sä| rä| d7} |r t5dˆjj6t7d|    ƒ||j|j8dk    ||rÔt |ƒnd|d    ˆ_9n<|jr| dd  $dd „|j:Dƒ¡f7} nd  $d!d„t7d|    ƒDƒ¡}|r|r¾ˆjj)t*j;@r¾|j<s¾d}ˆjj)t*j=@}d  $d"d „t>|    ƒDƒ¡}|rœd  $‡fd#d „t>|    ƒDƒ¡}n|}| d$|›d%|›d&|›d'7} nd}| d(|›d)7} t5d|t7d|    ƒ||j|j8dk    ||rþt |ƒnd|||d* ˆ_9n| d(|›d)7} |j8dk    rNˆj1|j8f|Ž}|rN| d|7} |rhˆj/sh| d|7} ˆj2r ˆjj3s |sŠt ˆjƒnd}ˆj4|dd| } ˆj ?d¡| S)+NTrærrØrÎzWThe '%s' dialect with current database version settings does not support empty inserts.zcThe '%s' dialect with current database version settings does not support in-place multirow inserts.zcRETURNING cannot be determinstically sorted when using an INSERT which includes multi-row values().zINSERT zINTO ú (%s)r¯cSsg|]\}}}}|‘qSržrž)r r°rlržržr¢rVs
z,SQLCompiler.visit_insert.<locals>.<listcomp>FcSsi|]\}}}}||“qSržrž)r rŸr°Z param_namesržržr¢rîps
ÿz,SQLCompiler.visit_insert.<locals>.<dictcomp>zTsentinel selection rules should have prevented us from getting here for this dialect©rñr¸r    ròr+z %s%sr4röz DEFAULT VALUESr    )r rrrrz
 VALUES %scss&|]}dd dd„|Dƒ¡VqdS)rr¯css|]\}}}}|VqdSrÝrž©r r°r;ržržr¢rÚs
z5SQLCompiler.visit_insert.<locals>.<genexpr>.<genexpr>Nr)r Zcrud_param_setržržr¢rØsþÿz+SQLCompiler.visit_insert.<locals>.<genexpr>cSsg|]\}}}}|‘qSržržrtržržr¢ràs
ÿcss|]\}}d|›VqdS©ÚpNržreržržr¢rsc3s6|].\}^}}ˆ |j|j ˆj¡d|›¡VqdSru)rqrÐrSrc)r r_rŸr°rÿržr¢r s 
û ýz SELECT z FROM (VALUES (z)) AS imp_sen(z#, sen_counter) ORDER BY sen_counterz     VALUES (r³) rrr
r r rrrrrr)@r6rõrFr½r\rìrr“ròrÚ_get_crud_paramsr&rÏrÛÚ single_paramsrcÚsupports_default_valuesrkZsupports_empty_insertr6rKrÌZ_has_multi_parametersrlrÁÚ
_returningZ_sort_by_parameter_orderrZrçræÚ format_tabler•r&rWrêrër~Úuse_insertmanyvaluesZuse_sentinel_columnsrjrrXrr'Z_insert_sentinelr rNrÅr‘rkrÞZcte_follows_insertrírZdefault_metavalue_tokenrZ_post_values_clauserÕZall_multi_paramsr)Zis_default_metavalue_onlyr*r^r<) rßZ insert_stmtrÎr}rìrïZcounted_bindparamZhas_visiting_cteÚcrud_params_structZcrud_params_singlerZryrÜrUr°r|Znamed_sentinel_paramsZadd_sentinel_colsrrHZ_params_by_colZ_add_sentinel_colÚ
param_namerNZ select_textrèrZembed_sentinel_valueZrender_bind_castsZcolnamesZcolnames_w_castZpost_values_clauseržrÿr¢Ú visit_insertâsþÿÿýÿüûú    
ÿþýüþÿ
þÿÿÿþÿÿÿ    ÿ
 
    þ
ÿ
ÿÿÿý  ÿÿÿþû
 ÿÿ ï 
ýÿ þþÿ
ÿÿýøÿÿ
ÿú
    ÿ    þÿ ì
 ÿÿ  þüÿ zSQLCompiler.visit_insertcCsdS)z3Provide a hook for MySQL to add LIMIT to the UPDATENrž)rßÚ update_stmtržržr¢Úupdate_limit_clauseUszSQLCompiler.update_limit_clausecKsd|d<|j|fddi|—ŽS)z|Provide a hook to override the initial table clause
        in an UPDATE statement.
 
        MySQL overrides this.
 
        Tr rór„)rßr€Ú
from_tableÚ extra_fromsr}ržržr¢Úupdate_tables_clauseYsz SQLCompiler.update_tables_clausecKs tdƒ‚dS)z~Provide a hook to override the generation of an
        UPDATE..FROM clause.
 
        MySQL and MSSQL override this.
 
        zCThis backend does not support multiple-table criteria within UPDATENr©rßr€r‚rƒÚ
from_hintsr}ržržr¢Úupdate_from_clausecs    ÿzSQLCompiler.update_from_clausec sÜ|j||f|Ž}|j}|j }|r@d|_|js4||_|js@||_|jt@rltit    ƒƒ}|jt
@}|rt||_ nd}d}|j }t |ƒ}|r²t    t|jƒƒ‰‡fdd„|Dƒ}    ˆ |¡}
n g}    |jh}
|j |
|
|dœ¡d} |jrò| |j||jf|Ž7} |j||j|    fd|i|—Ž} tj||||f|Ž} | j}|jrB| || ¡\}} nd}|jrZ| ||¡| | 7} | d7} | d     d
d „td |ƒDƒ¡7} |js˜|jrÂ|j rÂ| d |j!||jp¶|j|d7} |rø|j"||j|    |fd|i|—Ž}|rø| d |7} |j#r*|j$|j#fd|i|—Ž}|r*| d|7} | %|¡}|rF| d |7} |jsV|jr€|j s€| d |j!||jpt|j|d7} |j&r¬|s˜t'|jƒnd}|j(|d| } |rÌ|dk    sÀt)‚|j*dd|j +d¡| S)NTFcsg|]}|ˆkr|‘qSržržr1©Z
main_fromsržr¢rsz,SQLCompiler.visit_update.<locals>.<listcomp>ræzUPDATE rvz SET r¯css"|]\}}}}|d|VqdS)ú=Nrž)r r°rlr;ržržr¢r¿s
ÿz+SQLCompiler.visit_update.<locals>.<genexpr>zList[Tuple[Any, str, str, Any]]r¸rsú WHERE rçZUPDATE©rKr    ),r6rõrFr¾r\rìrêr1r4r“r2rvÚ _extra_fromsrír)r•r˜rrçrær„rrwrxr&rWrêrër~rrÁrzrÅrNr‡r6rrrÞr&rírjrLr<)rßr€r}rìrïrvr:rƒZ is_multitableZrender_extra_fromsrérÜrUr}Z crud_paramsrVÚextra_from_textr;rArèržrˆr¢Ú visit_updateqsÿÿ
 
 
ÿ ýÿÿÿýüûÿÿÿ
  ÿþ
 ý
üûú ÿÿÿ 
 ÿÿþ ý
  zSQLCompiler.visit_updatecKs tdƒ‚dS)zÀProvide a hook to override the generation of an
        DELETE..FROM clause.
 
        This can be used to implement DELETE..USING for example.
 
        MySQL and MSSQL override this.
 
        zCThis backend does not support multiple-table criteria within DELETENrr…ržržr¢Údelete_extra_from_clauseús ÿz$SQLCompiler.delete_extra_from_clausecKs|j|fdddœ|—ŽS)NT)r rór„)rßÚ delete_stmtr‚rƒr}ržržr¢Údelete_table_clause
sÿÿÿzSQLCompiler.delete_table_clausecKs |j||f|Ž}|j}|j }|r@d|_|js4||_|js@||_|jt@rltit    ƒƒ}|jt
@}|rt||_ nd}d}|j }|j h |¡}|j |||dœ¡d}    |jr¼|    |j||jf|Ž7}    |    d7}    z|j||j ||d}
Wn<tk
r| ||j |¡}
|r|j|j |d} YnXtj||||f|Ž|jrH| ||
¡\} }
nd} |jr`| ||¡|    |
7}    |jsx|jr¢|jr¢|    d|j||jp–|j|d7}    |rØ|j||j || fd    |i|—Ž} | rØ|    d| 7}    |j r
|j!|j fd    |i|—Ž}|r
|    d
|7}    |js|jrD|jsD|    d|j||jp8|j|d7}    |j"rp|s\t#|jƒnd}|j$|d |    }    |r|dk    s„t%‚|j&d d |j 'd¡|    S)NTFræzDELETE úFROM )rvr¸rsrvrŠrçÚDELETEr‹r    )(r6rõrFr¼r\rìrêr1r4r“r2rvrŒr•r˜rrçrær‘Ú    TypeErrorrkrrwr&rWrêrërÁrzrÅrNrr6rrÞr&rírjrLr<)rßrr}rìrïrvr:rƒrérÜrUr°rVrr;rèržržr¢Ú visit_deletesèÿÿ
 
ýÿÿÿü
ÿÿ
 ÿÿþ ý
üûú ÿÿÿ ÿÿþ ý
  zSQLCompiler.visit_deletecKsd|j |¡S)Nz SAVEPOINT %s©rZÚformat_savepoint©rßZsavepoint_stmtr}ržržr¢Úvisit_savepoint‰szSQLCompiler.visit_savepointcKsd|j |¡S)NzROLLBACK TO SAVEPOINT %sr–r˜ržržr¢Úvisit_rollback_to_savepointŒsÿz'SQLCompiler.visit_rollback_to_savepointcKsd|j |¡S)NzRELEASE SAVEPOINT %sr–r˜ržržr¢Úvisit_release_savepoint‘sÿz#SQLCompiler.visit_release_savepoint)NT)NNTNTF)F)F)F)F)NFFNrž)NTržN)N)NF)N)FN)Nrž)N)NFNN)F)FFFFF)FFNNNN)FFFNFFNN)F)FN)N)NNNTFFT)F)FFNNNFN)NF)NFF)FFFNTNN)FN)N)ùrÒrÓrÔrÕÚ EXTRACT_MAPr#r%r”r¹rÖr‘ÚCOMPOUND_KEYWORDSr7r¼r½r¾r¿rÀrÁrÂrÅrÆrÇrËrÌrÍrÎrÏrÐrÑrÓrÔrÕrÖÚ    frozensetr×rØr“rÙr¶Zpostfetch_lastrowidrÚrúrÛrÜrÝrärærvr5Úpatternr r•rorãr0rnrrZro_memoized_propertyrrr r Úmemoized_propertyrZmemoized_instancemethodrÚ
contextlibÚcontextmanagerrrýrür@rCrDrrErrYr‹rþÚpreload_moduler}rr”r›rœr¡r¢r­r¯r¸r»r¼rÊrÎrÐrÑrÕrÝrÃråròrörúrürrr
rrrrrrrr r"r&r)r'r1r/r.r>r<r rGrLrMrPrRrVrXr_r]rorrrTrzr{r|r}r~rWrErFrƒr„r‹rŽr‘r”r–r—r˜r™ršr›rœrrˆrrr“r¤r¥r¨r©rªr»rqr-rqr[r´r²rËrÞrër#Z_CTEOptsrârñròrðrúrïrürrrrêrìr
rrørrrrršrrérrr/r'r%r*rærír@r(r9r:r9rNrAr@rSrTrWr+Z
CLIENTSIDErr(ZSENTINEL_DEFAULTÚNONEr%r&rZr˜r$rYr[rqrrr„r‡rŽrr‘r•r™ršr›ržržržr¢r«s
øÿþ
+         
                õ
 
 
ÿ
 
    ù
 
"
 
ES
ýù
&
ýH
 P *     ÿ
0ÿ
0ù
1ú; ÿ
5    ý.ÿ
A    ÿ
'    
        ÿL Tú3     ÿ                                          ù% ü!  ø*E ø0L  öc   '   ÿó%      ÿÿ
÷N 4 _ ý5    ! û,÷0 òÿþÿ>&'u 
 
  z  r«cs eZdZdZdd„Ze d¡‡fdd„ƒZdd„Zd    d
„Z    d d „Z
d d„Z ddddddœdd„Z dd„Z dd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Z‡ZS)%ÚStrSQLCompilera“A :class:`.SQLCompiler` subclass which allows a small selection
    of non-standard SQL features to render into a string value.
 
    The :class:`.StrSQLCompiler` is invoked whenever a Core expression
    element is directly stringified without calling upon the
    :meth:`_expression.ClauseElement.compile` method.
    It can render a limited set
    of non-standard SQL constructs to assist in basic stringification,
    however for more substantial custom or dialect-specific SQL constructs,
    it will be necessary to make use of
    :meth:`_expression.ClauseElement.compile`
    directly.
 
    .. seealso::
 
        :ref:`faq_sql_expression_string`
 
    cCsdS)Nz<name unknown>ržrºržržr¢r»«sz$StrSQLCompiler._fallback_column_namezsqlalchemy.engine.urlc sT|jdkrFtjj}|j |j¡ ¡ƒ}| |d¡}t|t    ƒsF| 
|¡St ƒ  ||¡S)Nrn) Zstringify_dialectr%r{Z
engine_urlÚURLriÚ get_dialectÚstatement_compilerrir¥rkrpr~)rßr{r|r}ÚurlrcÚcompilerrtržr¢r~®s
 
 
z,StrSQLCompiler.visit_unsupported_compilationcKs$d|j|jf|Ž|j|jf|ŽfS)Nz%s[%s])rkr€rrKržržr¢Úvisit_getitem_binaryºsþz#StrSQLCompiler.visit_getitem_binarycKs|j||f|ŽSrÝ©r«rKržržr¢Úvisit_json_getitem_op_binaryÀsz+StrSQLCompiler.visit_json_getitem_op_binarycKs|j||f|ŽSrÝr¬rKržržr¢Ú!visit_json_path_getitem_op_binaryÃsz0StrSQLCompiler.visit_json_path_getitem_op_binarycKsd|j |¡S)Nz<next sequence value: %s>)rZÚformat_sequence)rßÚseqr}ržržr¢r/ÆszStrSQLCompiler.visit_sequencerArFrírrŸrGc s&‡fdd„t |¡Dƒ}dd |¡S)Nc    sg|]}ˆ d|ddi¡‘qS)NTFrrrÿržr¢rÑsÿz3StrSQLCompiler.returning_clause.<locals>.<listcomp>rKr¯)rrLr~rMržrÿr¢rNÉs
þzStrSQLCompiler.returning_clausec s(dˆd<dd ‡‡‡fdd„|Dƒ¡S)NTr r’r¯c3s$|]}|jˆfdˆiˆ—ŽVqdS©r×Nr„©r r;©r†r}rßržr¢rÛsÿz4StrSQLCompiler.update_from_clause.<locals>.<genexpr>rr…ržr³r¢r‡×sþz!StrSQLCompiler.update_from_clausec s(dˆd<dd ‡‡‡fdd„|Dƒ¡S)NTr r¯c3s$|]}|jˆfdˆiˆ—ŽVqdSr±r„r²r³ržr¢räsÿz:StrSQLCompiler.delete_extra_from_clause.<locals>.<genexpr>rr…ržr³r¢ràsþz'StrSQLCompiler.delete_extra_from_clausecKsdS)NzSELECT 1 WHERE 1!=1ržr™ržržr¢r]ész#StrSQLCompiler.visit_empty_set_exprcCsd|S)Nz[%s]ržrržržr¢rìsz!StrSQLCompiler.get_from_hint_textcKs|j|df|ŽS)Nz
 <regexp> ©rWrKržržr¢r¨ïsz+StrSQLCompiler.visit_regexp_match_op_binarycKs|j|df|ŽS)Nz <not regexp> r´rKržržr¢r©òsz/StrSQLCompiler.visit_not_regexp_match_op_binarycKs:|jd}d|jj|f|Ž|jj|f|Ž|j|f|ŽfS)NÚ replacementz<regexp replace>(%s, %s, %s))r r€r…r)rßrdr‚r}rµržržr¢rªõs 
 ýz-StrSQLCompiler.visit_regexp_replace_op_binary)rÒrÓrÔrÕr»r%r£r~r«r­r®r/rNr‡rr]rr¨r©rªr–ržržrtr¢r¥—s          r¥c@s¨eZdZdZer(dgddddddœd    d
„Zejd d „ƒZejd d„ƒZ    dhdddddœdd„Z
dd„Z dd„Z dd„Z dd„Zdidd „Zdjd!d"„Zd#d$„Zd%d&„Zd'd(„Zdkd)d*„Zd+d,„Zdld-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Zd=d>„Zdmd?d@„ZdAdB„Z dCdD„Z!dEdF„Z"dGdH„Z#dIdJ„Z$dKdL„Z%dMdN„Z&dOdP„Z'dQdR„Z(dSdT„Z)dUdV„Z*dWdX„Z+dYdZ„Z,d[d\„Z-d]d^„Z.d_d`„Z/dadb„Z0dcdd„Z1dedf„Z2dS)nÚ DDLCompilerT.r\r?rVrírarbcCsdSrÝržrmržržr¢rnszDDLCompiler.__init__cCs|jj|jd|jdS)N©rW)rcr¨rWrÿržržr¢r s
ÿzDDLCompiler.sql_compilercCs|jjSrÝ)rcrÓrÿržržr¢Ú type_compilerszDDLCompiler.type_compilerNr‡rˆr‰rŠcCsdSrÝržrŽržržr¢rszDDLCompiler.construct_paramscKsš|j}t|jtjƒrˆ| ¡}|j}| |j¡}t|ƒdkrJ|dd}}n|d|d}}|     d|¡|     d|¡|     d| 
|j¡¡|j   |j |¡S)NrrrQr    r•r"rQ)ÚcontextriÚtargetr"rIrÒrZÚformat_table_seqr&rr{rrÝrõ)rßÚddlrƒr¹rZÚpathr•Zschržržr¢Ú    visit_ddls    zDDLCompiler.visit_ddlcKs$d}|jr|d7}||j |j¡S)NzCREATE SCHEMA úIF NOT EXISTS )Ú if_not_existsrZÚ format_schemar{)rßrir}rÜržržr¢Úvisit_create_schema2szDDLCompiler.visit_create_schemacKs6d}|jr|d7}||j |j¡7}|jr2|d7}|S)Nz DROP SCHEMA ú
IF EXISTS ú CASCADE)Ú    if_existsrZrÁr{Úcascade©rßÚdropr}rÜržržr¢Úvisit_drop_schema8szDDLCompiler.visit_drop_schemac KsV|j}|j}d}|jr*|d |j¡d7}|d7}|jr@|d7}|| |¡d7}| |¡}|rl||d7}|d7}d}d}|jD]–}    |    j}
zD|j|    |
j    ož| d} | dk    rÄ||7}d    }|d
| 7}|
j    rÎd }Wq‚t
j k
r} z$t
  d |j |
j | jd f¡| ‚W5d} ~ XYq‚Xq‚|j||jd} | r@||d
| 7}|d| |¡7}|S)Nz
CREATE r¸zTABLE r¿r²Ú
F©Úfirst_pkr=ú    Tz (in table '%s', column '%s'): %sr)Ú _include_foreign_key_constraintsz
)%s
 
)r{rZrçr~rÀr{Úcreate_table_suffixrrkr‘r6rKÚ descriptionrÌÚargsÚcreate_table_constraintsZinclude_foreign_key_constraintsÚpost_create_table)rßrir}r•rZrÜrÏrrÌZ create_columnrgÚ    processedZceÚconstržržr¢Úvisit_create_tableAsX
 
 
ÿ ÿÿýþzDDLCompiler.visit_create_tableFc sL|j}|jrdSˆj||d}d ‡fdd„|jDƒ¡}|rH|d|7}|S)NrËr¸c3s|]}ˆ |¡VqdSrÝ)rk©r rhrÿržr¢r|sz2DDLCompiler.visit_create_column.<locals>.<genexpr>)r{ÚsystemÚget_column_specificationr~Ú constraints)rßrirÌr}rgrÜrÕržrÿr¢Úvisit_create_columnusÿ zDDLCompiler.visit_create_columnc stg}ˆjr| ˆj¡ˆj}|dk    r0| |¡‰ntƒ‰| ‡‡fdd„ˆjDƒ¡d dd„‡fdd„|DƒDƒ¡S)Ncs"g|]}|ˆjk    r|ˆkr|‘qSrž)r‘r)Ú    omit_fkcsr•ržr¢r•s
þz8DDLCompiler.create_table_constraints.<locals>.<listcomp>z, 
    css|]}|dk    r|VqdSrÝrž)r rvržržr¢rœs    öz7DDLCompiler.create_table_constraints.<locals>.<genexpr>c3s6|].}| ˆ¡rˆjjr$t|ddƒsˆ |¡VqdS)Z    use_alterFN)Z_should_create_for_compilerrcZsupports_alterr,rkr×rÿržr¢ržs
 
 û)r‘rZforeign_key_constraintsrr“ruZ_sorted_constraintsr~)rßr•rÎr}rÚZall_fkcsrž)rÜrßr•r¢rÒ„s"   þÿ
 
þþz$DDLCompiler.create_table_constraintscKs$d}|jr|d7}||j |j¡S)Nz
DROP TABLE rÃ)rÅrZr{r{rÇržržr¢Úvisit_drop_tableªszDDLCompiler.visit_drop_tablecKsd|j |j¡S)Nz
DROP VIEW ©rZr{r{©rßrÈr}ržržr¢Úvisit_drop_view°szDDLCompiler.visit_drop_viewcCs|jdkrt d|j¡‚dS)Nz,Index '%s' is not associated with any table.)r•r6rKrÌ©rßr8ržržr¢Ú_verify_index_table³s
ÿzDDLCompiler._verify_index_tablec     s”|j}ˆ |¡ˆj}d}|jr(|d7}|jdkr<t d¡‚|d7}|jrR|d7}|dˆj||d|j    |j
|dd      ‡fd
d „|j Dƒ¡f7}|S) NzCREATE zUNIQUE z0CREATE INDEX requires that the index have a namezINDEX r¿z %s ON %s (%s)©Úinclude_schema©rRr¯c3s |]}ˆjj|dddVqdS)FT©r¾r¬N)rrk)r rlrÿržr¢rÐs ýÿz1DDLCompiler.visit_create_index.<locals>.<genexpr>) r{rârZr™rÌr6rKrÀÚ_prepared_index_namer{r•r~Z expressions)rßriräZinclude_table_schemar}r8rZrÜržrÿr¢Úvisit_create_index¹s0
 
ÿ ÿüû zDDLCompiler.visit_create_indexcKs>|j}|jdkrt d¡‚d}|jr,|d7}||j|ddS)Nz.DROP INDEX requires that the index have a namez
DROP INDEX rÃTrã)r{rÌr6rKrÅrç)rßrÈr}r8rÜržržr¢Úvisit_drop_indexÙs
ÿzDDLCompiler.visit_drop_indexcCsX|jdk    r|j |j¡}nd}|r4|r4|j |¡}nd}|j |¡}|rT|d|}|S©Nrµ)r•rZrÅrÆÚ format_index)rßr8rärÉZ schema_nameZ
index_nameržržr¢rçæs
  z DDLCompiler._prepared_index_namecKs d|j |jj¡| |j¡fS)NzALTER TABLE %s ADD %s)rZr{r{r•rk©rßrir}ržržr¢Úvisit_add_constraintös
þz DDLCompiler.visit_add_constraintcKs(d|j |j¡|j |jjt ¡¡fS)NzCOMMENT ON TABLE %s IS %s)rZr{r{rr[Úcommentr$ÚStringrìržržr¢Úvisit_set_table_commentüs ÿþz#DDLCompiler.visit_set_table_commentcKsd|j |j¡S)NzCOMMENT ON TABLE %s IS NULLrÞrßržržr¢Úvisit_drop_table_commentsÿz$DDLCompiler.visit_drop_table_commentcKs.d|jj|jddd|j |jjt ¡¡fS)NzCOMMENT ON COLUMN %s IS %sT)Ú    use_tablerR)rZÚ format_columnr{rr[rîr$rïrìržržr¢Úvisit_set_column_comment    sÿÿüz$DDLCompiler.visit_set_column_commentcKsd|jj|jddS)NzCOMMENT ON COLUMN %s IS NULLT)rò)rZrór{rßržržr¢Úvisit_drop_column_commentsÿz%DDLCompiler.visit_drop_column_commentcKst |t|ƒ¡‚dSrÝrxrìržržr¢Úvisit_set_constraint_commentsz(DDLCompiler.visit_set_constraint_commentcKst |t|ƒ¡‚dSrÝrxrßržržr¢Úvisit_drop_constraint_commentsz)DDLCompiler.visit_drop_constraint_commentcCsôg}|jdk    r| d|j¡|jdk    r8| d|j¡|jdk    rR| d|j¡|jdk    rl| d|j¡|jdk    r€| d¡|jdk    r”| d¡|jdk    r®| d|j¡|jdk    rÌ| |jrÆdnd    ¡|j    dk    rê| |j    räd
nd ¡d  
|¡S) NzINCREMENT BY %dz START WITH %dz MINVALUE %dz MAXVALUE %dz NO MINVALUEz NO MAXVALUEzCACHE %drzNO ORDERZCYCLEzNO CYCLEr¸) Ú    incrementrrCZminvalueZmaxvalueZ
nominvalueZ
nomaxvalueÚcacherÚcycler~)rßZidentity_optionsrÜržržr¢Úget_identity_optionss(
 
 
 
 
 
 
 
 
 
 
z DDLCompiler.get_identity_optionscKsPd}|jr|d7}||j |j¡7}|r0||7}| |j¡}|rL|d|7}|S)NzCREATE SEQUENCE r¿r¸)rÀrZr¯r{rû)rßrir<r}rÜÚoptionsržržr¢Úvisit_create_sequence4s  z!DDLCompiler.visit_create_sequencecKs$d}|jr|d7}||j |j¡S)NzDROP SEQUENCE rÃ)rÅrZr¯r{rÇržržr¢Úvisit_drop_sequenceAszDDLCompiler.visit_drop_sequencecKsj|j}|jdk    r|j |¡}nd}|dkr:t d|j¡‚d|j |jj¡|jrTdnd||j    rbdndfS)Nz<Can't emit DROP CONSTRAINT for constraint %r; it has no namez%ALTER TABLE %s DROP CONSTRAINT %s%s%srÃrQrÄ)
r{rÌrZÚformat_constraintr6rKr{r•rÅrÆ)rßrÈr}rhÚformatted_nameržržr¢Úvisit_drop_constraintGs 
ÿÿ  üz!DDLCompiler.visit_drop_constraintcKs¦|j |¡d|jjj|j|d}| |¡}|dk    rB|d|7}|jdk    r`|d| |j¡7}|jdk    r†|jj    r†|d| |j¡7}|j
s¢|jrš|jj    s¢|d7}|S)Nr¸)rÒz     DEFAULT z     NOT NULL) rZrórcrÓrkrÐÚget_column_default_stringZcomputedÚidentityZsupports_identity_columnsZnullable)rßrgrƒZcolspecrnržržr¢rÙZs4
ÿÿþÿ
 
ÿþÿÿz$DDLCompiler.get_column_specificationcCsdS©NrQrž©rßr•ržržr¢rÏuszDDLCompiler.create_table_suffixcCsdSrržrržržr¢rÓxszDDLCompiler.post_create_tablecCs$t|jtjƒr| |jj¡SdSdSrÝ)riZserver_defaultr"Z DefaultClauseÚrender_default_stringÚargrºržržr¢r{sz%DDLCompiler.get_column_default_stringcCs.t|tƒr|j |tj¡S|jj|ddSdS)NT)r¬)rirŸrr[r$r‚rk)rßrnržržr¢rs 
ÿz!DDLCompiler.render_default_stringcKs|jr| |¡S| |¡SdSrÝ)Zis_column_levelÚvisit_column_check_constraintÚvisit_check_constraint)rßrhr}ržržr¢Ú&visit_table_or_column_check_constraint‰s
z2DDLCompiler.visit_table_or_column_check_constraintcKs\d}|jdk    r.|j |¡}|dk    r.|d|7}|d|jj|jddd7}|| |¡7}|S©NrQúCONSTRAINT %s z
CHECK (%s)FTræ©rÌrZrÿrrkr¼Údefine_constraint_deferrability©rßrhr}rÜrržržr¢r    s
 
ÿ
z"DDLCompiler.visit_check_constraintcKs\d}|jdk    r.|j |¡}|dk    r.|d|7}|d|jj|jddd7}|| |¡7}|Sr r rržržr¢r›s
 
ÿ
z)DDLCompiler.visit_column_check_constraintc s†t|ƒdkrdSd}|jdk    r>ˆj |¡}|dk    r>|d|7}|d7}|dd ‡fdd„|jrd|jn|jDƒ¡7}|ˆ |¡7}|S)    NrrQr z PRIMARY KEY rr¯c3s|]}ˆj |j¡VqdSrÝ©rZrÄrÌrrÿržr¢r°sÿz;DDLCompiler.visit_primary_key_constraint.<locals>.<genexpr>)    r&rÌrZrÿr~Z_implicit_generatedZcolumns_autoinc_firstrrrržrÿr¢Úvisit_primary_key_constraint§s 
  ÿû z(DDLCompiler.visit_primary_key_constraintc     s¼|j‰d}|jdk    r4|j |¡}|dk    r4|d|7}t|jƒdjj}|dd ‡fdd„|jDƒ¡| ||ˆ¡d ‡fdd„|jDƒ¡f7}||     |¡7}|| 
|¡7}||  |¡7}|S)    NrQr rz"FOREIGN KEY(%s) REFERENCES %s (%s)r¯c3s|]}ˆ |jj¡VqdSrÝ)rÄÚparentrÌr1©rZržr¢rÄsz;DDLCompiler.visit_foreign_key_constraint.<locals>.<genexpr>c3s|]}ˆ |jj¡VqdSrÝ)rÄrgrÌr1rržr¢rÊs) rZrÌrÿr rrgr•r~Údefine_constraint_remote_tableÚdefine_constraint_matchÚdefine_constraint_cascadesr)rßrhr}rÜrZ remote_tableržrr¢Úvisit_foreign_key_constraint»s0
  ÿÿÿù z(DDLCompiler.visit_foreign_key_constraintcCs
| |¡S)z=Format the remote table clause of a CREATE CONSTRAINT clause.)r{)rßrhr•rZržržr¢rÓsz*DDLCompiler.define_constraint_remote_tablec spt|ƒdkrdSd}|jdk    r>ˆj |¡}|dk    r>|d|7}|dd ‡fdd„|Dƒ¡7}|ˆ |¡7}|S)NrrQr z UNIQUE (%s)r¯c3s|]}ˆj |j¡VqdSrÝrrrÿržr¢rász6DDLCompiler.visit_unique_constraint.<locals>.<genexpr>)r&rÌrZrÿr~rrržrÿr¢Úvisit_unique_constraintØs 
  ÿz#DDLCompiler.visit_unique_constraintcCsLd}|jdk    r&|d|j |jt¡7}|jdk    rH|d|j |jt¡7}|S)NrQz  ON DELETE %sz  ON UPDATE %s)ZondeleterZÚvalidate_sql_phraseÚ FK_ON_DELETEZonupdateÚ FK_ON_UPDATE©rßrhrÜržržr¢ræs
 
ÿ
 
ÿz&DDLCompiler.define_constraint_cascadescCsLd}|jdk    r&|jr|d7}n|d7}|jdk    rH|d|j |jt¡7}|S)NrQz  DEFERRABLEz NOT DEFERRABLEz  INITIALLY %s)ror{rZrÚ FK_INITIALLYrržržr¢ròs
 
 
 
ÿz+DDLCompiler.define_constraint_deferrabilitycCs d}|jdk    r|d|j7}|S)NrQz     MATCH %s)r³rržržr¢rÿs
z#DDLCompiler.define_constraint_matchcKsBd|jj|jddd}|jdkr,|d7}n|jdkr>|d7}|S)NzGENERATED ALWAYS AS (%s)FTræz STOREDz VIRTUAL)rrkr¼Z    persisted)rßÚ    generatedr}rÜržržr¢Úvisit_computed_columnsÿ
 
 
z!DDLCompiler.visit_computed_columncKs2d|jr dndf}| |¡}|r.|d|7}|S)NzGENERATED %s AS IDENTITYZALWAYSz
BY DEFAULTrr)Úalwaysrû)rßrr}rÜrüržržr¢Úvisit_identity_columns ÿ
 z!DDLCompiler.visit_identity_column)...)NNT)F)N)FT)F)N)3rÒrÓrÔr’rrnr%r rr¸rr¾rÂrÉrÖrÛrÒrÝràrârèrérçrírðrñrôrõrör÷rûrýrþrrÙrÏrÓrrr
r    rrrrrrrrrr!ržržržr¢r¶þsrú
 
 
ü    4
ÿ
&ÿ
 
 
 
 
r¶c@s~eZdZdd„Zdd„Zdd„Zdd„Zd    d
„Zd d „Zd d„Z    dd„Z
dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zd^d d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Zd8d9„Zd:d;„Zd<d=„Z d>d?„Z!d@dA„Z"dBdC„Z#dDdE„Z$dFdG„Z%dHdI„Z&dJdK„Z'dLdM„Z(dNdO„Z)dPdQ„Z*dRdS„Z+dTdU„Z,dVdW„Z-dXdY„Z.dZd[„Z/d\d]„Z0dS)_ÚGenericTypeCompilercKsdS)NÚFLOATržr™ržržr¢Ú visit_FLOATszGenericTypeCompiler.visit_FLOATcKsdS)NÚDOUBLEržr™ržržr¢Ú visit_DOUBLEsz GenericTypeCompiler.visit_DOUBLEcKsdS)NzDOUBLE PRECISIONržr™ržržr¢Úvisit_DOUBLE_PRECISION sz*GenericTypeCompiler.visit_DOUBLE_PRECISIONcKsdS)NZREALržr™ržržr¢Ú
visit_REAL#szGenericTypeCompiler.visit_REALcKs<|jdkrdS|jdkr&dd|jiSd|j|jdœSdS)NZNUMERICzNUMERIC(%(precision)s)Ú    precisionz!NUMERIC(%(precision)s, %(scale)s)©r)Zscaler*r™ržržr¢Ú visit_NUMERIC&s
 
þz!GenericTypeCompiler.visit_NUMERICcKs<|jdkrdS|jdkr&dd|jiSd|j|jdœSdS)NZDECIMALzDECIMAL(%(precision)s)r)z!DECIMAL(%(precision)s, %(scale)s)r*r*r™ržržr¢Ú visit_DECIMAL1s
 
þz!GenericTypeCompiler.visit_DECIMALcKsdS)NZINTEGERržr™ržržr¢Ú visit_INTEGER<sz!GenericTypeCompiler.visit_INTEGERcKsdS)NZSMALLINTržr™ržržr¢Úvisit_SMALLINT?sz"GenericTypeCompiler.visit_SMALLINTcKsdS)NZBIGINTržr™ržržr¢Ú visit_BIGINTBsz GenericTypeCompiler.visit_BIGINTcKsdS)NÚ    TIMESTAMPržr™ržržr¢Úvisit_TIMESTAMPEsz#GenericTypeCompiler.visit_TIMESTAMPcKsdS)NZDATETIMEržr™ržržr¢Úvisit_DATETIMEHsz"GenericTypeCompiler.visit_DATETIMEcKsdS)NZDATEržr™ržržr¢Ú
visit_DATEKszGenericTypeCompiler.visit_DATEcKsdS)NZTIMEržr™ržržr¢Ú
visit_TIMENszGenericTypeCompiler.visit_TIMEcKsdS)NZCLOBržr™ržržr¢Ú
visit_CLOBQszGenericTypeCompiler.visit_CLOBcKsdS)NZNCLOBržr™ržržr¢Ú visit_NCLOBTszGenericTypeCompiler.visit_NCLOBNcCsB|}|r|d|7}n|jr*|d|j7}|jr>|d|j7}|S)Nú(%d)z  COLLATE "%s")ÚlengthrÌ)rßrÛrÌÚlength_overriderÜržržr¢Ú_render_string_typeWsz'GenericTypeCompiler._render_string_typecKs | |d¡S)NÚCHAR©r:r™ržržr¢Ú
visit_CHARbszGenericTypeCompiler.visit_CHARcKs | |d¡S)NZNCHARr<r™ržržr¢Ú visit_NCHAReszGenericTypeCompiler.visit_NCHARcKs | |d¡S)NZVARCHARr<r™ržržr¢Ú visit_VARCHARhsz!GenericTypeCompiler.visit_VARCHARcKs | |d¡S)NZNVARCHARr<r™ržržr¢Úvisit_NVARCHARksz"GenericTypeCompiler.visit_NVARCHARcKs | |d¡S)NZTEXTr<r™ržržr¢Ú
visit_TEXTnszGenericTypeCompiler.visit_TEXTcKsdS)NZBLOBržr™ržržr¢Ú
visit_BLOBqszGenericTypeCompiler.visit_BLOBcKsd|jrd|jpdS)NÚBINARYr7rQ©r8r™ržržr¢Ú visit_BINARYtsz GenericTypeCompiler.visit_BINARYcKsd|jrd|jpdS)NZ    VARBINARYr7rQrDr™ržržr¢Úvisit_VARBINARYwsz#GenericTypeCompiler.visit_VARBINARYcKsdS)NÚBOOLEANržr™ržržr¢Ú visit_BOOLEANzsz!GenericTypeCompiler.visit_BOOLEANcKs|j|dddS)Nr;é )r9r<r™ržržr¢Ú
visit_uuid}szGenericTypeCompiler.visit_uuidcKs|j|f|ŽSrÝ)rBr™ržržr¢Úvisit_large_binary€sz&GenericTypeCompiler.visit_large_binarycKs|j|f|ŽSrÝ)rHr™ržržr¢Ú visit_booleanƒsz!GenericTypeCompiler.visit_booleancKs|j|f|ŽSrÝ)r4r™ržržr¢Ú
visit_time†szGenericTypeCompiler.visit_timecKs|j|f|ŽSrÝ)r2r™ržržr¢Úvisit_datetime‰sz"GenericTypeCompiler.visit_datetimecKs|j|f|ŽSrÝ)r3r™ržržr¢Ú
visit_dateŒszGenericTypeCompiler.visit_datecKs|j|f|ŽSrÝ)r/r™ržržr¢Úvisit_big_integersz%GenericTypeCompiler.visit_big_integercKs|j|f|ŽSrÝ)r.r™ržržr¢Úvisit_small_integer’sz'GenericTypeCompiler.visit_small_integercKs|j|f|ŽSrÝ)r-r™ržržr¢Ú visit_integer•sz!GenericTypeCompiler.visit_integercKs|j|f|ŽSrÝ)r(r™ržržr¢Ú
visit_real˜szGenericTypeCompiler.visit_realcKs|j|f|ŽSrÝ)r$r™ržržr¢Ú visit_float›szGenericTypeCompiler.visit_floatcKs|j|f|ŽSrÝ)r&r™ržržr¢Ú visit_doubležsz GenericTypeCompiler.visit_doublecKs|j|f|ŽSrÝ)r+r™ržržr¢Ú visit_numeric¡sz!GenericTypeCompiler.visit_numericcKs|j|f|ŽSrÝ©r?r™ržržr¢Ú visit_string¤sz GenericTypeCompiler.visit_stringcKs|j|f|ŽSrÝrWr™ržržr¢Ú visit_unicode§sz!GenericTypeCompiler.visit_unicodecKs|j|f|ŽSrÝ©rAr™ržržr¢Ú
visit_textªszGenericTypeCompiler.visit_textcKs|j|f|ŽSrÝrZr™ržržr¢Úvisit_unicode_text­sz&GenericTypeCompiler.visit_unicode_textcKs|j|f|ŽSrÝrWr™ržržr¢Ú
visit_enum°szGenericTypeCompiler.visit_enumcKst d|¡‚dS)NzKCan't generate DDL for %r; did you forget to specify a type on this Column?r¹r™ržržr¢rö³s
þÿzGenericTypeCompiler.visit_nullcKs|j| |j¡f|ŽSrÝ)rkZ type_enginercr™ržržr¢Úvisit_type_decoratorºsz(GenericTypeCompiler.visit_type_decoratorcKs |jf|ŽSrÝ)Ú get_col_specr™ržržr¢Úvisit_user_defined½sz&GenericTypeCompiler.visit_user_defined)N)1rÒrÓrÔr$r&r'r(r+r,r-r.r/r1r2r3r4r5r6r:r=r>r?r@rArBrErFrHrJrKrLrMrNrOrPrQrRrSrTrUrVrXrYr[r\r]rör^r`ržržržr¢r"s\  
r"c@s4eZdZdd„Zdd„Zdd„Zdd„Zd    d
„Zd S) ÚStrSQLTypeCompilercKs>z
|j}Wn"tk
r,|j|f|ŽYSX||f|ŽSdSrÝ)r…ÚAttributeErrorÚ_visit_unknown)rßrÛr}r…ržržr¢rkÂs
 
zStrSQLTypeCompiler.processcCs| d¡r|jSt|ƒ‚dS)NZvisit_)rôrcrb)rßrþržržr¢Ú __getattr__Ês
zStrSQLTypeCompiler.__getattr__cKs(|jj|jj ¡kr|jjSt|ƒSdSrÝ)rurÒÚupperÚreprr™ržržr¢rcÐsz!StrSQLTypeCompiler._visit_unknowncKsdSróržr™ržržr¢röÖszStrSQLTypeCompiler.visit_nullcKs6z
|j}Wntk
r&t|ƒYSX|f|ŽSdSrÝ)r_rbrf)rßrÛr}r_ržržr¢r`Ùs
 
z%StrSQLTypeCompiler.visit_user_definedN)rÒrÓrÔrkrdrcrör`ržržržr¢raÁs
rac@seZdZdddœdd„ZdS)Ú_SchemaForObjectCallablerrŸ)r‚rÜcCsdSrÝrž)rßr‚ržržr¢ràãsz!_SchemaForObjectCallable.__call__Nráržržržr¢rgâsrgc@seZdZdddœdd„ZdS)r~r½rŸ)rŸrÜcCsdSrÝrž)rßrŸržržr¢ràèsz _BindNameForColProtocol.__call__Nráržržržr¢r~çsr~c@sœeZdZUdZeZeZeZ    de
d<de
d<de
d<e   d¡Z de
d    <dQdd„Zdd„Zdd„Zdddœdd„Zdddœdd„Zdd„Zdddœdd„Zdddœdd„Zd d!„ZdRdd"dd#œd$d%„ZdSdd"dd&œd'd(„Zd)d*„ZdTd+d,„ZdUd-d.dd/œd0d1„ZdVd2d.dd3œd4d5„ZdWd6d7„Ze d8¡dXd9d:„ƒZ dYd;d<„Z!dZd=d>„Z"d?d@„Z#dAdB„Z$d[dCdD„Z%dEdF„Z&d\dGdH„Z'd]dIdJ„Z(d^dKdL„Z)ej*dMdN„ƒZ+dOdP„Z,d S)_rYz@Handle quoting and case-folding of identifiers based on options.rŸÚ initial_quoteÚ final_quotezMutableMapping[str, str]Ú_stringsr"rgrÅrINTFcCsN||_||_|p|j|_||_|jd|_||_||_i|_|jjdk|_    dS)asConstruct a new ``IdentifierPreparer`` object.
 
        initial_quote
          Character that begins a delimited identifier.
 
        final_quote
          Character that ends a delimited identifier. Defaults to
          `initial_quote`.
 
        omit_schema
          Prevent prepending schema name. Useful for databases that do
          not support schemae.
        r5)r©r§N)
rcrhriÚ escape_quoteÚescape_to_quoteÚ omit_schemaÚquote_case_sensitive_collationsrjrórÙ)rßrcrhrirkrnrmržržr¢rns  zIdentifierPreparer.__init__cs2|j |j¡}|j |j¡‡fdd„}||_|S)NcsX|j}|ˆkrN|jrN|dk    r:d|ks,d|kr:t d|¡‚td|pDdddS|jSdS)Nr¶r·zJSquare bracket characters ([]) not supported in schema translate name '%s'z __[SCHEMA_%s]Ú_noneF©rÄ)r"Z_use_schema_mapr6rKr/)r‚rÌr·ržr¢Ú symbol_getter/sÿÿ
ÿz@IdentifierPreparer._with_schema_translate.<locals>.symbol_getter)ruÚ__new__Ú__dict__rtrÅ)rßrWÚpreprqržr·r¢rg+s
 z)IdentifierPreparer._with_schema_translatecs4|‰dˆkrˆdˆd<‡‡fdd„}t d||¡S)Nrocs6| d¡}ˆ|}|s,ˆjj}|s,t d¡‚ˆ |¡S)Nr5zLDialect has no default schema name; can't use None as dynamic schema target.)ryrcZdefault_schema_namer6rKrÆ)rrÌrÉ©Údrßržr¢rÚEs
ÿz=IdentifierPreparer._render_schema_translates.<locals>.replacez(__\[SCHEMA_([^\]]+)\]))rär)rßrõrWrÚržrur¢rl@s
  z,IdentifierPreparer._render_schema_translates)r;rÜcCs&| |j|j¡}|jr"| dd¡}|S)z€Escape an identifier.
 
        Subclasses should override this to provide database-dependent
        escaping behavior.
        r±r×)rÚrkrlrÙ©rßr;ržržr¢Ú_escape_identifierTs z%IdentifierPreparer._escape_identifiercCs| |j|j¡S)z±Canonicalize an escaped identifier.
 
        Subclasses should override this to provide database-dependent
        unescaping behavior that reverses _escape_identifier.
        )rÚrlrkrwržržr¢Ú_unescape_identifier`sz'IdentifierPreparer._unescape_identifiercCs*|dk    r&| |¡s&t d||jf¡‚|S)zýkeyword sequence filter.
 
        a filter for elements that are intended to represent keyword sequences,
        such as "INITIALLY", "INITIALLY DEFERRED", etc.   no special characters
        should be present.
 
        .. versionadded:: 1.3
 
        Nz/Unexpected SQL phrase: %r (matching against %r))r³r6rKrŸ)rßr{rçržržr¢ris ÿÿz&IdentifierPreparer.validate_sql_phrasecCs|j| |¡|jS)z~Quote an identifier.
 
        Subclasses should override this to provide database-dependent
        quoting behavior.
        )rhrxrirwržržr¢Úquote_identifier{s ÿþÿz#IdentifierPreparer.quote_identifierrícCs:| ¡}||jkp8|d|jkp8|j t|ƒ¡ p8||kS)z5Return True if the given identifier requires quoting.r)r-Úreserved_wordsÚillegal_initial_charactersÚlegal_charactersr³rŸ)rßr;Zlc_valueržržr¢réˆs
 ÿþüz#IdentifierPreparer._requires_quotescCs|j t|ƒ¡ S)zjReturn True if the given identifier requires quoting, but
        not taking case convention into account.)r}r³rŸrwržržr¢r*’sz1IdentifierPreparer._requires_quotes_illegal_charsr)r"ÚforcerÜcCs |dk    rtjddd| |¡S)aConditionally quote a schema name.
 
 
        The name is quoted if it is a reserved word, contains quote-necessary
        characters, or is an instance of :class:`.quoted_name` which includes
        ``quote`` set to ``True``.
 
        Subclasses can override this to provide database-dependent
        quoting behavior for schema names.
 
        :param schema: string schema name
        :param force: unused
 
            .. deprecated:: 0.9
 
                The :paramref:`.IdentifierPreparer.quote_schema.force`
                parameter is deprecated and will be removed in a future
                release.  This flag has no effect on the behavior of the
                :meth:`.IdentifierPreparer.quote` method; please refer to
                :class:`.quoted_name`.
 
        NzÚThe IdentifierPreparer.quote_schema.force parameter is deprecated and will be removed in a future release.  This flag has no effect on the behavior of the IdentifierPreparer.quote method; please refer to quoted_name().ú0.9rA)r%rCrÄ)rßr"r~ržržr¢rÆ—s ù
zIdentifierPreparer.quote_schema)rÝr~rÜcCs†|dk    rtjdddt|ddƒ}|dkrp||jkr>|j|S| |¡rZ| |¡|j|<n
||j|<|j|Sn|r~| |¡S|SdS)aConditionally quote an identifier.
 
        The identifier is quoted if it is a reserved word, contains
        quote-necessary characters, or is an instance of
        :class:`.quoted_name` which includes ``quote`` set to ``True``.
 
        Subclasses can override this to provide database-dependent
        quoting behavior for identifier names.
 
        :param ident: string identifier
        :param force: unused
 
            .. deprecated:: 0.9
 
                The :paramref:`.IdentifierPreparer.quote.force`
                parameter is deprecated and will be removed in a future
                release.  This flag has no effect on the behavior of the
                :meth:`.IdentifierPreparer.quote` method; please refer to
                :class:`.quoted_name`.
 
        NzÓThe IdentifierPreparer.quote.force parameter is deprecated and will be removed in a future release.  This flag has no effect on the behavior of the IdentifierPreparer.quote method; please refer to quoted_name().rrArÄ)r%rCr,rjrérz)rßrÝr~ržržr¢rľs ù
 
 
 
 
 
zIdentifierPreparer.quotecCs|jr| |¡S|SdSrÝ)rnrÄ)rßZcollation_nameržržr¢rËòs
z#IdentifierPreparer.format_collationcCs>| |j¡}| |¡}|js:|r:|dk    r:| |¡d|}|Srê)rÄrÌrÅrmrÆ)rßr0rRrÌrÉržržr¢r¯øs 
ÿþýz"IdentifierPreparer.format_sequencez
Label[Any]rÒ)rœrÌrÜcCs| |p |j¡SrÝ)rÄrÌ)rßrœrÌržržr¢rµszIdentifierPreparer.format_labelzOptional[AliasedReturnsRows])rÀrÌrÜcCs.|dkr |dk    st‚| |j¡S| |¡SdSrÝ)rjrÄrÌ)rßrÀrÌržržr¢rä
s  zIdentifierPreparer.format_aliascCs"|p|j}| |¡r| |¡}|SrÝ)rÝrérz)rßZ    savepointrÌrÝržržr¢r—s
 
 
z#IdentifierPreparer.format_savepointzsqlalchemy.sql.namingcCs^tjj}|jtkr.| ||j¡}|dkr4dSn|j}|jdkrL|j||dS|j    ||dSdS)Nr8)Ú_alembic_quote)
r%r{Z
sql_namingrÌr*Z_constraint_name_for_tabler•r¦Útruncate_and_render_index_nameÚ#truncate_and_render_constraint_name)rßrhr€ZnamingrÌržržr¢rÿs$
ÿ
ÿÿz$IdentifierPreparer.format_constraintcCs|jjp|jj}| |||¡SrÝ)rcZmax_index_name_lengthrøÚ _truncate_and_render_maxlen_name©rßrÌr€Úmax_ržržr¢r3sþÿz1IdentifierPreparer.truncate_and_render_index_namecCs|jjp|jj}| |||¡SrÝ)rcZmax_constraint_name_lengthrørƒr„ržržr¢r‚?sþÿz6IdentifierPreparer.truncate_and_render_constraint_namecCsbt|tjƒr@t|ƒ|krL|d|d…dt |¡dd…}n |j |¡|sT|S| |¡SdS)Nrr!r°éüÿÿÿ)    rirrCr&r%Zmd5_hexrcZvalidate_identifierrÄ)rßrÌr…r€ržržr¢rƒKs  ( z3IdentifierPreparer._truncate_and_render_maxlen_namecCs
| |¡SrÝ)rÿráržržr¢rëWszIdentifierPreparer.format_indexcCsF|dkr|j}| |¡}| |¡}|jsB|rB|rB| |¡d|}|S)z'Prepare a quoted table and schema name.Nrµ)rÌrÄrÅrmrÆ)rßr•rRrÌr“rÉržržr¢r{Zs
 
zIdentifierPreparer.format_tablecCs
| |¡S)zPrepare a quoted schema name.rprÊržržr¢rÁhsz IdentifierPreparer.format_schemacCs(|dk    rt|tjƒr| |¡}| |¡S)úPrepare a quoted column name.N)rirrCrÅrÄ)rßrÌrùržržr¢rÜms 
ÿ
z$IdentifierPreparer.format_label_namecCsŽ|dkr|j}|dk    r,t|tjƒr,| |¡}t|ddƒsh|r\|j|j||dd| |¡S| |¡Sn"|r†|j|j||dd|S|SdS)r‡NrÁF)rRrÌrµ)    rÌrirrCrÅr,r{r•rÄ)rßrgròrÌZ
table_namerRrùržržr¢ró{s@ 
ÿ
 ÿýüÿ ÿýüÿz IdentifierPreparer.format_columncCsD| |¡}|js0|r0|r0| |¡|j|ddfS|j|ddfSdS)z(Format table name and schema as a tuple.FråN)rÅrmrÆr{)rßr•rRrÉržržr¢r»¨s 
 þz#IdentifierPreparer.format_table_seqcCs@dd„|j|j| |j¡fDƒ\}}}t d|||dœ¡}|S)Ncss|]}t |¡VqdSrÝ)rärårýržržr¢r»sÿz4IdentifierPreparer._r_identifiers.<locals>.<genexpr>zM(?:(?:%(initial)s((?:%(escaped)s|[^%(final)s])+)%(final)s|([^\.]+))(?=\.|$))+)ÚinitialÚfinalrp)rhrirxräræ)rßrˆr‰Z escaped_finalÚrržržr¢Ú_r_identifiers¹s
ýþ 
ýÿz!IdentifierPreparer._r_identifierscs(ˆj}‡fdd„dd„| |¡DƒDƒS)z:Unpack 'schema.table.column'-like strings into components.csg|]}ˆ |¡‘qSrž)ryrhrÿržr¢rÏsÿz;IdentifierPreparer.unformat_identifiers.<locals>.<listcomp>cSsg|]\}}|p|‘qSržrž)r Úaríržržr¢rÑs)r‹Úfindall)rßZ identifiersrŠržrÿr¢Úunformat_identifiersËs
þz'IdentifierPreparer.unformat_identifiers)rINrITF)N)N)T)N)N)N)T)T)T)TN)N)FNNFN)T)-rÒrÓrÔrÕÚRESERVED_WORDSr{ÚLEGAL_CHARACTERSr}ÚILLEGAL_INITIAL_CHARACTERSr|rÖr‚Ú
attrgetterrÅrnrgrlrxryrrzrér*rÆrÄrËr¯rµrär—r%r£rÿrr‚rƒrër{rÁrÜrór»r r‹rŽržržržr¢rYìsf
ù
$      
'4
ÿÿ    
     
 
 
ý
ù
-
 
rY)ërÕÚ
__future__rr=Úcollections.abcÚabcrhr¡Úenumrr1r‚räÚtimerršrrrrr    r
r r r rrrrrrrrrrrrrQrrrrrr r!r"r#r$r%rÀÚ_typingr'r(r)r*r+r,r-r.r/r0r1Ztype_apir2Zvisitorsr3r4r6r7Z util.typingr8r9r:Ú
annotationr;r<r=r^r>r¼r?Zdmlr@rArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSZ engine.cursorrTZengine.interfacesrUrVrWrXrYrZr[r\r]rŸZ_FromHintsTyperræÚIrZLEGAL_CHARACTERS_PLUS_SPACErnr˜r‘rrrÚUNICODErärãrõrörÚor_rÏÚmulrÚmodÚnegÚltÚleÚneÚgtÚgeÚeqZis_distinct_fromZis_not_distinct_fromZ    concat_oprUZ not_match_opr\r[rErJr´r½r¾rfÚexistsZ distinct_opÚinvZany_opZall_opZdesc_opZasc_opZnulls_first_opZ nulls_last_opZbitwise_xor_opZ bitwise_or_opZbitwise_and_opZbitwise_not_opZbitwise_lshift_opZbitwise_rshift_opr³r³rjrkrlrmr‚rƒr´rµr’ršZcubeZrollupZ grouping_setsr·rÖrœZ_CompoundSelectKeywordrÇZ    UNION_ALLrÈZ
EXCEPT_ALLrÉZ INTERSECT_ALLrrÊr×rârãrärærçrërôrrrr+r/rr0r1r2r3Ú
namedtupler4rOZ EnsureKWArgr—ZBinaryElementRoleZCompilerColumnElementr›r¨r«r¥r¶r"rargr~rYržržržr¢Ú<module>    sp                                                                                            ¢aÿÿú Ó1òñú
 =sÿ (CMÿÿ&9g)!