You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by jy...@apache.org on 2014/10/06 20:45:40 UTC
git commit: PHOENIX-1305 create index throws NPE when dataTable has
specified default column family (daniel meng)
Repository: phoenix
Updated Branches:
refs/heads/master faeab9355 -> ea0a502ce
PHOENIX-1305 create index throws NPE when dataTable has specified default column family (daniel meng)
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/ea0a502c
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/ea0a502c
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/ea0a502c
Branch: refs/heads/master
Commit: ea0a502ce133972b29c18a984063006d6dcd9691
Parents: faeab93
Author: Jesse Yates <jy...@apache.org>
Authored: Mon Oct 6 11:42:13 2014 -0700
Committer: Jesse Yates <jy...@apache.org>
Committed: Mon Oct 6 11:42:20 2014 -0700
----------------------------------------------------------------------
.../phoenix/end2end/index/MutableIndexIT.java | 50 ++++++++++++++++++++
.../phoenix/parse/CreateIndexStatement.java | 3 +-
2 files changed, 52 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/ea0a502c/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexIT.java
index b093acb..8c9256d 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/MutableIndexIT.java
@@ -34,10 +34,16 @@ import java.util.Map;
import java.util.Properties;
import org.apache.hadoop.hbase.HTableDescriptor;
+import org.apache.phoenix.compile.ColumnResolver;
+import org.apache.phoenix.compile.FromCompiler;
import org.apache.phoenix.end2end.BaseHBaseManagedTimeIT;
import org.apache.phoenix.end2end.HBaseManagedTimeTest;
import org.apache.phoenix.end2end.Shadower;
+import org.apache.phoenix.jdbc.PhoenixConnection;
+import org.apache.phoenix.parse.NamedTableNode;
+import org.apache.phoenix.parse.TableName;
import org.apache.phoenix.query.QueryServices;
+import org.apache.phoenix.schema.PTable;
import org.apache.phoenix.util.MetaDataUtil;
import org.apache.phoenix.util.PropertiesUtil;
import org.apache.phoenix.util.QueryUtil;
@@ -63,6 +69,50 @@ public class MutableIndexIT extends BaseMutableIndexIT {
props.put(QueryServices.DROP_METADATA_ATTRIB, Boolean.toString(true));
setUpTestDriver(new ReadOnlyProps(props.entrySet().iterator()));
}
+
+ @Test
+ public void testIndexCreateWithoutOptions() throws Exception {
+ createIndexOnTableWithSpecifiedDefaultCF(false);
+ }
+
+ @Test
+ public void testIndexCreateWithOptions() throws Exception {
+ createIndexOnTableWithSpecifiedDefaultCF(true);
+ }
+
+ private void createIndexOnTableWithSpecifiedDefaultCF(boolean hasOptions) throws Exception {
+ String query;
+ ResultSet rs;
+
+ Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
+ Connection conn = DriverManager.getConnection(getUrl(), props);
+ conn.createStatement().execute(
+ "CREATE TABLE " + DATA_TABLE_FULL_NAME + " (k VARCHAR NOT NULL PRIMARY KEY, v1 VARCHAR, v2 VARCHAR) DEFAULT_COLUMN_FAMILY='A'");
+ query = "SELECT * FROM " + DATA_TABLE_FULL_NAME;
+ rs = conn.createStatement().executeQuery(query);
+ assertFalse(rs.next());
+
+ String options = hasOptions ? "SALT_BUCKETS=10, MULTI_TENANT=true, IMMUTABLE_ROWS=true, DISABLE_WAL=true" : "";
+ conn.createStatement().execute(
+ "CREATE INDEX " + INDEX_TABLE_NAME + " ON " + DATA_TABLE_FULL_NAME + " (v1) INCLUDE (v2) " + options);
+ query = "SELECT * FROM " + INDEX_TABLE_FULL_NAME;
+ rs = conn.createStatement().executeQuery(query);
+ assertFalse(rs.next());
+
+ //check options set correctly on index
+ TableName indexName = TableName.create(SCHEMA_NAME, INDEX_TABLE_NAME);
+ NamedTableNode indexNode = NamedTableNode.create(null, indexName, null);
+ ColumnResolver resolver = FromCompiler.getResolver(indexNode, conn.unwrap(PhoenixConnection.class));
+ PTable indexTable = resolver.getTables().get(0).getTable();
+ // Can't set IMMUTABLE_ROWS, MULTI_TENANT or DEFAULT_COLUMN_FAMILY_NAME on an index
+ assertNull(indexTable.getDefaultFamilyName());
+ assertFalse(indexTable.isMultiTenant());
+ assertFalse(indexTable.isImmutableRows());
+ if(hasOptions) {
+ assertEquals(10, indexTable.getBucketNum().intValue());
+ assertTrue(indexTable.isWALDisabled());
+ }
+ }
@Test
public void testIndexWithNullableFixedWithCols() throws Exception {
http://git-wip-us.apache.org/repos/asf/phoenix/blob/ea0a502c/phoenix-core/src/main/java/org/apache/phoenix/parse/CreateIndexStatement.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/parse/CreateIndexStatement.java b/phoenix-core/src/main/java/org/apache/phoenix/parse/CreateIndexStatement.java
index f688ceb..669dc3f 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/parse/CreateIndexStatement.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/parse/CreateIndexStatement.java
@@ -23,6 +23,7 @@ import java.util.List;
import org.apache.hadoop.hbase.util.Pair;
import org.apache.phoenix.schema.PTable.IndexType;
+import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap;
@@ -43,7 +44,7 @@ public class CreateIndexStatement extends SingleTableStatement {
this.indexConstraint = indexConstraint == null ? PrimaryKeyConstraint.EMPTY : indexConstraint;
this.includeColumns = includeColumns == null ? Collections.<ColumnName>emptyList() : includeColumns;
this.splitNodes = splits == null ? Collections.<ParseNode>emptyList() : splits;
- this.props = props;
+ this.props = props == null ? ArrayListMultimap.<String,Pair<String,Object>>create() : props;
this.ifNotExists = ifNotExists;
this.indexType = indexType;
}