summaryrefslogtreecommitdiff
path: root/sqlplain/pager.py
diff options
context:
space:
mode:
Diffstat (limited to 'sqlplain/pager.py')
-rw-r--r--sqlplain/pager.py70
1 files changed, 0 insertions, 70 deletions
diff --git a/sqlplain/pager.py b/sqlplain/pager.py
deleted file mode 100644
index 13ba1f1..0000000
--- a/sqlplain/pager.py
+++ /dev/null
@@ -1,70 +0,0 @@
-import string
-
-def _fetchpage_mssql(self, pageno, maxrows, query_args):
- query_templ = self.query_templ
- nrows, npages = self._rows_pages(maxrows, query_templ, query_args)
- n_end = max(nrows - pageno * maxrows, 0)
- ofields = self.ofields
- templ = string.Template('''
- SELECT TOP ${maxrows} * FROM
- (SELECT TOP ${n_end} * FROM
- ($query_templ) AS T1
- ORDER BY ${ofields} DESC) AS T2
- ORDER BY ${ofields} ASC
- ''').substitute(locals())
- res = self.conn.execute(templ, query_args)
- res.nrows = nrows
- res.npages = npages
- return res
-
-def _fetchpage(self, pageno, maxrows, query_args):
- query_templ = self.query_templ
- currentrow = pageno * maxrows
- ofields = self.ofields
- templ = string.Template('''
- SELECT * FROM ($query_templ) AS tmp
- ORDER BY ${ofields} LIMIT ${maxrows} OFFSET ${currentrow}
- ''').substitute(locals())
- res = self.conn.execute(templ, query_args)
- res.nrows, res.npages = self._rows_pages(maxrows, query_templ, query_args)
- return res
-
-class SqlPaginator(object):
- def __init__(self, conn, query_templ, ofields, query_args=()):
- self.conn = conn
- self.query_templ = query_templ
- self.query_args = query_args
- self.ofields = ofields
- if conn.dbtype == 'mssql':
- self._fetchpage = _fetchpage_mssql.__get__(self)
- else:
- self._fetchpage = _fetchpage.__get__(self)
-
- def _rows_pages(self, maxrows, query_templ, query_args):
- "Count the rows and pages returned by the query"
- ct = 'SELECT count(*) FROM (%s) AS t' % query_templ
- nrows = self.conn.execute(ct, query_args, scalar=True)
- npages, rest = divmod(nrows, maxrows)
- if rest:
- npages += 1
- return nrows, npages
-
- def fetchpage(self, pageno, maxrows, query_args=None):
- """
- Fetch a page from a paginated query. Return a list with attributes
- nrows and npages.
- """
- pageno = max(0, pageno) # makes sure pageno is positive
- if query_args is None:
- query_args = self.query_args
- return self._fetchpage(pageno, maxrows, query_args)
-
-'''
-Notice: in SQL Server 2005 there is the row_number() function which can
-be used in conjunction with ORDER BY; an example is the following:
-select * from
-(select Row_number() over (order by csfb_issuer_id) as rn,*
- from csfbcreditdefaultswaps) as x
-where rn between 100 and 110
-
-'''