Skip to content

Commit

Permalink
Add query_by_tags which returns complete tag records.
Browse files Browse the repository at this point in the history
  • Loading branch information
yangacer committed Jan 23, 2016
1 parent 99961a0 commit f9da324
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 2 deletions.
20 changes: 18 additions & 2 deletions simpletag.py
Expand Up @@ -2,7 +2,7 @@
import sqlite3

__author__ = 'Acer.Yang <yangacer@gmail.com>'
__version__ = '0.1.4'
__version__ = '0.1.5'


def get_token(text):
Expand Down Expand Up @@ -82,6 +82,15 @@ def query_ids(self, query_str):
for row in csr.execute(sql, (query_str,)):
yield row[0]

def query_by_tags(self, query_str, tokenize=True):
sql = self.__sql__['SQL_QUERY_BY_TAGS']
csr = self.conn.cursor()
for row in csr.execute(sql, (query_str, )):
if tokenize is True:
yield row[0], [tok for tok in get_token(row[1])]
else:
yield row[0], row[1]

def query_tags(self, docid):
sql = self.__sql__['SQL_QUERY_TAGS']
csr = self.conn.cursor()
Expand Down Expand Up @@ -154,10 +163,14 @@ def __init__(self, name):
SELECT rowid FROM {0}_text_id WHERE textid=?);
''',
SQL_QUERY_IDS='''
SELECT * FROM {0}_text_id as lhs
SELECT * FROM {0}_text_id AS lhs
JOIN (SELECT docid FROM {0} WHERE tags MATCH ?) AS rhs
ON (lhs.rowid=rhs.docid);
''',
SQL_QUERY_BY_TAGS='''
SELECT * FROM {0}_text_id, {0} WHERE {0}.tags MATCH ? AND
{0}_text_id.rowid = {0}.docid;
''',
SQL_QUERY_TAGS='''
SELECT tags FROM {0} WHERE docid=(
SELECT rowid FROM {0}_text_id WHERE textid=?);
Expand Down Expand Up @@ -238,6 +251,9 @@ def __init__(self, name, conn=None):
SQL_PURGE_TBL='DELETE FROM {0};',
SQL_DEL='DELETE FROM {} WHERE docid=?;',
SQL_QUERY_IDS='SELECT docid FROM {0} WHERE tags MATCH ?;',
SQL_QUERY_BY_TAGS='''
SELECT docid, tags FROM {0} WHERE tags MATCH ?;
''',
SQL_QUERY_TAGS='SELECT tags FROM {} WHERE docid=?;',
SQL_STATS='''
SELECT term, documents, occurrences FROM {}_terms WHERE col=0;
Expand Down
32 changes: 32 additions & 0 deletions tests.py
Expand Up @@ -117,6 +117,38 @@ def test_update_then_query_tags(self):
self.assertEqual([u'中文', u'行不行'], [i for i in self.ns.query_tags(789)])
pass

def test_update_then_query_by_tags_tokenize(self):
self.ns.update(123, 'simpletag is awsome!')
self.ns.update(456, 'test is a MUST!')
self.assertEqual([(123, ['simpletag', 'is', 'awsome']),
(456, ['test', 'is', 'a', 'MUST']), ],
[i for i in self.ns.query_by_tags('is')])
pass

def test_update_then_query_by_tags_tokenize_str(self):
self.ns_str.update('/a/b', 'simpletag is awsome!')
self.ns_str.update('/b/a', 'test is a MUST!')
self.assertEqual([('/a/b', ['simpletag', 'is', 'awsome']),
('/b/a', ['test', 'is', 'a', 'MUST']), ],
[i for i in self.ns_str.query_by_tags('is')])
pass

def test_update_then_query_by_tags_none_tokenize(self):
self.ns.update(123, 'simpletag is awsome!')
self.ns.update(456, 'test is a MUST!')
self.assertEqual([(123, 'simpletag is awsome!'),
(456, 'test is a MUST!'), ],
[i for i in self.ns.query_by_tags('is', False)])
pass

def test_update_then_query_by_tags_none_tokenize_str(self):
self.ns_str.update('/a/b', 'simpletag is awsome!')
self.ns_str.update('/b/a', 'test is a MUST!')
self.assertEqual([('/a/b', 'simpletag is awsome!'),
('/b/a', 'test is a MUST!'), ],
[i for i in self.ns_str.query_by_tags('is', False)])
pass

def test_stats(self):
self.ns.update(123, 'simpletag is awsome!')
self.ns.update(456, 'test is a MUST!')
Expand Down

0 comments on commit f9da324

Please sign in to comment.