Skip to content

Commit af28fc6

Browse files
committed
db: store ints as ints, not floats
DatabaseULog.write_ulog complained about wrong value types during struct packing.
1 parent 7c2df0f commit af28fc6

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

pyulog/db.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class DatabaseULog(ULog):
4949
contsructor will throw an exception. See the documentation of
5050
"ulog_migratedb" for more information.
5151
'''
52-
SCHEMA_VERSION = 3
52+
SCHEMA_VERSION = 4
5353

5454
@staticmethod
5555
def get_db_handle(db_path):

pyulog/sql/pyulog.4.sql

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
BEGIN;
2+
PRAGMA foreign_keys=off;
3+
4+
-- Change REAL timestamps to INT. SQLITE only supports INT64, but ULog -- changed from REAL
5+
-- timestamps are UINT64. We accept losing 1 bit at the top end, since 2^63
6+
-- microseconds = 400,000 years. which should be enough.
7+
8+
ALTER TABLE ULog RENAME COLUMN StartTimestamp TO StartTimestamp_old;
9+
ALTER TABLE ULog ADD COLUMN StartTimestamp INT;
10+
UPDATE ULog SET StartTimestamp = CAST(StartTimestamp_old AS INT);
11+
12+
ALTER TABLE ULog RENAME COLUMN LastTimestamp TO LastTimestamp_old;
13+
ALTER TABLE ULog ADD COLUMN LastTimestamp INT;
14+
UPDATE ULog SET LastTimestamp = CAST(LastTimestamp_old AS INT);
15+
16+
ALTER TABLE ULogMessageDropout RENAME COLUMN Timestamp TO Timestamp_old;
17+
ALTER TABLE ULogMessageDropout ADD COLUMN Timestamp INT;
18+
UPDATE ULogMessageDropout SET Timestamp = CAST(Timestamp_old AS INT);
19+
20+
ALTER TABLE ULogMessageDropout RENAME COLUMN Duration TO Duration_old;
21+
ALTER TABLE ULogMessageDropout ADD COLUMN Duration INT;
22+
UPDATE ULogMessageDropout SET Duration = CAST(Duration_old AS INT);
23+
24+
ALTER TABLE ULogMessageLogging RENAME COLUMN Timestamp TO Timestamp_old;
25+
ALTER TABLE ULogMessageLogging ADD COLUMN Timestamp INT;
26+
UPDATE ULogMessageLogging SET Timestamp = CAST(Timestamp_old AS INT);
27+
28+
ALTER TABLE ULogMessageLoggingTagged RENAME COLUMN Timestamp TO Timestamp_old;
29+
ALTER TABLE ULogMessageLoggingTagged ADD COLUMN Timestamp INT;
30+
UPDATE ULogMessageLoggingTagged SET Timestamp = CAST(Timestamp_old AS INT);
31+
32+
ALTER TABLE ULogChangedParameter RENAME COLUMN Timestamp TO Timestamp_old;
33+
ALTER TABLE ULogChangedParameter ADD COLUMN Timestamp INT;
34+
UPDATE ULogChangedParameter SET Timestamp = CAST(Timestamp_old AS INT);
35+
36+
PRAGMA foreign_keys=on;
37+
COMMIT;

0 commit comments

Comments
 (0)