Visitar URL original
Support TUMBLE function · Issue #20 · JavaScriptor/js-sql-parser · GitHub
Skip to content

Support TUMBLE function #20

Description

@yuemingl

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)

Activity

  1. albin3 commented on Jun 4, 2019

    @albin3
    Member

    To add key word "INTERVAL" and support "INTERVAL quantity_expr unit_of_time" grammar.

  2. yuemingl commented on Jun 4, 2019

    @yuemingl
    Author

    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);
    }

  3. albin3 commented on Jun 4, 2019

    @albin3
    Member

    Yes, but SECOND, MINUTE, HOUR.. should better be pack as a "unit_of_time".

  4. albin3 commented on Jun 4, 2019

    @albin3
    Member
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions