o 3a@7@sdddlmZddlZddlmZddlmZmZm Z ddl m Z edej dZGdd d eZ dS) ) namedtupleN)models)BaseDatabaseIntrospection FieldInfo TableInfo)cached_propertyr) is_autofieldis_jsoncsneZdZdZeddZfddZddZdd Zd d Z dd dZ ddZ ddZ ddZ ddZZS)DatabaseIntrospectioncCs|jjdkr,tjdtjdtjdtjdtjdtjdtj dtj dtj dtj dtj dtjd i Stjdtjdtjdtjdtjdtjdtjdtjdtjdtjdtjd tjdi S) N) BinaryField TextField DateField CharField DurationField FloatField DecimalField DateTimeField) connectioncx_oracle_version cx_OracleBLOBCLOBDATETIME FIXED_CHAR FIXED_NCHARINTERVAL NATIVE_FLOATNCHARNCLOBNUMBERSTRING TIMESTAMP DB_TYPE_DATEDB_TYPE_BINARY_DOUBLE DB_TYPE_BLOB DB_TYPE_CHAR DB_TYPE_CLOBDB_TYPE_INTERVAL_DS DB_TYPE_NCHAR DB_TYPE_NCLOBDB_TYPE_NVARCHARDB_TYPE_NUMBERDB_TYPE_TIMESTAMPDB_TYPE_VARCHARselfr2I/usr/lib/python3/dist-packages/django/db/backends/oracle/introspection.pydata_types_reverses6 z(DatabaseIntrospection.data_types_reversecs|tjkrA|dd\}}|dkr:|dkr|jrdSdSd|kr&dkr-nn|jr-dS|dkr3d S|jr8d Sd S|d kr@d Sn |tjkrK|jrKdSt||S)Nr BigAutoFieldBigIntegerFieldr SmallAutoField BooleanField AutoField IntegerFieldir JSONField)rr!rr r superget_field_type)r1 data_type description precisionscale __class__r2r3r@3s$ z$DatabaseIntrospection.get_field_typecs |dfdd|DS)z>Return a list of table and view names in the current database.a SELECT table_name, 't' FROM user_tables WHERE NOT EXISTS ( SELECT 1 FROM user_mviews WHERE user_mviews.mview_name = user_tables.table_name ) UNION ALL SELECT view_name, 'v' FROM user_views UNION ALL SELECT mview_name, 'v' FROM user_mviews cs$g|]}t|d|dqS)rr )ridentifier_converter.0rowr0r2r3 Xs$z8DatabaseIntrospection.get_table_list..)executefetchall)r1cursorr2r0r3get_table_listHs z$DatabaseIntrospection.get_table_listc Cs|d|gdd|D}|jd7_|d|jj||jg}|jD]A}|d}||\}}} } } |i}|t | |g|dd||dpSd|d pYd|d d || | | Rq+|S) zi Return a description of the table with the DB-API cursor.description interface. a> SELECT user_tab_cols.column_name, user_tab_cols.data_default, CASE WHEN user_tab_cols.collation = user_tables.default_collation THEN NULL ELSE user_tab_cols.collation END collation, CASE WHEN user_tab_cols.char_used IS NULL THEN user_tab_cols.data_length ELSE user_tab_cols.char_length END as internal_size, CASE WHEN user_tab_cols.identity_column = 'YES' THEN 1 ELSE 0 END as is_autofield, CASE WHEN EXISTS ( SELECT 1 FROM user_json_columns WHERE user_json_columns.table_name = user_tab_cols.table_name AND user_json_columns.column_name = user_tab_cols.column_name ) THEN 1 ELSE 0 END as is_json FROM user_tab_cols LEFT OUTER JOIN user_tables ON user_tables.table_name = user_tab_cols.table_name WHERE user_tab_cols.table_name = UPPER(%s) cSs4i|]\}}}}}}|||dkr|nd|||fqS)NULLNr2)rIcolumndefault collation internal_sizerr r2r2r3 sz?DatabaseIntrospection.get_table_description..r z,SELECT * FROM {} WHERE ROWNUM < 2 AND {} > 0rr5r6N) rLrMcache_bust_counterformatrops quote_namerBappendrrG) r1rN table_name field_maprBdescnamerTrRrSrr r2r2r3get_table_descriptionZsL!"       z+DatabaseIntrospection.get_table_descriptioncCs|S)z7Identifier comparison is case insensitive under Oracle.)lower)r1r`r2r2r3rGsz*DatabaseIntrospection.identifier_converterr2cCsn|d|g|}|r!||d||||ddgS|D]}t|tjr4||jdgSq#gS)Na| SELECT user_tab_identity_cols.sequence_name, user_tab_identity_cols.column_name FROM user_tab_identity_cols, user_constraints, user_cons_columns cols WHERE user_constraints.constraint_name = cols.constraint_name AND user_constraints.table_name = user_tab_identity_cols.table_name AND cols.column_name = user_tab_identity_cols.column_name AND user_constraints.constraint_type = 'P' AND user_tab_identity_cols.table_name = UPPER(%s) rr )r`tablerQ)rcrQ)rLfetchonerG isinstancerr<rQ)r1rNr] table_fieldsrJfr2r2r3 get_sequencess   z#DatabaseIntrospection.get_sequencescs,|}|d|gfdd|DS)z Return a dictionary of {field_name: (field_name_other_table, other_table)} representing all relationships to the given table. ab SELECT ca.column_name, cb.table_name, cb.column_name FROM user_constraints, USER_CONS_COLUMNS ca, USER_CONS_COLUMNS cb WHERE user_constraints.table_name = %s AND user_constraints.constraint_name = ca.constraint_name AND user_constraints.r_constraint_name = cb.constraint_name AND ca.position = cb.positioncs.i|]\}}}|||fqSr2rG)rI field_namerel_table_namerel_field_namer0r2r3rUsz7DatabaseIntrospection.get_relations..)upperrLrMr1rNr]r2r0r3 get_relationss z#DatabaseIntrospection.get_relationscs(|d|gfdd|DS)Na SELECT ccol.column_name, rcol.table_name AS referenced_table, rcol.column_name AS referenced_column FROM user_constraints c JOIN user_cons_columns ccol ON ccol.constraint_name = c.constraint_name JOIN user_cons_columns rcol ON rcol.constraint_name = c.r_constraint_name WHERE c.table_name = %s AND c.constraint_type = 'R'cs"g|] }tfdd|DqS)c3s|]}|VqdS)Nri)rIcellr0r2r3 szCDatabaseIntrospection.get_key_columns...)tuplerHr0r2r3rKsz9DatabaseIntrospection.get_key_columns..)rLrmrMrnr2r0r3get_key_columnss  z%DatabaseIntrospection.get_key_columnscCs,|d|g|}|r||dSdS)Na SELECT cols.column_name FROM user_constraints, user_cons_columns cols WHERE user_constraints.constraint_name = cols.constraint_name AND user_constraints.constraint_type = 'P' AND user_constraints.table_name = UPPER(%s) AND cols.position = 1 r)rLrdrG)r1rNr]rJr2r2r3get_primary_key_columns   z,DatabaseIntrospection.get_primary_key_columnc Csi}|d|g|D]\}}}}}||}|d||d||d||<q |d|g|D]\}}} } ||}dd| | fdd|dd||<q3|d|g|D]$\}} }} ||}ddddd | d krpd n| |d| dd ||<qZ|S) zu Retrieve any constraints or keys (unique, pk, fk, check, index) across one or more columns. a$ SELECT user_constraints.constraint_name, LISTAGG(LOWER(cols.column_name), ',') WITHIN GROUP (ORDER BY cols.position), CASE user_constraints.constraint_type WHEN 'P' THEN 1 ELSE 0 END AS is_primary_key, CASE WHEN user_constraints.constraint_type IN ('P', 'U') THEN 1 ELSE 0 END AS is_unique, CASE user_constraints.constraint_type WHEN 'C' THEN 1 ELSE 0 END AS is_check_constraint FROM user_constraints LEFT OUTER JOIN user_cons_columns cols ON user_constraints.constraint_name = cols.constraint_name WHERE user_constraints.constraint_type = ANY('P', 'U', 'C') AND user_constraints.table_name = UPPER(%s) GROUP BY user_constraints.constraint_name, user_constraints.constraint_type ,N)columns primary_keyunique foreign_keycheckindexa SELECT cons.constraint_name, LISTAGG(LOWER(cols.column_name), ',') WITHIN GROUP (ORDER BY cols.position), LOWER(rcols.table_name), LOWER(rcols.column_name) FROM user_constraints cons INNER JOIN user_cons_columns rcols ON rcols.constraint_name = cons.r_constraint_name AND rcols.position = 1 LEFT OUTER JOIN user_cons_columns cols ON cons.constraint_name = cols.constraint_name WHERE cons.constraint_type = 'R' AND cons.table_name = UPPER(%s) GROUP BY cons.constraint_name, rcols.table_name, rcols.column_name F)rwrxryrzr{rva SELECT ind.index_name, LOWER(ind.index_type), LISTAGG(LOWER(cols.column_name), ',') WITHIN GROUP (ORDER BY cols.column_position), LISTAGG(cols.descend, ',') WITHIN GROUP (ORDER BY cols.column_position) FROM user_ind_columns cols, user_indexes ind WHERE cols.table_name = UPPER(%s) AND NOT EXISTS ( SELECT 1 FROM user_constraints cons WHERE ind.index_name = cons.index_name ) AND cols.index_name = ind.index_name GROUP BY ind.index_name, ind.index_type Tnormalidx)rwrxryrzr{typervorders)rLrMrGsplit) r1rNr] constraints constraintrvpkrxrz other_table other_columntype_rr2r2r3get_constraintssP         z%DatabaseIntrospection.get_constraints)r2)__name__ __module__ __qualname__rXrr4r@rOrarGrhrorsrtr __classcell__r2r2rEr3r s  ; r ) collectionsrr django.dbr%django.db.backends.base.introspectionrr BaseFieldInfordjango.utils.functionalr_fieldsr r2r2r2r3s