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:17 UTC
[26/31] metamodel git commit: - Refactored contructing String
representation of byte arrays. - Have the HBaseRowInsertionBuilder no longer
extend the AbstractRowInsertionBuilder,
because it does things structurally different in some parts.
- Refactored contructing String representation of byte arrays.
- Have the HBaseRowInsertionBuilder no longer extend the AbstractRowInsertionBuilder, because it does things structurally different in some parts.
Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/1dc52f64
Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/1dc52f64
Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/1dc52f64
Branch: refs/heads/master
Commit: 1dc52f64311433d597ba87220eca54da0e85d942
Parents: 0ca1fd2
Author: Arjan Seijkens <a....@quadient.com>
Authored: Fri Jun 15 14:33:19 2018 +0200
Committer: Arjan Seijkens <a....@quadient.com>
Committed: Fri Jun 15 14:33:19 2018 +0200
----------------------------------------------------------------------
.../apache/metamodel/hbase/HBaseFamilyMap.java | 6 +-
.../hbase/HBaseRowInsertionBuilder.java | 139 ++++++++++++++-----
.../apache/metamodel/hbase/InsertRowTest.java | 14 ++
3 files changed, 126 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/metamodel/blob/1dc52f64/hbase/src/main/java/org/apache/metamodel/hbase/HBaseFamilyMap.java
----------------------------------------------------------------------
diff --git a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseFamilyMap.java b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseFamilyMap.java
index 7483c63..32656c2 100644
--- a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseFamilyMap.java
+++ b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseFamilyMap.java
@@ -23,6 +23,8 @@ import java.util.Map;
import java.util.NavigableMap;
import java.util.Set;
+import org.apache.hadoop.hbase.util.Bytes;
+
public class HBaseFamilyMap implements Map<Object, Object> {
private final NavigableMap<byte[], byte[]> _map;
@@ -105,9 +107,9 @@ public class HBaseFamilyMap implements Map<Object, Object> {
if (sb.length() > 1) {
sb.append(',');
}
- sb.append(new String(entry.getKey()));
+ sb.append(Bytes.toString(entry.getKey()));
sb.append('=');
- sb.append(new String(entry.getValue()));
+ sb.append(Bytes.toString(entry.getValue()));
}
sb.append('}');
return sb.toString();
http://git-wip-us.apache.org/repos/asf/metamodel/blob/1dc52f64/hbase/src/main/java/org/apache/metamodel/hbase/HBaseRowInsertionBuilder.java
----------------------------------------------------------------------
diff --git a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseRowInsertionBuilder.java b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseRowInsertionBuilder.java
index abbbfee..fe6e07a 100644
--- a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseRowInsertionBuilder.java
+++ b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseRowInsertionBuilder.java
@@ -27,32 +27,39 @@ import java.util.Set;
import java.util.stream.Collectors;
import org.apache.metamodel.MetaModelException;
+import org.apache.metamodel.data.DefaultRow;
+import org.apache.metamodel.data.Row;
+import org.apache.metamodel.data.SimpleDataSetHeader;
import org.apache.metamodel.data.Style;
-import org.apache.metamodel.insert.AbstractRowInsertionBuilder;
import org.apache.metamodel.insert.RowInsertionBuilder;
+import org.apache.metamodel.query.SelectItem;
import org.apache.metamodel.schema.Column;
/**
* A builder-class to insert rows in a HBase datastore.
*/
-public class HBaseRowInsertionBuilder extends AbstractRowInsertionBuilder<HBaseUpdateCallback> {
- private List<HBaseColumn> columns = new ArrayList<>();
- private List<Object> values = new ArrayList<>();
+public class HBaseRowInsertionBuilder implements RowInsertionBuilder {
+ private List<HBaseColumn> _columns = new ArrayList<>();
+ private List<Object> _values = new ArrayList<>();
private int _indexOfIdColumn = -1;
+ private final HBaseUpdateCallback _updateCallback;
+ private final HBaseTable _table;
+
/**
* Creates a {@link HBaseRowInsertionBuilder}. The table and the column's columnFamilies are checked to exist in the schema.
* @param updateCallback
* @param table
- * @param columns
+ * @param _columns
* @throws IllegalArgumentException the columns list can't be null or empty
* @throws MetaModelException when no ID-column is found.
*/
public HBaseRowInsertionBuilder(final HBaseUpdateCallback updateCallback, final HBaseTable table) {
- super(updateCallback, table);
+ _updateCallback = updateCallback;
+ _table = table;
- checkTable(updateCallback, table);
+ checkTable(table);
}
/**
@@ -62,8 +69,11 @@ public class HBaseRowInsertionBuilder extends AbstractRowInsertionBuilder<HBaseU
* @param tableGettingInserts
* @throws MetaModelException If the table or the columnFamilies don't exist
*/
- private void checkTable(final HBaseUpdateCallback updateCallback, final HBaseTable tableGettingInserts) {
- final HBaseTable tableInSchema = (HBaseTable) updateCallback.getDataContext().getDefaultSchema().getTableByName(
+ private void checkTable(final HBaseTable tableGettingInserts) {
+ final HBaseTable tableInSchema = (HBaseTable) _updateCallback
+ .getDataContext()
+ .getDefaultSchema()
+ .getTableByName(
tableGettingInserts.getName());
if (tableInSchema == null) {
throw new MetaModelException("Trying to insert data into table: " + tableGettingInserts.getName()
@@ -113,20 +123,18 @@ public class HBaseRowInsertionBuilder extends AbstractRowInsertionBuilder<HBaseU
}
// The columns parameter should match the table's columns, just to be sure, this is checked again
- checkColumnFamilies((HBaseTable) getTable(), getColumnFamilies(getColumns()));
+ checkColumnFamilies(getTable(), getColumnFamilies(getColumns()));
- ((HBaseDataContext) getUpdateCallback().getDataContext()).getHBaseClient().insertRow(getTable().getName(),
+ ((HBaseDataContext) _updateCallback.getDataContext()).getHBaseClient().insertRow(getTable().getName(),
getColumns(), getValues(), _indexOfIdColumn);
}
- @Override
- protected HBaseColumn[] getColumns() {
- return columns.toArray(new HBaseColumn[columns.size()]);
+ private HBaseColumn[] getColumns() {
+ return _columns.toArray(new HBaseColumn[_columns.size()]);
}
- @Override
- protected Object[] getValues() {
- return values.toArray(new Object[values.size()]);
+ private Object[] getValues() {
+ return _values.toArray(new Object[_values.size()]);
}
@Override
@@ -137,19 +145,19 @@ public class HBaseRowInsertionBuilder extends AbstractRowInsertionBuilder<HBaseU
final HBaseColumn hbaseColumn = getHbaseColumn(column);
- for (int i = 0; i < columns.size(); i++) {
- if (columns.get(i).equals(hbaseColumn)) {
- values.set(i, value);
+ for (int i = 0; i < _columns.size(); i++) {
+ if (_columns.get(i).equals(hbaseColumn)) {
+ _values.set(i, value);
return this;
}
}
if (hbaseColumn.isPrimaryKey()) {
- _indexOfIdColumn = columns.size();
+ _indexOfIdColumn = _columns.size();
}
- columns.add((HBaseColumn) hbaseColumn);
- values.add(value);
+ _columns.add((HBaseColumn) hbaseColumn);
+ _values.add(value);
return this;
}
@@ -171,30 +179,99 @@ public class HBaseRowInsertionBuilder extends AbstractRowInsertionBuilder<HBaseU
}
@Override
+ public boolean isSet(final Column column) {
+ for (int i = 0; i < _columns.size(); i++) {
+ if (_columns.get(i).equals(column)) {
+ return _values.get(i) != null;
+ }
+ }
+ return false;
+ }
+
+ @Override
public RowInsertionBuilder value(final int columnIndex, final Object value) {
- values.set(columnIndex, value);
+ return value(columnIndex, value, null);
+ }
+
+ @Override
+ public RowInsertionBuilder value(int columnIndex, Object value, Style style) {
+ _values.set(columnIndex, value);
return this;
}
@Override
public RowInsertionBuilder value(final String columnName, final Object value) {
- for (Column column : columns) {
+ return value(columnName, value, null);
+ }
+
+ @Override
+ public RowInsertionBuilder value(Column column, Object value) {
+ return value(column, value, null);
+ }
+
+ @Override
+ public RowInsertionBuilder value(String columnName, Object value, Style style) {
+ for (Column column : _columns) {
if (column.getName().equals(columnName)) {
return value(column, value, null);
}
}
throw new IllegalArgumentException("No such column in table: " + columnName + ", available columns are: "
- + columns);
+ + _columns);
}
@Override
- public boolean isSet(final Column column) {
- for (int i = 0; i < columns.size(); i++) {
- if (columns.get(i).equals(column)) {
- return values.get(i) != null;
+ public Row toRow() {
+ return new DefaultRow(new SimpleDataSetHeader(_columns.stream().map(SelectItem::new).collect(Collectors
+ .toList())), getValues());
+ }
+
+ @Override
+ public HBaseTable getTable() {
+ return _table;
+ }
+
+ @Override
+ public RowInsertionBuilder like(Row row) {
+ List<SelectItem> selectItems = row.getSelectItems();
+ for (int i = 0; i < selectItems.size(); i++) {
+ SelectItem selectItem = selectItems.get(i);
+ Column column = selectItem.getColumn();
+ if (column != null) {
+ if (_table == column.getTable()) {
+ value(column, row.getValue(i));
+ } else {
+ value(column.getName(), row.getValue(i));
+ }
}
}
- return false;
+ return this;
+ }
+
+ @Override
+ public String toSql() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("INSERT INTO ");
+ sb.append(_table.getQualifiedLabel());
+ sb.append("(");
+ sb.append(_columns.stream().map(Column::getName).collect(Collectors.joining(",")));
+ sb.append(") VALUES (");
+ sb.append(_values.stream().map(value -> {
+ if (value == null) {
+ return "NULL";
+ } else if (value instanceof String) {
+ return "\"" + value + "\"";
+ } else {
+ return value.toString();
+ }
+ }).collect(Collectors.joining(",")));
+ sb.append(")");
+ return sb.toString();
+ }
+
+ @Override
+ public String toString() {
+ return toSql();
}
}
http://git-wip-us.apache.org/repos/asf/metamodel/blob/1dc52f64/hbase/src/test/java/org/apache/metamodel/hbase/InsertRowTest.java
----------------------------------------------------------------------
diff --git a/hbase/src/test/java/org/apache/metamodel/hbase/InsertRowTest.java b/hbase/src/test/java/org/apache/metamodel/hbase/InsertRowTest.java
index 31a33d0..1c21cba 100644
--- a/hbase/src/test/java/org/apache/metamodel/hbase/InsertRowTest.java
+++ b/hbase/src/test/java/org/apache/metamodel/hbase/InsertRowTest.java
@@ -245,6 +245,20 @@ public class InsertRowTest extends HBaseUpdateCallbackTest {
checkRows(true, false);
}
+ @Test
+ public void testSqlRepresentation() throws IOException {
+ final HBaseTable table = createAndAddTableToDatastore(TABLE_NAME, HBaseDataContext.FIELD_ID, CF_FOO, CF_BAR);
+
+ RowInsertionBuilder insertBuilder = getUpdateCallback()
+ .insertInto(table)
+ .value(new HBaseColumn(CF_FOO, Q_BAH, table), V_WORLD)
+ .value(new HBaseColumn(CF_FOO, Q_HELLO, table), V_THERE)
+ .value(new HBaseColumn(CF_BAR, Q_HEY, table), V_YO);
+
+ assertEquals("INSERT INTO HBase.table_for_junit(foo:bah,foo:hello,bar:hey) "
+ + "VALUES (\"world\",\"there\",\"yo\")", insertBuilder.toSql());
+ }
+
/**
* Converts a list of {@link HBaseColumn}'s to an array of {@link HBaseColumn}'s
*