Skip to content

Commit

Permalink
Merge pull request #1383 from partiql/fix-count-agg
Browse files Browse the repository at this point in the history
Fixes aggregations of attribute references to values of union types
  • Loading branch information
johnedquinn authored Apr 2, 2024
2 parents 92cc57a + d767d08 commit db1c85b
Show file tree
Hide file tree
Showing 13 changed files with 439 additions and 64 deletions.
7 changes: 6 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,18 @@ 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
- 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.
- **Behavioral change**: The COUNT aggregate function now returns INT64.

### Deprecated
- The current SqlBlock, SqlDialect, and SqlLayout are marked as deprecated and will be slightly changed in the next release.
- Deprecates constructor and properties `variableName` and `caseSensitive` of `org.partiql.planner.PlanningProblemDetails.UndefinedVariable`
in favor of newly added constructor and properties `name` and `inScopeVariables`.

### Fixed
- `StaticType.flatten()` on an `AnyOfType` with `AnyType` will return `AnyType`
- Updates the default `.sql()` method to use a more efficient (internal) printer implementation.

- Fixes aggregations of attribute references to values of union types. This fix also allows for proper error handling by passing the UnknownAggregateFunction problem to the ProblemCallback. Please note that, with this change, the planner will no longer immediately throw an IllegalStateException for this exact scenario.

### Removed

Expand All @@ -51,6 +55,7 @@ Thank you to all who have contributed!
- @<your-username>
- @rchowell
- @alancai98
- @johnedquinn

## [0.14.4]

Expand Down
67 changes: 61 additions & 6 deletions partiql-planner/src/main/kotlin/org/partiql/planner/Errors.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package org.partiql.planner

import org.partiql.errors.ProblemDetails
import org.partiql.errors.ProblemSeverity
import org.partiql.plan.Identifier
import org.partiql.planner.internal.utils.PlanUtils
import org.partiql.types.StaticType

/**
Expand All @@ -24,15 +26,60 @@ public sealed class PlanningProblemDetails(
public data class CompileError(val errorMessage: String) :
PlanningProblemDetails(ProblemSeverity.ERROR, { errorMessage })

public data class UndefinedVariable(val variableName: String, val caseSensitive: Boolean) :
PlanningProblemDetails(
ProblemSeverity.ERROR,
{
"Undefined variable '$variableName'." +
quotationHint(caseSensitive)
public data class UndefinedVariable(
val name: Identifier,
val inScopeVariables: Set<String>
) : PlanningProblemDetails(
ProblemSeverity.ERROR,
{
val humanReadableName = PlanUtils.identifierToString(name)
"Variable $humanReadableName does not exist in the database environment and is not an attribute of the following in-scope variables $inScopeVariables." +
quotationHint(isSymbolAndCaseSensitive(name))
}
) {

@Deprecated("This will be removed in a future major version release.", replaceWith = ReplaceWith("name"))
val variableName: String = when (name) {
is Identifier.Symbol -> name.symbol
is Identifier.Qualified -> when (name.steps.size) {
0 -> name.root.symbol
else -> name.steps.last().symbol
}
}

@Deprecated("This will be removed in a future major version release.", replaceWith = ReplaceWith("name"))
val caseSensitive: Boolean = when (name) {
is Identifier.Symbol -> name.caseSensitivity == Identifier.CaseSensitivity.SENSITIVE
is Identifier.Qualified -> when (name.steps.size) {
0 -> name.root.caseSensitivity == Identifier.CaseSensitivity.SENSITIVE
else -> name.steps.last().caseSensitivity == Identifier.CaseSensitivity.SENSITIVE
}
}

@Deprecated("This will be removed in a future major version release.", replaceWith = ReplaceWith("UndefinedVariable(Identifier, Set<String>)"))
public constructor(variableName: String, caseSensitive: Boolean) : this(
Identifier.Symbol(
variableName,
when (caseSensitive) {
true -> Identifier.CaseSensitivity.SENSITIVE
false -> Identifier.CaseSensitivity.INSENSITIVE
}
),
emptySet()
)

private companion object {
/**
* Used to check whether the [id] is an [Identifier.Symbol] and whether it is case-sensitive. This is helpful
* for giving the [quotationHint] to the user.
*/
private fun isSymbolAndCaseSensitive(id: Identifier): Boolean = when (id) {
is Identifier.Symbol -> id.caseSensitivity == Identifier.CaseSensitivity.SENSITIVE
is Identifier.Qualified -> false
}
}
}

