
    h                        d dl Z d dlZd dlZd dlZd dlZd dlT d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ 	 d dlmZmZmZmZmZmZmZmZmZmZmZ dZn# e$ r dZY nw xY wej        d          dk    re Z!dZ"dZ#eej$        dd         dk    rdndZ%ndZ%dZ& G d de'          Z( G d de(          Z) G d de'          Z* G d de+          Z, G d d e          Z- G d! d"e-          Z. G d# d$e/          Z0 G d% d&e0          Z1 G d' d(e2          Z3 G d) d*e4          Z5 G d+ d,e6          Z7 G d- d.e7          Z8 G d/ d0e8          Z9d1Z: e;d2           e;e:          z   e;e:<                                          z   e; e=d3          f          z  Z> e;d4  e?d5          D                       Z@[:[> ejA        d6          ZB G d7 d8e8          ZC	 	 dRd9ZD G d: d;e7          ZEd<e_F        d= ZG G d> d?eH          ZIer@d ZJd@ZKdAZLdZMdZNdBZOdCZPdDZQdEZRdFZSd ZTd@ZUdAZVdZWdZXdBZYdCZZdDZ[dEZ\dFZ]dGZ^dSdHZ_dTdIZ` G dJ dKeI          ZadL ZbdM ZcdN ZddO ZedP ZfdQ ZgdS )U    N)*)
ColumnBase)EnclosedNodeList)Entity)
Expression)Insert)Node)NodeList)OP)VirtualField)
merge_dict)sqlite3)backupbackup_to_fileBlobConnectionHelperregister_bloomfilterregister_hash_functionsregister_rank_functionssqlite_get_db_statussqlite_get_statusTableFunctionZeroBlobTF   pcxpcnalx)r         r   )r   	   r   c                   .     e Zd ZdZdxZxZZ fdZ xZS )
RowIDFieldTrowidc                     || j         k    r't          t          |           d| j         d           t          t          |           j        ||g|R   d S )Nz must be named "z".)required_name
ValueErrortypesuperr!   bind)selfmodelnameargs	__class__s       R/var/www/html/marketdash/venv/lib/python3.11/site-packages/playhouse/sqlite_ext.pyr(   zRowIDField.bind8   sm    4%%%"4jjjj$*<*<*<> ? ? ?$j$$UD84888888    )	__name__
__module____qualname__auto_incrementcolumn_namer+   r$   r(   __classcell__r-   s   @r.   r!   r!   4   sL        N)00K0$9 9 9 9 9 9 9 9 9r/   r!   c                       e Zd ZdxZxZZdS )
DocIDFielddocidN)r0   r1   r2   r4   r+   r$    r/   r.   r8   r8   ?   s        )00K0$r/   r8   c                        e Zd Z fdZ xZS )AutoIncrementFieldc                     t          t          |                               |          }t          |t	          d          f          S )NAUTOINCREMENT)r'   r<   ddlr
   SQL)r)   ctx	node_listr-   s      r.   r?   zAutoIncrementField.ddlD   s<    ,d3377<<	C$8$89:::r/   )r0   r1   r2   r?   r5   r6   s   @r.   r<   r<   C   s8        ; ; ; ; ; ; ; ; ;r/   r<   c                       e Zd ZdZd ZdS )TDecimalFieldTEXTc                     d S Nr:   r)   s    r.   get_modifierszTDecimalField.get_modifiersK   s      r/   N)r0   r1   r2   
field_typerI   r:   r/   r.   rD   rD   I   s        J!!!!!r/   rD   c                        e Zd Zd fd	Zed             Zd ZddZddZddZ	ddZ
dd	Zd
 Zd Zd Zd Zd Zd Zd Z xZS )JSONPathNc                 v    t          t          |                                            || _        |pd| _        d S Nr:   )r'   rL   __init___field_path)r)   fieldpathr-   s      r.   rO   zJSONPath.__init__O   s5    h&&(((ZR


