subclass attributes that "disable" propagation from
the parent - these needed to allow a merge()
operation to pass through without effect.
+
+ - Specifying a non-column based argument
+ for column_mapped_collection, including string,
+ text() etc., will raise an error message that
+ specifically asks for a column element, no longer
+ misleads with incorrect information about
+ text() or literal(). [ticket:1863]
- sql
- Changed the scheme used to generate truncated
else:
return element
+def _only_column_elements(element):
+ if hasattr(element, '__clause_element__'):
+ element = element.__clause_element__()
+ if not isinstance(element, ColumnElement):
+ raise exc.ArgumentError("Column-based expression object expected; "
+ "got: %r" % element)
+ return element
+
def _corresponding_column_or_error(fromclause, column, require_embedded=False):
c = fromclause.corresponding_column(column,
require_embedded=require_embedded)
import sqlalchemy as sa
from sqlalchemy.test import testing
-from sqlalchemy import Integer, String, ForeignKey
+from sqlalchemy import Integer, String, ForeignKey, text
from sqlalchemy.test.schema import Table, Column
from sqlalchemy import util, exc as sa_exc
from sqlalchemy.orm import create_session, mapper, relationship, attributes
from test.orm import _base
-from sqlalchemy.test.testing import eq_, assert_raises
+from sqlalchemy.test.testing import eq_, assert_raises, assert_raises_message
class Canary(sa.orm.interfaces.AttributeExtension):
def __init__(self):
eq_(Bar.foos.property.collection_class().keyfunc(Foo(id=3)), 3)
eq_(Bar.foos2.property.collection_class().keyfunc(Foo(id=3, bar_id=12)), (3, 12))
+
+ @testing.resolve_artifact_names
+ def test_column_mapped_assertions(self):
+ assert_raises_message(
+ sa_exc.ArgumentError,
+ "Column-based expression object expected; got: 'a'",
+ collections.column_mapped_collection, "a",
+ )
+ assert_raises_message(
+ sa_exc.ArgumentError,
+ "Column-based expression object expected; got",
+ collections.column_mapped_collection, text("a"),
+ )
+ assert_raises_message(
+ sa_exc.ArgumentError,
+ "Column-based expression object expected; got",
+ collections.column_mapped_collection, text("a"),
+ )
+
@testing.resolve_artifact_names
def test_column_mapped_collection(self):