zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
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
U
¤ý°d÷Âã5@sRdZddlmZmZmZmZmZmZmZm    Z    ddl
m Z ddl m Z mZddlmZmZddlmZmZmZmZmZmZGdd    „d    ƒZeejejejejejej ej!ej"ej#ej$ej%ej&ej'ej(ej)ej*ej+ej,ej-ej.gƒZ/ej0ej1ej2ej3ej4ej5ej6ej7ej8ej9ej:ej;ej<ej=ej>ej?ej@ejAejBejejejejej ej!ej"ej#ejejCejDejEejFejGejHejIejJejKejLejMejNejOej$ej%ej&ej'ej(ej)ej*ej+ej,ej-ej.d
œ4ZPejFej<ejIejJejKejLejHejMd œZQd d d dddddddddddddddddd dddd d!d"d#d$d%d&d'd(d)œ!ZRd*d+d$dd,d-œZSd.d/d0d1d2d3d4d5œZTGd6d7„d7ƒZUeed8œd9d:„ZVeed8œd;d<„ZWe    ee fed=œd>d?„ZXeeed@œdAdB„ZYedCœdDdE„ZZe[ed8œdFdG„Z\e]ed8œdHdI„Z^e]ed8œdJdK„Z_eed8œdLdM„Z`eaed8œdNdO„Zbeced8œdPdQ„Zdeed8œdRdS„ZeefeedTœdUdV„ZgefefdWœdXdY„ZhGdZd[„d[ƒZid\S)]zExpression Parser.é)ÚAnyÚCallableÚDictÚIterableÚListÚOptionalÚSequenceÚUnioné)ÚDbDoc)Ú
BYTE_TYPESÚget_item_or_attr©ÚMessageÚ mysqlxpb_enum)ÚBuildExprTypesÚBuildScalarTypesÚ MessageTypeÚProtobufMessageCextTypeÚProtobufMessageTypeÚ
StrOrBytesc@steZdZdZdZdZdZdZdZdZ    dZ
d    Z d
Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@d?ZAd@ZBdAZCdBZDdCZEdDZFdEZGdFZHdGZIdHZJdIZKdJZLdKZMdLZNdMZOdNZPdOZQdPZRdQZSdRZTdSZUdTZVdUZWdVZXdWZYdXZZdYZ[dZZ\d[S)\Ú    TokenTypezToken types class.r
éééééééé    é
é é é ééééééééééééééééééé é!é"é#é$é%é&é'é(é)é*é+é,é-é.é/é0é1é2é3é4é5é6é7é8é9é:é;é<é=é>é?é@éAéBéCéDéEéFéGéHéIéJéKéLéMéNéOéPéQéRéSéTéUéVéWéXéYN)]Ú__name__Ú
__module__Ú __qualname__Ú__doc__ÚNOTÚANDÚORÚXORÚISÚLPARENÚRPARENÚ
LSQBRACKETÚ
RSQBRACKETÚBETWEENÚTRUEÚNULLÚFALSEÚINÚLIKEÚINTERVALÚREGEXPÚESCAPEÚIDENTÚLSTRINGÚLNUMÚDOTÚDOLLARÚCOMMAÚEQÚNEÚGTÚGEÚLTÚLEÚBITANDÚBITORÚBITXORÚLSHIFTÚRSHIFTÚPLUSÚMINUSÚMULÚDIVÚHEXÚBINÚNEGÚBANGÚ MICROSECONDÚSECONDÚMINUTEÚHOURÚDAYÚWEEKÚMONTHÚQUARTERÚYEARÚEROTEMEÚ
DOUBLESTARÚMODÚCOLONÚORORÚANDANDÚLCURLYÚRCURLYÚCASTÚDOTSTARÚ ORDERBY_ASCÚ ORDERBY_DESCÚASÚARROWÚQUOTEÚBINARYÚDATETIMEÚTIMEÚCHARÚDATEÚDECIMALÚSIGNEDÚINTEGERÚUNSIGNEDÚJSONÚSECOND_MICROSECONDÚMINUTE_MICROSECONDÚ MINUTE_SECONDÚHOUR_MICROSECONDÚ HOUR_SECONDÚ HOUR_MINUTEÚDAY_MICROSECONDÚ
DAY_SECONDÚ
DAY_MINUTEÚDAY_HOURÚ
YEAR_MONTHÚOVERLAPS©rÍrÍúBd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\mysqlx/expr.pyr/s´r)4ÚandÚorÚxorÚisÚnotÚlikeÚinÚoverlapsÚregexpÚbetweenÚintervalÚescapeÚcastÚdivÚhexÚbinÚtrueÚfalseÚnullÚsecondÚminuteÚhourÚdayÚweekÚmonthZquarterÚyearÚ microsecondZascÚdescÚasÚbinaryÚdatetimeÚtimeÚcharÚdateÚdecimalÚsignedÚunsignedÚintegerÚjsonZsecond_microsecondZminute_microsecondZ minute_secondZhour_microsecondZ hour_secondZ hour_minuteZday_microsecondZ
day_secondZ
day_minuteZday_hourZ
year_month)rìrÛrïrðrñròrîróú==ú&&rÜú||rÓrÑú^rÒrØrÕrÔú!=ú>ú>=ú<ú<=ú&ú|ú<<ú>>ú+ú-Ú*ú/ú~ú%rÛÚcont_inrÖ)!ú=rörÏrÜrørÐrÓrÑrùrÒrØrÕrÔrúú<>rûrürýrþrÿr÷rrrrrrrrrrÛr    rÖZ    sign_plusZ
sign_minusú!)rrrrÓr Úis_notZ not_betweenZ
not_regexpZnot_likeZnot_inZ not_cont_inZ not_overlaps)rÒrØr×rÔrÕr    rÖc@sBeZdZdZd eeeddœdd„Zedœdd    „Zedœd
d „ZdS) ÚTokenzToken representation class.r
N)Ú
token_typeÚvalueÚlengthÚreturncCs||_||_||_dS©N)rrr)ÚselfrrrrÍrÍrÎÚ__init__#szToken.__init__©rcCs| ¡Sr)Ú__str__©rrÍrÍrÎÚ__repr__(szToken.__repr__cCs2|jtjtjtjfkr*|j›d|j›dS|j›S)Nú(ú))rrr†rˆr‡rrrÍrÍrÎr+sýz Token.__str__)r
)    rprqrrrsÚintÚstrrrrrÍrÍrÍrÎr sr)rrcCs¤tdƒ}t|tƒr|St|tƒr,|jddSt|ttfƒrXtdƒ|d<t|ƒ ¡|d<nHt|t    t
fƒr„tdƒ|d<t |ƒ ¡|d<ntd    ƒ|d<t |ƒ ¡|d
<|S) NúMysqlx.Expr.ExprT)ÚreparseúMysqlx.Expr.Expr.Type.OBJECTÚtypeÚobjectúMysqlx.Expr.Expr.Type.ARRAYÚarrayúMysqlx.Expr.Expr.Type.LITERALÚliteral) rÚ
isinstanceÚ
ExprParserÚexprÚdictr rÚ build_objectÚ get_messageÚlistÚtupleÚ build_arrayÚ build_scalar©rÚmsgrÍrÍrÎÚ
build_expr8s
 
    r3cCs~t|tƒrt|ƒSt|tƒr$t|ƒSt|tƒr6t|ƒSt|tƒrHt|ƒSt|t    ƒrZt
