[ https://issues.apache.org/jira/browse/CALCITE-6293 ]
Caican Cai deleted comment on CALCITE-6293:
-------------------------------------
was (Author: JIRAUSER302115):
[~julianhyde][~asolimando]
Hello, I encountered difficulties in supporting the or operator. I found that
the structure of the code cannot support this operator.
I have located the following code, whereClause is a List<String>. I have reason
to guess that each element in the List is a filter condition, but this seems to
only apply to and. When I get the List<String>, the current code will
automatically generate a similar form such as where stringlist.get(0) and
stringlist.get(1). It seems that or is not supported. I don't know how to use
List<String> to represent or, or should I refactor this part of the code so
that it can determine whether to generate the filter condition of the OR
operator or the and operator based on some flags of my List<String>.
{code:java}
return implementor.result(physType,
Blocks.toBlock(
Expressions.call(table.getExpression(ArrowTable.class),
ArrowMethod.ARROW_QUERY.method, implementor.getRootExpression(),
arrowImplementor.selectFields != null
? Expressions.call(
BuiltInMethod.IMMUTABLE_INT_LIST_COPY_OF.method,
Expressions.constant(
Ints.toArray(arrowImplementor.selectFields)))
: Expressions.call(
BuiltInMethod.IMMUTABLE_INT_LIST_IDENTITY.method,
Expressions.constant(fieldCount)),
Expressions.constant(arrowImplementor.whereClause))));
{code}
> Support OR condition in Arrow adapter
> -------------------------------------
>
> Key: CALCITE-6293
> URL: https://issues.apache.org/jira/browse/CALCITE-6293
> Project: Calcite
> Issue Type: Sub-task
> Components: arrow-adapter
> Reporter: hongyu guo
> Assignee: Tim Grein
> Priority: Major
>
> For example
> {code:java}
> String sql = "select \"intField\", \"stringField\"\n"
> + "from arrowdata\n"
> + "where \"intField\"=12 or \"stringField\"='12'"; {code}
> will throw an exception:
> {code:java}
> java.lang.AssertionError: cannot translate OR(=($0, 12), =($1, '12'))
> at
> org.apache.calcite.adapter.arrow.ArrowTranslator.translateMatch(ArrowTranslator.java:70)
> at
> org.apache.calcite.adapter.arrow.ArrowFilter.<init>(ArrowFilter.java:43)
> at
> org.apache.calcite.adapter.arrow.ArrowRules$ArrowFilterRule.convert(ArrowRules.java:97)
> at
> org.apache.calcite.adapter.arrow.ArrowRules$ArrowFilterRule.onMatch(ArrowRules.java:87)
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)