r/   c                 V    t          dd                    | j                  z            S )Nz$%s )ValuejoinrQ   rH   s    r.   rS   zJSONPath.pathT   s#    URWWTZ000111r/   c                     t          |t                    s|dk    rd|z  }nd|z  } t          |           | j        | j        |fz             S )N#z[%s]z.%s)
isinstanceintr&   rP   rQ   )r)   idxitems      r.   __getitem__zJSONPath.__getitem__X   sS    c3 	3#::C<DD3;DtDzz$+tzTG';<<<r/   c                     |st          |t          t          f          r2t                              | j                            |                    }t                              | j        | d         j        |          S NrY   )	rZ   listdictfnjsonrP   _json_dumpsjson_setrS   r)   valueas_jsons      r.   appendzJSONPath.append_   s^     	<jt55 	<GGDK33E::;;E{{4;S	>>>r/   c                     |st          |t          t          f          r2t                              | j                            |                    } || j        | j        |          S rG   )rZ   ra   rb   rc   rd   rP   re   rS   r)   funcrh   ri   s       r.   _json_operationzJSONPath._json_operationd   sX     	<jt55 	<GGDK33E::;;EtDKE222r/   c                 D    |                      t          j        ||          S rG   )rn   rc   json_insertrg   s      r.   insertzJSONPath.inserti   s    ##BNE7CCCr/   c                 D    |                      t          j        ||          S rG   )rn   rc   rf   rg   s      r.   setzJSONPath.setl   s    ##BK@@@r/   c                 D    |                      t          j        ||          S rG   )rn   rc   json_replacerg   s      r.   replacezJSONPath.replaceo       ##BOUGDDDr/   c                     |                      t                              | | j                            |                              S rG   )rs   rc   
json_patchrP   re   r)   rh   s     r.   updatezJSONPath.updater   s2    xxdDK,C,CE,J,JKKLLLr/   c                 L    t                               | j        | j                  S rG   )rc   json_removerP   rS   rH   s    r.   removezJSONPath.removeu   s    ~~dk49555r/   c                 L    t                               | j        | j                  S rG   )rc   	json_typerP   rS   rH   s    r.   r   zJSONPath.json_typex       ||DK333r/   c                 L    t                               | j        | j                  S rG   )rc   json_array_lengthrP   rS   rH   s    r.   lengthzJSONPath.length{   s    ##DK;;;r/   c                 L    t                               | j        | j                  S rG   )rc   	json_eachrP   rS   rH   s    r.   childrenzJSONPath.children~   r   r/   c                 L    t                               | j        | j                  S rG   )rc   	json_treerP   rS   rH   s    r.   treezJSONPath.tree   r   r/   c                     |                     | j        r%t                              | j        | j                  n| j                  S rG   )sqlrQ   rc   json_extractrP   rS   r)   rA   s     r.   __sql__zJSONPath.__sql__   s>    ww*6rt{DI>>>*.+7 7 	7r/   rG   )r0   r1   r2   rO   propertyrS   r^   rj   rn   rq   rs   rv   r{   r~   r   r   r   r   r   r5   r6   s   @r.   rL   rL   N   sC                  
 2 2 X2= = =? ? ? ?
3 3 3 3
D D D DA A A AE E E EM M M6 6 64 4 4< < <4 4 44 4 47 7 7 7 7 7 7r/   rL   c                   H    e Zd Zd
dZd
dZd
dZd
dZd
dZd Zd Z	d	 Z
dS )	JSONBPathNc                     |st          |t          t          f          r2t                              | j                            |                    }t                              | j        | d         j        |          S r`   )	rZ   ra   rb   rc   jsonbrP   re   	jsonb_setrS   rg   s      r.   rj   zJSONBPath.append   s^     	=jt55 	=HHT[44U;;<<E||DKc???r/   c                     |st          |t          t          f          r2t                              | j                            |                    } || j        | j        |          S rG   )rZ   ra   rb   rc   r   rP   re   rS   rl   s       r.   rn   zJSONBPath._json_operation   sX     	=jt55 	=HHT[44U;;<<EtDKE222r/   c                 D    |                      t          j        ||          S rG   )rn   rc   jsonb_insertrg   s      r.   rq   zJSONBPath.insert   rw   r/   c                 D    |                      t          j        ||          S rG   )rn   rc   r   rg   s      r.   rs   zJSONBPath.set   s    ##BL%AAAr/   c                 D    |                      t          j        ||          S rG   )rn   rc   jsonb_replacerg   s      r.   rv   zJSONBPath.replace   s    ##B$4eWEEEr/   c                     |                      t                              | | j                            |                              S rG   )rs   rc   jsonb_patchrP   re   rz   s     r.   r{   zJSONBPath.update   s2    xxtT[-D-DU-K-KLLMMMr/   c                 L    t                               | j        | j                  S rG   )rc   jsonb_removerP   rS   rH   s    r.   r~   zJSONBPath.remove   s    t{DI666r/   c                     |                     | j        r%t                              | j        | j                  n| j                  S rG   )r   rQ   rc   jsonb_extractrP   rS   r   s     r.   r   zJSONBPath.__sql__   s@    ww*6r''TY???*.+7 7 	7r/   rG   )r0   r1   r2   rj   rn   rq   rs   rv   r{   r~   r   r:   r/   r.   r   r      s        @ @ @ @
3 3 3 3
E E E EB B B BF F F FN N N7 7 77 7 7 7 7r/   r   c                   j    e Zd ZdZdZeZd fd	Zd Zd Z	d Z
 e
ej                  Z e
ej                  Z e
ej                  Z e
ej                  Z e
ej                  Z e
ej                  Zej        Zd Zd	 Zd
 Zd ZddZddZddZ ddZ!d Z"d Z#d Z$ddZ%d Z&d Z' xZ(S )	JSONFieldJSONFNc                     |pt           j        | _        |pt           j        | _         t          t          |           j        di | d S rN   )rd   dumpsre   loads_json_loadsr'   r   rO   )r)   
json_dumps
json_loadskwargsr-   s       r.   rO   zJSONField.__init__   sJ    %3%3'i'11&11111r/   c                 h    |/	 |                      |          S # t          t          f$ r |cY S w xY wd S rG   )r   	TypeErrorr%   rz   s     r.   python_valuezJSONField.python_value   sR    ''...z*    s    //c                     |Dt          |t                    s-t                              |                     |                    }|S d S rG   )rZ   r	   rc   rd   re   rz   s     r.   db_valuezJSONField.db_value   sF    eT** 9 0 0 7 788L r/   c                       fd}|S )Nc                     t          |t          t          f          rt          || j        d          }t          | |          S )NF)	converterunpack)rZ   ra   rb   rV   r   r   )r)   rhsops     r.   innerzJSONField._e.<locals>.inner   sB    #d|,, HC4=GGGdB,,,r/   r:   )r   r   s   ` r.   _ezJSONField._e   s#    	- 	- 	- 	- 	- r/   c                 8    |                      |           |         S rG   )Path)r)   r]   s     r.   r^   zJSONField.__getitem__   s    yyt$$r/   c                 >    d |D             }t          j        | g|R  S )Nc                 0    g | ]}t          |d           S Fr   rV   .0ps     r.   
<listcomp>z%JSONField.extract.<locals>.<listcomp>   %    :::qqE***:::r/   )rc   r   r)   pathss     r.   extractzJSONField.extract   s-    ::E:::t,e,,,,r/   c                 B    t          | dt          |d                    S )Nz->Fr   r   rV   r)   rS   s     r.   extract_jsonzJSONField.extract_json   s!    $eDE&B&B&BCCCr/   c                 B    t          | dt          |d                    S )Nz->>Fr   r   r   s     r.   extract_textzJSONField.extract_text   s!    $uTU'C'C'CDDDr/   c                 T    |                      |                               ||          S rG   )r   rj   rg   s      r.   rj   zJSONField.append   "    yy%%eW555r/   c                 T    |                      |                               ||          S rG   )r   rq   rg   s      r.   rq   zJSONField.insert   r   r/   c                 T    |                      |                               ||          S rG   )r   rs   rg   s      r.   rs   zJSONField.set   s"    yy""5'222r/   c                 T    |                      |                               ||          S rG   )r   rv   rg   s      r.   rv   zJSONField.replace   s"    yy&&ug666r/   c                 R    |                      |                               |          S rG   )r   r{   )r)   datas     r.   r{   zJSONField.update   s     yy%%d+++r/   c                 x    |s'|                      |                                           S t          j        | g|R  S rG   )r   r~   rc   r}   r   s     r.   r~   zJSONField.remove   s>     	,99T??))+++~d+U++++r/   c                 6    t                               |           S rG   )rc   r   rH   s    r.   r   zJSONField.json_type       ||D!!!r/   c                 0    |r| |fn| f}t          j        | S rG   )rc   r   )r)   rS   r,   s      r.   r   zJSONField.length   s$    #0d||$#T**r/   c                 6    t                               |           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)
        )rc   r   rH   s    r.   r   zJSONField.children   s     ||D!!!r/   c                 6    t                               |           S rG   )rc   r   rH   s    r.   r   zJSONField.tree  r   r/   )NNrG   ))r0   r1   r2   rJ   r   rL   r   rO   r   r   r   r   EQ__eq__NE__ne__GT__gt__GTE__ge__LT__lt__LTE__le__Field__hash__r^   r   r   r   rj   rq   rs   rv   r{   r~   r   r   r   r   r5   r6   s   @r.   r   r      s       JFD2 2 2 2 2 2
       RYYFRYYFRYYFRZZFRYYFRZZF~H% % %- - -D D DE E E6 6 6 66 6 6 63 3 3 37 7 7 7, , ,, , ,
" " "+ + + +" " """ " " " " " "r/   r   c                   .    e Zd ZdZeZd Zd Zd Zd Z	dS )
JSONBFieldJSONBc                     |Dt          |t                    s-t                              |                     |                    }|S d S rG   )rZ   r	   rc   r   re   rz   s     r.   r   zJSONBField.db_value  sF    eT** :!1!1%!8!899L r/   c                 6    t                               |           S rG   )rc   rd   rH   s    r.   rd   zJSONBField.json  s    wwt}}r/   c                 >    d |D             }t          j        | g|R  S )Nc                 0    g | ]}t          |d           S r   r   r   s     r.   r   z&JSONBField.extract.<locals>.<listcomp>  r   r/   )rc   r   r   s     r.   r   zJSONBField.extract  s.    ::E:::-u----r/   c                 x    |s'|                      |                                           S t          j        | g|R  S rG   )r   r~   rc   r   r   s     r.   r~   zJSONBField.remove  s>     	,99T??))+++t,e,,,,r/   N)
r0   r1   r2   rJ   r   r   r   rd   r   r~   r:   r/   r.   r   r     sZ        JD    . . .- - - - -r/   r   c                   J     e Zd Zd
 fd	Zd Zed             Zd Zdd	Z xZ	S )SearchFieldFNc                     |rt          dt          |          z            t          t          |                               ||d           d S )Nz8SearchField does not accept these keyword arguments: %s.T)	unindexedr4   null)r%   sortedr'   r   rO   )r)   r   r4   kr-   s       r.   rO   zSearchField.__init__  sm     	; .06q		: ; ; ;k4  ))I6A 	* 	N 	N 	N 	N 	Nr/   c                 "    t          | |          S rG   )match)r)   terms     r.   r   zSearchField.match&  s    T4   r/   c                     t          | d          s:d | j        j        j        D             }|                    | j                  | _        | j        S )N_fts_column_indexc                 F    g | ]}t          |t                    |j        S r:   )rZ   r   r+   )r   fs     r.   r   z0SearchField.fts_column_index.<locals>.<listcomp>,  s8     < < < *1k : :<QV < < <r/   )hasattrr*   _metasorted_fieldsindexr+   r   )r)   search_fieldss     r.   fts_column_indexzSearchField.fts_column_index)  s\    t011 	D< <TZ-=-K < < <M%2%8%8%C%CD"%%r/   c                 h    | j         }t                              | j        j        j        |||          S rG   )r  rc   	highlightr*   r   entity)r)   leftright
