Skip to content

Commit

Permalink
Fixes variable resolution (#1322)
Browse files Browse the repository at this point in the history
  • Loading branch information
yliuuuu authored Dec 20, 2023
1 parent 6f386d2 commit acec206
Show file tree
Hide file tree
Showing 5 changed files with 424 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -77,16 +77,18 @@ internal sealed interface ResolvedVar {
*
* @property type Resolved StaticType
* @property ordinal Index offset in [TypeEnv]
* @property replacementSteps Path steps to replace.
* @property depth The depth/level of the path match.
* @property resolvedSteps The fully resolved path steps.s
*/
class Local(
override val type: StaticType,
override val ordinal: Int,
val rootType: StaticType,
val replacementSteps: List<BindingName>,
override val depth: Int
) : ResolvedVar
val resolvedSteps: List<BindingName>,
) : ResolvedVar {
// the depth are always going to be 1 because this is local variable.
// the global path, however the path length maybe, going to be replaced by a binding name.
override val depth: Int = 1
}

/**
* Metadata for a resolved global variable
Expand Down Expand Up @@ -233,7 +235,7 @@ internal class Env(
catalogs[catalogIndex] = catalogs[catalogIndex].copy(
symbols = symbols + listOf(Catalog.Symbol(valuePath, valueType))
)
catalogIndex to 0
catalogIndex to catalogs[catalogIndex].symbols.lastIndex
}
else -> {
catalogIndex to index
Expand Down Expand Up @@ -325,19 +327,25 @@ internal class Env(
locals.forEachIndexed { ordinal, binding ->
val root = path.steps[0]
if (root.isEquivalentTo(binding.name)) {
return ResolvedVar.Local(binding.type, ordinal, binding.type, emptyList(), 1)
return ResolvedVar.Local(binding.type, ordinal, binding.type, path.steps)
}
}

// 2. Check if this variable is referencing a struct field, carrying ordinals
val matches = mutableListOf<ResolvedVar.Local>()
for (ordinal in locals.indices) {
val rootType = locals[ordinal].type
val pathPrefix = BindingName(locals[ordinal].name, BindingCase.SENSITIVE)
if (rootType is StructType) {
val varType = inferStructLookup(rootType, path)
if (varType != null) {
// we found this path within a struct!
val match = ResolvedVar.Local(varType.resolvedType, ordinal, rootType, varType.replacementPath.steps, varType.replacementPath.steps.size)
val match = ResolvedVar.Local(
varType.resolvedType,
ordinal,
rootType,
listOf(pathPrefix) + varType.replacementPath.steps,
)
matches.add(match)
}
}
Expand Down Expand Up @@ -413,7 +421,7 @@ internal class Env(
}
}
// 3. Struct is open
else -> null
else -> key to StaticType.ANY
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -451,25 +451,47 @@ internal class PlanTyper(
return rex(ANY, rexOpErr("Undefined variable ${node.identifier}"))
}
val type = resolvedVar.type
val op = when (resolvedVar) {
is ResolvedVar.Global -> rexOpGlobal(catalogSymbolRef(resolvedVar.ordinal, resolvedVar.position))
is ResolvedVar.Local -> rexOpVarResolved(resolvedVar.ordinal) // resolvedLocalPath(resolvedVar)
}
val variable = rex(type, op)
return when (resolvedVar.depth) {
path.steps.size -> variable
else -> {
val foldedPath = path.steps.subList(resolvedVar.depth, path.steps.size).fold(variable) { current, step ->
when (step.bindingCase) {
BindingCase.SENSITIVE -> rex(ANY, rexOpPathKey(current, rex(STRING, rexOpLit(stringValue(step.name)))))
BindingCase.INSENSITIVE -> rex(ANY, rexOpPathSymbol(current, step.name))
return when (resolvedVar) {
is ResolvedVar.Global -> {
val variable = rex(type, rexOpGlobal(catalogSymbolRef(resolvedVar.ordinal, resolvedVar.position)))
when (resolvedVar.depth) {
path.steps.size -> variable
else -> {
val foldedPath = foldPath(path.steps, resolvedVar.depth, path.steps.size, variable)
visitRex(foldedPath, ctx)
}
}
}
is ResolvedVar.Local -> {
val variable = rex(type, rexOpVarResolved(resolvedVar.ordinal))
when {
path.isEquivalentTo(resolvedVar.resolvedSteps) && path.steps.size == resolvedVar.depth -> variable
else -> {
val foldedPath = foldPath(resolvedVar.resolvedSteps, resolvedVar.depth, resolvedVar.resolvedSteps.size, variable)
visitRex(foldedPath, ctx)
}
}
visitRex(foldedPath, ctx)
}
}
}

private fun foldPath(path: List<BindingName>, start: Int, end: Int, global: Rex) =
path.subList(start, end).fold(global) { current, step ->
when (step.bindingCase) {
BindingCase.SENSITIVE -> rex(ANY, rexOpPathKey(current, rex(STRING, rexOpLit(stringValue(step.name)))))
BindingCase.INSENSITIVE -> rex(ANY, rexOpPathSymbol(current, step.name))
}
}

private fun BindingPath.isEquivalentTo(other: List<BindingName>): Boolean {
this.steps.forEachIndexed { index, bindingName ->
if (bindingName != other[index]) {
return false
}
}
return true
}

override fun visitRexOpGlobal(node: Rex.Op.Global, ctx: StaticType?): Rex {
val catalog = env.catalogs[node.ref.catalog]
val type = catalog.symbols[node.ref.symbol].type
Expand Down
164 changes: 164 additions & 0 deletions partiql-planner/src/test/kotlin/org/partiql/planner/PlanTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
package org.partiql.planner

import org.junit.jupiter.api.DynamicContainer
import org.junit.jupiter.api.DynamicContainer.dynamicContainer
import org.junit.jupiter.api.DynamicNode
import org.junit.jupiter.api.DynamicTest
import org.junit.jupiter.api.TestFactory
import org.partiql.parser.PartiQLParser
import org.partiql.plan.PlanNode
import org.partiql.plan.debug.PlanPrinter
import org.partiql.planner.test.PartiQLTest
import org.partiql.planner.test.PartiQLTestProvider
import org.partiql.planner.util.PlanNodeEquivalentVisitor
import org.partiql.planner.util.ProblemCollector
import org.partiql.plugins.memory.MemoryConnector
import org.partiql.types.BagType
import org.partiql.types.StaticType
import org.partiql.types.StructType
import org.partiql.types.TupleConstraint
import java.io.File
import java.nio.file.Path
import java.time.Instant
import java.util.stream.Stream
import kotlin.io.path.toPath

// Prevent Unintentional break of the plan
// We currently don't have a good way to assert on the result plan
// so we assert on having the partiql text.
// The input text and the normalized partiql text should produce identical plan.
// I.e.,
// if the input text is `SELECT a,b,c FROM T`
// the produced plan will be identical as the normalized query:
// `SELECT "T"['a'] AS "a", "T"['b'] AS "b", "T"['c'] AS "c" FROM "default"."T" AS "T";`
class PlanTest {
val root: Path = this::class.java.getResource("/outputs")!!.toURI().toPath()

val input = PartiQLTestProvider().apply { load() }

val session: (PartiQLTest.Key) -> PartiQLPlanner.Session = { key ->
PartiQLPlanner.Session(
queryId = key.toString(),
userId = "user_id",
currentCatalog = "default",
currentDirectory = listOf(),
instant = Instant.now(),
)
}

val metadata = MemoryConnector.Metadata.of(
"default.t" to BagType(
StructType(
listOf(
StructType.Field("a", StaticType.BOOL),
StructType.Field("b", StaticType.INT4),
StructType.Field("c", StaticType.STRING),
StructType.Field(
"d",
StructType(
listOf(StructType.Field("e", StaticType.STRING)),
contentClosed = true,
emptyList(),
setOf(TupleConstraint.Open(false)),
emptyMap()
)
),
StructType.Field("x", StaticType.ANY),
StructType.Field("z", StaticType.STRING),
StructType.Field("v", StaticType.STRING),
),
contentClosed = true,
emptyList(),
setOf(TupleConstraint.Open(false)),
emptyMap()
)
)
)

val pipeline: (PartiQLTest) -> PartiQLPlanner.Result = { test ->
val problemCollector = ProblemCollector()
val ast = PartiQLParser.default().parse(test.statement).root
val planner = PartiQLPlannerBuilder()
.addCatalog("default", metadata)
.build()
planner.plan(ast, session(test.key), problemCollector)
}

@TestFactory
fun factory(): Stream<DynamicNode> {
val r = root.toFile()
return r
.listFiles { f -> f.isDirectory }!!
.mapNotNull { load(r, it) }
.stream()
}

private fun load(parent: File, file: File): DynamicNode? = when {
file.isDirectory -> loadD(parent, file)
file.extension == "sql" -> loadF(parent, file)
else -> null
}

private fun loadD(parent: File, file: File): DynamicContainer {
val name = file.name
val children = file.listFiles()!!.map { load(file, it) }
return dynamicContainer(name, children)
}

private fun loadF(parent: File, file: File): DynamicContainer {
val group = parent.name
val tests = parse(group, file)

val children = tests.map {
// Prepare
val displayName = it.key.toString()

// Assert
DynamicTest.dynamicTest(displayName) {
val input = input[it.key] ?: error("no test cases")

val inputPlan = pipeline.invoke(input).plan
val outputPlan = pipeline.invoke(it).plan
assert(inputPlan.isEquaivalentTo(outputPlan)) {
buildString {
this.appendLine("expect plan equivalence")
PlanPrinter.append(this, inputPlan)
PlanPrinter.append(this, outputPlan)
}
}
}
}
return dynamicContainer(file.nameWithoutExtension, children)
}

private fun parse(group: String, file: File): List<PartiQLTest> {
val tests = mutableListOf<PartiQLTest>()
var name = ""
val statement = StringBuilder()
for (line in file.readLines()) {
// start of test
if (line.startsWith("--#[") and line.endsWith("]")) {
name = line.substring(4, line.length - 1)
statement.clear()
}
if (name.isNotEmpty() && line.isNotBlank()) {
// accumulating test statement
statement.appendLine(line)
} else {
// skip these lines
continue
}
// Finish & Reset
if (line.endsWith(";")) {
val key = PartiQLTest.Key(group, name)
tests.add(PartiQLTest(key, statement.toString()))
name = ""
statement.clear()
}
}
return tests
}

private fun PlanNode.isEquaivalentTo(other: PlanNode): Boolean =
PlanNodeEquivalentVisitor().visit(this, other)
}
Loading

1 comment on commit acec206

@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: acec206 Previous: 6f386d2 Ratio
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncGroupingWithInterruptible 258.0905606986938 us/op 266.1106960663937 us/op 0.97
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncGroupingWithoutInterruptible 265.3169041255939 us/op 263.0301460486381 us/op 1.01
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncWithInterruptible 255.14058853622004 us/op 235.6041135456996 us/op 1.08
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinAggFuncWithoutInterruptible 249.0682832468392 us/op 241.81172356070365 us/op 1.03
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinWithInterruptible 177.3827200087847 us/op 176.5881523833933 us/op 1.00
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.compileCrossJoinWithoutInterruptible 179.11608418510548 us/op 174.88668130382374 us/op 1.02
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinAggGroupWithInterruptible 12894360.098249998 us/op 12900369.973050002 us/op 1.00
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinAggGroupWithoutInterruptible 13009037.5599 us/op 13012507.075650003 us/op 1.00
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinAggWithInterruptible 5219523.4860499995 us/op 4775772.735400001 us/op 1.09
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinAggWithoutInterruptible 5066602.5507 us/op 5055727.2162 us/op 1.00
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinWithInterruptible 38.57328101465763 us/op 37.996122371674396 us/op 1.02
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.evalCrossJoinWithoutInterruptible 39.982674942234304 us/op 37.268580622187564 us/op 1.07
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinAggGroupWithInterruptible 12853074.607700001 us/op 13396581.445949998 us/op 0.96
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinAggGroupWithoutInterruptible 12831470.45695 us/op 12875063.370000001 us/op 1.00
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinAggWithInterruptible 4960708.119000001 us/op 5071326.09735 us/op 0.98
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinAggWithoutInterruptible 5136049.990399999 us/op 5062682.31325 us/op 1.01
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinWithInterruptible 92981.02920909092 us/op 92784.59542499998 us/op 1.00
org.partiql.jmh.benchmarks.CompilerInterruptionBenchmark.iterCrossJoinWithoutInterruptible 91793.50681742425 us/op 99718.62835181819 us/op 0.92
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLCompiler15 78.13404837532431 us/op 80.41844366997447 us/op 0.97
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLCompiler30 159.7364613390992 us/op 153.04058001485686 us/op 1.04
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator15 367235.18595 us/op 376113.6236333333 us/op 0.98
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator30 750135.706675 us/op 741919.5276249999 us/op 1.01
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator30WithData10 7345180.662300001 us/op 7201390.168100001 us/op 1.02
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLParser15 130.64789005902998 us/op 130.18847512470933 us/op 1.00
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLParser30 254.3580154350957 us/op 251.1761852603819 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameCaseWhenThen 32.852553124906535 us/op 33.54835501918389 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery 41.57713241297801 us/op 40.32526232198127 us/op 1.03
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery01 219.8612975569569 us/op 220.61713275213032 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery02 379.0709382551735 us/op 385.28569878266273 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameExceptUnionIntersectSixty 157.62247943413027 us/op 156.53881486074636 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameExec20Expressions 46.39147047126578 us/op 46.41107058976031 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameFromLet 34.302067007697374 us/op 34.43717278159993 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGraphPattern 32.14332140607512 us/op 32.002292361713685 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGraphPreFilters 57.33661736979512 us/op 58.81510507355428 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGroupLimit 39.15434384300045 us/op 40.01701074420786 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameLongFromSourceOrderBy 46.60141242820505 us/op 47.680010872149126 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameManyJoins 48.68584790670691 us/op 49.8888378199138 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameNestedAggregates 84.90368742576166 us/op 85.42732438021747 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameNestedParen 13.682548582409183 us/op 13.618147456097025 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNamePivot 50.5304780272048 us/op 52.535055663215516 us/op 0.96
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuery15OrsAndLikes 154.2467598243712 us/op 156.52803336908968 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuery30Plus 87.69916767383764 us/op 84.85635063020734 us/op 1.03
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryFunc 38.21531585067722 us/op 39.32151047396127 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryFuncInProjection 42.92925177099271 us/op 42.508631115582574 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryList 58.14986678713482 us/op 61.59680506917052 us/op 0.94
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryNestedSelect 546.6702299705697 us/op 548.9991866560854 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuerySimple 12.135435830450039 us/op 12.414825986867188 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralJoins 17.110152639452988 us/op 16.737051599764317 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralProjections 56.43248644650737 us/op 56.32453612319032 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralSelect 158.25368319582356 us/op 157.96979882065932 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSimpleInsert 23.468843071926564 us/op 22.378749157221506 us/op 1.05
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeJoins 16.76867193573719 us/op 16.74239892445906 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeProjections 23.067591207145842 us/op 22.90839195236505 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeSelect 40.40683147246811 us/op 39.62840294132991 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameTimeZone 19.272389656342195 us/op 19.32088413533129 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameVeryLongQuery 189.65725209383675 us/op 205.44871359614723 us/op 0.92
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameVeryLongQuery01 748.2527432379637 us/op 749.5230690639465 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameCaseWhenThen 18.951859059334332 us/op 18.273920273133875 us/op 1.04
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameComplexQuery 180.73406961198862 us/op 181.4462595195363 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameComplexQuery01 84.68267836735603 us/op 87.25661403245972 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameExceptUnionIntersectSixty 164.4306328169153 us/op 163.18992562486764 us/op 1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameExec20Expressions 44.95658268442691 us/op 46.358466466790965 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameFromLet 27.03941993670203 us/op 27.177254624776776 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGraphPattern 31.087788979376217 us/op 31.316168424012027 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGraphPreFilters 53.375484956910654 us/op 55.86567811489084 us/op 0.96
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGroupLimit 25.05372632971808 us/op 25.618521544126548 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameLongFromSourceOrderBy 96.24458382724592 us/op 96.89135871113129 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameManyJoins 33.21659964656635 us/op 33.80403136964711 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameNestedAggregates 70.88938582143376 us/op 71.37769549058095 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameNestedParen 59.003604761995476 us/op 60.86581690124077 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseNamePivot 47.944896475513076 us/op 49.99716393255942 us/op 0.96
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuery15OrsAndLikes 127.55017045542195 us/op 128.63477330878703 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuery30Plus 45.98847221067075 us/op 44.99915479245525 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryFunc 97.33003871804922 us/op 97.19568657841232 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryFuncInProjection 62.87857788391075 us/op 64.54677049169877 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryList 55.815646412867046 us/op 57.67796513080143 us/op 0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryNestedSelect 103.72860802989183 us/op 101.6530600980744 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuerySimple 8.505668633517114 us/op 8.580428756860886 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralJoins 52.61442250418677 us/op 54.59098004278792 us/op 0.96
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralProjections 41.36391597700767 us/op 39.59219502972362 us/op 1.04
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralSelect 73.73204020685327 us/op 75.11959509343258 us/op 0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSimpleInsert 15.051939512255899 us/op 15.098602647627152 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeJoins 14.580782493804733 us/op 14.726173864077571 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeProjections 13.042784963341708 us/op 13.24006573952978 us/op 0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeSelect 24.27254211716882 us/op 24.31115371990986 us/op 1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameTimeZone 5.991055781204679 us/op 5.884717694663545 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameVeryLongQuery 302.308346027087 us/op 296.3298685353642 us/op 1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameVeryLongQuery01 817.4651031265163 us/op 832.9715328536779 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLCompiler 6.944411658777021 us/op 7.801130742041641 us/op 0.89
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLEvaluator 1.8090385677775767 us/op 1.8212310640099179 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLParser 7.443953260302083 us/op 7.730989610407152 us/op 0.96
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameCaseWhenThen 32.039728868820326 us/op 31.94498011079923 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameComplexQuery 41.15485346701944 us/op 43.485889037627935 us/op 0.95
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameComplexQuery01 218.17812948348063 us/op 221.87935420510684 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameComplexQuery02 375.2576879422302 us/op 370.67956845069693 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameExceptUnionIntersectSixty 155.7888213553749 us/op 159.98302954064533 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameExec20Expressions 44.35817827898698 us/op 45.08933669044036 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameFromLet 32.75123141226956 us/op 32.8358413473864 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameGraphPattern 30.948276593528664 us/op 31.310942955440247 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameGraphPreFilters 55.405499946797576 us/op 56.35223996870813 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameGroupLimit 38.83489762826632 us/op 39.263246778514514 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameLongFromSourceOrderBy 48.51247424515854 us/op 48.12515141487156 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameManyJoins 48.47292957876666 us/op 47.9740921871019 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameNestedAggregates 84.7806595704794 us/op 83.20269230550672 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameNestedParen 13.14094515274103 us/op 13.011010595028036 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNamePivot 51.321268881123636 us/op 50.97107628277452 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQuery15OrsAndLikes 153.8449289490063 us/op 154.45735370867925 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQuery30Plus 86.27875744564625 us/op 85.29072044394196 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryFunc 37.74881404761315 us/op 38.92305439388203 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryFuncInProjection 42.012409005265226 us/op 42.23924830594345 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryList 58.37012114784991 us/op 57.88240177465921 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQueryNestedSelect 548.2593255507928 us/op 551.6488520622046 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameQuerySimple 11.77612373747597 us/op 11.868802361082343 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSeveralJoins 15.876475078645967 us/op 16.23260295584476 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSeveralProjections 52.91271876191663 us/op 53.27185957225762 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSeveralSelect 157.43846411782084 us/op 158.82950377877845 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSimpleInsert 21.750816041391708 us/op 22.42109857705607 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSomeJoins 16.134762517606426 us/op 15.91837715480724 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSomeProjections 21.607298087564452 us/op 22.016998259299022 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameSomeSelect 39.36013744483016 us/op 39.439792028607336 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameTimeZone 18.52663257247157 us/op 18.36799338889295 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameVeryLongQuery 195.67549107068868 us/op 196.0496798019705 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseFailNameVeryLongQuery01 738.1805222370629 us/op 733.671156890465 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameCaseWhenThen 23.573978327509383 us/op 24.034858328791678 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameComplexQuery 242.52979604902688 us/op 245.34118987592447 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameComplexQuery01 120.92672493349646 us/op 121.55564766745015 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameExceptUnionIntersectSixty 268.80387263236173 us/op 267.10742278572604 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameExec20Expressions 62.52629902189583 us/op 63.30558713686372 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameFromLet 38.16737617355424 us/op 39.508343930923864 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameGraphPattern 44.63371612922454 us/op 45.78096838711616 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameGraphPreFilters 79.35250795726986 us/op 81.81880592812139 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameGroupLimit 28.135882131848422 us/op 28.173385666192747 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameLongFromSourceOrderBy 115.10955791010699 us/op 118.34733058112613 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameManyJoins 42.431497248054185 us/op 43.21759721128904 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameNestedAggregates 95.72287042447518 us/op 101.43805992874954 us/op 0.94
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameNestedParen 64.69325076657334 us/op 66.49633835840888 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNamePivot 65.52036502148512 us/op 64.3516999442065 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQuery15OrsAndLikes 188.79205423643256 us/op 188.87852565562463 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQuery30Plus 57.54379923050853 us/op 60.460510209058725 us/op 0.95
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryFunc 112.60630780265797 us/op 116.31033508839558 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryFuncInProjection 78.57584057039757 us/op 81.53892882052654 us/op 0.96
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryList 68.63586985899032 us/op 69.73506777735219 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQueryNestedSelect 139.2260722721159 us/op 143.37861211356264 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameQuerySimple 11.949465175043734 us/op 12.032942727527011 us/op 0.99
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSeveralJoins 78.60613495781878 us/op 78.5603937975414 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSeveralProjections 61.62271120599139 us/op 62.89224466137417 us/op 0.98
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSeveralSelect 114.5980090530511 us/op 114.52835482571368 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSimpleInsert 22.00777542973768 us/op 21.75879661760872 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSomeJoins 20.02202134082227 us/op 19.914769282813477 us/op 1.01
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSomeProjections 18.068317877010035 us/op 18.65965370026667 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameSomeSelect 34.41968097913906 us/op 34.352229759188674 us/op 1.00
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameTimeZone 7.3957508120833095 us/op 7.276134185627981 us/op 1.02
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameVeryLongQuery 450.94906140861997 us/op 462.82076753491117 us/op 0.97
org.partiql.jmh.benchmarks.PartiQLParserBenchmark.parseNameVeryLongQuery01 1148.395016121329 us/op 1137.8063191870972 us/op 1.01

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

Please sign in to comment.