Skip to content

Commit 0ffb6d9

Browse files
committed
Renames org.partiql.engine to org.partiql.eval
1 parent 27848a5 commit 0ffb6d9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+4424
-38
lines changed
File renamed without changes.

partiql-engine/src/main/kotlin/org/partiql/engine/PartiQLEngine.kt partiql-eval/src/main/kotlin/org/partiql/eval/PartiQLEngine.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package org.partiql.engine
1+
package org.partiql.eval
22

3-
import org.partiql.engine.impl.PartiQLEngineDefault
3+
import org.partiql.eval.impl.PartiQLEngineDefault
44
import org.partiql.plan.PartiQLPlan
55
import org.partiql.spi.Plugin
66
import org.partiql.value.PartiQLValue

partiql-engine/src/main/kotlin/org/partiql/engine/impl/PartiQLEngineDefault.kt partiql-eval/src/main/kotlin/org/partiql/eval/impl/PartiQLEngineDefault.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package org.partiql.engine.impl
1+
package org.partiql.eval.impl
22

3-
import org.partiql.engine.PartiQLEngine
3+
import org.partiql.eval.PartiQLEngine
44
import org.partiql.plan.PartiQLPlan
55
import org.partiql.value.PartiQLValueExperimental
66

partiql-engine/src/main/kotlin/org/partiql/engine/impl/PhysicalNode.kt partiql-eval/src/main/kotlin/org/partiql/eval/impl/PhysicalNode.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.partiql.engine.impl
1+
package org.partiql.eval.impl
22

33
import org.partiql.value.PartiQLValue
44
import org.partiql.value.PartiQLValueExperimental

partiql-engine/src/main/kotlin/org/partiql/engine/impl/PlanToPhysical.kt partiql-eval/src/main/kotlin/org/partiql/eval/impl/PlanToPhysical.kt

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
package org.partiql.engine.impl
1+
package org.partiql.eval.impl
22

3-
import org.partiql.engine.impl.expression.Collection
4-
import org.partiql.engine.impl.expression.Literal
5-
import org.partiql.engine.impl.expression.Select
6-
import org.partiql.engine.impl.expression.Struct
7-
import org.partiql.engine.impl.expression.Variable
8-
import org.partiql.engine.impl.relation.Projection
9-
import org.partiql.engine.impl.relation.Scan
3+
import org.partiql.eval.impl.expression.Collection
4+
import org.partiql.eval.impl.expression.Literal
5+
import org.partiql.eval.impl.expression.Select
6+
import org.partiql.eval.impl.expression.Struct
7+
import org.partiql.eval.impl.expression.Variable
8+
import org.partiql.eval.impl.relation.Projection
9+
import org.partiql.eval.impl.relation.Scan
1010
import org.partiql.plan.PartiQLPlan
1111
import org.partiql.plan.PlanNode
1212
import org.partiql.plan.Rel

partiql-engine/src/main/kotlin/org/partiql/engine/impl/Record.kt partiql-eval/src/main/kotlin/org/partiql/eval/impl/Record.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.partiql.engine.impl
1+
package org.partiql.eval.impl
22

33
import org.partiql.value.PartiQLValue
44
import org.partiql.value.PartiQLValueExperimental

partiql-engine/src/main/kotlin/org/partiql/engine/impl/expression/Collection.kt partiql-eval/src/main/kotlin/org/partiql/eval/impl/expression/Collection.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package org.partiql.engine.impl.expression
1+
package org.partiql.eval.impl.expression
22

3-
import org.partiql.engine.impl.PhysicalNode
4-
import org.partiql.engine.impl.Record
3+
import org.partiql.eval.impl.PhysicalNode
4+
import org.partiql.eval.impl.Record
55
import org.partiql.value.PartiQLValue
66
import org.partiql.value.PartiQLValueExperimental
77
import org.partiql.value.bagValue

partiql-engine/src/main/kotlin/org/partiql/engine/impl/expression/Literal.kt partiql-eval/src/main/kotlin/org/partiql/eval/impl/expression/Literal.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package org.partiql.engine.impl.expression
1+
package org.partiql.eval.impl.expression
22