|ƒS|dkrht ƒSt dt |ƒ›ƒ‚dS)NzUnsupported data type: )r'rÚbuild_string_scalarr Úbuild_bytes_scalarÚboolÚbuild_bool_scalarrÚbuild_int_scalarÚfloatÚbuild_double_scalarÚbuild_null_scalarÚ
ValueErrorr!©rrÍrÍrÎr0Js
 
 
 
 
r0)ÚobjrcCsxt|tƒrt|jƒStdƒ}| ¡D]N\}}tdƒ}t|tƒrF| ¡n||d<t|ƒ     ¡|d<|d 
|     ¡g¡q$|S)NúMysqlx.Expr.ObjectúMysqlx.Expr.Object.ObjectFieldÚkeyrÚfld) r'r r+Ú__dict__rÚitemsrÚencoder3r,Úextend)r>r2rArÚpairrÍrÍrÎr+Zs
 
r+)r$rcCs$tdƒ}|d dd„|Dƒ¡|S)NúMysqlx.Expr.ArrayrcSsg|]}t|ƒ ¡‘qSrÍ)r3r,)Ú.0rrÍrÍrÎÚ
<listcomp>iszbuild_array.<locals>.<listcomp>)rrF)r$r2rÍrÍrÎr/gsr/rcCstdƒ}tdƒ|d<|S)NúMysqlx.Datatypes.Scalarz#Mysqlx.Datatypes.Scalar.Type.V_NULLr!r©r2rÍrÍrÎr;ms r;cCs tdƒ}tdƒ|d<||d<|S)NrKz%Mysqlx.Datatypes.Scalar.Type.V_DOUBLEr!Zv_doublerr1rÍrÍrÎr:ss r:cCs tdƒ}tdƒ|d<||d<|S)NrKz#Mysqlx.Datatypes.Scalar.Type.V_SINTr!Z v_signed_intrr1rÍrÍrÎr8zs r8cCs tdƒ}tdƒ|d<||d<|S)NrKz#Mysqlx.Datatypes.Scalar.Type.V_UINTr!Zv_unsigned_intrr1rÍrÍrÎÚbuild_unsigned_int_scalars rMcCs@t|tƒrtt|dƒƒ}tdƒ}tdƒ|d<td|d|d<|S)Nzutf-8rKz%Mysqlx.Datatypes.Scalar.Type.V_STRINGr!zMysqlx.Datatypes.Scalar.Stringr=Zv_string)r'rÚbytesÚ    bytearrayrrr1rÍrÍrÎr4ˆs 
 r4cCs tdƒ}tdƒ|d<||d<|S)NrKz#Mysqlx.Datatypes.Scalar.Type.V_BOOLr!Zv_boolrr1rÍrÍrÎr7‘s r7cCs(tdƒ}tdƒ|d<td|d|d<|S)NrKz%Mysqlx.Datatypes.Scalar.Type.V_OCTETSr!zMysqlx.Datatypes.Scalar.Octetsr=Zv_octetsrr1rÍrÍrÎr5˜s r5cCs tdƒ}tdƒ|d<||d<|S)Nrr%r!r&rr1rÍrÍrÎÚbuild_literal_exprŸs rP)ÚnameÚparamrcCsFtdƒ}t||d<| ¡g|d<tdƒ}tdƒ|d<| ¡|d<|S)NúMysqlx.Expr.OperatorrQrRrúMysqlx.Expr.Expr.Type.OPERATORr!Úoperator)rÚ_UNARY_OPERATORSr,r)rQrRrUr2rÍrÍrÎÚbuild_unary_op¦s   rW)ÚstringrcCs | dd¡S)Nú"z"")Úreplace©rXrÍrÍrÎÚescape_literal°sr\c@seZdZdZd~eeddœdd„Zedœdd    „Zddœd
