@@ -316,35 +316,46 @@ class ParquetFilterSuite extends QueryTest with ParquetTest with SharedSQLContex
316316 }
317317
318318 test(" filter pushdown - date" ) {
319- implicit class IntToDate (int : Int ) {
320- def date : Date =
321- new Date (Date .valueOf(" 2018-03-01" ).getTime + 24 * 60 * 60 * 1000 * (int - 1 ))
319+ implicit class StringToDate (s : String ) {
320+ def date : Date = Date .valueOf(s)
322321 }
323322
324- withParquetDataFrame((1 to 4 ).map(i => Tuple1 (i.date))) { implicit df =>
325- checkFilterPredicate(' _1 .isNull, classOf [Eq [_]], Seq .empty[Row ])
326- checkFilterPredicate(' _1 .isNotNull, classOf [NotEq [_]], (1 to 4 ).map(i => Row .apply(i.date)))
327-
328- checkFilterPredicate(' _1 === 1 .date, classOf [Eq [_]], 1 .date)
329- checkFilterPredicate(' _1 <=> 1 .date, classOf [Eq [_]], 1 .date)
330- checkFilterPredicate(' _1 =!= 1 .date, classOf [NotEq [_]], (2 to 4 ).map(i => Row .apply(i.date)))
331-
332- checkFilterPredicate(' _1 < 2 .date, classOf [Lt [_]], 1 .date)
333- checkFilterPredicate(' _1 > 3 .date, classOf [Gt [_]], 4 .date)
334- checkFilterPredicate(' _1 <= 1 .date, classOf [LtEq [_]], 1 .date)
335- checkFilterPredicate(' _1 >= 4 .date, classOf [GtEq [_]], 4 .date)
336-
337- checkFilterPredicate(Literal (1 .date) === ' _1 , classOf [Eq [_]], 1 .date)
338- checkFilterPredicate(Literal (1 .date) <=> ' _1 , classOf [Eq [_]], 1 .date)
339- checkFilterPredicate(Literal (2 .date) > ' _1 , classOf [Lt [_]], 1 .date)
340- checkFilterPredicate(Literal (3 .date) < ' _1 , classOf [Gt [_]], 4 .date)
341- checkFilterPredicate(Literal (1 .date) >= ' _1 , classOf [LtEq [_]], 1 .date)
342- checkFilterPredicate(Literal (4 .date) <= ' _1 , classOf [GtEq [_]], 4 .date)
343-
344- checkFilterPredicate(! (' _1 < 4 .date), classOf [GtEq [_]], 4 .date)
345- checkFilterPredicate(' _1 < 2 .date || ' _1 > 3 .date, classOf [Operators .Or ],
346- Seq (Row (1 .date), Row (4 .date)))
347- }
323+ withParquetDataFrame(
324+ Seq (" 2018-03-18" , " 2018-03-19" , " 2018-03-20" , " 2018-03-21" ).map(i => Tuple1 (i.date))) {
325+ implicit df =>
326+ checkFilterPredicate(' _1 .isNull, classOf [Eq [_]], Seq .empty[Row ])
327+ checkFilterPredicate(' _1 .isNotNull, classOf [NotEq [_]],
328+ Seq (" 2018-03-18" , " 2018-03-19" , " 2018-03-20" , " 2018-03-21" ).map(i => Row .apply(i.date)))
329+
330+ checkFilterPredicate(' _1 === " 2018-03-18" .date, classOf [Eq [_]], " 2018-03-18" .date)
331+ checkFilterPredicate(' _1 <=> " 2018-03-18" .date, classOf [Eq [_]], " 2018-03-18" .date)
332+ checkFilterPredicate(' _1 =!= " 2018-03-18" .date, classOf [NotEq [_]],
333+ Seq (" 2018-03-19" , " 2018-03-20" , " 2018-03-21" ).map(i => Row .apply(i.date)))
334+
335+ checkFilterPredicate(' _1 < " 2018-03-19" .date, classOf [Lt [_]], " 2018-03-18" .date)
336+ checkFilterPredicate(' _1 > " 2018-03-20" .date, classOf [Gt [_]], " 2018-03-21" .date)
337+ checkFilterPredicate(' _1 <= " 2018-03-18" .date, classOf [LtEq [_]], " 2018-03-18" .date)
338+ checkFilterPredicate(' _1 >= " 2018-03-21" .date, classOf [GtEq [_]], " 2018-03-21" .date)
339+
340+ checkFilterPredicate(
341+ Literal (" 2018-03-18" .date) === ' _1 , classOf [Eq [_]], " 2018-03-18" .date)
342+ checkFilterPredicate(
343+ Literal (" 2018-03-18" .date) <=> ' _1 , classOf [Eq [_]], " 2018-03-18" .date)
344+ checkFilterPredicate(
345+ Literal (" 2018-03-19" .date) > ' _1 , classOf [Lt [_]], " 2018-03-18" .date)
346+ checkFilterPredicate(
347+ Literal (" 2018-03-20" .date) < ' _1 , classOf [Gt [_]], " 2018-03-21" .date)
348+ checkFilterPredicate(
349+ Literal (" 2018-03-18" .date) >= ' _1 , classOf [LtEq [_]], " 2018-03-18" .date)
350+ checkFilterPredicate(
351+ Literal (" 2018-03-21" .date) <= ' _1 , classOf [GtEq [_]], " 2018-03-21" .date)
352+
353+ checkFilterPredicate(! (' _1 < " 2018-03-21" .date), classOf [GtEq [_]], " 2018-03-21" .date)
354+ checkFilterPredicate(
355+ ' _1 < " 2018-03-19" .date || ' _1 > " 2018-03-20" .date,
356+ classOf [Operators .Or ],
357+ Seq (Row (" 2018-03-18" .date), Row (" 2018-03-21" .date)))
358+ }
348359 }
349360
350361 test(" SPARK-6554: don't push down predicates which reference partition columns" ) {
0 commit comments