diff options
| author | Gord Thompson <gord@gordthompson.com> | 2020-04-02 11:51:11 -0600 |
|---|---|---|
| committer | Gord Thompson <gord@gordthompson.com> | 2020-04-02 11:51:11 -0600 |
| commit | 207e0b2fc0b36acca398b163c698412deec7077e (patch) | |
| tree | 1bd3b739655cefd2d67b8a01bbaf961c1a708d57 /lib/sqlalchemy/dialects | |
| parent | a9b62055bfa61c11e9fe0b2984437e2c3e32bf0e (diff) | |
| download | sqlalchemy-207e0b2fc0b36acca398b163c698412deec7077e.tar.gz | |
Broaden is[not]_distinct_from support
Added support for .is[not]_distinct_from to SQL Server, MySQL, and Oracle.
Fixes: #5137
Change-Id: I3b4d3b199821a55687f83c9a5b63a95d07a64cd5
Diffstat (limited to 'lib/sqlalchemy/dialects')
| -rw-r--r-- | lib/sqlalchemy/dialects/mssql/base.py | 12 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/mysql/base.py | 12 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/oracle/base.py | 12 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/sqlite/base.py | 3 |
4 files changed, 36 insertions, 3 deletions
diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py index 526e6e8ab..69e6834d2 100644 --- a/lib/sqlalchemy/dialects/mssql/base.py +++ b/lib/sqlalchemy/dialects/mssql/base.py @@ -1955,6 +1955,18 @@ class MSSQLCompiler(compiler.SQLCompiler): def visit_empty_set_expr(self, type_): return "SELECT 1 WHERE 1!=1" + def visit_is_distinct_from_binary(self, binary, operator, **kw): + return "NOT EXISTS (SELECT %s INTERSECT SELECT %s)" % ( + self.process(binary.left), + self.process(binary.right), + ) + + def visit_isnot_distinct_from_binary(self, binary, operator, **kw): + return "EXISTS (SELECT %s INTERSECT SELECT %s)" % ( + self.process(binary.left), + self.process(binary.right), + ) + class MSSQLStrictCompiler(MSSQLCompiler): diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py index e193c1daa..26d751faa 100644 --- a/lib/sqlalchemy/dialects/mysql/base.py +++ b/lib/sqlalchemy/dialects/mysql/base.py @@ -1572,6 +1572,18 @@ class MySQLCompiler(compiler.SQLCompiler): } ) + def visit_is_distinct_from_binary(self, binary, operator, **kw): + return "NOT (%s <=> %s)" % ( + self.process(binary.left), + self.process(binary.right), + ) + + def visit_isnot_distinct_from_binary(self, binary, operator, **kw): + return "%s <=> %s" % ( + self.process(binary.left), + self.process(binary.right), + ) + class MySQLDDLCompiler(compiler.DDLCompiler): def get_column_specification(self, column, **kw): diff --git a/lib/sqlalchemy/dialects/oracle/base.py b/lib/sqlalchemy/dialects/oracle/base.py index c0ee66ad7..ae869b921 100644 --- a/lib/sqlalchemy/dialects/oracle/base.py +++ b/lib/sqlalchemy/dialects/oracle/base.py @@ -1169,6 +1169,18 @@ class OracleCompiler(compiler.SQLCompiler): return tmp + def visit_is_distinct_from_binary(self, binary, operator, **kw): + return "DECODE(%s, %s, 0, 1) = 1" % ( + self.process(binary.left), + self.process(binary.right), + ) + + def visit_isnot_distinct_from_binary(self, binary, operator, **kw): + return "DECODE(%s, %s, 0, 1) = 0" % ( + self.process(binary.left), + self.process(binary.right), + ) + class OracleDDLCompiler(compiler.DDLCompiler): def define_constraint_cascades(self, constraint): diff --git a/lib/sqlalchemy/dialects/sqlite/base.py b/lib/sqlalchemy/dialects/sqlite/base.py index 1a13f678f..d3105f268 100644 --- a/lib/sqlalchemy/dialects/sqlite/base.py +++ b/lib/sqlalchemy/dialects/sqlite/base.py @@ -1450,9 +1450,6 @@ class SQLiteDialect(default.DefaultDialect): colspecs = colspecs isolation_level = None - supports_cast = True - supports_default_values = True - construct_arguments = [ (sa_schema.Table, {"autoincrement": False}), (sa_schema.Index, {"where": None}), |
