o
    8Di|                     @  s  d dl mZ d dlZd dlmZmZmZmZm	Z	 d dl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4 ej5rd d	l
m6Z6 d
ddddddZ7dDddZ8dEddZ9dFddZ:dGd!d"Z;dGd#d$Z<dHd(d)Z=dId+d,Z>dJd0d1Z?dKdLd5d6Z@dMd8d9ZAdNd;d<ZBdOd=d>ZCdPd@dAZDG dBdC dCeZEdS )Q    )annotationsN)exp	generatorparsertokens
transforms)!DATE_ADD_OR_SUBDialectJSON_EXTRACT_TYPEany_value_to_max_sqlbinary_from_functionbool_xor_sqldatestrtodate_sqlbuild_formatted_timefilter_array_using_unnestinline_array_sqljson_extract_segmentsjson_path_key_only_namemax_or_greatestmerge_without_target_sqlmin_or_leastno_last_day_sqlno_map_from_entries_sqlno_paren_current_date_sqlno_pivot_sqlno_trycast_sqlbuild_json_extract_pathbuild_timestamp_truncrename_func
sha256_sqlstruct_extract_sqltimestamptrunc_sqltimestrtotime_sqltrim_sqlts_or_ds_add_caststrposition_sqlcount_if_to_sumgroupconcat_sqlVersion)unsupported_args)is_intseq_get)binary_range_parser)	TokenType)DialectTypez
 * 1000000z * 1000 z / 60z / 3600z / 86400)MICROSECONDMILLISECONDSECONDMINUTEHOURDAYkindstrreturn6t.Callable[[Postgres.Generator, DATE_ADD_OR_SUB], str]c                   s   d	 fdd}|S )
NselfPostgres.Generator
expressionr   r8   r7   c              
     s   t |tjr
t|}| |d}|jd}| |j}t |tj	r(d|jd< n|j
r4tj	| }n| d | d  d| tj||d S )NthisunitT	is_stringzCannot add non literal )r=   r>   )
isinstancer   	TsOrDsAddr$   sqlargsget_simplify_unless_literalr<   Literal	is_numberstringto_pyunsupportedInterval)r:   r<   r=   r>   er6    R/var/www/Datamplify/venv/lib/python3.10/site-packages/sqlglot/dialects/postgres.pyfunc=   s   
$z_date_add_sql.<locals>.func)r:   r;   r<   r   r8   r7   rO   )r6   rQ   rO   rN   rP   _date_add_sql<   s   rR   r:   r;   r<   exp.DateDiffc                 C  s   | d }t|}d| |d d}d| |d d}|d ur0d| d| d| d	S d
| d| d}|dkrGd| d| d}n)|dkrUd| d| d}n|dkrcd| d| d}n|dkrnd| d}n|}d| d	S )Nr>   zCAST(r=   z AS TIMESTAMP)r<   zCAST(EXTRACT(epoch FROM z - )z AS BIGINT)zAGE(z, WEEKzEXTRACT(days FROM (z)) / 7MONTHzEXTRACT(year FROM z) * 12 + EXTRACT(month FROM QUARTERz) * 4 + EXTRACT(month FROM z) / 3YEAR)textupperDATE_DIFF_FACTORrE   rC   )r:   r<   r>   factorendstartagerO   rO   rP   _date_diff_sqlQ   s"   
r`   exp.Substringc                 C  s\   |  |d}|  |d}|  |d}|rd| nd}|r"d| nd}d| | | dS )	Nr=   r^   lengthz FROM r/   z FOR z
SUBSTRING(rT   rC   )r:   r<   r=   r^   rb   	from_partfor_partrO   rO   rP   _substring_sqlk   s   rf   exp.Expressionc                 C  s   |  tj}|rV| jd |j | jd }|jtjjj	kr,|
tjtjjjd | S |jtjjjkrB|
tjtjjjd | S |jtjjjkrV|
tjtjjjd | S )Nconstraintsr6   r=   )findr   AutoIncrementColumnConstraintrD   removeparentr=   DataTypeTypeINTreplaceSERIALSMALLINTSMALLSERIALBIGINT	BIGSERIAL)r<   autor6   rO   rO   rP   _auto_increment_to_serialv   s   
rx   c                 C  s   t | tjs| S | j}|s| S |jtjjjkr!tjtjjjd}n&|jtjjj	kr3tjtjjj
d}n|jtjjjkrEtjtjjjd}nd }|r|| jd | | jd }tjtjddd}tjt d}||vrr|d| ||vr||d| | S )Nri   r6   rh   FrN   r   )rA   r   	ColumnDefr6   r=   rn   ro   rr   rp   rt   rs   rv   ru   rD   rq   ColumnConstraint#GeneratedAsIdentityColumnConstraintNotNullColumnConstraintinsert)r<   r6   	data_typerh   	generatednotnullrO   rO   rP   _serial_to_generated   s,   
r   rD   t.Listexp.ExplodingGenerateSeriesc                 C  s`   t | d}|d ur*|jrt|j| d< nt|tjr*|jds*t|jj| d< tj	
| S )N   r>   )r+   r?   r   to_intervalr=   rA   rL   rD   rE   ExplodingGenerateSeriesfrom_arg_list)rD   steprO   rO   rP   _build_generate_series   s   
r   exp.UnixToTime | exp.StrToTimec                 C  s(   t | dkrtj| S ttjd| S )N   postgres)lenr   
UnixToTimer   r   	StrToTimerD   rO   rO   rP   _build_to_timestamp   s   r   nameop8t.Callable[[Postgres.Generator, JSON_EXTRACT_TYPE], str]c                   s   d	 fdd}|S )
Nr:   r;   r<   r
   r8   r7   c                   s.   |j drt dd| |S t | |S )Nonly_json_typesF)quoted_indexr   )rD   rE   r   r:   r<   r   r   rO   rP   	_generate   s   z$_json_extract_sql.<locals>._generate)r:   r;   r<   r
   r8   r7   rO   )r   r   r   rO   r   rP   _json_extract_sql   s   r   dialectr.   exp.RegexpReplacec                 C  s   t | dkrC| d }t|jsC|jr|tjjjtjjj	r*ddl
