Maryann Xue created PHOENIX-2815:
------------------------------------
Summary: Got wrong data using local view index on multi-tenant
tables
Key: PHOENIX-2815
URL: https://issues.apache.org/jira/browse/PHOENIX-2815
Project: Phoenix
Issue Type: Bug
Affects Versions: 4.7.0
Reporter: Maryann Xue
1. The test used stats, so this bug might be stats related.
2. Global view index does NOT have this issue.
DDL and DML:
{code}
protected void initMultiTenantTables(String index) throws SQLException {
Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
Connection conn = DriverManager.getConnection(getUrl(), props);
try {
conn.createStatement().execute(
"CREATE TABLE " + MULTI_TENANT_TABLE + " (tenant_id VARCHAR
NOT NULL, id VARCHAR NOT NULL, col0 INTEGER, col1 INTEGER, col2 INTEGER
CONSTRAINT pk PRIMARY KEY (tenant_id, id)) MULTI_TENANT=true");
PreparedStatement stmt = conn.prepareStatement(
"UPSERT INTO " + MULTI_TENANT_TABLE
+ " VALUES(?, ?, ?, ?, ?)");
DecimalFormat formatter = new DecimalFormat("0000");
for (int i = 0; i < 1000; i++) {
stmt.setString(1, "10");
stmt.setString(2, formatter.format(2 + i));
stmt.setInt(3, 3 + i);
stmt.setInt(4, 4 + i);
stmt.setInt(5, 5 + i);
stmt.execute();
}
for (int i = 0; i < 1000; i++) {
stmt.setString(1, "15");
stmt.setString(2, formatter.format(3 + i));
stmt.setInt(3, 4 + i);
stmt.setInt(4, 5 + i);
stmt.setInt(5, 6 + i);
stmt.execute();
}
for (int i = 0; i < 1000; i++) {
stmt.setString(1, "20");
stmt.setString(2, formatter.format(4 + i));
stmt.setInt(3, 5 + i);
stmt.setInt(4, 6 + i);
stmt.setInt(5, 7 + i);
stmt.execute();
}
conn.commit();
if (index != null) {
conn.createStatement().execute(
"CREATE " + index + " " + MULTI_TENANT_TABLE_INDEX
+ " ON " + MULTI_TENANT_TABLE + "(col1) INCLUDE (col0,
col2)");
conn.commit();
}
conn.close();
props.setProperty("TenantId", "10");
conn = DriverManager.getConnection(getUrl(), props);
conn.createStatement().execute("CREATE VIEW " + MULTI_TENANT_VIEW1
+ " AS select * from " + MULTI_TENANT_TABLE);
conn.commit();
if (index != null) {
conn.createStatement().execute(
"CREATE " + index + " " + MULTI_TENANT_VIEW1_INDEX
+ " ON " + MULTI_TENANT_VIEW1 + "(col0)");
conn.commit();
}
conn.close();
props.setProperty("TenantId", "20");
conn = DriverManager.getConnection(getUrl(), props);
conn.createStatement().execute("CREATE VIEW " + MULTI_TENANT_VIEW2
+ " AS select * from " + MULTI_TENANT_TABLE + " where col2
> 7");
conn.commit();
if (index != null) {
conn.createStatement().execute(
"CREATE " + index + " " + MULTI_TENANT_VIEW2_INDEX
+ " ON " + MULTI_TENANT_VIEW2 + "(col0)");
conn.commit();
}
} catch (TableAlreadyExistsException e) {
} finally {
conn.close();
}
}
{code}
SQL:
{code}
"select id, col0 from " + MULTI_TENANT_VIEW1 + " where col0 >= 1000"
{code}
ACTUAL RESULT:
{"0998", 1000},// This should not EXIST in the table at
all
{"0999", 1000},
{"1000", 1001},
{"1001", 1002}
EXPECTED:
{"0999", 1000},
{"1000", 1001},
{"1001", 1002}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)