[automerger] Merge "Add test for table prefixes" into oc-mr1-support-27.0-dev am: 8d3cbc6642 am: 62750231f5
Change-Id: I7a2c5ef6e49c4a9e5e4e7f3d767496b79753ff03
diff --git a/room/compiler/src/test/kotlin/android/arch/persistence/room/parser/SqlParserTest.kt b/room/compiler/src/test/kotlin/android/arch/persistence/room/parser/SqlParserTest.kt
index 1d31354..a1d03b6 100644
--- a/room/compiler/src/test/kotlin/android/arch/persistence/room/parser/SqlParserTest.kt
+++ b/room/compiler/src/test/kotlin/android/arch/persistence/room/parser/SqlParserTest.kt
@@ -17,6 +17,7 @@
package android.arch.persistence.room.parser
import org.hamcrest.CoreMatchers.`is`
+import org.hamcrest.CoreMatchers.not
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Test
import org.junit.runner.RunWith
@@ -99,6 +100,36 @@
}
@Test
+ fun tablePrefixInInsert_set() {
+ // this is an invalid query, b/64539805
+ val query = SqlParser.parse("UPDATE trips SET trips.title=:title")
+ assertThat(query.errors, not(emptyList()))
+ }
+
+ @Test
+ fun tablePrefixInInsert_where() {
+ val query = SqlParser.parse("UPDATE trips SET title=:title WHERE trips.id=:id")
+ assertThat(query.errors, `is`(emptyList()))
+ }
+
+ @Test
+ fun tablePrefixInSelect_projection() {
+ val query = SqlParser.parse("SELECT a.name, b.last_name from user a, book b")
+ assertThat(query.errors, `is`(emptyList()))
+ assertThat(query.tables, `is`(setOf(Table("user", "a"),
+ Table("book", "b"))))
+ }
+
+ @Test
+ fun tablePrefixInSelect_where() {
+ val query = SqlParser.parse("SELECT a.name, b.last_name from user a, book b" +
+ " WHERE a.name = b.name")
+ assertThat(query.errors, `is`(emptyList()))
+ assertThat(query.tables, `is`(setOf(Table("user", "a"),
+ Table("book", "b"))))
+ }
+
+ @Test
fun findBindVariables() {
assertVariables("select * from users")
assertVariables("select * from users where name like ?", "?")
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/UserDao.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/UserDao.java
index 0b184a9..f601a86 100644
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/UserDao.java
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/dao/UserDao.java
@@ -29,6 +29,7 @@
import android.arch.persistence.room.Update;
import android.arch.persistence.room.integration.testapp.TestDatabase;
import android.arch.persistence.room.integration.testapp.vo.AvgWeightByAge;
+import android.arch.persistence.room.integration.testapp.vo.NameAndLastName;
import android.arch.persistence.room.integration.testapp.vo.User;
import android.database.Cursor;
@@ -208,6 +209,9 @@
@Query("SELECT COUNT(*) from user")
public abstract Integer getUserCount();
+ @Query("SELECT u.mName, u.mLastName from user u where mId = :id")
+ public abstract NameAndLastName getNameAndLastName(int id);
+
@Transaction
public void insertBothByAnnotation(final User a, final User b) {
insert(a);
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/SimpleEntityReadWriteTest.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/SimpleEntityReadWriteTest.java
index f8049f3..c5015f2 100644
--- a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/SimpleEntityReadWriteTest.java
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/test/SimpleEntityReadWriteTest.java
@@ -35,6 +35,7 @@
import android.arch.persistence.room.integration.testapp.dao.UserDao;
import android.arch.persistence.room.integration.testapp.dao.UserPetDao;
import android.arch.persistence.room.integration.testapp.vo.BlobEntity;
+import android.arch.persistence.room.integration.testapp.vo.NameAndLastName;
import android.arch.persistence.room.integration.testapp.vo.Pet;
import android.arch.persistence.room.integration.testapp.vo.Product;
import android.arch.persistence.room.integration.testapp.vo.User;
@@ -524,4 +525,13 @@
assertTrue("SQLiteConstraintException expected", caught);
assertThat(mUserDao.count(), is(0));
}
+
+ @Test
+ public void tablePrefix_simpleSelect() {
+ User user = TestUtil.createUser(3);
+ mUserDao.insert(user);
+ NameAndLastName result = mUserDao.getNameAndLastName(3);
+ assertThat(result.getName(), is(user.getName()));
+ assertThat(result.getLastName(), is(user.getLastName()));
+ }
}
diff --git a/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/vo/NameAndLastName.java b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/vo/NameAndLastName.java
new file mode 100644
index 0000000..29e2554
--- /dev/null
+++ b/room/integration-tests/testapp/src/androidTest/java/android/arch/persistence/room/integration/testapp/vo/NameAndLastName.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.arch.persistence.room.integration.testapp.vo;
+
+
+public class NameAndLastName {
+ private String mName;
+ private String mLastName;
+
+ public NameAndLastName(String name, String lastName) {
+ mName = name;
+ mLastName = lastName;
+ }
+
+ public String getName() {
+ return mName;
+ }
+
+ public String getLastName() {
+ return mLastName;
+ }
+}