o
    8Di                    @  s  U d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZmZmZmZ d dlmZmZmZ d dlmZ d dlmZmZmZ d d	lmZmZmZ ejrtd d
lm Z m!Z! d dl"m#Z#m$Z$ e%dZ&e%de
j'e
j(Z)e*dZ+ej,e-ej.ej/ej.e- e-f  f Z0e1dZ2de3d< dVddZ4dWddZ5	dXdYd!d"Z6dZd&d'Z7d[d)d*Z8d\d,d-Z9d]d/d0Z:d^d3d4Z;d_d6d7Z<d`dad:d;Z=dbd@dAZ>	dcdddEdFZ?d`dadGdHZ@	dedfdMdNZAdgdOdPZBG dQdR dReCZDG dSdT dTeDdUZEdS )h    )annotationsN)defaultdict)exp)
ErrorLevel
ParseErrorconcat_messagesmerge_errors)apply_index_offsetensure_listseq_get)format_time)Token	Tokenizer	TokenType)
TrieResultin_trienew_trie)ELit)DialectDialectTypeT
TCeilFloorsqlglotz:.*?[a-zA-Z\+\-]zt.Pattern[str]TIME_ZONE_REargst.Listreturnexp.StarMap | exp.VarMapc                 C  s   t | dkr| d jrtj| d dS g }g }tdt | dD ]}|| |  || |d   qtjtj|dditj|ddidS )N   r   this   copyF)keysvalues)lenis_starr   StarMaprangeappendVarMaparray)r   r$   r%   i r.   G/var/www/Datamplify/venv/lib/python3.10/site-packages/sqlglot/parser.pybuild_var_map   s   &r0   exp.Escape | exp.Likec                 C  s>   t jt| dt| dd}t| dkrt j|t| ddS |S )Nr   r   r!   
expressionr"   )r   Liker   r&   Escape)r   liker.   r.   r/   
build_like,   s   $r7   F	expr_typet.Type[exp.Expression]reverse_argsboolLt.Callable[[Parser, t.Optional[exp.Expression]], t.Optional[exp.Expression]]c                   s   d fdd}|S )	NselfParserr!   t.Optional[exp.Expression]r   c                   s,   |   }r||}}| | j ||dS Nr2   )_parse_bitwise_parse_escaper3   r=   r!   r3   r8   r:   r.   r/   _parse_binary_range4   s   
z0binary_range_parser.<locals>._parse_binary_range)r=   r>   r!   r?   r   r?   r.   )r8   r:   rE   r.   rD   r/   binary_range_parser1   s   rF   dialectr   exp.Funcc                 C  sV   t | d}t | d}|r|js||}}tj||dS |jjr%tj|dS tj|dS )Nr   r   r2   r    )r   LOG_BASE_FIRSTr   Logparser_classLOG_DEFAULTS_TO_LNLn)r   rG   r!   r3   r.   r.   r/   build_logarithm?   s   


 rN   exp.Hex | exp.LowerHexc                 C  s(   t | d}|jrtj|dS tj|dS Nr   r    )r   HEX_LOWERCASEr   LowerHexHex)r   rG   argr.   r.   r/   	build_hexL   s   
rU   exp.Lower | exp.Hexc                 C  s0   t | d}t|tjrtj|jdS tj|dS rP   )r   
isinstancer   rS   rR   r!   Lowerr   rT   r.   r.   r/   build_lowerQ      
&rZ   exp.Upper | exp.Hexc                 C  s0   t | d}t|tjrtj|jdS tj|dS rP   )r   rW   r   rS   r!   UpperrY   r.   r.   r/   build_upperW   r[   r^   	t.Type[E] t.Callable[[t.List, Dialect], E]c                   s   d	 fdd}|S )
Nr   r   rG   r   r   r   c                   sL    t | d|t | dd}t| dkr$ tju r$|d| dd   |S )Nr   r   r2   r"   expressions)r   to_json_pathr&   r   JSONExtractset)r   rG   r3   r8   r.   r/   _builder^   s   z.build_extract_json_with_path.<locals>._builder)r   r   rG   r   r   r   r.   )r8   rf   r.   re   r/   build_extract_json_with_path]   s   	rg   exp.Modc                 C  sZ   t | d}t | d}t|tjrtj|dn|}t|tjr$tj|dn|}tj||dS )Nr   r   r    r2   )r   rW   r   BinaryParenMod)r   r!   r3   r.   r.   r/   	build_modj   s
   

rl   Tis_leftc                 C  s$   t jt| dt| dt| d|dS )Nr   r   r"   )r!   r3   fill_patternrm   )r   Padr   r   rm   r.   r.   r/   	build_padu   s   rq   	exp_classbracket_kindr   exp.Expressionc                 C  s0   | |d}| t jkr|jr|d|tjk |S )Nra   bracket_notation)r   ArrayHAS_DISTINCT_ARRAY_CONSTRUCTORSrd   r   	L_BRACKET)rr   r   rs   rG   	array_expr.   r.   r/   build_array_constructor~   s   
r{   default_source_tzt.Optional[str]+t.Union[exp.ConvertTimezone, exp.Anonymous]c                 C  sH   t | dkr|rtj|nd }tj|t| dt| ddS tj| S )Nr"   r   r   )	source_tz	target_tz	timestamp)r&   r   LiteralstringConvertTimezoner   from_arg_list)r   r|   r   r.   r.   r/   build_convert_timezone   s   r   c                 C  s(   t jt| dt| d|rddS ddS )Nr   r   LEADINGTRAILING)r!   r3   position)r   Trimr   rp   r.   r.   r/   
build_trim   s   r   is_nvlt.Optional[bool]is_nullexp.Coalescec                 C  s    t jt| d| dd  ||dS )Nr   r   )r!   ra   r   r   )r   Coalescer   )r   r   r   r.   r.   r/   build_coalesce   s    r   c                 C  s"   t jt| dt| dt| ddS )Nr   r   r"   r!   substrr   )r   StrPositionr   r   r.   r.   r/   build_locate_strposition   s
   r   c                      s   e Zd Z fddZ  ZS )_Parserc                   sB   t  | |||}tdd |jD |_tdd |jD |_|S )Nc                 s      | ]}| d V  qdS  Nsplit.0keyr.   r.   r/   	<genexpr>       z"_Parser.__new__.<locals>.<genexpr>c                 s  r   r   r   r   r.   r.   r/   r      r   )super__new__r   SHOW_PARSERS	SHOW_TRIESET_PARSERSSET_TRIE)clsclsnamebasesattrsklass	__class__r.   r/   r      s   z_Parser.__new__)__name__
__module____qualname__r   __classcell__r.   r.   r   r/   r      s    r   c                   @  sN<  e Zd ZU dZi dd ej D ede	i 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e
ddd ddd ddd dedeejdeejd eejd!ei d"ed#d$d d%d&d d'ed(d)d d*d+d d,d-d d.ed/d0d d1d2d d3d4d d5d6d d7ejjd8d9d d:ejjd;d<d d=d>d ed?d d@d eedAZdBedC< ejejejejejejejej ej!ej"iZ#ej$ej%ej&ej'hZ(ej)ej*ej+ej,ej-ej.he(Z/ej0ej1ej2ej3hZ4ej5ej6hZ7h ej8ej9ej:ej;ej<ej=ej>ej?ej@ejAejBejCejDejEejFejGejHejIejJejKejLejMejNejOejPejQejRejSejTejUejVejWejXejYejZej[ej\ej]ej^ej_ej`ejaejbejcejdejeejfejgejhejiejjejkejlejmejnejoejpejqejrejsejtejuejvejwejxejyejzej{ej|ej}ej~ejejejejejejejejejejejejejejejejejejejejejejejejejejejej%ejejejejejejejejejejejej0e4e/e7Zej@ejAej>ej?ejFejGej<ej=ej:ej;ejyej~ejJejKiZejejejejejejejejiZh ej ejejh ZejejejejejejejejejejejejejejejejhZejejejejejejheţZejejejhZh ejejΒejϒejВejђejҒejӒejԒejՒejPej֒ejגejؒejْejڒejےejǒejܒejݒejޒejߒejejejejejejejejejejejejejejejejejejejejej[ejejejejejejejejejejejejejejej ejejejej.ejejejejejej	ej
ejejejejejejejejejejejejejejejejejẹeee#Zeej' eejejejejejejejej	ejejh
 ZeZ eZ!ej"ej#dDZ$eejh Z%eejh Z&h dEZ'h ejؒejْejejejޒejejej!ejejejejej(ejejʒejej)ej*ej+ejejejej,ej.ejej-ejejejϒejej	ejejkejgejej`ejdejejej.eeZ/ej0ej1iZ2dFedG< ej3ej4iZ5dFedH< ej6ej7iZ8dFedI< ej9ej9ej:ej:ej;ej<iZ=ej>ej>ej?ej?ej@ej@ejAejAiZBejCejDejEejFejGejHiZIejJejKejLejMejNejOejejPiZQejejRejSejTejUejVejWejXiZYi ZZdFedJ< ej^ej_hZ[ej`ejfejdejehe[Z\ej'ej]ej^hZ_ejejej`hZaejej	ejhZbejejcejdejeejejfhZgeh ZidKedL< ejjdMd ejkdNd iZlejmdOejndPd ejodQd ejjdRd ejpdSd ejqdTd ejrdUd ejsdVd iZti ejudWd ejvdXd ejwdYd ejxdZd ejyd[d ejzd\d ej{d]d ej|d^d ej}d_d ej~d`d ejdad ejdbd ejdcd ejddd ejded ejdfd ejdgd ejdhd ejdid ejdjd ejdkd ejdld ejdmd ejdnd ejdod ejdpd ejdqd ejdrd ejdsd ejdtd dudvd iZi ejdwd ejdxd ejdyd ejdzd ejd{d ejd|d ejd}d ejd~d ejdd ejdd ejdd ejdd ejdd ej*dd ejdd ejdd ejdd ejdd ejdd ejdd ejdd ejdd ejdd ejdd ejdd ejdd ejdd ejdd iZejLdd ejdd ejdd ejJdd ejdd ejdd iZejdd ejdd ejdd ejdd ejdd iZejdd ejdd ejdd ejdd iZi eeejdd ejdd ejdd ejdd ejdd ejWdd iZejsdd ejdd ejdd iZejeejejdd ej(eejej)eejejdd ejeejejdd ej+eejejeejddejeejej-eejejeejejdd iZdd dd dd dd dd dd dd dd dd dd d
Zi ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd i ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd ddd i 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 i d d!d d"d#d d$d%d d&d'd d(d)d d*d+d d,d-d d.d/d d0d1d d2d3d d4d5d d6d7d d8d9d d:d;d d<d=d d>d?d d@dAd i dBdCd dDdEd dFdGd dHdId dJdKd dLdMd dNdOd dPdQd dRdSd dTdUd dVdWd dXdYd dZd[d d\d]d d^d_d d`dad dbdcd ddd ded dfd dgd dhd diZdBedj< i dkdld ddmd dndod dʐdpd dqdrd dҐdsd dԐdtd dudvd dАdwd dxdyd dzd{d d|d}d d~dd ddd ddd ddd ddd i ddd ddd d!dd ddd ddd d"dd ddd ddd d0dd ddd ddd ddd ddd ddd ddd ddd ddd ddd iZƐd_ddZǐdd dd dd dd dd dd dd dd dd d	ZȐdd dd dd dd dZh dZʐdd dd dd dd dZejejhZ̐dhZejej9ej4ejfZi dd ejѐҡ D dd ejӐҡ D i dĐdd dƐdd dȐdd dʐdd d̐dd dΐdd dАdd dҐdd dԐdd d֐dd dؐdd dڐdd dܐdd dސdd ddd ddd ddd dd dd dd dd dd dd dd dZi ejՐdd ej֐dd ejאdd ejؐdd ejِdd ejڐdd ejdd ejېdd ejdd ejܐdd ejdd ejdd ejdd ejݐdd ejސdd ejߐdd ejdd ejdd ejd d ejdd iZdd dd dd dd dZi ZdBed< ejxjjYdd iZi Zd	ed
< ejejejhZejejejhZh dZdddZded< ede Zded< ded< ddddede Zded< ddiZded< ede Zded< edd Zded!< d"d#ied$e Zded%< i Zded&< ed'e Zded(< d)d*d+d,d-ed.e Zded/< d0d1d2ed3e Zded4< h d5Zd6dhZh d7Zh d8Zh d9Zej ejhZejejejhZh d:Zeejh ZejhZ	d;d<hZ
ejej ejhZeejejej h Zejejejejej,ejhZejhZejhZee_ ZejejejhZh d=Zh d>Zejejejd?Zh d@Zejej ejhZh dAZh dBZdCd dDd dEd dFd dGd dHd dId dJd dKd dL	Zd(dMhZ ejejfZ!eh Z"dKedN< h dOZ#ej$ejej%fZ&dZ'dPZ(dPZ)dPZ*dPZ+dOZ,dQedR< dZ-dPZ.dPZ/dZ0h dSZ1dZ2dPZ3dPZ4dZ5dPZ6dZ7dPZ8dZ9dZ:dZ;dPZ<dPZ=dTZ>i Z?dUedV< i Z@dUedW< 	O	X	Y	Od`dadadbZAdcdd ZB	OdbdcdidjZC	OdbdddmdnZD	OdbdedqdrZEdfdtduZFdbdgdzd{ZG	OdbdhddZHdiddZIdbdjddZJdkddZKdlddZLdmdnddZMdoddZNdfddZOdpddZPdqdrddZQdsdtddZRduddZSd_ddZTdvddZUdqdwddZVdqdxddZWdyddZXdzddZYdvddZZd{ddZ[dvddZ\d|dĐdńZ]dvdƐdǄZ^d}dʐd˄Z_dbd~dΐdτZ`dqddҐdӄZaddՐdքZbddؐdلZcddېd܄Zdddސd߄Ze	PdqdddZfdddZgdddZhdddZidddZjdddZkdddZldddZmdqdddZndddZodd dZpdqdddZqdddZrdd
dZsdddZt	PddddZu	O	O	OddddZvdddZwdddZxddd Zyd{d!d"Zzdd$d%Z{dd'd(Z|dd*d+Z}dqdd-d.Z~dd0d1Zdd2d3Zdvd4d5Zdvd6d7Zdd8d9Zdd;d<Zdd>d?ZdqddBdCZdqddEdFZddHdIZddKdLZddNdOZddQdRZddTdUZddWdXZddZd[Zdd]d^Zdd`daZdqddcddZ	PdqddfdgZddidjZddldmZddodpZddrdsZddudvZddxdyZdd{d|ZdsdddZd{ddZdqdddZ	P	P			ddddZ	P	P		ddddZdddZdqdddZdddZ	OdbdddZ	dsdddZdddZdddZdddZdvddZdddZdddZdÐddZ	P	P	PdĐdŐddZdƐddZdǐddZdȐddZdɐddZd{dÐdĄZ	PddʐdȐdɄZdvdʐd˄Zdːd͐d΄Z	Pd̐d͐dѐd҄ZdΐdԐdՄZdqdϐdאd؄Z	PdĐdАdܐd݄Z	P	P	O	P	P	P	PdѐdҐdߐdZdӐddZdԐddZdՐddZdsd֐ddZdאddZdqdؐddZdِddZdڐddZdېddZdbdܐd dZdݐddZÐdސddZĐdߐd
dZŐdqdddZƐdqdddZǐdqdddZȐdqdddZɐdvddZʐdqddd Zːdd"d#Z̐dvd$d%Z͐dqdd(d)Zΐdvd*d+Zϐdΐd,d-ZА	Pd̐dd/d0Zѐdd3d4Z	Odbdd7d8ZӐdd:d;Z	O	P	Pddd>d?ZՐdbdd@dAZ֐dldBdCZאdΐdDdEZؐddGdHZِ	PdqddIdJZڐddKdLZېdvdMdNZܐdvdOdPZݐdvdQdRZސdvdSdTZߐdvdUdVZdvdWdXZdbddYdZZdbdd[d\Zdd]d^Zdqdd`daZddcddZddedfZdsddidjZdvdkdlZdvdmdnZdvdodpZdvdqdrZdvdsdtZ	PdddwdxZddzd{Zdd~dZ	ddddZdqdddZdddZdvddZdvddZdddZdvddZdddZdvddZdvddZ	P	O	PddddZ	O	P		PddddZ	O	P		PddddZdddZdddZdvddZ dvddZ	OdbdddZd ddZdddZdvddZdqdddZdbdddZdvddZ	dsdddZ	dddZ
ddĐdńZddǐdȄZddʐd˄Zdd͐d΄ZdvdϐdЄZdvdѐd҄ZdvdӐdԄZd{dՐdքZ	Odbd	dِdڄZdvdېd܄Zd
dސd߄ZdddZdsdddZdddZdvddZdddZ	PddddZdqdddZd_ddZdbdddZdddZdvddZ dvddZ!dvd dZ"dddZ#dddZ$dbdd
dZ%dddZ&	OdbdddZ'dddZ(dddZ)dddZ*dddZ+dddZ,dd d!Z-dd$d%Z.e/j0dd)d*Z1e/j0dd-d*Z1dqd.d*Z1dd0d1Z2dd3d4Z3d d6d7Z4d!d9d:Z5d"d<d=Z6dqd#d@dAZ7d$dCdDZ8d%dGdHZ9d&dJdKZ:d'dMdNZ;dΐdOdPZ<dvdQdRZ=ddSdTZ>ddUdVZ?	Pdqd(dWdXZ@d)dZd[ZAd*d]d^ZB	Pdqd+d`daZC		Od,d-dbdcZDdvdddeZEd.dgdhZFdvdidjZGdvdkdlZH	P	O	Pdd/dndoZIdqd0dqdrZJdqd1dsdtZKdvdudvZLdvdwdxZMdvdydzZNdvd{d|ZOd2d~dZPdvddZQd3ddZRej fd4ddZSd5ddZTdqd6ddZUej dPfd7ddZVdqd8ddZWd{ddZXdqdddZYdvddZZd9ddZ[d:ddZ\d;ddZ]d<ddZ^d=ddZ_dbd>ddZ`d{ddZadvddZbd?ddZcdbd@ddZdd{ddZedAddZfdBddZgdCddZhdDddZidEdÐdĄZjdFdƐdǄZkdGdɐdʄZldHd̐d̈́ZmdIdϐdЄZndJdҐdӄZodKdՐdքZpdLdؐdلZqdvdڐdۄZr	OdbdMdܐd݄ZsdqdNdߐdZtdvddZuddOddZv	dsdPddZwdQddZxdRddZydSddZzdTddZ{dUddZ|dVddZ}d,dd Z~dsddZdsddZdbdiddZdbdiddZdsd	d
ZddddZdWddZdXddZdvddZdYddZdZddZd[ddZdvddZd\d!d"Zd]d$d%Zd^d(d)Zdvd*d+Zd_d-d.Zd`d0d1Zdad3d4Zdbd6d7Zdcd9d:Zddd=d>Z	Odbded?d@Z	OdbdfdEdFZdgdGdHZdgdIdJZdvdKdLZ	dsdhdNdOZdgdPdQZdidSdTZdidUdVZdgdWdXZdgdYdZZdgd[d\Zdid]d^ZdOS (j  r>   a5  
    Parser consumes a list of tokens produced by the Tokenizer and produces a parsed syntax tree.

    Args:
        error_level: The desired error level.
            Default: ErrorLevel.IMMEDIATE
        error_message_context: The amount of context to capture from a query string when displaying
            the error message (in number of characters).
            Default: 100
        max_errors: Maximum number of error messages to include in a raised ParseError.
            This is only relevant if error_level is ErrorLevel.RAISE.
            Default: 3
    c                 C  s   i | ]\}}||j qS r.   )r   )r   namefuncr.   r.   r/   
<dictcomp>       zParser.<dictcomp>)COALESCEIFNULLNVLARRAYc                 C     t j| dS Nru   )r   rw   r   rG   r.   r.   r/   <lambda>       zParser.<lambda>ARRAYAGGc                 C     t jt| d|jd u pd dS Nr   )r!   nulls_excludedr   ArrayAggr   ARRAY_AGG_INCLUDES_NULLSr   r.   r.   r/   r          	ARRAY_AGGc                 C  r   r   r   r   r.   r.   r/   r      r   CHARc                 C  r   r   r   Chrr   r.   r.   r/   r      r   CHRc                 C  r   r   r   r   r.   r.   r/   r      r   COUNTc                 C  s   t jt| d| dd  ddS )Nr   r   T)r!   ra   big_int)r   Countr   r   r.   r.   r/   r      s    CONCATc                 C     t j| |j |jdS N)ra   safecoalesce)r   ConcatSTRICT_STRING_CONCATCONCAT_COALESCEr   r.   r.   r/   r      
    	CONCAT_WSc                 C  r   r   )r   ConcatWsr   r   r   r.   r.   r/   r      r   CONVERT_TIMEZONEDATE_TO_DATE_STRc                 C  "   t jt| dt jt jjjddS Nr   r    r!   tor   Castr   DataTypeTypeTEXTr   r.   r.   r/   r          GENERATE_DATE_ARRAYc                 C  s>   t jt| dt| dt| dpt jt jdt dddS )Nr   r   r"   DAYr!   unit)startendstep)r   GenerateDateArrayr   Intervalr   r   varr   r.   r.   r/   r      s
    $GLOBc                 C  s   t jt| dt| ddS Nr   r   r2   )r   Globr   r   r.   r.   r/   r          HEXJSON_EXTRACTJSON_EXTRACT_SCALARJSON_EXTRACT_PATH_TEXTLIKELOGLOG2c                 C     t jt jdt| ddS )Nr"   r   r2   r   rJ   r   numberr   r   r.   r.   r/   r          LOG10c                 C  r   )N
   r   r2   r   r   r.   r.   r/   r      r   LOWERLPADc                 C     t | S Nrq   r   r.   r.   r/   r          LEFTPADc                 C  r  r  r  r   r.   r.   r/   r      r  LTRIMc                 C  r  r  r   r   r.   r.   r/   r      r  MODRIGHTPADc                 C     t | ddS NF)rm   r  r   r.   r.   r/   r      r   RPADc                 C  r  r  r  r   r.   r.   r/   r      r   RTRIMc                 C  r  r  r
  r   r.   r.   r/   r      r   SCOPE_RESOLUTIONc                 C  s8   t | dkrtjt| ddS tjt| dt| ddS )Nr"   r   r3   r   r2   )r&   r   ScopeResolutionr   r   r.   r.   r/   r      s   STRPOS	CHARINDEXc                 C  r  r  r   r   r.   r.   r/   r      r  INSTRLOCATEc                 C  r  r  r  r   r.   r.   r/   r      r  TIME_TO_TIME_STRc                 C  r   r   r   r   r.   r.   r/   r      r   c                 C  s>   t jt jt| dt jt jjjddt jdt jddS )Nr   r    r   r   r  )r!   r   length)	r   	Substringr   r   r   r   r   r   r   r   r.   r.   r/   r     s    

c                 C  s   t jtt| ddS )Nr   ru   )r   Unnestr
   r   r   r.   r.   r/   r   
      )TO_HEXTS_OR_DS_TO_DATE_STRUNNESTUPPERVAR_MAPt.Dict[str, t.Callable]	FUNCTIONS)r   LIST>   BOTHr   r   z)t.Dict[TokenType, t.Type[exp.Expression]]CONJUNCTION
ASSIGNMENTDISJUNCTIONEXPONENTz
t.Set[str]
JOIN_HINTSc                 C  s   | j tj| |  ||dS Nr!   ra   )r3   r   Lambda_replace_lambda_parse_assignmentr=   ra   r.   r.   r/   r     s    c                 C  s"   | j tjt|d j|  dS )Nr   r2   )r3   r   Kwargr   r   r0  r1  r.   r.   r/   r     s
    Nc                 C     | j tj||dS Nr   )r3   r   JSONCastr=   r!   r   r.   r.   r/   r     
    c                 C  s   | j | jrtjntj||dS r4  )r3   STRICT_CASTr   r   TryCastr6  r.   r.   r/   r     s
    c                 C     | j tj|| j|| jdS N)r!   r3   only_json_types)r3   r   rc   rG   rb   JSON_ARROWS_REQUIRE_JSON_TYPEr=   r!   pathr.   r.   r/   r         
c                 C  r:  r;  )r3   r   JSONExtractScalarrG   rb   r=  r>  r.   r.   r/   r     r@  c                 C  r3  r@   )r3   r   JSONBExtractr>  r.   r.   r/   r   
  r7  c                 C  r3  r@   )r3   r   JSONBExtractScalarr>  r.   r.   r/   r     r7  c                 C  r3  r@   )r3   r   JSONBContains)r=   r!   r   r.   r.   r/   r     r7  c                 C     |  tjtjS r  _parse_sortr   Clusterr   
