ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ 4]c@shdZddlZddlmZddlmZddlmZddlmZddl 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;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddgZ%de&fdYZ'de'ej!fdYZ(de'ej!fdYZ)de'ej*fdYZ+dej,fdYZ-dej.fd YZ/d ej.fd YZ0d ej.fd YZ1dej.fdYZ2dej3fdYZ4de j5fdYZ6i,ed)6ed~6ed6ed6e-d6ed6ed6ed6ed6edL6edK6edf6edT6ed6ed6e1d6e0d6ed6ed6edH6ed6ed46ed66e#d6e#d6e#d6e(d6e)d6ed 6ed!6ed"6ed#6ed$6ed%6ed&6ed'6e+d(6ed*6e"d6e4d)6e/d+6ed*6e d6e2d+6Z7d,e j8fd-YZ9d.e j:fd/YZ;d0e j<fd1YZ=d2e j>fd3YZ?d4e j@fd5YZAd6e jBfd7YZCdS(8s .. dialect:: sybase :name: Sybase .. note:: The Sybase dialect within SQLAlchemy **is not currently supported**. The dialect is not tested within continuous integration and is likely to have many issues and caveats not currently handled. iN(texc(tschema(ttypes(tutil(tdefault(t reflection(tcompiler(ttext(tBIGINT(tBINARY(tCHAR(tDATE(tDATETIME(tDECIMAL(tFLOAT(tINT(tINTEGER(tNCHAR(tNUMERIC(tNVARCHAR(tREAL(tSMALLINT(tTEXT(tTIME(t TIMESTAMP(tUnicode(t VARBINARY(tVARCHARtaddtalltaltertandtanytastasctbackuptbegintbetweentbiginttbinarytbittbottomtbreaktbytcallt capabilitytcascadetcasetcasttchart char_convertt charactertcheckt checkpointtclosetcommenttcommittconnectt constrainttcontainstcontinuetconverttcreatetcrosstcubetcurrenttcurrent_timestampt current_usertcursortdatetdbspacet deallocatetdectdecimaltdeclareRtdeletetdeletingtdesctdistincttdotdoubletdroptdynamictelsetelseift encryptedtendtendiftescapetexceptt exceptiontexectexecutetexistingtexistst externlogintfetchtfirsttfloattfortforcetforeigntforwardtfromtfulltgototgranttgroupthavingtholdlockt identifiedtiftintindext index_lparentinnertinoutt insensitivetinsertt insertingtinstalltinsteadtinttintegert integratedt intersecttintotiqtist isolationtjointkeytlateraltlefttliketlocktlogintlongtmatcht membershiptmessagetmodetmodifytnaturaltnewtnot noholdlocktnottnotifytnulltnumerictoftofftontopentoptiontoptionstortordertotherstouttoutertovert passthrought precisiontpreparetprimarytprintt privilegestproct proceduret publicationt raiserrortreadtexttrealt referencet referencestreleasetremotetremovetrenamet reorganizetresourcetrestoretrestricttreturntrevoketrighttrollbacktrolluptsavet savepointtscrolltselectt sensitivetsessiontsettsetusertsharetsmallinttsometsqlcodetsqlstatetstarttstoptsubtranstsubtransactiont synchronizet syntax_errorttablet temporarytthenttimet timestampttinyintttottopttranttriggerttruncatettsequalt unboundedtuniontuniquetunknowntunsignedtupdatetupdatingtusertusingtvalidatetvaluest varbinarytvarchartvariabletvaryingtviewtwaittwaitfortwhentwheretwhiletwindowtwitht with_cubet with_lparent with_rolluptwithintworkt writetextt_SybaseUnitypeMixincBseZdZdZRS(s-these types appear to return a buffer object.cCs d}|S(NcSs|dk rt|SdSdS(N(tNonetstr(tvalue((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pytprocess"s  ((tselftdialecttcoltypeR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pytresult_processor!s (t__name__t __module__t__doc__R(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyRstUNICHARcBseZdZRS(R(RRt__visit_name__(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR+st UNIVARCHARcBseZdZRS(R(RRR(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR/stUNITEXTcBseZdZRS(R (RRR(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR 3stTINYINTcBseZdZRS(R (RRR(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR 7stBITcBseZdZRS(R (RRR(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR ;stMONEYcBseZdZRS(R (RRR(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR ?st SMALLMONEYcBseZdZRS(R (RRR(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR CstUNIQUEIDENTIFIERcBseZdZRS(R(RRR(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyRGstIMAGEcBseZdZRS(R(RRR(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyRKstSybaseTypeCompilercBsteZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z RS( cKs |j|S(N(t visit_IMAGE(Rttype_tkw((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pytvisit_large_binaryPscKs |j|S(N(t visit_BIT(RRR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt visit_booleanSscKs |j|S(N(tvisit_NVARCHAR(RRR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt visit_unicodeVscKs d|jS(Ns UNICHAR(%d)(tlength(RRR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt visit_UNICHARYscKs d|jS(NsUNIVARCHAR(%d)(R(RRR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pytvisit_UNIVARCHAR\scKsdS(NR ((RRR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt visit_UNITEXT_scKsdS(NR ((RRR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt visit_TINYINTbscKsdS(NR((RRR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyRescKsdS(NR ((RRR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyRhscKsdS(NR ((RRR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt visit_MONEYkscKsdS(NR ((RRR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pytvisit_SMALLMONEYnscKsdS(NR((RRR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pytvisit_UNIQUEIDENTIFIERqs(RRRRRRRRRRRRRR (((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyROs           sunsigned bigints unsigned intsunsigned smallintsdouble precisiont smallmoneytmoneyt smalldatetimetdatetimescharacter varyings char varyingtunicharsunicode charactertnchars national charsnational charactertnvarchars nchar varyingsnational char varyingsnational character varyingRtunitexttimages long varchartuniqueidentifiertSybaseInspectorcBseZdZddZRS(cCstjj||dS(N(Rt Inspectort__init__(Rtconn((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR-scCs"|jj|j||d|jS(s3Return the table id from `table_name` and `schema`.t info_cache(Rt get_table_idtbindR/(Rt table_nameR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR0s N(RRR-RR0(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR+s tSybaseExecutionContextcBs2eZeZdZdZdZdZRS(cCs tdS(sMust 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(tNotImplementedError(Rt connectionR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pytset_ddl_autocommits cCs|jr|jjj}|j}|dk }|rO|j|jdk|_n t |_|jr|j j d|j j j|qn|jr|jstjdn|jjjjd|j|jjjtndS(NisSET IDENTITY_INSERT %s ONsGThe Sybase dialect only supports DDL in 'autocommit' mode at this time.s-AUTOCOMMIT (Assuming no Sybase 'ddl in tran')(tisinserttcompiledt statementRt_autoincrement_columnRRtcompiled_parameterst_enable_identity_inserttFalseRDR\Rtidentifier_preparert format_tabletisddltshould_autocommitRtInvalidRequestErrortroot_connectiontenginetloggertinfoR6R5tTrue(Rttblt seq_columntinsert_has_sequence((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pytpre_execs&         cCs[|jr|j|jtn|jrW|jjd|jjj |j j j ndS(NsSET IDENTITY_INSERT %s OFF( R@R6RCR=R<RDR\RR>R?R8R9R(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt post_execs    cCs7|j}|jd|jd}|j|S(NsSELECT @@identity AS lastrowidi(t create_cursorR\tfetchoneR6(RRDt lastrowid((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt get_lastrowids    (RRR=R<R6RKRLRP(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR3s  % tSybaseSQLCompilercBseZeZejejjidd6dd6dd6ZdZ dZ dZ d Z d Z d Zd Zd ZdZRS(t dayofyeartdoytweekdaytdowt millisecondt millisecondscKsZ|jrdpd}|j}|r8|d|f7}n|j}|rVtdn|S(Ns DISTINCT tsTOP %s s"Sybase ASE does not support OFFSET(t _distinctt_limitt_offsetR4(RRRtstlimittoffset((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pytget_select_precolumnss  cCs|S(N((RRR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pytget_from_hint_textscKsdS(NRX((RRR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt limit_clausescKs8|jj|j|j}d||j|j|fS(NsDATEPART("%s", %s)(t extract_maptgettfieldRtexpr(RtextractRRd((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt visit_extractscKsdS(Ns GETDATE()((RtfnR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pytvisit_now_funcscCsdS(NRX((RR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pytfor_update_clause scKsKt|d<|j|j|}|rC|j s;|jrCd|SdSdS(Nt literal_bindss ORDER BY RX(RGRt_order_by_clauset is_subqueryRZ(RRRtorder_by((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pytorder_by_clause%s  cCs4t}|rt}n|j|dtdtd|S(s=If we have extra froms make sure we render any alias as hint.tasfromtiscrudtashint(R=RGt_compiler_dispatch(Rt delete_stmtt from_tablet extra_fromsRr((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pytdelete_table_clause/s  c s.ddjfd|g|DS(s4Render the DELETE .. FROM clause specific to Sybase.sFROM s, c3s-|]#}|jdtdVqdS(Rpt fromhintsN(RsRG(t.0tt(t from_hintsRR(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pys =s(R(RRtRuRvR{R((R{RRsR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pytdelete_extra_from_clause8s (RRRGtansi_bind_rulesRt update_copyRt SQLCompilerRbR_R`RaRgRiRjRoRwR|(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyRQs        tSybaseDDLCompilercBseZdZdZRS(c Ks_|jj|d|jjj|jd|}|jdkrStj dn|jj }||krt |j t jo|j }|r|jpd|jpd}}n d \}}||fd kr|d7}q[|d||f7}nh|j|}|dk r|d|7}n|jdk r[|j sA|jrN|d7}q[|d 7}n|S( Nt ttype_expressionsHThe Sybase dialect requires Table-bound columns in order to generate DDLis IDENTITYs IDENTITY(%s,%s)s DEFAULT s NOT NULLs NULL(ii(ii(tpreparert format_columnRt type_compilerRttypeRRRt CompileErrorR:t isinstanceRt sa_schematSequenceRt incrementtget_column_default_stringtnullablet primary_key( Rtcolumntkwargstcolspectseq_coltsequenceRRR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pytget_column_specificationCs.    "     cCs;|j}d|jj|jj|j|jdtfS(Ns DROP INDEX %s.%stinclude_schema(telementRtquote_identifierRtnamet_prepared_index_nameR=(RRQRq((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pytvisit_drop_indexos (RRRR(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyRBs ,tSybaseIdentifierPreparercBseZeZRS((RRtRESERVED_WORDStreserved_words(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyRwst SybaseDialectcBs:eZdZeZeZeZeZeZe Z iZ e Z e ZeZeZeZeZgZdZdZddZejddZdZejddZ ejddZ!ejddZ"ejd Z#ejdd Z$ejdd Z%ejdd Z&dd Z'RS(tsybasecCs|jtdjdtS(NsSELECT user_name() as user_nametusername(tscalarRtcolumnsR(RR5((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt_get_default_schema_namescCsMtt|j||jdk r@|jdkr@d|_n d|_dS(Niii(i(tsuperRt initializetserver_version_infoRtmax_identifier_length(RR5((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyRs  cKsd}|dkr|j}ntd}tjrxt|trT|jd}nt|trx|jd}qxn|j|d|d|}|j }|dkrt j |n|S(sFetch 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. s 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') tasciit schema_nameR2N( Rtdefault_schema_nameRRtpy2kRtunicodetencodeR\RRtNoSuchTableError(RR5R2RRttable_idt TABLEID_SQLtresult((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR0s       c Ks|j|||d|jd}td}|j|d|}g}xc|D][\} } } } } }}}|j| | t| t| | |||}|j|qRW|S(NR/s* 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(R0RcRR\t_get_column_infotbooltappend(RR5R2RRRt COLUMN_SQLtresultsRRRRt autoincrementtdefault_RtscaleRtcol_info((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt get_columnss&  "   c Cs&|jj|d} i} | ttfkr<||f} nH| tkrT|f} n0| tttt t t fkr~|f} nd } | r| | | } n t j d||ftj} |r|jddj}tjdd|}nd}td|d| d|d |d |} | S( Ns*Did not recognize type '%s' of column '%s'tDEFAULTRXs^'(.*)'$cSs |jdS(Ni(Rk(tm((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pytRXRRRRR((t ischema_namesRcRRR RR RRRRRRtwarntsqltypestNULLTYPEtreplacetstriptretsubtdict( RRRRRRRRRRRtargst column_info((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyRs2      cKs~|j|||d|jd}i}i}g}i|d6|d6||s N((RRRR=tsupports_unicode_statementstsupports_sane_rowcounttsupports_sane_multi_rowcounttsupports_native_booleantsupports_unicode_bindsRGtpostfetch_lastrowidtcolspecsRRRRQtstatement_compilerRt ddl_compilerRRR+t inspectortconstruct_argumentsRRRR0RtcacheRRRRRRRRRR(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR{sF  $2 3e21 (DRRt sqlalchemyRRRRRRtsqlalchemy.engineRRtsqlalchemy.sqlRRtsqlalchemy.typesRR R R R R RRRRRRRRRRRRRRRRtobjectRRRt UnicodeTextR tIntegerR t TypeEngineR R R Rt LargeBinaryRtGenericTypeCompilerRRR,R+tDefaultExecutionContextR3RRQt DDLCompilerRtIdentifierPreparerRtDefaultDialectR(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pytsv   &  HH5