]> git.openstreetmap.org Git - nominatim.git/blob - test/python/mock_legacy_word_table.py
Merge remote-tracking branch 'upstream/master'
[nominatim.git] / test / python / mock_legacy_word_table.py
1 """
2 Legacy word table for testing with functions to prefil and test contents
3 of the table.
4 """
5
6 class MockLegacyWordTable:
7     """ A word table for testing using legacy word table structure.
8     """
9     def __init__(self, conn):
10         self.conn = conn
11         with conn.cursor() as cur:
12             cur.execute("""CREATE TABLE word (word_id INTEGER,
13                                               word_token text,
14                                               word text,
15                                               class text,
16                                               type text,
17                                               country_code varchar(2),
18                                               search_name_count INTEGER,
19                                               operator TEXT)""")
20
21         conn.commit()
22
23     def add_special(self, word_token, word, cls, typ, oper):
24         with self.conn.cursor() as cur:
25             cur.execute("""INSERT INTO word (word_token, word, class, type, operator)
26                               VALUES (%s, %s, %s, %s, %s)
27                         """, (word_token, word, cls, typ, oper))
28         self.conn.commit()
29
30
31     def add_country(self, country_code, word_token):
32         with self.conn.cursor() as cur:
33             cur.execute("INSERT INTO word (word_token, country_code) VALUES(%s, %s)",
34                         (word_token, country_code))
35         self.conn.commit()
36
37
38     def add_postcode(self, word_token, postcode):
39         with self.conn.cursor() as cur:
40             cur.execute("""INSERT INTO word (word_token, word, class, type)
41                               VALUES (%s, %s, 'place', 'postcode')
42                         """, (word_token, postcode))
43         self.conn.commit()
44
45
46     def count(self):
47         with self.conn.cursor() as cur:
48             return cur.scalar("SELECT count(*) FROM word")
49
50
51     def count_special(self):
52         with self.conn.cursor() as cur:
53             return cur.scalar("SELECT count(*) FROM word WHERE class != 'place'")
54
55
56     def get_special(self):
57         with self.conn.cursor() as cur:
58             cur.execute("""SELECT word_token, word, class, type, operator
59                            FROM word WHERE class != 'place'""")
60             result = set((tuple(row) for row in cur))
61             assert len(result) == cur.rowcount, "Word table has duplicates."
62             return result
63
64
65     def get_country(self):
66         with self.conn.cursor() as cur:
67             cur.execute("""SELECT country_code, word_token
68                            FROM word WHERE country_code is not null""")
69             result = set((tuple(row) for row in cur))
70             assert len(result) == cur.rowcount, "Word table has duplicates."
71             return result
72
73
74     def get_postcodes(self):
75         with self.conn.cursor() as cur:
76             cur.execute("""SELECT word FROM word
77                            WHERE class = 'place' and type = 'postcode'""")
78             return set((row[0] for row in cur))
79
80     def get_partial_words(self):
81         with self.conn.cursor() as cur:
82             cur.execute("""SELECT word_token, search_name_count FROM word
83                            WHERE class is null and country_code is null
84                                  and not word_token like ' %'""")
85             return set((tuple(row) for row in cur))
86