d „Ze    eed œd d„Z
e    e dœdd„Z de    ee dœdd„Z e    e dœdd„Zddœdd„Ze    ddœdd„Ze    edœdd„Ze    ed œd!d"„Ze    edœd#d$„Ze    ed œd%d&„Ze    e    ed'œd(d)„Ze    edœd*d+„Zeeeefdœd,d-„Zedœd.d/„Zedœd0d1„Zedœd2d3„Zedœd4d5„Z edœd6d7„Z!eeeefdœd8d9„Z"edœd:d;„Z#e dœd<d=„Z$e    ddœd>d?„Z%e dœd@dA„Z&edœdBdC„Z'edœdDdE„Z(edœdFdG„Z)e edHœdIdJ„Z*edœdKdL„Z+edœdMdN„Z,d€ee-edOœdPdQ„Z.e/edœdRdS„ƒZ0edœdTdU„Z1e2e    e3gefedVœdWdX„Z4edœdYdZ„Z5edœd[d\„Z6edœd]d^„Z7edœd_d`„Z8edœdadb„Z9edœdcdd„Z:edœdedf„Z;edœdgdh„Z<edœdidj„Z=edœdkdl„Z>deedmœdndo„Z?d‚eedmœdpdq„Z@edœdrds„ZAeBdœdtdu„ZCeedœdvdw„ZDeeeefdœdxdy„ZEeeeefdœdzd{„ZFeeeefdœd|d}„ZGdS)ƒr(zExpression parser class.TN)rXÚallow_relationalrcCs>||_g|_g|_d|_||_i|_d|_| ¡| ¡dS©Nr)    rXÚtokensÚpath_name_queueÚposÚ_allow_relational_columnsÚplaceholder_name_to_positionÚpositional_placeholder_countÚclean_expressionÚlex)rrXr]rÍrÍrÎr·szExprParser.__init__rcCsd|j›dS)Nz<mysqlx.ExprParser 'z'>r[rrÍrÍrÎrÂszExprParser.__str__cCs¢t|jtƒst|jƒ|_|j d¡|_t|jƒdkrR|jddkrR|jdd…|_d|jdd… ¡krx|jdd…|_d|jdd    … ¡krž|jd    d…|_dS)
zµRemoves the keywords that does not form part of the expression.
 
        Removes the keywords "SELECT" and "WHERE" that does not form part of
        the expression itself.
        ú r
éÿÿÿÿú;NZSELECTrZWHEREr)r'rXrÚreprÚstripÚlenÚupperrrÍrÍrÎreÅs  zExprParser.clean_expression)rArïrcCs$|dt|jƒko"|j|d|kS©Nr
)rlrX)rrArïrÍrÍrÎÚ next_char_isÖszExprParser.next_char_is)rarcCs~|}d}|t|jƒkr^|j| ¡s2|j|dkr^|j|dkrT|dkrPtdƒ‚d}|d7}q|j||…}ttj|t|ƒƒS)NFÚ.Tz"Invalid number. Found multiple '.'r
)rlrXÚisdigitr<rrrˆ)rraÚstartZ    found_dotÚvalrÍrÍrÎÚ
lex_numberÙs ÿ ÿ
zExprParser.lex_numberF)ÚiÚ allow_spacercCsà|}|t|jƒkrJ|j| ¡s@|j|dks@|j| ¡rJ|rJ|d7}q|j||…}z\|t|jƒkr–|j|dkr–| ¡tkr–ttj|t|ƒƒ}ntt    | ¡| ¡t|ƒƒ}Wn&t
k
rÚttj|t|ƒƒ}YnX|S)NÚ_r
r) rlrXÚisalnumÚisspaceÚlowerÚ%_SQL_FUNTION_RESERVED_WORDS_COLLISIONrrr†Ú_RESERVED_WORDSÚKeyError)rrurvrrrsÚtokenrÍrÍrÎÚ    lex_alphaês0 ÿ þ ýý
 ÿ þ
