Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Zfunction and Zstream support #1354

Merged
merged 112 commits into from
Dec 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
112 commits
Select commit Hold shift + click to select a range
7f4b2da
Update antlr gramma
akrambek Nov 12, 2024
84eacb3
Refactor scripts for zstream
akrambek Nov 14, 2024
a5f3121
Remove redundant files
akrambek Nov 14, 2024
cfe8ade
Remove redunant files
akrambek Nov 14, 2024
519279b
Fix typo
akrambek Nov 14, 2024
b60ee1e
Replace weather with commands
akrambek Nov 14, 2024
912bd26
Remove redundant exclude
akrambek Nov 14, 2024
1085600
WIP
akrambek Nov 25, 2024
7bc5c5d
Merge branch 'develop' into feature/z-catalog
akrambek Nov 25, 2024
4039029
Revert back the change
akrambek Nov 25, 2024
8a5ace9
Checkpoint zview
akrambek Nov 26, 2024
92930f8
Stable state
akrambek Nov 26, 2024
463d426
WIP
akrambek Nov 26, 2024
bed9c1c
WIP
akrambek Nov 26, 2024
586ea67
WIP
akrambek Nov 26, 2024
ac7758d
WIP
akrambek Nov 26, 2024
8372f5c
WIP
akrambek Nov 26, 2024
3dc8c3a
WIP
akrambek Nov 26, 2024
478be8f
WIP
akrambek Nov 27, 2024
d1b247c
WIP
akrambek Nov 27, 2024
546473c
Checkpoint
akrambek Nov 27, 2024
99b7216
Remove uncessary files
akrambek Nov 27, 2024
f6435a3
WIP
akrambek Nov 27, 2024
4bbc4aa
WIP
akrambek Nov 28, 2024
8971b87
WIP
akrambek Nov 28, 2024
9dee812
WIP
akrambek Nov 28, 2024
cc6c80e
WIP
akrambek Nov 28, 2024
212872d
Change user
akrambek Nov 28, 2024
21e6963
Checkpoint
akrambek Nov 28, 2024
e4377a0
Update the script
akrambek Nov 28, 2024
b052c58
WIP
akrambek Nov 29, 2024
5401488
WIP
akrambek Nov 29, 2024
7fc64be
WIP
akrambek Nov 30, 2024
5a286cc
WIP
akrambek Dec 1, 2024
38f7371
WIP
akrambek Dec 1, 2024
d1270a1
WIP
akrambek Dec 1, 2024
eb0bdbb
WIP
akrambek Dec 2, 2024
1fea51d
WIP
akrambek Dec 2, 2024
e8f5e7e
Checkpoint
akrambek Dec 2, 2024
48cfbf7
Merge branch 'feature/z-catalog' into feature/ztable
akrambek Dec 2, 2024
13fcdb6
WIP
akrambek Dec 2, 2024
7d8c68d
WIP
akrambek Dec 2, 2024
8e199ba
WIP
akrambek Dec 3, 2024
1042c68
WIP
akrambek Dec 4, 2024
2e53b82
WIP
akrambek Dec 4, 2024
7614312
Checkpoint
akrambek Dec 4, 2024
b16a5e8
Checkpoint
akrambek Dec 5, 2024
97314ac
WIP
akrambek Dec 5, 2024
7c5db96
Fix casting
akrambek Dec 5, 2024
ef9077a
WIP
akrambek Dec 6, 2024
d47d74f
Ignore case sensitivity
akrambek Dec 6, 2024
a45c87c
WIP
akrambek Dec 9, 2024
8a9305b
WIP
akrambek Dec 9, 2024
cd63668
Fix remaining issues
akrambek Dec 9, 2024
93126b7
WIP
akrambek Dec 10, 2024
17fdc27
Fix stylecheck errors
akrambek Dec 10, 2024
0bbab15
Merge branch 'feature/z-catalog' into feature/ztable
akrambek Dec 10, 2024
9f606b4
WIP
akrambek Dec 11, 2024
34f93bf
WIP
akrambek Dec 13, 2024
2a4815f
Merge branch 'develop' into feature/ztable
akrambek Dec 13, 2024
49a7546
WIP
akrambek Dec 14, 2024
e32253c
WIP
akrambek Dec 14, 2024
da9a880
WIP all marros
akrambek Dec 16, 2024
e8324c7
WIP remove statements
akrambek Dec 16, 2024
e5532e5
WIP
akrambek Dec 16, 2024
5546db9
WIP
akrambek Dec 16, 2024
c4ad8f5
WIP
akrambek Dec 16, 2024
57fb1d5
WIP
akrambek Dec 16, 2024
e87bc76
WIP
akrambek Dec 16, 2024
2cff032
WIP
akrambek Dec 17, 2024
6f9409b
WIP
akrambek Dec 17, 2024
9928d02
WIP
akrambek Dec 17, 2024
bd9e9c1
Checkpoint
akrambek Dec 17, 2024
e923e86
Merge branch 'develop' into feature/ztable
akrambek Dec 17, 2024
f26c2cc
WIP
akrambek Dec 17, 2024
fa2197a
WIP
akrambek Dec 17, 2024
11f3e09
WIP
akrambek Dec 17, 2024
661a4bf
Catch exception
akrambek Dec 17, 2024
bf4ee6c
Fix tests
akrambek Dec 17, 2024
41be9ea
WIP
akrambek Dec 17, 2024
56e4d34
Fix checkstyle
akrambek Dec 17, 2024
80103c0
WIP
akrambek Dec 17, 2024
1da5fa4
WIP
akrambek Dec 17, 2024
10801a1
WIP
akrambek Dec 18, 2024
d45ae92
WIP
akrambek Dec 18, 2024
ec564d1
WIP
akrambek Dec 18, 2024
5da2130
WIP
akrambek Dec 18, 2024
469afdd
Terminate transition on error
akrambek Dec 18, 2024
b63aef5
Terminate state on error
akrambek Dec 18, 2024
16c95fa
Merge branch 'feature/ztable' into feature/actual-zstream
akrambek Dec 18, 2024
f67b6ca
WIP
akrambek Dec 18, 2024
cf02955
Checkpoint show zfunctions
akrambek Dec 19, 2024
2145d26
Merge branch 'develop' into feature/actual-zstream
akrambek Dec 19, 2024
f51d6b8
WIP
akrambek Dec 19, 2024
c720743
WIP
akrambek Dec 19, 2024
275f35e
WIP
akrambek Dec 19, 2024
de7d310
WIP till morning
akrambek Dec 19, 2024
477e950
WIP
akrambek Dec 20, 2024
ceea46f
WIP
akrambek Dec 22, 2024
b8888e2
Add test
akrambek Dec 23, 2024
c80aaca
WIP
akrambek Dec 24, 2024
c88fb01
Support SHOW ZSTREAMS
akrambek Dec 24, 2024
4222104
Checkpoint
akrambek Dec 24, 2024
2f1ff78
Merge branch 'develop' into feature/actual-zstream
akrambek Dec 24, 2024
44b7d64
WIP
akrambek Dec 25, 2024
a56c07a
WIP
akrambek Dec 26, 2024
767c4c1
WIP
akrambek Dec 26, 2024
a444597
WIP
akrambek Dec 26, 2024
604ca67
Clean up
akrambek Dec 26, 2024
491dec0
Remove error printing
akrambek Dec 26, 2024
de5b924
disable logging
akrambek Dec 26, 2024
b9e7f11
WIP
akrambek Dec 26, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ options {

Dollar: '$';

DOLLAR_DELIMITER: '$$';

OPEN_PAREN: '(';

CLOSE_PAREN: ')';
Expand All @@ -58,6 +60,10 @@ STAR: '*';

EQUAL: '=';

DISPATCH_ON: 'DISPATCH_ON';

HANDLERS: 'HANDLERS';

DOT: '.';
//NamedArgument : ':=';

Expand Down Expand Up @@ -295,7 +301,7 @@ TOPIC: 'TOPIC';

TOPICS: 'TOPICS';

STREAM: 'STREAM';
ZSTREAM: 'ZSTREAM';

ZVIEW: 'ZVIEW';

Expand All @@ -313,6 +319,8 @@ USER: 'USER';

USING: 'USING';

LINK: 'LINK';

VARIADIC: 'VARIADIC';

WHEN: 'WHEN';
Expand Down Expand Up @@ -548,6 +556,12 @@ FUNCTION: 'FUNCTION';

FUNCTIONS: 'FUNCTIONS';

ZFUNCTION: 'ZFUNCTION';

ZFUNCTIONS: 'ZFUNCTIONS';

ZSTREAMS: 'ZSTREAMS';

GLOBAL: 'GLOBAL';

GRANTED: 'GRANTED';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ stmt
| createforeignserverstmt
| createforeigntablestmt
| createfunctionstmt
| createzfunctionstmt
| creategroupstmt
| creatematviewstmt
| createzviewstmt
Expand All @@ -106,7 +107,7 @@ stmt
| createseqstmt
| createstmt
| createztstmt
| createstreamstmt
| createzstreamstmt
| createsubscriptionstmt
| createstatsstmt
| createtablespacestmt
Expand Down Expand Up @@ -414,15 +415,15 @@ altertablestmt
| ALTER MATERIALIZED VIEW (IF_P EXISTS)? qualified_name alter_table_cmds
| ALTER MATERIALIZED VIEW ALL IN_P TABLESPACE name (OWNED BY role_list)? SET TABLESPACE name opt_nowait
| ALTER FOREIGN TABLE (IF_P EXISTS)? relation_expr alter_table_cmds
| ALTER STREAM (IF_P EXISTS)? relation_expr alter_stream_cmds
| ALTER ZSTREAM (IF_P EXISTS)? relation_expr alter_zstream_cmds
| ALTER ZVIEW (IF_P EXISTS)? qualified_name alter_table_cmds
;

alter_stream_cmds
: alter_stream_cmd (COMMA alter_stream_cmd)*
alter_zstream_cmds
: alter_zstream_cmd (COMMA alter_zstream_cmd)*
;

alter_stream_cmd
alter_zstream_cmd
: ADD_P columnDef
| ADD_P IF_P NOT EXISTS columnDef
| ADD_P COLUMN columnDef
Expand Down Expand Up @@ -693,25 +694,55 @@ copy_generic_opt_arg_list_item
: opt_boolean_or_string
;

createstreamstmt
: CREATE STREAM (IF_P NOT EXISTS)? stream_name OPEN_PAREN stream_columns CLOSE_PAREN opt_with_stream
createzstreamstmt
: CREATE ZSTREAM (IF_P NOT EXISTS)? zstream_name OPEN_PAREN zstream_columns CLOSE_PAREN opt_with_zstream
;

stream_name
zstream_name
: qualified_name
;

stream_columns
: stream_column (COMMA stream_column)*
zstream_columns
: zstream_column (COMMA zstream_column)*
;

stream_column
: colid typename
zstream_column
: colid typename opt_generated_clause
;

opt_with_stream
: WITH reloptions
|
opt_generated_clause
: GENERATED ALWAYS AS generation_type
| /* Empty */
;

generation_type
: IDENTITY_P
| NOW
;

opt_with_zstream
: WITH OPEN_PAREN zreloptions CLOSE_PAREN
;

zreloptions
: zreloption_elem (COMMA zreloption_elem)*
;

zreloption_elem
: DISPATCH_ON EQUAL sconst
| HANDLERS EQUAL OPEN_PAREN handler_mappings CLOSE_PAREN
;

handler_mappings
: handler_mapping (COMMA handler_mapping)*
;

handler_mapping
: sconst TO function_name
;

function_name
: sconst
;

createztstmt
Expand Down Expand Up @@ -1645,9 +1676,10 @@ show_object_type_name
| VIEWS
| MATERIALIZED VIEWS
| TOPICS
| HEAD
| ZTABLES
| ZVIEWS
| ZFUNCTIONS
| ZSTREAMS
;

dropstmt
Expand All @@ -1671,9 +1703,8 @@ object_type_any_name
| VIEW
| MATERIALIZED VIEW
| TOPIC
| STREAM
| ZSTREAM
| ZVIEW
| HEAD
| ZTABLE
| INDEX
| FOREIGN TABLE
Expand Down Expand Up @@ -2010,14 +2041,19 @@ opt_nulls_order
|
;

createzfunctionstmt
: CREATE ZFUNCTION func_name func_args_with_defaults
RETURNS TABLE OPEN_PAREN table_func_column_list CLOSE_PAREN LANGUAGE SQL_P AS DOLLAR_DELIMITER selectstmt SEMI DOLLAR_DELIMITER
;

createfunctionstmt
: CREATE opt_or_replace (FUNCTION | PROCEDURE) func_name func_args_with_defaults (
RETURNS (func_return | TABLE OPEN_PAREN table_func_column_list CLOSE_PAREN)
)? createfunc_opt_list
;

opt_type_parameters
: '<' type_parameters '>'
: LT type_parameters GT
|
;

Expand Down Expand Up @@ -4456,6 +4492,8 @@ unreserved_keyword
| FORWARD
| FUNCTION
| FUNCTIONS
| ZFUNCTION
| ZFUNCTIONS
| GENERATED
| GLOBAL
| GRANTED
Expand Down Expand Up @@ -4618,6 +4656,7 @@ unreserved_keyword
| SYSID
| SYSTEM_P
| TABLES
| ZTABLES
| TABLESPACE
| TEMP
| TEMPLATE
Expand Down Expand Up @@ -4812,6 +4851,7 @@ from pl_gram.y, line ~2982
| SOME
| SYMMETRIC
| TABLE
| ZTABLE
| THEN
| TO
| TRAILING
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,64 +14,78 @@
*/
package io.aklivity.zilla.runtime.binding.pgsql.parser;

import java.util.BitSet;
import java.util.List;

import org.antlr.v4.runtime.ANTLRErrorListener;
import org.antlr.v4.runtime.BailErrorStrategy;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.Parser;
import org.antlr.v4.runtime.RecognitionException;
import org.antlr.v4.runtime.Recognizer;
import org.antlr.v4.runtime.atn.ATNConfigSet;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.tree.ParseTreeWalker;

import io.aklivity.zilla.runtime.binding.pgsql.parser.listener.SqlAlterStreamTopicListener;
import io.aklivity.zilla.runtime.binding.pgsql.parser.listener.SqlAlterZstreamTopicListener;
import io.aklivity.zilla.runtime.binding.pgsql.parser.listener.SqlAlterZtableTopicListener;
import io.aklivity.zilla.runtime.binding.pgsql.parser.listener.SqlCommandListener;
import io.aklivity.zilla.runtime.binding.pgsql.parser.listener.SqlCreateFunctionListener;
import io.aklivity.zilla.runtime.binding.pgsql.parser.listener.SqlCreateStreamListener;
import io.aklivity.zilla.runtime.binding.pgsql.parser.listener.SqlCreateZfunctionListener;
import io.aklivity.zilla.runtime.binding.pgsql.parser.listener.SqlCreateZstreamListener;
import io.aklivity.zilla.runtime.binding.pgsql.parser.listener.SqlCreateZtableTopicListener;
import io.aklivity.zilla.runtime.binding.pgsql.parser.listener.SqlCreateZviewListener;
import io.aklivity.zilla.runtime.binding.pgsql.parser.listener.SqlDropListener;
import io.aklivity.zilla.runtime.binding.pgsql.parser.listener.SqlShowListener;
import io.aklivity.zilla.runtime.binding.pgsql.parser.model.Alter;
import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateStream;
import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateFunction;
import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateTable;
import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateZfunction;
import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateZstream;
import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateZview;
import io.aklivity.zilla.runtime.binding.pgsql.parser.model.Drop;
import io.aklivity.zilla.runtime.binding.pgsql.parser.model.Function;

public final class PgsqlParser
{
private final ParseTreeWalker walker;
private final BailErrorStrategy errorStrategy;
private final PostgreSqlLexer lexer;
private final CommonTokenStream tokens;
private final PostgreSqlParser parser;
private final SqlCommandListener commandListener;
private final SqlCreateStreamListener createStreamListener;
private final SqlCreateZstreamListener createStreamListener;
private final SqlCreateZtableTopicListener createTableListener;
private final SqlAlterZtableTopicListener alterTableListener;
private final SqlAlterStreamTopicListener alterStreamListener;
private final SqlAlterZstreamTopicListener alterStreamListener;
private final SqlCreateFunctionListener createFunctionListener;
private final SqlCreateZfunctionListener createZfunctionListener;
private final SqlCreateZviewListener createMaterializedViewListener;
private final SqlShowListener showListener;
private final SqlDropListener dropListener;

public PgsqlParser()
{
this.walker = new ParseTreeWalker();
this.errorStrategy = new BailErrorStrategy();
BailErrorStrategy errorStrategy = new BailErrorStrategy();
ParserErrorListener errorListener = new ParserErrorListener();
this.lexer = new PostgreSqlLexer(null);
this.tokens = new CommonTokenStream(lexer);
this.parser = new PostgreSqlParser(tokens);
this.parser.removeErrorListeners();
this.parser.addErrorListener(errorListener);
this.parser.setErrorHandler(errorStrategy);

this.commandListener = new SqlCommandListener(tokens);
this.createTableListener = new SqlCreateZtableTopicListener(tokens);
this.alterTableListener = new SqlAlterZtableTopicListener(tokens);
this.alterStreamListener = new SqlAlterStreamTopicListener(tokens);
this.createStreamListener = new SqlCreateStreamListener(tokens);
this.alterStreamListener = new SqlAlterZstreamTopicListener(tokens);
this.createStreamListener = new SqlCreateZstreamListener(tokens);
this.createFunctionListener = new SqlCreateFunctionListener(tokens);
this.createZfunctionListener = new SqlCreateZfunctionListener(tokens);
this.createMaterializedViewListener = new SqlCreateZviewListener(tokens);
this.dropListener = new SqlDropListener();
this.showListener = new SqlShowListener();
parser.setErrorHandler(errorStrategy);
}

public String parseCommand(
Expand Down Expand Up @@ -102,20 +116,27 @@ public Alter parseAlterStream(
return alterStreamListener.alter();
}

public CreateStream parseCreateStream(
public CreateZstream parseCreateZstream(
String sql)
{
parser(sql, createStreamListener);
return createStreamListener.stream();
}

public Function parseCreateFunction(
public CreateFunction parseCreateFunction(
String sql)
{
parser(sql, createFunctionListener);
return createFunctionListener.function();
}

public CreateZfunction parseCreateZfunction(
String sql)
{
parser(sql, createZfunctionListener);
return createZfunctionListener.zfunction();
}

public CreateZview parseCreateZView(
String sql)
{
Expand Down Expand Up @@ -158,4 +179,54 @@ private void parser(
{
}
}

private final class ParserErrorListener implements ANTLRErrorListener
{
@Override
public void syntaxError(
Recognizer<?, ?> recognizer,
Object offendingSymbol,
int line,
int charPositionInLine,
String msg,
RecognitionException e)
{
//Only for debugging
//System.err.println("Syntax error at line " + line + ":" + charPositionInLine + " " + msg);
}

@Override
public void reportAmbiguity(
Parser recognizer,
DFA dfa,
int startIndex,
int stopIndex,
boolean exact,
BitSet ambigAlts,
ATNConfigSet configs)
{
}

@Override
public void reportAttemptingFullContext(
Parser recognizer,
DFA dfa,
int startIndex,
int stopIndex,
BitSet conflictingAlts,
ATNConfigSet configs)
{
}

@Override
public void reportContextSensitivity(
Parser recognizer,
DFA dfa,
int startIndex,
int stopIndex,
int prediction,
ATNConfigSet configs)
{
}
}
}
Loading
Loading