diff options
| author | Android (Google) Code Review <android-gerrit@google.com> | 2009-05-27 11:01:30 -0700 |
|---|---|---|
| committer | The Android Open Source Project <initial-contribution@android.com> | 2009-05-27 11:01:30 -0700 |
| commit | 158d83054fdb449b4d23317d7b159b76f7ef76a5 (patch) | |
| tree | 2b71abecf0fa8c9fdf75380719800769f4ad20e5 | |
| parent | c5261874b7ad8cfe1e63726a91858b0c2a434578 (diff) | |
| parent | a64f5f61677cf4aa3bf871c87be950bb85c2aeeb (diff) | |
| download | frameworks_base-158d83054fdb449b4d23317d7b159b76f7ef76a5.zip frameworks_base-158d83054fdb449b4d23317d7b159b76f7ef76a5.tar.gz frameworks_base-158d83054fdb449b4d23317d7b159b76f7ef76a5.tar.bz2 | |
am a64f5f61: Merge change 1124 into donut
Merge commit 'a64f5f61677cf4aa3bf871c87be950bb85c2aeeb'
* commit 'a64f5f61677cf4aa3bf871c87be950bb85c2aeeb':
Fix SQLite limit issue.
| -rw-r--r-- | core/java/android/database/sqlite/SQLiteQueryBuilder.java | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/core/java/android/database/sqlite/SQLiteQueryBuilder.java b/core/java/android/database/sqlite/SQLiteQueryBuilder.java index 5c05ea0..af54a71 100644 --- a/core/java/android/database/sqlite/SQLiteQueryBuilder.java +++ b/core/java/android/database/sqlite/SQLiteQueryBuilder.java @@ -18,16 +18,15 @@ package android.database.sqlite; import android.database.Cursor; import android.database.DatabaseUtils; -import android.database.sqlite.SQLiteDatabase; import android.provider.BaseColumns; import android.text.TextUtils; -import android.util.Config; import android.util.Log; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.Map.Entry; +import java.util.regex.Pattern; /** * This is a convience class that helps build SQL queries to be sent to @@ -36,10 +35,12 @@ import java.util.Map.Entry; public class SQLiteQueryBuilder { private static final String TAG = "SQLiteQueryBuilder"; + private static final Pattern sLimitPattern = + Pattern.compile("\\s*\\d+\\s*(,\\s*\\d+\\s*)?"); private Map<String, String> mProjectionMap = null; private String mTables = ""; - private StringBuilder mWhereClause = new StringBuilder(64); + private final StringBuilder mWhereClause = new StringBuilder(64); private boolean mDistinct; private SQLiteDatabase.CursorFactory mFactory; @@ -169,6 +170,9 @@ public class SQLiteQueryBuilder throw new IllegalArgumentException( "HAVING clauses are only permitted when using a groupBy clause"); } + if (!TextUtils.isEmpty(limit) && !sLimitPattern.matcher(limit).matches()) { + throw new IllegalArgumentException("invalid LIMIT clauses:" + limit); + } StringBuilder query = new StringBuilder(120); @@ -187,7 +191,7 @@ public class SQLiteQueryBuilder appendClause(query, " GROUP BY ", groupBy); appendClause(query, " HAVING ", having); appendClause(query, " ORDER BY ", orderBy); - appendClauseEscapeClause(query, " LIMIT ", limit); + appendClause(query, " LIMIT ", limit); return query.toString(); } |