column_idxs       r.   r  zSearchField.highlight1  s*    *
||DJ,3ZuMMMr/   ...   c                     d|cxk     rdk     sn t          d          | j        }t                              | j        j        j        |||||          S )Nr   A   z/max_tokens must be between 1 and 64 (inclusive))r%   r  rc   snippetr*   r   r  )r)   r  r	  over_length
max_tokensr
  s         r.   r  zSearchField.snippet5  sc    J########NOOO*
zz$**1:tU%z3 3 	3r/   )FN)r  r  )
r0   r1   r2   rO   r   r   r  r  r  r5   r6   s   @r.   r   r     s        N N N N N N! ! ! & & X&N N N3 3 3 3 3 3 3 3r/   r   c                   (     e Zd ZddZd fd	Z xZS )VirtualTableSchemaManagerTc                    | j                             t          | j         j        j        |                    }|                                 }|                    d           |r|                    d           |                    | j                                       d           | j         j        j        }t          |t                    r|                    |          S |                    t          |                                        d           g }| j         j        }|j        r$|                    d |j        D                        |j        D ]}t          |t                    s|j        rt#          |j                  g}|j        r"|                    t          d                     |                    t+          |                     |j        r$|                    d |j        D                        |r(|                    |                     |                     |                    t1          |                    S )NzCREATE VIRTUAL TABLE zIF NOT EXISTS z USING  c                 ,    g | ]}t          |          S r:   r@   r   as     r.   r   zCVirtualTableSchemaManager._create_virtual_table.<locals>.<listcomp>W  s    DDDc!ffDDDr/   	UNINDEXEDc                 ,    g | ]}t          |          S r:   r  r  s     r.   r   zCVirtualTableSchemaManager._create_virtual_table.<locals>.<listcomp>c  s    ===c!ff===r/   )r*   clean_optionsr   r   options_create_contextliteralr   extension_modulerZ   r	   r@   prefix_argumentsextendr  r!   _hiddenr   r4   r   rj   r
   	arguments_create_table_option_sqlr   )	r)   safer  rA   
ext_moduler$  metarR   	field_defs	            r.   _create_virtual_tablez/VirtualTableSchemaManager._create_virtual_table>  s&   ***tz'/99; ; ""$$+,,, 	*KK()))	
#dj//
')


Z%6
j$'' 	'77:&&&J  ((---	z  	FDDd.CDDDEEE ' 	2 	2E%*.. %-  1223I 3  [!1!1222Xi001111> 	?==dn===>>> 	ET::7CCDDDww'	22333r/   c                     t          | j        t                    r | j        |fi |S  t	          t
          |           j        |fi |S rG   )
