X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/83d2c440d51d3e1e29b51397b5a6c82856e285af..fdd20a76bdba7b1115361e337aff661ed830b11f:/nominatim/tools/migration.py diff --git a/nominatim/tools/migration.py b/nominatim/tools/migration.py index c24b09cb..76726e8c 100644 --- a/nominatim/tools/migration.py +++ b/nominatim/tools/migration.py @@ -231,11 +231,14 @@ def create_interpolation_index_on_place(conn, **_): @_migration(4, 0, 99, 2) def add_step_column_for_interpolation(conn, **_): - """ Add a new column 'step' to the interpolations table which will. + """ Add a new column 'step' to the interpolations table. Also convers the data into the stricter format which requires that startnumbers comply with the odd/even requirements. """ + if conn.table_has_column('location_property_osmline', 'step'): + return + with conn.cursor() as cur: # Mark invalid all interpolations with no intermediate numbers. cur.execute("""UPDATE location_property_osmline SET startnumber = null @@ -259,3 +262,48 @@ def add_step_column_for_interpolation(conn, **_): SET step = CASE WHEN interpolationtype = 'all' THEN 1 ELSE 2 END """) + + +@_migration(4, 0, 99, 3) +def add_step_column_for_tiger(conn, **_): + """ Add a new column 'step' to the tiger data table. + """ + if conn.table_has_column('location_property_tiger', 'step'): + return + + with conn.cursor() as cur: + cur.execute("ALTER TABLE location_property_tiger ADD COLUMN step SMALLINT") + cur.execute("""UPDATE location_property_tiger + SET step = CASE WHEN interpolationtype = 'all' + THEN 1 ELSE 2 END + """) + + +@_migration(4, 0, 99, 4) +def add_derived_name_column_for_country_names(conn, **_): + """ Add a new column 'derived_name' which in the future takes the + country names as imported from OSM data. + """ + if not conn.table_has_column('country_name', 'derived_name'): + with conn.cursor() as cur: + cur.execute("ALTER TABLE country_name ADD COLUMN derived_name public.HSTORE") + + +@_migration(4, 0, 99, 5) +def mark_internal_country_names(conn, config, **_): + """ Names from the country table should be marked as internal to prevent + them from being deleted. Only necessary for ICU tokenizer. + """ + import psycopg2.extras # pylint: disable=import-outside-toplevel + + tokenizer = tokenizer_factory.get_tokenizer_for_db(config) + with tokenizer.name_analyzer() as analyzer: + with conn.cursor() as cur: + psycopg2.extras.register_hstore(cur) + cur.execute("SELECT country_code, name FROM country_name") + + for country_code, names in cur: + if not names: + names = {} + names['countrycode'] = country_code + analyzer.add_country_names(country_code, names)