0

AggregateCall将作为表达式一部分的anHAVING与 a 中的相应字段相关联的正确方法是RelRecordType什么LogicalAggregate?如果 theAggregateCall不是SELECT子句的一部分,LogicalAggregate'RelRecordType仍然有它,但AggregateCall'name属性设置为NULL并且RelRecordType.getField(AggregateCall.getName())在这种情况下不能使用。如果AggregateCall是最终输出的一部分,name则设置它并 RelRecordType.getField(AggregateCall.getName())返回正确的字段。

4

1 回答 1

1

使用字段序数而不是名称。

在 CalciteRelNodeRexNodes 的世界中,字段名称并不重要;它们的存在主要是为了帮助您在调试时了解字段的用途。s 的名字AggregateCall就更不重要了;它们存在以便Aggregate可以为其字段提供合理的名称,如果它们不存在,那很好。

如果您SELECTN个字段(编号为 0 .. N -1)和一个HAVING子句,您可能会将HAVING谓词添加为字段 N,应用Filter关系运算符,然后应用 aProject以便仅返回字段 0 .. N -1。我很确定这是SqlToRelConverter已经做到的。

于 2017-11-01T17:02:51.940 回答