issubclassr*   VirtualModelr*  r'   r  _create_table)r)   r&  r  r-   s      r.   r.  z'VirtualTableSchemaManager._create_tablei  sd    dj,// 	?-4-d>>g>>>Cu.55C   	r/   T)r0   r1   r2   r*  r.  r5   r6   s   @r.   r  r  =  sR        )4 )4 )4 )4V         r/   r  c                   >    e Zd Z G d d          Zed             ZdS )r-  c                   "    e Zd ZdZdZdZdZeZdS )VirtualModel.MetaNF)	r0   r1   r2   r$  r   r!  primary_keyr  schema_manager_classr:   r/   r.   Metar2  r  s,        	8r/   r5  c                     |S rG   r:   )clsr  s     r.   r  zVirtualModel.clean_optionsy  s    r/   N)r0   r1   r2   r5  classmethodr  r:   r/   r.   r-  r-  q  sW        9 9 9 9 9 9 9 9   [  r/   r-  c                   $    e Zd Zed             ZdS )BaseFTSModelc                 F   |                     d          }|                     d          }|                     d          }t          |t                    r|dk    rd|d<   n<t          |t                    r't	          |j        j        j        |j                  |d<   |rVt          |t          t          f          rd                    d |D                       }d|                    d	          z  |d<   |r*| j        j                                        d
k    rd|z  |d<   |S )NcontentprefixtokenizerU   z'',c                 ,    g | ]}t          |          S r:   )str)r   is     r.   r   z.BaseFTSModel.clean_options.<locals>.<listcomp>  s    ":":":a3q66":":":r/   z'%s'z' fts5"%s")getrZ   
basestringr   r   r*   r   
table_namer4   ra   tuplerW   stripr   lower)r7  r  r<  r=  r>  s        r.   r  zBaseFTSModel.clean_options  s&   ++i((X&&;;z**gz** 	=w"}}!%GI'' 	=!'(;(F(/(;"= "=GI  	<&4-00 <":":6":":":;; &d);); ;GH 	4	288::fDD #)8"3GJr/   N)r0   r1   r2   r8  r  r:   r/   r.   r:  r:  ~  s-          [  r/   r:  c                      e Zd ZdZ e            Z G d d          Zed             Zed             Z	ed             Z
ed             Zedd
            Zedd            Zed             Zed             Zed             Zed             Zed             Zed             Ze	 	 dd            Ze	 	 dd            Ze	 	 dd            Ze	 	 dd            ZdS )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.
    c                       e Zd Zdez  ZdS )FTSModel.MetazFTS%sN)r0   r1   r2   FTS_VERSIONr   r:   r/   r.   r5  rN    s        "[0r/   r5  c           	          | j         j        }| j         j                            d|d|d|d          }|                                S )NzINSERT INTO (z
) VALUES('z');)r   rG  databaseexecute_sqlfetchone)r7  cmdtblress       r.   _fts_cmdzFTSModel._fts_cmd  sO    i"i ,,,25##sssCCC@B B||~~r/   c                 ,    |                      d          S NoptimizerX  r7  s    r.   r[  zFTSModel.optimize      ||J'''r/   c                 ,    |                      d          S Nrebuildr\  r]  s    r.   ra  zFTSModel.rebuild      ||I&&&r/   c                 ,    |                      d          S )Nintegrity-checkr\  r]  s    r.   integrity_checkzFTSModel.integrity_check  s    ||-...r/         c                 8    |                      d|d|          S )Nzmerge=r?  r\  )r7  blockssegmentss      r.   mergezFTSModel.merge  s!    |||VVVXX>???r/   Tc                 :    |                      d|rdpdz            S )Nzautomerge=%s10r\  )r7  states     r.   	automergezFTSModel.automerge  s"    ||Nem.BsCDDDr/   c                 6    t          | j        j        |          S zU
        Generate a `MATCH` expression appropriate for searching this table.
        r   r   r  r7  r   s     r.   r   zFTSModel.match      
 SY%t,,,r/   c                 z    t                               | j        j        t                    }t          j        |g|R  S rG   )rc   	matchinfor   r  FTS3_MATCHINFOfts_rank)r7  weightsrw  s      r.   rankzFTSModel.rank  s2    LL!1>BB	{9/w////r/   c                 z    t                               | j        j        t                    }t          j        |g|R  S rG   )rc   rw  r   r  FTS4_MATCHINFOfts_bm25r7  rz  
match_infos      r.   bm25zFTSModel.bm25  s2    \\#)"2NCC
{:00000r/   c                 z    t                               | j        j        t                    }t          j        |g|R  S rG   )rc   rw  r   r  r}  	fts_bm25fr  s      r.   bm25fzFTSModel.bm25f  s2    \\#)"2NCC
|J11111r/   c                 z    t                               | j        j        t                    }t          j        |g|R  S rG   )rc   rw  r   r  r}  
fts_lucener  s      r.   lucenezFTSModel.lucene  s2    \\#)"2NCC
}Z2'2222r/   c                    |s |            }nut          |t                    r[g }| j        j        D ]F}	|                    |	|                    |	j        d                    }
|                    |
           G || }n || }d}|}|r| |                    |          f}|r|st          |          } | j	        | 
                    |                     |                                        |          S )N      ?r:   )rZ   rb   r   r  rE  r+   rj   aliasr@   selectwherer   order_by)r7  r   rz  
with_scorescore_aliasscore_fnexplicit_orderingr{  weight_argsrR   field_weight	selectionr  s                r.   _searchzFTSModel._search  s     	&8::DD&& 		&K0 1 1  '{{5'++ej#2N2NOO""<00008[)DD8W%D	 	7djj556I 	(/ 	(;''H$syy''(##	%r/   NFscorec                 @    |                      ||||| j        |          S 'Full-text search using selected `term`.)r  r{  r7  r   rz  r  r  r  s         r.   searchzFTSModel.search  .     {{H  	r/   c                 @    |                      ||||| j        |          S z:Full-text search for selected `term` using BM25 algorithm.)r  r  r  s         r.   search_bm25zFTSModel.search_bm25  r  r/   c                 @    |                      ||||| j        |          S r  )r  r  r  s         r.   search_bm25fzFTSModel.search_bm25f  s.     {{I  	r/   c                 @    |                      ||||| j        |          S r  )r  r  r  s         r.   search_lucenezFTSModel.search_lucene  s.     {{J  	r/   )rf  rg  r/  NFr  F)r0   r1   r2   __doc__r8   r9   r5  r8  rX  r[  ra  re  rk  rp  r   r{  r  r  r  r  r  r  r  r  r:   r/   r.   rL  rL    sA         JLLE1 1 1 1 1 1 1 1   [ ( ( [( ' ' [' / / [/ @ @ @ [@ E E E [E - - [- 0 0 [0 1 1 [1 2 2 [2 3 3 [3 % % [%6 FM!&	 	 	 [	 8=;@	 	 	 [	 9><A	 	 	 [	 :?=B	 	 	 [	 	 	r/   rL  abcdefghijklmnopqrstuvwxyzz	 ,"(){}*:_+0123456789   c              #   `   K   | ])}t          |          t          vt          |          V  *d S rG   )chr	_alphanumr   s     r.   	<genexpr>r  .  s8      KK3q663J3JSVV3J3J3J3JKKr/      z(?:[^\s"]|"(?:\\.|[^"])*")+c                   *   e Zd ZdZ e            Z G d d          ZddddZed             Z	ed	             Z
ed
             Ze ed          fd            Zed             Zed             Zed             Ze	 	 d"d            Ze	 	 d"d            Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed#d            Zed$d!            ZdS )%	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)
    c                       e Zd ZdZdS )FTS5Model.MetarC  Nr0   r1   r2   r   r:   r/   r.   r5  r  n  s        !r/   r5  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)rJ   r  pkc                 ^   | j         j        j        dk    rt          | j        d                   | j         j                                        D ]8}t          |t          t          f          st          | j        d                   9| j         j
        rt          | j        d                   d S )Nr"   r  rJ   r  )r   r3  r+   ImproperlyConfigured_error_messagesfieldsvaluesrZ   r   r!   indexes)r7  rR   s     r.   validate_modelzFTS5Model.validate_modelx  s     9 %00&s':4'@AAAY%,,.. 	N 	NEek:%>?? N*3+>|+LMMMN9 	E&s':7'CDDD	E 	Er/   c                    t           j        d d         t          k     rdS t          j        d          }	 |                    d           no#  	 |                    d           |                    d           | j        j                            d           n#  Y Y |	                                 dS xY wY nxY w|	                                 n# |	                                 w xY wdS )Nr   Fz:memory:z0CREATE VIRTUAL TABLE fts5test USING fts5 (data);TrC  )
r   sqlite_version_infoFTS5_MIN_SQLITE_VERSIONconnectexecuteenable_load_extensionload_extensionr   rR  close)r7  tmp_dbs     r.   fts5_installedzFTS5Model.fts5_installed  s    &rr*-DDD5 ,,	NNMNNNN	::,,T222%%f--- 	"11&9999u LLNNNNN :9LLNNNNFLLNNNNtsA   A 
C B7*B8 B7B2B7C 2B75C C%c                     t                               |           }|D ]G}|                    d          r|                    d          r-t	          |          t
          z  r dS HdS )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_refindall
