Skip to content

Commit

Permalink
Add COALESCE and NULLIF to the logical plan (#1404)
Browse files Browse the repository at this point in the history
  • Loading branch information
alancai98 authored Mar 29, 2024
1 parent 6fbfa78 commit 92cc57a
Show file tree
Hide file tree
Showing 12 changed files with 557 additions and 39 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ Thank you to all who have contributed!

### Changed
- Change `StaticType.AnyOfType`'s `.toString` to not perform `.flatten()`
- Change modeling of `COALESCE` and `NULLIF` to dedicated nodes in logical plan

### Deprecated
- The current SqlBlock, SqlDialect, and SqlLayout are marked as deprecated and will be slightly changed in the next release.
Expand Down
9 changes: 9 additions & 0 deletions partiql-plan/src/main/resources/partiql_plan.ion
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,15 @@ rex::{
],
},

nullif::{
value: rex,
nullifier: rex
},

coalesce::{
args: list::[rex]
},

collection::{
values: list::[rex],
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,12 @@ import org.partiql.planner.internal.ir.builder.RexOpCallDynamicCandidateBuilder
import org.partiql.planner.internal.ir.builder.RexOpCallStaticBuilder
import org.partiql.planner.internal.ir.builder.RexOpCaseBranchBuilder
import org.partiql.planner.internal.ir.builder.RexOpCaseBuilder
import org.partiql.planner.internal.ir.builder.RexOpCoalesceBuilder
import org.partiql.planner.internal.ir.builder.RexOpCollectionBuilder
import org.partiql.planner.internal.ir.builder.RexOpErrBuilder
import org.partiql.planner.internal.ir.builder.RexOpGlobalBuilder
import org.partiql.planner.internal.ir.builder.RexOpLitBuilder
import org.partiql.planner.internal.ir.builder.RexOpNullifBuilder
import org.partiql.planner.internal.ir.builder.RexOpPathIndexBuilder
import org.partiql.planner.internal.ir.builder.RexOpPathKeyBuilder
import org.partiql.planner.internal.ir.builder.RexOpPathSymbolBuilder
Expand Down Expand Up @@ -312,6 +314,8 @@ internal data class Rex(
is Path -> visitor.visitRexOpPath(this, ctx)
is Call -> visitor.visitRexOpCall(this, ctx)
is Case -> visitor.visitRexOpCase(this, ctx)
is Nullif -> visitor.visitRexOpNullif(this, ctx)
is Coalesce -> visitor.visitRexOpCoalesce(this, ctx)
is Collection -> visitor.visitRexOpCollection(this, ctx)
is Struct -> visitor.visitRexOpStruct(this, ctx)
is Pivot -> visitor.visitRexOpPivot(this, ctx)
Expand Down Expand Up @@ -567,6 +571,47 @@ internal data class Rex(
}
}

internal data class Nullif(
@JvmField
internal val value: Rex,
@JvmField
internal val nullifier: Rex,
) : Op() {
internal override val children: List<PlanNode> by lazy {
val kids = mutableListOf<PlanNode?>()
kids.add(value)
kids.add(nullifier)
kids.filterNotNull()
}

internal override fun <R, C> accept(visitor: PlanVisitor<R, C>, ctx: C): R =
visitor.visitRexOpNullif(this, ctx)

internal companion object {
@JvmStatic
internal fun builder(): RexOpNullifBuilder = RexOpNullifBuilder()
}
}

internal data class Coalesce(
@JvmField
internal val args: List<Rex>,
) : Op() {
override val children: List<PlanNode> by lazy {
val kids = mutableListOf<PlanNode?>()
kids.addAll(args)
kids.filterNotNull()
}

override fun <R, C> accept(visitor: PlanVisitor<R, C>, ctx: C): R =
visitor.visitRexOpCoalesce(this, ctx)

internal companion object {
@JvmStatic
internal fun builder(): RexOpCoalesceBuilder = RexOpCoalesceBuilder()
}
}

internal data class Collection(
@JvmField internal val values: List<Rex>,
) : Op() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,17 @@ internal object PlanTransform : PlanBaseVisitor<PlanNode, ProblemCallback>() {
branches = node.branches.map { visitRexOpCaseBranch(it, ctx) }, default = visitRex(node.default, ctx)
)

override fun visitRexOpNullif(node: Rex.Op.Nullif, ctx: ProblemCallback) =
org.partiql.plan.Rex.Op.Nullif(
value = visitRex(node.value, ctx),
nullifier = visitRex(node.nullifier, ctx),
)

override fun visitRexOpCoalesce(node: Rex.Op.Coalesce, ctx: ProblemCallback) =
org.partiql.plan.Rex.Op.Coalesce(
args = node.args.map { visitRex(it, ctx) }
)

override fun visitRexOpCaseBranch(node: Rex.Op.Case.Branch, ctx: ProblemCallback) =
org.partiql.plan.Rex.Op.Case.Branch(
condition = visitRex(node.condition, ctx), rex = visitRex(node.rex, ctx)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,10 @@ import org.partiql.planner.internal.ir.identifierQualified
import org.partiql.planner.internal.ir.identifierSymbol
import org.partiql.planner.internal.ir.rex
import org.partiql.planner.internal.ir.rexOpCallStatic
import org.partiql.planner.internal.ir.rexOpCoalesce
import org.partiql.planner.internal.ir.rexOpCollection
import org.partiql.planner.internal.ir.rexOpLit
import org.partiql.planner.internal.ir.rexOpNullif
import org.partiql.planner.internal.ir.rexOpPathIndex
import org.partiql.planner.internal.ir.rexOpPathKey
import org.partiql.planner.internal.ir.rexOpPathSymbol
Expand Down Expand Up @@ -107,7 +109,7 @@ internal object RexConverter {
private fun visitExprCoerce(node: Expr, ctx: Env, coercion: Rex.Op.Subquery.Coercion = Rex.Op.Subquery.Coercion.SCALAR): Rex {
val rex = super.visitExpr(node, ctx)
return when (rex.op is Rex.Op.Select) {
true -> rex(StaticType.ANY, rexOpSubquery(rex.op as Rex.Op.Select, coercion))
true -> rex(StaticType.ANY, rexOpSubquery(rex.op, coercion))
else -> rex
}
}
Expand Down Expand Up @@ -439,44 +441,21 @@ internal object RexConverter {
return rex(type, call)
}

// coalesce(expr1, expr2, ... exprN) ->
// CASE
// WHEN expr1 IS NOT NULL THEN EXPR1
// ...
// WHEN exprn is NOT NULL THEN exprn
// ELSE NULL END
override fun visitExprCoalesce(node: Expr.Coalesce, ctx: Env): Rex = plan {
override fun visitExprCoalesce(node: Expr.Coalesce, ctx: Env): Rex {
val type = StaticType.ANY
val createBranch: (Rex) -> Rex.Op.Case.Branch = { expr: Rex ->
val updatedCondition = rex(type, negate(call("is_null", expr)))
rexOpCaseBranch(updatedCondition, expr)
val args = node.args.map { arg ->
visitExprCoerce(arg, ctx)
}

val branches = node.args.map {
createBranch(visitExpr(it, ctx))
}.toMutableList()

val defaultRex = rex(type = StaticType.NULL, op = rexOpLit(value = nullValue()))
val op = rexOpCase(branches, defaultRex)
rex(type, op)
val op = rexOpCoalesce(args)
return rex(type, op)
}

// nullIf(expr1, expr2) ->
// CASE
// WHEN expr1 = expr2 THEN NULL
// ELSE expr1 END
override fun visitExprNullIf(node: Expr.NullIf, ctx: Env): Rex = plan {
override fun visitExprNullIf(node: Expr.NullIf, ctx: Env): Rex {
val type = StaticType.ANY
val expr1 = visitExpr(node.value, ctx)
val expr2 = visitExpr(node.nullifier, ctx)
val id = identifierSymbol(Expr.Binary.Op.EQ.name.lowercase(), Identifier.CaseSensitivity.SENSITIVE)
val fn = fnUnresolved(id, true)
val call = rexOpCallStatic(fn, listOf(expr1, expr2))
val branches = listOf(
rexOpCaseBranch(rex(type, call), rex(type = StaticType.NULL, op = rexOpLit(value = nullValue()))),
)
val op = rexOpCase(branches.toMutableList(), expr1)
rex(type, op)
val value = visitExprCoerce(node.value, ctx)
val nullifier = visitExprCoerce(node.nullifier, ctx)
val op = rexOpNullif(value, nullifier)
return rex(type, op)
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,15 @@ internal class DynamicTyper {
*/
fun accumulate(type: StaticType) {
val nonAbsentTypes = mutableSetOf<StaticType>()
for (t in type.flatten().allTypes) {
val flatType = type.flatten()
if (flatType == StaticType.ANY) {
// Use ANY runtime; do not expand ANY
types.add(flatType)
args.add(ANY)
calculate(ANY)
return
}
for (t in flatType.allTypes) {
when (t) {
is NullType -> nullable = true
is MissingType -> missable = true
Expand Down Expand Up @@ -121,7 +129,7 @@ internal class DynamicTyper {
if (missable) modifiers.add(StaticType.MISSING)
// If at top supertype, then return union of all accumulated types
if (supertype == ANY) {
return StaticType.unionOf(types + modifiers) to null
return StaticType.unionOf(types + modifiers).flatten() to null
}
// If a collection, then return union of all accumulated types as these coercion rules are not defined by SQL.
if (supertype == STRUCT || supertype == BAG || supertype == LIST || supertype == SEXP) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,11 @@ import org.partiql.planner.internal.ir.rexOpCallDynamic
import org.partiql.planner.internal.ir.rexOpCallDynamicCandidate
import org.partiql.planner.internal.ir.rexOpCallStatic
import org.partiql.planner.internal.ir.rexOpCaseBranch
import org.partiql.planner.internal.ir.rexOpCoalesce
import org.partiql.planner.internal.ir.rexOpCollection
import org.partiql.planner.internal.ir.rexOpErr
import org.partiql.planner.internal.ir.rexOpLit
import org.partiql.planner.internal.ir.rexOpNullif
import org.partiql.planner.internal.ir.rexOpPathIndex
import org.partiql.planner.internal.ir.rexOpPathKey
import org.partiql.planner.internal.ir.rexOpPathSymbol
Expand Down Expand Up @@ -760,6 +762,54 @@ internal class PlanTyper(
return rex(type, op)
}

// COALESCE(v1, v2,..., vN)
// ==
// CASE
// WHEN v1 IS NOT NULL THEN v1 -- WHEN branch always a boolean
// WHEN v2 IS NOT NULL THEN v2 -- WHEN branch always a boolean
// ... -- similarly for v3..vN-1
// ELSE vN
// END
// --> minimal common supertype of(<type v1>, <type v2>, ..., <type v3>)
override fun visitRexOpCoalesce(node: Rex.Op.Coalesce, ctx: StaticType?): Rex {
val args = node.args.map { visitRex(it, it.type) }.toMutableList()
val typer = DynamicTyper()
args.forEach { v ->
typer.accumulate(v.type)
}
val (type, mapping) = typer.mapping()
if (mapping != null) {
assert(mapping.size == args.size) { "Coercion mappings `len ${mapping.size}` did not match the number of COALESCE arguments `len ${args.size}`" }
for (i in args.indices) {
val (operand, target) = mapping[i]
if (operand == target) continue // skip; no coercion needed
val cast = env.fnResolver.cast(operand, target)
val rex = rex(type, rexOpCallStatic(fnResolved(cast), listOf(args[i])))
args[i] = rex
}
}
val op = rexOpCoalesce(args)
return rex(type, op)
}

// NULLIF(v1, v2)
// ==
// CASE
// WHEN v1 = v2 THEN NULL -- WHEN branch always a boolean
// ELSE v1
// END
// --> minimal common supertype of (NULL, <type v1>)
override fun visitRexOpNullif(node: Rex.Op.Nullif, ctx: StaticType?): Rex {
val value = visitRex(node.value, node.value.type)
val nullifier = visitRex(node.nullifier, node.nullifier.type)
val typer = DynamicTyper()
typer.accumulate(NULL)
typer.accumulate(value.type)
val (type, _) = typer.mapping()
val op = rexOpNullif(value, nullifier)
return rex(type, op)
}

/**
* In this context, Boolean means PartiQLValueType Bool, which can be nullable.
* Hence, we permit Static Type BOOL, Static Type NULL, Static Type Missing here.
Expand Down
9 changes: 9 additions & 0 deletions partiql-planner/src/main/resources/partiql_plan_internal.ion
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,15 @@ rex::{
],
},

nullif::{
value: rex,
nullifier: rex
},

coalesce::{
args: list::[rex]
},

collection::{
values: list::[rex],
},
Expand Down
Loading

1 comment on commit 92cc57a

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JMH Benchmark

Benchmark suite Current: 92cc57a Previous: 6fbfa78 Ratio
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncGroupingWithInterruptible 278.4598944661414 us/op 268.7085251282748 us/op 1.04
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncGroupingWithoutInterruptible 261.2119008564643 us/op 255.5294927104857 us/op 1.02
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncWithInterruptible 241.29644431034822 us/op 236.82650895297215 us/op 1.02
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncWithoutInterruptible 235.09981167272207 us/op 239.5034523769419 us/op 0.98
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinWithInterruptible 172.95035987578495 us/op 175.64875213579984 us/op 0.98
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinWithoutInterruptible 169.62996234043896 us/op 183.19851991505874 us/op 0.93
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinAggGroupWithInterruptible 13170347.4186 us/op 12997210.0436 us/op 1.01
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinAggGroupWithoutInterruptible 13240436.573050003 us/op 13350340.544399997 us/op 0.99
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinAggWithInterruptible 4978519.6175 us/op 5325143.0204 us/op 0.93
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinAggWithoutInterruptible 4973493.36415 us/op 5004382.178899999 us/op 0.99
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinWithInterruptible 39.40375475663195 us/op 39.15536651956187 us/op 1.01
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinWithoutInterruptible 38.86691983981929 us/op 38.952566992727576 us/op 1.00
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinAggGroupWithInterruptible 13153729.4443 us/op 13052737.642650003 us/op 1.01
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinAggGroupWithoutInterruptible 13119032.3137 us/op 12713939.2636 us/op 1.03
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinAggWithInterruptible 5342210.698299999 us/op 4873126.52895 us/op 1.10
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinAggWithoutInterruptible 5080304.092499999 us/op 5042574.468549999 us/op 1.01
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinWithInterruptible 95218.71792272727 us/op 97558.76173363636 us/op 0.98
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinWithoutInterruptible 95074.98634446968 us/op 94690.04376628788 us/op 1.00
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLCompiler15 80.59336416004992 us/op 78.8196510380007 us/op 1.02
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLCompiler30 186.1655457109918 us/op 188.04173288331765 us/op 0.99
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator15 335106.27172083326 us/op 375564.77955000004 us/op 0.89
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator30 640845.35305 us/op 734284.0849750001 us/op 0.87
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator30WithData10 7315845.680249999 us/op 7582480.6816 us/op 0.96
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLParser15 133.51136498097668 us/op 133.40660703031293 us/op 1.00
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLParser30 252.7831098682976 us/op 245.82378680961574 us/op 1.03
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameCaseWhenThen 33.17808802251761 us/op 32.6906637482974 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery 41.885325983520055 us/op 41.41239023904329 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery01 235.56953386529986 us/op 240.13372889328554 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery02 421.88188184474046 us/op 414.3962722079803 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameExceptUnionIntersectSixty 157.32318927574357 us/op 158.17299981982055 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameExec20Expressions 47.120449012357 us/op 47.60265990716761 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameFromLet 33.384872230862385 us/op 34.36925633304057 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGraphPattern 31.569004111532244 us/op 32.004801364832204 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGraphPreFilters 57.01903790257679 us/op 57.34523355274564 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGroupLimit 38.659223904425644 us/op 39.27006904885712 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameLongFromSourceOrderBy 47.685389230155444 us/op 47.74014916232408 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameManyJoins 50.677920828139776 us/op 47.945576547887924 us/op 1.06
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameNestedAggregates 85.6080158831685 us/op 84.89430881030019 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameNestedParen 13.321250980591856 us/op 13.33777100453403 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNamePivot 50.53089047959452 us/op 52.36919607963165 us/op 0.96
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuery15OrsAndLikes 162.2383983792518 us/op 165.0905369253268 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuery30Plus 83.00563593965892 us/op 83.61277367960602 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryFunc 37.922631949515626 us/op 38.15856086240802 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryFuncInProjection 43.0066398643117 us/op 42.10255849284493 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryList 59.27845875123079 us/op 58.49308642225376 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryNestedSelect 590.080539829617 us/op 586.7610497784419 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuerySimple 12.108872876322788 us/op 12.009519303650084 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralJoins 16.874191821900492 us/op 16.78218260009485 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralProjections 56.94020984970807 us/op 57.74388444569628 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralSelect 159.83891036422608 us/op 156.1595196982345 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSimpleInsert 22.849816943381228 us/op 22.47474557894521 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeJoins 16.625018437547716 us/op 16.60058492642822 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeProjections 22.77214363663779 us/op 22.39587585018901 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeSelect 39.73355506990321 us/op 39.94227064081383 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameTimeZone 19.275147810595268 us/op 19.08327571402905 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameVeryLongQuery 187.12822376081982 us/op 201.59880544874926 us/op 0.93
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameVeryLongQuery01 766.6075567644576 us/op 754.0160948528492 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameCaseWhenThen 18.369557330252853 us/op 18.656752074086253 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameComplexQuery 186.21748901460518 us/op 184.8915142272073 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameComplexQuery01 87.03738322982244 us/op 85.82381667031513 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameExceptUnionIntersectSixty 163.084378103838 us/op 163.277879550425 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameExec20Expressions 45.80286518338958 us/op 47.77501295915421 us/op 0.96
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameFromLet 28.081656185673268 us/op 28.339980213674643 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGraphPattern 29.433706699273035 us/op 29.128048338272936 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGraphPreFilters 55.021752432540055 us/op 53.79373260396136 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGroupLimit 25.563311078271834 us/op 25.539467786870755 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameLongFromSourceOrderBy 97.26364705594916 us/op 99.90522864400083 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameManyJoins 33.75773894948079 us/op 33.962013534143026 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameNestedAggregates 72.5532243280411 us/op 71.50157476592712 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameNestedParen 61.756398175854066 us/op 63.14285665912722 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseNamePivot 48.313517136886844 us/op 49.61798324935217 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuery15OrsAndLikes 133.14108889841185 us/op 135.47824016635832 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuery30Plus 44.55890753712955 us/op 47.13998811052336 us/op 0.95
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryFunc 98.72085973673356 us/op 99.26587223547064 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryFuncInProjection 64.37115002200972 us/op 64.42473910908572 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryList 57.2418720258665 us/op 54.95724693080946 us/op 1.04
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryNestedSelect 104.22860409414639 us/op 103.35687778266852 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuerySimple 8.57226918847751 us/op 8.56631108399704 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralJoins 52.84237524828891 us/op 53.32179867248997 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralProjections 41.019115765058345 us/op 41.94757093486517 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralSelect 75.20719433775027 us/op 74.93900434436924 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSimpleInsert 15.093084053870811 us/op 15.072474322406048 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeJoins 15.032471137644489 us/op 14.577931927618398 us/op 1.03
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeProjections 13.137522122955023 us/op 12.62142903959959 us/op 1.04
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeSelect 24.750493481390542 us/op 24.637063337891234 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameTimeZone 6.06051982439837 us/op 5.975979147148614 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameVeryLongQuery 304.95688483658563 us/op 299.60051539545 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameVeryLongQuery01 878.3847572637669 us/op 843.1964898111879 us/op 1.04
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLCompiler 6.973613759363596 us/op 6.92446601930673 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLEvaluator 1.7990958069066856 us/op 2.0259914530269096 us/op 0.89
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLParser 7.8644501843481605 us/op 7.816191416488957 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testCompileQuery1 7.167915476150098 us/op 6.8411670976782 us/op 1.05
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testCompileQuery2 13.646690161143749 us/op 13.35452675279194 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testCompileQuery3 15.08816745121285 us/op 15.107339115211142 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testCompileQuery4 21.91502419420387 us/op 22.772991605544227 us/op 0.96
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testCompileQuery5 23.632974559023214 us/op 24.003092719651026 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery1 141081.70017678573 us/op 141971.65438035713 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery10 14.900997936940708 us/op 15.458413464937394 us/op 0.96
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery11 2.4861121935300226 us/op 2.4469002110611284 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery2 240313.61575999996 us/op 244350.63161999994 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery3 242995.70639999997 us/op 240118.17314499995 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery4 301240.46401249996 us/op 297811.6548 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery5 298853.8966999999 us/op 295603.77682499995 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery6 373227.1420166666 us/op 360065.7054166667 us/op 1.04
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery7 30942.87926931818 us/op 30027.68745045677 us/op 1.03
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery8 2832.876492279187 us/op 2817.029109116285 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery9 262.47496968725517 us/op 259.54219571119256 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testCompileQuery1 7.042708042997004 us/op 6.7803541354256485 us/op 1.04
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testCompileQuery2 13.526009652658587 us/op 13.020360529069526 us/op 1.04
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testCompileQuery3 14.891672826340066 us/op 15.093865158135685 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testCompileQuery4 21.501789216562607 us/op 21.103350690187163 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testCompileQuery5 21.90270806289134 us/op 21.36552483792246 us/op 1.03
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery1 132845.14008124996 us/op 127882.16573749999 us/op 1.04
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery10 9.374771444455604 us/op 9.364026759744627 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery11 1.3667883802905714 us/op 1.352566638479765 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery2 194394.9082 us/op 198837.17022333335 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery3 193517.01759999996 us/op 195774.00665499998 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery4 238043.09774250007 us/op 244866.2083 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery5 233307.74113999997 us/op 224910.28399 us/op 1.04
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery6 293882.85344999994 us/op 299874.0330375001 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery7 24168.44387026547 us/op 26256.73163015475 us/op 0.92
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery8 2165.4378192236863 us/op 2174.640765524388 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery9 198.49981207139837 us/op 198.52705893341786 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameCaseWhenThen 31.913180957623307 us/op 31.613516757407723 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameComplexQuery 40.12210316741853 us/op 39.335223819146094 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameComplexQuery01 237.2433121702649 us/op 237.22393138519556 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameComplexQuery02 407.30141096902514 us/op 405.99937943459446 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameExceptUnionIntersectSixty 156.4600221028793 us/op 156.91548085506224 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameExec20Expressions 45.096466431492814 us/op 44.22662569227746 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameFromLet 31.928738328942096 us/op 32.17909577850048 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameGraphPattern 31.1145829357475 us/op 31.142979708863585 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameGraphPreFilters 54.93795064659504 us/op 55.561383695796316 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameGroupLimit 39.04424348910386 us/op 38.97286331230254 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameLongFromSourceOrderBy 46.78043338828594 us/op 47.24019662906569 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameManyJoins 48.006079751595834 us/op 47.673748151547294 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameNestedAggregates 84.03856837080835 us/op 83.96354098308612 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameNestedParen 13.157651800447336 us/op 12.771554307017665 us/op 1.03
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNamePivot 48.58355726982482 us/op 52.006927327436095 us/op 0.93
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQuery15OrsAndLikes 154.940982143617 us/op 154.3946576600231 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQuery30Plus 84.65759573263765 us/op 83.55728299651085 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryFunc 38.05478909223208 us/op 36.9997658369562 us/op 1.03
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryFuncInProjection 42.563954041450565 us/op 42.00345802249103 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryList 56.63440324854573 us/op 57.182101666370855 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryNestedSelect 566.8969497162752 us/op 568.0484139773461 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQuerySimple 11.609888825691327 us/op 11.690564570415246 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSeveralJoins 16.12915979354485 us/op 16.033520571752586 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSeveralProjections 53.308341258029614 us/op 52.598292326495184 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSeveralSelect 155.23067524687366 us/op 155.7971600122654 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSimpleInsert 22.061596999352993 us/op 21.77655244707152 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSomeJoins 15.733525276838098 us/op 15.85065197993219 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSomeProjections 21.957616134992204 us/op 21.419632189634306 us/op 1.03
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSomeSelect 39.090284941214726 us/op 40.55244677897885 us/op 0.96
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameTimeZone 18.368445136927654 us/op 18.680042865457114 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameVeryLongQuery 192.96556206637908 us/op 190.88154850465398 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameVeryLongQuery01 752.6016930028878 us/op 747.845827952999 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameCaseWhenThen 23.661440305005584 us/op 23.46269250138576 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameComplexQuery 245.39164532730607 us/op 248.52079870739084 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameComplexQuery01 125.70643941283095 us/op 127.1775818856485 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameExceptUnionIntersectSixty 258.73981488839195 us/op 258.32021989073394 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameExec20Expressions 61.78094706995823 us/op 62.57426320452191 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameFromLet 38.57555854095712 us/op 40.82863925909938 us/op 0.94
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameGraphPattern 46.456112215417946 us/op 46.476779295728264 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameGraphPreFilters 82.00545654598271 us/op 81.95142097583874 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameGroupLimit 28.854909280810904 us/op 28.53513981497066 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameLongFromSourceOrderBy 121.38086696367188 us/op 117.83070816984495 us/op 1.03
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameManyJoins 43.72021121372994 us/op 41.09932966721185 us/op 1.06
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameNestedAggregates 102.3527439991868 us/op 99.99547996116317 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameNestedParen 64.36024694770722 us/op 68.60696312120461 us/op 0.94
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNamePivot 62.292163217984736 us/op 63.727590295614746 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQuery15OrsAndLikes 200.4276578647986 us/op 188.94257787409043 us/op 1.06
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQuery30Plus 60.36190099031309 us/op 58.83908987672821 us/op 1.03
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryFunc 112.58216684074287 us/op 116.43746175721544 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryFuncInProjection 79.0956547302188 us/op 80.29345778626787 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryList 68.51287851565361 us/op 68.83303976645092 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryNestedSelect 135.23673706037806 us/op 139.9835423995848 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQuerySimple 12.021301487031732 us/op 11.542292892504207 us/op 1.04
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSeveralJoins 79.62021978251613 us/op 78.65980414971207 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSeveralProjections 63.06622000879996 us/op 60.77824811497747 us/op 1.04
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSeveralSelect 114.98187738980216 us/op 114.97595374777481 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSimpleInsert 21.547329590803354 us/op 21.642454809157876 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSomeJoins 20.619349309856588 us/op 19.646793516831416 us/op 1.05
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSomeProjections 19.01613667812754 us/op 18.57231828566828 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSomeSelect 34.56392128772123 us/op 35.01269496384199 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameTimeZone 7.4222172730940175 us/op 7.700357227628304 us/op 0.96
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameVeryLongQuery 465.92865163390235 us/op 466.44180340960327 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameVeryLongQuery01 1197.4922705457734 us/op 1169.8868153170597 us/op 1.02

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.