m} |||d}|jtjj rCtj| d d }|d| |S tj| S )N   r   annotate_typesr   	modifiers)r   r*   r   typeis_typer   rn   ro   UNKNOWNNULL sqlglot.optimizer.annotate_typesr   
TEXT_TYPESRegexpReplacer   set)rD   r   lastr   regexp_replacerO   rO   rP   _build_regexp_replace   s   
r   exp.UnixToTimec              
   C  s^   |j d}|j}|d tjjfv r| d|| |S | dtj|tdd|d| |S )NscaleTO_TIMESTAMPPOW
   r=   r<   )	rD   rE   r=   r   r   SECONDSrQ   format_timeDiv)r:   r<   r   	timestamprO   rO   rP   _unix_to_time_sql   s   r   exp.Levenshteinc                 C  s<   |   }tjt| dt| dt| dt| dt| d|dS )Nr   r   r   r      )r=   r<   ins_costdel_costsub_costmax_dist)popr   Levenshteinr+   )rD   r   rO   rO   rP   _build_levenshtein_less_equal   s   r   c                 C  s"   |j drdnd}t|| |S )Nr   LEVENSHTEIN_LESS_EQUALLEVENSHTEIN)rD   rE   r   )r:   r<   r   rO   rO   rP   _levenshtein_sql   s   r   exp.AnyValuec                 C  s(   | j jtdk rt| |S td| |S )Nz16.0	ANY_VALUE)r   versionr(   r   r   r   rO   rO   rP   _versioned_anyvalue_sql  s   
