Skip to content

Commit

Permalink
Parsing of GPML label patterns (#1139)
Browse files Browse the repository at this point in the history
Now parsing the full assortment of node/edge label patterns: named label, disjunction, conjunction, negation, grouping, and wildcard.
  • Loading branch information
vgapeyev authored Jul 28, 2023
1 parent 55c4496 commit 3ceb168
Show file tree
Hide file tree
Showing 12 changed files with 321 additions and 118 deletions.
13 changes: 10 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,18 +29,25 @@ Thank you to all who have contributed!
## [Unreleased]

### Added
- Adds `org.partiql.value` (experimental) package for reading/writing PartiQL
values
- Adds `org.partiql.value` (experimental) package for reading/writing PartiQL values.
- Adds serialization and deserialization between IonValue and `org.partiql.value`.
- Adds `org.partiql.ast` package and usage documentation
- Adds `org.partiql.parser` package and usage documentation
- Adds PartiQL's Timestamp Data Model.
- Adds support for Timestamp constructor call in Parser.

- Parsing of label patterns within node and edge graph patterns now supports
disjunction `|`, conjunction `&`, negation `!`, and grouping.

### Changed

- Upgrades ion-java to 1.10.2.
- **Breaking** (within experimental graph features): As part of extending
the language of graph label patterns:
- Changed the type of the field `label` in AST nodes
`org.partiql.lang.domains.PartiqlAst.GraphMatchPatternPart.{Node,Edge}`,
from `SymbolPrimitive` to new `GraphLabelSpec`.
- Changed the names of subclasses of ` org.partiql.lang.graph.LabelSpec`,
from `OneOf` to `Name`, and from `Whatever` to `Wildcard`.

### Deprecated

Expand Down
37 changes: 35 additions & 2 deletions partiql-ast/src/main/kotlin/org/partiql/ast/helpers/ToLegacyAst.kt
Original file line number Diff line number Diff line change
Expand Up @@ -831,7 +831,7 @@ private class AstTranslator(val metas: Map<String, MetaContainer>) : AstBaseVisi
translate(node) { metas ->
val prefilter = node.prefilter?.let { visitExpr(it, ctx) }
val variable = node.variable
val label = node.label
val label = node.label?.let { visitGraphMatchLabel(it, ctx) }
node(prefilter, variable, label, metas)
}

Expand All @@ -849,7 +849,7 @@ private class AstTranslator(val metas: Map<String, MetaContainer>) : AstBaseVisi
val quantifier = node.quantifier?.let { visitGraphMatchQuantifier(it, ctx) }
val prefilter = node.prefilter?.let { visitExpr(it, ctx) }
val variable = node.variable
val label = node.label
val label = node.label?.let { visitGraphMatchLabel(it, ctx) }
edge(direction, quantifier, prefilter, variable, label, metas)
}

Expand Down Expand Up @@ -902,6 +902,39 @@ private class AstTranslator(val metas: Map<String, MetaContainer>) : AstBaseVisi
selectorShortestKGroup(k)
}

override fun visitGraphMatchLabel(node: GraphMatch.Label, ctx: Ctx) =
super.visitGraphMatchLabel(node, ctx) as PartiqlAst.GraphLabelSpec

override fun visitGraphMatchLabelName(node: GraphMatch.Label.Name, ctx: Ctx) =
translate(node) { metas ->
graphLabelName(node.name, metas)
}

override fun visitGraphMatchLabelWildcard(node: GraphMatch.Label.Wildcard, ctx: Ctx) =
translate(node) { metas ->
graphLabelWildcard(metas)
}

override fun visitGraphMatchLabelNegation(node: GraphMatch.Label.Negation, ctx: Ctx) =
translate(node) { metas ->
val arg = visitGraphMatchLabel(node.arg, ctx)
graphLabelNegation(arg, metas)
}

