U a@sdZddlZddlmZddlmZddlmZddlmZddl m Z ddl m Z dd l m Z dd l mZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#e$dd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;dd?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddg߃Z%Gddde&Z'Gddde'ej!Z(Gddde'ej!Z)Gddde'ej*Z+Gdddej,Z-Gdd d ej.Z/Gd d d ej.Z0Gd d d ej.Z1Gdddej.Z2Gdddej3Z4Gddde j5Z6eeeee-eeeeeeeeeee1e0eeeeeee#e#e#e(e)eeeeeeeee+ee"e4e/ee e2d,Z7Gddde j8Z9Gddde j:Z;Gddde j<Z=Gddde j>Z?Gddde j@ZAGdd d e jBZCdS(!a .. 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. .. deprecated:: 1.4 The internal Sybase dialect is deprecated and will be removed in a future version. Use the external dialect. 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)VARCHARaddallZalterandanyasZascbackupbeginZbetweenbigintbinarybitbottombreakZbycallZ capabilityZcascadeZcasecastcharZ char_convert charactercheck checkpointclosecommentcommitconnect constraintcontainscontinueconvertcreateZcrossZcubecurrentZcurrent_timestampZ current_usercursordateZdbspaceZ deallocatedecdecimalZdeclarerdeleteZdeletingdescZdistinctZdodoubledropZdynamicelseZelseifZ encryptedendendifescapeexcept exceptionexecexecuteexistingexistsZ externloginfetchfirstfloatforforceZforeignZforwardfromfullgotoZgrantgroupZhavingZholdlockZ identifiedifinindexZ index_lpareninnerZinoutZ insensitiveinsertZ insertinginstallZinsteadintintegerZ integratedZ intersectZintoZiqisZ isolationjoinkeyZlateralleftZlikelockloginlongmatchZ membershipmessagemodemodifyZnaturalnewnoZ noholdlocknotnotifynullnumericZofoffonopenoptionoptionsororderZothersoutouterZoverZ passthrough precisionprepareZprimaryprintZ privilegesprocZ procedureZ publicationZ raiserrorZreadtextreal referenceZ referencesreleaseremoteremoverenameZ reorganizeresourcerestoreZrestrictreturnZrevokerightrollbackZrollupsaveZ savepointZscrollselectZ sensitivesessionsetZsetusersharesmallintZsomeZsqlcodeZsqlstatestartstopZsubtransZsubtransactionZ synchronizeZ syntax_errortable temporaryZthentime timestamptinyinttotopZtranZtriggertruncateZtsequalZ unboundedunionuniqueunknownZunsignedupdateZupdatinguserZusingvalidatevalues varbinaryvarcharvariableZvaryingviewwaitZwaitforwhenwherewhileZwindowwithZ with_cubeZ with_lparenZ with_rollupZwithinZworkZ writetextc@seZdZdZddZdS)_SybaseUnitypeMixinz-these types appear to return a buffer object.cCs dd}|S)NcSs|dk rt|SdSdSN)str)valuer`C:\Users\vtejo\AppData\Local\Temp\pip-unpacked-wheel-nyjtotrf\sqlalchemy\dialects\sybase\base.pyprocess'sz5_SybaseUnitypeMixin.result_processor..processr)selfdialectcoltyperrrrresult_processor&sz$_SybaseUnitypeMixin.result_processorN)__name__ __module__ __qualname____doc__rrrrrr#src@seZdZdZdS)UNICHARNrrrZ__visit_name__rrrrr0src@seZdZdZdS) UNIVARCHARNrrrrrr4src@seZdZdZdS)UNITEXTNrrrrrr8src@seZdZdZdS)TINYINTNrrrrrr<src@seZdZdZdS)BITNrrrrrr@src@seZdZdZdS)MONEYNrrrrrrDsrc@seZdZdZdS) SMALLMONEYNrrrrrrHsrc@seZdZdZdS)UNIQUEIDENTIFIERNrrrrrrLsrc@seZdZdZdS)IMAGENrrrrrrPsrc@sleZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZdS)SybaseTypeCompilercKs ||Sr) visit_IMAGErtype_kwrrrvisit_large_binaryUsz%SybaseTypeCompiler.visit_large_binarycKs ||Sr) visit_BITrrrr visit_booleanXsz SybaseTypeCompiler.visit_booleancKs ||Sr)Zvisit_NVARCHARrrrr visit_unicode[sz SybaseTypeCompiler.visit_unicodecKs d|jS)Nz UNICHAR(%d)lengthrrrr visit_UNICHAR^sz SybaseTypeCompiler.visit_UNICHARcKs d|jS)NzUNIVARCHAR(%d)rrrrrvisit_UNIVARCHARasz#SybaseTypeCompiler.visit_UNIVARCHARcKsdS)Nrrrrrr visit_UNITEXTdsz SybaseTypeCompiler.visit_UNITEXTcKsdS)Nrrrrrr visit_TINYINTgsz SybaseTypeCompiler.visit_TINYINTcKsdS)NrrrrrrrjszSybaseTypeCompiler.visit_IMAGEcKsdS)NrrrrrrrmszSybaseTypeCompiler.visit_BITcKsdS)Nrrrrrr visit_MONEYpszSybaseTypeCompiler.visit_MONEYcKsdS)Nrrrrrrvisit_SMALLMONEYssz#SybaseTypeCompiler.visit_SMALLMONEYcKsdS)Nrrrrrrvisit_UNIQUEIDENTIFIERvsz)SybaseTypeCompiler.visit_UNIQUEIDENTIFIERN)rrrrrrrrrrrrrrrrrrrrTsr),r%r[r\rrzunsigned bigintz unsigned intzunsigned smallintrmr=r<rNr@zdouble precisionr{Z smallmoneyZmoneyZ smalldatetimedatetimer;rr,r-rzcharacter varyingz char varyingZunicharzunicode characterZncharz national charznational characterZnvarcharz nchar varyingznational char varyingznational character varyingr Zunitextr&rimager'z long varcharrZuniqueidentifierc@seZdZddZdddZdS)SybaseInspectorcCstj||dSr)r Inspector__init__)rconnrrrrszSybaseInspector.__init__NcCs|jj|j|||jdS)z3Return the table id from `table_name` and `schema`. info_cache)r get_table_idbindr)r table_namerrrrrs zSybaseInspector.get_table_id)N)rrrrrrrrrrsrc@s0eZdZdZddZddZddZdd Zd S) SybaseExecutionContextFcCs tdS)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. N)NotImplementedError)r connectionrrrrset_ddl_autocommits z)SybaseExecutionContext.set_ddl_autocommitcCs|jr\|jjj}|j}|dk }|r6|j|jdk|_nd|_|jr\|j d|j j ||j r|jsrtd|jjjd||jjjddS)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)Zisinsertcompiled statementr_autoincrement_columnr_Zcompiled_parameters_enable_identity_insertr:rIridentifier_preparer format_tableisddlZshould_autocommitrZInvalidRequestErrorroot_connectionZengineloggerinforr)rZtblZ seq_columnZinsert_has_sequencerrrpre_execs4   zSybaseExecutionContext.pre_execcCs>|jr||jd|jr:|jd|jj|j j j dS)NFzSET IDENTITY_INSERT %s OFF) rrrrr:rIrrrrrr)rrrr post_execsz SybaseExecutionContext.post_execcCs*|}|d|d}||S)NzSELECT @@identity AS lastrowidr)Z create_cursorrIfetchoner0)rr:Z lastrowidrrr get_lastrowids   z$SybaseExecutionContext.get_lastrowidN)rrrrrrrrrrrrrs  % rc@sheZdZdZeejjddddZddZ dd Z d d Z d d Z ddZ ddZddZddZdS)SybaseSQLCompilerTZ dayofyearweekdayZ millisecond)ZdoyZdowZ millisecondscCs|Srr)rrr rrrget_from_hint_textsz$SybaseSQLCompiler.get_from_hint_textcKs^d}|jdk r&|d|j|jf|7}|jdk rZ|jdkrB|d7}|d|j|jf|7}|S)Nz ROWS LIMIT z ROWSz OFFSET )Z _limit_clauserZ_offset_clause)rrrr rrr limit_clause s   zSybaseSQLCompiler.limit_clausecKs*|j|j|j}d||j|jf|fS)NzDATEPART("%s", %s)) extract_mapgetfieldrexpr)rextractrrrrr visit_extractszSybaseSQLCompiler.visit_extractcKsdS)Nz GETDATE()r)rfnrrrrvisit_now_funcsz SybaseSQLCompiler.visit_now_funccCsdS)Nrr)rrrrrfor_update_clausesz#SybaseSQLCompiler.for_update_clausecKs:d|d<|j|jf|}|r2|r*|jr2d|SdSdS)NTZ literal_bindsz ORDER BY r)rZ_order_by_clauseZ is_subqueryZ_limit)rrrZorder_byrrrorder_by_clause s z!SybaseSQLCompiler.order_by_clausecCsd}|r d}|j|dd|dS)z=If we have extra froms make sure we render any alias as hint.FT)asfromZiscrudashintZ_compiler_dispatch)r delete_stmt from_table extra_fromsrrrrdelete_table_clause*sz%SybaseSQLCompiler.delete_table_clausec s.dd<ddfdd|g|DS)z4Render the DELETE .. FROM clause specific to Sybase.TrzFROM z, c3s$|]}|jfdiVqdS)Z fromhintsNr.0t from_hintsrrrr 8sz=SybaseSQLCompiler.delete_extra_from_clause..)r^)rrrrrrrrrdelete_extra_from_clause3sz*SybaseSQLCompiler.delete_extra_from_clauseN)rrrZansi_bind_rulesrZ update_copyr SQLCompilerrrrrrrrrr rrrrrs    rc@seZdZddZddZdS)SybaseDDLCompilerc Ks|j|d|jjj|j|d}|jdkr8td|jj }||krt |j t j oZ|j }|rx|jphd|jppd}}nd\}}||fdkr|d7}q|d||f7}nF||}|dk r|d|7}|jdk r|jr|jr|d 7}n|d 7}|S) N )Ztype_expressionzHThe Sybase dialect requires Table-bound columns in order to generate DDL)rrz IDENTITYz IDENTITY(%s,%s)z DEFAULT z NOT NULLz NULL)preparerZ format_columnr type_compilerrtyperr CompileErrorr isinstancer sa_schemaSequencer incrementZget_column_default_stringnullableZ primary_key) rcolumnkwargsZcolspecZseq_colsequencerrrrrrget_column_specification?s@         z*SybaseDDLCompiler.get_column_specificationcCs*|j}d|j|jj|j|jddfS)Nz DROP INDEX %s.%sF)Zinclude_schema)elementrZquote_identifierrnameZ_prepared_index_name)rrArWrrrvisit_drop_indexks z"SybaseDDLCompiler.visit_drop_indexN)rrrrrrrrrr >s,r c@seZdZeZdS)SybaseIdentifierPreparerN)rrrRESERVED_WORDSZreserved_wordsrrrrrssrcs eZdZdZdZdZdZdZdZdZ dZ iZ e Z e ZeZeZeZeZgZfddZddZfdd Zd!d d Zejd"d dZddZejd#ddZ ejd$ddZ!ejd%ddZ"ejddZ#ejd&ddZ$ejd'ddZ%ejd(ddZ&d)dd Z'Z(S)* SybaseDialectZsybaseFTcs$tjdddtt|j||dS)NzThe Sybase dialect is deprecated and will be removed in a future version. This dialect is superseded by the external dialect https://github.com/gordthompson/sqlalchemy-sybase.z1.4)version)rZwarn_deprecatedsuperr!r)rargsr __class__rrrs zSybaseDialect.__init__cCs|tdjtdS)NzSELECT user_name() as user_name)username)scalarr columnsrrrrrr_get_default_schema_namesz&SybaseDialect._get_default_schema_namecs6tt|||jdk r,|jdkr,d|_nd|_dS)N))r#r! initializeZserver_version_infoZmax_identifier_lengthr*r%rrr/szSybaseDialect.initializeNcKsvd}|dkr|j}td}tjrHt|tr4|d}t|trH|d}|j|||d}|}|dkrrt ||S)zFetch the id for schema.table_name. Several reflection methods require the table id. The idea for using this method is that it can be fetched one time and cached for subsequent calls. Nz SELECT o.id AS id FROM sysobjects o JOIN sysusers u ON o.uid=u.uid WHERE u.name = :schema_name AND o.name = :table_name AND o.type in ('U', 'V') ascii) schema_namer) default_schema_namer rpy2krunicodeencoderIr(rNoSuchTableError)rrrrrtable_idZ TABLEID_SQLresultrrrrs(       zSybaseDialect.get_table_idc Ksz|j||||dd}td}|j||d}g}|D]>\} } } } } }}}|| | t| t| | |||}||q6|S)Nrra* 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 r7)rrr rI_get_column_infoboolappend)rrrrrr7 COLUMN_SQLresultsr)rrr autoincrementZdefault_rwscalerZcol_inforrr get_columnssB  zSybaseDialect.get_columnsc Cs|j|d} i} | ttfkr(||f} n0| tkr8|f} n | ttttt t fkrT|f} nd} | rh| | | } nt d||ft j} |r|dd}tddd|}nd}t|| |||d} | S) Nrz*Did not recognize type '%s' of column '%s'DEFAULTrz^'(.*)'$cSs |dS)Nr)rT)mrrr"z0SybaseDialect._get_column_info..)rrrrr?) ischema_namesrrrrr rrrrrrwarnsqltypesZNULLTYPEreplacestripresubdict) rrrrr?rrwr@rrrr$Z column_inforrrr:s6     zSybaseDialect._get_column_infocKs|j||||dd}i}i}g}||d||<td} |j| |d} i} | D]} | d| | d<qP| ||<td} |j| |d}td }|D]&}|d }||kr8|j||d}|}||ddd}|dk s|d |jkr|d |d <|||<|j| |d} i}| D]} | d|| d<q|||<||}||}g}g}td |d d D]2}| | |d|| ||d|qb||d |d||dd}| |q|S)Nrr)rrzu SELECT c.colid AS id, c.name AS name FROM syscolumns c WHERE c.id = :table_id r9rida( SELECT o.name AS name, r.reftabid AS reftable_id, r.keycnt AS 'count', r.fokey1 AS fokey1, r.fokey2 AS fokey2, r.fokey3 AS fokey3, r.fokey4 AS fokey4, r.fokey5 AS fokey5, r.fokey6 AS fokey6, r.fokey7 AS fokey7, r.fokey1 AS fokey8, r.fokey9 AS fokey9, r.fokey10 AS fokey10, r.fokey11 AS fokey11, r.fokey12 AS fokey12, r.fokey13 AS fokey13, r.fokey14 AS fokey14, r.fokey15 AS fokey15, r.fokey16 AS fokey16, r.refkey1 AS refkey1, r.refkey2 AS refkey2, r.refkey3 AS refkey3, r.refkey4 AS refkey4, r.refkey5 AS refkey5, r.refkey6 AS refkey6, r.refkey7 AS refkey7, r.refkey1 AS refkey8, r.refkey9 AS refkey9, r.refkey10 AS refkey10, r.refkey11 AS refkey11, r.refkey12 AS refkey12, r.refkey13 AS refkey13, r.refkey14 AS refkey14, r.refkey15 AS refkey15, r.refkey16 AS refkey16 FROM sysreferences r JOIN sysobjects o on r.tableid = o.id WHERE r.tableid = :table_id z SELECT o.name AS name, u.name AS 'schema' FROM sysobjects o JOIN sysusers u ON o.uid = u.uid WHERE o.id = :table_id reftable_idrrcountzfokey%izrefkey%i)constrained_columnsZreferred_schemaZreferred_tablereferred_columnsr) rrr rIZfetchallrr0r2ranger<)rrrrrr7Z table_cacheZ column_cacheZ foreign_keysr=r>r)colZREFCONSTRAINT_SQLZreferential_constraintsZ REFTABLE_SQLrrOcZreftableZ table_infoZreftable_columnsrQrRiZfk_inforrrget_foreign_keys/sz      zSybaseDialect.get_foreign_keysc Ks|j||||dd}td}|j||d}g}|D]R} g} td| dD]} | | d| fqL| dt| d | d } || q6|S) Nrra 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 r9rrPzcol_%irr)rr column_names)rrr rIrSr<r;) rrrrrr7Z INDEX_SQLr>ZindexesrUrYrW index_inforrr get_indexess*  zSybaseDialect.get_indexesc Ks|j||||dd}td}|j||d}|}|g} |rtd|ddD]} | |d| fqX| |dd Sgdd SdS) Nrray 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 r9rrPzpk_%ir)rQr)rrr rIrr0rSr<) rrrrrr7ZPK_SQLr>ZpksrQrWrrrget_pk_constraints(zSybaseDialect.get_pk_constraintcKs td}||}dd|DS)Nz%SELECT u.name AS name FROM sysusers ucSsg|] }|dqSrr)rsrrr sz2SybaseDialect.get_schema_names..)r rI)rrrZ SCHEMA_SQLZschemasrrrget_schema_namess zSybaseDialect.get_schema_namescKsL|dkr|j}td}tjr0t|tr0|d}|j||d}dd|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' r0r1cSsg|] }|dqSr]rrrrrr_sz1SybaseDialect.get_table_names..r2r rr3rr4r5rI)rrrrZ TABLE_SQLZtablesrrrget_table_namess   zSybaseDialect.get_table_namescKsF|dkr|j}td}tjr0t|tr0|d}|j||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' r0) view_name) r2r rr3rr4r5rIr()rrrdrrZ VIEW_DEF_SQLrrrrget_view_definitions   z!SybaseDialect.get_view_definitioncKsL|dkr|j}td}tjr0t|tr0|d}|j||d}dd|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' r0racSsg|] }|dqSr]r)rvrrrr_Bsz0SybaseDialect.get_view_names..rb)rrrrZVIEW_SQLZviewsrrrget_view_names/s   zSybaseDialect.get_view_namescCs>||z||||Wntjk r4YdSXdSdS)NFT)Z_ensure_has_table_connectionrrr6)rrrrrrr has_tableDs  zSybaseDialect.has_table)N)N)N)N)N)N)N)N)N))rrrrZsupports_unicode_statementsZsupports_sane_rowcountZsupports_sane_multi_rowcountZsupports_statement_cacheZsupports_native_booleanZsupports_unicode_bindsZpostfetch_lastrowidZcolspecsrFrrrZstatement_compilerr Z ddl_compilerrrrZ inspectorZconstruct_argumentsrr+r/rrcacherAr:rXr[r\r`rcrergrh __classcell__rrr%rr!wsL  $ 23 e 2 1    r!)DrrKZ sqlalchemyrrrrrHrZsqlalchemy.enginerrZsqlalchemy.sqlrr Zsqlalchemy.typesr r r r rrrrrrrrrrrrrrrrrr objectrrrZ UnicodeTextrZIntegerrZ TypeEnginerrrrZ LargeBinaryrZGenericTypeCompilerrrFrrZDefaultExecutionContextrr rZ DDLCompilerr ZIdentifierPreparerrZDefaultDialectr!rrrr s~                            f '1 H?5