Files
sqlalchemy/lib/sqlalchemy/types.py
T
Mike Bayer 77f987022c generalize cache_ok to UserDefinedType
Extended the ``cache_ok`` flag and corresponding warning message if this
flag is not defined, a behavior first established for
:class:`.TypeDecorator` as part of 🎫`6436`, to also take place for
:class:`.UserDefinedType`, by generalizing the flag and associated caching
logic to a new common base for these two types, :class:`.ExternalType`.

The change means any current :class:`.UserDefinedType` will now cause SQL
statement caching to no longer take place for statements which make use of
the datatype, along with a warning being emitted, unless the class defines
the :attr:`.UserDefinedType.cache_ok` flag as True. If the datatype cannot
form a deterministic, hashable cache key derived from its arguments, it may return
False which will continue to keep caching disabled but will suppress the
warning. In particular, custom datatypes currently used in packages such as
SQLAlchemy-utils will need to implement this flag. The issue was observed
as a result of a SQLAlchemy-utils datatype that is not currently cacheable.

Fixes: #7319
Change-Id: Ie0b5d4587df87bfe66d2fe7cd4585c3882584575
(cherry picked from commit 4761e6878b)
2021-11-17 15:55:21 -05:00

120 lines
2.9 KiB
Python

# types.py
# Copyright (C) 2005-2021 the SQLAlchemy authors and contributors
# <see AUTHORS file>
#
# This module is part of SQLAlchemy and is released under
# the MIT License: https://www.opensource.org/licenses/mit-license.php
"""Compatibility namespace for sqlalchemy.sql.types.
"""
__all__ = [
"TypeEngine",
"TypeDecorator",
"UserDefinedType",
"ExternalType",
"INT",
"CHAR",
"VARCHAR",
"NCHAR",
"NVARCHAR",
"TEXT",
"Text",
"FLOAT",
"NUMERIC",
"REAL",
"DECIMAL",
"TIMESTAMP",
"DATETIME",
"CLOB",
"BLOB",
"BINARY",
"VARBINARY",
"BOOLEAN",
"BIGINT",
"SMALLINT",
"INTEGER",
"DATE",
"TIME",
"TupleType",
"String",
"Integer",
"SmallInteger",
"BigInteger",
"Numeric",
"Float",
"DateTime",
"Date",
"Time",
"LargeBinary",
"Boolean",
"Unicode",
"Concatenable",
"UnicodeText",
"PickleType",
"Interval",
"Enum",
"Indexable",
"ARRAY",
"JSON",
]
from .sql.sqltypes import _Binary
from .sql.sqltypes import ARRAY
from .sql.sqltypes import BIGINT
from .sql.sqltypes import BigInteger
from .sql.sqltypes import BINARY
from .sql.sqltypes import BLOB
from .sql.sqltypes import BOOLEAN
from .sql.sqltypes import Boolean
from .sql.sqltypes import CHAR
from .sql.sqltypes import CLOB
from .sql.sqltypes import Concatenable
from .sql.sqltypes import DATE
from .sql.sqltypes import Date
from .sql.sqltypes import DATETIME
from .sql.sqltypes import DateTime
from .sql.sqltypes import DECIMAL
from .sql.sqltypes import Enum
from .sql.sqltypes import FLOAT
from .sql.sqltypes import Float
from .sql.sqltypes import Indexable
from .sql.sqltypes import INT
from .sql.sqltypes import INTEGER
from .sql.sqltypes import Integer
from .sql.sqltypes import Interval
from .sql.sqltypes import JSON
from .sql.sqltypes import LargeBinary
from .sql.sqltypes import MatchType
from .sql.sqltypes import NCHAR
from .sql.sqltypes import NULLTYPE
from .sql.sqltypes import NullType
from .sql.sqltypes import NUMERIC
from .sql.sqltypes import Numeric
from .sql.sqltypes import NVARCHAR
from .sql.sqltypes import PickleType
from .sql.sqltypes import REAL
from .sql.sqltypes import SchemaType
from .sql.sqltypes import SMALLINT
from .sql.sqltypes import SmallInteger
from .sql.sqltypes import String
from .sql.sqltypes import STRINGTYPE
from .sql.sqltypes import TEXT
from .sql.sqltypes import Text
from .sql.sqltypes import TIME
from .sql.sqltypes import Time
from .sql.sqltypes import TIMESTAMP
from .sql.sqltypes import TupleType
from .sql.sqltypes import Unicode
from .sql.sqltypes import UnicodeText
from .sql.sqltypes import VARBINARY
from .sql.sqltypes import VARCHAR
from .sql.type_api import adapt_type
from .sql.type_api import ExternalType
from .sql.type_api import to_instance
from .sql.type_api import TypeDecorator
from .sql.type_api import TypeEngine
from .sql.type_api import UserDefinedType
from .sql.type_api import Variant