summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/databases/mysql.py
diff options
context:
space:
mode:
authorJason Kirtland <jek@discorporate.us>2007-09-26 23:37:11 +0000
committerJason Kirtland <jek@discorporate.us>2007-09-26 23:37:11 +0000
commit6f3f85e48c7dca360f029c23231711036c66a95f (patch)
treea84ff82951d3a231de182fa6e181cbf967d9495a /lib/sqlalchemy/databases/mysql.py
parent3a04b7e4d4a4913cdbb60439b5371cf41c91c976 (diff)
downloadsqlalchemy-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.py32
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.