@@ -2,7 +2,7 @@ package org.finos.vuu.core.filter
22
33import org .finos .toolbox .collection .array .ImmutableArray
44import org .finos .vuu .core .filter .FilterClause .joinResults
5- import org .finos .vuu .core .index ._
5+ import org .finos .vuu .core .index .*
66import org .finos .vuu .core .table .column .{Error , Result }
77import org .finos .vuu .core .table .{RowData , TablePrimaryKeys }
88import org .finos .vuu .feature .inmem .InMemTablePrimaryKeys
@@ -32,9 +32,11 @@ sealed trait RowFilterClause extends FilterClause {
3232 ))
3333
3434 override def validate (vpColumns : ViewPortColumns ): Result [true ] = columnExistsInVpColumns(vpColumns)
35+
3536 private def columnExistsInVpColumns (vpColumns : ViewPortColumns ): Result [true ] =
3637 if (vpColumns.columnExists(this .columnName)) Result (true )
3738 else Error (s " Column ` $columnName` not found. " )
39+
3840}
3941
4042case class NotClause (decorated : FilterClause ) extends FilterClause {
@@ -92,12 +94,12 @@ case class InClause(columnName: String, values: List[String]) extends RowFilterC
9294 override def filterAll (rows : RowSource , rowKeys : TablePrimaryKeys , viewPortColumns : ViewPortColumns ): TablePrimaryKeys = {
9395 val column = rows.asTable.columnForName(columnName)
9496 rows.asTable.indexForColumn(column) match {
95- case Some (ix : StringIndexedField ) => InMemTablePrimaryKeys ( ix.find(values) )
96- case Some (ix : IntIndexedField ) => InMemTablePrimaryKeys ( ix.find(values.map(s => s.toInt)))
97- case Some (ix : LongIndexedField ) => InMemTablePrimaryKeys ( ix.find(values.map(s => s.toLong)))
98- case Some (ix : DoubleIndexedField ) => InMemTablePrimaryKeys ( ix.find(values.map(s => s.toDouble)))
99- case Some (ix : BooleanIndexedField ) => InMemTablePrimaryKeys ( ix.find(values.map(s => s.toBoolean)))
100- case None => super .filterAll(rows, rowKeys, viewPortColumns)
97+ case Some (ix : StringIndexedField ) => rowKeys.intersect( ix.find(values))
98+ case Some (ix : IntIndexedField ) => rowKeys.intersect( ix.find(values.map(s => s.toInt)))
99+ case Some (ix : LongIndexedField ) => rowKeys.intersect( ix.find(values.map(s => s.toLong)))
100+ case Some (ix : DoubleIndexedField ) => rowKeys.intersect( ix.find(values.map(s => s.toDouble)))
101+ case Some (ix : BooleanIndexedField ) => rowKeys.intersect( ix.find(values.map(s => s.toBoolean)))
102+ case _ => super .filterAll(rows, rowKeys, viewPortColumns)
101103 }
102104 }
103105}
@@ -113,10 +115,10 @@ case class GreaterThanClause(columnName: String, value: Double) extends RowFilte
113115 override def filterAll (rows : RowSource , rowKeys : TablePrimaryKeys , viewPortColumns : ViewPortColumns ): TablePrimaryKeys = {
114116 val column = rows.asTable.columnForName(columnName)
115117 rows.asTable.indexForColumn(column) match {
116- case Some (ix : DoubleIndexedField ) => InMemTablePrimaryKeys (ix.greaterThan(value))
117- case Some (ix : IntIndexedField ) => InMemTablePrimaryKeys (ix.greaterThan(value.toInt))
118- case Some (ix : LongIndexedField ) => InMemTablePrimaryKeys (ix.greaterThan(value.toLong))
119- case None => super .filterAll(rows, rowKeys, viewPortColumns)
118+ case Some (ix : DoubleIndexedField ) => rowKeys.intersect (ix.greaterThan(value))
119+ case Some (ix : IntIndexedField ) => rowKeys.intersect (ix.greaterThan(value.toInt))
120+ case Some (ix : LongIndexedField ) => rowKeys.intersect (ix.greaterThan(value.toLong))
121+ case _ => super .filterAll(rows, rowKeys, viewPortColumns)
120122 }
121123 }
122124}
@@ -132,10 +134,10 @@ case class LessThanClause(columnName: String, value: Double) extends RowFilterCl
132134 override def filterAll (rows : RowSource , rowKeys : TablePrimaryKeys , viewPortColumns : ViewPortColumns ): TablePrimaryKeys = {
133135 val column = rows.asTable.columnForName(columnName)
134136 rows.asTable.indexForColumn(column) match {
135- case Some (ix : DoubleIndexedField ) => InMemTablePrimaryKeys (ix.lessThan(value))
136- case Some (ix : IntIndexedField ) => InMemTablePrimaryKeys (ix.lessThan(value.toInt))
137- case Some (ix : LongIndexedField ) => InMemTablePrimaryKeys (ix.lessThan(value.toInt))
138- case None => super .filterAll(rows, rowKeys, viewPortColumns)
137+ case Some (ix : DoubleIndexedField ) => rowKeys.intersect (ix.lessThan(value))
138+ case Some (ix : IntIndexedField ) => rowKeys.intersect (ix.lessThan(value.toInt))
139+ case Some (ix : LongIndexedField ) => rowKeys.intersect (ix.lessThan(value.toInt))
140+ case _ => super .filterAll(rows, rowKeys, viewPortColumns)
139141 }
140142 }
141143}
@@ -156,12 +158,14 @@ case class EqualsClause(columnName: String, value: String) extends RowFilterClau
156158 override def filterAll (rows : RowSource , rowKeys : TablePrimaryKeys , viewPortColumns : ViewPortColumns ): TablePrimaryKeys = {
157159 val column = rows.asTable.columnForName(columnName)
158160 rows.asTable.indexForColumn(column) match {
159- case Some (ix : StringIndexedField ) => InMemTablePrimaryKeys (ix.find(value))
160- case Some (ix : IntIndexedField ) => InMemTablePrimaryKeys (ix.find(value.toInt))
161- case Some (ix : LongIndexedField ) => InMemTablePrimaryKeys (ix.find(value.toLong))
162- case Some (ix : DoubleIndexedField ) => InMemTablePrimaryKeys (ix.find(value.toDouble))
163- case Some (ix : BooleanIndexedField ) => InMemTablePrimaryKeys (ix.find(value.toBoolean))
164- case None => super .filterAll(rows, rowKeys, viewPortColumns)
161+ case Some (ix : StringIndexedField ) => rowKeys.intersect (ix.find(value))
162+ case Some (ix : IntIndexedField ) => rowKeys.intersect (ix.find(value.toInt))
163+ case Some (ix : LongIndexedField ) => rowKeys.intersect (ix.find(value.toLong))
164+ case Some (ix : DoubleIndexedField ) => rowKeys.intersect (ix.find(value.toDouble))
165+ case Some (ix : BooleanIndexedField ) => rowKeys.intersect (ix.find(value.toBoolean))
166+ case _ => super .filterAll(rows, rowKeys, viewPortColumns)
165167 }
166168 }
167169}
170+
171+
0 commit comments