-
Notifications
You must be signed in to change notification settings - Fork 62
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1177 from partiql/coverage-rebase
Initializes PartiQL's Code Coverage library
- Loading branch information
Showing
48 changed files
with
3,601 additions
and
64 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
# PartiQL Code Coverage | ||
|
||
PartiQL has released a way for you to write unit tests and gather code coverage statistics for your PartiQL source | ||
under `org.partiql.coverage`! | ||
|
||
## Writing Tests | ||
|
||
In order to write tests, you'll need to use `@PartiQLTest` in combination with `PartiQLTestProvider` and `PartiQLTestCase`. Here's | ||
an example: | ||
|
||
```kotlin | ||
/** | ||
* Here's an example of a test method. This method will get loaded up by JUnit 5's | ||
* test framework and be executed. | ||
* | ||
* Note that each test method annotated with @PartiQLTest needs to take in an implementation of a PartiQLTestCase and a PartiQLResult. | ||
* Note that PartiQLResult is a sealed interface -- you can opt to assume the variant that will be returned, or you can | ||
* just take in a PartiQLResult. | ||
*/ | ||
@PartiQLTest(provider = SimpleTestProvider::class) | ||
fun simpleTest(tc: SimpleTestCase, result: PartiQLResult.Value) { | ||
val exprValue = result.value | ||
assertEquals(ExprValueType.BOOL, exprValue.type) | ||
assertEquals(tc.expected, exprValue.booleanValue()) | ||
} | ||
|
||
/** | ||
* PartiQLTestProviders represent a set of tests aimed at testing a single query. | ||
*/ | ||
class SimpleTestProvider : PartiQLTestProvider { | ||
override val statement: String = "EXISTS(SELECT * FROM << x >> AS t WHERE t < 7)" | ||
override fun getTestCases(): List<PartiQLTestCase> = listOf( | ||
SimpleTestCase(x = 6, expected = true), | ||
SimpleTestCase(x = 8, expected = false) | ||
) | ||
} | ||
|
||
/** | ||
* An implementation of a PartiQLTestCase. Note that we pass in | ||
*/ | ||
class SimpleTestCase(private val x: Int, val expected: Boolean) : PartiQLTestCase { | ||
override val session: EvaluationSession = EvaluationSession.builder { | ||
globals(mapOf("x" to x)) | ||
} | ||
} | ||
``` | ||
|
||
Note that, similar to how it is written above, all test methods using `@PartiQLTest` need two parameters (the first being | ||
an implementation of `PartiQLTestCase` and the second being `PartiQLResult` or one of its variants). | ||
|
||
## JUnit Integration | ||
|
||
`@PartiQL` integrates seamlessly with JUnit 5, and therefore, you can run tests directly from your IDE and use other JUnit 5 | ||
annotations such as `@Ignore`, `@Disabled`, `@Timeout`, and more, | ||
|
||
## Other Features | ||
|
||
PartiQL Code Coverage allows you to generate LCOV reports for branch and branch-condition coverage, generate HTML reports, | ||
and fail builds on configured thresholds. | ||
|
||
## Getting Started | ||
|
||
To learn more, please refer to [PartiQL Code Coverage's README](https://github.com/partiql/partiql-lang-kotlin/tree/main/partiql-coverage)! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
distributionBase=GRADLE_USER_HOME | ||
distributionPath=wrapper/dists | ||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip | ||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip | ||
zipStoreBase=GRADLE_USER_HOME | ||
zipStorePath=wrapper/dists |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,201 @@ | ||
# PartiQL Code Coverage | ||
|
||
PartiQL's Code Coverage library stands as a mechanism for risk mitigation by ensuring that your PartiQL source is | ||
thoroughly tested before deploying to your production environment. | ||
|
||
## What is Code Coverage? | ||
|
||
Code coverage is a metric to help you understand how much of your source is tested. There are several types of Code | ||
Coverage including **Branch Coverage** and **Branch-Condition** Coverage. | ||
|
||
### Branch Coverage | ||
|
||
**Branch Coverage** is a metric calculated by determining how many *branches* are in a particular PartiQL query and | ||
how many of those branches were executed. A branch is the result of a control-flow expression, such as an `IF` statement | ||
in many programming languages (which results in two branches -- `true` and `false`). | ||
|
||
Consider the following PartiQL statement: | ||
```partiql | ||
SELECT * | ||
FROM t | ||
WHERE | ||
t.a > t.b | ||
AND | ||
t.b > t.c | ||
``` | ||
In the above PartiQL statement, there is 1 demonstrated type of control flow (the `WHERE` clause). Given that each | ||
control-flow expression can lead to two branches, this PartiQL statement contains 2 branches. | ||
|
||
**Note**: There are other expressions that dictate control flow, such as `CASE-WHEN`, `HAVING`, `COALESCE`, and `NULLIF`. PartiQL | ||
currently supports `WHERE`, `HAVING`, and `CASE-WHEN` (`COALESCE` and `NULLIF` are not supported, however, they may be | ||
supported in future versions). | ||
|
||
Here's a slightly more complicated example: | ||
|
||
```partiql | ||
SELECT | ||
measurement AS measurement, | ||
CASE (measurement > 0) | ||
WHEN true THEN 'measurement is positive!' | ||
WHEN false THEN 'measurement is negative!' | ||
END AS measurementDescription, | ||
CASE | ||
WHEN (complexity < 0) THEN 'complexity is negative!' | ||
WHEN (complexity = 0) THEN 'complexity is zero!' | ||
WHEN (complexity > 0) THEN 'complexity is positive!' | ||
END AS complexityDescription | ||
FROM | ||
t AS t | ||
WHERE | ||
t.radius > 0 | ||
GROUP BY | ||
t.measurement AS measurement, | ||
t.complexity AS complexity | ||
HAVING | ||
measurement != 0; | ||
``` | ||
|
||
In the above example, there are 14 branches. | ||
|
||
## Branch-Condition Coverage | ||
|
||
**Branch-Condition Coverage** is a metric calculated by determining how many *branch-conditions* are in a particular PartiQL statement and | ||
how many of those branch-conditions were executed. A branch-condition is the result of a boolean expression contained | ||
within a control-flow expression, such as an `IF` statement in many programming languages. Consider the following example: | ||
```partiql | ||
SELECT * | ||
FROM t | ||
WHERE | ||
t.a > t.b | ||
AND | ||
t.b < t.c | ||
``` | ||
|
||
In the above PartiQL statement, there is one control-flow expression (the `WHERE` clause). The control-flow expression | ||
results in two branches, however, there are 3 expressions dictating the result of the `WHERE` clause, specifically: the | ||
greater-than expression, the `AND` expression, and the less-than expression. Now, depending on what typing mode you are using, | ||
each one of these expressions can result in 3 or 4 outcomes (`TRUE`, `FALSE`, `NULL`, or `MISSING`). | ||
- If you are in `PERMISSIVE` mode, each of these expressions could potentially return `TRUE`, `FALSE`, `NULL`, or `MISSING`. In | ||
the above example, this would result in 12 branch-conditions. | ||
- If you are not in `PERMISSIVE` mode, each of these expressions could potentially return `TRUE`, `FALSE`, or `MISSING`. In | ||
the above example, this would result in 9 branch-conditions. | ||
|
||
## Things to Note | ||
|
||
1. While PartiQL’s current evaluator does not statically resolve the types of expressions, it is unknown whether a | ||
specific branch-condition might return TRUE, FALSE, NULL, or MISSING. Therefore, the existing Evaluating Compiler will, | ||
based on the typing mode, assume that all boolean expressions can return ALL possible outcomes. In the future, when | ||
constant-folding and static-typing are part of the planning process, this will be mitigated. | ||
2. Similar to #1, as the current evaluate does not statically resolve the types of expressions, functions and variable | ||
references will not be part of a Branch-Condition Coverage result. However, in the future, support for this will be added. | ||
3. As there is not a consensus regarding how `COALESCE` and `NULLIF` will be represented in the future evaluator, | ||
these two SQL-defined functions currently do not create branches. However, this is subject to change in future releases. | ||
- **Additional note**: While `COALESCE` and `NULLIF` are not supported for branch creation, the following clauses are supported: | ||
`WHERE`, `HAVING`, and `CASE-WHEN`. | ||
|
||
## Requirements | ||
|
||
- Must be using JUnit5. | ||
|
||
## Build Configuration | ||
|
||
### JUnit5 Configuration | ||
|
||
Please follow the directions outlined in [JUnit5's User Guide](https://junit.org/junit5/docs/current/user-guide/). | ||
|
||
### Adding Dependencies | ||
|
||
```kotlin | ||
// File: build.gradle.kts | ||
const val LATEST_VERSION = "0.13.0" // Please search Maven Central for latest version | ||
dependencies { | ||
testImplementation("org.partiql:partiql-coverage:$LATEST_VERSION") | ||
} | ||
``` | ||
|
||
### Adding Coverage Thresholds | ||
|
||
The PartiQL Code Coverage library allows consumers to fail their local builds if they haven't reached | ||
a minimum branch coverage. See below: | ||
```kotlin | ||
// File: build.gradle.kts | ||
tasks.test { | ||
// Branch Configurations | ||
systemProperty("partiql.coverage.lcov.branch.enabled", true) | ||
systemProperty("partiql.coverage.lcov.branch.report.path", "$buildDir/partiql/coverage/branch/lcov.info") | ||
systemProperty("partiql.coverage.lcov.branch.html.dir", "$buildDir/reports/partiql/branch/test") | ||
systemProperty("partiql.coverage.lcov.branch.threshold.min", 0.75) | ||
|
||
// Branch Condition Configurations | ||
systemProperty("partiql.coverage.lcov.branch-condition.enabled", true) | ||
systemProperty("partiql.coverage.lcov.branch-condition.report.path", "$buildDir/partiql/coverage/condition/lcov.info") | ||
systemProperty("partiql.coverage.lcov.branch-condition.html.dir", "$buildDir/reports/partiql/condition/test") | ||
systemProperty("partiql.coverage.lcov.branch-condition.threshold.min", 0.75) | ||
} | ||
``` | ||
|
||
### All System Properties | ||
| Key | Value Type | Description | Example Value | | ||
| --- | ---------- | ----------- | ------------- | | ||
| partiql.coverage.lcov.branch.enabled | BOOLEAN | Specifies that LCOV reporting should be enabled | true | | ||
| partiql.coverage.lcov.branch.report.path | STRING | Required if LCOV is enabled. Specifies where to place the LCOV report. | build/partiql/coverage/branch/lcov.info | | ||
| partiql.coverage.lcov.branch.html.dir | STRING | Specifies where to output the JGenHTML output. | build/reports/partiql/branch/test | | ||
| partiql.coverage.lcov.branch.threshold.min | DECIMAL | Specifies the minimum percentage (in decimal form) for branch coverage. Builds will fail when the threshold is not met. | 0.75 | | ||
|
||
| Key | Value Type | Description | Example Value | | ||
| --- | ---------- | ----------- | ------------- | | ||
| partiql.coverage.lcov.branch-condition.enabled | BOOLEAN | Specifies that LCOV reporting should be enabled | true | | ||
| partiql.coverage.lcov.branch-condition.report.path | STRING | Required if LCOV is enabled. Specifies where to place the LCOV report. | build/partiql/coverage/branch/lcov.info | | ||
| partiql.coverage.lcov.branch-condition.html.dir | STRING | Specifies where to output the JGenHTML output. | build/reports/partiql/branch/test | | ||
| partiql.coverage.lcov.branch-condition.threshold.min | DECIMAL | Specifies the minimum percentage (in decimal form) for branch coverage. Builds will fail when the threshold is not met. | 0.75 | | ||
|
||
## API Usage | ||
|
||
Now, we can actually begin writing tests! See the below Kotlin example: | ||
|
||
```kotlin | ||
/** | ||
* Here's an example of a test method. This method will get loaded up by JUnit 5's | ||
* test framework and be executed. | ||
* | ||
* Note that each test method annotated with @PartiQLTest needs to take in an implementation of a PartiQLTestCase and a PartiQLResult. | ||
* Note that PartiQLResult is a sealed interface -- you can opt to assume the variant that will be returned, or you can | ||
* just take in a PartiQLResult. | ||
*/ | ||
@PartiQLTest(provider = SimpleTestProvider::class) | ||
fun simpleTest(tc: SimpleTestCase, result: PartiQLResult.Value) { | ||
val exprValue = result.value | ||
assertEquals(ExprValueType.BOOL, exprValue.type) | ||
assertEquals(tc.expected, exprValue.booleanValue()) | ||
} | ||
|
||
/** | ||
* PartiQLTestProviders represent a set of tests aimed at testing a single query. | ||
*/ | ||
class SimpleTestProvider : PartiQLTestProvider { | ||
override val statement: String = "EXISTS(SELECT * FROM << x >> AS t WHERE t < 7)" | ||
override fun getTestCases(): List<PartiQLTestCase> = listOf( | ||
SimpleTestCase(x = 6, expected = true), | ||
SimpleTestCase(x = 8, expected = false) | ||
) | ||
} | ||
|
||
/** | ||
* An implementation of a PartiQLTestCase. | ||
*/ | ||
class SimpleTestCase(private val x: Int, val expected: Boolean) : PartiQLTestCase { | ||
override val session: EvaluationSession = EvaluationSession.builder { | ||
globals(mapOf("x" to x)) | ||
} | ||
} | ||
``` | ||
|
||
In the above example, we are testing a PartiQL query: `x < 7`. Note that the `SimpleTestProvider` provides two test cases: | ||
1. The first makes the variable `x` equal to 6. Therefore, the PartiQL query is expected to return true. | ||
2. The second makes the variable `x` equal to 8. Therefore, the PartiQL query is expected to return false. | ||
|
||
## Report Generation | ||
|
||
The current and only reporting format supported by PartiQL Code Coverage is LCOV. Upon the execution of test methods annotated | ||
with `@PartiQLTest`, the PartiQL Code Coverage library will generate a report specified by the corresponding system property. | ||
See the `All System Properties` further above for more information. |
Oops, something went wrong.
48cfc76
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
JMH Benchmark
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLCompiler15
178.72880044921402
us/op173.28623180313798
us/op1.03
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLCompiler30
343.1995335721582
us/op327.17677234913214
us/op1.05
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator15
646088.6135750001
us/op625843.1439250001
us/op1.03
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator30
1321858.9825
us/op1241850.4539499998
us/op1.06
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLEvaluator30WithData10
13410078.458649997
us/op12015138.010550002
us/op1.12
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLParser15
259.6142527365643
us/op263.87123715049756
us/op0.98
org.partiql.jmh.benchmarks.MultipleLikeBenchmark.testPartiQLParser30
531.9604459883622
us/op469.2507666803398
us/op1.13
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameCaseWhenThen
80.64383732659414
us/op79.09451365326231
us/op1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery
95.70877075206238
us/op93.96525954920098
us/op1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery01
474.92882654587163
us/op458.12290510937476
us/op1.04
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameComplexQuery02
775.9352615866673
us/op763.0178546749032
us/op1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameExceptUnionIntersectSixty
300.73796440129786
us/op288.4438167275681
us/op1.04
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameExec20Expressions
101.28670752545915
us/op103.20373411905044
us/op0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameFromLet
82.8236997836789
us/op80.60459158243673
us/op1.03
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGraphPattern
80.3406339923839
us/op79.05286214796406
us/op1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGraphPreFilters
136.91368842692088
us/op124.80667234495418
us/op1.10
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameGroupLimit
90.98976329103556
us/op83.89035416048063
us/op1.08
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameLongFromSourceOrderBy
103.87608944430455
us/op99.09098959770185
us/op1.05
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameManyJoins
111.61499123819821
us/op113.91576317335708
us/op0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameNestedAggregates
172.25975587804848
us/op169.48573307879698
us/op1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameNestedParen
33.93050331659701
us/op33.484002626841615
us/op1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNamePivot
114.740581655814
us/op117.04190338879792
us/op0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuery15OrsAndLikes
370.33814594847115
us/op360.3031987154989
us/op1.03
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuery30Plus
168.7217122612772
us/op176.91015309760238
us/op0.95
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryFunc
84.77010997910915
us/op85.77358050680908
us/op0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryFuncInProjection
181.29437584702512
us/op187.30594282034042
us/op0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryList
130.96025173354622
us/op125.43075184512354
us/op1.04
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQueryNestedSelect
1003.7138114060679
us/op1068.697552079768
us/op0.94
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameQuerySimple
31.433866051209954
us/op29.206483918454133
us/op1.08
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralJoins
43.325605110072104
us/op45.99859345913034
us/op0.94
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralProjections
116.65204196735635
us/op112.69498675864494
us/op1.04
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSeveralSelect
322.7915741774219
us/op317.959312227876
us/op1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSimpleInsert
57.58120271559486
us/op57.81775283159415
us/op1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeJoins
42.57099183364664
us/op43.8155606884586
us/op0.97
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeProjections
54.86487935475044
us/op53.89091972560946
us/op1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameSomeSelect
94.26490753485137
us/op88.96296577061756
us/op1.06
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameTimeZone
46.46920995719104
us/op44.33445646106494
us/op1.05
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameVeryLongQuery
484.7345537872412
us/op488.72043774886254
us/op0.99
org.partiql.jmh.benchmarks.ParserBenchmark.parseFailNameVeryLongQuery01
1597.3379582614539
us/op1592.3638968678356
us/op1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameCaseWhenThen
41.66209978907222
us/op42.30665918588207
us/op0.98
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameComplexQuery
354.3540294170699
us/op341.5538907839149
us/op1.04
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameComplexQuery01
164.05898099096774
us/op163.73872919696154
us/op1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameExceptUnionIntersectSixty
304.079712586038
us/op303.7135109093832
us/op1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameExec20Expressions
88.20110026608293
us/op84.97989158443221
us/op1.04
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameFromLet
60.188883763064396
us/op57.098532521534274
us/op1.05
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGraphPattern
68.95324416130804
us/op68.5331841889762
us/op1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGraphPreFilters
114.05365678537612
us/op114.34625396840484
us/op1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameGroupLimit
60.3836461511552
us/op59.739002737833616
us/op1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameLongFromSourceOrderBy
191.93420123189975
us/op204.7493763846791
us/op0.94
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameManyJoins
74.28403577655229
us/op71.06794766227627
us/op1.05
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameNestedAggregates
152.32632600085486
us/op147.75429693542972
us/op1.03
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameNestedParen
115.50325203165656
us/op126.2859248281035
us/op0.91
org.partiql.jmh.benchmarks.ParserBenchmark.parseNamePivot
105.83884629591162
us/op100.64832559999407
us/op1.05
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuery15OrsAndLikes
263.7414506441145
us/op264.71938524337764
us/op1.00
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuery30Plus
87.41819650195751
us/op84.32234041467498
us/op1.04
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryFunc
225.2646197773221
us/op207.31802076337604
us/op1.09
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryFuncInProjection
141.52659854881705
us/op130.34248267485685
us/op1.09
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryList
116.66656592626506
us/op115.41199185332263
us/op1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQueryNestedSelect
217.7716228736805
us/op207.32708423618
us/op1.05
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameQuerySimple
22.25138069569764
us/op21.515287772190554
us/op1.03
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralJoins
117.20917517228456
us/op108.99888381112365
us/op1.08
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralProjections
87.83962434306282
us/op84.55175457882844
us/op1.04
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSeveralSelect
163.17392933618441
us/op156.3411494036756
us/op1.04
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSimpleInsert
37.91607054463147
us/op36.622111396618685
us/op1.04
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeJoins
36.217590051633344
us/op33.98588454166591
us/op1.07
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeProjections
31.02896340158524
us/op30.748723129748775
us/op1.01
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameSomeSelect
55.12300074840167
us/op54.09479883190802
us/op1.02
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameTimeZone
16.971017645704023
us/op17.622569222369595
us/op0.96
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameVeryLongQuery
615.3080985078745
us/op599.4473055653195
us/op1.03
org.partiql.jmh.benchmarks.ParserBenchmark.parseNameVeryLongQuery01
1680.0652641744878
us/op1608.0871193689375
us/op1.04
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLCompiler
16.547893402474184
us/op15.875451706478168
us/op1.04
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLEvaluator
3.1213010548189972
us/op3.142061017468475
us/op0.99
org.partiql.jmh.benchmarks.PartiQLBenchmark.testPartiQLParser
21.330738289912652
us/op19.52609888137622
us/op1.09
This comment was automatically generated by workflow using github-action-benchmark.