id-| dZddlZddlmZddlmZddlmZddlmZddl m Z ddl m Z dd l m Z dd l mZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#e$gdZ%Gd d!e&Z'Gd"d#e'ej!Z(Gd$d%e'ej!Z)Gd&d'e'ej*Z+Gd(d)ej,Z-Gd*d+ej.Z/Gd,d-ej.Z0Gd.d/ej.Z1Gd0d1ej.Z2Gd2d3ej3Z4Gd4d5e j5Z6id6ed7ed8ed9ed:e-d;eded?ed@edAedBedCedDedEe1dFe0idGedHedIedJedKedLedMe#dNe#dOe#dPe(dQe)dRedSedTedUedVedWeeee+ee"e4e/ee e2dX Z7GdYdZe j8Z9Gd[d\e j:Z;Gd]d^e j<Z=Gd_d`e j>Z?Gdadbe j@ZAGdcdde jBZCdS)eaf .. dialect:: sybase :name: Sybase .. note:: The Sybase dialect within SQLAlchemy **is not currently supported**. It is not tested within continuous integration and is likely to have many issues and caveats not currently handled. Consider using the `external dialect `_ instead. N)exc)schema)types)util)default) reflection)compiler)text)BIGINT)BINARY)CHAR)DATE)DATETIME)DECIMAL)FLOAT)INT)INTEGER)NCHAR)NUMERIC)NVARCHAR)REAL)SMALLINT)TEXT)TIME) TIMESTAMP)Unicode) VARBINARY)VARCHAR)addallalterandanyasascbackupbeginbetweenbigintbinarybitbottombreakbycall capabilitycascadecasecastchar char_convert charactercheck checkpointclosecommentcommitconnect constraintcontainscontinueconvertcreatecrosscubecurrentcurrent_timestamp current_usercursordatedbspace deallocatedecdecimaldeclarerdeletedeletingdescdistinctdodoubledropdynamicelseelseif encryptedendendifescapeexcept exceptionexecexecuteexistingexists externloginfetchfirstfloatforforceforeignforwardfromfullgotograntgrouphavingholdlock identifiedifinindex index_lpareninnerinout insensitiveinsert insertinginstallinsteadintinteger integrated intersectintoiqis isolationjoinkeylateralleftlikelockloginlongmatch membershipmessagemodemodifynaturalnewno noholdlocknotnotifynullnumericofoffonopenoptionoptionsororderothersoutouterover passthrough precisionprepareprimaryprint privilegesproc procedure publication raiserrorreadtextreal reference referencesreleaseremoteremoverename reorganizeresourcerestorerestrictreturnrevokerightrollbackrollupsave savepointscrollselect sensitivesessionsetsetusersharesmallintsomesqlcodesqlstatestartstopsubtranssubtransaction synchronize syntax_errortable temporarythentime timestamptinyinttotoptrantriggertruncatetsequal unboundedunionuniqueunknownunsignedupdateupdatinguserusingvalidatevalues varbinaryvarcharvariablevaryingviewwaitwaitforwhenwherewhilewindowwith with_cube with_lparen with_rollupwithinwork writetextceZdZdZdZdS)_SybaseUnitypeMixinz-these types appear to return a buffer object.c d}|S)Nc(|t|SdSN)str)values T/opt/cloudlinux/venv/lib/python3.11/site-packages/sqlalchemy/dialects/sybase/base.pyprocessz5_SybaseUnitypeMixin.result_processor..process$s 5zz!t)selfdialectcoltypers rresult_processorz$_SybaseUnitypeMixin.result_processor#s    rN)__name__ __module__ __qualname____doc__r rrrrr s)77rrceZdZdZdS)UNICHARNr r r__visit_name__rrrrr-NNNrrceZdZdZdS) UNIVARCHARNrrrrrr1!NNNrrceZdZdZdS)UNITEXTNrrrrrr5rrrceZdZdZdS)TINYINTNrrrrrr9rrrceZdZdZdS)BITNrrrrrr=sNNNrrceZdZdZdS)MONEYNrrrrrrANNNrrceZdZdZdS) SMALLMONEYNrrrrr"r"Errr"ceZdZdZdS)UNIQUEIDENTIFIERNrrrrr$r$Is'NNNrr$ceZdZdZdS)IMAGENrrrrr&r&Mr rr&cVeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd S)SybaseTypeCompilerc ,||Sr) visit_IMAGErtype_kws rvisit_large_binaryz%SybaseTypeCompiler.visit_large_binaryRs&&&rc ,||Sr) visit_BITr+s r visit_booleanz SybaseTypeCompiler.visit_booleanUs~~e$$$rc ,||Sr)visit_NVARCHARr+s r visit_unicodez SybaseTypeCompiler.visit_unicodeXs""5)))rc d|jzS)Nz UNICHAR(%d)lengthr+s r visit_UNICHARz SybaseTypeCompiler.visit_UNICHAR[su|++rc d|jzS)NzUNIVARCHAR(%d)r6r+s rvisit_UNIVARCHARz#SybaseTypeCompiler.visit_UNIVARCHAR^s%,..rc dS)Nrrr+s r visit_UNITEXTz SybaseTypeCompiler.visit_UNITEXTayrc dS)Nrrr+s r visit_TINYINTz SybaseTypeCompiler.visit_TINYINTdr=rc dS)Nr&rr+s rr*zSybaseTypeCompiler.visit_IMAGEgwrc dS)Nrrr+s rr0zSybaseTypeCompiler.visit_BITjsurc dS)Nrrr+s r visit_MONEYzSybaseTypeCompiler.visit_MONEYmrArc dS)Nr"rr+s rvisit_SMALLMONEYz#SybaseTypeCompiler.visit_SMALLMONEYps|rc dS)Nr$rr+s rvisit_UNIQUEIDENTIFIERz)SybaseTypeCompiler.visit_UNIQUEIDENTIFIERss!!rN)r r rr.r1r4r8r:r<r?r*r0rDrFrHrrrr(r(Qs'''%%%***,,,///"""""rr(r)r}r~rrzunsigned bigintz unsigned intzunsigned smallintrrLrKrerSzdouble precisionr smallmoneymoney smalldatetimedatetimerHrr4r6rzcharacter varyingz char varyingunicharzunicode characterncharz national charznational characternvarcharz nchar varyingznational char varying) znational character varyingr unitextr*rimager+z long varcharruniqueidentifierceZdZdZddZdS)SybaseInspectorcFtj||dSr)r Inspector__init__)rconns rrWzSybaseInspector.__init__s!%%dD11111rNcR|j|j|||jS)z3Return the table id from `table_name` and `schema`. info_cache)r  get_table_idbindr[)r table_namers rr\zSybaseInspector.get_table_ids0|(( Iz6do)   rr)r r rrWr\rrrrTrTs7222      rrTc*eZdZdZdZdZdZdZdS)SybaseExecutionContextFct)aMust be implemented by subclasses to accommodate DDL executions. "connection" is the raw unwrapped DBAPI connection. "value" is True or False. when True, the connection should be configured such that a DDL can take place subsequently. when False, a DDL has taken place and the connection should be resumed into non-autocommit mode. )NotImplementedError)r connectionrs rset_ddl_autocommitz)SybaseExecutionContext.set_ddl_autocommits"###rc|jr|jjj}|j}|du}|r|j|jdv|_nd|_|jr:|j d|j j |z|j rf|jstjd|jjjd||jjjddSdS)NrFzSET IDENTITY_INSERT %s ONzGThe Sybase dialect only supports DDL in 'autocommit' mode at this time.z-AUTOCOMMIT (Assuming no Sybase 'ddl in tran')T)isinsertcompiled statementr_autoincrement_columnrcompiled_parameters_enable_identity_insertrGr_r identifier_preparer format_tableisddlshould_autocommitrInvalidRequestErrorroot_connectionengineloggerinfordrc)rtbl seq_columninsert_has_sequences rpre_execzSybaseExecutionContext.pre_execs4 = -)/C2J",D"8 " 5Nd&>q&AA,,05,+  ##/l6CCCHHI : ) -=  ' . 3 3?     # #$/:D       rc|jr||jd|jrK|jd|jj|j j j zdSdS)NFzSET IDENTITY_INSERT %s OFF) rnrdrqrkrGr_r rlrmrgrhr)rs r post_execz SybaseExecutionContext.post_execs : A  # #D$8% @ @ @  '  K  ,,2??M+1       rc|}|d|d}||S)NzSELECT @@identity AS lastrowidr) create_cursorr_fetchoner9)rrG lastrowids r get_lastrowidz$SybaseExecutionContext.get_lastrowidsM##%%7888OO%%a(  rN)r r rrkrdrxrzrrrrr`r`sW# $ $ $###J   rr`ceZdZdZejejjddddZdZ dZ dZ d Z d Z d Zd Zd ZdS)SybaseSQLCompilerT dayofyearweekday millisecond)doydow millisecondsc|Srr)rrr s rget_from_hint_textz$SybaseSQLCompiler.get_from_hint_texts rc d}|j|d|j|jfi|zz }|j%|j|dz }|d|j|jfi|zz }|S)Nz ROWS LIMIT z ROWSz OFFSET ) _limit_clauser_offset_clause)rrr-r s r limit_clausezSybaseSQLCompiler.limit_clauses|   + N\T\&2F%M%M"%M%MM MD  ,#+ Jf.C!J!Jr!J!JJ JD rc |j|j|j}d|d|j|jfi|dS)Nz DATEPART("z", )) extract_mapgetfieldrexpr)rextractr-rs r visit_extractzSybaseSQLCompiler.visit_extractsK $$W]GMBB',uuldl7<.N.N2.N.N.N.NOOrc dS)Nz GETDATE()r)rfnr-s rvisit_now_funcz SybaseSQLCompiler.visit_now_funcs{rcdS)Nrr)rrs rfor_update_clausez#SybaseSQLCompiler.for_update_clauses rrc zd|d<|j|jfi|}|r |r|jrd|zSdS)NT literal_bindsz ORDER BY r)r_order_by_clause is_subquery_limit)rrr-order_bys rorder_by_clausez!SybaseSQLCompiler.order_by_clauses^"?4< 7>>2>>  T--// 6= (* *2rc@d}|rd}||dd|S)z=If we have extra froms make sure we render any alias as hint.FT)asfromiscrudashint_compiler_dispatch)r delete_stmt from_table extra_fromsrs rdelete_table_clausez%SybaseSQLCompiler.delete_table_clause's:  F,, d6-   rc \ddfd|g|zDzS)z4Render the DELETE .. FROM clause specific to Sybase.zFROM z, c3:K|]}|jfddVdS)T)r fromhintsNr).0t from_hintsr-rs r z=SybaseSQLCompiler.delete_extra_from_clause..4sS# #  !A  Odj O OB O O# # # # # # r)r)rrrrrr-s` ``rdelete_extra_from_clausez*SybaseSQLCompiler.delete_extra_from_clause0s[# # # # # #  \K/# # #     rN)r r ransi_bind_rulesr update_copyr SQLCompilerrrrrrrrrrrrrrrsO"$"(I}MMK PPP         rrceZdZdZdZdS)SybaseDDLCompilerc |j|dz|jj|j|z}|jtjd|jj }||ur[t|j tj o|j }|r|jpd|jpd}}nd\}}||fdkr|dz }nL|d|d|d z }n?||}||d |zz }|j|jr|jr|d z }n|d z }|S) N )type_expressionzHThe Sybase dialect requires Table-bound columns in order to generate DDL)rrz IDENTITYz IDENTITY(,rz DEFAULT z NOT NULLz NULL)preparer format_columnr  type_compilerrtyperr CompileErrorri isinstancer sa_schemaSequencer incrementget_column_default_stringnullable primary_key) rcolumnkwargscolspecseq_colsequencerrrs rget_column_specificationz*SybaseDDLCompiler.get_column_specification;so M ' ' / / l(00 V1   < "3 ,4 f  6>9+=>>#N  (#+>#6Q8J8Oay#' yy!V++;& BB44V<-F    9 8&'** 0w//*g.. 8'..w77 ## V $  ==??  &z22 2rc `|||||d}td}|||}g}|D]V\} } } } } }}}|| | t | t | | |||}||W|S)Nr[rZa* SELECT col.name AS name, t.name AS type, (col.status & 8) AS nullable, (col.status & 128) AS autoincrement, com.text AS 'default', col.prec AS precision, col.scale AS scale, col.length AS length FROM systypes t, syscolumns col LEFT OUTER JOIN syscomments com ON col.cdefault = com.id WHERE col.usertype = t.usertype AND col.id = :table_id ORDER BY col.colid r)r\rr r__get_column_infoboolappend)rrcr^rr-r COLUMN_SQLresultsrrr,r autoincrementdefault_rscaler7col_infos r get_columnszSybaseDialect.get_columnss$$  Frvvl7K7K%     $$$Z($CC % %        ,,X]##  H NN8 $ $ $ $rc |j|d} i} | ttfvr||f} n=| tkr|f} n.| t t ttttfvr|f} nd} | r | | i| } n'tj d|d|dtj} |r;|jdd}t#jdd|}nd}t'|| ||| } | S) NrzDid not recognize type 'z ' of column ''DEFAULTrz^'(.*)'$c,|dS)Nr)rn)ms rz0SybaseDialect._get_column_info..s1771::r)rrrrr) ischema_namesrrrrr rrrrrrwarnsqltypesNULLTYPEreplacestripresubdict) rrr,rrrrrr7r rargs column_infos rrzSybaseDialect._get_column_infos7$((55 w( ( (u%DD   
>C25f+$SY//,< [)";/H+K8 "$ ! 1aj1n-- M M#**71Y]3C+DEEE ''(8:>9J(KLLLL(;#+H#5"*6"2$4& G    ( ( ( (rc |||||d}td}|||}g}|D]p} g} t d| dD]!} | | d| fz"| dt | d | d } || q|S) Nr[rZa SELECT object_name(i.id) AS table_name, i.keycnt AS 'count', i.name AS name, (i.status & 0x2) AS 'unique', index_col(object_name(i.id), i.indid, 1) AS col_1, index_col(object_name(i.id), i.indid, 2) AS col_2, index_col(object_name(i.id), i.indid, 3) AS col_3, index_col(object_name(i.id), i.indid, 4) AS col_4, index_col(object_name(i.id), i.indid, 5) AS col_5, index_col(object_name(i.id), i.indid, 6) AS col_6, index_col(object_name(i.id), i.indid, 7) AS col_7, index_col(object_name(i.id), i.indid, 8) AS col_8, index_col(object_name(i.id), i.indid, 9) AS col_9, index_col(object_name(i.id), i.indid, 10) AS col_10, index_col(object_name(i.id), i.indid, 11) AS col_11, index_col(object_name(i.id), i.indid, 12) AS col_12, index_col(object_name(i.id), i.indid, 13) AS col_13, index_col(object_name(i.id), i.indid, 14) AS col_14, index_col(object_name(i.id), i.indid, 15) AS col_15, index_col(object_name(i.id), i.indid, 16) AS col_16 FROM sysindexes i, sysobjects o WHERE o.id = i.id AND o.id = :table_id AND (i.status & 2048) = 0 AND i.indid BETWEEN 1 AND 254 rrrzcol_%irr)rr column_names)r\rr r_rrr) rrcr^rr-r INDEX_SQLrindexesr'r0r, index_infos r get_indexeszSybaseDialect.get_indexess$$  Frvvl7K7K%     <$$Y$BB ' 'AL1aj)) 8 8##Ah!o$67777& q{++ ,J NN: & & & &rc |||||d}td}|||}|}|g} |rFt d|ddzD]!} | |d| fz"| |dd Sgdd S) Nr[rZay SELECT object_name(i.id) AS table_name, i.keycnt AS 'count', i.name AS name, index_col(object_name(i.id), i.indid, 1) AS pk_1, index_col(object_name(i.id), i.indid, 2) AS pk_2, index_col(object_name(i.id), i.indid, 3) AS pk_3, index_col(object_name(i.id), i.indid, 4) AS pk_4, index_col(object_name(i.id), i.indid, 5) AS pk_5, index_col(object_name(i.id), i.indid, 6) AS pk_6, index_col(object_name(i.id), i.indid, 7) AS pk_7, index_col(object_name(i.id), i.indid, 8) AS pk_8, index_col(object_name(i.id), i.indid, 9) AS pk_9, index_col(object_name(i.id), i.indid, 10) AS pk_10, index_col(object_name(i.id), i.indid, 11) AS pk_11, index_col(object_name(i.id), i.indid, 12) AS pk_12, index_col(object_name(i.id), i.indid, 13) AS pk_13, index_col(object_name(i.id), i.indid, 14) AS pk_14, index_col(object_name(i.id), i.indid, 15) AS pk_15, index_col(object_name(i.id), i.indid, 16) AS pk_16 FROM sysindexes i, sysobjects o WHERE o.id = i.id AND o.id = :table_id AND (i.status & 2048) = 2048 AND i.indid BETWEEN 1 AND 254 rrrzpk_%ir)rr)r\rr r_r}r9rr) rrcr^rr-rPK_SQLrpksrr,s rget_pk_constraintzSybaseDialect.get_pk_constraints$$  Frvvl7K7K%     :$$Vh$??      =1c'lQ.// @ @#**3w!~+>????':F   ,.t<< z2SybaseDialect.get_schema_names..s+++a& +++r)r r_)rrcr- SCHEMA_SQLschemass rget_schema_nameszSybaseDialect.get_schema_namess9ABB $$Z00++7++++rc ||j}td}tjr*t |t r|d}|||}d|DS)Nz SELECT o.name AS name FROM sysobjects o JOIN sysusers u ON o.uid = u.uid WHERE u.name = :schema_name AND o.type = 'U' rrcg|] }|d Sr;r)rrs rr=z1SybaseDialect.get_table_names.. s***a& ***rrr rrrrrr_)rrcrr- TABLE_SQLtabless rget_table_nameszSybaseDialect.get_table_namess~ >-F    9 0&'** 0w//##I6#BB**6****rc ||j}td}tjr*t |t r|d}|||}|S)Nz SELECT c.text FROM syscomments c JOIN sysobjects o ON c.id = o.id WHERE o.name = :view_name AND o.type = 'V' r) view_name) rr rrrrrr_r)rrcrIrr- VIEW_DEF_SQLrs rget_view_definitionz!SybaseDialect.get_view_definition sz >-F    9 6)W-- 6%,,W55 !!,)!DD{{}}rc ||j}td}tjr*t |t r|d}|||}d|DS)Nz SELECT o.name AS name FROM sysobjects o JOIN sysusers u ON o.uid = u.uid WHERE u.name = :schema_name AND o.type = 'V' rrBcg|] }|d Sr;r)rvs rr=z0SybaseDialect.get_view_names..4s)))a& )))rrD)rrcrr-VIEW_SQLviewss rget_view_nameszSybaseDialect.get_view_names!s~ >-F    9 0&'** 0w//""8"@@))5))))rcb ||||dS#tj$rYdSwxYw)NTF)r\rr)rrcr^rs r has_tablezSybaseDialect.has_table6sM    j*f = = =4#   55 s ..r)'r r rrsupports_unicode_statementssupports_sane_rowcountsupports_sane_multi_rowcountsupports_native_booleansupports_unicode_bindspostfetch_lastrowidcolspecsr r(rrstatement_compilerr ddl_compilerrrrT inspectorconstruct_argumentsrrr\rcacherrr.r4r8r@rGrKrQrS __classcell__)rs@rrrss D"'"#( #"H!M&M*$L'HI   -----""""H0000d111fccccJ0000d/=/=/=/=b,,,++++******(rr)Drr sqlalchemyrrrrr rsqlalchemy.enginerrsqlalchemy.sqlr r sqlalchemy.typesr r r rrrrrrrrrrrrrrrrrrrobjectrrr UnicodeTextrIntegerr TypeEnginerrr"r$ LargeBinaryr&GenericTypeCompilerr(r rVrTDefaultExecutionContextr`rr DDLCompilerrIdentifierPreparerrDefaultDialectrrrrros:   ******((((((%%%%%%((((((##################!!!!!!!!!!!!%%%%%%$$$$$$"""""" $$$$$$""""""$$$$$$%%%%%%!!!!!!%%%%%%!!!!!!!!!!!!&&&&&&$$$$$$&&&&&&$$$$$$```bbJ     &   !8#3"""""$h&6"""!8#7h( H """""$"""(((((x*(((H #"#"#"#"#"5#"#"#"L. f. 7.w. . w . v .G..w.w. 7. U. g.. D. *!." U#..$X%.&'.( D).* D+., D-../.0w1.23.4G5.6w7.89.: U;.<U=.>%?.@A.BXC.DXE..F#+   ([... b      j*    EEEEEW<EEEP; ; ; ; ; ,; ; ; |2 2 2 2 2 ,2 2 2 j$$$$$x:$$$IIIIIG*IIIIIr