[Ctags] SQL enhancements requested - ctags 5.5.5?
Brought to you by:
dhiebert
From: David F. <fis...@ia...> - 2004-10-15 18:58:15
|
Good Morning. Darren, since your last change that updated ctags to support the: create global temporary table ... syntax, I now have a bunch of additional requests. These requests should make ctags a bit more usuable against different SQL dialects, and these will not break the existing users that use it for Oracle. I have put together samples below of all valid statements I would like ctags to capture. Many of these are new kinds. Here is the list of currently supported kinds: ctags --list-kinds=sql Exuberant Ctags 5.5.4, Copyright (C) 1996-2003 Darren Hiebert c cursors d prototypes [off] f functions F record fields l local variables [off] L block label P packages p procedures r records s subtypes t tables T triggers v variables I would like to add these additional kinds: e events i indexes (or indicies to be proper) R services U publications D domains/datatypes v variables - needs extending for a slightly different syntax than Oracle Besides the above additional kinds, a common theme needs to be added to the existing support. Consider this line: create table "bob"."t6" (c1 int); Currently ctags does not pick up table t6. First, it should ignore both single(') and double(") quotes. Second, almost all SQL objects can optionally supply a schema or owner name as part of the statement. In this case, bob, is the schema name. So it should be ignored along with the . and the " quotes. The samples listed below should all be returned from ctags as valid entries. I tried to demonstrate: a) where schema names can be used b) where additional keywords that must be skipped over (i.e. "global temoporary") to correctly return the item. c) supplied my own preferences and opinions Darren, if you do not have the time, I am willing to work with you to do this. My C skills are on the weak side, but I can usually muddle through it will occassional help. Let me know what you think of these changes. Thanks, Dave -- Most databases support owner.table name. -- Many allow different quoting styles, some " some '. -- Ctags should be able to ignore these. create table t1 (c1 int); create global tempoary table t2 (c1 int); create table "t3" (c1 int); create table bob.t4 (c1 int); create table bob."t5" (c1 int); create table "bob"."t6" (c1 int); create table bob."t7" (c1 int); create or replace procedure p1 () create procedure "p2" () create procedure dba."p3" () create procedure "dba"."p4" () -- Oracle also supports functions create or replace function f1 () create function "f2" () create function dba."f3" () create function "dba"."f4" () create event e1 () create event "e2" () create event dba."e3" () create event "dba"."e4" () -- What I would like to see for these entries is either: -- t1:i1 or i1:t1 -- The first allows you to easily see all the indicies for a given -- table assuming you have sorted the output from ctags. -- The second allows you to find one you are looking for more easily. -- I favour the first - table_name:index_name create index i1 on t1(c1) create index "i2" on t1(c1) create virtual unique clustered index "i3" on t1(c1) create unique clustered index "i4" on t1(c1) create clustered index "i5" on t1(c1) create bitmap index "i6" on t1(c1) create or replace trigger tr1 create trigger "tr2" create trigger "DBA"."tr3" create trigger DBA."tr4" CREATE SERVICE s1 TYPE 'HTML' AUTHORIZATION OFF USER DBA AS SELECT * FROM SYS.SYSTABLE; CREATE SERVICE "s2" TYPE 'HTML' AUTHORIZATION OFF USER DBA AS SELECT * FROM SYS.SYSTABLE; create or replace publication pu1 () create publication "pu2" () create publication dba."pu3" () create publication "dba"."pu4" () -- I consider both the domain and datatype to be synonyms -- so these entries should be treated as one kind. create domain dom1 integer not null check ... create domain "dom2" integer not null check ... create datatype dom3 integer not null check ... create datatype "dom4" integer not null check ... -- This may be similar to Oracle subtypes, will check ... hmmm I dont know what -- an Oracle subtype is. -- I am not sure how you check for variables in Oracle. -- I assume you check for BEGIN and then the names following are variables. -- This is very Oracle specific, which is fine. -- Another form of variable is and might require a new type CREATE VARIABLE "var1" INTEGER CREATE VARIABLE var2 INTEGER CREATE VARIABLE @var3 INTEGER |