diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2009-11-22 22:11:41 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2009-11-22 22:11:41 +0000 |
| commit | d9388a51944e1c5bb389a33a2cd824a7e8672115 (patch) | |
| tree | 2a349d610575c6a021b02ec29a78a2d08c1d1619 /lib/sqlalchemy | |
| parent | 66b7d008ee2975744212fc1b3831375b15db055f (diff) | |
| download | sqlalchemy-d9388a51944e1c5bb389a33a2cd824a7e8672115.tar.gz | |
- VARCHAR/NVARCHAR will not render without a length, raises
an error before passing to MySQL. Doesn't impact
CAST since VARCHAR is not allowed in MySQL CAST anyway,
the dialect renders CHAR/NCHAR in those cases.
[ticket:1252]
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/dialects/mysql/base.py | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py index a9acc2a01..d5ee4f5bb 100644 --- a/lib/sqlalchemy/dialects/mysql/base.py +++ b/lib/sqlalchemy/dialects/mysql/base.py @@ -1561,19 +1561,28 @@ class MySQLTypeCompiler(compiler.GenericTypeCompiler): if type_.length: return self._extend_string(type_, {}, "VARCHAR(%d)" % type_.length) else: - return self._extend_string(type_, {}, "VARCHAR") + raise exc.InvalidRequestError("VARCHAR requires a length when rendered on MySQL") def visit_CHAR(self, type_): - return self._extend_string(type_, {'national':True}, "CHAR(%(length)s)" % {'length' : type_.length}) - + if type_.length: + return self._extend_string(type_, {}, "CHAR(%(length)s)" % {'length' : type_.length}) + else: + return self._extend_string(type_, {}, "CHAR") + def visit_NVARCHAR(self, type_): # We'll actually generate the equiv. "NATIONAL VARCHAR" instead # of "NVARCHAR". - return self._extend_string(type_, {'national':True}, "VARCHAR(%(length)s)" % {'length': type_.length}) + if type_.length: + return self._extend_string(type_, {'national':True}, "VARCHAR(%(length)s)" % {'length': type_.length}) + else: + raise exc.InvalidRequestError("NVARCHAR requires a length when rendered on MySQL") def visit_NCHAR(self, type_): # We'll actually generate the equiv. "NATIONAL CHAR" instead of "NCHAR". - return self._extend_string(type_, {'national':True}, "CHAR(%(length)s)" % {'length': type_.length}) + if type_.length: + return self._extend_string(type_, {'national':True}, "CHAR(%(length)s)" % {'length': type_.length}) + else: + return self._extend_string(type_, {'national':True}, "CHAR") def visit_VARBINARY(self, type_): if type_.length: |