startswithendswithrs   _invalid_ascii)querytokenstokens      r.   validate_queryzFTS5Model.validate_query  sv     ""5)) 	 	E$$ )<)< 5zzN* uutr/   r  c                    g }d}t                               |           }|D ]}|                    d          r+|                    d          r|                    |           Bt          |          }|t          z  }|rd}|D ]}|                    ||          }|                    |           |rd                    |          S | S )z2
        Clean a query of invalid tokens.
        Fr  Tr  )	r  r  r  r  rj   rs   r  rv   rW   )	r  rv   accumany_invalidr  r  	token_setinvalid_for_tokencs	            r.   clean_queryzFTS5Model.clean_query  s    
 ""5)) 
	  
	 E$$ )<)< U###E

I )N :  6"* 6 6A!MM!W55EELL 	#88E??"r/   c                 6    t          | j        j        |          S rr  rs  rt  s     r.   r   zFTS5Model.match  ru  r/   c                 8    |r
 | j         | nt          d          S )Nr{  )r  r@   )r7  r,   s     r.   r{  zFTS5Model.rank  s    "&7xsxCKK7r/   c                 :    t          j        | j        j        g|R  S rG   )rc   r  r   r  )r7  rz  s     r.   r  zFTS5Model.bm25  s    wsy'2'2222r/   NFr  c                 d    |                      t                              |          ||||          S r  )r  r  r  r  s         r.   r  zFTS5Model.search  s7     !!$''  	r/   c           
         |st          d          }nt          |t                    rg }| j        j        D ]`}t          |t
                    rI|j        sB|                    |                    ||                    |j	        d                               at          j        | j        j        g|R  }nt          j        | j        j        g|R  }d}	|}
|r| |                    |          f}	|r|st          |          }
 | j        |	                     |                     t"                              |                                                  |
          S )r  r{  r  r:   )r@   rZ   rb   r   r  r   r   rj   rE  r+   rc   r  r  r  r  r  r   r  r  r  )r7  r   rz  r  r  r  r{  r  rR   r  r  s              r.   r  zFTS5Model.search_bm25  si     
	7v;;DD&& 	7K0 J Je[11 J%/ J&&E7;;uz3+G+GHHJ J J739+:k:::DD739+6g666D	 	7djj556I 	(/ 	(;''H$syy!6!6t!<!<==>>(##	%r/   c           	      l   | j         j        }|g}|g}|                                D ]<\  }}|                    t	          |                     |                    |           =t          t          d          | j         j        t          |          t          d          t          |          f          S )NzINSERT INTOVALUES)r   r  itemsrj   r   r
   r@   r   )r7  rU  extra_paramsrV  columnsr  keyrh   s           r.   _fts_cmd_sqlzFTS5Model._fts_cmd_sql  s    i%&,,.. 	! 	!JCNN6#;;'''MM%    IW%%MMV$$& ' ' 	'r/   c                 \     | j         |fi |}| j        j                            |          S rG   )r  r   rR  r  )r7  rU  r  r  s       r.   rX  zFTS5Model._fts_cmd  s5      5555y!))%000r/   c                 l    d|cxk    rdk    sn t          d          |                     d|          S )Nr   r  zlevel must be between 0 and 16rp  r{  )r%   rX  )r7  levels     r.   rp  zFTS5Model.automerge  sF    U    b    =>>>||Ke|444r/   c                 0    |                      d|          S )Nrk  r  r\  )r7  npagess     r.   rk  zFTS5Model.merge  s    ||G&|111r/   c                 ,    |                      d          S rZ  r\  r]  s    r.   r[  zFTS5Model.optimize  r^  r/   c                 ,    |                      d          S r`  r\  r]  s    r.   ra  zFTS5Model.rebuild  rb  r/   c                 0    |                      d|          S )Npgszr  r\  )r7  r  s     r.   set_pgszzFTS5Model.set_pgsz  s    ||F|...r/   c                 0    |                      d|          S )Nr{  r  r\  )r7  rank_expressions     r.   set_rankzFTS5Model.set_rank!  s    ||F|999r/   c                 ,    |                      d          S )Nz
delete-allr\  r]  s    r.   
delete_allzFTS5Model.delete_all%  s    ||L)))r/   r   c                 0    |                      d|          S )Nrd  r  r\  )r7  r{  s     r.   re  zFTS5Model.integrity_check)  s    ||-D|999r/   rowc           	          dvrt          d          dz  }t           |          s G  fdd          }t          t                    t	                      t	                      t                      |d}dk    rt          t                    |d<   ndk    rt          t                    |d	<   d
 j        z  }t           |t          |t          f|                     t           |          S )N)r  colinstancez5table_type must be either "row", "col" or "instance".z_vocab_model_%sc                       e Zd Z j        j        Zp j        j        dz   Ze                     j        j         e	                    Z
