o a@sdZddlmZGdddZGdddeZGdddeZGd d d eZGd d d eZGd ddeZGdddeZ GdddeZ GdddeZ dS)z~ Helpers to manipulate deferred DDL statements that might need to be adjusted or discarded within when executing a migration. )deepcopyc@@eZdZdZddZddZddZdd Zd d Zd d Z dS) Referencez0Base class that defines the reference interface.cCdS)zU Return whether or not this instance references the specified table. FselftablerrC/usr/lib/python3/dist-packages/django/db/backends/ddl_references.pyreferences_table zReference.references_tablecCr)zV Return whether or not this instance references the specified column. Frrr columnrrr references_columnr zReference.references_columncCr)zI Rename all references to the old_name to the new_table. Nrr old_table new_tablerrr rename_table_referencesr z!Reference.rename_table_referencescCr)zL Rename all references to the old_column to the new_column. Nrrr old_column new_columnrrr rename_column_referencesr z"Reference.rename_column_referencescCsd|jjt|fS)Nz<%s %r>) __class____name__strrrrr __repr__#zReference.__repr__cCstd)Nz>Subclasses must define how they should be converted to string.)NotImplementedErrorrrrr __str__&szReference.__str__N) r __module__ __qualname____doc__r rrrrrrrrr rs rc@s0eZdZdZddZddZddZdd Zd S) TablezHold a reference to a table.cC||_||_dSN)r quote_name)rr r&rrr __init__- zTable.__init__cCs |j|kSr%r rrrr r 1s zTable.references_tablecCs|j|kr ||_dSdSr%r)rrrr r4s  zTable.rename_table_referencescCs ||jSr%)r&r rrrr r8 z Table.__str__N)rr r!r"r'r rrrrrr r#*s  r#c@s(eZdZdZddZddZddZdS) TableColumnsz9Base class for references to multiple columns of a table.cCr$r%r columns)rr r-rrr r'?r(zTableColumns.__init__cCs|j|ko ||jvSr%r,r rrr rCrzTableColumns.references_columncCs8|j|krt|jD]\}}||kr||j|<q dSdSr%)r enumerater-)rr rrindexrrrr rFs  z%TableColumns.rename_column_referencesN)rr r!r"r'rrrrrr r+<s  r+cs*eZdZdZdfdd ZddZZS)Columnsz(Hold a reference to one or many columns.rc||_||_t||dSr%)r& col_suffixessuperr')rr r-r&r2rrr r'PzColumns.__init__c*fdddfddtjDS)NcsF|}zj|}|rd||}W|SW|Sty"Y|SwNz{} {})r&r2format IndexErrorridxcolsuffixrrr col_strVs   z Columns.__str__..col_str, c3|] \}}||VqdSr%r.0r;rr>rr `z"Columns.__str__..joinr.r-rrr>rr rUs  zColumns.__str__)rrr r!r"r'r __classcell__rrr4r r0Msr0cs(eZdZdZfddZddZZS) IndexNamez"Hold a reference to an index name.cr1r%)r=create_index_namer3r')rr r-r=rLr4rr r'fr5zIndexName.__init__cCs||j|j|jSr%)rLr r-r=rrrr rkrzIndexName.__str__rIrrr4r rKcs rKcs&eZdZdfdd ZddZZS) IndexColumnsrcs||_t||||dSr%) opclassesr3r')rr r-r&r2rNr4rr r'pszIndexColumns.__init__cr6)NcsTd|j|}zj|}|rd||}W|SW|Sty)Y|Swr7)r8r&rNr2r9r:rrr r>us  z%IndexColumns.__str__..col_strr?c3r@r%rrArCrr rDrEz'IndexColumns.__str__..rFrrrHr rts  zIndexColumns.__str__)rr)rr r!r'rrJrrr4r rMosrMcsXeZdZdZfddZfddZfddZfdd Zfd d Zd d Z Z S)ForeignKeyNamez'Hold a reference to a foreign key name.cs*t|||_||_||_t||dSr%)r+ to_referencesuffix_templatecreate_fk_namer3r')r from_table from_columnsto_table to_columnsrQrRr4rr r's zForeignKeyName.__init__cst|p |j|Sr%)r3r rPrr4rr r szForeignKeyName.references_tablecst||p |j||Sr%)r3rrPr r4rr rs z ForeignKeyName.references_columncs t|||j||dSr%)r3rrPrr4rr rsz&ForeignKeyName.rename_table_referencescs$t||||j|||dSr%)r3rrPrr4rr rsz'ForeignKeyName.rename_column_referencescCs.|j|jj|jjdd}||j|j|S)Nr)rU to_column)rQrPr r-rR)rr=rrr rs  zForeignKeyName.__str__) rr r!r"r'r rrrrrJrrr4r rOs     rOc@r) Statementz Statement template and formatting parameters container. Allows keeping a reference to a statement without interpolating identifiers that might have to be adjusted if they're referencing a table or column that is removed cKr$r%templateparts)rrZr[rrr r'r(zStatement.__init__cstfdd|jDS)Nc3s$|] }t|do |VqdS)r N)hasattrr rBpartr)rr rDs  z-Statement.references_table..anyr[valuesrrr)r r s zStatement.references_tablecstfdd|jDS)Nc3s&|]}t|do|VqdS)rN)r\rr]rr rr rDs  z.Statement.references_column..r_r rrbr rszStatement.references_columncCs*|jD] }t|dr|||qdS)Nr)r[rar\r)rrrr^rrr rs   z!Statement.rename_table_referencescCs,|jD]}t|dr||||qdS)Nr)r[rar\r)rr rrr^rrr rs  z"Statement.rename_column_referencescCs |j|jSr%rYrrrr rr*zStatement.__str__N) rr r!r"r'r rrrrrrrr rXs rXcs8eZdZfddZfddZddZddZZS) Expressionscs@||_||_||_dd|jj|jgD}t||dS)NcSsg|]}|jjqSr)targetr)rBr<rrr sz(Expressions.__init__..)compiler expressions quote_valuequery _gen_colsr3r')rr rgrfrhr-r4rr r's zExpressions.__init__cs2|j|krdS|j||i|_t||dSr%)r rgrelabeled_cloner3rrr4rr rs z#Expressions.rename_table_referencescCsb|j|krdSt|j}g|_|jj|gD]}|jj|kr#||j_|j |jjq||_dSr%) r rrgr-rfrirjrdrappend)rr rrrgr<rrr rs    z$Expressions.rename_column_referencescCs*|j|j\}}t|j|}|t|Sr%)rfcompilergmaprhtuple)rsqlparamsrrr rs  zExpressions.__str__)rr r!r'rrrrJrrr4r rcs    rcN) r"copyrrr#r+r0rKrMrOrXrcrrrr s " "&