Skip to content

Commit

Permalink
Model experimental Schema (#1016)
Browse files Browse the repository at this point in the history
Adds an experimental model for PartiQL Schema; as part of working on this PR the following spec issues created as pre-requisite for finalizing the SchemaType:

- Define PartiQL Type semantics: https://github.com/partiql/partiql-spec/issues/49
- Create PartiQLSchema specification: https://github.com/partiql/partiql-docs/issues/37

With this change we can model the `SQL` and `NoSQL` schemas on collections with collection constraints. In addition, with this model, we're able to represent other schemas like nested, array, scalar, and possibly Graph schemas as collection of Graph types:

```
// Example of nested schema
<<{'a': INT, 'b': [{'x': DECIMAL, 'y': DECIMAL}]>>

// Example of Scalar schema
<<INT>>

// Example of Array schema
<<[INT, DECIMAL]>>
```

As StaticType currently does not model the Orderedness of Bag and List as
constraints, leaving the Orderedness to the BAG and LIST types themselves.

Why the experimental model is a collection?

We model the Schema (E.g. an SQL Table`) as a collection to solve the orthogonality problem that SQL has with Table (as entities that define the shape of data) which implicitly defines them as a collection.
  • Loading branch information
am357 authored Apr 11, 2023
1 parent b832e2e commit 25eace8
Show file tree
Hide file tree
Showing 8 changed files with 189 additions and 29 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
but brings it in conformance with the specification.
- Added `partiql-plan` package which contains experimental PartiQL Plan data structures.
- Initializes SPI Framework under `partiql-spi`.
- Models experimental `Schema` with constraints.
With this change, we're introducing `Tuple` and `Collection` constraints to be able to model the shape of data as
constraints.
- Introduces the PartiQLSchemaInferencer and PlannerSession
- The PlannerSession describes the current session and is used by the PartiQLSchemaInferencer.
- The PartiQLSchemaInferencer provides a function, `infer`, to aid in inferring the output `StaticType` of a
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ import org.partiql.types.StaticType
import org.partiql.types.StringType
import org.partiql.types.StructType
import org.partiql.types.SymbolType
import org.partiql.types.TupleConstraint

/**
* Types a given logical plan.
Expand Down Expand Up @@ -438,7 +439,8 @@ internal object PlanTyper : PlanRewriter<PlanTyper.Context>() {
fields = input.getTypeEnv().associate { attribute ->
attribute.name to attribute.type
},
contentClosed = true
contentClosed = true,
constraints = setOf(TupleConstraint.Open(false), TupleConstraint.UniqueAttrs(true))
)
)
)
Expand Down Expand Up @@ -648,7 +650,14 @@ internal object PlanTyper : PlanRewriter<PlanTyper.Context>() {
TODO("Duplicate keys in struct is not yet handled")
}

return node.copy(type = StructType(structFields.toMap(), contentClosed = closedContent), fields = fields)
return node.copy(
type = StructType(
structFields.toMap(),
contentClosed = closedContent,
constraints = setOf(TupleConstraint.Open(false), TupleConstraint.UniqueAttrs(true))
),
fields = fields
)
}

override fun visitArgValue(node: Arg.Value, ctx: Context): PlanNode {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import org.partiql.types.ListType
import org.partiql.types.StaticType
import org.partiql.types.StaticType.Companion.unionOf
import org.partiql.types.StructType
import org.partiql.types.TupleConstraint
import java.net.URL
import java.time.Instant
import java.util.stream.Stream
Expand Down Expand Up @@ -58,23 +59,30 @@ class PartiQLSchemaInferencerTests {
"id" to TYPE_AWS_DDB_PETS_ID,
"breed" to TYPE_AWS_DDB_PETS_BREED
),
contentClosed = true
contentClosed = true,
constraints = setOf(TupleConstraint.Open(false), TupleConstraint.UniqueAttrs(true))
)
)
val TABLE_AWS_DDB_B = BagType(
StructType(
fields = mapOf("identifier" to StaticType.STRING),
contentClosed = true
contentClosed = true,
constraints = setOf(TupleConstraint.Open(false), TupleConstraint.UniqueAttrs(true))
)
)
val TABLE_AWS_B_B = BagType(
StructType(
fields = mapOf("identifier" to StaticType.INT),
contentClosed = true
contentClosed = true,
constraints = setOf(TupleConstraint.Open(false), TupleConstraint.UniqueAttrs(true))
)
)
val TYPE_B_B_B_B_B = StaticType.INT
private val TYPE_B_B_B_B = StructType(mapOf("b" to TYPE_B_B_B_B_B), contentClosed = true)
private val TYPE_B_B_B_B = StructType(
mapOf("b" to TYPE_B_B_B_B_B),
contentClosed = true,
constraints = setOf(TupleConstraint.Open(false), TupleConstraint.UniqueAttrs(true))
)
val TYPE_B_B_B_C = StaticType.INT
val TYPE_B_B_C = StaticType.INT
val TYPE_B_B_B =
Expand All @@ -83,7 +91,8 @@ class PartiQLSchemaInferencerTests {
"b" to TYPE_B_B_B_B,
"c" to TYPE_B_B_B_C
),
contentClosed = true
contentClosed = true,
constraints = setOf(TupleConstraint.Open(false), TupleConstraint.UniqueAttrs(true))
)
}

Expand Down Expand Up @@ -127,7 +136,8 @@ class PartiQLSchemaInferencerTests {
expected = BagType(
StructType(
fields = mapOf("pets" to StaticType.ANY),
contentClosed = true
contentClosed = true,
constraints = setOf(TupleConstraint.Open(false), TupleConstraint.UniqueAttrs(true))
)
),
problemHandler = assertProblemExists {
Expand All @@ -144,7 +154,8 @@ class PartiQLSchemaInferencerTests {
expected = BagType(
StructType(
fields = mapOf("pets" to StaticType.ANY),
contentClosed = true
contentClosed = true,
constraints = setOf(TupleConstraint.Open(false), TupleConstraint.UniqueAttrs(true))
)
),
problemHandler = assertProblemExists {
Expand Down Expand Up @@ -195,7 +206,8 @@ class PartiQLSchemaInferencerTests {
expected = BagType(
StructType(
fields = mapOf("pets" to StaticType.ANY),
contentClosed = true
contentClosed = true,
constraints = setOf(TupleConstraint.Open(false), TupleConstraint.UniqueAttrs(true))
)
),
problemHandler = assertProblemExists {
Expand Down Expand Up @@ -539,7 +551,8 @@ class PartiQLSchemaInferencerTests {
expected = BagType(
StructType(
fields = mapOf("unknown_col" to AnyType()),
contentClosed = true
contentClosed = true,
constraints = setOf(TupleConstraint.Open(false), TupleConstraint.UniqueAttrs(true))
)
),
problemHandler = assertProblemExists {
Expand Down Expand Up @@ -618,7 +631,8 @@ class PartiQLSchemaInferencerTests {
expected = BagType(
StructType(
fields = mapOf("cast_breed" to unionOf(StaticType.INT, StaticType.MISSING)),
contentClosed = true
contentClosed = true,
constraints = setOf(TupleConstraint.Open(false), TupleConstraint.UniqueAttrs(true))
)
)
),
Expand All @@ -630,7 +644,8 @@ class PartiQLSchemaInferencerTests {
expected = BagType(
StructType(
fields = mapOf("upper_breed" to StaticType.STRING),
contentClosed = true
contentClosed = true,
constraints = setOf(TupleConstraint.Open(false), TupleConstraint.UniqueAttrs(true))
)
)
),
Expand All @@ -640,7 +655,8 @@ class PartiQLSchemaInferencerTests {
expected = BagType(
StructType(
fields = mapOf("a" to ListType(unionOf(StaticType.INT, StaticType.DECIMAL))),
contentClosed = true
contentClosed = true,
constraints = setOf(TupleConstraint.Open(false), TupleConstraint.UniqueAttrs(true))
)
)
),
Expand Down Expand Up @@ -672,7 +688,8 @@ class PartiQLSchemaInferencerTests {
"a" to StaticType.INT,
"b" to StaticType.DECIMAL,
),
contentClosed = true
contentClosed = true,
constraints = setOf(TupleConstraint.Open(false), TupleConstraint.UniqueAttrs(true))
)
)
),
Expand All @@ -685,7 +702,8 @@ class PartiQLSchemaInferencerTests {
"a" to StaticType.INT,
"b" to StaticType.DECIMAL,
),
contentClosed = true
contentClosed = true,
constraints = setOf(TupleConstraint.Open(false), TupleConstraint.UniqueAttrs(true))
)
)
),
Expand All @@ -698,7 +716,8 @@ class PartiQLSchemaInferencerTests {
"b" to StaticType.DECIMAL,
"a" to StaticType.INT,
),
contentClosed = true
contentClosed = true,
constraints = setOf(TupleConstraint.Open(false), TupleConstraint.UniqueAttrs(true))
)
)
),
Expand All @@ -713,7 +732,8 @@ class PartiQLSchemaInferencerTests {
"s" to StaticType.INT,
"m" to StaticType.INT,
),
contentClosed = true
contentClosed = true,
constraints = setOf(TupleConstraint.Open(false), TupleConstraint.UniqueAttrs(true))
)
)
),
Expand All @@ -728,7 +748,8 @@ class PartiQLSchemaInferencerTests {
"s" to StaticType.DECIMAL,
"m" to StaticType.DECIMAL,
),
contentClosed = true
contentClosed = true,
constraints = setOf(TupleConstraint.Open(false), TupleConstraint.UniqueAttrs(true))
)
)
),
Expand Down
75 changes: 68 additions & 7 deletions partiql-types/src/main/kotlin/org/partiql/types/StaticType.kt
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ sealed class StaticType {
LIST,
SEXP,
STRUCT,
BAG
BAG,
)
}

Expand Down Expand Up @@ -209,8 +209,20 @@ class UnsupportedTypeCheckException(message: String) : RuntimeException(message)
*/
sealed class CollectionType : SingleType() {
abstract val elementType: StaticType
abstract val constraints: Set<CollectionConstraint>

internal fun validateCollectionConstraints() {
if (elementType !is StructType && constraints.any { it is TupleCollectionConstraint }) {
throw UnsupportedTypeConstraint("Only collection of tuples can have tuple constraints")
}
}
}

/**
* Exception thrown when a [StaticType] is initialized with an unsupported type constraint.
*/
class UnsupportedTypeConstraint(message: String) : Exception(message)

// Single types from ExprValueType.

/**
Expand Down Expand Up @@ -396,8 +408,13 @@ data class ClobType(override val metas: Map<String, Any> = mapOf()) : SingleType
*/
data class ListType(
override val elementType: StaticType = ANY,
override val metas: Map<String, Any> = mapOf()
override val metas: Map<String, Any> = mapOf(),
override val constraints: Set<CollectionConstraint> = setOf()
) : CollectionType() {

init {
validateCollectionConstraints()
}
override fun flatten(): StaticType = this

override val allTypes: List<StaticType>
Expand All @@ -411,8 +428,12 @@ data class ListType(
*/
data class SexpType(
override val elementType: StaticType = ANY,
override val metas: Map<String, Any> = mapOf()
override val metas: Map<String, Any> = mapOf(),
override val constraints: Set<CollectionConstraint> = setOf(),
) : CollectionType() {
init {
validateCollectionConstraints()
}
override fun flatten(): StaticType = this

override val allTypes: List<StaticType>
Expand All @@ -426,8 +447,12 @@ data class SexpType(
*/
data class BagType(
override val elementType: StaticType = ANY,
override val metas: Map<String, Any> = mapOf()
override val metas: Map<String, Any> = mapOf(),
override val constraints: Set<CollectionConstraint> = setOf(),
) : CollectionType() {
init {
this.validateCollectionConstraints()
}
override fun flatten(): StaticType = this

override val allTypes: List<StaticType>
Expand All @@ -438,9 +463,18 @@ data class BagType(

data class StructType(
val fields: Map<String, StaticType> = mapOf(),
// `TupleConstraint` already has `Open` constraint which overlaps with `contentClosed`.
// In addition, `primaryKeyFields` must not exist on the `StructType` as `PrimaryKey`
// is a property of collection of tuples. As we have plans to define PartiQL types in
// more details it's foreseeable to have an refactor of our types in future and have a
// new definition of this type as `Tuple`. See the following issue for more details:
// https://github.com/partiql/partiql-spec/issues/49
// TODO remove `contentClosed` and `primaryKeyFields` if after finalizing our type specification we're
// still going with `StructType`.
val contentClosed: Boolean = false,
val primaryKeyFields: List<String> = listOf(),
override val metas: Map<String, Any> = mapOf()
val constraints: Set<TupleConstraint> = setOf(),
override val metas: Map<String, Any> = mapOf(),
) : SingleType() {
override fun flatten(): StaticType = this

Expand All @@ -451,8 +485,8 @@ data class StructType(
val entries = fields.entries
val firstSeveral = entries.toList().take(3).joinToString { "${it.key}: ${it.value}" }
return when {
entries.size <= 3 -> "struct($firstSeveral)"
else -> "struct($firstSeveral, ... and ${entries.size - 3} other field(s))"
entries.size <= 3 -> "struct($firstSeveral, $constraints)"
else -> "struct($firstSeveral, ... and ${entries.size - 3} other field(s), $constraints)"
}
}
}
Expand Down Expand Up @@ -518,6 +552,33 @@ sealed class NumberConstraint {
}
}

/**
* Represents Tuple constraints; this is still experimental.
* and subject to change upon finalization of the following:
* - https://github.com/partiql/partiql-spec/issues/49
* - https://github.com/partiql/partiql-docs/issues/37
*/
sealed class TupleConstraint {
data class UniqueAttrs(val value: Boolean) : TupleConstraint()
data class Open(val value: Boolean) : TupleConstraint()
}

/**
* An Interface for constraints that are only applicable to collection of tuples, e.g. `PrimaryKey`.
*/
interface TupleCollectionConstraint

/**
* Represents Collection constraints; this is still experimental.
* and subject to change upon finalization of the following:
* - https://github.com/partiql/partiql-spec/issues/49
* - https://github.com/partiql/partiql-docs/issues/37
*/
sealed class CollectionConstraint {
data class PrimaryKey(val keys: Set<String>) : TupleCollectionConstraint, CollectionConstraint()
data class PartitionKey(val keys: Set<String>) : TupleCollectionConstraint, CollectionConstraint()
}

internal fun StaticType.isNullOrMissing(): Boolean = (this is NullType || this is MissingType)
internal fun StaticType.isNumeric(): Boolean = (this is IntType || this is FloatType || this is DecimalType)
internal fun StaticType.isText(): Boolean = (this is SymbolType || this is StringType)
Expand Down
Loading

1 comment on commit 25eace8

@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: 25eace8 Previous: b832e2e Ratio
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLCompiler15 121.9857448994516 us/op 178.78600274931233 us/op 0.68
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLCompiler30 268.8112835077664 us/op 418.5568370390489 us/op 0.64
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator15 510537.44827500003 us/op 533443.6401750001 us/op 0.96
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator30 997945.601575 us/op 1222446.32815 us/op 0.82
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator30WithData10 9893814.1132 us/op 12231036.8001 us/op 0.81
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLParser15 208.89838990314723 us/op 301.8507932113369 us/op 0.69
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLParser30 404.72119532100913 us/op 560.039721438388 us/op 0.72
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameCaseWhenThen 45.47328879680108 us/op 84.33832038029709 us/op 0.54
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery 61.168558412213656 us/op 99.5597883617382 us/op 0.61
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery01 305.8527849497845 us/op 466.8255558568085 us/op 0.66
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery02 534.3976369584485 us/op 753.0316382423981 us/op 0.71
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameExceptUnionIntersectSixty 209.55217088833493 us/op 312.54625044359665 us/op 0.67
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameExec20Expressions 67.29747017489123 us/op 105.64100637704618 us/op 0.64
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameFromLet 47.84055283032348 us/op 84.01081008347367 us/op 0.57
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGraphPattern 47.20017912276939 us/op 78.44738071797772 us/op 0.60
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGraphPreFilters 71.00340453476154 us/op 129.3394864915612 us/op 0.55
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGroupLimit 55.40703229837361 us/op 102.84805474327695 us/op 0.54
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameLongFromSourceOrderBy 74.70593470005869 us/op 107.93428790746259 us/op 0.69
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameManyJoins 63.2347954582165 us/op 116.52321590854274 us/op 0.54
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameNestedAggregates 108.20808835111718 us/op 174.73509874558727 us/op 0.62
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameNestedParen 22.192997513776874 us/op 35.60464769671231 us/op 0.62
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNamePivot 69.69960752264195 us/op 123.90090448348683 us/op 0.56
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuery15OrsAndLikes 215.03152783548154 us/op 373.91275691622326 us/op 0.58
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuery30Plus 122.07279766942709 us/op 181.02405922892402 us/op 0.67
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryFunc 51.157524471722425 us/op 80.87059795253256 us/op 0.63
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryFuncInProjection 111.1181592504636 us/op 173.59678448428272 us/op 0.64
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryList 85.46290406546909 us/op 135.2061306946728 us/op 0.63
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryNestedSelect 747.2058433121742 us/op 1042.0312109092433 us/op 0.72
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuerySimple 20.573387210510298 us/op 33.073410463225734 us/op 0.62
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralJoins 27.006305381099516 us/op 45.67430546690951 us/op 0.59
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralProjections 79.431949872434 us/op 125.50488466135411 us/op 0.63
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralSelect 207.20278154416943 us/op 314.20100319546737 us/op 0.66
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSimpleInsert 34.13190802788205 us/op 61.06955608547071 us/op 0.56
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeJoins 26.692432506653102 us/op 45.47182811636012 us/op 0.59
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeProjections 33.847189040871555 us/op 58.23543510744506 us/op 0.58
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeSelect 55.44217127443388 us/op 96.97021392408851 us/op 0.57
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameTimeZone 29.818293427989524 us/op 51.57560265408532 us/op 0.58
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameVeryLongQuery 345.66533154087455 us/op 514.2790698117554 us/op 0.67
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameVeryLongQuery01 1065.8632303988825 us/op 1610.2007579330696 us/op 0.66
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameCaseWhenThen 30.72269726471648 us/op 46.370498613502676 us/op 0.66
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameComplexQuery 274.3167914761209 us/op 408.6743469838473 us/op 0.67
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameComplexQuery01 127.03269052555109 us/op 190.8027002142374 us/op 0.67
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameExceptUnionIntersectSixty 239.9242773852905 us/op 326.8285820342725 us/op 0.73
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameExec20Expressions 72.14097486125576 us/op 102.41114064236919 us/op 0.70
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameFromLet 42.05182326530868 us/op 67.92023264750655 us/op 0.62
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGraphPattern 44.03225069366611 us/op 77.23922316612486 us/op 0.57
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGraphPreFilters 76.72195295328942 us/op 126.10887684370172 us/op 0.61
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGroupLimit 36.97032203068658 us/op 64.83529325147185 us/op 0.57
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameLongFromSourceOrderBy 140.06743365939238 us/op 216.3515257261985 us/op 0.65
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameManyJoins 50.17094319795292 us/op 77.92382218865421 us/op 0.64
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameNestedAggregates 105.24405772387522 us/op 161.2090667280399 us/op 0.65
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameNestedParen 87.65243428382931 us/op 126.85441327804884 us/op 0.69
org.partiql.jmh.benchmarks.ParserBenchmark.parseNamePivot 74.23289939366664 us/op 109.72751656784507 us/op 0.68
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuery15OrsAndLikes 194.11802949303117 us/op 277.2373013924747 us/op 0.70
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuery30Plus 67.94108157528885 us/op 94.62623695211519 us/op 0.72
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryFunc 146.1932361940414 us/op 235.8605469504585 us/op 0.62
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryFuncInProjection 107.3976116110103 us/op 144.98950345556264 us/op 0.74
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryList 90.97521499673954 us/op 122.82032053929728 us/op 0.74
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryNestedSelect 143.60143976427483 us/op 238.27476373088575 us/op 0.60
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuerySimple 14.807963925174391 us/op 22.810944493060383 us/op 0.65
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralJoins 83.8119598056986 us/op 121.21837177794266 us/op 0.69
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralProjections 61.93828810191299 us/op 91.57925726797724 us/op 0.68
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralSelect 127.41665012998374 us/op 178.03523965376456 us/op 0.72
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSimpleInsert 24.080758645591843 us/op 38.77254433103054 us/op 0.62
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeJoins 24.23460592364361 us/op 37.90114221890608 us/op 0.64
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeProjections 22.057052249798524 us/op 34.05643531368401 us/op 0.65
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeSelect 41.2478380132652 us/op 61.10559879142452 us/op 0.68
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameTimeZone 11.073561874311373 us/op 17.61333649453383 us/op 0.63
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameVeryLongQuery 478.1194188147093 us/op 645.1519419256034 us/op 0.74
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameVeryLongQuery01 1312.237803568824 us/op 1831.2364575683 us/op 0.72
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLCompiler 9.966887185556171 us/op 17.206178074667466 us/op 0.58
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLEvaluator 2.3622059068002756 us/op 3.4625804730030305 us/op 0.68
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLParser 13.89784004916705 us/op 23.192171970688143 us/op 0.60

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

Please sign in to comment.