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