I think your ANY operator's signature is ANY(column_name, ....)? In this case you might use Descriptor operator as an example to see how does a operator that accepts column name work: https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/sql/SqlDescriptorOperator.java
-Rui On Wed, Jan 27, 2021 at 10:49 PM Lana Ramjit <l...@cs.ucla.edu> wrote: > Hi all, > Apologies in advance for the longer e-mail! I am a grad student adapting > Calcite for use in a research project prototype. The functionality I am > trying to add involves inserting non-executable operators into a plan to > represent abstract sets of queries. > For example, it takes two queries like, > > "select a from t" > and > "select b from t" > > and combines them into: > > "select any {a, b} from t". > Similarly, an "any{}" operator can have, e.g. a list of filtering > conditions and other grammatical options. These queries are not intended to > ever be executed and only exist for us to write planning rules over! > > I am able to parse statements like the one above, but I am having a great > bit of trouble trying to validate and convert to a relational expression. > The output of the convertSqlToRel test I added is: > > LogicalProject(EXPR$0=[ANY($1)]) > LogicalTableScan(table=[(t1, t2, t3)]) > > I created a SqlNode named SqlAny and a RexNode RexAny that is parsed > correctly, but after validation it is converted to a SqlBasicCall. I am > able to catch it by examining the operator type in > convertExtendedExpression() and return a RexAny node, but I am not sure > what to add to the validator to avoid this hack and preserve the > fieldnames that are operands to SqlAny. > > Please, any and all help is appreciated! > Cheers, > Lana >