CLUSTER_BYr=   r.   r.   r/   r         c                 C     |   S r  )_parse_columnrJ  r.   r.   r/   r     r  c                 C  rL  r  )r0  rJ  r.   r.   r/   r     r  c                 C     | j dddS )NFT)allow_identifiersschema_parse_typesrJ  r.   r.   r/   r         c                 C  rL  r  )_parse_expressionrJ  r.   r.   r/   r      r  c                 C     | j ddS )NTjoins)_parse_fromrJ  r.   r.   r/   r   !  r   c                 C  rL  r  _parse_grouprJ  r.   r.   r/   r   "  r  c                 C  rL  r  _parse_havingrJ  r.   r.   r/   r   #  r  c                 C  rL  r  )_parse_hint_bodyrJ  r.   r.   r/   r   $  r  c                 C  rL  r  _parse_id_varrJ  r.   r.   r/   r   %  r  c                 C  rL  r  )_parse_joinrJ  r.   r.   r/   r   &  r  c                 C  rL  r  _parse_lambdarJ  r.   r.   r/   r   '  r  c                 C  rL  r  )_parse_lateralrJ  r.   r.   r/   r   (  r  c                 C  rL  r  _parse_limitrJ  r.   r.   r/   r   )  r  c                 C  rL  r  _parse_offsetrJ  r.   r.   r/   r   *  r  c                 C  rL  r  _parse_orderrJ  r.   r.   r/   r   +  r  c                 C  rL  r  )_parse_orderedrJ  r.   r.   r/   r   ,  r  c                 C  rL  r  )_parse_propertiesrJ  r.   r.   r/   r   -  r  c                 C  rL  r  _parse_partitioned_byrJ  r.   r.   r/   r   .  r  c                 C  rL  r  _parse_qualifyrJ  r.   r.   r/   r   /  r  c                 C  rL  r  )_parse_returningrJ  r.   r.   r/   r   0  r  c                 C  rL  r  _parse_selectrJ  r.   r.   r/   r   1  r  c                 C  rE  r  rG  r   Sortr   SORT_BYrJ  r.   r.   r/   r   2  rK  c                 C  rL  r  )_parse_table_partsrJ  r.   r.   r/   r   3  r  c                 C  rL  r  )_parse_table_aliasrJ  r.   r.   r/   r   4  r  c                 C  rU  )NFr%   )_parse_valuerJ  r.   r.   r/   r   5  r   c                 C  rL  r  )_parse_when_matchedrJ  r.   r.   r/   r   6  r  c                 C  rL  r  _parse_whererJ  r.   r.   r/   r   7  r  c                 C  rL  r  )_parse_named_windowrJ  r.   r.   r/   r   8  r  c                 C  rL  r  )_parse_withrJ  r.   r.   r/   r   9  r  	JOIN_TYPEc                 C  rL  r  )_parse_join_partsrJ  r.   r.   r/   r   :  r  c                 C  rL  r  )_parse_alterrJ  r.   r.   r/   r   >  r  c                 C  rL  r  )_parse_analyzerJ  r.   r.   r/   r   ?  r  c                 C  rL  r  )_parse_transactionrJ  r.   r.   r/   r   @  r  c                 C  rL  r  )_parse_cacherJ  r.   r.   r/   r   A  r  c                 C  rL  r  )_parse_commentrJ  r.   r.   r/   r   B  r  c                 C  rL  r  _parse_commit_or_rollbackrJ  r.   r.   r/   r   C  r  c                 C  rL  r  )_parse_copyrJ  r.   r.   r/   r   D  r  c                 C  rL  r  )_parse_createrJ  r.   r.   r/   r   E  r  c                 C  rL  r  )_parse_deleterJ  r.   r.   r/   r   F  r  c                 C  rL  r  _parse_describerJ  r.   r.   r/   r   G  r  c                 C  rL  r  r  rJ  r.   r.   r/   r   H  r  c                 C  rL  r  )_parse_droprJ  r.   r.   r/   r   I  r  c                 C  rL  r  )_parse_grantrJ  r.   r.   r/   r   J  r  c                 C  rL  r  )_parse_insertrJ  r.   r.   r/   r   K  r  c                 C  rL  r  )_parse_killrJ  r.   r.   r/   r   L  r  c                 C  rL  r  )_parse_loadrJ  r.   r.   r/   r   M  r  c                 C  rL  r  )_parse_mergerJ  r.   r.   r/   r   N  r  c                 C  rL  r  _parse_simplified_pivotrJ  r.   r.   r/   r   O  r  c                 C     | j tj|  dS Nr    )r3   r   PragmarT  rJ  r.   r.   r/   r   P      c                 C  rL  r  )_parse_refreshrJ  r.   r.   r/   r   Q  r  c                 C  rL  r  r  rJ  r.   r.   r/   r   R  r  c                 C  rL  r  )
_parse_setrJ  r.   r.   r/   r   S  r  c                 C  rL  r  )_parse_truncate_tablerJ  r.   r.   r/   r   T  r  c                 C  rL  r  )_parse_uncacherJ  r.   r.   r/   r   U  r  c                 C  rU  )NT
is_unpivotr  rJ  r.   r.   r/   r   V  r   c                 C  rL  r  )_parse_updaterJ  r.   r.   r/   r   W  r  c                 C  rL  r  )
_parse_userJ  r.   r.   r/   r   X  r  c                 C  s   t  S r  )r   	SemicolonrJ  r.   r.   r/   r   Y  r  c                 C  rL  r  )_parse_unaryrJ  r.   r.   r/   r   ]  r  c                 C  r  r  )r3   r   Not_parse_equalityrJ  r.   r.   r/   r   ^  r  c                 C  r  r  )r3   r   
BitwiseNotr  rJ  r.   r.   r/   r   _  r  c                 C  r  r  )r3   r   Negr  rJ  r.   r.   r/   r   `  r  c                 C  r  r  )r3   r   Sqrtr  rJ  r.   r.   r/   r   a  r  c                 C  r  r  )r3   r   Cbrtr  rJ  r.   r.   r/   r   b  r  c                 C     | j tj|jdS r  r3   r   	RawStringtextr=   tokenr.   r.   r/   r   f      c                 C  r  r  )r3   r   Nationalr  r  r.   r.   r/   r   i  r  c                 C  r  r  r  r  r.   r.   r/   r   l      c                 C     | j tj|jddS )NTr!   	is_stringr3   r   r   r  r  r.   r.   r/   r   m      
c                 C  s"   | j tj|j| do|  dS )NUESCAPE)r!   escape)r3   r   UnicodeStringr  _match_text_seq_parse_stringr  r.   r.   r/   r   p  s
    c                 C  r  r  )r3   r   	BitStringr  r  r.   r.   r/   r   x  r  c                 C  r  r  )r3   r   
ByteStringr  r  r.   r.   r/   r   y  r  c                 C  s   | j tj|j| jjpd dS )N)r!   
is_integer)r3   r   	HexStringr  rG   HEX_STRING_IS_INTEGER_TYPEr  r.   r.   r/   r   z  s
    
c                 C  r  )NFr  r  r  r.   r.   r/   r     r  c                 C  
   |  |S r  )_parse_introducerr  r.   r.   r/   r        
 c                 C     |  tjS r  )r3   r   Nullr=   _r.   r.   r/   r     r   c                 C     | j tjddS NTr    r3   r   Booleanr  r.   r.   r/   r     rK  c                 C  r  NFr    r  r  r.   r.   r/   r     rK  c                 C  rL  r  )_parse_session_parameterr  r.   r.   r/   r     r  c                 C  rL  r  )_parse_star_opsr  r.   r.   r/   r     r  c                 C  r  r  )r3   r   PlaceholderrJ  r.   r.   r/   r     r   c                 C  rL  r  )_parse_parameterrJ  r.   r.   r/   r     r  c                 C  s$   |  | jr| jtj| jjdS d S r  )
_match_setCOLON_PLACEHOLDER_TOKENSr3   r   r  _prevr  rJ  r.   r.   r/   r     s   
c                 C  r  r  )_parse_betweenr=   r!   r.   r.   r/   r     r  c                 C  r  r  )	_parse_inr  r.   r.   r/   r     r  c                 C  r  r  )	_parse_isr  r.   r.   r/   r     r  T)r:   c                 C  r  r  )_parse_comprehensionr  r.   r.   r/   r     r  c                 C  r  r  )_parse_pipe_syntax_aggregater=   queryr.   r.   r/   r     r  c                 C  s   |  |t g|  S r  )_build_pipe_cter   Starrw  r  r.   r.   r/   r     s    c                 C  r  r  )_parse_pipe_syntax_extendr  r.   r.   r/   r     r  c                 C  r  r  )_parse_pipe_syntax_limitr  r.   r.   r/   r     r  c                 C  s   |j |  dddS )NFr*   r#   )order_byri  r  r.   r.   r/   r     r  c                 C  r  r  _parse_pipe_syntax_pivotr  r.   r.   r/   r     r  c                 C  r  r  )_parse_pipe_syntax_selectr  r.   r.   r/   r     r  c                 C  r  r  )_parse_pipe_syntax_tablesampler  r.   r.   r/   r     r  c                 C  r  r  r  r  r.   r.   r/   r     r  c                 C  s   |j |  ddS NFr#   )wherer|  r  r.   r.   r/   r     r  )
	AGGREGATEASEXTENDLIMITORDER BYPIVOTSELECTTABLESAMPLEUNPIVOTWHEREALLOWED_VALUESc                 C     | j tj| | jdS r   )r3   r   AllowedValuesProperty
_parse_csv_parse_primaryrJ  r.   r.   r/   r         	ALGORITHMc                 C  r  r  )_parse_property_assignmentr   AlgorithmPropertyrJ  r.   r.   r/   r     r   AUTOc                 C  rL  r  )_parse_auto_propertyrJ  r.   r.   r/   r     r  AUTO_INCREMENTc                 C  r  r  )r  r   AutoIncrementPropertyrJ  r.   r.   r/   r     r   BACKUPc                 C  s   | j tj| jdddS )NT	any_tokenr    )r3   r   BackupProperty
_parse_varrJ  r.   r.   r/   r     r  BLOCKCOMPRESSIONc                 C  rL  r  )_parse_blockcompressionrJ  r.   r.   r/   r     r  CHARSETc                 K     | j di |S Nr.   _parse_character_setr=   kwargsr.   r.   r/   r     rK  zCHARACTER SETc                 K  r  r	  r
  r  r.   r.   r/   r     rK  CHECKSUMc                 C  rL  r  )_parse_checksumrJ  r.   r.   r/   r     r  
CLUSTER BYc                 C  rL  r  _parse_clusterrJ  r.   r.   r/   r     r  	CLUSTEREDc                 C  rL  r  )_parse_clustered_byrJ  r.   r.   r/   r     r  COLLATEc                 K     | j tjfi |S r  )r  r   CollatePropertyr  r.   r.   r/   r     s
    COMMENTc                 C  r  r  )r  r   SchemaCommentPropertyrJ  r.   r.   r/   r     r   CONTAINSc                 C  rL  r  )_parse_contains_propertyrJ  r.   r.   r/   r     r  COPYc                 C  rL  r  )_parse_copy_propertyrJ  r.   r.   r/   r     r  DATABLOCKSIZEc                 K  r  r	  )_parse_datablocksizer  r.   r.   r/   r     rK  DATA_DELETIONc                 C  rL  r  )_parse_data_deletion_propertyrJ  r.   r.   r/   r     r  DEFINERc                 C  rL  r  )_parse_definerrJ  r.   r.   r/   r     r  DETERMINISTICc                 C     | j tjtjddS N	IMMUTABLEr    r3   r   StabilityPropertyr   r   rJ  r.   r.   r/   r     r  DISTRIBUTEDc                 C  rL  r  )_parse_distributed_propertyrJ  r.   r.   r/   r     r  	DUPLICATEc                 C  r  r  )_parse_composite_key_propertyr   DuplicateKeyPropertyrJ  r.   r.   r/   r     r   DYNAMICc                 C  r  r  )r3   r   DynamicPropertyrJ  r.   r.   r/   r     r   DISTKEYc                 C  rL  r  )_parse_distkeyrJ  r.   r.   r/   r     r  	DISTSTYLEc                 C  r  r  )r  r   DistStylePropertyrJ  r.   r.   r/   r     r   EMPTYc                 C  r  r  )r3   r   EmptyPropertyrJ  r.   r.   r/   r     r   ENGINEc                 C  r  r  )r  r   EnginePropertyrJ  r.   r.   r/   r     r   ENVIRONMENTc                 C  r  r   )r3   r   EnviromentProperty_parse_wrapped_csvr0  rJ  r.   r.   r/   r     r  EXECUTEc                 C  r  r  )r  r   ExecuteAsPropertyrJ  r.   r.   r/   r     r   EXTERNALc                 C  r  r  )r3   r   ExternalPropertyrJ  r.   r.   r/   r     r   FALLBACKc                 K  r  r	  )_parse_fallbackr  r.   r.   r/   r     rK  FORMATc                 C  r  r  r  r   FileFormatPropertyrJ  r.   r.   r/   r     r   	FREESPACEc                 C  rL  r  )_parse_freespacerJ  r.   r.   r/   r     r  GLOBALc                 C  r  r  )r3   r   GlobalPropertyrJ  r.   r.   r/   r     r   HEAPc                 C  r  r  )r3   r   HeapPropertyrJ  r.   r.   r/   r     r   ICEBERGc                 C  r  r  )r3   r   IcebergPropertyrJ  r.   r.   r/   r     r   r'  c                 C  r%  r&  r(  rJ  r.   r.   r/   r     r  INHERITSc                 C  r  r   )r3   r   InheritsPropertyr;  _parse_tablerJ  r.   r.   r/   r     r  INPUTc                 C  r  r  )r3   r   InputModelProperty_parse_schemarJ  r.   r.   r/   r     r  JOURNALc                 K  r  r	  )_parse_journalr  r.   r.   r/   r     rK  LANGUAGEc                 C  r  r  )r  r   LanguagePropertyrJ  r.   r.   r/   r     r   LAYOUTc                 C  rU  )NrW  r    _parse_dict_propertyrJ  r.   r.   r/   r     r   LIFETIMEc                 C  rU  )NrZ  r    _parse_dict_rangerJ  r.   r.   r/   r     r   c                 C  rL  r  _parse_create_likerJ  r.   r.   r/   r     r  LOCATIONc                 C  r  r  )r  r   LocationPropertyrJ  r.   r.   r/   r     r   LOCKc                 C  rL  r  _parse_lockingrJ  r.   r.   r/   r     r  LOCKINGc                 C  rL  r  rb  rJ  r.   r.   r/   r     r  c                 K  r  r	  )
_parse_logr  r.   r.   r/   r     rK  MATERIALIZEDc                 C  r  r  )r3   r   MaterializedPropertyrJ  r.   r.   r/   r     r   MERGEBLOCKRATIOc                 K  r  r	  )_parse_mergeblockratior  r.   r.   r/   r     rK  MODIFIESc                 C  rL  r  )_parse_modifies_propertyrJ  r.   r.   r/   r     r  MULTISETc                 C  r  )NTmultir3   r   SetPropertyrJ  r.   r.   r/   r     rK  NOc                 C  rL  r  )_parse_no_propertyrJ  r.   r.   r/   r     r  ONc                 C  rL  r  )_parse_on_propertyrJ  r.   r.   r/   r     r  r  c                 C  rU  )NT)skip_order_tokenrh  rJ  r.   r.   r/   r     r   OUTPUTc                 C  r  r  )r3   r   OutputModelPropertyrR  rJ  r.   r.   r/   r     r  	PARTITIONc                 C  rL  r  )_parse_partitioned_ofrJ  r.   r.   r/   r      r  zPARTITION BYc                 C  rL  r  rl  rJ  r.   r.   r/   r     r  zPARTITIONED BYc                 C  rL  r  rl  rJ  r.   r.   r/   r     r  PARTITIONED_BYc                 C  rL  r  rl  rJ  r.   r.   r/   r     r  PRIMARY KEYc                 C  rU  )NT)in_props_parse_primary_keyrJ  r.   r.   r/   r     r   RANGEc                 C  rU  )Nr  r    r[  rJ  r.   r.   r/   r     r   READSc                 C  rL  r  )_parse_reads_propertyrJ  r.   r.   r/   r     r  REMOTEc                 C  rL  r  )_parse_remote_with_connectionrJ  r.   r.   r/   r     r  RETURNSc                 C  rL  r  )_parse_returnsrJ  r.   r.   r/   r     r  STRICTc                 C  r  r  )r3   r   StrictPropertyrJ  r.   r.   r/   r   	  r   	STREAMINGc                 C  r  r  )r3   r   StreamingTablePropertyrJ  r.   r.   r/   r   
  r   ROWc                 C  rL  r  )
_parse_rowrJ  r.   r.   r/   r     r  
ROW_FORMATc                 C  r  r  )r  r   RowFormatPropertyrJ  r.   r.   r/   r     r   SAMPLEc                 C  s   | j tj| do|  dS )NBYr    )r3   r   SamplePropertyr  rA   rJ  r.   r.   r/   r     r   SECUREc                 C  r  r  )r3   r   SecurePropertyrJ  r.   r.   r/   r     r   SECURITYc                 C  rL  r  )_parse_securityrJ  r.   r.   r/   r     r  SETc                 C  r  )NFrm  ro  rJ  r.   r.   r/   r     rK  SETTINGSc                 C  rL  r  )_parse_settings_propertyrJ  r.   r.   r/   r     r  SHARINGc                 C  r  r  )r  r   SharingPropertyrJ  r.   r.   r/   r     r   SORTKEYc                 C  rL  r  )_parse_sortkeyrJ  r.   r.   r/   r     r  SOURCEc                 C  rU  )Nr  r    rX  rJ  r.   r.   r/   r     r   STABLEc                 C  r%  )Nr  r    r(  rJ  r.   r.   r/   r     r  STOREDc                 C  rL  r  )_parse_storedrJ  r.   r.   r/   r     r  SYSTEM_VERSIONINGc                 C  rL  r  )!_parse_system_versioning_propertyrJ  r.   r.   r/   r     r  TBLPROPERTIESc                 C  rL  r  )_parse_wrapped_propertiesrJ  r.   r.   r/   r     r  TEMPc                 C  r  r  r3   r   TemporaryPropertyrJ  r.   r.   r/   r     r   	TEMPORARYc                 C  r  r  r  rJ  r.   r.   r/   r     r   TOc                 C  rL  r  )_parse_to_tablerJ  r.   r.   r/   r     r  	TRANSIENTc                 C  r  r  )r3   r   TransientPropertyrJ  r.   r.   r/   r      r   	TRANSFORMc                 C  r  r   )r3   r   TransformModelPropertyr;  rT  rJ  r.   r.   r/   r   !  r  c                 C  rL  r  )
_parse_ttlrJ  r.   r.   r/   r   $  r  c                 C  r  r  rC  rJ  r.   r.   r/   r   %  r   c                 C  r  r  )r3   r   UnloggedPropertyrJ  r.   r.   r/   r   &  r   c                 C  rL  r  )_parse_volatile_propertyrJ  r.   r.   r/   r   '  r  c                 C  rL  r  )_parse_with_propertyrJ  r.   r.   r/   r   (  r  )TTLUSINGUNLOGGEDVOLATILEWITHPROPERTY_PARSERSAUTOINCREMENTc                 C  rL  r  _parse_auto_incrementrJ  r.   r.   r/   r   ,  r  c                 C  rL  r  r  rJ  r.   r.   r/   r   -  r  CASESPECIFICc                 C  r  )NFnot_)r3   r   CaseSpecificColumnConstraintrJ  r.   r.   r/   r   .  rK  c                 C  r  r  )r3   r   CharacterSetColumnConstraint_parse_var_or_stringrJ  r.   r.   r/   r   /  r  CHECKc                 C  s    | j tj| | j| ddS )NENFORCED)r!   enforced)r3   r   CheckColumnConstraint_parse_wrappedr0  r  rJ  r.   r.   r/   r   2  s
    
c                 C  s   | j tj|  p|  dS r  )r3   r   CollateColumnConstraint_parse_identifierrM  rJ  r.   r.   r/   r   7  s    c                 C  r  r  )r3   r   CommentColumnConstraintr  rJ  r.   r.   r/   r   ;  r  COMPRESSc                 C  rL  r  )_parse_compressrJ  r.   r.   r/   r   >  r  c                 C  r  r  )r3   r   ClusteredColumnConstraintr;  rj  rJ  r.   r.   r/   r   ?  r  NONCLUSTEREDc                 C  r  r  )r3   r   NonClusteredColumnConstraintr;  rj  rJ  r.   r.   r/   r   B  r  DEFAULTc                 C  r  r  )r3   r   DefaultColumnConstraintrA   rJ  r.   r.   r/   r   E  r  ENCODEc                 C  r  r  )r3   r   EncodeColumnConstraintr  rJ  r.   r.   r/   r   H  r  	EPHEMERALc                 C  r  r  )r3   r   EphemeralColumnConstraintrA   rJ  r.   r.   r/   r   I  r  EXCLUDEc                 C  r  r  )r3   r   ExcludeColumnConstraint_parse_index_paramsrJ  r.   r.   r/   r   L  r  FOREIGN KEYc                 C  rL  r  )_parse_foreign_keyrJ  r.   r.   r/   r   O  r  c                 C  r  r  )r3   r   DateFormatColumnConstraintr  rJ  r.   r.   r/   r   P  r  	GENERATEDc                 C  rL  r  )_parse_generated_as_identityrJ  r.   r.   r/   r   S  r  IDENTITYc                 C  rL  r  r  rJ  r.   r.   r/   r   T  r  INLINEc                 C  rL  r  )_parse_inlinerJ  r.   r.   r/   r   U  r  c                 C  rL  r  r]  rJ  r.   r.   r/   r   V  r  NOTc                 C  rL  r  )_parse_not_constraintrJ  r.   r.   r/   r   W  r  NULLc                 C  r  )NT)
allow_null)r3   r   NotNullColumnConstraintrJ  r.   r.   r/   r   X  rK  c                 C  s4   |  tjo| jtj|  dp| jtj|  dS r  )	_matchr   UPDATEr3   r   OnUpdateColumnConstraint_parse_function
OnPropertyr_  rJ  r.   r.   r/   r   Y  s   PATHc                 C  r  r  )r3   r   PathColumnConstraintr  rJ  r.   r.   r/   r   ^  r  PERIODc                 C  rL  r  )_parse_period_for_system_timerJ  r.   r.   r/   r   _  r  c                 C  rL  r  r}  rJ  r.   r.   r/   r   `  r  
REFERENCESc                 C  rU  )NF)match)_parse_referencesrJ  r.   r.   r/   r   a  r   TITLEc                 C  r  r  )r3   r   TitleColumnConstraintr  rJ  r.   r.   r/   r   b  r  r  c                 C  s   | j tj|  gdS r   )r3   r   MergeTreeTTLrA   rJ  r.   r.   r/   r   e  r  UNIQUEc                 C  rL  r  )_parse_uniquerJ  r.   r.   r/   r   f  r  	UPPERCASEc                 C  r  r  )r3   r   UppercaseColumnConstraintrJ  r.   r.   r/   r   g  r   	WATERMARKc                 C  s2   | j tj| tjo|  | tjo|  dS r@   )	r3   r   WatermarkColumnConstraintr  r   FORrM  ALIAS_parse_disjunctionrJ  r.   r.   r/   r   h  s
    r  c                 C  r  r   )r3   r   
Propertiesr  rJ  r.   r.   r/   r   m  r  BUCKETc                 C  rL  r  (_parse_partitioned_by_bucket_or_truncaterJ  r.   r.   r/   r   p  r  TRUNCATEc                 C  rL  r  r  rJ  r.   r.   r/   r   q  r  r   rt   c                   sj    j j dkrtjntj}  fdd}t|dt|d}}t|tj	r-||}} j
|||dS )Nr  c                           p  S r  )r  rM  r.   rJ  r.   r/   r   {  rK  zAParser._parse_partitioned_by_bucket_or_truncate.<locals>.<lambda>r   r   r2   )r  r  upperr   PartitionedByBucketPartitionByTruncater;  r   rW   r   r3   )r=   r   r   r!   r3   r.   rJ  r/   r  t  s   
z/Parser._parse_partitioned_by_bucket_or_truncatec                 C  rL  r  )_parse_alter_table_addrJ  r.   r.   r/   r     r  c                 C  rL  r  rq  rJ  r.   r.   r/   r     r  c                 C  rL  r  )_parse_alter_table_alterrJ  r.   r.   r/   r     r  c                 C  rU  )NT)wrappedr  rJ  r.   r.   r/   r     r   c                 C  r  )N)r  )r3   r   Deleter|  rJ  r.   r.   r/   r     r  c                 C  rL  r  )_parse_alter_table_droprJ  r.   r.   r/   r     r  c                 C  rL  r  )_parse_alter_table_renamerJ  r.   r.   r/   r     r  c                 C  rL  r  )_parse_alter_table_setrJ  r.   r.   r/   r     r  c                 C  s$   | j tj| tjo| jdddS NTrP  r    )r3   r   	SwapTabler  r   r  rO  rJ  r.   r.   r/   r     s    )	ADDr  ALTERr  DELETEDROPRENAMEr  SWAPc                 C  rL  r  _parse_alter_diststylerJ  r.   r.   r/   r     r  c                 C  rL  r  r  rJ  r.   r.   r/   r     r  c                 C  rL  r  _parse_alter_sortkeyrJ  r.   r.   r/   r     r  c                 C  rU  )NTcompoundr  rJ  r.   r.   r/   r     r   )r1  r3  r  COMPOUND>
   r   r  r  r  r  r  r   r  r  r{  c                 C  r  r  )r3   r   AnyrA   rJ  r.   r.   r/   r     r  c                 C  rL  r  )_parse_caserJ  r.   r.   r/   r     r  c                 C  r  r  )r3   r   ConnectByRootrM  rJ  r.   r.   r/   r     r  c                 C  rL  r  )	_parse_ifrJ  r.   r.   r/   r     r  )ANYCASECONNECT_BY_ROOTIFSTRUCTc                 C     i | ]}|d d qS )c                 S  r  r  )_parse_max_min_byr   ArgMaxrJ  r.   r.   r/   r     r   Parser.<dictcomp>.<lambda>r.   r   r   r.   r.   r/   r         
c                 C  r%  )c                 S  r  r  )r&  r   ArgMinrJ  r.   r.   r/   r     r   r(  r.   r)  r.   r.   r/   r     r*  CASTc                 C     |  | jS r  )_parse_castr8  rJ  r.   r.   r/   r     r   CEILc                 C  r  r  )_parse_ceil_floorr   CeilrJ  r.   r.   r/   r     r   CONVERTc                 C  r-  r  )_parse_convertr8  rJ  r.   r.   r/   r     r   DECODEc                 C  rL  r  )_parse_decoderJ  r.   r.   r/   r     r  EXTRACTc                 C  rL  r  )_parse_extractrJ  r.   r.   r/   r     r  FLOORc                 C  r  r  )r0  r   FloorrJ  r.   r.   r/   r     r   GAP_FILLc                 C  rL  r  )_parse_gap_fillrJ  r.   r.   r/   r     r  JSON_OBJECTc                 C  rL  r  _parse_json_objectrJ  r.   r.   r/   r     r  JSON_OBJECTAGGc                 C  rU  )NT)aggr=  rJ  r.   r.   r/   r     r   
JSON_TABLEc                 C  rL  r  )_parse_json_tablerJ  r.   r.   r/   r     r  MATCHc                 C  rL  r  )_parse_match_againstrJ  r.   r.   r/   r     r  	NORMALIZEc                 C  rL  r  )_parse_normalizerJ  r.   r.   r/   r     r  OPENJSONc                 C  rL  r  )_parse_open_jsonrJ  r.   r.   r/   r     r  OVERLAYc                 C  rL  r  )_parse_overlayrJ  r.   r.   r/   r     r  POSITIONc                 C  rL  r  )_parse_positionrJ  r.   r.   r/   r     r  PREDICTc                 C  rL  r  )_parse_predictrJ  r.   r.   r/   r     r  	SAFE_CASTc                 C  rN  NFT)r   r.  rJ  r.   r.   r/   r     rS  c                 C  rL  r  )_parse_string_aggrJ  r.   r.   r/   r     r  c                 C  rL  r  )_parse_substringrJ  r.   r.   r/   r     r  c                 C  rL  r  )_parse_trimrJ  r.   r.   r/   r     r  c                 C  rN  rP  rQ  rJ  r.   r.   r/   r     rS  c                 C  rN  rP  )r3  rJ  r.   r.   r/   r     rS  c                 C  s4   | j tj| do|  | tjo| | j	dS )NNAMEr-  )
r3   r   
XMLElementr  r_  r  r   COMMAr  rT  rJ  r.   r.   r/   r     s
    c                 C  rL  r  )_parse_xml_tablerJ  r.   r.   r/   r     r  )
