Tracks table: remove unused columns and rename existing columns.

This commit is contained in:
Dennis Guse
2025-11-05 19:53:24 +01:00
parent 3d083928eb
commit ca64f2c749
4 changed files with 62 additions and 40 deletions
@@ -65,7 +65,7 @@ public class TrackSelectionTest extends TestCase {
}
@Test
public void testFilterBuildSelection_onlyOneCategory() {
public void testFilterBuildSelection_onlyOneactivity_type_localized() {
// given
TrackSelection filter = new TrackSelection().addActivityType("running");
@@ -73,7 +73,7 @@ public class TrackSelectionTest extends TestCase {
SelectionData selection = filter.buildSelection();
// Then
assertEquals("category IN (?)", selection.selection());
assertEquals("activity_type_localized IN (?)", selection.selection());
assertEquals(1, selection.selectionArgs().length);
assertEquals("running", selection.selectionArgs()[0]);
}
@@ -91,7 +91,7 @@ public class TrackSelectionTest extends TestCase {
SelectionData selection = filter.buildSelection();
// Then
assertEquals("category IN (?,?,?,?)", selection.selection());
assertEquals("activity_type_localized IN (?,?,?,?)", selection.selection());
assertEquals(4, selection.selectionArgs().length);
assertEquals("running", selection.selectionArgs()[0]);
assertEquals("road biking", selection.selectionArgs()[1]);
@@ -120,7 +120,7 @@ public class TrackSelectionTest extends TestCase {
assertNull(selectionWrong2.selection());
assertNull(selectionWrong2.selectionArgs());
assertEquals("starttime BETWEEN ? AND ?", selectionOk.selection());
assertEquals("time_start BETWEEN ? AND ?", selectionOk.selection());
assertEquals(2, selectionOk.selectionArgs().length);
assertEquals(selectionOk.selectionArgs()[0], Long.toString(instant.toEpochMilli()));
assertEquals(selectionOk.selectionArgs()[1], Long.toString(instant.toEpochMilli() + oneDay));
@@ -143,7 +143,7 @@ public class TrackSelectionTest extends TestCase {
SelectionData selection = filter.buildSelection();
// Then
assertEquals("_id IN (?,?,?) AND category IN (?,?)", selection.selection());
assertEquals("_id IN (?,?,?) AND activity_type_localized IN (?,?)", selection.selection());
assertEquals(5, selection.selectionArgs().length);
assertEquals("1", selection.selectionArgs()[0]);
assertEquals("2", selection.selectionArgs()[1]);
@@ -172,7 +172,7 @@ public class TrackSelectionTest extends TestCase {
SelectionData selection = filter.buildSelection();
// Then
assertEquals("_id IN (?,?,?) AND starttime BETWEEN ? AND ?", selection.selection());
assertEquals("_id IN (?,?,?) AND time_start BETWEEN ? AND ?", selection.selection());
assertEquals(5, selection.selectionArgs().length);
assertEquals("1", selection.selectionArgs()[0]);
assertEquals("2", selection.selectionArgs()[1]);
@@ -196,7 +196,7 @@ public class TrackSelectionTest extends TestCase {
SelectionData selection = filter.buildSelection();
// Then
assertEquals("category IN (?,?) AND starttime BETWEEN ? AND ?", selection.selection());
assertEquals("activity_type_localized IN (?,?) AND time_start BETWEEN ? AND ?", selection.selection());
assertEquals(4, selection.selectionArgs().length);
assertEquals("running", selection.selectionArgs()[0]);
assertEquals("road biking", selection.selectionArgs()[1]);
@@ -320,8 +320,6 @@ public class ContentProviderUtils {
values.put(TracksColumns.TOTALDISTANCE, trackStatistics.totalDistance().toM());
values.put(TracksColumns.TOTALTIME, trackStatistics.totalTime().toMillis());
values.put(TracksColumns.MOVINGTIME, trackStatistics.movingTime().toMillis());
values.put(TracksColumns.AVGSPEED, trackStatistics.getAverageSpeed().toMPS());
values.put(TracksColumns.AVGMOVINGSPEED, trackStatistics.getAverageMovingSpeed().toMPS());
values.put(TracksColumns.MAXSPEED, trackStatistics.maxSpeed().toMPS());
if (trackStatistics.altitudeExtremities() != null) {
@@ -352,8 +350,6 @@ public class ContentProviderUtils {
values.put(TracksColumns.TOTALDISTANCE, trackStatistics.totalDistance().toM());
values.put(TracksColumns.TOTALTIME, trackStatistics.totalTime().toMillis());
values.put(TracksColumns.MOVINGTIME, trackStatistics.movingTime().toMillis());
values.put(TracksColumns.AVGSPEED, trackStatistics.getAverageSpeed().toMPS());
values.put(TracksColumns.AVGMOVINGSPEED, trackStatistics.getAverageMovingSpeed().toMPS());
values.put(TracksColumns.MAXSPEED, trackStatistics.maxSpeed().toMPS());
values.put(TracksColumns.MIN_ALTITUDE, trackStatistics.getMinAltitude());
values.put(TracksColumns.MAX_ALTITUDE, trackStatistics.getMaxAltitude());
@@ -29,7 +29,7 @@ class CustomSQLiteOpenHelper extends SQLiteOpenHelper {
private static final String TAG = CustomSQLiteOpenHelper.class.getSimpleName();
private static final int DATABASE_VERSION = 38;
private static final int DATABASE_VERSION = 39;
private final Context context;
@@ -82,6 +82,7 @@ class CustomSQLiteOpenHelper extends SQLiteOpenHelper {
case 36 -> upgradeFrom35to36(db);
case 37 -> upgradeFrom36to37(db);
case 38 -> upgradeFrom37to38(db);
case 39 -> upgradeFrom38to39(db);
default -> throw new RuntimeException("Not implemented: upgrade to " + toVersion);
}
}
@@ -107,6 +108,7 @@ class CustomSQLiteOpenHelper extends SQLiteOpenHelper {
case 35 -> downgradeFrom36to35(db);
case 36 -> downgradeFrom37to36(db);
case 37 -> downgradeFrom38to37(db);
case 38 -> downgradeFrom39to38(db);
default -> throw new RuntimeException("Not implemented: downgrade to " + toVersion);
}
}
@@ -670,4 +672,36 @@ class CustomSQLiteOpenHelper extends SQLiteOpenHelper {
db.endTransaction();
}
private void upgradeFrom38to39(SQLiteDatabase db) {
db.beginTransaction();
db.execSQL("DROP INDEX tracks_uuid_index");
db.execSQL("ALTER TABLE tracks RENAME TO tracks_old");
db.execSQL("CREATE TABLE tracks (_id INTEGER PRIMARY KEY AUTOINCREMENT, uuid BLOB, name TEXT, description TEXT, activity_type TEXT, activity_type_localized TEXT, time_offset INTEGER, time_start INTEGER, time_stop INTEGER, duration_total INTEGER, duration_moving INTEGER, distance FLOAT, speed_max FLOAT, altitude_min FLOAT, altitude_max FLOAT, altitude_gain FLOAT, altitude_loss FLOAT)");
db.execSQL("INSERT INTO tracks SELECT _id, uuid, name, description, activity_type, category, starttime_offset, starttime, stoptime, totaltime, movingtime, totaldistance, maxspeed, minelevation, maxelevation, elevationgain, elevationloss FROM tracks_old");
db.execSQL("DROP TABLE tracks_old");
db.execSQL("CREATE UNIQUE INDEX tracks_uuid_index ON tracks(uuid)");
db.setTransactionSuccessful();
db.endTransaction();
}
private void downgradeFrom39to38(SQLiteDatabase db) {
db.beginTransaction();
db.execSQL("DROP INDEX tracks_uuid_index");
db.execSQL("ALTER TABLE tracks RENAME TO tracks_old");
db.execSQL("CREATE TABLE tracks (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, description TEXT, category TEXT, starttime INTEGER, stoptime INTEGER, numpoints INTEGER, totaldistance FLOAT, totaltime INTEGER, movingtime INTEGER, avgspeed FLOAT, avgmovingspeed FLOAT, maxspeed FLOAT, minelevation FLOAT, maxelevation FLOAT, elevationgain FLOAT, icon TEXT, uuid BLOB, elevationloss FLOAT, starttime_offset INTEGER)");
db.execSQL("INSERT INTO tracks SELECT _id, name, description, activity_type_localized, time_start, time_stop, 0, distance, duration_total, duration_moving, 0, 0, speed_max, altitude_min, altitude_max, altitude_gain, null, uuid, altitude_loss, time_offset FROM tracks_old");
db.execSQL("DROP TABLE tracks_old");
db.execSQL("CREATE UNIQUE INDEX tracks_uuid_index ON tracks(uuid)");
db.setTransactionSuccessful();
db.endTransaction();
}
}
@@ -41,49 +41,41 @@ public interface TracksColumns extends BaseColumns {
String DESCRIPTION = "description"; // track description
/** see {@link de.dennisguse.opentracks.data.models.ActivityType}.id */
String ACTIVITY_TYPE = "activity_type";
String ACTIVITY_TYPE_LOCALIZED = "category"; // track activity type
@Deprecated
String ICON = "icon"; // track activity type icon
String STARTTIME = "starttime"; // track start time
String STARTTIME_OFFSET = "starttime_offset"; // in plus/minus in seconds
String STOPTIME = "stoptime"; // track stop time
String MARKER_COUNT = "markerCount"; // the numbers of markers (virtual column)
@Deprecated
String NUMPOINTS = "numpoints"; // number of track points //TODO UNUSED
String TOTALDISTANCE = "totaldistance"; // total distance
String TOTALTIME = "totaltime"; // total time
String MOVINGTIME = "movingtime"; // moving time
String ACTIVITY_TYPE_LOCALIZED = "activity_type_localized";
String AVGSPEED = "avgspeed"; // average speed
String AVGMOVINGSPEED = "avgmovingspeed"; // average moving speed
String MAXSPEED = "maxspeed"; // maximum speed
String MIN_ALTITUDE = "minelevation"; // minimum altitude //TODO RENAME column
String MAX_ALTITUDE = "maxelevation"; // maximum altitude //TODO RENAME column
String ALTITUDE_GAIN = "elevationgain"; // altitude gain //TODO RENAME column
String ALTITUDE_LOSS = "elevationloss"; // altitude loss //TODO RENAME column
String STARTTIME_OFFSET = "time_offset"; // in plus/minus in seconds
String STARTTIME = "time_start"; // track start time
String STOPTIME = "time_stop"; // track stop time
String MARKER_COUNT = "markerCount"; // the numbers of markers (virtual column)
String TOTALDISTANCE = "distance"; // total distance
String TOTALTIME = "duration_total";
String MOVINGTIME = "duration_moving";
String MAXSPEED = "speed_max";
String MIN_ALTITUDE = "altitude_min";
String MAX_ALTITUDE = "altitude_max";
String ALTITUDE_GAIN = "altitude_gain";
String ALTITUDE_LOSS = "altitude_loss";
String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " ("
+ _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ UUID + " BLOB, "
+ NAME + " TEXT, "
+ DESCRIPTION + " TEXT, "
+ ACTIVITY_TYPE + " TEXT, "
+ ACTIVITY_TYPE_LOCALIZED + " TEXT, "
+ STARTTIME_OFFSET + " INTEGER, "
+ STARTTIME + " INTEGER, "
+ STOPTIME + " INTEGER, "
+ NUMPOINTS + " INTEGER, "
+ TOTALDISTANCE + " FLOAT, "
+ TOTALTIME + " INTEGER, "
+ MOVINGTIME + " INTEGER, "
+ AVGSPEED + " FLOAT, "
+ AVGMOVINGSPEED + " FLOAT, "
+ TOTALDISTANCE + " FLOAT, "
+ MAXSPEED + " FLOAT, "
+ MIN_ALTITUDE + " FLOAT, "
+ MAX_ALTITUDE + " FLOAT, "
+ ALTITUDE_GAIN + " FLOAT, "
+ ICON + " TEXT, "
+ UUID + " BLOB, "
+ ALTITUDE_LOSS + " FLOAT, "
+ STARTTIME_OFFSET + " INTEGER, "
+ ACTIVITY_TYPE + " TEXT)";
+ ALTITUDE_LOSS + " FLOAT)";
String CREATE_TABLE_INDEX = "CREATE UNIQUE INDEX " + TABLE_NAME + "_" + UUID + "_index ON " + TABLE_NAME + "(" + UUID + ")";