From 61c3cf793d82f3e8da85bb918d36e95986244786 Mon Sep 17 00:00:00 2001 From: Reynold Xin Date: Tue, 7 Jul 2015 22:12:46 -0700 Subject: [SPARK-8879][SQL] Remove EmptyRow class. As a baby step towards no megamorphic InternalRow. Author: Reynold Xin Closes #7277 from rxin/remove-empty-row and squashes the following commits: 594100e [Reynold Xin] [SPARK-8879][SQL] Remove EmptyRow class. --- .../catalyst/expressions/complexTypeCreator.scala | 2 ++ .../spark/sql/catalyst/expressions/package.scala | 7 +++++++ .../apache/spark/sql/catalyst/expressions/rows.scala | 20 -------------------- 3 files changed, 9 insertions(+), 20 deletions(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/complexTypeCreator.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/complexTypeCreator.scala index 65b9d7e608..d1e4c45886 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/complexTypeCreator.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/complexTypeCreator.scala @@ -120,4 +120,6 @@ case class CreateNamedStruct(children: Seq[Expression]) extends Expression { override def eval(input: InternalRow): Any = { InternalRow(valExprs.map(_.eval(input)): _*) } + + override def prettyName: String = "named_struct" } diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/package.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/package.scala index 5155bfe41b..30b7f8d376 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/package.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/package.scala @@ -17,6 +17,8 @@ package org.apache.spark.sql.catalyst +import org.apache.spark.sql.catalyst.expressions._ + /** * A set of classes that can be used to represent trees of relational expressions. A key goal of * the expression library is to hide the details of naming and scoping from developers who want to @@ -49,6 +51,11 @@ package org.apache.spark.sql.catalyst */ package object expressions { + /** + * Used as input into expressions whose output does not depend on any input value. + */ + val EmptyRow: InternalRow = null + /** * Converts a [[InternalRow]] to another Row given a sequence of expression that define each * column of the new row. If the schema of the input row is specified, then the given expression diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/rows.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/rows.scala index 1363884c20..8b472a529e 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/rows.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/rows.scala @@ -54,26 +54,6 @@ abstract class MutableRow extends InternalRow { } } -/** - * A row with no data. Calling any methods will result in an error. Can be used as a placeholder. - */ -object EmptyRow extends InternalRow { - override def apply(i: Int): Any = throw new UnsupportedOperationException - override def toSeq: Seq[Any] = Seq.empty - override def length: Int = 0 - override def isNullAt(i: Int): Boolean = throw new UnsupportedOperationException - override def getInt(i: Int): Int = throw new UnsupportedOperationException - override def getLong(i: Int): Long = throw new UnsupportedOperationException - override def getDouble(i: Int): Double = throw new UnsupportedOperationException - override def getFloat(i: Int): Float = throw new UnsupportedOperationException - override def getBoolean(i: Int): Boolean = throw new UnsupportedOperationException - override def getShort(i: Int): Short = throw new UnsupportedOperationException - override def getByte(i: Int): Byte = throw new UnsupportedOperationException - override def getString(i: Int): String = throw new UnsupportedOperationException - override def getAs[T](i: Int): T = throw new UnsupportedOperationException - override def copy(): InternalRow = this -} - /** * A row implementation that uses an array of objects as the underlying storage. */ -- cgit v1.2.3