diff --git a/grammar.js b/grammar.js index 439b857..067f7b9 100644 --- a/grammar.js +++ b/grammar.js @@ -71,6 +71,7 @@ module.exports = grammar({ keyword_truncate: _ => make_keyword("truncate"), keyword_merge: _ => make_keyword("merge"), keyword_show: _ => make_keyword("show"), + keyword_unload: _ => make_keyword("unload"), keyword_into: _ => make_keyword("into"), keyword_overwrite: _ => make_keyword("overwrite"), keyword_values: _ => make_keyword("values"), @@ -744,10 +745,20 @@ module.exports = grammar({ $._select_statement, $.set_operation, $._show_statement, + $._unload_statement, ), ), ), + // athena + _unload_statement: $ => seq( + $.keyword_unload, + wrapped_in_parenthesis($._select_statement), + $.keyword_to, + $._single_quote_string, + $.storage_parameters, + ), + _show_statement: $ => seq( $.keyword_show, choice( @@ -994,7 +1005,7 @@ module.exports = grammar({ storage_parameters: $ => seq( $.keyword_with, paren_list( - seq($.identifier, optional(seq('=', $.literal))), + seq($.identifier, optional(seq('=', choice($.literal, $.array)))), true ), ), diff --git a/queries/highlights.scm b/queries/highlights.scm index b619623..1e76a04 100644 --- a/queries/highlights.scm +++ b/queries/highlights.scm @@ -111,6 +111,7 @@ (keyword_delete) (keyword_create) (keyword_show) + (keyword_unload) (keyword_insert) (keyword_merge) (keyword_distinct) diff --git a/test/corpus/unload.txt b/test/corpus/unload.txt new file mode 100644 index 0000000..e96948c --- /dev/null +++ b/test/corpus/unload.txt @@ -0,0 +1,71 @@ +================================================================================ +Simple Unload +================================================================================ + +UNLOAD (SELECT * FROM old_table) +TO 's3://amzn-s3-demo-bucket/unload_test_1/' +WITH (format = 'JSON') + +-------------------------------------------------------------------------------- + +(program + (statement + (keyword_unload) + (select + (keyword_select) + (select_expression + (term + (all_fields)))) + (from + (keyword_from) + (relation + (object_reference + (identifier)))) + (keyword_to) + (storage_parameters + (keyword_with) + (identifier) + (literal)))) + +================================================================================ +Unload with ARRAY +================================================================================ + +UNLOAD (SELECT name1, address1, comment1, key1 FROM table1) +TO 's3://amzn-s3-demo-bucket/ partitioned/' +WITH (format = 'TEXTFILE', partitioned_by = ARRAY['key1']) + +-------------------------------------------------------------------------------- + +(program + (statement + (keyword_unload) + (select + (keyword_select) + (select_expression + (term + (field + (identifier))) + (term + (field + (identifier))) + (term + (field + (identifier))) + (term + (field + (identifier))))) + (from + (keyword_from) + (relation + (object_reference + (identifier)))) + (keyword_to) + (storage_parameters + (keyword_with) + (identifier) + (literal) + (identifier) + (array + (keyword_array) + (literal)))))