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

Reply via email to