[ 
https://issues.apache.org/jira/browse/METAMODEL-186?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Kasper Sørensen closed METAMODEL-186.
-------------------------------------
    Resolution: Not A Problem
      Assignee: Kasper Sørensen

Actually the culprit here is that you instantiate a new column (MutableColumn) 
instead of resolving the column that is already discoverable. When you create a 
new one there is essentially a metadata disconnect and it's an implementation 
detail how the underlying engine will then select what to do.

Proper approaches would be:

 * First get the column via the dataContext, for instance 
DataContext.getColumnByQualifiedLabel("age") - and then use this as the Column 
in your FilterItem.

 * Use the query builder API: 
DataContext.query().from(...).select(...).where("age").eq("foo");

 * Use the parsed .where(String...) method: Query.where("age = 'foo'");

> CSV filters in where clause always apply to first file column
> -------------------------------------------------------------
>
>                 Key: METAMODEL-186
>                 URL: https://issues.apache.org/jira/browse/METAMODEL-186
>             Project: Apache MetaModel
>          Issue Type: Bug
>    Affects Versions: 4.3.2
>            Reporter: Rafael Garrote
>            Assignee: Kasper Sørensen
>
> The filters added into where clause always apply to first file column.
> I made a test to reproduce the bug: 
>   "CSV Metamodel" should {
>     "Filter test" in new Scope {
>       val context = DataContextFactory.createCsvDataContext(new 
> File("test/resources/csv_people.csv"), ',', 
> DataContextFactory.DEFAULT_CSV_QUOTE_CHAR)
>       val queryParser = new QueryParser(context, "SELECT * FROM 
> csv_people.csv")
>       val filter = new FilterItem(new SelectItem(new MutableColumn("age", 
> ColumnType.STRING)), OperatorType.GREATER_THAN, 8)
>       val query = queryParser.parse()
>       val result = context.executeQuery(query.where(filter))
>       result.toRows.size() mustEqual 9
>     }
>   }
> It must return 9 rows but returns 2 because the filter is applying to the 
> firs column id.
> If replace filter object by this other one: 
> val filter = new FilterItem(new SelectItem(new MutableColumn("id", 
> ColumnType.STRING)), OperatorType.GREATER_THAN, 8)
> The result is the same.
> I have used the csv_people.csv included in test resources for csv module.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to