ý zExprParser.lex_alpha)rArcCs|j|}d}|d7}|}|t|jƒkrª|j|}||kr`|dt|jƒkr`|j|d|kr`qª||dfkr˜|dt|jƒkr€qª|d7}||j|7}n||7}|d7}q|t|jƒksÆ|j||krÔtd|›ƒ‚|dkròttj|t|ƒdƒSttj|t|ƒdƒS)NÚr
ú\z'Unterminated quoted string starting at ú`r)rXrlr<rrr†r‡)rrAÚ
quote_charrsrrrïrÍrÍrÎÚlex_quoted_tokens2
 
ÿþý 
zExprParser.lex_quoted_tokencCsêd}d}d}|t|jƒkræ|j|}| ¡r8|d7}q | ¡rN| |¡}n€| ¡s^|dkrn| ||¡}n`|dkr†ttj    |ƒ}nH|dkržttj
|ƒ}n0|dkr¶ttj |ƒ}n|dkrÎttj |ƒ}n|d    krættj |ƒ}nè|d
kr(| |d ¡r|sttjd d ƒ}d}n ttj|ƒ}n¦|dkr`| |d¡rPttjdd ƒ}n ttj|ƒ}nn|dkrzttj|ƒ}nT|dkr”ttj|ƒ}n:|dkr®ttj|ƒ}n |dkrè| |d¡rÖttjdd ƒ}nttjddƒ}næ|dkr | |d¡rttjdd ƒ}n ttj|ƒ}n®|dkr:ttj|ƒ}n”|dkrr| |d¡rbttjdd ƒ}n ttj|ƒ}n\|dkrŒttj|ƒ}nB|dkr¦ttj|ƒ}n(|dkrÀttj|ƒ}n|dkrÚttj|ƒ}nô|dkrôttj |ƒ}nÚ|d krttj!|ƒ}nÀ|d!krF| |d¡r6ttj"d"d ƒ}n ttj#|ƒ}nˆ|d#krº| |d ¡rnttj"d$d ƒ}nH| |d#¡rŒttj$d%d ƒ}n*| |d¡rªttj%d&d ƒ}n ttj&|ƒ}n|d kr| |d ¡râttj'd'd ƒ}n*| |d¡rttj(d(d ƒ}n ttj)|ƒ}nÀ|d)krx| |d¡r6ttj*d*d ƒ}n@|dt|jƒkrj|j|d ¡rj| |¡}n ttj+|ƒ}nV|d+krª|rªttj,|ƒ}|s d}nd}d}n$|d,krÀ| -|¡}nt.d-|›ƒ‚|j/ 0|¡||j17}q dS).NrFr
rwú?ú:Ú{Ú}rrrûz->rTrz**rú$rr
rörÿr÷rùrrørrú[ú]rú,r rúrýr rrþrrürpz.*)ú'rY)rYrr‚zUnknown character at )2rlrXryrqrtÚisalpharrrr¨r«r®r¯r—rorµr˜r©r™ršrŠrªrŒr­r’r”r¬r“ryrzr{r|rr‹rržr•r‘rr–rrŽr±r‰r¶r„r<r_Úappendr)rruZ
arrow_lastZ inside_arrowrïr~rÍrÍrÎrfsÄ
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
(  
  zExprParser.lex)rrc    Csj|jt|jƒkr(td|›d|j›dƒ‚|j|jj|krftd|›d|j›d|j|j›d|j›ƒ‚dS)NúExpected token type z at pos z but no tokens leftz but found type z , on tokens )rarlr_r<r©rrrÍrÍrÎÚassert_cur_tokensÿ&ÿzExprParser.assert_cur_tokencCs| |j|¡Sr©Úpos_token_type_israr‘rÍrÍrÎÚcur_token_type_is™szExprParser.cur_token_type_is)ÚtypesrcGs"|jt|jƒko |j|jj|kSr©rarlr_r©rr–rÍrÍrÎÚcur_token_type_inœszExprParser.cur_token_type_incCs| |jd|¡Srnr“r‘rÍrÍrÎÚnext_token_type_isŸszExprParser.next_token_type_iscGs&|jt|jƒko$|j|jdj|kSrnr—r˜rÍrÍrÎÚnext_token_type_in¢sþzExprParser.next_token_type_in)rarrcCs|t|jƒko|j|j|kSr)rlr_r)rrarrÍrÍrÎr”¨szExprParser.pos_token_type_iscCs*| |¡|j|jj}|jd7_|Srn)r’r_rar)rrrrÍrÍrÎÚ consume_token«s
