0001-sql-unify-full-text-search-normalization-46015.patch
tests/test_sql.py | ||
---|---|---|
975 | 975 |
assert data_class.count() == 50 |
976 | 976 |
assert len(data_class.select()) == 50 |
977 | 977 | |
978 |
assert set(data_class.get_ids_from_query('BAR')) == set(range(21, 51)) |
|
978 | 979 |
assert [x.id for x in data_class.select([st.FtsMatch('BAR')], order_by='id')] == list(range(21, 51)) |
979 | 980 | |
980 | 981 |
# check fts against data in history |
... | ... | |
1012 | 1013 |
assert data_class.count([st.FtsMatch(user.name)]) == 1 |
1013 | 1014 |
assert data_class.count([st.FtsMatch('Frederic')]) == 1 |
1014 | 1015 | |
1016 |
# check looking up a display id |
|
1017 |
assert len(data_class.get_ids_from_query(formdata1.id_display)) == 1 |
|
1018 |
assert len(data_class.select([st.FtsMatch(formdata1.id_display)])) == 1 |
|
1019 |
assert data_class.select([st.FtsMatch(formdata1.id_display)])[0].id_display == formdata1.id_display |
|
1020 | ||
1015 | 1021 | |
1016 | 1022 |
def table_exists(cur, table_name): |
1017 | 1023 |
cur.execute('''SELECT COUNT(*) FROM information_schema.tables |
wcs/sql.py | ||
---|---|---|
238 | 238 | |
239 | 239 |
class FtsMatch(Criteria): |
240 | 240 |
def __init__(self, value): |
241 |
self.value = qommon.misc.simplify(value, space=' ') |
|
241 |
self.value = self.get_fts_value(value) |
|
242 | ||
243 |
@classmethod |
|
244 |
def get_fts_value(self, value): |
|
245 |
return unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii') |
|
242 | 246 | |
243 | 247 |
def as_sql(self): |
244 | 248 |
return 'fts @@ plainto_tsquery(%%(c%s)s)' % id(self.value) |
... | ... | |
1100 | 1104 |
conn.commit() |
1101 | 1105 |
cur.close() |
1102 | 1106 | |
1103 | ||
1104 | 1107 |
@classmethod |
1105 | 1108 |
@guard_postgres |
1106 | 1109 |
def get_ids_from_query(cls, query): |
... | ... | |
1108 | 1111 | |
1109 | 1112 |
sql_statement = '''SELECT id FROM %s |
1110 | 1113 |
WHERE fts @@ plainto_tsquery(%%(value)s)''' % cls._table_name |
1111 |
cur.execute(sql_statement, {'value': qommon.misc.simplify(query, ' ')})
|
|
1114 |
cur.execute(sql_statement, {'value': FtsMatch.get_fts_value(query)})
|
|
1112 | 1115 |
all_ids = [x[0] for x in cur.fetchall()] |
1113 | 1116 |
cur.close() |
1114 | 1117 |
return all_ids |
... | ... | |
1694 | 1697 |
WHERE id = %%(id)s''' % self._table_name |
1695 | 1698 |
cur.execute(sql_statement, { |
1696 | 1699 |
'id': self.id, |
1697 |
'fts': unicodedata.normalize('NFKD', ' '.join(fts_strings)).encode('ascii', 'ignore').decode('ascii'),
|
|
1700 |
'fts': FtsMatch.get_fts_value(' '.join(fts_strings)),
|
|
1698 | 1701 |
}) |
1699 | 1702 | |
1700 | 1703 |
conn.commit() |
1701 |
- |