o k`d@sTddlZddlZddlmZmZddlmZddlmZddZ ddZ d d Z dS) N)DatabaseManagerget_column_names)sqlite_backend) printfoutcs`td|dr dj_|dr%tjtjur%tdjt t | }|}t |}t | |@} t | } t joLt jt||||drgt|dtjdkdnddfd d } z1|}t| D]} td | dd | ||| } td | q| | @D]} ||| q|WdS|)NzCopying tables:zsqlite:Fzsrc_cursor.cursor is %rOFF) iTc sd|t}d}rrt|tt|}||}dddgt|}d}|d| |}|sD |S|t|7}rTtd ||d d durb|d krbt ||}d |dt |j|f} r|| d|gt|t |dn| | ||q:)NzSELECT * FROM dz(%s),z%srz DELETE FROM Tz%d records %s table... FnewlinereportzINSERT INTO %s (%s) VALUES ) executequoterminintlenjoin fetchmanyrreplace_report_querymapsum executemany) dbcursortablecolumnsn_rows quoted_tableholderscountrowsquerymax_parametersmultirows_insertprogress replace_cast src_cursorsrc_dbr1/usr/lib/python3/dist-packages/trac/db/convert.py copy_table1s<    zcopy_tables..copy_tablez %s table... r z %d records.)r startswithcnx_eagerrtyperPyFormatCursorAssertionErrorsetrget_table_namesget_sequence_namessysstdoutisattystderrget_replace_castset_synchronoussqlite_versionsortedupdate_sequencecommitrollback)src_envdst_envr+dst_db src_dburi dst_dburi src_tablesrdst_dbmtables sequencesr-rr"rr%r, copy_tablessF          rKcs|dd|ddkrdStdfddttddfdd d Ds/dStd d tjfd d}|S)N:z AS ([^)]+)cs|d|}|dS)NnamerM)searchcastgroup)rr1match)type_rerr, cast_typecs z#get_replace_cast..cast_typecSs|d|dkS)NrrMlower)src_dstrrr,gz"get_replace_cast..c3s(|]}||fVqdSNrU).0t)rTrDr+rr, hs   z#get_replace_cast..)textrint64z%\bCAST\(\s*([^\s)]+)\s+AS\s+(%s)\s*\)|csfdd}||S)Ncs$|\}}d|||fS)NzCAST(%s AS %s))groupsgetrV)rRrNr1) type_mapsrr,replaceqs z7get_replace_cast..replace_cast..replace)sub)r^rd)cast_rercrr,r)ps  z&get_replace_cast..replace_cast)splitrecompiledictfilterr IGNORECASE)r+rDrErFr)r)rfrTrDr+rcrSr,r;^s$   r;cs*|dfddfdd|DS)Nr$cs t|}||<t|SrZ)listtuple)row)idxr)rr,rd|sz%replace_report_query..replacecsg|]}|qSrr)r[ro)rdrr, rYz(replace_report_query..)index)r#rr)r)rprdr)r,rzs r) rhr7 trac.db.apirrtrac.dbrtrac.util.textrrKr;rrrrr,s   H