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 2014/06/28 06:52:48 UTC

[4/8] git commit: Update history: release 0.8 changes and issue URLs

Update history: release 0.8 changes and issue URLs

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

Branch: refs/heads/master
Commit: 349bd74d61cdf216264fa5101f4299d202f2c2af
Parents: 96a949f
Author: Julian Hyde <ju...@hydromatic.net>
Authored: Fri Jun 27 17:27:24 2014 -0700
Committer: Julian Hyde <ju...@hydromatic.net>
Committed: Fri Jun 27 17:27:24 2014 -0700

----------------------------------------------------------------------
 HISTORY.md | 388 +++++++++++++++++++++++++++++++++-----------------------
 1 file changed, 232 insertions(+), 156 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/349bd74d/HISTORY.md
----------------------------------------------------------------------
diff --git a/HISTORY.md b/HISTORY.md
index e40d038..b7d50a8 100644
--- a/HISTORY.md
+++ b/HISTORY.md
@@ -2,13 +2,76 @@
 
 For a full list of releases, see <a href="https://github.com/julianhyde/optiq/releases">github</a>.
 
+## <a href="https://github.com/julianhyde/optiq/releases/tag/optiq-parent-0.8">0.8</a> / 2014-06-27
+
+New features
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-310">OPTIQ-310</a>]
+   Implement LEAD, LAG and NTILE windowed aggregates
+* Reduce `COUNT(not-null-expression)` to `COUNT()`
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-292">OPTIQ-292</a>]
+   Improve windowed aggregate return types
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-302">OPTIQ-302</a>]
+   Use heuristic rule to plan queries with large numbers of joins
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-283">OPTIQ-283</a>]
+  Add TPC-DS data generator
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-294">OPTIQ-294</a>]
+  Implement DENSE_RANK windowed aggregate function
+* SqlRun utility
+** [<a href="https://issues.apache.org/jira/browse/OPTIQ-290">OPTIQ-290</a>]
+   Add `SqlRun`, an idempotent utility for running SQL test scripts
+** Add "!skip" command to SqlRun.
+** Add MySQL formatting mode to SqlRun.
+
+API changes
+* Re-organize planner initialization,
+  to make it easier to use heuristic join order.
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-301">OPTIQ-301</a>]
+  Add `Program` interface, a planner phase more general than current `RuleSet`
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-263">OPTIQ-263</a>]
+  Add operand type that will cause a rule to fire when a new subset is created
+* Clean up and document SqlKind.
+** Add `IS_NOT_TRUE` and `IS_NOT_FALSE` `SqlKind` enums.
+** Add `SqlKind.IS_NOT_NULL` enum value, and use where possible,
+   including for `IS_NOT_UNKNOWN` operator.
+
+Bug-fixes and internal changes
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-312">OPTIQ-312</a>]
+  Trim non-required fields before `WindowRel`
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-311">OPTIQ-311</a>]
+  Wrong results when filtering the results of windowed aggregation
+* More tests for `WITH ... ORDER BY`
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-309">OPTIQ-309</a>]
+  `WITH ... ORDER BY` query gives `AssertionError`
+* Enable `MultiJoinRel` and some other planner rule tests.
+* Add `ImmutableNullableList` and `UnmodifiableArrayList`,
+  and remove calls to `Arrays.asList`.
+* Add method `IntPair.zip`.
+* Reimplement regular and windowed aggregates
+* Switch from github to Apache JIRA for issues tracking.
+** In release history, update issue URLs from github to Apache JIRA
+* The Apache mailing list is now the official mailing list. Add presentations.
+* Add test for overloaded UDF.
+* Add tests for `NOT IN` where sub-query returns NULL values.
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-288">OPTIQ-288</a>]
+  Add tests for windowed aggregation based on Postgres reference queries
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-286">OPTIQ-286</a>]
+  Error casting MongoDB date
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-284">OPTIQ-284</a>]
+  Window functions range defaults to `CURRENT ROW`
+* [<a href=https://issues.apache.org/jira/browse/OPTIQ-285">OPTIQ-285</a>]
+  Window functions throw exception without `ORDER BY`
+* Test case for
+  [<a href=““https://issues.apache.org/jira/browse/OPTIQ-285”>OPTIQ-285</a>].
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-281">OPTIQ-281</a>]
+  `EXTRACT` function's SQL return type is `BIGINT` but implemented as Java `int`
+
 ## <a href="https://github.com/julianhyde/optiq/releases/tag/optiq-parent-0.7">0.7</a> / 2014-05-13
 
 New features
 * Implement table functions.
 * Arrays and multi-sets:
-  * Fix <a href="https://github.com/julianhyde/optiq/issues/267">#267</a>,
-    "Improve support for ARRAY data type".
+  * [<a href="https://issues.apache.org/jira/browse/OPTIQ-267">OPTIQ-267</a>]
+    Improve support for ARRAY data type
   * Better type information for JDBC Array; nested array now possible.
   * Implement `JOIN LATERAL` and `JOIN UNNEST`.
   * Implement the `UNNEST` relational operator, and various improvements
@@ -16,18 +79,18 @@ New features
   * Represent `ARRAY` columns as Java lists.
   * Implement `CARDINALITY(ARRAY)` SQL operator.
 * Implement scalar sub-query in `SELECT` clause.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/273">#273</a>,
-  "Support column alias in WITH queries (common table expressions)".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-273">OPTIQ-273</a>]
+  Support column alias in WITH queries (common table expressions)
 * Windowed aggregates:
   * Aggregate over constants, e.g. `SUM(1) OVER (ROWS 10 PRECEDING)`;
   * `UNBOUNDED PRECEDING` window range;
   * Windowed aggregates computed over primitive scalars.
 * Fix return type inference for aggregate calls. If the `GROUP BY` clause is
   empty, `SUM` may return null.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/37">#37</a>,
-  "Document JSON model file format" (as <a href="MODEL.md">MODEL.md</a>).
-* Fix <a href="https://github.com/julianhyde/optiq/issues/238">#238</a>,
-  "Add adapter that generates TPC-H data".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-37">OPTIQ-37</a>]
+  Document JSON model file format (as <a href="MODEL.md">MODEL.md</a>).
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-238">OPTIQ-238</a>]
+  Add adapter that generates TPC-H data
 * Improve exception message in `AvaticaConnection`; add
   `ExceptionMessageTest`.
 * Implement micro-benchmarks via
@@ -36,8 +99,8 @@ New features
 API changes
 * Provide an option to create root schema without the "metadata" schema.
 * Schema SPI:
-  * Fix <a href="https://github.com/julianhyde/optiq/issues/175">#175</a>,
-   "Modify Schema SPI to allow caching".
+  * [<a href="https://issues.apache.org/jira/browse/OPTIQ-175">OPTIQ-175</a>]
+    Modify Schema SPI to allow caching
   * Get sub-schemas defined by a Schema SPI, and cache their `OptiqSchema`
     wrappers. (Tobi Vollebregt and Julian Hyde)
 * SqlAdvisor callable from client via JDBC.
@@ -58,38 +121,38 @@ Bug-fixes and internal changes
 * Use `fromTrait` of the just previously converted `RelNode` instead
   of the original `RelNode`.
 * Disable a MongoDB test, pending
-  <a href="https://github.com/julianhyde/optiq/issues/270">#270</a>.
+  [<a href="https://issues.apache.org/jira/browse/OPTIQ-270">OPTIQ-270</a>.
 * Hush warnings from `SplunkAdapterTest` if Splunk is not available.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/252">#252</a>,
-  "Scalar sub-query that returns 0 rows should become NULL value".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-252">OPTIQ-252</a>]
+  Scalar sub-query that returns 0 rows should become NULL value
 * `SplunkAdapterTest` now uses the same Foodmart database as `JdbcTest`.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/242">#242</a>,
-  "SplunkAdapterTest fails".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-242">OPTIQ-242</a>]
+  SplunkAdapterTest fails
 * Remove some obsolete classes.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/205">#205</a>,
-  "Suspicious map.get in VolcanoPlanner.reregister".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-205">OPTIQ-205</a>]
+  Suspicious map.get in VolcanoPlanner.reregister
 
 ## <a href="https://github.com/julianhyde/optiq/releases/tag/optiq-parent-0.6">0.6</a> / 2014-04-11
 
 New features
-* Fix <a href="https://github.com/julianhyde/optiq/issues/214">#214</a>,
-  "Modify Frameworks to allow Schema to be re-used".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-214">OPTIQ-214</a>]
+  Modify Frameworks to allow Schema to be re-used
   Obsoletes `name` field of `ReflectiveSchema`.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/237">#237</a>,
-  "Allow user-defined aggregate functions (UDAs) to be defined in a model".
-* Fix <a href="https://github.com/julianhyde/optiq/pull/227">#227</a>,
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-237">OPTIQ-237</a>]
+  Allow user-defined aggregate functions (UDAs) to be defined in a model
+* Fix <a href="https://github.com/julianhyde/optiq/pull/227">OPTIQ-227</a>,
   "Extend `EXTRACT` function to support `DATE`, `TIME` and `TIMESTAMP` values".
-* Fix <a href="https://github.com/julianhyde/optiq/issues/222">#222</a>,
-  "User-defined table macros".
-* Fix <a href="https://github.com/julianhyde/optiq/issues/179">#179</a>,
-  "Optiq on Windows". Add `sqlline.bat` and fix issues running `sqlline` under
-  Cygwin.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/195">#195</a>,
-  "Push aggregation into MongoDB adapter".
-* Fix <a href="https://github.com/julianhyde/optiq/issues/193">#193</a>,
-  "Implement OFFSET and LIMIT in MongoDB adapter".
-* Fix <a href="https://github.com/julianhyde/optiq/issues/164">#164</a>,
-  "Improve query performance of optiq over MongoDB".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-222">OPTIQ-222</a>]
+  User-defined table macros
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-179">OPTIQ-179</a>]
+  Optiq on Windows
+** Add `sqlline.bat` and fix issues running `sqlline` under Cygwin.
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-195">OPTIQ-195</a>]
+  Push aggregation into MongoDB adapter
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-193">OPTIQ-193</a>]
+  Implement OFFSET and LIMIT in MongoDB adapter
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-164">OPTIQ-164</a>]
+  Improve query performance of optiq over MongoDB
 * Add Phoenix (HBase) SQL dialect (Bruno Dumon)
 
 API changes
@@ -100,15 +163,15 @@ API changes
 * Extend `Planner` to pass a custom `ConvertletTable` and custom SQL parser.
 * In `Frameworks`, add a way to specify list of `TraitDef`s that will be used
   by planner. (Jinfeng Ni)
-* Fix <a href="https://github.com/julianhyde/optiq/pull/198">#198</a>,
+* Fix <a href="https://github.com/julianhyde/optiq/pull/198">OPTIQ-198</a>,
   "Use `RexExecutor` to evaluate projections and filters".
-* Fix <a href="https://github.com/julianhyde/optiq/issues/219">#219</a>,
-  "Parse `ALTER scope SET option = value` statement".
-* Fix <a href="https://github.com/julianhyde/optiq/issues/215">#215</a>,
-  "A Schema should not have to remember its name and parent".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-219">OPTIQ-219</a>]
+  Parse `ALTER scope SET option = value` statement
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-215">OPTIQ-215</a>]
+  A Schema should not have to remember its name and parent
   (**This is a breaking change**.)
-* Fix <a href="https://github.com/julianhyde/optiq/issues/180">#180</a>,
-  "Common base class for TableFunction, ScalarFunction".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-180">OPTIQ-180</a>]
+  Common base class for TableFunction, ScalarFunction
   (**This is a breaking change**.)
 * Add methods for dealing with symbols; deprecate
   `SqlLiteral.booleanValue(SqlNode)`, `SqlLiteral.symbolValue(SqlNode)`.
@@ -121,53 +184,53 @@ Bug fixes and internal changes
 * Upgrade to linq4j-0.2.
 * `FETCH` and `LIMIT` are ignored during SQL-to-RelNode translation.
   (Venki Korukanti)
-* Fix <a href="https://github.com/julianhyde/optiq/issues/245">#245</a>,
-  "Off-by-one translation of ON clause of JOIN".
-* Fix <a href="https://github.com/julianhyde/optiq/pull/191">#191</a>,
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-245">OPTIQ-245</a>]
+  Off-by-one translation of ON clause of JOIN
+* Fix <a href="https://github.com/julianhyde/optiq/pull/191">OPTIQ-191</a>,
   "Rotate time/date/timestamp vals to local timezone".
-* Fix <a href="https://github.com/julianhyde/optiq/pull/244">#244</a>,
+* Fix <a href="https://github.com/julianhyde/optiq/pull/244">OPTIQ-244</a>,
   "`RelOptTableImpl.create` always expects `QueryableTable` type in
   `OptiqSchema.TableEntry`".
-* Fix <a href="https://github.com/julianhyde/optiq/issues/225">#225</a>,
-  "Optiq doesn't correctly decorrelate queries".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-225">OPTIQ-225</a>]
+  Optiq doesn't correctly decorrelate queries
 * Clean up package-info.  Remove duplicates in test packages so they
   don't conflict with those in non-test packages.
 * Add `Pair.adjacents(Iterable)`.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/199">#199</a>,
-  "Various `ANY` type conditions aren't correctly being considered".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-199">OPTIQ-199</a>]
+  Various `ANY` type conditions aren't correctly being considered
   (Jacques Nadeau)
 * Add files to `.gitignore` that shouldn't be checked in when using
   Eclipse. (Jacques Nadeau)
 * Add class `ControlFlowException`, and make it base class of
   existing control-flow exception classes.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/232">#232</a>,
-  "Sum and avg of empty set should be null as per SQL specification".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-232">OPTIQ-232</a>]
+  Sum and avg of empty set should be null as per SQL specification
 * Add `SqlUnresolvedFunction`, to improve how return type of
   user-defined functions is resolved. (Vladimir Sitnikov)
-* Fix <a href="https://github.com/julianhyde/optiq/issues/228">#228</a>,
-  "Error while compiling generated Java code when using UDF in expression"
-* Fix <a href="https://github.com/julianhyde/optiq/issues/226">#226</a>,
-  "User-defined functions should work without explicit schema prefix".
-* Fix <a href="https://github.com/julianhyde/optiq/issues/229">#229</a>,
-  "Join between different JDBC schemas not implementable".
-* Fix <a href="https://github.com/julianhyde/optiq/pull/230">#230</a>,
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-228">OPTIQ-228</a>]
+  Error while compiling generated Java code when using UDF in expression
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-226">OPTIQ-226</a>]
+  User-defined functions should work without explicit schema prefix
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-229">OPTIQ-229</a>]
+  Join between different JDBC schemas not implementable
+* Fix <a href="https://github.com/julianhyde/optiq/pull/230">OPTIQ-230</a>,
   "RemoveSortRule derives trait set from sort, should derive it from sort's child".
 * Test view and sub-query with `ORDER BY` and `LIMIT`.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/223">#223</a>,
-  "Add `NOTICE` and `LICENSE` files in all generated JAR files".
-* Fix <a href="https://github.com/julianhyde/optiq/issues/209">#209</a>,
-  "Consistent strategy for line-endings in tests".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-223">OPTIQ-223</a>]
+  Add `NOTICE` and `LICENSE` files in all generated JAR files
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-209">OPTIQ-209</a>]
+  Consistent strategy for line-endings in tests
   Convert uses of `NL` in tests to Linux newline "\n".
   This makes string constants simpler.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/218">#218</a>,
-  "Functions case sensitive when using `Lex.MYSQL`".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-218">OPTIQ-218</a>]
+  Functions case sensitive when using `Lex.MYSQL`
 * Add tests that a query with aggregate expressions in the `SELECT`
   clause is considered an aggregate query, even if there is no `GROUP BY`.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/216">#216</a>,
-  "Inconsistent use of provided operator table causes inability to
-  add aggregate functions".
-* Fix <a href="https://github.com/julianhyde/optiq/issues/200">#200</a>,
-  "Javadoc generation fails under JDK 1.8".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-216">OPTIQ-216</a>]
+  Inconsistent use of provided operator table causes inability to
+  add aggregate functions
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-200">OPTIQ-200</a>]
+  Javadoc generation fails under JDK 1.8
 * Add class `XmlOutput` (based on `org.eigenbase.xom.XMLOutput`) and remove
   dependency on eigenbase-xom.
 * Performance: Don't create stack-trace for exceptions used for control-flow.
@@ -188,12 +251,12 @@ New features
   properties to be specified explicitly (Vladimir Sitnikov)
 * Recognize more kinds of materializations, including filter-on-project (where
   project contains expressions) and some kinds of aggregation.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/128">#128</a>,
-  "Support `WITH` queries (common table expressions)".
-* Fix <a href="https://github.com/julianhyde/optiq/issues/53">#53</a>,
-  "Allow `WHEN` clause in simple `CASE` expression to have multiple values".
-* Fix <a href="https://github.com/julianhyde/optiq/issues/156">#156</a>,
-  "Optiq should recognize 'SYSTEM TABLE', 'JOIN', 'INDEX' as table types".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-128">OPTIQ-128</a>]
+  Support `WITH` queries (common table expressions)
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-53">OPTIQ-53</a>]
+  Allow `WHEN` clause in simple `CASE` expression to have multiple values
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-156">OPTIQ-156</a>]
+  Optiq should recognize 'SYSTEM TABLE', 'JOIN', 'INDEX' as table types
 * Support querying ARRAY columns from JDBC source. (Gabriel Reid)
 
 API changes
@@ -202,70 +265,71 @@ API changes
   (**This is a breaking change** for sub-classes of `ProjectRelBase`.)
 * Change `RexBuilder.makeRangeReference` parameter type.
 * `RexBuilder.makeInputRef` replaces `RelOptUtil.createInputRef`.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/160">#160</a>,
- "Allow comments in schema definitions".
-* Fix <a href="https://github.com/julianhyde/optiq/issues/147">#147</a>,
-  "Create a new kind of `SqlCall` that keeps operands in fields, not an operands
-  array". Very widely used parse tree nodes with complex operands, including
-  `SqlSelect`, `SqlJoin`, `SqlInsert`, and a new node type `SqlOrderBy`, are now
-  sub-classes of `SqlCall` but not `SqlBasicCall`.
-  (**This is a breaking change** to code that assumes that, say,
- `SqlSelect` has an `operands` field.)
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-160">OPTIQ-160</a>]
+  Allow comments in schema definitions
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-147">OPTIQ-147</a>]
+  Create a new kind of `SqlCall` that keeps operands in fields, not an operands
+  array
+** Very widely used parse tree nodes with complex operands, including
+   `SqlSelect`, `SqlJoin`, `SqlInsert`, and a new node type `SqlOrderBy`, are now
+   sub-classes of `SqlCall` but not `SqlBasicCall`.
+** (**This is a breaking change** to code that assumes that, say,
+   `SqlSelect` has an `operands` field.)
 * Convert all enum constants to upper-case.
   (**This is a breaking change**.)
 
 Bug-fixes and internal changes
 * Generate optiq-core-VERSION-tests.jar not parent-VERSION-tests.jar.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/176">#176</a>,
-  "ORDER BY expression doesn't work with SELECT \*".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-176">OPTIQ-176</a>]
+  ORDER BY expression doesn't work with SELECT \*
 * Fix VARCHAR casts sent to hsqldb source (Bruno Dumon)
-* Fix <a href="https://github.com/julianhyde/optiq/issues/143">#143</a>,
-  "Remove dependency on eigenbase-resgen".
-* Fix <a href="https://github.com/julianhyde/optiq/issues/173">#173</a>,
- "Case-insensitive table names are not supported for `Casing.UNCHANGED`".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-143">OPTIQ-143</a>]
+  Remove dependency on eigenbase-resgen
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-173">OPTIQ-173</a>]
+  Case-insensitive table names are not supported for `Casing.UNCHANGED`
 * `DATE.getLimit` now returns `Calendar` in GMT time zone (Vladimir Sitnikov)
 * Set `en_US` locale in tests that match against error numbers, dates
   (Vladimir Sitnikov)
 * Use 1 test thread per CPU to avoid thread starvation on dual core CPUs
   (Vladimir Sitnikov)
-* Fix <a href="https://github.com/julianhyde/optiq/issues/174">#174</a>,
-  "Move hsqldb to test scope".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-174">OPTIQ-174</a>]
+  Move hsqldb to test scope
 * Add unit tests for `RexExecutorImpl`.
 * Correct JSON model examples in Javadoc comments. (Karel Vervaeke)
 * Move test reference logs from `src/test/java` to `src/test/resources`
   (reduces the number of 'untracked files' reported by git)
 * Tune `Util.SpaceList`, fix race condition, and move into new utility class
   `Spaces`.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/163">#163</a>,
-  "Equi-join warning".
-* Fix <a href="https://github.com/julianhyde/optiq/issues/157">#157</a>,
-  "Handle `SQLFeatureNotSupported` when calling `setQueryTimeout`".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-163">OPTIQ-163</a>]
+  Equi-join warning
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-157">OPTIQ-157</a>]
+  Handle `SQLFeatureNotSupported` when calling `setQueryTimeout`
   (Karel Vervaeke)
 * Fix Optiq on Windows. (All tests and checkstyle checks pass.)
 * In checkstyle, support Windows-style file separator, otherwise build fails in
   Windows due to suppressions not used. (Vladimir Sitnikov)
 * Enable MongoDB tests when `-Doptiq.test.mongodb=true`.
 * Cleanup cache exception-handling and an assert.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/153">#153</a>,
-  "Error using MongoDB adapter: Failed to set setXIncludeAware(true)".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-153">OPTIQ-153</a>]
+  Error using MongoDB adapter: Failed to set setXIncludeAware(true)
 * Disable spark engine unless Spark libraries are on the class path and
   `spark=true` is specified in the connect string.
 * Fix path to `mongo-zips-model.json` in HOWTO. (Mariano Luna)
 * Fix bug deriving the type of a join-key.
 * Fix the value of `ONE_MINUS_EPSILON`.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/158">#158</a>,
-  "Optiq fails when call `Planner.transform()` multiple times, each with
-  different ruleset".
-* Fix <a href="https://github.com/julianhyde/optiq/issues/148">#148</a>,
- "Less verbose description of collation". Also, optimize `RelTraitSet` creation
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-158">OPTIQ-158</a>]
+  Optiq fails when call `Planner.transform()` multiple times, each with
+  different ruleset
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-148">OPTIQ-148</a>]
+ Less verbose description of collation. Also, optimize `RelTraitSet` creation
  and amortize `RelTraitSet.toString()`.
 * Add generics to SQL parser.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/145">#145</a>,
-  "Unexpected upper-casing of keywords when using java lexer".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-145">OPTIQ-145</a>]
+  Unexpected upper-casing of keywords when using java lexer
 * Remove duplicate `maven-source-plugin`.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/141">#141</a>,
-  "Downgrade to guava-11.0.2". This is necessary for Hadoop compatibility.
-  Later versions of Guava can also be used.
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-141">OPTIQ-141</a>]
+  Downgrade to guava-11.0.2. (This is necessary for Hadoop compatibility.
+  Later versions of Guava can also be used.)
 * Upgrade to spark-0.9.0. (Because this version of spark is available from
   maven-central, we can make optiq-spark part of the regular build, and remove
   the spark profile.)
@@ -274,10 +338,10 @@ Bug-fixes and internal changes
 
 API and functionality changes
 * Configurable lexical policy
-    * Fix <a href="https://github.com/julianhyde/optiq/issues/33">#33</a>,
-      "SQL parser should allow different identifier quoting".
-    * Fix <a href="https://github.com/julianhyde/optiq/issues/34">#34</a>,
-      "Policy for case-sensitivity of identifiers should be configurable".
+    * [<a href="https://issues.apache.org/jira/browse/OPTIQ-33">OPTIQ-33</a>]
+      SQL parser should allow different identifier quoting
+    * [<a href="https://issues.apache.org/jira/browse/OPTIQ-34">OPTIQ-34</a>]
+      Policy for case-sensitivity of identifiers should be configurable
     * New connect-string parameter "lex", with allowable values
       "ORACLE", "MYSQL", "SQL_SERVER", "JAVA" sets policy to be like those
       databases, in terms of quote string, whether quoted and unquoted
@@ -293,13 +357,13 @@ API and functionality changes
       apply the right case-sensitivity policy.
     * Enable optiq consumer to utilize different lexical settings in
       Frameworks/Planner. (Jacques Nadeau)
-* Fix <a href="https://github.com/julianhyde/optiq/issues/135">#115</a>,
-  "Add a PARSE_TREE hook point with SqlNode parameter".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-135">OPTIQ-115</a>]
+  Add a PARSE_TREE hook point with SqlNode parameter
 * Change planner rules to use `ProjectFactory` for creating
   projects. (John Pullokkaran)
-* Fix <a href="https://github.com/julianhyde/optiq/issues/131">#131</a>,
-  "Add interfaces for metadata (statistics)". (**This is a breaking
-  change**.)
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-131">OPTIQ-131</a>]
+  Add interfaces for metadata (statistics)
+  (**This is a breaking change**.)
 * Update Avatica to allow `Cursor` & `Accessor` implementations to throw
   `SQLException`. (Jacques Nadeau)
 * Separate cost model (`RelOptCostFactory`) from planner. Allow
@@ -312,8 +376,8 @@ API and functionality changes
   checkstyle. (**This is a breaking change**.)
 * Add a mechanism for defining configuration parameters and have them
   appear in the responses to `AvaticaDatabaseMetaData` methods.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/113">#113</a>,
-  "User-defined scalar functions".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-113">OPTIQ-113</a>]
+  User-defined scalar functions
 * Add rules to short-cut a query if `LIMIT 0` is present. Also remove
   sort, aggregation, join if their inputs are known to be empty, and
   propagate the fact that the relational expressions are known to be
@@ -321,29 +385,29 @@ API and functionality changes
 * `RexNode` and its sub-classes are now immutable.
 
 Bug fixes and internal changes
-* Fix <a href="https://github.com/julianhyde/optiq/issues/61">#16</a>,
-  "Upgrade to janino-2.7".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-61">OPTIQ-16</a>]
+  Upgrade to janino-2.7
 * Upgrade to guava-15.0 (guava-14.0.1 still allowed), sqlline-1.1.7,
   maven-surefire-plugin-2.16, linq4j-0.1.13.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/136">#136</a>,
-  "Support Hive dialect".
-* Fix <a href="https://github.com/julianhyde/optiq/issues/138">#138</a>,
-  "SqlDataTypeSpec.clone handles collection types wrong".
-* Fix <a href="https://github.com/julianhyde/optiq/issues/137">#137</a>,
-  "If a subset is created that is subsumed by an existing subset, its
-  "best" is not assigned".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-136">OPTIQ-136</a>]
+  Support Hive dialect
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-138">OPTIQ-138</a>]
+  SqlDataTypeSpec.clone handles collection types wrong
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-137">OPTIQ-137</a>]
+  If a subset is created that is subsumed by an existing subset, its
+  'best' is not assigned
     * If best rel in a Volcano subset doesn't have metadata, see if
       other rels have metadata.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/127">#127</a>,
- "EnumerableCalcRel can't support 3+ AND conditions". (Harish Butani)
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-127">OPTIQ-127</a>]
+  EnumerableCalcRel can't support 3+ AND conditions (Harish Butani)
 * Fix push-down of datetime literals to JDBC data sources.
 * Add `Util.startsWith(List, List)` and `Util.hashCode(double)`.
 * Add maven-checkstyle-plugin, enable in "verify" phase, and fix exceptions.
 * Fix `SqlValidator` to rely on `RelDataType` to do field name matching.  Fix
   `RelDataTypeImpl` to correctly use the case sensitive flag rather than
   ignoring it.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/119">#119</a>,
-  "Comparing Java type long with SQL type INTEGER gives wrong answer".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-119">OPTIQ-119</a>]
+  Comparing Java type long with SQL type INTEGER gives wrong answer
 * Enable multi-threaded testing, and fix race conditions.
     * Two of the race conditions involved involving trait caches. The
       other was indeterminacy in type system when precision was not
@@ -351,13 +415,13 @@ Bug fixes and internal changes
       instance.
 * Convert files to `us-ascii`.
 * Work around
-  <a href="http://jira.codehaus.org/browse/JANINO-169">JANINO-169</a>.
+  [<a href="http://jira.codehaus.org/browse/JANINO-169">JANINO-169</a>].
 * Refactor SQL validator testing infrastructure so SQL parser is
   configurable.
 * Add `optiq-mat-plugin` to README.
 * Fix the check for duplicate subsets in a rule match.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/112">#112</a>,
-  "Java boolean column should be treated as SQL boolean".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-112">OPTIQ-112</a>]
+  Java boolean column should be treated as SQL boolean
 * Fix escaped unicode characters above 0x8000. Add tests for unicode
   strings.
 
@@ -365,24 +429,26 @@ Bug fixes and internal changes
 
 API changes
 
-* Fix <a href="https://github.com/julianhyde/optiq/issues/106">#106</a>,
-  "Make `Schema` and `Table` SPIs simpler to implement, and make them
-  re-usable across connections". (**This is a breaking change**.)
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-106">OPTIQ-106</a>]
+  Make `Schema` and `Table` SPIs simpler to implement, and make them
+  re-usable across connections
+  (**This is a breaking change**.)
 * Make it easier to define sub-classes of rule operands. The new class
   `RelOptRuleOperandChildren` contains the children of an operand and
   the policy for dealing with them. Existing rules now use the new
   methods to construct operands: `operand()`, `leaf()`, `any()`, `none()`,
   `unordered()`. The previous methods are now deprecated and will be
   removed before 0.4.18. (**This is a breaking change**.)
-* Fix <a href="https://github.com/julianhyde/optiq/issues/101">#101</a>,
-  "Enable phased access to the Optiq engine".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-101">OPTIQ-101</a>]
+  Enable phased access to the Optiq engine
 * List-handling methods in `Util`: add methods `skipLast`, `last`, `skip`; remove `subList`, `butLast`.
 * Convert `SqlIdentifier.names` from `String[]` to `ImmutableList<String>`.
 * Rename `OptiqAssert.assertThat()` to `that()`, to avoid clash with junit's `Assert.assertThat()`.
 * Usability improvements for `RelDataTypeFactory.FieldInfoBuilder`. It
   now has a type-factory, so you can just call `build()`.
 * Rework `HepProgramBuilder` into a fluent API.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/105">#105</a>, "Externalize RelNode to and from JSON".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-105">OPTIQ-105</a>]
+  Externalize RelNode to and from JSON
 
 Tuning
 
@@ -402,8 +468,8 @@ Tuning
   tweak cost of `EnumerableJoinRel` so that join is cheaper if the
   larger input is on the left, and more expensive if it is a cartesian
   product.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/70">#70</a>,
-  "Joins seem to be very expensive in memory".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-70">OPTIQ-70</a>]
+  Joins seem to be very expensive in memory
 * Make planning process more efficient by not sorting the list of
   matched rules each cycle. It is sorted if tracing is enabled;
   otherwise we scan to find the most important element. For this list,
@@ -412,9 +478,10 @@ Tuning
 
 Other
 
-* Fix <a href="https://github.com/julianhyde/optiq/issues/87">#87</a>,
-  "Constant folding". Rules for constant-expression reduction, and to simplify/eliminate
-  `VALUES` operator.
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-87">OPTIQ-87</a>]
+  Constant folding
+** Rules for constant-expression reduction, and to simplify/eliminate
+   `VALUES` operator.
 * Graph algorithms: Implement breadth-first iterator and cycle-detector.
 * Fix bug in planner which occurred when two `RelNode`s have identical
   digest but different row-type.
@@ -425,13 +492,13 @@ Other
 * Upgrade to eigenbase-xom-1.3.4, eigenbase-properties-1.1.4,
   eigenbase-resgen-1.3.6.
 * Upgrade to linq4j-0.1.12.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/97">#97</a>,
-  correlated EXISTS.
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-97">OPTIQ-97</a>]
+  Correlated EXISTS
 * Fix a bug in `VolcanoCost`.
 * Add class `FoodMartQuerySet`, that contains the 6,700 foodmart queries.
 * Fix factory class names in `UnregisteredDriver`
-* Fix <a href="https://github.com/julianhyde/optiq/issues/96">#96</a>,
-  "LIMIT against a table in a clone schema causes UnsupportedOperationException".
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-96">OPTIQ-96</a>]
+  LIMIT against a table in a clone schema causes UnsupportedOperationException
 * Disable spark module by default.
 * Allow `CloneSchema` to be specified in terms of url, driver, user,
   password; not just dataSource.
@@ -439,11 +506,16 @@ Other
 
 ## <a href="https://github.com/julianhyde/optiq/releases/tag/optiq-parent-0.4.16">0.4.16</a> / 2013-11-24
 
-* Fix <a href="https://github.com/julianhyde/optiq/issues/69">#69</a>, "Can't join on string columns" and other problems with expressions in the join condition
-* Fix <a href="https://github.com/julianhyde/optiq/issues/74">#74</a>, "JOIN ... USING fails in 3-way join with UnsupportedOperationException".
-* Fix <a href="https://github.com/julianhyde/optiq/issues/65">#65</a> issues in the JDBC driver, and in particular to DatabaseMetaData methods, to make Squirrel-SQL run better. Fix JDBC column, table, schema names for when the table is not in a schema of depth 1.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/85">#85</a>, "Adding a table to the root schema causes breakage in OptiqPrepareImpl".
-* Extract Optiq's JDBC driver as a new JDBC driver framework, Avatica (<a href="https://github.com/julianhyde/optiq/issues/84">#84</a>). Other projects can use this to implement a JDBC driver by implementing just a few methods. If you wish to use Optiq's JDBC driver, you will now need to include optiq-avatica.jar in addition to optiq-core.jar. Avatica does not depend on anything besides the standard Java library.
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-69">OPTIQ-69</a>]
+  Can't join on string columns and other problems with expressions in the join condition
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-74">OPTIQ-74</a>]
+  JOIN ... USING fails in 3-way join with UnsupportedOperationException.
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-65">OPTIQ-65</a>]
+  Fix issues in the JDBC driver, and in particular to DatabaseMetaData methods, to make Squirrel-SQL run better.
+* Fix JDBC column, table, schema names for when the table is not in a schema of depth 1.
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-85">OPTIQ-85</a>]
+  Adding a table to the root schema causes breakage in OptiqPrepareImpl
+* Extract Optiq's JDBC driver as a new JDBC driver framework, Avatica ([<a href="https://issues.apache.org/jira/browse/OPTIQ-84">OPTIQ-84</a>). Other projects can use this to implement a JDBC driver by implementing just a few methods. If you wish to use Optiq's JDBC driver, you will now need to include optiq-avatica.jar in addition to optiq-core.jar. Avatica does not depend on anything besides the standard Java library.
 * Support for parameters in PreparedStatement.
 * First steps in recognizing complex materializations. Internally we introduce a concept called a "star table", virtual table composed of real tables joined together via many-to-one relationships. The queries that define materializations and end-user queries are canonized in terms of star tables. Matching (not done yet) will then be a matter of looking for sort, groupBy, project. It is not yet possible to define a star in an Optiq model file.
 * Add section to <a href="HOWTO.md">HOWTO</a> on implementing adapters.
@@ -451,12 +523,16 @@ Other
 * Fix how strings are escaped in JsonBuilder.
 * Test suite now depends on an embedded hsqldb database, so you can run <code>mvn test</code> right after pulling from git. You can instead use a MySQL database if you specify '-Doptiq.test.db=mysql', but you need to manually populate it.
 * Fix a planner issue which occurs when the left and right children of join are the same relational expression, caused by a self-join query.
-* Fix <a href="https://github.com/julianhyde/optiq/issues/76">#76</a> precedence of the item operator, <code>map[index]</code>; remove the space before '[' when converting parse tree to string.
+* [<a href="https://issues.apache.org/jira/browse/OPTIQ-76">OPTIQ-76</a>]
+  Precedence of the item operator, <code>map[index]</code>; remove the space before '[' when converting parse tree to string.
 * Allow <code>CAST(expression AS ANY)</code>, and fix an issue with the ANY type and NULL values.
 * Handle null timestamps and dates coming out of JDBC adapter.
 * Add <code>jdbcDriver</code> attribute to JDBC schema in model, for drivers that do not auto-register.
 * Allow join rules to match any subclass of JoinRelBase.
-* Push projects, filters and sorts down to MongoDB. (Fixes <a href="https://github.com/julianhyde/optiq/issues/57">#57</a>, <a href="https://github.com/julianhyde/optiq/pull/60">#60</a> and <a href="https://github.com/julianhyde/optiq/issues/72">#72</a>.)
+* Push projects, filters and sorts down to MongoDB.
+  (Fixes [<a href="https://issues.apache.org/jira/browse/OPTIQ-57">OPTIQ-57</a>],
+  <a href="https://github.com/julianhyde/optiq/pull/60">pull #60</a> and
+  [<a href="https://issues.apache.org/jira/browse/OPTIQ-72">OPTIQ-72</a>.)
 * Add instructions for loading FoodMart data set into MongoDB, and how to enable tracing.
 * Now runs on JDK 1.8 (still runs on JDK 1.6 and JDK 1.7).
 * Upgrade to junit-4.11 (avoiding the dodgy junit-4.1.12).