Repository: phoenix Updated Branches: refs/heads/txn 3822f8669 -> c89119576
PHOENIX-1657 Encapsulate conn.getMetaDataCache().getTable() calls that look up tables without tenant id Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/c8911957 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/c8911957 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/c8911957 Branch: refs/heads/txn Commit: c8911957613b30f7a65f524da3d8d119556d2121 Parents: 3822f86 Author: Thomas D'Silva <twdsi...@gmail.com> Authored: Tue Apr 28 18:36:18 2015 -0700 Committer: Thomas D'Silva <twdsi...@gmail.com> Committed: Tue Apr 28 18:39:06 2015 -0700 ---------------------------------------------------------------------- .../transactions/TxPointInTimeQueryIT.java | 58 +++++++++++++++----- .../phoenix/exception/SQLExceptionCode.java | 3 +- .../apache/phoenix/execute/MutationState.java | 7 +++ 3 files changed, 52 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/c8911957/phoenix-core/src/it/java/org/apache/phoenix/transactions/TxPointInTimeQueryIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/transactions/TxPointInTimeQueryIT.java b/phoenix-core/src/it/java/org/apache/phoenix/transactions/TxPointInTimeQueryIT.java index 2a468b3..0f16696 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/transactions/TxPointInTimeQueryIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/transactions/TxPointInTimeQueryIT.java @@ -18,16 +18,16 @@ package org.apache.phoenix.transactions; import static org.apache.phoenix.util.TestUtil.TEST_PROPERTIES; -import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import java.sql.Connection; import java.sql.DriverManager; -import java.sql.ResultSet; +import java.sql.SQLException; import java.util.Properties; import org.apache.phoenix.end2end.BaseClientManagedTimeIT; -import org.apache.phoenix.schema.ColumnNotFoundException; +import org.apache.phoenix.exception.SQLExceptionCode; import org.apache.phoenix.util.PhoenixRuntime; import org.apache.phoenix.util.PropertiesUtil; import org.junit.Before; @@ -41,9 +41,9 @@ public class TxPointInTimeQueryIT extends BaseClientManagedTimeIT { public void initTable() throws Exception { ts = nextTimestamp(); } - + @Test - public void testDropColumn() throws Exception { + public void testQueryWithSCN() throws Exception { Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); props.put(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts)); Connection conn = DriverManager.getConnection(getUrl(), props); @@ -54,25 +54,53 @@ public class TxPointInTimeQueryIT extends BaseClientManagedTimeIT { props.put(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10)); conn = DriverManager.getConnection(getUrl(), props); - // drop a column - conn.createStatement().execute("ALTER TABLE t DROP COLUMN v1"); - props.put(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 11)); - conn = DriverManager.getConnection(getUrl(), props); - String selectQuery = "SELECT v1 FROM t"; + String selectQuery = "SELECT k FROM t"; try { conn.createStatement().executeQuery(selectQuery); fail(); - } catch (ColumnNotFoundException e) { + } catch (SQLException e) { + assertEquals("Unexpected Exception", + SQLExceptionCode.CANNOT_START_TRANSACTION_WITH_SCN_SET.getErrorCode(), + e.getErrorCode()); } - props.put(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 5)); - conn = DriverManager.getConnection(getUrl(), props); - ResultSet rs = conn.createStatement().executeQuery(selectQuery); - assertFalse(rs.next()); } finally { conn.close(); } } +// @Test +// public void testDropColumn() throws Exception { +// Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); +// props.put(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts)); +// Connection conn = DriverManager.getConnection(getUrl(), props); +// try { +// conn.createStatement() +// .execute( +// "CREATE TABLE t (k VARCHAR NOT NULL PRIMARY KEY, v1 VARCHAR) TRANSACTIONAL=true"); +// +// props.put(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10)); +// conn = DriverManager.getConnection(getUrl(), props); +// // drop a column +// conn.createStatement().execute("ALTER TABLE t DROP COLUMN v1"); +// +// props.put(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 11)); +// conn = DriverManager.getConnection(getUrl(), props); +// String selectQuery = "SELECT v1 FROM t"; +// try { +// conn.createStatement().executeQuery(selectQuery); +// fail(); +// } catch (ColumnNotFoundException e) { +// } +// +// props.put(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 5)); +// conn = DriverManager.getConnection(getUrl(), props); +// ResultSet rs = conn.createStatement().executeQuery(selectQuery); +// assertFalse(rs.next()); +// } finally { +// conn.close(); +// } +// } + } http://git-wip-us.apache.org/repos/asf/phoenix/blob/c8911957/phoenix-core/src/main/java/org/apache/phoenix/exception/SQLExceptionCode.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/exception/SQLExceptionCode.java b/phoenix-core/src/main/java/org/apache/phoenix/exception/SQLExceptionCode.java index e3fbac8..d89e19a 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/exception/SQLExceptionCode.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/exception/SQLExceptionCode.java @@ -250,7 +250,8 @@ public enum SQLExceptionCode { DEFAULT_COLUMN_FAMILY_ON_SHARED_TABLE(1056, "43A13", "Default column family not allowed on VIEW or shared INDEX"), ONLY_TABLE_MAY_BE_DECLARED_TRANSACTIONAL(1070, "44A01", "Only tables may be declared as transactional"), MAY_NOT_MAP_TO_EXISTING_TABLE_AS_TRANSACTIONAL(1071, "44A02", "An existing HBase table may not be mapped to as a transactional table"), - STORE_NULLS_MUST_BE_FALSE_FOR_TRANSACTIONAL(1072, "44A03", "Store nulls must be false when a table is transactional"), + STORE_NULLS_MUST_BE_FALSE_FOR_TRANSACTIONAL(1072, "44A03", "Store nulls must be true when a table is transactional"), + CANNOT_START_TRANSACTION_WITH_SCN_SET(1073, "44A04", "Cannot start a transaction on a connection with SCN set"), /** Sequence related */ SEQUENCE_ALREADY_EXIST(1200, "42Z00", "Sequence already exists.", new Factory() { http://git-wip-us.apache.org/repos/asf/phoenix/blob/c8911957/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java index 449e3cd..b7c7850 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java @@ -45,6 +45,7 @@ import org.apache.phoenix.cache.ServerCacheClient.ServerCache; import org.apache.phoenix.coprocessor.BaseScannerRegionObserver; import org.apache.phoenix.coprocessor.MetaDataProtocol.MetaDataMutationResult; import org.apache.phoenix.exception.SQLExceptionCode; +import org.apache.phoenix.exception.SQLExceptionInfo; import org.apache.phoenix.hbase.index.util.ImmutableBytesPtr; import org.apache.phoenix.index.IndexMaintainer; import org.apache.phoenix.index.IndexMetaDataCacheClient; @@ -160,6 +161,12 @@ public class MutationState implements SQLCloseable { throw new SQLException("No transaction context"); // TODO: error code } + if (connection.getSCN() != null) { + throw new SQLExceptionInfo.Builder( + SQLExceptionCode.CANNOT_START_TRANSACTION_WITH_SCN_SET) + .build().buildException(); + } + try { if (!txStarted) { txContext.start();