STRING_AGG	SUBSTRINGTRIMTRY_CASTTRY_CONVERT
XMLELEMENTXMLTABLEc                 C     d|   fS )Nr  )_parse_match_recognizerJ  r.   r.   r/   r     r   c                 C  r`  )Nprewhere)_parse_prewhererJ  r.   r.   r/   r     r   c                 C  r`  )Nr  r{  rJ  r.   r.   r/   r     r   c                 C  r`  )NgrouprY  rJ  r.   r.   r/   r     r   c                 C  r`  )Nhavingr[  rJ  r.   r.   r/   r     r   c                 C  r`  )Nqualifyrn  rJ  r.   r.   r/   r     r   c                 C  r`  )Nwindows)_parse_window_clauserJ  r.   r.   r/   r     r   c                 C  r`  )Norderrh  rJ  r.   r.   r/   r     r   c                 C  r`  Nlimitrd  rJ  r.   r.   r/   r     r   c                 C  r`  rj  rd  rJ  r.   r.   r/   r     r   c                 C  r`  )Noffsetrf  rJ  r.   r.   r/   r     r   c                 C  r`  Nlocks_parse_locksrJ  r.   r.   r/   r     r   c                 C  r`  rm  ro  rJ  r.   r.   r/   r     r   c                 C     d| j ddfS NsampleT)as_modifier_parse_table_samplerJ  r.   r.   r/   r     rK  c                 C  rq  rr  ru  rJ  r.   r.   r/   r     rK  c                 C     d|  tjtjfS )NclusterrF  rJ  r.   r.   r/   r        c                 C  rw  )N
distribute)rG  r   
Distributer   DISTRIBUTE_BYrJ  r.   r.   r/   r     ry  c                 C  rw  )Nsortrs  rJ  r.   r.   r/   r     r  c                 C  rq  )NconnectT)skip_start_token_parse_connectrJ  r.   r.   r/   r     rK  c                 C  r`  )Nr~  r  rJ  r.   r.   r/   r     r   c                 C  
   |  dS )NrG  _parse_set_item_assignmentrJ  r.   r.   r/   r     r  c                 C  r  )NLOCALr  rJ  r.   r.   r/   r     r  c                 C  r  )NSESSIONr  rJ  r.   r.   r/   r     r  c                 C  rL  r  )_parse_set_transactionrJ  r.   r.   r/   r     r  )rG  r  r  TRANSACTIONr   c                 C     | j tj|dS r  )r3   r   	ParseJSON)r=   r!   r  r.   r.   r/   r   
  rK  zCt.Dict[exp.DataType.Type, t.Callable[[exp.DataType], exp.DataType]]TYPE_CONVERTERS>   DEFERRED	EXCLUSIVE	IMMEDIATE))LEVEL
REPEATABLEREAD)r  r  	COMMITTED)r  r  
UNCOMITTED)r  SERIALIZABLE)WRITEONLY)	ISOLATIONr  OPTIONS_TYPETRANSACTION_CHARACTERISTICS)ABORTFAILIGNOREREPLACEROLLBACKr  CONFLICT_ACTIONS)NOTHINGr  DO)r  NOEXTEND)CYCLECACHEMAXVALUEMINVALUE)SCALESHARDrq  )r  rG  KEEPNOKEEPORDERNOORDERNOCACHEr  NOCYCLE
NOMINVALUE
NOMAXVALUENOSCALENOSHARDCREATE_SEQUENCEr  )ALLINSERTNONEISOLATED_LOADING_OPTIONS)ROLE	WAREHOUSEDATABASESCHEMACATALOGUSABLES)r  r  )FIELDSCAST_ACTIONSTYPE)	EVOLUTION)BINDINGCOMPENSATIONr  SCHEMA_BINDING_OPTIONSPROCEDURE_OPTIONS)CALLERSELFOWNEREXECUTE_AS_OPTIONS)r  )FULLPARTIALSIMPLE)r  r  )BTREEHASH)r  rC  	INITIALLYr  )
DEFERRABLENORELYRELYKEY_CONSTRAINT_OPTIONS)OTHERS)r  )rq  CURRENT)GROUPTIESWINDOW_EXCLUDE_OPTIONS>   r  r  r  r  r  CLONE>   ATENDBEFORE>   OFFSETSTREAMVERSION	STATEMENT	TIMESTAMP>   ASCDESCr  NULLS>   
ENCRYPTIONSCHEMABINDINGVIEW_METADATA	FOLLOWING	PRECEDING>   
CREDENTIALFILE_FORMATCOPY_OPTIONSFORMAT_OPTIONS>   r   VALUEOBJECTSCALAR)dtts>   r  TRUEr5  ERRORFALSE>   ANALYZEHISTORYEXTENDED	FORMATTED>   r  r  r  VERBOSESKIP_LOCKEDBUFFER_USAGE_LIMITNO_WRITE_TO_BINLOGc                 C  rL  r  _parse_analyze_columnsrJ  r.   r.   r/   r     r  c                 C  rL  r  _parse_analyze_statisticsrJ  r.   r.   r/   r     r  c                 C  rL  r  )_parse_analyze_deleterJ  r.   r.   r/   r     r  c                 C  rL  r  _parse_analyze_histogramrJ  r.   r.   r/   r     r  c                 C  rL  r  r  rJ  r.   r.   r/   r     r  c                 C  rL  r  )_parse_analyze_listrJ  r.   r.   r/   r     r  c                 C  rL  r  r  rJ  r.   r.   r/   r     r  c                 C  rL  r  r  rJ  r.   r.   r/   r     r  c                 C  rL  r  )_parse_analyze_validaterJ  r.   r.   r/   r     r  )	r  COMPUTEr  r  ESTIMATEr%  	PREDICATEr  VALIDATESUBPARTITIONOPERATION_MODIFIERS>   r  DEPTHBREADTHFr}   DEFAULT_SAMPLING_METHOD>   rk  ri  rl  )error_levelerror_message_context
max_errorsrG   sqlerrors_tokens_index_curr_nextr  _prev_comments_pipe_cte_countert.Dictr   r   d      r  t.Optional[ErrorLevel]r  intr  rG   r   c                 C  s<   ddl m} |p
tj| _|| _|| _||| _| 	  d S )Nr   )r   )
sqlglot.dialectsr   r   r  r  r  r  get_or_raiserG   reset)r=   r  r  r  rG   r   r.   r.   r/   __init__  s   zParser.__init__c                 C  s:   d| _ g | _g | _d| _d | _d | _d | _d | _d| _d S )N r   )	r  r  r  r  r  r  r  r  r  rJ  r.   r.   r/   r#    s   
zParser.reset
raw_tokenst.List[Token]r  "t.List[t.Optional[exp.Expression]]c                 C  s   | j | jj||dS )aJ  
        Parses a list of tokens and returns a list of syntax trees, one tree
        per parsed SQL statement.

        Args:
            raw_tokens: The list of tokens.
            sql: The original SQL string, used to produce helpful debug messages.

        Returns:
            The list of the produced syntax trees.
        )parse_methodr&  r  )_parser   _parse_statement)r=   r&  r  r.   r.   r/   parse*  s   
zParser.parseexpression_typesexp.IntoTypec                 C  s   g }t |D ]9}| j|}|std| z
| |||W   S  ty? } z||jd d< || W Y d}~qd}~ww td|pE| d| t|d|d )	a$  
        Parses a list of tokens into a given Expression type. If a collection of Expression
        types is given instead, this method will try to parse the token list into each one
        of them, stopping at the first for which the parsing succeeds.

        Args:
            expression_types: The expression type(s) to try and parse the token list into.
            raw_tokens: The list of tokens.
            sql: The original SQL string, used to produce helpful debug messages.

        Returns:
            The target Expression.
        zNo parser registered for r   into_expressionNzFailed to parse 'z' into r  )	r
   EXPRESSION_PARSERSget	TypeErrorr*  r   r  r*   r   )r=   r-  r&  r  r  expression_typeparserer.   r.   r/   
parse_into<  s$   zParser.parse_intor)  0t.Callable[[Parser], t.Optional[exp.Expression]]c           
      C  s   |    |pd| _t|}g g}t|D ]&\}}|jtjkr3|jr'||g ||d k r2|g  q|d | qg }|D ]$}	d| _	|	| _
|   |||  | j	t| j
k r_| d |   q?|S )Nr%  r   r1  z%Invalid expression / Unexpected token)r#  r  r&   	enumerate
token_typer   	SEMICOLONcommentsr*   r  r  _advanceraise_errorcheck_errors)
r=   r)  r&  r  totalchunksr-   r  ra   tokensr.   r.   r/   r*  `  s,   



zParser._parseNonec                 C  s`   | j tjkr| jD ]	}tt| q	dS | j tjkr,| jr.tt	| j| j
t| jddS dS )zMLogs or raises any found errors, depending on the chosen error level setting.r0  N)r  r   WARNr  loggererrorstrRAISEr   r   r  r   )r=   rG  r.   r.   r/   r@    s   
zParser.check_errorsmessagerH  r  t.Optional[Token]c           	      C  s   |p| j p| jptd}|j}|jd }| jt|| j d| }| j|| }| j||| j  }t	j
| d|j d|j d| d| d| ||j|j|||d	}| jtjkr\|| j| d
S )z
        Appends an error in the list of recorded errors or raises it, depending on the chosen
        error level setting.
        r%  r   r   z. Line z, Col: z.
  z[4mz[0m)descriptionlinecolstart_context	highlightend_contextN)r  r  r   r   r   r   r  maxr  r   newrM  rN  r  r   r  r  r*   )	r=   rJ  r  r   r   rO  rP  rQ  rG  r.   r.   r/   r?    s0   
zParser.raise_errorrr   r_   r=  t.Optional[t.List[str]]r   c                 K  s<   |di |}|r| |n
| | | |S  | |S )af  
        Creates a new, validated Expression.

        Args:
            exp_class: The expression class to instantiate.
            comments: An optional list of comments to attach to the expression.
            kwargs: The arguments to set for the expression along with their respective values.

        Returns:
            The target expression.
        Nr.   )add_comments_add_commentsvalidate_expression)r=   rr   r=  r  instancer.   r.   r/   r3     s
   

zParser.expressionr3   r?   c                 C  s(   |r| j r|| j  d | _ d S d S d S r  )r  rU  r=   r3   r.   r.   r/   rV    s   

zParser._add_commentsr   t.Optional[t.List]c                 C  s*   | j tjkr||D ]}| | q|S )aD  
        Validates an Expression, making sure that all its mandatory arguments are set.

        Args:
            expression: The expression to validate.
            args: An optional list of items that was used to instantiate the expression, if it's a Func.

        Returns:
            The validated expression.
        )r  r   r  error_messagesr?  )r=   r3   r   error_messager.   r.   r/   rW    s   zParser.validate_expressionr   r   r   c                 C  s   | j |j|jd  S Nr   )r  r   r   r=   r   r   r.   r.   r/   	_find_sql     zParser._find_sqlr;   c                 C  s    | j o| jo| j jd | jjkS r]  )r  r  r   r   rJ  r.   r.   r/   _is_connected  s    zParser._is_connectedr   timesc                 C  sl   |  j |7  _ t| j| j | _t| j| j d | _| j dkr.| j| j d  | _| jj| _d S d | _d | _d S )Nr   r   )r  r   r  r  r  r  r=  r  )r=   rb  r.   r.   r/   r>    s   

zParser._advanceindexc                 C  s"   || j kr| || j   d S d S r  )r  r>  r=   rc  r.   r.   r/   _retreat  s   
zParser._retreatc                 C  sJ   t | jdkr	d S | | jd | jd d | j }td| d d S )Nr   r   r1  'zF' contains unsupported syntax. Falling back to parsing as a 'Command'.)r&   r  r_  r  rF  warning)r=   r  r.   r.   r/   _warn_unsupported  s   "
zParser._warn_unsupportedexp.Commandc                 C  s*   |    | jtj| j| jj |  dS )N)r=  r!   r3   )	rh  r3   r   Commandr  r  r  r  r  rJ  r.   r.   r/   _parse_command  s   
zParser._parse_commandt.Callable[[], T]retreatt.Optional[T]c              	   C  sp   | j }| j}tj| _z z| }W n ty   d}Y nw W |r!|r&| | || _|S |r/|r4| | || _w )a  
        Attemps to backtrack if a parse function that contains a try/catch internally raises an error.
        This behavior can be different depending on the uset-set ErrorLevel, so _try_parse aims to
        solve this by setting & resetting the parser state accordingly
        N)r  r  r   r  r   re  )r=   r)  rm  rc  r  r!   r.   r.   r/   
_try_parse   s    


zParser._try_parseallow_existsc                 C  s   | j }|r	|  nd }| tj | d}| | jo| j }|s&| |S |j	tj
tjfv r7| j|j	d}n|j	tjkrE| j| jd}n|j	tjkrP|  }n|  }| tj | jtj||j|  ||dS )Nrf  kindalias_tokens)r!   rr  r3   existsmaterialized)r  _parse_existsr  r   rs  r  r  
CREATABLES_parse_as_commandr;  FUNCTION	PROCEDURE_parse_user_defined_functionTABLErO  COMMENT_TABLE_ALIAS_TOKENSCOLUMNrM  r_  ISr3   r   Commentr  r  )r=   rp  r   ru  rv  rr  r!   r.   r.   r/   r    s.   


zParser._parse_commentexp.ToTablePropertyc                 C  s   | j dd}| jtj|dS r  )rv  r3   r   ToTableProperty)r=   tabler.   r.   r/   r  4  s   zParser._parse_to_tablec                   s^   d fdd}  |}  }  }d }|r$ tjr$   j} jtj	||||dS )Nr   r?   c                    s      }  dr jtj| ddS  dr" jtj|    dS  ddr3 jtj|   dS  dd	rD jtj|   d
S | S )Nr  T)r!   delete
RECOMPRESS)r!   
recompressr  DISK)r!   to_diskVOLUME)r!   	to_volume)rA   r  r3   r   MergeTreeTTLActionr  r    rJ  r.   r/   _parse_ttl_action<  s    

z,Parser._parse_ttl.<locals>._parse_ttl_action)ra   r  rd  
aggregatesr   r?   )
r  r|  rZ  r  r   r  _parse_set_itemr3   r   r  )r=   r  ra   r  rd  r  r.   rJ  r/   r  ;  s   
zParser._parse_ttlc                 C  s   | j d u rd S | | jr"| j}| j| jj | }|j|dd |S | | jjj	r.| 
 S |  }|r9| |n|  }| |S )NT)prepend)r  r  STATEMENT_PARSERSr  r  r;  rU  rG   tokenizer_classCOMMANDSrk  rT  _parse_set_operationsrr  _parse_query_modifiers)r=   r=  stmtr3   r.   r.   r/   r+  `  s   

zParser._parse_statementru  exp.Drop | exp.Commandc                 C  s   | j }| tj}| d}| | jo| j j }|s!| 	|S | d}|p+| 
 }|dkr5|  }n| jd| j jtjkd}| tjrK|  nd }	| jtjddr\| | j}
nd }
| jtj|||
| jj|pm|||| d| d	| d
|	|dS )Nrf  CONCURRENTLYr  TrP  is_db_referenceFadvanceCASCADECONSTRAINTSPURGE)ru  r!   ra   rr  	temporaryrv  cascadeconstraintspurgerx  concurrently)r  r  r   r  r  r  rx  r  r  ry  rw  rM  rv  r;  r  rs  rt  L_PARENr;  rR  r3   r   DroprG   CREATABLE_KIND_MAPPINGr3  )r=   ru  r   r  rv  rr  r  	if_existsr!   rx  ra   r.   r.   r/   r  q  s>   



zParser._parse_dropr  r   c                 C  s(   |  do| p| tjo| tjS )Nr#  )r  r  r   r  EXISTS)r=   r  r.   r.   r/   rw    s
   

zParser._parse_existsexp.Create | exp.Commandc                   sP  | j }|jtjkp| tjtjp| tjtj}| tjtj}| tj	}| 
ddr0d}n| 
dds;| 
dr>d}nd }| jtjtjddrN|   d  | | joX| j }|sq|   | | jog| j } rl|sq| |S | 
d}| jdd}d }	d }
d }d }d }d }d }d fdd}|jtjtjfv r| j|jd}	||   | tjo|  }
||   |
s| tjr| | j }
n'| tj}| 
d}| jtjddr|  }
||   n|  }
| 
d}|r| jtj|
d}
n|jtjkr| tj s| ! }d}nd }d}| j"||d}	n|j| j#v r| j$d|jtj%kd}| tj& || jdd | j'|d}	||   | tj}| j| j(dds[||   |jtj)krm| * }
||   n| + }
|
s}|r}| ,| j$}
|jtjkr||   g }	 | " }||   |sn| tj& |-| qn#|jtj.kr| 
ddddrd}n|jtj/tj0fv r||   | 
d}| 1| j2r| j j34 dk}| jtj5| j6dd||d}| j7r| jtj8tj&fdds| |S |j39 }| jtj:f|	| j;j<=|p|||||
| |||||||dS ) Nr  COLUMNSTORETr  Fr  r  r  
temp_propst.Optional[exp.Properties]r   rD  c                   s*    r| r j | j  d S | r|  d S d S r  )ra   extend)r  
propertiesr.   r/   extend_props  s
   z*Parser._parse_create.<locals>.extend_propsrq  RETURNr  r    )rc  	anonymousr  )beforer  rq  r  r  SHALLOWr#   r  )r!   shallowr#   )r!   rr  replacerefreshuniquer3   ru  r  indexesno_schema_bindingbeginr   cloner  	clustered)r  r  r   rD  )>r  r;  r   r  _match_pairORr  REFRESHr  r  r  r}  rz  r>  r  rx  rk  ry  rw  r{  r|  r  _parse_heredocCOMMANDBEGINSTRINGr  '_parse_user_defined_function_expressionr3   r   ReturnINDEXrs  r_  _parse_indexDB_CREATABLESrv  r  rW  rR  DDL_SELECT_TOKENSSEQUENCErR  _parse_ddl_selectro  r*   VIEWSINKr  _match_textsCLONE_KEYWORDSr  lowerClonerO  r  R_PARENr  CreaterG   r  r3  )r=   r   r  r  r  r  create_tokenr  ru  r!   r3   r  r  r  r   r  r  return_rc  r  table_parts	has_aliasr  r#   create_kind_textr.   r  r/   r    s   





 

zParser._parse_create"t.Optional[exp.SequenceProperties]c                 C  sX  t  }g }| j}| jr| tj | dr*| d | d |d| 	  nl| dr8|d| 	  n^| drF|d| 	  nP| tj
sQ| d	r_| d |d
| 	  n7| dro|d|  pld n'| ddr|d| drd n|   n| j| jdd}|r|| nn| js|d|r|nd  | j|krd S |S )N	INCREMENTr  =	incrementr  minvaluer  maxvalueSTARTr   r  cacheTOWNEDownedr  Fraise_unmatchedoptions)r   SequencePropertiesr  r  r  r   rW  r  rd   _parse_term
START_WITH_parse_numberrM  _parse_var_from_optionsr  r*   )r=   seqr  rc  optr.   r.   r/   _parse_sequence_propertiesN  s6   






 z!Parser._parse_sequence_propertiesc              
   C  s   |  tj | d| d| d| d| drdp$| ddo$d| d| d	| d
d}| | jrh| j| jj  }z|| fi dd |	 D W S  t
yg   | d| jj d Y d S w d S )Nrq  DUALr  r  r  r  z	NOT LOCALAFTER)MINMINIMUM)MAXMAXIMUM)nodualr  defaultlocalafterminimummaximumc                 S  s   i | ]	\}}|r||qS r.   r.   )r   kvr.   r.   r/   r     r   z1Parser._parse_property_before.<locals>.<dictcomp>zCannot parse property 'rf  )r  r   rW  r  r  r  r  r  r  itemsr4  r?  )r=   r  r6  r.   r.   r/   _parse_property_beforeq  s(    zParser._parse_property_beforet.List[exp.Expression]c                 C  r-  r  )r;  _parse_propertyrJ  r.   r.   r/   r       z Parser._parse_wrapped_propertiesc                 C  s&  |  | jr| j| jj  | S | tjr*|  | jr*| j| jj  | ddS | ddr6| j	ddS | ddrG| j
tj| dd	S | j}|  }| tjs]| | |  S t|tjrtt|jd
krn| nt|j}|  p}| jdd}t|tjrt|j}| j
tj||dS )NT)r  r  r  r  SQLr  r"  )definerr   r  r!   value)r  r  r  r  r  r  r   r  r  r  r3   r   SqlSecurityPropertyr  rM  EQre  r  rW   Columnr&   partsto_dotr   r   rA   r  Property)r=   rc  r   r  r.   r.   r/   r    s&   
"zParser._parse_property;t.Union[exp.FileFormatProperty, exp.StorageHandlerProperty]c                 C  s   |  dr| jtj|  dS | tj |  dr|  nd }|  dr)|  nd }| jtj	|s3|r?| jtj
||dddS |  pJ|  pJ|  ddS )Nr  r    INPUTFORMATOUTPUTFORMAT)input_formatoutput_formatT)r!   hive_format)r  r3   r   StorageHandlerPropertyr  r  r   r  r  rD  InputOutputFormatr  r_  )r=   r  r  r.   r.   r/   r    s(   
	zParser._parse_storedc                 C  s(   |   }t|tjr|jst|}|S r  )_parse_fieldrW   r   
Identifierquotedr   )r=   fieldr.   r.   r/   _parse_unquoted_field  s   
zParser._parse_unquoted_fieldr  t.Anyc                 K  s2   |  tj |  tj | j|fd|  i|S Nr!   )r  r   r
  r  r3   r  )r=   rr   r  r.   r.   r/   r    s   z!Parser._parse_property_assignmentr  r  c                 C  sT   g }	 |r
|   }n|  }|snt|D ]}|| qq|r(| jtj|dS d S )NTru   )r  r  r
   r*   r3   r   r  )r=   r  r  proppr.   r.   r/   rk    s   

zParser._parse_propertiesr  exp.FallbackPropertyc                 C  s   | j tj|| ddS )N
PROTECTION)r  
protection)r3   r   FallbackPropertyr  r=   r  r.   r.   r/   rA       zParser._parse_fallback t.Optional[exp.SecurityProperty]c                 C  s*   |  dr| jj }| jtj|dS d S )N)r  r"  INVOKERr    )r  r  r  r  r3   r   SecurityProperty)r=   security_specifierr.   r.   r/   r    s   
zParser._parse_securityexp.SettingsPropertyc                 C  r  r   )r3   r   SettingsPropertyr  r0  rJ  r.   r.   r/   r    r%  zParser._parse_settings_property,exp.VolatileProperty | exp.StabilityPropertyc                 C  sP   | j dkr| j| j d  }nd }|r|j| jv rt S | jtjtj	ddS )Nr"   r  r    )
r  r  r;  PRE_VOLATILE_TOKENSr   VolatilePropertyr3   r)  r   r   )r=   pre_volatile_tokenr.   r.   r/   r    s   
zParser._parse_volatile_propertyexp.Varc                 C  s8   |   }|r| dnd}| jdd}t| | S )Nr   r%  Tr  )r  r  r   r   )r=   r   
number_strr   r.   r.   r/   _parse_retention_period  s   zParser._parse_retention_periodwith_ exp.WithSystemVersioningPropertyc                 C  s   |  tj | jtjfi d|d}| dr |dd |S |  tj |  tj	rv| j
rv|  tjsv| ddrD|d|   n#| d	drY|d
|  oV| jj  n| ddrg|d|   |  tj | j
rv|  tjr5|S )NT)onwithOFFr5  FHISTORY_TABLEr  r!   DATA_CONSISTENCY_CHECKdata_consistencyHISTORY_RETENTION_PERIODretention_period)r  r   r
  r3   r   WithSystemVersioningPropertyr  rd   rs  r  r  r  rv  _advance_anyr  r  r  r2  rW  )r=   r3  r  r.   r.   r/   r  	  s.   

z(Parser._parse_system_versioning_propertyexp.DataDeletionPropertyc                 C  s   |  tj | dp| d }| jtj|d}|  tjrT| jrT|  tj	sT| ddr7|
d|   n| ddrE|
d|   |  tj | jrT|  tj	r(|S )	Nrs  r7  r5  FILTER_COLUMNr  filter_columnRETENTION_PERIODr<  )r  r   r
  r  r3   r   DataDeletionPropertyr  r  r  rd   rM  r2  rW  )r=   r5  r  r.   r.   r/   r!  !	  s   z$Parser._parse_data_deletion_propertyexp.DistributedByPropertyc                 C  sl   d}d }|  ddr| | j}n|  ddrd}d }|  dr)|  ds)|  }| jtj||||  dS )Nr  r  RANDOMBUCKETSr  )ra   rr  bucketsri  )r  r;  r_  r  r3   r   DistributedByPropertyri  )r=   rr  ra   rH  r.   r.   r/   r+  1	  s    z"Parser._parse_distributed_propertyr8   c                 C  s    |  d |  }| j||dS )NKEYru   )r  _parse_wrapped_id_varsr3   )r=   r8   ra   r.   r.   r/   r-  F	  s   
z$Parser._parse_composite_key_property3t.Optional[exp.Expression] | t.List[exp.Expression]c                 C  s  |  ddr| jdd}|   |S | jtjddr|  S |  dr'|  S | | j	r9| j
tj| jj dS |  d	rD| jdd
S |  dd	rP| jdd
S | jtjddr^| jddS | tjrp| j
tj| | jdS | j| jddr| j
tj| | jdS | jsd S |  S )N(r  T)r3  Fr  rS  r    DATAr  rq  ru   )r  r  _match_r_parenr  r   r  r  _parse_withjournaltabler  VIEW_ATTRIBUTESr3   r   ViewAttributePropertyr  r  r  _parse_withdataSERDE_PROPERTIES_parse_serde_propertiesr  WithSchemaBindingPropertyr  r  r  WithProcedureOptionsr  _parse_procedure_optionr  _parse_withisolatedloading)r=   r  r.   r.   r/   r  K	  s8   


zParser._parse_with_propertyexp.Expression | Nonec                 C  s<   |  ddr| jtj| j| jddp|  dS | | jS )Nr<  r  Fr  r    )r  r3   r   r=  r  r  r  r  rJ  r.   r.   r/   rY  r	  s   zParser._parse_procedure_optiont.Optional[exp.DefinerProperty]c                 C  s^   |  tj |  }|  tj |  p|  tjo| jj}|r"|s$d S tj	| d| dS )N@r    )
r  r   r
  r_  	PARAMETERr  r  r  r   DefinerProperty)r=   userhostr.   r.   r/   r#  }	  s   zParser._parse_definerexp.WithJournalTablePropertyc                 C  s,   |  tj |  tj | jtj|  dS r  )r  r   r}  r
  r3   r   WithJournalTablePropertyrv  rJ  r.   r.   r/   rQ  	  s   zParser._parse_withjournaltableexp.LogPropertyc                 C  r  )NrO  )r3   r   LogPropertyr$  r.   r.   r/   re  	     zParser._parse_logexp.JournalPropertyc                 K  r  r  )r3   r   JournalPropertyr  r.   r.   r/   rT  	     zParser._parse_journalexp.ChecksumPropertyc                 C  sJ   |  tj d }|  tjrd}n| drd}| jtj||  tjdS )NTr7  F)r5  r  )	r  r   r
  rs  r  r3   r   ChecksumPropertyr  )r=   r5  r.   r.   r/   r  	  s   
zParser._parse_checksumr  exp.Clusterc                 C  s,   | j tj|r| | jdS | | jdS r   )r3   r   rH  r;  rj  r  )r=   r  r.   r.   r/   r  	  s   
zParser._parse_clusterexp.ClusteredByPropertyc                 C  s   |  d |   | | j}|   |  ddr(|   | | j}|   nd }| tj | 	 }|  d | j
tj|||dS )Nr  SORTEDrG  )ra   	sorted_byrH  )r  _match_l_parenr  rM  rP  rj  r  r   INTOr  r3   r   ClusteredByProperty)r=   ra   ro  rH  r.   r.   r/   r  	  s$   


zParser._parse_clustered_by"t.Optional[exp.CopyGrantsProperty]c                 C  s*   |  ds| | jd  d S | tjS )NGRANTSr   )r  re  r  r3   r   CopyGrantsPropertyrJ  r.   r.   r/   r  	  s   
zParser._parse_copy_propertyexp.FreespacePropertyc                 C  s*   |  tj | jtj|  |  tjdS )Nr!   percent)r  r   r
  r3   r   FreespacePropertyr  PERCENTrJ  r.   r.   r/   rF  	  s   zParser._parse_freespacer  exp.MergeBlockRatioPropertyc                 C  s<   |  tjr| jtj|  |  tjdS | jtj||dS )Nrw  )r  r  )r  r   r
  r3   r   MergeBlockRatioPropertyr  rz  )r=   r  r  r.   r.   r/   ri  	  s   
zParser._parse_mergeblockratior  r  exp.DataBlocksizePropertyc                 C  sB   |  tj |  }d }| dr| jj}| jtj	|||||dS )N)BYTESKBYTES	KILOBYTES)sizeunitsr  r  r  )
r  r   r
  r  r  r  r  r3   r   DataBlocksizeProperty)r=   r  r  r  r  r  r.   r.   r/   r  	  s   
zParser._parse_datablocksizeexp.BlockCompressionPropertyc                 C  sb   |  tj | d}| d}| d}| d}d }| dr%|  }| jtj|||||dS )NALWAYSMANUALNEVERr  AUTOTEMP)alwaysmanualneverr  autotemp)r  r   r
  r  rR  r3   r   BlockCompressionProperty)r=   r  r  r  r  r  r.   r.   r/   r  	  s    




zParser._parse_blockcompression't.Optional[exp.IsolatedLoadingProperty]c                 C  sX   | j }| d}| d}| dds| | d S | j| jdd}| jtj|||dS )Nrq  
CONCURRENTISOLATEDLOADINGFr  )r  
concurrenttarget)r  r  re  r  r  r3   r   IsolatedLoadingProperty)r=   rc  r  r  r  r.   r.   r/   rZ  
  s   



z!Parser._parse_withisolatedloadingexp.LockingPropertyc                 C  s  |  tjr	d}n|  tjrd}n|  tjrd}n
| dr#d}nd }|dv r.|  }nd }|  tjr9d}n|  tjrBd}nd }| drLd}n*| 	d	rTd
}n"| dr\d}n| drdd}n| drld}n
| drtd}nd }| d}| j
tj|||||dS )Nr}  r  r  r  )r  r}  r  r  INACCESS)EXCLr  r  SHAREr  r  r  OVERRIDE)r!   rr  	for_or_in	lock_typeoverride)r  r   r}  r  r  r  rv  r  r  r  r3   r   LockingProperty)r=   rr  r!   r  r  r  r.   r.   r/   rc  
  sN   








zParser._parse_lockingc                 C  s   |  tjr| | jS g S r  )r  r   PARTITION_BYr  r0  rJ  r.   r.   r/   _parse_partition_byE
  s   zParser._parse_partition_byexp.PartitionBoundSpecc                   s   d fdd}d }d }d }d }  tjr  j}n5  tjr2 |} d  |}n dddrL  } d	d
   }   n 	d  j
tj||||dS )Nr   r?   c                     s0     dr
tdS   drtdS   S )Nr  r  )r  r   r   rA   r.   rJ  r.   r/   _parse_partition_bound_exprK
  s
   



zGParser._parse_partition_bound_spec.<locals>._parse_partition_bound_exprr  r  rM  MODULUS,	REMAINDERz%Failed to parse partition bound spec.)r!   r3   from_expressionsto_expressionsr  )r  r   r  r;  rA   FROMr  r  rP  r?  r3   r   PartitionBoundSpec)r=   r  r!   r3   r  r  r.   rJ  r/   _parse_partition_bound_specJ
  s0   



z"Parser._parse_partition_bound_spec%t.Optional[exp.PartitionedOfProperty]c                 C  st   |  ds| | jd  d S | jdd}| tjr!td}n|  ddr,| 	 }n| 
d | jtj||d	S )
NOFr   Tr  r  r  VALUESz.Expecting either DEFAULT or FOR VALUES clause.r2   )r  re  r  rO  r  r   r  r   r   r  r?  r3   PartitionedOfPropertyrC   r.   r.   r/   ry  n
  s   


zParser._parse_partitioned_ofexp.PartitionedByPropertyc                 C  s.   |  tj | jtj|  p| |  dS r  )	r  r   r
  r3   r   PartitionedByPropertyrR  _parse_bracketr  rJ  r.   r.   r/   rm  ~
  s
   zParser._parse_partitioned_byexp.WithDataPropertyc                 C  s<   |  ddr	d}n|  dddrd}nd }| jtj||dS )NAND
