[
https://issues.apache.org/jira/browse/PHOENIX-2276?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15332791#comment-15332791
]
James Taylor commented on PHOENIX-2276:
---------------------------------------
One minor fix on commit nit if you agree. How about changing this:
{code}
{+ // skip salt and viewIndexId columns.
int pkPosition = table.getBucketNum() == null ? 0 : 1;
+ pkPosition = table.getViewIndexId() != null ? ++pkPosition :
pkPosition;
{code}
to something a bit more readable like this:
{code}
{+ // skip salt and viewIndexId columns.
int pkPosition = (table.getBucketNum() == null ? 0 : 1) +
(table.getViewIndexId() == null ? 0 : 1);
{code}
I don't see anything at first glance that would break right joins, but
hopefully [~maryannxue] will.
I'd recommend committing this to master first, as the other branches will
hopefully look like master very soon. File a separate JIRA for the right join
breaking.
> Creating index on a global view on a multi-tenant table fails with NPE
> ----------------------------------------------------------------------
>
> Key: PHOENIX-2276
> URL: https://issues.apache.org/jira/browse/PHOENIX-2276
> Project: Phoenix
> Issue Type: Bug
> Reporter: Samarth Jain
> Assignee: Samarth Jain
> Labels: SFDC
> Fix For: 4.8.0
>
> Attachments: PHOENIX-2276.patch
>
>
> {code}
> @Test
> public void testCreatingIndexOnGlobalView() throws Exception {
> String baseTable = "testRowTimestampColWithViews".toUpperCase();
> String globalView = "globalView".toUpperCase();
> String globalViewIdx = "globalView_idx".toUpperCase();
> long ts = nextTimestamp();
> try (Connection conn = getConnection(ts)) {
> conn.createStatement().execute("CREATE TABLE " + baseTable + "
> (TENANT_ID CHAR(15) NOT NULL, PK2 DATE NOT NULL, PK3 INTEGER NOT NULL, KV1
> VARCHAR, KV2 VARCHAR, KV3 CHAR(15) CONSTRAINT PK PRIMARY KEY(TENANT_ID, PK2
> ROW_TIMESTAMP, PK3)) MULTI_TENANT=true");
> }
> ts = nextTimestamp();
> try (Connection conn = getConnection(ts)) {
> conn.createStatement().execute("CREATE VIEW " + globalView + " AS
> SELECT * FROM " + baseTable + " WHERE KV1 = 'KV1'");
> }
> ts = nextTimestamp();
> try (Connection conn = getConnection(ts)) {
> conn.createStatement().execute("CREATE INDEX " + globalViewIdx +
> " ON " + globalView + " (PK3 DESC, KV3) INCLUDE (KV1)");
> }
> }
> java.lang.NullPointerException
> at
> org.apache.phoenix.util.StringUtil.escapeBackslash(StringUtil.java:392)
> at
> org.apache.phoenix.compile.PostIndexDDLCompiler.compile(PostIndexDDLCompiler.java:78)
> at
> org.apache.phoenix.schema.MetaDataClient.buildIndex(MetaDataClient.java:1027)
> at
> org.apache.phoenix.schema.MetaDataClient.buildIndexAtTimeStamp(MetaDataClient.java:903)
> at
> org.apache.phoenix.schema.MetaDataClient.createIndex(MetaDataClient.java:1321)
> at
> org.apache.phoenix.compile.CreateIndexCompiler$1.execute(CreateIndexCompiler.java:95)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$3.call(PhoenixStatement.java:315)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$3.call(PhoenixStatement.java:1)
> at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:306)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1375)
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)