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/12/03 19:23:12 UTC

[1/2] calcite git commit: [CALCITE-997] Document keywords

Repository: calcite
Updated Branches:
  refs/heads/master 3be816f45 -> 14419d8c3


[CALCITE-997] Document keywords

Add a test that generates reference.md from the current set of keywords,
and fails if the generated version is different from the current one.


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

Branch: refs/heads/master
Commit: 6c35f3b81c0dc9d37897dd7304098204e96ee883
Parents: 3be816f
Author: Julian Hyde <jh...@apache.org>
Authored: Wed Dec 2 03:51:32 2015 -0800
Committer: Julian Hyde <jh...@apache.org>
Committed: Thu Dec 3 01:44:32 2015 -0800

----------------------------------------------------------------------
 .../calcite/sql/parser/SqlParserTest.java       |  63 ++-
 site/_docs/reference.md                         | 533 +++++++++++++++++++
 2 files changed, 595 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite/blob/6c35f3b8/core/src/test/java/org/apache/calcite/sql/parser/SqlParserTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/sql/parser/SqlParserTest.java b/core/src/test/java/org/apache/calcite/sql/parser/SqlParserTest.java
index 80930ba..365d16b 100644
--- a/core/src/test/java/org/apache/calcite/sql/parser/SqlParserTest.java
+++ b/core/src/test/java/org/apache/calcite/sql/parser/SqlParserTest.java
@@ -22,6 +22,7 @@ import org.apache.calcite.sql.SqlDialect;
 import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.SqlSetOption;
 import org.apache.calcite.sql.pretty.SqlPrettyWriter;
+import org.apache.calcite.test.DiffTestCase;
 import org.apache.calcite.test.SqlValidatorTestCase;
 import org.apache.calcite.util.Bug;
 import org.apache.calcite.util.ConversionUtil;
@@ -31,6 +32,13 @@ import org.apache.calcite.util.Util;
 import org.junit.Ignore;
 import org.junit.Test;
 
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.net.URL;
 import java.util.Locale;
 
 import static org.hamcrest.CoreMatchers.equalTo;
@@ -2021,7 +2029,10 @@ public class SqlParserTest {
         "(?s).*Encountered \"\\( \\)\" at .*");
   }
 
