Merge branch 'master' into rel_1_1

This commit is contained in:
Mike Bayer
2017-01-17 10:48:39 -05:00
5 changed files with 62 additions and 0 deletions
+16
View File
@@ -21,6 +21,13 @@
.. 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
@@ -139,6 +146,15 @@
:class:`.Engine`, concealing the URL password. Pull request courtesy
Valery Yundin.
.. change:: 3867
:tags: bug, mysql
:tickets: 3867
The MySQL dialect now will not warn when a reflected column has a
"COMMENT" keyword on it, but note however the comment is not yet
reflected; this is on the roadmap for a future release. Pull request
courtesy Lele Long.
.. change:: pg_timestamp_zero_prec
:tags: bug, postgresql
+25
View File
@@ -391,6 +391,25 @@ BLOB.
.. 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
~~~~~~~~~~~~~
@@ -1039,6 +1058,11 @@ class MySQLDDLCompiler(compiler.DDLCompiler):
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']
@@ -1468,6 +1492,7 @@ class MySQLDialect(default.DefaultDialect):
(sa_schema.Index, {
"using": None,
"length": None,
"prefix": None,
})
]
@@ -359,6 +359,7 @@ class MySQLTableDefinitionParser(object):
r'(?: +USING +(?P<using_post>\S+))?'
r'(?: +KEY_BLOCK_SIZE *[ =]? *(?P<keyblock>\S+))?'
r'(?: +WITH PARSER +(?P<parser>\S+))?'
r'(?: +COMMENT +(?P<comment>(\x27\x27|\x27([^\x27])*?\x27)+))?'
r',?$'
% quotes
)
+8
View File
@@ -40,6 +40,14 @@ class CompileTest(fixtures.TestBase, AssertsCompiledSQL):
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)))
+12
View File
@@ -552,6 +552,18 @@ class RawReflectionTest(fixtures.TestBase):
' PRIMARY KEY (`id`) USING BTREE KEY_BLOCK_SIZE = 16')
assert not regex.match(
' PRIMARY KEY (`id`) USING BTREE KEY_BLOCK_SIZE = = 16')
assert regex.match(
" KEY (`id`) USING BTREE COMMENT 'comment'")
# `SHOW CREATE TABLE` returns COMMENT '''comment'
# after creating table with COMMENT '\'comment'
assert regex.match(
" KEY (`id`) USING BTREE COMMENT '''comment'")
assert regex.match(
" KEY (`id`) USING BTREE COMMENT 'comment'''")
assert regex.match(
" KEY (`id`) USING BTREE COMMENT 'prefix''suffix'")
assert regex.match(
" KEY (`id`) USING BTREE COMMENT 'prefix''text''suffix'")
def test_fk_reflection(self):
regex = self.parser._re_constraint