diff options
author | Jason Kirtland <jek@discorporate.us> | 2007-09-26 23:37:11 +0000 |
---|---|---|
committer | Jason Kirtland <jek@discorporate.us> | 2007-09-26 23:37:11 +0000 |
commit | 6f3f85e48c7dca360f029c23231711036c66a95f (patch) | |
tree | a84ff82951d3a231de182fa6e181cbf967d9495a /lib/sqlalchemy/databases/mysql.py | |
parent | 3a04b7e4d4a4913cdbb60439b5371cf41c91c976 (diff) | |
download | sqlalchemy-6f3f85e48c7dca360f029c23231711036c66a95f.tar.gz |
Changed MySQL dialect to use the older LIMIT <offset>, <limit> syntax instead
of LIMIT <l> OFFSET <o> for folks using 3.23. ([ticket:794], thanks for the
patch!)
Diffstat (limited to 'lib/sqlalchemy/databases/mysql.py')
-rw-r--r-- | lib/sqlalchemy/databases/mysql.py | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/lib/sqlalchemy/databases/mysql.py b/lib/sqlalchemy/databases/mysql.py index 9eba2abdb..c0b1179a3 100644 --- a/lib/sqlalchemy/databases/mysql.py +++ b/lib/sqlalchemy/databases/mysql.py @@ -1812,16 +1812,28 @@ class MySQLCompiler(compiler.DefaultCompiler): return super(MySQLCompiler, self).for_update_clause(select) def limit_clause(self, select): - text = "" - if select._limit is not None: - text += " \n LIMIT " + str(select._limit) - if select._offset is not None: - if select._limit is None: - # straight from the MySQL docs, I kid you not - text += " \n LIMIT 18446744073709551615" - text += " OFFSET " + str(select._offset) - return text - + # MySQL supports: + # LIMIT <limit> + # LIMIT <offset>, <limit> + # and in server versions > 3.3: + # LIMIT <limit> OFFSET <offset> + # The latter is more readable for offsets but we're stuck with the + # former until we can refine dialects by server revision. + + limit, offset = select._limit, select._offset + + if (limit, offset) == (None, None): + return '' + elif offset is not None: + # As suggested by the MySQL docs, need to apply an + # artificial limit if one wasn't provided + if limit is None: + limit = 18446744073709551615 + return ' \n LIMIT %s, %s' % (offset, limit) + else: + # No offset provided, so just use the limit + return ' \n LIMIT %s' % (limit,) + # ug. "InnoDB needs indexes on foreign keys and referenced keys [...]. # Starting with MySQL 4.1.2, these indexes are created automatically. |