zExprParser.consume_tokencCsäg}d}| tj¡| tj¡sÆ| ¡ ¡}t|dƒrV|jj    rV|j
  d|jj    ¡d}n8t|dƒsŽd|krŽd|dkrŽ|j
  d|dd¡d}|  |¡| tj ¡rÆ|jd7_|  | ¡ ¡¡q˜| tj¡|rà|j
 ¡|S)z{Parse a paren-bounded expression list for function arguments or IN
        list and return a list of Expr objects.
        FÚ
identifierrTrQr
)rœrryr•rzÚ_exprr,ÚhasattrrrQr`Úinsertrr‹raÚpop)rÚexprsZpath_name_addedÚmsg_exprrÍrÍrÎÚparen_expr_list±s0   ÿþ
ý
 
zExprParser.paren_expr_listcCs`| tj¡tdƒ}| tj¡r<| tj¡|d<| tj¡|j|jj    |d<|jd7_|S)NzMysqlx.Expr.IdentifierÚ schema_namerQr
)
r’rr†rršr‰rœr_rar)rÚidentrÍrÍrÎrÏs   zExprParser.identifiercCsDtdƒ}| ¡|d<| ¡|d<tdƒ}tdƒ|d<| ¡|d<|S)NzMysqlx.Expr.FunctionCallrQrRrzMysqlx.Expr.Expr.Type.FUNC_CALLr!Ú function_call)rrr¤rr,)rr§r£rÍrÍrÎr§Ùs    zExprParser.function_callcCs°| tj¡|j|j}|jtjkr`|j d¡rL|j     d¡rLt
|j›dƒ‚| tj¡|j}n0|jtj kr€| tj ¡|j}nt
d|j›ƒ‚t dƒ}t dƒ|d<||d<|S)Nr‚z* is not a valid JSON/ECMAScript identifierz?Expected token type IDENT or LSTRING in JSON path at token pos úMysqlx.Expr.DocumentPathItemú(Mysqlx.Expr.DocumentPathItem.Type.MEMBERr!r)rœrr‰r_rarr†rÚ
startswithÚendswithr<r‡rr)rr~Ú member_nameÚ doc_path_itemrÍrÍrÎÚdocpath_memberâs*   
ÿ   
ÿÿzExprParser.docpath_membercCs¼| tj¡| tj¡rH| tj¡| tj¡tdƒ}tdƒ|d<|S| tj¡r¨t    | tj¡ƒ}|dkr|t
d|j ›ƒ‚| tj¡tdƒ}tdƒ|d<||d<|St d|j ›ƒ‚dS)    Nr¨z6Mysqlx.Expr.DocumentPathItem.Type.ARRAY_INDEX_ASTERISKr!rz"Array index cannot be negative at z-Mysqlx.Expr.DocumentPathItem.Type.ARRAY_INDEXÚindexzGException token type MUL or LNUM in JSON path array index at token pos ) rœrr{r•r™r|rrrˆrÚ
IndexErrorrar<)rr­rrÍrÍrÎÚdocpath_array_locüs.    ÿ  ÿ
ÿzExprParser.docpath_array_loccCs¸|jstdƒ‚| tj¡r&| tj¡tdƒ}| tj¡rrtdƒ}tdƒ|d<| tj¡|d<|d     | 
¡g¡|d     |  ¡¡|j r˜|j d|d    <td
ƒ}td ƒ|d<||d <|S) Nz-Empty string cannot be used as document fieldúMysqlx.Expr.ColumnIdentifierr¨r©r!rÚ document_pathrrQrúMysqlx.Expr.Expr.Type.IDENTr) r_r<r•rrŠrœrr†rrFr,r³r`)rÚcol_idr­r)rÍrÍrÎÚdocument_fields&   ÿ zExprParser.document_fieldcCsþg}| tj¡r$| | ¡ ¡¡q| tj¡r`| tj¡tdƒ}t    dƒ|d<| | ¡¡q| tj
¡r€| |  ¡ ¡¡q| tj ¡rÀ| tj ¡tdƒ}t    dƒ|d<| | ¡¡qqÀqt |ƒ}|dkrút||ddƒt    dƒkrútd|j›ƒ‚|S)z°Parse a JSON-style document path, like WL#7909, but prefix by @.
        instead of $. We parse this as a string because the protocol doesn't
        support it. (yet)
        r¨z1Mysqlx.Expr.DocumentPathItem.Type.MEMBER_ASTERISKr!z1Mysqlx.Expr.DocumentPathItem.Type.DOUBLE_ASTERISKrr
z!JSON path may not end in '**' at )r•rr‰rr®r,r±rœrrr{r±r©rlr r<ra)rZdoc_pathr­rDrÍrÍrÎr³+s4   ÿ   ÿÿzExprParser.document_pathcCsÂg}| | tj¡¡| tj¡rB| tj¡| | tj¡¡qt|ƒdkr^td|j›ƒ‚|     ¡t
dƒ}t dt|ƒƒD]D}|dkr–|d|d<q||dkr¬|d|d<q||dkr||d|d    <q|d
}| tj ¡rðd }| tj ¡|  ¡|d <nj| tj¡rZd }| tj¡d
}| tj¡r0d }| tj¡| tj ¡|  ¡|d <|rZ| tj¡|r¢t|d ƒdkr¢t
d ƒ}tdƒ|d<d|d<|d  | ¡g¡t
dƒ}tdƒ|d<||d<|S)Nrz Too many parts to identifier at r²rrQr
Z
table_namerr¥FTr³r¨r©r!r€rrr´r)rrœrr†r•r‰rlr<raÚreverserÚrangerŠr³rµr¶rrFr,)rÚpartsrµruZis_docZ    is_quotedr­r£rÍrÍrÎÚcolumn_identifierOsV          ÿ zExprParser.column_identifiercCs6|jt|jƒkrtdƒ‚|j|j}|jd7_|S)NzUnexpected end of token streamr
)rarlr_r<)rr~rÍrÍrÎÚ
next_token€s
 zExprParser.next_tokencCs$| ¡}|j|kr td|›ƒ‚dS)Nr)r»rr<)rrr~rÍrÍrÎÚ expect_token‡s
zExprParser.expect_tokencCs |j|jSr)r_rarrÍrÍrÎÚ
peek_tokenŒszExprParser.peek_tokencCs |j|jj}|jd7_|Srn)r_rar)rrrÍrÍrÎÚconsume_any_tokenszExprParser.consume_any_tokencCsˆtdƒ}|jt|jƒkrX| tj¡sX|d | ¡     ¡g¡| tj
¡sJqX|  tj
¡q|  tj¡tdƒ}t dƒ|d<|     ¡|d<|S)zH
        jsonArray            ::=  "[" [ expr ("," expr)* ] "]"
        rHrrr#r!r$) rrarlr_r•rr|rFržr,r‹rœr)rr2r)rÍrÍrÎÚparse_json_array”sÿ    zExprParser.parse_json_arraycCs¸tdƒ}|jt|jƒkrˆ| tj¡sˆtdƒ}| tj¡|d<| tj    ¡| 
¡  ¡|d<|d  |  ¡g¡| tj ¡szqˆ| tj ¡q| tj¡tdƒ}tdƒ|d<|  ¡|d    <|S)
        jsonDoc              ::=  "{" [jsonKeyValue ("," jsonKeyValue)*] "}"
        jsonKeyValue         ::=  STRING_DQ ":" expr
        r?r@rArrBrr r!r")rrarlr_r•rr¯rœr‡r«ržr,rFr‹r)rr2Úitemr)rÍrÍrÎÚparse_json_doc§s"ÿ     zExprParser.parse_json_doc)r~rcCs¶d}| tj¡r| tj¡}nB| tj¡r8| tj¡}n(|jtjkrPt|jƒ}nt    d|j
›ƒ‚t dƒ}t dƒ|d<||j krŽ|j ||d<n$|j|d<|j|j |<|jd7_|S)Nr€z&Invalid placeholder name at token pos rz!Mysqlx.Expr.Expr.Type.PLACEHOLDERr!Úpositionr
)r•rrˆrœr†rr¨rrdr<rarrrc)rr~Zplace_holder_namer£rÍrÍrÎÚparse_place_holder¿s&     
 
þÿzExprParser.parse_place_holdercCs’tddd}| tj¡|d | ¡ ¡g¡| tj¡tt     
|  ¡¡ƒ}|d t |ƒ ¡g¡| tj ¡td| ¡d}tdƒ|d<|S)    z2cast ::= CAST LPAREN expr AS cast_data_type RPARENrSrÛ©rQrRr©rUrTr!)rrœrryrFržr,r´r5rrEÚcast_data_typerPrzr)rrUZ type_scalarr2rÍrÍrÎrÛÖs     zExprParser.castcCsâ| ¡}|jtjtjtjtjfkrB| ¡}|r<|j›|›S|jS|jtj    krp| d¡}|rj|j›|›S|jS|jtj
tj fkr |  tj ¡rš| tj ¡|jS|jtj tjtjfkr¼|jStd|j›d|j›d|j›dƒ‚dS)acast_data_type ::= ( BINARY dimension? ) |
        ( CHAR dimension? ) |
        ( DATE ) |
        ( DATETIME dimension? ) |
        ( TIME dimension? ) |
        ( DECIMAL dimension? ) |
        ( SIGNED INTEGER? ) |
        ( UNSIGNED INTEGER? ) |
        JSON
        TzUnknown token type z  at position z (rN)r»rrr·rºr¸r¹Úcast_data_type_dimensionrr¼r½r¿r•r¾rœrÀr»r<ra)rr~Ú    dimensionrÍrÍrÎrÆäs2 ü 
  ýÿzExprParser.cast_data_type)rñrcCs¢| tj¡sdSg}| tj¡| | tj¡¡|r`| tj¡r`| tj¡| | tj¡¡| tj¡t|ƒdkrˆd|d›dSd|d›d|d›dS)z*dimension ::= LPAREN LNUM (, LNUM)? RPARENNr
rrrrŒ)    r•rryrœrrˆr‹rzrl)rrñrÈrÍrÍrÎrÇ s    
ÿýz#ExprParser.cast_data_type_dimensioncCs(tdƒ}tdƒ|d<tddd|d<|S)NrrTr!rSrrÄrUrrLrÍrÍrÎÚ star_operators zExprParser.star_operatorcCsb| ¡}|jtjtjfkr$| |¡S|jtjkr8| ¡S|jtjkrL|     ¡S|jtj
kr`|  ¡S|jtj kr„|  ¡}| tj¡|S|jtjtjfkrØ| ¡}|jtjkrÈ|j|j|j|j_| ¡St|j| ¡ƒS|jtjtjtjfkrþt|j| ¡ƒS|jtjkrtt|jƒƒS|jtjkr2tt ƒƒS|jtjkrpd|jkr^tt!t"|jƒƒƒStt#t$|jƒƒƒS|jtj%tj&fkr˜tt'|jtj%kƒƒS|jtj(kr®| )¡S|jtj*krÄ| +¡S|jtj,krF|jd|_| -tj ¡s&| -tj.¡r.| /|jdtj,¡r.| /|jdtj ¡r.| 0¡S|j1s>| )¡S| 2¡St3d|j›d|j›ƒ‚dS)z<Parse an atomic expression and return a protobuf Expr objectrpr
rrzUnknown token type = z&  when expecting atomic expression at N)4r»rrr¨r«rÃr®rÁr{r¿r°rÛryržr¼rzr—r˜r½rˆrr_raÚ atomic_exprrWrtrržr‡rPr4rr;r:r9r8rr~r€r7rŠr¶r™rÉr†ršr‰r”r§rbrºr<)rr~r)ÚpeekrÍrÍrÎrÊ%sl
 
 ÿ 
