iddZddlZddlZddlmZddlmZddlmZddlmZddlmZdd lm Z dd lm Z dd l m Z dd l mZdd l mZddlmZddlmZddlmZddlmZdd lmZddlmZGddeZGdde ZGddeZGddeZGdde ZGddeZGd d!e ZGd"d#eZ e Z!dS)$a .. dialect:: postgresql+pygresql :name: pygresql :dbapi: pgdb :connectstring: postgresql+pygresql://user:password@host:port/dbname[?key=value&key=value...] :url: http://www.pygresql.org/ .. note:: The pygresql dialect is **not tested as part of SQLAlchemy's continuous integration** and may have unresolved issues. The recommended PostgreSQL dialect is psycopg2. N)_DECIMAL_TYPES) _FLOAT_TYPES) _INT_TYPES) PGCompiler) PGDialect)PGIdentifierPreparer)UUID)HSTORE)JSON)JSONB)exc) processors)util)Null)NumericceZdZdZdZdS) _PGNumericcdSN)selfdialects \/opt/cloudlinux/venv/lib/python3.11/site-packages/sqlalchemy/dialects/postgresql/pygresql.pybind_processorz_PGNumeric.bind_processor,stcxt|ts|j}|jrX|tvr$t jtj|j S|tvs |tvrdStj d|z|tvrdS|tvs |tvr t jStj d|z)NzUnknown PG numeric type: %d) isinstanceintoid asdecimalrrto_decimal_processor_factorydecimalDecimal_effective_decimal_return_scalerrrInvalidRequestErrorto_float)rrcoltypes rresult_processorz_PGNumeric.result_processor/s'3'' "kG > ,&&!>OT%IN**g.C.Ct-1G;,&&tN**g.C.C!**-1G;rN)__name__ __module__ __qualname__rr*rrrrr+s2rrc(eZdZfdZfdZxZS) _PGHStorec|js(tt||S|jjfd}|S)NcHt|tr |S|Sr)rdict)valuehstores rprocessz)_PGHStore.bind_processor..processPs(%&& %ve}}$Lr)has_native_hstoresuperr/rdbapiHstore)rrr5r4 __class__s @rrz_PGHStore.bind_processorKsX( BD))88AA A%      rch|js)tt|||SdSr)r6r7r/r*rrr)r:s rr*z_PGHStore.result_processorWs;( MD))::7GLL L M Mrr+r,r-rr* __classcell__r:s@rr/r/JsZ     MMMMMMMMMrr/c(eZdZfdZfdZxZS)_PGJSONc|js(tt|S|jjfd}|S)Nc|jurd}n t|ts | jrdS|t|tt fr |S|SrNULLrr none_as_nullr2listr3jsonrs rr5z'_PGJSON.bind_processor..processbd !!E4((  $"3 t} 54, ? ?}tE{{"Lr)has_native_jsonr7rArr8Jsonrrr5rIr:s` @rrz_PGJSON.bind_processor]s^& @$''66w?? ?}!      rch|js)tt|||SdSr)rKr7rAr*r<s rr*z_PGJSON.result_processoros;& K$''88'JJ J K Krr=r?s@rrArA\sZ$KKKKKKKKKrrAc(eZdZfdZfdZxZS)_PGJSONBc|js(tt|S|jjfd}|S)Nc|jurd}n t|ts | jrdS|t|tt fr |S|SrrDrHs rr5z(_PGJSONB.bind_processor..processzrJr)rKr7rPrr8rLrMs` @rrz_PGJSONB.bind_processorus^& A4((77@@ @}!      rch|js)tt|||SdSr)rKr7rPr*r<s rr*z_PGJSONB.result_processors;& L4((99'7KK K L Lrr=r?s@rrPrPtsZ$LLLLLLLLLrrPc(eZdZfdZfdZxZS)_PGUUIDc|js(tt||S|jjfd}|S)Nc|dSt|ttfr*t|dkr |S|St|tr |S|S)N)bytes)r )rstrrYlenr )r3uuids rr5z'_PGUUID.bind_processor..processs|}t%#u.. #u::##4e,,,,tE{{"%%% 't&Lr)has_native_uuidr7rUrr8Uuid)rrr5r\r:s @rrz_PGUUID.bind_processorsX& @$''66w?? ?}!     rc|js)tt|||S|jsd}|SdS)Nc(|t|SdSr)rZ)r3s rr5z)_PGUUID.result_processor..processs$u::%%$r)r]r7rUr*as_uuid)rrr)r5r:s rr*z_PGUUID.result_processorsY& K$''88'JJ J|  & & &N   rr=r?s@rrUrUsQ$         rrUceZdZdZdZdS) _PGCompilerc V|j|jfi|dz|j|jfi|zS)Nz %% )r5leftright)rbinaryoperatorkws rvisit_mod_binaryz_PGCompiler.visit_mod_binarysF DL + + + + dl6<..2.. / rc.|ddSN%z%%)replace)rtexts rpost_process_textz_PGCompiler.post_process_texts||C&&&rN)r+r,r-rjrprrrrcrcs2   '''''rrcceZdZdZdS)_PGIdentifierPreparercn||j|j}|ddSrl)rn escape_quoteescape_to_quote)rr3s r_escape_identifierz(_PGIdentifierPreparer._escape_identifiers/ d/1EFF}}S$'''rN)r+r,r-rvrrrrrrrs#(((((rrrceZdZdZeZeZedZ e j e j eeeeeeeeeeeeiZ fdZdZdZxZS)PGDialect_pygresqlpygresqlcddl}|S)Nr)pgdb)clsr{s rr8zPGDialect_pygresql.dbapis  rc tt|jd i| |jj}t jd|}t|dt|df}n#tttf$rd}YnwxYw||_ |dkr!dx}x}}|dkrtjdnd|_d|_dx}x}}||_||_||_dS) Nz (\d+)\.(\d+)r)rr)rFzAPyGreSQL is only fully supported by SQLAlchemy since version 5.0.Tr)r7rx__init__r8versionrematchr groupAttributeError ValueError TypeError dbapi_versionrwarnsupports_unicode_statementssupports_unicode_bindsr6rKr])rkwargsrmr6rKr]r:s rrzPGDialect_pygresql.__init__s&0 $''0::6::: j(G'22A1771::AGGAJJ8GG I6   GGG $ V  DI I  I/&   * 04D ,*.D 'DH H  H/!2..sA%B B%$B%c|d}d|vrK|dddddd|d|d<||jg|fS) Nuser)usernameporthost:rr)translate_connect_argsgetrsplitpopupdatequery)rurloptss rcreate_connect_argsz&PGDialect_pygresql.create_connect_argss))6):: T>>$$++C33A666   DL CI4xrct||jjrB|sdS |j}|sdSn#t$rYnwxYw |jS#t$r |jducYSwxYwdS)NF)rr8Error connectionrclosed_cnx)rercursors r is_disconnectz PGDialect_pygresql.is_disconnects a) * * / u !'2 "! 5!"      /!((! / / /!$.... /us, 99AAA)r+r,r-driverrcstatement_compilerrrpreparer classmethodr8r update_copyrcolspecsrrr r/rLrAr r rPr rUrrrr>r?s@rrxrxs F$$H[  t Z I ' ' 8 '    H/////0rrx)"__doc__r$rbaserrrrrr r r4r rIr r rrrr sql.elementsrtypesrLrrr/rArPrUrcrrrxrrrrrs   &&&&&& !!!!!!>MMMMMMMM$KKKKKdKKK0LLLLLuLLL0d> ' ' ' ' '* ' ' '(((((0((( JJJJJJJJZ r