SQL prefixes should be case-insensitive
The new SQL prefix scanner failed to convert the collected prefix to
upper-case. This meant that lower-case SQL commands were not
correctly categorized. This has been fixed.
Additional unit tests have been added to test the scanner.
Test : atest
* FrameworksCoreTests:android.database
* CtsDatabaseTestCases
Flag: android.database.sqlite.simple_sql_comment_scanner
Bug: 329118560
Change-Id: Idc2980bcf4eb49a0a204ae0cb13748aa3027ede5
diff --git a/core/java/android/database/DatabaseUtils.java b/core/java/android/database/DatabaseUtils.java
index 7aa0349..3c4307c 100644
--- a/core/java/android/database/DatabaseUtils.java
+++ b/core/java/android/database/DatabaseUtils.java
@@ -1671,7 +1671,7 @@
return null;
}
final int eos = Math.min(n+3, end);
- return sql.substring(n, eos);
+ return sql.substring(n, eos).toUpperCase(Locale.ROOT);
}
/**
diff --git a/core/tests/coretests/src/android/database/DatabaseUtilsTest.java b/core/tests/coretests/src/android/database/DatabaseUtilsTest.java
index c9cb2cc..e25fdf9 100644
--- a/core/tests/coretests/src/android/database/DatabaseUtilsTest.java
+++ b/core/tests/coretests/src/android/database/DatabaseUtilsTest.java
@@ -90,6 +90,12 @@
assertEquals(ddl, getSqlStatementType("ALTER TABLE t1 ADD COLUMN j int"));
assertEquals(ddl, getSqlStatementType("CREATE TABLE t1 (i int)"));
+ // Verify that the answers are case-insensitive
+ assertEquals(sel, getSqlStatementType("select"));
+ assertEquals(sel, getSqlStatementType("sElect"));
+ assertEquals(sel, getSqlStatementType("sELECT"));
+ assertEquals(sel, getSqlStatementType("seLECT"));
+
// Short statements, leading comments, and WITH are decoded to "other" in the public API.
final int othr = STATEMENT_OTHER;
assertEquals(othr, getSqlStatementType("SE"));