Skip to content

Commit

Permalink
Always null should not return error in Inferencer. (#1248)
Browse files Browse the repository at this point in the history
* always null should not cause compile time error
  • Loading branch information
yliuuuu authored Oct 25, 2023
1 parent 90c0d18 commit 777eb42
Show file tree
Hide file tree
Showing 32 changed files with 11,167 additions and 7,679 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ Thank you to all who have contributed!
- Adds public `tag` field to IR nodes for associating metadata

### Changed
- StaticTypeInferencer and PlanTyper will not raise an error when an expression is inferred to `NULL` or `unionOf(NULL, MISSING)`. In these cases the StaticTypeInferencer and PlanTyper will still raise the Problem Code `ExpressionAlwaysReturnsNullOrMissing` but the severity of the problem has been changed to warning. In the case an expression always returns `MISSING`, problem code `ExpressionAlwaysReturnsMissing` will be raised, which will have problem severity of error.

### Deprecated

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,18 @@ sealed class SemanticProblemDetails(override val severity: ProblemSeverity, val
messageFormatter = { "In this context, $expectedType is expected but expression returns $actualType" }
)

object ExpressionAlwaysReturnsNullOrMissing :
object ExpressionAlwaysReturnsMissing :
SemanticProblemDetails(
severity = ProblemSeverity.ERROR,
messageFormatter = { "Expression always returns missing." }
)

/**
* Should be used when the inferred type is always null or unionOf(null, missing)
*/
object ExpressionAlwaysReturnsNullOrMissing :
SemanticProblemDetails(
severity = ProblemSeverity.WARNING,
messageFormatter = { "Expression always returns null or missing." }
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,37 @@ internal class StaticTypeInferenceVisitorTransform(
)
}

private fun handleExpressionAlwaysReturnsNullOrMissingError(sourceLocationMeta: SourceLocationMeta) {
/**
* If an expression always returns missing, raise a [SemanticProblemDetails.ExpressionAlwaysReturnsMissing] and return true.
*
* If an expression always returns null or union(null, missing), raise a [SemanticProblemDetails.ExpressionAlwaysReturnsNullOrMissing] and return false.
*
* else returns false.
*/
private fun expressionAlwaysReturnsUnknown(types: List<StaticType>, sourceLocationMeta: SourceLocationMeta): Boolean {
if (types.any { type -> type is MissingType }) {
handleExpressionAlwaysReturnsMissingError(sourceLocationMeta)
return true
}

if (types.any { type -> type is NullType || type == StaticType.NULL_OR_MISSING }) {
handleExpressionAlwaysReturnsMissingOrNullWarning(sourceLocationMeta)
}
return false
}

private fun handleExpressionAlwaysReturnsUnknown(type: StaticType, sourceLocationMeta: SourceLocationMeta) {
if (type is MissingType) {
handleExpressionAlwaysReturnsMissingError(sourceLocationMeta)
return
}

if (type is NullType || type == StaticType.NULL_OR_MISSING) {
handleExpressionAlwaysReturnsMissingOrNullWarning(sourceLocationMeta)
}
}

private fun handleExpressionAlwaysReturnsMissingOrNullWarning(sourceLocationMeta: SourceLocationMeta) {
problemHandler.handleProblem(
Problem(
sourceLocation = sourceLocationMeta.toProblemLocation(),
Expand All @@ -204,6 +234,15 @@ internal class StaticTypeInferenceVisitorTransform(
)
}

private fun handleExpressionAlwaysReturnsMissingError(sourceLocationMeta: SourceLocationMeta) {
problemHandler.handleProblem(
Problem(
sourceLocation = sourceLocationMeta.toProblemLocation(),
details = SemanticProblemDetails.ExpressionAlwaysReturnsMissing
)
)
}

private fun handleNullOrMissingFunctionArgument(functionName: String, sourceLocationMeta: SourceLocationMeta) {
problemHandler.handleProblem(
Problem(
Expand Down Expand Up @@ -279,8 +318,15 @@ internal class StaticTypeInferenceVisitorTransform(

/**
* Gives [SemanticProblemDetails.IncompatibleDatatypesForOp] error when none of the non-unknown [operandsStaticType]'
* types satisfy [operandTypeValidator]. Also gives [SemanticProblemDetails.ExpressionAlwaysReturnsNullOrMissing]
* error when one of the operands is an unknown. Returns true if none of these errors are added.
* types satisfy [operandTypeValidator].
*
* If an operand is always missing, the
* [SemanticProblemDetails.ExpressionAlwaysReturnsMissing] error is handled by [ProblemHandler].
*
* If an operand is always NULL, or unionOf(NULL, MISSING), the
* [SemanticProblemDetails.ExpressionAlwaysReturnsNullOrMissing] **warning** is handled by [ProblemHandler]
*
* Returns true if no **error** is added.
*/
private fun hasValidOperandTypes(
operandsStaticType: List<StaticType>,
Expand All @@ -297,8 +343,7 @@ internal class StaticTypeInferenceVisitorTransform(
}

// check for an unknown operand type
if (operandsStaticType.any { operandStaticType -> operandStaticType.isUnknown() }) {
handleExpressionAlwaysReturnsNullOrMissingError(metas.getSourceLocation())
if (expressionAlwaysReturnsUnknown(operandsStaticType, metas.getSourceLocation())) {
hasValidOperands = false
}

Expand All @@ -310,8 +355,10 @@ internal class StaticTypeInferenceVisitorTransform(
* returns false.
*
* If an operand is not comparable to another, the [SemanticProblemDetails.IncompatibleDatatypesForOp] error is
* handled by [problemHandler]. If an operand is unknown, the
* [SemanticProblemDetails.ExpressionAlwaysReturnsNullOrMissing] error is handled by [problemHandler].
* handled by [ProblemHandler].
*
* If an operand is always missing, the
* [SemanticProblemDetails.ExpressionAlwaysReturnsMissing] error is handled by [ProblemHandler].
*
* TODO: consider if collection comparison semantics should be different (e.g. errors over warnings,
* more details in error message): https://github.com/partiql/partiql-lang-kotlin/issues/505
Expand All @@ -331,8 +378,7 @@ internal class StaticTypeInferenceVisitorTransform(
}

// check for an unknown operand type
if (argsStaticType.any { operand -> operand.isUnknown() }) {
handleExpressionAlwaysReturnsNullOrMissingError(metas.getSourceLocation())
if (expressionAlwaysReturnsUnknown(argsStaticType, metas.getSourceLocation())) {
hasValidOperands = false
}
return hasValidOperands
Expand Down Expand Up @@ -693,9 +739,8 @@ internal class StaticTypeInferenceVisitorTransform(
val rhs = operands[1]
var errorAdded = false

// check if any operands are unknown, then null or missing error
if (operands.any { operand -> operand.isUnknown() }) {
handleExpressionAlwaysReturnsNullOrMissingError(processedNode.metas.getSourceLocation())
// check for an unknown operand type
if (expressionAlwaysReturnsUnknown(operands, processedNode.metas.getSourceLocation())) {
errorAdded = true
}

Expand Down Expand Up @@ -777,6 +822,10 @@ internal class StaticTypeInferenceVisitorTransform(
argsAllTypes.cartesianProduct().forEach { argsChildType ->
val argsSingleType = argsChildType.map { it as SingleType }
when {
// If any one of the operands is missing, return missing
// notice since we short circuit above to handle atomic missing type
// missing type here indicates one of the args is union type and in the union type we have missing
argsSingleType.any() { it is MissingType } -> possibleReturnTypes.add(StaticType.MISSING)
// If any one of the operands is null, return NULL
argsSingleType.any { it is NullType } -> possibleReturnTypes.add(StaticType.NULL)
// Arguments for LIKE need to be text type
Expand Down Expand Up @@ -1075,17 +1124,17 @@ internal class StaticTypeInferenceVisitorTransform(
val caseValue = simpleCase.expr
val caseValueType = caseValue.getStaticType()

// comparison never succeeds if caseValue is an unknown
// handle unknown case value.
if (caseValueType.isUnknown()) {
handleExpressionAlwaysReturnsNullOrMissingError(caseValue.getStartingSourceLocationMeta())
handleExpressionAlwaysReturnsUnknown(caseValueType, caseValue.getStartingSourceLocationMeta())
}

val whenExprs = simpleCase.cases.pairs.map { expr -> expr.first }
whenExprs.forEach { whenExpr ->
val whenExprType = whenExpr.getStaticType()
// comparison never succeeds if whenExpr is unknown -> null or missing error
// handle unknown whenExpr.
if (whenExprType.isUnknown()) {
handleExpressionAlwaysReturnsNullOrMissingError(whenExpr.getStartingSourceLocationMeta())
handleExpressionAlwaysReturnsUnknown(whenExprType, whenExpr.getStartingSourceLocationMeta())
}

// if caseValueType is incomparable to whenExprType -> data type mismatch
Expand All @@ -1100,7 +1149,10 @@ internal class StaticTypeInferenceVisitorTransform(

val thenExprs = simpleCase.cases.pairs.map { expr -> expr.second }

// keep all the `THEN` expr types even if the comparison doesn't succeed
// Inferencer simply keeps all the then/else branch return type
// even though we might have enough information to determine that the branch will never succeed.
// may worth to change the inferencer algorithm to further refine the return type,
// and/or given warning on branches that leads to comparison always fail.
val simpleCaseType = inferCaseWhenBranches(thenExprs, simpleCase.default)
return simpleCase.withStaticType(simpleCaseType)
}
Expand All @@ -1112,9 +1164,9 @@ internal class StaticTypeInferenceVisitorTransform(
whenExprs.forEach { whenExpr ->
val whenExprType = whenExpr.getStaticType()

// if whenExpr is unknown -> null or missing error
// check for an unknown whenExpr type
if (whenExprType.isUnknown()) {
handleExpressionAlwaysReturnsNullOrMissingError(whenExpr.getStartingSourceLocationMeta())
handleExpressionAlwaysReturnsUnknown(whenExprType, whenExpr.getStartingSourceLocationMeta())
}

// if whenExpr can never be bool -> data type mismatch
Expand Down Expand Up @@ -1308,15 +1360,21 @@ internal class StaticTypeInferenceVisitorTransform(
}

/**
* Verifies the given [expr]'s [StaticType] has type [expectedType]. If [expr] is unknown, a null or missing
* error is given. If [expr]'s [StaticType] could never be [expectedType], an incompatible data types for
* Verifies the given [expr]'s [StaticType] has type [expectedType].
* If [expr] is always missing, the
* [SemanticProblemDetails.ExpressionAlwaysReturnsMissing] error is handled by [ProblemHandler].
*
* If [expr] is always NULL, or unionOf(NULL, MISSING), the
* [SemanticProblemDetails.ExpressionAlwaysReturnsNullOrMissing] **warning** is handled by [ProblemHandler]
*
* If [expr]'s [StaticType] could never be [expectedType], an incompatible data types for
* expression error is given.
*/
private fun verifyExpressionType(expr: PartiqlAst.Expr, expectedType: StaticType) {
val exprType = expr.getStaticType()

if (exprType.isUnknown()) {
handleExpressionAlwaysReturnsNullOrMissingError(expr.getStartingSourceLocationMeta())
handleExpressionAlwaysReturnsUnknown(exprType, expr.getStartingSourceLocationMeta())
} else if (exprType.allTypes.none { it == expectedType }) {
handleIncompatibleDataTypeForExprError(
expectedType = expectedType,
Expand All @@ -1333,15 +1391,22 @@ internal class StaticTypeInferenceVisitorTransform(
* though the `null` predicate is equivalent to `true`. However, that also causes it to be skipped and not
* assigned a `StaticType`, which is required by [EvaluatorStaticTypeTests].
*
* If predicate is non-null, checks that its type could be [StaticType.BOOL]. If the type is an unknown, gives
* a null or missing error. If the type is not unknown and could never be [StaticType.BOOL], gives a data type
* If predicate is non-null, checks that its type could be [StaticType.BOOL].
*
* If predicate is always missing, the
* [SemanticProblemDetails.ExpressionAlwaysReturnsMissing] error is handled by [ProblemHandler].
*
* If predicate is always NULL, or unionOf(NULL, MISSING), the
* [SemanticProblemDetails.ExpressionAlwaysReturnsNullOrMissing] **warning** is handled by [ProblemHandler].
*
* If the type is not unknown and could never be [StaticType.BOOL], gives a data type
* mismatch error (incompatible types for expression).
*/
override fun transformFromSourceJoin_predicate(node: PartiqlAst.FromSource.Join): PartiqlAst.Expr? {
return when (val predicate = super.transformFromSourceJoin_predicate(node)) {
null -> PartiqlAst.build { lit(ionBool(true)).withStaticType(StaticType.BOOL) }
else -> {
// verify `JOIN` predicate is bool. If it's unknown, gives a null or missing error. If it could
// verify `JOIN` predicate is bool. If it's unknown, gives appropriate error or warning. If it could
// never be a bool, gives an incompatible data type for expression error
verifyExpressionType(expr = predicate, expectedType = StaticType.BOOL)

Expand Down Expand Up @@ -1569,7 +1634,7 @@ internal class StaticTypeInferenceVisitorTransform(
return when (val whereExpr = node.where?.let { transformExpr(it) }) {
null -> whereExpr
else -> {
// verify `WHERE` clause is bool. If it's unknown, gives a null or missing error. If it could never
// verify `WHERE` clause is bool. If it's unknown, gives appropriate warning or error. If it could never
// be a bool, gives an incompatible data type for expression error
verifyExpressionType(expr = whereExpr, expectedType = StaticType.BOOL)

Expand Down
Loading

1 comment on commit 777eb42

@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: 777eb42 Previous: 90c0d18 Ratio
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncGroupingWithInterruptible 442.5500411285434 us/op 375.01846743669046 us/op 1.18
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncGroupingWithoutInterruptible 462.1450102339174 us/op 396.4757024668441 us/op 1.17
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncWithInterruptible 397.6660713916538 us/op 325.3195916560968 us/op 1.22
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncWithoutInterruptible 365.1308613054419 us/op 351.66300195427016 us/op 1.04
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinWithInterruptible 291.5835838193246 us/op 239.54408152221862 us/op 1.22
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinWithoutInterruptible 291.81796585135834 us/op 255.75634902014593 us/op 1.14
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinAggWithInterruptible 8582672.6598 us/op 7187412.4799500005 us/op 1.19
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinAggWithoutInterruptible 8234966.094349998 us/op 7338355.33275 us/op 1.12
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinWithInterruptible 75.13595890154696 us/op 62.477009661256446 us/op 1.20
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinWithoutInterruptible 75.68792724643819 us/op 61.55828811349941 us/op 1.23
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinAggWithInterruptible 8680972.513949998 us/op 7305497.714299999 us/op 1.19
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinAggWithoutInterruptible 8732047.778499998 us/op 7169766.24 us/op 1.22
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinWithInterruptible 148770.93172767857 us/op 128545.79306458333 us/op 1.16
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinWithoutInterruptible 141577.44831964286 us/op 129983.92145 us/op 1.09
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLCompiler15 168.79746829818055 us/op 131.08789052438004 us/op 1.29
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLCompiler30 257.72213114860915 us/op 237.57963692277562 us/op 1.08
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator15 652997.912925 us/op 509057.16718333337 us/op 1.28
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator30 1285623.6309500001 us/op 989237.44155 us/op 1.30
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator30WithData10 10513718.841300003 us/op 9960786.1612 us/op 1.06
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLParser15 199.4338693212063 us/op 198.45134540289115 us/op 1.00
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLParser30 401.6807601725836 us/op 389.518073098217 us/op 1.03
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameCaseWhenThen 49.03693135211927 us/op 42.13457941709268 us/op 1.16
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery 70.31713566124552 us/op 56.728752028368284 us/op 1.24
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery01 355.20978861844503 us/op 284.5934864583109 us/op 1.25
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery02 617.9235426019529 us/op 481.250373710487 us/op 1.28
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameExceptUnionIntersectSixty 251.8145448046267 us/op 220.68803312600826 us/op 1.14
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameExec20Expressions 85.04108114412057 us/op 66.76449777568726 us/op 1.27
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameFromLet 56.30076819784499 us/op 45.521023390689535 us/op 1.24
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGraphPattern 58.115102612515386 us/op 43.89144704577999 us/op 1.32
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGraphPreFilters 86.91341532820304 us/op 69.66879449924295 us/op 1.25
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGroupLimit 58.45223909594074 us/op 48.36100715448361 us/op 1.21
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameLongFromSourceOrderBy 89.26533682251238 us/op 67.01120739320166 us/op 1.33
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameManyJoins 80.4362123281359 us/op 64.76524688741088 us/op 1.24
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameNestedAggregates 134.68823595319466 us/op 109.60556319201393 us/op 1.23
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameNestedParen 25.544600344408728 us/op 19.46368240486221 us/op 1.31
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNamePivot 85.24141645987203 us/op 68.93584196577116 us/op 1.24
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuery15OrsAndLikes 261.29602682941476 us/op 215.7664195840106 us/op 1.21
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuery30Plus 138.69950026818643 us/op 118.6140787602421 us/op 1.17
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryFunc 67.23674052239821 us/op 52.00724329558253 us/op 1.29
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryFuncInProjection 71.4635056321756 us/op 56.818791347824074 us/op 1.26
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryList 98.22399918229853 us/op 81.0890926480016 us/op 1.21
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryNestedSelect 916.607245548665 us/op 711.7887802377256 us/op 1.29
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuerySimple 23.137960377073533 us/op 17.559545966552406 us/op 1.32
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralJoins 30.959923581236865 us/op 24.16575180697813 us/op 1.28
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralProjections 98.43222196825496 us/op 79.15996697529523 us/op 1.24
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralSelect 259.5747226580924 us/op 211.69708238335997 us/op 1.23
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSimpleInsert 39.03742945538047 us/op 31.872370554466062 us/op 1.22
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeJoins 30.345139755038918 us/op 23.492792222332845 us/op 1.29
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeProjections 40.868075657597544 us/op 32.44747233649632 us/op 1.26
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeSelect 64.74326710177615 us/op 54.99577093612131 us/op 1.18
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameTimeZone 32.30829024504745 us/op 26.112556779266487 us/op 1.24
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameVeryLongQuery 324.20210462199077 us/op 268.65784219518133 us/op 1.21
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameVeryLongQuery01 1295.6493949524647 us/op 1025.4829318644079 us/op 1.26
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameCaseWhenThen 34.6556648422743 us/op 29.929123193794236 us/op 1.16
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameComplexQuery 291.90574097104377 us/op 244.71726897931248 us/op 1.19
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameComplexQuery01 128.41224488113303 us/op 123.7449746158776 us/op 1.04
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameExceptUnionIntersectSixty 273.0470260056647 us/op 249.76098678607133 us/op 1.09
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameExec20Expressions 78.48092570349786 us/op 73.4093842994471 us/op 1.07
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameFromLet 44.476284334892924 us/op 42.60276954085525 us/op 1.04
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGraphPattern 51.53843783169303 us/op 46.3250253673604 us/op 1.11
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGraphPreFilters 85.27363463670733 us/op 79.53981418119125 us/op 1.07
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGroupLimit 42.75913313567553 us/op 37.59173935799524 us/op 1.14
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameLongFromSourceOrderBy 161.65223140553985 us/op 147.33884359673667 us/op 1.10
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameManyJoins 55.13189523848384 us/op 49.39103795626444 us/op 1.12
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameNestedAggregates 115.0457597342316 us/op 102.25145561474075 us/op 1.13
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameNestedParen 94.92382941078105 us/op 87.57951964734941 us/op 1.08
org.partiql.jmh.benchmarks.ParserBenchmark.parseNamePivot 79.32426888009005 us/op 71.22209968350417 us/op 1.11
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuery15OrsAndLikes 219.0363896449419 us/op 199.50253819012727 us/op 1.10
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuery30Plus 76.62693707339687 us/op 63.968248012220315 us/op 1.20
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryFunc 168.55626218183647 us/op 138.71317432166944 us/op 1.22
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryFuncInProjection 117.42447577615255 us/op 99.72876362487398 us/op 1.18
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryList 101.54981003262175 us/op 87.13630429378033 us/op 1.17
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryNestedSelect 160.0181472408794 us/op 142.4012964111641 us/op 1.12
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuerySimple 16.842631663439665 us/op 14.17476855664718 us/op 1.19
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralJoins 97.68853608008928 us/op 83.49467187286307 us/op 1.17
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralProjections 71.73594519514545 us/op 62.58079831548561 us/op 1.15
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralSelect 136.68313097163917 us/op 122.45037033793749 us/op 1.12
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSimpleInsert 28.76388585273358 us/op 24.08533907783617 us/op 1.19
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeJoins 28.038056105078738 us/op 23.329330637808777 us/op 1.20
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeProjections 24.04887879262461 us/op 21.260246616800288 us/op 1.13
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeSelect 42.55344578840287 us/op 39.2207701060183 us/op 1.08
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameTimeZone 12.035810995559345 us/op 9.741212109394233 us/op 1.24
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameVeryLongQuery 545.6685611111257 us/op 464.13234236476774 us/op 1.18
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameVeryLongQuery01 1470.4821755868534 us/op 1235.4522357392702 us/op 1.19
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLCompiler 13.330380556197536 us/op 11.332678825813186 us/op 1.18
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLEvaluator 3.149156261508189 us/op 2.639214557017124 us/op 1.19
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLParser 15.97662239143724 us/op 12.855282490519333 us/op 1.24
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameCaseWhenThen 52.095217766570876 us/op 42.06850729844417 us/op 1.24
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameComplexQuery 71.52763974526499 us/op 56.34137007165909 us/op 1.27
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameComplexQuery01 390.47022542306894 us/op 290.8935711712557 us/op 1.34
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameComplexQuery02 651.0327309686714 us/op 486.14800512196496 us/op 1.34
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameExceptUnionIntersectSixty 257.73136356843946 us/op 225.725494992721 us/op 1.14
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameExec20Expressions 83.35822653607461 us/op 66.72616730058975 us/op 1.25
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameFromLet 57.63003794549947 us/op 44.69236956809189 us/op 1.29
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameGraphPattern 53.64463445532327 us/op 44.66752216158189 us/op 1.20
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameGraphPreFilters 87.26962677930344 us/op 70.58225901069127 us/op 1.24
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameGroupLimit 58.51971206718137 us/op 47.68638717339472 us/op 1.23
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameLongFromSourceOrderBy 85.37221716787637 us/op 69.44567970155455 us/op 1.23
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameManyJoins 80.27341321050099 us/op 64.20516938373603 us/op 1.25
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameNestedAggregates 132.13943507432396 us/op 108.61009099623853 us/op 1.22
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameNestedParen 24.72830245020148 us/op 18.666567667293627 us/op 1.32
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNamePivot 87.07258926505413 us/op 69.68423324783343 us/op 1.25
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQuery15OrsAndLikes 258.0254778429586 us/op 218.77396763683026 us/op 1.18
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQuery30Plus 146.2242200129695 us/op 114.34825672437917 us/op 1.28
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryFunc 63.51092287453565 us/op 53.08321107914097 us/op 1.20
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryFuncInProjection 70.67828169390998 us/op 58.158951771150406 us/op 1.22
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryList 97.4206192034217 us/op 77.45634554069048 us/op 1.26
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryNestedSelect 915.8131031134502 us/op 683.7081294940442 us/op 1.34
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQuerySimple 22.208325337919852 us/op 17.29709664347051 us/op 1.28
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSeveralJoins 29.42144986128248 us/op 23.53140554486074 us/op 1.25
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSeveralProjections 89.84668511584346 us/op 73.82123948797042 us/op 1.22
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSeveralSelect 261.1336030096094 us/op 214.86366330591673 us/op 1.22
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSimpleInsert 38.65721698377648 us/op 30.389747619174322 us/op 1.27
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSomeJoins 29.075224281111012 us/op 23.225788193930118 us/op 1.25
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSomeProjections 38.27626706248035 us/op 30.869231330958126 us/op 1.24
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSomeSelect 66.12683830521662 us/op 55.28986434367577 us/op 1.20
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameTimeZone 33.422568787062936 us/op 25.52292914251301 us/op 1.31
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameVeryLongQuery 339.068701539716 us/op 271.7406337623059 us/op 1.25
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameVeryLongQuery01 1271.4899526727881 us/op 1034.8191088430701 us/op 1.23
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameCaseWhenThen 38.66121374412351 us/op 34.09047942777177 us/op 1.13
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameComplexQuery01 171.3928389015628 us/op 164.85468095199718 us/op 1.04
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameExceptUnionIntersectSixty 391.2994329162106 us/op 363.6744098535528 us/op 1.08
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameExec20Expressions 101.83626704662215 us/op 90.0951208785469 us/op 1.13
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameFromLet 61.234546548381466 us/op 60.56813340048352 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameGraphPattern 68.5635274866109 us/op 63.11610151648887 us/op 1.09
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameGraphPreFilters 116.98255320418886 us/op 102.56866079321291 us/op 1.14
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameGroupLimit 47.696042543580795 us/op 40.325640949643756 us/op 1.18
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameLongFromSourceOrderBy 178.53760530985124 us/op 177.22388360397844 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameManyJoins 65.10381496524644 us/op 59.15410521408937 us/op 1.10
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameNestedAggregates 147.73905100069118 us/op 134.89724128491702 us/op 1.10
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameNestedParen 103.53424656923637 us/op 95.29012698006471 us/op 1.09
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNamePivot 96.92513844955813 us/op 91.42722314607225 us/op 1.06
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQuery15OrsAndLikes 278.3410638691329 us/op 264.33744028737635 us/op 1.05
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQuery30Plus 98.9706930943281 us/op 86.37149198182763 us/op 1.15
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryFunc 182.3256263992848 us/op 152.74848796585616 us/op 1.19
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryFuncInProjection 131.98645471071447 us/op 116.54629923552682 us/op 1.13
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryList 120.22761806050679 us/op 106.13961561116142 us/op 1.13
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryNestedSelect 207.84305775342858 us/op 179.53180775521284 us/op 1.16
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQuerySimple 20.901282709146518 us/op 17.6285079409053 us/op 1.19
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSeveralJoins 118.56741336049588 us/op 106.6917667112265 us/op 1.11
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSeveralProjections 100.70564645291643 us/op 89.07196319601886 us/op 1.13
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSeveralSelect 176.12960188921477 us/op 158.09730833081727 us/op 1.11
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSimpleInsert 36.826383515683894 us/op 32.5505645019794 us/op 1.13
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSomeJoins 32.82081396775527 us/op 30.426362355135854 us/op 1.08
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSomeProjections 30.168752107201062 us/op 27.013234290816616 us/op 1.12
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSomeSelect 56.87475352766144 us/op 52.12357254698776 us/op 1.09
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameTimeZone 13.24736957688575 us/op 11.930330413877368 us/op 1.11
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameVeryLongQuery 722.6214037805638 us/op 661.2960019706497 us/op 1.09
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameVeryLongQuery01 1856.7830667298626 us/op 1610.462946669754 us/op 1.15

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

Please sign in to comment.