Skip to content

Commit

Permalink
Adds support for parameterized decimal cast (#1483)
Browse files Browse the repository at this point in the history
  • Loading branch information
RCHowell authored Jun 6, 2024
1 parent ac23bbc commit a02ecde
Show file tree
Hide file tree
Showing 6 changed files with 198 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,14 @@ import org.partiql.value.PartiQLValueType.BOOL
import org.partiql.value.PartiQLValueType.CHAR
import org.partiql.value.PartiQLValueType.DATE
import org.partiql.value.PartiQLValueType.DECIMAL
import org.partiql.value.PartiQLValueType.DECIMAL_ARBITRARY
import org.partiql.value.PartiQLValueType.FLOAT32
import org.partiql.value.PartiQLValueType.FLOAT64
import org.partiql.value.PartiQLValueType.INT
import org.partiql.value.PartiQLValueType.INT16
import org.partiql.value.PartiQLValueType.INT32
import org.partiql.value.PartiQLValueType.INT64
import org.partiql.value.PartiQLValueType.INT8
import org.partiql.value.PartiQLValueType.MISSING
import org.partiql.value.PartiQLValueType.NULL
import org.partiql.value.PartiQLValueType.STRING
Expand Down Expand Up @@ -63,6 +68,7 @@ internal object PartiQLHeader : Header() {
mod(),
concat(),
bitwiseAnd(),
castAsParameterizedDecimal(), // explicit casts (aka NOT coercions from TypeLattice).
).flatten()

/**
Expand Down Expand Up @@ -460,6 +466,32 @@ internal object PartiQLHeader : Header() {
)
}

private fun castAsParameterizedDecimal(): List<FunctionSignature.Scalar> = listOf(
BOOL,
INT8,
INT16,
INT32,
INT64,
INT,
DECIMAL,
DECIMAL_ARBITRARY,
FLOAT32,
FLOAT64,
STRING,
).map { value ->
FunctionSignature.Scalar(
name = "cast_decimal",
returns = DECIMAL,
parameters = listOf(
FunctionParameter("value", value),
FunctionParameter("precision", INT32),
FunctionParameter("scale", INT32),
),
isNullable = false,
isNullCall = true,
)
}

// SUBSTRING (expression, start[, length]?)
// SUBSTRINGG(expression from start [FOR length]? )
private fun substring(): List<FunctionSignature.Scalar> = types.text.map { t ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,11 @@ internal object RexConverter {
* @param ctx
* @return
*/
private fun visitExprCoerce(node: Expr, ctx: Env, coercion: Rex.Op.Subquery.Coercion = Rex.Op.Subquery.Coercion.SCALAR): Rex {
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, coercion))
Expand Down Expand Up @@ -188,7 +192,10 @@ internal object RexConverter {
when (identifierSteps.size) {
0 -> root to node.steps
else -> {
val newRoot = rex(StaticType.ANY, rexOpVarUnresolved(mergeIdentifiers(op.identifier, identifierSteps), op.scope))
val newRoot = rex(
StaticType.ANY,
rexOpVarUnresolved(mergeIdentifiers(op.identifier, identifierSteps), op.scope)
)
val newSteps = node.steps.subList(identifierSteps.size, node.steps.size)
newRoot to newSteps
}
Expand Down Expand Up @@ -219,7 +226,10 @@ internal object RexConverter {
is Expr.Path.Step.Symbol -> {
val identifier = AstToPlan.convert(step.symbol)
when (identifier.caseSensitivity) {
Identifier.CaseSensitivity.SENSITIVE -> rexOpPathKey(current, rexString(identifier.symbol))
Identifier.CaseSensitivity.SENSITIVE -> rexOpPathKey(
current,
rexString(identifier.symbol)
)
Identifier.CaseSensitivity.INSENSITIVE -> rexOpPathSymbol(current, identifier.symbol)
}
}
Expand Down Expand Up @@ -516,7 +526,7 @@ internal object RexConverter {
TODO("SQL Special Form EXTRACT")
}

// TODO: Ignoring type parameter now
// TODO: Ignoring type parameters (EXCEPT DECIMAL) now
override fun visitExprCast(node: Expr.Cast, ctx: Env): Rex {
val type = node.asType
val arg0 = visitExprCoerce(node.value, ctx)
Expand All @@ -532,7 +542,17 @@ internal object RexConverter {
is Type.Real -> TODO("Static Type does not have REAL type")
is Type.Float32 -> TODO("Static Type does not have FLOAT32 type")
is Type.Float64 -> rex(StaticType.FLOAT, call("cast_float64", arg0))
is Type.Decimal -> rex(StaticType.DECIMAL, call("cast_decimal", arg0))
is Type.Decimal -> {
if (type.precision != null) {
// CONSTRAINED — cast_decimal(arg, precision, scale)
val p = rex(StaticType.INT4, rexOpLit(int32Value(type.precision)))
val s = rex(StaticType.INT4, rexOpLit(int32Value(type.scale ?: 0)))
rex(StaticType.DECIMAL, call("cast_decimal", arg0, p, s))
} else {
// UNCONSTRAINED — cast_decimal(arg)
rex(StaticType.DECIMAL, call("cast_decimal", arg0))
}
}
is Type.Numeric -> rex(StaticType.DECIMAL, call("cast_numeric", arg0))
is Type.Char -> rex(StaticType.CHAR, call("cast_char", arg0))
is Type.Varchar -> rex(StaticType.STRING, call("cast_varchar", arg0))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ internal sealed class FnMatch<T : FunctionSignature> {
* @property candidates an ordered list of potentially applicable functions to dispatch dynamically.
*/
public data class Dynamic<T : FunctionSignature>(
public val candidates: List<Ok<T>>
public val candidates: List<Ok<T>>,
) : FnMatch<T>()

public data class Error<T : FunctionSignature>(
Expand Down Expand Up @@ -354,7 +354,36 @@ internal class FnResolver(private val header: Header) {
*
* But what about parameterized types? Are the parameters dropped in casts, or do parameters become arguments?
*/
private fun castName(type: PartiQLValueType) = "cast_${type.name.lowercase()}"
private fun castName(type: PartiQLValueType): String = when (type) {
ANY -> "cast_any" // TODO remove, only added for backwards compatibility in next release.
BOOL -> "cast_bool"
INT8 -> "cast_int8"
INT16 -> "cast_int16"
INT32 -> "cast_int32"
INT64 -> "cast_int64"
INT -> "cast_int"
DECIMAL -> "cast_decimal"
DECIMAL_ARBITRARY -> "cast_decimal"
FLOAT32 -> "cast_float32"
FLOAT64 -> "cast_float64"
CHAR -> "cast_char"
STRING -> "cast_string"
SYMBOL -> "cast_symbol"
BINARY -> "cast_binary"
BYTE -> "cast_byte"
BLOB -> "cast_blob"
CLOB -> "cast_clob"
DATE -> "cast_date"
TIME -> "cast_time"
TIMESTAMP -> "cast_timestamp"
INTERVAL -> "cast_interval"
BAG -> "cast_bag"
LIST -> "cast_list"
SEXP -> "cast_sexp"
STRUCT -> "cast_struct"
PartiQLValueType.NULL -> "cast_null" // TODO remove, only added for backwards compatibility in next release.
PartiQLValueType.MISSING -> "cast_missing" // TODO remove, only added for backwards compatibility in next release.
}

internal fun cast(operand: PartiQLValueType, target: PartiQLValueType) =
FunctionSignature.Scalar(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ import org.partiql.types.AnyType
import org.partiql.types.BagType
import org.partiql.types.BoolType
import org.partiql.types.CollectionType
import org.partiql.types.DecimalType
import org.partiql.types.IntType
import org.partiql.types.ListType
import org.partiql.types.SexpType
Expand All @@ -91,6 +92,7 @@ import org.partiql.types.StructType
import org.partiql.types.TupleConstraint
import org.partiql.types.function.FunctionSignature
import org.partiql.value.BoolValue
import org.partiql.value.Int32Value
import org.partiql.value.MissingValue
import org.partiql.value.PartiQLValueExperimental
import org.partiql.value.TextValue
Expand Down Expand Up @@ -634,12 +636,37 @@ internal class PlanTyper(
}
}

// TODO we have to pull out decimal type parameters here because V0 drops the type in CAST.
if (newFn.signature.name == "cast_decimal" && newFn.signature.parameters.size == 3) {
val p = getIntOrErr(newArgs[1].op)
val s = getIntOrErr(newArgs[2].op)
val returns = DecimalType(DecimalType.PrecisionScaleConstraint.Constrained(p, s))
val op = rexOpCallStatic(newFn, newArgs)
return rex(returns, op)
}

// Type return
val returns = newFn.signature.returns
val op = rexOpCallStatic(newFn, newArgs)
return rex(returns.toStaticType().flatten(), op)
}

/**
* For `cast_decimal(v, precision, scale)` we make the precision and scale literal 32-bit integers.
*/
private fun getIntOrErr(op: Rex.Op): Int {
if (op !is Rex.Op.Lit) {
error("Unrecoverable, expected Rex.Op.Lit found ${op::class}. This should be unreachable.")
}
if (op.value !is Int32Value) {
error("Unrecoverable, expected Int32Value found ${op.value::class}. This should be unreachable.")
}
if (op.value.value == null) {
error("Int32Value cannot be null. This should be unreachable.")
}
return op.value.value!!
}

override fun visitRexOpCase(node: Rex.Op.Case, ctx: StaticType?): Rex {
// Rewrite CASE-WHEN branches
val oldBranches = node.branches.toTypedArray()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,8 @@ internal class TypeLattice private constructor(
INT32 to unsafe(),
INT64 to unsafe(),
INT to unsafe(),
DECIMAL to unsafe(),
DECIMAL_ARBITRARY to unsafe(),
STRING to coercion(),
SYMBOL to explicit(),
CLOB to coercion(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,12 @@ import org.partiql.plugins.memory.MemoryConnector
import org.partiql.spi.connector.ConnectorMetadata
import org.partiql.types.AnyType
import org.partiql.types.BagType
import org.partiql.types.DecimalType
import org.partiql.types.ListType
import org.partiql.types.SexpType
import org.partiql.types.StaticType
import org.partiql.types.StaticType.Companion.ANY
import org.partiql.types.StaticType.Companion.DECIMAL
import org.partiql.types.StaticType.Companion.INT
import org.partiql.types.StaticType.Companion.INT4
import org.partiql.types.StaticType.Companion.INT8
Expand Down Expand Up @@ -287,6 +289,80 @@ class PlanTyperTestsPorted {
@JvmStatic
fun structs() = listOf<TestCase>()

@JvmStatic
fun decimalCastCases() = listOf<TestCase>(
SuccessTestCase(
name = "cast decimal",
query = "CAST(1 AS DECIMAL)",
expected = StaticType.DECIMAL,
),
SuccessTestCase(
name = "cast decimal(1)",
query = "CAST(1 AS DECIMAL(1))",
expected = DecimalType(DecimalType.PrecisionScaleConstraint.Constrained(1, 0)),
),
SuccessTestCase(
name = "cast decimal(1,0)",
query = "CAST(1 AS DECIMAL(1,0))",
expected = DecimalType(DecimalType.PrecisionScaleConstraint.Constrained(1, 0)),
),
SuccessTestCase(
name = "cast decimal(1,1)",
query = "CAST(1 AS DECIMAL(1,1))",
expected = DecimalType(DecimalType.PrecisionScaleConstraint.Constrained(1, 1)),
),
SuccessTestCase(
name = "cast decimal(38)",
query = "CAST(1 AS DECIMAL(38))",
expected = DecimalType(DecimalType.PrecisionScaleConstraint.Constrained(38, 0)),
),
SuccessTestCase(
name = "cast decimal(38,0)",
query = "CAST(1 AS DECIMAL(38,0))",
expected = DecimalType(DecimalType.PrecisionScaleConstraint.Constrained(38, 0)),
),
SuccessTestCase(
name = "cast decimal(38,38)",
query = "CAST(1 AS DECIMAL(38,38))",
expected = DecimalType(DecimalType.PrecisionScaleConstraint.Constrained(38, 38)),
),
SuccessTestCase(
name = "cast decimal string",
query = "CAST('1' AS DECIMAL)",
expected = StaticType.DECIMAL,
),
SuccessTestCase(
name = "cast decimal(1) string",
query = "CAST('1' AS DECIMAL(1))",
expected = DecimalType(DecimalType.PrecisionScaleConstraint.Constrained(1, 0)),
),
SuccessTestCase(
name = "cast decimal(1,0) string",
query = "CAST('1' AS DECIMAL(1,0))",
expected = DecimalType(DecimalType.PrecisionScaleConstraint.Constrained(1, 0)),
),
SuccessTestCase(
name = "cast decimal(1,1) string",
query = "CAST('1' AS DECIMAL(1,1))",
expected = DecimalType(DecimalType.PrecisionScaleConstraint.Constrained(1, 1)),
),
SuccessTestCase(
name = "cast decimal(38) string",
query = "CAST('1' AS DECIMAL(38))",
expected = DecimalType(DecimalType.PrecisionScaleConstraint.Constrained(38, 0)),
),
SuccessTestCase(
name = "cast decimal(38,0) string",
query = "CAST('1' AS DECIMAL(38,0))",
expected = DecimalType(DecimalType.PrecisionScaleConstraint.Constrained(38, 0)),
),
SuccessTestCase(
name = "cast decimal(38,38) string",
query = "CAST('1' AS DECIMAL(38,38))",
expected = DecimalType(DecimalType.PrecisionScaleConstraint.Constrained(38, 38)),
),
)

@JvmStatic
fun selectStar() = listOf<TestCase>(
SuccessTestCase(
Expand Down Expand Up @@ -3452,6 +3528,11 @@ class PlanTyperTestsPorted {
@Execution(ExecutionMode.CONCURRENT)
fun testCollections(tc: TestCase) = runTest(tc)

@ParameterizedTest
@MethodSource("decimalCastCases")
@Execution(ExecutionMode.CONCURRENT)
fun testDecimalCast(tc: TestCase) = runTest(tc)

@ParameterizedTest
@MethodSource("selectStar")
@Execution(ExecutionMode.CONCURRENT)
Expand Down

1 comment on commit a02ecde

@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: a02ecde Previous: ac23bbc Ratio
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncGroupingWithInterruptible 273.58862248177627 us/op 285.2159134941116 us/op 0.96
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncGroupingWithoutInterruptible 261.33714619809155 us/op 271.41936977632315 us/op 0.96
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncWithInterruptible 242.94549023048245 us/op 244.67966930364045 us/op 0.99
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncWithoutInterruptible 231.01470202671186 us/op 259.02307491632257 us/op 0.89
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinWithInterruptible 172.98407654925194 us/op 173.20068993268583 us/op 1.00
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinWithoutInterruptible 172.5210457738364 us/op 184.54199227629258 us/op 0.93
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinAggGroupWithInterruptible 12672196.8534 us/op 13195177.7746 us/op 0.96
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinAggGroupWithoutInterruptible 12964950.5865 us/op 13035080.445050003 us/op 0.99
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinAggWithInterruptible 5020652.786049999 us/op 4751900.069399999 us/op 1.06
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinAggWithoutInterruptible 4960132.266450001 us/op 4722057.36125 us/op 1.05
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinWithInterruptible 38.28835413153601 us/op 40.75189881186096 us/op 0.94
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinWithoutInterruptible 38.872702484285654 us/op 43.26803989224418 us/op 0.90
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinAggGroupWithInterruptible 13051848.296850001 us/op 13115049.34425 us/op 1.00
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinAggGroupWithoutInterruptible 12530941.489750003 us/op 12484692.88545 us/op 1.00
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinAggWithInterruptible 4944826.057200001 us/op 5036592.254800001 us/op 0.98
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinAggWithoutInterruptible 4986476.628700001 us/op 5185329.993500001 us/op 0.96
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinWithInterruptible 93727.2717727273 us/op 105501.55659000001 us/op 0.89
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinWithoutInterruptible 91310.40242613634 us/op 95137.98040128787 us/op 0.96
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLCompiler15 78.17982870314331 us/op 81.66092999490581 us/op 0.96
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLCompiler30 155.38490414848576 us/op 156.53327179838507 us/op 0.99
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator15 369356.1703833332 us/op 324329.5357916667 us/op 1.14
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator30 722781.2356250001 us/op 645108.3042750001 us/op 1.12
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator30WithData10 7343671.070200001 us/op 7364203.315749998 us/op 1.00
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLParser15 132.53454251513148 us/op 131.9825381540705 us/op 1.00
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLParser30 249.24813259079536 us/op 255.37864424532935 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameCaseWhenThen 33.591148440625936 us/op 34.17603545116955 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery 42.38130642110261 us/op 42.64384281502086 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery01 235.7830179785072 us/op 244.75334694349073 us/op 0.96
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery02 405.118076526397 us/op 414.34449554204036 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameExceptUnionIntersectSixty 158.98576690884144 us/op 158.4686199136308 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameExec20Expressions 45.78575008956098 us/op 47.444121576558054 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameFromLet 33.641546258843825 us/op 34.376309818043154 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGraphPattern 32.283685564536555 us/op 32.26414905600738 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGraphPreFilters 58.417956721328345 us/op 57.850511394491335 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGroupLimit 39.66480612631708 us/op 40.46888207858639 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameLongFromSourceOrderBy 47.19245559022701 us/op 48.33559531073383 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameManyJoins 50.47576385001569 us/op 51.0332759405179 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameNestedAggregates 84.2741279055908 us/op 86.27102574139457 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameNestedParen 13.321908433269368 us/op 13.54660382793673 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNamePivot 52.232395741312644 us/op 51.9158610712949 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuery15OrsAndLikes 155.0447732694458 us/op 158.52565919877898 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuery30Plus 84.93191018723898 us/op 86.68519548077882 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryFunc 38.655449851597936 us/op 38.57676051068599 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryFuncInProjection 42.483766647903565 us/op 43.44105934945299 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryList 60.27386438526364 us/op 59.816634754221546 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryNestedSelect 563.5092112599057 us/op 583.9609480234537 us/op 0.96
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuerySimple 11.959532109807174 us/op 12.170872453524595 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralJoins 16.985151628728595 us/op 17.35069534168851 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralProjections 56.76655404511632 us/op 56.50821423185713 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralSelect 157.2715297573216 us/op 161.90011830880093 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSimpleInsert 22.81773598403196 us/op 23.470281245249147 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeJoins 16.70140038317585 us/op 17.013950071272706 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeProjections 22.996714662505152 us/op 23.658739065533517 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeSelect 41.74541062283937 us/op 41.29840728762474 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameTimeZone 19.217293145563197 us/op 19.252830661257757 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameVeryLongQuery 191.24431924119094 us/op 199.7913716883963 us/op 0.96
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameVeryLongQuery01 816.481329030292 us/op 772.5160929880076 us/op 1.06
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameCaseWhenThen 18.8458813082004 us/op 18.651966237371465 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameComplexQuery 191.06204660152662 us/op 179.79252421740395 us/op 1.06
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameComplexQuery01 84.37751764861028 us/op 84.90037086704228 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameExceptUnionIntersectSixty 163.08422547697964 us/op 165.82090658073412 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameExec20Expressions 47.50821802971596 us/op 47.16738931143705 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameFromLet 28.113076496221318 us/op 28.210270141258626 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGraphPattern 29.903935608392477 us/op 31.10694882382588 us/op 0.96
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGraphPreFilters 53.745274533151225 us/op 54.437942017837386 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGroupLimit 25.26888312736421 us/op 25.40023419096661 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameLongFromSourceOrderBy 98.56098897619525 us/op 100.40948642196058 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameManyJoins 34.651424452557926 us/op 33.59678843946775 us/op 1.03
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameNestedAggregates 73.78575362423456 us/op 72.72423369563315 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameNestedParen 61.11061825405004 us/op 64.56333704869334 us/op 0.95
org.partiql.jmh.benchmarks.ParserBenchmark.parseNamePivot 49.431303021791834 us/op 49.89602628929318 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuery15OrsAndLikes 131.9570532095062 us/op 135.94779807498497 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuery30Plus 44.28714967817409 us/op 47.64043098470963 us/op 0.93
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryFunc 97.58994072696109 us/op 99.34134749457024 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryFuncInProjection 63.52146372541379 us/op 65.51734433212563 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryList 55.04384374535014 us/op 56.79825993753993 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryNestedSelect 104.39636000779619 us/op 104.68557097478394 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuerySimple 8.496762132407238 us/op 8.328637008725027 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralJoins 54.03978343830105 us/op 53.72398266422954 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralProjections 40.637799538223156 us/op 40.19229295316247 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralSelect 75.99567242693527 us/op 74.845612997215 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSimpleInsert 15.0875364071849 us/op 14.884949524022769 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeJoins 14.552937750957918 us/op 15.85873571409609 us/op 0.92
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeProjections 13.046695247867476 us/op 12.702418325887908 us/op 1.03
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeSelect 24.32214492461103 us/op 24.919106896552023 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameTimeZone 6.070284241543981 us/op 5.971476643097838 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameVeryLongQuery 307.31404408957366 us/op 311.2428964922042 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameVeryLongQuery01 815.0848002534854 us/op 826.5059593670851 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLCompiler 7.236032385859998 us/op 7.192295976226011 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLEvaluator 1.7690396865202498 us/op 1.9739355723216363 us/op 0.90
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLParser 7.972272573628885 us/op 7.91939227015329 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testCompileQuery1 7.440833654700411 us/op 7.162417241861531 us/op 1.04
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testCompileQuery2 13.247437899784895 us/op 13.956220975636063 us/op 0.95
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testCompileQuery3 15.521802283552455 us/op 14.999800436777457 us/op 1.03
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testCompileQuery4 22.407626599262986 us/op 23.128375568858054 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testCompileQuery5 23.726028564958764 us/op 24.566461951189293 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery1 144540.3461732143 us/op 148557.15027142857 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery10 15.39848041776394 us/op 15.677250606159475 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery11 2.4906961015066726 us/op 2.4377525233259445 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery2 236225.69217000002 us/op 250229.9685425 us/op 0.94
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery3 240574.44623000003 us/op 245404.521965 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery4 304530.08545 us/op 315023.0305625 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery5 297486.566925 us/op 301036.1034125 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery6 348660.57801666664 us/op 375516.8198666667 us/op 0.93
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery7 29270.103157642607 us/op 30323.199596785875 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery8 2817.8099477388632 us/op 2824.7732322076217 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineAsyncBenchmark.testEvalQuery9 266.4659956927396 us/op 267.0345895557011 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testCompileQuery1 6.974544311166236 us/op 6.893501404552639 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testCompileQuery2 13.286578422312228 us/op 13.27088805119144 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testCompileQuery3 14.552037438140804 us/op 14.350764284436192 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testCompileQuery4 21.567460290434163 us/op 20.64411915842766 us/op 1.04
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testCompileQuery5 21.679233620101577 us/op 22.75207124772663 us/op 0.95
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery1 125966.63102638889 us/op 133098.67834375 us/op 0.95
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery10 9.779739302569258 us/op 9.683367815974428 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery11 1.3748850734986113 us/op 1.3896269671443244 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery2 192555.85313333332 us/op 191720.39152499996 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery3 198296.71363166667 us/op 206458.05133666666 us/op 0.96
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery4 248644.73778999998 us/op 257613.32753749998 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery5 230167.37039499995 us/op 231660.58067 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery6 295882.0444375 us/op 289606.0987 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery7 22837.614367768238 us/op 24017.67231133552 us/op 0.95
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery8 2180.519457334049 us/op 2192.2307941497697 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLCompilerPipelineBenchmark.testEvalQuery9 200.1210769949844 us/op 202.18831451624914 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameCaseWhenThen 32.16540164060347 us/op 32.45922654831975 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameComplexQuery 42.2059347047419 us/op 40.79022547618388 us/op 1.03
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameComplexQuery01 232.61351064543086 us/op 242.49763470766484 us/op 0.96
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameComplexQuery02 415.8050326260157 us/op 411.0151694839909 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameExceptUnionIntersectSixty 156.74791390833272 us/op 156.99840013690675 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameExec20Expressions 44.25865244172461 us/op 44.07464186716215 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameFromLet 32.35935601539017 us/op 32.58789411324186 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameGraphPattern 31.746201162551653 us/op 31.910285183507522 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameGraphPreFilters 55.404052368235874 us/op 57.56417534051765 us/op 0.96
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameGroupLimit 40.100844450933664 us/op 41.24261449221611 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameLongFromSourceOrderBy 47.52797635182003 us/op 47.84422966975909 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameManyJoins 49.95552555372558 us/op 49.11444674884836 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameNestedAggregates 86.54344515841443 us/op 87.84373290562354 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameNestedParen 13.040386992557051 us/op 13.255919562452167 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNamePivot 50.504701452796766 us/op 51.83077729237605 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQuery15OrsAndLikes 162.13859184949382 us/op 159.89293590440238 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQuery30Plus 86.70681140409889 us/op 87.95422427117947 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryFunc 37.74334358568469 us/op 38.004525073576794 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryFuncInProjection 42.503937989355244 us/op 43.312630984634126 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryList 58.69063919094286 us/op 58.73198940211243 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryNestedSelect 589.6249652033823 us/op 583.68533196644 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQuerySimple 11.896266671278617 us/op 11.923086897251347 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSeveralJoins 16.266132818169375 us/op 16.28846965385734 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSeveralProjections 54.21463385924049 us/op 54.996800343295696 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSeveralSelect 160.13190214157788 us/op 160.0061578699464 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSimpleInsert 22.22868788371196 us/op 22.81290256064119 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSomeJoins 16.49584521272418 us/op 16.258201892728888 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSomeProjections 22.079453999391294 us/op 21.665317289158033 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSomeSelect 40.481543626385694 us/op 41.687244753956705 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameTimeZone 18.86496297883919 us/op 19.157621792070767 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameVeryLongQuery 199.0950796105432 us/op 191.57699140470442 us/op 1.04
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameVeryLongQuery01 771.0505601294371 us/op 745.0272555273519 us/op 1.03
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameCaseWhenThen 24.06059375639068 us/op 23.977082227179714 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameComplexQuery 241.8611400724455 us/op 246.0055730064389 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameComplexQuery01 123.53261111459078 us/op 127.21135124974933 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameExceptUnionIntersectSixty 264.8657146994311 us/op 267.671591314681 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameExec20Expressions 61.421533731622034 us/op 64.27415617476275 us/op 0.96
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameFromLet 38.78918557591261 us/op 40.33934766666885 us/op 0.96
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameGraphPattern 44.41424445413152 us/op 45.382893387063184 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameGraphPreFilters 80.87773722837842 us/op 82.10696107331546 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameGroupLimit 28.517982351214652 us/op 29.33287569094295 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameLongFromSourceOrderBy 125.1061809983792 us/op 118.28226322352211 us/op 1.06
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameManyJoins 43.74484204034612 us/op 42.179548141997216 us/op 1.04
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameNestedAggregates 101.97483082346376 us/op 102.15321696351285 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameNestedParen 65.01025392943531 us/op 66.65884678543573 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNamePivot 63.75324502897912 us/op 63.3310937546491 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQuery15OrsAndLikes 188.9890039216283 us/op 190.32602579700222 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQuery30Plus 58.008750779446395 us/op 57.452546117485 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryFunc 112.4142323426551 us/op 112.35077379759748 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryFuncInProjection 77.64416327040261 us/op 78.92839270917787 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryList 69.11075855211726 us/op 68.68156244547231 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryNestedSelect 135.38852413731135 us/op 134.87376397229704 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQuerySimple 12.20670306710306 us/op 11.93610673646468 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSeveralJoins 80.68241896262612 us/op 79.15982191091376 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSeveralProjections 61.837726576773015 us/op 60.90279526804652 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSeveralSelect 116.63402267926247 us/op 114.67574581719605 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSimpleInsert 22.143224248303795 us/op 21.911063407973362 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSomeJoins 20.006070082882015 us/op 21.372704404031417 us/op 0.94
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSomeProjections 18.446664436249357 us/op 19.353388847565874 us/op 0.95
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSomeSelect 34.86797525493911 us/op 36.66751027761083 us/op 0.95
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameTimeZone 7.404597788751515 us/op 7.622740927863999 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameVeryLongQuery 467.01842255349885 us/op 459.82201264385077 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameVeryLongQuery01 1136.4136408343213 us/op 1178.3016096183399 us/op 0.96

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

Please sign in to comment.