@@ -20,7 +20,29 @@ public class OSOutcomeTableProvider {
20
20
public static final String CACHE_UNIQUE_OUTCOME_COLUMN_CHANNEL_INFLUENCE_ID = CachedUniqueOutcomeTable .COLUMN_CHANNEL_INFLUENCE_ID ;
21
21
public static final String CACHE_UNIQUE_OUTCOME_COLUMN_CHANNEL_TYPE = CachedUniqueOutcomeTable .COLUMN_CHANNEL_TYPE ;
22
22
23
- private static final String SQL_CREATE_OUTCOME_ENTRIES =
23
+ public static final String SQL_CREATE_OUTCOME_ENTRIES_V1 =
24
+ "CREATE TABLE " + OutcomeEventsTable .TABLE_NAME + " (" +
25
+ OutcomeEventsTable ._ID + " INTEGER PRIMARY KEY," +
26
+ OutcomeEventsTable .COLUMN_NAME_NOTIFICATION_IDS + TEXT_TYPE + "," +
27
+ OutcomeEventsTable .COLUMN_NAME_NAME + TEXT_TYPE + "," +
28
+ OutcomeEventsTable .COLUMN_NAME_SESSION + TEXT_TYPE + "," +
29
+ OutcomeEventsTable .COLUMN_NAME_PARAMS + TEXT_TYPE + "," +
30
+ OutcomeEventsTable .COLUMN_NAME_TIMESTAMP + " TIMESTAMP" +
31
+ ");" ;
32
+
33
+ public static final String SQL_CREATE_OUTCOME_ENTRIES_V2 =
34
+ "CREATE TABLE " + OutcomeEventsTable .TABLE_NAME + " (" +
35
+ OutcomeEventsTable ._ID + INTEGER_PRIMARY_KEY_TYPE + "," +
36
+ OutcomeEventsTable .COLUMN_NAME_SESSION + TEXT_TYPE + "," +
37
+ OutcomeEventsTable .COLUMN_NAME_NOTIFICATION_IDS + TEXT_TYPE + "," +
38
+ OutcomeEventsTable .COLUMN_NAME_NAME + TEXT_TYPE + "," +
39
+ OutcomeEventsTable .COLUMN_NAME_TIMESTAMP + TIMESTAMP_TYPE + "," +
40
+ // "params TEXT" Added in v4, removed in v5.
41
+ OutcomeEventsTable .COLUMN_NAME_WEIGHT + FLOAT_TYPE + // New in v5, missing migration added in v6
42
+ ");" ;
43
+
44
+
45
+ public static final String SQL_CREATE_OUTCOME_ENTRIES_V3 =
24
46
"CREATE TABLE " + OutcomeEventsTable .TABLE_NAME + " (" +
25
47
OutcomeEventsTable ._ID + INTEGER_PRIMARY_KEY_TYPE + "," +
26
48
OutcomeEventsTable .COLUMN_NAME_NOTIFICATION_INFLUENCE_TYPE + TEXT_TYPE + "," +
@@ -33,14 +55,55 @@ public class OSOutcomeTableProvider {
33
55
OutcomeEventsTable .COLUMN_NAME_WEIGHT + FLOAT_TYPE + // New in v5, missing migration added in v6
34
56
");" ;
35
57
36
- private static final String SQL_CREATE_UNIQUE_OUTCOME_ENTRIES =
37
- "CREATE TABLE " + CachedUniqueOutcomeTable .TABLE_NAME + " (" +
58
+ public static final String SQL_CREATE_UNIQUE_OUTCOME_ENTRIES_V1 =
59
+ "CREATE TABLE " + CachedUniqueOutcomeTable .TABLE_NAME_V1 + " (" +
60
+ CachedUniqueOutcomeTable ._ID + INTEGER_PRIMARY_KEY_TYPE + "," +
61
+ CachedUniqueOutcomeTable .COLUMN_NAME_NOTIFICATION_ID + TEXT_TYPE + "," +
62
+ CachedUniqueOutcomeTable .COLUMN_NAME_NAME + TEXT_TYPE +
63
+ ");" ;
64
+
65
+
66
+ public static final String SQL_CREATE_UNIQUE_OUTCOME_ENTRIES_V2 =
67
+ "CREATE TABLE " + CachedUniqueOutcomeTable .TABLE_NAME_V2 + " (" +
38
68
CachedUniqueOutcomeTable ._ID + INTEGER_PRIMARY_KEY_TYPE + "," +
39
69
CachedUniqueOutcomeTable .COLUMN_CHANNEL_INFLUENCE_ID + TEXT_TYPE + "," +
40
70
CachedUniqueOutcomeTable .COLUMN_CHANNEL_TYPE + TEXT_TYPE + "," +
41
71
CachedUniqueOutcomeTable .COLUMN_NAME_NAME + TEXT_TYPE +
42
72
");" ;
43
73
74
+ /**
75
+ * On the outcome table this adds the new weight column and drops params column.
76
+ */
77
+ public void upgradeOutcomeTableRevision1To2 (SQLiteDatabase db ) {
78
+ String commonColumns = OutcomeEventsTable ._ID + "," +
79
+ OutcomeEventsTable .COLUMN_NAME_SESSION + "," +
80
+ OutcomeEventsTable .COLUMN_NAME_NOTIFICATION_IDS + "," +
81
+ OutcomeEventsTable .COLUMN_NAME_NAME + "," +
82
+ OutcomeEventsTable .COLUMN_NAME_TIMESTAMP ;
83
+ try {
84
+ // Since SQLite does not support dropping a column we need to:
85
+ // 1. Create a temptable
86
+ // 2. Copy outcome table into it
87
+ // 3. Drop the outcome table
88
+ // 4. Recreate it with the correct fields
89
+ // 5. Copy the temptable rows back into the new outcome table
90
+ // 6. Drop the temptable.
91
+ db .execSQL ("BEGIN TRANSACTION;" );
92
+ db .execSQL ("CREATE TEMPORARY TABLE outcome_backup(" + commonColumns + ");" );
93
+ db .execSQL ("INSERT INTO outcome_backup SELECT " + commonColumns + " FROM outcome;" );
94
+ db .execSQL ("DROP TABLE outcome;" );
95
+ db .execSQL (SQL_CREATE_OUTCOME_ENTRIES_V2 );
96
+ // Not converting weight from param here, just set to zero.
97
+ // 3.12.1 quickly replaced 3.12.0 so converting cache isn't critical.
98
+ db .execSQL ("INSERT INTO outcome (" + commonColumns + ", weight) SELECT " + commonColumns + ", 0 FROM outcome_backup;" );
99
+ db .execSQL ("DROP TABLE outcome_backup;" );
100
+ } catch (SQLiteException e ) {
101
+ e .printStackTrace ();
102
+ } finally {
103
+ db .execSQL ("COMMIT;" );
104
+ }
105
+ }
106
+
44
107
/**
45
108
* On the outcome table rename session column to notification influence type
46
109
* Add columns for iam ids and iam influence type
@@ -66,7 +129,7 @@ public void upgradeOutcomeTableRevision2To3(SQLiteDatabase db) {
66
129
// 4. Drop altered table
67
130
db .execSQL ("BEGIN TRANSACTION;" );
68
131
db .execSQL ("ALTER TABLE " + OutcomeEventsTable .TABLE_NAME + " RENAME TO " + auxOutcomeTableName + ";" );
69
- db .execSQL (getSqlCreateOutcomeEntries () );
132
+ db .execSQL (SQL_CREATE_OUTCOME_ENTRIES_V3 );
70
133
db .execSQL ("INSERT INTO " + OutcomeEventsTable .TABLE_NAME + "(" + commonColumnsWithNewSessionColumn + ")" +
71
134
" SELECT " + commonColumnsWithSessionColumn + " FROM " + auxOutcomeTableName + ";" );
72
135
db .execSQL ("DROP TABLE " + auxOutcomeTableName + ";" );
@@ -89,7 +152,7 @@ public void upgradeCacheOutcomeTableRevision1To2(SQLiteDatabase db) {
89
152
String commonColumnsWithNotificationIdColumn = commonColumns + "," + CachedUniqueOutcomeTable .COLUMN_NAME_NOTIFICATION_ID ;
90
153
String commonColumnsWithNewInfluenceIdColumn = commonColumns + "," + CachedUniqueOutcomeTable .COLUMN_CHANNEL_INFLUENCE_ID ;
91
154
92
- String oldCacheUniqueOutcomeTable = CachedUniqueOutcomeTable .OLD_TABLE_NAME ;
155
+ String oldCacheUniqueOutcomeTable = CachedUniqueOutcomeTable .TABLE_NAME_V1 ;
93
156
try {
94
157
// Since SQLite does not support dropping a column we need to:
95
158
// See https://www.techonthenet.com/sqlite/tables/alter_table.php
@@ -98,10 +161,10 @@ public void upgradeCacheOutcomeTableRevision1To2(SQLiteDatabase db) {
98
161
// 3. Copy data to new table
99
162
// 4. Drop altered table
100
163
db .execSQL ("BEGIN TRANSACTION;" );
101
- db .execSQL (getSqlCreateUniqueOutcomeEntries () );
102
- db .execSQL ("INSERT INTO " + CachedUniqueOutcomeTable .TABLE_NAME + "(" + commonColumnsWithNewInfluenceIdColumn + ")" +
164
+ db .execSQL (SQL_CREATE_UNIQUE_OUTCOME_ENTRIES_V2 );
165
+ db .execSQL ("INSERT INTO " + CachedUniqueOutcomeTable .TABLE_NAME_V2 + "(" + commonColumnsWithNewInfluenceIdColumn + ")" +
103
166
" SELECT " + commonColumnsWithNotificationIdColumn + " FROM " + oldCacheUniqueOutcomeTable + ";" );
104
- db .execSQL ("UPDATE " + CachedUniqueOutcomeTable .TABLE_NAME +
167
+ db .execSQL ("UPDATE " + CachedUniqueOutcomeTable .TABLE_NAME_V2 +
105
168
" SET " + CachedUniqueOutcomeTable .COLUMN_CHANNEL_TYPE + " = \' " + OSInfluenceChannel .NOTIFICATION .toString () + "\' ;" );
106
169
db .execSQL ("DROP TABLE " + oldCacheUniqueOutcomeTable + ";" );
107
170
} catch (SQLiteException e ) {
@@ -111,17 +174,4 @@ public void upgradeCacheOutcomeTableRevision1To2(SQLiteDatabase db) {
111
174
}
112
175
}
113
176
114
- /**
115
- * Testing mock purposes
116
- */
117
- public String getSqlCreateOutcomeEntries () {
118
- return SQL_CREATE_OUTCOME_ENTRIES ;
119
- }
120
-
121
- /**
122
- * Testing mock purposes
123
- */
124
- public String getSqlCreateUniqueOutcomeEntries () {
125
- return SQL_CREATE_UNIQUE_OUTCOME_ENTRIES ;
126
- }
127
177
}
0 commit comments