STATISTICSTrq  F)r  
statistics)r  r3   r   WithDataProperty)r=   r  r  r.   r.   r/   rT  
  s   zParser._parse_withdata$t.Optional[exp.SqlReadWriteProperty]c                 C  s   |  dr| jtjddS d S )Nr  zCONTAINS SQLr    r  r3   r   SqlReadWritePropertyrJ  r.   r.   r/   r  
  s   
zParser._parse_contains_propertyc                 C      |  ddr| jtjddS d S )Nr  rN  zMODIFIES SQL DATAr    r  rJ  r.   r.   r/   rk  
     zParser._parse_modifies_propertyc                 C  s2   |  ddr
t S |  dr| jtjddS d S )NPRIMARYr  r  zNO SQLr    )r  r   NoPrimaryIndexPropertyr3   r  rJ  r.   r.   r/   rr  
  s
   
zParser._parse_no_propertyc                 C  sJ   |  dddrt S |  dddrtjddS | jtj| |  dS )NCOMMITPRESERVEROWSr  T)r  r    )r  r   OnCommitPropertyr3   r  rR  r_  rJ  r.   r.   r/   rt  
  s
   zParser._parse_on_propertyc                 C  r  )Nr  rN  zREADS SQL DATAr    r  rJ  r.   r.   r/   r  
  r  zParser._parse_reads_propertyexp.DistKeyPropertyc                 C  r  r  )r3   r   DistKeyPropertyr  r_  rJ  r.   r.   r/   r2  
     zParser._parse_distkeyt.Optional[exp.LikeProperty]c              	   C  sv   | j dd}g }| dr2| jj }|  }|sd S || jtj	|t
|j d | ds| jtj||dS )NTr  )	INCLUDING	EXCLUDINGr  r-  )rO  r  r  r  r  r_  r*   r3   r   r  r   r!   LikeProperty)r=   r  r  r!   id_varr.   r.   r/   r^  
  s   

zParser._parse_create_liker  exp.SortKeyPropertyc                 C  s   | j tj|  |dS )Nr!   r  )r3   r   SortKeyPropertyrK  r=   r  r.   r.   r/   r  
  s   zParser._parse_sortkeyexp.CharacterSetPropertyc                 C  s"   |  tj | jtj|  |dS )Nr!   r  )r  r   r
  r3   r   CharacterSetPropertyr  )r=   r  r.   r.   r/   r  
  s   zParser._parse_character_set%exp.RemoteWithConnectionModelPropertyc                 C  s    |  dd | jtj|  dS )Nr  
CONNECTIONr    )r  r3   r   !RemoteWithConnectionModelPropertyrv  rJ  r.   r.   r/   r  
  s   
z$Parser._parse_remote_with_connectionexp.ReturnsPropertyc                 C  s   d }|  tj}|r2|  tjr)| jtjd| | jd}|  tj	s(| 
d n| td}n| ddddr?d}d }n|  }| jtj|||dS )	Nr}  r-  Expecting >r  rs  rP  T)r!   is_tablenull)r  r   r}  LTr3   r   Schemar  _parse_struct_typesGTr?  rR  r   r  rR  ReturnsProperty)r=   r  r  r  r.   r.   r/   r  
  s$   

zParser._parse_returnsexp.Describec              	   C  s   |  | jo	| jj}| | jo| jj }| tj	r&d }| 
| jd  | jtjddr2|  nd }| j | jddrA|  }n| jdd}|  }|rP|jnd }|  }| jtj||||||dS )Nr"   Fr  Tr  )r!   stylerr  ra   	partitionformat)r  rx  r  r  r  DESCRIBE_STYLESr  r  r   DOTre  r  rB  r  r  r+  rO  rk  ra   _parse_partitionr3   r   Describe)r=   rr  r  r  r!   r  ra   r  r.   r.   r/   r  
  s*   
zParser._parse_describeexp.MultitableInsertsc                   s^    j j }g }d fdd}| }|d ur"|| | }|d us jtj|||  dS )Nr   !t.Optional[exp.ConditionalInsert]c                    sp     tjr  }   tj nd }   tj}  tjs!d S  jtj	 jtj
 jdd  d| |dS )NTr  r2   )r!   r3   else_)r  r   WHENr  THENELSErq  r3   r   ConditionalInsertInsertrO  _parse_derived_table_values)r3   r  rJ  r.   r/   parse_conditional_insert  s"   
zBParser._parse_multitable_inserts.<locals>.parse_conditional_insert)rr  r=  ra   source)r   r  )r  r  r  r*   r3   r   MultitableInsertsrO  )r=   r=  rr  ra   r  r3   r.   rJ  r/   _parse_multitable_inserts  s   
z Parser._parse_multitable_inserts*t.Union[exp.Insert, exp.MultitableInserts]c           
      C  s  g }|   }| tj}| tj}| d}d }d }| dr1| jtj| 	 || j
ddd}na| tjtjfrF|t| j7 }| |S | tjrV| | joU| jj}| tj |t| j7 }| tj | tj}|sx| jdddn|  }t|tjr| jtjddr|d	|   |   }	| jtj!fi d
|d|d|d|d| do| " d| ddd| # d| $tj%tj&o| ' d| tj(o| ) d| do| * d| + p| , d| - d|	p|   d|d|d|d| tjo|  S S )Nr  	DIRECTORYT)	match_row)r!   r  
row_format)rP  parse_partitionFr  aliasr=  hintis_functionr!   storedr  by_namer  rU  ru  r  r  settingsr  r3   conflict	returning	overwritealternativeignorer  )._parse_hintr  r   	OVERWRITEr  r  r3   r   	Directoryr  _parse_row_formatr  FIRSTr  r
   r  r  r  r  INSERT_ALTERNATIVESr  r  rq  r}  rz  rO  r  rW   Tabler  rd   rw  rp  r  r  rw  r  r  r  r0  r  rm  r  r  r  _parse_on_conflict)
r=   r=  r  r  r  r  r   r  r!   r  r.   r.   r/   r  ,  s   



	

zParser._parse_insertexp.Killc                 C  s2   |  drt| jjnd }| jtj|  |dS )N)r  QUERYr!   rr  )r  r   r   r  r  r3   Killr  r=   rr  r.   r.   r/   r  h  s   zParser._parse_killt.Optional[exp.OnConflict]c              	   C  s   |  dd}|  ddd}|s|sd S d }d }|r4|  ddr$|  }n| tjr4| | j}|   | | j}| j	j
tjkrN| tj | | j}nd }| jtj||||||  dS )Nrs  CONFLICTr,  rJ  
CONSTRAINT)	duplicatera   actionconflict_keys
constraintr  )r  r_  r  r   r  r  rP  r  r  r  r;  r  r  r  r3   r   
OnConflictr|  )r=   r  r  r  r  r  ra   r.   r.   r/   r	  q  s4   
zParser._parse_on_conflictt.Optional[exp.Returning]c                 C  s:   |  tjsd S | jtj| | j|  tjo| 	 dS )N)ra   into)
r  r   	RETURNINGr3   r   	Returningr  rT  rq  _parse_table_partrJ  r.   r.   r/   rp    s   
zParser._parse_returningGt.Optional[exp.RowFormatSerdeProperty | exp.RowFormatDelimitedProperty]c                 C  s   |  tjsd S |  S r  )r  r   rB  r  rJ  r.   r.   r/   r    s   zParser._parse_rowt.Optional[exp.SerdeProperties]c                 C  sL   | j }|p	| d}| tjs| | d S | jtjfi | 	 |dS )Nr  )ra   r6  )
r  r  r  r   rU  re  r3   r   SerdePropertiesr  )r=   r3  rc  r.   r.   r/   rV    s   
zParser._parse_serde_propertiesr  c                 C  s  |r|  tjtjsd S | dr"|  }|  }| jtj	||dS | d i }| dddrB|  |d< | ddrB|  |d	< | d
dddrP|  |d< | ddddr^|  |d< | dddrk|  |d< | dddrx|  |d< | jtj
fi |S )NSERDE)r!   serde_properties	DELIMITEDr  
TERMINATEDr  fieldsESCAPEDescaped
COLLECTIONITEMScollection_itemsMAPKEYSmap_keysLINESlinesr  DEFINEDr  r  )r  r   r  rB  r  r  rV  r3   r   RowFormatSerdePropertyRowFormatDelimitedProperty)r=   r  r!   r   r  r.   r.   r/   r    s.   

zParser._parse_row_formatexp.LoadData | exp.Commandc                 C  s   |  drC|  d}|  d |  }| tj}| tjtj | jt	j
| jdd||||  |  do8|  |  do@|  dS | | jS )	NrN  r  INPATHTr  r  r  )r!   r  r  inpathr  r  serde)r  r  r  r   r  r  rq  r}  r3   r   LoadDatarO  r  ry  r  )r=   r  r3  r  r.   r.   r/   r    s"   




zParser._parse_load
exp.Deletec              
   C  s   d }| j tjdds| | jpd }|  }| jtj||  tjo&| jdd|  tj	o1| jdd|  tj
o:|  |  |pB|  |  dS )NFr  TrV  )tablesr!   usingrx  r  r  rk  )r  r   r  r  rO  rp  r3   r   r  r  rs  rt  r|  re  )r=   r7  r  r.   r.   r/   r    s   
zParser._parse_delete
exp.Updatec                 C  sp   | j d| jd}| tjo| | j}|  }| jt	j
fi ||| jdd|  |p-|  |  |  dS )NT)rW  rt  rV  )r!   ra   fromr  r  ri  rk  )rO  UPDATE_ALIAS_TOKENSr  r   r  r  r  rp  r3   r   UpdaterX  r|  ri  re  )r=   r!   ra   r  r.   r.   r/   r    s   

zParser._parse_updateexp.Usec                 C  s&   | j tj| j| jdd| jdddS )NFr  r  )rr  r!   )r3   r   User  r  rO  rJ  r.   r.   r/   r    s
   
zParser._parse_useexp.Uncachec                 C  s4   |  tjs| d | jtj|  | jdddS )NzExpecting TABLE after UNCACHETr  ru  r!   )	r  r   r}  r?  r3   r   Uncacherw  rO  rJ  r.   r.   r/   r    s
   
zParser._parse_uncache	exp.Cachec                 C  s   |  d}| tj | jdd}g }|  dr2|   |  }| tj |  }||g}|   | tj	 | j
tj|||| jdddS )NLAZYTr  OPTIONS)nested)r!   lazyr  r3   )r  r  r   r}  rO  rp  r  r
  rP  r  r3   r   Cacherr  )r=   rF  r  r  r  r  r.   r.   r/   r    s&   


zParser._parse_cachet.Optional[exp.Partition]c                 C  s6   |  | jsd S | jtj| jj dk| | j	dS )Nr  )subpartitionra   )
r  PARTITION_KEYWORDSr3   r   	Partitionr  r  r  r;  r0  rJ  r.   r.   r/   r  1  s   
zParser._parse_partitionr%   t.Optional[exp.Tuple]c                   s^   d fdd}  tjr |}    jtj|dS   }|r- jtj|gdS d S )Nr   r?   c                     s.    j jr tjrt jj	 S  
 S r  )rG   SUPPORTS_VALUES_DEFAULTr  r   r  r   r   r  r  r  rT  r.   rJ  r.   r/   _parse_value_expression<  s   z4Parser._parse_value.<locals>._parse_value_expressionru   r  )	r  r   r  r  rP  r3   r   TuplerT  )r=   r%   rN  ra   r3   r.   rJ  r/   ry  ;  s   
zParser._parse_valuec                 C  rL  r  )_parse_expressionsrJ  r.   r.   r/   _parse_projectionsL     zParser._parse_projectionsr  c                 C  s   |  tjtjfr| j| jjtjkd}|S | tjrB| j	ddd}| 
 }|r3|d| |}|S tdttj|}|S |rJ| jddn| j
ddd}|rjt|tjrj|jrj|jd	  }tj||d
}| | |}|S )Nr  T)skip_from_tokenconsume_piper:  *rT  F)rE  parse_set_operationr  r!   r  )r  r   r  r  r  r  r;  r  r  rX  rr  rd   r   selectfrom_r  castFromrO  rW   Valuesr  r   popr  r  r  )r=   r  r!   rZ  rY  r  r.   r.   r/   _parse_wrapped_selectO  s.   zParser._parse_wrapped_selectrE  parse_subquery_aliasrW  rT  c                 C  sX   | j ||||d}|r*| jtjddr*t|tjr*| |}|r(|r(|jddn|}|S )N)rE  r  r`  rW  Fr  r  )	_parse_select_queryr  r   PIPE_GTrW   r   Query_parse_pipe_syntax_querysubquery)r=   rE  r  r`  rW  rT  r  r.   r.   r/   rr  n  s   

zParser._parse_selectc              	   C  s  |   }|r-|  }|s| d |S d|jv r |d| |S | |j d |}|S | jtjddr;| j	ddnd }| tj
r| j}|  }	| jra| jjtjksa| tj}
| | j}nd\}
}| tjou| d	ou| jj }|r| jtj| tjr| jdd
nd d}|
r|r| d g }| jr| | jr|t | jj  | jr| | js| j!dd}| " }| jtj#||	||||pd d}||_$| % }|r|d| |s| 	 }|r|d| | &|}n|s|r| tj'r| j(|d}| )  | j*||dS | jtj+ddr| , }n`|r+t-dj.|j/dd}nQ| tj0rO| tj1}| 2 pE| 3 pE| 4 }| jtj5||dS | tj6r[| 7 }n!| 8drz| 9 }|rq| jtj:|d}n| ;| j<d  nd }|r| =|S |S )Nz+Failed to parse any statement following CTEr6  z does not support CTEFr  TrV  NN)r$  r  rx  r@  z1Cannot specify both ALL and DISTINCT after SELECT)top)rr  r  distinctra   rk  operation_modifiersr  r:  r  )parse_aliasrU  r  )r!   r  r  r    r   )>r~  r+  r?  	arg_typesrd   r   r  r   r  rX  r  r  r  r  r;  r  r  r  DISTINCT_TOKENSr  r  r  r  r  r3   r   Distinctrs  ry  r  r  r*   r   re  rQ  Selectr=  _parse_intor  r  r_  rP  _parse_subqueryr  r  rY  rZ  r!   	SUMMARIZEr}  rr  r  rO  	SummarizeDESCRIBEr  r  r  Streamre  r  r  )r=   rE  r  r`  rW  cter!   rZ  r=  r  all_rh  rr  ri  rk  projectionsr  r.   r.   r/   ra    s   



	

zParser._parse_select_query#t.Optional[exp.RecursiveWithSearch]c                 C  sl   |  d | | jo| jj }|sd S |  dd | jtj|| 	 |  do+| 	 |  do3| 	 dS )NSEARCHr  r  r  r  )rr  r!   r3   r8  )
r  r  RECURSIVE_CTE_SEARCH_KINDr  r  r  r3   r   RecursiveWithSearchr_  r  r.   r.   r/   _parse_recursive_with_search  s   
z#Parser._parse_recursive_with_searchskip_with_tokent.Optional[exp.With]c                 C  s   |s
|  tjs
d S | j}|  tj}d }g }	 |  }t|tjr.|	| |r.|
| |  tjs;|  tjs;n
|  tj | j}q| jtj||||  dS )NT)r=  ra   	recursivesearch)r  r   r  r  	RECURSIVE
_parse_cterW   r   CTEr*   rU  rW  r3   Withr}  )r=   r~  r=  r  last_commentsra   rv  r.   r.   r/   r~    s0   

zParser._parse_witht.Optional[exp.CTE]c              
   C  s   | j }| | j}|r|js| d | tjs#| js#| 	| d S | j
}| ddr/d}n
| dr7d}nd }| jtj| | j|||d}|j}t|tjrt|jrb|dtd| |S |dtdtj|d	dd
 |S )NzExpected CTE to have aliasr  rf  FT)r!   r  rv  r=  r!   rU  _valuesrj  )r  rw  ID_VAR_TOKENSr!   r?  r  r   r  OPTIONAL_ALIAS_TOKEN_CTEre  r  r  r3   r   r  r  r+  rW   r]  r  rd   rY  rZ  alias_)r=   rc  r  r=  rv  rv  r%   r.   r.   r/   r  *  s6   




$zParser._parse_ctert  #t.Optional[t.Collection[TokenType]]t.Optional[exp.TableAlias]c                 C  s   |   rd S | tj}| j||p| jdp|  }| j}| tjr5| 	| j
}|r/|  n| | nd }|s=|s=d S | jtj||d}t|tjrS||  |S )Nr  rC  r!   columns)_can_parse_limit_or_offsetr  r   r  r_  TABLE_ALIAS_TOKENS_parse_string_as_identifierr  r  r  _parse_function_parameterrP  re  r3   r   
TableAliasrW   r  rU  pop_comments)r=   rt  r  r  rc  r  table_aliasr.   r.   r/   rw  O  s$   zParser._parse_table_aliasr!   rk  t.Optional[exp.Subquery]c                 C  s2   |sd S | j tj||  |r|  nd |  dS )N)r!   pivotsr  rs  )r3   r   Subquery_parse_pivotsrw  rv  )r=   r!   rk  r.   r.   r/   rq  p  s   zParser._parse_subqueryc           
      C  s  ddl m} ||jd j | jdjh}t|jdpg D ]_\}}|j}| }d|j	d< ||| jd}t
|tjrx|jdsx|jd j|v rx| }tj|gd	}	t
|jd
tjrs||j tj|	d |jd
 jgdd ||	 ||j q|S )Nr   )normalize_identifiersr:  rG   rW  Tmaybe_columnr5  ru   r  F)r  r#   )'sqlglot.optimizer.normalize_identifiersr  r   r!   r#   rG   alias_or_namer:  r3  metarW   r   r  r  r   	to_columnr  r  r  r  add)
r=   r!   _normrefsr-   joinr  normalized_tabletable_as_columnunnestr.   r.   r/   _implicit_unnests_to_explicit~  s"   

z$Parser._implicit_unnests_to_explicitc           	      C  s   t || jrj|  D ]}|d| q
t| jd D ]}|d| q	 | j| jddri| j| jj	 }|| \}}|ri|
|| |dkrh|jdd }|rhtj|d}|
d| |j}|
d	d  |
d	| q"	 | jrz|rz|jd
rz| |}|S )NrW  lateralsTFr  rk  rl  r  ra   r:  )rW   MODIFIABLES_parse_joinsr*   iterrc  r  QUERY_MODIFIER_PARSERSr  r;  rd   r   r^  r   Offsetra   SUPPORTS_IMPLICIT_UNNESTr3  r  )	r=   r!   r  lateralr6  r   r3   rl  limit_by_expressionsr.   r.   r/   r    s0   
zParser._parse_query_modifierst.Optional[exp.Hint]c                 C  s@   | j }| j r|   | j s| j| jd  }tj| ||gdS )Nr   ru   )r  r>  r  r  r   Hintr_  r^  r.   r.   r/   _parse_hint_fallback_to_string  s   z%Parser._parse_hint_fallback_to_stringc                 C  rL  r  )_parse_function_callrJ  r.   r.   r/   _parse_hint_function_call  rR  z Parser._parse_hint_function_callc                   sx    j }d}g }zt fddg D ]}|| qW n ty%   d}Y nw |s+ jr4 |   S  jtj	|dS )NFc                     s      fddS )Nc                           p	 jddS )NTr  )r  r  r.   rJ  r.   r/   r     r  z;Parser._parse_hint_body.<locals>.<lambda>.<locals>.<lambda>r  r.   rJ  r.   r/   r     s    
z)Parser._parse_hint_body.<locals>.<lambda>Tru   )
r  r  r  r   r  re  r  r3   r   r  )r=   start_indexshould_fallback_to_stringhintsr  r.   rJ  r/   r]    s"   


zParser._parse_hint_bodyc                 C  s0   |  tjr| jrtj| jd tj| jdS d S )Nr   )r  rG   )r  r   HINTr  r   maybe_parser  rG   rJ  r.   r.   r/   r    s   zParser._parse_hintt.Optional[exp.Into]c                 C  sN   |  tjsd S |  tj}| d}|  tj | jtj| j	dd||dS )Nr  Tr  )r!   r  unlogged)
r  r   rq  r  r  r}  r3   r   IntorO  )r=   tempr  r.   r.   r/   rp    s   
zParser._parse_intorW  rS  t.Optional[exp.From]c                 C  s2   |s
|  tjs
d S | jtj| j| j||ddS )N)rW  rT  r=  r!   )r  r   r  r3   r   r\  r  rO  )r=   rW  rS  rT  r.   r.   r/   rX    s   zParser._parse_fromexp.MatchRecognizeMeasurec                 C  s(   | j tj| do| jj |  dS )N)FINALRUNNING)window_framer!   )r3   r   MatchRecognizeMeasurer  r  r  r  rT  rJ  r.   r.   r/   _parse_match_recognize_measure  s
   z%Parser._parse_match_recognize_measuret.Optional[exp.MatchRecognize]c                 C  sX  |  tjsd S |   |  }|  }| dr| | jnd }| ddddr/t	
d}n5| ddddrbd	}| d
ddrE|d7 }n| dddrQ|d7 }n| dddr\|d7 }t	
|}nd }| dddrd}| dddry|d7 }n-| dddr|d7 }n!| ddr|d|  j 7 }n| ddr|d|  j 7 }t	
|}nd }| dr|   | js| d | j d!}| j}| jr|d"kr| jjtjkr|d!7 }| jjtjkr|d!8 }| j}	|   | jr|d"ks|d"kr| d | j t	
| ||	}
nd }
| d#r| | jnd }|   | jt	j||||||
||  d$	S )%NMEASURESONEr  PERrC  zONE ROW PER MATCHr  r  zALL ROWS PER MATCHSHOWr5  MATCHESz SHOW EMPTY MATCHESOMITz OMIT EMPTY MATCHESr  	UNMATCHEDz WITH UNMATCHED ROWSr  SKIPzAFTER MATCH SKIPPASTLASTz PAST LAST ROWr  NEXTz TO NEXT ROWr  z
 TO FIRST z	 TO LAST PATTERNExpecting )r   r   DEFINE)partition_byri  measuresrowsr  patterndefiner  )r  r   MATCH_RECOGNIZErp  r  ri  r  r  r  r   r   r>  r  r  r?  r;  r  r  r  r>  r_  _parse_name_as_expressionrP  r3   MatchRecognizerw  )r=   r  ri  r  r  r  r  parenr   r   r  r  r.   r.   r/   ra    s   



	zParser._parse_match_recognizet.Optional[exp.Lateral]c           	   	   C  sp  |  tjtj}|s|  tjtjrd}|d ur#| jdd}d }d }n| tjr<| jdd}| tj}| tj}nd S |si| 	 pM| 
 pM| jdd}| tjritj|| 
 p`| jddd}| tjsTd }|r| jdd}| tjr| | jng }| jtj||d}n t|tjtjfr|jr|jd  }n|  tjtj}|  }| jtj||||||dS )	NFTrj  r  r2   r  r  )r!   viewouterr  cross_apply
ordinality)r  r   CROSSAPPLYOUTERrr  r  LATERALr  _parse_unnestr  r_  r  r   Dotr  r  r3   r  rW   r  r  r  r   r^  r  
ORDINALITYrw  Lateral)	r=   r  r!   r  r  r  r  r  r  r.   r.   r/   rc  \  sX   
zParser._parse_lateral@t.Tuple[t.Optional[Token], t.Optional[Token], t.Optional[Token]]c                 C  s4   |  | jo| j|  | jo| j|  | jo| jfS r  )r  JOIN_METHODSr  
JOIN_SIDES
JOIN_KINDSrJ  r.   r.   r/   r    s   zParser._parse_join_partsc                   s   d fdd} j |ddS )Nr   r?   c                    s      } t| tjr| jS | S r  )rM  rW   r   r  r!   r    rJ  r.   r/   _parse_column_as_identifier  s   zDParser._parse_using_identifiers.<locals>._parse_column_as_identifierToptionalr  )r;  )r=   r  r.   rJ  r/   _parse_using_identifiers  s   zParser._parse_using_identifiersskip_join_tokenparse_brackett.Optional[exp.Join]c                   s   tjr%j}|rjtj|dnd }|r#jr#|	dd |S j
} \}}}jr9jjnd }	 tjpH|oH|jtjk}
j}|s[|
s[| d }d }d }tjtjd}tjtjd}|sw|
sw|sw|swd S dj di}|r|jtjkr tjr fdd|d	< |r|j|d
< |r|j|d< |r|j|d< |	r|	|d<  tjrj|d<  tjrψ |d< ng tj r܈! |d< nZ|s6|s6t"|d tj#s6|r|jtjtjfv s6j
}t$% }|r tjr |d< n|r" tj r"! |d< nd }| |d 	d|r3|nd  & |d< dd |||fD }|pJg | }jtjfd|i|S )Nr    rr  r  Fr!   r  c                        j  dS )Nr  rO  r.   r  r=   r.   r/   r     r   z$Parser._parse_join.<locals>.<lambda>ra   methodsider  match_conditionr5  r8  rW  r  c                 S  s    g | ]}|r|j D ]}|q	qS r.   )r=  )r   r  cr.   r.   r/   
<listcomp>       z&Parser._parse_join.<locals>.<listcomp>r=  )'r  r   rW  ro  rO  r3   r   JoinJOINS_HAVE_EQUAL_PRECEDENCErd   r  r  r  r+  r  r  JOINr;  STRAIGHT_JOINr  re  r  r  r  r  r   r  MATCH_CONDITIONr  _parse_comparisonrs  r0  r  r  rW   r  listr  r  )r=   r  r  r  
cross_joinrc  r  r  rr  r  r  join_commentsouter_applyr  r  rW  r=  r.   r   r/   r`    sz   





zParser._parse_joinc                 C  sF   |   }| j| jddr|S | j| jdds!| jtj||  dS |S )NFr  r2   )	r0  r  OPCLASS_FOLLOW_KEYWORDSr  OPTYPE_FOLLOW_TOKENSr3   r   Opclassrv  r  r.   r.   r/   _parse_opclass  s   zParser._parse_opclassexp.IndexParametersc           	      C  s   |  tjr| jddnd }| j tjddr| | j}nd }| dr(|  nd }| 	 }|  tj
o7|  }| dddrE| jddnd }|  }|  tjrU|  nd }| jtj||||||||d		S )
NTr  Fr  INCLUDEr  r  
TABLESPACE)r8  r  includer  r  with_storage
tablespacer5  )r  r   r  r  r  r;  _parse_with_operatorr  rK  r  r  r  r|  rs  r  r3   r   IndexParameters)	r=   r8  r  r  r  r  r  r  r5  r.   r.   r/   r    s0   zParser._parse_index_paramsr  t.Optional[exp.Index]c              	   C  s   |s|rd }d }d }|  tj |  tj | jdd}n|  tj}| d}| d}|  tjs5d S |  }d }| 	 }| j
tj||||||dS )NTr  r  AMP)r!   r  r  primaryampparams)r  r   rs  r}  rv  r  r  r  r_  r  r3   r   Index)r=   rc  r  r  r  r   r  r!  r.   r.   r/   r    s0   

zParser._parse_index"t.Optional[t.List[exp.Expression]]c              	     s   g }  tjtjr!| jtj  fddd  	  n@ 
 jratj jj d} 
tjtjf  tjrN|d  oL jj  |d   ||  
 js'|pdd S )Nc                     r  NTr  )r  r  r.   rJ  r.   r/   r   E  r  z+Parser._parse_table_hints.<locals>.<lambda>ru   r    r  ra   )r  r   r  r  r*   r3   r   WithTableHintr  rP  r  TABLE_INDEX_HINT_TOKENSIndexTableHintr  r  r  r  rJ  r  r  rd   r>  rK  )r=   r  r  r.   rJ  r/   _parse_table_hints=  s(   



zParser._parse_table_hintsrP  c                 C  s.   | r	| j ddp| jddp|  p|  S )NF)optional_parensr  )r  r_  r  _parse_placeholder)r=   rP  r.   r.   r/   r  X  s   
zParser._parse_table_partr  wildcard	exp.Tablec                 C  sv  d }d }| j |d}| tjr2|r | jtj|| j |dd}n|}|}| j |dp+d}| tjs|r\|  r\t|tj	s@|s\| tj
r\t|tj	rV|jd  d7  < ntj	dd}t|tjrf| nd }|rp|}|}d }|s}|s}| d| j  |s|r| d| j  | jtj||||d	}|  }|r|d
| |  }	|	r|d|	 |  }
|
r|d|
 |S )Nr  r2   r%  r!   rU  r    zExpected table name but got zExpected database name but got )r=  r!   dbcatalogchangeswhenr  )r  r  r   r  r3   r   r  ra  rW   r  STARr   
