2020-09-07 14:56:59 -07:00
import pytest
from sqlite_utils import Database
def test_tracer ( ) :
collected = [ ]
db = Database (
memory = True , tracer = lambda sql , params : collected . append ( ( sql , params ) )
)
db [ " dogs " ] . insert ( { " name " : " Cleopaws " } )
db [ " dogs " ] . enable_fts ( [ " name " ] )
db [ " dogs " ] . search ( " Cleopaws " )
assert collected == [
( " PRAGMA recursive_triggers=on; " , None ) ,
( " select name from sqlite_master where type = ' view ' " , None ) ,
( " select name from sqlite_master where type = ' table ' " , None ) ,
( " CREATE TABLE [dogs] ( \n [name] TEXT \n ); \n " , None ) ,
( " select name from sqlite_master where type = ' view ' " , None ) ,
( " INSERT INTO [dogs] ([name]) VALUES (?); " , [ " Cleopaws " ] ) ,
( " select name from sqlite_master where type = ' view ' " , None ) ,
(
2020-09-20 15:05:46 -07:00
" CREATE VIRTUAL TABLE [dogs_fts] USING FTS5 ( \n [name], \n content=[dogs] \n ) " ,
2020-09-07 14:56:59 -07:00
None ,
) ,
(
" INSERT INTO [dogs_fts] (rowid, [name]) \n SELECT rowid, [name] FROM [dogs]; " ,
None ,
) ,
( " select name from sqlite_master where type = ' view ' " , None ) ,
]
def test_with_tracer ( ) :
collected = [ ]
tracer = lambda sql , params : collected . append ( ( sql , params ) )
db = Database ( memory = True )
db [ " dogs " ] . insert ( { " name " : " Cleopaws " } )
db [ " dogs " ] . enable_fts ( [ " name " ] )
assert len ( collected ) == 0
with db . tracer ( tracer ) :
2020-11-06 10:23:16 -08:00
list ( db [ " dogs " ] . search ( " Cleopaws " ) )
2020-09-07 14:56:59 -07:00
2020-11-08 08:53:53 -08:00
assert len ( collected ) == 5
2020-09-07 14:56:59 -07:00
assert collected == [
( " select name from sqlite_master where type = ' view ' " , None ) ,
2020-11-06 10:23:16 -08:00
(
" SELECT name FROM sqlite_master \n WHERE rootpage = 0 \n AND ( \n sql LIKE ' % VIRTUAL TABLE % USING FTS %c ontent= %d ogs % ' \n OR ( \n tbl_name = \" dogs \" \n AND sql LIKE ' % VIRTUAL TABLE % USING FTS % ' \n ) \n ) " ,
None ,
) ,
( " select name from sqlite_master where type = ' view ' " , None ) ,
( " select sql from sqlite_master where name = ? " , ( " dogs_fts " , ) ) ,
2020-09-07 14:56:59 -07:00
(
2020-11-08 08:53:53 -08:00
" with original as ( \n select \n rowid, \n * \n from [dogs] \n ) \n select \n [original].* \n from \n [original] \n join [dogs_fts] on [original].rowid = [dogs_fts].rowid \n where \n [dogs_fts] match :query \n order by \n [dogs_fts].rank " ,
2020-11-06 10:23:16 -08:00
{ " query " : " Cleopaws " } ,
2020-09-07 14:56:59 -07:00
) ,
]
# Outside the with block collected should not be appended to
db [ " dogs " ] . insert ( { " name " : " Cleopaws " } )
2020-11-08 08:53:53 -08:00
assert len ( collected ) == 5