@@ -19,6 +19,7 @@ import org.odk.collect.db.sqlite.SQLiteDatabaseExt.doesColumnExist
19
19
import org.odk.collect.db.sqlite.SQLiteDatabaseExt.getColumnNames
20
20
import org.odk.collect.db.sqlite.SQLiteDatabaseExt.query
21
21
import org.odk.collect.db.sqlite.SynchronizedDatabaseConnection
22
+ import org.odk.collect.entities.javarosa.parse.EntityItemElement
22
23
import org.odk.collect.entities.storage.EntitiesRepository
23
24
import org.odk.collect.entities.storage.Entity
24
25
@@ -156,7 +157,7 @@ class DatabaseEntitiesRepository(context: Context, dbPath: String) : EntitiesRep
156
157
return emptyList()
157
158
}
158
159
159
- return query (list, null )
160
+ return queryWithAttachedRowId (list, null )
160
161
}
161
162
162
163
override fun getCount (list : String ): Int {
@@ -205,43 +206,24 @@ class DatabaseEntitiesRepository(context: Context, dbPath: String) : EntitiesRep
205
206
}
206
207
207
208
override fun query (list : String , query : Query ? ): List <Entity .Saved > {
208
- return if (query == null ) {
209
- databaseConnection.withConnection {
210
- readableDatabase
211
- .rawQuery(
212
- """
213
- SELECT *, i.$ROW_ID
214
- FROM "$list " e, "${getRowIdTableName(list)} " i
215
- WHERE e._id = i._id
216
- ORDER BY i.$ROW_ID
217
- """ .trimIndent(),
218
- null
219
- )
220
- }
221
- } else {
222
- databaseConnection.withConnection {
223
- readableDatabase
224
- .rawQuery(
225
- """
226
- SELECT *, i.$ROW_ID
227
- FROM "$list " e, "${getRowIdTableName(list)} " i
228
- WHERE e._id = i._id AND ${query.selection}
229
- ORDER BY i.$ROW_ID
230
- """ .trimIndent(),
231
- query.selectionArgs
232
- )
209
+ return queryWithAttachedRowId(list, query?.copyWithAdjustedColumns { columnName ->
210
+ when (columnName) {
211
+ EntityItemElement .ID -> EntitiesTable .COLUMN_ID
212
+ EntityItemElement .LABEL -> EntitiesTable .COLUMN_LABEL
213
+ EntityItemElement .VERSION -> EntitiesTable .COLUMN_VERSION
214
+ else -> {
215
+ EntitiesTable .getPropertyColumn(columnName)
216
+ }
233
217
}
234
- }.foldAndClose {
235
- mapCursorRowToEntity(it, it.getInt(ROW_ID ))
236
- }
218
+ })
237
219
}
238
220
239
221
override fun getById (list : String , id : String ): Entity .Saved ? {
240
222
if (! listExists(list)) {
241
223
return null
242
224
}
243
225
244
- return query (list, Query .Eq (EntitiesTable .COLUMN_ID , id)).firstOrNull()
226
+ return queryWithAttachedRowId (list, Query .Eq (EntitiesTable .COLUMN_ID , id)).firstOrNull()
245
227
}
246
228
247
229
override fun getAllByProperty (
@@ -258,12 +240,12 @@ class DatabaseEntitiesRepository(context: Context, dbPath: String) : EntitiesRep
258
240
}
259
241
260
242
return if (propertyExists) {
261
- query (
243
+ queryWithAttachedRowId (
262
244
list,
263
245
Query .Eq (EntitiesTable .getPropertyColumn(property), value)
264
246
)
265
247
} else if (value == " " ) {
266
- query (list, null )
248
+ queryWithAttachedRowId (list, null )
267
249
} else {
268
250
emptyList()
269
251
}
@@ -274,7 +256,39 @@ class DatabaseEntitiesRepository(context: Context, dbPath: String) : EntitiesRep
274
256
return null
275
257
}
276
258
277
- return query(list, Query .Eq (" i.$ROW_ID " , (index + 1 ).toString())).firstOrNull()
259
+ return queryWithAttachedRowId(list, Query .Eq (" i.$ROW_ID " , (index + 1 ).toString())).firstOrNull()
260
+ }
261
+
262
+ private fun queryWithAttachedRowId (list : String , query : Query ? ): List <Entity .Saved > {
263
+ return if (query == null ) {
264
+ databaseConnection.withConnection {
265
+ readableDatabase
266
+ .rawQuery(
267
+ """
268
+ SELECT *, i.$ROW_ID
269
+ FROM "$list " e, "${getRowIdTableName(list)} " i
270
+ WHERE e._id = i._id
271
+ ORDER BY i.$ROW_ID
272
+ """ .trimIndent(),
273
+ null
274
+ )
275
+ }
276
+ } else {
277
+ databaseConnection.withConnection {
278
+ readableDatabase
279
+ .rawQuery(
280
+ """
281
+ SELECT *, i.$ROW_ID
282
+ FROM "$list " e, "${getRowIdTableName(list)} " i
283
+ WHERE e._id = i._id AND ${query.selection}
284
+ ORDER BY i.$ROW_ID
285
+ """ .trimIndent(),
286
+ query.selectionArgs
287
+ )
288
+ }
289
+ }.foldAndClose {
290
+ mapCursorRowToEntity(it, it.getInt(ROW_ID ))
291
+ }
278
292
}
279
293
280
294
/* *
0 commit comments