|
36 | 36 | from .type import FloatVector, ObjectArray, ObjectType
|
37 | 37 | from .type.binary import LargeBinary
|
38 | 38 |
|
| 39 | +# For SQLAlchemy >= 1.1. |
39 | 40 | TYPES_MAP = {
|
40 |
| - "boolean": sqltypes.Boolean, |
41 |
| - "short": sqltypes.SmallInteger, |
42 |
| - "smallint": sqltypes.SmallInteger, |
43 |
| - "timestamp": sqltypes.TIMESTAMP(timezone=False), |
| 41 | + "boolean": sqltypes.BOOLEAN, |
| 42 | + "short": sqltypes.SMALLINT, |
| 43 | + "smallint": sqltypes.SMALLINT, |
| 44 | + "timestamp": sqltypes.TIMESTAMP, |
44 | 45 | "timestamp with time zone": sqltypes.TIMESTAMP(timezone=True),
|
| 46 | + "timestamp without time zone": sqltypes.TIMESTAMP(timezone=False), |
45 | 47 | "object": ObjectType,
|
46 |
| - "integer": sqltypes.Integer, |
47 |
| - "long": sqltypes.NUMERIC, |
48 |
| - "bigint": sqltypes.NUMERIC, |
| 48 | + "object_array": ObjectArray, # TODO: Can this also be improved to use `sqltypes.ARRAY`? |
| 49 | + "integer": sqltypes.INTEGER, |
| 50 | + "long": sqltypes.BIGINT, |
| 51 | + "bigint": sqltypes.BIGINT, |
| 52 | + "float": sqltypes.FLOAT, |
49 | 53 | "double": sqltypes.DECIMAL,
|
50 | 54 | "double precision": sqltypes.DECIMAL,
|
51 |
| - "object_array": ObjectArray, |
52 |
| - "float": sqltypes.Float, |
53 |
| - "real": sqltypes.Float, |
54 |
| - "string": sqltypes.String, |
55 |
| - "text": sqltypes.String, |
| 55 | + "real": sqltypes.REAL, |
| 56 | + "string": sqltypes.VARCHAR, |
| 57 | + "text": sqltypes.VARCHAR, |
56 | 58 | "float_vector": FloatVector,
|
57 | 59 | }
|
58 | 60 |
|
59 |
| -# Needed for SQLAlchemy >= 1.1. |
60 |
| -# TODO: Dissolve. |
| 61 | +# For SQLAlchemy >= 1.4. |
61 | 62 | try:
|
62 | 63 | from sqlalchemy.types import ARRAY
|
63 | 64 |
|
64 |
| - TYPES_MAP["integer_array"] = ARRAY(sqltypes.Integer) |
65 |
| - TYPES_MAP["boolean_array"] = ARRAY(sqltypes.Boolean) |
66 |
| - TYPES_MAP["short_array"] = ARRAY(sqltypes.SmallInteger) |
67 |
| - TYPES_MAP["smallint_array"] = ARRAY(sqltypes.SmallInteger) |
| 65 | + TYPES_MAP["integer_array"] = ARRAY(sqltypes.INTEGER) |
| 66 | + TYPES_MAP["boolean_array"] = ARRAY(sqltypes.BOOLEAN) |
| 67 | + TYPES_MAP["short_array"] = ARRAY(sqltypes.SMALLINT) |
| 68 | + TYPES_MAP["smallint_array"] = ARRAY(sqltypes.SMALLINT) |
| 69 | + TYPES_MAP["timestamp_array"] = ARRAY(sqltypes.TIMESTAMP) |
68 | 70 | TYPES_MAP["timestamp_array"] = ARRAY(sqltypes.TIMESTAMP(timezone=False))
|
69 | 71 | TYPES_MAP["timestamp with time zone_array"] = ARRAY(sqltypes.TIMESTAMP(timezone=True))
|
70 |
| - TYPES_MAP["long_array"] = ARRAY(sqltypes.NUMERIC) |
71 |
| - TYPES_MAP["bigint_array"] = ARRAY(sqltypes.NUMERIC) |
72 |
| - TYPES_MAP["double_array"] = ARRAY(sqltypes.DECIMAL) |
73 |
| - TYPES_MAP["double precision_array"] = ARRAY(sqltypes.DECIMAL) |
74 |
| - TYPES_MAP["float_array"] = ARRAY(sqltypes.Float) |
75 |
| - TYPES_MAP["real_array"] = ARRAY(sqltypes.Float) |
76 |
| - TYPES_MAP["string_array"] = ARRAY(sqltypes.String) |
77 |
| - TYPES_MAP["text_array"] = ARRAY(sqltypes.String) |
| 72 | + TYPES_MAP["long_array"] = ARRAY(sqltypes.BIGINT) |
| 73 | + TYPES_MAP["bigint_array"] = ARRAY(sqltypes.BIGINT) |
| 74 | + TYPES_MAP["float_array"] = ARRAY(sqltypes.FLOAT) |
| 75 | + TYPES_MAP["real_array"] = ARRAY(sqltypes.REAL) |
| 76 | + TYPES_MAP["string_array"] = ARRAY(sqltypes.VARCHAR) |
| 77 | + TYPES_MAP["text_array"] = ARRAY(sqltypes.VARCHAR) |
| 78 | +except Exception: # noqa: S110 |
| 79 | + pass |
| 80 | + |
| 81 | +# For SQLAlchemy >= 2.0. |
| 82 | +try: |
| 83 | + from sqlalchemy.types import DOUBLE, DOUBLE_PRECISION |
| 84 | + |
| 85 | + TYPES_MAP["real"] = DOUBLE |
| 86 | + TYPES_MAP["real_array"] = ARRAY(DOUBLE) |
| 87 | + TYPES_MAP["double"] = DOUBLE |
| 88 | + TYPES_MAP["double_array"] = ARRAY(DOUBLE) |
| 89 | + TYPES_MAP["double precision"] = DOUBLE_PRECISION |
| 90 | + TYPES_MAP["double precision_array"] = ARRAY(DOUBLE_PRECISION) |
78 | 91 | except Exception: # noqa: S110
|
79 | 92 | pass
|
80 | 93 |
|
|
0 commit comments