diff --git a/sql/pom.xml b/sql/pom.xml
index cb03c8601c..9d46e9832d 100644
--- a/sql/pom.xml
+++ b/sql/pom.xml
@@ -23,6 +23,7 @@
phoenix
plsql
postgresql
+ redshift
snowflake
sqlite
teradata
diff --git a/sql/redshift/README.md b/sql/redshift/README.md
new file mode 100644
index 0000000000..823059e433
--- /dev/null
+++ b/sql/redshift/README.md
@@ -0,0 +1,3 @@
+# An ANTLR4 grammar for AWS Redshift
+
+https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_SQLCommandRef.html
\ No newline at end of file
diff --git a/sql/redshift/RedshiftLexer.g4 b/sql/redshift/RedshiftLexer.g4
new file mode 100644
index 0000000000..1253365100
--- /dev/null
+++ b/sql/redshift/RedshiftLexer.g4
@@ -0,0 +1,358 @@
+/*
+Redshift SQL grammar.
+The MIT License (MIT).
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+lexer grammar RedshiftLexer;
+
+options {
+ caseInsensitive = true;
+}
+
+ABORT : 'ABORT';
+ACCEPTINVCHARS : 'ACCEPTINVCHARS';
+ACCESS : 'ACCESS';
+ADD : 'ADD';
+ALL : 'ALL';
+ALTER : 'ALTER';
+ANALYZE : 'ANALYZE';
+AND : 'AND';
+APPEND : 'APPEND';
+AS : 'AS';
+ATTACH : 'ATTACH';
+AUTHENTICATION : 'AUTHENTICATION';
+AUTHENTICATION_ARN : 'AUTHENTICATION_ARN';
+AUTHORIZATION : 'AUTHORIZATION';
+AUTO : 'AUTO';
+AUTO_CREATE_ROLES : 'AUTO_CREATE_ROLES';
+AZ64 : 'AZ64';
+BEGIN : 'BEGIN';
+BIGINT : 'BIGINT';
+BOOL : 'BOOL';
+BOOLEAN : 'BOOLEAN';
+BOOST : 'BOOST';
+BPCHAR : 'BPCHAR';
+BYTEDICT : 'BYTEDICT';
+CALL : 'CALL';
+CANCEL : 'CANCEL';
+CASCADE : 'CASCADE';
+CASE_INSENSITIVE : 'CASE_INSENSITIVE';
+CASE_SENSITIVE : 'CASE_SENSITIVE';
+CHAR : 'CHAR';
+CHARACTER : 'CHARACTER';
+CI : 'CI';
+CLOSE : 'CLOSE';
+COLLATE : 'COLLATE';
+COLUMN : 'COLUMN';
+COLUMNS : 'COLUMNS';
+COMMIT : 'COMMIT';
+COMMITTED : 'COMMITTED';
+COMPOUND : 'COMPOUND';
+COMPRESSION : 'COMPRESSION';
+COMPROWS : 'COMPROWS';
+CONJUNCTION : 'CONJUNCTION';
+CONNECTION : 'CONNECTION';
+CONSTRAINT : 'CONSTRAINT';
+CONSTRAINTS : 'CONSTRAINTS';
+COPY : 'COPY';
+CREATE : 'CREATE';
+CREATEDB : 'CREATEDB';
+CREATEUSER : 'CREATEUSER';
+CS : 'CS';
+CURRENT_USER : 'CURRENT_USER';
+CURSOR : 'CURSOR';
+DATABASE : 'DATABASE';
+DATABASES : 'DATABASES';
+DATASHARE : 'DATASHARE';
+DATASHARES : 'DATASHARES';
+DATE : 'DATE';
+DAY : 'DAY';
+DEALLOCATE : 'DEALLOCATE';
+DECLARE : 'DECLARE';
+DEFAULT : 'DEFAULT';
+DEFINITION : 'DEFINITION';
+DELETE : 'DELETE';
+DELTA : 'DELTA';
+DELTA32K : 'DELTA32K';
+DESC : 'DESC';
+DETACH : 'DETACH';
+DISABLE : 'DISABLE';
+DISTKEY : 'DISTKEY';
+DISTSTYLE : 'DISTSTYLE';
+DOUBLE : 'DOUBLE';
+DROP : 'DROP';
+ENABLE : 'ENABLE';
+ENCODE : 'ENCODE';
+END : 'END';
+EVEN : 'EVEN';
+EXCLUDE : 'EXCLUDE';
+EXECUTE : 'EXEC' 'UTE'?;
+EXISTS : 'EXISTS';
+EXPLAIN : 'EXPLAIN';
+EXTERNAL : 'EXTERNAL';
+EXTERNALID : 'EXTERNALID';
+F : 'F';
+FALSE : 'FALSE';
+FETCH : 'FETCH';
+FILLTARGET : 'FILLTARGET';
+FLOAT4 : 'FLOAT4';
+FLOAT8 : 'FLOAT8';
+FOR : 'FOR';
+FORCE : 'FORCE';
+FOREIGN : 'FOREIGN';
+FROM : 'FROM';
+FULL : 'FULL';
+FUNCTION : 'FUNCTION';
+FUNCTIONS : 'FUNCTIONS';
+GB : 'GB';
+GEOGRAPHY : 'GEOGRAPHY';
+GEOMETRY : 'GEOMETRY';
+GRANT : 'GRANT';
+GRANTS : 'GRANTS';
+GROUP : 'GROUP';
+GROUPS : 'GROUPS';
+HISTORY_MODE : 'HISTORY_MODE';
+HLLSKETCH : 'HLLSKETCH';
+IAM : 'IAM';
+IAM_ROLE : 'IAM_ROLE';
+IDENTITY : 'IDENTITY';
+IF : 'IF';
+IGNOREEXTRA : 'IGNOREEXTRA';
+IN : 'IN';
+INCLUDE : 'INCLUDE';
+INCLUDENEW : 'INCLUDENEW';
+INERROR : 'INERROR';
+INOUT : 'INOUT';
+INSERT : 'INSERT';
+INT : 'INT';
+INT2 : 'INT2';
+INT4 : 'INT4';
+INT8 : 'INT8';
+INTEGER : 'INTEGER';
+INTEGRATION : 'INTEGRATION';
+INTERVAL : 'INTERVAL';
+INTO : 'INTO';
+ISOLATION : 'ISOLATION';
+KEY : 'KEY';
+LANGUAGE : 'LANGUAGE';
+LEVEL : 'LEVEL';
+LIBRARY : 'LIBRARY';
+LIKE : 'LIKE';
+LIMIT : 'LIMIT';
+LOCAL : 'LOCAL';
+LOCK : 'LOCK';
+LZO : 'LZO';
+MASKING : 'MASKING';
+MATERIALIZED : 'MATERIALIZED';
+MB : 'MB';
+MERGE : 'MERGE';
+MODEL : 'MODEL';
+MONTH : 'MONTH';
+MOSTLY16 : 'MOSTLY16';
+MOSTLY32 : 'MOSTLY32';
+MOSTLY8 : 'MOSTLY8';
+MTLS : 'MTLS';
+NAMESPACE : 'NAMESPACE';
+NCHAR : 'NCHAR';
+NO : 'NO';
+NOCREATEDB : 'NOCREATEDB';
+NOCREATEUSER : 'NOCREATEUSER';
+NONE : 'NONE';
+NOT : 'NOT';
+NULL_ : 'NULL';
+NUMERIC : 'NUMERIC';
+NVARCHAR : 'NVARCHAR';
+OF : 'OF';
+OFF : 'OFF';
+ON : 'ON';
+ONLY : 'ONLY';
+OPTION : 'OPTION';
+OR : 'OR';
+OUT : 'OUT';
+OWNER : 'OWNER';
+PARAMETER : 'PARAMETER';
+PARAMETERS : 'PARAMETERS';
+PASSWORD : 'PASSWORD';
+PERCENT : 'PERCENT';
+POLICIES : 'POLICIES';
+POLICY : 'POLICY';
+PRECISION : 'PRECISION';
+PREDICT : 'PREDICT';
+PREPARE : 'PREPARE';
+PRIMARY : 'PRIMARY';
+PRIVILEGES : 'PRIVILEGES';
+PROCEDURE : 'PROCEDURE';
+PROCEDURES : 'PROCEDURES';
+PROVIDER : 'PROVIDER';
+PUBLIC : 'PUBLIC';
+PUBLICACCESSIBLE : 'PUBLICACCESSIBLE';
+QUERY_ALL_STATES : 'QUERY_ALL_STATES';
+QUOTA : 'QUOTA';
+RAW : 'RAW';
+READ : 'READ';
+RECLUSTER : 'RECLUSTER';
+REFERENCES : 'REFERENCES';
+REFRESH : 'REFRESH';
+REFRESH_INTERVAL : 'REFRESH_INTERVAL';
+REINDEX : 'REINDEX';
+REMOVE : 'REMOVE';
+RENAME : 'RENAME';
+REPEATABLE : 'REPEATABLE';
+REPLACE : 'REPLACE';
+RESET : 'RESET';
+RESTRICT : 'RESTRICT';
+RESTRICTED : 'RESTRICTED';
+REVOKE : 'REVOKE';
+RLS : 'RLS';
+ROLE : 'ROLE';
+ROLLBACK : 'ROLLBACK';
+ROW : 'ROW';
+RUNLENGTH : 'RUNLENGTH';
+SCHEMA : 'SCHEMA';
+SCHEMAS : 'SCHEMAS';
+SECOND : 'SECOND';
+SECRET_ARN : 'SECRET_ARN';
+SECURITY : 'SECURITY';
+SELECT : 'SELECT';
+SERIALIZABLE : 'SERIALIZABLE';
+SESSION : 'SESSION';
+SESSION_USER : 'SESSION_USER';
+SET : 'SET';
+SHOW : 'SHOW';
+SMALLINT : 'SMALLINT';
+SNAPSHOT : 'SNAPSHOT';
+SORT : 'SORT';
+SORTKEY : 'SORTKEY';
+SUPER : 'SUPER';
+SYSLOG : 'SYSLOG';
+SYSTEM : 'SYSTEM';
+T : 'T';
+TABLE : 'TABLE';
+TABLES : 'TABLES';
+TB : 'TB';
+TEMP : 'TEMP';
+TEMPORARY : 'TEMPORARY';
+TEXT : 'TEXT';
+TEXT255 : 'TEXT255';
+TEXT32K : 'TEXT32K';
+TIME : 'TIME';
+TIMEOUT : 'TIMEOUT';
+TIMESTAMP : 'TIMESTAMP';
+TIMESTAMPTZ : 'TIMESTAMPTZ';
+TIMETZ : 'TIMETZ';
+TO : 'TO';
+TRANSACTION : 'TRANSACTION';
+TRUE : 'TRUE';
+TRUNCATE : 'TRUNCATE';
+TRUNCATECOLUMNS : 'TRUNCATECOLUMNS';
+TYPE : 'TYPE';
+UNCOMMITTED : 'UNCOMMITTED';
+UNIQUE : 'UNIQUE';
+UNLIMITED : 'UNLIMITED';
+UNLOAD : 'UNLOAD';
+UNSRESTRICTED : 'UNSRESTRICTED';
+UNTIL : 'UNTIL';
+UPDATE : 'UPDATE';
+URI : 'URI';
+USE : 'USE';
+USER : 'USER';
+USING : 'USING';
+VACUUM : 'VACUUM';
+VALID : 'VALID';
+VARBINARY : 'VARBINARY';
+VARBYTE : 'VARBYTE';
+VARCHAR : 'VARCHAR';
+VARYING : 'VARYING';
+VERBOSE : 'VERBOSE';
+VIEW : 'VIEW';
+WITH : 'WITH';
+WITHOUT : 'WITHOUT';
+WORK : 'WORK';
+YEAR : 'YEAR';
+YES : 'YES';
+ZONE : 'ZONE';
+ZSTD : 'ZSTD';
+PRIORITY : 'PRIORITY';
+WRITE : 'WRITE';
+IS : 'IS';
+FORMAT : 'FORMAT';
+KEYS : 'KEYS';
+EXPORTED : 'EXPORTED';
+PARTITION : 'PARTITION';
+DATA : 'DATA';
+CATALOG : 'CATALOG';
+ACCOUNT : 'ACCOUNT';
+
+
+SPACE : [ \t\r\n]+ -> skip;
+COMMENT : '/*' (COMMENT | .)*? '*/' -> channel(HIDDEN);
+LINE_COMMENT : '--' ~[\r\n]* -> channel(HIDDEN);
+
+DOUBLE_QUOTE_ID : '"' ~'"'+ '"';
+DOUBLE_QUOTE_BLANK : '""';
+SINGLE_QUOTE : '\'';
+SQUARE_BRACKET_ID : '[' (~']' | ']' ']')* ']';
+DECIMAL : DEC_DIGIT+;
+ID : ( [A-Z_] | FullWidthLetter) ( [A-Z_@0-9] | FullWidthLetter)*;
+STRING : '\'' (~'\'' | '\'\'')* '\'';
+BINARY : '0' 'X' HEX_DIGIT*;
+FLOAT : DEC_DOT_DEC;
+REAL : (DECIMAL | DEC_DOT_DEC) ('E' [+-]? DEC_DIGIT+);
+
+
+EQUAL : '=';
+GREATER : '>';
+LESS : '<';
+EXCLAMATION : '!';
+DOUBLE_BAR : '||';
+DOT : '.';
+UNDERLINE : '_';
+SHARP : '#';
+LR_BRACKET : '(';
+RR_BRACKET : ')';
+COMMA : ',';
+SEMI : ';';
+COLON : ':';
+STAR : '*';
+DIVIDE : '/';
+MODULE : '%';
+PLUS : '+';
+MINUS : '-';
+
+fragment LETTER : [A-Z_];
+fragment DEC_DOT_DEC : (DEC_DIGIT+ '.' DEC_DIGIT+ | DEC_DIGIT+ '.' | '.' DEC_DIGIT+);
+fragment HEX_DIGIT : [0-9A-F];
+fragment DEC_DIGIT : [0-9];
+
+fragment FullWidthLetter options {
+ caseInsensitive = false;
+}:
+ '\u00c0' ..'\u00d6'
+ | '\u00d8' ..'\u00f6'
+ | '\u00f8' ..'\u00ff'
+ | '\u0100' ..'\u1fff'
+ | '\u2c00' ..'\u2fff'
+ | '\u3040' ..'\u318f'
+ | '\u3300' ..'\u337f'
+ | '\u3400' ..'\u3fff'
+ | '\u4e00' ..'\u9fff'
+ | '\ua000' ..'\ud7ff'
+ | '\uf900' ..'\ufaff'
+ | '\uff00' ..'\ufff0'
+;
diff --git a/sql/redshift/RedshiftParser.g4 b/sql/redshift/RedshiftParser.g4
new file mode 100644
index 0000000000..ac753d9ff0
--- /dev/null
+++ b/sql/redshift/RedshiftParser.g4
@@ -0,0 +1,1255 @@
+/*
+Redshift SQL grammar.
+The MIT License (MIT).
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+parser grammar RedshiftParser;
+
+options {
+ tokenVocab = RedshiftLexer;
+}
+
+redshift_file
+ : batch? EOF
+ ;
+
+batch
+ : sql_command (SEMI sql_command)* SEMI?
+ ;
+
+sql_command
+ : abort_command
+ | alter_database_command
+ | alter_datashare_command
+ | alter_default_privileges_command
+ | alter_external_schema_command
+ | alter_external_view_command
+ | alter_function_command
+ | alter_group_command
+ | alter_identity_provider_command
+ | alter_masking_policy_command
+ | alter_materialized_view_command
+ | alter_rls_policy_command
+ | alter_role_command
+ | alter_procedure_command
+ | alter_schema_command
+ | alter_system_command
+ | alter_table_command
+ | alter_table_append_command
+ | alter_user_command
+ | analyze_command
+ | analyze_compression_command
+ | attach_masking_policy_command
+ | attach_rls_policy_command
+ | begin_command
+ | call_command
+ | cancel_command
+ | close_command
+ | comment_command
+ | commit_command
+ | copy_command
+ | create_database_command
+ | create_datashare_command
+ | create_external_function_command
+ | create_external_model_command
+ | create_external_schema_command
+ | create_external_table_command
+ | create_external_view_command
+ | create_function_command
+ | create_group_command
+ | create_identity_provider_command
+ | create_library_command
+ | create_masking_policy_command
+ | create_materialized_view_command
+ | create_model_command
+ | create_procedure_command
+ | create_rls_policy_command
+ | create_role_command
+ | create_schema_command
+ | create_table_command
+ | create_table_as_command
+ | create_user_command
+ | create_view_command
+ | deallocate_command
+ | declare_command
+ | delete_command
+ | desc_datashare_command
+ | desc_identity_provider_command
+ | detach_masking_policy_command
+ | detach_rls_policy_command
+ | drop_database_command
+ | drop_datashare_command
+ | drop_external_view_command
+ | drop_function_command
+ | drop_group_command
+ | drop_identity_provider_command
+ | drop_library_command
+ | drop_masking_policy_command
+ | drop_model_command
+ | drop_materialized_view_command
+ | drop_procedure_command
+ | drop_rls_policy_command
+ | drop_role_command
+ | drop_schema_command
+ | drop_table_command
+ | drop_user_command
+ | drop_view_command
+ | end_command
+ | execute_command
+ | explain_command
+ | fetch_command
+ | grant_command
+ | insert_command
+ | lock_command
+ | merge_command
+ | prepare_command
+ | refresh_materialized_view_command
+ | reset_command
+ | revoke_command
+ | rollback_command
+ | select_command
+ | select_into_command
+ | set_command
+ | set_session_authorization_command
+ //| set_session_characteristics_command //deprecated
+ | show_command
+ | show_column_grants_command
+ | show_columns_command
+ | show_constraints_command
+ | show_external_table_command
+ | show_databases_command
+ | show_functions_command
+ | show_grants_command
+ | show_model_command
+ | show_datashares_command
+ | show_parameters_command
+ | show_policies_command
+ | show_procedure_command
+ | show_procedures_command
+ | show_schemas_command
+ | show_table_command
+ | show_tables_command
+ | show_view_command
+ | start_transaction_command
+ | truncate_command
+ | unload_command
+ | update_command
+ | use_command
+ | vacuum_command
+ ;
+
+abort_command
+ : ABORT work_transaction?
+ ;
+
+work_transaction
+ : WORK
+ | TRANSACTION
+ ;
+
+alter_database_command
+ : ALTER DATABASE database_name
+ ( RENAME TO n=database_name
+ | owner_to_clause
+ | ( CONNECTION LIMIT limit_unlimited
+ | COLLATE (CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI)
+ | ISOLATION LEVEL (SNAPSHOT | SERIALIZABLE)
+ )?
+ | INTEGRATION
+ ( REFRESH (all_inerror TABLES (IN SCHEMA schema_name_list)? | TABLE schema_table_list)
+ | SET
+ (QUERY_ALL_STATES '=' true_false)?
+ (ACCEPTINVCHARS '=' true_false)?
+ (REFRESH_INTERVAL interval)?
+ (TRUNCATECOLUMNS '=' true_false)?
+ (HISTORY_MODE '=' true_false (FOR (ALL TABLES (IN SCHEMA schema_name_list)? | TABLE schema_table_list) )? )?
+ )
+ )
+ ;
+
+owner_to_clause
+ : OWNER TO new_owner
+ ;
+
+limit_unlimited
+ : limit
+ | UNLIMITED
+ ;
+
+all_inerror
+ : ALL
+ | INERROR
+ ;
+
+schema_name_list
+ : schema_name (',' schema_name)*
+ ;
+
+schema_sql_udf_list
+ : schema_name '.' function_name argtype_list_in_parentheses (',' schema_name '.' function_name argtype_list_in_parentheses)*
+ ;
+
+argtype_list_in_parentheses
+ : '(' argtype_list ')'
+ ;
+
+argtype_list
+ : argtype (',' argtype)*
+ ;
+
+argtype
+ : todo
+ ;
+
+schema_table_list
+ : schema_name '.' table_name (',' schema_name '.' table_name)*
+ ;
+
+true_false
+ : TRUE
+ | FALSE
+ ;
+
+alter_datashare_command
+ : ALTER DATASHARE datashare_name (ADD | REMOVE)
+ ( TABLE schema_table_list
+ | SCHEMA schema_name_list
+ | FUNCTION schema_sql_udf_list
+ | ALL TABLES IN SCHEMA schema_name_list
+ | ALL FUNCTIONS IN SCHEMA schema_name_list
+ )
+ | ALTER DATASHARE datashare_name
+ SET ( PUBLICACCESSIBLE '=' true_false
+ | INCLUDENEW '=' true_false FOR SCHEMA schema_name
+ )
+ ;
+
+alter_default_privileges_command
+ : ALTER DEFAULT PRIVILEGES
+ (FOR USER target_user_list)?
+ (IN SCHEMA schema_name_list)?
+ grant_or_revoke_clause
+ ;
+
+target_user_list
+ : target_user (',' target_user)*
+ ;
+
+grant_or_revoke_clause
+ : GRANT ( (privilege_list | all_privileges) ON TABLES | (EXECUTE | all_privileges) ON (FUNCTIONS | PROCEDURES) )
+ TO grant_target_list
+ | REVOKE grant_option_for? ( (privilege_list | all_privileges) ON TABLES | (EXECUTE | all_privileges) ON (FUNCTIONS | PROCEDURES) )
+ FROM revoke_target RESTRICT?
+ ;
+
+privilege_list
+ : privilege (',' privilege)*
+ ;
+
+privilege
+ : SELECT
+ | INSERT
+ | UPDATE
+ | DELETE
+ | DROP
+ | REFERENCES
+ | TRUNCATE
+ ;
+
+all_privileges
+ : ALL PRIVILEGES?
+ ;
+
+grant_target_list
+ : grant_target (',' grant_target)*
+ ;
+
+grant_target
+ : user_name (WITH GRANT OPTION)?
+ | ROLE role_name
+ | GROUP group_name
+ | PUBLIC
+ ;
+
+grant_option_for
+ : GRANT OPTION FOR
+ ;
+
+revoke_target
+ : ROLE role_name
+ | GROUP group_name
+ | PUBLIC
+ | user_name
+ ;
+
+alter_external_schema_command
+ : ALTER EXTERNAL SCHEMA schema_name
+ (IAM_ROLE (DEFAULT | i=string)?)?
+ (AUTHENTICATION (NONE | IAM | MTLS)?)?
+ (AUTHENTICATION_ARN c=string | SECRET_ARN s=string)?
+ (URI k=string)?
+ ;
+
+alter_external_view_command
+ : ALTER EXTERNAL VIEW schema_name '.' view_name
+ ( catalog_name '.' schema_name '.' view_name
+ | awsdatacatalog_name '.' database_name '.' view_name
+ | e=schema_name '.' view_name
+ )
+ FORCE? (AS '(' query ')' | REMOVE DEFINITION)
+ ;
+
+alter_function_command
+ : ALTER FUNCTION o=function_name '(' function_arg_list? ')'
+ ( RENAME TO n=function_name
+ | OWNER TO (u=user_name | CURRENT_USER | SESSION_USER)
+ )
+ ;
+
+function_arg_list
+ : py_arg_name py_arg_data_type (',' py_arg_name py_arg_data_type)*
+ | sql_arg_data_type (',' sql_arg_data_type)*
+ ;
+
+alter_group_command
+ : ALTER GROUP o=group_name
+ ( (ADD | DROP) USER user_name (',' user_name)*
+ | RENAME TO n=group_name
+ )
+ ;
+
+alter_identity_provider_command
+ : ALTER IDENTITY PROVIDER identity_provider_name
+ (PARAMETERS p=string)?
+ (NAMESPACE ns=string)?
+ (IAM_ROLE ir=string)?
+ (AUTO_CREATE_ROLES (TRUE (include_exclude GROUPS LIKE fp=string)? | FALSE)? )?
+ disable_enable?
+ ;
+
+disable_enable
+ : DISABLE
+ | ENABLE
+ ;
+
+include_exclude
+ : INCLUDE
+ | EXCLUDE
+ ;
+
+alter_masking_policy_command
+ : ALTER MASKING POLICY ( (database_name '.')? policy_name)
+ USING '(' me=expression ')'
+ ;
+
+alter_materialized_view_command
+ : ALTER MATERIALIZED VIEW mv=view_name
+ ( AUTO REFRESH yes_no
+ | ALTER ( DISTKEY column_name
+ | DISTSTYLE (ALL | EVEN | KEY DISTKEY column_name | AUTO)
+ | COMPOUND? SORTKEY column_name_list_in_parentheses
+ | SORTKEY (AUTO | NONE)
+ )
+ | ROW LEVEL SECURITY on_off (CONJUNCTION TYPE (AND | OR) )? (FOR DATASHARES)?
+ )
+ ;
+
+column_name_list_in_parentheses
+ : '(' column_name_list ')'
+ ;
+
+column_name_list
+ : column_name (',' column_name)*
+ ;
+
+yes_no
+ : YES
+ | NO
+ ;
+
+on_off
+ : ON
+ | OFF
+ ;
+
+alter_rls_policy_command
+ : ALTER RLS POLICY (database_name '.')? policy_name
+ USING '(' predicate_expression ')'
+ ;
+
+alter_role_command
+ : ALTER ROLE o=role_name WITH?
+ alter_role_opt (',' alter_role_opt)*
+ (EXTERNALID TO external_id)?
+ ;
+
+alter_role_opt
+ : RENAME TO n=role_name
+ | owner_to_clause
+ ;
+
+alter_procedure_command
+ : ALTER PROCEDURE o=sp_name sp_arg_list_in_parentheses?
+ ( RENAME TO n=sp_name
+ | OWNER TO (owner | CURRENT_USER | SESSION_USER)
+ )
+ ;
+
+sp_arg_list_in_parentheses
+ : '(' sp_arg_list ')'
+ ;
+
+sp_arg_list
+ : sp_arg (',' sp_arg)*
+ ;
+
+sp_arg
+ : argname? argmode? argtype
+ ;
+
+argname
+ : id_
+ ;
+
+argmode
+ : INOUT
+ | IN
+ | OUT
+ ;
+
+alter_schema_command
+ : ALTER SCHEMA s=schema_name
+ ( RENAME TO n=schema_name
+ | owner_to_clause
+ | QUOTA (quota (MB | GB | TB)? | UNLIMITED)
+ )
+ ;
+
+quota
+ : DECIMAL
+ ;
+
+alter_system_command
+ : ALTER SYSTEM SET id_ '=' (TRUE | T | ON | FALSE | F | OFF)
+ ;
+
+alter_table_command
+ : ALTER TABLE o=table_name
+ ( ADD table_constraint
+ | DROP CONSTRAINT constraint_name restrict_cascade?
+ | owner_to_clause
+ | RENAME TO n=table_name
+ | RENAME COLUMN oc=column_name TO nc=column_name
+ | ALTER COLUMN column_name TYPE
+ | ALTER COLUMN column_name ENCODE encode_type (',' encode_type)*
+ | ALTER DISTKEY column_name
+ | ALTER DISTSTYLE (ALL | EVEN | KEY DISTKEY column_name | AUTO)
+ | ALTER COMPOUND? SORTKEY '(' column_name_list ')'
+ | ALTER SORTKEY (AUTO | NONE)
+ | ALTER ENCODE AUTO
+ | ADD COLUMN? column_name column_type (DEFAULT d=expression)? (ENCODE encode_type)? (NOT? NULL_)? collate_clause?
+ | DROP COLUMN? column_name restrict_cascade
+ | ROW LEVEL SECURITY
+ | MASKING on_off FOR DATASHARES
+ )
+ ;
+
+collate_clause
+ : COLLATE (CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI)
+ ;
+
+table_constraint
+ : (CONSTRAINT constraint_name)?
+ ( UNIQUE
+ | PRIMARY KEY
+ | FOREIGN KEY
+ )
+ ;
+
+restrict_cascade
+ : RESTRICT
+ | CASCADE
+ ;
+
+alter_table_append_command
+ : ALTER TABLE t=table_name APPEND FROM s=table_name
+ (IGNOREEXTRA | FILLTARGET)?
+ ;
+
+alter_user_command
+ : ALTER USER user_name WITH? option (',' option)*
+ ;
+
+option
+ : CREATEDB | NOCREATEDB
+ | CREATEUSER | NOCREATEUSER
+ | SYSLOG ACCESS (RESTRICTED | UNSRESTRICTED)
+ | PASSWORD (string | DISABLE) (VALID UNTIL ed=string)?
+ | RENAME TO nu=user_name
+ | CONNECTION LIMIT limit_unlimited
+ | SESSION TIMEOUT limit
+ | RESET SESSION TIMEOUT
+ | SET p=id_ (TO | '=') (value | DEFAULT)
+ | RESET rp=id_
+ | EXTERNALID external_id
+ ;
+
+analyze_command
+ : ANALYZE VERBOSE?
+ (table_name column_name_list_in_parentheses?)?
+ (PREDICT COLUMNS | ALL COLUMNS)?
+ ;
+
+analyze_compression_command
+ : ANALYZE COMPRESSION
+ (table_name column_name_list_in_parentheses?)
+ (COMPROWS numrows)
+ ;
+
+attach_masking_policy_command
+ : ATTACH MASKING POLICY (policy_name ON relation_name | database_name '.' policy_name ON database_name '.' schema_name '.' relation_name)
+ '(' ')'
+ (USING '(' ')' )?
+ TO user_role_public
+ (PRIORITY priority)?
+ ;
+
+attach_rls_policy_command
+ : ATTACH RLS POLICY
+ ( policy_name ON TABLE? table_name_list
+ | database_name '.' policy_name ON TABLE? db_schema_table_name_list
+ )
+ TO user_role_public (',' user_role_public)*
+ ;
+
+user_role_public
+ : user_name
+ | ROLE role_name
+ | PUBLIC
+ ;
+
+table_name_list
+ : table_name (',' table_name)*
+ ;
+
+db_schema_table_name_list
+ : db_schema_table_name (',' db_schema_table_name)*
+ ;
+
+db_schema_table_name
+ : database_name '.' schema_name '.' table_name
+ ;
+
+begin_command
+ : BEGIN work_transaction? (ISOLATION LEVEL isolation_level)?
+ (READ (WRITE | ONLY))?
+ ;
+
+isolation_level
+ : SERIALIZABLE
+ | READ UNCOMMITTED
+ | READ COMMITTED
+ | REPEATABLE READ
+ ;
+
+call_command
+ : CALL sp_name '(' argument_list? ')'
+ ;
+
+argument_list
+ : expression (',' expression)*
+ ;
+
+cancel_command
+ : CANCEL process_id m=string?
+ ;
+
+close_command
+ : CLOSE cursor_name
+ ;
+
+comment_command
+ : COMMENT ON
+ ( TABLE table_name
+ | COLUMN table_name '.' column_name
+ | CONSTRAINT constraint_name ON table_name
+ | DATABASE database_name
+ | VIEW view_name
+ ) IS (string | NULL_)
+ ;
+
+commit_command
+ : COMMIT work_transaction?
+ ;
+
+copy_command
+ : COPY table_name column_name_list_in_parentheses?
+ FROM ds=string
+ IAM_ROLE r=string
+ (FORMAT? AS? data_format)?
+ ;
+
+data_format
+ : todo
+ ;
+
+create_database_command
+ : CREATE DATABASE database_name
+ ;
+
+create_datashare_command
+ : CREATE DATASHARE datashare_name
+ ;
+
+create_external_function_command
+ : CREATE or_replace? EXTERNAL FUNCTION
+ ;
+
+or_replace
+ : OR REPLACE
+ ;
+
+create_external_model_command
+ : CREATE EXTERNAL MODEL model_name
+ ;
+
+create_external_schema_command
+ : CREATE EXTERNAL SCHEMA if_not_exists?
+ ;
+
+if_not_exists
+ : IF NOT EXISTS
+ ;
+
+create_external_table_command
+ : CREATE EXTERNAL TABLE
+ ;
+
+create_external_view_command
+ : CREATE EXTERNAL VIEW schema_name '.' view_name if_not_exists?
+ ;
+
+create_function_command
+ : CREATE or_replace? FUNCTION
+ ;
+
+create_group_command
+ : CREATE GROUP group_name
+ ;
+
+create_identity_provider_command
+ : CREATE IDENTITY PROVIDER identity_provider_name TYPE
+ ;
+
+create_library_command
+ : CREATE or_replace? LIBRARY library_name LANGUAGE
+ ;
+
+create_masking_policy_command
+ : CREATE MASKING POLICY
+ ;
+
+create_materialized_view_command
+ : CREATE MATERIALIZED VIEW
+ ;
+
+create_model_command
+ : CREATE MODEL model_name
+ ;
+
+create_procedure_command
+ : CREATE or_replace? PROCEDURE
+ ;
+
+create_rls_policy_command
+ : CREATE RLS POLICY
+ ;
+
+create_role_command
+ : CREATE ROLE role_name
+ ;
+
+create_schema_command
+ : CREATE SCHEMA if_not_exists? schema_name
+ ;
+
+create_table_command
+ : CREATE (LOCAL? temporary)? TABLE if_not_exists? table_name
+ ;
+
+temporary
+ : TEMPORARY
+ | TEMP
+ ;
+
+create_table_as_command
+ : CREATE (LOCAL? temporary)? TABLE if_not_exists? table_name
+ ;
+
+create_user_command
+ : CREATE USER
+ ;
+
+create_view_command
+ : CREATE or_replace? VIEW
+ ;
+
+deallocate_command
+ : DEALLOCATE PREPARE? plan_name
+ ;
+
+declare_command
+ : DECLARE cursor_name CURSOR FOR query
+ ;
+
+delete_command
+ : todo DELETE
+ ;
+
+desc_datashare_command
+ : DESC DATASHARE datashare_name
+ ;
+
+desc_identity_provider_command
+ : DESC IDENTITY PROVIDER identity_provider_name
+ ;
+
+detach_masking_policy_command
+ : DETACH MASKING POLICY
+ ;
+
+detach_rls_policy_command
+ : DETACH RLS POLICY
+ ;
+
+drop_database_command
+ : DROP DATABASE database_name FORCE?
+ ;
+
+drop_datashare_command
+ : DROP DATASHARE datashare_name
+ ;
+
+drop_external_view_command
+ : DROP EXTERNAL VIEW schema_name '.' view_name if_exists?
+ ;
+
+drop_function_command
+ : DROP FUNCTION function_name '(' fn_arg_list? ')'
+ restrict_cascade?
+ ;
+
+fn_arg_list
+ : fn_arg (',' fn_arg)*
+ ;
+
+fn_arg
+ : argname? argtype
+ ;
+
+drop_group_command
+ : DROP GROUP group_name
+ ;
+
+drop_identity_provider_command
+ : DROP IDENTITY PROVIDER identity_provider_name CASCADE?
+ ;
+
+drop_library_command
+ : DROP LIBRARY library_name
+ ;
+
+drop_masking_policy_command
+ : DROP MASKING POLICY (database_name '.')? policy_name
+ ;
+
+drop_model_command
+ : DROP MODEL if_exists? model_name
+ ;
+
+if_exists
+ : IF EXISTS
+ ;
+
+drop_materialized_view_command
+ : DROP MATERIALIZED VIEW if_exists? view_name restrict_cascade?
+ ;
+
+drop_procedure_command
+ : DROP PROCEDURE sp_name '(' sp_arg_list? ')'
+ ;
+
+drop_rls_policy_command
+ : DROP RLS POLICY if_exists? (database_name '.')? policy_name restrict_cascade?
+ ;
+
+drop_role_command
+ : DROP ROLE role_name (FORCE | RESTRICT)?
+ ;
+
+drop_schema_command
+ : DROP SCHEMA if_exists? schema_name_list
+ (DROP EXTERNAL DATABASE)?
+ restrict_cascade?
+ ;
+
+drop_table_command
+ : DROP TABLE if_exists? table_name_list restrict_cascade?
+ ;
+
+drop_user_command
+ : DROP USER if_exists? user_name (',' user_name)*
+ ;
+
+drop_view_command
+ : DROP VIEW if_exists? view_name (',' view_name)* restrict_cascade?
+ ;
+
+end_command
+ : END work_transaction?
+ ;
+
+execute_command
+ : EXECUTE plan_name ('(' parameter_name (',' parameter_name)* ')')?
+ ;
+
+explain_command
+ : EXPLAIN VERBOSE? query
+ ;
+
+fetch_command
+ : FETCH (NEXT | ALL | (FORWARD | count | ALL))? FROM cursor_name
+ ;
+
+grant_command
+ : GRANT
+ ;
+
+insert_command
+ : INSERT INTO table_name
+ ;
+
+lock_command
+ : LOCK TABLE? table_name (',' table_name)*
+ ;
+
+merge_command
+ : MERGE INTO
+ ;
+
+prepare_command
+ : PREPARE plan_name
+ ;
+
+refresh_materialized_view_command
+ : REFRESH MATERIALIZED VIEW
+ ;
+
+reset_command
+ : RESET (parameter_name | ALL)
+ ;
+
+revoke_command
+ : REVOKE
+ ;
+
+rollback_command
+ : ROLLBACK work_transaction?
+ ;
+
+select_command
+ : todo SELECT
+ ;
+
+select_into_command
+ : todo SELECT
+ ;
+
+set_command
+ : SET
+ ;
+
+set_session_authorization_command
+ : SET LOCAL? SESSION AUTHORIZATION (user_name | DEFAULT)
+ ;
+
+show_command
+ : SHOW (parameter_name | ALL)
+ ;
+
+show_column_grants_command
+ : SHOW COLUMN GRANTS ON TABLE (database_name '.')? schema_name '.' table_name
+ (FOR user_role_public)?
+ limit_clause?
+ ;
+
+limit_clause
+ : LIMIT limit
+ ;
+
+show_columns_command
+ : SHOW COLUMNS FROM TABLE database_name '.' schema_name '.' table_name
+ like_pattern?
+ limit_clause?
+ ;
+
+like_pattern
+ : LIKE p=string
+ ;
+
+show_constraints_command
+ : SHOW CONSTRAINTS (PRIMARY KEYS | FOREIGN KEYS EXPORTED?)
+ FROM TABLE
+ (database_name '.')? schema_name '.' table_name
+ limit_clause?
+ ;
+
+show_external_table_command
+ : SHOW EXTERNAL TABLE (database_name '.')? schema_name '.' table_name PARTITION?
+ ;
+
+show_databases_command
+ : SHOW DATABASES like_pattern? limit_clause?
+ | SHOW DATABASES FROM DATA CATALOG
+ (ACCOUNT string_list)?
+ like_pattern?
+ (IAM_ROLE (DEFAULT | string))?
+ limit_clause?
+ ;
+
+show_functions_command
+ : SHOW FUNCTIONS FROM SCHEMA (database_name '.')? schema_name
+ like_pattern?
+ limit_clause?
+ ;
+
+show_grants_command
+ : SHOW GRANTS ON
+ ;
+
+show_model_command
+ : SHOW MODEL (ALL | model_name)
+ ;
+
+show_datashares_command
+ : SHOW DATASHARES like_pattern?
+ ;
+
+show_parameters_command
+ : SHOW PARAMETERS OF (FUNCTION | PROCEDURE)
+ (database_name '.')? schema_name '.' function_name '(' argtype_list ')'
+ like_pattern?
+ ;
+
+show_policies_command
+ : SHOW (RLS | MASKING) POLICIES
+ ( ON (database_name '.')? schema_name '.' relation_name (FOR user_role_public)?
+ | FROM DATABASE database_name
+ )?
+ limit_clause?
+ ;
+
+show_procedure_command
+ : SHOW PROCEDURE sp_name sp_arg_list_in_parentheses?
+ ;
+
+show_procedures_command
+ : SHOW PROCEDURES FROM SCHEMA (database_name '.')? schema_name
+ like_pattern?
+ limit_clause?
+ ;
+
+show_schemas_command
+ : SHOW SCHEMAS FROM DATABASE database_name
+ like_pattern?
+ limit_clause?
+ ;
+
+show_table_command
+ : SHOW TABLE (schema_name '.')? table_name
+ ;
+
+show_tables_command
+ : SHOW TABLES FROM SCHEMA database_name '.' schema_name
+ like_pattern?
+ limit_clause?
+ ;
+
+show_view_command
+ : SHOW VIEW (schema_name '.')? view_name
+ ;
+
+start_transaction_command
+ : begin_command
+ ;
+
+truncate_command
+ : TRUNCATE TABLE? table_name
+ ;
+
+unload_command
+ : UNLOAD
+ ;
+
+update_command
+ : todo UPDATE table_name
+ ;
+
+use_command
+ : USE database_name
+ ;
+
+vacuum_command
+ : VACUUM (FULL | SORT ONLY | DELETE ONLY | REINDEX | RECLUSTER)?
+ vacuum_target?
+ ;
+
+vacuum_target
+ : table_name? TO threshold PERCENT BOOST?
+ | table_name (TO threshold PERCENT)? BOOST?
+ ;
+
+// Expression
+expression
+ : todo
+ ;
+
+predicate_expression
+ : todo
+ ;
+
+// Basic elements
+threshold
+ : DECIMAL
+ ;
+
+interval
+ : DECIMAL
+ ;
+
+limit
+ : DECIMAL
+ ;
+
+numrows
+ : DECIMAL
+ ;
+
+priority
+ : DECIMAL
+ ;
+
+process_id
+ : DECIMAL
+ ;
+
+string
+ : STRING
+ ;
+
+string_list
+ : string (',' string)*
+ ;
+
+value
+ : string
+ | DECIMAL
+ ;
+
+py_arg_name
+ : id_
+ ;
+
+py_arg_data_type
+ : id_
+ ;
+
+sql_arg_data_type
+ : SMALLINT | INT2
+ | INTEGER | INT | INT4
+ | BIGINT | INT8
+ | DECIMAL | NUMERIC
+ | REAL | FLOAT4
+ | DOUBLE PRECISION | FLOAT8 | FLOAT
+ | CHAR | CHARACTER | NCHAR | BPCHAR
+ | VARCHAR | CHARACTER VARYING | NVARCHAR | TEXT
+ | DATE
+ | TIME without_time_zone?
+ | TIMETZ | TIME with_time_zone
+ | TIMESTAMP without_time_zone?
+ | TIMESTAMPTZ | TIMESTAMP with_time_zone
+ | INTERVAL (YEAR TO MONTH | DAY TO SECOND)
+ | BOOLEAN | BOOL
+ | HLLSKETCH
+ | SUPER
+ | VARBYTE | VARBINARY | BINARY VARYING
+ | GEOMETRY
+ | GEOGRAPHY
+ ;
+
+without_time_zone
+ : WITHOUT TIME ZONE
+ ;
+
+with_time_zone
+ : WITH TIME ZONE
+ ;
+
+encode_type
+ : RAW
+ | AZ64
+ | BYTEDICT
+ | DELTA
+ | DELTA32K
+ | LZO
+ | MOSTLY8
+ | MOSTLY16
+ | MOSTLY32
+ | RUNLENGTH
+ | TEXT255
+ | TEXT32K
+ | ZSTD
+ ;
+
+column_type
+ : sql_arg_data_type
+ ;
+
+count
+ : DECIMAL
+ ;
+
+//
+query
+ : todo
+ ;
+
+//IDs
+id_
+ : ID
+ ;
+
+awsdatacatalog_name
+ : id_
+ ;
+
+catalog_name
+ : id_
+ ;
+
+column_name
+ : id_
+ ;
+
+constraint_name
+ : id_
+ ;
+
+cursor_name
+ : id_
+ ;
+
+database_name
+ : id_
+ ;
+
+datashare_name
+ : id_
+ ;
+
+external_id
+ : id_
+ ;
+
+function_name
+ : id_
+ ;
+
+group_name
+ : id_
+ ;
+
+identity_provider_name
+ : id_
+ ;
+
+library_name
+ : id_
+ ;
+
+model_name
+ : id_
+ ;
+
+owner
+ : id_
+ ;
+
+new_owner
+ : owner
+ ;
+
+parameter_name
+ : id_
+ ;
+
+plan_name
+ : id_
+ ;
+
+policy_name
+ : id_
+ ;
+
+relation_name
+ :
+ ;
+
+role_name
+ : id_
+ ;
+
+schema_name
+ : id_
+ ;
+
+sp_name
+ : id_
+ ;
+
+table_name
+ : id_
+ ;
+
+target_user
+ : id_
+ ;
+
+user_name
+ : id_
+ ;
+
+view_name
+ : id_
+ ;
+
+//TODOs
+todo
+ : '.'
+ ;
\ No newline at end of file
diff --git a/sql/redshift/desc.xml b/sql/redshift/desc.xml
new file mode 100644
index 0000000000..c8c63c6add
--- /dev/null
+++ b/sql/redshift/desc.xml
@@ -0,0 +1,9 @@
+
+
+ ^4.10
+ CSharp;Go;Java;TypeScript;Antlr4ng
+
+ CSharp;Go;Java
+ examples
+
+
diff --git a/sql/redshift/examples/alter_default_privileges.sql b/sql/redshift/examples/alter_default_privileges.sql
new file mode 100644
index 0000000000..f13f2c8184
--- /dev/null
+++ b/sql/redshift/examples/alter_default_privileges.sql
@@ -0,0 +1,6 @@
+alter default privileges for user report_admin grant select on tables to group report_readers;
+alter default privileges grant select on tables to public;
+alter default privileges in schema sales grant insert on tables to group sales_admin;
+alter default privileges in schema sales revoke insert on tables from group sales_admin;
+alter default privileges revoke execute on functions from public;
+alter default privileges grant execute on functions to group dev_test;
\ No newline at end of file
diff --git a/sql/redshift/examples/alter_external_schema.sql b/sql/redshift/examples/alter_external_schema.sql
new file mode 100644
index 0000000000..c406a02331
--- /dev/null
+++ b/sql/redshift/examples/alter_external_schema.sql
@@ -0,0 +1,13 @@
+ALTER EXTERNAL SCHEMA schema_name
+AUTHENTICATION mtls
+AUTHENTICATION_ARN 'arn:aws:acm:us-east-1:444455556666:certificate/certificate_ID';
+
+ALTER EXTERNAL SCHEMA schema_name
+AUTHENTICATION mtls
+SECRET_ARN 'arn:aws:secretsmanager:us-east-1:012345678910:secret:myMTLSSecret';
+
+ALTER EXTERNAL SCHEMA schema_name
+URI 'lkc-ghidef-67890.centralus.azure.glb.confluent.cloud:9092';
+
+ALTER EXTERNAL SCHEMA schema_name
+IAM_ROLE 'arn:aws:iam::012345678901:role/testrole';
diff --git a/sql/redshift/examples/txn.sql b/sql/redshift/examples/txn.sql
new file mode 100644
index 0000000000..3663ce8408
--- /dev/null
+++ b/sql/redshift/examples/txn.sql
@@ -0,0 +1,7 @@
+abort;
+abort work;
+abort transaction;
+
+begin;
+begin work;
+begin transaction ;
\ No newline at end of file
diff --git a/sql/redshift/pom.xml b/sql/redshift/pom.xml
new file mode 100644
index 0000000000..eba534edff
--- /dev/null
+++ b/sql/redshift/pom.xml
@@ -0,0 +1,55 @@
+
+ 4.0.0
+ redshift
+ jar
+ Redshift grammar
+
+ org.antlr.grammars
+ sqlparent
+ 1.0-SNAPSHOT
+
+
+
+
+ org.antlr
+ antlr4-maven-plugin
+ ${antlr.version}
+
+ ${basedir}
+
+ RedshiftLexer.g4
+ RedshiftParser.g4
+
+
+
+
+
+ antlr4
+
+
+
+
+
+ com.khubla.antlr
+ antlr4test-maven-plugin
+ ${antlr4test-maven-plugin.version}
+
+ false
+ false
+ redshift_file
+ Redshift
+
+ examples/
+
+
+
+
+ test
+
+
+
+
+
+
+