From c19ab980474ebd5cb170cbc110c9468584558661 Mon Sep 17 00:00:00 2001 From: Timur Shaidullin Date: Wed, 20 Dec 2017 17:55:27 +0300 Subject: [PATCH] [#6931] Added parser support for GRANT OPTION FOR clause --- .../src/main/resources/org/jooq/web/grammar-3.11.txt | 11 ++++++++++- jOOQ/src/main/java/org/jooq/impl/ParserImpl.java | 8 +++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.11.txt b/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.11.txt index 824dea1d79..b808b5ee0d 100644 --- a/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.11.txt +++ b/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.11.txt @@ -151,7 +151,16 @@ truncateStatement = 'TRUNCATE TABLE' tableName [ 'CONTINUE IDENTITY' | 'RESTART grantStatement = 'GRANT' ( 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' ) 'ON' tableName 'TO' ( userName | roleName | 'PUBLIC') ; -revokeStatement = 'REVOKE' ( 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' ) 'ON' tableName 'FROM' ( userName | roleName | 'PUBLIC') +revokeStatement = 'REVOKE' + [ 'GRANT OPTION FOR' ] + ( + 'SELECT' + | 'INSERT' + | 'UPDATE' + | 'DELETE' + ) + 'ON' tableName + 'FROM' ( userName | roleName | 'PUBLIC') ; selectStatement = select | values [ correlationName ] diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 2f7699d803..aa4822f098 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -1318,6 +1318,7 @@ class ParserImpl implements Parser { private static final DDLQuery parseRevoke(ParserContext ctx) { parseKeyword(ctx, "REVOKE"); + boolean grantOptionFor = parseKeywordIf(ctx, "GRANT OPTION FOR"); Privilege privilege = parsePrivilege(ctx); List privileges = null; @@ -1334,7 +1335,12 @@ class ParserImpl implements Parser { parseKeywordIf(ctx, "TABLE"); Table table = parseTableName(ctx); - RevokeOnStep s1 = privileges == null ? ctx.dsl.revoke(privilege) : ctx.dsl.revoke(privileges); + RevokeOnStep s1 = null; + if (grantOptionFor) + s1 = privileges == null ? ctx.dsl.revokeGrantOptionFor(privilege) : ctx.dsl.revokeGrantOptionFor(privileges); + else + s1 = privileges == null ? ctx.dsl.revoke(privilege) : ctx.dsl.revoke(privileges); + parseKeyword(ctx, "FROM"); User user = parseKeywordIf(ctx, "PUBLIC") ? null : parseUser(ctx);