Compare commits
2 commits
main
...
improve-pr
Author | SHA1 | Date | |
---|---|---|---|
b121cd1fc1 | |||
dc314830d2 |
42 changed files with 100173 additions and 9567 deletions
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
let
|
let
|
||||||
extraGrammars = {
|
extraGrammars = {
|
||||||
tree-sitter-psql = {
|
tree-sitter-plpgsql = {
|
||||||
language = "psql";
|
language = "psql";
|
||||||
src = ../.;
|
src = ../.;
|
||||||
version = "0.0.0";
|
version = "0.0.0";
|
||||||
|
@ -10,17 +10,14 @@ let
|
||||||
};
|
};
|
||||||
|
|
||||||
tree-sitter = (pkgs.tree-sitter.override { inherit extraGrammars; });
|
tree-sitter = (pkgs.tree-sitter.override { inherit extraGrammars; });
|
||||||
grammars = tree-sitter.withPlugins (g: [ g.tree-sitter-psql ]);
|
grammars = tree-sitter.withPlugins (g: tree-sitter.allGrammars);
|
||||||
|
|
||||||
nvim-treesitter = pkgs.vimPlugins.nvim-treesitter.withAllGrammars.overrideAttrs (oldAttrs: {
|
nvim-treesitter = pkgs.vimPlugins.nvim-treesitter.overrideAttrs (oldAttrs: {
|
||||||
passthru.dependencies = oldAttrs.passthru.dependencies ++ [
|
|
||||||
(pkgs.runCommand "nvim-treesitter-psql-grammar" { } ''
|
|
||||||
mkdir -p $out/parser
|
|
||||||
ln -s ${grammars}/psql.so $out/parser/psql.so
|
|
||||||
'')
|
|
||||||
];
|
|
||||||
postPatch = ''
|
postPatch = ''
|
||||||
ln -s ${extraGrammars.tree-sitter-psql.src}/queries queries/psql
|
rm -r parser
|
||||||
|
ln -s ${grammars} parser
|
||||||
|
|
||||||
|
ln -s ${../.}/queries queries/psql
|
||||||
'';
|
'';
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -17,11 +17,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1672997035,
|
"lastModified": 1672756850,
|
||||||
"narHash": "sha256-DNaNjsGMRYefBTAxFIrVOB2ok477cj1FTpqnu/mKRf4=",
|
"narHash": "sha256-Smbq3+fitwA13qsTMeaaurv09/KVbZfW7m7lINwzDGA=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "f1ffcf798e93b169321106a4aef79526a2b4bd0a",
|
"rev": "298add347c2bbce14020fcb54051f517c391196b",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
1414
grammar.js
1414
grammar.js
File diff suppressed because it is too large
Load diff
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "tree-sitter-psql",
|
"name": "tree-sitter-plpgsql",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "grammar.js",
|
"main": "grammar.js",
|
||||||
|
@ -8,9 +8,7 @@
|
||||||
"tree-sitter": [
|
"tree-sitter": [
|
||||||
{
|
{
|
||||||
"scope": "source.psql",
|
"scope": "source.psql",
|
||||||
"file-types": [
|
"file-types": ["psql"],
|
||||||
"psql"
|
|
||||||
],
|
|
||||||
"injection-regex": "^psql$"
|
"injection-regex": "^psql$"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,71 +0,0 @@
|
||||||
; Keywords
|
|
||||||
[
|
|
||||||
(keyword_cascade)
|
|
||||||
(keyword_constraint)
|
|
||||||
(keyword_create)
|
|
||||||
(keyword_default)
|
|
||||||
(keyword_delete)
|
|
||||||
(keyword_key)
|
|
||||||
(keyword_not)
|
|
||||||
(keyword_null)
|
|
||||||
(keyword_on)
|
|
||||||
(keyword_primary)
|
|
||||||
(keyword_references)
|
|
||||||
(keyword_table)
|
|
||||||
(keyword_update)
|
|
||||||
] @keyword
|
|
||||||
|
|
||||||
; Identifiers
|
|
||||||
(column_definition name: (identifier) @variable)
|
|
||||||
(column_constraint name: (identifier) @variable)
|
|
||||||
|
|
||||||
(table_reference schema: (identifier) @namespace)
|
|
||||||
(table_reference name: (identifier) @constant)
|
|
||||||
|
|
||||||
; Types
|
|
||||||
[
|
|
||||||
(keyword_smallint)
|
|
||||||
(keyword_integer)
|
|
||||||
(keyword_bigint)
|
|
||||||
(keyword_smallserial)
|
|
||||||
(keyword_serial)
|
|
||||||
(keyword_bigserial)
|
|
||||||
(keyword_real)
|
|
||||||
(double)
|
|
||||||
(decimal)
|
|
||||||
(numeric)
|
|
||||||
(keyword_uuid)
|
|
||||||
(keyword_text)
|
|
||||||
(char)
|
|
||||||
(varchar)
|
|
||||||
(keyword_json)
|
|
||||||
(keyword_jsonb)
|
|
||||||
(keyword_date)
|
|
||||||
(keyword_datetime)
|
|
||||||
(keyword_time)
|
|
||||||
(keyword_timestamp)
|
|
||||||
(keyword_timestamptz)
|
|
||||||
(keyword_bytea)
|
|
||||||
(keyword_money)
|
|
||||||
(keyword_boolean)
|
|
||||||
(keyword_xml)
|
|
||||||
] @type.builtin
|
|
||||||
|
|
||||||
; Literal
|
|
||||||
[(keyword_true) (keyword_false)] @boolean
|
|
||||||
(number) @number
|
|
||||||
|
|
||||||
; Comments
|
|
||||||
(line_comment) @comment.line
|
|
||||||
(block_comment) @comment.block
|
|
||||||
|
|
||||||
; Punctuation
|
|
||||||
[
|
|
||||||
";"
|
|
||||||
"."
|
|
||||||
","
|
|
||||||
] @punctuation.delimiter
|
|
||||||
[
|
|
||||||
"("
|
|
||||||
")"
|
|
||||||
] @punctuation.brackets
|
|
|
@ -8,7 +8,8 @@ set -xe
|
||||||
if [ ! -z $(git diff --cached --name-only | grep -e "^grammar.js$") ]
|
if [ ! -z $(git diff --cached --name-only | grep -e "^grammar.js$") ]
|
||||||
then
|
then
|
||||||
make build
|
make build
|
||||||
make build-wasm
|
# TODO: Enable when performance improves
|
||||||
|
# make build-wasm
|
||||||
git add src bindings *.wasm
|
git add src bindings *.wasm
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
8075
src/grammar.json
8075
src/grammar.json
File diff suppressed because it is too large
Load diff
4879
src/node-types.json
4879
src/node-types.json
File diff suppressed because it is too large
Load diff
89542
src/parser.c
89542
src/parser.c
File diff suppressed because it is too large
Load diff
359
test/corpus/alter_table_statement.txt
Normal file
359
test/corpus/alter_table_statement.txt
Normal file
|
@ -0,0 +1,359 @@
|
||||||
|
================================================================================
|
||||||
|
add column
|
||||||
|
================================================================================
|
||||||
|
alter table foo add bar text;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(table_column_item
|
||||||
|
(identifier)
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
if exists
|
||||||
|
================================================================================
|
||||||
|
alter table if exists foo add bar text;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(if_exists)
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(table_column_item
|
||||||
|
(identifier)
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
add column if not exists
|
||||||
|
================================================================================
|
||||||
|
alter table foo add column if not exists bar text;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(if_not_exists)
|
||||||
|
(table_column_item
|
||||||
|
(identifier)
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
drop column
|
||||||
|
================================================================================
|
||||||
|
alter table foo drop column bar;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
drop column cascade
|
||||||
|
================================================================================
|
||||||
|
alter table foo drop column bar cascade;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(identifier)
|
||||||
|
(alter_table_fk_ref_action)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
drop column restrict
|
||||||
|
================================================================================
|
||||||
|
alter table foo drop column bar restrict;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(identifier)
|
||||||
|
(alter_table_fk_ref_action)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
drop column if exists
|
||||||
|
================================================================================
|
||||||
|
alter table foo drop column if exists bar restrict;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(if_exists)
|
||||||
|
(identifier)
|
||||||
|
(alter_table_fk_ref_action)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
set column default
|
||||||
|
================================================================================
|
||||||
|
alter table foo alter bar set default 4;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(identifier)
|
||||||
|
(alter_column_action
|
||||||
|
(number))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
drop column default
|
||||||
|
================================================================================
|
||||||
|
alter table foo alter bar drop default;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(identifier)
|
||||||
|
(alter_column_action)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
alter column type
|
||||||
|
================================================================================
|
||||||
|
alter table foo alter bar type text;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(identifier)
|
||||||
|
(alter_column_action
|
||||||
|
(alter_column_type
|
||||||
|
(identifier)))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
alter column type(1)
|
||||||
|
================================================================================
|
||||||
|
alter table foo alter bar set data type text;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(identifier)
|
||||||
|
(alter_column_action
|
||||||
|
(alter_column_type
|
||||||
|
(identifier)))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
alter column type(2)
|
||||||
|
================================================================================
|
||||||
|
alter table foo alter column bar set data type timestamptz using created at time zone 'utc';
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(identifier)
|
||||||
|
(alter_column_action
|
||||||
|
(alter_column_type
|
||||||
|
(identifier)
|
||||||
|
(time_expression
|
||||||
|
(identifier)
|
||||||
|
(string))))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
column set not null
|
||||||
|
================================================================================
|
||||||
|
alter table foo alter bar set not null;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(identifier)
|
||||||
|
(alter_column_action)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
column drop not null
|
||||||
|
================================================================================
|
||||||
|
alter table foo alter bar drop not null;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(identifier)
|
||||||
|
(alter_column_action)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
column add constraint
|
||||||
|
================================================================================
|
||||||
|
alter table foo add constraint u_bar unique(bar);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(table_constraint
|
||||||
|
(identifier)
|
||||||
|
(table_constraint_ty
|
||||||
|
(identifier)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
column drop constraint
|
||||||
|
================================================================================
|
||||||
|
alter table foo drop constraint u_bar;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
column drop constraint cascade
|
||||||
|
================================================================================
|
||||||
|
alter table foo drop constraint u_bar cascade;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(identifier)
|
||||||
|
(alter_table_fk_ref_action)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
column drop constraint restrict
|
||||||
|
================================================================================
|
||||||
|
alter table foo drop constraint u_bar restrict;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(identifier)
|
||||||
|
(alter_table_fk_ref_action)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
column drop constraint if exists
|
||||||
|
================================================================================
|
||||||
|
alter table foo drop constraint if exists u_bar restrict;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(if_exists)
|
||||||
|
(identifier)
|
||||||
|
(alter_table_fk_ref_action)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
many changes in columns
|
||||||
|
================================================================================
|
||||||
|
alter table foo drop constraint foo, add unique(foo);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_action
|
||||||
|
(identifier))
|
||||||
|
(alter_table_action
|
||||||
|
(table_constraint
|
||||||
|
(table_constraint_ty
|
||||||
|
(identifier)))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
rename column
|
||||||
|
================================================================================
|
||||||
|
alter table foo rename column foo to bar;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_rename_column
|
||||||
|
(identifier)
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
rename constraint
|
||||||
|
================================================================================
|
||||||
|
alter table foo rename constraint foo to foo.bar;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_rename_constraint
|
||||||
|
(identifier)
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
rename table
|
||||||
|
================================================================================
|
||||||
|
alter table foo rename to foo.bar;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_rename_table
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
change schema
|
||||||
|
================================================================================
|
||||||
|
alter table foo set schema bar;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(alter_table_statement
|
||||||
|
(identifier)
|
||||||
|
(alter_table_change
|
||||||
|
(alter_table_change_schema
|
||||||
|
(identifier)))))
|
|
@ -1,681 +0,0 @@
|
||||||
================================================================================
|
|
||||||
Create an empty table
|
|
||||||
================================================================================
|
|
||||||
create table foo ();
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
(source_file
|
|
||||||
(statement
|
|
||||||
(create_table
|
|
||||||
(keyword_create)
|
|
||||||
(keyword_table)
|
|
||||||
(table_reference
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(column_definitions)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Create an empty table in specified schema
|
|
||||||
================================================================================
|
|
||||||
create table public.foo ();
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
(source_file
|
|
||||||
(statement
|
|
||||||
(create_table
|
|
||||||
(keyword_create)
|
|
||||||
(keyword_table)
|
|
||||||
(table_reference
|
|
||||||
schema: (identifier)
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(column_definitions)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Create an empty temporary table
|
|
||||||
================================================================================
|
|
||||||
create temporary table foo ();
|
|
||||||
create temp table foo ();
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
(source_file
|
|
||||||
(statement
|
|
||||||
(create_table
|
|
||||||
(keyword_create)
|
|
||||||
(keyword_temporary)
|
|
||||||
(keyword_table)
|
|
||||||
(table_reference
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(column_definitions)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(statement
|
|
||||||
(create_table
|
|
||||||
(keyword_create)
|
|
||||||
(keyword_temporary)
|
|
||||||
(keyword_table)
|
|
||||||
(table_reference
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(column_definitions)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Create an empty unlogged table
|
|
||||||
================================================================================
|
|
||||||
create unlogged table foo ();
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
(source_file
|
|
||||||
(statement
|
|
||||||
(create_table
|
|
||||||
(keyword_create)
|
|
||||||
(keyword_unlogged)
|
|
||||||
(keyword_table)
|
|
||||||
(table_reference
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(column_definitions)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Create an empty table if not exists
|
|
||||||
================================================================================
|
|
||||||
create table if not exists foo ();
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
(source_file
|
|
||||||
(statement
|
|
||||||
(create_table
|
|
||||||
(keyword_create)
|
|
||||||
(keyword_table)
|
|
||||||
(keyword_if)
|
|
||||||
(keyword_not)
|
|
||||||
(keyword_exists)
|
|
||||||
(table_reference
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(column_definitions)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Create a table with different columns
|
|
||||||
================================================================================
|
|
||||||
create table foo (
|
|
||||||
c1 text,
|
|
||||||
c2 boolean,
|
|
||||||
c3 numeric(1),
|
|
||||||
c4 timestamp with time zone,
|
|
||||||
c5 varchar(120),
|
|
||||||
c6 uuid
|
|
||||||
);
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
(source_file
|
|
||||||
(statement
|
|
||||||
(create_table
|
|
||||||
(keyword_create)
|
|
||||||
(keyword_table)
|
|
||||||
(table_reference
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(column_definitions
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_text))
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_boolean))
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (numeric
|
|
||||||
(keyword_numeric)
|
|
||||||
precision: (number)
|
|
||||||
))
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_timestamptz))
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (varchar
|
|
||||||
(keyword_varchar)
|
|
||||||
size: (number)
|
|
||||||
))
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_uuid))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Create a table with column constraints
|
|
||||||
================================================================================
|
|
||||||
create table foo (
|
|
||||||
id uuid primary key,
|
|
||||||
c1 text not null,
|
|
||||||
c2 text null,
|
|
||||||
c3 text not null default 'hello'
|
|
||||||
);
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
(source_file
|
|
||||||
(statement
|
|
||||||
(create_table
|
|
||||||
(keyword_create)
|
|
||||||
(keyword_table)
|
|
||||||
(table_reference
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(column_definitions
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_uuid))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_primary)
|
|
||||||
(keyword_key)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_text))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_not)
|
|
||||||
(keyword_null)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_text))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_null)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_text))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_not)
|
|
||||||
(keyword_null)
|
|
||||||
)
|
|
||||||
(column_constraint
|
|
||||||
(keyword_default)
|
|
||||||
(literal
|
|
||||||
(literal_string)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Create a table with primary key and foreign key
|
|
||||||
================================================================================
|
|
||||||
create table foo (
|
|
||||||
id uuid primary key,
|
|
||||||
bar_id uuid null references bar (id) on update set null on delete cascade
|
|
||||||
);
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
(source_file
|
|
||||||
(statement
|
|
||||||
(create_table
|
|
||||||
(keyword_create)
|
|
||||||
(keyword_table)
|
|
||||||
(table_reference
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(column_definitions
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_uuid))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_primary)
|
|
||||||
(keyword_key)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_uuid))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_null)
|
|
||||||
)
|
|
||||||
(column_constraint
|
|
||||||
(keyword_references)
|
|
||||||
(table_reference
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(ref_column
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(keyword_on)
|
|
||||||
(keyword_update)
|
|
||||||
(referencial_action
|
|
||||||
(keyword_set)
|
|
||||||
(keyword_null)
|
|
||||||
)
|
|
||||||
(keyword_on)
|
|
||||||
(keyword_delete)
|
|
||||||
(referencial_action
|
|
||||||
(keyword_cascade)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Create a table with named column constraints
|
|
||||||
================================================================================
|
|
||||||
create table foo (
|
|
||||||
id uuid constraint foo_pkey primary key,
|
|
||||||
c1 text constraint strong_c1 not null,
|
|
||||||
c2 text constraint weak_c2 null,
|
|
||||||
c3 text constraint "c3 with power" not null constraint "c2 set default hello" default 'hello',
|
|
||||||
c4 text constraint "c4 unique" unique nulls not distinct
|
|
||||||
);
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
(source_file
|
|
||||||
(statement
|
|
||||||
(create_table
|
|
||||||
(keyword_create)
|
|
||||||
(keyword_table)
|
|
||||||
(table_reference
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(column_definitions
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_uuid))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_constraint)
|
|
||||||
name: (identifier)
|
|
||||||
(keyword_primary)
|
|
||||||
(keyword_key)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_text))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_constraint)
|
|
||||||
name: (identifier)
|
|
||||||
(keyword_not)
|
|
||||||
(keyword_null)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_text))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_constraint)
|
|
||||||
name: (identifier)
|
|
||||||
(keyword_null)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_text))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_constraint)
|
|
||||||
name: (identifier)
|
|
||||||
(keyword_not)
|
|
||||||
(keyword_null)
|
|
||||||
)
|
|
||||||
(column_constraint
|
|
||||||
(keyword_constraint)
|
|
||||||
name: (identifier)
|
|
||||||
(keyword_default)
|
|
||||||
(literal
|
|
||||||
(literal_string)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_text))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_constraint)
|
|
||||||
name: (identifier)
|
|
||||||
(keyword_unique)
|
|
||||||
(keyword_nulls)
|
|
||||||
(keyword_not)
|
|
||||||
(keyword_distinct)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Create a table with table constraints
|
|
||||||
================================================================================
|
|
||||||
create table foo (
|
|
||||||
id uuid,
|
|
||||||
primary key (id),
|
|
||||||
c1 text not null,
|
|
||||||
c2 text null,
|
|
||||||
c3 text not null default 'hello',
|
|
||||||
unique (c1, c3)
|
|
||||||
);
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
(source_file
|
|
||||||
(statement
|
|
||||||
(create_table
|
|
||||||
(keyword_create)
|
|
||||||
(keyword_table)
|
|
||||||
(table_reference
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(column_definitions
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_uuid))
|
|
||||||
)
|
|
||||||
(table_constraint
|
|
||||||
(keyword_primary)
|
|
||||||
(keyword_key)
|
|
||||||
(column_list
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_text))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_not)
|
|
||||||
(keyword_null)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_text))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_null)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_text))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_not)
|
|
||||||
(keyword_null)
|
|
||||||
)
|
|
||||||
(column_constraint
|
|
||||||
(keyword_default)
|
|
||||||
(literal
|
|
||||||
(literal_string)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(table_constraint
|
|
||||||
(keyword_unique)
|
|
||||||
(column_list
|
|
||||||
name: (identifier)
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Create a table with primary key and foreign key
|
|
||||||
================================================================================
|
|
||||||
create table foo (
|
|
||||||
id uuid primary key,
|
|
||||||
bar_id uuid null references bar (id) on update set null on delete cascade
|
|
||||||
);
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
(source_file
|
|
||||||
(statement
|
|
||||||
(create_table
|
|
||||||
(keyword_create)
|
|
||||||
(keyword_table)
|
|
||||||
(table_reference
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(column_definitions
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_uuid))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_primary)
|
|
||||||
(keyword_key)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_uuid))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_null)
|
|
||||||
)
|
|
||||||
(column_constraint
|
|
||||||
(keyword_references)
|
|
||||||
(table_reference
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(ref_column
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(keyword_on)
|
|
||||||
(keyword_update)
|
|
||||||
(referencial_action
|
|
||||||
(keyword_set)
|
|
||||||
(keyword_null)
|
|
||||||
)
|
|
||||||
(keyword_on)
|
|
||||||
(keyword_delete)
|
|
||||||
(referencial_action
|
|
||||||
(keyword_cascade)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Create a table with named column constraints
|
|
||||||
================================================================================
|
|
||||||
create table foo (
|
|
||||||
id uuid constraint foo_pkey primary key,
|
|
||||||
c1 text constraint strong_c1 not null,
|
|
||||||
c2 text constraint weak_c2 null,
|
|
||||||
c3 text constraint "c3 with power" not null constraint "c2 set default hello" default 'hello',
|
|
||||||
c4 text constraint "c4 unique" unique nulls not distinct
|
|
||||||
);
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
(source_file
|
|
||||||
(statement
|
|
||||||
(create_table
|
|
||||||
(keyword_create)
|
|
||||||
(keyword_table)
|
|
||||||
(table_reference
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(column_definitions
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_uuid))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_constraint)
|
|
||||||
name: (identifier)
|
|
||||||
(keyword_primary)
|
|
||||||
(keyword_key)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_text))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_constraint)
|
|
||||||
name: (identifier)
|
|
||||||
(keyword_not)
|
|
||||||
(keyword_null)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_text))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_constraint)
|
|
||||||
name: (identifier)
|
|
||||||
(keyword_null)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_text))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_constraint)
|
|
||||||
name: (identifier)
|
|
||||||
(keyword_not)
|
|
||||||
(keyword_null)
|
|
||||||
)
|
|
||||||
(column_constraint
|
|
||||||
(keyword_constraint)
|
|
||||||
name: (identifier)
|
|
||||||
(keyword_default)
|
|
||||||
(literal
|
|
||||||
(literal_string)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_text))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_constraint)
|
|
||||||
name: (identifier)
|
|
||||||
(keyword_unique)
|
|
||||||
(keyword_nulls)
|
|
||||||
(keyword_not)
|
|
||||||
(keyword_distinct)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Create a table with named table constraints
|
|
||||||
================================================================================
|
|
||||||
create table foo (
|
|
||||||
id uuid,
|
|
||||||
constraint foo_pkey primary key (id),
|
|
||||||
c3 uuid not null,
|
|
||||||
constraint foo_c3_fkey foreign key (c3) references bar (id) on update set null on delete cascade,
|
|
||||||
c4 text,
|
|
||||||
constraint "c4 unique" unique nulls not distinct (c4)
|
|
||||||
);
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
(source_file
|
|
||||||
(statement
|
|
||||||
(create_table
|
|
||||||
(keyword_create)
|
|
||||||
(keyword_table)
|
|
||||||
(table_reference
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(column_definitions
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_uuid))
|
|
||||||
)
|
|
||||||
(table_constraint
|
|
||||||
(keyword_constraint)
|
|
||||||
name: (identifier)
|
|
||||||
(keyword_primary)
|
|
||||||
(keyword_key)
|
|
||||||
(column_list
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_uuid))
|
|
||||||
(column_constraint
|
|
||||||
(keyword_not)
|
|
||||||
(keyword_null)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(table_constraint
|
|
||||||
(keyword_constraint)
|
|
||||||
name: (identifier)
|
|
||||||
(keyword_foreign)
|
|
||||||
(keyword_key)
|
|
||||||
(column_list
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(keyword_references)
|
|
||||||
(table_reference
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(ref_column_list
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
(keyword_on)
|
|
||||||
(keyword_update)
|
|
||||||
(referencial_action
|
|
||||||
(keyword_set)
|
|
||||||
(keyword_null)
|
|
||||||
)
|
|
||||||
(keyword_on)
|
|
||||||
(keyword_delete)
|
|
||||||
(referencial_action
|
|
||||||
(keyword_cascade)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(column_definition
|
|
||||||
name: (identifier)
|
|
||||||
(type (keyword_text))
|
|
||||||
)
|
|
||||||
(table_constraint
|
|
||||||
(keyword_constraint)
|
|
||||||
name: (identifier)
|
|
||||||
(keyword_unique)
|
|
||||||
(keyword_nulls)
|
|
||||||
(keyword_not)
|
|
||||||
(keyword_distinct)
|
|
||||||
(column_list
|
|
||||||
name: (identifier)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
192
test/corpus/create_function/general.txt
Normal file
192
test/corpus/create_function/general.txt
Normal file
|
@ -0,0 +1,192 @@
|
||||||
|
================================================================================
|
||||||
|
body block
|
||||||
|
================================================================================
|
||||||
|
CREATE FUNCTION FOO () RETURNS void AS $$ BEGIN END $$ LANGUAGE sql;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_function_statement
|
||||||
|
(function_signature
|
||||||
|
(identifier)
|
||||||
|
(function_parameters))
|
||||||
|
(function_return
|
||||||
|
(identifier))
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body)
|
||||||
|
(dollar_quote))
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
or replace
|
||||||
|
================================================================================
|
||||||
|
CREATE OR REPLACE FUNCTION FOO () RETURNS void AS 'select' LANGUAGE sql;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_function_statement
|
||||||
|
(or_replace)
|
||||||
|
(function_signature
|
||||||
|
(identifier)
|
||||||
|
(function_parameters))
|
||||||
|
(function_return
|
||||||
|
(identifier))
|
||||||
|
(string)
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
immutable
|
||||||
|
================================================================================
|
||||||
|
CREATE FUNCTION FOO () RETURNS void AS 'select' LANGUAGE sql IMMUTABLE;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_function_statement
|
||||||
|
(function_signature
|
||||||
|
(identifier)
|
||||||
|
(function_parameters))
|
||||||
|
(function_return
|
||||||
|
(identifier))
|
||||||
|
(string)
|
||||||
|
(identifier)
|
||||||
|
(function_volatility)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
stable
|
||||||
|
================================================================================
|
||||||
|
CREATE FUNCTION FOO () RETURNS void AS 'select' LANGUAGE sql STABLE;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_function_statement
|
||||||
|
(function_signature
|
||||||
|
(identifier)
|
||||||
|
(function_parameters))
|
||||||
|
(function_return
|
||||||
|
(identifier))
|
||||||
|
(string)
|
||||||
|
(identifier)
|
||||||
|
(function_volatility)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
volatile
|
||||||
|
================================================================================
|
||||||
|
CREATE FUNCTION FOO () RETURNS void AS 'select' LANGUAGE sql VOLATILE;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_function_statement
|
||||||
|
(function_signature
|
||||||
|
(identifier)
|
||||||
|
(function_parameters))
|
||||||
|
(function_return
|
||||||
|
(identifier))
|
||||||
|
(string)
|
||||||
|
(identifier)
|
||||||
|
(function_volatility)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
returns array
|
||||||
|
================================================================================
|
||||||
|
CREATE FUNCTION FOO () RETURNS text[] AS 'select' LANGUAGE sql;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_function_statement
|
||||||
|
(function_signature
|
||||||
|
(identifier)
|
||||||
|
(function_parameters))
|
||||||
|
(function_return
|
||||||
|
(identifier))
|
||||||
|
(string)
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
returns setof
|
||||||
|
================================================================================
|
||||||
|
CREATE FUNCTION FOO () RETURNS SETOF text AS 'select' LANGUAGE sql;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_function_statement
|
||||||
|
(function_signature
|
||||||
|
(identifier)
|
||||||
|
(function_parameters))
|
||||||
|
(function_return
|
||||||
|
(return_setof
|
||||||
|
(identifier)))
|
||||||
|
(string)
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
returns setof array
|
||||||
|
================================================================================
|
||||||
|
CREATE FUNCTION FOO () RETURNS SETOF text[] AS 'select' LANGUAGE sql;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_function_statement
|
||||||
|
(function_signature
|
||||||
|
(identifier)
|
||||||
|
(function_parameters))
|
||||||
|
(function_return
|
||||||
|
(return_setof
|
||||||
|
(identifier)))
|
||||||
|
(string)
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
returns table
|
||||||
|
================================================================================
|
||||||
|
CREATE FUNCTION FOO () RETURNS TABLE(a text, b bigint) AS 'select' LANGUAGE sql;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_function_statement
|
||||||
|
(function_signature
|
||||||
|
(identifier)
|
||||||
|
(function_parameters))
|
||||||
|
(function_return
|
||||||
|
(return_table
|
||||||
|
(var_declaration
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(var_declaration
|
||||||
|
(identifier)
|
||||||
|
(identifier))))
|
||||||
|
(string)
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
security definer
|
||||||
|
================================================================================
|
||||||
|
CREATE FUNCTION FOO () RETURNS void AS 'select' LANGUAGE sql SECURITY definer;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_function_statement
|
||||||
|
(function_signature
|
||||||
|
(identifier)
|
||||||
|
(function_parameters))
|
||||||
|
(function_return
|
||||||
|
(identifier))
|
||||||
|
(string)
|
||||||
|
(identifier)
|
||||||
|
(function_run_as)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
security invoker
|
||||||
|
================================================================================
|
||||||
|
CREATE FUNCTION FOO () RETURNS void AS 'select' LANGUAGE sql SECURITY INVOKER;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_function_statement
|
||||||
|
(function_signature
|
||||||
|
(identifier)
|
||||||
|
(function_parameters))
|
||||||
|
(function_return
|
||||||
|
(identifier))
|
||||||
|
(string)
|
||||||
|
(identifier)
|
||||||
|
(function_run_as)))
|
98
test/corpus/create_function/parameters.txt
Normal file
98
test/corpus/create_function/parameters.txt
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
================================================================================
|
||||||
|
empty
|
||||||
|
================================================================================
|
||||||
|
CREATE FUNCTION FOO () RETURNS void AS 'select' LANGUAGE sql;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_function_statement
|
||||||
|
(function_signature
|
||||||
|
(identifier)
|
||||||
|
(function_parameters))
|
||||||
|
(function_return
|
||||||
|
(identifier))
|
||||||
|
(string)
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
with argument
|
||||||
|
================================================================================
|
||||||
|
CREATE FUNCTION FOO (_foo bar.baz) RETURNS void AS 'select' LANGUAGE sql;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_function_statement
|
||||||
|
(function_signature
|
||||||
|
(identifier)
|
||||||
|
(function_parameters
|
||||||
|
(var_declaration
|
||||||
|
(identifier)
|
||||||
|
(identifier))))
|
||||||
|
(function_return
|
||||||
|
(identifier))
|
||||||
|
(string)
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
default value
|
||||||
|
================================================================================
|
||||||
|
CREATE FUNCTION FOO (_foo bar.baz default '42') RETURNS void AS 'select' LANGUAGE sql;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_function_statement
|
||||||
|
(function_signature
|
||||||
|
(identifier)
|
||||||
|
(function_parameters
|
||||||
|
(var_declaration
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(string)))
|
||||||
|
(function_return
|
||||||
|
(identifier))
|
||||||
|
(string)
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
with arguments
|
||||||
|
================================================================================
|
||||||
|
CREATE FUNCTION FOO (foo bar, foo bar) RETURNS void AS 'select' LANGUAGE sql;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_function_statement
|
||||||
|
(function_signature
|
||||||
|
(identifier)
|
||||||
|
(function_parameters
|
||||||
|
(var_declaration
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(var_declaration
|
||||||
|
(identifier)
|
||||||
|
(identifier))))
|
||||||
|
(function_return
|
||||||
|
(identifier))
|
||||||
|
(string)
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
arrays
|
||||||
|
================================================================================
|
||||||
|
CREATE FUNCTION FOO (foo bar[], foo bar[][]) RETURNS void AS 'select' LANGUAGE sql;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_function_statement
|
||||||
|
(function_signature
|
||||||
|
(identifier)
|
||||||
|
(function_parameters
|
||||||
|
(var_declaration
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(var_declaration
|
||||||
|
(identifier)
|
||||||
|
(identifier))))
|
||||||
|
(function_return
|
||||||
|
(identifier))
|
||||||
|
(string)
|
||||||
|
(identifier)))
|
93
test/corpus/create_index_statement.txt
Normal file
93
test/corpus/create_index_statement.txt
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
================================================================================
|
||||||
|
basic
|
||||||
|
================================================================================
|
||||||
|
create index ON foo.bar(col);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_index_statement
|
||||||
|
(identifier)
|
||||||
|
(index_col
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
with columns
|
||||||
|
================================================================================
|
||||||
|
create index on foo.bar (
|
||||||
|
col ASC NULLS FIRST,
|
||||||
|
col DESC NULLS LAST,
|
||||||
|
col NULLS FIRST,
|
||||||
|
(upper(col)) DESC);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_index_statement
|
||||||
|
(identifier)
|
||||||
|
(index_col
|
||||||
|
(identifier)
|
||||||
|
(index_col_dir)
|
||||||
|
(index_col_nulls))
|
||||||
|
(index_col
|
||||||
|
(identifier)
|
||||||
|
(index_col_dir)
|
||||||
|
(index_col_nulls))
|
||||||
|
(index_col
|
||||||
|
(identifier)
|
||||||
|
(index_col_nulls))
|
||||||
|
(index_col
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(index_col_dir))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
full syntax
|
||||||
|
================================================================================
|
||||||
|
create unique index concurrently if not exists idx_name on foo.bar using gist (col, (upper(bar)));
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_index_statement
|
||||||
|
(if_not_exists)
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(index_using
|
||||||
|
(identifier))
|
||||||
|
(index_col
|
||||||
|
(identifier))
|
||||||
|
(index_col
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
include
|
||||||
|
================================================================================
|
||||||
|
create index ON foo.bar(col) include (col1, col2);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_index_statement
|
||||||
|
(identifier)
|
||||||
|
(index_col
|
||||||
|
(identifier))
|
||||||
|
(index_includes
|
||||||
|
(identifier)
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
partial
|
||||||
|
================================================================================
|
||||||
|
create index ON foo.bar(col) where col > 25;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_index_statement
|
||||||
|
(identifier)
|
||||||
|
(index_col
|
||||||
|
(identifier))
|
||||||
|
(where_filter
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(number)))))
|
77
test/corpus/create_schema_statement.txt
Normal file
77
test/corpus/create_schema_statement.txt
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
================================================================================
|
||||||
|
basic
|
||||||
|
================================================================================
|
||||||
|
create schema foo;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_schema_statement
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
for user
|
||||||
|
================================================================================
|
||||||
|
create schema authorization joe;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_schema_statement
|
||||||
|
(schema_role
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
for current_user
|
||||||
|
================================================================================
|
||||||
|
create schema authorization current_user;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_schema_statement
|
||||||
|
(schema_role)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
for session_user
|
||||||
|
================================================================================
|
||||||
|
create schema authorization session_user;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_schema_statement
|
||||||
|
(schema_role)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
with name, for user
|
||||||
|
================================================================================
|
||||||
|
create schema foo authorization joe;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_schema_statement
|
||||||
|
(identifier)
|
||||||
|
(schema_role
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
if not exists
|
||||||
|
================================================================================
|
||||||
|
create schema if not exists foo authorization joe;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_schema_statement
|
||||||
|
(if_not_exists)
|
||||||
|
(identifier)
|
||||||
|
(schema_role
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
if not exists with name
|
||||||
|
================================================================================
|
||||||
|
create schema if not exists authorization joe;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_schema_statement
|
||||||
|
(if_not_exists)
|
||||||
|
(schema_role
|
||||||
|
(identifier))))
|
234
test/corpus/create_sequence_statement.txt
Normal file
234
test/corpus/create_sequence_statement.txt
Normal file
|
@ -0,0 +1,234 @@
|
||||||
|
================================================================================
|
||||||
|
basic
|
||||||
|
================================================================================
|
||||||
|
create sequence foo;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_sequence_statement
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
if not exists
|
||||||
|
================================================================================
|
||||||
|
create sequence if not exists foo;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_sequence_statement
|
||||||
|
(if_not_exists)
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
temp
|
||||||
|
================================================================================
|
||||||
|
create temp sequence foo;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_sequence_statement
|
||||||
|
(temporary)
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
temporary
|
||||||
|
================================================================================
|
||||||
|
create temporary sequence foo;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_sequence_statement
|
||||||
|
(temporary)
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
as
|
||||||
|
================================================================================
|
||||||
|
create sequence foo as smallint;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_sequence_statement
|
||||||
|
(identifier)
|
||||||
|
(as
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
increment
|
||||||
|
================================================================================
|
||||||
|
create sequence foo increment 5;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_sequence_statement
|
||||||
|
(identifier)
|
||||||
|
(sequence_increment
|
||||||
|
(number))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
increment by
|
||||||
|
================================================================================
|
||||||
|
create sequence foo increment by 5;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_sequence_statement
|
||||||
|
(identifier)
|
||||||
|
(sequence_increment
|
||||||
|
(number))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
minvalue
|
||||||
|
================================================================================
|
||||||
|
create sequence foo minvalue 5;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_sequence_statement
|
||||||
|
(identifier)
|
||||||
|
(sequence_min
|
||||||
|
(number))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
no minvalue
|
||||||
|
================================================================================
|
||||||
|
create sequence foo no minvalue;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_sequence_statement
|
||||||
|
(identifier)
|
||||||
|
(sequence_min)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
max value
|
||||||
|
================================================================================
|
||||||
|
create sequence foo maxvalue 5;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_sequence_statement
|
||||||
|
(identifier)
|
||||||
|
(sequence_max
|
||||||
|
(number))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
no max value
|
||||||
|
================================================================================
|
||||||
|
create sequence foo no maxvalue;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_sequence_statement
|
||||||
|
(identifier)
|
||||||
|
(sequence_max)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
start
|
||||||
|
================================================================================
|
||||||
|
create sequence foo start 5;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_sequence_statement
|
||||||
|
(identifier)
|
||||||
|
(sequence_start
|
||||||
|
(number))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
start with
|
||||||
|
================================================================================
|
||||||
|
create sequence foo start with 5;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_sequence_statement
|
||||||
|
(identifier)
|
||||||
|
(sequence_start
|
||||||
|
(number))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
cache
|
||||||
|
================================================================================
|
||||||
|
create sequence foo cache 4;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_sequence_statement
|
||||||
|
(identifier)
|
||||||
|
(sequence_cache
|
||||||
|
(number))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
no cycle
|
||||||
|
================================================================================
|
||||||
|
create sequence foo no cycle;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_sequence_statement
|
||||||
|
(identifier)
|
||||||
|
(sequence_cycle)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
cycle
|
||||||
|
================================================================================
|
||||||
|
create sequence foo cycle;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_sequence_statement
|
||||||
|
(identifier)
|
||||||
|
(sequence_cycle)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
owned by
|
||||||
|
================================================================================
|
||||||
|
create sequence foo owned by foo.bar;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_sequence_statement
|
||||||
|
(identifier)
|
||||||
|
(sequence_owned
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
owned by none
|
||||||
|
================================================================================
|
||||||
|
create sequence foo owned by none;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_sequence_statement
|
||||||
|
(identifier)
|
||||||
|
(sequence_owned)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
full syntax
|
||||||
|
================================================================================
|
||||||
|
create temp sequence if not exists foo
|
||||||
|
as bigint increment -5
|
||||||
|
minvalue 5 no maxvalue
|
||||||
|
start with 3 cache 2 no cycle
|
||||||
|
owned by none;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_sequence_statement
|
||||||
|
(temporary)
|
||||||
|
(if_not_exists)
|
||||||
|
(identifier)
|
||||||
|
(as
|
||||||
|
(identifier))
|
||||||
|
(sequence_increment
|
||||||
|
(number))
|
||||||
|
(sequence_min
|
||||||
|
(number))
|
||||||
|
(sequence_max)
|
||||||
|
(sequence_start
|
||||||
|
(number))
|
||||||
|
(sequence_cache
|
||||||
|
(number))
|
||||||
|
(sequence_cycle)
|
||||||
|
(sequence_owned)))
|
345
test/corpus/create_table_statement.txt
Normal file
345
test/corpus/create_table_statement.txt
Normal file
|
@ -0,0 +1,345 @@
|
||||||
|
================================================================================
|
||||||
|
create an empty table
|
||||||
|
================================================================================
|
||||||
|
create table foo();
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_table_statement
|
||||||
|
(identifier)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
create temporary table
|
||||||
|
================================================================================
|
||||||
|
create temp table foo();
|
||||||
|
|
||||||
|
create temporary table foo();
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_table_statement
|
||||||
|
(temporary)
|
||||||
|
(identifier)
|
||||||
|
)
|
||||||
|
(create_table_statement
|
||||||
|
(temporary)
|
||||||
|
(identifier)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
create table if not exists
|
||||||
|
================================================================================
|
||||||
|
create table if not exists foo();
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_table_statement
|
||||||
|
(if_not_exists)
|
||||||
|
(identifier)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
create unlogged table
|
||||||
|
================================================================================
|
||||||
|
create unlogged table foo();
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_table_statement
|
||||||
|
(unlogged)
|
||||||
|
(identifier)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
create table with predefined types
|
||||||
|
================================================================================
|
||||||
|
create table foo(
|
||||||
|
col1 numeric,
|
||||||
|
col2 numeric(2),
|
||||||
|
col3 numeric(2, 4),
|
||||||
|
col4 varchar,
|
||||||
|
col5 varchar(255)
|
||||||
|
);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_table_statement
|
||||||
|
(identifier)
|
||||||
|
(create_table_item
|
||||||
|
(table_column_item
|
||||||
|
(identifier)
|
||||||
|
(predefined_type)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(create_table_item
|
||||||
|
(table_column_item
|
||||||
|
(identifier)
|
||||||
|
(predefined_type (precision (number)))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(create_table_item
|
||||||
|
(table_column_item
|
||||||
|
(identifier)
|
||||||
|
(predefined_type (precision (number) (number)))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(create_table_item
|
||||||
|
(table_column_item
|
||||||
|
(identifier)
|
||||||
|
(predefined_type)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(create_table_item
|
||||||
|
(table_column_item
|
||||||
|
(identifier)
|
||||||
|
(predefined_type (type_length (number)))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
constraints with deferred
|
||||||
|
================================================================================
|
||||||
|
create table foo(
|
||||||
|
col1 text not null deferrable,
|
||||||
|
col2 bigint not null deferrable initially immediate,
|
||||||
|
col3 numeric(2, 4) null deferrable initially deferred
|
||||||
|
);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_table_statement
|
||||||
|
(identifier)
|
||||||
|
(create_table_item
|
||||||
|
(table_column_item
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(column_constraint
|
||||||
|
(column_constraint_ty)
|
||||||
|
(constraint_when))))
|
||||||
|
(create_table_item
|
||||||
|
(table_column_item
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(column_constraint
|
||||||
|
(column_constraint_ty)
|
||||||
|
(constraint_when))))
|
||||||
|
(create_table_item
|
||||||
|
(table_column_item
|
||||||
|
(identifier)
|
||||||
|
(predefined_type
|
||||||
|
(precision
|
||||||
|
(number)
|
||||||
|
(number)))
|
||||||
|
(column_constraint
|
||||||
|
(column_constraint_ty)
|
||||||
|
(constraint_when))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
column constraints
|
||||||
|
================================================================================
|
||||||
|
create table foo(
|
||||||
|
col1 text not null primary key check( col1 > b),
|
||||||
|
col2 bigint null default 25 deferrable initially immediate constraint a_name unique,
|
||||||
|
col3 numeric(2, 4) null deferrable initially deferred,
|
||||||
|
col4 int references foo.baz
|
||||||
|
);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_table_statement
|
||||||
|
(identifier)
|
||||||
|
(create_table_item
|
||||||
|
(table_column_item
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(column_constraint
|
||||||
|
(column_constraint_ty))
|
||||||
|
(column_constraint
|
||||||
|
(column_constraint_ty))
|
||||||
|
(column_constraint
|
||||||
|
(column_constraint_ty
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(identifier))))))
|
||||||
|
(create_table_item
|
||||||
|
(table_column_item
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(column_constraint
|
||||||
|
(column_constraint_ty))
|
||||||
|
(column_constraint
|
||||||
|
(column_constraint_ty
|
||||||
|
(number))
|
||||||
|
(constraint_when))
|
||||||
|
(column_constraint
|
||||||
|
(identifier)
|
||||||
|
(column_constraint_ty))))
|
||||||
|
(create_table_item
|
||||||
|
(table_column_item
|
||||||
|
(identifier)
|
||||||
|
(predefined_type
|
||||||
|
(precision
|
||||||
|
(number)
|
||||||
|
(number)))
|
||||||
|
(column_constraint
|
||||||
|
(column_constraint_ty)
|
||||||
|
(constraint_when))))
|
||||||
|
(create_table_item
|
||||||
|
(table_column_item
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(column_constraint
|
||||||
|
(column_constraint_ty
|
||||||
|
(constraint_foreign_key
|
||||||
|
(identifier))))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
column fk references
|
||||||
|
================================================================================
|
||||||
|
create table foo(
|
||||||
|
col int references foo.baz(col1, col2),
|
||||||
|
col int references foo.baz on delete set default,
|
||||||
|
col int references foo.baz on delete no action on update cascade,
|
||||||
|
col int references foo.baz on delete restrict on update set null
|
||||||
|
);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_table_statement
|
||||||
|
(identifier)
|
||||||
|
(create_table_item
|
||||||
|
(table_column_item
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(column_constraint
|
||||||
|
(column_constraint_ty
|
||||||
|
(constraint_foreign_key
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier))))))
|
||||||
|
(create_table_item
|
||||||
|
(table_column_item
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(column_constraint
|
||||||
|
(column_constraint_ty
|
||||||
|
(constraint_foreign_key
|
||||||
|
(identifier)
|
||||||
|
(fk_action
|
||||||
|
(fk_ref_action)))))))
|
||||||
|
(create_table_item
|
||||||
|
(table_column_item
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(column_constraint
|
||||||
|
(column_constraint_ty
|
||||||
|
(constraint_foreign_key
|
||||||
|
(identifier)
|
||||||
|
(fk_action
|
||||||
|
(fk_ref_action))
|
||||||
|
(fk_action
|
||||||
|
(fk_ref_action)))))))
|
||||||
|
(create_table_item
|
||||||
|
(table_column_item
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(column_constraint
|
||||||
|
(column_constraint_ty
|
||||||
|
(constraint_foreign_key
|
||||||
|
(identifier)
|
||||||
|
(fk_action
|
||||||
|
(fk_ref_action))
|
||||||
|
(fk_action
|
||||||
|
(fk_ref_action)))))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
table constraints - check
|
||||||
|
================================================================================
|
||||||
|
create table foo(
|
||||||
|
constraint one check (column_a > 5),
|
||||||
|
check (column_b > 5)
|
||||||
|
);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_table_statement
|
||||||
|
(identifier)
|
||||||
|
(create_table_item
|
||||||
|
(table_constraint
|
||||||
|
(identifier)
|
||||||
|
(table_constraint_ty
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(number)))))
|
||||||
|
(create_table_item
|
||||||
|
(table_constraint
|
||||||
|
(table_constraint_ty
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(number)))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
table constraints - unique
|
||||||
|
================================================================================
|
||||||
|
create table foo(
|
||||||
|
unique (column_a, column_b)
|
||||||
|
);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_table_statement
|
||||||
|
(identifier)
|
||||||
|
(create_table_item
|
||||||
|
(table_constraint
|
||||||
|
(table_constraint_ty
|
||||||
|
(identifier)
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
table constraints - pk
|
||||||
|
================================================================================
|
||||||
|
create table foo(
|
||||||
|
primary key (column_a, column_b)
|
||||||
|
);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_table_statement
|
||||||
|
(identifier)
|
||||||
|
(create_table_item
|
||||||
|
(table_constraint
|
||||||
|
(table_constraint_ty
|
||||||
|
(identifier)
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
table constraints - fk
|
||||||
|
================================================================================
|
||||||
|
create table foo(
|
||||||
|
foreign key (column_a, column_b) references foo(name, age, bar)
|
||||||
|
);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_table_statement
|
||||||
|
(identifier)
|
||||||
|
(create_table_item
|
||||||
|
(table_constraint
|
||||||
|
(table_constraint_ty
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(constraint_foreign_key
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier)))))))
|
184
test/corpus/create_trigger_statement.txt
Normal file
184
test/corpus/create_trigger_statement.txt
Normal file
|
@ -0,0 +1,184 @@
|
||||||
|
================================================================================
|
||||||
|
basic
|
||||||
|
================================================================================
|
||||||
|
create trigger tr before insert on mytable execute foo();
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_trigger_statement
|
||||||
|
(identifier)
|
||||||
|
(trigger_when)
|
||||||
|
(trigger_event)
|
||||||
|
(identifier)
|
||||||
|
(trigger_exec
|
||||||
|
(function_call
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
constraint
|
||||||
|
================================================================================
|
||||||
|
create constraint trigger tr before insert on mytable execute foo();
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_trigger_statement
|
||||||
|
(identifier)
|
||||||
|
(trigger_when)
|
||||||
|
(trigger_event)
|
||||||
|
(identifier)
|
||||||
|
(trigger_exec
|
||||||
|
(function_call
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
after
|
||||||
|
================================================================================
|
||||||
|
create trigger tr after insert on mytable execute foo();
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_trigger_statement
|
||||||
|
(identifier)
|
||||||
|
(trigger_when)
|
||||||
|
(trigger_event)
|
||||||
|
(identifier)
|
||||||
|
(trigger_exec
|
||||||
|
(function_call
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
instead of
|
||||||
|
================================================================================
|
||||||
|
create trigger tr instead of insert on mytable execute foo();
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_trigger_statement
|
||||||
|
(identifier)
|
||||||
|
(trigger_when)
|
||||||
|
(trigger_event)
|
||||||
|
(identifier)
|
||||||
|
(trigger_exec
|
||||||
|
(function_call
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
many when
|
||||||
|
================================================================================
|
||||||
|
create trigger tr before insert or update or delete or truncate on mytable execute foo();
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_trigger_statement
|
||||||
|
(identifier)
|
||||||
|
(trigger_when)
|
||||||
|
(trigger_event)
|
||||||
|
(identifier)
|
||||||
|
(trigger_exec
|
||||||
|
(function_call
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
scope for statement
|
||||||
|
================================================================================
|
||||||
|
create trigger tr before insert on mytable for statement execute foo();
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_trigger_statement
|
||||||
|
(identifier)
|
||||||
|
(trigger_when)
|
||||||
|
(trigger_event)
|
||||||
|
(identifier)
|
||||||
|
(trigger_scope)
|
||||||
|
(trigger_exec
|
||||||
|
(function_call
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
scope for each row
|
||||||
|
================================================================================
|
||||||
|
create trigger tr before insert on mytable for each row execute foo();
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_trigger_statement
|
||||||
|
(identifier)
|
||||||
|
(trigger_when)
|
||||||
|
(trigger_event)
|
||||||
|
(identifier)
|
||||||
|
(trigger_scope)
|
||||||
|
(trigger_exec
|
||||||
|
(function_call
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
scope for each statement
|
||||||
|
================================================================================
|
||||||
|
create trigger tr before insert on mytable for each statement execute foo();
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_trigger_statement
|
||||||
|
(identifier)
|
||||||
|
(trigger_when)
|
||||||
|
(trigger_event)
|
||||||
|
(identifier)
|
||||||
|
(trigger_scope)
|
||||||
|
(trigger_exec
|
||||||
|
(function_call
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
execute procedure
|
||||||
|
================================================================================
|
||||||
|
create trigger tr before insert on mytable execute procedure foo();
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_trigger_statement
|
||||||
|
(identifier)
|
||||||
|
(trigger_when)
|
||||||
|
(trigger_event)
|
||||||
|
(identifier)
|
||||||
|
(trigger_exec
|
||||||
|
(function_call
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
execute function
|
||||||
|
================================================================================
|
||||||
|
create trigger tr before insert on mytable execute function foo();
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_trigger_statement
|
||||||
|
(identifier)
|
||||||
|
(trigger_when)
|
||||||
|
(trigger_event)
|
||||||
|
(identifier)
|
||||||
|
(trigger_exec
|
||||||
|
(function_call
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
when
|
||||||
|
================================================================================
|
||||||
|
create constraint trigger a.tr before insert or delete on foo.mytable for each statement when (new.baz != old.baz) execute function foo();
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_trigger_statement
|
||||||
|
(identifier)
|
||||||
|
(trigger_when)
|
||||||
|
(trigger_event)
|
||||||
|
(identifier)
|
||||||
|
(trigger_scope)
|
||||||
|
(trigger_cond
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(identifier)))
|
||||||
|
(trigger_exec
|
||||||
|
(function_call
|
||||||
|
(identifier)))))
|
37
test/corpus/create_type_statement.txt
Normal file
37
test/corpus/create_type_statement.txt
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
================================================================================
|
||||||
|
empty
|
||||||
|
================================================================================
|
||||||
|
create type foo;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_type_statement
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
with fields
|
||||||
|
================================================================================
|
||||||
|
create type foo as ( one text, two bigint[] );
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_type_statement
|
||||||
|
(identifier)
|
||||||
|
(var_declaration
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(var_declaration
|
||||||
|
(identifier)
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
enum
|
||||||
|
================================================================================
|
||||||
|
create type foo.bar as enum ('one', 'two');
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(create_type_statement
|
||||||
|
(identifier)
|
||||||
|
(string)
|
||||||
|
(string)))
|
104
test/corpus/delete_statement.txt
Normal file
104
test/corpus/delete_statement.txt
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
================================================================================
|
||||||
|
whole table
|
||||||
|
================================================================================
|
||||||
|
delete from tasks;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(delete_statement
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
where
|
||||||
|
================================================================================
|
||||||
|
delete from tasks where status <> 'Musical';
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(delete_statement
|
||||||
|
(identifier)
|
||||||
|
(where_filter
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(string)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
returning
|
||||||
|
================================================================================
|
||||||
|
DELETE FROM tasks WHERE status = 'DONE' RETURNING *;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(delete_statement
|
||||||
|
(identifier)
|
||||||
|
(where_filter
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(string)))
|
||||||
|
(select_item
|
||||||
|
(star))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
delete using subselect
|
||||||
|
================================================================================
|
||||||
|
DELETE FROM foo a USING (select baz from bar) b WHERE a.b = b.b;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(delete_statement
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(delete_using
|
||||||
|
(from_item
|
||||||
|
(from_select
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))))
|
||||||
|
(identifier))))
|
||||||
|
(where_filter
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
with cte
|
||||||
|
================================================================================
|
||||||
|
with foo as (select * from bar)
|
||||||
|
delete from baz;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(delete_statement
|
||||||
|
(with_query
|
||||||
|
(with_query_item
|
||||||
|
(identifier)
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(star))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))))))
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
returning into
|
||||||
|
================================================================================
|
||||||
|
delete from foo
|
||||||
|
returning id into _backup_id;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(delete_statement
|
||||||
|
(identifier)
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(into
|
||||||
|
(identifier))))
|
102
test/corpus/drop_function_statement.txt
Normal file
102
test/corpus/drop_function_statement.txt
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
================================================================================
|
||||||
|
basic
|
||||||
|
================================================================================
|
||||||
|
drop function foo(bigint, text);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(drop_function_statement
|
||||||
|
(drop_function_item
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
many at once
|
||||||
|
================================================================================
|
||||||
|
drop function foo(bigint, text), foo(bigint);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(drop_function_statement
|
||||||
|
(drop_function_item
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(drop_function_item
|
||||||
|
(identifier)
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
without args
|
||||||
|
================================================================================
|
||||||
|
drop function foo;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(drop_function_statement
|
||||||
|
(drop_function_item
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
with no args
|
||||||
|
================================================================================
|
||||||
|
drop function foo();
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(drop_function_statement
|
||||||
|
(drop_function_item
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
cascade
|
||||||
|
================================================================================
|
||||||
|
drop function foo(bigint) cascade;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(drop_function_statement
|
||||||
|
(drop_function_item
|
||||||
|
(identifier)
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
restrict
|
||||||
|
================================================================================
|
||||||
|
drop function foo(bigint) restrict;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(drop_function_statement
|
||||||
|
(drop_function_item
|
||||||
|
(identifier)
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
if exists
|
||||||
|
================================================================================
|
||||||
|
drop function if exists foo();
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(drop_function_statement
|
||||||
|
(drop_function_item
|
||||||
|
(if_exists)
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
with argnames
|
||||||
|
================================================================================
|
||||||
|
drop function if exists foo(bar text, bigint);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(drop_function_statement
|
||||||
|
(drop_function_item
|
||||||
|
(if_exists)
|
||||||
|
(identifier)
|
||||||
|
(var_declaration
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(identifier))))
|
51
test/corpus/drop_type_statement.txt
Normal file
51
test/corpus/drop_type_statement.txt
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
================================================================================
|
||||||
|
basic
|
||||||
|
================================================================================
|
||||||
|
drop type foo;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(drop_type_statement
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
many at once
|
||||||
|
================================================================================
|
||||||
|
drop type foo, bar;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(drop_type_statement
|
||||||
|
(identifier)
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
cascade
|
||||||
|
================================================================================
|
||||||
|
drop type foo cascade;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(drop_type_statement
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
restrict
|
||||||
|
================================================================================
|
||||||
|
drop type foo restrict;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(drop_type_statement
|
||||||
|
(identifier)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
if exists
|
||||||
|
================================================================================
|
||||||
|
drop type if exists foo;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(drop_type_statement
|
||||||
|
(if_exists)
|
||||||
|
(identifier)))
|
214
test/corpus/execute_statement.txt
Normal file
214
test/corpus/execute_statement.txt
Normal file
|
@ -0,0 +1,214 @@
|
||||||
|
================================================================================
|
||||||
|
basic
|
||||||
|
================================================================================
|
||||||
|
do $$ begin execute 'command'; end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(execute_statement
|
||||||
|
(string)))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
into
|
||||||
|
================================================================================
|
||||||
|
do $$ begin execute 'command' into var; end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(execute_statement
|
||||||
|
(string)
|
||||||
|
(into
|
||||||
|
(identifier))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
into strict
|
||||||
|
================================================================================
|
||||||
|
do $$ begin execute 'command' into strict var; end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(execute_statement
|
||||||
|
(string)
|
||||||
|
(into
|
||||||
|
(identifier))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
using
|
||||||
|
================================================================================
|
||||||
|
do $$ begin execute 'command' using 1, foo(bar); end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(execute_statement
|
||||||
|
(string)
|
||||||
|
(execute_using
|
||||||
|
(number)
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(identifier)))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
function call
|
||||||
|
================================================================================
|
||||||
|
do $$ begin execute foo() into strict var using 1; end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(execute_statement
|
||||||
|
(function_call
|
||||||
|
(identifier))
|
||||||
|
(into
|
||||||
|
(identifier))
|
||||||
|
(execute_using
|
||||||
|
(number))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
string concatenation
|
||||||
|
================================================================================
|
||||||
|
do $$ begin execute 'foo' || 'bar' into _date; end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(execute_statement
|
||||||
|
(op_expression
|
||||||
|
(string)
|
||||||
|
(other_op)
|
||||||
|
(string))
|
||||||
|
(into
|
||||||
|
(identifier))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
simple nested dollar quote
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
execute format(
|
||||||
|
$sql$
|
||||||
|
select %1$s,
|
||||||
|
select 2,
|
||||||
|
$sql$
|
||||||
|
, _tbl_name) using bar;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(execute_statement
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(dollar_quote_string)
|
||||||
|
(identifier))
|
||||||
|
(execute_using
|
||||||
|
(identifier))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
execute format dollar quote
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
execute format(
|
||||||
|
$sql$
|
||||||
|
update %1$s
|
||||||
|
set foo = $1, %2$I = $1
|
||||||
|
$sql$
|
||||||
|
, _tbl_name) using bar;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(execute_statement
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(dollar_quote_string)
|
||||||
|
(identifier))
|
||||||
|
(execute_using
|
||||||
|
(identifier))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
complex
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
EXECUTE FORMAT(
|
||||||
|
$sql$
|
||||||
|
UPDATE %2$s SET new_val = $1
|
||||||
|
FROM ( SELECT serial AS _serial, created FROM %1$s ) t1
|
||||||
|
$sql$
|
||||||
|
, _tbl_name) USING baz, bar;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(execute_statement
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(dollar_quote_string)
|
||||||
|
(identifier))
|
||||||
|
(execute_using
|
||||||
|
(identifier)
|
||||||
|
(identifier))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
complex(1)
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
EXECUTE FORMAT($sql$
|
||||||
|
foo
|
||||||
|
$sql$ , _tbl_name) USING bar.baz;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(execute_statement
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(dollar_quote_string)
|
||||||
|
(identifier))
|
||||||
|
(execute_using
|
||||||
|
(identifier))))
|
||||||
|
(dollar_quote))))
|
177
test/corpus/grant_statement.txt
Normal file
177
test/corpus/grant_statement.txt
Normal file
|
@ -0,0 +1,177 @@
|
||||||
|
================================================================================
|
||||||
|
basic
|
||||||
|
================================================================================
|
||||||
|
grant all on table foo to postgres;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(grant_statement
|
||||||
|
(grant_privileges)
|
||||||
|
(grant_targets
|
||||||
|
(identifier))
|
||||||
|
(grant_roles
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
all privileges
|
||||||
|
================================================================================
|
||||||
|
GRANT ALL PRIVILEGES ON TABLE FOO.BAR TO POSTGRES;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(grant_statement
|
||||||
|
(grant_privileges)
|
||||||
|
(grant_targets
|
||||||
|
(identifier))
|
||||||
|
(grant_roles
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
many users
|
||||||
|
================================================================================
|
||||||
|
grant all on table foo to my_user, group another_user, current_user, public, session_user;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(grant_statement
|
||||||
|
(grant_privileges)
|
||||||
|
(grant_targets
|
||||||
|
(identifier))
|
||||||
|
(grant_roles
|
||||||
|
(identifier)
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
on schema
|
||||||
|
================================================================================
|
||||||
|
GRANT CREATE, USAGE ON SCHEMA esl, esl_archive TO mercures_ws;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(grant_statement
|
||||||
|
(grant_privileges
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(grant_targets
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(grant_roles
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
all tables in schema
|
||||||
|
================================================================================
|
||||||
|
grant all on all tables in schema foo to my_user;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(grant_statement
|
||||||
|
(grant_privileges)
|
||||||
|
(grant_targets
|
||||||
|
(identifier))
|
||||||
|
(grant_roles
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
many tables
|
||||||
|
================================================================================
|
||||||
|
grant all on table bar, baz to my_user;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(grant_statement
|
||||||
|
(grant_privileges)
|
||||||
|
(grant_targets
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(grant_roles
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
functions
|
||||||
|
================================================================================
|
||||||
|
grant all on all functions in schema foo to my_user;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(grant_statement
|
||||||
|
(grant_privileges)
|
||||||
|
(grant_targets
|
||||||
|
(identifier))
|
||||||
|
(grant_roles
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
function
|
||||||
|
================================================================================
|
||||||
|
grant all on function bar(text), baz(_arg my.type) to my_user;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(grant_statement
|
||||||
|
(grant_privileges)
|
||||||
|
(grant_targets
|
||||||
|
(grant_function
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(grant_function
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier)))
|
||||||
|
(grant_roles
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
all sequences
|
||||||
|
================================================================================
|
||||||
|
grant all on all sequences in schema foo to my_user;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(grant_statement
|
||||||
|
(grant_privileges)
|
||||||
|
(grant_targets
|
||||||
|
(identifier))
|
||||||
|
(grant_roles
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
many sequences
|
||||||
|
================================================================================
|
||||||
|
grant all on sequence bar, baz to my_user;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(grant_statement
|
||||||
|
(grant_privileges)
|
||||||
|
(grant_targets
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(grant_roles
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
many privileges
|
||||||
|
================================================================================
|
||||||
|
grant connect, create, delete, execute, insert, references, select, temporary, trigger, truncate, update, usage on table bar to my_user;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(grant_statement
|
||||||
|
(grant_privileges
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(grant_targets
|
||||||
|
(identifier))
|
||||||
|
(grant_roles
|
||||||
|
(identifier))))
|
288
test/corpus/insert_statement/insert.txt
Normal file
288
test/corpus/insert_statement/insert.txt
Normal file
|
@ -0,0 +1,288 @@
|
||||||
|
================================================================================
|
||||||
|
basic
|
||||||
|
================================================================================
|
||||||
|
insert into my_table values (1);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(insert_items
|
||||||
|
(insert_values
|
||||||
|
(insert_item (number))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
insert into table by specified columns
|
||||||
|
================================================================================
|
||||||
|
insert into my_table (name, email, display_name) values
|
||||||
|
('foo', 'bar@biz.baz', 'Foo bar');
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(columns
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
)
|
||||||
|
(insert_items
|
||||||
|
(insert_values
|
||||||
|
(insert_item (string))
|
||||||
|
(insert_item (string))
|
||||||
|
(insert_item (string))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
insert into table by specified columns with many values
|
||||||
|
================================================================================
|
||||||
|
insert into my_table (name, email, display_name) values
|
||||||
|
('foo', 'bar@biz.baz', 'Foo bar'),
|
||||||
|
('foo', 'bar@biz.baz', 'Foo bar'),
|
||||||
|
('foo', 'bar@biz.baz', 'Foo bar');
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(columns
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
)
|
||||||
|
(insert_items
|
||||||
|
(insert_values
|
||||||
|
(insert_item (string))
|
||||||
|
(insert_item (string))
|
||||||
|
(insert_item (string))
|
||||||
|
)
|
||||||
|
(insert_values
|
||||||
|
(insert_item (string))
|
||||||
|
(insert_item (string))
|
||||||
|
(insert_item (string))
|
||||||
|
)
|
||||||
|
(insert_values
|
||||||
|
(insert_item (string))
|
||||||
|
(insert_item (string))
|
||||||
|
(insert_item (string))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
insert into table with alias
|
||||||
|
================================================================================
|
||||||
|
insert into foo.my_table as alias values(1);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(as (identifier))
|
||||||
|
(insert_items
|
||||||
|
(insert_values
|
||||||
|
(insert_item (number))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
insert into default values
|
||||||
|
================================================================================
|
||||||
|
insert into foo.my_table default values;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(insert_items)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
insert into with many value items
|
||||||
|
================================================================================
|
||||||
|
insert into foo.my_table values (1, 2);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(insert_items
|
||||||
|
(insert_values
|
||||||
|
(insert_item (number))
|
||||||
|
(insert_item (number))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
insert into with different kind of value items
|
||||||
|
================================================================================
|
||||||
|
insert into foo.my_table values (1, DEFAULT, (select 1, 2));
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(insert_items
|
||||||
|
(insert_values
|
||||||
|
(insert_item (number))
|
||||||
|
(insert_item)
|
||||||
|
(insert_item
|
||||||
|
(select_statement
|
||||||
|
(select_item (number))
|
||||||
|
(select_item (number))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
insert into from select
|
||||||
|
================================================================================
|
||||||
|
insert into foo.my_table select column1 from foo bar;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(insert_items
|
||||||
|
(select_statement
|
||||||
|
(select_item (identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
insert into a table with the select enclosed in parentheses
|
||||||
|
================================================================================
|
||||||
|
insert into foo.my_table (select column1 from foo bar);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(insert_items
|
||||||
|
(select_statement
|
||||||
|
(select_item (identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
insert into with returning clause
|
||||||
|
================================================================================
|
||||||
|
insert into foo values (1) returning *, 1;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(insert_items
|
||||||
|
(insert_values
|
||||||
|
(insert_item (number))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(returning
|
||||||
|
(select_item (star))
|
||||||
|
(select_item (number))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
insert into using with clause
|
||||||
|
================================================================================
|
||||||
|
with foo as (select * from bar)
|
||||||
|
insert into my_table values (1);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(with_query
|
||||||
|
(with_query_item
|
||||||
|
(identifier)
|
||||||
|
(select_statement
|
||||||
|
(select_item (star))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(identifier)
|
||||||
|
(insert_items
|
||||||
|
(insert_values
|
||||||
|
(insert_item (number))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
insert into statement with returning into clause
|
||||||
|
================================================================================
|
||||||
|
insert into foo (bar, baz) select * from another
|
||||||
|
returning id into _var;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(columns
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
)
|
||||||
|
(insert_items
|
||||||
|
(select_statement
|
||||||
|
(select_item (star))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(returning
|
||||||
|
(select_item (identifier))
|
||||||
|
)
|
||||||
|
(into (identifier))
|
||||||
|
)
|
||||||
|
)
|
169
test/corpus/insert_statement/on_conflict.txt
Normal file
169
test/corpus/insert_statement/on_conflict.txt
Normal file
|
@ -0,0 +1,169 @@
|
||||||
|
================================================================================
|
||||||
|
on constraint do nothing
|
||||||
|
================================================================================
|
||||||
|
insert into foo default values on conflict on constraint foo do nothing;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(insert_items)
|
||||||
|
(insert_conflict
|
||||||
|
(conflict_target
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
on conflict column names
|
||||||
|
================================================================================
|
||||||
|
insert into foo default values on conflict (foo, bar) do nothing;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(insert_items)
|
||||||
|
(insert_conflict
|
||||||
|
(conflict_target
|
||||||
|
(identifier)
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
on conflict value expressions
|
||||||
|
================================================================================
|
||||||
|
insert into foo default values on conflict (coalesce(one, two), bar) do nothing;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(insert_items)
|
||||||
|
(insert_conflict
|
||||||
|
(conflict_target
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
update with default
|
||||||
|
================================================================================
|
||||||
|
insert into foo default values on conflict (foo) do update set foo = default;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(insert_items)
|
||||||
|
(insert_conflict
|
||||||
|
(conflict_target
|
||||||
|
(identifier))
|
||||||
|
(update_set
|
||||||
|
(identifier)
|
||||||
|
(update_value)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
update with expression
|
||||||
|
================================================================================
|
||||||
|
insert into foo default values on conflict (foo) do update set foo = 1;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(insert_items)
|
||||||
|
(insert_conflict
|
||||||
|
(conflict_target
|
||||||
|
(identifier))
|
||||||
|
(update_set
|
||||||
|
(identifier)
|
||||||
|
(update_value
|
||||||
|
(number))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
update with expression(1)
|
||||||
|
================================================================================
|
||||||
|
insert into foo default values on conflict (foo) do update set (foo) = (1);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(insert_items)
|
||||||
|
(insert_conflict
|
||||||
|
(conflict_target
|
||||||
|
(identifier))
|
||||||
|
(update_set
|
||||||
|
(identifier)
|
||||||
|
(update_value
|
||||||
|
(number))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
update with expression(2)
|
||||||
|
================================================================================
|
||||||
|
insert into foo default values on conflict (foo) do update set (foo, bar) = (1, 2, default);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(insert_items)
|
||||||
|
(insert_conflict
|
||||||
|
(conflict_target
|
||||||
|
(identifier))
|
||||||
|
(update_set
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(update_value
|
||||||
|
(number))
|
||||||
|
(update_value
|
||||||
|
(number))
|
||||||
|
(update_value)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
update with expression(3)
|
||||||
|
================================================================================
|
||||||
|
insert into foo default values on conflict (foo) do update set foo = 1, bar = default, baz = (select 1);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(insert_items)
|
||||||
|
(insert_conflict
|
||||||
|
(conflict_target
|
||||||
|
(identifier))
|
||||||
|
(update_set
|
||||||
|
(identifier)
|
||||||
|
(update_value
|
||||||
|
(number)))
|
||||||
|
(update_set
|
||||||
|
(identifier)
|
||||||
|
(update_value))
|
||||||
|
(update_set
|
||||||
|
(identifier)
|
||||||
|
(update_value
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(number))))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
update with expression(4)
|
||||||
|
================================================================================
|
||||||
|
insert into foo default values on conflict (foo) do update set (foo) = (1), bar = default;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(insert_items)
|
||||||
|
(insert_conflict
|
||||||
|
(conflict_target
|
||||||
|
(identifier))
|
||||||
|
(update_set
|
||||||
|
(identifier)
|
||||||
|
(update_value
|
||||||
|
(number)))
|
||||||
|
(update_set
|
||||||
|
(identifier)
|
||||||
|
(update_value)))))
|
196
test/corpus/plpgsql/block.txt
Normal file
196
test/corpus/plpgsql/block.txt
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
================================================================================
|
||||||
|
empty
|
||||||
|
================================================================================
|
||||||
|
DO $$ BEGIN END $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body)
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
empty(1)
|
||||||
|
================================================================================
|
||||||
|
DO $$ DECLARE BEGIN END $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(declarations)
|
||||||
|
(body)
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
many declare(s)
|
||||||
|
================================================================================
|
||||||
|
DO $$
|
||||||
|
DECLARE one text;
|
||||||
|
DECLARE
|
||||||
|
name foo%TYPE;
|
||||||
|
age bar%ROWTYPE;
|
||||||
|
BEGIN END
|
||||||
|
$$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(declarations
|
||||||
|
(var_definition
|
||||||
|
(var_declaration
|
||||||
|
(identifier)
|
||||||
|
(identifier))))
|
||||||
|
(declarations
|
||||||
|
(var_definition
|
||||||
|
(var_declaration
|
||||||
|
(identifier)
|
||||||
|
(identifier)))
|
||||||
|
(var_definition
|
||||||
|
(var_declaration
|
||||||
|
(identifier)
|
||||||
|
(identifier))))
|
||||||
|
(body)
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
declare variables
|
||||||
|
================================================================================
|
||||||
|
DO $$
|
||||||
|
DECLARE
|
||||||
|
name text;
|
||||||
|
age bigint;
|
||||||
|
BEGIN END
|
||||||
|
$$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(declarations
|
||||||
|
(var_definition
|
||||||
|
(var_declaration
|
||||||
|
(identifier)
|
||||||
|
(identifier)))
|
||||||
|
(var_definition
|
||||||
|
(var_declaration
|
||||||
|
(identifier)
|
||||||
|
(identifier))))
|
||||||
|
(body)
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
declare with assignment
|
||||||
|
================================================================================
|
||||||
|
DO $$
|
||||||
|
DECLARE
|
||||||
|
name text := 'hello';
|
||||||
|
age bigint:= (SELECT foo() + 1);
|
||||||
|
BEGIN END
|
||||||
|
$$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(declarations
|
||||||
|
(var_definition
|
||||||
|
(var_declaration
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(string))
|
||||||
|
(var_definition
|
||||||
|
(var_declaration
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(function_call
|
||||||
|
(identifier))
|
||||||
|
(number))))))
|
||||||
|
(body)
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
perform
|
||||||
|
================================================================================
|
||||||
|
DO $$
|
||||||
|
BEGIN
|
||||||
|
PERFORM foo();
|
||||||
|
END
|
||||||
|
$$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(perform_statement
|
||||||
|
(select_item
|
||||||
|
(function_call
|
||||||
|
(identifier)))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
many statements
|
||||||
|
================================================================================
|
||||||
|
DO $$
|
||||||
|
BEGIN
|
||||||
|
SELECT 1;
|
||||||
|
foo.bar = lower(foo.baz);
|
||||||
|
foo.bar := lower(foo.baz);
|
||||||
|
RETURN 2;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(number)))
|
||||||
|
(assign_statement
|
||||||
|
(identifier)
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(identifier)))
|
||||||
|
(assign_statement
|
||||||
|
(identifier)
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(identifier)))
|
||||||
|
(return_statement
|
||||||
|
(number)))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
function call with select
|
||||||
|
================================================================================
|
||||||
|
DO $$ BEGIN perform exists(select 1); END $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(perform_statement
|
||||||
|
(select_item
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(number)))))))
|
||||||
|
(dollar_quote))))
|
123
test/corpus/plpgsql/for_statement.txt
Normal file
123
test/corpus/plpgsql/for_statement.txt
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
================================================================================
|
||||||
|
integer
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
for foo in 1..10 loop select 1; end loop;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(for_statement
|
||||||
|
(identifier)
|
||||||
|
(number)
|
||||||
|
(number)
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(number)))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
integer by step
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
for foo in 1..do_something() by 5 loop select 1; end loop;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(for_statement
|
||||||
|
(identifier)
|
||||||
|
(number)
|
||||||
|
(function_call
|
||||||
|
(identifier))
|
||||||
|
(number)
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(number)))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
integer reverse
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
for foo in reverse 10..1 by 5 loop select 1; end loop;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(for_statement
|
||||||
|
(identifier)
|
||||||
|
(number)
|
||||||
|
(number)
|
||||||
|
(number)
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(number)))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
for over query
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
for foo, var in select generate_series(1,10) loop select 1; end loop;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(for_statement
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(number)
|
||||||
|
(number))))
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(number)))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
for over execute
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
for foo, var in execute format($sql$ select $1 from %1$s; $sql$, _foo) using bar loop select 1; end loop;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(for_statement
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(execute_statement
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(dollar_quote_string)
|
||||||
|
(identifier))
|
||||||
|
(execute_using
|
||||||
|
(identifier)))
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(number)))))
|
||||||
|
(dollar_quote))))
|
25
test/corpus/plpgsql/get_diagnostics_statement.txt
Normal file
25
test/corpus/plpgsql/get_diagnostics_statement.txt
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
================================================================================
|
||||||
|
get diagnostics
|
||||||
|
================================================================================
|
||||||
|
DO $$
|
||||||
|
BEGIN
|
||||||
|
get current diagnostics foo = ROW_COUNT;
|
||||||
|
get diagnostics bar := ROW_COUNT;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(get_diagnostics_statement
|
||||||
|
(assign_statement
|
||||||
|
(identifier)
|
||||||
|
(identifier)))
|
||||||
|
(get_diagnostics_statement
|
||||||
|
(assign_statement
|
||||||
|
(identifier)
|
||||||
|
(identifier))))
|
||||||
|
(dollar_quote))))
|
224
test/corpus/plpgsql/if_statement.txt
Normal file
224
test/corpus/plpgsql/if_statement.txt
Normal file
|
@ -0,0 +1,224 @@
|
||||||
|
================================================================================
|
||||||
|
basic
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
if true then select 1; end if;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(if_statement
|
||||||
|
(true)
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(number)))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
many statements
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
if true then select 1; select 2; end if;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(if_statement
|
||||||
|
(true)
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(number)))
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(number)))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
if then else
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
if var <> 5 then return 1; else return 2; end if;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(if_statement
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(number))
|
||||||
|
(return_statement
|
||||||
|
(number))
|
||||||
|
(return_statement
|
||||||
|
(number))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
if then else if
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
if var > 5 then return 1; elsif var = 4 then return 2; end if;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(if_statement
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(number))
|
||||||
|
(return_statement
|
||||||
|
(number))
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(number))
|
||||||
|
(return_statement
|
||||||
|
(number))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
elseif/elsif
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
if var > 5 then return 1; elsif var = 4 then return 2; elseif var = 3 then return 3; else return 4; end if;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(if_statement
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(number))
|
||||||
|
(return_statement
|
||||||
|
(number))
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(number))
|
||||||
|
(return_statement
|
||||||
|
(number))
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(number))
|
||||||
|
(return_statement
|
||||||
|
(number))
|
||||||
|
(return_statement
|
||||||
|
(number))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
nested
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
if true then return 1; else if var = 4 then return 2; end if; end if;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(if_statement
|
||||||
|
(true)
|
||||||
|
(return_statement
|
||||||
|
(number))
|
||||||
|
(if_statement
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(number))
|
||||||
|
(return_statement
|
||||||
|
(number)))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
if is not null
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
if foo is not null then select 1; end if;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(if_statement
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_null))
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(number)))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
if is not distinct from
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
if foo is not distinct from bar then select 1; end if;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(if_statement
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_kw)
|
||||||
|
(identifier))
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(number)))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
if is distinct from
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
if foo is distinct from bar then select 1; end if;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(if_statement
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_kw)
|
||||||
|
(identifier))
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(number)))))
|
||||||
|
(dollar_quote))))
|
42
test/corpus/plpgsql/open_cursor_statement.txt
Normal file
42
test/corpus/plpgsql/open_cursor_statement.txt
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
================================================================================
|
||||||
|
open for select
|
||||||
|
================================================================================
|
||||||
|
DO $$
|
||||||
|
BEGIN
|
||||||
|
OPEN curs for select 2;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(open_cursor_statement
|
||||||
|
(identifier)
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(number)))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
open for execute
|
||||||
|
================================================================================
|
||||||
|
DO $$
|
||||||
|
BEGIN
|
||||||
|
open foo for execute('select 1');
|
||||||
|
END
|
||||||
|
$$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(open_cursor_statement
|
||||||
|
(identifier)
|
||||||
|
(execute_statement
|
||||||
|
(string))))
|
||||||
|
(dollar_quote))))
|
70
test/corpus/plpgsql/raise_statement.txt
Normal file
70
test/corpus/plpgsql/raise_statement.txt
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
================================================================================
|
||||||
|
dummy
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
raise;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(raise_statement))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
basic
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
raise 'alarms';
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(raise_statement
|
||||||
|
(string)))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
with level
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
raise notice 'alarms';
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(raise_statement
|
||||||
|
(identifier)
|
||||||
|
(string)))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
with level and args
|
||||||
|
================================================================================
|
||||||
|
do $$ begin
|
||||||
|
raise notice 'alarms %d', _foo, bar;
|
||||||
|
end $$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(raise_statement
|
||||||
|
(identifier)
|
||||||
|
(string)
|
||||||
|
(identifier)
|
||||||
|
(identifier)))
|
||||||
|
(dollar_quote))))
|
64
test/corpus/plpgsql/return_statement.txt
Normal file
64
test/corpus/plpgsql/return_statement.txt
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
================================================================================
|
||||||
|
return
|
||||||
|
================================================================================
|
||||||
|
DO $$
|
||||||
|
BEGIN
|
||||||
|
RETURN 1;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(return_statement
|
||||||
|
(number)))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
return query
|
||||||
|
================================================================================
|
||||||
|
DO $$
|
||||||
|
BEGIN
|
||||||
|
RETURN QUERY select 1;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(return_statement
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(number)))))
|
||||||
|
(dollar_quote))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
return query execute
|
||||||
|
================================================================================
|
||||||
|
DO $$
|
||||||
|
BEGIN
|
||||||
|
RETURN QUERY execute format($sql$ select %1$s, $1;$sql$, _foo) using bar;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(do_block
|
||||||
|
(block
|
||||||
|
(dollar_quote)
|
||||||
|
(body
|
||||||
|
(return_statement
|
||||||
|
(execute_statement
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(dollar_quote_string)
|
||||||
|
(identifier))
|
||||||
|
(execute_using
|
||||||
|
(identifier)))))
|
||||||
|
(dollar_quote))))
|
179
test/corpus/select_statement/from.txt
Normal file
179
test/corpus/select_statement/from.txt
Normal file
|
@ -0,0 +1,179 @@
|
||||||
|
================================================================================
|
||||||
|
from table
|
||||||
|
================================================================================
|
||||||
|
SELECT name FROM products;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
from many tables
|
||||||
|
================================================================================
|
||||||
|
SELECT products.name, i.name FROM products, items i, bar as baz;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)
|
||||||
|
(identifier)))
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
sub select
|
||||||
|
================================================================================
|
||||||
|
SELECT name FROM (select foo from bar) alias, (select baz from bar) as alias1;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_select
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))))
|
||||||
|
(identifier)))
|
||||||
|
(from_item
|
||||||
|
(from_select
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))))
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
from function call
|
||||||
|
================================================================================
|
||||||
|
select name from foo(bar, baz);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_function
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier)))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
from function call with alias
|
||||||
|
================================================================================
|
||||||
|
select name from foo() bar;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_function
|
||||||
|
(function_call
|
||||||
|
(identifier))
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
from function call with alias(1)
|
||||||
|
================================================================================
|
||||||
|
select name from foo() as bar;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_function
|
||||||
|
(function_call
|
||||||
|
(identifier))
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
from function call with alias in params
|
||||||
|
================================================================================
|
||||||
|
select name from foo() bar(alias1, alias2);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_function
|
||||||
|
(function_call
|
||||||
|
(identifier))
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
from function call with alias in params(1)
|
||||||
|
================================================================================
|
||||||
|
select name from foo() as bar(alias1, alias2);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_function
|
||||||
|
(function_call
|
||||||
|
(identifier))
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
from function call with alias in params(2)
|
||||||
|
================================================================================
|
||||||
|
select name from foo() as (alias1, alias2);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_function
|
||||||
|
(function_call
|
||||||
|
(identifier))
|
||||||
|
(identifier)
|
||||||
|
(identifier))))))
|
332
test/corpus/select_statement/join.txt
Normal file
332
test/corpus/select_statement/join.txt
Normal file
|
@ -0,0 +1,332 @@
|
||||||
|
================================================================================
|
||||||
|
cross join
|
||||||
|
================================================================================
|
||||||
|
SELECT name FROM products cross join items;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))
|
||||||
|
(join_item
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
join on
|
||||||
|
================================================================================
|
||||||
|
SELECT name FROM products join items on products.name = items.name;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))
|
||||||
|
(join_item
|
||||||
|
(join_type)
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(join_condition
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(identifier))))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
join using
|
||||||
|
================================================================================
|
||||||
|
select name from products join items using(foo);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))
|
||||||
|
(join_item
|
||||||
|
(join_type)
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(join_condition
|
||||||
|
(identifier)))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
natural join
|
||||||
|
================================================================================
|
||||||
|
select name from products natural join items;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))
|
||||||
|
(join_item
|
||||||
|
(join_type)
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
inner join
|
||||||
|
================================================================================
|
||||||
|
select name from products inner join items on true;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))
|
||||||
|
(join_item
|
||||||
|
(join_type)
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(join_condition
|
||||||
|
(true)))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
left join
|
||||||
|
================================================================================
|
||||||
|
select name from products left join items on true;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))
|
||||||
|
(join_item
|
||||||
|
(join_type)
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(join_condition
|
||||||
|
(true)))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
right join
|
||||||
|
================================================================================
|
||||||
|
select name from products right join items on true;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))
|
||||||
|
(join_item
|
||||||
|
(join_type)
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(join_condition
|
||||||
|
(true)))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
full join
|
||||||
|
================================================================================
|
||||||
|
select name from products full join items on true;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))
|
||||||
|
(join_item
|
||||||
|
(join_type)
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(join_condition
|
||||||
|
(true)))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
left outer join
|
||||||
|
================================================================================
|
||||||
|
select name from products left outer join items on true;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))
|
||||||
|
(join_item
|
||||||
|
(join_type)
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(join_condition
|
||||||
|
(true)))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
right outer join
|
||||||
|
================================================================================
|
||||||
|
select name from products right outer join items on true;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))
|
||||||
|
(join_item
|
||||||
|
(join_type)
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(join_condition
|
||||||
|
(true)))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
full outer join
|
||||||
|
================================================================================
|
||||||
|
select name from products full outer join items on true;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))
|
||||||
|
(join_item
|
||||||
|
(join_type)
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(join_condition
|
||||||
|
(true)))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
many joins
|
||||||
|
================================================================================
|
||||||
|
select name from products
|
||||||
|
natural join a
|
||||||
|
cross join a
|
||||||
|
join a on a.foo=b.foo
|
||||||
|
inner join a using(foo)
|
||||||
|
left join a using(foo)
|
||||||
|
left outer join a using(foo)
|
||||||
|
right join a using(foo)
|
||||||
|
right outer join a using(foo)
|
||||||
|
full outer join a using(foo)
|
||||||
|
full join a using(foo);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))
|
||||||
|
(join_item
|
||||||
|
(join_type)
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))
|
||||||
|
(join_item
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))
|
||||||
|
(join_item
|
||||||
|
(join_type)
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(join_condition
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(identifier))))
|
||||||
|
(join_item
|
||||||
|
(join_type)
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(join_condition
|
||||||
|
(identifier)))
|
||||||
|
(join_item
|
||||||
|
(join_type)
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(join_condition
|
||||||
|
(identifier)))
|
||||||
|
(join_item
|
||||||
|
(join_type)
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(join_condition
|
||||||
|
(identifier)))
|
||||||
|
(join_item
|
||||||
|
(join_type)
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(join_condition
|
||||||
|
(identifier)))
|
||||||
|
(join_item
|
||||||
|
(join_type)
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(join_condition
|
||||||
|
(identifier)))
|
||||||
|
(join_item
|
||||||
|
(join_type)
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(join_condition
|
||||||
|
(identifier)))
|
||||||
|
(join_item
|
||||||
|
(join_type)
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(join_condition
|
||||||
|
(identifier)))))))
|
301
test/corpus/select_statement/select.txt
Normal file
301
test/corpus/select_statement/select.txt
Normal file
|
@ -0,0 +1,301 @@
|
||||||
|
================================================================================
|
||||||
|
where
|
||||||
|
================================================================================
|
||||||
|
select name from items where true;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))
|
||||||
|
(select_where
|
||||||
|
(where_filter
|
||||||
|
(true)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
into
|
||||||
|
================================================================================
|
||||||
|
select name into bar from items where true;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(into
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))
|
||||||
|
(select_where
|
||||||
|
(where_filter
|
||||||
|
(true)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
into at the end
|
||||||
|
================================================================================
|
||||||
|
select * from items where true into _bar;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(star))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))
|
||||||
|
(select_where
|
||||||
|
(where_filter
|
||||||
|
(true)))
|
||||||
|
(into
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
into strict
|
||||||
|
================================================================================
|
||||||
|
select name into strict bar from items where true;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(into
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))
|
||||||
|
(select_where
|
||||||
|
(where_filter
|
||||||
|
(true)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
into many
|
||||||
|
================================================================================
|
||||||
|
select foo, bar into a_foo, a_bar from items where true;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(into
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))
|
||||||
|
(select_where
|
||||||
|
(where_filter
|
||||||
|
(true)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
having
|
||||||
|
================================================================================
|
||||||
|
select sum(len) from items having sum(len) < 5;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(identifier)))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))
|
||||||
|
(select_having
|
||||||
|
(op_expression
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(comparison_op)
|
||||||
|
(number)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
group by
|
||||||
|
================================================================================
|
||||||
|
select name from items group by 1, 2;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))
|
||||||
|
(select_group_by
|
||||||
|
(number)
|
||||||
|
(number))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
group by with parens
|
||||||
|
================================================================================
|
||||||
|
select name from items group by (1, 2);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))
|
||||||
|
(select_group_by
|
||||||
|
(number)
|
||||||
|
(number))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
order by
|
||||||
|
================================================================================
|
||||||
|
select name from items order by 1, 2 asc, 3 desc, 4 + 4;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))
|
||||||
|
(select_order_by
|
||||||
|
(order_by_item
|
||||||
|
(number))
|
||||||
|
(order_by_item
|
||||||
|
(number)
|
||||||
|
(order_by_direction))
|
||||||
|
(order_by_item
|
||||||
|
(number)
|
||||||
|
(order_by_direction))
|
||||||
|
(order_by_item
|
||||||
|
(op_expression
|
||||||
|
(number)
|
||||||
|
(number))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
limit
|
||||||
|
================================================================================
|
||||||
|
select name limit 1;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_limit
|
||||||
|
(number))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
limit offet
|
||||||
|
================================================================================
|
||||||
|
select name limit 1 offset 5;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_limit
|
||||||
|
(number))
|
||||||
|
(select_offset
|
||||||
|
(number))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
offset limit
|
||||||
|
================================================================================
|
||||||
|
select name offset 5 limit 1;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_offset
|
||||||
|
(number))
|
||||||
|
(select_limit
|
||||||
|
(number))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
limit all offset
|
||||||
|
================================================================================
|
||||||
|
select name limit all offset 5;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_limit)
|
||||||
|
(select_offset
|
||||||
|
(number))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
offset limit all
|
||||||
|
================================================================================
|
||||||
|
select name offset 5 limit all;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_offset
|
||||||
|
(number))
|
||||||
|
(select_limit)))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
with cte
|
||||||
|
================================================================================
|
||||||
|
with foo as (select * from bar)
|
||||||
|
select * from foo;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(with_query
|
||||||
|
(with_query_item
|
||||||
|
(identifier)
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(star))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))))))
|
||||||
|
(select_item
|
||||||
|
(star))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
select alias star
|
||||||
|
================================================================================
|
||||||
|
SELECT foo.* FROM foo;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier)
|
||||||
|
(star))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))))
|
352
test/corpus/select_statement/value_expression.txt
Normal file
352
test/corpus/select_statement/value_expression.txt
Normal file
|
@ -0,0 +1,352 @@
|
||||||
|
================================================================================
|
||||||
|
string
|
||||||
|
================================================================================
|
||||||
|
SELECT 'hello';
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(string))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
nested select
|
||||||
|
================================================================================
|
||||||
|
SELECT (SELECT 'hello');
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(string))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
many
|
||||||
|
================================================================================
|
||||||
|
SELECT 1234, -25, TRUE, FALSE, NULL, *;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(number))
|
||||||
|
(select_item
|
||||||
|
(number))
|
||||||
|
(select_item
|
||||||
|
(true))
|
||||||
|
(select_item
|
||||||
|
(false))
|
||||||
|
(select_item
|
||||||
|
(null))
|
||||||
|
(select_item
|
||||||
|
(star))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
identifiers
|
||||||
|
================================================================================
|
||||||
|
SELECT foo, foo.bar;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_item
|
||||||
|
(identifier))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
arrays
|
||||||
|
================================================================================
|
||||||
|
SELECT
|
||||||
|
ARRAY[],
|
||||||
|
array[1, 2],
|
||||||
|
array[array[1, 2], array[3, 4]],
|
||||||
|
array[]::integer[];
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(array_constructor))
|
||||||
|
(select_item
|
||||||
|
(array_constructor
|
||||||
|
(number)
|
||||||
|
(number)))
|
||||||
|
(select_item
|
||||||
|
(array_constructor
|
||||||
|
(array_constructor
|
||||||
|
(number)
|
||||||
|
(number))
|
||||||
|
(array_constructor
|
||||||
|
(number)
|
||||||
|
(number))))
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(array_constructor)
|
||||||
|
(cast)
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
binary_expression
|
||||||
|
================================================================================
|
||||||
|
SELECT a + b - c / d * e % f;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(op_expression
|
||||||
|
(op_expression
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(identifier))
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
unary prec over binary
|
||||||
|
================================================================================
|
||||||
|
SELECT -22 + - (5 + 1);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(number)
|
||||||
|
(op_expression
|
||||||
|
(minus)
|
||||||
|
(op_expression
|
||||||
|
(number)
|
||||||
|
(number)))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
nested parens
|
||||||
|
================================================================================
|
||||||
|
SELECT ((((24 + 24))));
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(number)
|
||||||
|
(number)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
logical expressions
|
||||||
|
================================================================================
|
||||||
|
SELECT 1 - 2 AND TRUE OR (5 = 2);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(op_expression
|
||||||
|
(op_expression
|
||||||
|
(number)
|
||||||
|
(number))
|
||||||
|
(and)
|
||||||
|
(true))
|
||||||
|
(or)
|
||||||
|
(op_expression
|
||||||
|
(number)
|
||||||
|
(comparison_op)
|
||||||
|
(number))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
function call
|
||||||
|
================================================================================
|
||||||
|
SELECT foo.bar(param) + baz();
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(function_call
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
nested function call
|
||||||
|
================================================================================
|
||||||
|
SELECT coalesce(null, nullif(false, true), ops.my_fn(5));
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(null)
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(false)
|
||||||
|
(true))
|
||||||
|
(function_call
|
||||||
|
(identifier)
|
||||||
|
(number))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
casting
|
||||||
|
================================================================================
|
||||||
|
SELECT 1::text;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(number)
|
||||||
|
(cast)
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
string concatenation
|
||||||
|
================================================================================
|
||||||
|
SELECT 'hello' || 1 || now();
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(op_expression
|
||||||
|
(string)
|
||||||
|
(other_op)
|
||||||
|
(number))
|
||||||
|
(other_op)
|
||||||
|
(function_call
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
string quote
|
||||||
|
================================================================================
|
||||||
|
SELECT 'hello' || 'quote''s everywh''ere';
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(string)
|
||||||
|
(other_op)
|
||||||
|
(string)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
contains_op
|
||||||
|
================================================================================
|
||||||
|
SELECT
|
||||||
|
1 in (1, 2),
|
||||||
|
'one' in ('one', 'two'),
|
||||||
|
2 between 4 and 8,
|
||||||
|
'foo' like '%oo',
|
||||||
|
'foo' ilike '%oo';
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(number)
|
||||||
|
(contains_op)
|
||||||
|
(number)
|
||||||
|
(number)))
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(string)
|
||||||
|
(contains_op)
|
||||||
|
(string)
|
||||||
|
(string)))
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(op_expression
|
||||||
|
(number)
|
||||||
|
(contains_op)
|
||||||
|
(number))
|
||||||
|
(and)
|
||||||
|
(number)))
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(string)
|
||||||
|
(contains_op)
|
||||||
|
(string)))
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(string)
|
||||||
|
(contains_op)
|
||||||
|
(string)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
is null, isnull, is not null, notnull
|
||||||
|
================================================================================
|
||||||
|
SELECT
|
||||||
|
foo is null,
|
||||||
|
foo is not null,
|
||||||
|
foo isnull,
|
||||||
|
foo notnull;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_null)))
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_null)))
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_null)))
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_null)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
time expressions
|
||||||
|
================================================================================
|
||||||
|
SELECT
|
||||||
|
foo::interval,
|
||||||
|
foo at time zone 'utc',
|
||||||
|
interval '1 day',
|
||||||
|
interval '1' hour to second,
|
||||||
|
interval '1' day + interval '3' month;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(cast)
|
||||||
|
(identifier)))
|
||||||
|
(select_item
|
||||||
|
(time_expression
|
||||||
|
(identifier)
|
||||||
|
(string)))
|
||||||
|
(select_item
|
||||||
|
(time_expression
|
||||||
|
(string)))
|
||||||
|
(select_item
|
||||||
|
(time_expression
|
||||||
|
(string)))
|
||||||
|
(select_item
|
||||||
|
(op_expression
|
||||||
|
(time_expression
|
||||||
|
(string))
|
||||||
|
(time_expression
|
||||||
|
(string))))))
|
168
test/corpus/update_statement.txt
Normal file
168
test/corpus/update_statement.txt
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
================================================================================
|
||||||
|
update one field
|
||||||
|
================================================================================
|
||||||
|
update items set foo = 'bar';
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(update_statement
|
||||||
|
(identifier)
|
||||||
|
(update_set
|
||||||
|
(identifier)
|
||||||
|
(update_value
|
||||||
|
(string)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
alias
|
||||||
|
================================================================================
|
||||||
|
update items as t set foo = 'bar';
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(update_statement
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(update_set
|
||||||
|
(identifier)
|
||||||
|
(update_value
|
||||||
|
(string)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
update many fields
|
||||||
|
================================================================================
|
||||||
|
update t set col1 = val1, col2 = default returning foo, *;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(update_statement
|
||||||
|
(identifier)
|
||||||
|
(update_set
|
||||||
|
(identifier)
|
||||||
|
(update_value
|
||||||
|
(identifier)))
|
||||||
|
(update_set
|
||||||
|
(identifier)
|
||||||
|
(update_value))
|
||||||
|
(returning
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_item
|
||||||
|
(star)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
update many fields(1)
|
||||||
|
================================================================================
|
||||||
|
update t set (col1, col2) = (val1, val2);
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(update_statement
|
||||||
|
(identifier)
|
||||||
|
(update_set
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(update_value
|
||||||
|
(identifier))
|
||||||
|
(update_value
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
update where
|
||||||
|
================================================================================
|
||||||
|
update t set foo = bar where column1 = 'magic';
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(update_statement
|
||||||
|
(identifier)
|
||||||
|
(update_set
|
||||||
|
(identifier)
|
||||||
|
(update_value
|
||||||
|
(identifier)))
|
||||||
|
(where_filter
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(string)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
update where subselect
|
||||||
|
================================================================================
|
||||||
|
UPDATE t SET a = b + 1 WHERE id = (SELECT foo FROM bar WHERE c = 'd');
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(update_statement
|
||||||
|
(identifier)
|
||||||
|
(update_set
|
||||||
|
(identifier)
|
||||||
|
(update_value
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(number))))
|
||||||
|
(where_filter
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(identifier))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))
|
||||||
|
(select_where
|
||||||
|
(where_filter
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(string)))))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
update from
|
||||||
|
================================================================================
|
||||||
|
UPDATE foo SET bar = bar + 1 FROM t WHERE b = 'z';
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(update_statement
|
||||||
|
(identifier)
|
||||||
|
(update_set
|
||||||
|
(identifier)
|
||||||
|
(update_value
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(number))))
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(where_filter
|
||||||
|
(op_expression
|
||||||
|
(identifier)
|
||||||
|
(comparison_op)
|
||||||
|
(string)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
with cte
|
||||||
|
================================================================================
|
||||||
|
with foo as (select * from bar)
|
||||||
|
update foo set bar = 1;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(update_statement
|
||||||
|
(with_query
|
||||||
|
(with_query_item
|
||||||
|
(identifier)
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(star))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))))))
|
||||||
|
(identifier)
|
||||||
|
(update_set
|
||||||
|
(identifier)
|
||||||
|
(update_value
|
||||||
|
(number)))))
|
208
test/corpus/with_statement.txt
Normal file
208
test/corpus/with_statement.txt
Normal file
|
@ -0,0 +1,208 @@
|
||||||
|
================================================================================
|
||||||
|
basic
|
||||||
|
================================================================================
|
||||||
|
with w as (select * from foo) select * from w;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(with_query
|
||||||
|
(with_query_item
|
||||||
|
(identifier)
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(star))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))))))
|
||||||
|
(select_item
|
||||||
|
(star))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
with column names
|
||||||
|
================================================================================
|
||||||
|
with w(foo, bar) as (select * from foo) select * from w;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(with_query
|
||||||
|
(with_query_item
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(identifier)
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(star))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))))))
|
||||||
|
(select_item
|
||||||
|
(star))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
materialized
|
||||||
|
================================================================================
|
||||||
|
with w as materialized (select * from foo) select * from w;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(with_query
|
||||||
|
(with_query_item
|
||||||
|
(identifier)
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(star))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))))))
|
||||||
|
(select_item
|
||||||
|
(star))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
not materialized
|
||||||
|
================================================================================
|
||||||
|
with w as not materialized (select * from foo) select * from w;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(with_query
|
||||||
|
(with_query_item
|
||||||
|
(identifier)
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(star))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))))))
|
||||||
|
(select_item
|
||||||
|
(star))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
with delete
|
||||||
|
================================================================================
|
||||||
|
with new as (delete from productes returning *) select 1;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(with_query
|
||||||
|
(with_query_item
|
||||||
|
(identifier)
|
||||||
|
(delete_statement
|
||||||
|
(identifier)
|
||||||
|
(select_item
|
||||||
|
(star)))))
|
||||||
|
(select_item
|
||||||
|
(number))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
select statement using with clause with insert into
|
||||||
|
================================================================================
|
||||||
|
with new as (insert into foo values(1)) select 1;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(with_query
|
||||||
|
(with_query_item
|
||||||
|
(identifier)
|
||||||
|
(insert_statement
|
||||||
|
(identifier)
|
||||||
|
(insert_items
|
||||||
|
(insert_values
|
||||||
|
(insert_item (number))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(select_item (number))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
with update
|
||||||
|
================================================================================
|
||||||
|
with new as (update foo set bar = 1 returning *) select 1;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(with_query
|
||||||
|
(with_query_item
|
||||||
|
(identifier)
|
||||||
|
(update_statement
|
||||||
|
(identifier)
|
||||||
|
(update_set
|
||||||
|
(identifier)
|
||||||
|
(update_value
|
||||||
|
(number)))
|
||||||
|
(returning
|
||||||
|
(select_item
|
||||||
|
(star))))))
|
||||||
|
(select_item
|
||||||
|
(number))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
many
|
||||||
|
================================================================================
|
||||||
|
with w as (
|
||||||
|
select * from foo
|
||||||
|
), x as (
|
||||||
|
select * from bar
|
||||||
|
) select * from foo, bar;
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(source_file
|
||||||
|
(select_statement
|
||||||
|
(with_query
|
||||||
|
(with_query_item
|
||||||
|
(identifier)
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(star))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))))
|
||||||
|
(with_query_item
|
||||||
|
(identifier)
|
||||||
|
(select_statement
|
||||||
|
(select_item
|
||||||
|
(star))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))))))
|
||||||
|
(select_item
|
||||||
|
(star))
|
||||||
|
(select_from
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier)))
|
||||||
|
(from_item
|
||||||
|
(from_table
|
||||||
|
(identifier))))))
|
|
@ -1,38 +0,0 @@
|
||||||
create table public.foo (
|
|
||||||
-- <- keyword
|
|
||||||
-- ^ keyword
|
|
||||||
-- ^ namespace
|
|
||||||
-- ^ punctuation.delimiter
|
|
||||||
-- ^ constant
|
|
||||||
-- ^ punctuation.brackets
|
|
||||||
id uuid constraint foo_pkey primary key,
|
|
||||||
-- <- variable
|
|
||||||
-- ^ type.builtin
|
|
||||||
-- ^ keyword
|
|
||||||
-- ^ variable
|
|
||||||
-- ^ keyword
|
|
||||||
-- ^ keyword
|
|
||||||
-- ^ punctuation.delimiter
|
|
||||||
|
|
||||||
confirmed boolean not null default true
|
|
||||||
-- <- variable
|
|
||||||
-- ^ type.builtin
|
|
||||||
-- ^ keyword
|
|
||||||
-- ^ keyword
|
|
||||||
-- ^ keyword
|
|
||||||
-- ^ boolean
|
|
||||||
|
|
||||||
bar_id uuid not null constraint foo_bar_id_fkey references bar on update cascade on delete cascade,
|
|
||||||
-- ^ keyword
|
|
||||||
-- ^ variable
|
|
||||||
-- ^ keyword
|
|
||||||
-- ^ constant
|
|
||||||
-- ^ keyword
|
|
||||||
-- ^ keyword
|
|
||||||
-- ^ keyword
|
|
||||||
-- ^ keyword
|
|
||||||
-- ^ keyword
|
|
||||||
-- ^ keyword
|
|
||||||
) ;
|
|
||||||
-- <- punctuation.brackets
|
|
||||||
-- ^ punctuation.delimiter
|
|
BIN
tree-sitter-plpgsql.wasm
Executable file
BIN
tree-sitter-plpgsql.wasm
Executable file
Binary file not shown.
Binary file not shown.
Loading…
Reference in a new issue