Github user cloud-fan commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22512#discussion_r227618778
  
    --- Diff: 
sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/MutableProjectionSuite.scala
 ---
    @@ -0,0 +1,66 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *    http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.spark.sql.catalyst.expressions
    +
    +import org.apache.spark.SparkFunSuite
    +import org.apache.spark.sql.Row
    +import org.apache.spark.sql.catalyst.{CatalystTypeConverters, InternalRow}
    +import org.apache.spark.sql.types._
    +import org.apache.spark.unsafe.types.CalendarInterval
    +
    +class MutableProjectionSuite extends SparkFunSuite with 
ExpressionEvalHelper {
    +
    +  private def createMutableProjection(dataTypes: Array[DataType]): 
MutableProjection = {
    +    MutableProjection.create(dataTypes.zipWithIndex.map(x => 
BoundReference(x._2, x._1, true)))
    +  }
    +
    +  testBothCodegenAndInterpreted("fixed-length types") {
    +    val fixedLengthTypes = Array[DataType](
    +      BooleanType, ByteType, ShortType, IntegerType, LongType, FloatType, 
DoubleType,
    +      DateType, TimestampType)
    +    val proj = createMutableProjection(fixedLengthTypes)
    +    val inputRow = InternalRow.fromSeq(
    +      Seq(false, 3.toByte, 15.toShort, -83, 129L, 1.0f, 5.0, 100, 200L))
    +    assert(proj(inputRow) === inputRow)
    +
    +    // Use UnsafeRow as buffer
    +    val numBytes = 
UnsafeRow.calculateBitSetWidthInBytes(fixedLengthTypes.length)
    +    val unsafeBuffer = UnsafeRow.createFromByteArray(numBytes, 
fixedLengthTypes.length)
    +    val projUnsafeRow = proj.target(unsafeBuffer)(inputRow)
    +    assert(FromUnsafeProjection(fixedLengthTypes)(projUnsafeRow) === 
inputRow)
    +  }
    +
    +  testBothCodegenAndInterpreted("variable-length types") {
    +    val variableLengthTypes = Array(
    +      StringType, DecimalType.defaultConcreteType, CalendarIntervalType, 
BinaryType,
    +      ArrayType(StringType), MapType(IntegerType, StringType),
    +      StructType.fromDDL("a INT, b STRING"), 
ObjectType(classOf[java.lang.Integer]))
    +    val proj = createMutableProjection(variableLengthTypes)
    --- End diff --
    
    shall we also test that we should fail if the target row is unsafe row?


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to