Implementamos limits

This commit is contained in:
2014-11-24 23:44:54 +01:00
parent 7961f09b60
commit b595f7f124

View File

@@ -162,6 +162,7 @@ class SQLQuery(object):
self._filters = Q() self._filters = Q()
self._excludes = Q() self._excludes = Q()
self._extra = {} self._extra = {}
self._limits = None
def values(self, *args): def values(self, *args):
self._values = args self._values = args
@@ -201,6 +202,10 @@ class SQLQuery(object):
self._extra.update(extra) self._extra.update(extra)
return self return self
def __getitem__(self, slice):
self._limits = slice
return self
class SQLCompiler(object): class SQLCompiler(object):
@@ -253,6 +258,18 @@ class SQLCompiler(object):
return " ".join(self._joins) return " ".join(self._joins)
return "" return ""
def get_limits(self,):
if self._limits:
offset = self._limits.start
limit = self._limits.stop
if offset:
limit = limit - offset
str = "LIMIT {0}".format(limit)
if offset:
str += " OFFSET {0}".format(offset)
return str
return ""
def _compile(self): def _compile(self):
sql = """ sql = """
SELECT {columns}{extra_columns} SELECT {columns}{extra_columns}
@@ -261,6 +278,7 @@ class SQLCompiler(object):
{where} {where}
{group_by} {group_by}
{order_by} {order_by}
{limits}
""".format( """.format(
columns=self.get_columns(), columns=self.get_columns(),
extra_columns=self.get_extra_columns(), extra_columns=self.get_extra_columns(),
@@ -268,7 +286,8 @@ class SQLCompiler(object):
joins=self.get_joins(), joins=self.get_joins(),
where=self.get_where(), where=self.get_where(),
group_by=self.get_group_by(), group_by=self.get_group_by(),
order_by=self.get_order_by() order_by=self.get_order_by(),
limits=self.get_limits()
) )
return sql return sql