dS )"FTS5Model.VocabModel.<locals>.Meta_vN)r0   r1   r2   r   rR  rG  rc   	fts5vocabr  r@   r   )r7  table
table_types   r.   r5  r  6  sV        9-"Aci&:T&A
#%<<I$C
OO$% $%   r/   r5  )r   doccntr"   r5  r  r  offsetz%sVocab)r%   r   r   	TextFieldIntegerFieldr!   r0   setattrr&   r-  getattr)r7  r  r  attrr5  attrs
class_names   ```    r.   
VocabModelzFTS5Model.VocabModel-  s,   777 + , , , !:-sD!! 	I% % % % % % % % % % % % %Y//#~~#~~# E U""+I66ez))".|"<"<h"S\1JCtJGGHHHsD!!!r/   r  )r   )r  N)r0   r1   r2   r  r!   r"   r5  r  r8  r  r  staticmethodr  r  r  r   r{  r  r  r  r  rX  rp  rk  r[  ra  r  r  r  re  r  r:   r/   r.   r  r  4  s       4 4n JLLE" " " " " " " "5FD	 O E E [E   [*   \ #&3r77    \. - - [- 8 8 [8 3 3 [3 FM!&   [ 8=;@% % % [%6 ' ' [' 1 1 [1 5 5 [5
 2 2 [2 ( ( [( ' ' [' / / [/ : : [: * * [* : : : [: " " " [" " "r/   r  c                      + j         j        D ]}|j         u r| nt          d           j         j         G  fddt
                    } G fdd          }d j        z  }t          ||fd|i          S )z3Model factory for the transitive closure extension.Nz,Unable to find self-referential foreign key.c                      e Zd Z ee          Z ee          Z ee          Z ee          Z	 ee          Z
 ee          Z G d d          Zedfd	            Zedfd	            Zed	 fd	            ZdS )
&ClosureTable.<locals>.BaseClosureTablec                       e Zd ZdZdS )+ClosureTable.<locals>.BaseClosureTable.Metatransitive_closureNr  r:   r/   r.   r5  r  i  s        3r/   r5  NFc                 ~                        | j                            d                                        | | j        k                                  | j        |k                                              }||                    | j        |k              }n |s|                    | j        dk              }|S Ndepthonr   )r  r  r  rW   idr  rootobjectsr7  noder  include_noder  model_class
source_keys        r.   descendantsz2ClosureTable.<locals>.BaseClosureTable.descendantsl  s     f[#)//'*B*BCCd3J#&$8d::eCH,--gii	 
  CI$677! 3CIM22Lr/   c                 ~                        | j                            d                                        | | j        k                                  | j        |k                                              }|r|                    | j        |k              }n |s|                    | j        dk              }|S r  )r  r  r  rW   r  r  r  r  r  s        r.   	ancestorsz0ClosureTable.<locals>.BaseClosureTable.ancestorsy  s     f[#)//'*B*BCCd3J#($:d<<eCFdN++gii	 
  3CI$677! 3CIM22Lr/   c                 
   u rK|j                             j                  }                                                    |k              }n                    	                              | | j        k                                  | j        |k    | j        dk    z            }                                                    
|z            	                                }|s|                    
|k              }|S )Nr     )
__data__rE  r+   r  r  rW   r  r  r  r  )r7  r  r  fk_valuer  siblingsforeign_keyr  referencing_classreferencing_keyr  s         r.   r#  z/ClosureTable.<locals>.BaseClosureTable.siblings  s     K//=,,[-=>>#**,,22;(3JKK .#VO44!T#;#(+BTDD"UCFdNsyA~#FGG  % &((%
h 677!')) 
   8J$$677Lr/   NFF)r0   r1   r2   r   r  r  r  r   idcolumnparentcolumnr  	tablenamer5  r8  r  r  r#  )r$  r  r%  r&  r  s   r.   BaseClosureTabler  a  s3       \**\,''<	**#|I..|L)) L++		4 	4 	4 	4 	4 	4 	4 	4 

	 
	 
	 
	 
	 
	 

	 

	 
	 
	 
	 
	 
	 

	 
	 	 	 	 	 	 	 	 	 
	 	 	r/   r,  c                   `    e Zd Zj        j        Zj        j        j         j        dZdZdS )ClosureTable.<locals>.Meta)r+  r)  r*  FN)	r0   r1   r2   r   rR  rG  r4   r  r3  )r$  r%  r&  s   r.   r5  r.    sB        $*3*0;'3'35 5 r/   r5  z	%sClosure)r   refs	rel_modelr%   r3  r-  r0   r&   )	r  r$  r%  r&  	field_objr,  r5  r+   r  s	   ````    @r.   ClosureTabler2  O  s$     '$*/ 	M 	MI"k11' 2 KLLL".J$; ; ; ; ; ; ; ; ; ; ;< ; ; ;z            --D')FD>:::r/   c                       e Zd Z G d d          Zed             Zedd            Zed             Zed             Z	ed             Z
ed	             Zed
             ZdS )LSMTablec                       e Zd ZdZdZdS )LSMTable.Metalsm1N)r0   r1   r2   r   filenamer:   r/   r.   r5  r6    s        !r/   r5  c                    | j         j        }|st          d          t          |          dk    r|d         dk    rd|z  }| j         j        st          d          | j         j        }t          |t                    rt          d          t          |t          t          t          f          st          d          d	|_
        t          |t                    rd
}nt          |t                    rd}nd}|d|j        z  |g| j         _        t          | j         j                  dk    r| j         j        d         | j         _        nd | j         _        |S )NzILSM1 extension requires that you specify a filename for the LSM database.   r   r  rD  z-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.TUINTBLOBrE   r   )r   r8  r%   lenr3  rZ   	AutoFieldr   	BlobFieldr  r#  r+   r!  r  _value_field)r7  r  r8  r  	data_types        r.   r  zLSMTable.clean_options  sl   9% 	- > ? ? ? 8}}!!hqkS&8&8!H,y$ 	NLMMMi#c9%% 	+ * + + +#	9lCDD 	. - . . .c<(( 	IIY'' 	III&.0A9%M	" sy&''1,,%(Y%<Q%?CI""%)CI"r/   lsm.soc                 D    | j         j                            |           d S rG   )r   rR  r  )r7  rS   s     r.   r  zLSMTable.load_extension  s!    	))$/////r/   c                     |j         '|j         |                     |j         |j                  S |j         | |j         k    S |j        | |j        k    S d S rG   )startstopbetween)r  r\   s     r.   slice_to_exprzLSMTable.slice_to_expr  sZ    9 SX%9;;sy#(333Y"#)##X!#(?" "!r/   c                 &   t          |t                    r6t                              ||          }||                     |          } | dfS t          |t
                    r|                     |          dfS |                     ||k              dfS NFT)rZ   slicer4  rH  r  r   )r  r  lookupexprs       r.   _apply_lookup_to_queryzLSMTable._apply_lookup_to_query  s    fe$$ 	4))#v66DD))%<
++ 	4;;v&&--;;sf}--t33r/   c                     |                      |                                                                 | j        j        |          \  }}|r*|                                }| j        j        |d         n|S |S Nr   )rN  r  namedtuplesr   r3  rE  r@  )r7  r  r  	is_singler  s        r.   	get_by_idzLSMTable.get_by_id  sr    55JJLL$$&&I! y
  	))++C Y3?3q66SHLr/   c                    | j         j        | j         j        |i}ntt          |t                    r0i }t	          | j         j        dd          |          D ]
\  }}|||<   n/t          |t                    r|}nt          ||           r|j        }||| j         j        <   | 	                    |          
                                 d S rP  )r   r@  rZ   rH  zipr  rb   __dict__r3  rv   r  )r7  r  rh   r   rR   fvals         r.   	set_by_idzLSMTable.set_by_id  s    9!-I*E2DDu%% 	"D"39#:122#>FF # #t"U#t$$ 	"DDs## 	">D&)SY"#D!!#####r/   c                     |                      |                                 | j        j        |          \  }}|                                S rG   )rN  deleter   r3  r  )r7  r  r  rR  s       r.   delete_by_idzLSMTable.delete_by_id  sB    55JJLLI! y }}r/   N)rB  )r0   r1   r2   r5  r8  r  r  r  rH  rN  rS  rX  r[  r:   r/   r.   r4  r4    s                ! ! [!F 0 0 0 [0 # # \# 	4 	4 \	4 
 
 [
 $ $ [$   [  r/   r4  MATCHc                 0    t          j        | |          d uS rG   )rer  )regexrh   s     r.   _sqlite_regexpr`    s    9UE""$..r/   c                   6     e Zd Z	 	 	 d fd	Z fdZd Z xZS )SqliteExtDatabaseNTFc                     t          t          |           j        |g|R i |	 d | _        |rt          st          d          t          o|du}
|r~|
rt          |            nl|                     t          d           |                     t          d           |                     t          d           |                     t          d           |r |
st          d          t          |            |r|                     t          dd	           |r |
st          d
          t          |            |r|                     t          d           |
| _        d S )NzRSqliteExtDatabase initialized with C extensions, but shared library was not found!Fr~  ry  r  r  z0C extension required to register hash functions.regexpr:  z(C extension required to use bloomfilter.json_contains)r'   rb  rO   _row_factoryCYTHON_SQLITE_EXTENSIONSr  r   register_functionr  r{  r%   r   r`  r   _json_contains_c_extensions)r)   rR  c_extensionsrank_functionshash_functionsregexp_functionbloomfilterre  r,   r   prefer_cr-   s              r.   rO   zSqliteExtDatabase.__init__  s    	0&&/J4JJJ6JJJ  	5 8 	5& (4 5 5 5 ,KU1J 	; ;'----&&tZ888&&tZ888&&t[999&&t\::: 	* /  ". / / /#D))) 	@"">8Q??? 	' M !KLLL &&& 	D"">?CCC%r/   c                     t          t          |                               |           | j        r| j        |_        d S d S rG   )r'   rb  _add_conn_hooksrf  row_factoryr)   connr-   s     r.   rr  z!SqliteExtDatabase._add_conn_hooks;  sH    &&66t<<< 	1#0D	1 	1r/   c                     || _         d S rG   )rf  r)   rc   s     r.   rs  zSqliteExtDatabase.row_factory@  s    r/   )NTFFFF)r0   r1   r2   rO   rr  rs  r5   r6   s   @r.   rb  rb    so        CG7<27!& !& !& !& !& !&F1 1 1 1 1
      r/   rb  r   r:        r   rg  r   
   c                 0      fd}t          |          S )zt
        Expose a sqlite3_status() call for a particular flag as a property of
        the Database object.
        c                 :    t                    }r|d         n|S rP  )r   )r)   resultflagreturn_highwaters     r.   getterz__status__.<locals>.gettera  s#    &t,,F 0<6!99f<r/   r   )r~  r  r  s   `` r.   
