Skip to content

Commit 3ae9071

Browse files
committed
Added unit test for FTS generation + compatibility with old table name
1 parent 230cd7a commit 3ae9071

File tree

3 files changed

+29
-10
lines changed

3 files changed

+29
-10
lines changed
84 KB
Binary file not shown.

core/src/androidTest/java/io/snabble/sdk/ProductDatabaseTest.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,32 @@ public void testBoostedPromotionsQuery() throws Throwable {
5454
}
5555

5656
@Test
57-
public void testTextSearch() {
57+
public void testTextSearch() throws IOException, SnabbleSdk.SnabbleException {
58+
setupSdkWithDb("demoDb_1_6.sqlite3");
59+
5860
ProductDatabase productDatabase = snabbleSdk.getProductDatabase();
59-
Cursor cursor = productDatabase.searchByFoldedName("muller", null);
61+
Cursor cursor = productDatabase.searchByFoldedName("gold", null);
6062
cursor.moveToFirst();
6163
Product product = productDatabase.productAtCursor(cursor);
62-
assertEquals(product.getSku(), "1");
63-
assertEquals(product.getName(), "Müllermilch Banane 0,4l");
64+
assertEquals(product.getSku(), "31");
65+
assertEquals(product.getName(), "Goldbären 200g");
66+
cursor.close();
67+
68+
cursor = productDatabase.searchByFoldedName("foo", null);
69+
assertEquals(0, cursor.getCount());
70+
cursor.close();
71+
}
72+
73+
@Test
74+
public void testTextSearchNoFTS() throws IOException, SnabbleSdk.SnabbleException {
75+
setupSdkWithDb("demoDb_1_6_no_fts.sqlite3");
76+
77+
ProductDatabase productDatabase = snabbleSdk.getProductDatabase();
78+
Cursor cursor = productDatabase.searchByFoldedName("gold", null);
79+
cursor.moveToFirst();
80+
Product product = productDatabase.productAtCursor(cursor);
81+
assertEquals(product.getSku(), "31");
82+
assertEquals(product.getName(), "Goldbären 200g");
6483
cursor.close();
6584

6685
cursor = productDatabase.searchByFoldedName("foo", null);

core/src/main/java/io/snabble/sdk/ProductDatabase.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ private void createFTSIndexIfNecessary() {
448448

449449
synchronized (dbLock) {
450450
Cursor cursor;
451-
cursor = rawQuery("SELECT name FROM sqlite_master WHERE type='table' AND name='namesearch'", null, null);
451+
cursor = rawQuery("SELECT name FROM sqlite_master WHERE type='table' AND name='searchByName'", null, null);
452452
boolean hasFTS = cursor != null && cursor.getCount() == 1;
453453
if(cursor != null){
454454
cursor.close();
@@ -457,8 +457,8 @@ private void createFTSIndexIfNecessary() {
457457
if(!hasFTS) {
458458
db.beginTransaction();
459459

460-
exec("DROP TABLE IF EXISTS namesearch");
461-
exec("CREATE VIRTUAL TABLE namesearch USING fts4(sku TEXT, foldedName TEXT)");
460+
exec("DROP TABLE IF EXISTS searchByName");
461+
exec("CREATE VIRTUAL TABLE searchByName USING fts4(sku TEXT, foldedName TEXT)");
462462

463463
ContentValues contentValues = new ContentValues(2);
464464
cursor = rawQuery("SELECT sku, name FROM products", null, null);
@@ -467,7 +467,7 @@ private void createFTSIndexIfNecessary() {
467467
contentValues.clear();
468468
contentValues.put("sku", cursor.getString(0));
469469
contentValues.put("foldedName", StringNormalizer.normalize(cursor.getString(1)));
470-
db.insert("namesearch", null, contentValues);
470+
db.insert("searchByName", null, contentValues);
471471
}
472472
cursor.close();
473473
} else {
@@ -881,7 +881,7 @@ public Product findByName(String name) {
881881

882882
StringNormalizer.normalize(name);
883883

884-
Cursor cursor = productQuery("JOIN namesearch ns ON ns.sku = p.sku " +
884+
Cursor cursor = productQuery("JOIN searchByName ns ON ns.sku = p.sku " +
885885
"WHERE ns.foldedName MATCH ? LIMIT 1", new String[]{
886886
name
887887
}, false);
@@ -1166,7 +1166,7 @@ public void findByWeighItemIdOnline(String weighItemId,
11661166
* @param cancellationSignal Calls can be cancelled with a {@link CancellationSignal}. Can be null.
11671167
*/
11681168
public Cursor searchByFoldedName(String searchString, CancellationSignal cancellationSignal) {
1169-
return productQuery("JOIN namesearch ns ON ns.sku = p.sku " +
1169+
return productQuery("JOIN searchByName ns ON ns.sku = p.sku " +
11701170
"WHERE ns.foldedName MATCH ? " +
11711171
"AND p.weighing != " + Product.Type.PreWeighed.getDatabaseValue() + " " +
11721172
"AND p.isDeposit = 0 " +

0 commit comments

Comments
 (0)