This query allows to set the SQL LIMIT x,y function in the proper
way, now you can limit the results both setting the "end limit"
(like before, using "_limit") and the start value to show (using
the new "_start_limit" parameter).
Useful for paginating results, reducing GUI lookups.
---
framework/subsystems/opimd/db_handler.py | 43 +++++++++++++++++++++++++----
1 files changed, 37 insertions(+), 6 deletions(-)
diff --git a/framework/subsystems/opimd/db_handler.py
b/framework/subsystems/opimd/db_handler.py
index a1a5260..0622848 100644
--- a/framework/subsystems/opimd/db_handler.py
+++ b/framework/subsystems/opimd/db_handler.py
@@ -272,7 +272,7 @@ class DbHandler(object):
#skip system fields
if name.startswith('_'):
#FIXME: put this in a central place!
- if name not in ('_at_least_one', '_sortdesc', '_sortby',
'_limit', '_resolve_phonenumber', '_retrieve_full_contact'):
+ if name not in ('_at_least_one', '_sortdesc', '_sortby',
'_limit', '_limit_start', '_resolve_phonenumber', '_retrieve_full_contact'):
raise InvalidField("Query rule '%s' does not exist." %
(name, ))
else:
continue
@@ -342,9 +342,25 @@ class DbHandler(object):
params.append(sortby)
if '_sortdesc' in query_desc:
query = query + " DESC"
+
+ limit_start = 0
+ if '_limit_start' in query_desc:
+ try:
+ limit_start = int(query_desc['_limit_start'])
+ except:
+ raise InvalidField("_limit_start should be an integer value")
+
+ limit_end = -1
if '_limit' in query_desc:
- query = query + " LIMIT ?"
- params.append(int(query_desc['_limit']))
+ try:
+ limit_end = int(query_desc['_limit'])
+ except:
+ raise InvalidField("_limit should be an integer value")
+
+ if (limit_start != 0 or limit_end != -1):
+ query = query + " LIMIT ?,?"
+ params.extend([limit_start, limit_end])
+
return {'Query':query, 'Parameters':params}
def build_sql_query(self, query_desc):
@@ -357,7 +373,7 @@ class DbHandler(object):
#skip system fields
if name.startswith('_'):
#FIXME: put this in a central place!
- if name not in ('_limit', '_resolve_phonenumber',
'_retrieve_full_contact'):
+ if name not in ('_limit', '_limit_start',
'_resolve_phonenumber', '_retrieve_full_contact'):
raise InvalidField("Query rule '%s' does not exist." %
(name, ))
else:
continue
@@ -367,9 +383,24 @@ class DbHandler(object):
else:
continue
+ limit_start = 0
+ if '_limit_start' in query_desc:
+ try:
+ limit_start = int(query_desc['_limit_start'])
+ except:
+ raise InvalidField("_limit_start should be an integer value")
+
+ limit_end = -1
if '_limit' in query_desc:
- query = "SELECT * FROM (" + query + ") LIMIT ?"
- params.append(int(query_desc['_limit']))
+ try:
+ limit_end = int(query_desc['_limit'])
+ except:
+ raise InvalidField("_limit should be an integer value")
+
+ if (limit_start != 0 or limit_end != -1):
+ query = query + " LIMIT ?,?"
+ params.extend([limit_start, limit_end])
+
return {'Query':query, 'Parameters':params}
--
1.7.1
_______________________________________________
Shr-devel mailing list
[email protected]
http://lists.shr-project.org/mailman/listinfo/shr-devel