aboutsummaryrefslogtreecommitdiff
path: root/core/src/test/scala
diff options
context:
space:
mode:
authorXin Wu <xinwu@us.ibm.com>2016-09-14 21:14:29 +0200
committerHerman van Hovell <hvanhovell@databricks.com>2016-09-14 21:14:29 +0200
commit040e46979d5f90edc7f9be3cbedd87e8986e8053 (patch)
tree65b9ac14a2ddf54a1f0e8d3c251645fb4ea23273 /core/src/test/scala
parenta79838bdeeb12cec4d50da3948bd8a33777e53a6 (diff)
downloadspark-040e46979d5f90edc7f9be3cbedd87e8986e8053.tar.gz
spark-040e46979d5f90edc7f9be3cbedd87e8986e8053.tar.bz2
spark-040e46979d5f90edc7f9be3cbedd87e8986e8053.zip
[SPARK-10747][SQL] Support NULLS FIRST|LAST clause in ORDER BY
## What changes were proposed in this pull request? Currently, ORDER BY clause returns nulls value according to sorting order (ASC|DESC), considering null value is always smaller than non-null values. However, SQL2003 standard support NULLS FIRST or NULLS LAST to allow users to specify whether null values should be returned first or last, regardless of sorting order (ASC|DESC). This PR is to support this new feature. ## How was this patch tested? New test cases are added to test NULLS FIRST|LAST for regular select queries and windowing queries. (If this patch involves UI changes, please attach a screenshot; otherwise, remove this) Author: Xin Wu <xinwu@us.ibm.com> Closes #14842 from xwu0226/SPARK-10747.
Diffstat (limited to 'core/src/test/scala')
-rw-r--r--core/src/test/scala/org/apache/spark/util/collection/unsafe/sort/RadixSortSuite.scala27
1 files changed, 21 insertions, 6 deletions
diff --git a/core/src/test/scala/org/apache/spark/util/collection/unsafe/sort/RadixSortSuite.scala b/core/src/test/scala/org/apache/spark/util/collection/unsafe/sort/RadixSortSuite.scala
index 2c13806410..366ffda778 100644
--- a/core/src/test/scala/org/apache/spark/util/collection/unsafe/sort/RadixSortSuite.scala
+++ b/core/src/test/scala/org/apache/spark/util/collection/unsafe/sort/RadixSortSuite.scala
@@ -40,23 +40,38 @@ class RadixSortSuite extends SparkFunSuite with Logging {
case class RadixSortType(
name: String,
referenceComparator: PrefixComparator,
- startByteIdx: Int, endByteIdx: Int, descending: Boolean, signed: Boolean)
+ startByteIdx: Int, endByteIdx: Int, descending: Boolean, signed: Boolean, nullsFirst: Boolean)
val SORT_TYPES_TO_TEST = Seq(
- RadixSortType("unsigned binary data asc", PrefixComparators.BINARY, 0, 7, false, false),
- RadixSortType("unsigned binary data desc", PrefixComparators.BINARY_DESC, 0, 7, true, false),
- RadixSortType("twos complement asc", PrefixComparators.LONG, 0, 7, false, true),
- RadixSortType("twos complement desc", PrefixComparators.LONG_DESC, 0, 7, true, true),
+ RadixSortType("unsigned binary data asc nulls first",
+ PrefixComparators.BINARY, 0, 7, false, false, true),
+ RadixSortType("unsigned binary data asc nulls last",
+ PrefixComparators.BINARY_NULLS_LAST, 0, 7, false, false, false),
+ RadixSortType("unsigned binary data desc nulls last",
+ PrefixComparators.BINARY_DESC_NULLS_FIRST, 0, 7, true, false, false),
+ RadixSortType("unsigned binary data desc nulls first",
+ PrefixComparators.BINARY_DESC, 0, 7, true, false, true),
+
+ RadixSortType("twos complement asc nulls first",
+ PrefixComparators.LONG, 0, 7, false, true, true),
+ RadixSortType("twos complement asc nulls last",
+ PrefixComparators.LONG_NULLS_LAST, 0, 7, false, true, false),
+ RadixSortType("twos complement desc nulls last",
+ PrefixComparators.LONG_DESC, 0, 7, true, true, false),
+ RadixSortType("twos complement desc nulls first",
+ PrefixComparators.LONG_DESC_NULLS_FIRST, 0, 7, true, true, true),
+
RadixSortType(
"binary data partial",
new PrefixComparators.RadixSortSupport {
override def sortDescending = false
override def sortSigned = false
+ override def nullsFirst = true
override def compare(a: Long, b: Long): Int = {
return PrefixComparators.BINARY.compare(a & 0xffffff0000L, b & 0xffffff0000L)
}
},
- 2, 4, false, false))
+ 2, 4, false, false, true))
private def generateTestData(size: Int, rand: => Long): (Array[JLong], LongArray) = {
val ref = Array.tabulate[Long](size) { i => rand }