Author: croberts
Date: 2012-12-10 15:50:36 +0000 (Mon, 10 Dec 2012)
New Revision: 5570
Modified:
trunk/cumin/python/cumin/objectselector.py
Log:
BZ 879314: Fixing searches of floating point columns. Cumin displays values rounded to 2
decimal places. The searching now takes that into account by rounding the value entered
to 2 decimal places as well.
Modified: trunk/cumin/python/cumin/objectselector.py
===================================================================
--- trunk/cumin/python/cumin/objectselector.py 2012-12-07 22:08:00 UTC (rev 5569)
+++ trunk/cumin/python/cumin/objectselector.py 2012-12-10 15:50:36 UTC (rev 5570)
@@ -449,17 +449,10 @@
#adjust our search value to be an int based on the timestamp
customvalue = str(fmt_ddhhmm_timestamp(customvalue))
self.adapter.query.add_filter(self.SelectableFieldUptimeValueFilter(sql_column,
operator))
- if (sql_column.type.literal == "int8" or sql_column.type.literal
== "float8") and sql_column.name not in self.special_columns:
- if operator == ">=":
-
self.adapter.query.add_filter(self.SelectableFieldValueFilter(sql_column,
">="))
- elif operator == ">":
-
self.adapter.query.add_filter(self.SelectableFieldValueFilter(sql_column,
">"))
- elif operator == "<=":
-
self.adapter.query.add_filter(self.SelectableFieldValueFilter(sql_column,
"<="))
- elif operator == "<":
-
self.adapter.query.add_filter(self.SelectableFieldValueFilter(sql_column,
"<"))
- else:
-
self.adapter.query.add_filter(self.SelectableFieldValueFilter(sql_column))
+ if sql_column.type.literal == "int8" and sql_column.name not in
self.special_columns:
+
self.adapter.query.add_filter(self.SelectableFieldValueFilter(sql_column, operator))
+ if sql_column.type.literal == "float8" and sql_column.name not in
self.special_columns:
+
self.adapter.query.add_filter(self.SelectableFieldRoundedFloatValueFilter(sql_column,
operator))
else:
post = "%"
if not "%" in customvalue:
@@ -543,6 +536,10 @@
class SelectableFieldDateEnqueuedValueFilter(SqlDateValueFilter,
SelectableFieldFilter):
def emit(self):
return "date_trunc('second', %s) %s date_trunc('second',
timestamp '%s')" % (self.this, self.operator, self.that)
+
+ class SelectableFieldRoundedFloatValueFilter(SqlValueFilter, SelectableFieldFilter):
+ def emit(self):
+ return "round(cast(%s as numeric), 2) %s round(%s, 2)" %
(self.this, self.operator, self.that)
class SelectableFieldUptimeValueFilter(SqlValueFilter, SelectableFieldFilter):
#necessary because we only show day:hour:minute to the user, but we store seconds
in
Show replies by date