3-
import org.partiql.engine.impl.PhysicalNode
4-
import org.partiql.engine.impl.Record
3+
import org.partiql.eval.impl.PhysicalNode
4+
import org.partiql.eval.impl.Record
55
import org.partiql.value.PartiQLValue
66
import org.partiql.value.PartiQLValueExperimental
77

partiql-engine/src/main/kotlin/org/partiql/engine/impl/expression/Select.kt partiql-eval/src/main/kotlin/org/partiql/eval/impl/expression/Select.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package org.partiql.engine.impl.expression
1+
package org.partiql.eval.impl.expression
22

3-
import org.partiql.engine.impl.PhysicalNode
4-
import org.partiql.engine.impl.Record
3+
import org.partiql.eval.impl.PhysicalNode
4+
import org.partiql.eval.impl.Record
55
import org.partiql.value.PartiQLValue
66
import org.partiql.value.PartiQLValueExperimental
77
import org.partiql.value.bagValue

partiql-engine/src/main/kotlin/org/partiql/engine/impl/expression/Struct.kt partiql-eval/src/main/kotlin/org/partiql/eval/impl/expression/Struct.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package org.partiql.engine.impl.expression
1+
package org.partiql.eval.impl.expression
22

3-
import org.partiql.engine.impl.PhysicalNode
4-
import org.partiql.engine.impl.Record
3+
import org.partiql.eval.impl.PhysicalNode
4+
import org.partiql.eval.impl.Record
55
import org.partiql.value.PartiQLValue
66
import org.partiql.value.PartiQLValueExperimental
77
import org.partiql.value.StringValue

partiql-engine/src/main/kotlin/org/partiql/engine/impl/expression/Variable.kt partiql-eval/src/main/kotlin/org/partiql/eval/impl/expression/Variable.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package org.partiql.engine.impl.expression
1+
package org.partiql.eval.impl.expression
22

3-
import org.partiql.engine.impl.PhysicalNode
4-
import org.partiql.engine.impl.Record
3+
import org.partiql.eval.impl.PhysicalNode
4+
import org.partiql.eval.impl.Record
55
import org.partiql.value.PartiQLValue
66
import org.partiql.value.PartiQLValueExperimental
77

partiql-engine/src/main/kotlin/org/partiql/engine/impl/relation/Projection.kt partiql-eval/src/main/kotlin/org/partiql/eval/impl/relation/Projection.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package org.partiql.engine.impl.relation
1+
package org.partiql.eval.impl.relation
22

3-
import org.partiql.engine.impl.PhysicalNode
4-
import org.partiql.engine.impl.Record
3+
import org.partiql.eval.impl.PhysicalNode
4+
import org.partiql.eval.impl.Record
55
import org.partiql.value.PartiQLValueExperimental
66

