[ 
https://issues.apache.org/jira/browse/PHOENIX-334?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Gabriel Reid resolved PHOENIX-334.
----------------------------------

    Resolution: Fixed

Bulk resolve of closed issues imported from GitHub. This status was reached by 
first re-opening all closed imported issues and then resolving them in bulk.

> multiple read/write SQL with autocommit off do not give correct result
> ----------------------------------------------------------------------
>
>                 Key: PHOENIX-334
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-334
>             Project: Phoenix
>          Issue Type: Task
>            Reporter: Raymond Liu
>
> when autocommit is off, since before commit, the read operation is always run 
> immediately by scan. thus the previous write operation that still not 
> committed will not affect the later read operation. 
> I think this is wrong, no matter by what level of isolation, this is the 
> wrong behavior. the statement inside the same transaction should be able to 
> access the data mutated by previous statement. 
> I see that phoenix do not provide extra transaction upon HBASE other than 
> batch. While as I understanding, that might mean concurrency or atomic is not 
> guarantied. however the order of statement should be respect? If not, auto 
> commit off mode is almost not use able.
> Though I had to agree that I seems to me a very hard task to implement this 
> on top of HBase. But it seems that it is still possible to implement? 
> a not working example : 
>         String query = "UPSERT INTO source_table(row, col1) VALUES('row1', 
> 1)";
>         PreparedStatement statement = conn.prepareStatement(query);
>         statement.executeUpdate();
>         conn.commit();
>         conn.setAutoCommit(false);
>         query = "UPSERT INTO source_table(row, col1) VALUES('row1', 100)";
>         statement = conn.prepareStatement(query);
>         statement.executeUpdate();
>         query = "UPSERT INTO dest_table(row, col1) SELECT row, col1 FROM 
> source_table WHERE col1 > 10";
>         statement = conn.prepareStatement(query);
>         statement.executeUpdate();
>         conn.commit();
>         query = "SELECT * FROM dest_table";
>         statement = conn.prepareStatement(query);
>         ResultSet rs = statement.executeQuery();
>         assertTrue(rs.next());
>         assertEquals("row1", rs.getString(1));
>         assertEquals(100, rs.getInt(2));



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to