Support TUMBLE function
More and more SQL engines start supporting streaming functions, like
TUMBLE(rowtime, INTERVAL '1' HOUR)
described here https://calcite.apache.org/docs/stream.html#tumbling-windows-improved
Is it possible to support parameter list like "rowtime, INTERVAL '1' HOUR"?
Other functions like: DATE_ADD(input_value, INTERVAL quantity_expr unit_of_time) DATE_SUB(input_value, INTERVAL quantity_expr unit_of_time)
To add key word "INTERVAL" and support "INTERVAL quantity_expr unit_of_time" grammar.
It works for me after changed file sqlParser.jison by adding: SECOND return 'SECOND' MINUTE return 'MINUTE' HOUR return 'HOUR' SECONDS return 'SECONDS' MINUTES return 'MINUTES' HOURS return 'HOURS' INTERVAL return 'INTERVAL'
expr : boolean_primary { $$ = $1 } | boolean_primary IS not_opt boolean_extra { $$ = { type: 'IsExpression', hasNot: $3, left: $1, right: $4 } } | NOT expr { $$ = { type: 'NotExpression', value: $2 } } | expr '&&' expr { $$ = { type: 'AndExpression', operator: $2, left: $1, right: $3 } } | expr '||' expr { $$ = { type: 'OrExpression', operator: $2, left: $1, right: $3 } } | expr OR expr { $$ = { type: 'OrExpression', operator: $2, left: $1, right: $3 } } | expr AND expr { $$ = { type: 'AndExpression', operator: $2, left: $1, right: $3 } } | expr XOR expr { $$ = { type: 'XORExpression', left: $1, right: $3 } } | INTERVAL expr SECOND { $$ = { type: 'IntervalExpression', value: $2, unit: $3 } } | INTERVAL expr MINUTE { $$ = { type: 'IntervalExpression', value: $2, unit: $3 } } | INTERVAL expr HOUR { $$ = { type: 'IntervalExpression', value: $2, unit: $3 } } | INTERVAL expr SECONDS { $$ = { type: 'IntervalExpression', value: $2, unit: $3 } } | INTERVAL expr MINUTES { $$ = { type: 'IntervalExpression', value: $2, unit: $3 } } | INTERVAL expr HOURS { $$ = { type: 'IntervalExpression', value: $2, unit: $3 } } ;
and changed file stringify.js by adding:
Sql.prototype.travelIntervalExpression = function (ast) { this.appendKeyword('interval'); this.travel(ast.value); this.appendKeyword(ast.unit); }
Yes, but SECOND, MINUTE, HOUR.. should better be pack as a "unit_of_time".
Will support follows https://dev.mysql.com/doc/refman/5.7/en/expressions.html#temporal-intervals