diff --git a/src/novoda/lib/sqliteprovider/provider/SQLiteProvider.java b/src/novoda/lib/sqliteprovider/provider/SQLiteProvider.java index b3180cf..eb95e45 100644 --- a/src/novoda/lib/sqliteprovider/provider/SQLiteProvider.java +++ b/src/novoda/lib/sqliteprovider/provider/SQLiteProvider.java @@ -50,8 +50,8 @@ public Uri insert(Uri uri, ContentValues initialValues) { initialValues) : new ContentValues(); if (UriUtils.hasParent(uri)){ - if (!insertValues.containsKey(UriUtils.getParentName(uri)+"_id")){ - insertValues.put(UriUtils.getParentName(uri)+"_id", UriUtils.getParentId(uri)); + if (!insertValues.containsKey(UriUtils.getParentId(uri)+"_id")){ + insertValues.put(UriUtils.getParentColumnName(uri)+"_id", UriUtils.getParentId(uri)); } } SQLiteDatabase database = getWritableDatabase(); @@ -94,7 +94,7 @@ public Cursor query(Uri uri, String[] projection, String selection, builder.appendWhere(ID + "=" + uri.getLastPathSegment()); } else { if (UriUtils.hasParent(uri)) { - builder.appendWhereEscapeString(UriUtils.getParentName(uri) + builder.appendWhereEscapeString(UriUtils.getParentColumnName(uri) + ID + "=" + UriUtils.getParentId(uri)); } } diff --git a/src/novoda/lib/sqliteprovider/util/UriInspector.java b/src/novoda/lib/sqliteprovider/util/UriInspector.java new file mode 100644 index 0000000..77006c0 --- /dev/null +++ b/src/novoda/lib/sqliteprovider/util/UriInspector.java @@ -0,0 +1,14 @@ +package novoda.lib.sqliteprovider.util; + +import android.net.Uri; + +public class UriInspector { + + public UriInspector() { + } + + public UriToSqlAttributes parse(Uri uri) { + return new UriToSqlAttributes(uri); + } + +} diff --git a/src/novoda/lib/sqliteprovider/util/UriToSqlAttributes.java b/src/novoda/lib/sqliteprovider/util/UriToSqlAttributes.java new file mode 100644 index 0000000..dd19801 --- /dev/null +++ b/src/novoda/lib/sqliteprovider/util/UriToSqlAttributes.java @@ -0,0 +1,20 @@ +package novoda.lib.sqliteprovider.util; + +import java.util.List; + +import android.net.Uri; + +public class UriToSqlAttributes { + + public Uri uri; + public UriToSqlAttributes(Uri uri) { + this.uri = uri; + } + + public boolean hasWhereClauseInQuery() { + if (uri.toString().split("\\?").length >=2){ + return true; + } + return false; + } +} diff --git a/src/novoda/lib/sqliteprovider/util/UriUtils.java b/src/novoda/lib/sqliteprovider/util/UriUtils.java index 1271894..16e6797 100644 --- a/src/novoda/lib/sqliteprovider/util/UriUtils.java +++ b/src/novoda/lib/sqliteprovider/util/UriUtils.java @@ -55,6 +55,14 @@ public static boolean isDir(final Uri uri) { return isDir("", uri); } + public static boolean isDir(final String rootPath, final Uri uri) { + return !isItem(rootPath, uri); + } + + public static boolean isItem(final Uri uri) { + return isItem("", uri); + } + public static boolean isItem(final String rootPath, final Uri uri) { final List segments = uri.getPathSegments(); if (rootPath != null && !rootPath.equals("")) { @@ -62,16 +70,8 @@ public static boolean isItem(final String rootPath, final Uri uri) { } else { return ((segments.size() % 2) == 0); } - }; - - public static boolean isItem(final Uri uri) { - return isItem("", uri); } - public static boolean isDir(final String rootPath, final Uri uri) { - return !isItem(rootPath, uri); - }; - public static String getItemDirID(final Uri uri) { return getItemDirID("", uri); } @@ -105,7 +105,7 @@ public static boolean hasParent(Uri uri){ - public static String getParentName(Uri uri){ + public static String getParentColumnName(Uri uri){ if (hasParent(uri)){ if (!isNumberedEntryWithinCollection(uri)){ return uri.getPathSegments().get((uri.getPathSegments().size()-1)-2); diff --git a/tests/java/novoda/lib/sqliteprovider/util/SQLFileTest.java b/tests/java/novoda/lib/sqliteprovider/util/SQLFileTest.java index 2ddfffa..eebc6bb 100644 --- a/tests/java/novoda/lib/sqliteprovider/util/SQLFileTest.java +++ b/tests/java/novoda/lib/sqliteprovider/util/SQLFileTest.java @@ -24,14 +24,14 @@ public class SQLFileTest extends AndroidTestCase { @Test public void testSimpleSQLFile() throws Exception { - //BufferedReader reader = new BufferedReader( new InputStreamReader(getClass().getResourceAsStream("/create.sql"))); - //new InputStreamReader(new FileInputStream("create.sql"))); -// List statements = SQLFile.statementsFrom(reader); -// List expected = new ArrayList(); -// expected.add(one); -// expected.add(two); -// assertSameList(statements, expected); -// assertNotNull(this.getContext().getAssets()); + BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/create.sql"))); + new InputStreamReader(new FileInputStream("create.sql")); + List statements = SQLFile.statementsFrom(reader); + List expected = new ArrayList(); + expected.add(one); + expected.add(two); + assertSameList(statements, expected); + assertNotNull(this.getContext().getAssets()); } private void assertSameList(List first, List second) { diff --git a/tests/java/novoda/lib/sqliteprovider/util/ShadowAndroidTestCase.java b/tests/java/novoda/lib/sqliteprovider/util/ShadowAndroidTestCase.java index 6ebe411..4fe51f4 100644 --- a/tests/java/novoda/lib/sqliteprovider/util/ShadowAndroidTestCase.java +++ b/tests/java/novoda/lib/sqliteprovider/util/ShadowAndroidTestCase.java @@ -15,6 +15,4 @@ public class ShadowAndroidTestCase { public final Context getContext() { return Robolectric.application.getApplicationContext(); } - - } diff --git a/tests/java/novoda/lib/sqliteprovider/util/UriToSqlAttributesInspectorTest.java b/tests/java/novoda/lib/sqliteprovider/util/UriToSqlAttributesInspectorTest.java new file mode 100644 index 0000000..16404e4 --- /dev/null +++ b/tests/java/novoda/lib/sqliteprovider/util/UriToSqlAttributesInspectorTest.java @@ -0,0 +1,38 @@ +package novoda.lib.sqliteprovider.util; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import android.net.Uri; + +import com.xtremelabs.robolectric.RobolectricTestRunner; + + +@RunWith(RobolectricTestRunner.class) +public class UriToSqlAttributesInspectorTest { + + private UriInspector uriInspector = new UriInspector();; + private UriToSqlAttributes attrs = null; + + private void setup() { + uriInspector = new UriInspector(); + } + + @Test + public void testUriInspectorCreationBehaviour(){ + attrs = uriInspector.parse(Uri.parse("content://test.com/item/1")); + assertEquals("content://test.com/item/1", attrs.uri.toString()); + } + + @Test + public void testHasWhereClauseInQuery(){ + attrs = uriInspector.parse(Uri.parse("content://test.com/item/1")); + assertFalse(attrs.hasWhereClauseInQuery()); + attrs = uriInspector.parse(Uri.parse("content://test.com/tableName?groupBy=col&having=value")); + assertTrue(attrs.hasWhereClauseInQuery()); + } +} \ No newline at end of file diff --git a/tests/java/novoda/lib/sqliteprovider/util/UriUtilsLocalTest.java b/tests/java/novoda/lib/sqliteprovider/util/UriUtilsLocalTest.java index f31ee82..ceb039f 100644 --- a/tests/java/novoda/lib/sqliteprovider/util/UriUtilsLocalTest.java +++ b/tests/java/novoda/lib/sqliteprovider/util/UriUtilsLocalTest.java @@ -65,23 +65,23 @@ public void testGettingRowIds() { @Test public void testGettingParentDetails(){ Uri uri = Uri.parse("content://test.com"); - assertEquals("",UriUtils.getParentName(uri)); + assertEquals("",UriUtils.getParentColumnName(uri)); assertEquals("",UriUtils.getParentId(uri)); assertEquals(false,UriUtils.hasParent(uri)); uri = Uri.parse("content://test.com/parent/1/child"); - assertEquals("parent",UriUtils.getParentName(uri)); + assertEquals("parent",UriUtils.getParentColumnName(uri)); assertEquals("1",UriUtils.getParentId(uri)); assertEquals(true,UriUtils.hasParent(uri)); uri = Uri.parse("content://test.com/parent/1/child/6"); - assertEquals("parent",UriUtils.getParentName(uri)); + assertEquals("parent",UriUtils.getParentColumnName(uri)); assertEquals("1",UriUtils.getParentId(uri)); assertEquals(true,UriUtils.hasParent(uri)); uri = Uri.parse("content://test.com/parent/1/child/6/subchild"); - assertEquals("child",UriUtils.getParentName(uri)); + assertEquals("child",UriUtils.getParentColumnName(uri)); assertEquals("6",UriUtils.getParentId(uri)); assertEquals(true,UriUtils.hasParent(uri)); uri = Uri.parse("content://test.com/parent/1/child/6/subchild/3"); - assertEquals("child",UriUtils.getParentName(uri)); + assertEquals("child",UriUtils.getParentColumnName(uri)); assertEquals("6",UriUtils.getParentId(uri)); assertEquals(true,UriUtils.hasParent(uri)); }