]> git.openstreetmap.org Git - nominatim.git/blob - nominatim/db/sqlalchemy_types/json.py
Merge remote-tracking branch 'upstream/master'
[nominatim.git] / nominatim / db / sqlalchemy_types / json.py
1 # SPDX-License-Identifier: GPL-3.0-or-later
2 #
3 # This file is part of Nominatim. (https://nominatim.org)
4 #
5 # Copyright (C) 2023 by the Nominatim developer community.
6 # For a full list of authors see the git log.
7 """
8 Common json type for different dialects.
9 """
10 from typing import Any
11
12 import sqlalchemy as sa
13 from sqlalchemy.dialects.postgresql import JSONB
14 from sqlalchemy.dialects.sqlite import JSON as sqlite_json
15
16 from nominatim.typing import SaDialect
17
18 # pylint: disable=all
19
20 class Json(sa.types.TypeDecorator[Any]):
21     """ Dialect-independent type for JSON.
22     """
23     impl = sa.types.JSON
24     cache_ok = True
25
26     def load_dialect_impl(self, dialect: SaDialect) -> sa.types.TypeEngine[Any]:
27         if dialect.name == 'postgresql':
28             return JSONB(none_as_null=True) # type: ignore[no-untyped-call]
29
30         return sqlite_json(none_as_null=True)