public data class UndefinedDmlTarget(val variableName: String, val caseSensitive: Boolean) :
PlanningProblemDetails(
ProblemSeverity.ERROR,
Expand Down Expand Up @@ -94,6 +141,14 @@ public sealed class PlanningProblemDetails(
"Unknown function `$identifier($types)"
})

public data class UnknownAggregateFunction(
val identifier: Identifier,
val args: List<StaticType>,
) : PlanningProblemDetails(ProblemSeverity.ERROR, {
val types = args.joinToString { "<${it.toString().lowercase()}>" }
"Unknown aggregate function `$identifier($types)"
})

public object ExpressionAlwaysReturnsNullOrMissing : PlanningProblemDetails(
severity = ProblemSeverity.ERROR,
messageFormatter = { "Expression always returns null or missing." }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -702,13 +702,13 @@ internal object PartiQLHeader : Header() {
private fun count() = listOf(
FunctionSignature.Aggregation(
name = "count",
returns = INT32,
returns = INT64,
parameters = listOf(FunctionParameter("value", ANY)),
isNullable = false,
),
FunctionSignature.Aggregation(
name = "count_star",
returns = INT32,
returns = INT64,
parameters = listOf(),
isNullable = false,
),
Expand Down Expand Up @@ -741,6 +741,15 @@ internal object PartiQLHeader : Header() {
)
}

/**
* According to SQL:1999 Section 6.16 Syntax Rule 14.c and Rule 14.d:
* > If AVG is specified and DT is exact numeric, then the declared type of the result is exact
* numeric with implementation-defined precision not less than the precision of DT and
* implementation-defined scale not less than the scale of DT.
*
* > If DT is approximate numeric, then the declared type of the result is approximate numeric
* with implementation-defined precision not less than the precision of DT.
*/
private fun avg() = types.numeric.map {
FunctionSignature.Aggregation(
name = "avg",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package org.partiql.planner.internal.transforms

import org.partiql.errors.Problem
import org.partiql.errors.ProblemCallback
import org.partiql.errors.UNKNOWN_PROBLEM_LOCATION
import org.partiql.plan.PlanNode
import org.partiql.plan.partiQLPlan
import org.partiql.planner.PlanningProblemDetails
import org.partiql.planner.internal.ir.Agg
import org.partiql.planner.internal.ir.Catalog
import org.partiql.planner.internal.ir.Fn
Expand All @@ -12,7 +15,10 @@ import org.partiql.planner.internal.ir.Rel
import org.partiql.planner.internal.ir.Rex
import org.partiql.planner.internal.ir.Statement
import org.partiql.planner.internal.ir.visitor.PlanBaseVisitor
import org.partiql.planner.internal.utils.PlanUtils
import org.partiql.types.function.FunctionSignature
import org.partiql.value.PartiQLValueExperimental
import org.partiql.value.PartiQLValueType

/**
* This is an internal utility to translate from the internal unresolved plan used for typing to the public plan IR.
Expand Down Expand Up @@ -58,7 +64,7 @@ internal object PlanTransform : PlanBaseVisitor<PlanNode, ProblemCallback>() {
override fun visitAggResolved(node: Agg.Resolved, ctx: ProblemCallback) = org.partiql.plan.Agg(node.signature)

override fun visitAggUnresolved(node: Agg.Unresolved, ctx: ProblemCallback): org.partiql.plan.Rex.Op {
error("Unresolved aggregation ${node.identifier}")
error("Internal error: This should have been handled somewhere else. Cause: Unresolved aggregation ${node.identifier}.")
}

override fun visitStatement(node: Statement, ctx: ProblemCallback) =
Expand Down Expand Up @@ -342,11 +348,37 @@ internal object PlanTransform : PlanBaseVisitor<PlanNode, ProblemCallback>() {
groups = node.groups.map { visitRex(it, ctx) },
)

override fun visitRelOpAggregateCall(node: Rel.Op.Aggregate.Call, ctx: ProblemCallback) =
org.partiql.plan.Rel.Op.Aggregate.Call(
agg = visitAgg(node.agg, ctx),
@OptIn(PartiQLValueExperimental::class)
override fun visitRelOpAggregateCall(node: Rel.Op.Aggregate.Call, ctx: ProblemCallback): org.partiql.plan.Rel.Op.Aggregate.Call {
val agg = when (val agg = node.agg) {
is Agg.Unresolved -> {
val name = PlanUtils.identifierToString(visitIdentifier(agg.identifier, ctx))
ctx.invoke(
Problem(
UNKNOWN_PROBLEM_LOCATION,
PlanningProblemDetails.UnknownAggregateFunction(
visitIdentifier(agg.identifier, ctx),
node.args.map { it.type }
)
)
)
org.partiql.plan.Agg(
FunctionSignature.Aggregation(
"UNKNOWN_AGG::$name",
returns = PartiQLValueType.MISSING,
parameters = emptyList()
)
)
}
is Agg.Resolved -> {
visitAggResolved(agg, ctx)
}
}
return org.partiql.plan.Rel.Op.Aggregate.Call(
agg = agg,
args = node.args.map { visitRex(it, ctx) },
)
}

override fun visitRelOpExclude(node: Rel.Op.Exclude, ctx: ProblemCallback) = org.partiql.plan.Rel.Op.Exclude(
input = visitRel(node.input, ctx),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ import org.partiql.planner.internal.ir.rexOpStructField
import org.partiql.planner.internal.ir.rexOpTupleUnion
import org.partiql.planner.internal.ir.statementQuery
import org.partiql.planner.internal.ir.util.PlanRewriter
import org.partiql.planner.internal.transforms.PlanTransform
import org.partiql.spi.BindingCase
import org.partiql.spi.BindingName
import org.partiql.spi.BindingPath
Expand Down Expand Up @@ -451,8 +452,8 @@ internal class PlanTyper(
}
val resolvedVar = env.resolve(path, locals, strategy)
if (resolvedVar == null) {
handleUndefinedVariable(path.steps.last())
return rex(ANY, rexOpErr("Undefined variable ${node.identifier}"))
val details = handleUndefinedVariable(node.identifier, locals.schema.map { it.name }.toSet())
return rex(ANY, rexOpErr(details.message))
}
return visitRex(resolvedVar, null)
}
Expand Down Expand Up @@ -1266,19 +1267,11 @@ internal class PlanTyper(
* to each row of T and eliminating null values <--- all NULL values are eliminated as inputs
*/
fun resolveAgg(agg: Agg.Unresolved, arguments: List<Rex>): Pair<Rel.Op.Aggregate.Call, StaticType> {
var missingArg = false
val args = arguments.map {
val arg = visitRex(it, null)
if (arg.type.isMissable()) missingArg = true
val arg = visitRex(it, it.type)
arg
}

//
if (missingArg) {
handleAlwaysMissing()
return relOpAggregateCall(agg, listOf(rexErr("MISSING"))) to MissingType
}

// Try to match the arguments to functions defined in the catalog
return when (val match = env.resolveAgg(agg, args)) {
is FnMatch.Ok -> {
Expand Down Expand Up @@ -1399,13 +1392,20 @@ internal class PlanTyper(

// ERRORS

private fun handleUndefinedVariable(name: BindingName) {
/**
* Invokes [onProblem] with a newly created [PlanningProblemDetails.UndefinedVariable] and returns the
* [PlanningProblemDetails.UndefinedVariable].
*/
private fun handleUndefinedVariable(name: Identifier, locals: Set<String>): PlanningProblemDetails.UndefinedVariable {
val planName = PlanTransform.visitIdentifier(name, onProblem)
val details = PlanningProblemDetails.UndefinedVariable(planName, locals)
onProblem(
Problem(
sourceLocation = UNKNOWN_PROBLEM_LOCATION,
details = PlanningProblemDetails.UndefinedVariable(name.name, name.bindingCase == BindingCase.SENSITIVE)
details = details
)
)
return details
}

private fun handleUnexpectedType(actual: StaticType, expected: Set<StaticType>) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import org.partiql.planner.internal.ir.rexOpVarResolved
import org.partiql.spi.BindingCase
import org.partiql.spi.BindingName
import org.partiql.spi.BindingPath
import org.partiql.types.AnyOfType
import org.partiql.types.AnyType
import org.partiql.types.StaticType
import org.partiql.types.StructType
import org.partiql.types.TupleConstraint
Expand Down Expand Up @@ -85,30 +87,28 @@ internal class TypeEnv(public val schema: List<Rel.Binding>) {
for (i in schema.indices) {
val local = schema[i]
val type = local.type
if (type is StructType) {
when (type.containsKey(name)) {
true -> {
if (c != null && known) {
// TODO root was already definitively matched, emit ambiguous error.
return null
}
c = rex(type, rexOpVarResolved(i))
known = true
when (type.containsKey(name)) {
true -> {
if (c != null && known) {
// TODO root was already definitively matched, emit ambiguous error.
return null
}
null -> {
if (c != null) {
if (known) {
continue
} else {
// TODO we have more than one possible match, emit ambiguous error.
return null
}
c = rex(type, rexOpVarResolved(i))
known = true
}
null -> {
if (c != null) {
if (known) {
continue
} else {
// TODO we have more than one possible match, emit ambiguous error.
return null
}
c = rex(type, rexOpVarResolved(i))
known = false
}
false -> continue
c = rex(type, rexOpVarResolved(i))
known = false
}
false -> continue
}
}
return c
Expand Down Expand Up @@ -152,4 +152,45 @@ internal class TypeEnv(public val schema: List<Rel.Binding>) {
val closed = constraints.contains(TupleConstraint.Open(false))
return if (closed) false else null
}

/**
* Searches for the [BindingName] within the given [StaticType].
*
* Returns
* - true iff known to contain key
* - false iff known to NOT contain key
* - null iff NOT known to contain key
*
* @param name
* @return
*/
private fun StaticType.containsKey(name: BindingName): Boolean? {
return when (val type = this.flatten()) {
is StructType -> type.containsKey(name)
is AnyOfType -> {
var anyKnownToContainKey = false
var anyKnownToNotContainKey = false
var anyNotKnownToContainKey = false
for (t in type.allTypes) {
val containsKey = t.containsKey(name)
anyKnownToContainKey = anyKnownToContainKey || (containsKey == true)
anyKnownToNotContainKey = anyKnownToNotContainKey || (containsKey == false)
anyNotKnownToContainKey = anyNotKnownToContainKey || (containsKey == null)
}
when {
// There are:
// - No subtypes that are known to not contain the key
// - No subtypes that are not known to contain the key
anyKnownToNotContainKey.not() && anyNotKnownToContainKey.not() -> true
// There are:
// - No subtypes that are known to contain the key
// - No subtypes that are not known to contain the key
anyKnownToContainKey.not() && anyNotKnownToContainKey.not() -> false
else -> null
}
}
is AnyType -> null
else -> false
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ internal fun StaticType.toRuntimeType(): PartiQLValueType {
// handle anyOf(null, T) cases
val t = types.filter { it !is NullType && it !is MissingType }
return if (t.size != 1) {
error("Cannot have a UNION runtime type: $this")
PartiQLValueType.ANY
} else {
t.first().asRuntimeType()
}
Expand Down
Loading

1 comment on commit db1c85b

@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: db1c85b Previous: 92cc57a Ratio
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncGroupingWithInterruptible 257.04429106750786 us/op 278.4598944661414 us/op 0.92
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncGroupingWithoutInterruptible 246.83894597051804 us/op 261.2119008564643 us/op 0.94
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncWithInterruptible 236.8054378730696 us/op 241.29644431034822 us/op 0.98
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncWithoutInterruptible 254.23610660794785 us/op 235.09981167272207 us/op 1.08
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinWithInterruptible 170.60600776033587 us/op 172.95035987578495 us/op 0.99
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinWithoutInterruptible 168.4319882564335 us/op 169.62996234043896 us/op 0.99
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinAggGroupWithInterruptible 13124581.5018 us/op 13170347.4186 us/op 1.00
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinAggGroupWithoutInterruptible 13545672.950849999 us/op 13240436.573050003 us/op 1.02
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinAggWithInterruptible 5027013.3105999995 us/op 4978519.6175 us/op 1.01
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinAggWithoutInterruptible 4956915.698650001 us/op 4973493.36415 us/op 1.00
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinWithInterruptible 38.69901344265344 us/op 39.40375475663195 us/op 0.98
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinWithoutInterruptible 38.16004190878846 us/op 38.86691983981929 us/op 0.98
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinAggGroupWithInterruptible 12843175.5878 us/op 13153729.4443 us/op 0.98
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinAggGroupWithoutInterruptible 13101699.363500003 us/op 13119032.3137 us/op 1.00
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinAggWithInterruptible 5017232.15725 us/op 5342210.698299999 us/op 0.94
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinAggWithoutInterruptible 5050684.10375 us/op 5080304.092499999 us/op 0.99
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinWithInterruptible 94010.11647272726 us/op 95218.71792272727 us/op 0.99
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinWithoutInterruptible 95188.93700454544 us/op 95074.98634446968 us/op 1.00
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLCompiler15 78.52456283567604 us/op 80.59336416004992 us/op 0.97
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLCompiler30 155.4046832732892 us/op 186.1655457109918 us/op 0.83
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator15 373231.69871666667 us/op 335106.27172083326 us/op 1.11
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator30 635489.1324000002 us/op 640845.35305 us/op 0.99
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator30WithData10 7381169.730649998 us/op 7315845.680249999 us/op 1.01
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLParser15 133.2582794066031 us/op 133.51136498097668 us/op 1.00
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLParser30 256.4842376920959 us/op 252.7831098682976 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameCaseWhenThen 32.63685789004004 us/op 33.17808802251761 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery 42.61597472141712 us/op 41.885325983520055 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery01 238.48447164574947 us/op 235.56953386529986 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery02 405.7585853093129 us/op 421.88188184474046 us/op 0.96
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameExceptUnionIntersectSixty 156.95548247153792 us/op 157.32318927574357 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameExec20Expressions 45.78135641381921 us/op 47.120449012357 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameFromLet 34.7278455992771 us/op 33.384872230862385 us/op 1.04
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGraphPattern 32.599890702930274 us/op 31.569004111532244 us/op 1.03
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGraphPreFilters 56.0164625034552 us/op 57.01903790257679 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGroupLimit 37.991760003885474 us/op 38.659223904425644 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameLongFromSourceOrderBy 48.61659808904823 us/op 47.685389230155444 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameManyJoins 48.72031107405984 us/op 50.677920828139776 us/op 0.96
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameNestedAggregates 86.30369230084048 us/op 85.6080158831685 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameNestedParen 13.32773637018152 us/op 13.321250980591856 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNamePivot 52.55489681101329 us/op 50.53089047959452 us/op 1.04
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuery15OrsAndLikes 156.51268991049326 us/op 162.2383983792518 us/op 0.96
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuery30Plus 84.24913069041114 us/op 83.00563593965892 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryFunc 38.202302008485034 us/op 37.922631949515626 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryFuncInProjection 42.88820758370537 us/op 43.0066398643117 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryList 58.52334524527252 us/op 59.27845875123079 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryNestedSelect 583.0639389472782 us/op 590.080539829617 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuerySimple 12.014265924245418 us/op 12.108872876322788 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralJoins 16.633029052729306 us/op 16.874191821900492 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralProjections 56.09079127644692 us/op 56.94020984970807 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralSelect 158.13263021288623 us/op 159.83891036422608 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSimpleInsert 22.669446678721606 us/op 22.849816943381228 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeJoins 16.82965552126774 us/op 16.625018437547716 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeProjections 22.91956237381853 us/op 22.77214363663779 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeSelect 39.66055805179984 us/op 39.73355506990321 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameTimeZone 18.75979382271766 us/op 19.275147810595268 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameVeryLongQuery 195.59347693663284 us/op 187.12822376081982 us/op 1.05
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameVeryLongQuery01 765.5419254684019 us/op 766.6075567644576 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameCaseWhenThen 18.782662470335126 us/op 18.369557330252853 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameComplexQuery 178.6626260011265 us/op 186.21748901460518 us/op 0.96
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameComplexQuery01 84.18641134146009 us/op 87.03738322982244 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameExceptUnionIntersectSixty 161.00606305098412 us/op 163.084378103838 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameExec20Expressions 46.254393688664734 us/op 45.80286518338958 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameFromLet 28.148339605610516 us/op 28.081656185673268 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGraphPattern 29.67112464138014 us/op 29.433706699273035 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGraphPreFilters 54.516198632081725 us/op 55.021752432540055 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGroupLimit 24.36985810573339 us/op 25.563311078271834 us/op 0.95
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameLongFromSourceOrderBy 102.70611019246647 us/op 97.26364705594916 us/op 1.06
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameManyJoins 32.99813381774583 us/op 33.75773894948079 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameNestedAggregates 74.70956392963139 us/op 72.5532243280411 us/op 1.03
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameNestedParen 58.72898532345198 us/op 61.756398175854066 us/op 0.95
org.partiql.jmh.benchmarks.ParserBenchmark.parseNamePivot 48.289357055786596 us/op 48.313517136886844 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuery15OrsAndLikes 129.82351854333535 us/op 133.14108889841185 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuery30Plus 45.6753885278962 us/op 44.55890753712955 us/op 1.03
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryFunc 98.77345756974215 us/op 98.72085973673356 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryFuncInProjection 63.8462075376702 us/op 64.37115002200972 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryList 56.610452524859284 us/op 57.2418720258665 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryNestedSelect 103.3687599784931 us/op 104.22860409414639 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuerySimple 8.390484430417892 us/op 8.57226918847751 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralJoins 54.76184933207594 us/op 52.84237524828891 us/op 1.04
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralProjections 39.82208649254431 us/op 41.019115765058345 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralSelect 75.43984905873086 us/op 75.20719433775027 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSimpleInsert 14.927393095533233 us/op 15.093084053870811 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeJoins 14.74898512094261 us/op 15.032471137644489 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeProjections 12.952022613167362 us/op 13.137522122955023 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeSelect 24.765842540078 us/op 24.750493481390542 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameTimeZone 6.04534631977691 us/op 6.06051982439837 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameVeryLongQuery 306.85739800671575 us/op 304.95688483658563 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameVeryLongQuery01 836.8326335152939 us/op 878.3847572637669 us/op 0.95
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLCompiler 7.187835968028611 us/op 6.973613759363596 us/op 1.03
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLEvaluator 1.9167342064289632 us/op 1.7990958069066856 us/op 1.07
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLParser 7.772287750530597 us/op 7.8644501843481605 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testCompileQuery1 6.906517326630663 us/op 7.167915476150098 us/op 0.96
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testCompileQuery2 13.736076615124366 us/op 13.646690161143749 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testCompileQuery3 14.965377605553183 us/op 15.08816745121285 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testCompileQuery4 22.256471716857693 us/op 21.91502419420387 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testCompileQuery5 23.80947671002533 us/op 23.632974559023214 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery1 144760.13661607142 us/op 141081.70017678573 us/op 1.03
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery10 15.587242308078928 us/op 14.900997936940708 us/op 1.05
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery11 2.448796487782473 us/op 2.4861121935300226 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery2 238903.82578999997 us/op 240313.61575999996 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery3 252703.73736999993 us/op 242995.70639999997 us/op 1.04
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery4 314413.0609625 us/op 301240.46401249996 us/op 1.04
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery5 296709.19725 us/op 298853.8966999999 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery6 359808.3255166666 us/op 373227.1420166666 us/op 0.96
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery7 31312.0776273628 us/op 30942.87926931818 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery8 2791.8537213672175 us/op 2832.876492279187 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery9 260.2179694570365 us/op 262.47496968725517 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testCompileQuery1 6.855928796308168 us/op 7.042708042997004 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testCompileQuery2 13.235546102076166 us/op 13.526009652658587 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testCompileQuery3 15.151280631756114 us/op 14.891672826340066 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testCompileQuery4 21.378838437017844 us/op 21.501789216562607 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testCompileQuery5 21.774784631820896 us/op 21.90270806289134 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery1 130586.85370625004 us/op 132845.14008124996 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery10 9.598027343686967 us/op 9.374771444455604 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery11 1.353117025618244 us/op 1.3667883802905714 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery2 194481.28657833333 us/op 194394.9082 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery3 196013.4241166667 us/op 193517.01759999996 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery4 251427.31169000003 us/op 238043.09774250007 us/op 1.06
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery5 223936.44979000007 us/op 233307.74113999997 us/op 0.96
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery6 293487.1439375 us/op 293882.85344999994 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery7 23229.281435219567 us/op 24168.44387026547 us/op 0.96
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery8 2123.7209849193414 us/op 2165.4378192236863 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery9 198.33896088425405 us/op 198.49981207139837 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameCaseWhenThen 32.19309492408273 us/op 31.913180957623307 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameComplexQuery 39.91169929062992 us/op 40.12210316741853 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameComplexQuery01 238.35377456629232 us/op 237.2433121702649 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameComplexQuery02 412.69559567987 us/op 407.30141096902514 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameExceptUnionIntersectSixty 158.68901728681746 us/op 156.4600221028793 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameExec20Expressions 44.20165319098345 us/op 45.096466431492814 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameFromLet 32.44138622552545 us/op 31.928738328942096 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameGraphPattern 31.09432199873939 us/op 31.1145829357475 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameGraphPreFilters 54.85494079279156 us/op 54.93795064659504 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameGroupLimit 39.09527794484271 us/op 39.04424348910386 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameLongFromSourceOrderBy 47.61397201677791 us/op 46.78043338828594 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameManyJoins 46.82778464501402 us/op 48.006079751595834 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameNestedAggregates 83.54581502872385 us/op 84.03856837080835 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameNestedParen 12.900775332465775 us/op 13.157651800447336 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNamePivot 49.958577256479245 us/op 48.58355726982482 us/op 1.03
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQuery15OrsAndLikes 153.08036758389534 us/op 154.940982143617 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQuery30Plus 85.49386868929555 us/op 84.65759573263765 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryFunc 39.01904494768845 us/op 38.05478909223208 us/op 1.03
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryFuncInProjection 42.0092305993585 us/op 42.563954041450565 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryList 57.07879982579762 us/op 56.63440324854573 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryNestedSelect 587.6841256378005 us/op 566.8969497162752 us/op 1.04
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQuerySimple 11.599675978400475 us/op 11.609888825691327 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSeveralJoins 15.937847856050624 us/op 16.12915979354485 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSeveralProjections 51.99544523924072 us/op 53.308341258029614 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSeveralSelect 158.9506738486338 us/op 155.23067524687366 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSimpleInsert 22.269602969054315 us/op 22.061596999352993 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSomeJoins 16.034648772583143 us/op 15.733525276838098 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSomeProjections 21.43768316543221 us/op 21.957616134992204 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSomeSelect 39.81908442751086 us/op 39.090284941214726 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameTimeZone 18.314011113429743 us/op 18.368445136927654 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameVeryLongQuery 190.92933336022048 us/op 192.96556206637908 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameVeryLongQuery01 741.5894365970396 us/op 752.6016930028878 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameCaseWhenThen 23.834710684416176 us/op 23.661440305005584 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameComplexQuery 245.81412870757248 us/op 245.39164532730607 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameComplexQuery01 123.86013022403242 us/op 125.70643941283095 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameExceptUnionIntersectSixty 262.63947268108495 us/op 258.73981488839195 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameExec20Expressions 62.85224751763722 us/op 61.78094706995823 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameFromLet 40.96017219752925 us/op 38.57555854095712 us/op 1.06
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameGraphPattern 44.81710645031795 us/op 46.456112215417946 us/op 0.96
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameGraphPreFilters 83.40104140295686 us/op 82.00545654598271 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameGroupLimit 28.927297964144792 us/op 28.854909280810904 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameLongFromSourceOrderBy 118.51913453226173 us/op 121.38086696367188 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameManyJoins 42.94058401885492 us/op 43.72021121372994 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameNestedAggregates 100.51556933631375 us/op 102.3527439991868 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameNestedParen 68.0260340185695 us/op 64.36024694770722 us/op 1.06
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNamePivot 65.12256346382128 us/op 62.292163217984736 us/op 1.05
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQuery15OrsAndLikes 193.95957565883808 us/op 200.4276578647986 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQuery30Plus 59.39909613258798 us/op 60.36190099031309 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryFunc 113.17447477845701 us/op 112.58216684074287 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryFuncInProjection 77.97067408741191 us/op 79.0956547302188 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryList 68.82368645022045 us/op 68.51287851565361 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryNestedSelect 140.5197592880035 us/op 135.23673706037806 us/op 1.04
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQuerySimple 12.123826588799345 us/op 12.021301487031732 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSeveralJoins 77.18903059531125 us/op 79.62021978251613 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSeveralProjections 61.21700722879366 us/op 63.06622000879996 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSeveralSelect 115.71999295307353 us/op 114.98187738980216 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSimpleInsert 21.968472510124307 us/op 21.547329590803354 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSomeJoins 20.342795816349472 us/op 20.619349309856588 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSomeProjections 18.65969031405381 us/op 19.01613667812754 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSomeSelect 35.02476588880159 us/op 34.56392128772123 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameTimeZone 7.80124925398322 us/op 7.4222172730940175 us/op 1.05
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameVeryLongQuery 461.08352612884363 us/op 465.92865163390235 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameVeryLongQuery01 1155.9714473438912 us/op 1197.4922705457734 us/op 0.97

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

Please sign in to comment.