Connection supports execute query plan and using application defined function for index on expressions
parent
a7d54f6aa2
commit
71bbad9815
@ -0,0 +1,53 @@ |
||||
import pytest |
||||
import base64 |
||||
import src._sqlite3 as _sqlite3 |
||||
|
||||
|
||||
class ConnWrap: |
||||
def __init__(self, conn_obj): |
||||
self.conn_obj = conn_obj |
||||
|
||||
def __enter__(self): |
||||
return self |
||||
|
||||
def __exit__(self, exc_type, exc_val, exc_tb): |
||||
if exc_type is None and exc_val is None and exc_tb is None: |
||||
self.conn_obj.commit() |
||||
else: |
||||
self.conn_obj.rollback() |
||||
self.conn_obj.close() |
||||
|
||||
|
||||
def SetB64EncodeFunc(conn_obj): |
||||
def __helper(bytes_obj): |
||||
if isinstance(bytes_obj, unicode): |
||||
temp = bytes_obj.encode('UTF-8') |
||||
else: |
||||
temp = bytes_obj if bytes_obj is not None else '' |
||||
return base64.b64encode(temp) |
||||
conn_obj.create_det_function('b64encode', 1, __helper) |
||||
|
||||
|
||||
@pytest.mark.skipif(False, reason='') |
||||
class TestSqlite(object): |
||||
@pytest.mark.skipif(False, reason='') |
||||
def test_det_function(self): |
||||
with ConnWrap(_sqlite3.connect("./bk1.db")) as conn: |
||||
conn.conn_obj.execute("drop table if exists test_det_func") |
||||
|
||||
conn.conn_obj.execute("create table if not exists test_det_func(id text, val integer)") |
||||
SetB64EncodeFunc(conn.conn_obj) |
||||
conn.conn_obj.execute("create index test_det_func_idx1 on test_det_func(b64encode(id))") |
||||
|
||||
with ConnWrap(_sqlite3.connect("./bk1.db")) as conn: |
||||
SetB64EncodeFunc(conn.conn_obj) |
||||
for i in xrange(1000): |
||||
conn.conn_obj.execute("insert into test_det_func(id,val) values (?,?)", (unicode(i), i+1)) |
||||
|
||||
with ConnWrap(_sqlite3.connect("./bk1.db")) as conn: |
||||
SetB64EncodeFunc(conn.conn_obj) |
||||
res = conn.conn_obj.execute_query_plan("select * from test_det_func where b64encode(id)=?", ('1',)) |
||||
rows = [row for row in res if row[3].find(u'USING INDEX') > 0 and row[3].find(u'<expr>') > 0] |
||||
assert len(rows) == 1 |
||||
|
||||
|
||||
Loading…
Reference in new issue