Revert SQLiteQueryBuilder for now.

am: 6c90f1ded2

Change-Id: Ib8bfccd0d088b1a4c453b62c6527ca14cbadee41
This commit is contained in:
Jeff Sharkey
2018-12-02 11:07:55 -08:00
committed by android-build-merger
6 changed files with 1172 additions and 75 deletions

View File

@@ -261,6 +261,13 @@ public abstract class ContentResolver {
*/
public static final String QUERY_ARG_SQL_SORT_ORDER = "android:query-arg-sql-sort-order";
/** {@hide} */
public static final String QUERY_ARG_SQL_GROUP_BY = "android:query-arg-sql-group-by";
/** {@hide} */
public static final String QUERY_ARG_SQL_HAVING = "android:query-arg-sql-having";
/** {@hide} */
public static final String QUERY_ARG_SQL_LIMIT = "android:query-arg-sql-limit";
/**
* Specifies the list of columns against which to sort results. When first column values
* are identical, records are then sorted based on second column values, and so on.

View File

@@ -19,6 +19,7 @@ package android.content;
import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.ArrayMap;
import android.util.Log;
import java.util.ArrayList;
@@ -33,17 +34,21 @@ import java.util.Set;
public final class ContentValues implements Parcelable {
public static final String TAG = "ContentValues";
/** Holds the actual values */
/**
* @hide
* @deprecated kept around for lame people doing reflection
*/
@Deprecated
@UnsupportedAppUsage
private HashMap<String, Object> mValues;
private final ArrayMap<String, Object> mMap;
/**
* Creates an empty set of values using the default initial size
*/
public ContentValues() {
// Choosing a default size of 8 based on analysis of typical
// consumption by applications.
mValues = new HashMap<String, Object>(8);
mMap = new ArrayMap<>();
}
/**
@@ -52,7 +57,7 @@ public final class ContentValues implements Parcelable {
* @param size the initial size of the set of values
*/
public ContentValues(int size) {
mValues = new HashMap<String, Object>(size, 1.0f);
mMap = new ArrayMap<>(size);
}
/**
@@ -61,19 +66,24 @@ public final class ContentValues implements Parcelable {
* @param from the values to copy
*/
public ContentValues(ContentValues from) {
mValues = new HashMap<String, Object>(from.mValues);
mMap = new ArrayMap<>(from.mMap);
}
/**
* Creates a set of values copied from the given HashMap. This is used
* by the Parcel unmarshalling code.
*
* @param values the values to start with
* {@hide}
* @hide
* @deprecated kept around for lame people doing reflection
*/
@Deprecated
@UnsupportedAppUsage
private ContentValues(HashMap<String, Object> values) {
mValues = values;
private ContentValues(HashMap<String, Object> from) {
mMap = new ArrayMap<>();
mMap.putAll(from);
}
/** {@hide} */
private ContentValues(Parcel in) {
mMap = new ArrayMap<>(in.readInt());
in.readArrayMap(mMap, null);
}
@Override
@@ -81,12 +91,17 @@ public final class ContentValues implements Parcelable {
if (!(object instanceof ContentValues)) {
return false;
}
return mValues.equals(((ContentValues) object).mValues);
return mMap.equals(((ContentValues) object).mMap);
}
/** {@hide} */
public ArrayMap<String, Object> getValues() {
return mMap;
}
@Override
public int hashCode() {
return mValues.hashCode();
return mMap.hashCode();
}
/**
@@ -96,7 +111,7 @@ public final class ContentValues implements Parcelable {
* @param value the data for the value to put
*/
public void put(String key, String value) {
mValues.put(key, value);
mMap.put(key, value);
}
/**
@@ -105,7 +120,7 @@ public final class ContentValues implements Parcelable {
* @param other the ContentValues from which to copy
*/
public void putAll(ContentValues other) {
mValues.putAll(other.mValues);
mMap.putAll(other.mMap);
}
/**
@@ -115,7 +130,7 @@ public final class ContentValues implements Parcelable {
* @param value the data for the value to put
*/
public void put(String key, Byte value) {
mValues.put(key, value);
mMap.put(key, value);
}
/**
@@ -125,7 +140,7 @@ public final class ContentValues implements Parcelable {
* @param value the data for the value to put
*/
public void put(String key, Short value) {
mValues.put(key, value);
mMap.put(key, value);
}
/**
@@ -135,7 +150,7 @@ public final class ContentValues implements Parcelable {
* @param value the data for the value to put
*/
public void put(String key, Integer value) {
mValues.put(key, value);
mMap.put(key, value);
}
/**
@@ -145,7 +160,7 @@ public final class ContentValues implements Parcelable {
* @param value the data for the value to put
*/
public void put(String key, Long value) {
mValues.put(key, value);
mMap.put(key, value);
}
/**
@@ -155,7 +170,7 @@ public final class ContentValues implements Parcelable {
* @param value the data for the value to put
*/
public void put(String key, Float value) {
mValues.put(key, value);
mMap.put(key, value);
}
/**
@@ -165,7 +180,7 @@ public final class ContentValues implements Parcelable {
* @param value the data for the value to put
*/
public void put(String key, Double value) {
mValues.put(key, value);
mMap.put(key, value);
}
/**
@@ -175,7 +190,7 @@ public final class ContentValues implements Parcelable {
* @param value the data for the value to put
*/
public void put(String key, Boolean value) {
mValues.put(key, value);
mMap.put(key, value);
}
/**
@@ -185,7 +200,7 @@ public final class ContentValues implements Parcelable {
* @param value the data for the value to put
*/
public void put(String key, byte[] value) {
mValues.put(key, value);
mMap.put(key, value);
}
/**
@@ -194,7 +209,7 @@ public final class ContentValues implements Parcelable {
* @param key the name of the value to make null
*/
public void putNull(String key) {
mValues.put(key, null);
mMap.put(key, null);
}
/**
@@ -203,7 +218,7 @@ public final class ContentValues implements Parcelable {
* @return the number of values
*/
public int size() {
return mValues.size();
return mMap.size();
}
/**
@@ -214,7 +229,7 @@ public final class ContentValues implements Parcelable {
* TODO: consider exposing this new method publicly
*/
public boolean isEmpty() {
return mValues.isEmpty();
return mMap.isEmpty();
}
/**
@@ -223,14 +238,14 @@ public final class ContentValues implements Parcelable {
* @param key the name of the value to remove
*/
public void remove(String key) {
mValues.remove(key);
mMap.remove(key);
}
/**
* Removes all values.
*/
public void clear() {
mValues.clear();
mMap.clear();
}
/**
@@ -240,7 +255,7 @@ public final class ContentValues implements Parcelable {
* @return {@code true} if the value is present, {@code false} otherwise
*/
public boolean containsKey(String key) {
return mValues.containsKey(key);
return mMap.containsKey(key);
}
/**
@@ -252,7 +267,7 @@ public final class ContentValues implements Parcelable {
* was previously added with the given {@code key}
*/
public Object get(String key) {
return mValues.get(key);
return mMap.get(key);
}
/**
@@ -262,7 +277,7 @@ public final class ContentValues implements Parcelable {
* @return the String for the value
*/
public String getAsString(String key) {
Object value = mValues.get(key);
Object value = mMap.get(key);
return value != null ? value.toString() : null;
}
@@ -273,7 +288,7 @@ public final class ContentValues implements Parcelable {
* @return the Long value, or {@code null} if the value is missing or cannot be converted
*/
public Long getAsLong(String key) {
Object value = mValues.get(key);
Object value = mMap.get(key);
try {
return value != null ? ((Number) value).longValue() : null;
} catch (ClassCastException e) {
@@ -298,7 +313,7 @@ public final class ContentValues implements Parcelable {
* @return the Integer value, or {@code null} if the value is missing or cannot be converted
*/
public Integer getAsInteger(String key) {
Object value = mValues.get(key);
Object value = mMap.get(key);
try {
return value != null ? ((Number) value).intValue() : null;
} catch (ClassCastException e) {
@@ -323,7 +338,7 @@ public final class ContentValues implements Parcelable {
* @return the Short value, or {@code null} if the value is missing or cannot be converted
*/
public Short getAsShort(String key) {
Object value = mValues.get(key);
Object value = mMap.get(key);
try {
return value != null ? ((Number) value).shortValue() : null;
} catch (ClassCastException e) {
@@ -348,7 +363,7 @@ public final class ContentValues implements Parcelable {
* @return the Byte value, or {@code null} if the value is missing or cannot be converted
*/
public Byte getAsByte(String key) {
Object value = mValues.get(key);
Object value = mMap.get(key);
try {
return value != null ? ((Number) value).byteValue() : null;
} catch (ClassCastException e) {
@@ -373,7 +388,7 @@ public final class ContentValues implements Parcelable {
* @return the Double value, or {@code null} if the value is missing or cannot be converted
*/
public Double getAsDouble(String key) {
Object value = mValues.get(key);
Object value = mMap.get(key);
try {
return value != null ? ((Number) value).doubleValue() : null;
} catch (ClassCastException e) {
@@ -398,7 +413,7 @@ public final class ContentValues implements Parcelable {
* @return the Float value, or {@code null} if the value is missing or cannot be converted
*/
public Float getAsFloat(String key) {
Object value = mValues.get(key);
Object value = mMap.get(key);
try {
return value != null ? ((Number) value).floatValue() : null;
} catch (ClassCastException e) {
@@ -423,7 +438,7 @@ public final class ContentValues implements Parcelable {
* @return the Boolean value, or {@code null} if the value is missing or cannot be converted
*/
public Boolean getAsBoolean(String key) {
Object value = mValues.get(key);
Object value = mMap.get(key);
try {
return (Boolean) value;
} catch (ClassCastException e) {
@@ -451,7 +466,7 @@ public final class ContentValues implements Parcelable {
* {@code byte[]}
*/
public byte[] getAsByteArray(String key) {
Object value = mValues.get(key);
Object value = mMap.get(key);
if (value instanceof byte[]) {
return (byte[]) value;
} else {
@@ -465,7 +480,7 @@ public final class ContentValues implements Parcelable {
* @return a set of all of the keys and values
*/
public Set<Map.Entry<String, Object>> valueSet() {
return mValues.entrySet();
return mMap.entrySet();
}
/**
@@ -474,30 +489,31 @@ public final class ContentValues implements Parcelable {
* @return a set of all of the keys
*/
public Set<String> keySet() {
return mValues.keySet();
return mMap.keySet();
}
public static final Parcelable.Creator<ContentValues> CREATOR =
new Parcelable.Creator<ContentValues>() {
@SuppressWarnings({"deprecation", "unchecked"})
@Override
public ContentValues createFromParcel(Parcel in) {
// TODO - what ClassLoader should be passed to readHashMap?
HashMap<String, Object> values = in.readHashMap(null);
return new ContentValues(values);
return new ContentValues(in);
}
@Override
public ContentValues[] newArray(int size) {
return new ContentValues[size];
}
};
@Override
public int describeContents() {
return 0;
}
@SuppressWarnings("deprecation")
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeMap(mValues);
parcel.writeInt(mMap.size());
parcel.writeArrayMap(mMap);
}
/**
@@ -507,7 +523,7 @@ public final class ContentValues implements Parcelable {
@Deprecated
@UnsupportedAppUsage
public void putStringArrayList(String key, ArrayList<String> value) {
mValues.put(key, value);
mMap.put(key, value);
}
/**
@@ -518,7 +534,7 @@ public final class ContentValues implements Parcelable {
@Deprecated
@UnsupportedAppUsage
public ArrayList<String> getStringArrayList(String key) {
return (ArrayList<String>) mValues.get(key);
return (ArrayList<String>) mMap.get(key);
}
/**
@@ -528,7 +544,7 @@ public final class ContentValues implements Parcelable {
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for (String name : mValues.keySet()) {
for (String name : mMap.keySet()) {
String value = getAsString(name);
if (sb.length() > 0) sb.append(" ");
sb.append(name + "=" + value);

View File

@@ -193,8 +193,9 @@ public final class SQLiteDatabase extends SQLiteClosable {
*/
public static final int CONFLICT_NONE = 0;
/** {@hide} */
@UnsupportedAppUsage
private static final String[] CONFLICT_VALUES = new String[]
public static final String[] CONFLICT_VALUES = new String[]
{"", " OR ROLLBACK ", " OR ABORT ", " OR FAIL ", " OR IGNORE ", " OR REPLACE "};
/**

File diff suppressed because it is too large Load Diff

View File

@@ -308,6 +308,23 @@ public class ArrayUtils {
return array;
}
@SuppressWarnings("unchecked")
public static @NonNull <T> T[] concat(Class<T> kind, @Nullable T[] a, @Nullable T[] b) {
final int an = (a != null) ? a.length : 0;
final int bn = (b != null) ? b.length : 0;
if (an == 0 && bn == 0) {
if (kind == String.class) {
return (T[]) EmptyArray.STRING;
} else if (kind == Object.class) {
return (T[]) EmptyArray.OBJECT;
}
}
final T[] res = (T[]) Array.newInstance(kind, an + bn);
if (an > 0) System.arraycopy(a, 0, res, 0, an);
if (bn > 0) System.arraycopy(b, 0, res, an, bn);
return res;
}
/**
* Adds value to given array if not already present, providing set-like
* behavior.

View File

@@ -16,9 +16,8 @@
package com.android.internal.util;
import android.test.MoreAsserts;
import static org.junit.Assert.assertArrayEquals;
import java.util.Arrays;
import junit.framework.TestCase;
/**
@@ -92,29 +91,29 @@ public class ArrayUtilsTest extends TestCase {
}
public void testAppendInt() throws Exception {
MoreAsserts.assertEquals(new int[] { 1 },
assertArrayEquals(new int[] { 1 },
ArrayUtils.appendInt(null, 1));
MoreAsserts.assertEquals(new int[] { 1 },
assertArrayEquals(new int[] { 1 },
ArrayUtils.appendInt(new int[] { }, 1));
MoreAsserts.assertEquals(new int[] { 1, 2 },
assertArrayEquals(new int[] { 1, 2 },
ArrayUtils.appendInt(new int[] { 1 }, 2));
MoreAsserts.assertEquals(new int[] { 1, 2 },
assertArrayEquals(new int[] { 1, 2 },
ArrayUtils.appendInt(new int[] { 1, 2 }, 1));
}
public void testRemoveInt() throws Exception {
assertNull(ArrayUtils.removeInt(null, 1));
MoreAsserts.assertEquals(new int[] { },
assertArrayEquals(new int[] { },
ArrayUtils.removeInt(new int[] { }, 1));
MoreAsserts.assertEquals(new int[] { 1, 2, 3, },
assertArrayEquals(new int[] { 1, 2, 3, },
ArrayUtils.removeInt(new int[] { 1, 2, 3}, 4));
MoreAsserts.assertEquals(new int[] { 2, 3, },
assertArrayEquals(new int[] { 2, 3, },
ArrayUtils.removeInt(new int[] { 1, 2, 3}, 1));
MoreAsserts.assertEquals(new int[] { 1, 3, },
assertArrayEquals(new int[] { 1, 3, },
ArrayUtils.removeInt(new int[] { 1, 2, 3}, 2));
MoreAsserts.assertEquals(new int[] { 1, 2, },
assertArrayEquals(new int[] { 1, 2, },
ArrayUtils.removeInt(new int[] { 1, 2, 3}, 3));
MoreAsserts.assertEquals(new int[] { 2, 3, 1 },
assertArrayEquals(new int[] { 2, 3, 1 },
ArrayUtils.removeInt(new int[] { 1, 2, 3, 1 }, 1));
}
@@ -129,30 +128,51 @@ public class ArrayUtilsTest extends TestCase {
}
public void testAppendLong() throws Exception {
MoreAsserts.assertEquals(new long[] { 1 },
assertArrayEquals(new long[] { 1 },
ArrayUtils.appendLong(null, 1));
MoreAsserts.assertEquals(new long[] { 1 },
assertArrayEquals(new long[] { 1 },
ArrayUtils.appendLong(new long[] { }, 1));
MoreAsserts.assertEquals(new long[] { 1, 2 },
assertArrayEquals(new long[] { 1, 2 },
ArrayUtils.appendLong(new long[] { 1 }, 2));
MoreAsserts.assertEquals(new long[] { 1, 2 },
assertArrayEquals(new long[] { 1, 2 },
ArrayUtils.appendLong(new long[] { 1, 2 }, 1));
}
public void testRemoveLong() throws Exception {
assertNull(ArrayUtils.removeLong(null, 1));
MoreAsserts.assertEquals(new long[] { },
assertArrayEquals(new long[] { },
ArrayUtils.removeLong(new long[] { }, 1));
MoreAsserts.assertEquals(new long[] { 1, 2, 3, },
assertArrayEquals(new long[] { 1, 2, 3, },
ArrayUtils.removeLong(new long[] { 1, 2, 3}, 4));
MoreAsserts.assertEquals(new long[] { 2, 3, },
assertArrayEquals(new long[] { 2, 3, },
ArrayUtils.removeLong(new long[] { 1, 2, 3}, 1));
MoreAsserts.assertEquals(new long[] { 1, 3, },
assertArrayEquals(new long[] { 1, 3, },
ArrayUtils.removeLong(new long[] { 1, 2, 3}, 2));
MoreAsserts.assertEquals(new long[] { 1, 2, },
assertArrayEquals(new long[] { 1, 2, },
ArrayUtils.removeLong(new long[] { 1, 2, 3}, 3));
MoreAsserts.assertEquals(new long[] { 2, 3, 1 },
assertArrayEquals(new long[] { 2, 3, 1 },
ArrayUtils.removeLong(new long[] { 1, 2, 3, 1 }, 1));
}
public void testConcatEmpty() throws Exception {
assertArrayEquals(new Long[] {},
ArrayUtils.concat(Long.class, null, null));
assertArrayEquals(new Long[] {},
ArrayUtils.concat(Long.class, new Long[] {}, null));
assertArrayEquals(new Long[] {},
ArrayUtils.concat(Long.class, null, new Long[] {}));
assertArrayEquals(new Long[] {},
ArrayUtils.concat(Long.class, new Long[] {}, new Long[] {}));
}
public void testConcat() throws Exception {
assertArrayEquals(new Long[] { 1L },
ArrayUtils.concat(Long.class, new Long[] { 1L }, new Long[] {}));
assertArrayEquals(new Long[] { 1L },
ArrayUtils.concat(Long.class, new Long[] {}, new Long[] { 1L }));
assertArrayEquals(new Long[] { 1L, 2L },
ArrayUtils.concat(Long.class, new Long[] { 1L }, new Long[] { 2L }));
assertArrayEquals(new Long[] { 1L, 2L, 3L, 4L },
ArrayUtils.concat(Long.class, new Long[] { 1L, 2L }, new Long[] { 3L, 4L }));
}
}