@@ -20,6 +20,7 @@ package org.apache.spark.sql.catalyst.rules
20
20
import scala .collection .mutable
21
21
22
22
import org .apache .spark .sql .errors .QueryExecutionErrors
23
+ import org .apache .spark .util .Utils
23
24
24
25
// Represent unique rule ids for rules that are invoked multiple times.
25
26
case class RuleId (id : Int ) {
@@ -40,7 +41,7 @@ object RuleIdCollection {
40
41
// invoked multiple times by Analyzer/Optimizer/Planner need a rule id to prune unnecessary
41
42
// tree traversals in the transform function family. Note that those rules should not depend on
42
43
// a changing, external state. Rules here are in alphabetical order.
43
- private val rulesNeedingIds : Seq [String ] = {
44
+ private var rulesNeedingIds : Seq [String ] = {
44
45
// Catalyst Analyzer rules
45
46
" org.apache.spark.sql.catalyst.analysis.Analyzer$AddMetadataColumns" ::
46
47
" org.apache.spark.sql.catalyst.analysis.Analyzer$ExtractGenerator" ::
@@ -88,6 +89,7 @@ object RuleIdCollection {
88
89
" org.apache.spark.sql.catalyst.analysis.ResolveUnion" ::
89
90
" org.apache.spark.sql.catalyst.analysis.SubstituteUnresolvedOrdinals" ::
90
91
" org.apache.spark.sql.catalyst.analysis.TimeWindowing" ::
92
+ " org.apache.spark.sql.catalyst.analysis.TypeCoercionBase$CombinedTypeCoercionRule" ::
91
93
" org.apache.spark.sql.catalyst.analysis.UpdateOuterReferences" ::
92
94
" org.apache.spark.sql.catalyst.analysis.UpdateAttributeNullability" ::
93
95
// Catalyst Optimizer rules
@@ -152,6 +154,31 @@ object RuleIdCollection {
152
154
" org.apache.spark.sql.catalyst.optimizer.UnwrapCastInBinaryComparison" :: Nil
153
155
}
154
156
157
+ if (Utils .isTesting) {
158
+ rulesNeedingIds = rulesNeedingIds ++ {
159
+ // In the production code path, the following rules are run in CombinedTypeCoercionRule, and
160
+ // hence we only need to add them for unit testing.
161
+ " org.apache.spark.sql.catalyst.analysis.AnsiTypeCoercion$PromoteStringLiterals" ::
162
+ " org.apache.spark.sql.catalyst.analysis.DecimalPrecision" ::
163
+ " org.apache.spark.sql.catalyst.analysis.TypeCoercion$BooleanEquality" ::
164
+ " org.apache.spark.sql.catalyst.analysis.TypeCoercionBase$CaseWhenCoercion" ::
165
+ " org.apache.spark.sql.catalyst.analysis.TypeCoercionBase$ConcatCoercion" ::
166
+ " org.apache.spark.sql.catalyst.analysis.TypeCoercionBase$DateTimeOperations" ::
167
+ " org.apache.spark.sql.catalyst.analysis.TypeCoercionBase$Division" ::
168
+ " org.apache.spark.sql.catalyst.analysis.TypeCoercionBase$EltCoercion" ::
169
+ " org.apache.spark.sql.catalyst.analysis.TypeCoercionBase$FunctionArgumentConversion" ::
170
+ " org.apache.spark.sql.catalyst.analysis.TypeCoercionBase$IfCoercion" ::
171
+ " org.apache.spark.sql.catalyst.analysis.TypeCoercionBase$ImplicitTypeCasts" ::
172
+ " org.apache.spark.sql.catalyst.analysis.TypeCoercionBase$InConversion" ::
173
+ " org.apache.spark.sql.catalyst.analysis.TypeCoercionBase$IntegralDivision" ::
174
+ " org.apache.spark.sql.catalyst.analysis.TypeCoercionBase$MapZipWithCoercion" ::
175
+ " org.apache.spark.sql.catalyst.analysis.TypeCoercion$PromoteStrings" ::
176
+ " org.apache.spark.sql.catalyst.analysis.TypeCoercionBase$StackCoercion" ::
177
+ " org.apache.spark.sql.catalyst.analysis.TypeCoercionBase$StringLiteralCoercion" ::
178
+ " org.apache.spark.sql.catalyst.analysis.TypeCoercionBase$WindowFrameCoercion" :: Nil
179
+ }
180
+ }
181
+
155
182
// Maps rule names to ids. Rule ids are continuous natural numbers starting from 0.
156
183
private val ruleToId = new mutable.HashMap [String , RuleId ]
157
184
0 commit comments