r   c                   @  s8  e Zd ZdZdZdZdZdZdZ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"i d#d$d%d$d&d'd(d'd)d*d+d,d-d,d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d;d=d>d?d>d@d@dAZ	G dBdC dCe
jZG dDdE dEejZG dFdG dGejZdHS )IPostgresr   Tnulls_are_largez'YYYY-MM-DD HH24:MI:SS'AMz%pPMdz%uDddz%dDDdddz%jDDDFMDDz%-dFMDDDz%-jFMHH12z%-IFMHH24z%-HFMMIz%-MFMMMz%-mFMSSz%-SHH12z%IHH24z%Hmiz%MMImmz%mMMOFz%zssz%SSSTMDayz%ATMDyz%aTMMonz%bTMMonthz%BTZz%ZUSz%fwwz%UWWyyz%yYYz%Y)yyyyYYYYc                   @  s  e Zd ZddgZddgZddgZdgZdZej	Z
i ejji d	ejd
ejdejdejdejdejdejdejdejdejdejdejdejdejdejdejdeji dejdejdejdejdejdejd ejd!ejd"ejd#ej d$ej!d%ejd&ejd'ejd(ejd)ejd*ejejejejejejej"d+Ze#d, e#d- i ejj$dej%iZ$dhZ&d.S )/zPostgres.Tokenizer)zb'')zB'r   )zx'r   )zX'r   )ze'r   )zE'r   $T~z@@z@>z<@z|/z||/BEGINzBEGIN TRANSACTIONrv   zCONSTRAINT TRIGGERCSTRINGDECLAREDOEXECHSTOREINT8MONEYNAMEOIDONLYOPERATORREFRESHREINDEXRESETREVOKErr   rt   TEMPREGCLASSREGCOLLATION	REGCONFIGREGDICTIONARYREGNAMESPACEREGOPER)REGOPERATORREGPROCREGPROCEDUREREGROLEREGTYPEFLOATz/*+DIVN)'__name__
__module____qualname__BIT_STRINGSHEX_STRINGSBYTE_STRINGSHEREDOC_STRINGSHEREDOC_TAG_IS_IDENTIFIERr-   	PARAMETERHEREDOC_STRING_ALTERNATIVEr   	TokenizerKEYWORDSRLIKEDATAT_GTLT_AT
PIPE_SLASHDPIPE_SLASHCOMMANDr   rv   PSEUDO_TYPEr   ru   r   r   OBJECT_IDENTIFIERr   r   rr   rt   	TEMPORARYDOUBLEr   SINGLE_TOKENSHEREDOC_STRINGVAR_SINGLE_TOKENSrO   rO   rO   rP   r  ;  s    	
 !"#$
+