__status__r  \  s2    
	= 	= 	= 	= 	= 	= r/   c                 4      fd}t          |          S )z
        Expose a sqlite3_dbstatus() call for a particular flag as a property of
        the Database instance. Unlike sqlite3_status(), the dbstatus properties
        pertain to the current connection.
        c                     | j         j        t          d          t          | j         j                  }r|d         S r|d         n|S )Nzdatabase connection not opened.r   r   )_stateru  r  r   )r)   r}  r~  return_currentr  s     r.   r  z__dbstatus__.<locals>.getterl  sV    {'*+LMMM)$+*:DAAF !ay  0<6!99f<r/   r  )r~  r  r  r  s   ``` r.   __dbstatus__r  f  s8    	= 	= 	= 	= 	= 	= 	= r/   c                   d    e Zd Z fdZd fd	Z fdZ fdZd Zd Zd Z	d	 Z
ed
             Zed             ZddZ	 	 ddZddZ ee          Z eed          Z ee          Z ee          Z ee          Z eed          Z ee          Z ee           Z! ee"d          Z# e$e%          Z& e$e'd          Z( e$e)d          Z* e$e+d          Z, e$e-dd          Z. e$e/dd          Z0 e$e1dd          Z2 e$e3dd          Z4 e$e5dd          Z6 e$e7dd          Z8 xZ9S )CSqliteExtDatabasec                     d | _         d x| _        x| _        | _        d| _         t          t          |           j        |i | d S r'  )_conn_helper_commit_hook_rollback_hook_update_hook_replace_busy_handlerr'   r  rO   )r)   r,   r   r-   s      r.   rO   zCSqliteExtDatabase.__init__v  sT     $DJNNDN 3d6G).D&4E$d++4dEfEEEEEr/   Fc                 X     t          t          |           j        |fi | || _        d S rG   )r'   r  initr  )r)   rR  replace_busy_handlerr   r-   s       r.   r  zCSqliteExtDatabase.init|  s7    0E$d++0DDVDDD)=D&&&r/   c                    | j         r| j                            d            | j        r| j                            d            | j        r| j                            d            t          t          |           	                    |          S rG   )
r  r  set_commit_hookr  set_rollback_hookr  set_update_hookr'   r  _closert  s     r.   r  zCSqliteExtDatabase._close  s      8!11$777" :!33D999  8!11$777+T2299$???r/   c                    t          t          |                               |           t          |          | _        | j        | j                            | j                   | j        | j                            | j                   | j	        | j        
                    | j	                   | j        r(| j        pd}| j                            |dz             d S d S )Nrx  i  )r'   r  rr  r   r  r  r  r  r  r  r  r  _timeoutset_busy_handler)r)   ru  timeoutr-   s      r.   rr  z"CSqliteExtDatabase._add_conn_hooks  s    $d++;;DAAA 0 6 6D ,!11$2CDDD".!33D4GHHH ,!11$2CDDD) C-,1!227T>BBBBBC Cr/   c                 p    || _         |                                 s| j                            |           |S rG   )r  	is_closedr  r  rw  s     r.   	on_commitzCSqliteExtDatabase.on_commit  8     "D>>## 6!11"555Ir/   c                 p    || _         |                                 s| j                            |           |S rG   )r  r  r  r  rw  s     r.   on_rollbackzCSqliteExtDatabase.on_rollback  s8    "$D>>## 8!33B777Ir/   c                 p    || _         |                                 s| j                            |           |S rG   )r  r  r  r  rw  s     r.   	on_updatezCSqliteExtDatabase.on_update  r  r/   c                 4    | j                                         S rG   )r  changesrH   s    r.   r  zCSqliteExtDatabase.changes  s    $,,...r/   c                 4    | j                                         S rG   )r  last_insert_rowidrH   s    r.   r  z$CSqliteExtDatabase.last_insert_rowid  s    $66888r/   c                 4    | j                                         S rG   )r  
