.. changelog::
:version: 1.1.5
+ .. change:: mysql_index_prefix
+ :tags: feature, mysql
+
+ Added a new parameter ``mysql_prefix`` supported by the :class:`.Index`
+ construct, allows specification of MySQL-specific prefixes such as
+ "FULLTEXT". Pull request courtesy Joseph Schorr.
+
.. change:: 3854
:tags: bug, orm
:tickets: 3854
.. versionadded:: 0.8.2 ``mysql_length`` may now be specified as a dictionary
for use with composite indexes.
+Index Prefixes
+~~~~~~~~~~~~~~
+
+MySQL storage engines permit you to specify an index prefix when creating
+an index. SQLAlchemy provides this feature via the
+``mysql_prefix`` parameter on :class:`.Index`::
+
+ Index('my_index', my_table.c.data, mysql_prefix='FULLTEXT')
+
+The value passed to the keyword argument will be simply passed through to the
+underlying CREATE INDEX, so it *must* be a valid index prefix for your MySQL
+storage engine.
+
+.. versionadded:: 1.1.5
+
+.. seealso::
+
+ `CREATE INDEX <http://dev.mysql.com/doc/refman/5.0/en/create-index.html>`_ - MySQL documentation
+
Index Types
~~~~~~~~~~~~~
text = "CREATE "
if index.unique:
text += "UNIQUE "
+
+ index_prefix = index.kwargs.get('mysql_prefix', None)
+ if index_prefix:
+ text += index_prefix + ' '
+
text += "INDEX %s ON %s " % (name, table)
length = index.dialect_options['mysql']['length']
(sa_schema.Index, {
"using": None,
"length": None,
+ "prefix": None,
})
]
self.assert_compile(schema.CreateIndex(idx),
'CREATE INDEX test_idx1 ON testtbl (data)')
+ def test_create_index_with_prefix(self):
+ m = MetaData()
+ tbl = Table('testtbl', m, Column('data', String(255)))
+ idx = Index('test_idx1', tbl.c.data, mysql_length=10, mysql_prefix='FULLTEXT')
+
+ self.assert_compile(schema.CreateIndex(idx),
+ 'CREATE FULLTEXT INDEX test_idx1 ON testtbl (data(10))')
+
def test_create_index_with_length(self):
m = MetaData()
tbl = Table('testtbl', m, Column('data', String(255)))