override fun visitGraphMatchLabelConj(node: GraphMatch.Label.Conj, ctx: Ctx) =
translate(node) { metas ->
val lhs = visitGraphMatchLabel(node.lhs, ctx)
val rhs = visitGraphMatchLabel(node.rhs, ctx)
graphLabelConj(lhs, rhs, metas)
}

override fun visitGraphMatchLabelDisj(node: GraphMatch.Label.Disj, ctx: Ctx) =
translate(node) { metas ->
val lhs = visitGraphMatchLabel(node.lhs, ctx)
val rhs = visitGraphMatchLabel(node.rhs, ctx)
graphLabelDisj(lhs, rhs, metas)
}

/**
* DML
*/
Expand Down
14 changes: 12 additions & 2 deletions partiql-ast/src/main/pig/partiql.ion
Original file line number Diff line number Diff line change
Expand Up @@ -271,21 +271,31 @@ may then be further optimized by selecting better implementations of each operat
(edge_left_or_right)
(edge_left_or_undirected_or_right))

// A label spec in a node pattern like `MATCH (x : <lab>)` or in an edge pattern like `MATCH −[t : <lab>]−>`
(sum graph_label_spec
(graph_label_name name::symbol) // as in `MATCH (x:Account)` or `MATCH -[x:Transfer]->`
(graph_label_wildcard) // as in `MATCH (x: %)`
(graph_label_negation arg::graph_label_spec) // as in `MATCH (x: !Account)`
(graph_label_conj lhs::graph_label_spec rhs::graph_label_spec) // as in `MATCH (x: City&Country)` - Monaco can do
(graph_label_disj lhs::graph_label_spec rhs::graph_label_spec) // as in `MATCH (x: City|Country)` - either Paris or Germany will do
)

// A part of a graph pattern
(sum graph_match_pattern_part
// A single node in a graph pattern.
(node
prefilter::(? expr) // an optional node pre-filter, e.g.: `WHERE c.name='Alarm'` in `MATCH (c WHERE c.name='Alarm')`
variable::(? symbol) // the optional element variable of the node match, e.g.: `x` in `MATCH (x)`
label::(* symbol 0)) // the optional label(s) to match for the node, e.g.: `Entity` in `MATCH (x:Entity)`
label::(? graph_label_spec)) // the optional label spec to match for the node, e.g.: `Entity` in `MATCH (x:Entity)`

// A single edge in a graph pattern.
(edge
direction::graph_match_direction // edge direction
quantifier::(? graph_match_quantifier) // an optional quantifier for the entire pattern match, e.g. `{2,5}` in `MATCH (a:Account)−[:Transfer]−>{2,5}(b:Account)`
prefilter::(? expr) // an optional edge pre-filter, e.g.: `WHERE t.capacity>100` in `MATCH −[t:hasSupply WHERE t.capacity>100]−>`
variable::(? symbol) // the optional element variable of the edge match, e.g.: `t` in `MATCH −[t]−>`
label::(* symbol 0)) // the optional label(s) to match for the edge. e.g.: `Target` in `MATCH −[t:Target]−>`
label::(? graph_label_spec)) // the optional label spec to match for the edge. e.g.: `Target` in `MATCH −[t:Target]−>`

// A sub-pattern.
(pattern pattern::graph_match_pattern))