Expressionr  r?  r  r  _parse_changesrd   _parse_historical_datar  )r=   rP  r  r+  r.  r-  r  r=  r/  	at_beforer  r.   r.   r/   rv  `  sf   

zParser._parse_table_partsr  c              	   C  sb  |   }|r|S |  }	|	r|	S |  }
|
r|
S | jd|d}|r1|jds/|d|   |S |o7| d }|rB| j	t
j|dnd }| ddoO| | j}|rZ| j	t
j|dnd }| tj}tt
j|ps|ps| | j||d}|r}|d	| | d
 |p| j}|r| jtjddr|d|   |r| j|dS |  }|r|d| | jjr|d|   | j|p| jd}|r|d| t |t
jr| dr| j	t
j!|j"dd| # dS |d| $  |jds|d|   | jjs|d|   |r| % D ]	}|&d| q| 'tj(tj)r/|dd |d|   |S )NT)r  rT  r  r    r  r  )	rows_fromr  onlyrU  Fr  r  versionrs  rs  r  r  r  r2   r  rW  r  )*rc  r  r  rr  r   r3  rd   r  r  r3   r   r  r  r;  rO  r  r   r  r  r[  r2  rv  SUPPORTS_PARTITION_SELECTIONrx  r  rR  _parse_versionrG   ALIAS_POST_TABLESAMPLErv  rw  r  rW   AtIndexr  r_  r(  r  r*   r  r  r  )r=   rP  rW  rt  r  r  r  rT  r  r  r%   re  bracketr6  r7  r!   r8  r  r  r.   r.   r/   rO    s|   
	


zParser._parse_tablet.Optional[exp.Version]c                 C  s   |  tjr	d}n|  tjrd}nd S | tjtjfr;| jj	 }| 
 }| d | 
 }| jtj||gd}n,| ddrPd}| jtj| | j
d}n|  tjr[d}d }n| d	d
 d}|  }| jtj|||dS )Nr  r  )r  r  ru   	CONTAINEDr  zCONTAINED INr  r  r  zAS OF)r!   r3   rr  )r  r   TIMESTAMP_SNAPSHOTVERSION_SNAPSHOTr  r  BETWEENr  r  r  rA   r  r3   r   rO  r  r;  r  _parse_typeVersion)r=   r!   rr  r   r   r3   r.   r.   r/   r:     s2   

zParser._parse_versiont.Optional[exp.HistoricalData]c                 C  s   | j }d }| | jrD| jj }| tjo"| | j	o"| jj }| tj
o,|  }|r?|   | jtj|||d}|S | | |S )N)r!   rr  r3   )r  r  HISTORICAL_DATA_PREFIXr  r  r  r  r   r  HISTORICAL_DATA_KINDFARROWrA   rP  r3   r   HistoricalDatare  )r=   rc  historical_datar!   rr  r3   r.   r.   r/   r4    s$   



zParser._parse_historical_datat.Optional[exp.Changes]c                 C  sD   |  dddds
d S | jdd}|   | jtj||  |  dS )NCHANGESrM  INFORMATIONz=>Tr  )informationr5  r   )r  r  rP  r3   r   Changesr4  )r=   rN  r.   r.   r/   r3  6  s   zParser._parse_changes
with_aliast.Optional[exp.Unnest]c                 C  s   |  tjsd S | | j}| tjtj}|r|  nd }|rS| j	j
r=|jdr/| d |d|jg |dd  |jdpDg }|rSt|t|k rS| }|sp| tjtjrp|  tj | jd| jdpotd}| jtj|||dS )Nr  z(Unexpected extra column alias in unnest.r!   Fr  rl  )ra   r  rl  )r  r   r   r;  r  r  r  r  rw  rG   UNNEST_COLUMN_ONLYr   r3  r?  rd   r!   r&   r^  r  r  r_  UNNEST_OFFSET_ALIAS_TOKENSr   to_identifierr3   r  )r=   rP  ra   rl  r  r  r.   r.   r/   r  D  s,   
zParser._parse_unnestt.Optional[exp.Values]c                 C  sh   |  tjtj}|s| ds| ddsd S | | j}|  }|r'|   | j	t
j||p1|  dS )Nr  rB  )ra   r  )r  r   r  r  r  r  ry  rw  rP  r3   r   r]  )r=   
is_derivedra   r  r.   r.   r/   r  a  s   
z"Parser._parse_derived_table_valuesrt  t.Optional[exp.TableSample]c                 C  s  |  tjs|r| ddsd S d }d }d }d }d }d }| jtjfdd}|  tj}	| jr7d }
| | j	}nd }| j tj
ddrE|  n| 	 pL|  }
| drm|  }| dd	 |   }}|  tj |  }n| tjtjfry|
}n|  tjs| jjs|
}n|
}|	r|   |  tjr| jdd
}|  tjo|  }|   n| dr| | j}|s| jrt| j}| jtj||||||||d	S )Nr  r  T)rC  r  Fr  r  OUTr  r  )SEEDr  )ra   r  bucket_numeratorbucket_denominatorbucket_fieldrx  r  seed)r  r   TABLE_SAMPLEr  r  r  r  TABLESAMPLE_CSVr  r  NUMBER_parse_factorr*  r  rs  r  r  rz  r  r  rG   TABLESAMPLE_SIZE_IS_PERCENTrP  rW  r  r  r  r   r   r3   TableSample)r=   rt  rZ  r[  r\  rx  r  r]  r  matched_l_parennumra   r.   r.   r/   rv  s  sl   






zParser._parse_table_samplet.Optional[t.List[exp.Pivot]]c                 C  s   t t| jd p	d S r  )r  r  _parse_pivotrJ  r.   r.   r/   r    ri  zParser._parse_pivotst.Iterator[exp.Join]c                 C  s   t | jd S r  )r  r`  rJ  r.   r.   r/   r    r  zParser._parse_joinst.Optional[exp.UnpivotColumns]c                 C  sB   |  tjsd S | jtj| do|  | do| | jdS )NrU  r  r-  )	r  r   rq  r3   r   UnpivotColumnsr  rM  r  rJ  r.   r.   r/   _parse_unpivot_columns  s   zParser._parse_unpivot_columnsr  	exp.Pivotc              	     st   d fdd}   } tjo |}  } tjo(  fdd}  } jt	j
||||||dS )	Nr   r?   c                    s<      }  tjr | S  jtjddr | S | S NFr  )rA   r  r   r  r  r  _parse_aliasr    rJ  r.   r/   	_parse_on  s   

z1Parser._parse_simplified_pivot.<locals>._parse_onc                            S r  rn  r  r.   rJ  r.   r/   r     rS  z0Parser._parse_simplified_pivot.<locals>.<lambda>)r!   ra   r8  rd  unpivotr  r  )rO  r  r   rs  r  rk  r  rZ  r3   r   Pivot)r=   r  ro  r!   ra   r  r8  rd  r.   rJ  r/   r    s"   
zParser._parse_simplified_pivotexp.Inc                   sv   d fdd}   } tjtjs d  tjr)tt	j
  d}n |}    jt	j||dS )	Nr   r?   c                    sN      }  tj   }|r%t|tjr|js|j	} j
tj| |dS | S )NrX  )_parse_select_or_expressionr  r   r  rA   rW   r   r  r-  r!   r3   
PivotAliasrX  rJ  r.   r/   _parse_aliased_expression  s   z9Parser._parse_pivot_in.<locals>._parse_aliased_expressionzExpecting IN (r    r-  r  )rM  r  r   r  r  r?  r  r   r
   r   PivotAnyri  r  rP  r3   In)r=   rw  r  exprsr.   rJ  r/   _parse_pivot_in  s   

zParser._parse_pivot_int.Optional[exp.Pivot]c              	     s   j }d } tjrd}n tjr(d} ddrd}n ddr'd}nd S g } tjs9 | d S |rB  j	}n	  fdd}|sR 
d  tjs] 
d	 g }	   j}|sin|| q` d
ddo{  j}  }    jtj||||||d}	 jtjtjfdds|	d   |s ttjtj |}
g }g }|	jD ]}|j}t t!|dtj"rq| fdd|D  q|r|
r||
 t#j$| D ]}t%|}|
r j&r|'d|(d |t)d*| q|	d| |	S )NFTr  r  r  c                     rp  r  rq  r.   rJ  r.   r/   r     rS  z%Parser._parse_pivot.<locals>.<lambda>z(Failed to parse PIVOT's aggregation listzExpecting FORr  rs  r  )ra   r#  rr  include_nullsdefault_on_nullrd  r  r  r   c                   s    g | ]} j r| n|jqS r.   )IDENTIFY_PIVOT_STRINGSr  r  )r   fldrJ  r.   r/   r  I  s    z'Parser._parse_pivot.<locals>.<listcomp>r1  r  r  )+r  r  r   r  r  r  r  re  r  rM  r?  r  ro  r{  r*   r  rA   rZ  rP  r3   r   rs  r  rd   rw  _pivot_column_namesr  r[  Listr2  r#  ra   rW   r   rx  	itertoolsproductr  PREFIXED_PIVOT_COLUMNSinsertr^  rT  r  )r=   rc  r}  rr  ra   r#  r  r~  rd  pivotnamesr  
all_fieldspivot_fieldpivot_field_expressionsfld_parts_tuple	fld_partsr.   rJ  r/   rg    s   








zParser._parse_pivotaggregationst.List[str]c                 C  s   dd |D S )Nc                 S  s   g | ]}|j r|j qS r.   r  )r   r@  r.   r.   r/   r  d  r   z.Parser._pivot_column_names.<locals>.<listcomp>r.   )r=   r  r.   r.   r/   r  c     zParser._pivot_column_namesskip_where_tokent.Optional[exp.PreWhere]c                 C  ,   |s
|  tjs
d S | jtj| j|  dS Nr  )r  r   PREWHEREr3   r   PreWherer  r0  r=   r  r.   r.   r/   rc  f  
   zParser._parse_prewheret.Optional[exp.Where]c                 C  r  r  )r  r   r  r3   r   Wherer  r0  r  r.   r.   r/   r|  n  r  zParser._parse_whereskip_group_by_tokent.Optional[exp.Group]c                   sd  |s
  tjs
d S  j}tt}  tjrd|d< n
  tjr&d|d< 	  j}|d 	 
 fdd  j}  tj}  tjrU|d  jtj|d n5  tjri|d	  jtj|d n!  tjr|d
  jtj  jd n	 drd|d< | j  kr|d krn n | n| jkrnq' jtjfd|i|S )NTallFra   c                     s"    j tjtjfddrd S   S rm  )r  r   CUBEROLLUPr0  r.   rJ  r.   r/   r     s   z%Parser._parse_group.<locals>.<lambda>rollup)with_prefixcubegrouping_setsru   TOTALStotalsr   r=  )r  r   GROUP_BYr  r   r  r  DISTINCTr  r  r  r  r  r*   _parse_cube_or_rollupr   Rollupr  CubeGROUPING_SETSr3   GroupingSetsr;  _parse_grouping_setr  re  Group)r=   r  r=  elementsrc  before_with_indexr  r.   rJ  r/   rZ  v  sR   





'zParser._parse_grouprr  r  c                 C  s"   | j ||r	g dS | | jdS r   )r3   r;  rM  )r=   rr  r  r.   r.   r/   r    s
   
zParser._parse_cube_or_rollupc                 C  s8   |  tjr| | j}|   | jtj|dS |  S r   )	r  r   r  r  rM  rP  r3   r   rO  )r=   grouping_setr.   r.   r/   r    s
   zParser._parse_grouping_setskip_having_tokent.Optional[exp.Having]c                 C  r  r  )r  r   HAVINGr3   r   Havingr  r0  )r=   r  r.   r.   r/   r\    s
   zParser._parse_havingt.Optional[exp.Qualify]c                 C  s$   |  tjsd S | jtj|  dS r  )r  r   QUALIFYr3   r   Qualifyr0  rJ  r.   r.   r/   ro    s   zParser._parse_qualifyc                 C  s&   dd | j d< |  }| j d |S )Nc                 S  r  r  )r3   r   PriorrA   rJ  r.   r.   r/   r     r  z2Parser._parse_connect_with_prior.<locals>.<lambda>PRIOR)NO_PAREN_FUNCTION_PARSERSr0  r^  )r=   r~  r.   r.   r/   _parse_connect_with_prior  s   z Parser._parse_connect_with_priorr  t.Optional[exp.Connect]c                 C  sn   |rd }n|  tjr|  }nd S |  tj | d}|  }|s-|  tjr-|  }| jtj	|||dS )Nr  )r   r~  nocycle)
r  r   r  r0  
CONNECT_BYr  r  r3   r   Connect)r=   r  r   r  r~  r.   r.   r/   r    s   

zParser._parse_connectc                 C  s2   | j dd}| tjr| jtj||  d}|S )NTr  )r  r!   )r_  r  r   r  r3   r   Aliasr0  r  r.   r.   r/   r    s   z Parser._parse_name_as_expressionc                 C  s   |  dr| | jS d S )NINTERPOLATE)r  r;  r  rJ  r.   r.   r/   _parse_interpolate  s   
zParser._parse_interpolateru  c                 C  sH   d }|s|  tjs|  tjs|S d}| jtj| j|| | j	|dS )NT)r=  r!   ra   siblings)
r  r   ORDER_BYORDER_SIBLINGS_BYr3   r   Orderr  r  rj  )r=   r!   ru  r  r.   r.   r/   ri    s   
zParser._parse_orderr   t.Optional[E]c                 C  s$   |  |sd S | j|| | jdS r   )r  r3   r  rj  )r=   rr   r  r.   r.   r/   rG    s   
zParser._parse_sortt.Optional[t.Callable]t.Optional[exp.Ordered]c           
      C  s,  |r| n|   }|sd S |j dkr| jjrtd}| tj	}| tj
p,|o,d}| dd}| dd}|p<d}|p@|}|s[|sK| jjdksS|r[| jjdkr[| jjdkr[d}| d	d
r| jtjfi | tjop|  | dox|  | do|  |  d}	nd }	| jtj||||	dS )Nr  Fr  r  r  nulls_are_smallnulls_are_lastTr  FILLr  STEP)r:  r   r   interpolate)r!   descnulls_first	with_fill)r0  r   r  rG   SUPPORTS_ORDER_BY_ALLr   r   r  r   r  r  r  NULL_ORDERINGr3   WithFillr  rA   r  Ordered)
r=   r)  r!   ascr  is_nulls_firstis_nulls_lastr  explicitly_null_orderedr  r.   r.   r/   rj    sF   

zParser._parse_orderedexp.LimitOptionsc                 C  sH   |  tj}| tjtjf}| d | dd}| jtj	|||dS )Nr  r  r  )rx  r  	with_ties)
r  r   rz  r  r  r  r  r3   r   LimitOptions)r=   rx  r  r  r.   r.   r/   _parse_limit_options-  s
   
zParser._parse_limit_optionsrg  skip_limit_tokenc              	   C  s  |s|  |r	tjntjrS| j}|r-|  tj}|r|  n|  }|r(|   | 	 }nd }|  }|  tj
r@|}|  }nd }| jtj||||||  d}	|	S |  tjr| tjtjf}
|
rj| jj nd}
| j| jd}| jtj|
|| 	 dS |S )N)r!   r3   rl  r=  limit_optionsra   r  rC  )	directioncountr  )r  r   TOPr  r  r  r  r  rP  r  rW  r3   r   Limit_parse_limit_byFETCHr  r  r  r  r  r  r  FETCH_TOKENSFetch)r=   r!   rg  r  r=  limit_parenr3   r  rl  	limit_expr  r  r.   r.   r/   re  4  sF   


zParser._parse_limitc                 C  sB   |  tjs|S |  }| tjtjf | jtj	||| 
 dS )N)r!   r3   ra   )r  r   r  r  r  r  r  r3   r   r  r  )r=   r!   r  r.   r.   r/   rg  i  s   zParser._parse_offsetc                 C  sL   | j | jdds
dS | j}t| j| jddp| j| jdd}| | |S )NFr  T)rm  )r  AMBIGUOUS_ALIAS_TOKENSr  r;   ro  re  rg  re  )r=   rc  resultr.   r.   r/   r  t  s   
z!Parser._can_parse_limit_or_offsetc                 C  s   |  do
| | jS )Nr  )r  r  rA   rJ  r.   r.   r/   r    r`  zParser._parse_limit_byt.List[exp.Lock]c                   s   g }	   ddrd}n  dds  ddddrd}n	 |S d }  d	r0  fd
d}d }  dr:d}n  drD  }n  ddrLd}| jtj|||d q)NTr  r  r  ra  r  MODEFr  c                         j ddS )NTr  r  r.   rJ  r.   r/   r     r   z%Parser._parse_locks.<locals>.<lambda>NOWAITWAITr  LOCKED)updatera   wait)r  r  r  r*   r3   r   Lock)r=   rn  r  ra   r  r.   rJ  r/   rp    s0   



zParser._parse_locksc                 C  sJ  | j }|  \}}}|r|jnd }|r|jnd }| | js%| | d S | jj}	|	tj	kr2t
j}
n|	tjkr;t
j}
nt
j}
| jj}| tjrKd}n| tjrTd}n| jj|
 }|d u rg| d|
j  | ddpr| dd}| drd}|s|sd}d }|r| d	r| | j}| jdd|d
}| j|
||||||||d	S )NTFzExpected DISTINCT or ALL for r  rU  r  CORRESPONDINGINNER)rs  r  )rE  rW  rT  )r=  r!   rh  r  r3   r  rr  r5  )r  r  r  r  SET_OPERATIONSre  r  r;  r   UNIONr   UnionEXCEPTExcept	Intersectr=  r  r  r  rG   SET_OP_DISTINCT_BY_DEFAULTr?  r   r  r  r;  rM  rr  r3   )r=   r!   rT  r   r  
side_token
kind_tokenr  rr  r;  	operationr=  rh  r  on_column_listr3   r.   r.   r/   rW    sZ   



zParser.parse_set_operationc                 C  sh   |r|  |}|s
n|}|st|tjr2| jr2|j}|r2| jD ]}|j|}|r1|	||
  q|S r  )rW  rW   r   SetOperationMODIFIERS_ATTACHED_TO_SET_OPr3   SET_OP_MODIFIERSr   r3  rd   r^  )r=   r!   setopr3   rT   exprr.   r.   r/   r    s   

zParser._parse_set_operationsc                 C  s   |  |  S r  rn  r0  rJ  r.   r.   r/   rT    r  zParser._parse_expressionc                 C  s   |   }|s!| jr!| jj| jv r!ttt| j	ddo| j
j}| | jrNt|tjr7t|jdkr7|j}| j| j| j
j || j|  d}| | js'|S )NT)ignore_reservedr   r!   r=  r3   )r  r  r;  r(  r   columnr  r[  rH  r>  r  r  r  rW   r  r&   r  r!   r3   r  r0  r  r.   r.   r/   r0    s    zParser._parse_assignmentc                 C     |  | j| jS r  )_parse_tokens_parse_conjunctionr)  rJ  r.   r.   r/   r    rf  zParser._parse_disjunctionc                 C  r  r  )r  r  r'  rJ  r.   r.   r/   r    rf  zParser._parse_conjunctionc                 C  r  r  )r  r  EQUALITYrJ  r.   r.   r/   r    rf  zParser._parse_equalityc                 C  r  r  )r  _parse_range
COMPARISONrJ  r.   r.   r/   r    rf  zParser._parse_comparisonc                 C  s   |p|   }| tj}| | jr#| j| jj | |}|s |S |}n| tjr4| j	t
j|t
 d}| tjrM| j	t
j|t
 d}| j	t
j|d}|rT| |}| tjr_| |}|S )Nr2   r    )rA   r  r   r  r  RANGE_PARSERSr  r;  ISNULLr3   r   Isr  NOTNULLr  _negate_ranger  r  )r=   r!   negater3   r.   r.   r/   r    s"   

zParser._parse_rangec                 C  s   |s|S | j tj|dS r  )r3   r   r  r  r.   r.   r/   r  /  s   zParser._negate_rangec           	      C  s  | j d }| tj}| ddr#|rtjntj}| j||| 	 dS | tj
ra| | jo4| jj }| dr=d}n
| drEd}nd }| tj}| d	 | jtj
fi |||d
}n|  ph|  }|sr| | d S | jtj||d}|r| jtj|dS |S )Nr   r  r  r2   r  TWITHOUTFr*  )r!   r6  r  r    )r  r  r   r  r  r   
NullSafeEQNullSafeNEQr3   rA   JSONr  IS_JSON_PREDICATE_KINDr  r  r  r  r  _parse_nullre  r  r  )	r=   r!   rc  r  r   rr  _withr  r3   r.   r.   r/   r  5  s2   





zParser._parse_isr  c                   s   j dd}|rjtj||d}|S tjtjfrljj	tjk}
 fdd}t|dkrKt|d tjrKjtj||d jddd	}n	jtj||d
}|r]| |S jtj|dsjd |S jtj| d}|S )NF)rP  )r!   r  c                     r  Nr  )ru  r.   r  r=   r.   r/   r   [  r   z"Parser._parse_in.<locals>.<lambda>r   r   r  )r!   r  r-  r  zExpecting ])r!   r  )r  r3   r   ry  r  r   r  ry   r  r;  r  r&   rW   rc  re  rP  r  	R_BRACKETr?  rM  )r=   r!   r  r  rd  ra   r.   r"  r/   r  U  s$    

zParser._parse_inexp.Betweenc                 C  s0   |   }| tj |   }| jtj|||dS )N)r!   lowhigh)rA   r  r   r  r3   r   Between)r=   r!   r%  r&  r.   r.   r/   r  k  s   zParser._parse_betweenc                 C  s&   |  tjs|S | jtj||  dS r@   )r  r   ESCAPEr3   r   r5   r  r  r.   r.   r/   rB   q  s   zParser._parse_escapematch_interval"t.Optional[exp.Add | exp.Interval]c                 C  s  | j }| tjs|rd S | jtjddr|  }n|  }|r4t|tj	r;|j
s;|jjs;|j dkr;| | d S |  pN| jtjdd oN| jddd}|r]|jr]tj| }n8|r|jrtj|j}|rw|rwd }| | j d  t|dkrtj|d d }| jtj|d d  d}| jr| d	r| jtj|| jdddd
}| jtj ||d}| j }| tj! | j"tjtj#fddr| jtj$|| j%ddd
S | | |S )NFr  r  Tr  r  r   r   r    r  r2   r   )r)  )&r  r  r   INTERVALr  r  r  rW   r   r  r  r!   r  r   r  re  r  r  r  	is_numberr   r   to_pyr  INTERVAL_STRING_REfindallr&   r3   VarINTERVAL_SPANSr  IntervalSpanr   PLUSr  r`  Add_parse_interval)r=   r)  rc  r!   r   r  intervalr.   r.   r/   r6  v  sV   





zParser._parse_intervalc                 C  s   |   }	 | | jr| j| j| jj ||   d}nY| jjr5| t	j
r5| jtj||   | jj d}n?| t	jrI| jtj|t|   d}n+| t	jt	jr]| jtj||   d}n| t	jt	jrq| jtj||   d}n	 |S q)NTr2   )r!   r3   r   r-  )r  r  BITWISEr3   r  r;  rG   DPIPE_IS_STRING_CONCATr  r   DPIPEr   DPiper   DQMARKr   r
   r  r  BitwiseLeftShiftr  BitwiseRightShiftr  r.   r.   r/   rA     s<   zParser._parse_bitwisec                 C  s   |   }| | jrU| j| jj }| j}|   }| j||||d}t|tj	rO|j}t|tj
rOt|jdkrO|j}t|tjrO|d|jrH|nt|j | | js
|S )Nr  r   r3   )ra  r  TERMr  r;  r  r3   rW   r   Collater  r&   r  r!   r  rd   r  r   r   )r=   r!   r   r=  r3   r	  identr.   r.   r/   r    s   zParser._parse_termc                 C  s   | j r| jn| j}| }| | jrY| j| jj }| j}| }|s6|tj	u r6| jj
 r6| | jd  |S | j||||d}t|tjrS| jj|jd< | jj|jd< | | js|S )Nr   r  typedr   )r*  _parse_exponentr  r  FACTORr  r;  r  r   IntDivr  isalphare  r  r3   rW   DivrG   TYPED_DIVISIONr   SAFE_DIVISION)r=   r)  r!   r   r=  r3   r.   r.   r/   ra    s   zParser._parse_factorc                 C  r  r  )r  r  r*  rJ  r.   r.   r/   rC    rf  zParser._parse_exponentc                 C  s,   |  | jr| j| jj | S | |  S r  )r  UNARY_PARSERSr  r;  _parse_at_time_zonerC  rJ  r.   r.   r/   r     s   zParser._parse_unaryparse_intervalfallback_to_identifierc           
      C  s  |o|   }|r
|S | j}| jddd}t|tjr| |S |r|| j}|  }t|tjrd|j	}| |}| j
|j}	|	rE|	| ||S | jr[|tjjjr[t|r[tjd}| jtj||dS |jrw|| dkrw| | | |S | | |r|  S |  }|o| |S )NTF)
check_funcrO  TIMESTAMPTZr   r   )r6  r  rR  rW   r   r   _parse_column_opsr  r   r   TYPE_LITERAL_PARSERSr3  r!    ZONE_AWARE_TIMESTAMP_CONSTRUCTORis_typer   r   r  r   r  buildr3   ra   re  r_  rM  )
r=   rL  rM  r7  rc  	data_typeindex2r!   literalr6  r.   r.   r/   rC    s@   




zParser._parse_typet.Optional[exp.DataTypeParam]c                 C  sL   |   }|sd S t|tjr|jst|j }| jtj	|| j
dddS )NTr  r2   )rC  rW   r   r  r  r   r   r  r3   DataTypeParamr  r  r.   r.   r/   _parse_type_sizeD  s   zParser._parse_type_size
identifierexp.Identifierc                 C  sH   |j }| tjr| d|  o| jj }| tjs	tjj	|ddS )N.Tudt)
r   r  r   r  r>  r  r  r   r   rT  )r=   r[  	type_namer.   r.   r/   _parse_user_defined_typeP  s
   zParser._parse_user_defined_typerN  rO  c                   s  j }d }dd}js^ ojdtjfd}t|tj	r\j
|jj
d}t|dkr:dj |d jjv rH|d _nj
jrR|}nj d  d S d S jj}	|	tjkrsjtjjj d	S |	tjkrjtjjj d	S |	tjkrǈtjrǈj d
}
tjs| d S j d
}tj s| d S tj!tj!j"j|
|gd|dS |	j#v }|	j$v }|	j%v }d }d}tj&r|r'fdd}n|r' fdd}|	tj(krt|dkr|d }|)dd *  |S nb|	j+v r''j,}nU|r[j-ddp;jdtjtj.fd}|sAd S |g}tj/rZ|0' fdd n!'j1}|	tj2kr|t|dkr|tj!j3|d j4j
d|d< |rtj5s| d S d}d }|rtj6r|r'fdd}n' fdd}tj7sd tjtj&fr'j8}|s|rd }j d  n	tj tj5f |	j9v r3dddrd}|	j:v rtj!j"j;ntj!j"j<}tj!||d}nkddddr(d}tj!tj!j"j=|d}nUdddr2d}nJ|	tj>krnj?dd}|rbdrStj@|j?ddd}jtj!jtjA|d d	}njtj!tj!j"j>d	}n|	tjBkr}tj!tj!j"jCd	}|rrj }D }|s| d S | |sd!rjEF|	}|sd"|	jG d# |p|	}	tj!tj!j"|	jG |||d}|d ur|rtjHntjI}tjJ||d$|dd%}n	|r|)d&| tjKrtj!tj!j"jK|gdd'}tjKsj }tjL}jMrijj}tj}|s"|r/|tjLkr0tj r0n9d}'j8p:d }|rRsRj
jNrL|tjLkrR| ntj!tj!j"jL|g|dd(}tj  jMsjOrt|jPtj!j"rjOF|jP}|r|tQJtj!|}|S ))N	SYSUDTLIBr]  Fr  r  r   zUnexpected identifierr   r    rN  rP  rO  T)r!   ra   rE  prefixc                     r  NT)type_requiredr  r.   rJ  r.   r/   r     r   z%Parser._parse_types.<locals>.<lambda>c                        j  dS Nrc  rQ  r.   rO  rN  rP  r=   r.   r/   r         nullable)r  c                     rh  ri  rQ  r.   rj  r.   r/   r     s
    r"   c                     r  re  rg  r.   rJ  r.   r/   r     r   c                     rh  ri  rQ  r.   rj  r.   r/   r     rk  r  r  TIMEZONEr-  r  r  r  r  r2   )r   UNSIGNEDzCannot convert z to unsigned.ru   r  ra   )r!   ra   rE  )r!   ra   r%   rE  )Rr  r  r  TYPE_TOKENSr_  r   VARrW   r   r  rG   tokenizer  r&   r?  r  r;  SUPPORTS_USER_DEFINED_TYPESra  re  PSEUDO_TYPEr3   
PseudoTyper  r  OBJECT_IDENTIFIERObjectIdentifierr)  r  ry   rR  rH  r#  r   r   NESTED_TYPE_TOKENSSTRUCT_TYPE_TOKENSAGGREGATE_TYPE_TOKENSr  r  NULLABLErd   rP  ENUM_TYPE_TOKENSr  r  r   rW  r  rZ  VECTORrT  r   r  r  r  r0  
TIMESTAMPSTIMESTIMETZrO  TIMESTAMPLTZr,  r  r3  r   VOIDr  r  SIGNED_TO_UNSIGNED_TYPE_TOKENr3  r  Structrw   r[  r%  r   r  SUPPORTS_FIXED_SIZE_ARRAYSr  r!   r  )r=   rN  rP  rO  rc  r!   rd  r[  rC  
type_tokenkey_type
value_typerE  	is_structis_aggregatera   
maybe_funcfunc_or_identr%   tz_typer   rV  peekunsigned_type_tokenr   matched_arraydatatype_tokenmatched_l_bracket	converterr.   rj  r/   rR  X  sd  















zParser._parse_typesrf  c                 C  s   | j }| jr| jr| jj| jv r| jj| jv r|  }n| jdddp&|  }| tj	 |rFt
|tjsF| j| jddsF| | |  S | |S )NFT)rL  rM  r  )r  r  r  r;  rp  r_  rC  r  r   COLONrW   r   r   r  re  rR  _parse_column_def)r=   rf  rc  r!   r.   r.   r/   r  G  s*   



zParser._parse_struct_typesc                 C  s(   |  ddds	|S | jtj||  dS )Nr  rm  rn  )r!   zone)r  r3   r   
AtTimeZoner  r  r.   r.   r/   rK  e  s   zParser._parse_at_time_zonec                 C  sD   |   }|r| |n| |}| jjr |r |d| tj |S )N	join_mark)	_parse_column_referencerP  r  rG   SUPPORTS_COLUMN_JOIN_MARKSrd   r  r   JOIN_MARKER)r=   r!   r  r.   r.   r/   rM  j  s
   zParser._parse_columnc                 C  sd   |   }|s| jtjddr| jr| jr| jjtjkr|  }t	|t
jr0| jt
j| |d}|S )NFr  r  )r  r  r   r  VALUES_FOLLOWED_BY_PARENr  r;  r  r_  rW   r   r  r3   r  r  r  r.   r.   r/   r  s  s   zParser._parse_column_referencec           
      C  s@  g }g }d }|  tjrn| j}| | jdtjfd}t|tj	r0|
|j |j}t|tj	s!|rLtdd t| j|d  D }| j|| d  }n| j}|rht|tjr\|jr\d}|
| | j| | |  tjs|r| jtjd|}	|	r|	d| | jtj||	dd}|r| jtj	|| d	}|s|S )
NTr  c                 s  s$    | ]\}}|j tjkr|V  qd S r  )r;  r   DCOLON)r   r-   r  r.   r.   r/   r     s    z9Parser._parse_colon_as_variant_extract.<locals>.<genexpr>r   r]  r  )r!   r3   variant_extractr   )r  r   r  r  rP  r  r  rW   r   r   r*   r   r!   nextr:  r  r  r  r  r_  rG   rb   r   r   r  rd   r3   rc   r^  )
r=   r!   casts	json_pathr  r  r?  dcolon_offset	end_tokenjson_path_exprr.   r.   r/   _parse_colon_as_variant_extract  sJ   "z&Parser._parse_colon_as_variant_extractc                 C  rL  r  rQ  rJ  r.   r.   r/   _parse_dcolon  rR  zParser._parse_dcolonc              	   C  s  |  |}| | jr| jj}| j|}|tjtjfv r)| 	 }|s(| 
d n(|rJ| jrJ|  p5|   }t|tjrI| jtjddrI| |}n| jddd}t|tjtjfrc|rc|dd }|rl|| ||}nEt|tjr|jds| jtj|j||j|jd	|jd
d}n"t|tjr| jtj||jd}|d| |}n	| jtj||d}|r|jrttj| |!  |  |}| | js| j"r| #|S |S )NzExpected typeFr  T)r  anonymous_funcc                 S  s   t | tjr| jddS | S )NF)include_dots)rW   r   r  r  )nr.   r.   r/   r     r   z*Parser._parse_column_ops.<locals>.<lambda>r.  r  r-  )r=  r!   r  r-  r.  r2   r!   )$r  r  COLUMN_OPERATORSr  r;  r3  r   r  DOTCOLONr  r?  r  r  rW   r   r  r  r  rP  r  FuncWindow	transformr   r3   r=  r!   r  rd   r  r[  r2  rU  r  COLON_IS_VARIANT_EXTRACTr  )r=   r!   op_tokenopr  window_funcr.   r.   r/   rP    sP   







/zParser._parse_column_opsc                 C  s   |  tjsd S | j}|  }|r|g}n|  }| t|d}|s2| j tjddr2| 	t
j}n=t|t
jr@| j|dd}n/t|t
jrQ| j| |dd}nt|dks^| jjtjkrg| j	t
j|d}n| j	t
j|d}|rv|| | j|d |S )	Nr   Fr  )r!   rk  r   ru   r    r  )r  r   r  r  rr  rP  r  r   r  r3   r   rO  rW   UNWRAPPED_QUERIESrq  r  r  r&   r  r;  rW  rj   rU  rP  )r=   r=  r  ra   r!   r.   r.   r/   _parse_paren  s*   
zParser._parse_parenc                 C  s   |  | jrB| jj}| j| | | j}|tjkr@|g}| tjr2|tj	
| jj | tjs!t|dkr@| jtj|dS |S | tjtjrUtj	d| jj S |  S )Nr   ru   z0.)r  PRIMARY_PARSERSr  r;  r   r  r  r*   r   r   r   r  r&   r3   r   r  r  r`  r   r  )r=   r;  r  ra   r.   r.   r/   r    s   
zParser._parse_primaryr  rC  r  c                 C  sD   |r| j ||dp|  }n|  p| j ||d}|p!| j||dS )N)r  r  r  )r  r  r_  )r=   r  rC  r  r  r.   r.   r/   r  (  s   zParser._parse_field	functions#t.Optional[t.Dict[str, t.Callable]]r)  c                 C  s^   d}| j tjddr| jr| jj dkr| d d}| j||||d}|r-|  tj |S )NFr  FNr"   T)r  r  r)  r  )	r  r   L_BRACEr  r  r  r>  r  R_BRACE)r=   r  r  r)  r  	fn_syntaxr   r.   r.   r/   r  9  s"   	
zParser._parse_functionc                   sz  j sd S j j}j }j j}j j}| }	j|	}
|r2|
r2|jvr2  	|
S j
r<j
jtjkrQ|rO|jv rO  j| S d S |r[|jv rZd S n|jvrbd S d j|	}
|
rv|sv|
}nj|}|rj jtjtjfv rj|| d}  |S |d u rj}||	}|o| }| p|	jv   fdd}j oj j}|r|rtdd |D rd} r|rڈ|}|r	ttj|}d|jj v r||j!d	}n||}"||}j!j#r||j$d
< |}n|tj%krt&j'|dd(|}jt&j)||d}|(|}t*|t&j+r3|,| | 	|S )Nr"   r  c                     r  r!  ra  r.   r"  r.   r/   r     r   z-Parser._parse_function_call.<locals>.<lambda>c                 s  s     | ]}|  tjV  qd S r  )lstrip
startswithr   SQLGLOT_ANONYMOUS)r   commentr.   r.   r/   r     s
    
