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
|
||||
extraGrammars = {
|
||||
tree-sitter-psql = {
|
||||
tree-sitter-plpgsql = {
|
||||
language = "psql";
|
||||
src = ../.;
|
||||
version = "0.0.0";
|
||||
|
@ -10,17 +10,14 @@ let
|
|||
};
|
||||
|
||||
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: {
|
||||
passthru.dependencies = oldAttrs.passthru.dependencies ++ [
|
||||
(pkgs.runCommand "nvim-treesitter-psql-grammar" { } ''
|
||||
mkdir -p $out/parser
|
||||
ln -s ${grammars}/psql.so $out/parser/psql.so
|
||||
'')
|
||||
];
|
||||
nvim-treesitter = pkgs.vimPlugins.nvim-treesitter.overrideAttrs (oldAttrs: {
|
||||
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": {
|
||||
"locked": {
|
||||
"lastModified": 1672997035,
|
||||
"narHash": "sha256-DNaNjsGMRYefBTAxFIrVOB2ok477cj1FTpqnu/mKRf4=",
|
||||
"lastModified": 1672756850,
|
||||
"narHash": "sha256-Smbq3+fitwA13qsTMeaaurv09/KVbZfW7m7lINwzDGA=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "f1ffcf798e93b169321106a4aef79526a2b4bd0a",
|
||||
"rev": "298add347c2bbce14020fcb54051f517c391196b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
1404
grammar.js
1404
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",
|
||||
"description": "",
|
||||
"main": "grammar.js",
|
||||
|
@ -8,9 +8,7 @@
|
|||
"tree-sitter": [
|
||||
{
|
||||
"scope": "source.psql",
|
||||
"file-types": [
|
||||
"psql"
|
||||
],
|
||||
"file-types": ["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$") ]
|
||||
then
|
||||
make build
|
||||
make build-wasm
|
||||
# TODO: Enable when performance improves
|
||||
# make build-wasm
|
||||
git add src bindings *.wasm
|
||||
fi
|
||||
|
||||
|
|
7825
src/grammar.json
7825
src/grammar.json
File diff suppressed because it is too large
Load diff
4899
src/node-types.json
4899
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