@@ -3237,9 +3237,12 @@ func (p *Parser) parsePrivilege() ast.Privilege {
3237
3237
if e := p .tryParseExecutePrivilegeOnTableFunction (); e != nil {
3238
3238
return e
3239
3239
}
3240
- if r := p .tryRolePrivilege (); r != nil {
3240
+ if r := p .tryParseRolePrivilege (); r != nil {
3241
3241
return r
3242
3242
}
3243
+ if c := p .tryParseSelectPrivilegeOnChangeStream (); c != nil {
3244
+ return c
3245
+ }
3243
3246
return p .parsePrivilegeOnTable ()
3244
3247
}
3245
3248
@@ -3281,7 +3284,7 @@ func (p *Parser) tryParseExecutePrivilegeOnTableFunction() *ast.ExecutePrivilege
3281
3284
}
3282
3285
}
3283
3286
3284
- func (p * Parser ) tryRolePrivilege () * ast.RolePrivilege {
3287
+ func (p * Parser ) tryParseRolePrivilege () * ast.RolePrivilege {
3285
3288
if ! p .Token .IsKeywordLike ("ROLE" ) {
3286
3289
return nil
3287
3290
}
@@ -3293,6 +3296,31 @@ func (p *Parser) tryRolePrivilege() *ast.RolePrivilege {
3293
3296
}
3294
3297
}
3295
3298
3299
+ func (p * Parser ) tryParseSelectPrivilegeOnChangeStream () * ast.SelectPrivilegeOnChangeStream {
3300
+ if p .Token .Kind != "SELECT" {
3301
+ return nil
3302
+ }
3303
+ lexer := p .Lexer .Clone ()
3304
+ pos := p .expect ("SELECT" ).Pos
3305
+ if p .Token .Kind != "ON" {
3306
+ p .Lexer = lexer
3307
+ return nil
3308
+ }
3309
+ p .expect ("ON" )
3310
+ if ! p .Token .IsKeywordLike ("CHANGE" ) {
3311
+ p .Lexer = lexer
3312
+ return nil
3313
+ }
3314
+ p .expectKeywordLike ("CHANGE" )
3315
+ p .expectKeywordLike ("STREAM" )
3316
+ names := parseCommaSeparatedList (p , p .parseIdent )
3317
+
3318
+ return & ast.SelectPrivilegeOnChangeStream {
3319
+ Select : pos ,
3320
+ Names : names ,
3321
+ }
3322
+ }
3323
+
3296
3324
func (p * Parser ) parsePrivilegeOnTable () * ast.PrivilegeOnTable {
3297
3325
privileges := parseCommaSeparatedList (p , p .parseTablePrivilege )
3298
3326
p .expect ("ON" )
0 commit comments