z.Parser._parse_function_call.<locals>.<genexpr>FrG   r  r   T)r!   r  r-  )-r  r=  r;  r  r  r  r3  INVALID_FUNC_NAME_TOKENSr>  _parse_windowr  r   r  NO_PAREN_FUNCTIONSr3   RESERVED_TOKENSFUNC_TOKENSFUNCTION_PARSERSSUBQUERY_PREDICATESr  r  rr  rP  r$  FUNCTIONS_WITH_ALIASED_ARGSr  any_kv_to_prop_eqr  r[  Callable__code__co_varnamesrG   rW  PRESERVE_ORIGINAL_NAMESr  
IDENTIFIERr   r  update_positions	AnonymousrW   r2  rU  )r=   r  r  r)  r  r=  r  r;  r!   r  r6  subquery_predicatefunctionknown_functionr   post_func_commentsfunc_builderr   r.   r"  r/   r  W  s   













zParser._parse_function_callc                 C  s   |S r  r.   )r=   r3   rc  r.   r.   r/   _to_prop_eq     zParser._to_prop_eqra   c                 C  s   g }t |D ]N\}}t|| jrIt|tjr$| jtj|jd|j	d}t|tjs9| jtjt
|j	j|jd}t|j	tjrH|j	|j	j	 n| ||}|| q|S )Nr  r2   )r:  rW   KEY_VALUE_DEFINITIONSr   r  r3   
PropertyEQr   r3  r!   rT  r   r  r  r  r*   )r=   ra   transformedrc  r7  r.   r.   r/   r    s   zParser._kv_to_prop_eqc                 C  rL  r  )r+  rJ  r.   r.   r/   r    rR  z.Parser._parse_user_defined_function_expressionc                 C     | j |  ddS )NF)r!   computed_column)r  r_  rJ  r.   r.   r/   r       z Parser._parse_function_parametert.Optional[TokenType]c                 C  sD   | j dd}| tjs|S | | j}|   | jtj	||ddS )NTr  )r!   ra   r  )
rv  r  r   r  r  r  rP  r3   r   UserDefinedFunction)r=   rr  r!   ra   r.   r.   r/   r|    s   
z#Parser._parse_user_defined_functionexp.Introducer | exp.Identifierc                 C  s*   |   }|r| jtj|j|dS | |S r@   )r  r3   r   
Introducerr  _identifier_expression)r=   r  rW  r.   r.   r/   r    s   
zParser._parse_introducerexp.SessionParameterc                 C  sL   d }|   p	|  }|r| tjr|j}|  p|  }| jtj	||dS )Nr  )
r_  r  r  r   r  r   r  r3   r   SessionParameter)r=   rr  r!   r.   r.   r/   r    s   zParser._parse_session_parameterc                 C  rL  r  r^  rJ  r.   r.   r/   _parse_lambda_arg  rR  zParser._parse_lambda_argc              	   C  s   | j }| tjr&ttjtjtj	  | 
| j}| tjs%| | n|  g}| | jr;| j| jj | |S | | | tjrS| jtj| 
| jd}n| j|d}| | | | |S )Nru   r  )r  r  r   r  r  r[  r  Optionalr   r2  r  r  r  re  r  LAMBDASr  r;  r  r3   rn  r0  ru  re  ri  _parse_having_max_parse_respect_or_ignore_nulls)r=   r  rc  ra   r!   r.   r.   r/   rb    s(   


zParser._parse_lambdac                   s\    j } tjs|S   jr | |S   fdd}    j	t
j||dS )Nc                     r  r  )_parse_constraint_parse_field_defr.   rJ  r.   r/   r   "  rK  z&Parser._parse_schema.<locals>.<lambda>r-  )r  r  r   r  r  SELECT_START_TOKENSre  r  rP  r3   r   r  )r=   r!   rc  r   r.   rJ  r/   rR    s   
zParser._parse_schemac                 C  s   |  | jddS r$  )r  r  rJ  r.   r.   r/   r  &  r  zParser._parse_field_defr  c              	   C  sh  t |tjr	|j}|s| tj | jdd}| ddr&| j	tj
|ddS g }|s0| tjs5| dr^| jj dk}tj|  |pH| d| tjtjd	}|| j	tj|d
 n8|r| jtjddr| jru| jr| jjtjkr|   || j	tjtj|  | do| jj dkdd
 	 |  }|sn|| q|s|s|S | j	tj
|||dS )NTr  r  r  )r!   r  )r  rf  rf  	PERSISTED)r!   	persistednot_nullrq  Fr  )r  VIRTUALr  )r!   r  )r!   rr  r  )rW   r   r  r!   r  r   r  rR  r  r3   	ColumnDefr  r  r  r  ComputedColumnConstraintr0  r  r  r  r*   ColumnConstraint#WRAPPED_TRANSFORM_COLUMN_CONSTRAINTr  r;  r  r>  r  _parse_column_constraint)r=   r!   r  rr  r  r  constraint_kindr  r.   r.   r/   r  )  s^   

zParser._parse_column_defKexp.GeneratedAsIdentityColumnConstraint | exp.AutoIncrementColumnConstraintc                 C  s   d }d }d }| j tjddr| | j}t|d}t|d}n!| dr@|  }| d |  }| dr9d}n| d	r@d}|rM|rMtj||d|d
S t	 S )NFr  r   r   r  r  r  Tr  )r   r  r!   ri  )
r  r   r  r;  rA   r   r  r   #GeneratedAsIdentityColumnConstraintAutoIncrementColumnConstraint)r=   r   r  ri  r   r.   r.   r/   r  c  s(   




zParser._parse_auto_increment#t.Optional[exp.AutoRefreshProperty]c                 C  s6   |  ds| | jd  d S | jtj| jdddS )Nr  r   Tr  r    )r  re  r  r3   r   AutoRefreshPropertyr  rJ  r.   r.   r/   r  ~  s   
zParser._parse_auto_propertyexp.CompressColumnConstraintc                 C  s<   | j tjddr| jtj| | jdS | jtj|  dS )NFr  r    )r  r   r  r3   r   CompressColumnConstraintr;  rA   rJ  r.   r.   r/   r    s
   zParser._parse_compresskexp.GeneratedAsIdentityColumnConstraint | exp.ComputedColumnConstraint | exp.GeneratedAsRowColumnConstraintc                 C  s  |  ddr| tjtj}| jtjd|d}n|  d | jtjdd}| tj	 |  drK|  d	}|s=| tj
 |  d
}| jtj||dS |  d}| tjr| tjrd|d|   |  ddrr|d|   |  dr|d|   |  dr|d|   |  dr|dd n|  ddr|dd |s|d|   n&|jds| jtjddr| | j}|dt|d |dt|d |   |S )Nr  r  F)r!   on_nullr  Tr    r  r  HIDDEN)r   hiddenr  r   r  r  r  r  r  r  r  cyclerq  r3   r  r   r   )r  r  r   rs  r  r3   r   r  r  r  r  GeneratedAsRowColumnConstraintr  r  rd   rA   r  r   r3  r`  r  r   rP  )r=   r  r!   r   r	  identityr   r.   r.   r/   r    sH   







z#Parser._parse_generated_as_identity exp.InlineLengthColumnConstraintc                 C  s   |  d | jtj|  dS )NLENGTHr    )r  r3   r   InlineLengthColumnConstraintrA   rJ  r.   r.   r/   r    s   
zParser._parse_inlinec                 C  s\   |  dr| tjS |  dr| jtjddS |  ddr$| tjS | | jd  d S )Nr  r  Tr  r  REPLICATIONr   )r  r3   r   r  r  !NotForReplicationColumnConstraintre  r  rJ  r.   r.   r/   r    s   

zParser._parse_not_constraintc                 C  st   |  tjo	|  }| j tjddo| jo| jj | jv }|s8| 	| j
r8| jtj|| j
| jj  | dS |S )NFr  r  )r  r   r  r_  r  r  r  r  r  r  CONSTRAINT_PARSERSr3   r   r  r  )r=   r!   procedure_option_followsr.   r.   r/   r    s   zParser._parse_column_constraintc                 C  s4   |  tjs| j| jdS | jtj|  | 	 dS )N)r  r-  )
r  r   r  _parse_unnamed_constraintSCHEMA_UNNAMED_CONSTRAINTSr3   r   
Constraintr_  _parse_unnamed_constraintsrJ  r.   r.   r/   r    s   zParser._parse_constraintc                 C  s,   g }	 |   p
|  }|s	 |S || qr  )r	  r  r*   r=   r  r  r.   r.   r/   r	    s   
z!Parser._parse_unnamed_constraintsr  t.Optional[t.Collection[str]]c                 C  sZ   | j tjdds| |p| jsd S | jj }|| jvr&| d| d | j| | S )NFr  z&No parser found for schema constraint r]  )	r  r   r  r  r
	  r  r  r  r?  r	  r.   r.   r/   r	    s   
z Parser._parse_unnamed_constraintc                 C  rU  )NFr  r^  rJ  r.   r.   r/   _parse_unique_key  r  zParser._parse_unique_keyexp.UniqueColumnConstraintc                 C  sV   |  d | jtj|  ddd| |  | tjo"| 	 o"| j
j|  |  dS )NrJ  r  r  r  )nullsr!   
index_typeon_conflictr  )r  r3   r   UniqueColumnConstraintrR  r	  r  r   r  r>  r  r  r	  _parse_key_constraint_optionsrJ  r.   r.   r/   r    s   
zParser._parse_uniquec                 C  s   g }	 | j s		 |S | tjrYd }|  o| jj}| ddr"d}n+| dr*d}n#| dr2d}n| tj	tj
r=d}n| tj	tjrHd}n| d	 |d
| d|  n| j| jdd}|sf	 |S ||j q)NTrq  ACTION	NO ACTIONr  RESTRICTzSET NULLzSET DEFAULTzInvalid key constraintzON r   Fr  )r  r  r   rs  r>  r  r  r  r  r  r  r  r?  r*   r  r  r   )r=   r  r  r5  r   r.   r.   r/   r	    s8   


z$Parser._parse_key_constraint_optionsr  t.Optional[exp.Reference]c                 C  s@   |r
|  tjs
d S d }| jdd}|  }| jtj|||dS )NTr  )r!   ra   r  )r  r   r  rO  r	  r3   r   	Reference)r=   r  ra   r!   r  r.   r.   r/   r  5  s   zParser._parse_referencesexp.ForeignKeyc                 C  s   | j tjdds|  nd }|  }i }|  tjrc| tjtjfs(| 	d | j
j }| ddr7d}n"|  tjrO| tjtjf d| j
j  }n
|   | j
j }|||< |  tjs| jtjf|||  d|S )	NFr  zExpected DELETE or UPDATErq  r	  r	  zSET )ra   	referencer  )r  r   r  rK  r  rs  r  r  r  r?  r  r  r  r  r  r  r  r  r>  r3   r   
ForeignKeyr	  )r=   ra   r	  
on_optionsrr  r  r.   r.   r/   r  >  s8   

zParser._parse_foreign_keyc                 C  s   |   p|  S r  )rj  r  rJ  r.   r.   r/   _parse_primary_key_part`  rf  zParser._parse_primary_key_part-t.Optional[exp.PeriodForSystemTimeConstraint]c                 C  sF   |  tjs| | jd  d S |  }| jtjt	|dt	|ddS r   )
r  r   r@  re  r  rK  r3   r   PeriodForSystemTimeConstraintr   )r=   id_varsr.   r.   r/   r  c  s   z$Parser._parse_period_for_system_timewrapped_optionalr|  /exp.PrimaryKeyColumnConstraint | exp.PrimaryKeyc                 C  st   |  tjtjfo| jjtjk}|s%| jtjdds%| jt	j
||  dS | j| j|d}|  }| jt	j||dS )NFr  )r  r  r  )ra   r  )r  r   r  r  r  r;  r  r  r3   r   PrimaryKeyColumnConstraintr	  r;  r"	  
PrimaryKey)r=   r&	  r|  r  ra   r  r.   r.   r/   r~  o  s   zParser._parse_primary_keyis_mapc                 C  s   |  | j|  ddS NT)explicit)_parse_slicern  r0  )r=   r*	  r.   r.   r/   _parse_bracket_key_value  r  zParser._parse_bracket_key_valuec                 C  sJ   |  tj | j| jj  }| j||  d}|  tj	s#| 
d |S )ap  
        Parses a datetime column in ODBC format. We parse the column into the corresponding
        types, for example `{d'yyyy-mm-dd'}` will be parsed as a `Date` column, exactly the
        same as we did for `DATE('yyyy-mm-dd')`.

        Reference:
        https://learn.microsoft.com/en-us/sql/odbc/reference/develop-app/date-time-and-timestamp-literals
        )rr   r!   
Expected })r  r   rq  ODBC_DATETIME_LITERALSr  r  r  r3   r  r  r?  )r=   rr   r3   r.   r.   r/   _parse_odbc_datetime_literal  s   	
z#Parser._parse_odbc_datetime_literalc                   sT   tjtjfs|S jj  tjkr+jr+jjtjkr+jj	 j
v r+ S  fdd} tjkrFtjsFd n tjkrVtjsVd  tjkrgjtj|d}n9|stttj| jd}n,j|j }|rt|| jdS t||jj jd}jtj||| d} | !|S )	Nc                     s   j  tjkdS )N)r*	  )r.	  r   r  r.   rs   r=   r.   r/   r     r  z'Parser._parse_bracket.<locals>.<lambda>z
Expected ]r/	  ru   )r   rs   rG   r  )r!   ra   r=  )"r  r   ry   r  r  r;  r  rq  r  r  r0	  r1	  r  r  r#  r?  r  r3   r   r  r  r{   rw   rG   ARRAY_CONSTRUCTORSr3  r   r  r	   INDEX_OFFSETBracketr  rV  r  )r=   r!   ra   constructor_typer.   r2	  r/   r    sR   




zParser._parse_bracketc                 C  s&   |  tjr| jtj||  dS |S r@   )r  r   r  r3   r   Slicer0  r  r.   r.   r/   r-	    s   zParser._parse_slicec                 C  s   g }d }| j }|  }| tjr1|  }| tj |  }|| jtj	||d | tjs| tj
r;|  }| tjs]t|tjrV|j  dkrVtd}n| d| j | jtj||||dS )N)r!   truer  r7  zExpected END after CASE)r=  r!   ifsr  )r  r0  r  r   r  r  r*   r3   r   Ifr  r  rW   r   r!   r  r  r  r?  r  Case)r=   r9	  r  r=  r3   r!   thenr.   r.   r/   r    s&   zParser._parse_casec                   s     tjr  fdd} tj||}   |S  j	d } j
r1|dkr1  jS   }|s> | d S   tj   }  tjrR  nd }  tj  jtj|||d}|S )Nc                     s    j   ddS r+	  r
  r.   rJ  r.   r/   r     r  z"Parser._parse_if.<locals>.<lambda>r   r   )r!   r8	  false)r  r   r  r  rW  r   r:	  r   rP  r  NO_PAREN_IF_COMMANDSry  r  r0  re  r  r  r  r3   )r=   r   r!   rc  	conditionr8	  r=	  r.   rJ  r/   r    s(   


zParser._parse_ifc                 C  sJ   |  dds| | jd  d S | jtj|  | tj	o"| 
| jdS )Nr  r  r   )r!   ri  )r  re  r  r3   r   NextValueForrM  r  r   OVERr  ri  rJ  r.   r.   r/   _parse_next_value_for  s   zParser._parse_next_value_forexp.Extract | exp.Anonymousc                 C  sf   |   p	| jdd}| tjr| jtj||  dS | tj	s(| 
d| j | jtj||  dS )NTr  r2   z$Expected FROM or comma after EXTRACT)r  r  r  r   r  r3   r   ExtractrA   rW  r?  r  r  r.   r.   r/   r7    s   zParser._parse_extractexp.GapFillc                 C  sJ   |  tj |  }|  tj |g| | j}tj	|}| 
||S r  )r  r   r}  rO  rW  r  rb  r   GapFillr   rW  )r=   r!   r   gap_fillr.   r.   r/   r;    s   zParser._parse_gap_fillstrictr   c              
   C  s  |   }| tjs | tjr| jtj||  dS | 	d d }| 
 }| tj}|r9|  }| ddd | tjtjfr|  }| |}|sVtjtjjj}|jtjjv r| j|jtjjjkrjtjntj|tjt|rv|jnd| jjp~| jj| jj p| jj!|d}t"|tj#rt"|tjr|$d|j%d  |S n0|s| 	d	 n(t"|tj&rtjj|j'd
d}n|jtjjj(kr| tj)r| jtj*| + d}| j|rtj,ntj-||||| j.| j/dd|dS )Nr   zExpected AS after CASTrs  
CONVERSIONr  r%  )r!   r  r   r  zExpected TYPE after CASTTr^  r    Fr  )r!   r   r  r   r  r  )0r0  r  r   r  rW  r3   r   CastToStrTyper  r?  rR  r  rA   r  r  rB  rK  r   rT  r   UNKNOWNr!   TEMPORAL_TYPESDATE	StrToDate	StrToTimer   r   r   rG   FORMAT_MAPPINGTIME_MAPPINGFORMAT_TRIE	TIME_TRIErW   r  rd   r   r  r   r   CHARACTER_SETCharacterSetr  r   r9  r  r  )r=   rH	  r   r!   fmtr   r  
fmt_stringr.   r.   r/   r.  %  sb   

zParser._parse_castexp.GroupConcatc                 C  sV  |  tjr"| jtj|  gdg}|  tjr!|| 	| j n| 	| j}| 
ddrU| 
dr9td}n| 
d | jtj|  | 
ddpQ| 
dd d	}nd }| j}|  tjs~|r~| j| j|d
 dd|d
< | jtj|d
 t|ddS | 
dds| | | tj||S |   | jtj| jt|d
dt|d|dS )Nru   rs  OVERFLOWr  r   r  r   r  )r!   
with_countr   r    r   )r!   	separatorWITHINr  )r!   r[	  on_overflow)r  r   r  r3   r   rn  r0  rW  r  r  r  r   OverflowTruncateBehaviorr  r  r  re  ri  GroupConcatr   re  rW  r   rp  )r=   r   r]	  rc  r.   r.   r/   rR  _  s@   

	
zParser._parse_string_aggc                 C  sb   |   }| tjr| jtj|  d}n| tjr | 	 }nd }| j|r)tj
ntj|||dS )Nr    )r!   r   r   )rA   r  r   r  r3   r   rU	  r  rW  rR  r   r9  )r=   rH	  r   r!   r   r.   r.   r/   r3    s   

zParser._parse_convertexp.XMLTablec                 C  s   d }d }d }|  ddr|  }|  dd |  }|  dr+|  dd | | j}|  dd	dd
}|  dr>| | j}| jtj|||||dS )NXMLNAMESPACESrM  )r  PASSINGr  r  r  r  REFCOLUMNS)r!   
namespacespassingr  by_ref)	r  _parse_xml_namespacer  r  rM  r  r3   r   XMLTable)r=   rf	  rg	  r  r!   rh	  r.   r.   r/   rX    s*   

zParser._parse_xml_tablet.List[exp.XMLNamespace]c                 C  sT   g }	 |  tjr|  }n| |  }|| jtj|d |  tj	s)	 |S qr  )
r  r   r  r  rn  r*   r3   r   XMLNamespacerW  )r=   rf	  urir.   r.   r/   ri	    s   
zParser._parse_xml_namespace't.Optional[exp.Decode | exp.DecodeCase]c                 C  sF   |  | j}t|dk r| jtjt|dt|ddS | jtj|dS )Nr  r   r   )r!   charsetru   )r  r0  r&   r3   r   Decoder   
DecodeCaser=   r   r.   r.   r/   r5    s   zParser._parse_decodet.Optional[exp.JSONKeyValue]c                 C  sN   |  d |  }| | j |  d |  }|s|sd S | jtj||dS )NrJ  r  r2   )r  rM  r  JSON_KEY_VALUE_SEPARATOR_TOKENSrA   r3   r   JSONKeyValue)r=   r   r  r.   r.   r/   _parse_json_key_value  s   

zParser._parse_json_key_valuec                 C  s$   |r|  dds
|S | jtj|dS )NrB  r  r    )r  r3   r   
FormatJsonr  r.   r.   r/   _parse_format_json  s   zParser._parse_format_jsont.Optional[exp.OnCondition]c                 C  s   | j jr| jdg| jR  }| jdg| jR  }n| jdg| jR  }| jdg| jR  }| jdg| jR  }|s?|s?|s?d S | jtj|||dS )Nr5  r  r  )emptyrG  r  )rG   ON_CONDITION_EMPTY_BEFORE_ERROR_parse_on_handlingON_CONDITION_TOKENSr3   r   OnCondition)r=   rz	  rG  r  r.   r.   r/   _parse_on_condition  s   zParser._parse_on_conditionr5  ,t.Optional[str] | t.Optional[exp.Expression]c                 G  sb   |D ]}|  |d|r| d|   S q| j}| tjr/|  }|  d|r*|S | | d S )Nrs  z ON )r  r  r  r   r  rA   re  )r=   r5  r%   r  rc  default_valuer.   r.   r/   r|	    s   
zParser._parse_on_handlingr@  
Lit[False]exp.JSONObjectc                 C     d S r  r.   r=   r@  r.   r.   r/   r>    r  zParser._parse_json_object	Lit[True]exp.JSONObjectAggc                 C  r	  r  r.   r	  r.   r.   r/   r>    r  c                   s      }|r	|gn  fdd} ddd}d } ddr$d}n ddr,d	} d
  do<   } doE  } j|rMtj	ntj
