[ https://issues.apache.org/jira/browse/CALCITE-4173?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17187780#comment-17187780 ]
Ruben Q L edited comment on CALCITE-4173 at 8/31/20, 2:43 PM: -------------------------------------------------------------- I have a subsidiary question about this evolution: with this new feature, will we be able to support dynamic parameters inside IN expressions? {code:sql} SELECT .... FROM ... WHERE x IN (?) {code} If I am not mistaken this is currently not supported. was (Author: rubenql): I have a subsidiary question about this evolution: with this new feature, will we be able to support dynamic parameters inside IN expressions? {{SELECT .... FROM ... WHERE x IN (?)}} If I am not mistaken this is currently not supported. > Add internal SEARCH operator and Sarg literal, replacing use of IN in RexCall > ----------------------------------------------------------------------------- > > Key: CALCITE-4173 > URL: https://issues.apache.org/jira/browse/CALCITE-4173 > Project: Calcite > Issue Type: Bug > Reporter: Julian Hyde > Assignee: Julian Hyde > Priority: Major > Labels: pull-request-available > Time Spent: 2h > Remaining Estimate: 0h > > Add internal SEARCH operator and Sarg literal, replacing use of IN in RexCall. > Recently we started to allow IN in RexCalls to represent lists of constant > values; previously it had only been allowed in SqlCall. The use is confusing, > because a RexSubQuery is a sub-class of RexCall that may also use IN as its > operator. > More important, we would like to be able to represent more general search > arguments in a single RexCall. Examples: > * {{x BETWEEN 3 AND 10}} > * {{x > 3 AND x <= 10}} > * {{x NOT BETWEEN 3 AND 10}} > * {{x IS NULL OR x BETWEEN 3 AND 100 AND x != 50 OR x IN (200, 300, 400)}} > * {{x > 5 AND x < 10 AND x IN (3, 8, 10, 20)}} > All of these can be converted to sets of ranges, where each range has a lower > or upper bound (or both), bounds can be open or closed, plus a flag to say > whether NULL is an allowed value. Guava's RangeSet is an efficient > implementation of range sets. > This change would create a new class {{Sarg}} to represent a range set as a > literal. The new internal SEARCH operator tests whether an operand belongs to > the range set. > A RexCall to SEARCH is converted back to SQL, typically an IN or OR. > This change would obsolete the use of IN in {{RexCall}} to represent a fixed > list of values. (This is a breaking change, but when we first allowed IN in > {{RexCall}}, in CALCITE-2444, it was only intended to be for > {{RelToSqlConverter}}. Most people still believe that [IN is not > allowed|https://lists.apache.org/thread.html/e1c5d56ecca7c1bc3608344ceac9b209bb8100fbca1c1928feb9cce7%40%3Cdev.calcite.apache.org%3E].) -- This message was sent by Atlassian Jira (v8.3.4#803005)