Releases: partiql/partiql-lang-kotlin
v0.14.4
Added
- Added constrained decimal as valid parameter type to functions that take in numeric parameters.
- Added async version of physical plan evaluator
PartiQLCompilerAsync
.- The following related async APIs have been added:
org.partiql.lang.compiler
--PartiQLCompilerAsync
,PartiQLCompilerAsyncBuilder
,PartiQLCompilerAsyncDefault
,PartiQLCompilerPipelineAsync
org.partiql.lang.eval
--PartiQLStatementAsync
org.partiql.lang.eval.physical
--VariableBindingAsync
org.partiql.lang.eval.physical.operators
--AggregateOperatorFactoryAsync
,CompiledGroupKeyAsync
,CompiledAggregateFunctionAsync
,FilterRelationalOperatorFactoryAsync
,JoinRelationalOperatorFactoryAsync
,LetRelationalOperatorFactoryAsync
,LimitRelationalOperatorFactoryAsync
,OffsetRelationalOperatorFactoryAsync
,ProjectRelationalOperatorFactoryAsync
,RelationExpressionAsync
,ScanRelationalOperatorFactoryAsync
,SortOperatorFactoryAsync
,CompiledSortKeyAsync
,UnpivotOperatorFactoryAsync
,ValueExpressionAsync
,WindowRelationalOperatorFactoryAsync
,CompiledWindowFunctionAsync
org.partiql.lang.eval.physical.window
--NavigationWindowFunctionAsync
,WindowFunctionAsync
- Overall, we see about a 10-20% performance decline in running a single query on the synchronous vs async evaluator
- JMH benchmarks added to partiql-lang:
PartiQLCompilerPipelineBenchmark
andPartiQLCompilerPipelineAsyncBenchmark
- JMH benchmarks added to partiql-lang:
- The following related async APIs have been added:
Changed
- Function resolution logic: Now the function resolver would match all possible candidate(based on if the argument can be coerced to the Signature parameter type). If there are multiple match it will first attempt to pick the one requires the least cast, then pick the function with the highest precedence.
- partiql-cli -- experimental version of CLI now uses the async physical plan evaluator
Deprecated
- As part of the additions to make an async physical plan evaluator, the synchronous physical plan evaluator
PartiQLCompiler
has been deprecated.- The following related APIs have been deprecated
org.partiql.lang.compiler
--PartiQLCompiler
,PartiQLCompilerBuilder
,PartiQLCompilerDefault
,PartiQLCompilerPipeline
org.partiql.lang.eval
--PartiQLStatement
org.partiql.lang.eval.physical
--VariableBinding
org.partiql.lang.eval.physical.operators
--AggregateOperatorFactory
,CompiledGroupKey
,CompiledAggregateFunction
,FilterRelationalOperatorFactory
,JoinRelationalOperatorFactory
,LetRelationalOperatorFactory
,LimitRelationalOperatorFactory
,OffsetRelationalOperatorFactory
,ProjectRelationalOperatorFactory
,RelationExpression
,ScanRelationalOperatorFactory
,SortOperatorFactory
,CompiledSortKey
,UnpivotOperatorFactory
,ValueExpression
,WindowRelationalOperatorFactory
,CompiledWindowFunction
org.partiql.lang.eval.physical.window
--NavigationWindowFunction
,WindowFunction
- The following related APIs have been deprecated
Fixed
- partiql-ast:
SqlDialect
will wrap unary ops (NOT
,+
,-
) in parens
Contributors
Thank you to all who have contributed!
List of commits: v0.14.3...v0.14.4
v1.0.0-perf.1
This is a pre-release containing:
- A new, experimental evaluator under
org.partiql.eval
. - Several breaking changes under
org.partiql.plan
andorg.partiql.types
andorg.partiql.spi
.
Please note that these changes are subject to future breaking changes without warning.
Contributors
Thank you to all who have contributed!
v0.14.3
Fixed
- Return type of
partiql-ast
'sSqlDialect
fordefaultReturn
to be aSqlBlock
rather thanNothing
- Flatten
CASE WHEN
branch type inPlanTyper
Contributors
Thank you to all who have contributed!
v0.14.2
Changed
- Upgrade IonJava dependency to v1.11.1
Contributors
Thank you to all who have contributed!
List of commits: v0.14.1...v0.14.2
v0.13.3
Changed
- Upgrade IonJava dependency to v1.11.1
Contributors
Thank you to all who have contributed!
List of commits: v0.13.2-alpha...v0.13.3
v0.12.2
Changed
- Upgrade IonJava dependency to v1.11.1
Contributors
Thank you to all who have contributed!
List of commits: v0.12.1-alpha...v0.12.2
v0.2.8
Release v0.2.8
This release adds support for thread interruption of the CompilerPipeline during compilation and evaluation of long-running queries. To consume this capability, you must opt-in by setting interruptible to true in the CompileOptions. The changes ensure that evaluation of long-running scans and joins can be interrupted as well as the compilation of long-running aggregations.
Other Notes
- The interruption of compilation of aggregations was specifically catered for as there is a bug in the compilation of aggregations that causes premature materialization of the data. Therefore, if you intend on interrupting your queries, it may also be a good idea to interrupt at the compilation phase. You may still interrupt at evaluation.
- This addition is NOT added in later versions. If you plan on migrating to a later version, these changes are only present in v0.13.1+. To upgrade, please see the CHANGELOG of v0.13.1 which talks about the addition of thread interruption.
Here are the list of commits.
v0.14.1
Added
- Adds the ability to define a user-defined-function in
ConnectorMetadata
- Move
ConnectorMetadata
map fromPartiQLPlanner
toPartiQLPlanner.Session
for planner re-use.- Deprecates 2 APIs in
org.partiql.planner.PartiQLPlannerBuilder
in favor of using the ConnectorMetadata map inPartiQLPlanner.Session
.
- Deprecates 2 APIs in
Deprecated
- See the "Added" section.
Contributors
Thank you to all who have contributed!
List of commits: v0.14.0-alpha...v0.14.1.
v0.14.0-alpha
Release v0.14.0-alpha
Added
- Adds top-level IR node creation functions.
- Adds
componentN
functions (destructuring) to IR nodes via Kotlin data classes - Adds public
tag
field to IR nodes for associating metadata - Adds AST Normalization Pass.
- Adds PartiQLPlanner Interface, which is responsible for translate an AST to a Plan.
- EXPERIMENTAL Evaluation of
EXCLUDE
in theEvaluatingCompiler
- This is currently marked as experimental until the RFC is approved partiql/partiql-lang#27
- EXPERIMENTAL: Adds support for EXCLUDE in the default SqlDialect.
Changed
- StaticTypeInferencer and PlanTyper will not raise an error when an expression is inferred to
NULL
orunionOf(NULL, MISSING)
. In these cases the StaticTypeInferencer and PlanTyper will still raise the Problem CodeExpressionAlwaysReturnsNullOrMissing
but the severity of the problem has been changed to warning. In the case an expression always returnsMISSING
, problem codeExpressionAlwaysReturnsMissing
will be raised, which will have problem severity of error. - BREAKING The default integer literal type is now 32-bit; if the literal can not fit in a 32-bit integer, it overflows to 64-bit.
- BREAKING
PartiQLValueType
now distinguishes between Arbitrary Precision Decimal and Fixed Precision Decimal. - BREAKING Function Signature Changes. Now Function signature has two subclasses,
Scalar
andAggregation
. - BREAKING Plugin Changes. Only return one
Connector.Factory
, use Kotlin fields. JVM signature remains the same. - BREAKING In the produced plan:
- The new plan is fully resolved and typed.
- Operators will be converted to function call.
- Changes the return type of
filter_distinct
to a list if input collection is list - Changes the
PartiQLValue
collections to implementIterable
rather thanSequence
, allowing for multiple consumption. - BREAKING Moves
PartiQLParserBuilder.standard().build()
to bePartiQLParser.default()
. - BREAKING Changed modeling of
EXCLUDE
inpartiql-ast
Deprecated
Fixed
- Fixes the CLI hanging on invalid queries. See issue #1230.
- Fixes Timestamp Type parsing issue. Previously Timestamp Type would get parsed to a Time type.
- Fixes PIVOT parsing to assign the key and value as defined by spec section 14.
- Fixes the physical plan compiler to return list when
DISTINCT
used withORDER BY
Removed
- BREAKING Removed IR factory in favor of static top-level functions. Change
Ast.foo()
tofoo()
- BREAKING Removed
org.partiql.lang.planner.transforms.AstToPlan
. Useorg.partiql.planner.PartiQLPlanner
. - BREAKING Removed
org.partiql.lang.planner.transforms.PartiQLSchemaInferencer
. In order to achieve the same functionality, one would need to use theorg.partiql.planner.PartiQLPlanner
.- To get the inferred type of the query result, one can do:
(plan.statement as Statement.Query).root.type
- To get the inferred type of the query result, one can do:
Security
Contributors
Thank you to all who have contributed!
v0.13.2-alpha
Release v0.13.2-alpha
Added
- Adds overridden
toString()
method for Sprout-generated code. - Adds CURRENT_DATE session variable to PartiQL.g4 and PartiQLParser
- Adds configurable AST to SQL pretty printer. Usage in Java
AstKt.sql(ast)
or in Kotlinast.sql()
. - Support parsing, planning, and evaluation of Bitwise AND operator (&).
- The Bitwise And Operator only works for integer operands.
- The operator precedence may change based on the pending operator precedence RFC.
- EXPERIMENTAL Adds
EXCLUDE
to parser, ast, plan, and plan schema inferencer- This feature is marked as experimental until an RFC is added https://github.com/partiql/partiql-spec/issues/39
- NOTE: this feature is not currently implemented in the evaluator
Fixed
- Fixes typing of scalar subqueries in the PartiQLSchemaInferencer. Note that usage of
SELECT *
in subqueries
is not fully supported. Please make sure to handle InferenceExceptions. - Fixes schema inferencer behavior for ORDER BY
Contributors
Thank you to all who have contributed!
List of commits: v0.13.1-alpha...v0.13.2-alpha