[
https://issues.apache.org/jira/browse/PHOENIX-899?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13950406#comment-13950406
]
James Taylor commented on PHOENIX-899:
--------------------------------------
Looks like you're using an older version of Phoenix. It's only possible to
declare columns in your primary key constraint as being not null, as those are
the only ones we can currently enforce. Newer version of Phoenix would give you
an error if you try to declare a column not in the primary key constraint as
not null (if not, that's a bug).
Would it be possible for you to add "t" to your primary key constraint?
> Using BINARY type in secondary indexes fails when doing an UPSERT
> -----------------------------------------------------------------
>
> Key: PHOENIX-899
> URL: https://issues.apache.org/jira/browse/PHOENIX-899
> Project: Phoenix
> Issue Type: Bug
> Reporter: Samarth Jain
> Assignee: Samarth Jain
> Fix For: 3.0.0, 4.0.0
>
>
> {code}
> @Test
> public void testIndexCreation() throws Exception {
> Properties props = new Properties(TEST_PROPERTIES);
> Connection conn = DriverManager.getConnection(getUrl(), props);
> try {
> conn.createStatement().execute("CREATE TABLE IF NOT EXISTS t1 "
> + "( id BIGINT NOT NULL PRIMARY KEY" // INDEX_ID
> + ", t BINARY(16) NOT NULL" // INDEX_THING_ID
> + ", e BINARY(16) NOT NULL" // INDEX_EVENT_KEY
> + ", d DATE NOT NULL" // INDEX_TIMESTAMP
> + ", y BINARY(16) NULL" // INDEX_METATYPE_ID
> + ", v BINARY(16) NULL)"); // INDEX_VALUE
>
> conn.createStatement().execute("CREATE INDEX IF NOT EXISTS index1
> ON t1 (t, e, d DESC)");
> conn.createStatement().execute("CREATE INDEX IF NOT EXISTS index2
> ON t1 (t, d DESC, e)");
>
> String upsert = "UPSERT INTO t1 values (?, ?, ?, ?, ?, ?)";
> PreparedStatement stmt = conn.prepareStatement(upsert);
> stmt.setInt(1, 1);
> stmt.setBytes(2, "ABC".getBytes());
> stmt.setBytes(3, "BCD".getBytes());
> stmt.setDate(4, new Date(System.currentTimeMillis()));
> stmt.setBytes(5, "CDE".getBytes());
> stmt.setBytes(6, "BBNNB".getBytes());
> stmt.executeUpdate();
> conn.commit();
> } finally {
> conn.close();
> }
> }
> Exception:
> java.lang.IllegalArgumentException: Unsupported non nullable index type BINARY
> at
> org.apache.phoenix.util.IndexUtil.getIndexColumnDataType(IndexUtil.java:81)
> at
> org.apache.phoenix.index.IndexMaintainer.buildRowKey(IndexMaintainer.java:345)
> at
> org.apache.phoenix.index.IndexMaintainer.buildUpdateMutation(IndexMaintainer.java:391)
> at
> org.apache.phoenix.util.IndexUtil.generateIndexData(IndexUtil.java:185)
> at
> org.apache.phoenix.execute.MutationState$1.next(MutationState.java:203)
> at
> org.apache.phoenix.execute.MutationState$1.next(MutationState.java:186)
> at
> org.apache.phoenix.execute.MutationState.commit(MutationState.java:347)
> at
> org.apache.phoenix.jdbc.PhoenixConnection.commit(PhoenixConnection.java:351)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:229)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:185)
> at
> org.apache.phoenix.jdbc.PhoenixPreparedStatement.execute(PhoenixPreparedStatement.java:146)
> at
> org.apache.phoenix.jdbc.PhoenixPreparedStatement.execute(PhoenixPreparedStatement.java:151)
> {code}
--
This message was sent by Atlassian JIRA
(v6.2#6252)