Expand Down
13 changes: 11 additions & 2 deletions partiql-ast/src/main/resources/partiql_ast.ion
Original file line number Diff line number Diff line change
Expand Up @@ -651,15 +651,15 @@ graph_match::{
node::{
prefilter: optional::expr, // An optional node pre-filter, e.g.: `WHERE c.name='Alarm'` in `MATCH (c WHERE c.name='Alarm')`
variable: optional::string, // The optional element variable of the node match, e.g.: `x` in `MATCH (x)`
label: list::[string], // The optional label(s) to match for the node, e.g.: `Entity` in `MATCH (x:Entity)`
label: optional::label, // The optional label(s) to match for the node, e.g.: `Entity` in `MATCH (x:Entity)`
},
// A single edge in a graph pattern
edge::{
direction: direction, // Edge Direction
quantifier: optional::quantifier, // An optional quantifier for the entire pattern match, e.g. `{2,5}` in `MATCH (a:Account)−[:Transfer]−>{2,5}(b:Account)`
prefilter: optional::expr, // An optional edge pre-filter, e.g.: `WHERE t.capacity>100` in `MATCH −[t:hasSupply WHERE t.capacity>100]−>`
variable: optional::string, // The optional element variable of the edge match, e.g.: `t` in `MATCH −[t]−>`
label: list::[string], // The optional label(s) to match for the edge. e.g.: `Target` in `MATCH −[t:Target]−>`
label: optional::label, // The optional label spec to match for the edge. e.g.: `Target` in `MATCH −[t:Target]−>`
},
// A sub-pattern
pattern::{
Expand Down Expand Up @@ -702,6 +702,15 @@ graph_match::{
shortest_k::{ k: long }, // SHORTEST k
shortest_k_group::{ k: long }, // SHORTEST k GROUP
], // Fig. 8 — https://arxiv.org/abs/2112.06217

// A label spec in a node pattern like `MATCH (x : <lab>)` or in an edge pattern like `MATCH −[t : <lab>]−>`
label::[
name::{ name: string }, // as in `MATCH (x:Account)` or `MATCH -[x:Transfer]->`
wildcard::{}, // as in `MATCH (x: %)`
negation::{arg: label}, // as in `MATCH (x: !Account)`
conj::{lhs: label, rhs: label}, // as in `MATCH (x: City&Country)` - Monaco can do
disj::{lhs: label, rhs: label}, // as in `MATCH (x: City|Country)` - either Paris or Germany will do
],
],
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package org.partiql.lang.graph

import org.partiql.lang.domains.PartiqlAst
import org.partiql.lang.graph.GpmlTranslator.normalizeElemList
import org.partiql.pig.runtime.SymbolPrimitive

/** Translate an AST graph pattern into a "plan spec" to be executed by the graph engine.
* Currently, the only non-trivial aspect is making sure (in [normalizeElemList]) that node and edge elements alternate.
Expand Down Expand Up @@ -52,11 +51,12 @@ object GpmlTranslator {
)
}

fun translateLabels(labels: List<SymbolPrimitive>): LabelSpec {
return when (labels.size) {
0 -> LabelSpec.Whatever
1 -> LabelSpec.OneOf(labels[0].text)
else -> TODO("Not yet supported in evaluating a GPML graph element pattern: multiple/alternating labels")
fun translateLabels(labelSpec: PartiqlAst.GraphLabelSpec?): LabelSpec {
return when (labelSpec) {
null -> LabelSpec.Wildcard
is PartiqlAst.GraphLabelSpec.GraphLabelName -> LabelSpec.Name(labelSpec.name.text)
is PartiqlAst.GraphLabelSpec.GraphLabelWildcard -> LabelSpec.Wildcard
else -> TODO("Not yet supported graph label pattern: $labelSpec")
}
}

Expand All @@ -76,7 +76,7 @@ object GpmlTranslator {
* TODO: Deal with adjacent [NodeSpec]s -- by "unification" or prohibit.
*/
fun normalizeElemList(elems: List<ElemSpec>): List<ElemSpec> {
val fillerNode = NodeSpec(null, LabelSpec.Whatever)
val fillerNode = NodeSpec(null, LabelSpec.Wildcard)
val normalized = mutableListOf<ElemSpec>()
var expectNode = true
for (x in elems) {
Expand Down
8 changes: 4 additions & 4 deletions partiql-lang/src/main/kotlin/org/partiql/lang/graph/Graph.kt
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,11 @@ interface Graph {
* based on labels at them.
*/
sealed class LabelSpec {
/** A graph element matches when one of its labels is [name].*/
data class OneOf(val name: String) : LabelSpec()
/** A graph element (node or edge) matches when its label set contains [name]. */
data class Name(val name: String) : LabelSpec()

/** A graph element always matches (even when it is not labeled at all).*/
object Whatever : LabelSpec()
/** A graph element matches as long as it has a label. */
object Wildcard : LabelSpec()

// TODO: more LabelSpec features: alternation, negation, string patterns, ...
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ class SimpleGraph(

private fun labelsMatchSpec(labels: Set<String>, spec: LabelSpec): Boolean =
when (spec) {
LabelSpec.Whatever -> true
is LabelSpec.OneOf -> labels.contains(spec.name)
LabelSpec.Wildcard -> true
is LabelSpec.Name -> labels.contains(spec.name)
}

private fun Graph.Elem.matches(labelSpec: LabelSpec): Boolean =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -781,8 +781,36 @@ internal class PartiQLPigVisitor(
}
}

override fun visitPatternPartLabel(ctx: PartiQLParser.PatternPartLabelContext) =
visitSymbolPrimitive(ctx.symbolPrimitive())
override fun visitLabelSpecOr(ctx: PartiQLParser.LabelSpecOrContext): PartiqlAst.GraphLabelSpec =
PartiqlAst.build {
val lhs = visit(ctx.labelSpec()) as PartiqlAst.GraphLabelSpec
val rhs = visit(ctx.labelTerm()) as PartiqlAst.GraphLabelSpec
graphLabelDisj(lhs, rhs, ctx.VERTBAR().getSourceMetaContainer())
}

override fun visitLabelTermAnd(ctx: PartiQLParser.LabelTermAndContext): PartiqlAst.GraphLabelSpec =
PartiqlAst.build {
val lhs = visit(ctx.labelTerm()) as PartiqlAst.GraphLabelSpec
val rhs = visit(ctx.labelFactor()) as PartiqlAst.GraphLabelSpec
graphLabelConj(lhs, rhs, ctx.AMPERSAND().getSourceMetaContainer())
}

override fun visitLabelFactorNot(ctx: PartiQLParser.LabelFactorNotContext) = PartiqlAst.build {
val arg = visit(ctx.labelPrimary()) as PartiqlAst.GraphLabelSpec
graphLabelNegation(arg, ctx.BANG().getSourceMetaContainer())
}

override fun visitLabelPrimaryName(ctx: PartiQLParser.LabelPrimaryNameContext) = PartiqlAst.build {
val x = visitSymbolPrimitive(ctx.symbolPrimitive())
graphLabelName_(x.name, x.metas)
}

override fun visitLabelPrimaryWild(ctx: PartiQLParser.LabelPrimaryWildContext) = PartiqlAst.build {
graphLabelWildcard(ctx.PERCENT().getSourceMetaContainer())
}

override fun visitLabelPrimaryParen(ctx: PartiQLParser.LabelPrimaryParenContext) =
visit(ctx.labelSpec()) as PartiqlAst.GraphLabelSpec

override fun visitPattern(ctx: PartiQLParser.PatternContext) = PartiqlAst.build {
val restrictor = ctx.restrictor?.let { visitPatternRestrictor(it) }
Expand Down Expand Up @@ -817,13 +845,8 @@ internal class PartiQLPigVisitor(
val placeholderDirection = edgeRight()
val variable = ctx.symbolPrimitive()?.let { visitSymbolPrimitive(it).name }
val prefilter = ctx.whereClause()?.let { visitWhereClause(it) }
val label = ctx.patternPartLabel()?.let { visitPatternPartLabel(it).name }
edge_(
direction = placeholderDirection,
variable = variable,
prefilter = prefilter,
label = listOfNotNull(label)
)
val label = ctx.labelSpec()?.let { visit(it) as PartiqlAst.GraphLabelSpec }
edge_(direction = placeholderDirection, variable = variable, prefilter = prefilter, label = label)
}

override fun visitEdgeSpecLeft(ctx: PartiQLParser.EdgeSpecLeftContext) = PartiqlAst.build {
Expand Down Expand Up @@ -887,8 +910,8 @@ internal class PartiQLPigVisitor(
override fun visitNode(ctx: PartiQLParser.NodeContext) = PartiqlAst.build {
val variable = ctx.symbolPrimitive()?.let { visitSymbolPrimitive(it).name }
val prefilter = ctx.whereClause()?.let { visitWhereClause(it) }
val label = ctx.patternPartLabel()?.let { visitPatternPartLabel(it).name }
node_(variable = variable, prefilter = prefilter, label = listOfNotNull(label))
val label = ctx.labelSpec()?.let { visit(it) as PartiqlAst.GraphLabelSpec }
node_(variable = variable, prefilter = prefilter, label = label)
}

override fun visitPatternRestrictor(ctx: PartiQLParser.PatternRestrictorContext) = PartiqlAst.build {
Expand Down
Loading

1 comment on commit 3ceb168

@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: 3ceb168 Previous: 55c4496 Ratio
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLCompiler15 179.36948160391643 us/op 119.91566434887791 us/op 1.50
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLCompiler30 395.32692704927916 us/op 233.4017258700331 us/op 1.69
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator15 594068.3074 us/op 524691.9177749999 us/op 1.13
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator30 1116918.99835 us/op 866339.8075749999 us/op 1.29
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator30WithData10 11200307.3889 us/op 10404566.07065 us/op 1.08
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLParser15 248.32620909009628 us/op 189.33506506304155 us/op 1.31
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLParser30 485.7572023208039 us/op 365.5680382030234 us/op 1.33
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameCaseWhenThen 80.40577800924878 us/op 46.43094752332286 us/op 1.73
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery 91.59307064706026 us/op 62.99389848828683 us/op 1.45
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery01 458.9099344396042 us/op 335.9168677874423 us/op 1.37
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery02 747.1327009431432 us/op 571.2327445963342 us/op 1.31
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameExceptUnionIntersectSixty 292.3742689597752 us/op 214.63869020236416 us/op 1.36
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameExec20Expressions 104.24032907224039 us/op 71.44133521175927 us/op 1.46
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameFromLet 83.93179545902805 us/op 47.89548460521641 us/op 1.75
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGraphPattern 78.66738795415063 us/op 49.34275021905931 us/op 1.59
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGraphPreFilters 131.3816760914659 us/op 70.91909549917472 us/op 1.85
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGroupLimit 91.64691341714969 us/op 50.92645512677232 us/op 1.80
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameLongFromSourceOrderBy 102.50367278559592 us/op 70.60396500460502 us/op 1.45
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameManyJoins 113.89178590874783 us/op 67.89496857946432 us/op 1.68
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameNestedAggregates 183.08778691509545 us/op 118.50404479679983 us/op 1.54
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameNestedParen 34.859077858322124 us/op 22.05771027661867 us/op 1.58
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNamePivot 119.93769601656213 us/op 73.45630551423032 us/op 1.63
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuery15OrsAndLikes 361.79161031081065 us/op 224.20407467754535 us/op 1.61
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuery30Plus 169.31291085427546 us/op 120.25838658237615 us/op 1.41
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryFunc 84.1577931905553 us/op 56.88967431996315 us/op 1.48
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryFuncInProjection 181.18625184256842 us/op 126.40765972518258 us/op 1.43
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryList 124.42108512640755 us/op 83.34058149695366 us/op 1.49
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryNestedSelect 1033.3210688093604 us/op 821.8289629772682 us/op 1.26
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuerySimple 30.81793269869154 us/op 19.840118490478062 us/op 1.55
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralJoins 43.05898089577538 us/op 26.34006644357705 us/op 1.63
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralProjections 120.30467485786502 us/op 81.24101540782249 us/op 1.48
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralSelect 325.4621894085254 us/op 220.68844360911507 us/op 1.47
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSimpleInsert 60.26623457896085 us/op 33.169870357736286 us/op 1.82
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeJoins 40.8656316265531 us/op 26.243746134905564 us/op 1.56
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeProjections 54.73938812263408 us/op 34.76736382422344 us/op 1.57
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeSelect 90.8796850550864 us/op 56.32126730679438 us/op 1.61
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameTimeZone 46.06846290614983 us/op 29.357323273491232 us/op 1.57
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameVeryLongQuery 493.71907697882773 us/op 351.6498450460216 us/op 1.40
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameVeryLongQuery01 1503.2544534622325 us/op 1081.3205987732158 us/op 1.39
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameCaseWhenThen 41.16143856682594 us/op 27.989815782589055 us/op 1.47
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameComplexQuery 363.5105488484568 us/op 249.27168297461358 us/op 1.46
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameComplexQuery01 168.170863990143 us/op 116.56269278869213 us/op 1.44
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameExceptUnionIntersectSixty 295.1048271781815 us/op 240.71094643243805 us/op 1.23
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameExec20Expressions 101.64657321993901 us/op 75.08101015198324 us/op 1.35
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameFromLet 63.6972659693944 us/op 38.93259108013664 us/op 1.64
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGraphPattern 68.90532098358224 us/op 41.825635200897565 us/op 1.65
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGraphPreFilters 107.12351596822225 us/op 70.50567319878863 us/op 1.52
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGroupLimit 63.712288285439726 us/op 37.906972196343204 us/op 1.68
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameLongFromSourceOrderBy 200.41056743103465 us/op 145.99840584460526 us/op 1.37
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameManyJoins 70.8224072765803 us/op 49.101738536073 us/op 1.44
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameNestedAggregates 143.12300286006337 us/op 100.01877787756129 us/op 1.43
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameNestedParen 111.59063341178985 us/op 90.79547070045658 us/op 1.23
org.partiql.jmh.benchmarks.ParserBenchmark.parseNamePivot 98.58712535914779 us/op 69.46104056607959 us/op 1.42
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuery15OrsAndLikes 246.5652179610832 us/op 183.67728159132386 us/op 1.34
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuery30Plus 85.32059913024739 us/op 67.94510816683268 us/op 1.26
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryFunc 213.65445513598428 us/op 138.36413012975012 us/op 1.54
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryFuncInProjection 126.41918307060811 us/op 102.2082967891798 us/op 1.24
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryList 110.99149891463341 us/op 85.32913294584084 us/op 1.30
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryNestedSelect 210.90218509966104 us/op 140.4476306285754 us/op 1.50
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuerySimple 21.438112720633786 us/op 14.67870936458337 us/op 1.46
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralJoins 106.89775872669527 us/op 79.5071049917702 us/op 1.34
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralProjections 83.0535139336651 us/op 62.154545726077195 us/op 1.34
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralSelect 155.76221343829758 us/op 119.53998964737264 us/op 1.30
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSimpleInsert 37.08539752665267 us/op 23.85382871476806 us/op 1.55
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeJoins 34.841857786877014 us/op 23.357384369837618 us/op 1.49
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeProjections 30.473554981228357 us/op 21.243775409834736 us/op 1.43
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeSelect 51.05844109763021 us/op 37.7603454543315 us/op 1.35
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameTimeZone 15.635037906924794 us/op 10.417372043087955 us/op 1.50
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameVeryLongQuery 578.9377567028818 us/op 456.46926377447426 us/op 1.27
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameVeryLongQuery01 1510.5870572394736 us/op 1300.272593625231 us/op 1.16
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLCompiler 14.673620588849014 us/op 10.429840521485431 us/op 1.41
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLEvaluator 2.9099337459729337 us/op 2.2829125538523876 us/op 1.27
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLParser 20.191156365983797 us/op 13.405477124461248 us/op 1.51

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

Please sign in to comment.