r  c                      s  e Zd Zi ejjddd iZed i ejji dej	j
deddd d	ed
eejdeejddd dejj
dejj
dejj
dedeejddeejddedejj
ddd ddd dd edd ejj
dZi ejjejejiZi ejjdd dd d Zi ejj ej!ej"iZ ej#ej$iZ%i ejj&ej'e(ej)ej*d!d ej+d"d iZ&i ejj,ej-d#d iZ,d$Z.i ejj/ej0d%d ej1d&d iZ/d;d*d+Z2d<d-d.Z3d=d/d0Z4d>d2d3Z5d? fd5d6Z6d@d9d:Z7  Z8S )AzPostgres.ParserSETc                 C  s   | j tj|  dS )Nri   )r<   r   SetConfigProperty
_parse_setr:   rO   rO   rP   <lambda>|  s    zPostgres.Parser.<lambda>INPUTASCII
DATE_TRUNCr  c                 C  s   t tt j| t jjjS N)r   castr   IntDivrn   ro   DECIMALr   rO   rO   rP   r.    s    GENERATE_SERIESJSON_EXTRACT_PATHJSON_EXTRACT_PATH_TEXTLENGTHc                 C  s   t jt| dt| ddS )Nr   r   )r=   encoding)r   Lengthr+   r   rO   rO   rP   r.        	MAKE_TIMEMAKE_TIMESTAMPNOWREGEXP_REPLACETO_CHARr   TO_DATEr   UNNESTSHA256c                 C     t jt| dt jddS )Nr      r=   rb   r   SHA2r+   rG   numberr   rO   rO   rP   r.        SHA384c                 C  rE  )Nr   i  rG  rH  r   rO   rO   rP   r.    rK  c                 C  rE  )Nr   i   rG  rH  r   rO   rO   rP   r.    rK  c                 C  s   t j| dS )Nexpressions)r   JSONObjectAggr   rO   rO   rP   r.        )SHA512r   JSON_OBJECT_AGGJSONB_OBJECT_AGGc                 C     |   S r2  )_parse_date_partr-  rO   rO   rP   r.        c                 C  rT  r2  )_parse_jsonb_existsr-  rO   rO   rP   r.    rV  )	DATE_PARTJSONB_EXISTSc                 C  s   | j tj|  |gdS )N)r=   rN  )r<   r   MatchAgainst_parse_bitwiser:   r=   rO   rO   rP   r.    s    c                 C  
   |  |S r2  )_parse_operatorr\  rO   rO   rP   r.       
 c                 C  rT  r2  )_parse_commit_or_rollbackr-  rO   rO   rP   r.    rV  Tc                 C     t tj| jd||gS N)arrow_req_json_type)r   r   JSONExtractJSON_ARROWS_REQUIRE_JSON_TYPEr:   r=   pathrO   rO   rP   r.    
    c                 C  ra  rb  )r   r   JSONExtractScalarre  rf  rO   rO   rP   r.    rh  r=   t.Optional[exp.Expression]r8   c                 C  s   	 |  tjs
	 |S d}| jr(|  tjs(|| jj7 }|   | jr(|  tjr| jtj	| j
|||  d}|  tjs?	 |S q)NTr/   )commentsr=   operatorr<   )_matchr-   L_PAREN_currR_PARENrY   _advancer<   r   Operator_prev_commentsr[  r   )r:   r=   r   rO   rO   rP   r^    s(   zPostgres.Parser._parse_operatorrg   c                 C  sP   |   }| tj |  }|rt|tjtjfrt	|j
}| jtj||dS )Nr   )_parse_typerm  r-   COMMAr[  rA   r   ColumnrG   varr   r<   Extract)r:   partvaluerO   rO   rP   rU    s   z Postgres.Parser._parse_date_partc                 C  s   d S r2  rO   r-  rO   rO   rP   _parse_unique_key  s   z!Postgres.Parser._parse_unique_keyexp.JSONBExistsc                 C  s.   | j tj|  | tjo| j|  dS )N)r=   rg  )	r<   r   JSONBExistsr[  rm  r-   ru  r   to_json_pathr-  rO   rO   rP   rW    s   z#Postgres.Parser._parse_jsonb_existskexp.GeneratedAsIdentityColumnConstraint | exp.ComputedColumnConstraint | exp.GeneratedAsRowColumnConstraintc                   s*   t   }| dr| jtj|jd}|S )NSTOREDri   )super_parse_generated_as_identity_match_text_seqr<   r   ComputedColumnConstraintr\  	__class__rO   rP   r    s   

z,Postgres.Parser._parse_generated_as_identity
identifierexp.Identifierc                 C  sF   |}|  tjr|  }|rtj||d}|  tjstjj|ddS )Nr   T)udt)rm  r-   DOT_parse_id_varr   Dotrn   build)r:   r  udt_typery  rO   rO   rP   _parse_user_defined_type  s   z(Postgres.Parser._parse_user_defined_type)r=   rj  r8   rj  )r8   rg   )r8   rj  )r8   r|  )r8   r  )r  r  r8   rj  )9r  r  r  r   ParserPROPERTY_PARSERSr   	FUNCTIONSr   Unicoder   r   r   r   rd  ri  TimeFromPartsTimestampFromPartsCurrentTimestampr   r   	TimeToStr	StrToDater   Exploder   JSONBObjectAggNO_PAREN_FUNCTIONSr-   CURRENT_SCHEMACurrentSchemaFUNCTION_PARSERSBITWISEHASH
BitwiseXorCARETPowEXPONENTRANGE_PARSERSDAMPr,   ArrayOverlapsr  r   STATEMENT_PARSERSENDre  COLUMN_OPERATORSARROWDARROWr^  rU  r{  rW  r  r  __classcell__rO   rO   r  rP   r  y  s    


	


	








r  c                      s  e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdZdZdZdZdZejejejhZi ejjej j!j"dej j!j#dej j!j$dej j!j%dej j!j&dej j!j'dej j!j(d	ej j!j)d	ej j!j*di	Zi ejj+i ej,e-ej.d
d ej/e0ej1dd ej2e34e5e6gej7e8ej9dd ej:dd ej;e<dej=e>ej?e@ejAe<dejBeCdejDeCdejEdd ejFeCdejGeHddi ejIeHddejJdd ejKdd ejLdd ejMdd ejeNejdd ejdd ejOePejQeCdejReCd ejSeTejUeVejWeXejYeZej[d!d ej\e34e3j]gi ej^e34e3j]gej_e`ejaeCd"ejbd#d ejcd$d ejde34e3jee3jfgejgehejid%d ejjd&d ejkd'd ejlemejneoejpeCd(ejqeCd)ejresdd*ejteuejvd+d i ejwd,d ejxeyejze{ej|e<dej}e>ej~d-d ejd.d ejd/d ejeCd0ejeCd1ejeejeCd2ej~eejeejeCd3ejeCd4ejeZ+e+ej i ejjej[ejjjejejjjejejjjiZdfd9d:Zdgd<d=Zdhd?d@Zdi fdBdCZdj fdEdFZdkdHdIZdldKdLZdm fdNdOZdndo fdTdUZdpdWdXZdqdZd[Zdrd]d^Zed_dsdadbZdt fdddeZ  ZS )ur;   TFr   
REPEATABLErs   REALzDOUBLE PRECISIONBYTEA	TIMESTAMPc                 C  s   | j |ddS )N	ARRAY_CAT)r   )arrayconcat_sqlr:   rM   rO   rO   rP   r.  <      zPostgres.Generator.<lambda>c                 C     |  |dS )N#binaryr  rO   rO   rP   r.  >  rP  c                  G     dS )NCURRENT_TIMESTAMPrO   _rO   rO   rP   r.  A      c                  G  r  )NCURRENT_USERrO   r  rO   rO   rP   r.  B  r  +-rC  r6  c                 C  s   t | |dddS )N
STRING_AGGF)	func_namewithin_group)r'   r  rO   rO   rP   r.  I  s    r  r7  z->r8  z->>c                 C  r  )Nz#>r  r  rO   rO   rP   r.  O  rP  c                 C  r  )Nz#>>r  r  rO   rO   rP   r.  P  rP  c                 C  r  )N?r  r  rO   rO   rP   r.  Q  rP  c                 C  s   |  t|jtjjjS r2  )rC   r   r3  r=   rn   ro   JSONr  rO   rO   rP   r.  R  r<  c                  G  r  )Nr/   rO   r  rO   rO   rP   r.  T  r  c                 C  s   |  |jS r2  )json_path_partr=   r  rO   rO   rP   r.  U  rP  BOOL_ORBOOL_ANDc                 C  s   d|  |d S )NzPARTITION BY r=   rc   r  rO   rO   rP   r.  ]  s    RANDOMc                 C  r  )Nr   r  r  rO   rO   rP   r.  f  rP  c                 C  r  )Nz~*r  r  rO   rO   rP   r.  g  rP  c                 C  s   t | |ddS )NPOSITION)r  )r%   r  rO   rO   rP   r.  o  r  c                 C     |  d|j| |S )NrB  rQ   r=   r   r  rO   rO   rP   r.  p      c                 C  r  Nr   r  r  rO   rO   rP   r.  q  r  r=  r>  )zonec                 C  r  )NrA  r  r  rO   rO   rP   r.  x  r  c                 C  r]  r2  )function_fallback_sqlr  rO   rO   rP   r.  y  r_  c                 C  s   |  d|jS r  )rQ   r=   r  rO   rO   rP   r.  ~  r  c                  G  r  )NzGEN_RANDOM_UUID()rO   r  rO   rO   rP   r.    r  c                 C  s   |  dtjd|jS )NrX  epoch)rQ   r   rG   rI   r=   r  rO   rO   rP   r.    s    VAR_POPVAR_SAMPr0  rR  rS  r<   	exp.Roundr8   r7   c                 C  s   |  |d}|  |d}|s| d|S |js$ddlm} ||| jd}|jtj	j
jrCtj	jtj	j
j|jd}|  tj||d}| d||S )	Nr=   decimalsROUNDr   r   r   rM  )r=   to)rC   rQ   r   r   r   r   r=   r   r   rn   ro   r&  r  r5  rN  Cast)r:   r<   r=   r  r   decimal_typerO   rO   rP   	round_sql  s   zPostgres.Generator.round_sqlexp.SchemaCommentPropertyc                 C     |  d dS )Nz8Table comments are not supported in the CREATE statementr/   rK   r   rO   rO   rP   schemacommentproperty_sql     
z,Postgres.Generator.schemacommentproperty_sqlexp.CommentColumnConstraintc                 C  r  )Nz9Column comments are not supported in the CREATE statementr/   r  r   rO   rO   rP   commentcolumnconstraint_sql  r  z.Postgres.Generator.commentcolumnconstraint_sql
exp.Unnestc                   s4  t |jdkr|jd }t|tjrEtjdi |j}t|jtjtj	fr@t
dtj|djddgd|jdp>d	}| |S dd
lm} ||| jd}|drt|tjrf|j}t|tjs]| t|tjjj}| |d}|rd| nd}|jdr| d d| d| S t |S )Nr   r   zvalue::dateri   _trz  )tablealias_unnested_generate_seriesr   r   zarray<json>z AS r/   offsetz+Unsupported JSON_ARRAY_ELEMENTS with offsetzJSON_ARRAY_ELEMENTS(rT   rO   )r   rN  rA   r   GenerateDateArrayGenerateSeriesrD   rm   FromJoinselectfrom_Tableas_subqueryrE   rC   r   r   r   r   r  r=   r3  rn   ro   r  rK   r  
unnest_sql)r:   r<   arggenerate_seriesr   r=   arg_as_jsonr  r  rO   rP   r    s.   



zPostgres.Generator.unnest_sqlexp.Bracketc                   s2   t |jtjr|dtj|jdd t |S )zGForms like ARRAY[1, 2, 3][3] aren't allowed; we need to wrap the ARRAY.r=   F)copy)rA   r=   r   Arrayr   parenr  bracket_sqlr   r  rO   rP   r    s   zPostgres.Generator.bracket_sqlexp.MatchAgainstc                   sH     |d fdd|jD }d|}t|dkr"d| dS |S )Nr=   c                   s    g | ]}  | d  qS )z @@ rc   ).0rM   r\  rO   rP   
<listcomp>  s     z7Postgres.Generator.matchagainst_sql.<locals>.<listcomp>z OR r   (rT   )rC   rN  joinr   )r:   r<   rN  rC   rO   r\  rP   matchagainst_sql  s   
z#Postgres.Generator.matchagainst_sqlexp.AlterSetc                 C  s   | j |dd}|rd| dnd}| |d}|rd| nd}| |d}|r-d	| nd}| |d
}d| | | | S )NTflatr  rT   r/   access_methodzACCESS METHOD 
tablespacezTABLESPACE optionzSET )rN  rC   )r:   r<   exprsr  r  r  rO   rO   rP   alterset_sql  s   zPostgres.Generator.alterset_sqlexp.DataTypec                   s   | tjjjr"|jr | j|ddd}| j|dd d| dS dS | tjjjtjjjr<|jr<d| j|dd d	S t 	|S )
NvaluesT)keyr  r  []ARRAYzFLOAT(rT   )
r   r   rn   ro   r  rN  r&  r  r  datatype_sql)r:   r<   r
  r  rO   rP   r    s   zPostgres.Generator.datatype_sqlNexp.Castsafe_prefixt.Optional[str]c                   s>   |j }t|tjr|jtjdkr| |S t j	||dS )Ndecimal)r  )
r=   rA   r   r4  r  rn   r  rC   r  cast_sql)r:   r<   r  r=   r  rO   rP   r    s   
zPostgres.Generator.cast_sql	exp.Arrayc                 C  sN   |j }| d}tt|dtjr| d| |d  dS | t| | S )Nr  r   r  rT   )rN  normalize_funcrA   r+   r   SelectrC   r   )r:   r<   r  r  rO   rO   rP   	array_sql  s
   
zPostgres.Generator.array_sqlexp.ComputedColumnConstraintc                 C  s   d|  |d dS )NzGENERATED ALWAYS AS (r=   z) STOREDrc   r   rO   rO   rP   computedcolumnconstraint_sql     z/Postgres.Generator.computedcolumnconstraint_sqlexp.IsAsciic                 C  s   d|  |j dS )Nr  z ~ '^[[:ascii:]]*$'))rC   r=   r   rO   rO   rP   isascii_sql  r  zPostgres.Generator.isascii_sqlr=   exp.CurrentSchemac                 C  r  )Nr  rO   r   rO   rO   rP   currentschema_sql  s   z$Postgres.Generator.currentschema_sqlexp.Intervalc                   sj   | d }|dr/t|jtjr/|jtjt	|j
 d  |jd td t |S )Nr>   quarterr   rV   )rY   lower
startswithrA   r=   r   rG   rq   rJ  intrJ   rD   rw  r  interval_sql)r:   r<   r>   r  rO   rP   r%    s
   "zPostgres.Generator.interval_sql)r<   r  r8   r7   )r<   r  r8   r7   )r<   r  r8   r7   )r<   r  r8   r7   )r<   r  r8   r7   )r<   r  r8   r7   )r<   r  r8   r7   )r<   r	  r8   r7   r2  )r<   r  r  r  r8   r7   )r<   r  r8   r7   )r<   r  r8   r7   )r<   r  r8   r7   )r<   r  r8   r7   )r<   r   r8   r7   )r  r  r  SINGLE_STRING_INTERVALRENAME_TABLE_WITH_DBLOCKING_READS_SUPPORTED
JOIN_HINTSTABLE_HINTSQUERY_HINTSNVL2_SUPPORTEDPARAMETER_TOKENTABLESAMPLE_SIZE_IS_ROWSTABLESAMPLE_SEED_KEYWORDSUPPORTS_SELECT_INTO!JSON_TYPE_REQUIRED_FOR_EXTRACTIONSUPPORTS_UNLOGGED_TABLESLIKE_PROPERTY_INSIDE_SCHEMAMULTI_ARG_DISTINCTCAN_IMPLEMENT_ARRAY_ANYSUPPORTS_WINDOW_EXCLUDECOPY_HAS_INTO_KEYWORDARRAY_CONCAT_IS_VAR_LENSUPPORTS_MEDIANARRAY_SIZE_DIM_REQUIREDr   JSONPathKeyJSONPathRootJSONPathSubscriptSUPPORTED_JSON_PATH_PARTSr   	GeneratorTYPE_MAPPINGrn   ro   TINYINTr  r&  BINARY	VARBINARY
ROWVERSIONDATETIMETIMESTAMPNTZBLOB
TRANSFORMSAnyValuer   ArrayConcatArrayFilterr   r  ry   r   
preprocessrx   r   CurrentDater   r  CurrentUserDateAddrR   DateDiffr`   DateStrToDater   DateSubr  r   r   GroupConcatr4  rd  r   ri  JSONBExtractJSONBExtractScalarJSONBContains	ParseJSONr   LastDayr   	LogicalOr
LogicalAndMaxr   MapFromEntriesr   Minr   Merger   PartitionedByPropertyPercentileCont add_within_group_for_percentilesPercentileDiscPivotr   Rand
RegexpLikeRegexpILiker  eliminate_semi_and_anti_joinseliminate_qualifyrI  r   StrPositionr  r   StructExtractr    	Substringrf   r  r  TimestampTruncr!   TimeStrToTimer"   r  ToCharTrimr#   TryCastr   rB   
TsOrDsDiffr   Uuid
TimeToUnixVariancePopVarianceXorr   r  r   r   r   rO  r  CountIfr&   r   CommentColumnConstraintPROPERTIES_LOCATION
PropertiesLocationPOST_SCHEMATransientPropertyUNSUPPORTEDVolatilePropertyr  r  r  r  r  r   r  r  r  r  r  r  r)   r  r%  r  rO   rO   r  rP   r?    s   












	














 !"#
