You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2015/09/29 18:48:47 UTC

[1/3] incubator-calcite git commit: [CALCITE-894] Do not generate redundant column alias for the left relation when translating IN subquery (Maryann Xue)

Repository: incubator-calcite
Updated Branches:
  refs/heads/master d697ca164 -> fbe19d83b


[CALCITE-894] Do not generate redundant column alias for the left relation when translating IN subquery (Maryann Xue)


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

Branch: refs/heads/master
Commit: c6cc5a7794848ef745739518742c490839770e31
Parents: d697ca1
Author: maryannxue <we...@intel.com>
Authored: Mon Sep 28 13:57:58 2015 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Mon Sep 28 13:57:58 2015 -0700

----------------------------------------------------------------------
 .../calcite/sql2rel/SqlToRelConverter.java      | 14 ++++++++-----
 .../java/org/apache/calcite/test/JdbcTest.java  | 15 ++++++-------
 .../org/apache/calcite/test/RelOptRulesTest.xml | 22 ++++++++------------
 .../calcite/test/SqlToRelConverterTest.xml      | 19 +++++++----------
 4 files changed, 32 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/c6cc5a77/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java b/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
index c6c03b2..a3d9ff7 100644
--- a/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
+++ b/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
@@ -3723,12 +3723,16 @@ public class SqlToRelConverter {
 
         final List<Integer> leftJoinKeys = Lists.newArrayList();
         for (RexNode leftKey : leftKeys) {
-          newLeftInputExpr.add(leftKey);
-          leftJoinKeys.add(origLeftInputCount + leftJoinKeys.size());
+          int index = newLeftInputExpr.indexOf(leftKey);
+          if (index < 0 || joinType == JoinRelType.LEFT) {
+            index = newLeftInputExpr.size();
+            newLeftInputExpr.add(leftKey);
+          }
+          leftJoinKeys.add(index);
         }
 
-        LogicalProject newLeftInput =
-            (LogicalProject) RelOptUtil.createProject(
+        RelNode newLeftInput =
+            RelOptUtil.createProject(
                 root,
                 newLeftInputExpr,
                 null,
@@ -3747,7 +3751,7 @@ public class SqlToRelConverter {
         final int rightOffset = root.getRowType().getFieldCount()
             - newLeftInput.getRowType().getFieldCount();
         final List<Integer> rightKeys =
-            Util.range(rightOffset, rightOffset + leftJoinKeys.size());
+            Util.range(rightOffset, rightOffset + leftKeys.size());
 
         joinCond =
             RelOptUtil.createEquiJoinCondition(newLeftInput, leftJoinKeys,

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/c6cc5a77/core/src/test/java/org/apache/calcite/test/JdbcTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/JdbcTest.java b/core/src/test/java/org/apache/calcite/test/JdbcTest.java
index 43c9ae9..4467785 100644
--- a/core/src/test/java/org/apache/calcite/test/JdbcTest.java
+++ b/core/src/test/java/org/apache/calcite/test/JdbcTest.java
@@ -2828,21 +2828,18 @@ public class JdbcTest {
             + "  where \"empid\" < 150)")
         .convertContains(""
             + "LogicalProject(deptno=[$0], name=[$1], employees=[$2], location=[$3])\n"
-            + "  LogicalJoin(condition=[=($4, $5)], joinType=[inner])\n"
-            + "    LogicalProject($f0=[$0], $f1=[$1], $f2=[$2], $f3=[$3], $f4=[$0])\n"
-            + "      EnumerableTableScan(table=[[hr, depts]])\n"
+            + "  LogicalJoin(condition=[=($0, $4)], joinType=[inner])\n"
+            + "    EnumerableTableScan(table=[[hr, depts]])\n"
             + "    LogicalAggregate(group=[{0}])\n"
             + "      LogicalProject(deptno=[$1])\n"
             + "        LogicalFilter(condition=[<($0, 150)])\n"
             + "          LogicalProject(empid=[$0], deptno=[$1])\n"
             + "            EnumerableTableScan(table=[[hr, emps]])")
         .explainContains(""
-            + "EnumerableCalc(expr#0..4=[{inputs}], proj#0..3=[{exprs}])\n"
-            + "  EnumerableSemiJoin(condition=[=($4, $6)], joinType=[inner])\n"
-            + "    EnumerableCalc(expr#0..3=[{inputs}], proj#0..3=[{exprs}], $f4=[$t0])\n"
-            + "      EnumerableTableScan(table=[[hr, depts]])\n"
-            + "    EnumerableCalc(expr#0..4=[{inputs}], expr#5=[150], expr#6=[<($t0, $t5)], proj#0..4=[{exprs}], $condition=[$t6])\n"
-            + "      EnumerableTableScan(table=[[hr, emps]])")
+            + "EnumerableSemiJoin(condition=[=($0, $5)], joinType=[inner])\n"
+            + "  EnumerableTableScan(table=[[hr, depts]])\n"
+            + "  EnumerableCalc(expr#0..4=[{inputs}], expr#5=[150], expr#6=[<($t0, $t5)], proj#0..4=[{exprs}], $condition=[$t6])\n"
+            + "    EnumerableTableScan(table=[[hr, emps]])")
         .returnsUnordered(
             "deptno=10; name=Sales; employees=[Employee [empid: 100, deptno: 10, name: Bill], Employee [empid: 150, deptno: 10, name: Sebastian]]; location=Location [x: -122, y: 38]");
   }

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/c6cc5a77/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
----------------------------------------------------------------------
diff --git a/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml b/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
index 52948a9..644449a 100644
--- a/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
@@ -361,24 +361,20 @@ LogicalProject(EXPR$0=[1])
             <![CDATA[
 LogicalProject(DEPTNO=[$0], NAME=[$1])
   LogicalFilter(condition=[<=($0, 10)])
-    LogicalProject(DEPTNO=[$0], NAME=[$1])
-      SemiJoin(condition=[=($2, $3)], joinType=[inner])
-        LogicalProject($f0=[$0], $f1=[$1], $f2=[$0])
-          LogicalTableScan(table=[[CATALOG, SALES, DEPT]])
-        LogicalProject(DEPTNO=[$7])
-          LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+    SemiJoin(condition=[=($0, $2)], joinType=[inner])
+      LogicalTableScan(table=[[CATALOG, SALES, DEPT]])
+      LogicalProject(DEPTNO=[$7])
+        LogicalTableScan(table=[[CATALOG, SALES, EMP]])
 ]]>
         </Resource>
         <Resource name="planAfter">
             <![CDATA[
 LogicalProject(DEPTNO=[$0], NAME=[$1])
-  LogicalProject(DEPTNO=[$0], NAME=[$1])
-    SemiJoin(condition=[=($2, $3)], joinType=[inner])
-      LogicalFilter(condition=[<=($0, 10)])
-        LogicalProject($f0=[$0], $f1=[$1], $f2=[$0])
-          LogicalTableScan(table=[[CATALOG, SALES, DEPT]])
-      LogicalProject(DEPTNO=[$7])
-        LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+  SemiJoin(condition=[=($0, $2)], joinType=[inner])
+    LogicalFilter(condition=[<=($0, 10)])
+      LogicalTableScan(table=[[CATALOG, SALES, DEPT]])
+    LogicalProject(DEPTNO=[$7])
+      LogicalTableScan(table=[[CATALOG, SALES, EMP]])
 ]]>
         </Resource>
     </TestCase>

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/c6cc5a77/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
----------------------------------------------------------------------
diff --git a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
index 95c5507..751ecfa 100644
--- a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
@@ -545,9 +545,8 @@ LogicalProject(EMPNO=[$0])
         <Resource name="plan">
             <![CDATA[
 LogicalProject(EMPNO=[$0])
-  LogicalJoin(condition=[=($9, $10)], joinType=[inner])
-    LogicalProject($f0=[$0], $f1=[$1], $f2=[$2], $f3=[$3], $f4=[$4], $f5=[$5], $f6=[$6], $f7=[$7], $f8=[$8], $f9=[$7])
-      LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+  LogicalJoin(condition=[=($7, $9)], joinType=[inner])
+    LogicalTableScan(table=[[CATALOG, SALES, EMP]])
     LogicalAggregate(group=[{0}])
       LogicalValues(tuples=[[{ 10 }, { 20 }, { 30 }, { 40 }, { 50 }, { 60 }, { 70 }, { 80 }, { 90 }, { 100 }, { 110 }, { 120 }, { 130 }, { 140 }, { 150 }, { 160 }, { 170 }, { 180 }, { 190 }, { 200 }, { 210 }, { 220 }, { 230 }]])
 ]]>
@@ -560,9 +559,8 @@ LogicalProject(EMPNO=[$0])
         <Resource name="plan">
             <![CDATA[
 LogicalProject(EMPNO=[$0])
-  LogicalJoin(condition=[=($9, $10)], joinType=[inner])
-    LogicalProject($f0=[$0], $f1=[$1], $f2=[$2], $f3=[$3], $f4=[$4], $f5=[$5], $f6=[$6], $f7=[$7], $f8=[$8], $f9=[$7])
-      LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+  LogicalJoin(condition=[=($7, $9)], joinType=[inner])
+    LogicalTableScan(table=[[CATALOG, SALES, EMP]])
     LogicalAggregate(group=[{0}])
       LogicalProject(DEPTNO=[$0])
         LogicalTableScan(table=[[CATALOG, SALES, DEPT]])
@@ -2217,11 +2215,10 @@ having sal in (
         <Resource name="plan">
             <![CDATA[
 LogicalProject(SAL=[$0])
-  LogicalJoin(condition=[=($1, $2)], joinType=[inner])
-    LogicalProject($f0=[$0], $f1=[$0])
-      LogicalAggregate(group=[{0}])
-        LogicalProject(SAL=[$5])
-          LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+  LogicalJoin(condition=[=($0, $1)], joinType=[inner])
+    LogicalAggregate(group=[{0}])
+      LogicalProject(SAL=[$5])
+        LogicalTableScan(table=[[CATALOG, SALES, EMP]])
     LogicalAggregate(group=[{0}])
       LogicalProject(DEPTNO=[$0])
         LogicalFilter(condition=[>($1, 0)])


[2/3] incubator-calcite git commit: [CALCITE-898] Type of 'Java * INTEGER' should be BIGINT

Posted by jh...@apache.org.
[CALCITE-898] Type of 'Java<Long> * INTEGER' should be BIGINT


Project: http://git-wip-us.apache.org/repos/asf/incubator-calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-calcite/commit/0cb2e275
Tree: http://git-wip-us.apache.org/repos/asf/incubator-calcite/tree/0cb2e275
Diff: http://git-wip-us.apache.org/repos/asf/incubator-calcite/diff/0cb2e275

Branch: refs/heads/master
Commit: 0cb2e275d61a22b931212f834a7922266fa5d772
Parents: c6cc5a7
Author: Julian Hyde <jh...@apache.org>
Authored: Mon Sep 28 18:25:48 2015 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Mon Sep 28 19:06:14 2015 -0700

----------------------------------------------------------------------
 .../calcite/sql/type/SqlTypeFactoryImpl.java    | 40 +++++++++++++++-----
 example/csv/pom.xml                             |  5 +++
 .../java/org/apache/calcite/test/CsvTest.java   | 27 +++++++++++++
 .../csv/src/test/resources/bug/LONG_EMPS.csv    |  6 +++
 4 files changed, 69 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/0cb2e275/core/src/main/java/org/apache/calcite/sql/type/SqlTypeFactoryImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/type/SqlTypeFactoryImpl.java b/core/src/main/java/org/apache/calcite/sql/type/SqlTypeFactoryImpl.java
index a37369c..28a5d2d 100644
--- a/core/src/main/java/org/apache/calcite/sql/type/SqlTypeFactoryImpl.java
+++ b/core/src/main/java/org/apache/calcite/sql/type/SqlTypeFactoryImpl.java
@@ -216,25 +216,47 @@ public class SqlTypeFactoryImpl extends RelDataTypeFactoryImpl {
 
   private RelDataType leastRestrictiveSqlType(List<RelDataType> types) {
     RelDataType resultType = null;
-    boolean anyNullable = false;
+    int nullCount = 0;
+    int nullableCount = 0;
+    int javaCount = 0;
 
-    for (int i = 0; i < types.size(); ++i) {
-      RelDataType type = types.get(i);
-      RelDataTypeFamily family = type.getFamily();
-
-      SqlTypeName typeName = type.getSqlTypeName();
+    for (RelDataType type : types) {
+      final SqlTypeName typeName = type.getSqlTypeName();
       if (typeName == null) {
         return null;
       }
-
       if (type.isNullable()) {
-        anyNullable = true;
+        ++nullableCount;
+      }
+      if (typeName == SqlTypeName.NULL) {
+        ++nullCount;
       }
+      if (isJavaType(type)) {
+        ++javaCount;
+      }
+    }
+
+    for (int i = 0; i < types.size(); ++i) {
+      RelDataType type = types.get(i);
+      RelDataTypeFamily family = type.getFamily();
 
+      final SqlTypeName typeName = type.getSqlTypeName();
       if (typeName == SqlTypeName.NULL) {
         continue;
       }
 
+      // Convert Java types; for instance, JavaType(int) becomes INTEGER.
+      // Except if all types are either NULL or Java types.
+      if (isJavaType(type) && javaCount + nullCount < types.size()) {
+        final RelDataType originalType = type;
+        type = typeName.allowsPrecScale(true, true)
+            ? createSqlType(typeName, type.getPrecision(), type.getScale())
+            : typeName.allowsPrecScale(true, false)
+            ? createSqlType(typeName, type.getPrecision())
+            : createSqlType(typeName);
+        type = createTypeWithNullability(type, originalType.isNullable());
+      }
+
       if (resultType == null) {
         resultType = type;
         if (resultType.getSqlTypeName() == SqlTypeName.ROW) {
@@ -442,7 +464,7 @@ public class SqlTypeFactoryImpl extends RelDataTypeFactoryImpl {
         return null;
       }
     }
-    if (resultType != null && anyNullable) {
+    if (resultType != null && nullableCount > 0) {
       resultType = createTypeWithNullability(resultType, true);
     }
     return resultType;

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/0cb2e275/example/csv/pom.xml
----------------------------------------------------------------------
diff --git a/example/csv/pom.xml b/example/csv/pom.xml
index fd0f53c..2f436ad 100644
--- a/example/csv/pom.xml
+++ b/example/csv/pom.xml
@@ -66,6 +66,11 @@ limitations under the License.
       <artifactId>commons-lang3</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.hamcrest</groupId>
+      <artifactId>hamcrest-core</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
       <groupId>sqlline</groupId>
       <artifactId>sqlline</artifactId>
       <scope>test</scope>

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/0cb2e275/example/csv/src/test/java/org/apache/calcite/test/CsvTest.java
----------------------------------------------------------------------
diff --git a/example/csv/src/test/java/org/apache/calcite/test/CsvTest.java b/example/csv/src/test/java/org/apache/calcite/test/CsvTest.java
index 3fe8363..a048319 100644
--- a/example/csv/src/test/java/org/apache/calcite/test/CsvTest.java
+++ b/example/csv/src/test/java/org/apache/calcite/test/CsvTest.java
@@ -19,6 +19,8 @@ package org.apache.calcite.test;
 import org.apache.calcite.linq4j.function.Function1;
 import org.apache.calcite.sql2rel.SqlToRelConverter;
 
+import com.google.common.base.Throwables;
+
 import org.junit.Assert;
 import org.junit.Ignore;
 import org.junit.Test;
@@ -36,6 +38,9 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.Properties;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
 /**
  * Unit test of the Calcite adapter for CSV.
  */
@@ -127,6 +132,28 @@ public class CsvTest {
     checkSql("smart", "select name from DEPTS");
   }
 
+  /** Test case for
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-898">[CALCITE-898]
+   * Type inference multiplying Java long by SQL INTEGER</a>. */
+  @Test public void testSelectLongMultiplyInteger() throws SQLException {
+    final String sql = "select empno * 3 as e3\n"
+        + "from long_emps where empno = 100";
+
+    checkSql(sql, "bug", new Function1<ResultSet, Void>() {
+      public Void apply(ResultSet resultSet) {
+        try {
+          assertThat(resultSet.next(), is(true));
+          Long o = (Long) resultSet.getObject(1);
+          assertThat(o, is(300L));
+          assertThat(resultSet.next(), is(false));
+          return null;
+        } catch (SQLException e) {
+          throw Throwables.propagate(e);
+        }
+      }
+    });
+  }
+
   @Test public void testCustomTable() throws SQLException {
     checkSql("model-with-custom-table", "select * from CUSTOM_TABLE.EMPS");
   }

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/0cb2e275/example/csv/src/test/resources/bug/LONG_EMPS.csv
----------------------------------------------------------------------
diff --git a/example/csv/src/test/resources/bug/LONG_EMPS.csv b/example/csv/src/test/resources/bug/LONG_EMPS.csv
new file mode 100644
index 0000000..f69e0c5
--- /dev/null
+++ b/example/csv/src/test/resources/bug/LONG_EMPS.csv
@@ -0,0 +1,6 @@
+EMPNO:long,NAME:string,DEPTNO:int,GENDER:string,CITY:string,EMPID:int,AGE:int,SLACKER:boolean,MANAGER:boolean,JOINEDAT:date
+100,"Fred",10,,,30,25,true,false,"1996-08-03"
+110,"Eric",20,"M","San Francisco",3,80,,false,"2001-01-01"
+110,"John",40,"M","Vancouver",2,,false,true,"2002-05-03"
+120,"Wilma",20,"F",,1,5,,true,"2005-09-07"
+130,"Alice",40,"F","Vancouver",2,,false,true,"2007-01-01"


[3/3] incubator-calcite git commit: [CALCITE-843] AvaticaConnection.getAutoCommit throws NullPointerException

Posted by jh...@apache.org.
[CALCITE-843] AvaticaConnection.getAutoCommit throws NullPointerException


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

Branch: refs/heads/master
Commit: fbe19d83be71a0c3be315262d215a2d439b34511
Parents: 0cb2e27
Author: Julian Hyde <jh...@apache.org>
Authored: Mon Sep 28 18:28:36 2015 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Mon Sep 28 19:06:14 2015 -0700

----------------------------------------------------------------------
 .../calcite/avatica/AvaticaConnection.java      | 24 ++++++++++++++++----
 .../calcite/avatica/remote/RemoteMeta.java      |  3 ++-
 2 files changed, 21 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/fbe19d83/avatica/src/main/java/org/apache/calcite/avatica/AvaticaConnection.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/AvaticaConnection.java b/avatica/src/main/java/org/apache/calcite/avatica/AvaticaConnection.java
index e602ed7..1a7443c 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/AvaticaConnection.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/AvaticaConnection.java
@@ -134,7 +134,7 @@ public abstract class AvaticaConnection implements Connection {
   }
 
   public boolean getAutoCommit() throws SQLException {
-    return meta.connectionSync(handle, new ConnectionPropertiesImpl()).isAutoCommit();
+    return unbox(sync().isAutoCommit(), true);
   }
 
   public void commit() throws SQLException {
@@ -173,7 +173,7 @@ public abstract class AvaticaConnection implements Connection {
   }
 
   public boolean isReadOnly() throws SQLException {
-    return meta.connectionSync(handle, new ConnectionPropertiesImpl()).isReadOnly();
+    return unbox(sync().isReadOnly(), true);
   }
 
   public void setCatalog(String catalog) throws SQLException {
@@ -181,7 +181,7 @@ public abstract class AvaticaConnection implements Connection {
   }
 
   public String getCatalog() {
-    return meta.connectionSync(handle, new ConnectionPropertiesImpl()).getCatalog();
+    return sync().getCatalog();
   }
 
   public void setTransactionIsolation(int level) throws SQLException {
@@ -190,7 +190,7 @@ public abstract class AvaticaConnection implements Connection {
 
   public int getTransactionIsolation() throws SQLException {
     //noinspection MagicConstant
-    return meta.connectionSync(handle, new ConnectionPropertiesImpl()).getTransactionIsolation();
+    return unbox(sync().getTransactionIsolation(), TRANSACTION_NONE);
   }
 
   public SQLWarning getWarnings() throws SQLException {
@@ -358,7 +358,7 @@ public abstract class AvaticaConnection implements Connection {
   }
 
   public String getSchema() {
-    return meta.connectionSync(handle, new ConnectionPropertiesImpl()).getSchema();
+    return sync().getSchema();
   }
 
   public void abort(Executor executor) throws SQLException {
@@ -503,6 +503,20 @@ public abstract class AvaticaConnection implements Connection {
     return new Trojan();
   }
 
+  /** Converts a {@link Boolean} to a {@code boolean}, with a default value. */
+  private boolean unbox(Boolean b, boolean defaultValue) {
+    return b == null ? defaultValue : b;
+  }
+
+  /** Converts an {@link Integer} to an {@code int}, with a default value. */
+  private int unbox(Integer i, int defaultValue) {
+    return i == null ? defaultValue : i;
+  }
+
+  private Meta.ConnectionProperties sync() {
+    return meta.connectionSync(handle, new ConnectionPropertiesImpl());
+  }
+
   /** A way to call package-protected methods. But only a sub-class of
    * connection can create one. */
   public static class Trojan {

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/fbe19d83/avatica/src/main/java/org/apache/calcite/avatica/remote/RemoteMeta.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/RemoteMeta.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/RemoteMeta.java
index deacdee..f6047d0 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/RemoteMeta.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/RemoteMeta.java
@@ -30,7 +30,8 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * Implementation of {@link Meta} for the remote driver.
+ * Implementation of {@link org.apache.calcite.avatica.Meta} for the remote
+ * driver.
  */
 class RemoteMeta extends MetaImpl {
   final Service service;