Use the right properties to build the query and fix the comparison operators.

Performance: iterate first on the smaller dataset.
master
Daniele Gobbetti 2016-08-09 17:52:07 +02:00
parent fe5ec74ca1
commit 5cfddbb7e9
1 changed files with 6 additions and 8 deletions

View File

@ -12,6 +12,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
import nodomain.freeyourgadget.gadgetbridge.entities.Device; import nodomain.freeyourgadget.gadgetbridge.entities.Device;
import nodomain.freeyourgadget.gadgetbridge.entities.PebbleHealthActivityOverlay; import nodomain.freeyourgadget.gadgetbridge.entities.PebbleHealthActivityOverlay;
import nodomain.freeyourgadget.gadgetbridge.entities.PebbleHealthActivityOverlayDao;
import nodomain.freeyourgadget.gadgetbridge.entities.PebbleHealthActivitySample; import nodomain.freeyourgadget.gadgetbridge.entities.PebbleHealthActivitySample;
import nodomain.freeyourgadget.gadgetbridge.entities.PebbleHealthActivitySampleDao; import nodomain.freeyourgadget.gadgetbridge.entities.PebbleHealthActivitySampleDao;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
@ -37,25 +38,22 @@ public class PebbleHealthSampleProvider extends AbstractSampleProvider<PebbleHea
// no device, no samples // no device, no samples
return Collections.emptyList(); return Collections.emptyList();
} }
Property timestampProperty = getTimestampSampleProperty();
Property deviceProperty = getDeviceIdentifierSampleProperty();
QueryBuilder<PebbleHealthActivityOverlay> qb = getSession().getPebbleHealthActivityOverlayDao().queryBuilder(); QueryBuilder<PebbleHealthActivityOverlay> qb = getSession().getPebbleHealthActivityOverlayDao().queryBuilder();
// I assume it returns the records by id ascending ... (last overlay is dominant) // I assume it returns the records by id ascending ... (last overlay is dominant)
qb.where(deviceProperty.eq(dbDevice.getId()), timestampProperty.ge(timestamp_from)) qb.where(PebbleHealthActivityOverlayDao.Properties.DeviceId.eq(dbDevice.getId()), PebbleHealthActivityOverlayDao.Properties.TimestampFrom.ge(timestamp_from))
.where(timestampProperty.le(timestamp_to)); .where(PebbleHealthActivityOverlayDao.Properties.TimestampTo.le(timestamp_to));
List<PebbleHealthActivityOverlay> overlayRecords = qb.build().list(); List<PebbleHealthActivityOverlay> overlayRecords = qb.build().list();
for (PebbleHealthActivitySample sample : samples) { for (PebbleHealthActivityOverlay overlay : overlayRecords) {
for (PebbleHealthActivityOverlay overlay : overlayRecords) { for (PebbleHealthActivitySample sample : samples) {
if (overlay.getTimestampFrom() <= sample.getTimestamp() && overlay.getTimestampTo() >= sample.getTimestamp()) { if (overlay.getTimestampFrom() >= sample.getTimestamp() && overlay.getTimestampTo() <= sample.getTimestamp()) {
// patch in the raw kind // patch in the raw kind
sample.setRawKind(overlay.getRawKind()); sample.setRawKind(overlay.getRawKind());
} }
} }
} }
return samples; return samples;
} }