]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- changelog for [ticket:2704]
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 8 Jun 2013 18:47:04 +0000 (14:47 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 8 Jun 2013 18:47:04 +0000 (14:47 -0400)
- use an isinstance() check, concerned a TypeError might be indiscriminate

doc/build/changelog/changelog_08.rst
doc/build/changelog/changelog_09.rst
lib/sqlalchemy/dialects/mysql/base.py

index e3b14bc28e962c534cb238005de63fcce4c13977..00d8c121be881f13c369c5ae70628e1f3fe38401 100644 (file)
@@ -6,6 +6,15 @@
 .. changelog::
     :version: 0.8.2
 
+    .. change::
+        :tags: feature, mysql
+        :tickets: 2704
+
+        The ``mysql_length`` parameter used with :class:`.Index` can now
+        be passed as a dictionary of column names/lengths, for use
+        with composite indexes.  Big thanks to Roman Podolyaka for the
+        patch.
+
     .. change::
         :tags: bug, mssql
         :tickets: 2747
index 10921476b06b52207fe7a44859067b54a6f57f88..9b68b32e9f357e78ca4b8701f43301393e32e496 100644 (file)
@@ -6,6 +6,15 @@
 .. changelog::
     :version: 0.9.0
 
+    .. change::
+        :tags: feature, mysql
+        :tickets: 2704
+
+        The ``mysql_length`` parameter used with :class:`.Index` can now
+        be passed as a dictionary of column names/lengths, for use
+        with composite indexes.  Big thanks to Roman Podolyaka for the
+        patch.  Also in 0.8.2.
+
     .. change::
         :tags: bug, ext, associationproxy
         :tickets: 2751
index b7cff43eb041e2c83c2dc6331403706a24c9dffd..9d856e271c8a899a80e9bdaccf827647da662bfb 100644 (file)
@@ -226,6 +226,7 @@ become part of the index. SQLAlchemy provides this feature via the
 ``mysql_length`` parameter::
 
     Index('my_index', my_table.c.data, mysql_length=10)
+
     Index('a_b_idx', my_table.c.a, my_table.c.b, mysql_length={'a': 4, 'b': 9})
 
 Prefix lengths are given in characters for nonbinary string types and in bytes
@@ -236,6 +237,9 @@ prefix length values for corresponding columns. MySQL only allows a length for
 a column of an index if it is for a CHAR, VARCHAR, TEXT, BINARY, VARBINARY and
 BLOB.
 
+.. versionadded:: 0.8.2 ``mysql_length`` may now be specified as a dictionary
+   for use with composite indexes.
+
 Index Types
 ~~~~~~~~~~~~~
 
@@ -1525,19 +1529,19 @@ class MySQLDDLCompiler(compiler.DDLCompiler):
         if 'mysql_length' in index.kwargs:
             length = index.kwargs['mysql_length']
 
-            # length value can be an integer value specifying the same
-            # prefix length for all columns of the index
-            try:
+            if isinstance(length, dict):
+                # 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)
+                    ('%s(%d)' % (col, length[col])
+                     if col in length else '%s' % col)
                     for col in columns
                 )
-            # otherwise it's a (column_name --> integer value) mapping
-            # specifying the prefix length for each column of the index
-            except TypeError:
+            else:
+                # or can be an integer value specifying the same
+                # prefix length for all columns of the index
                 columns = ', '.join(
-                    ('%s(%d)' % (col, length[col])
-                     if col in length else '%s' % col)
+                    '%s(%d)' % (col, length)
                     for col in columns
                 )
         else: