X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/041794615320f836ed58511437d29ba0b1379777..81eed0680cd2a8b5c53217ab2996a43ab17f5056:/nominatim/db/sqlalchemy_schema.py diff --git a/nominatim/db/sqlalchemy_schema.py b/nominatim/db/sqlalchemy_schema.py index 7dd1e0ce..0ec22b7e 100644 --- a/nominatim/db/sqlalchemy_schema.py +++ b/nominatim/db/sqlalchemy_schema.py @@ -7,37 +7,10 @@ """ SQLAlchemy definitions for all tables used by the frontend. """ -from typing import Any - import sqlalchemy as sa -from sqlalchemy.dialects.postgresql import HSTORE, ARRAY, JSONB, array -from sqlalchemy.dialects.sqlite import JSON as sqlite_json import nominatim.db.sqlalchemy_functions #pylint: disable=unused-import -from nominatim.db.sqlalchemy_types import Geometry - -class PostgresTypes: - """ Type definitions for complex types as used in Postgres variants. - """ - Composite = HSTORE - Json = JSONB - IntArray = ARRAY(sa.Integer()) #pylint: disable=invalid-name - to_array = array - - -class SqliteTypes: - """ Type definitions for complex types as used in Postgres variants. - """ - Composite = sqlite_json - Json = sqlite_json - IntArray = sqlite_json - - @staticmethod - def to_array(arr: Any) -> Any: - """ Sqlite has no special conversion for arrays. - """ - return arr - +from nominatim.db.sqlalchemy_types import Geometry, KeyValueStore, IntArray #pylint: disable=too-many-instance-attributes class SearchTables: @@ -47,14 +20,7 @@ class SearchTables: Any data used for updates only will not be visible. """ - def __init__(self, meta: sa.MetaData, engine_name: str) -> None: - if engine_name == 'postgresql': - self.types: Any = PostgresTypes - elif engine_name == 'sqlite': - self.types = SqliteTypes - else: - raise ValueError("Only 'postgresql' and 'sqlite' engines are supported.") - + def __init__(self, meta: sa.MetaData) -> None: self.meta = meta self.import_status = sa.Table('import_status', meta, @@ -80,9 +46,9 @@ class SearchTables: sa.Column('class', sa.Text, nullable=False, key='class_'), sa.Column('type', sa.Text, nullable=False), sa.Column('admin_level', sa.SmallInteger), - sa.Column('name', self.types.Composite), - sa.Column('address', self.types.Composite), - sa.Column('extratags', self.types.Composite), + sa.Column('name', KeyValueStore), + sa.Column('address', KeyValueStore), + sa.Column('extratags', KeyValueStore), sa.Column('geometry', Geometry, nullable=False), sa.Column('wikipedia', sa.Text), sa.Column('country_code', sa.String(2)), @@ -118,14 +84,14 @@ class SearchTables: sa.Column('step', sa.SmallInteger), sa.Column('indexed_status', sa.SmallInteger), sa.Column('linegeo', Geometry), - sa.Column('address', self.types.Composite), + sa.Column('address', KeyValueStore), sa.Column('postcode', sa.Text), sa.Column('country_code', sa.String(2))) self.country_name = sa.Table('country_name', meta, sa.Column('country_code', sa.String(2)), - sa.Column('name', self.types.Composite), - sa.Column('derived_name', self.types.Composite), + sa.Column('name', KeyValueStore), + sa.Column('derived_name', KeyValueStore), sa.Column('partition', sa.Integer)) self.country_grid = sa.Table('country_osm_grid', meta, @@ -139,8 +105,8 @@ class SearchTables: sa.Column('importance', sa.Float), sa.Column('search_rank', sa.SmallInteger), sa.Column('address_rank', sa.SmallInteger), - sa.Column('name_vector', self.types.IntArray), - sa.Column('nameaddress_vector', self.types.IntArray), + sa.Column('name_vector', IntArray), + sa.Column('nameaddress_vector', IntArray), sa.Column('country_code', sa.String(2)), sa.Column('centroid', Geometry))