For a full list of releases, see github.
- Fix #33, "SQL parser should allow different identifier quoting".
- Fix #34,
"Policy for case-sensitivity of identifiers should be configurable".
A new connect-string parameter,
lex
, with allowable valuesORACLE
,MYSQL
,SQL_SERVER
andJAVA
, sets policy to be like those databases, in terms of quote string, whether quoted and unquoted identifiers are converted to upper/lower case, and whether identifiers are matched case-sensitively. Connections can have different settings. - Add a mechanism for defining configuration parameters and have them
appear in the responses to
AvaticaDatabaseMetaData
methods. - Work around JANINO-169.
- Fix #113, "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 empty up the tree. (We already do this for union, filter, project.) - Fix the check for duplicate subsets in a rule match.
- Fix #112, "Java boolean column should be treated as SQL boolean".
- RexNode and its sub-classes are now unmodifiable.
- Fix escaped unicode characters above 0x8000. Add tests for unicode strings.
- Enable multi-threaded testing.
- Upgrade to sqlline-1.1.6.
- Upgrade to linq4j-0.1.13.
0.4.17 / 2014-01-13
API changes
- Fix #106,
"Make
Schema
andTable
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 #101, "Enable phased access to the Optiq engine".
- List-handling methods in
Util
: add methodsskipLast
,last
,skip
; removesubList
,butLast
. - Convert
SqlIdentifier.names
fromString[]
toImmutableList<String>
. - Rename
OptiqAssert.assertThat()
tothat()
, to avoid clash with junit'sAssert.assertThat()
. - Usability improvements for
RelDataTypeFactory.FieldInfoBuilder
. It now has a type-factory, so you can just callbuild()
. - Rework
HepProgramBuilder
into a fluent API. - Fix #105, "Externalize RelNode to and from JSON".
Tuning
- If
EnumerableAggregateRel
has no aggregate functions, generate a call toEnumerable.distinct()
, thereby saving the effort of building trivial accumulators. - Default rule set now does not introduce
CalcRel
until a later phase of planning. This reduces the number of trivial projects and calcs created, merged, and elimated. - Reduce the amount of time spent creating record types that already exist.
- More efficient implementation of
Util.isDistinct
for small lists. - When an internal record has 0 fields, rather than generating a
synthetic class and lots of instances that are all the same, use the
new
Unit
class, which is a singleton. - To take advantage of asymmetric hash join added recently in linq4j,
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 #70, "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,
replace
LinkedList
withChunkList
, which has an O(1) remove and add, a fast O(n) get, and fast scan.
Other
- Fix #87,
"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. - Fix link to optiq-csv tutorial.
- Fix bugs in
RemoveTrivialProjectRule.strip
,JdbcProjectRel.implement
andSortRel.computeSelfCost
. - Reformat code, and remove
@author
tags. - Upgrade to eigenbase-xom-1.3.4, eigenbase-properties-1.1.4, eigenbase-resgen-1.3.6.
- Upgrade to linq4j-0.1.12.
- Fix #97, correlated EXISTS.
- Fix a bug in
VolcanoCost
. - Add class
FoodMartQuerySet
, that contains the 6,700 foodmart queries. - Fix factory class names in
UnregisteredDriver
- Fix #96, "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. - Wrap internal error in
SQLException
.
0.4.16 / 2013-11-24
- Fix #69, "Can't join on string columns" and other problems with expressions in the join condition
- Fix #74, "JOIN ... USING fails in 3-way join with UnsupportedOperationException".
- Fix #65 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 #85, "Adding a table to the root schema causes breakage in OptiqPrepareImpl".
- Extract Optiq's JDBC driver as a new JDBC driver framework, Avatica (#84). 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 HOWTO on implementing adapters.
- Fix data type conversions when creating a clone table in memory.
- Fix how strings are escaped in JsonBuilder.
- Test suite now depends on an embedded hsqldb database, so you can run
mvn test
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 #76 precedence of the item operator,
map[index]
; remove the space before '[' when converting parse tree to string. - Allow
CAST(expression AS ANY)
, and fix an issue with the ANY type and NULL values. - Handle null timestamps and dates coming out of JDBC adapter.
- Add
jdbcDriver
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 #57, #60 and #72.)
- 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).
- Upgrade to linq4j-0.1.11.
0.4.15 / 2013-10-14
- Lots of good stuff that this margin is too small to contain. See a SQL language reference.