[ https://issues.apache.org/jira/browse/PHOENIX-7462?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Viraj Jasani reassigned PHOENIX-7462: ------------------------------------- Assignee: Viraj Jasani > Single row Atomic Upsert/Delete returning result should return ResultSet > ------------------------------------------------------------------------ > > Key: PHOENIX-7462 > URL: https://issues.apache.org/jira/browse/PHOENIX-7462 > Project: Phoenix > Issue Type: Improvement > Reporter: Viraj Jasani > Assignee: Viraj Jasani > Priority: Major > > PHOENIX-7398 introduces new PhoenixStatement API to return row for > Atomic/Conditional Upserts. Phoenix already supports Upserts as Atomic > operation by using ON DUPLICATE KEY clause. > Similarly, PHOENIX-7411 and PHOENIX-7434 introduce Atomic Delete support for > the single row deletion. It returns result (row) back to the client (using > new API) only if the given client initiated Delete operation deleted the row > when the row was alive. In the context of atomicity, this means that the > delete operation is already idempotent and will continue to be idempotent, > however the client that was able to successfully delete the row by taking > lock on the live row (row without delete marker) is expected to be the only > client that can retrieve the old row result back. > The purpose of this Jira is to update the API signature for the > PhoenixStatement API such that the abstract level ResultSet object can be > returned for the returned row instead of Tuple object. > *Old API signature:* > {code:java} > /** > * Executes the given SQL statement similar to JDBC API executeUpdate() but > also returns the > * updated or non-updated row as Result object back to the client. This must > be used with > * auto-commit Connection. This makes the operation atomic. > * If the row is successfully updated, return the updated row, otherwise if > the row > * cannot be updated, return non-updated row. > * > * @param sql The SQL DML statement, UPSERT or DELETE for Phoenix. > * @return The pair of int and Tuple, where int represents value 1 for > successful row > * update and 0 for non-successful row update, and Tuple represents the state > of the row. > * @throws SQLException If the statement cannot be executed. > */ > public Pair<Integer, Tuple> executeUpdateReturnRow(String sql) throws > SQLException {{code} > *New API signature:* > {code:java} > /** > * Executes the given SQL statement similar to JDBC API executeUpdate() but > also returns the > * updated or non-updated row as ResultSet object back to the client. This > must be used with > * auto-commit Connection. This makes the operation atomic. > * If the row is successfully updated, return the updated row, otherwise if > the row > * cannot be updated, return non-updated row. > * > * @param sql The SQL DML statement, UPSERT or DELETE for Phoenix. > * @return The map entry pair of int and ResultSet, where int represents > value 1 for successful row > * update and 0 for non-successful row update, and ResultSet represents the > state of the row. > * @throws SQLException If the statement cannot be executed. > */ > public Map.Entry<Integer, ResultSet> executeAtomicUpdateReturnRow(String sql) > throws SQLException { {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)