-  /** Test case for [CALCITE-493]. */
+  /** Test case for
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-493">[CALCITE-493]
+   * Add EXTEND clause, for defining columns and their types at query/DML
+   * time</a>. */
   @Test public void testTableExtend() {
     sql("select * from emp extend (x int, y varchar(10) not null)")
         .ok("SELECT *\n"
@@ -5629,6 +5640,56 @@ public class SqlParserTest {
     assertTrue(!jdbcKeywords.contains(",SELECT,"));
   }
 
+  /** Generates a copy of {@code reference.md} with the current set of key
+   * words. Fails if the copy is different from the original. */
+  @Test public void testGenerateKeyWords() throws IOException {
+    // inUrl = "file:/home/x/calcite/core/target/test-classes/hsqldb-model.json"
+    String path = "hsqldb-model.json";
+    final URL inUrl = SqlParserTest.class.getResource("/" + path);
+    String x = inUrl.getFile();
+    assert x.endsWith(path);
+    x = x.substring(0, x.length() - path.length());
+    assert x.endsWith("core/target/test-classes/");
+    x = x.substring(0, x.length() - "core/target/test-classes/".length());
+    final File base = new File(x);
+    final File inFile = new File(base, "site/_docs/reference.md");
+    final File outFile = new File(base, "core/target/surefire/reference.md");
+    outFile.getParentFile().mkdirs();
+    try (BufferedReader r = new BufferedReader(new FileReader(inFile));
+         PrintWriter w = new PrintWriter(new FileWriter(outFile))) {
+      String line;
+      int stage = 0;
+      while ((line = r.readLine()) != null) {
+        if (line.equals("{% comment %} end {% endcomment %}")) {
+          ++stage;
+        }
+        if (stage != 1) {
+          w.println(line);
+        }
+        if (line.equals("{% comment %} start {% endcomment %}")) {
+          ++stage;
+          SqlAbstractParserImpl.Metadata metadata = getParserMetadata();
+          int z = 0;
+          for (String s : metadata.getTokens()) {
+            if (z++ > 0) {
+              w.println(",");
+            }
+            if (metadata.isKeyword(s)) {
+              w.print(metadata.isReservedWord(s) ? ("**" + s + "**") : s);
+            }
+          }
+          w.println(".");
+        }
+      }
+    }
+    String diff = DiffTestCase.diff(outFile, inFile);
+    if (!diff.isEmpty()) {
+      throw new AssertionError("Mismatch between " + outFile
+          + " and " + inFile + ":\n"
+          + diff);
+    }
+  }
+
   @Test public void testTabStop() {
     check(
         "SELECT *\n\tFROM mytable",

http://git-wip-us.apache.org/repos/asf/calcite/blob/6c35f3b8/site/_docs/reference.md
----------------------------------------------------------------------
diff --git a/site/_docs/reference.md b/site/_docs/reference.md
index 2165410..7f267bd 100644
--- a/site/_docs/reference.md
+++ b/site/_docs/reference.md
@@ -184,6 +184,539 @@ and EXISTS expressions.  A sub-query that occurs in IN and
 EXISTS expressions may be correlated; that is, refer to tables in
 the FROM clause of an enclosing query.
 
+## Keywords
+
+The following is a list of SQL keywords.
+Reserved keywords are **bold**.
+
+{% comment %} start {% endcomment %}
+A,
+**ABS**,
+ABSOLUTE,
+ACTION,
+ADA,
+ADD,
+ADMIN,
+AFTER,
+**ALL**,
+**ALLOCATE**,
+**ALLOW**,
+**ALTER**,
+ALWAYS,
+**AND**,
+**ANY**,
+**ARE**,
+**ARRAY**,
+**AS**,
+ASC,
+**ASENSITIVE**,
+ASSERTION,
+ASSIGNMENT,
+**ASYMMETRIC**,
+**AT**,
+**ATOMIC**,
+ATTRIBUTE,
+ATTRIBUTES,
+**AUTHORIZATION**,
+**AVG**,
+BEFORE,
+**BEGIN**,
+BERNOULLI,
+**BETWEEN**,
+**BIGINT**,
+**BINARY**,
+**BIT**,
+**BLOB**,
+**BOOLEAN**,
+**BOTH**,
+BREADTH,
+**BY**,
+C,
+**CALL**,
+**CALLED**,
+**CARDINALITY**,
+CASCADE,
+**CASCADED**,
+**CASE**,
+**CAST**,
+CATALOG,
+CATALOG_NAME,
+**CEIL**,
+**CEILING**,
+CHAIN,
+**CHAR**,
+**CHARACTER**,
+CHARACTERISTICTS,
+CHARACTERS,
+**CHARACTER_LENGTH**,
+CHARACTER_SET_CATALOG,
+CHARACTER_SET_NAME,
+CHARACTER_SET_SCHEMA,
+**CHAR_LENGTH**,
+**CHECK**,
+CLASS_ORIGIN,
+**CLOB**,
+**CLOSE**,
+**COALESCE**,
+COBOL,
+**COLLATE**,
+COLLATION,
+COLLATION_CATALOG,
+COLLATION_NAME,
+COLLATION_SCHEMA,
+**COLLECT**,
+**COLUMN**,
+COLUMN_NAME,
+COMMAND_FUNCTION,
+COMMAND_FUNCTION_CODE,
+**COMMIT**,
+COMMITTED,
+**CONDITION**,
+CONDITION_NUMBER,
+**CONNECT**,
+CONNECTION,
+CONNECTION_NAME,
+**CONSTRAINT**,
+CONSTRAINTS,
+CONSTRAINT_CATALOG,
+CONSTRAINT_NAME,
+CONSTRAINT_SCHEMA,
+CONSTRUCTOR,
+CONTAINS,
+CONTINUE,
+**CONVERT**,
+**CORR**,
+**CORRESPONDING**,
+**COUNT**,
+**COVAR_POP**,
+**COVAR_SAMP**,
+**CREATE**,
+**CROSS**,
+**CUBE**,
+**CUME_DIST**,
+**CURRENT**,
+**CURRENT_CATALOG**,
+**CURRENT_DATE**,
+**CURRENT_DEFAULT_TRANSFORM_GROUP**,
+**CURRENT_PATH**,
+**CURRENT_ROLE**,
+**CURRENT_SCHEMA**,
+**CURRENT_TIME**,
+**CURRENT_TIMESTAMP**,
+**CURRENT_TRANSFORM_GROUP_FOR_TYPE**,
+**CURRENT_USER**,
+**CURSOR**,
+CURSOR_NAME,
+**CYCLE**,
+DATA,
+**DATE**,
+DATETIME_INTERVAL_CODE,
+DATETIME_INTERVAL_PRECISION,
+**DAY**,
+**DEALLOCATE**,
+**DEC**,
+**DECIMAL**,
+**DECLARE**,
+**DEFAULT**,
+DEFAULTS,
+DEFERRABLE,
+DEFERRED,
+DEFINED,
+DEFINER,
+DEGREE,
+**DELETE**,
+**DENSE_RANK**,
+DEPTH,
+**DEREF**,
+DERIVED,
+DESC,
+**DESCRIBE**,
+DESCRIPTION,
+DESCRIPTOR,
+**DETERMINISTIC**,
+DIAGNOSTICS,
+**DISALLOW**,
+**DISCONNECT**,
+DISPATCH,
+**DISTINCT**,
+DOMAIN,
+**DOUBLE**,
+**DROP**,
+**DYNAMIC**,
+DYNAMIC_FUNCTION,
+DYNAMIC_FUNCTION_CODE,
+**EACH**,
+**ELEMENT**,
+**ELSE**,
+**END**,
+**END-EXEC**,
+EQUALS,
+**ESCAPE**,
+**EVERY**,
+**EXCEPT**,
+EXCEPTION,
+EXCLUDE,
+EXCLUDING,
+**EXEC**,
+**EXECUTE**,
+**EXISTS**,
+**EXP**,
+**EXPLAIN**,
+**EXTEND**,
+**EXTERNAL**,
+**EXTRACT**,
+**FALSE**,
+**FETCH**,
+**FILTER**,
+FINAL,
+FIRST,
+**FIRST_VALUE**,
+**FLOAT**,
+**FLOOR**,
+FOLLOWING,
+**FOR**,
+**FOREIGN**,
+FORTRAN,
+FOUND,
+**FREE**,
+**FROM**,
+**FULL**,
+**FUNCTION**,
+**FUSION**,
+G,
+GENERAL,
+GENERATED,
+**GET**,
+**GLOBAL**,
+GO,
+GOTO,
+**GRANT**,
+GRANTED,
+**GROUP**,
+**GROUPING**,
+**HAVING**,
+HIERARCHY,
+**HOLD**,
+**HOUR**,
+**IDENTITY**,
+IMMEDIATE,
+IMPLEMENTATION,
+**IMPORT**,
+**IN**,
+INCLUDING,
+INCREMENT,
+**INDICATOR**,
+INITIALLY,
+**INNER**,
+**INOUT**,
+INPUT,
+**INSENSITIVE**,
+**INSERT**,
+INSTANCE,
+INSTANTIABLE,
+**INT**,
+**INTEGER**,
+**INTERSECT**,
+**INTERSECTION**,
+**INTERVAL**,
+**INTO**,
+INVOKER,
+**IS**,
+ISOLATION,
+JAVA,
+**JOIN**,
+K,
+KEY,
+KEY_MEMBER,
+KEY_TYPE,
+LABEL,
+**LANGUAGE**,
+**LARGE**,
+LAST,
+**LAST_VALUE**,
+**LATERAL**,
+**LEADING**,
+**LEFT**,
+LENGTH,
+LEVEL,
+LIBRARY,
+**LIKE**,
+**LIMIT**,
+**LN**,
+**LOCAL**,
+**LOCALTIME**,
+**LOCALTIMESTAMP**,
+LOCATOR,
+**LOWER**,
+M,
+MAP,
+**MATCH**,
+MATCHED,
+**MAX**,
+MAXVALUE,
+**MEMBER**,
+**MERGE**,
+MESSAGE_LENGTH,
+MESSAGE_OCTET_LENGTH,
+MESSAGE_TEXT,
+**METHOD**,
+**MIN**,
+**MINUTE**,
+MINVALUE,
+**MOD**,
+**MODIFIES**,
+**MODULE**,
+**MONTH**,
+MORE,
+**MULTISET**,
+MUMPS,
+NAME,
+NAMES,
+**NATIONAL**,
+**NATURAL**,
+**NCHAR**,
+**NCLOB**,
+NESTING,
+**NEW**,
+**NEXT**,
+**NO**,
+**NONE**,
+**NORMALIZE**,
+NORMALIZED,
+**NOT**,
+**NULL**,
+NULLABLE,
+**NULLIF**,
+NULLS,
+NUMBER,
+**NUMERIC**,
+OBJECT,
+OCTETS,
+**OCTET_LENGTH**,
+**OF**,
+**OFFSET**,
+**OLD**,
+**ON**,
+**ONLY**,
+**OPEN**,
+OPTION,
+OPTIONS,
+**OR**,
+**ORDER**,
+ORDERING,
+ORDINALITY,
+OTHERS,
+**OUT**,
+**OUTER**,
+OUTPUT,
+**OVER**,
+**OVERLAPS**,
+**OVERLAY**,
+OVERRIDING,
+PAD,
+**PARAMETER**,
+PARAMETER_MODE,
+PARAMETER_NAME,
+PARAMETER_ORDINAL_POSITION,
+PARAMETER_SPECIFIC_CATALOG,
+PARAMETER_SPECIFIC_NAME,
+PARAMETER_SPECIFIC_SCHEMA,
+PARTIAL,
+**PARTITION**,
+PASCAL,
+PASSTHROUGH,
+PATH,
+**PERCENTILE_CONT**,
+**PERCENTILE_DISC**,
+**PERCENT_RANK**,
+PLACING,
+PLAN,
+PLI,
+**POSITION**,
+**POWER**,
+PRECEDING,
+**PRECISION**,
+**PREPARE**,
+PRESERVE,
+**PRIMARY**,
+PRIOR,
+PRIVILEGES,
+**PROCEDURE**,
+PUBLIC,
+**RANGE**,
+**RANK**,
+READ,
+**READS**,
+**REAL**,
+**RECURSIVE**,
+**REF**,
+**REFERENCES**,
+**REFERENCING**,
+**REGR_AVGX**,
+**REGR_AVGY**,
+**REGR_COUNT**,
+**REGR_INTERCEPT**,
+**REGR_R2**,
+**REGR_SLOPE**,
+**REGR_SXX**,
+**REGR_SXY**,
+**REGR_SYY**,
+RELATIVE,
+**RELEASE**,
+REPEATABLE,
+**RESET**,
+RESTART,
+RESTRICT,
+**RESULT**,
+**RETURN**,
+RETURNED_CARDINALITY,
+RETURNED_LENGTH,
+RETURNED_OCTET_LENGTH,
+RETURNED_SQLSTATE,
+**RETURNS**,
+**REVOKE**,
+**RIGHT**,
+ROLE,
+**ROLLBACK**,
+**ROLLUP**,
+ROUTINE,
+ROUTINE_CATALOG,
+ROUTINE_NAME,
+ROUTINE_SCHEMA,
+**ROW**,
+**ROWS**,
+ROW_COUNT,
+**ROW_NUMBER**,
+**SAVEPOINT**,
+SCALE,
+SCHEMA,
+SCHEMA_NAME,
+**SCOPE**,
+SCOPE_CATALOGS,
+SCOPE_NAME,
+SCOPE_SCHEMA,
+**SCROLL**,
+**SEARCH**,
+**SECOND**,
+SECTION,
+SECURITY,
+**SELECT**,
+SELF,
+**SENSITIVE**,
+SEQUENCE,
+SERIALIZABLE,
+SERVER,
+SERVER_NAME,
+SESSION,
+**SESSION_USER**,
+**SET**,
+SETS,
+**SIMILAR**,
+SIMPLE,
+SIZE,
+**SMALLINT**,
+**SOME**,
+SOURCE,
+SPACE,
+**SPECIFIC**,
+**SPECIFICTYPE**,
+SPECIFIC_NAME,
+**SQL**,
+**SQLEXCEPTION**,
+**SQLSTATE**,
+**SQLWARNING**,
+**SQRT**,
+**START**,
+STATE,
+STATEMENT,
+**STATIC**,
+**STDDEV_POP**,
+**STDDEV_SAMP**,
+**STREAM**,
+STRUCTURE,
+STYLE,
+SUBCLASS_ORIGIN,
+**SUBMULTISET**,
+SUBSTITUTE,
+**SUBSTRING**,
+**SUM**,
+**SYMMETRIC**,
+**SYSTEM**,
+**SYSTEM_USER**,
+**TABLE**,
+**TABLESAMPLE**,
+TABLE_NAME,
+TEMPORARY,
+**THEN**,
+TIES,
+**TIME**,
+**TIMESTAMP**,
+**TIMEZONE_HOUR**,
+**TIMEZONE_MINUTE**,
+**TINYINT**,
+**TO**,
+TOP_LEVEL_COUNT,
+**TRAILING**,
+TRANSACTION,
+TRANSACTIONS_ACTIVE,
+TRANSACTIONS_COMMITTED,
+TRANSACTIONS_ROLLED_BACK,
+TRANSFORM,
+TRANSFORMS,
+**TRANSLATE**,
+**TRANSLATION**,
+**TREAT**,
+**TRIGGER**,
+TRIGGER_CATALOG,
+TRIGGER_NAME,
+TRIGGER_SCHEMA,
+**TRIM**,
+**TRUE**,
+TYPE,
+**UESCAPE**,
+UNBOUNDED,
+UNCOMMITTED,
+UNDER,
+**UNION**,
+**UNIQUE**,
+**UNKNOWN**,
+UNNAMED,
+**UNNEST**,
+**UPDATE**,
+**UPPER**,
+**UPSERT**,
+USAGE,
+**USER**,
+USER_DEFINED_TYPE_CATALOG,
+USER_DEFINED_TYPE_CODE,
+USER_DEFINED_TYPE_NAME,
+USER_DEFINED_TYPE_SCHEMA,
+**USING**,
+**VALUE**,
+**VALUES**,
+**VARBINARY**,
+**VARCHAR**,
+**VARYING**,
+**VAR_POP**,
+**VAR_SAMP**,
+VERSION,
+VIEW,
+**WHEN**,
+**WHENEVER**,
+**WHERE**,
+**WIDTH_BUCKET**,
+**WINDOW**,
+**WITH**,
+**WITHIN**,
+**WITHOUT**,
+WORK,
+WRAPPER,
+WRITE,
+XML,
+**YEAR**,
+ZONE.
+{% comment %} end {% endcomment %}
+
 ## Identifiers
 
 Identifiers are the names of tables, columns and other metadata


[2/2] calcite git commit: [CALCITE-1001] Upgrade to quidem-0.7

Posted by jh...@apache.org.
[CALCITE-1001] Upgrade to quidem-0.7


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

Branch: refs/heads/master
Commit: 14419d8c360da8bdfa9d29f8c1d2fff357106db0
Parents: 6c35f3b
Author: Julian Hyde <jh...@apache.org>
Authored: Wed Dec 2 18:34:45 2015 -0800
Committer: Julian Hyde <jh...@apache.org>
Committed: Thu Dec 3 01:45:01 2015 -0800

----------------------------------------------------------------------
 .../calcite/prepare/CalcitePrepareImpl.java     | 17 +++++++------
 .../java/org/apache/calcite/test/JdbcTest.java  | 25 ++++++++++++++++----
 core/src/test/resources/sql/agg.oq              |  6 +++++
 core/src/test/resources/sql/sort.oq             | 15 +-----------
 pom.xml                                         |  2 +-
 5 files changed, 39 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite/blob/14419d8c/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java b/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java
index 052be41..6d7fb31 100644
--- a/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java
+++ b/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java
@@ -96,7 +96,6 @@ import org.apache.calcite.rel.rules.ValuesReduceRule;
 import org.apache.calcite.rel.stream.StreamRules;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.rel.type.RelDataTypeFactory;
-import org.apache.calcite.rel.type.RelDataTypeFactoryImpl;
 import org.apache.calcite.rel.type.RelDataTypeField;
 import org.apache.calcite.rex.RexBuilder;
 import org.apache.calcite.rex.RexInputRef;
@@ -901,20 +900,24 @@ public class CalcitePrepareImpl implements CalcitePrepare {
         : type.getPrecision();
   }
 
+  /** Returns the type name in string form. Does not include precision, scale
+   * or whether nulls are allowed. Example: "DECIMAL" not "DECIMAL(7, 2)";
+   * "INTEGER" not "JavaType(int)". */
   private static String getTypeName(RelDataType type) {
-    SqlTypeName sqlTypeName = type.getSqlTypeName();
-    if (type instanceof RelDataTypeFactoryImpl.JavaType) {
-      // We'd rather print "INTEGER" than "JavaType(int)".
-      return sqlTypeName.getName();
-    }
+    final SqlTypeName sqlTypeName = type.getSqlTypeName();
     switch (sqlTypeName) {
     case INTERVAL_YEAR_MONTH:
     case INTERVAL_DAY_TIME:
       // e.g. "INTERVAL_MONTH" or "INTERVAL_YEAR_MONTH"
       return "INTERVAL_"
           + type.getIntervalQualifier().toString().replace(' ', '_');
+    case ARRAY:
+    case MULTISET:
+    case MAP:
+    case ROW:
+      return type.toString(); // e.g. "INTEGER ARRAY"
     default:
-      return type.toString(); // e.g. "VARCHAR(10)", "INTEGER ARRAY"
+      return sqlTypeName.getName(); // e.g. "DECIMAL"
     }
   }
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/14419d8c/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 3709eba..5cf7d16 100644
--- a/core/src/test/java/org/apache/calcite/test/JdbcTest.java
+++ b/core/src/test/java/org/apache/calcite/test/JdbcTest.java
@@ -4641,10 +4641,26 @@ public class JdbcTest {
             return null;
           }
         };
-    final Quidem quidem = new Quidem(bufferedReader, writer, env);
-    quidem.execute(
-        new Quidem.ConnectionFactory() {
+    final Quidem.NewConnectionFactory connectionFactory =
+        new Quidem.NewConnectionFactory() {
           public Connection connect(String name) throws Exception {
+            return connect(name, false);
+          }
+
+          public Connection connect(String name, boolean reference)
+              throws Exception {
+            if (reference) {
+              if (name.equals("foodmart")) {
+                final ConnectionSpec db =
+                    CalciteAssert.DatabaseInstance.HSQLDB.foodmart;
+                final Connection connection = DriverManager.getConnection(db.url,
+                    db.username,
+                    db.password);
+                connection.setSchema("foodmart");
+                return connection;
+              }
+              return null;
+            }
             if (name.equals("hr")) {
               return CalciteAssert.hr()
                   .connect();
@@ -4700,7 +4716,8 @@ public class JdbcTest {
             }
             throw new RuntimeException("unknown connection '" + name + "'");
           }
-        });
+        };
+    new Quidem(bufferedReader, writer, env, connectionFactory).execute();
     final String diff = DiffTestCase.diff(inFile, outFile);
     if (!diff.isEmpty()) {
       fail("Files differ: " + outFile + " " + inFile + "\n" + diff);

http://git-wip-us.apache.org/repos/asf/calcite/blob/14419d8c/core/src/test/resources/sql/agg.oq
----------------------------------------------------------------------
diff --git a/core/src/test/resources/sql/agg.oq b/core/src/test/resources/sql/agg.oq
index e92f08d..2dea732 100644
--- a/core/src/test/resources/sql/agg.oq
+++ b/core/src/test/resources/sql/agg.oq
@@ -150,6 +150,9 @@ select count(mod(deptno, 20), gender) as c from emps;
 select x = 1 as x1, count(*) as c
 from (values 0, 1, 2, cast(null as integer)) as t(x)
 group by x = 1;
+X1 BOOLEAN(1)
+C BIGINT(19) NOT NULL
+!type
 +-------+---+
 | X1    | C |
 +-------+---+
@@ -664,6 +667,9 @@ select deptno,
   sum(sal) filter (where deptno = 10) sal_10
 from "scott".emp
 group by deptno;
+DEPTNO TINYINT(3)
+SAL_10 DECIMAL(7, 2)
+!type
 +--------+---------+
 | DEPTNO | SAL_10  |
 +--------+---------+

http://git-wip-us.apache.org/repos/asf/calcite/blob/14419d8c/core/src/test/resources/sql/sort.oq
----------------------------------------------------------------------
diff --git a/core/src/test/resources/sql/sort.oq b/core/src/test/resources/sql/sort.oq
index 0253072..be30ac4 100644
--- a/core/src/test/resources/sql/sort.oq
+++ b/core/src/test/resources/sql/sort.oq
@@ -20,20 +20,7 @@
 
 # The ArrayTable "days" is sorted by "day", so plan must not contain sort
 select * from "days" order by "day";
-+-----+-----------+
-| day | week_day  |
-+-----+-----------+
-|   1 | Sunday    |
-|   2 | Monday    |
-|   3 | Tuesday   |
-|   4 | Wednesday |
-|   5 | Thursday  |
-|   6 | Friday    |
-|   7 | Saturday  |
-+-----+-----------+
-(7 rows)
-
-!ok
+!verify
 EnumerableTableScan(table=[[foodmart2, days]])
 !plan
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/14419d8c/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index a3a2323..7cc273c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -205,7 +205,7 @@ limitations under the License.
       <dependency>
         <groupId>net.hydromatic</groupId>
         <artifactId>quidem</artifactId>
-        <version>0.6</version>
+        <version>0.7</version>
       </dependency>
       <dependency>
         <groupId>net.hydromatic</groupId>