cannot be interpreted as columns or expressions.
Will warn when Index is created
with no columns at all. [ticket:2380]
key constraint of the reflected table.
[ticket:2402]
+ - [bug] Index will raise when arguments passed
+ cannot be interpreted as columns or expressions.
+ Will warn when Index is created
+ with no columns at all. [ticket:2380]
+
- engine
- [feature] Added pool_reset_on_return argument
to create_engine, allows control over
self.table = None
# will call _set_parent() if table-bound column
# objects are present
+ if not columns:
+ util.warn("No column names or expressions given for Index.")
ColumnCollectionMixin.__init__(self, *columns)
self.name = name
self.unique = kw.pop('unique', False)
return element
def _to_schema_column_or_string(element):
- if hasattr(element, '__clause_element__'):
- element = element.__clause_element__()
- return element
+ if hasattr(element, '__clause_element__'):
+ element = element.__clause_element__()
+ if not isinstance(element, (basestring, expression.ColumnElement)):
+ raise exc.ArgumentError("Element %r is not a string name or column element" % element)
+ return element
class _CreateDropBase(DDLElement):
"""Base class for DDL constucts that represent CREATE and DROP or
Index('bar', t1.c.x)
)
+ def test_raise_index_nonexistent_name(self):
+ m = MetaData()
+ # the KeyError isn't ideal here, a nicer message
+ # perhaps
+ assert_raises(
+ KeyError,
+ Table, 't', m, Column('x', Integer), Index("foo", "q")
+ )
+
+ def test_raise_not_a_column(self):
+ assert_raises(
+ exc.ArgumentError,
+ Index, "foo", 5
+ )
+
+ def test_warn_no_columns(self):
+ assert_raises_message(
+ exc.SAWarning,
+ "No column names or expressions given for Index.",
+ Index, "foo"
+ )
+
+ def test_raise_clauseelement_not_a_column(self):
+ m = MetaData()
+ t2 = Table('t2', m, Column('x', Integer))
+ class SomeClass(object):
+ def __clause_element__(self):
+ return t2
+ assert_raises(
+ exc.ArgumentError,
+ Index, "foo", SomeClass()
+ )
+
class ConstraintCompilationTest(fixtures.TestBase, AssertsCompiledSQL):
__dialect__ = 'default'
"Column('x', String(), table=<bar>), schema=None)"),
(schema.DefaultGenerator(for_update=True),
"DefaultGenerator(for_update=True)"),
- (schema.Index("bar"), "Index('bar')"),
+ (schema.Index("bar", "c"), "Index('bar')"),
(i1, "Index('bar', Column('x', Integer(), table=<foo>))"),
(schema.FetchedValue(), "FetchedValue()"),
(ck,