K ibddlZddlZddlZddlZddlZddlddlmZddlmZddlmZddlm Z ddlm Z ddlm Z dd lm Z dd lm Z dd lmZdd lmZdd lmZ ddlmZmZmZmZmZmZmZmZmZmZmZdZej>ddk(re Z!dZ"dZ#eejHdddk\rdndZ%ndZ%dZ&Gdde'Z(Gdde(Z)Gdde'Z*Gdde+Z,Gdd eZ-Gd!d"e-Z.Gd#d$e/Z0Gd%d&e0Z1Gd'd(e2Z3Gd)d*e4Z5Gd+d,e6Z7Gd-d.e7Z8Gd/d0e8Z9d1Z:e;d2e;e:ze;e:jyze;e=d3fzZ>e;d4e?d5DZ@[:[>ejd6ZBGd7d8e8ZC dRd9ZDGd:d;e7ZEdd?eHZIer=dZJd@ZKdAZLdZMdZNdBZOdCZPdDZQdEZRdFZSdZTd@ZUdAZVdZWdZXdBZYdCZZdDZ[dEZ\dFZ]dGZ^dSdHZ_dTdIZ`GdJdKeIZadLZbdMZcdNZddOZedPZfdQZgy#e$rdZYwxYw)UN)*) ColumnBase)EnclosedNodeList)Entity) Expression)Insert)Node)NodeList)OP) VirtualField) merge_dict)sqlite3) backupbackup_to_fileBlobConnectionHelperregister_bloomfilterregister_hash_functionsregister_rank_functionssqlite_get_db_statussqlite_get_status TableFunctionZeroBlobTFpcxpcnalx)rr)r rc.eZdZdZdxZxZZfdZxZS) RowIDFieldTrowidc||jk7r$tt|d|jdtt|||g|y)Nz must be named "z".) required_name ValueErrortypesuperr!bind)selfmodelnameargs __class__s Z/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/playhouse/sqlite_ext.pyr(zRowIDField.bind8sH 4%% %"4j$*<*<>? ? j$$UD848) __name__ __module__ __qualname__auto_increment column_namer+r$r( __classcell__r-s@r.r!r!4s!N)00K0$99r/r!ceZdZdxZxZZy) DocIDFielddocidN)r0r1r2r4r+r$r/r.r8r8?s)00K0$r/r8ceZdZfdZxZS)AutoIncrementFieldcVtt| |}t|t dfS)N AUTOINCREMENT)r'r<ddlr SQL)r)ctx node_listr-s r.r?zAutoIncrementField.ddlDs*,d7< C$89::r/)r0r1r2r?r5r6s@r.r<r<Cs ;;r/r<ceZdZdZdZy) TDecimalFieldTEXTcyNr:r)s r. get_modifierszTDecimalField.get_modifiersKsr/N)r0r1r2 field_typerIr:r/r.rDrDIs J!r/rDceZdZdfd ZedZdZddZddZddZ ddZ ddZ d Z d Z d Zd Zd ZdZdZxZS)JSONPathcNtt| ||_|xsd|_yNr:)r'rL__init___field_path)r)fieldpathr-s r.rOzJSONPath.__init__Os" h&( ZR r/cPtddj|jzS)Nz$%s)ValuejoinrQrHs r.rSz JSONPath.pathTsURWWTZZ0011r/ct|ts|dk(rd|z}nd|z}t||j|j|fzS)N#z[%s]z.%s) isinstanceintr&rPrQ)r)idxitems r. __getitem__zJSONPath.__getitem__XsF c3 3#:C>r/c|st|ttfr.tj |j j |}||j |j|SrG)rZrarbrcrdrPrerSr)funcrhris r._json_operationzJSONPath._json_operationdsF jt 5GGDKK33E:;EDKKE22r/cD|jtj||SrG)rnrc json_insertrgs r.insertzJSONPath.insertis##BNNE7CCr/cD|jtj||SrG)rnrcrfrgs r.setz JSONPath.setls##BKK@@r/cD|jtj||SrG)rnrc json_replacergs r.replacezJSONPath.replaceo##BOOUGDDr/c~|jtj||jj |SrG)rsrc json_patchrPrer)rhs r.updatezJSONPath.updaters+xx dDKK,C,CE,JKLLr/cVtj|j|jSrG)rc json_removerPrSrHs r.removezJSONPath.removeus~~dkk49955r/cVtj|j|jSrG)rc json_typerPrSrHs r.rzJSONPath.json_typex||DKK33r/cVtj|j|jSrG)rcjson_array_lengthrPrSrHs r.lengthzJSONPath.length{s##DKK;;r/cVtj|j|jSrG)rc json_eachrPrSrHs r.childrenzJSONPath.children~rr/cVtj|j|jSrG)rc json_treerPrSrHs r.treez JSONPath.treerr/c|j|jr.tj|j|j S|jSrG)sqlrQrc json_extractrPrSr)rAs r.__sql__zJSONPath.__sql__sCww**t{{DII>7 7*.++7 7r/rG)r0r1r2rOpropertyrSr^rjrnrqrsrvr{r~rrrrrr5r6s@r.rLrLNsa 22=? 3 DAEM64<447r/rLcFeZdZd dZd dZd dZd dZd dZdZdZ d Z y) JSONBPathNc|st|ttfr.tj |j j |}tj|j |dj|Sr`) rZrarbrcjsonbrPre jsonb_setrSrgs r.rjzJSONBPath.appendsN jt 5HHT[[44U;   ''.. z*   s **ct|6t|ts$tj|j |}|SyrG)rZr rcrdrerzs r.db_valuezJSONField.db_values5  eT* 0 0 78L r/cfd}|S)Nczt|ttfrt||jd}t ||S)NF) converterunpack)rZrarbrVrr)r)rhsops r.innerzJSONField._e..inners2#d|,C4==GdB, ,r/r:)rrs` r._ez JSONField._es - r/c*|j||SrG)Path)r)r]s r.r^zJSONField.__getitem__syyt$$r/cl|Dcgc]}t|d}}tj|g|Scc}wNFr)rVrcrr)pathsps r.extractzJSONField.extracts549:qqE*::t,e,,;1c2t|dt|dS)Nz->FrrrVr)rSs r. extract_jsonzJSONField.extract_jsons$eDE&BCCr/c2t|dt|dS)Nz->>Frrrs r. extract_textzJSONField.extract_texts$uTU'CDDr/cD|j|j||SrG)rrjrgs r.rjzJSONField.appendyy%%eW55r/cD|j|j||SrG)rrqrgs r.rqzJSONField.insertrr/cD|j|j||SrG)rrsrgs r.rsz JSONField.setsyy""5'22r/cD|j|j||SrG)rrvrgs r.rvzJSONField.replacesyy&&ug66r/cB|j|j|SrG)rr{)r)datas r.r{zJSONField.updatesyy%%d++r/cp|s|j|jStj|g|SrG)rr~rcr}r)rs r.r~zJSONField.removes099T?))+ +~~d+U++r/c,tj|SrG)rcrrHs r.rzJSONField.json_type||D!!r/c8|r||fn|f}tj|SrG)rcr)r)rSr,s r.rzJSONField.lengths"#d|$##T**r/c,tj|S)a? Schema of `json_each` and `json_tree`: key, value, type TEXT (object, array, string, etc), atom (value for primitive/scalar types, NULL for array and object) id INTEGER (unique identifier for element) parent INTEGER (unique identifier of parent element or NULL) fullkey TEXT (full path describing element) path TEXT (path to the container of the current element) json JSON hidden (1st input parameter to function) root TEXT hidden (2nd input parameter, path at which to start) )rcrrHs r.rzJSONField.childrens||D!!r/c,tj|SrG)rcrrHs r.rzJSONField.treerr/)NNrG))r0r1r2rJrrLrrOrrrr EQ__eq__NE__ne__GT__gt__GTE__ge__LT__lt__LTE__le__Field__hash__r^rrrrjrqrsrvr{r~rrrrr5r6s@r.rrsJ F D2   YF YF YF ZF YF ZF~~H%-DE6637,, "+"""r/rc,eZdZdZeZdZdZdZdZ y) JSONBFieldJSONBct|6t|ts$tj|j |}|SyrG)rZr rcrrerzs r.rzJSONBField.db_value s5  eT*!1!1%!89L r/c,tj|SrG)rcrdrHs r.rdzJSONBField.jsonswwt}r/cl|Dcgc]}t|d}}tj|g|Scc}wr)rVrcrrs r.rzJSONBField.extracts749:qqE*::-u--;rcp|s|j|jStj|g|SrG)rr~rcrrs r.r~zJSONBField.removes099T?))+ +t,e,,r/N) r0r1r2rJrrrrdrr~r:r/r.rrs J D .-r/rcDeZdZdfd ZdZedZdZddZxZ S) SearchFieldc d|rtdt|ztt|||dy)Nz8SearchField does not accept these keyword arguments: %s.T) unindexedr4null)r%sortedr'rrO)r)rr4kr-s r.rOzSearchField.__init__s@ .06q :; ; k4)I6A * Nr/ct||SrG)match)r)terms r.rzSearchField.match&sT4  r/c t|dsg|jjjDcgc]}t |t r |j  }}|j|j |_|jScc}w)N_fts_column_index) hasattrr*_meta sorted_fieldsrZrr+indexr)r)f search_fieldss r.fts_column_indexzSearchField.fts_column_index)sot01-1ZZ-=-=-K-K< *1k :VVs**** tzz''// 9;""$ +,  KK( ) #djj/ ') ZZ%%66 j$ '77:& & J ((- zz    d.C.CDc!fD E'' 2E%*.%-- 1 123I  [!12   Xi0 1  2 >>   dnn=c!f= >    T::7C Dww' 233!E>s I  I%c t|jtr|j|fi|St t ||fi|SrG) issubclassr* VirtualModelrr'r  _create_table)r)rrr-s r.r#z'VirtualTableSchemaManager._create_tableisI djj, /-4--d>g> >.C  r/T)r0r1r2rr#r5r6s@r.r r =s)4Vr/r c0eZdZGddZedZy)r"c eZdZdZdZdZdZeZy)VirtualModel.MetaNF) r0r1r2rrr primary_keyr schema_manager_classr:r/r.Metar'rs  8r/r*c|SrGr:)clsrs r.rzVirtualModel.clean_optionsysr/N)r0r1r2r* classmethodrr:r/r.r"r"qs 99r/r"ceZdZedZy) BaseFTSModelcJ|jd}|jd}|jd}t|tr |dk(rd|d<nGt|tr7t |j j j|j|d<|rUt|ttfr(dj|Dcgc] }t|c}}d|jdz|d<|r/|j jjd k(rd |z|d<|Scc}w) NcontentprefixtokenizerUz'',z'%s'z' fts5"%s")getrZ basestringrrr*r table_namer4ratuplerWstrstriprlower)r,rr1r2r3is r.rzBaseFTSModel.clean_optionss++i(X&;;z* gz *w"}!%GI   '!' (;(;(F(F(/(;(;"=GI  &4-06":a3q6":; &d); ;GH   2288:fD#)8"3GJ #;s=D N)r0r1r2r-rr:r/r.r/r/~sr/r/cNeZdZdZeZGddZedZedZ edZ edZ eddZ edd Z ed Zed Zed Zed ZedZedZe ddZe ddZe ddZe ddZy)FTSModelz VirtualModel class for creating tables that use either the FTS3 or FTS4 search extensions. Peewee automatically determines which version of the FTS extension is supported and will use FTS4 if possible. ceZdZdezZy) FTSModel.MetazFTS%sN)r0r1r2 FTS_VERSIONrr:r/r.r*rBs "[0r/r*c |jj}|jjjd|d|d|d}|j S)Nz INSERT INTO (z ) VALUES('z');)rr9database execute_sqlfetchone)r,cmdtblress r._fts_cmdzFTSModel._fts_cmdsBii""ii  ,,25sC @B||~r/c$|jdSNoptimizerLr,s r.rOzFTSModel.optimize||J''r/c$|jdSNrebuildrPrQs r.rUzFTSModel.rebuild||I&&r/c$|jdS)Nintegrity-checkrPrQs r.integrity_checkzFTSModel.integrity_checks||-..r/c0|jd|d|S)Nzmerge=r4rP)r,blockssegmentss r.mergezFTSModel.merges||VX>??r/c:|jd|xrdxsdzS)Nz automerge=%s10rP)r,states r. automergezFTSModel.automerges||Nem.BsCDDr/cBt|jj|SzU Generate a `MATCH` expression appropriate for searching this table. rrrr,rs r.rzFTSModel.match SYY%%t,,r/ctj|jjt}tj |g|SrG)rc matchinforrFTS3_MATCHINFOfts_rank)r,weightsris r.rankz FTSModel.ranks0LL!1!1>B {{9/w//r/ctj|jjt}tj |g|SrG)rcrirrFTS4_MATCHINFOfts_bm25r,rl match_infos r.bm25z FTSModel.bm25s0\\#))"2"2NC {{:000r/ctj|jjt}tj |g|SrG)rcrirrro fts_bm25frqs r.bm25fzFTSModel.bm25fs0\\#))"2"2NC ||J111r/ctj|jjt}tj |g|SrG)rcrirrro fts_lucenerqs r.lucenezFTSModel.lucenes0\\#))"2"2NC }}Z2'22r/c|s|}nut|tr`g}|jjD]?} |j | |j | j d} |j | A||}n||}d} |} |r||j|f} |r |s t|} |j| j|j|j| S)N?r:) rZrbrrr7r+rjaliasr@selectwhererorder_by) r,rrl with_score score_aliasscore_fnexplicit_orderingrm weight_argsrR field_weight selectionrs r._searchzFTSModel._searchs:D  &K00 1 '{{5'++ejj#2NO ""<0  1 [)DW%D  djj56I /;'H$syy'(# %r/NcB|j|||||j|S'Full-text search using selected `term`.)rrmr,rrlrrrs r.searchzFTSModel.search+{{     HH   r/cB|j|||||j|Sz:Full-text search for selected `term` using BM25 algorithm.)rrsrs r. search_bm25zFTSModel.search_bm25rr/cB|j|||||j|Sr)rrvrs r. search_bm25fzFTSModel.search_bm25fs+{{     II   r/cB|j|||||j|Sr)rryrs r. search_lucenezFTSModel.search_lucenes+{{     JJ   r/)r$NFscoreF)r0r1r2__doc__r8r9r*r-rLrOrUrYr]rbrrmrsrvryrrrrrr:r/r.r@r@sv LE11 ((''//@@EE-- 00112233%%6FM!&  8=;@  9>r.sK3q63JSVKs))z [^\s"]+|"[^"\\]*(?:\\.[^"\\]*)*"ceZdZdZeZGddZddddZedZ ed Z e d Z e e d fd Zed ZedZedZe ddZe ddZedZedZedZedZedZedZedZedZedZeddZed dZy)! FTS5Modelan Requires SQLite >= 3.9.0. Table options: content: table name of external content, or empty string for "contentless" content_rowid: column name of external content primary key prefix: integer(s). Ex: '2' or '2 3 4' tokenize: porter, unicode61, ascii. Ex: 'porter unicode61' The unicode tokenizer supports the following parameters: * remove_diacritics (1 or 0, default is 1) * tokenchars (string of characters, e.g. '-_' * separators (string of characters) Parameters are passed as alternating parameter name and value, so: {'tokenize': "unicode61 remove_diacritics 0 tokenchars '-_'"} Content-less tables: If you don't need the full-text content in it's original form, you can specify a content-less table. Searches and auxiliary functions will work as usual, but the only values returned when SELECT-ing can be rowid. Also content-less tables do not support UPDATE or DELETE. External content tables: You can set up triggers to sync these, e.g. -- Create a table. And an external content fts5 table to index it. CREATE TABLE tbl(a INTEGER PRIMARY KEY, b); CREATE VIRTUAL TABLE ft USING fts5(b, content='tbl', content_rowid='a'); -- Triggers to keep the FTS index up to date. CREATE TRIGGER tbl_ai AFTER INSERT ON tbl BEGIN INSERT INTO ft(rowid, b) VALUES (new.a, new.b); END; CREATE TRIGGER tbl_ad AFTER DELETE ON tbl BEGIN INSERT INTO ft(fts_idx, rowid, b) VALUES('delete', old.a, old.b); END; CREATE TRIGGER tbl_au AFTER UPDATE ON tbl BEGIN INSERT INTO ft(fts_idx, rowid, b) VALUES('delete', old.a, old.b); INSERT INTO ft(rowid, b) VALUES (new.a, new.b); END; Built-in auxiliary functions: * bm25(tbl[, weight_0, ... weight_n]) * highlight(tbl, col_idx, prefix, suffix) * snippet(tbl, col_idx, prefix, suffix, ?, max_tokens) ceZdZdZy)FTS5Model.Metar5Nr0r1r2rr:r/r.r*rns!r/r*zQBesides the implicit `rowid` column, all columns must be instances of SearchFieldz3Secondary indexes are not supported for FTS5 modelsz4FTS5 models must use the default `rowid` primary key)rJrpkc|jjjdk7rt|jd|jj j D]0}t|ttfrt|jd|jjrt|jdy)Nr"rrJr) rr(r+ImproperlyConfigured_error_messagesfieldsvaluesrZrr!indexes)r,rRs r.validate_modelzFTS5Model.validate_modelxs 99 % % 0&s':':4'@A AYY%%,,. NEek:%>?*3+>+>|+LMM N 99  &s':':7'CD D r/ctjddtkrytjd} |j d|jy# |j d|j d|jjj dn#YY|jyxYwYvxYw#|jwxYw)NrFz:memory:z0CREATE VIRTUAL TABLE fts5test USING fts5 (data);Tr5) rsqlite_version_infoFTS5_MIN_SQLITE_VERSIONconnectexecuteenable_load_extensionload_extensionrrFclose)r,tmp_dbs r.fts5_installedzFTS5Model.fts5_installeds  & &r *-D D,  NNM N LLN : :,,T2%%f- ""11&9  LLN: LLNs;AB9"B9&B9B4!B9"B<4B97B<<Cctj|}|D]9}|jdr|jdr&t |t zs9yy)z Simple helper function to indicate whether a search query is a valid FTS5 query. Note: this simply looks at the characters being used, and is not guaranteed to catch all problematic queries. "FT) _quote_refindall startswithendswithrs_invalid_ascii)querytokenstokens r.validate_queryzFTS5Model.validate_querysS""5) E$)<5zN*   r/rcXg}d}tj|}|D]x}|jdr#|jdr|j |7t |}|t z}|rd}|D]}|j||}|j |z|rdj|S|S)z2 Clean a query of invalid tokens. FrTr) rrrrrjrsrrvrW) rrvaccum any_invalidrr token_setinvalid_for_tokencs r. clean_queryzFTS5Model.clean_querys  ""5) E$)< U#E I )N :  " *6A!MM!W5E6 LL   88E? " r/cBt|jj|Srdrerfs r.rzFTS5Model.matchrgr/c:|r|j|StdS)Nrm)rsr@)r,r,s r.rmzFTS5Model.ranks"&xsxx7CK7r/cVtj|jjg|SrG)rcrsrr)r,rls r.rszFTS5Model.bm25s wwsyy''2'22r/NcR|jtj|||||Sr)rrrrs r.rzFTS5Model.searchs/  ! !$ '      r/c |s td}nt|trg}|jjD][}t|t s|j r!|j|j||j|jd]tj|jjg|}n*tj|jjg|}d} |} |r||j|f} |r |s t|} |j| j|j!t"j%|j'| S)rrmr{r:)r@rZrbrrrrrjr7r+rcrsrr|r}r~rrrr) r,rrlrrrrmrrRrrs r.rzFTS5Model.search_bm25s"v;D  &K00 Je[1%//&& E7;;uzz3+GHJ J77399++:k:D77399++6g6D  djj56I /;'H$syy!6!6t!<=>(# %r/c P|jj}|g}|g}|jD]0\}}|jt ||j|2t t d|jjt|t dt|fS)Nz INSERT INTOVALUES)rritemsrjrr r@r)r,rI extra_paramsrJcolumnsrkeyrhs r. _fts_cmd_sqlzFTS5Model._fts_cmd_sqlsii%&,,. !JC NN6#; ' MM%  !   II   W % M V $ &' 'r/c r|j|fi|}|jjj|SrG)rrrFr)r,rIrrs r.rLzFTS5Model._fts_cmds4   5 5yy!!))%00r/cld|cxkrdkstdtd|jd|S)Nrr zlevel must be between 0 and 16rbrm)r%rL)r,levels r.rbzFTS5Model.automerge s?U b => >!=> >||Ke|44r/c(|jd|S)Nr]rrP)r,npagess r.r]zFTS5Model.merges||G&|11r/c$|jdSrNrPrQs r.rOzFTS5Model.optimizerRr/c$|jdSrTrPrQs r.rUzFTS5Model.rebuildrVr/c(|jd|S)NpgszrrP)r,rs r.set_pgszzFTS5Model.set_pgszs||F|..r/c(|jd|S)NrmrrP)r,rank_expressions r.set_rankzFTS5Model.set_rank!s||F|99r/c$|jdS)Nz delete-allrPrQs r. delete_allzFTS5Model.delete_all%s||L))r/c(|jd|S)NrXrrP)r,rms r.rYzFTS5Model.integrity_check)s||-D|99r/c dvr tddz}t|sGfdd}ttt t t |d}dk(rtt|d<ndk(rtt|d <d j z}t|t|tf|t|S) N)rowcolinstancez5table_type must be either "row", "col" or "instance".z_vocab_model_%sceZdZWjjZWxsWjj dzZejWjje WZ y)"FTS5Model.VocabModel..Meta_vN) r0r1r2rrFr9rc fts5vocabrr@r)r,table table_typesr.r*r6sN99--"Acii&:&:T&A #%<<II$$ O$% r/r*)rdoccntr"r*rroffsetz%sVocab) r%rr TextField IntegerFieldr!r0setattrr&r"getattr)r,rrattrr*attrs class_names``` r. VocabModelzFTS5Model.VocabModel-s 7 7+, ,!:-sD! % %%Y/#~#~# EU"+I6e z)".|"<h"S\\1J CtJG HsD!!r/r)r)rN)r0r1r2rr!r"r*rr-rr staticmethodrrrrrmrsrrrrLrbr]rOrUrrrrYrr:r/r.rr4s4n LE""5FD OEE*  #&r7.-- 8833FM!&8=;@%%6 ' '1155 22((''//::**::""r/rc@8jjD]}|jus|n tdjjGfddt }Gfdd}dj z}t||fd|iS)z3Model factory for the transitive closure extension.z,Unable to find self-referential foreign key.ceZdZeeZeeZeeZeeZ eeZ eeZ GddZ e dfd Ze dfd Ze dfd Zy) &ClosureTable..BaseClosureTableceZdZdZy)+ClosureTable..BaseClosureTable.Metatransitive_closureNrr:r/r.r*ris3 r/r*Ncrj|jjdj||jk(j |j |k(j}| |j |j|k(}|S|s|j |jdkD}|SNdepthonr)r}rr|rWidr~rootobjectsr,noder include_noder model_class source_keys r. descendantsz2ClosureTable..BaseClosureTable.descendantsls f[#))//'*BCd3J#&&$8d:eCHH,-gi    CII$67L" CIIM2Lr/crj|jjdj||jk(j |j |k(j}|r |j |j|k(}|S|s|j |jdkD}|Sr)r}rr|rWr r~r r r s r. ancestorsz0ClosureTable..BaseClosureTable.ancestorsys f[#))//'*BCd3J#(($:d<eCFFdN+gi   CII$67L" CIIM2Lr/curH|jjj}jj |k(}nj j ||j k(j |j|k(|jdk(z}jj |zj}|s|j |k7}|S)Nr) __data__r7r+r}r~rWr r rr ) r,r rfk_valuersiblings foreign_keyrreferencing_classreferencing_keyrs r.rz/ClosureTable..BaseClosureTable.siblingss K/==,,[-=-=>#**,22;(3JK.#VO4!T#;#((+BTD"UCFFdNsyyA~#FG % &(% h 67!')   J$$67Lr/NFF)r0r1r2r rrr ridcolumn parentcolumnr  tablenamer*r-rrr)rrrrrsr.BaseClosureTableras\* , ' *#I. L) +  4 4             r/r!ceZdZWjjZWjj Wj Wj dZdZy)ClosureTable..Meta)r rrFN) r0r1r2rrFr9r4rr()rrrsr.r*r#sC$**33*00;;'33'335 r/r*z %sClosure)rrefs rel_modelr%r(r"r0r&) rrrr field_objr!r*r+rs ```` @r. ClosureTabler'Os '$**// MI""k1'  M KL L""..J$;;<;z -- -D ')FD> ::r/ceZdZGddZedZed dZedZedZ edZ edZ ed Z y ) LSMTableceZdZdZdZy) LSMTable.Metalsm1N)r0r1r2rfilenamer:r/r.r*r+s !r/r*c|jj}|s tdt|dk\r |ddk7rd|z}|jjs td|jj}t |t r tdt |tttfs tdd |_ t |trd }nt |trd }nd }|d|jz|g|j_ t|jjdk(r*|jjd |j_|Sd|j_|S)NzILSM1 extension requires that you specify a filename for the LSM database.rrr6z-LSM1 models must specify a primary-key field.z8LSM1 models must explicitly declare a primary key field.z9LSM1 key must be a TextField, BlobField, or IntegerField.TUINTBLOBrEr)rr-r%lenr(rZ AutoFieldr BlobFieldrrr+rr _value_field)r,rr-r data_types r.rzLSMTable.clean_optionssD99%%>? ?8}!hqkS&8!H,yy$$LM Mii## c9 %*+ +# 9lCD-. . c< (I Y 'II&.0A9%M " syy&& '1 ,%(YY%<%F # t"U  # t $D s #>>D&)SYY " "# D!!#r/c|j|j|jj|\}}|j SrG)rBdeleterr(r)r,rrrFs r. delete_by_idzLSMTable.delete_by_ids>55 JJL II ! ! y}}r/N)zlsm.so) r0r1r2r*r-rrrr<rBrGrLrOr:r/r.r)r)s!!F00## 4 4   $ $r/r)MATCHc2tj||duSrG)rer)regexrhs r._sqlite_regexprTs 99UE "$ ..r/c6eZdZ dfd ZfdZdZxZS)SqliteExtDatabasec(tt| |g|i| d|_|rts t dtxr|du} |rf| r t |nX|jtd|jtd|jtd|jtd|r| s tdt||r|jtdd |r| s td t||r|jtd | |_y) NzRSqliteExtDatabase initialized with C extensions, but shared library was not found!Frprkrurxz0C extension required to register hash functions.regexpr/z(C extension required to use bloomfilter. json_contains)r'rVrO _row_factoryCYTHON_SQLITE_EXTENSIONSrrregister_functionrsrmr%rrTr_json_contains _c_extensions) r)rF c_extensionsrank_functionshash_functionsregexp_function bloomfilterrYr,rprefer_cr-s r.rOzSqliteExtDatabase.__init__s /J4J6J   8&(45 5,KU1J '-&&tZ8&&tZ8&&t[9&&t\:  ".// #D )   " ">8Q ?  !KLL  &   " ">? C%r/chtt| ||jr|j|_yyrG)r'rV_add_conn_hooksrZ row_factoryr)connr-s r.rfz!SqliteExtDatabase._add_conn_hooks;s/ 6t<   #00D  r/c||_yrG)rZr)rcs r.rgzSqliteExtDatabase.row_factory@s r/)NTFFFF)r0r1r2rOrfrgr5r6s@r.rVrVsCG7<27!&F1 r/rVrr/rrr c(fd}t|S)zt Expose a sqlite3_status() call for a particular flag as a property of the Database object. c,t}r|dS|SrD)r)r)resultflagreturn_highwaters r.getterz__status__..getteras&t,F 06!9 .getterlsS{{'*+LMM)$++*:*:DAFay 06!9 B*r/cj||_|js|jj||SrG)r is_closedrrrks r. on_commitzCSqliteExtDatabase.on_commit- "D >>#!!11"5Ir/cj||_|js|jj||SrG)rrrrrks r. on_rollbackzCSqliteExtDatabase.on_rollbacks-"$D >>#!!33B7Ir/cj||_|js|jj||SrG)rrrrrks r. on_updatezCSqliteExtDatabase.on_updaterr/c6|jjSrG)rchangesrHs r.rzCSqliteExtDatabase.changess$$,,. .r/c6|jjSrG)rlast_insert_rowidrHs r.rz$CSqliteExtDatabase.last_insert_rowids$$668 8r/c6|jjSrG)r autocommitrHs r.rzCSqliteExtDatabase.autocommits$$//1 1r/cZt|j|j|||SN)pagesr+progress)r connection)r) destinationrr+rs r.rzCSqliteExtDatabase.backups,$//+[-C-C-E %D8E Er/c>t|j||||Sr)rr)r)r-rr+rs r.rz!CSqliteExtDatabase.backup_to_files#!$//"3XU'+h@ @r/c t|||||SrG)r)r)rcolumnr" read_onlys r. blob_openzCSqliteExtDatabase.blob_openseVUI> >r/TrNNN):r0r1r2rOrrrfrrrrrrrrrrrvSQLITE_STATUS_MEMORY_USED memory_usedSQLITE_STATUS_MALLOC_SIZE malloc_sizeSQLITE_STATUS_MALLOC_COUNT malloc_countSQLITE_STATUS_PAGECACHE_USEDpagecache_used SQLITE_STATUS_PAGECACHE_OVERFLOWpagecache_overflowSQLITE_STATUS_PAGECACHE_SIZEpagecache_sizeSQLITE_STATUS_SCRATCH_USED scratch_usedSQLITE_STATUS_SCRATCH_OVERFLOWscratch_overflowSQLITE_STATUS_SCRATCH_SIZE scratch_sizer{SQLITE_DBSTATUS_LOOKASIDE_USEDlookaside_usedSQLITE_DBSTATUS_LOOKASIDE_HIT lookaside_hit#SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZElookaside_miss#SQLITE_DBSTATUS_LOOKASIDE_MISS_FULLlookaside_miss_fullSQLITE_DBSTATUS_CACHE_USED cache_usedSQLITE_DBSTATUS_SCHEMA_USED schema_usedSQLITE_DBSTATUS_STMT_USEDstatement_usedSQLITE_DBSTATUS_CACHE_HIT cache_hitSQLITE_DBSTATUS_CACHE_MISS cache_missSQLITE_DBSTATUS_CACHE_WRITE cache_writer5r6s@r.r}r}ust F  > @ C       /  9  9  2  2 E=A$( @  ?!!:;  !:DA !"<= #$@A'(HI#$@$G!"<= %&DE!"tL %&?M !:E4H !"tL r/r}c8t|tj|SrG)rr rP)lhsrs r.rrs c288S ))r/c t|}td|dDcgc]!}tjd|||dzd#c}Scc}w)Nrrz@I)r2rangestructr)bufbufsizer>s r._parse_match_inforsB#hG8=a!8L M1FMM$Aac +A . MM Ms&AcR|sdg|zSdg|z}t|D] \}}|||< |S)Nrr) enumerate)ncol raw_weightsrlr>weights r. get_weightsrsB sTz#*";/ IAvGAJ Nr/ct|}d}|dd\}}t||}t|D]T}d||zdzz}t|D]9} || } | s || dzz} || } || dz} | dkDs&|| t| | z zz };V| S)Nr/rrr)rrrfloat)raw_match_inforrrrrrrl phrase_numphrase_info_idxcol_numrcol_idxrow_hits all_rows_hitss r.rmrms#>2J E bq>DAq![)GAhD zA~12Qx DGW%F%15G "'*H&w{3M!|5?]#BCC DD$ 6Mr/c@t|}d}d}d}td\}}}} ||} ||} ||} | | z} | | z}t| |}t| D]}t| D]}||}|dk(r|d||| zzzz}t||}t||dz}t j | |z dz|dzz }|dkrd }t|| |z}t|| |zxsd }||z }||d zz}d |z ||zz}|||zz}|||z z}|||zz }| S) z Usage: # Format string *must* be pcnalx # Second parameter to bm25 specifies the index of the column, on # the table being queries. bm25(matchinfo(document_tbl, 'pcnalx'), 1) AS rank g333333?g?rrrrr/g?gư>r{)rrrrmathlog)rr,rrKBrP_OC_ON_OA_O term_count col_count total_docsL_OX_Orlr>jrxterm_frequencydocs_with_termidf doc_length avg_lengthrationumb_partdenompc_scores r.rsrss#>2J A A EqCc3CJ3ICJ /C /C:)T*G : )y! )AQZF{qAI -./A":a=1N":a!e#45N((.036#c)+,Cczz#'23Jz#'239rJ+E AG,C1WE *F"a&j1EcEk*H h' (E3 ))8 6Mr/cg} |jtj|tj|f|r|j\}}t |t rZt |t r'|D]!}||vry|j||||f#nt |t r|D]}||vsynu||vrqyt |t rZt |t ryt |t r4 tt|D]}|j||||fn ||vry||k7ry|ry#YyxYw#t$rYywxYwr>) rjrdrpoprZrbrarr2 IndexError)src_jsonobj_jsonstackobjsrcrr]r>s r.r]r]bsM E djj*DJJx,@AB 99;S c4 #t$7C#~$LL#c(CH!567C&%D3$%C T "#t$C&!"3s8_7 c!fc!f%567C CZ5 6 ?."! !s9D0.2D70D47 EErr)FF)hrdrrRrsyspeeweerrrrrr r r r r rplayhouse._sqlite_extrrrrrrrrrrrr[ ImportError version_infor;r8rjrorrCrr3r!r8r< DecimalFieldrDrLrrrrrr SchemaManagerr Modelr"r/r@ _alphabetrsupperrrrrcompilerrr'r)rPrTSqliteDatabaserVrrrrrrSQLITE_STATUS_PARSER_STACKrrrrrrrrrrrrrSQLITE_DBSTATUS_DEFERRED_FKSrvr{r}rrrrmrsr]r:r/r.rs #%     $ A!J 222A6)C!KK#9911;; "L" 87z87t77>]" ]"@--.3%3>1 1h 5 <8L|L^ ) * + ^ " #$#b'_ KU3ZKK  BJJ: ; X" X"vCG!%X;vd|dN /**Z !#$ '($!"%&" !!"#$ !"!"%&"!""# !$%!*+'*+' !!""##%    cM.cML*N !HNb#A*%$%sH##H.-H.