Man page - ctags-universal-lang-sql(7)
Packages contains this manual
- ctags-optlib(7)
- ctags-universal-lang-julia(7)
- tags(5)
- readtags(1)
- ctags-universal-faq(7)
- ctags-universal-lang-verilog(7)
- ctags-incompatibilities(7)
- ctags-universal-lang-python(7)
- ctags-universal-optlib(7)
- ctags-universal-incompatibilities(7)
- ctags-universal-lang-inko(7)
- ctags-universal-client-tools(7)
- ctags-universal-lang-sql(7)
- ctags-universal(1)
- ctags-universal-lang-r(7)
apt-get install universal-ctags
Manual
CTAGS-LANG-SQL
NAMESYNOPSIS
DESCRIPTION
EXAMPLES
KNOWN BUGS
SEE ALSO
REFERENCES
NAME
ctags-lang-sql - The man page of the SQL parser for Universal Ctags
SYNOPSIS
ctags ... [--extras={guest}] --languages=+SQL ...
DESCRIPTION
The SQL parser supports various SQL dialects. PostgreSQL is one of them.
PostgreSQL allows user-defined functions to be written in other languages ( procedural languages ) besides SQL and C [PL].
The SQL parser makes tags for language objects in the user-defined functions written in the procedural languages if the guest extra is enabled.
The SQL parser looks for a token coming after LANGUAGE keyword in the source code to choose a proper guest parser.
... LANGUAGE
plpythonu AS '... user-defined function ' ...
... AS $$ user-defined function $$ LANGUAGE plv8 ...
In the above examples, plpythonu and plv8 are the names of procedural languages. The SQL parser trims pl at the start and u at the end of the name before finding a ctags parser. For plpythonu and plv8 , the SQL parser extracts python and v8 as the candidates of guest parsers.
For plpythonu , ctags can run its Python parser. ctags doesn't have a parser named v8 . However, the JavaScript parser in ctags has v8 as an alias. So ctags can run the JavaScript parser as the guest parser for plv8 .
EXAMPLES
tagging code including a user-defined function in a string literal [GH3006]:
"input.sql"
CREATE OR
REPLACE FUNCTION fun1() RETURNS VARCHAR AS '
DECLARE
test1_var1 VARCHAR(64) := $$ABC$$;
test1_var2 VARCHAR(64) := $xyz$XYZ$xyz$;
test1_var3 INTEGER := 1;
BEGIN
RETURN TO_CHAR(test_var3, ''000'') || test1_var1 ||
test1_var2;
END;
' LANGUAGE plpgsql;
"output.tags" with "--options=NONE -o - --sort=no --extras=+{guest} input.sql"
fun1 input.sql
/ˆCREATE OR REPLACE FUNCTION fun1() RETURNS VARCHAR AS
'$/;" f
test1_var1 input.sql /ˆ test1_var1 VARCHAR(64) :=
$$ABC$$;$/;" v
test1_var2 input.sql /ˆ test1_var2 VARCHAR(64) :=
$xyz$XYZ$xyz$;$/;" v
test1_var3 input.sql /ˆ test1_var3 INTEGER :=
1;$/;" v
tagging code including a user-defined function in a dollar quote [GH3006]:
"input.sql"
CREATE OR
REPLACE FUNCTION fun2() RETURNS VARCHAR LANGUAGE plpgsql AS
$$
DECLARE
test2_var1 VARCHAR(64) := 'ABC2';
test2_var2 VARCHAR(64) := 'XYZ2';
test2_var3 INTEGER := 2;
BEGIN
RETURN TO_CHAR(test2_var3, '000') || test2_var1 ||
test2_var2;
END;
$$;
"output.tags" with "--options=NONE -o - --sort=no --extras=+{guest} input.sql"
fun2 input.sql
/ˆCREATE OR REPLACE FUNCTION fun2() RETURNS VARCHAR
LANGUAGE plpgsql AS $\$$/;" f
test2_var1 input.sql /ˆ test2_var1 VARCHAR(64) :=
'ABC2';$/;" v
test2_var2 input.sql /ˆ test2_var2 VARCHAR(64) :=
'XYZ2';$/;" v
test2_var3 input.sql /ˆ test2_var3 INTEGER :=
2;$/;" v
tagging code including a user-defined written in JavaScript:
-- Derived from
https://github.com/plv8/plv8/blob/r3.0alpha/sql/plv8.sql
CREATE FUNCTION test(keys text[], vals text[]) RETURNS text
AS
$$
var o = {};
for (var i = 0; i < keys.length; i++)
o[keys[i]] = vals[i];
return JSON.stringify(o);
$$
LANGUAGE plv8 IMMUTABLE STRICT;
"output.tags" with "--options=NONE -o - --sort=no --extras=+{guest} input.sql"
test input.sql
/ˆCREATE FUNCTION test(keys text[], vals text[])
RETURNS text AS$/;" f
o input.sql /ˆ var o = {};$/;" v
KNOWN BUGS
Escape sequences ( '' ) in a string literal may make a guest parser confused.
SEE ALSO
ctags(1), ctags-client-tools(7)
REFERENCES
|
[PL] |
PostgreSQL 9.5.25 Documentation, "Chapter 39. Procedural Languages", <https://www.postgresql.org/docs/9.5/xplang.html> |
[GH3006]
@bagl's comment submitted to <https://github.com/universal-ctags/ctags/issues/3006>