From ca277c1446f956cb719a964e27106635b495c046 Mon Sep 17 00:00:00 2001 From: Mu-Woong Lee Date: Mon, 4 Jul 2016 21:29:11 +0900 Subject: [PATCH] sensor: fix the group-by statements of SQL queries to split the timeline properly In SQL, deviding an integer by an integer produces an integer. The integers need to be casted into real. Change-Id: I71d407f94fb00503a67255e4935df405e766d757 Signed-off-by: Mu-Woong Lee --- src/sensor/TypesInternal.h | 3 +++ src/sensor/pedometer/PedometerQuerier.cpp | 2 +- src/sensor/pressure/PressureQuerier.cpp | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/sensor/TypesInternal.h b/src/sensor/TypesInternal.h index 1894520..0bd3cb5 100644 --- a/src/sensor/TypesInternal.h +++ b/src/sensor/TypesInternal.h @@ -40,4 +40,7 @@ /* Time Conversions */ #define SEC_TO_MS(X) ((X) * 1000) +/* SQL Helper */ +#define TIME_QUANTIZER(key) "ROUND((CAST(" key " AS REAL) - %llu)/CAST(%llu AS REAL) + 0.5)" + #endif /* __CONTEXT_SENSOR_RECORDER_TYPES_INTERNAL_H__ */ diff --git a/src/sensor/pedometer/PedometerQuerier.cpp b/src/sensor/pedometer/PedometerQuerier.cpp index 020e868..c4bda95 100644 --- a/src/sensor/pedometer/PedometerQuerier.cpp +++ b/src/sensor/pedometer/PedometerQuerier.cpp @@ -59,7 +59,7 @@ int PedometerQuerier::query(int startTime, int endTime, int anchor, int interval "SELECT " PROJECTION \ " FROM " PEDOMETER_RECORD \ " WHERE " KEY_END_TIME " > %llu AND " KEY_END_TIME " <= %llu" \ - " GROUP BY ROUND((" KEY_END_TIME " - %llu) / %llu + 0.5)" \ + " GROUP BY " TIME_QUANTIZER(KEY_END_TIME) \ " ORDER BY " KEY_END_TIME " ASC", SEC_TO_MS(static_cast(startTime)), SEC_TO_MS(static_cast(endTime)), SEC_TO_MS(static_cast(anchor)), SEC_TO_MS(static_cast(interval))); diff --git a/src/sensor/pressure/PressureQuerier.cpp b/src/sensor/pressure/PressureQuerier.cpp index 43d3457..8d19638 100644 --- a/src/sensor/pressure/PressureQuerier.cpp +++ b/src/sensor/pressure/PressureQuerier.cpp @@ -80,7 +80,7 @@ int PressureQuerier::query(int startTime, int endTime, int anchor, int interval) "SELECT " PROJECTION \ " FROM " PRESSURE_RECORD \ " WHERE " KEY_UNIV_TIME " > %llu AND " KEY_UNIV_TIME " <= %llu" \ - " GROUP BY ROUND((" KEY_UNIV_TIME " - %llu) / %llu + 0.5)" \ + " GROUP BY " TIME_QUANTIZER(KEY_UNIV_TIME) \ " ORDER BY " KEY_END_TIME " ASC", SEC_TO_MS(static_cast(startTime)), SEC_TO_MS(static_cast(endTime)), SEC_TO_MS(static_cast(anchor)), SEC_TO_MS(static_cast(interval))); -- 2.7.4