|||||dS )Nc                     rp  r  )rx	  rv	  r.   rJ  r.   r/   r     rS  z+Parser._parse_json_object.<locals>.<lambda>r  ABSENTr  r  Tr  Fr*  r  ENCODING)ra   null_handlingunique_keysreturn_typeencoding)_parse_starr  r|	  r  rx	  rC  r  r3   r   JSONObjectAgg
JSONObject)r=   r@  starra   r	  r	  r	  r	  r.   rJ  r/   r>    s0   
exp.JSONColumnDefc                 C  sd   |  ds|  }| jdd}d }nd }d }d}|  do |  }|o&|  }| jtj||||dS )NNESTEDF)rO  Tr  )r!   rr  r?  nested_schema)r  r_  rR  r  _parse_json_schemar3   r   JSONColumnDef)r=   r!   rr  rE  r?  r	  r.   r.   r/   _parse_json_column_def5  s    
zParser._parse_json_column_defexp.JSONSchemac                 C  s&   |  d | jtj| j| jdddS )Nre	  Tr  ru   )r  r3   r   
JSONSchemar;  r	  rJ  r.   r.   r/   r	  J  s
   
zParser._parse_json_schemaexp.JSONTablec                 C  sZ   |  |  }| tjo|  }| ddd}| ddd}|  }tj	|||||dS )Nr  r  r5  )r!   rP  r?  error_handlingempty_handling)
rx	  rA   r  r   rW  r  r|	  r	  r   	JSONTable)r=   r!   r?  r	  r	  rP  r.   r.   r/   rB  Q  s   zParser._parse_json_tableexp.MatchAgainstc                 C  s   |  | j}| ddd |  }| ddddr(d}| d	d
dr'| d}n| dddr2d}n| d	d
dr<d}nd }| jtj|||dS )Nrb	  AGAINSTrM  r  NATURALrU  r  zIN NATURAL LANGUAGE MODEr  r  	EXPANSIONz WITH QUERY EXPANSIONBOOLEANzIN BOOLEAN MODEzWITH QUERY EXPANSION)r!   ra   modifier)r  rM  r  r  r3   r   MatchAgainst)r=   ra   r!   r	  r.   r.   r/   rD  `  s    

zParser._parse_match_againstexp.OpenJSONc                   sd      } tjo  }d fdd}d } tjtjr(    	|} j
tj|||dS )Nr   exp.OpenJSONColumnDefc                    sB    j dd}   }  } tjtj} jtj	| |||dS )NTr  r!   rr  r?  as_json)
r  rR  r  r  r   r  r  r3   r   OpenJSONColumnDefr	  rJ  r.   r/   _parse_open_json_column_def{  s   z<Parser._parse_open_json.<locals>._parse_open_json_column_def)r!   r?  ra   )r   r	  )rA   r  r   rW  r  r  r  r  rp  r  r3   r   OpenJSON)r=   r!   r?  r	  ra   r.   rJ  r/   rH  w  s   

zParser._parse_open_jsonhaystack_firstexp.StrPositionc                 C  s|   |  | j}| tjr| jtj|  t|ddS |r't|d}t|d}n
t|d}t|d}| jtj||t|ddS )Nr   )r!   r   r   r"   r   )	r  rA   r  r   r  r3   r   r   r   )r=   r	  r   haystackneedler.   r.   r/   rL    s   


zParser._parse_positionexp.Predictc                 C  sP   |  d |  }| tj |  d | jtj||  | tjo%|  dS )NMODELr}  )r!   r3   params_struct)	r  rO  r  r   rW  r3   r   PredictrA   r  r.   r.   r/   rN    s   

zParser._parse_predict	func_nameexp.JoinHintc                 C  s   |  | j}tj| |dS r,  )r  rO  r   JoinHintr  )r=   r	  r   r.   r.   r/   _parse_join_hint  s   zParser._parse_join_hintexp.Substringc                 C  s   t t jt jtj  | | j}| t	j
r||   | t	jr:t|dkr3|tjd ||   | tj||S r]  )r  r[  r  r  r   r2  r  rA   r  r   r  r*   r  r&   r   r   rW  r  r   rr	  r.   r.   r/   rS    s   "zParser._parse_substringexp.Trimc                 C  s   d }d }d }|  | jr| jj }|  }| tjtj	fr4| jj
tjkp(| j}|  }|r4||}}| tjr>|  }| jtj||||dS )N)r!   r   r3   	collation)r  
TRIM_TYPESr  r  r  rA   r  r   r  rW  r;  TRIM_PATTERN_FIRSTr  r  r3   r   r   )r=   r   r	  r3   r!   invert_orderr.   r.   r/   rT    s    
zParser._parse_trimc                 C  s   |  tjo| | jS r  )r  r   WINDOWr  r}  rJ  r.   r.   r/   rh    r  zParser._parse_window_clausec                 C  r  )NTr  )r  r_  rJ  r.   r.   r/   r}    r  zParser._parse_named_windowc                 C  s<   |  ddr| jtj|dS |  ddr| jtj|dS |S )Nr  r  r    RESPECT)r  r3   r   IgnoreNullsRespectNullsr  r.   r.   r/   r    s
   z%Parser._parse_respect_or_ignore_nullsc                 C  sB   |  tjr| d | jj dk}| jtj	|| 
 |dS |S )N)r  r  r  )r!   r3   rR  )r  r   r  r  r  r  r  r3   r   	HavingMaxrM  )r=   r!   rR  r.   r.   r/   r    s   
zParser._parse_having_maxc                 C  sT  |}t |tjr|jnd }| ddr"| | j}| jtj||d}| 	t
jt
jrA| t
j | jtj|| jddd}|   t |tjrc|tjtj}|rc||urc||j | j|j|d}| |}|rsd }| t
j n| | js{|S | jj }|rt |tjr|   | t
js| jtj!||| "d|dS | j"d| j#d	}| t
j$}	| d
rd}	| % \}
}| t
j&t
j'fo| jj}|r| t
j( | ) }| t
j* | ) }| dr| +| j,nd }| jtj-||d |d |d |d |d}nd }|   | jtj!|||
|||||	d	}| j| jddr(| j.||dS |S )Nr\	  r  r2   T)r  r    F)r=  r!   r  overr  r  r  r  r  )rr  r   
start_sider   end_sideexclude)r=  r!   r  ri  specr  r	  firstr  r  )/rW   r   r2  r=  r  r  ri  r3   WithinGroupr  r   FILTERr  r  r  Filterr|  rP  AggFuncfindr	  r	  r  r!   r   r  r  r  WINDOW_BEFORE_PAREN_TOKENSr  r  r  r  r  r_  WINDOW_ALIAS_TOKENSr  _parse_partition_and_orderr  r  rB  _parse_window_specr  r  r  
WindowSpecr  )r=   r!   r  r   r=  ri  ignore_respectr	  window_aliasr	  r  rr  r   r   r	  r	  windowr.   r.   r/   r    s   


zParser._parse_window;t.Tuple[t.List[exp.Expression], t.Optional[exp.Expression]]c                 C  s   |   |  fS r  )r  ri  rJ  r.   r.   r/   r	  f  s   z!Parser._parse_partition_and_order-t.Dict[str, t.Optional[str | exp.Expression]]c                 C  sH   |  tj | drdp| ddodp|  | | jo!| jjdS )N	UNBOUNDEDr  r  zCURRENT ROW)r  r  )	r  r   rB  r  rA   r  WINDOW_SIDESr  r  rJ  r.   r.   r/   r	  k  s   zParser._parse_window_specr,	  c              	     s     r|S tj jpg }|r s|S tjr6jtj||	 fddd}
| |S j jdpDjoD }|rh||  jtj|||d}|j}|jsh|rh|jrh| |_|S )Nc                     s
     S r  r^  r.   r  r=   r.   r/   r     r  z%Parser._parse_alias.<locals>.<lambda>)r=  r!   ra   r  )r=  r!   r  )r  r  r   r  r  r  r3   r   Aliasesr  rP  r_  ALIAS_TOKENSSTRING_ALIASESr  r  r  r  r!   r=  )r=   r!   r,	  r=  aliasesr  r  r.   r	  r/   rn  w  s2   


zParser._parse_aliasc                 C  sF   |   }|s!|r|  s| |p| jr!| jjtjk}| j|d}|S )Nr  )	r  r>  r  r  r  r;  r   r  r  )r=   r  rC  r3   r  r.   r.   r/   r_    s   zParser._parse_id_varc                 C  *   |  | jr| j| jj | | jS |  S r  )r  STRING_PARSERSr  r;  r*  rJ  r.   r.   r/   r       zParser._parse_stringt.Optional[exp.Identifier]c                 C  s2   t j| tjo| jjdd}|r|| j |S NTr	  )r   rT  r  r   r  r  r  r  )r=   outputr.   r.   r/   r    s   z"Parser._parse_string_as_identifierc                 C  r	  r  )r  NUMERIC_PARSERSr  r;  r*  rJ  r.   r.   r/   r    r	  zParser._parse_numberc                 C  s    |  tjr| jddS |  S r	  )r  r   r  r  r*  rJ  r.   r.   r/   r    s   zParser._parse_identifierr  c                 C  sd   |r|   s| tjs|r| |r.n		 |  S | jtj|r(| jj	
 dS | jj	dS |  S r  )r>  r  r   rq  r  r3   r   r1  r  r  r  r*  )r=   r  rC  r  r.   r.   r/   r    s&   
zParser._parse_varr  c                 C  s*   | j r|s| j j| jvr|   | jS d S r  )r  r;  r  r>  r  )r=   r  r.   r.   r/   r>    s   zParser._advance_anyc                 C  s   |   p
| jd|dS )NTr+  )r  r  )r=   r  r.   r.   r/   r    r`  zParser._parse_var_or_stringc                 C  s   |   p	| jddS r$  )r  r  rJ  r.   r.   r/   _parse_primary_or_var  ri  zParser._parse_primary_or_varc                 C  s(   |  | jr| jtj | | jS |  S r  )r  NULL_TOKENSr  r   r  r  r*  rJ  r.   r.   r/   r       zParser._parse_nullc                 C  sH   |  tjr| jtj | | jS |  tjr | jtj | | jS |  S r  )r  r   r  r  r  r  r*  rJ  r.   r.   r/   _parse_boolean  s
   zParser._parse_booleanc                 C  s(   |  tjr| jtj | | jS |  S r  )r  r   r1  r  r  r*  rJ  r.   r.   r/   r	    r	  zParser._parse_starexp.Parameterc                 C  s    |   p|  }| jtj|dS r  )r  r	  r3   r   	Parameterr  r.   r.   r/   r    s   zParser._parse_parameterc                 C  s4   |  | jr| j| jj | }|r|S | d d S )Nr1  )r  PLACEHOLDER_PARSERSr  r;  r>  )r=   placeholderr.   r.   r/   r*    s   
zParser._parse_placeholderkeywordsc                 G  s@   |  |sd S | jtjddr| | jS |  }|r|gS d S rm  )r  r  r   r  r;  rT  )r=   r	  r3   r.   r.   r/   _parse_star_op  s   
zParser._parse_star_op
t.Callablesepc                 C  sR   | }|d ur
|gng }|  |r'| | | }|d ur"|| |  |s|S r  )r  rV  r*   )r=   r)  r	  parse_resultr   r.   r.   r/   r    s   



zParser._parse_csvc                 C  s<   | }|  |r| j|| jj || j| d}|  |s|S )Nr  )r  r3   r  r;  r  )r=   r)  ra   r!   r.   r.   r/   r    s   


zParser._parse_tokensr  c                 C  s   | j | j|dS )Nr  )r;  r_  )r=   r  r.   r.   r/   rK  !  rf  zParser._parse_wrapped_id_varsc                   s   j  fdd|dS )Nc                     s   j  dS )N)r	  r  r.   r)  r=   r	  r.   r/   r   (  rS  z+Parser._parse_wrapped_csv.<locals>.<lambda>r  )r  )r=   r)  r	  r  r.   r	  r/   r;  $  s   zParser._parse_wrapped_csvc                 C  s4   |  tj}|s|s| d | }|r|   |S )NExpecting ()r  r   r  r?  rP  )r=   r)  r  r  r	  r.   r.   r/   r  +  s   
zParser._parse_wrappedc                 C  r-  r  )r  rT  rJ  r.   r.   r/   rP  4  r  zParser._parse_expressionsc                 C  s,   |   p| |r| j|  ddn|  S r+	  )rr  r  rn  r0  )r=   r  r.   r.   r/   ru  7  s
   z"Parser._parse_select_or_expressionc                 C  s   |  | | jdddS )NTFrE  r`  )r  r  rr  rJ  r.   r.   r/   r  >  s   zParser._parse_ddl_selectexp.Transaction | exp.Commandc                 C  s   d }|  | jr| jj}|  d g }	 g }| tjr)|| jj | tjs|r3|d| | tj	s:nq| j
tj||dS )Nr  WORKTr   )r!   modes)r  TRANSACTION_KINDr  r  r  r   rq  r*   r  rW  r3   r   Transaction)r=   r!   r	  moder.   r.   r/   r  C  s    

zParser._parse_transactionexp.Commit | exp.Rollbackc                 C  s   d }d }| j jtjk}| d | dr| d |  }| tjr/| d }| d |r9| j	t
j|dS | j	t
j|dS )Nr	  r  	SAVEPOINTrq  CHAIN)	savepoint)chain)r  r;  r   r  r  r  r_  r  r  r3   r   RollbackCommit)r=   r
  r
  is_rollbackr.   r.   r/   r  W  s   



z Parser._parse_commit_or_rollbackexp.Refreshc                 C  s(   |  tj | jtj|  p|  dS r  )r  r   r}  r3   r   Refreshr  rO  rJ  r.   r.   r/   r  k  s   zParser._parse_refresht.Optional[exp.ColumnDef]c                 C  s   | j j dks
d S | j}| tj | jdd}|  }t	|t
js*| | d S |d| | drJ| j j}| jt
j|  |d}|d| |S )Nr  Tr  ru  )r  r  )r!   r   r   )r  r  r  r  r  r   r  rw  r  rW   r   r  re  rd   r  r3   ColumnPositionrM  )r=   r   exists_columnr3   r   column_positionr.   r.   r/   _parse_add_columno  s"   

zParser._parse_add_column"t.Optional[exp.Drop | exp.Command]c                 C  s>   |  tjo	|  }|rt|tjs|d|j	dd |S )Nrr  r  )
r  r   r  r  rW   r   rj  rd   r   r3  )r=   dropr.   r.   r/   _parse_drop_column  s   zParser._parse_drop_columnexp.DropPartitionc                 C  s   | j tj| | j|dS )N)ra   ru  )r3   r   DropPartitionr  r  )r=   ru  r.   r.   r/   _parse_drop_partition  s   zParser._parse_drop_partitionc                   sZ   d fdd} j  jdds( jjr dr(  }|r"t|S   jS  |S )	Nr   r?   c                    s     d  j jddr jtj  jdS   } t	| tj
r%| S  jdd} jtjtjddrB jtj| jdddS d S )	Nr  Fr  ru   Tr  r  r@  )r  r  ADD_CONSTRAINT_TOKENSr3   r   AddConstraintr  r  r
  rW   r  rw  r  r   rx  r  AddPartitionr  )
column_defru  rJ  r.   r/   _parse_add_alteration  s   
z<Parser._parse_alter_table_add.<locals>._parse_add_alterationFr  re	  r  )	r  r
  rG   (ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMNr  rR  r
   r  r  )r=   r
  rP  r.   rJ  r/   r    s   
zParser._parse_alter_table_addc                 C  sr  |  | jr| j| jj  | S | tj | jdd}| 	tj
tjr.| jtj|ddS | 	tjtjrA| jtj||  dS | tjrR| jtj||  dS | dddrc| jtj|ddd	S | d
ddrs| jtj|ddS | d
dr| jtj|ddS | d
dr| jtj|ddS | d
d | d | jtj||  | tjo|  | tjo|  dS )NTr  )r!   r
  r  )r!   r  r  r  r  )r!   r
  r  r  F)r!   r  VISIBLE)r!   visible	INVISIBLErN  r  )r!   dtypecollater8  )r  ALTER_ALTER_PARSERSr  r  r  r  r   r  r  r  r  r  r3   r   AlterColumnr  r0  r  r  r  rR  r  r  r  )r=   r  r.   r.   r/   r    sH   
zParser._parse_alter_table_alterexp.AlterDistStylec                 C  sH   |  dr| jtjt| jj dS | dd | jtj| 	 dS )N)r  EVENr  r    rJ  r1  )
r  r3   r   AlterDistStyler   r  r  r  r  rM  rJ  r.   r.   r/   r    s   
zParser._parse_alter_diststyleexp.AlterSortKeyc                 C  s^   |r|  d | jtjddr| jtj|  |dS | d | jtjt	| j
j |dS )Nr  Fr  )ra   r  )r  r  r  )r  r  r   r  r3   r   AlterSortKeyrK  r  r   r  r  r  r  r.   r.   r/   r    s   

zParser._parse_alter_sortkeyc                   sL   j d }  jtjddr fddS | jS )Nr   Fr  c                     r  )N)ru  )r
  r.   partition_existsr=   r.   r/   r     r   z0Parser._parse_alter_table_drop.<locals>.<lambda>)r  rw  r  r   rx  r  re  r
  rd  r.   r%
  r/   r	    s   

zParser._parse_alter_table_drop.t.Optional[exp.AlterRename | exp.RenameColumn]c                 C  s   |  tjs	| js2|  }|  }| d}|  }|d u s&|d u s&|d u r(d S | jtj	|||dS | d | jtj
| jdddS )Nr  )r!   r   ru  Tr  r    )r  r   r  ALTER_RENAME_REQUIRES_COLUMNrw  rM  r  r3   r   RenameColumnAlterRenamerO  )r=   ru  
old_columnr   
new_columnr.   r.   r/   r
    s   

z Parser._parse_alter_table_renameexp.AlterSetc                 C  s  |  tj}| jtjdds| ddr |d| | j	 |S | jdddr2|d| 	 g |S | 
drF|dt| jj  |S | d	rb| 
d
rb|dtd| jj   |S | drq|d|   |S | ddr|d|   |S | dr|d|   |S | dds| dr|d|  g |S | dr|d|   |S | dr|d|   |S | ds| dr|d| | j	 |S | dr|d|   | j| jdd }|d|g |S )!NFr  r}  
PROPERTIESra   FILESTREAM_ON)LOGGEDr  optionr  )CLUSTEROIDSzWITHOUT r_  locationr  METHODaccess_methodr  r  FILErB  
FILEFORMATfile_formatSTAGE_FILE_FORMATSTAGE_COPY_OPTIONScopy_optionsTAGTAGStagr  r4  Tr  )r3   r   AlterSetr  r   r  r  rd   r;  r0  r  r   r  r  r  r  _parse_wrapped_optionsr  r  rk  )r=   	alter_setr  r.   r.   r/   r    sR   
 





zParser._parse_alter_table_setexp.Alter | exp.Commandc                 C  s   | j }| | jo| j }|s| |S |  }| d}| jdd}| tj	r,| 
 nd }| jr5|   | j rB| j| j j nd }|rot|| }| dd}	| | j}
| jso|ro| jtj||j ||||
||	d	S | |S )Nr  Tr  r  VALID)r!   rr  ru  actionsr7  r  rx  	not_valid)r  r  
ALTERABLESry  rw  r  rO  r  r   rs  rt  r  r>  ALTER_PARSERSr3  r  r  r
   r  r  r  r3   r   Alter)r=   r   alter_tokenru  r7  r!   rx  r6  rE
  rF
  r  r.   r.   r/   r  1  s8   



zParser._parse_alterexp.Analyze | exp.Commandc           	   
   C  s  | j }| js| tjS g }| | jr6| j j dkr'|	d| 
   n	|	| j j  | | jsd }d }| joB| jj }| tjsO| tjrT|  }nR| dru| tjtjfrt| d| j j  }| jddd}n1| dr| jddd}n$| dr|  }n| | jrd }| j| j j  | }nd }|  }| | j}|s| | jr| |S | d	d
ds| d	ddrd| j| jd  j  d}nd }| | jr| j| j j  | }|  }| jtj|||||||dS )Nr  zBUFFER_USAGE_LIMIT TABLESr   Tr  r  r2
  r  SYNCr  ASYNCzWITH r"    MODE)rr  r!   r	  r  r  r3   r  )r  r  r3   r   Analyzer  ANALYZE_STYLESr  r  r*   r  r  r   r}  r  rv  r  r  r  r  rO  ANALYZE_EXPRESSION_PARSERSro  r  rJ  ry  r  r  rk  )	r=   r   r  r!   inner_expressionrr  r  r	  r  r.   r.   r/   r  U  sb   





 zParser._parse_analyzeexp.AnalyzeStatisticsc                 C  s   d }| j j }| dr| j j nd }g }| ds!| d | dr)d}n;| tjrE| ddr7d}| drDd}| 	| j
}n| d	rd|  }| jtj|| tjr_| j j nd d
g}| jtj||||dS )NDELTAr  zExpecting token STATISTICSNOSCANr  re	  zFOR ALL COLUMNSzFOR COLUMNSr  )rs  rr  )rr  r1
  r!   ra   )r  r  r  r  r?  r  r   r  r  r  r  r  r3   r   AnalyzeSamplerz  AnalyzeStatistics)r=   r!   rr  r1
  ra   rs  r.   r.   r/   r    s4   




z Parser._parse_analyze_statisticsexp.AnalyzeValidatec                 C  s   d }d }d }|  ddrd}d}|  ddddrd}n(|  drCd}|  d	d
r+d}n|  d	drC| drCd| jj  }|  }| jtj|||dS )Nrd	  r  r  DANGLINGr  r  zUPDATE SET DANGLING TO NULL	STRUCTUREr  FASTzCASCADE FASTCOMPLETE)ONLINEOFFLINEzCASCADE COMPLETE )rr  r!   r3   )	r  r  r  r  r  rp  r3   r   AnalyzeValidate)r=   rr  r!   r3   r.   r.   r/   r    s&   
zParser._parse_analyze_validatet.Optional[exp.AnalyzeColumns]c                 C  s<   | j j }| dr| jtj| d| j j  dS d S )Nre	  r   r    )r  r  r  r  r3   r   AnalyzeColumnsr  r.   r.   r/   r     s   
"zParser._parse_analyze_columnst.Optional[exp.AnalyzeDelete]c                 C  s8   |  dr| jj nd }|  dr| jtj|dS d S )NSYSTEMr  rq  )r  r  r  r  r3   r   AnalyzeDeleter  r.   r.   r/   r    s   
zParser._parse_analyze_delete&t.Optional[exp.AnalyzeListChainedRows]c                 C  s$   |  ddr| jtj|  dS d S )NCHAINEDr  r  )r  r3   r   AnalyzeListChainedRowsrp  rJ  r.   r.   r/   r    s   zParser._parse_analyze_listexp.AnalyzeHistogramc                 C  s"  | j j }d }g }d }| ddr| | j}g }| tjrT| 	dr=| jdddr<|
| j j  d |   n|  }| drN|
| d	 | tjs |r^| jtj|d
}| 	drv| jtjddrv| j j }|   n| ddr| jtj|  d}| jtj||||dS )N	HISTOGRAMrs  )rM
  rN
  r  Fr  rO
  rG  z BUCKETSru   )r  r  r  rN  r    )r!   ra   r3   update_options)r  r  r  r  r  r  r  r   r  r  r*   r>  r  r3   r   AnalyzeWithr  	UsingDatar  AnalyzeHistogram)r=   r!   r3   ra   rk
  with_expressionsrH  r.   r.   r/   r    sB   



zParser._parse_analyze_histogram	exp.Mergec                 C  s   |  tj |  }|r| j tjddr|d|   |  tj |  }|  tj | 	 }| j
tj||||  |  dS )NFr  r  )r!   r8  r5  whensr  )r  r   rq  rO  r  rd   rw  r  rs  r0  r3   r   Mergerz  rp  )r=   r  r8  r5  r.   r.   r/   r    s    zParser._parse_merge	exp.Whensc              	   C  s  g }|  tjr|  tj }| d | ddrdn| dd}|  tjr,|  nd }|  tj |  tjrh| 	 }|rI| j
tj|d}n^| j
tj| drWtdn| jdd| d	od|  d
}n?|  tjr| 	 }|r}| j
tj|d}n*| j
tj|  tjo| | jd}n|  tjr| j
tj| jjd}n| | j}|| j
tj||||d |  tjs| j
tj|dS )NMATCHEDr  TARGETFr  r    r  rx  r  r2   ru   )matchedr  r?	  r<	  )r  r   r  r  r  r  r0  r  r  r	  r3   r   r  r   ry  r  r<  r  r  r  r  r1  r  r  r  r  r*   WhenWhens)r=   rq
  rv
  r  r?	  r!   r<	  ra   r.   r.   r/   rz    sX   




0zParser._parse_when_matchedc                 C  s(   |  | j| j}|r|| S | | jS r  )_find_parserr   r   ry  r  r=   r6  r.   r.   r/   _parse_showN  s   zParser._parse_showc                 C  s   | j }|dv r| dr| j|dkdS |  p|  }| d}|r(| jr/|s/| | d S |  p6| 	 }t
|tjtjfrFt|j}| jtj||d}| jtj||dS )N)rG  r  r  rG  )global_)r  r  r2   r  )r  r  r  r  rM  r  !SET_REQUIRES_ASSIGNMENT_DELIMITERre  r+  r_  rW   r   r  r  r   r   r3   r
  SetItem)r=   rr  rc  leftassignment_delimiterrightr!   r.   r.   r/   r  T  s   

z!Parser._parse_set_item_assignmentr|
  c                   s:     d   fdd} jtjf|ddd|iS )Nr  c                     s      jS r  )r  r  r.   rJ  r.   r/   r   m  r   z/Parser._parse_set_transaction.<locals>.<lambda>)ra   rr  global)r  r  r3   r   r~
  )r=   r|
  characteristicsr.   rJ  r/   r  j  s   

zParser._parse_set_transactionc                 C  s(   |  | j| j}|r|| S | jd dS )Nrq  )ry
  r   r   r  rz
  r.   r.   r/   r  v  s   zParser._parse_set_itemunsetr?
  exp.Set | exp.Commandc                 C  sB   | j }| jtj| | j||d}| jr| | | | j	S |S )N)ra   r
  r?
  )
r  r3   r   Setr  r  r  re  ry  r  )r=   r
  r?
  rc  set_r.   r.   r/   r  z  s   
zParser._parse_setr  r  t.Optional[exp.Var]c                 C  s   | j }|sd S |j }||}| j}|   |pg D ]}t|tr&|f}| j| r7| dd	| } nq|s>|d u rO|rH| 
d|  | | d S t|S )Nr   zUnknown option )r  r  r  r3  r  r>  rW   rH  r  r  r?  re  r   r   )r=   r  r  r   r1
  continuationsrc  r	  r.   r.   r/   r    s(   





zParser._parse_var_from_optionsc                 C  sR   | j r
|   | j s| || j}t|j}|   tj|d | ||d  dS r@   )	r  r>  r_  r  r&   r  rh  r   rj  )r=   r   r  r  r.   r.   r/   ry    s   
zParser._parse_as_commandexp.DictPropertyc                 C  s   g }|    |  }| tjr3	 |  }|  }|s |d u r n|| jtj	||d q| tj
 |   | jtj||rD|j|dS d |dS )NTr  )r!   rr  r  )rp  r_  r  r   r  r  r*   r3   r   DictSubPropertyr  rP  DictPropertyr!   )r=   r!   r  rr  r   r  r.   r.   r/   rY    s,   zParser._parse_dict_propertyexp.DictRangec                 C  sz   |    | d}|r!|  p|  }| d |  p|  }n|  p(|  }tjd}|   | jtj	|||dS )Nr  r  r   )r!   minrR  )
rp  r  r  r  r   r   r   rP  r3   	DictRange)r=   r!   has_minr
  rR  r.   r.   r/   r\    s   

