# length value can be a (column_name --> integer value) mapping
# specifying the prefix length for each column of the index
columns = ', '.join(
- ('%s(%d)' % (col, length[col])
- if col in length else '%s' % col)
- for col in columns
+ '%s(%d)' % (expr, length[col.name]) if col.name in length
+ else
+ (
+ '%s(%d)' % (expr, length[expr]) if expr in length
+ else '%s' % expr
+ )
+ for col, expr in zip(index.expressions, columns)
)
else:
# or can be an integer value specifying the same
self.assert_compile(schema.CreateIndex(idx2),
'CREATE INDEX test_idx2 ON testtbl (data(5))')
+ def test_create_index_with_length_quoted(self):
+ m = MetaData()
+ tbl = Table('testtbl', m, Column('some quoted data',
+ String(255), key='s'))
+ idx1 = Index('test_idx1', tbl.c.s, mysql_length=10)
+
+ self.assert_compile(schema.CreateIndex(idx1),
+ 'CREATE INDEX test_idx1 ON testtbl (`some quoted data`(10))')
+
+ def test_create_composite_index_with_length_quoted(self):
+ m = MetaData()
+ tbl = Table('testtbl', m,
+ Column('some Quoted a', String(255), key='a'),
+ Column('some Quoted b', String(255), key='b'))
+ idx1 = Index('test_idx1', tbl.c.a, tbl.c.b,
+ mysql_length={'some Quoted a': 10, 'some Quoted b': 20})
+
+ self.assert_compile(schema.CreateIndex(idx1),
+ 'CREATE INDEX test_idx1 ON testtbl '
+ '(`some Quoted a`(10), `some Quoted b`(20))')
+
+ def test_create_composite_index_with_length_quoted_3085_workaround(self):
+ m = MetaData()
+ tbl = Table('testtbl', m,
+ Column('some quoted a', String(255), key='a'),
+ Column('some quoted b', String(255), key='b'))
+ idx1 = Index('test_idx1', tbl.c.a, tbl.c.b,
+ mysql_length={'`some quoted a`': 10, '`some quoted b`': 20})
+
+ self.assert_compile(schema.CreateIndex(idx1),
+ 'CREATE INDEX test_idx1 ON testtbl '
+ '(`some quoted a`(10), `some quoted b`(20))')
+
def test_create_composite_index_with_length(self):
m = MetaData()
tbl = Table('testtbl', m,