ÿþýÿ ýÿzExprParser.atomic_expr)r–Ú inner_parserrcCsž|ƒ}|jt|jƒkrš|j|jj|krštdƒ}tdƒ|d<tdƒ}t|j|jj|d<| ¡g|d<|jd7_|d     |ƒ ¡g¡||d<|}q|S)    z}Given a `set' of types and an Expr-returning inner parser function,
        parse a left associate binary operator expressionrrTr!rSrQrRr
rU)
rarlr_rrrÚ
_OPERATORSrr,rF)rr–rÌÚlhsr2rUrÍrÍrÎÚparse_left_assoc_binary_op_expras" z*ExprParser.parse_left_assoc_binary_op_exprcCsè| ¡}| tjtj¡rä| tj¡rä| ¡}tdƒ}|d     | 
¡g¡|j tjkrXdnd|d<|  tj¡|d     |  ¡ 
¡g¡|jtŽsžtd|j›ƒ‚t | ¡ ¡¡}|d     tt|ƒƒ 
¡g¡td|d}td    ƒ|d
<|S) NrSrRZdate_addZdate_subrQz#Expected interval type at position rrÅrTr!)rÊr™rr—r˜ršrƒr»rrFr,rrœÚbit_exprÚ_INTERVAL_UNITSr<rarrEr¾rmrPr5r)rrÎr~rUrÍrÍrÎÚadd_sub_intervalts.ÿ
þÿ 
ÿ  zExprParser.add_sub_intervalcCs| ttjtjtjgƒ|j¡Sr)rÏÚsetrr™ršrªrÒrrÍrÍrÎÚ mul_div_expr‘sþzExprParser.mul_div_exprcCs| ttjtjgƒ|j¡Sr)rÏrÓrr—r˜rÔrrÍrÍrÎÚ add_sub_expr—sÿzExprParser.add_sub_exprcCs| ttjtjgƒ|j¡Sr)rÏrÓrr•r–rÕrrÍrÍrÎÚ
shift_exprœsÿzExprParser.shift_exprcCs| ttjtjtjgƒ|j¡Sr)rÏrÓrr’r“r”rÖrrÍrÍrÎrСsþzExprParser.bit_exprc    Cs*| ttjtjtjtjtjtjgƒ|j    ¡Sr)
rÏrÓrrrŽr‘rrŒrrÐrrÍrÍrÎÚ    comp_expr§súÿ
õzExprParser.comp_exprcCsbg}| ¡}d}| tj¡r,d}| tj¡|jt|jƒkr^| |     ¡¡|j|jj
}| tj ¡r¤| tj ¡| tj¡rŽd}| tj¡| | ¡     ¡¡nj| tj ¡rò| tj ¡| tj ¡rØ| | ¡¡nd}| | ¡     ¡¡n| tj¡r | tj¡| | ¡     ¡¡nî| tj¡rz| tj¡| | ¡     ¡¡| tj¡r| tj¡| | ¡     ¡¡n”| tj¡rÆ| tj¡| | ¡     ¡¡| tj¡| | ¡     ¡¡nH| tj¡rô| tj¡| | ¡     ¡¡n|r
td|j›ƒ‚d}|r^tdƒ}|r*t|n||d<||d<tdƒ}td    ƒ|d
<|     ¡|d <|}|S) NFTr    zUnknown token after NOT as pos rSrQrRrrTr!rU)r×r•rrtrœrarlr_rr,rrxrryrFr¤rÌr‚r…r}rur„r<rÚ    _NEGATIONr)rÚparamsrÎr Zop_namerUr£rÍrÍrÎÚ    ilri_expr¶sd                 zExprParser.ilri_exprcCs| ttjtjgƒ|j¡Sr)rÏrÓrrur­rÚrrÍrÍrÎÚand_exprîsÿzExprParser.and_exprcCs| ttjgƒ|j¡Sr)rÏrÓrrwrÛrrÍrÍrÎÚxor_exprószExprParser.xor_exprcCs| ttjtjgƒ|j¡Sr)rÏrÓrrvr¬rÜrrÍrÍrÎÚor_exprösÿzExprParser.or_expr)rrcCs,|r$g|_d|_i|_d|_| ¡| ¡Sr^)r_rarcrdrfrÝ)rrrÍrÍrÎržûszExprParser._exprcCsd| |¡}|j}| t|jƒdtj¡r0|d7}|t|jƒkr`td|j|jd…›d|j›ƒ‚|S)NrzUnused token types z" found in expression at position: )ržrar”rlr_rr´r<)rrZ
expressionZ used_tokensrÍrÍrÎr)s
ÿzExprParser.exprcCstd| tj¡dS)NzMysqlx.Crud.ColumnrÄ)rrœrr†rrÍrÍrÎÚparse_table_insert_fieldsz#ExprParser.parse_table_insert_fieldcCs
| ¡jSr)rºrrrÍrÍrÎÚparse_table_update_fieldsz#ExprParser.parse_table_update_fieldcCsˆg}|j d¡}| ¡|r„| ¡}| d¡| d¡ks`| d¡| d¡ks`| d¡| d¡krt| ¡›d|›}q$| | ¡¡q|S)NrŒrrrŠr‹r‡rˆ)rXÚsplitr·r¡Úcountrrk)rÚfieldsÚtempÚfieldrÍrÍrÎÚ _table_fieldss ÿþýzExprParser._table_fieldscCs’g}d}| ¡}|jt|jƒkrŽ|s0| tj¡d}td| ¡d}|     tj
¡rn| tj
¡| tj ¡|d<n|t|ƒ|d<|  |  ¡¡q|S)NTFzMysqlx.Crud.Projection)ÚsourceÚalias)rårarlr_rœrr‹rržr•r´r†rr,)rZ project_exprÚfirstrâZ
projectionrÍrÍrÎÚparse_table_select_projection%s   z(ExprParser.parse_table_select_projectioncCsšg}d}|jt|jƒkr–|s(| tj¡d}td| ¡d}| tj    ¡rbt
dƒ|d<| tj    ¡n$| tj ¡r†t
dƒ|d<| tj ¡|  |  ¡¡q|S)NTFzMysqlx.Crud.Order)r)zMysqlx.Crud.Order.Direction.ASCÚ    directionz Mysqlx.Crud.Order.Direction.DESC)rarlr_rœrr‹rržr•r²rr³rr,)rZ order_specsrèÚorderrÍrÍrÎÚparse_order_spec9s      zExprParser.parse_order_speccCsDg}d}|jt|jƒkr@|s(| tj¡d}| | ¡ ¡¡q|S)NTF)    rarlr_rœrr‹rržr,)rZ    expr_listrèrÍrÍrÎÚparse_expr_listLs zExprParser.parse_expr_list)T)F)F)F)F)Hrprqrrrsrr6rrrerrorrtrr„rfr’r•r™ršr›r”rœrr    rrr¤rrr§r®r±r¶r³rºr»r¼r½r¾r¿rÁrÃrÛrÆrrÇÚ staticmethodrÉrÊrrrÏrÒrÔrÕrÖrÐr×rÚrÛrÜrÝržr)rÞrrßrårérìrírÍrÍrÍrÎr(´s€ o þ 
    þ $1'=
þ 8     þ þ þr(N)jrsÚtypingrrrrrrrr    Zdbdocr Zhelpersr r Zprotobufrrr–rrrrrrrrÓrŸr r¡r¢r£r¤r¥r¦r§rÁrÂrÃrÄrÅrÆrÇrÈrÉrÊrËrÑrurvrwrxrtr‚rrÌr„r}rƒr…r°ršr›rœr~r€rr²r³r´r·r¸r¹rºr»r¼r½r¿r¾rÀr|r{rÍrVrØrr3r0r+r/r;r9r:rr8rMr4r6r7rNr5rPrrWr\r(rÍrÍrÍrÎÚ<module>s6(   ^ìÿÌ8ø ß%û    ù