summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Chan <mchan@android.com>2009-04-27 16:28:51 -0700
committerMichael Chan <mchan@android.com>2009-04-27 16:32:45 -0700
commit99c4483cd77ff96c5181fda3d6e2fcf2ea50421b (patch)
tree60fc580665a3ceac4c5353f1b59ec723bcc325a2
parent17f213bc528cf296e133e9ec9c9e0ce5dce41781 (diff)
downloadframeworks_base-99c4483cd77ff96c5181fda3d6e2fcf2ea50421b.zip
frameworks_base-99c4483cd77ff96c5181fda3d6e2fcf2ea50421b.tar.gz
frameworks_base-99c4483cd77ff96c5181fda3d6e2fcf2ea50421b.tar.bz2
Allow caller-supplied column aliases in queries even when a projection map is used.
Modified SQLiteQueryBuilder to allow caller-spplied column alias ("AS") instead restricting to the keys of the supplied projection map. This is needed for UNION queries where new columns may be created on the fly such as "1 AS flag"
-rw-r--r--core/java/android/database/sqlite/SQLiteQueryBuilder.java16
1 files changed, 12 insertions, 4 deletions
diff --git a/core/java/android/database/sqlite/SQLiteQueryBuilder.java b/core/java/android/database/sqlite/SQLiteQueryBuilder.java
index 519a81c..ab7c827 100644
--- a/core/java/android/database/sqlite/SQLiteQueryBuilder.java
+++ b/core/java/android/database/sqlite/SQLiteQueryBuilder.java
@@ -486,12 +486,20 @@ public class SQLiteQueryBuilder
String userColumn = projectionIn[i];
String column = mProjectionMap.get(userColumn);
- if (column == null) {
- throw new IllegalArgumentException(
- "Invalid column " + projectionIn[i]);
- } else {
+ if (column != null) {
projection[i] = column;
+ continue;
}
+
+ if (userColumn.contains(" AS ")
+ || userColumn.contains(" as ")) {
+ /* A column alias already exist */
+ projection[i] = userColumn;
+ continue;
+ }
+
+ throw new IllegalArgumentException("Invalid column "
+ + projectionIn[i]);
}
return projection;
} else {