You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Samarth Jain (JIRA)" <ji...@apache.org> on 2014/10/21 22:08:34 UTC
[jira] [Commented] (PHOENIX-1354) Upsert select not inserting all
the rows when using row value constructors
[ https://issues.apache.org/jira/browse/PHOENIX-1354?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14178973#comment-14178973 ]
Samarth Jain commented on PHOENIX-1354:
---------------------------------------
The row value constructor isn't getting evaluated for each row that is getting upserted.
> Upsert select not inserting all the rows when using row value constructors
> --------------------------------------------------------------------------
>
> Key: PHOENIX-1354
> URL: https://issues.apache.org/jira/browse/PHOENIX-1354
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 5.0.0, 4.2
> Reporter: Samarth Jain
> Assignee: James Taylor
> Priority: Critical
>
> {code}
> @Test
> @Test
> public void testUpsertSelectRVC() throws Exception {
> String cursorTableDDL = "CREATE TABLE IF NOT EXISTS " +
> "CURSOR_STORAGE" + " (\n" +
> "TENANT_ID VARCHAR(15) NOT NULL\n," +
> "QUERY_ID VARCHAR(15) NOT NULL,\n" +
> "CURSOR_ORDER BIGINT NOT NULL,\n" +
> "CURSORID VARBINARY " +
> "CONSTRAINT CURSOR_TABLE_PK PRIMARY KEY (TENANT_ID, QUERY_ID, CURSOR_ORDER)) "+
> "SALT_BUCKETS = 4, TTL=86400";
> String baseDataTableDDL = "CREATE TABLE IF NOT EXISTS " +
> "HISTORY_TABLE" + " (\n" +
> "TENANT_ID CHAR(15) NOT NULL,\n" +
> "PARENT_ID CHAR(15) NOT NULL,\n" +
> "CREATED_DATE DATE NOT NULL,\n" +
> "ENTITY_HISTORY_ID CHAR(15) NOT NULL,\n" +
> "DATA_TYPE VARCHAR,\n" +
> "OLDVAL_STRING VARCHAR,\n" +
> "NEWVAL_STRING VARCHAR\n" +
> "CONSTRAINT PK PRIMARY KEY(TENANT_ID, PARENT_ID, CREATED_DATE DESC, ENTITY_HISTORY_ID)) " +
> "VERSIONS = 1";
> Properties props = new Properties();
> Connection conn = DriverManager.getConnection(getUrl(), props);
> conn.createStatement().execute(cursorTableDDL);
> conn.createStatement().execute(baseDataTableDDL);
>
> String tenantId = "00DxxxxxxxxxABC";
> String dml = "UPSERT INTO HISTORY_TABLE VALUES (?, ?, ?, ?, ?, ?, ?)";
> PreparedStatement stmt = conn.prepareStatement(dml);
> for (int i = 1; i <=5; i++) {
> stmt.setString(1, tenantId);
> stmt.setString(2, "00Pxxxxxxxxxxx" + i);
> stmt.setDate(3, new Date(i));
> stmt.setString(4, "eidXXXXXXXXXXX" + i);
> stmt.setString(5, "datatype");
> stmt.setString(6, "oldv");
> stmt.setString(7, "newv");
> stmt.executeUpdate();
> }
> conn.commit();
>
> String sequenceName = "SEQU";
> conn.createStatement().execute("CREATE SEQUENCE " + sequenceName + " CACHE " + Long.MAX_VALUE);
> conn.setAutoCommit(true);
> String upsertSelect = "UPSERT INTO CURSOR_STORAGE (tenant_id, query_id, cursor_order, cursorId) SELECT ?, ?, NEXT VALUE FOR " + sequenceName + ", (TENANT_ID, PARENT_ID, CREATED_DATE, ENTITY_HISTORY_ID) FROM HISTORY_TABLE";
> stmt = conn.prepareStatement(upsertSelect);
> stmt.setString(1, tenantId);
> stmt.setString(2, "cursorqueryid");
> stmt.executeUpdate();
>
> stmt = conn.prepareStatement("select cursor_order, cursorid from cursor_storage");
> ResultSet rs = stmt.executeQuery();
> int i = 1;
> String previousCursorId = null;
> while(rs.next()) {
> assertEquals("Cursor order didn't match", i, rs.getInt(1));
> assertFalse("Cursor ids should be unequal. Failed for i = " + i, Base64.encodeBytes(rs.getBytes(2)).equals(previousCursorId));
> previousCursorId = Base64.encodeBytes(rs.getBytes(2));
> i++;
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)