@@ -45,11 +45,17 @@ case class SimpleFilteredScan(from: Int, to: Int)(@transient val sqlContext: SQL
4545
4646 FiltersPushed .list = filters
4747
48- val filter = filters.collect {
48+ val filterFunctions = filters.collect {
4949 case EqualTo (" a" , v) => (a : Int ) => a == v
50- }.headOption.getOrElse((_ : Int ) => true )
50+ case LessThan (" a" , v : Int ) => (a : Int ) => a < v
51+ case LessThanOrEqual (" a" , v : Int ) => (a : Int ) => a <= v
52+ case GreaterThan (" a" , v : Int ) => (a : Int ) => a > v
53+ case GreaterThanOrEqual (" a" , v : Int ) => (a : Int ) => a >= v
54+ }
55+
56+ def eval (a : Int ) = ! filterFunctions.map(_(a)).contains(false )
5157
52- sqlContext.sparkContext.parallelize(from to to).filter(filter ).map(i =>
58+ sqlContext.sparkContext.parallelize(from to to).filter(eval ).map(i =>
5359 Row .fromSeq(rowBuilders.map(_(i)).reduceOption(_ ++ _).getOrElse(Seq .empty)))
5460 }
5561}
@@ -128,8 +134,23 @@ class FilteredScanSuite extends DataSourceTest {
128134 testPushDown(" SELECT b FROM oneToTenFiltered WHERE A = 1" , 1 )
129135 testPushDown(" SELECT a, b FROM oneToTenFiltered WHERE A = 1" , 1 )
130136 testPushDown(" SELECT * FROM oneToTenFiltered WHERE a = 1" , 1 )
137+ testPushDown(" SELECT * FROM oneToTenFiltered WHERE 1 = a" , 1 )
138+
139+ testPushDown(" SELECT * FROM oneToTenFiltered WHERE a > 1" , 9 )
140+ testPushDown(" SELECT * FROM oneToTenFiltered WHERE a >= 2" , 9 )
141+
142+ testPushDown(" SELECT * FROM oneToTenFiltered WHERE 1 < a" , 9 )
143+ testPushDown(" SELECT * FROM oneToTenFiltered WHERE 2 <= a" , 9 )
144+
145+ testPushDown(" SELECT * FROM oneToTenFiltered WHERE 1 > a" , 0 )
146+ testPushDown(" SELECT * FROM oneToTenFiltered WHERE 2 >= a" , 2 )
147+
148+ testPushDown(" SELECT * FROM oneToTenFiltered WHERE a < 1" , 0 )
149+ testPushDown(" SELECT * FROM oneToTenFiltered WHERE a <= 2" , 2 )
150+
151+ testPushDown(" SELECT * FROM oneToTenFiltered WHERE a > 1 AND a < 10" , 8 )
152+
131153 testPushDown(" SELECT * FROM oneToTenFiltered WHERE a = 20" , 0 )
132- testPushDown(" SELECT * FROM oneToTenFiltered WHERE a < 5" , 10 )
133154 testPushDown(" SELECT * FROM oneToTenFiltered WHERE b = 1" , 10 )
134155
135156 def testPushDown (sqlString : String , expectedCount : Int ): Unit = {
0 commit comments