From 7dbe23263512646e47717137d8579f7cab95df2f Mon Sep 17 00:00:00 2001 From: Tony Gravagno <499473+TonyGravagno@users.noreply.github.com> Date: Tue, 1 Oct 2024 13:12:45 -0700 Subject: [PATCH] Support 'mod' operator for mysql/mariadb --- pegjs/mariadb.pegjs | 2 +- pegjs/mysql.pegjs | 2 +- test/mysql-mariadb.spec.js | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pegjs/mariadb.pegjs b/pegjs/mariadb.pegjs index b03ebb4f..fc6232fa 100644 --- a/pegjs/mariadb.pegjs +++ b/pegjs/mariadb.pegjs @@ -2787,7 +2787,7 @@ multiplicative_expr multiplicative_operator = "*" / "/" / "%" / "||" - / "div"i { + / "div"i / "mod"i { return 'DIV' } / '&' / '>>' / '<<' / '^' / '|' diff --git a/pegjs/mysql.pegjs b/pegjs/mysql.pegjs index 82dd446d..02b293a0 100644 --- a/pegjs/mysql.pegjs +++ b/pegjs/mysql.pegjs @@ -3056,7 +3056,7 @@ multiplicative_expr multiplicative_operator = "*" / "/" / "%" / "||" - / "div"i { + / "div"i / "mod"i { return 'DIV' } / '&' / '>>' / '<<' / '^' / '|' diff --git a/test/mysql-mariadb.spec.js b/test/mysql-mariadb.spec.js index ad49b87b..8356fa9c 100644 --- a/test/mysql-mariadb.spec.js +++ b/test/mysql-mariadb.spec.js @@ -1135,10 +1135,10 @@ describe('mysql', () => { it('should throw error when args is not right', () => { let sql = `select convert(json_unquote(json_extract('{"thing": "252"}', "$.thing")));` - expect(parser.astify.bind(parser, sql)).to.throw('Expected "!=", "#", "#-", "#>", "#>>", "%", "&", "&&", "*", "+", ",", "-", "--", "->", "->>", "/", "/*", "<", "<<", "<=", "<>", "<@", "=", ">", ">=", ">>", "?", "?&", "?|", "@>", "AND", "BETWEEN", "IN", "IS", "LIKE", "NOT", "ON", "OR", "OVER", "REGEXP", "RLIKE", "USING", "XOR", "^", "div", "|", "||", or [ \\t\\n\\r] but ")" found.') - expect(parser.astify.bind(parser, 'select convert("");')).to.throw('Expected "!=", "#", "#-", "#>", "#>>", "%", "&", "&&", "*", "+", ",", "-", "--", "->", "->>", "/", "/*", "<", "<<", "<=", "<>", "<@", "=", ">", ">=", ">>", "?", "?&", "?|", "@>", "AND", "BETWEEN", "COLLATE", "IN", "IS", "LIKE", "NOT", "OR", "REGEXP", "RLIKE", "USING", "XOR", "^", "div", "|", "||", or [ \\t\\n\\r] but ")" found.') + expect(parser.astify.bind(parser, sql)).to.throw('Expected "!=", "#", "#-", "#>", "#>>", "%", "&", "&&", "*", "+", ",", "-", "--", "->", "->>", "/", "/*", "<", "<<", "<=", "<>", "<@", "=", ">", ">=", ">>", "?", "?&", "?|", "@>", "AND", "BETWEEN", "IN", "IS", "LIKE", "NOT", "ON", "OR", "OVER", "REGEXP", "RLIKE", "USING", "XOR", "^", "div", "mod", "|", "||", or [ \\t\\n\\r] but ")" found.') + expect(parser.astify.bind(parser, 'select convert("");')).to.throw('Expected "!=", "#", "#-", "#>", "#>>", "%", "&", "&&", "*", "+", ",", "-", "--", "->", "->>", "/", "/*", "<", "<<", "<=", "<>", "<@", "=", ">", ">=", ">>", "?", "?&", "?|", "@>", "AND", "BETWEEN", "COLLATE", "IN", "IS", "LIKE", "NOT", "OR", "REGEXP", "RLIKE", "USING", "XOR", "^", "div", "mod", "|", "||", or [ \\t\\n\\r] but ")" found.') sql = 'SELECT AVG(Quantity,age) FROM table1;' - expect(parser.astify.bind(parser, sql)).to.throw('Expected "!=", "#", "#-", "#>", "#>>", "%", "&", "&&", "(", ")", "*", "+", "-", "--", "->", "->>", ".", "/", "/*", "<", "<<", "<=", "<>", "<@", "=", ">", ">=", ">>", "?", "?&", "?|", "@>", "BETWEEN", "IN", "IS", "LIKE", "NOT", "REGEXP", "RLIKE", "XOR", "^", "div", "|", "||", [ \\t\\n\\r], [A-Za-z0-9_$\\x80-￿], or [A-Za-z0-9_:] but "," found.') + expect(parser.astify.bind(parser, sql)).to.throw('Expected "!=", "#", "#-", "#>", "#>>", "%", "&", "&&", "(", ")", "*", "+", "-", "--", "->", "->>", ".", "/", "/*", "<", "<<", "<=", "<>", "<@", "=", ">", ">=", ">>", "?", "?&", "?|", "@>", "BETWEEN", "IN", "IS", "LIKE", "NOT", "REGEXP", "RLIKE", "XOR", "^", "div", "mod", "|", "||", [ \\t\\n\\r], [A-Za-z0-9_$\\x80-￿], or [A-Za-z0-9_:] but "," found.') }) it('should join multiple table with comma', () => {