Files
PowerToys/PythonHome/Lib/bsddb/dbtables.pyc

167 lines
23 KiB
Plaintext
Raw Normal View History

2014-07-09 18:15:23 +08:00
<03>
<EFBFBD>W`Sc@s!dZddlZddlZddlZddlZddlZejddkrdddlZnzejd(kr<>ddlZn\ddl Z e j
<00>Z e j <00>z)e j ddd d
e<00>ddlZWde j<00>X[ ydd lmZWn!ek
rdd lmZnXd efd <00><00>YZdefd<00><00>YZdd)d<00><00>YZdefd<00><00>YZdefd<00><00>YZdefd<00><00>YZdefd<00><00>YZdZdZd<00>ZdZdZ dZ!d <00>Z"d!<00>Z#d"<00>Z$d#<00>Z%d$<00>Z&d%<00>Z'd&d*d'<00><00>YZ(dS(+s$Id$i<><69><EFBFBD><EFBFBD>Niiiitignoretmessages1the cPickle module has been removed in Python 3.0tcategory(tdbt TableDBErrorcBseZRS((t__name__t
__module__(((s.\Lib\bsddb\dbtables.pyR>stTableAlreadyExistscBseZRS((RR(((s.\Lib\bsddb\dbtables.pyR@stCondcBseZdZd<00>ZRS(s!This condition matches everythingcCsdS(Ni((tselfts((s.\Lib\bsddb\dbtables.pyt__call__Fs(RRt__doc__R (((s.\Lib\bsddb\dbtables.pyRDst ExactCondcBs eZdZd<00>Zd<00>ZRS(s)Acts as an exact match condition functioncCs ||_dS(N(t
strtomatch(R R((s.\Lib\bsddb\dbtables.pyt__init__KscCs ||jkS(N(R(R R
((s.\Lib\bsddb\dbtables.pyR Ms(RRR RR (((s.\Lib\bsddb\dbtables.pyR Is t
PrefixCondcBs eZdZd<00>Zd<00>ZRS(s9Acts as a condition function for matching a string prefixcCs ||_dS(N(tprefix(R R((s.\Lib\bsddb\dbtables.pyRRscCs|t|j<00> |jkS(N(tlenR(R R
((s.\Lib\bsddb\dbtables.pyR Ts(RRR RR (((s.\Lib\bsddb\dbtables.pyRPs t PostfixCondcBs eZdZd<00>Zd<00>ZRS(s:Acts as a condition function for matching a string postfixcCs ||_dS(N(tpostfix(R R((s.\Lib\bsddb\dbtables.pyRYscCs|t|j<00> |jkS(N(RR(R R
((s.\Lib\bsddb\dbtables.pyR [s(RRR RR (((s.\Lib\bsddb\dbtables.pyRWs tLikeCondcBs&eZdZejd<00>Zd<00>ZRS(s<>
Acts as a function that will match using an SQL 'LIKE' style
string. Case insensitive and % signs are wild cards.
This isn't perfect but it should work for the simple common cases.
cCsfd}x$|D]}|j|d|<17>}q W|jdd<00>|_tjd|jd|<00>|_dS(Ns.*+()[]?s\t%s.*t^t$(treplacetlikestrtretcompile(R Rtre_flagstchars_to_escapetchar((s.\Lib\bsddb\dbtables.pyRds
 cCs|jj|<00>S(N(Rtmatch(R R
((s.\Lib\bsddb\dbtables.pyR ls(RRR Rt
IGNORECASERR (((s.\Lib\bsddb\dbtables.pyR^st__TABLE_NAMES__s ._COLUMNS__cCs|tS(N(t_columns(ttable((s.\Lib\bsddb\dbtables.pyt _columns_keyuss._DATA_.s ._ROWID_.icCs|t|t|S(N(t_data(R$tcoltrowid((s.\Lib\bsddb\dbtables.pyt _data_key<65>scCs|t|tS(N(R&(R$R'((s.\Lib\bsddb\dbtables.pyt_search_col_data_key<65>scCs|tS(N(R&(R$((s.\Lib\bsddb\dbtables.pyt_search_all_data_key<65>scCs|t|tS(N(t_rowid(R$R(((s.\Lib\bsddb\dbtables.pyt
_rowid_key<65>scCs|tS(N(R,(R$((s.\Lib\bsddb\dbtables.pyt_search_rowid_key<65>scCs`|jt<00>dksT|jt<00>dksT|jt<00>dksT|jt<00>dkrXdSdSdS(s<>Verify that the given string does not contain any
metadata strings that might interfere with dbtables database operation.
iiN(tfindt_table_names_keyR#R&R,(R
((s.\Lib\bsddb\dbtables.pytcontains_metastrings<67>s t
bsdTableDBcBs<>eZdddddd<00>Zd<00>Zd<00>Zdd<00>Zd<00>Zd<00>Zd<00>Zd <00>Z d
<00>Z
d <00>Z d <00>Z d <00>Z d<00>Ziid<00>Zid<00>Zid<00>Zd<00>Zd<00>ZRS(ii<>c s"d |_tj}|r(|tjO}ntjtjBtjBtjB|B} y|tjO}Wnt k
rnnX|r<>| tj
B} ntj <00>|_ |j j tj<00>|j j||| B<>|r<>|tjO}ntj|j <00>|_|jjd<00>|jjtj<00>|jj|tj||B|<00>||_tjddkr<>dtfd<00><00>Y<>dtf<00>fd<00><00>Y}
|
|j<00>|_n|j j<00>} yVt|jd<00>t| <00>s<>t|jd |jj<00>ttjgd<00>d
| <00>nWn| j <00><01>n X| j!<00>i|_"d S( s<>bsdTableDB(filename, dbhome, create=0, truncate=0, mode=0600)
Open database name in the dbhome Berkeley DB directory.
Use keyword arguments when calling this constructor.
iiit cursor_py3kcBs,eZd<00>Zd<00>Zd<00>Zd<00>ZRS(cSs ||_dS(N(t _dbcursor(R tdbcursor((s.\Lib\bsddb\dbtables.pyR<00>scSs |jj<00>S(N(R4tclose(R ((s.\Lib\bsddb\dbtables.pyR6<00>scSsT|jjt|d<00><00>}|dk rP|djd<00>|djd<00>f}n|S(Ns iso8859-1ii(R4t set_rangetbytestNonetdecode(R tsearchtv((s.\Lib\bsddb\dbtables.pyR7<00>s
 cSsNt|jd<00><00>}|dk rJ|djd<00>|djd<00>f}n|S(Ntnextis iso8859-1i(tgetattrR4R9R:(R R<((s.\Lib\bsddb\dbtables.pyt__next__<5F>s
 (RRRR6R7R?(((s.\Lib\bsddb\dbtables.pyR3<00>s   tdb_py3kcs}eZd<00>Zd
<00>fd<00>Zd
d<00>Zdd
d<00>Zd
d<00>Zd
dd<00>Zd
dd<00>Z d
d<00>Z
d <00>Z RS( cSs ||_dS(N(t_db(R R((s.\Lib\bsddb\dbtables.pyR<00>scs<00>|jjd|<00><01>S(Nttxn(RAtcursor(R RB(R3(s.\Lib\bsddb\dbtables.pyRC<00>scSs%t|jd<00>t|d<00>d|<00>S(Nthas_keys iso8859-1RB(R>RAR8(R tkeyRB((s.\Lib\bsddb\dbtables.pyRD<00>sicSsLt|d<00>}|dk r-t|d<00>}n|jj||d|d|<00>S(Ns iso8859-1tflagsRB(R8R9RAtput(R REtvalueRFRB((s.\Lib\bsddb\dbtables.pyRG<00>s cSs(t|d<00>}|jj||d|<00>S(Ns iso8859-1RB(R8RARG(R RERHRB((s.\Lib\bsddb\dbtables.pyt put_bytes<65>scSsOt|d<00>}|jj|d|d|<00>}|dk rK|jd<00>}n|S(Ns iso8859-1RBRF(R8RAtgetR9R:(R RERBRFR<((s.\Lib\bsddb\dbtables.pyRJ<00>s
 cSs+t|d<00>}|jj|d|d|<00>S(Ns iso8859-1RBRF(R8RARJ(R RERBRF((s.\Lib\bsddb\dbtables.pyt get_bytes<65>scSs%t|d<00>}|jj|d|<00>S(Ns iso8859-1RB(R8RAtdelete(R RERB((s.\Lib\bsddb\dbtables.pyRL<00>scSs |jj<00>S(N(RAR6(R ((s.\Lib\bsddb\dbtables.pyR6<00>sN( RRRR9RCRDRGRIRJRKRLR6((R3(s.\Lib\bsddb\dbtables.pyR@<00>s    RDRIRBN(#R9Rt DB_THREADt DB_CREATEt DB_INIT_MPOOLt DB_INIT_LOCKt DB_INIT_LOGt DB_INIT_TXNtDB_AUTO_COMMITtAttributeErrort
DB_RECOVERtDBEnvtenvt set_lk_detecttDB_LOCK_DEFAULTtopent DB_TRUNCATEtDBtset_get_returns_nonet set_flagstDB_DUPtDB_BTREEt
dbfilenametsyst version_infotobjectt txn_beginR>R0RGtpickletdumpstaborttcommitt_bsdTableDB__tablecolumns( R tfilenametdbhometcreatettruncatetmodetrecovertdbflagstmyflagst flagsforenvR@RB((R3s.\Lib\bsddb\dbtables.pyR<00>sF  "   '#

cCs|j<00>dS(N(R6(R ((s.\Lib\bsddb\dbtables.pyt__del__scCsT|jdk r(|jj<00>d|_n|jdk rP|jj<00>d|_ndS(N(RR9R6RW(R ((s.\Lib\bsddb\dbtables.pyR6s    cCs|jj|<00>dS(N(RWttxn_checkpoint(R tmins((s.\Lib\bsddb\dbtables.pyt
checkpointscCs|jj<00>dS(N(Rtsync(R ((s.\Lib\bsddb\dbtables.pyRx scCs<>dGH|jj<00>}y]|j<00>\}}xDti||6<>GH|j<00>}|r_|\}}q,|j<00>dSq,Wntjk
r<>|j<00>nXdS(s*Print the database to stdout for debuggings5******** Printing raw database for debugging ********N(RRCtfirsttreprR=R6tDBNotFoundError(R tcurREtdataR=((s.\Lib\bsddb\dbtables.pyt _db_print#s 
 cCs<>t|t<00>st<00>d }y^t|<00>r9td<00><00>nx)|D]!}t|<00>r@td<00><00>q@q@Wt|<00>}t|jd<00>|<00>r<>t d<00>n|j
j <00>}t|jd|jj <00>|t j|d<00>d|<00>t jt|jd|jj<00>td|d tj<00><02>}|j|<00>|jjtd|<00>t|jd|jj <00>tt j|d<00>d|<00>|j<00>d }WnXtjk
r<>}|r<>|j<00>ntjd kr<>t|d<19>q<>t|jd<19>nXd S(s<>CreateTable(table, columns) - Create a new table in the database.
raises TableDBError if it already exists or for other DB errors.
s-bad table name: contains reserved metastringss.bad column name: contains reserved metastringsRDstable already existsRIiRBRKRFiiN(ii(t
isinstancetlisttAssertionErrorR9R1t
ValueErrorR%R>RRRWReRGRfRgtloadsRJR0tDB_RMWtappendRLRitDBErrorRhRbRcRtargs(R R$tcolumnsRBtcolumntcolumnlist_keyt tablelisttdberror((s.\Lib\bsddb\dbtables.pyt CreateTable5s<      ' 

 cCs<>t|t<00>st<00>t|<00>r-td<00>nt|<00>}t|jd<00>|<00>sUgSt|jd|jj<00>|<00>}|r<>t j
|<00>SgSdS(s\Return a list of columns in the given table.
[] if the table doesn't exist.
s-bad table name: contains reserved metastringsRDRKN( RtstrR<72>R1R<>R%R>RRJRfR<>(R R$R<>tpickledcolumnlist((s.\Lib\bsddb\dbtables.pytListTableColumnses     cCs-|jjt<00>}|r%tj|<00>SgSdS(s)Return a list of tables in this database.N(Rtget_getR0RfR<>(R tpickledtablelist((s.\Lib\bsddb\dbtables.pyt
ListTablesws c
Cs<>t|t<00>st<00>y|j||<00>Wn<57>tk
r<>d}y+t|<00>}|jj<00>}t j
t |j d|j j <00>|d|dt j<00><02>}i}x|D]}|||<q<>Wtj|<00>}x*|D]"}||kr<>|j|<00>q<>q<>W||krL|j j|d|<00>t |j d|j j<00>|t j|d<00>d|<00>n|j<00>d}|j|<00>Wq<57>t jk
r<>} |r<>|j<00>ntjd kr<>t| d<19>q<>t| jd<19>q<>XnXdS(
sCreateOrExtendTable(table, columns)
Create a new table in the database.
If a table of this name already exists, extend it to have any
additional columns present in the given list as well as
all of its current columns.
RKRBRFRIiiiN(ii(RR<>R<>R<>RR9R%RWReRfR<>R>RRJR<>tcopyR<79>RLRGRgRit_bsdTableDB__load_column_infoR<6F>RhRbRcRR<>(
R R$R<>RBR<>t oldcolumnlistt oldcolumnhashtct newcolumnlistR<74>((s.\Lib\bsddb\dbtables.pytCreateOrExtendTables@    '    

 cCs<>y+t|jd|jj<00>t|<00><00>}Wn$tjk
rQtd|f<16>nX|sktd|f<16>ntj|<00>|j|<dS(s'initialize the self.__tablecolumns dictRKsunknown table: %rN( R>RRJR%R{RRfR<>Rj(R R$t tcolpickles((s.\Lib\bsddb\dbtables.pyt__load_column_info<66>s cCs<>d}x<>|s<>g}x-tt<00>D]}|jtjdd<00><00>q"Wtjdt|<00>}tjddkr<>|j d<00>}ny/|j
j t ||<00>d d|dt
j<00>Wnt
jk
r<>q Xd}q W|S(
s"Create a new unique row identifierii<>tBis iso8859-1RBRFiN(txranget_rowid_str_lenR<6E>trandomtrandinttstructtpackRbRcR:RRGR-R9tDB_NOOVERWRITEtDBKeyExistError(R R$RBtuniquetblisttxtnewid((s.\Lib\bsddb\dbtables.pyt __new_rowid<69>s !
c Cs<>d}yt|jd<00>t|<00><00>s3td<00>n||jkrR|j|<00>nx=|j<00>D]/}|j|j|<00>s_td|f<16>q_q_W|j j
<00>}|j |d|<00>}x?|j <00>D]1\}}|jj t|||<00>|d|<00>q<>W|j<00>d}Wn<57>tjk
r<>}tj<00>}|rV|j<00>|jjt||<00><00>ntjd kr|t|d|d<19>q<>t|jd|d<19>nXdS(
s<>Insert(table, datadict) - Insert a new row into the table
using the keys+values from rowdict as the column values.
RDs unknown tablesunknown column: %rRBiiiN(ii(R9R>RR%RRjR<>tkeystcountRWRet_bsdTableDB__new_rowidtitemsRGR)RiR<>Rbtexc_infoRhRLR-RcR<>( R R$trowdictRBR<>R(tdataitemR<6D>tinfo((s.\Lib\bsddb\dbtables.pytInsert<72>s. )

 
c Cs<>yA|j|g|<00>}|j<00>}x|j<00>D] }d}y<>x<>|D]<5D>}|jj<00>}yJ|jjt|||<00>d|<00>} |jjt|||<00>d|<00>Wntj k
r<>d} nX||| <00>} | dk r|jj
t|||<00>| d|<00>n|j <00>d}qGWWq1|r5|j <00>n<00>q1Xq1WWnEtj k
r<>}
tjdkrut|
d<19>q<>t|
jd<19>nXdS(sModify(table, conditions={}, mappings={}) - Modify items in rows matching 'conditions' using mapping functions in 'mappings'
* table - the table name
* conditions - a dictionary keyed on column names containing
a condition callable expecting the data string as an
argument and returning a boolean.
* mappings - a dictionary keyed on column names containing a
condition callable expecting the data string as an argument and
returning the new string for that column.
RBiiiN(ii(t_bsdTableDB__SelectR<74>R9RWReRRJR)RLR{RGRiRhR<>RbRcRR<>( R R$t
conditionstmappingstmatching_rowidsR<73>R(RBR<>R<>R<>((s.\Lib\bsddb\dbtables.pytModify s@       
  
 c Csiy|j|g|<00>}|j|}x<>|j<00>D]<5D>}d}y<>|jj<00>}xK|D]C}y&|jjt|||<00>d|<00>WqWtj k
r<>qWXqWWy#|jjt
||<00>d|<00>Wntj k
r<>nX|j <00>d}Wq2tj k
r}|r|j <00>n<00>q2Xq2WWnEtj k
rd}tjdkrQt|d<19>qet|jd<19>nXdS(sDelete(table, conditions) - Delete items matching the given
conditions from the table.
* conditions - a dictionary keyed on column names containing
condition functions expecting the data string as an
argument and returning a boolean.
RBiiiN(ii(R<>RjR<>R9RWReRRLR)R{R-RiR<>RhRbRcRR<>( R R$R<>R<>R<>R(RBR<>R<>((s.\Lib\bsddb\dbtables.pytDeleteBs6    #

 cCs<>yT||jkr"|j|<00>n|dkr>|j|}n|j|||<00>}WnEtjk
r<>}tjdkr<>t|d<19>q<>t|j d<19>nX|j
<00>S(s<>Select(table, columns, conditions) - retrieve specific row data
Returns a list of row column->value mapping dictionaries.
* columns - a list of which column data to return. If
columns is None, all columns will be returned.
* conditions - a dictionary keyed on column names
containing callable conditions expecting the data string as an
argument and returning a boolean.
iiiN(ii( RjR<>R9R<>RR<>RbRcRR<>tvalues(R R$R<>R<>R<>R<>((s.\Lib\bsddb\dbtables.pytSelectos
 cCs<>||jkr|j|<00>n|dkr;|j|}nxA||j<00>D]/}|j|j|<00>sLtd|f<16>qLqLWi}i}d<00>}tjd kr<>|j <00>}|j
|<00>nvg}xm|j <00>D]_} xVt |<00>D];\}
} || | <00>} | dkr<>|j |
| <00>Pq<50>q<>W|j | <00>q<>W|jj<00>} d}xH|D]@\}}|d}t||<00>}||kr<>d}nd}y<>| j|<00>\}}x<>|t|<00> |krW|t }||krB| s<>||<00>r||kri||<n|r?||||<q?qB||kr5||=n|||<n| j<00>\}}q<>WWqQtjk
r<>}|jdtjkrQ<01>qQqQqQXqQW| j<00>~t|<00>dkr<>x<>|j <00>D]<5D>\}}x<>|D]<5D>}||kr<>q<>ny&|jjt|||<00><00>||<Wq<57>tjk
r{}tjd
krR|dtjkrn<03>qnn|jdtjkrn<03>nd||<q<>Xq<58>Wq<57>Wn|S( s<>__Select() - Used to implement Select and Delete (above)
Returns a dictionary keyed on rowids containing dicts
holding the row data for columns listed in the columns param
that match the given conditions.
* conditions is a dictionary keyed on column names
containing callable conditions expecting the data string as an
argument and returning a boolean.
sunknown column: %rcSs|d}|d}t|<00>t|<00>kr<>d<00>}t|t<00>rrt|t<00>rr|t|j<00>t|j<00><00>St|t<00>r<>t|t<00>r<>|t|j<00>t|j<00><00>SdSt|t<00>r<>dSt|t<00>r<>dSt|t<00>r<>dSt|t<00>r<>dSdS(NicSs$||krdS||kr dSdS(Nii<><69><EFBFBD><EFBFBD>i((tatb((s.\Lib\bsddb\dbtables.pytcmp<6D>s
  ii<><69><EFBFBD><EFBFBD>(ttypeRRRRRRR (tatupletbtupleR<65>R<>R<>((s.\Lib\bsddb\dbtables.pytcmp_conditions<6E>s$

 iiii<><69><EFBFBD><EFBFBD>iN(ii(ii(RjR<>R9t tablecolumnsR<73>R<>RRbRcR<>tsortt enumeratetinsertR<74>RRCR*R7RR<>R=R<>R<>t DB_NOTFOUNDR6RJR)(R R$R<>R<>R<>R<>trejected_rowidsR<73>t conditionlisttitjtktrR|t
column_numt conditiont searchkeytsavethiscolumndataRER}R(R<>trowdata((s.\Lib\bsddb\dbtables.pyt__Select<63>s<>
    
       
  
    c Cs6d}y<>|jj<00>}|jjt|<00>d|<00>|jj|<00>}t|<00>}xXy|j|<00>\}}Wntj k
r<>PnX|t
|<00> |kr<>Pn|j<00>qUt |<00>}xXy|j|<00>\}}Wntj k
r<>PnX|t
|<00> |krPn|j<00>q<>|j <00>t jt|jd|jj<00>td|dtj<00><02>}y|j|<00>Wntk
r{nX|jjtd|<00>t|jd|jj<00>tt j|d<00>d|<00>|j<00>d}||jkr<>|j|=nWn<tjk
r1}|r|j<00>nt|jd<19><00>nXdS(s(Remove an entire table from the databaseRBRKRFRIiN(R9RWReRRLR%RCR+R7R{RR.R6RfR<>R>RJR0R<>tremoveR<65>RGRgRiRjR<>RhRR<>( R R$RBR|t table_keyRER}R<>R<>((s.\Lib\bsddb\dbtables.pytDropsT    
 
 (RRRRtR6RwRxR~R<>R<>R<>R<>R<>R<>R<>R<>R<>R<>R<>R<>(((s.\Lib\bsddb\dbtables.pyR2<00>s& r      0   :  ,6 -  <09>(ii((()t_cvsidRRbR<>R<>R<>RcRftcPickletwarningstcatch_warningstwt __enter__tfilterwarningstDeprecationWarningt__exit__tbsddb3Rt ImportErrortbsddbt StandardErrorRRRR RRRR0R#R%R&R,R<>R)R*R+R-R.R1R2(((s.\Lib\bsddb\dbtables.pyt<module>sV