$%(+
,
-
./5
6
7
89:
;
<=>
?
@AB
CD
E
F
G
J
KL
MNO
P
QRU





	
	
r?  N)r  r  r  INDEX_OFFSETTYPED_DIVISIONCONCAT_COALESCENULL_ORDERINGTIME_FORMATTABLESAMPLE_SIZE_IS_PERCENTTIME_MAPPINGr   r  r   r  r   r?  rO   rO   rO   rP   r     s    	
 !"#'> r   )r6   r7   r8   r9   )r:   r;   r<   rS   r8   r7   )r:   r;   r<   ra   r8   r7   )r<   rg   r8   rg   )rD   r   r8   r   )rD   r   r8   r   )r   r7   r   r7   r8   r   r2  )rD   r   r   r.   r8   r   )r:   r;   r<   r   r8   r7   )rD   r   r8   r   )r:   r;   r<   r   r8   r7   )r:   r;   r<   r   r8   r7   )F
__future__r   typingtsqlglotr   r   r   r   r   sqlglot.dialects.dialectr   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(   sqlglot.generatorr)   sqlglot.helperr*   r+   sqlglot.parserr,   sqlglot.tokensr-   TYPE_CHECKINGr.   r[   rR   r`   rf   rx   r   r   r   r   r   r   r   r   r   r   rO   rO   rO   rP   <module>   s>    #













	