77
internal class Projection(

partiql-engine/src/main/kotlin/org/partiql/engine/impl/relation/Scan.kt partiql-eval/src/main/kotlin/org/partiql/eval/impl/relation/Scan.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package org.partiql.engine.impl.relation
1+
package org.partiql.eval.impl.relation
22

3-
import org.partiql.engine.impl.PhysicalNode
4-
import org.partiql.engine.impl.Record
3+
import org.partiql.eval.impl.PhysicalNode
4+
import org.partiql.eval.impl.Record
55
import org.partiql.value.CollectionValue
66
import org.partiql.value.PartiQLValueExperimental
77

partiql-engine/src/test/kotlin/org/partiql/engine/impl/PartiQLEngineDefaultTest.kt partiql-eval/src/test/kotlin/org/partiql/eval/impl/PartiQLEngineDefaultTest.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package org.partiql.engine.impl
1+
package org.partiql.eval.impl
22

33
import org.junit.jupiter.api.Test
4-
import org.partiql.engine.PartiQLEngine
4+
import org.partiql.eval.PartiQLEngine
55
import org.partiql.parser.PartiQLParserBuilder
66
import org.partiql.planner.PartiQLPlanner
77
import org.partiql.planner.PartiQLPlannerBuilder
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright 2022 Amazon.com, Inc. or its affiliates. All rights reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License").
5+
* You may not use this file except in compliance with the License.
6+
* A copy of the License is located at:
7+
*
8+
* http://aws.amazon.com/apache2.0/
9+
*
10+
* or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS,
11+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
12+
* language governing permissions and limitations under the License.
13+
*/
14+
15+
package org.partiql.eval
16+
17+
import org.partiql.annotations.ExperimentalPartiQLCompilerPipeline
18+
import org.partiql.lang.domains.PartiqlPhysical
19+
import org.partiql.lang.eval.PartiQLStatement
20+
import org.partiql.lang.planner.PartiQLPlanner
21+
22+
/**
23+
* [PartiQLCompiler] is responsible for transforming a [PartiqlPhysical.Plan] into an executable [PartiQLStatement].
24+
*/
25+
@ExperimentalPartiQLCompilerPipeline
26+
interface PartiQLCompiler {
27+
28+
/**
29+
* Compiles the [PartiqlPhysical.Plan] to an executable [PartiQLStatement].
30+
*/
31+
fun compile(statement: PartiqlPhysical.Plan): PartiQLStatement
32+
33+
/**
34+
* Compiles the [PartiqlPhysical.Statement.Explain] with the details provided in [details]
35+
*/
36+
fun compile(statement: PartiqlPhysical.Plan, details: PartiQLPlanner.PlanningDetails): PartiQLStatement
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
/*
2+
* Copyright 2022 Amazon.com, Inc. or its affiliates. All rights reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License").
5+
* You may not use this file except in compliance with the License.
6+
* A copy of the License is located at:
7+
*
8+
* http://aws.amazon.com/apache2.0/
9+
*
10+
* or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS,
11+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
12+
* language governing permissions and limitations under the License.
13+
*/
14+
15+
package org.partiql.eval
16+
17+
import org.partiql.annotations.ExperimentalPartiQLCompilerPipeline
18+
import org.partiql.annotations.ExperimentalWindowFunctions
19+
import org.partiql.eval.physical.operators.AggregateOperatorFactoryDefault
20+
import org.partiql.eval.physical.operators.FilterRelationalOperatorFactoryDefault
21+
import org.partiql.eval.physical.operators.JoinRelationalOperatorFactoryDefault
22+
import org.partiql.eval.physical.operators.LetRelationalOperatorFactoryDefault
23+
import org.partiql.eval.physical.operators.LimitRelationalOperatorFactoryDefault
24+
import org.partiql.eval.physical.operators.OffsetRelationalOperatorFactoryDefault
25+
import org.partiql.eval.physical.operators.RelationalOperatorFactory
26+
import org.partiql.eval.physical.operators.ScanRelationalOperatorFactoryDefault
27+
import org.partiql.eval.physical.operators.SortOperatorFactoryDefault
28+
import org.partiql.eval.physical.operators.UnpivotOperatorFactoryDefault
29+
import org.partiql.eval.physical.operators.WindowRelationalOperatorFactoryDefault
30+
import org.partiql.lang.eval.ExprFunction
31+
import org.partiql.lang.eval.ThunkReturnTypeAssertions
32+
import org.partiql.lang.eval.TypingMode
33+
import org.partiql.lang.eval.builtins.DynamicLookupExprFunction
34+
import org.partiql.lang.eval.builtins.SCALAR_BUILTINS_DEFAULT
35+
import org.partiql.lang.eval.builtins.definitionalBuiltins
36+
import org.partiql.lang.eval.builtins.storedprocedure.StoredProcedure
37+
import org.partiql.lang.planner.EvaluatorOptions
38+
import org.partiql.lang.types.CustomType
39+
40+
/**
41+
* Builder class to instantiate a [PartiQLCompiler].
42+
*
43+
* Example usages:
44+
*
45+
* ```
46+
* // Default
47+
* val compiler = PartiQLCompilerBuilder.standard().build()
48+
*
49+
* // Fluent builder
50+
* val compiler = PartiQLCompilerBuilder.standard()
51+
* .customFunctions(myCustomFunctionList)
52+
* .build()
53+
* ```
54+
*/
55+
56+
@ExperimentalPartiQLCompilerPipeline
57+
class PartiQLCompilerBuilder private constructor() {
58+
59+
private var options: EvaluatorOptions = EvaluatorOptions.standard()
60+
private var customTypes: List<CustomType> = emptyList()
61+
private var customFunctions: List<ExprFunction> = emptyList()
62+
private var customProcedures: List<StoredProcedure> = emptyList()
63+
private var customOperatorFactories: List<RelationalOperatorFactory> = emptyList()
64+
65+
companion object {
66+
67+
/**
68+
* A collection of all the default relational operator implementations provided by PartiQL.
69+
*
70+
* By default, the query planner will select these as the implementations for all relational operators, but
71+
* alternate implementations may be provided and chosen by physical plan passes.
72+
*
73+
* @see [org.partiql.lang.planner.PlannerPipeline.Builder.addPhysicalPlanPass]
74+
* @see [org.partiql.lang.planner.PlannerPipeline.Builder.addRelationalOperatorFactory]
75+
*/
76+
77+
private val DEFAULT_RELATIONAL_OPERATOR_FACTORIES = listOf(
78+
AggregateOperatorFactoryDefault,
79+
SortOperatorFactoryDefault,
80+
UnpivotOperatorFactoryDefault,
81+
FilterRelationalOperatorFactoryDefault,
82+
ScanRelationalOperatorFactoryDefault,
83+
JoinRelationalOperatorFactoryDefault,
84+
OffsetRelationalOperatorFactoryDefault,
85+
LimitRelationalOperatorFactoryDefault,
86+
LetRelationalOperatorFactoryDefault,
87+
// Notice here we will not propagate the optin requirement to the user
88+
@OptIn(ExperimentalWindowFunctions::class)
89+
WindowRelationalOperatorFactoryDefault,
90+
)
91+
92+
@JvmStatic
93+
fun standard() = PartiQLCompilerBuilder()
94+
}
95+
96+
fun build(): PartiQLCompiler {
97+
if (options.thunkOptions.thunkReturnTypeAssertions == ThunkReturnTypeAssertions.ENABLED) {
98+
TODO("ThunkReturnTypeAssertions.ENABLED requires a static type pass")
99+
}
100+
return PartiQLCompilerDefault(
101+
evaluatorOptions = options,
102+
customTypedOpParameters = customTypes.associateBy(
103+
keySelector = { it.name },
104+
valueTransform = { it.typedOpParameter }
105+
),
106+
functions = allFunctions(options.typingMode),
107+
procedures = customProcedures.associateBy(
108+
keySelector = { it.signature.name },
109+
valueTransform = { it }
110+
),
111+
operatorFactories = allOperatorFactories()
112+
)
113+
}
114+
115+
fun options(options: EvaluatorOptions) = this.apply {
116+
this.options = options
117+
}
118+
119+
fun customFunctions(customFunctions: List<ExprFunction>) = this.apply {
120+
this.customFunctions = customFunctions
121+
}
122+
123+
fun customTypes(customTypes: List<CustomType>) = this.apply {
124+
this.customTypes = customTypes
125+
}
126+
127+
fun customProcedures(customProcedures: List<StoredProcedure>) = this.apply {
128+
this.customProcedures = customProcedures
129+
}
130+
131+
fun customOperatorFactories(customOperatorFactories: List<RelationalOperatorFactory>) = this.apply {
132+
this.customOperatorFactories = customOperatorFactories
133+
}
134+
135+
// --- Internal ----------------------------------
136+
137+
private fun allFunctions(typingMode: TypingMode): List<ExprFunction> {
138+
val definitionalBuiltins = definitionalBuiltins(typingMode)
139+
val builtins = SCALAR_BUILTINS_DEFAULT
140+
val allFunctions = definitionalBuiltins + builtins + customFunctions + DynamicLookupExprFunction()
141+
return allFunctions
142+
}
143+
144+
private fun allOperatorFactories() = (DEFAULT_RELATIONAL_OPERATOR_FACTORIES + customOperatorFactories).apply {
145+
groupBy { it.key }.entries.firstOrNull { it.value.size > 1 }?.let {
146+
error(
147+
"More than one BindingsOperatorFactory for ${it.key.operator} named '${it.value}' was specified."
148+
)
149+
}
150+
}.associateBy { it.key }
151+
}

0 commit comments

Comments
 (0)