On Wed, Nov 10, 2010 at 18:19, Marco Trevisan (Treviño) <[email protected]> wrote: > 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
Applied, thanks! -- Sebastian Krzyszkowiak dos _______________________________________________ Shr-devel mailing list [email protected] http://lists.shr-project.org/mailman/listinfo/shr-devel
