Jacques Nadeau created CALCITE-4879:
---------------------------------------
Summary: Make RelMedataQuery abstract
Key: CALCITE-4879
URL: https://issues.apache.org/jira/browse/CALCITE-4879
Project: Calcite
Issue Type: Improvement
Components: core
Reporter: Jacques Nadeau
The RelOptCluster.setMetadataQuerySupplier() and RelMedataQuery abstraction are
great at separating how planners and rules consume metadata versus how metadata
is produced. While details about how metadata is produced is (mostly) not
leaked in the api of RelMetadataQuery, the class does assume that metadata will
be produced via the current mechanisms surrounding RelMetadataProviders and
MetadataHandlers. This ticket targets separating the production of metadata
from the consumption interface, by making RelMetadataQuery abstract (either as
an abstract class or as a interface) and moving the handler and provider
specific implementations to an implementation of RelMetadataQuery. This will
allow a broader breadth of experimentation to be undertaken. For example, one
example people haveĀ been evaluating is whether a lambda based system would be
easier to understand and debug, as performant and more AOT friendly than the
existing systems of chains and janino compilation.
To accomplish this task, the first step will be to deprecate the existing
constructors and inform people to use a concrete subtype. Once deprecated, the
actual logic that currently exists in RelMetadataQuery can be extracted into
the concrete subtype and the base class can be made either abstract or an
interface (depending on what seems most appropriate at the time).
--
This message was sent by Atlassian Jira
(v8.3.4#803005)