summaryrefslogtreecommitdiff
path: root/test/sql
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2019-11-26 18:06:45 +0000
committerGerrit Code Review <gerrit@bbpush.zzzcomputing.com>2019-11-26 18:06:45 +0000
commit06b0892da049a995ee4cd1e7cc3c1eb68f3dde64 (patch)
tree012ede76b812efe0fd65aeffda229fca3fa82c26 /test/sql
parentc5d23203b24f48c25eb17284f023f9f30151a229 (diff)
parentf7fe966a4c40fbe98e6321d275ffee8f898a211b (diff)
downloadsqlalchemy-06b0892da049a995ee4cd1e7cc3c1eb68f3dde64.tar.gz
Merge "Remove ORM elements from annotations at the schema level."
Diffstat (limited to 'test/sql')
-rw-r--r--test/sql/test_metadata.py85
1 files changed, 81 insertions, 4 deletions
diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py
index 05e5ec3c2..3f4333750 100644
--- a/test/sql/test_metadata.py
+++ b/test/sql/test_metadata.py
@@ -35,6 +35,7 @@ from sqlalchemy.schema import AddConstraint
from sqlalchemy.schema import CreateIndex
from sqlalchemy.schema import DropIndex
from sqlalchemy.sql import naming
+from sqlalchemy.sql import operators
from sqlalchemy.sql.elements import _NONE_NAME
from sqlalchemy.testing import assert_raises
from sqlalchemy.testing import assert_raises_message
@@ -340,7 +341,8 @@ class MetaDataTest(fixtures.TestBase, ComparesTables):
not_a_col = bindparam("x")
assert_raises_message(
exc.ArgumentError,
- "String, Column, or Column-bound argument expected, got Bind",
+ "String column name or Column object for DDL foreign "
+ "key constraint expected, got .*Bind",
ForeignKey,
not_a_col,
)
@@ -352,7 +354,8 @@ class MetaDataTest(fixtures.TestBase, ComparesTables):
assert_raises_message(
exc.ArgumentError,
- "String, Column, or Column-bound argument expected, got Bind",
+ "String column name or Column object for DDL foreign "
+ "key constraint expected, got .*Foo",
ForeignKey,
Foo(),
)
@@ -2656,7 +2659,7 @@ class ConstraintTest(fixtures.TestBase):
idx = Index("bar", MyThing(), t.c.y)
- is_(idx.expressions[0], expr1)
+ is_true(idx.expressions[0].compare(expr1))
is_(idx.expressions[1], t.c.y)
def test_table_references(self):
@@ -3415,13 +3418,87 @@ class ConstraintTest(fixtures.TestBase):
assert_raises_message(
exc.ArgumentError,
- r"String column name or column object for DDL constraint "
+ r"String column name or column expression for DDL constraint "
r"expected, got .*SomeClass",
Index,
"foo",
SomeClass(),
)
+ @testing.fixture
+ def no_pickle_annotated(self):
+ class NoPickle(object):
+ def __reduce__(self):
+ raise NotImplementedError()
+
+ class ClauseElement(operators.ColumnOperators):
+ def __init__(self, col):
+ self.col = col._annotate({"bar": NoPickle()})
+
+ def __clause_element__(self):
+ return self.col
+
+ def operate(self, op, *other, **kwargs):
+ return self.col.operate(op, *other, **kwargs)
+
+ m = MetaData()
+ t = Table("t", m, Column("q", Integer))
+ return t, ClauseElement(t.c.q)
+
+ def test_pickle_fk_annotated_col(self, no_pickle_annotated):
+
+ t, q_col = no_pickle_annotated
+
+ t2 = Table("t2", t.metadata, Column("p", ForeignKey(q_col)))
+ assert t2.c.p.references(t.c.q)
+
+ m2 = pickle.loads(pickle.dumps(t.metadata))
+
+ m2_t, m2_t2 = m2.tables["t"], m2.tables["t2"]
+
+ is_true(m2_t2.c.p.references(m2_t.c.q))
+
+ def test_pickle_uq_annotated_col(self, no_pickle_annotated):
+ t, q_col = no_pickle_annotated
+
+ t.append_constraint(UniqueConstraint(q_col))
+
+ m2 = pickle.loads(pickle.dumps(t.metadata))
+
+ const = [
+ c
+ for c in m2.tables["t"].constraints
+ if isinstance(c, UniqueConstraint)
+ ][0]
+
+ is_true(const.columns[0].compare(t.c.q))
+
+ def test_pickle_idx_expr_annotated_col(self, no_pickle_annotated):
+ t, q_col = no_pickle_annotated
+
+ expr = q_col > 5
+ t.append_constraint(Index("conditional_index", expr))
+
+ m2 = pickle.loads(pickle.dumps(t.metadata))
+
+ const = list(m2.tables["t"].indexes)[0]
+
+ is_true(const.expressions[0].compare(expr))
+
+ def test_pickle_ck_binary_annotated_col(self, no_pickle_annotated):
+ t, q_col = no_pickle_annotated
+
+ ck = CheckConstraint(q_col > 5)
+ t.append_constraint(ck)
+
+ m2 = pickle.loads(pickle.dumps(t.metadata))
+ const = [
+ c
+ for c in m2.tables["t"].constraints
+ if isinstance(c, CheckConstraint)
+ ][0]
+ is_true(const.sqltext.compare(ck.sqltext))
+
class ColumnDefinitionTest(AssertsCompiledSQL, fixtures.TestBase):