zParser._parse_dict_ranget.Optional[exp.Comprehension]c                 C  s`   | j }|  }| tjs| |d  d S |  }| dr#|  nd }| jt	j
||||dS )Nr   r#  )r!   r3   iteratorr?	  )r  rM  r  r   r  re  r  r0  r3   r   Comprehension)r=   r!   rc  r3   r
  r?	  r.   r.   r/   r    s   zParser._parse_comprehensiont.Optional[exp.Heredoc]c                 C  s  |  tjr| jtj| jjdS | dsd S dg}d }| 	 r.| 
  || jj  n| d |d dkrQ| 	 rL| drL|d }|d n| d | j}| jr}| j|ddirv| || j}| 
t| | jtj||dS | 
  | jsW| dd	| d
 d S )Nr    $zNo closing $ foundr1  r  F)r!   r?
  zNo closing r%  z found)r  r   HEREDOC_STRINGr3   r   Heredocr  r  r  ra  r>  r*   r  r?  r  r_  r&   r  )r=   tagstag_textheredoc_startr!   r.   r.   r/   r    s2   


zParser._parse_heredocparserstriec           	      C  s   | j sd S | j}g }	 | j j }|d}|| |   t||\}}|tj	kr,n|tj
kr:|d| }|S q| | d S )NTr   )r  r  r  r  r   r*   r>  r   r   FAILEDr  r  re  )	r=   r
  r
  rc  r!   currr   r  	subparserr.   r.   r/   ry
    s$   




zParser._find_parserc                 C  s4   | j sd S | j j|kr|r|   | | dS d S NT)r  r;  r>  rV  )r=   r;  r  r3   r.   r.   r/   r     s   
zParser._matchc                 C  s*   | j sd S | j j|v r|r|   dS d S r
  )r  r;  r>  )r=   typesr  r.   r.   r/   r  ,  s   zParser._match_setc                 C  s>   | j r| jsd S | j j|kr| jj|kr|r| d dS d S )Nr"   T)r  r  r;  r>  )r=   token_type_atoken_type_br  r.   r.   r/   r  7  s   
zParser._match_pairc                 C  "   | j tj|ds| d d S d S )Nr  r	  )r  r   r  r?  rY  r.   r.   r/   rp  B     zParser._match_l_parenc                 C  r
  )Nr  r  )r  r   r  r?  rY  r.   r.   r/   rP  F  r
  zParser._match_r_parenc                 C  s8   | j r| j jtjkr| j j |v r|r|   dS d S r
  )r  r;  r   r  r  r  r>  )r=   textsr  r.   r.   r/   r  J  s   zParser._match_textsr  c                G  s^   | j }|D ] }| jr| jjtjkr| jj |kr|   q| |  d S |s-| | dS r
  )	r  r  r;  r   r  r  r  r>  re  )r=   r  r
  rc  r  r.   r.   r/   r  U  s   


zParser._match_text_seqnodec                 C  s   |s|S dd |D }| tjD ]O}||jd j}|d ur`|jr'| n|j}|r5| j	tj
||d}|j}t|tjrTt|jtjsK|| n|j}t|tjs>||u r[|}q|| q|S )Nc                 S  s    i | ]}|j |jd pdqS )r   F)r   r   r3  )r   r7  r.   r.   r/   r   m  r  z*Parser._replace_lambda.<locals>.<dictcomp>r   r   )find_allr   r  r3  r  r   r  r  r!   r3   r   parentrW   r  r  )r=   r
  ra   lambda_typesr  typ	dot_or_idr
  r.   r.   r/   r/  g  s2   

zParser._replace_lambda.t.Optional[exp.TruncateTable] | exp.Expressionc              
     s   j }tjrjd   S tj tj j	dd}
 fdd}tjr; nd }ddrFd}nddrOd}nd }d	s[d
r`j j}nd } }jrn|S jtj| |||||dS )Nr"   Fr  c                     s   j d dS )NTr  r  r.   is_databaser=   r.   r/   r     rS  z.Parser._parse_truncate_table.<locals>.<lambda>RESTARTr  CONTINUEr  r	  )ra   r
  ru  rx  r	  r1
  r  )r  r  r   r  re  r  r  r  r}  rw  r  rs  rt  r  r  r  r  ry  r3   r   TruncateTable)r=   r   ru  ra   rx  r	  r1
  r  r.   r
  r/   r    s@   

zParser._parse_truncate_tablec                 C  s:   |  | j}| tjs|S | jdd}| jtj||dS )NTr  )r!   r  )	rj  r  r  r   r  r  r3   r   WithOperator)r=   r!   r  r.   r.   r/   r    s
   zParser._parse_with_operatorc                 C  s   |  tj |  tj g }| jr@|  tjs@| ddr"|  }n|  }|d u r2| 	d 	 |S |
| | jr@|  tjr|S )NFORMAT_NAMEr  zUnable to parse option)r  r   r
  r  r  r  r  _parse_format_namer  r?  r*   )r=   optsr1
  r.   r.   r/   rA
    s   


zParser._parse_wrapped_optionst.List[exp.CopyParameter]c                 C  s   | j jrtjnd }g }| jrv| jtjddsv| jdd}| jj	
 }| tj | tj | jtj|d}|| jv rL| jtjddrL|d|   n|dkrY|d|   n|d|   || | | | jrv| jtjddr|S )	NFr  Tr  r    ra   r  r3   )rG   COPY_PARAMS_ARE_CSVr   rW  r  r  r  r  r  r  r  r
  r  r3   r   CopyParameterCOPY_INTO_VARLEN_OPTIONSr  rd   rA
  r  r  r*   )r=   r	  r  r1
  prevparamr.   r.   r/   _parse_copy_parameters  s&   

zParser._parse_copy_parameterst.Optional[exp.Credentials]c                 C  s   |  tj}| ddr|d|   | dr-| tjr#| 	 n|  }|d| | dr:|d| 	  | drG|d	|   | d
rT|d|   |S )NSTORAGE_INTEGRATIONr  storageCREDENTIALScredentialsr  
encryptionIAM_ROLEiam_roleREGIONregion)
r3   r   Credentialsr  rd   r  r  r   r
  rA
  )r=   r	  credsr.   r.   r/   _parse_credentials  s   



zParser._parse_credentialsc                 C  rL  r  )r  rJ  r.   r.   r/   _parse_file_location   rR  zParser._parse_file_locationexp.Copy | exp.Commandc                 C  s   | j }| tj | jtjddr| jdddn| jdd}| tjp)| d }| 	| j
}|  }| d | j| jdd}| jrI| |S | jtj|||||d	S )
NFr  Tr	  r  r  r  r  )r!   rr  r
  filesr!  )r  r  r   rq  r  rr  rO  r  r  r  r
  r
  r  r
  r  ry  r3   r   Copy)r=   r   r!   rr  r
  r
  r!  r.   r.   r/   r     s*   


zParser._parse_copyexp.Normalizec                 C  s&   | j tj|  | tjo|  dS )N)r!   form)r3   r   	NormalizerA   r  r   rW  r  rJ  r.   r.   r/   rF  0   s
   zParser._parse_normalizet.Type[TCeilFloor]r   c                   sB      fdd}t|d}t|d}||| do  dS )Nc                     s      S r  ra  r.   rJ  r.   r/   r   8   r  z*Parser._parse_ceil_floor.<locals>.<lambda>r   r   r  )r!   decimalsr   )r  r   r  r  )r=   r8   r   r!   r
  r.   rJ  r/   r0  7   s   

zParser._parse_ceil_floorc                 C  sp   | j }| jddddr|  }t|tjr|dd |S | jtjfi | 	dd| 	d	| 	d
d
|S )Nre	  rM  Fr  unpackTr  r  r  r  )exceptr  rename)r  r  r  rW   r   Columnsrd   r3   r  r	  r  )r=   
star_tokenr!   r.   r.   r/   r  A   s    
zParser._parse_star_opst.Optional[exp.GrantPrivilege]c                 C  s   g }| j r%| j| jdds%|| j j  |   | j r%| j| jddrtd	|}| j
tjddr;| | jnd }| jtj||dS )NFr  r   r-  )r  r  PRIVILEGE_FOLLOW_TOKENSr*   r  r  r>  r   r   r  r  r   r  r;  rM  r3   GrantPrivilege)r=   privilege_partsr!   ra   r.   r.   r/   _parse_grant_privilegeS   s   zParser._parse_grant_privileget.Optional[exp.GrantPrincipal]c                 C  s8   |  do
| jj }|  }|sd S | jtj||dS )N)r  r  r  )r  r  r  r  r_  r3   r   GrantPrincipal)r=   rr  	principalr.   r.   r/   _parse_grant_principale   s
   zParser._parse_grant_principalexp.Grant | exp.Commandc                 C  s   | j }| | j}| tj | | jo| j j	 }| 
| j}|r(| ds-| |S | | j}| ddd}| jrB| |S | jtj|||||dS )Nr  r  GRANTOPTION)
privilegesrr  	securable
principalsgrant_option)r  r  r
  r  r   rs  r  rx  r  r  ro  rv  r  ry  r
  r  r3   r   Grant)r=   r   r
  rr  r
  r
  r
  r.   r.   r/   r  n   s&   

zParser._parse_grantexp.Overlayc              	   C  sL   | j tjfi |  | do|  | do|  | do!|  dS )NPLACINGr  r  )r!   r3   r:  for)r3   r   OverlayrA   r  rJ  r.   r.   r/   rJ     s   zParser._parse_overlayexp.Propertyc                 C  s$   | j tjtd|  p|  dS )Nr
  r  )r3   r   r  r   r  rv  rJ  r.   r.   r/   r
     s
   zParser._parse_format_namet.Type[exp.AggFunc]exp.AggFuncc                 C  sn   g }|  tjr|| jtj|  gd |  tj |	| 
| j | j|t|dt|dt|ddS )Nru   r   r   r"   )r!   r3   r  )r  r   r  r*   r3   r   rn  r0  rW  r  r  r   )r=   r8   r   r.   r.   r/   r&     s   zParser._parse_max_min_byc                 K  s2   |p| j }| jtjfd|ji|}|| |S r  )r  r3   r   r  r  r  )r=   r  r  r3   r.   r.   r/   r     s   

zParser._identifier_expressionr  	exp.Query	alias_cte
exp.Selectc                 C  sz   |r|}n|  j d7  _ d| j  }|jd}|r| nd }tj|ddij|dd}|r5|d| |j||ddS )Nr   __tmpr6  r#   Fr  )as_r#   )	r  r   r3  r^  r   rY  rZ  rd   r3  )r=   r  ra   r
  new_cter3  ctes
new_selectr.   r.   r/   r     s   zParser._build_pipe_ctec                 C  s6   | j dd}|s
|S | j|j|jddit gdS )NFrV  r*   r  ra   )rr  r  rY  ra   r   r  )r=   r  rY  r.   r.   r/   r     s   z Parser._parse_pipe_syntax_selectc                 C  s   |   }|  }|r"|jd|}|j |j kr"|j|dd |rC|jd}|r1|j nd}|jtj	
||j  dd |S )Nrk  Fr  rl  r   )re  rg  r   r3  r3   r.  rk  rl  r   r   r   )r=   r  rk  rl  
curr_limitcurr_offsetr.   r.   r/   r     s    zParser._parse_pipe_syntax_limitc                   sR   |    | jddddr S |   | jtjtjfddr'|  fddS  S )Nr  r  Fr  c                     s    S r  r.   r.   r    r.   r/   r      s    z<Parser._parse_pipe_syntax_aggregate_fields.<locals>.<lambda>)r0  r  rn  r  r   r  r  rj  rJ  r.   r    r/   #_parse_pipe_syntax_aggregate_fields   s   
z*Parser._parse_pipe_syntax_aggregate_fieldsgroup_by_existsc                 C  s   |  | j}g g }}|D ]'}t|tjr-|j}t|tjr'|d|jd  |	| n|}|	| q|rK|j
|ddijdd |D ddi n	|j
|ddd |r_|j|dddS |S )Nr!   r  r#   Fc                 S  s   g | ]	}|j d |qS r  )r   r3  )r   
projectionr.   r.   r/   r   !  r   zFParser._parse_pipe_syntax_aggregate_group_order_by.<locals>.<listcomp>r  )r  r
  rW   r   r  r!   r  rd   r   r*   rY  group_byr  )r=   r  r
  r	  aggregates_or_groupsorderselementr!   r.   r.   r/   +_parse_pipe_syntax_aggregate_group_order_by   s(   
z2Parser._parse_pipe_syntax_aggregate_group_order_byc                 C  sZ   |  d | j|dd}| tjs|  ddr#| tjr#| |}| j|t gdS )Nr  F)r
  r  r  r
  )	r  r  r  r   r  r  r  r   r  r  r.   r.   r/   r  !  s   



z#Parser._parse_pipe_syntax_aggregatet.Optional[exp.Query]c                   s    j |d}|s
d S d
 fdd}|j  |j tj g |} j	|t
 gd}|jd}|r=| nd }t|tjrQ|j|dd	i|j}nt|tjrc|j|dd	i|j}n|j|dd	i|j}|d|  j	|t
 gdS )Nr    r   t.Optional[exp.Select]c                    s       } | r| tj S d S r  )r  	assert_isr   r  r  )r	  rJ  r.   r/   _parse_and_unwrap_query!  s   zGParser._parse_pipe_syntax_set_operator.<locals>._parse_and_unwrap_queryr
  r6  r#   F)r   r  )rW  r!   r^  r3   r  r   r  r  r  r  r  r   r3  rW   r  unionr  except_	intersectrd   )r=   r  first_setopr  setopsr3  r
  r.   rJ  r/   _parse_pipe_syntax_set_operator!  s&   
z&Parser._parse_pipe_syntax_set_operatorc                 C  s.   |   }|sd S t|tjr|j|ddS |S r  )r`  rW   r   ro  r  )r=   r  r  r.   r.   r/   _parse_pipe_syntax_join5!  s   zParser._parse_pipe_syntax_joinc                 C  sB   |   }|s|S |jd}|r|jd| | j|t gdS )Nr:  r  r
  )r  r   r3  r!   rd   r  r   r  )r=   r  r  rZ  r.   r.   r/   r  ?!  s   zParser._parse_pipe_syntax_pivotc                 C  s>   |  d |jt g|  ddd | j|t gdS )Nr  Fr  r
  )r  rY  r   r  rP  r  r  r.   r.   r/   r  J!  s   
 z Parser._parse_pipe_syntax_extendc                 C  s@   |   }|jd}|r|jd jd| |S |d| |S )Nr6  r1  rs  )rv  r   r3  ra   r!   rd   )r=   r  rs  r3  r.   r.   r/   r  O!  s   z%Parser._parse_pipe_syntax_tablesamplec                 C  s   t |tjrtdj|dd}|jds$tdj|jdddd}| t	j
ri| j}| j| jj }|s^| |}|pD| |}|s[| | | d|j  d 	 |S |}n|| |}| t	j
s*|S )NrU  Fr  r:  z#Unsupported pipe syntax operator: 'z'.)rW   r   r  rY  rZ  r   r3  re  r  r   rb  r  PIPE_SYNTAX_TRANSFORM_PARSERSr  r  r  r  re  r?  )r=   r  r   r6  parsed_queryr.   r.   r/   rd  Z!  s&   


zParser._parse_pipe_syntax_query)r   rt   )Nr  r  N)r  r  r  r   r  r   rG   r   r  )r&  r'  r  r}   r   r(  )r-  r.  r&  r'  r  r}   r   r(  )r)  r9  r&  r'  r  r}   r   r(  )r   rD  )rJ  rH  r  rK  r   rD  )rr   r_   r=  rT  r   r   )r3   r?   r   rD  )r3   r   r   rZ  r   r   )r   r   r   r   r   rH  )r   r;   )r   )rb  r   r   rD  )rc  r   r   rD  )r   ri  F)r)  rl  rm  r;   r   rn  T)rp  r;   r   rt   )r   r  r  )ru  r;   r   r  )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&  )r   r*  )r   r,  )r   r0  )r3  r;   r   r4  )r   r?  )r   rE  )r8   r_   r   r   )r   rL  )r   r[  )r   r\  )r   rb  )r  r;   r   rd  )r   rg  )r   rj  )r  r;   r   rl  )r   rm  )r   rs  )r   rv  )FF)r  r;   r  r;   r   r{  )NNN)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   r  )r   r  )r  r;   r   r  )r  r;   r   r  )r   r  )r   r  )r   r  )r=  rT  r   r  )r   r  )r   r
  )r   r  )r   r  )r   r  )r3  r;   r   r  )r  r;   r   r  )r   r1  )r   r6  )r   r9  )r   r=  )r   r?  )r   rB  )r   rH  )r%   r;   r   rL  )r  r;   r   r?   )FFTTT)rE  r;   r  r;   r`  r;   rW  r;   rT  r;   r   r?   )FFTT)
rE  r;   r  r;   r`  r;   rW  r;   r   r?   )r   ry  )r~  r;   r   r  )r   r  )rt  r  r   r  )r!   r?   rk  r;   r   r  )r!   r   r   r   )r!   r?   r   r?   )r   r  )r   r  )FFF)rW  r;   rS  r;   rT  r;   r   r  )r   r  )r   r  )r   r  )r   r  )r  r;   r  r;   r   r  )r   r  )NF)rc  r?   r  r;   r   r  )r   r#  )rP  r;   r   r?   )rP  r;   r  r;   r+  r;   r   r,  )FFNFFFF)rP  r;   rW  r;   rt  r  r  r;   r  r;   r  r;   rT  r;   r   r?   )r   r>  )r   rE  )r   rK  )rP  r;   r   rQ  )r   rU  )rt  r;   r   rW  )r   rf  )r   rh  )r   ri  )r  r   r   rl  )r   rt  )r   r|  )r  r  r   r  )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  )r!   r?   ru  r;   r   r?   )rr   r_   r  r   r   r  )r)  r  r   r  )r   r  )NFF)r!   r?   rg  r;   r  r;   r   r?   )r   r  )r!   r?   rT  r;   r   r?   )r!   r?   r  r;   r   rt  )r!   r?   r   r$  )r)  r;   r   r*  )TF)rL  r;   rM  r;   r   r?   )r   rX  )r[  r\  r   r?   )FFT)rN  r;   rP  r;   rO  r;   r   r?   )rf  r;   r   r?   )FNF)r  r;   rC  r  r  r;   r   r?   )NFTF)
r  r  r  r;   r)  r;   r  r;   r   r?   )r3   rt   rc  r   r   rt   )ra   r  r   r  )rr  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  )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   r?   )r   rC	  )r   rE	  )rH	  r;   r   r   r   rt   )r   rX	  )rH	  r;   r   r   r   r?   )r   r`	  )r   rk	  )r   rn	  )r   rs	  )r   ry	  )r5  rH  r%   rH  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	  rH  r   r	  )r   r	  )r   r	  )r!   r?   r  r;   r   r?   )r   r	  )r   r	  )r!   r?   r,	  r;   r   r?   )TN)r  r;   rC  r  r   r?   )r   r	  )r  r;   rC  r  r  r;   r   r?   )r  r;   r   rK  )r  r;   r   r?   )r   r	  )r	  rH  r   r#  )r)  r	  r	  r   r   r  )r)  r	  ra   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
  )r   r
  )r   r
  )ru  r   r   r
  )r   r 
  )r  r   r   r#
  )r   r'
  )r   r-
  )r   rC
  )r   rK
  )r   rT
  )r   rY
  )r   ra
  )r   rc
  )r   rf
  )r   ri
  )r   rp
  )r   rs
  )rr  r}   r   r?   )r|
  r;   r   rt   )r
  r;   r?
  r;   r   r
  )r  r  r  r;   r   r
  )r   r   r   ri  )r!   rH  r   r
  )r!   rH  r   r
  )r!   r?   r   r
  )r   r
  )r
  r#  r
  r  r   r  )r
  r?   ra   r  r   r?   )r   r
  )r   r(  )r   r
  )r   r
  )r   r
  )r   r
  )r8   r
  r   r   )r   r
  )r   r
  )r   r
  )r   r
  )r   r
  )r8   r
  r   r
  )r  rK  r  r  r   r\  )r  r
  ra   r  r
  r  r   r
  )r  r
  r   r
  )r  r
  r
  r;   r   r
  )r  r
  r   r  (  r   r   r   __doc__r   FUNCTION_BY_NAMEr   dictfromkeysr   r   rU   rg   rc   rA  r7   rN   rZ   rl   r   r   r^   r0   r$  __annotations__r   CURRENT_DATECurrentDateCURRENT_DATETIMECURRENT_TIMECurrentTimeCURRENT_TIMESTAMPCurrentTimestampCURRENT_USERCurrentUserr  r	  r  r$  r  ry  r   r%  LOWCARDINALITYr)  r{  r  rx  r/  ENUMENUM8ENUM16r|  AGGREGATEFUNCTIONSIMPLEAGGREGATEFUNCTIONrz  BITr	  TINYINTUTINYINTSMALLINT	USMALLINTINTUINTBIGINTUBIGINTINT128UINT128INT256UINT256	MEDIUMINT
UMEDIUMINTFIXEDSTRINGFLOATDOUBLEUDOUBLEr   NCHARVARCHARNVARCHARBPCHARr   
MEDIUMTEXTLONGTEXTBLOB
MEDIUMBLOBLONGBLOBBINARY	VARBINARYr  JSONBr,  TINYBLOBTINYTEXTrm  r  r  TIMESTAMP_STIMESTAMP_MSTIMESTAMP_NSrO  r  TIMESTAMPNTZDATETIME	DATETIME2
DATETIME64SMALLDATETIMErM	  DATE32	INT4RANGEINT4MULTIRANGE	INT8RANGEINT8MULTIRANGENUMRANGENUMMULTIRANGETSRANGETSMULTIRANGE	TSTZRANGETSTZMULTIRANGE	DATERANGEDATEMULTIRANGEDECIMAL	DECIMAL32	DECIMAL64
DECIMAL128
DECIMAL256UDECIMAL
BIGDECIMALUUID	GEOGRAPHYGEOMETRYPOINTRING
LINESTRINGMULTILINESTRINGPOLYGONMULTIPOLYGON	HLLSKETCHHSTORErt  SUPERSERIALSMALLSERIAL	BIGSERIALXMLYEARUSERDEFINEDMONEY
SMALLMONEY
ROWVERSIONIMAGEVARIANTr}  r  rv  INET	IPADDRESSIPPREFIXIPV4IPV6rK	  r  r  rU  TDIGESTrp  r  r   r  r  Allr  ExistsSOMEr  r   SINGLE_TOKENSr%   r  r  r  r  
DICTIONARYr  r	  	NAMESPACEr  r  r  r  STAGEr
  	STREAMLITr}  r=
  r  r  r  r  r  FOREIGN_KEYrz  r  r{  rx  rG
  ATTACHrq  ANTIr  r  ASOFr  r  r  r!  r  r  r  r  r  r  CURRENT_SCHEMAr  r  r  rt  DETACHDIVr  r<  EXPORTr(  r  r  r	  r  rB  r  GETr  r  r  KILLLEFTr  LOADMERGEr	  r  r  OPERATORr  OVERLAPSr  rx  rz  r  PRAGMAPUTr  r  r  r  r  RIGHTr  r  r  SEMIr  r  r  r  r  r  r   r  r   r  r  USEr  r	  r  removera  r  r	  r  rw   r  r3	  r~  r;  r	  r   ILIKEr  r   PRIMARY_KEYRLIKEXORr  r  Andr'  COLON_EQr  r(  r  Orr)  r
  NEQNULLSAFE_EQr  r  r  GTEr  LTEr  r  
BitwiseAndCARET
BitwiseXorPIPE	BitwiseOrr8  DASHSubr4  r5  r  rk   r@  r?  rE  LR_ARROWDistanceSLASHrG  r1  MulrD  r*  r  r~  	INTERSECTr  r  
POSITIONALr  r  r  r  r  r
  r  rd   r+  ARROWrH  r  r  r  r  DARROW
HASH_ARROWDHASH_ARROWPLACEHOLDERr  rH  r  	Conditionr   r2  r\  r  r  r  r  r  r.  r  r  r  r  r  r  r  r  r  ro  rt  r  r  rO  rx
  r  r  r  r2  r  r  CREATEr  r
  r  UNCACHEr<  r  r  TILDA
PIPE_SLASHDPIPE_SLASHrJ  r
  NATIONAL_STRING
RAW_STRINGr  UNICODE_STRINGr	  
BIT_STRINGBYTE_STRING
HEX_STRINGr`  r	  
INTRODUCERSESSION_PARAMETERr  r^  r  r	  AT_GTrF   ArrayContainsAllrB  r   ILiker  IRLIKERegexpILiker4   LT_ATOverlaps
RegexpLike
SIMILAR_TO	SimilarTor  r  r  r  r
	  r  rH
  r
  r	  r  r  r  r  r7	  r  r'  	sql_namesr+  r  r  r  r  r  r  r  r  r  r^  r  rI  r|  ru  r  r  r  r   r   r   rQ  r  r  r  r  r-  r	  r  tupler  r  r  r  r  r  r  r  r  r  r  r  rF  rG  r  rW  r  r  FORCEr  r&  rR  r	  rA	  r	  r	  rt	  r  rJ  r
  r  rm  r	  rS  r  r
  r  DateTime	Timestampr0	  r}	  rs  r
  r  rQ
  rR
  rJ  r  r  r{  rc  TableFromRowsr  r8  r  r  rL   r_  r  r}
  r	  r	  r  r  r>	  r=  r  r  r  r2  r9  r  r  r(
  r  rR  	__slots__r   r   r$  r#  r,  r8  r*  r@  r?  r3   rV  rW  r_  ra  r>  re  rh  rk  ro  r  r  r  r+  r  rw  r  r  r  r  r  r  r  r  rk  rA  r  r  r  r2  r  r!  r+  r-  r  rY  r#  rQ  re  rT  r  r  r  r  rF  ri  r  r  rZ  rc  r  r  ry  rm  rT  r  rk  rr  rt  r  r2  r^  r  r  r  r  r  r  r  r  r	  rp  r  rV  r  r  r  r  r  r  r  r  ry  rQ  r_  rr  ra  r}  r~  r  rw  rq  r  r  r  r  r]  r  rp  rX  r  ra  rc  r  r  r`  r  r  r  r(  r  rv  rO  r:  r4  r3  r  r  rv  r  r  rk  r  r{  rg  r  rc  r|  rZ  r  r  r\  ro  r  r  r  r  ri  rG  rj  r  re  rg  r  r  rp  rW  r  rT  r0  r  r  r  r  r  r  r  r  r  rB   r6  rA   r  ra  rC  r  rC  rZ  ra  rR  r  rK  rM  r  r  r  rP  r  r  r  r  r  r  r  r  r  r|  r  r  r  rb  rR  r  r  r  r  r  r  r  r  r  r  r	  r	  r	  r  r	  r  r  r"	  r  r~  r.	  r1	  r  r-	  r  r  rB	  r7  r;  r.  rR  r3  rX  ri	  r5  rv	  rx	  r	  r|	  r  overloadr>  r	  r	  rB  rD  rH  rL  rN  r	  rS  rT  rh  r}  r  r  r  r	  r	  rn  r_  r  r  r  r  r  r>  r  r	  r  r	  r	  r  r*  r	  r  r  rK  r;  r  rP  ru  r  r  r  r  r
  r
  r
  r  r  r  r  r	  r
  r  r  r  r  r  r   r  r  r  r  rz  r{
  r  r  r  r  r  ry  rY  r\  r  r  ry
  r  r  r  rp  rP  r  r  r/  r  r  rA
  r
  r
  r
  r  rF  r0  r  r
  r
  r  rJ  r
  r&  r  r  r  r  r
  r  r  r  r  r  r  r  rd  r.   r.   r.   r/   r>      sD  
 

!"
#
$
%&'()*+,-./01256789=L		
 !"#$%&'()*+,-./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YZ[\]^_`abcdefghijklmnopqrv	
 !"#$%&'()*+,-./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Y[
	
 !"#$%&'()*.

		)	
"





	





 




 !"#&'()*+,-.1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VWXYZ[\]`abcdefgjq




!$
%()*
+,-.34567:;<=BEFI




	
%	




 	


(&	%) .# '
2$
(<	"	"
!r&""X6	
L!"	C_Ae5.	5= :"?	 p	;4 a
:5
"	"4
:5 	s*

	,
$$A &5$"2
!
			
r>   )	metaclass)r   r   r   r   )r   r   r   r1   r  )r8   r9   r:   r;   r   r<   )r   r   rG   r   r   rH   )r   r   rG   r   r   rO   )r   r   r   rV   )r   r   r   r\   )r8   r_   r   r`   )r   r   r   rh   r  )r   r   rm   r;   )
rr   r_   r   r   rs   r   rG   r   r   rt   r  )r   r   r|   r}   r   r~   rf  )r   r   r   r   r   r   r   r   )r   r   )F
__future__r   loggingretypingr  r  collectionsr   r   r   sqlglot.errorsr   r   r   r   sqlglot.helperr	   r
   r   sqlglot.timer   sqlglot.tokensr   r   r   sqlglot.trier   r   r   TYPE_CHECKINGsqlglot._typingr   r   sqlglot.dialects.dialectr   r   TypeVarr   r1  r9  r   	getLoggerrF  DictrH  Sequencer  r  compiler   r  r0   r7   rF   rN   rU   rZ   r^   rg   rl   rq   r{   r   r   r   r   typer   r>   r.   r.   r.   r/   <module>   sP    

$








		

