aboutsummaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorMichael Armbrust <michael@databricks.com>2014-07-29 18:14:20 -0700
committerMichael Armbrust <michael@databricks.com>2014-07-29 18:14:20 -0700
commit39b8193102ebf32ef6b40631a949318b281d44a1 (patch)
tree193c46eae261cbf81de4af5bd0d1d7abe5c453d2 /sql
parent2c356665c986564482ccfb3f880f0a2c023a7cb7 (diff)
downloadspark-39b8193102ebf32ef6b40631a949318b281d44a1.tar.gz
spark-39b8193102ebf32ef6b40631a949318b281d44a1.tar.bz2
spark-39b8193102ebf32ef6b40631a949318b281d44a1.zip
[SPARK-2716][SQL] Don't check resolved for having filters.
For queries like `... HAVING COUNT(*) > 9` the expression is always resolved since it contains no attributes. This was causing us to avoid doing the Having clause aggregation rewrite. Author: Michael Armbrust <michael@databricks.com> Closes #1640 from marmbrus/havingNoRef and squashes the following commits: 92d3901 [Michael Armbrust] Don't check resolved for having filters.
Diffstat (limited to 'sql')
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala2
-rw-r--r--sql/hive/src/test/resources/golden/having no references-0-d2de3ba23759d25ef77cdfbab72cbb63136
-rw-r--r--sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveQuerySuite.scala3
3 files changed, 140 insertions, 1 deletions
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala
index 02bdb64f30..74c0104e5b 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala
@@ -159,7 +159,7 @@ class Analyzer(catalog: Catalog, registry: FunctionRegistry, caseSensitive: Bool
object UnresolvedHavingClauseAttributes extends Rule[LogicalPlan] {
def apply(plan: LogicalPlan): LogicalPlan = plan transformUp {
case filter @ Filter(havingCondition, aggregate @ Aggregate(_, originalAggExprs, _))
- if !filter.resolved && aggregate.resolved && containsAggregate(havingCondition) => {
+ if aggregate.resolved && containsAggregate(havingCondition) => {
val evaluatedCondition = Alias(havingCondition, "havingCondition")()
val aggExprsWithHaving = evaluatedCondition +: originalAggExprs
diff --git a/sql/hive/src/test/resources/golden/having no references-0-d2de3ba23759d25ef77cdfbab72cbb63 b/sql/hive/src/test/resources/golden/having no references-0-d2de3ba23759d25ef77cdfbab72cbb63
new file mode 100644
index 0000000000..3f2cab688c
--- /dev/null
+++ b/sql/hive/src/test/resources/golden/having no references-0-d2de3ba23759d25ef77cdfbab72cbb63
@@ -0,0 +1,136 @@
+0
+5
+12
+15
+18
+24
+26
+35
+37
+42
+51
+58
+67
+70
+72
+76
+83
+84
+90
+95
+97
+98
+100
+103
+104
+113
+118
+119
+120
+125
+128
+129
+134
+137
+138
+146
+149
+152
+164
+165
+167
+169
+172
+174
+175
+176
+179
+187
+191
+193
+195
+197
+199
+200
+203
+205
+207
+208
+209
+213
+216
+217
+219
+221
+223
+224
+229
+230
+233
+237
+238
+239
+242
+255
+256
+265
+272
+273
+277
+278
+280
+281
+282
+288
+298
+307
+309
+311
+316
+317
+318
+321
+322
+325
+327
+331
+333
+342
+344
+348
+353
+367
+369
+382
+384
+395
+396
+397
+399
+401
+403
+404
+406
+409
+413
+414
+417
+424
+429
+430
+431
+438
+439
+454
+458
+459
+462
+463
+466
+468
+469
+478
+480
+489
+492
+498
diff --git a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveQuerySuite.scala b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveQuerySuite.scala
index 50f85289fd..aadfd2e900 100644
--- a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveQuerySuite.scala
+++ b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveQuerySuite.scala
@@ -30,6 +30,9 @@ case class TestData(a: Int, b: String)
*/
class HiveQuerySuite extends HiveComparisonTest {
+ createQueryTest("having no references",
+ "SELECT key FROM src GROUP BY key HAVING COUNT(*) > 1")
+
createQueryTest("boolean = number",
"""
|SELECT