From e7e875bb7b32497c61cebc5024770bc1b9d7c13d Mon Sep 17 00:00:00 2001 From: mdipierro Date: Mon, 24 Sep 2012 18:06:07 -0500 Subject: [PATCH] db().select(...query.case('true','false)) --- VERSION | 2 +- gluon/dal.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/VERSION b/VERSION index feadba47..c5823366 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.0.9 (2012-09-24 16:21:05) stable +Version 2.0.9 (2012-09-24 18:05:59) stable diff --git a/gluon/dal.py b/gluon/dal.py index b047f6b3..db50179c 100644 --- a/gluon/dal.py +++ b/gluon/dal.py @@ -2009,6 +2009,16 @@ class BaseAdapter(ConnectionPool): query = query & newquery return query + def CASE(self,query,t,f): + def represent(x): + if x is None: return 'NULL' + elif isinstance(x,Expression): return str(x) + types = {type(True): 'boolean', + type(0): 'integer', + type(1.0): 'double'} + return self.represent(x,types.get(type(x),'string')) + return Expression(self.db,'CASE WHEN %s THEN %s ELSE %s END' % \ + (self.expand(query),represent(t),represent(f))) ################################################################################### # List of all the available adapters; they all extend BaseAdapter. @@ -8594,6 +8604,8 @@ class Query(object): return self.first return Query(self.db,self.db._adapter.NOT,self) + def case(self,t=1,f=0): + return self.db._adapter.CASE(self,t,f)