]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Added MSMediumInteger type [ticket:1146].
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 24 Aug 2008 21:20:05 +0000 (21:20 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 24 Aug 2008 21:20:05 +0000 (21:20 +0000)
CHANGES
lib/sqlalchemy/databases/mysql.py
test/dialect/mysql.py

diff --git a/CHANGES b/CHANGES
index f3cc31dd206f490c8793df48f7770ff7c8c1f499..9dc7e8004fc8a23d0555560455611377e4275366 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -93,6 +93,8 @@ CHANGES
 - mysql
     - The 'length' argument to MSInteger, MSBigInteger, MSTinyInteger,
       MSSmallInteger and MSYear has been renamed to 'display_width'.
+      
+    - Added MSMediumInteger type [ticket:1146].
 
 0.5beta3
 ========
index ed871274819d67197f92f19bbef2462814f4f205..729e1ad457c0a9959891b23ea7950d2eaf7c07f9 100644 (file)
@@ -166,7 +166,7 @@ from sqlalchemy import types as sqltypes
 
 
 __all__ = (
-    'MSBigInteger', 'MSBinary', 'MSBit', 'MSBlob', 'MSBoolean',
+    'MSBigInteger', 'MSMediumInteger', 'MSBinary', 'MSBit', 'MSBlob', 'MSBoolean',
     'MSChar', 'MSDate', 'MSDateTime', 'MSDecimal', 'MSDouble',
     'MSEnum', 'MSFloat', 'MSInteger', 'MSLongBlob', 'MSLongText',
     'MSMediumBlob', 'MSMediumText', 'MSNChar', 'MSNVarChar',
@@ -552,6 +552,33 @@ class MSBigInteger(MSInteger):
         else:
             return self._extend("BIGINT")
 
+class MSMediumInteger(MSInteger):
+    """MySQL MEDIUMINTEGER type."""
+
+    def __init__(self, display_width=None, **kw):
+        """Construct a MEDIUMINTEGER
+
+        display_width
+          Optional, maximum display width for this number.
+
+        unsigned
+          Optional.
+
+        zerofill
+          Optional. If true, values will be stored as strings left-padded with
+          zeros. Note that this does not effect the values returned by the
+          underlying database API, which continue to be numeric.
+        """
+
+        super(MSMediumInteger, self).__init__(display_width, **kw)
+
+    def get_col_spec(self):
+        if self.display_width is not None:
+            return self._extend("MEDIUMINT(%(display_width)s)" % {'display_width': self.display_width})
+        else:
+            return self._extend("MEDIUMINT")
+
+
 
 class MSTinyInteger(MSInteger):
     """MySQL TINYINT type."""
@@ -1404,7 +1431,7 @@ ischema_names = {
     'longblob': MSLongBlob,
     'longtext': MSLongText,
     'mediumblob': MSMediumBlob,
-    'mediumint': MSInteger,
+    'mediumint': MSMediumInteger,
     'mediumtext': MSMediumText,
     'nchar': MSNChar,
     'nvarchar': MSNVarChar,
index 2c944fd3a108a92e386221e7907419303e07f45b..5a03ffa9832a41afbcc777b9f7f0b0c5bf8c8595 100644 (file)
@@ -24,6 +24,7 @@ class TypesTest(TestBase, AssertsExecutionResults):
             Column('num3', mysql.MSBigInteger()),
             Column('num4', mysql.MSDouble),
             Column('num5', mysql.MSDouble()),
+            Column('num6', mysql.MSMediumInteger),
             Column('enum1', mysql.MSEnum("'black'", "'white'")),
             Column('enum2', mysql.MSEnum("dog", "cat")),
             )
@@ -40,6 +41,7 @@ class TypesTest(TestBase, AssertsExecutionResults):
             assert isinstance(t2.c.num3.type, mysql.MSBigInteger)
             assert isinstance(t2.c.num4.type, mysql.MSDouble)
             assert isinstance(t2.c.num5.type, mysql.MSDouble)
+            assert isinstance(t2.c.num6.type, mysql.MSMediumInteger)
             assert isinstance(t2.c.enum1.type, mysql.MSEnum)
             assert isinstance(t2.c.enum2.type, mysql.MSEnum)
             t2.drop()
@@ -136,6 +138,17 @@ class TypesTest(TestBase, AssertsExecutionResults):
             (mysql.MSBigInteger, [4], {'zerofill':True, 'unsigned':True},
              'BIGINT(4) UNSIGNED ZEROFILL'),
 
+             (mysql.MSMediumInteger, [], {},
+              'MEDIUMINT'),
+             (mysql.MSMediumInteger, [4], {},
+              'MEDIUMINT(4)'),
+             (mysql.MSMediumInteger, [4], {'unsigned':True},
+              'MEDIUMINT(4) UNSIGNED'),
+             (mysql.MSMediumInteger, [4], {'zerofill':True},
+              'MEDIUMINT(4) ZEROFILL'),
+             (mysql.MSMediumInteger, [4], {'zerofill':True, 'unsigned':True},
+              'MEDIUMINT(4) UNSIGNED ZEROFILL'),
+
             (mysql.MSTinyInteger, [], {},
              'TINYINT'),
             (mysql.MSTinyInteger, [1], {},
@@ -662,6 +675,8 @@ class TypesTest(TestBase, AssertsExecutionResults):
                  ( SmallInteger(), mysql.MSSmallInteger(4), ),
                  ( mysql.MSSmallInteger(), ),
                  ( mysql.MSSmallInteger(4), mysql.MSSmallInteger(4), ),
+                 ( mysql.MSMediumInteger(), mysql.MSMediumInteger(), ),
+                 ( mysql.MSMediumInteger(8), mysql.MSMediumInteger(8), ),
                  ( Binary(3), mysql.MSBlob(3), ),
                  ( Binary(), mysql.MSBlob() ),
                  ( mysql.MSBinary(3), mysql.MSBinary(3), ),