autocommitrH   s    r.   r  zCSqliteExtDatabase.autocommit  s    $//111r/   Nc                 r    t          |                                 |                                |||          S N)pagesr+   progress)r   
connection)r)   destinationr  r+   r  s        r.   r   zCSqliteExtDatabase.backup  s>    $//++[-C-C-E-E %D8E E E Er/   c                 N    t          |                                 ||||          S r  )r   r  )r)   r8  r  r+   r  s        r.   r   z!CSqliteExtDatabase.backup_to_file  s2    !$//"3"3XU'+h@ @ @ @r/   c                 (    t          | ||||          S rG   )r   )r)   r  columnr"   	read_onlys        r.   	blob_openzCSqliteExtDatabase.blob_open  s    eVUI>>>r/   Tr(  NNN):r0   r1   r2   rO   r  r  rr  r  r  r  r  r   r  r  r   r   r  r  SQLITE_STATUS_MEMORY_USEDmemory_usedSQLITE_STATUS_MALLOC_SIZEmalloc_sizeSQLITE_STATUS_MALLOC_COUNTmalloc_countSQLITE_STATUS_PAGECACHE_USEDpagecache_used SQLITE_STATUS_PAGECACHE_OVERFLOWpagecache_overflowSQLITE_STATUS_PAGECACHE_SIZEpagecache_sizeSQLITE_STATUS_SCRATCH_USEDscratch_usedSQLITE_STATUS_SCRATCH_OVERFLOWscratch_overflowSQLITE_STATUS_SCRATCH_SIZEscratch_sizer  SQLITE_DBSTATUS_LOOKASIDE_USEDlookaside_usedSQLITE_DBSTATUS_LOOKASIDE_HITlookaside_hit#SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZElookaside_miss#SQLITE_DBSTATUS_LOOKASIDE_MISS_FULLlookaside_miss_fullSQLITE_DBSTATUS_CACHE_USED
cache_usedSQLITE_DBSTATUS_SCHEMA_USEDschema_usedSQLITE_DBSTATUS_STMT_USEDstatement_usedSQLITE_DBSTATUS_CACHE_HIT	cache_hitSQLITE_DBSTATUS_CACHE_MISS
cache_missSQLITE_DBSTATUS_CACHE_WRITEcache_writer5   r6   s   @r.   r  r  u  s       	F 	F 	F 	F 	F	> 	> 	> 	> 	> 	>	@ 	@ 	@ 	@ 	@	C 	C 	C 	C 	C	 	 		 	 		 	 		/ 	/ 	/ 
	9 	9 
	9 
	2 	2 
	2	E 	E 	E 	E =A$(	@ 	@ 	@ 	@
	? 	? 	? 	? !j!:;; j!:DAA!z"<==#$@AA'Z(HII#$@$GG!z"<==%:&DEE!z"<dCC &&DEE$%BDII%&I&*, ,*l+N+/1 1!\"<eTJJ
 #l#>tLL%&?MM L!:E4HH	!\"<eTJJ
"l#>tLLr/   r  c                 8    t          | t          j        |          S rG   )r   r   r\  )lhsr   s     r.   r   r     s    c28S)))r/   c                 \     t                     } fdt          d|d          D             S )Nc           	      \    g | ](}t          j        d ||dz                      d         )S )z@Ir   r   )structr   )r   rB  bufs     r.   r   z%_parse_match_info.<locals>.<listcomp>  s6    MMM1FM$AacE
++A.MMMr/   r   r   )r=  range)r  bufsizes   ` r.   _parse_match_infor    s4    #hhGMMMMa!8L8LMMMMr/   c                 V    |sdg| z  S dg| z  }t          |          D ]
\  }}|||<   |S )Nr   r   )	enumerate)ncolraw_weightsrz  rB  weights        r.   get_weightsr    sL      sTz#*";// 	  	 IAvGAJJNr/   c                 J   t          |           }d}|d d         \  }}t          ||          }t          |          D ]c}d||z  dz  z   }t          |          D ]F}	||	         }
|
s||	dz  z   }||         }||dz            }|dk    r||
t          |          |z  z  z  }Gd| S )N        r:  r   r   r   )r  r  r  float)raw_match_infor  r  r  r   r  rz  
phrase_numphrase_info_idxcol_numr  col_idxrow_hitsall_rows_hitss                 r.   r{  r{    s     #>22JEbqb>DAq![))G Ahh D D
zA~12Qxx 	D 	DGW%F %15G "'*H&w{3M!||5??]#BCC	D  6Mr/   c                    t          |           }d}d}d}t          d          \  }}}}	||         }
||         }||         }|	|z   }||z   }t          ||          }t          |
          D ]}t          |          D ]}||         }|dk    r|d|||z  z   z  z   }t          ||                   }t          ||dz                      }t	          j        ||z
  dz   |dz   z            }|dk    rd	}t          |||z                      }t          ||	|z                      pd
}||z  }||d
z   z  }d
|z
  ||z  z   }|||z  z   }|||z  z  }|||z  z  }׌| 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      ?r  r   r   r   r:  g      ?gư>r  )r  r  r  r  mathlog)r  r,   r  KBr  P_OC_ON_OA_O
term_count	col_count
total_docsL_OX_Orz  rB  jr  xterm_frequencydocs_with_termidf
doc_length
avg_lengthrationumb_partdenompc_scores                                 r.   r  r    s    #>22JAAEqCc3CJ3ICJ
	/C
	/C: )T**G: ) )y!! 	) 	)AQZF{{qAI-./A":a=11N":a!e#455N (.036#c)+, ,C czzz#'233Jz#'2339rJ+E AG,C1WE	*F"a&j1EcEk*Hh'(EE3	)6 6Mr/   c                    g }	 |                     t          j        |          t          j        |           f           n#  Y dS xY w|rB|                                \  }}t	          |t
                    rnt	          |t
                    r0|D ],}||vr dS |                     ||         ||         f           -nt	          |t                    r|D ]	}||vr dS 
n||vrdS nt	          |t                    rt	          |t
                    rdS t	          |t                    rU	 t          t          |                    D ]%}|                     ||         ||         f           &n # t          $ r Y dS w xY w||vrdS n||k    rdS |BdS rJ  )
rj   rd   r   poprZ   rb   ra   r  r=  
IndexError)src_jsonobj_jsonstackobjsrcr  r]   rB  s           r.   ri  ri  b  s   Edj**DJx,@,@ABBBBuu
 99;;Sc4   	#t$$ 
 7 7C#~~$uuLL#c(CH!566667 C&&  % %D3$uu '% Cu  T"" 	#t$$ 	uC&& !"3s88__ 7 7c!fc!f%566667! ! ! ! 55!Cu  CZZ55  6 4s   ;A   A'AE* *
E87E8r  r(  )FF)hrd   r  r^  r  syspeeweer   r   r   r   r   r	   r
   r   r   r   r   playhouse._sqlite_extr   r   r   r   r   r   r   r   r   r   r   rg  ImportErrorversion_inforA  rF  rx  r}  r  rO  r  r>  r!   r8   r<   DecimalFieldrD   rL   r   r   r   r   r   r   SchemaManagerr  Modelr-  r:  rL  	_alphabetrs   upperr  r  r  r  compiler  r  r2  r4  r\  r`  SqliteDatabaserb  r  r  r  r  r  r  SQLITE_STATUS_PARSER_STACKr  r  r  r  r  r  r  r  r  r  r  r  r  SQLITE_DBSTATUS_DEFERRED_FKSr  r  r  r   r  r  r{  r  ri  r:   r/   r.   <module>r%     s     				  



           # # # # # #                                                      %                           $ % % %$% A!J 
22A26)CC!!KKK# 9 9 9 9 9 9 9 91 1 1 1 1 1 1 1; ; ; ; ; ; ; ;" " " " "L " " "
87 87 87 87 87z 87 87 87t7 7 7 7 7 7 7 7>]" ]" ]" ]" ]"	 ]" ]" ]"@- - - - - - - -.3 3 3 3 3% 3 3 3>1 1 1 1 1 1 1 1h
 
 
 
 
5 
 
 
    <   8L L L L L| L L L^ )	S*++S^^S""##$ S##b''__	 KKUU3ZZKKKKKBJ566	X" X" X" X" X" X" X" X"v CG!%X; X; X; X;vd d d d d| d d dN / / /* * * * * * * *Z  TM !#$ '($!"%&" !!"#$ !"!"%&"!""# !$%!*+'*+' !!""##%               cM cM cM cM cM. cM cM cML* * *N N N
  ! ! !HN N Nb# # # # #s   A9 9BB