class GrantPrivilege extends PrivilegeStatement {

    public GrantPrivilege(List<String> userNames, String securable, List<QualifiedName> tableOrSchemaNames) {
        super(userNames, securable, tableOrSchemaNames);
    }

    public GrantPrivilege(List<String> userNames,
                          List<String> permissions,
                          String securable,
                          List<QualifiedName> tableOrSchemaNames) {
        super(userNames, permissions, securable, tableOrSchemaNames);
    }


    @Override
    public <R, C> R accept(AstVisitor<R, C> visitor, C context) {
        return visitor.visitGrantPrivilege(this, context);
    }

    @Override
    public String toString() {<FILL_FUNCTION_BODY>}
}

        return "GrantPrivilege{" +
               "allPrivileges=" + all +
               "permissions=" + permissions +
               ", userNames=" + userNames +
               '}';
    
<methods>public boolean all() ,public boolean equals(java.lang.Object) ,public int hashCode() ,public List<io.crate.sql.tree.QualifiedName> privilegeIdents() ,public List<java.lang.String> privileges() ,public java.lang.String securable() ,public List<java.lang.String> userNames() <variables>permits DenyPrivilege,permits GrantPrivilege,permits RevokePrivilege,protected final non-sealed boolean all,protected final non-sealed List<java.lang.String> permissions,private final non-sealed java.lang.String securable,private final non-sealed List<io.crate.sql.tree.QualifiedName> tableOrSchemaNames,protected final non-sealed List<java.lang.String> userNames