You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ka...@apache.org on 2018/06/21 05:51:07 UTC

[16/31] metamodel git commit: HBase improvements (when creating a HBase table, the ID-column is not a required parameter, because that's always created).

HBase improvements (when creating a HBase table, the ID-column is not a required parameter, because that's always created).


Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/f4d2c97a
Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/f4d2c97a
Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/f4d2c97a

Branch: refs/heads/master
Commit: f4d2c97ad3a7fa41934251e6fd727639ed1bd300
Parents: cd755a1
Author: Gerard Dellemann <g....@quadient.com>
Authored: Thu May 31 16:30:20 2018 +0200
Committer: Gerard Dellemann <g....@quadient.com>
Committed: Thu May 31 16:30:20 2018 +0200

----------------------------------------------------------------------
 .../hbase/HBaseCreateTableBuilder.java          | 26 ++--------
 .../apache/metamodel/hbase/CreateTableTest.java | 52 ++++++++++----------
 .../hbase/HBaseUpdateCallbackTest.java          | 13 +++--
 3 files changed, 40 insertions(+), 51 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metamodel/blob/f4d2c97a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseCreateTableBuilder.java
----------------------------------------------------------------------
diff --git a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseCreateTableBuilder.java b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseCreateTableBuilder.java
index 138e32b..db4463b 100644
--- a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseCreateTableBuilder.java
+++ b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseCreateTableBuilder.java
@@ -18,7 +18,6 @@
  */
 package org.apache.metamodel.hbase;
 
-import java.util.Iterator;
 import java.util.Set;
 
 import org.apache.metamodel.MetaModelException;
@@ -58,7 +57,9 @@ public class HBaseCreateTableBuilder extends AbstractTableCreationBuilder<HBaseU
 
     @Override
     public Table execute() {
-        checkColumnFamilies(_columnFamilies);
+        if (_columnFamilies == null || _columnFamilies.size() == 0) {
+            throw new MetaModelException("Creating a table without columnFamilies");
+        }
 
         final Table table = getTable();
 
@@ -71,27 +72,6 @@ public class HBaseCreateTableBuilder extends AbstractTableCreationBuilder<HBaseU
     }
 
     /**
-     * Check if the new table has columnFamilies and if the ID-column is included.
-     * Throws a {@link MetaModelException} if a check fails.
-     * @param columnFamilies
-     */
-    private void checkColumnFamilies(Set<String> columnFamilies) {
-        if (columnFamilies == null || columnFamilies.size() == 0) {
-            throw new MetaModelException("Creating a table without columnFamilies");
-        }
-        boolean idColumnFound = false;
-        final Iterator<String> iterator = columnFamilies.iterator();
-        while (!idColumnFound && iterator.hasNext()) {
-            if (iterator.next().equals(HBaseDataContext.FIELD_ID)) {
-                idColumnFound = true;
-            }
-        }
-        if (!idColumnFound) {
-            throw new MetaModelException("ColumnFamily: " + HBaseDataContext.FIELD_ID + " not found");
-        }
-    }
-
-    /**
      * Set the columnFamilies
      * @param columnFamilies
      */

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f4d2c97a/hbase/src/test/java/org/apache/metamodel/hbase/CreateTableTest.java
----------------------------------------------------------------------
diff --git a/hbase/src/test/java/org/apache/metamodel/hbase/CreateTableTest.java b/hbase/src/test/java/org/apache/metamodel/hbase/CreateTableTest.java
index 789b4bd..6c39acd 100644
--- a/hbase/src/test/java/org/apache/metamodel/hbase/CreateTableTest.java
+++ b/hbase/src/test/java/org/apache/metamodel/hbase/CreateTableTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.metamodel.hbase;
 
+import java.io.IOException;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -32,7 +33,7 @@ public class CreateTableTest extends HBaseUpdateCallbackTest {
     /**
      * Check if creating table is supported
      */
-    public void testDropTableSupported() {
+    public void testCreateTableSupported() {
         if (isConfigured()) {
             assertTrue(getUpdateCallback().isCreateTableSupported());
         } else {
@@ -112,30 +113,6 @@ public class CreateTableTest extends HBaseUpdateCallbackTest {
     }
 
     /**
-     * Create a table without the ID-Column, should throw a MetaModelException
-     */
-    public void testCreateTableWithoutIDColumn() {
-        if (isConfigured()) {
-            final HBaseTable table = createHBaseTable(TABLE_NAME, HBaseDataContext.FIELD_ID, CF_FOO, CF_BAR, null);
-            final LinkedHashMap<HBaseColumn, Object> row = createRow(table, null, CF_FOO, CF_BAR);
-            final Set<String> columnFamilies = getColumnFamilies(getHBaseColumnsFromRow(row));
-            try {
-                final HBaseCreateTableBuilder hBaseCreateTableBuilder = (HBaseCreateTableBuilder) getUpdateCallback()
-                        .createTable(getSchema(), TABLE_NAME);
-
-                hBaseCreateTableBuilder.setColumnFamilies(columnFamilies);
-                hBaseCreateTableBuilder.execute();
-                fail("Should get an exception that the ID-colum is missing");
-            } catch (MetaModelException e) {
-                assertEquals("ColumnFamily: " + HBaseDataContext.FIELD_ID + " not found", e.getMessage());
-            }
-        } else {
-            warnAboutANotExecutedTest(getClass().getName(), new Object() {
-            }.getClass().getEnclosingMethod().getName());
-        }
-    }
-
-    /**
      * Creating a HBaseClient with the tableName null, should throw a exception
      */
     public void testCreatingTheHBaseClientWithTableNameNull() {
@@ -190,6 +167,31 @@ public class CreateTableTest extends HBaseUpdateCallbackTest {
     }
 
     /**
+     * Goodflow. Create a table without the ID-Column, should work
+     * @throws IOException 
+     */
+    public void testCreateTableWithoutIDColumn() throws IOException {
+        if (isConfigured()) {
+            final HBaseTable table = createHBaseTable(TABLE_NAME, null, CF_FOO, CF_BAR, null);
+            final LinkedHashMap<HBaseColumn, Object> row = createRow(table, null, CF_FOO, CF_BAR);
+            final Set<String> columnFamilies = getColumnFamilies(getHBaseColumnsFromRow(row));
+            try {
+                final HBaseCreateTableBuilder hBaseCreateTableBuilder = (HBaseCreateTableBuilder) getUpdateCallback()
+                        .createTable(getSchema(), TABLE_NAME);
+
+                hBaseCreateTableBuilder.setColumnFamilies(columnFamilies);
+                hBaseCreateTableBuilder.execute();
+                checkSuccesfullyInsertedTable();
+            } catch (Exception e) {
+                fail("Should not get an exception (that the ID-column is missing)");
+            }
+        } else {
+            warnAboutANotExecutedTest(getClass().getName(), new Object() {
+            }.getClass().getEnclosingMethod().getName());
+        }
+    }
+
+    /**
      * Goodflow. Create a table including the ID-Column (columnFamilies not in constructor), should work
      */
     public void testSettingColumnFamiliesAfterConstrutor() {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f4d2c97a/hbase/src/test/java/org/apache/metamodel/hbase/HBaseUpdateCallbackTest.java
----------------------------------------------------------------------
diff --git a/hbase/src/test/java/org/apache/metamodel/hbase/HBaseUpdateCallbackTest.java b/hbase/src/test/java/org/apache/metamodel/hbase/HBaseUpdateCallbackTest.java
index 5085689..a30b7f2 100644
--- a/hbase/src/test/java/org/apache/metamodel/hbase/HBaseUpdateCallbackTest.java
+++ b/hbase/src/test/java/org/apache/metamodel/hbase/HBaseUpdateCallbackTest.java
@@ -126,7 +126,7 @@ public abstract class HBaseUpdateCallbackTest extends HBaseTestCase {
     /**
      * Create a test HBase table
      * @param tableName name of the table
-     * @param idColumn required ID-column
+     * @param idColumn ID-column, can be set to null to create a table without this column
      * @param columnFamily1 required columnFamily 1
      * @param columnFamily2 required columnFamily 2
      * @param columnFamily3 columnFamily 3 is not required and can be used to test errors
@@ -136,9 +136,16 @@ public abstract class HBaseUpdateCallbackTest extends HBaseTestCase {
             final String columnFamily2, final String columnFamily3) {
         String[] columnNames;
         ColumnType[] columnTypes;
-        if (columnFamily3 == null) {
+
+        if (idColumn == null && columnFamily3 == null) {
+            columnNames = new String[] { columnFamily1, columnFamily2 };
+            columnTypes = new ColumnType[] { ColumnType.STRING, ColumnType.STRING };
+        } else if (idColumn != null && columnFamily3 == null) {
             columnNames = new String[] { idColumn, columnFamily1, columnFamily2 };
             columnTypes = new ColumnType[] { ColumnType.STRING, ColumnType.STRING, ColumnType.STRING };
+        } else if (idColumn == null && columnFamily3 != null) {
+            columnNames = new String[] { columnFamily1, columnFamily2, columnFamily3 };
+            columnTypes = new ColumnType[] { ColumnType.STRING, ColumnType.STRING, ColumnType.STRING };
         } else {
             columnNames = new String[] { idColumn, columnFamily1, columnFamily2, columnFamily3 };
             columnTypes = new ColumnType[] { ColumnType.STRING, ColumnType.STRING, ColumnType.STRING,
@@ -151,7 +158,7 @@ public abstract class HBaseUpdateCallbackTest extends HBaseTestCase {
     /**
      * Creates a map that represents a row
      * @param table HBaseTable
-     * @param idColumn required ID-column
+     * @param idColumn ID-column, can be set to null to create a row without this column
      * @param columnFamily1 required columnFamily 1
      * @param columnFamily2 required columnFamily 1
      * @return {@link LinkedHashMap}<{@link HBaseColumn}, {@link Object}>