You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by el...@apache.org on 2016/10/21 18:10:44 UTC
calcite git commit: [CALCITE-1458] Add column values to the
deprecated protobuf attribute
Repository: calcite
Updated Branches:
refs/heads/master ab25d36c7 -> 6010ce10f
[CALCITE-1458] Add column values to the deprecated protobuf attribute
When we omit adding these column values to the deprecated `values`
attribute, older clients may suddenly stop seeing records which
they previously could see on query.
Closes apache/calcite#314
Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/6010ce10
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/6010ce10
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/6010ce10
Branch: refs/heads/master
Commit: 6010ce10faba4457ffdc0809bff981bebba5237b
Parents: ab25d36
Author: Josh Elser <el...@apache.org>
Authored: Fri Oct 21 12:12:21 2016 -0400
Committer: Josh Elser <el...@apache.org>
Committed: Fri Oct 21 14:10:21 2016 -0400
----------------------------------------------------------------------
.../java/org/apache/calcite/avatica/Meta.java | 10 ++++-
.../org/apache/calcite/avatica/FrameTest.java | 46 ++++++++++++++++++++
2 files changed, 54 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/6010ce10/avatica/core/src/main/java/org/apache/calcite/avatica/Meta.java
----------------------------------------------------------------------
diff --git a/avatica/core/src/main/java/org/apache/calcite/avatica/Meta.java b/avatica/core/src/main/java/org/apache/calcite/avatica/Meta.java
index c7df281..c2c6a39 100644
--- a/avatica/core/src/main/java/org/apache/calcite/avatica/Meta.java
+++ b/avatica/core/src/main/java/org/apache/calcite/avatica/Meta.java
@@ -940,13 +940,19 @@ public interface Meta {
List<?> list = (List<?>) element;
// Add each element in the list/array to the column's value
for (Object listItem : list) {
- columnBuilder.addArrayValue(serializeScalar(listItem));
+ final Common.TypedValue scalarListItem = serializeScalar(listItem);
+ columnBuilder.addArrayValue(scalarListItem);
+ // Add the deprecated 'value' repeated attribute for backwards compat
+ columnBuilder.addValue(scalarListItem);
}
} else {
// The default value, but still explicit.
columnBuilder.setHasArrayValue(false);
// Only one value for this column, a scalar.
- columnBuilder.setScalarValue(serializeScalar(element));
+ final Common.TypedValue scalarVal = serializeScalar(element);
+ columnBuilder.setScalarValue(scalarVal);
+ // Add the deprecated 'value' repeated attribute for backwards compat
+ columnBuilder.addValue(scalarVal);
}
// Add value to row
http://git-wip-us.apache.org/repos/asf/calcite/blob/6010ce10/avatica/core/src/test/java/org/apache/calcite/avatica/FrameTest.java
----------------------------------------------------------------------
diff --git a/avatica/core/src/test/java/org/apache/calcite/avatica/FrameTest.java b/avatica/core/src/test/java/org/apache/calcite/avatica/FrameTest.java
index bdd989b..e17bf92 100644
--- a/avatica/core/src/test/java/org/apache/calcite/avatica/FrameTest.java
+++ b/avatica/core/src/test/java/org/apache/calcite/avatica/FrameTest.java
@@ -25,6 +25,7 @@ import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
@@ -160,6 +161,51 @@ public class FrameTest {
Object array = Frame.parseColumn(arrayValue);
assertEquals(Arrays.asList(1L, 1L), array);
}
+
+ @Test public void testDeprecatedValueAttributeForScalars() {
+ // Create a row with schema: [VARCHAR, INTEGER, DATE]
+ List<Object> rows = Collections.<Object>singletonList(new Object[] {"string", Integer.MAX_VALUE,
+ new Date().getTime()});
+ Meta.Frame frame = Meta.Frame.create(0, true, rows);
+ // Convert it to a protobuf
+ Common.Frame protoFrame = frame.toProto();
+ assertEquals(1, protoFrame.getRowsCount());
+ // Get that row we created
+ Common.Row protoRow = protoFrame.getRows(0);
+ // One row has many columns
+ List<Common.ColumnValue> protoColumns = protoRow.getValueList();
+ assertEquals(3, protoColumns.size());
+ // Verify that the scalar value is also present in the deprecated values attributes.
+ List<Common.TypedValue> deprecatedValues = protoColumns.get(0).getValueList();
+ assertEquals(1, deprecatedValues.size());
+ Common.TypedValue scalarValue = protoColumns.get(0).getScalarValue();
+ assertEquals(deprecatedValues.get(0), scalarValue);
+ }
+
+ @Test public void testDeprecatedValueAttributeForArrays() {
+ // Create a row with schema: [VARCHAR, ARRAY]
+ List<Object> rows = Collections.<Object>singletonList(new Object[] {"string",
+ Arrays.asList(1, 2, 3)});
+ Meta.Frame frame = Meta.Frame.create(0, true, rows);
+ // Convert it to a protobuf
+ Common.Frame protoFrame = frame.toProto();
+ assertEquals(1, protoFrame.getRowsCount());
+ // Get that row we created
+ Common.Row protoRow = protoFrame.getRows(0);
+ // One row has many columns
+ List<Common.ColumnValue> protoColumns = protoRow.getValueList();
+ // We should have two columns
+ assertEquals(2, protoColumns.size());
+ // Fetch the ARRAY column
+ Common.ColumnValue protoColumn = protoColumns.get(1);
+ // We should have the 3 ARRAY elements in the array_values attribute as well as the deprecated
+ // values attribute.
+ List<Common.TypedValue> deprecatedValues = protoColumn.getValueList();
+ assertEquals(3, deprecatedValues.size());
+ assertTrue("Column 2 should have an array_value", protoColumns.get(1).getHasArrayValue());
+ List<Common.TypedValue> arrayValues = protoColumns.get(1).getArrayValueList();
+ assertEquals(arrayValues, deprecatedValues);
+ }
}
// End FrameTest.java