You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by am...@apache.org on 2021/06/25 13:56:08 UTC
[ignite-3] branch ignite-14743-compaction updated: Minor
optimization.
This is an automated email from the ASF dual-hosted git repository.
amashenkov pushed a commit to branch ignite-14743-compaction
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/ignite-14743-compaction by this push:
new 680ca0b Minor optimization.
680ca0b is described below
commit 680ca0bc269f59751c4e11edf4fcf64716240978
Author: Andrew Mashenkov <an...@gmail.com>
AuthorDate: Fri Jun 25 16:55:54 2021 +0300
Minor optimization.
---
.../main/java/org/apache/ignite/table/Tuple.java | 5 +++--
.../ignite/internal/table/RowChunkAdapter.java | 11 +++++++++++
.../org/apache/ignite/internal/table/TableRow.java | 23 ++++------------------
.../ignite/internal/table/TupleBuilderImpl.java | 4 ++--
.../ignite/internal/table/TupleMarshallerImpl.java | 9 ++-------
.../internal/table/impl/TestTupleBuilder.java | 20 ++++++++-----------
6 files changed, 30 insertions(+), 42 deletions(-)
diff --git a/modules/api/src/main/java/org/apache/ignite/table/Tuple.java b/modules/api/src/main/java/org/apache/ignite/table/Tuple.java
index c9e0374..93605d5 100644
--- a/modules/api/src/main/java/org/apache/ignite/table/Tuple.java
+++ b/modules/api/src/main/java/org/apache/ignite/table/Tuple.java
@@ -31,9 +31,10 @@ public interface Tuple {
* Returns {@code true} if this tuple contains a column with the specified name.
*
* @param colName Column name.
- * @return {@code true} if this tuple contains a column with the specified name. Otherwise returns {@code false}.
+ * @param def Default value.
+ * @return Column value if this tuple contains a column with the specified name. Otherwise returns {@code default}.
*/
- boolean contains(String colName);
+ <T> T valueOrDefault(String colName, T def);
/**
* Gets column value for given column name.
diff --git a/modules/table/src/main/java/org/apache/ignite/internal/table/RowChunkAdapter.java b/modules/table/src/main/java/org/apache/ignite/internal/table/RowChunkAdapter.java
index 2e213f1..dc9ab74 100644
--- a/modules/table/src/main/java/org/apache/ignite/internal/table/RowChunkAdapter.java
+++ b/modules/table/src/main/java/org/apache/ignite/internal/table/RowChunkAdapter.java
@@ -33,6 +33,7 @@ public abstract class RowChunkAdapter implements Tuple {
/**
* @param colName Column name.
* @return Column.
+ * @throws ColumnNotFoundException If column wasn't found.
*/
@NotNull protected abstract Column columnByName(@NotNull String colName);
@@ -42,6 +43,16 @@ public abstract class RowChunkAdapter implements Tuple {
protected abstract Row row();
/** {@inheritDoc} */
+ @Override public <T> T valueOrDefault(String colName, T def) {
+ try {
+ return value(colName);
+ }
+ catch (ColumnNotFoundException ex) {
+ return def;
+ }
+ }
+
+ /** {@inheritDoc} */
@Override public <T> T value(String colName) {
final Column col = columnByName(colName);
diff --git a/modules/table/src/main/java/org/apache/ignite/internal/table/TableRow.java b/modules/table/src/main/java/org/apache/ignite/internal/table/TableRow.java
index 31ab606..de111e2 100644
--- a/modules/table/src/main/java/org/apache/ignite/internal/table/TableRow.java
+++ b/modules/table/src/main/java/org/apache/ignite/internal/table/TableRow.java
@@ -19,8 +19,8 @@ package org.apache.ignite.internal.table;
import java.util.Objects;
import org.apache.ignite.internal.schema.Column;
-import org.apache.ignite.internal.schema.row.Row;
import org.apache.ignite.internal.schema.SchemaDescriptor;
+import org.apache.ignite.internal.schema.row.Row;
import org.apache.ignite.table.Tuple;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -57,7 +57,7 @@ public class TableRow extends RowChunkAdapter {
final Column col = schema.column(colName);
if (col == null)
- throw new IllegalArgumentException("Invalid column name: columnName=" + colName + ", schemaVersion=" + schema.version());
+ throw new ColumnNotFoundException("Invalid column name: columnName=" + colName + ", schemaVersion=" + schema.version());
return col;
}
@@ -81,11 +81,6 @@ public class TableRow extends RowChunkAdapter {
return row;
}
- /** */
- @Override public boolean contains(String colName) {
- return schema.column(colName) != null;
- }
-
/** Key column chunk. */
private class KeyRowChunk extends RowChunkAdapter {
/** {@inheritDoc} */
@@ -100,15 +95,10 @@ public class TableRow extends RowChunkAdapter {
final Column col = schema.column(colName);
if (col == null || !schema.isKeyColumn(col.schemaIndex()))
- throw new IllegalArgumentException("Invalid key column name: columnName=" + colName + ", schemaVersion=" + schema.version());
+ throw new ColumnNotFoundException("Invalid key column name: columnName=" + colName + ", schemaVersion=" + schema.version());
return col;
}
-
- /** */
- @Override public boolean contains(String colName) {
- return schema.column(colName) != null;
- }
}
/** Value column chunk. */
@@ -125,14 +115,9 @@ public class TableRow extends RowChunkAdapter {
final Column col = schema.column(colName);
if (col == null || schema.isKeyColumn(col.schemaIndex()))
- throw new IllegalArgumentException("Invalid key column name: columnName=" + colName + ", schemaVersion=" + schema.version());
+ throw new ColumnNotFoundException("Invalid key column name: columnName=" + colName + ", schemaVersion=" + schema.version());
return col;
}
-
- /** */
- @Override public boolean contains(String colName) {
- return schema.column(colName) != null;
- }
}
}
diff --git a/modules/table/src/main/java/org/apache/ignite/internal/table/TupleBuilderImpl.java b/modules/table/src/main/java/org/apache/ignite/internal/table/TupleBuilderImpl.java
index 1d4aae4..10dcfcd 100644
--- a/modules/table/src/main/java/org/apache/ignite/internal/table/TupleBuilderImpl.java
+++ b/modules/table/src/main/java/org/apache/ignite/internal/table/TupleBuilderImpl.java
@@ -71,8 +71,8 @@ public class TupleBuilderImpl implements TupleBuilder, Tuple {
}
/** {@inheritDoc} */
- @Override public boolean contains(String colName) {
- return map.containsKey(colName);
+ @Override public <T> T valueOrDefault(String colName, T def) {
+ return (T)map.getOrDefault(colName, def);
}
@Override public <T> T value(String colName) {
diff --git a/modules/table/src/main/java/org/apache/ignite/internal/table/TupleMarshallerImpl.java b/modules/table/src/main/java/org/apache/ignite/internal/table/TupleMarshallerImpl.java
index dbca237..a863899 100644
--- a/modules/table/src/main/java/org/apache/ignite/internal/table/TupleMarshallerImpl.java
+++ b/modules/table/src/main/java/org/apache/ignite/internal/table/TupleMarshallerImpl.java
@@ -129,12 +129,7 @@ public class TupleMarshallerImpl implements TupleMarshaller {
* @param tup Tuple.
*/
private void writeColumn(RowAssembler rowAsm, Column col, Tuple tup) {
- Object val;
-
- if (!tup.contains(col.name()))
- val = col.defaultValue();
- else
- val = tup.value(col.name());
+ Object val = tup.valueOrDefault(col.name(), col.defaultValue());
if (val == null) {
rowAsm.appendNull();
@@ -215,7 +210,7 @@ public class TupleMarshallerImpl implements TupleMarshaller {
for (int i = cols.firstVarlengthColumn(); i < cols.length(); i++) {
Column col = cols.column(i);
- final Object val = tup.contains(col.name()) ? tup.value(col.name()) : col.defaultValue();
+ final Object val = tup.valueOrDefault(col.name(), col.defaultValue());
if (val == null)
continue;
diff --git a/modules/table/src/test/java/org/apache/ignite/internal/table/impl/TestTupleBuilder.java b/modules/table/src/test/java/org/apache/ignite/internal/table/impl/TestTupleBuilder.java
index 00450cf..f8520dc 100644
--- a/modules/table/src/test/java/org/apache/ignite/internal/table/impl/TestTupleBuilder.java
+++ b/modules/table/src/test/java/org/apache/ignite/internal/table/impl/TestTupleBuilder.java
@@ -24,34 +24,30 @@ import java.util.UUID;
import org.apache.ignite.binary.BinaryObject;
import org.apache.ignite.binary.BinaryObjects;
import org.apache.ignite.table.Tuple;
+import org.apache.ignite.table.TupleBuilder;
/**
* Dummy table storage implementation.
*/
-public class TestTupleBuilder implements Tuple {
+public class TestTupleBuilder implements TupleBuilder, Tuple {
/** Columns values. */
private final Map<String, Object> map = new HashMap<>();
- /**
- * Constructor.
- */
- public TestTupleBuilder() {
- }
-
- public TestTupleBuilder set(String colName, Object value) {
+ /** {@inheritDoc} */
+ @Override public TestTupleBuilder set(String colName, Object value) {
map.put(colName, value);
return this;
}
- /** */
- public Tuple build() {
+ /** {@inheritDoc} */
+ @Override public Tuple build() {
return this;
}
/** {@inheritDoc} */
- @Override public boolean contains(String colName) {
- return map.containsKey(colName);
+ @Override public <T> T valueOrDefault(String colName, T def) {
+ return (T)map.getOrDefault(colName, def);
}
/** {@inheritDoc} */