From f483d71de35be267c30cac2a4fb7eaafb98656de Mon Sep 17 00:00:00 2001 From: David Hooey Date: Fri, 6 Sep 2013 14:42:21 -0400 Subject: [PATCH 01/23] Changed to allow for mac execution of sqlplus via the Instant Client. --- oracle_exec.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/oracle_exec.py b/oracle_exec.py index 4728b80..5fb2654 100644 --- a/oracle_exec.py +++ b/oracle_exec.py @@ -6,6 +6,11 @@ RE_ENTITIES = re.compile("^\\((.+?)/(0):[0-9]+\\) ([0-9]+):[0-9]+ (.+)$", re.M) +# Add the Oracle instant client to the PATH for Sublime. +# Required for UNIX/Mac +PATH_ADDITIONS = '/Users/davidhooey/instantclient_11_2/' +os.environ['PATH'] += ':' +os.environ['PATH'] += PATH_ADDITIONS class OracleExecCommand(execmod.ExecCommand): def run(self, dsn="", **kwargs): @@ -18,8 +23,11 @@ def run(self, dsn="", **kwargs): # Create a string for the in of sql command sqlfilter = '"' + ",".join("'%s'" % entity for entity in self.entities.keys()) + '"' - cmd = ["sqlplus.exe", "-s", dsn, "@", os.path.join(sublime.packages_path(), 'OracleSQL', 'RunSQL.sql'), - self.window.active_view().file_name(), sqlfilter] + # Windows + # cmd = ["sqlplus.exe", "-s", dsn, "@", os.path.join(sublime.packages_path(), 'OracleSQL', 'RunSQL.sql'), self.window.active_view().file_name(), sqlfilter] + + # UNIX/Mac + cmd = ["sqlplus", "-s", dsn, "@", os.path.join(sublime.packages_path(), 'OracleSQL', 'RunSQL.sql'), self.window.active_view().file_name(), sqlfilter] super(OracleExecCommand, self).run(cmd, "^Filename: (.+)$", "^\\(.+?/([0-9]+):([0-9]+)\\) [0-9]+:[0-9]+ (.+)$", **kwargs) From d051f4558ba6235f13c3d1809e6d94496cb12d65 Mon Sep 17 00:00:00 2001 From: David Hooey Date: Fri, 6 Sep 2013 14:43:06 -0400 Subject: [PATCH 02/23] Removing USER_ERRORS select as it's failing. --- RunSQL.sql | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/RunSQL.sql b/RunSQL.sql index cad1e81..6a82d32 100644 --- a/RunSQL.sql +++ b/RunSQL.sql @@ -4,9 +4,9 @@ SET VERIFY OFF SET FEEDBACK OFF @&1 SELECT 'Filename: &1' FROM DUAL; -SELECT '(' || TYPE || ' ' || NAME || '/0:' || POSITION || ')' || ' ' || LINE || ':' || POSITION || ' ' || TEXT as ERRORS - FROM USER_ERRORS - WHERE line <> 0 - AND TYPE || ' ' || NAME in (&2) -ORDER BY NAME, TYPE, SEQUENCE; +-- SELECT '(' || TYPE || ' ' || NAME || '/0:' || POSITION || ')' || ' ' || LINE || ':' || POSITION || ' ' || TEXT as ERRORS +-- FROM USER_ERRORS +-- WHERE line <> 0 +-- AND TYPE || ' ' || NAME in (&2) +-- ORDER BY NAME, TYPE, SEQUENCE; exit From 7cb0ce872c82fa4083db94153175c4d2aabcd08f Mon Sep 17 00:00:00 2001 From: thunya Date: Mon, 16 Sep 2013 13:17:25 +0700 Subject: [PATCH 03/23] Make it just work with Sublime Text 3 and my machine --- RunSQL.sql | 3 ++- oracle_exec.py | 26 +++++++++++--------------- readme.rst | 15 +++++++++++++-- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/RunSQL.sql b/RunSQL.sql index 6a82d32..3b1b86d 100644 --- a/RunSQL.sql +++ b/RunSQL.sql @@ -1,8 +1,9 @@ SET LINESIZE 2000 SET PAGESIZE 0 SET VERIFY OFF -SET FEEDBACK OFF +SET FEEDBACK ON @&1 +show errors SELECT 'Filename: &1' FROM DUAL; -- SELECT '(' || TYPE || ' ' || NAME || '/0:' || POSITION || ')' || ' ' || LINE || ':' || POSITION || ' ' || TEXT as ERRORS -- FROM USER_ERRORS diff --git a/oracle_exec.py b/oracle_exec.py index 5fb2654..a6fa3e6 100644 --- a/oracle_exec.py +++ b/oracle_exec.py @@ -1,17 +1,11 @@ import sublime import re import os.path -import oracle_lib -execmod = __import__("exec") +from . import oracle_lib +from Default import exec as execmod RE_ENTITIES = re.compile("^\\((.+?)/(0):[0-9]+\\) ([0-9]+):[0-9]+ (.+)$", re.M) -# Add the Oracle instant client to the PATH for Sublime. -# Required for UNIX/Mac -PATH_ADDITIONS = '/Users/davidhooey/instantclient_11_2/' -os.environ['PATH'] += ':' -os.environ['PATH'] += PATH_ADDITIONS - class OracleExecCommand(execmod.ExecCommand): def run(self, dsn="", **kwargs): if not dsn and not kwargs.get("kill", False): @@ -25,24 +19,26 @@ def run(self, dsn="", **kwargs): # Windows # cmd = ["sqlplus.exe", "-s", dsn, "@", os.path.join(sublime.packages_path(), 'OracleSQL', 'RunSQL.sql'), self.window.active_view().file_name(), sqlfilter] - + # UNIX/Mac - cmd = ["sqlplus", "-s", dsn, "@", os.path.join(sublime.packages_path(), 'OracleSQL', 'RunSQL.sql'), self.window.active_view().file_name(), sqlfilter] + # cmd = ["sqlplus", "-s", dsn, "@", os.path.join(sublime.packages_path(), 'OracleSQL', 'RunSQL.sql'), self.window.active_view().file_name(), sqlfilter] + cmd = ["sqlplus", "-s", dsn, "@", self.window.active_view().file_name(), sqlfilter] - super(OracleExecCommand, self).run(cmd, "^Filename: (.+)$", "^\\(.+?/([0-9]+):([0-9]+)\\) [0-9]+:[0-9]+ (.+)$", **kwargs) + super(OracleExecCommand, self).run(cmd, "", "^Filename: (.+)$", "^\\(.+?/([0-9]+):([0-9]+)\\) [0-9]+:[0-9]+ (.+)$", **kwargs) def append_data(self, proc, data): # Update the line number of output_view with the correct line number of source view - orgdata = data + orgstr = data.decode(self.encoding) + datastr = orgstr posoffset = 0 - for re_ent in RE_ENTITIES.finditer(orgdata): + for re_ent in RE_ENTITIES.finditer(orgstr): pos = re_ent.span(2) pos = (pos[0] + posoffset, pos[1] + posoffset) sourceoffset = self.entities[re_ent.group(1)] sqlerrorline = int(re_ent.group(3)) sourceline = sqlerrorline + sourceoffset - data = data[:pos[0]] + str(sourceline) + data[pos[1]:] + datastr = datastr[:pos[0]] + str(sourceline) + datastr[pos[1]:] posoffset += len(str(sourceline)) - 1 - super(OracleExecCommand, self).append_data(proc, data) + super(OracleExecCommand, self).append_data(proc, datastr.encode(self.encoding)) \ No newline at end of file diff --git a/readme.rst b/readme.rst index 24eb1c7..bba1981 100644 --- a/readme.rst +++ b/readme.rst @@ -19,15 +19,26 @@ To execute your PL/SQL source on your schema with ST2 Build command, you have to { "target": "oracle_exec", "selector": "source.plsql.oracle", + "path": "/usr/local/oracle/instantclient_10_2", + "env": + { + "ORACLE_HOME": "/usr/local/oracle/instantclient_10_2", + "DYLD_LIBRARY_PATH": "/usr/local/oracle/instantclient_10_2", + "SQLPATH": "/usr/local/oracle/instantclient_10_2", + "NLS_LANG": "AMERICAN_AMERICA.UTF8", + "TNS_ADMIN": "/usr/local/oracle/network/admin" + }, "variants": [ { "name": "SCHEMA 1", - "dsn": "USERNAME/PASSWORD@SCHEMANAME1" + "dsn": "USERNAME/PASSWORD@SCHEMANAME1", + "encoding": "UTF-8" }, { "name": "SCHEMA 2", - "dsn": "USERNAME/PASSWORD@SCHEMANAME2" + "dsn": "USERNAME/PASSWORD@SCHEMANAME2", + "encoding": "UTF-8" } ] } From 7bdcb0702da9e4a9b17b1915b11a83fc7b61f662 Mon Sep 17 00:00:00 2001 From: thunya Date: Mon, 16 Sep 2013 13:41:52 +0700 Subject: [PATCH 04/23] Add more information to output console --- oracle_exec.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/oracle_exec.py b/oracle_exec.py index a6fa3e6..767bbad 100644 --- a/oracle_exec.py +++ b/oracle_exec.py @@ -22,7 +22,18 @@ def run(self, dsn="", **kwargs): # UNIX/Mac # cmd = ["sqlplus", "-s", dsn, "@", os.path.join(sublime.packages_path(), 'OracleSQL', 'RunSQL.sql'), self.window.active_view().file_name(), sqlfilter] - cmd = ["sqlplus", "-s", dsn, "@", self.window.active_view().file_name(), sqlfilter] + runsql = os.path.expanduser('~') + '/Documents/SublimeText3_OracleSQL_RunSQL.sql' + if not os.path.exists(runsql): + f = open(runsql, "w") + f.write('SET LINESIZE 2000\n') + f.write('SET PAGESIZE 0\n') + f.write('SET VERIFY OFF\n') + f.write('SET FEEDBACK ON\n') + f.write('@&1\n') + f.write('show errors\n') + #f.write('SELECT \'Filename: &1\' FROM DUAL;\n') + f.close() + cmd = ["sqlplus", "-s", dsn, "@", runsql, self.window.active_view().file_name(), sqlfilter] super(OracleExecCommand, self).run(cmd, "", "^Filename: (.+)$", "^\\(.+?/([0-9]+):([0-9]+)\\) [0-9]+:[0-9]+ (.+)$", **kwargs) From d0d5efd8b2b05671c4abdb07a12a4163319388c1 Mon Sep 17 00:00:00 2001 From: Severyn Lisovsky Date: Sat, 12 Oct 2013 16:18:51 +0300 Subject: [PATCH 05/23] remade snippets to more flexible --- New Procedure.tmSnippet | 32 ------------------- begin ___ end.tmSnippet | 22 ------------- snippets/begin ___ end.tmSnippet | 18 +++++++++++ .../case.tmSnippet | 7 ++-- .../dbms_output.tmSnippet | 7 ++-- snippets/delete.tmSnippet | 15 +++++++++ .../elsif ___.tmSnippet | 6 ++-- fail.tmSnippet => snippets/for.tmSnippet | 10 ++---- .../function.tmSnippet | 16 +++++----- .../if ___ end.tmSnippet | 4 +-- snippets/insert.tmSnippet | 16 ++++++++++ .../loop ___ end.tmSnippet | 6 ++-- snippets/merge.tmSnippet | 25 +++++++++++++++ snippets/package_body.tmSnippet | 18 +++++++++++ snippets/package_spec.tmSnippet | 17 ++++++++++ .../procedure.tmSnippet | 13 +++++--- .../select.tmSnippet | 12 +++---- snippets/update.tmSnippet | 16 ++++++++++ .../when.tmSnippet | 11 +++---- 19 files changed, 169 insertions(+), 102 deletions(-) delete mode 100644 New Procedure.tmSnippet delete mode 100644 begin ___ end.tmSnippet create mode 100644 snippets/begin ___ end.tmSnippet rename log debug.tmSnippet => snippets/case.tmSnippet (73%) rename log error.tmSnippet => snippets/dbms_output.tmSnippet (73%) create mode 100644 snippets/delete.tmSnippet rename elsif ___.tmSnippet => snippets/elsif ___.tmSnippet (85%) rename fail.tmSnippet => snippets/for.tmSnippet (64%) rename New Function.tmSnippet => snippets/function.tmSnippet (74%) rename if ___ end.tmSnippet => snippets/if ___ end.tmSnippet (89%) create mode 100644 snippets/insert.tmSnippet rename loop ___ end.tmSnippet => snippets/loop ___ end.tmSnippet (92%) create mode 100644 snippets/merge.tmSnippet create mode 100644 snippets/package_body.tmSnippet create mode 100644 snippets/package_spec.tmSnippet rename log print.tmSnippet => snippets/procedure.tmSnippet (63%) rename success.tmSnippet => snippets/select.tmSnippet (72%) create mode 100644 snippets/update.tmSnippet rename if ___ else ___ end.tmSnippet => snippets/when.tmSnippet (76%) diff --git a/New Procedure.tmSnippet b/New Procedure.tmSnippet deleted file mode 100644 index ad67640..0000000 --- a/New Procedure.tmSnippet +++ /dev/null @@ -1,32 +0,0 @@ - - - - - content - PROCEDURE ${1:proc_name}( - po_result_code OUT NUMBER) -IS - l_procname VARCHAR2(30) := '${1/_(.)/\u$1/g}'; -BEGIN - Corelogger.Log_Open_Print_Close(pi_pkg_name, l_procname, - ${2:INITIAL STATE}); - po_result_code := Corecontainertask.c_result_success; - - $0 - - EXCEPTION - WHEN OTHERS THEN - Corelogger.Log_Open_PrintError_Close(pi_pkg_name, l_procname, - 'Exception: ' || SUBSTR(SQLERRM(SQLCODE), 1, 100)); - po_result_code := Corecontainertask.c_result_failure; -END $1; - name - New Procedure - scope - source.plsql.oracle - tabTrigger - proc - uuid - 9C4245C0-3B0F-4285-89EF-3256D30F973D - - diff --git a/begin ___ end.tmSnippet b/begin ___ end.tmSnippet deleted file mode 100644 index edaaabe..0000000 --- a/begin ___ end.tmSnippet +++ /dev/null @@ -1,22 +0,0 @@ - - - - - content - begin - $0 - -exception - when ${1:others} then - ${2:null}; -end; - name - begin ... end - scope - source.plsql.oracle - tabTrigger - begin - uuid - B938F8F9-0A4D-4279-8C97-1FAFF1FBDE60 - - diff --git a/snippets/begin ___ end.tmSnippet b/snippets/begin ___ end.tmSnippet new file mode 100644 index 0000000..593be21 --- /dev/null +++ b/snippets/begin ___ end.tmSnippet @@ -0,0 +1,18 @@ + + + + + content + BEGIN + ${1:--your code here--} +END; + name + begin ... end + scope + source.plsql.oracle + tabTrigger + begin + uuid + B938F8F9-0A4D-4279-8C97-1FAFF1FBDE60 + + diff --git a/log debug.tmSnippet b/snippets/case.tmSnippet similarity index 73% rename from log debug.tmSnippet rename to snippets/case.tmSnippet index b4c0a6d..51e4fb7 100644 --- a/log debug.tmSnippet +++ b/snippets/case.tmSnippet @@ -3,14 +3,13 @@ content - Corelogger.Log_Open_PrintDebug_Close(pi_pkg_name, l_procname, - $0); + CASE $1 WHEN $2 THEN $3 ELSE $4 END name - log debug + case scope source.plsql.oracle tabTrigger - debug + case uuid A693AB6B-B6DC-450A-900B-D8706CB265F4 diff --git a/log error.tmSnippet b/snippets/dbms_output.tmSnippet similarity index 73% rename from log error.tmSnippet rename to snippets/dbms_output.tmSnippet index 72f9605..191f707 100644 --- a/log error.tmSnippet +++ b/snippets/dbms_output.tmSnippet @@ -3,14 +3,13 @@ content - Corelogger.Log_Open_PrintError_Close(pi_pkg_name, l_procname, - $0); + dbms_output.put_line($1); name - log error + dbms_output scope source.plsql.oracle tabTrigger - error + dbms_output uuid 530B58B1-3B40-4C01-8DC0-F56913D9B6D3 diff --git a/snippets/delete.tmSnippet b/snippets/delete.tmSnippet new file mode 100644 index 0000000..2de6b0d --- /dev/null +++ b/snippets/delete.tmSnippet @@ -0,0 +1,15 @@ + + + + + content + DELETE FROM ${1:table} +${2:WHERE } + name + delete + scope + source.plsql.oracle + tabTrigger + delete + + \ No newline at end of file diff --git a/elsif ___.tmSnippet b/snippets/elsif ___.tmSnippet similarity index 85% rename from elsif ___.tmSnippet rename to snippets/elsif ___.tmSnippet index bf33b4f..ef3bd0f 100644 --- a/elsif ___.tmSnippet +++ b/snippets/elsif ___.tmSnippet @@ -3,14 +3,14 @@ content - elsif ${1:condition} then - $0 + ELSIF ${1:condition} THEN + $2 name elsif ... scope source.plsql.oracle tabTrigger - e + elsif uuid 903299D6-F40E-44A8-BB51-F63F4CFA8B15 diff --git a/fail.tmSnippet b/snippets/for.tmSnippet similarity index 64% rename from fail.tmSnippet rename to snippets/for.tmSnippet index 8f03e81..dad5e96 100644 --- a/fail.tmSnippet +++ b/snippets/for.tmSnippet @@ -3,17 +3,13 @@ content - IF po_result_code <> Corecontainertask.c_result_success -THEN - Corelogger.Log_Open_PrintError_Close(pi_pkg_name, l_procname, - $0); -END IF; + FOR $1 IN $2 name - fail + for scope source.plsql.oracle tabTrigger - fail + for uuid D0D94340-FC05-4955-A2D4-5E8ECFF51D3C diff --git a/New Function.tmSnippet b/snippets/function.tmSnippet similarity index 74% rename from New Function.tmSnippet rename to snippets/function.tmSnippet index 4574244..957136f 100644 --- a/New Function.tmSnippet +++ b/snippets/function.tmSnippet @@ -3,19 +3,19 @@ content - function ${1:func_name}( - po_result_code OUT NUMBER) -return ${2:RETURN_TYPE} -is -begin - $0 -end $1; + FUNCTION f_${1:name}($2) +-- +RETURN ${3:RETURN_TYPE} +IS +BEGIN +$4 +END f_$1; name New Function scope source.plsql.oracle tabTrigger - func + function uuid 5873A2DA-C72C-40DB-8859-368CA8B3809E diff --git a/if ___ end.tmSnippet b/snippets/if ___ end.tmSnippet similarity index 89% rename from if ___ end.tmSnippet rename to snippets/if ___ end.tmSnippet index b01e329..8b09f91 100644 --- a/if ___ end.tmSnippet +++ b/snippets/if ___ end.tmSnippet @@ -3,9 +3,9 @@ content - if ${1:condition} then + IF ${1:condition} THEN $0 -end if; +END IF; name if ... end scope diff --git a/snippets/insert.tmSnippet b/snippets/insert.tmSnippet new file mode 100644 index 0000000..fb95bf6 --- /dev/null +++ b/snippets/insert.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + INSERT INTO ${1:table} ${2:(${3:column_names})} +VALUES + ${4:(${5:values})} + name + insert + scope + source.plsql.oracle + tabTrigger + insert + + \ No newline at end of file diff --git a/loop ___ end.tmSnippet b/snippets/loop ___ end.tmSnippet similarity index 92% rename from loop ___ end.tmSnippet rename to snippets/loop ___ end.tmSnippet index e372dde..b0bcf2c 100644 --- a/loop ___ end.tmSnippet +++ b/snippets/loop ___ end.tmSnippet @@ -3,9 +3,9 @@ content - loop - $0 -end loop; + LOOP + $1 +END LOOP; name loop ... end scope diff --git a/snippets/merge.tmSnippet b/snippets/merge.tmSnippet new file mode 100644 index 0000000..7b26e6c --- /dev/null +++ b/snippets/merge.tmSnippet @@ -0,0 +1,25 @@ + + + + + content + MERGE INTO ${1:some_table} ${2:alias} +USING ( ${3:another_table_or_select} ) ${4:alias} +ON ( $2.$5 = $4.$6 ) +WHEN NOT MATCHED +THEN + INSERT ( $7 ) + VALUES ( $8 ) +WHEN MATCHED +THEN + $9; + name + merge + scope + source.plsql.oracle + tabTrigger + merge + uuid + BFC99B3F-C765-44C3-8FF2-4842D6F534550 + + \ No newline at end of file diff --git a/snippets/package_body.tmSnippet b/snippets/package_body.tmSnippet new file mode 100644 index 0000000..ec19a3e --- /dev/null +++ b/snippets/package_body.tmSnippet @@ -0,0 +1,18 @@ + + + + + content + CREATE OR REPLACE package body pkg_${1:name} +IS + ${2:--local variables here, procedures and functions} + +END pkg_$1; + name + Package Body + scope + source.plsql.oracle + tabTrigger + package body + + \ No newline at end of file diff --git a/snippets/package_spec.tmSnippet b/snippets/package_spec.tmSnippet new file mode 100644 index 0000000..86f84f1 --- /dev/null +++ b/snippets/package_spec.tmSnippet @@ -0,0 +1,17 @@ + + + + + content + CREATE OR REPLACE package pkg_${1:name} +IS + $2 +END pkg_$1; + name + Package Spec + scope + source.plsql.oracle + tabTrigger + package + + \ No newline at end of file diff --git a/log print.tmSnippet b/snippets/procedure.tmSnippet similarity index 63% rename from log print.tmSnippet rename to snippets/procedure.tmSnippet index 11336ff..eafd675 100644 --- a/log print.tmSnippet +++ b/snippets/procedure.tmSnippet @@ -3,15 +3,18 @@ content - Corelogger.Log_Open_Print_Close(pi_pkg_name, l_procname, - $0); + PROCEDURE p_${1:name}($2) +IS +BEGIN + $3 +END p_$1; name - log print + New Procedure scope source.plsql.oracle tabTrigger - print + procedure uuid - 7D61E004-D3A6-4138-8EF3-F682C9F3EEAC + 9C4245C0-3B0F-4285-89EF-3256D30F973D diff --git a/success.tmSnippet b/snippets/select.tmSnippet similarity index 72% rename from success.tmSnippet rename to snippets/select.tmSnippet index c228fce..2423430 100644 --- a/success.tmSnippet +++ b/snippets/select.tmSnippet @@ -3,16 +3,16 @@ content - IF po_result_code = Corecontainertask.c_result_success -THEN - $0 -END IF; + SELECT $1 + ${2:BULK COLLECT INTO} $3 + FROM $4 + WHERE $5 name - success + select scope source.plsql.oracle tabTrigger - success + select uuid BFC99B3F-C765-44C3-8FF2-4842D6FE3550 diff --git a/snippets/update.tmSnippet b/snippets/update.tmSnippet new file mode 100644 index 0000000..8cfb22d --- /dev/null +++ b/snippets/update.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + UPDATE ${1:table} + SET $2 +${3:WHERE } + name + update + scope + source.plsql.oracle + tabTrigger + update + + \ No newline at end of file diff --git a/if ___ else ___ end.tmSnippet b/snippets/when.tmSnippet similarity index 76% rename from if ___ else ___ end.tmSnippet rename to snippets/when.tmSnippet index 2c7b373..2dbb58a 100644 --- a/if ___ else ___ end.tmSnippet +++ b/snippets/when.tmSnippet @@ -3,17 +3,16 @@ content - if ${1:condition} then + WHEN ${1:CONDITION} +THEN $2 -else - $3 -end if; + name - if ... else ... end + when .. then scope source.plsql.oracle tabTrigger - ife + when uuid 959C6497-92BE-4A63-BE61-B05F25C32E4F From 96467d46884e4b7ba68acf2b1f74370c212e3a28 Mon Sep 17 00:00:00 2001 From: Severyn Lisovsky Date: Sat, 12 Oct 2013 22:17:43 +0300 Subject: [PATCH 06/23] changed package word to uppercase --- snippets/package_body.tmSnippet | 6 +++--- snippets/package_spec.tmSnippet | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/snippets/package_body.tmSnippet b/snippets/package_body.tmSnippet index ec19a3e..be68389 100644 --- a/snippets/package_body.tmSnippet +++ b/snippets/package_body.tmSnippet @@ -3,10 +3,10 @@ content - CREATE OR REPLACE package body pkg_${1:name} + CREATE OR REPLACE PACKAGE BODY pkg_${1:name} IS ${2:--local variables here, procedures and functions} - + END pkg_$1; name Package Body @@ -15,4 +15,4 @@ END pkg_$1; tabTrigger package body - \ No newline at end of file + diff --git a/snippets/package_spec.tmSnippet b/snippets/package_spec.tmSnippet index 86f84f1..cf7b4b4 100644 --- a/snippets/package_spec.tmSnippet +++ b/snippets/package_spec.tmSnippet @@ -3,7 +3,7 @@ content - CREATE OR REPLACE package pkg_${1:name} + CREATE OR REPLACE PACKAGE pkg_${1:name} IS $2 END pkg_$1; @@ -14,4 +14,4 @@ END pkg_$1; tabTrigger package - \ No newline at end of file + From 43dd265e004e39d5587ec93e187e0982ad942612 Mon Sep 17 00:00:00 2001 From: Severyn Lisovsky Date: Sat, 12 Oct 2013 23:14:04 +0300 Subject: [PATCH 07/23] removes unindet on is, as --- Indent.tmPreferences | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Indent.tmPreferences b/Indent.tmPreferences index a1307ae..8e36ae4 100644 --- a/Indent.tmPreferences +++ b/Indent.tmPreferences @@ -9,9 +9,9 @@ settings decreaseIndentPattern - (?i)^\s*(is|as|begin|end|then|else|elsif|exception)\b + (?i)^\s*(end|then|else|elsif|exception)\b increaseIndentPattern - (?i)^\s*(is|as|begin|if|then|else|elsif|loop|exception)\b + (?i)^\s*(is|begin|if|then|else|elsif|loop|exception)\b uuid 6A30BCDD-20CB-4E24-A1DC-5187E6AA36A6 From 9bd05a02211c24f9b27e5120d68b20eddf5fe569 Mon Sep 17 00:00:00 2001 From: Severyn Lisovsky Date: Mon, 14 Oct 2013 01:03:51 +0300 Subject: [PATCH 08/23] added built in functions, data types, packages, q quoting, added length verification --- PL_SQL (Oracle).tmLanguage | 116 ++++++++++++++++++++++++++++--------- 1 file changed, 89 insertions(+), 27 deletions(-) diff --git a/PL_SQL (Oracle).tmLanguage b/PL_SQL (Oracle).tmLanguage index 9b0edf3..3984fe4 100644 --- a/PL_SQL (Oracle).tmLanguage +++ b/PL_SQL (Oracle).tmLanguage @@ -109,7 +109,7 @@ match - (?i)^\s*(function|procedure)\s+([-a-z0-9_]+) + (?i)^\s*(function|procedure)\s+(\w{1,29}) name meta.function.oracle @@ -149,12 +149,42 @@ name support.function.oracle - - match - (?i)\b(avg|count|sum|max|min|nvl|chr|trim|to_date|to_char|lpad|ltrim|rpad|rtrim|trunc|to_number|extractvalue|sign|abs|floor|mod|ascii|coalesce)\b - name - support.function.builtin.oracle - + + match + (?i)\b(ascii|asciistr|chr|compose|concat|convert|decompose|dump|initcap|instr|instrb|instrc|instr2|instr4|length|lengthb|lengthc|length2|length4|lower|lpad|ltrim|nchr|replace|rpad|rtrim|soundex|substr|translate|trim|upper|vsize)\b + name + support.function.builtin.oracle + + + match + (?i)\b(add_months|current_date|current_timestamp|dbtimezone|from_tz|last_day|localtimestamp|months_between|new_time|next_day|round|sessiontimezone|sysdate|to_date|trunc|tz_offset|systimestamp|to_char)\b + name + support.function.builtin.oracle + + + match + (?i)\b(bfilename|cardinality|coalesce|decode|empty_blob|empty_clob|group_id|lag|lead|listagg|lnnvl|nanvl|nullif|nvl|nvl2|sys_context|uid|user|userenv)\b + name + support.function.builtin.oracle + + + match + (?i)\b(bin_to_num|cast|chartorowid|from_tz|hextoraw|numtodsinterval|numtoyminterval|rawtohex|to_char|to_clob|to_date|to_dsinterval|to_lob|to_multi_byte|to_nclob|to_number|to_single_byte|to_timestamp|to_timestamp_tz|to_yminterval)\b + name + support.function.builtin.oracle + + + match + (?i)\b(abs|acos|asin|atan|atan2|avg|bin_to_num|bitand|ceil|corr|cos|cosh|covar_pop|covar_samp|count|cume_dist|dense_rank|exp|extract|floor|greatest|least|ln|log|max|median|min|mod|power|rank|remainder|round|sign|sin|sinh|sqrt|stddev|sum|tan|tanh|trunc|var_pop|var_samp|variance)\b + name + support.function.builtin.oracle + + + match + (?i)\b(\.(count|delete|exists|extend|first|last|limit|next|prior|trim))\b + name + support.function.collection.oracle + match (?i)\b(sql|sqlcode)\b @@ -163,19 +193,19 @@ match - (?i)\b(p(i|o|io)_[-a-z0-9_]+)\b + (?i)\b((i|o|io)p_\w+)\b name variable.parameter.oracle match - (?i)\b(l_[-a-z0-9_]+)\b + (?i)\b(v(c|t|n|v)_\w{1,27})\b name variable.other.oracle match - (?i)\b(end|then|deterministic|exception|when|others|raise|declare|begin|in|out|nocopy|is|as|exit|open|fetch|into|close|type|rowtype|default|exclusive|mode|lock|record|\.(extend|count|first|last|next|nextval|currval))\b + (?i)\b(end|then|deterministic|exception|when|declare|begin|in|out|nocopy|is|as|exit|open|fetch|into|close|type|rowtype|default|exclusive|mode|lock|record|\.(extend|count|first|last|next|nextval|currval))\b name keyword.other.oracle @@ -187,19 +217,19 @@ match - (?i)\b(no_data_found|too_many_rows|others|value_error)\b + (?i)\b(access_into_null|case_not_found|collection_is_null|cursor_already_open|dup_val_on_index|invalid_cursor|invalid_number|login_denied|no_data_found|not_logged_on|program_error|rowtype_mismatch|self_is_null|storage_error|subscript_beyond_count|subscript_outside_limit|sys_invalid_rowid|timeout_on_resource|too_many_rows|value_error|zero_divide|others)\b name support.type.exception.sql.oracle match - (?i)\b(dbms_lock|dbms_output)\b + (?i)\b(dbms_\w+.\w+|utl_\w+.\w+|owa_\w+.\w+)\b name support.class.oracle match - (?i)\b(put_line|raise_application_error)\b + (?i)\b(raise|raise_application_error)\b name support.function.oracle @@ -211,20 +241,52 @@ name string.quoted.single.oracle - - begin - " - end - " - name - string.quoted.double.oracle - - - match - (?i)\b(number|decimal|integer|smallint|float|long|char|varchar2|varchar|boolean|date|xmltype|blob|clob|binary_integer)\b - name - storage.type.oracle - + + begin + q'\[ + end + \]' + name + string.quoted.q1.oracle + + + begin + q'\( + end + \)' + name + string.quoted.q2.oracle + + + begin + q'\{ + end + \}' + name + string.quoted.q3.oracle + + + begin + q'< + end + >' + name + string.quoted.q4.oracle + + + begin + q'\! + end + \!' + name + string.quoted.q5.oracle + + + match + (?i)\b(char|varchar2|nchar|nvarchar2|date|timestamp(\s+with(\s+local)?\s+time\s+zone)?|interval\s+(year\s+to\s+month|day\s+to\s+second)|blob|clob|nclob|bfile|long|long\s+raw|raw|number|float|binary_(float|double|integer)|rowid|urowid)\b + name + storage.type.oracle + scopeName source.plsql.oracle From a26193badce3388e3c9adb74a52e5960e0cf064a Mon Sep 17 00:00:00 2001 From: Severyn Lisovsky Date: Mon, 14 Oct 2013 01:34:18 +0300 Subject: [PATCH 09/23] added joins --- PL_SQL (Oracle).tmLanguage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PL_SQL (Oracle).tmLanguage b/PL_SQL (Oracle).tmLanguage index 3984fe4..9616672 100644 --- a/PL_SQL (Oracle).tmLanguage +++ b/PL_SQL (Oracle).tmLanguage @@ -211,7 +211,7 @@ match - (?i)\b(with|select|from|where|order\s+by|group\s+by|asc|desc|update|set|insert|into|values|delete|from|distinct|union|having|limit|table|between|of|all|any|exists|rownum|cursor|returning)\b + (?i)\b(with|select|from|where|order\s+by|group\s+by|((outer|left|right)\s+)?join|asc|desc|update|set|insert|into|values|delete|from|distinct|union|having|limit|table|between|like|of|all|any|exists|rownum|cursor|returning)\b name keyword.other.sql.oracle From 59cd324c7863ce6204f02285051aa9513822d19c Mon Sep 17 00:00:00 2001 From: Severyn Lisovsky Date: Mon, 14 Oct 2013 01:55:37 +0300 Subject: [PATCH 10/23] joins, minus etc --- PL_SQL (Oracle).tmLanguage | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PL_SQL (Oracle).tmLanguage b/PL_SQL (Oracle).tmLanguage index 9616672..23e1dec 100644 --- a/PL_SQL (Oracle).tmLanguage +++ b/PL_SQL (Oracle).tmLanguage @@ -205,13 +205,13 @@ match - (?i)\b(end|then|deterministic|exception|when|declare|begin|in|out|nocopy|is|as|exit|open|fetch|into|close|type|rowtype|default|exclusive|mode|lock|record|\.(extend|count|first|last|next|nextval|currval))\b + (?i)\b(end|then|deterministic|exception|when|declare|begin|in|out|nocopy|is|as|exit|open|fetch|into|close|subtype|type|rowtype|default|exclusive|mode|lock|record)\b name keyword.other.oracle match - (?i)\b(with|select|from|where|order\s+by|group\s+by|((outer|left|right)\s+)?join|asc|desc|update|set|insert|into|values|delete|from|distinct|union|having|limit|table|between|like|of|all|any|exists|rownum|cursor|returning)\b + (?i)\b(with|select|from|where|order\s+by|group\s+by|((outer|left|right)\s+)?join|asc|desc|update|set|insert|into|values|delete|from|distinct|union|minus|intersect|having|limit|table|between|like|of|all|any|exists|rownum|cursor|returning)\b name keyword.other.sql.oracle From 14d29c2803527637bae30db44d877e609cb428ac Mon Sep 17 00:00:00 2001 From: Severyn Lisovsky Date: Tue, 15 Oct 2013 03:53:21 +0300 Subject: [PATCH 11/23] added almost all built in function, keywords, etc./ Added check for variable length --- PL_SQL (Oracle).tmLanguage | 123 ++++++++++++++++++++++++++----------- 1 file changed, 88 insertions(+), 35 deletions(-) diff --git a/PL_SQL (Oracle).tmLanguage b/PL_SQL (Oracle).tmLanguage index 23e1dec..912a0fd 100644 --- a/PL_SQL (Oracle).tmLanguage +++ b/PL_SQL (Oracle).tmLanguage @@ -67,7 +67,7 @@ 3 name - entity.name.type.oracle + entity.name.class.oracle match @@ -107,9 +107,14 @@ name entity.name.function.oracle + 3 + + name + invalid.oracle + match - (?i)^\s*(function|procedure)\s+(\w{1,29}) + (?i)^\s*(function|procedure)\s+(\w{1,30}|(\w{31,}))\b name meta.function.oracle @@ -133,7 +138,7 @@ match - (?i)\b(if|elsif|else|end\s+if|loop|end\s+loop|for|while|case|end\s+case|continue|return|goto)\b + (?i)\b(if|elsif|else|loop|for|while|case|end\s+case|continue|goto|return)\b name keyword.control.oracle @@ -145,73 +150,113 @@ match - (?i)\b(sysdate|%(isopen|found|notfound|rowcount)|commit|rollback|sqlerrm|substr|instr|cast|decode|length|lower|upper)\b + (?i)\b(sysdate|%(isopen|found|notfound|rowcount)|commit|rollback|sqlerrm|sql|sqlcode)\b name - support.function.oracle + support.function.builtin.other.oracle + + match + (?i)\b(avg|collect|corr|corr_\w+|count|covar_(pop|samp)|cume_dist|dense_rank|first|group_id|grouping|grouping_id|last|max|median|min|percentile_cont|percentile_disc|percent_rank|rank|regr_\w+|stats_binomial_test|stats_crosstab|stats_f_test|stats_ks_test|stats_mode|stats_mw_test|stats_one_way_anova|stats_t_test_\w+|stats_wsr_test|stddev|stddev_pop|stddev_samp|sum|var_pop|var_samp|variance)\b + name + support.function.builtin.aggregate.oracle + match (?i)\b(ascii|asciistr|chr|compose|concat|convert|decompose|dump|initcap|instr|instrb|instrc|instr2|instr4|length|lengthb|lengthc|length2|length4|lower|lpad|ltrim|nchr|replace|rpad|rtrim|soundex|substr|translate|trim|upper|vsize)\b name - support.function.builtin.oracle + support.function.builtin.char.oracle match (?i)\b(add_months|current_date|current_timestamp|dbtimezone|from_tz|last_day|localtimestamp|months_between|new_time|next_day|round|sessiontimezone|sysdate|to_date|trunc|tz_offset|systimestamp|to_char)\b name - support.function.builtin.oracle + support.function.builtin.date.oracle match - (?i)\b(bfilename|cardinality|coalesce|decode|empty_blob|empty_clob|group_id|lag|lead|listagg|lnnvl|nanvl|nullif|nvl|nvl2|sys_context|uid|user|userenv)\b + (?i)\b(bfilename|cardinality|coalesce|decode|empty_(blob|clob)|group_id|lag|lead|listagg|lnnvl|nanvl|nullif|nvl|nvl2|sys_(context|guid|typeid)|uid|user|userenv|cardinality|collect|powermultiset(_by_cardinality)?|set|dump|ora_hash|vsize)\b name - support.function.builtin.oracle + support.function.builtin.advanced.oracle match (?i)\b(bin_to_num|cast|chartorowid|from_tz|hextoraw|numtodsinterval|numtoyminterval|rawtohex|to_char|to_clob|to_date|to_dsinterval|to_lob|to_multi_byte|to_nclob|to_number|to_single_byte|to_timestamp|to_timestamp_tz|to_yminterval)\b name - support.function.builtin.oracle + support.function.builtin.convert.oracle match - (?i)\b(abs|acos|asin|atan|atan2|avg|bin_to_num|bitand|ceil|corr|cos|cosh|covar_pop|covar_samp|count|cume_dist|dense_rank|exp|extract|floor|greatest|least|ln|log|max|median|min|mod|power|rank|remainder|round|sign|sin|sinh|sqrt|stddev|sum|tan|tanh|trunc|var_pop|var_samp|variance)\b + (?i)\b(abs|acos|asin|atan|atan2|avg|bin_to_num|bit_(and|or|xor)|ceil|corr|cos|cosh|covar_pop|covar_samp|count|cume_dist|dense_rank|exp|extract|floor|greatest|least|ln|log|max|median|min|mod|power|rank|remainder|round|sign|sin|sinh|sqrt|stddev|sum|tan|tanh|trunc|var_pop|var_samp|variance)\b name - support.function.builtin.oracle + support.function.builtin.math.oracle match (?i)\b(\.(count|delete|exists|extend|first|last|limit|next|prior|trim))\b name - support.function.collection.oracle + support.function.builtin.collection.oracle + + + match + (?i)\b(cluster_id|cluster_probability|cluster_set|feature_id|feature_set|feature_value|prediction|prediction_cost|prediction_details|prediction_probability|prediction_set)\b + name + support.function.builtin.data_mining.oracle + + + match + (?i)\b(appendchildxml|deletexml|depth|extract (xml)|existsnode|extractvalue|insertchildxml|insertxmlbefore|path|sys_dburigen|sys_xmlagg|sys_xmlgen|updatexml|xmlagg|xmlcdata|xmlcolattval|xmlcomment|xmlconcat|xmlforest|xmlparse|xmlpi|xmlquery|xmlroot|xmlsequence|xmlserialize|xmltable|xmltransform)\b + name + support.function.builtin.xml.oracle + + + match + (?i)\b(pragma\s+(autonomous_transaction|serially_reusable|restrict_refrences|exception_init|inline))\b + name + keyword.other.pragma.oracle match - (?i)\b(sql|sqlcode)\b - name - variable.language.oracle - - - match - (?i)\b((i|o|io)p_\w+)\b - name + (?i)\b((i|o|io)p_(\w{1,27}|(\w{28,})))\b + captures + + 4 + + name + invalid.oracle + + + name variable.parameter.oracle match - (?i)\b(v(c|t|n|v)_\w{1,27})\b + (?i)\b((c|g|v)(c|t|n|v)_(\w{1,27}|(\w{28,})))\b + captures + + 5 + + name + invalid.oracle + + name - variable.other.oracle + variable.standard.oracle + + match + (?i)\b(connect\s+by\s+(nocycle\s+)?(prior|level)|connect_by_(root|icycle)|level|start\s+with|)\b + name + keyword.hierarchical.sql.oracle + match - (?i)\b(end|then|deterministic|exception|when|declare|begin|in|out|nocopy|is|as|exit|open|fetch|into|close|subtype|type|rowtype|default|exclusive|mode|lock|record)\b + (?i)\b(end|then|deterministic|exception|when|declare|begin|in|out|nocopy|is|as|exit|open|fetch|into|close|subtype|type|rowtype|default|exclusive|mode|lock|record|index\s+by)\b name keyword.other.oracle match - (?i)\b(with|select|from|where|order\s+by|group\s+by|((outer|left|right)\s+)?join|asc|desc|update|set|insert|into|values|delete|from|distinct|union|minus|intersect|having|limit|table|between|like|of|all|any|exists|rownum|cursor|returning)\b + (?i)\b(with|select|from|where|order\s+(siblings\s+)?by|group\s+by|rollup|cube|((outer|left|right)\s+)?join|asc|desc|update|set|insert|into|values|delete|from|distinct|union|minus|intersect|having|limit|table|between|like|of|all|any|exists|rownum|cursor|returning)\b name keyword.other.sql.oracle @@ -219,13 +264,21 @@ match (?i)\b(access_into_null|case_not_found|collection_is_null|cursor_already_open|dup_val_on_index|invalid_cursor|invalid_number|login_denied|no_data_found|not_logged_on|program_error|rowtype_mismatch|self_is_null|storage_error|subscript_beyond_count|subscript_outside_limit|sys_invalid_rowid|timeout_on_resource|too_many_rows|value_error|zero_divide|others)\b name - support.type.exception.sql.oracle + support.type.exception.oracle match - (?i)\b(dbms_\w+.\w+|utl_\w+.\w+|owa_\w+.\w+)\b + (?i)\b((dbms|utl|owa)_\w+.(\w+))\b + captures + + 3 + + name + support.class.oracle + + name - support.class.oracle + support.function.oracle match @@ -247,7 +300,7 @@ end \]' name - string.quoted.q1.oracle + string.quoted.q.oracle begin @@ -255,7 +308,7 @@ end \)' name - string.quoted.q2.oracle + string.quoted.q.oracle begin @@ -263,7 +316,7 @@ end \}' name - string.quoted.q3.oracle + string.quoted.q.oracle begin @@ -271,7 +324,7 @@ end >' name - string.quoted.q4.oracle + string.quoted.q.oracle begin @@ -279,13 +332,13 @@ end \!' name - string.quoted.q5.oracle + string.quoted.q.oracle match - (?i)\b(char|varchar2|nchar|nvarchar2|date|timestamp(\s+with(\s+local)?\s+time\s+zone)?|interval\s+(year\s+to\s+month|day\s+to\s+second)|blob|clob|nclob|bfile|long|long\s+raw|raw|number|float|binary_(float|double|integer)|rowid|urowid)\b + (?i)\b(char|varchar2|nchar|nvarchar2|date|timestamp(\s+with(\s+local)?\s+time\s+zone)?|interval\s+(year\s+to\s+month|day\s+to\s+second)|blob|clob|nclob|bfile|long|long\s+raw|raw|number|float|binary_(float|double|integer)|pls_(float|double|integer)|rowid|urowid|vararray)\b name - storage.type.oracle + storage.type.builtin.oracle scopeName From 01dac6bac2e5151e16892f5ebf787166807872a8 Mon Sep 17 00:00:00 2001 From: mezdm Date: Wed, 29 Jan 2014 16:13:31 +0200 Subject: [PATCH 12/23] Add types to simbol list, fix variables and parameters in the language file according to my standards --- PL_SQL (Oracle).JSON-tmLanguage | 206 ++++++++++++++++++++++ PL_SQL (Oracle).tmLanguage | 301 ++++++++++++++++---------------- Symbol List.tmPreferences | 2 +- oracle_commands.py | 2 +- 4 files changed, 363 insertions(+), 148 deletions(-) create mode 100644 PL_SQL (Oracle).JSON-tmLanguage diff --git a/PL_SQL (Oracle).JSON-tmLanguage b/PL_SQL (Oracle).JSON-tmLanguage new file mode 100644 index 0000000..e5a5303 --- /dev/null +++ b/PL_SQL (Oracle).JSON-tmLanguage @@ -0,0 +1,206 @@ +{ + "name": "PL/SQL (Oracle)", + "fileTypes": [ + "sql", + "ddl", + "dml", + "pks", + "pkb", + "prc", + "fnc", + "vw", + "trg", + "tps", + "tpb", + "fk" + ], + "uuid": "28DCE4DD-F5E1-4ED3-8847-64DA6B1F9163", + "keyEquivalent": "^~S", + "foldingStartMarker": "(?i)^\\s*(begin|if|loop)\\b", + "foldingStopMarker": "(?i)^\\s*(end)\\b", + "scopeName": "source.plsql.oracle", + "patterns": [ + { + "name": "comment.block.oracle", + "end": "\\*/", + "begin": "/\\*" + }, + { + "name": "comment.line.double-dash.oracle", + "match": "--.*$" + }, + { + "name": "meta.create.oracle", + "match": "(?i)^\\s*(create)(\\s+or\\s+replace)?\\s+", + "captures": { + "1": {"name": "keyword.other.oracle"}, + "2": {"name": "keyword.other.oracle"} + } + }, + { + "name": "meta.package.oracle", + "match": "(?i)\\b(package)(\\s+body)?\\s+(\\S+)", + "captures": { + "1": {"name": "keyword.other.oracle"}, + "2": {"name": "keyword.other.oracle"}, + "3": {"name": "entity.name.class.oracle"} + } + }, + { + "name": "meta.type.oracle", + "match": "(?i)^\\s*(type)\\s+(\\w{1,30})\\b", + "captures": { + "1": {"name": "keyword.other.oracle"}, + "2": {"name": "entity.name.type.oracle"} + } + }, + { + "name": "meta.function.oracle", + "match": "(?i)^\\s*(function|procedure)\\s+(\\w{1,30}|(\\w{31,}))\\b", + "captures": { + "1": {"name": "storage.type.function.oracle"}, + "2": {"name": "entity.name.function.oracle"}, + "3": {"name": "invalid.oracle"} + } + }, + { + "name": "keyword.operator.oracle", + "match": "[!<>:]?=|<>|<|>|\\+|(?'", + "begin": "q'<" + }, + { + "name": "string.quoted.q.oracle", + "end": "\\!'", + "begin": "q'\\!" + }, + { + "name": "storage.type.builtin.oracle", + "match": "(?i)\\b(char|varchar2|nchar|nvarchar2|date|timestamp(\\s+with(\\s+local)?\\s+time\\s+zone)?|interval\\s+(year\\s+to\\s+month|day\\s+to\\s+second)|blob|clob|nclob|bfile|long|long\\s+raw|raw|number|float|binary_(float|double|integer)|pls_(float|double|integer)|rowid|urowid|vararray)\\b" + } + ] +} \ No newline at end of file diff --git a/PL_SQL (Oracle).tmLanguage b/PL_SQL (Oracle).tmLanguage index 912a0fd..bdb46e6 100644 --- a/PL_SQL (Oracle).tmLanguage +++ b/PL_SQL (Oracle).tmLanguage @@ -1,5 +1,5 @@ - + fileTypes @@ -7,6 +7,15 @@ sql ddl dml + pks + pkb + prc + fnc + vw + trg + tps + tpb + fk foldingStartMarker (?i)^\s*(begin|if|loop)\b @@ -90,7 +99,7 @@ match - (?i)\b(type)\s+"([^"]+)" + (?i)^\s*(type)\s+(\w{1,30})\b name meta.type.oracle @@ -107,11 +116,11 @@ name entity.name.function.oracle - 3 - - name - invalid.oracle - + 3 + + name + invalid.oracle + match (?i)^\s*(function|procedure)\s+(\w{1,30}|(\w{31,}))\b @@ -154,100 +163,100 @@ name support.function.builtin.other.oracle - - match - (?i)\b(avg|collect|corr|corr_\w+|count|covar_(pop|samp)|cume_dist|dense_rank|first|group_id|grouping|grouping_id|last|max|median|min|percentile_cont|percentile_disc|percent_rank|rank|regr_\w+|stats_binomial_test|stats_crosstab|stats_f_test|stats_ks_test|stats_mode|stats_mw_test|stats_one_way_anova|stats_t_test_\w+|stats_wsr_test|stddev|stddev_pop|stddev_samp|sum|var_pop|var_samp|variance)\b - name - support.function.builtin.aggregate.oracle - - - match - (?i)\b(ascii|asciistr|chr|compose|concat|convert|decompose|dump|initcap|instr|instrb|instrc|instr2|instr4|length|lengthb|lengthc|length2|length4|lower|lpad|ltrim|nchr|replace|rpad|rtrim|soundex|substr|translate|trim|upper|vsize)\b - name - support.function.builtin.char.oracle - - - match - (?i)\b(add_months|current_date|current_timestamp|dbtimezone|from_tz|last_day|localtimestamp|months_between|new_time|next_day|round|sessiontimezone|sysdate|to_date|trunc|tz_offset|systimestamp|to_char)\b - name - support.function.builtin.date.oracle - - - match - (?i)\b(bfilename|cardinality|coalesce|decode|empty_(blob|clob)|group_id|lag|lead|listagg|lnnvl|nanvl|nullif|nvl|nvl2|sys_(context|guid|typeid)|uid|user|userenv|cardinality|collect|powermultiset(_by_cardinality)?|set|dump|ora_hash|vsize)\b - name - support.function.builtin.advanced.oracle - - - match - (?i)\b(bin_to_num|cast|chartorowid|from_tz|hextoraw|numtodsinterval|numtoyminterval|rawtohex|to_char|to_clob|to_date|to_dsinterval|to_lob|to_multi_byte|to_nclob|to_number|to_single_byte|to_timestamp|to_timestamp_tz|to_yminterval)\b - name - support.function.builtin.convert.oracle - - - match - (?i)\b(abs|acos|asin|atan|atan2|avg|bin_to_num|bit_(and|or|xor)|ceil|corr|cos|cosh|covar_pop|covar_samp|count|cume_dist|dense_rank|exp|extract|floor|greatest|least|ln|log|max|median|min|mod|power|rank|remainder|round|sign|sin|sinh|sqrt|stddev|sum|tan|tanh|trunc|var_pop|var_samp|variance)\b - name - support.function.builtin.math.oracle - - - match - (?i)\b(\.(count|delete|exists|extend|first|last|limit|next|prior|trim))\b - name - support.function.builtin.collection.oracle - - - match - (?i)\b(cluster_id|cluster_probability|cluster_set|feature_id|feature_set|feature_value|prediction|prediction_cost|prediction_details|prediction_probability|prediction_set)\b - name - support.function.builtin.data_mining.oracle - - - match - (?i)\b(appendchildxml|deletexml|depth|extract (xml)|existsnode|extractvalue|insertchildxml|insertxmlbefore|path|sys_dburigen|sys_xmlagg|sys_xmlgen|updatexml|xmlagg|xmlcdata|xmlcolattval|xmlcomment|xmlconcat|xmlforest|xmlparse|xmlpi|xmlquery|xmlroot|xmlsequence|xmlserialize|xmltable|xmltransform)\b - name - support.function.builtin.xml.oracle - - - match - (?i)\b(pragma\s+(autonomous_transaction|serially_reusable|restrict_refrences|exception_init|inline))\b - name - keyword.other.pragma.oracle - match - (?i)\b((i|o|io)p_(\w{1,27}|(\w{28,})))\b + (?i)\b(avg|collect|corr|corr_\w+|count|covar_(pop|samp)|cume_dist|dense_rank|first|group_id|grouping|grouping_id|last|max|median|min|percentile_cont|percentile_disc|percent_rank|rank|regr_\w+|stats_binomial_test|stats_crosstab|stats_f_test|stats_ks_test|stats_mode|stats_mw_test|stats_one_way_anova|stats_t_test_\w+|stats_wsr_test|stddev|stddev_pop|stddev_samp|sum|var_pop|var_samp|variance)\b + name + support.function.builtin.aggregate.oracle + + + match + (?i)\b(ascii|asciistr|chr|compose|concat|convert|decompose|dump|initcap|instr|instrb|instrc|instr2|instr4|length|lengthb|lengthc|length2|length4|lower|lpad|ltrim|nchr|replace|rpad|rtrim|soundex|substr|translate|trim|upper|vsize)\b + name + support.function.builtin.char.oracle + + + match + (?i)\b(add_months|current_date|current_timestamp|dbtimezone|from_tz|last_day|localtimestamp|months_between|new_time|next_day|round|sessiontimezone|sysdate|to_date|trunc|tz_offset|systimestamp|to_char)\b + name + support.function.builtin.date.oracle + + + match + (?i)\b(bfilename|cardinality|coalesce|decode|empty_(blob|clob)|group_id|lag|lead|listagg|lnnvl|nanvl|nullif|nvl|nvl2|sys_(context|guid|typeid)|uid|user|userenv|cardinality|collect|powermultiset(_by_cardinality)?|set|dump|ora_hash|vsize)\b + name + support.function.builtin.advanced.oracle + + + match + (?i)\b(bin_to_num|cast|chartorowid|from_tz|hextoraw|numtodsinterval|numtoyminterval|rawtohex|to_char|to_clob|to_date|to_dsinterval|to_lob|to_multi_byte|to_nclob|to_number|to_single_byte|to_timestamp|to_timestamp_tz|to_yminterval)\b + name + support.function.builtin.convert.oracle + + + match + (?i)\b(abs|acos|asin|atan|atan2|avg|bin_to_num|bit_(and|or|xor)|ceil|corr|cos|cosh|covar_pop|covar_samp|count|cume_dist|dense_rank|exp|extract|floor|greatest|least|ln|log|max|median|min|mod|power|rank|remainder|round|sign|sin|sinh|sqrt|stddev|sum|tan|tanh|trunc|var_pop|var_samp|variance)\b + name + support.function.builtin.math.oracle + + + match + (?i)\b(\.(count|delete|exists|extend|first|last|limit|next|prior|trim))\b + name + support.function.builtin.collection.oracle + + + match + (?i)\b(cluster_id|cluster_probability|cluster_set|feature_id|feature_set|feature_value|prediction|prediction_cost|prediction_details|prediction_probability|prediction_set)\b + name + support.function.builtin.data_mining.oracle + + + match + (?i)\b(appendchildxml|deletexml|depth|extract (xml)|existsnode|extractvalue|insertchildxml|insertxmlbefore|path|sys_dburigen|sys_xmlagg|sys_xmlgen|updatexml|xmlagg|xmlcdata|xmlcolattval|xmlcomment|xmlconcat|xmlforest|xmlparse|xmlpi|xmlquery|xmlroot|xmlsequence|xmlserialize|xmltable|xmltransform)\b + name + support.function.builtin.xml.oracle + + + match + (?i)\b(pragma\s+(autonomous_transaction|serially_reusable|restrict_refrences|exception_init|inline))\b + name + keyword.other.pragma.oracle + + captures - - 4 - - name - invalid.oracle - - - name + + 4 + + name + invalid.oracle + + + match + (?i)\b(p(?:(i|o|io))?_(\w{1,27}|(\w{28,})))\b + name variable.parameter.oracle + captures + + 5 + + name + invalid.oracle + + match - (?i)\b((c|g|v)(c|t|n|v)_(\w{1,27}|(\w{28,})))\b - captures - - 5 - - name - invalid.oracle - - + (?i)\b((l|g)_(\w{1,27}|(\w{28,})))\b name variable.standard.oracle - - match - (?i)\b(connect\s+by\s+(nocycle\s+)?(prior|level)|connect_by_(root|icycle)|level|start\s+with|)\b - name - keyword.hierarchical.sql.oracle - + + match + (?i)\b(connect\s+by\s+(nocycle\s+)?(prior|level)|connect_by_(root|icycle)|level|start\s+with|)\b + name + keyword.hierarchical.sql.oracle + match (?i)\b(end|then|deterministic|exception|when|declare|begin|in|out|nocopy|is|as|exit|open|fetch|into|close|subtype|type|rowtype|default|exclusive|mode|lock|record|index\s+by)\b @@ -256,7 +265,7 @@ match - (?i)\b(with|select|from|where|order\s+(siblings\s+)?by|group\s+by|rollup|cube|((outer|left|right)\s+)?join|asc|desc|update|set|insert|into|values|delete|from|distinct|union|minus|intersect|having|limit|table|between|like|of|all|any|exists|rownum|cursor|returning)\b + (?i)\b(with|select|from|where|order\s+(siblings\s+)?by|group\s+by|rollup|cube|((outer|left|right)\s+)?join|asc|desc|update|set|insert|into|values|delete|from|distinct|union|minus|intersect|having|limit|table|between|like|of|all|any|exists|rownum|cursor|returning)\b name keyword.other.sql.oracle @@ -267,16 +276,16 @@ support.type.exception.oracle + captures + + 3 + + name + support.class.oracle + + match (?i)\b((dbms|utl|owa)_\w+.(\w+))\b - captures - - 3 - - name - support.class.oracle - - name support.function.oracle @@ -294,52 +303,52 @@ name string.quoted.single.oracle - - begin - q'\[ - end - \]' - name - string.quoted.q.oracle - - - begin - q'\( - end - \)' - name - string.quoted.q.oracle - - - begin - q'\{ - end - \}' - name - string.quoted.q.oracle - - - begin - q'< - end - >' - name - string.quoted.q.oracle - - - begin - q'\! - end - \!' - name - string.quoted.q.oracle - - - match - (?i)\b(char|varchar2|nchar|nvarchar2|date|timestamp(\s+with(\s+local)?\s+time\s+zone)?|interval\s+(year\s+to\s+month|day\s+to\s+second)|blob|clob|nclob|bfile|long|long\s+raw|raw|number|float|binary_(float|double|integer)|pls_(float|double|integer)|rowid|urowid|vararray)\b - name - storage.type.builtin.oracle - + + begin + q'\[ + end + \]' + name + string.quoted.q.oracle + + + begin + q'\( + end + \)' + name + string.quoted.q.oracle + + + begin + q'\{ + end + \}' + name + string.quoted.q.oracle + + + begin + q'< + end + >' + name + string.quoted.q.oracle + + + begin + q'\! + end + \!' + name + string.quoted.q.oracle + + + match + (?i)\b(char|varchar2|nchar|nvarchar2|date|timestamp(\s+with(\s+local)?\s+time\s+zone)?|interval\s+(year\s+to\s+month|day\s+to\s+second)|blob|clob|nclob|bfile|long|long\s+raw|raw|number|float|binary_(float|double|integer)|pls_(float|double|integer)|rowid|urowid|vararray)\b + name + storage.type.builtin.oracle + scopeName source.plsql.oracle diff --git a/Symbol List.tmPreferences b/Symbol List.tmPreferences index a6ab06d..0c75ba7 100644 --- a/Symbol List.tmPreferences +++ b/Symbol List.tmPreferences @@ -5,7 +5,7 @@ name Symbol List scope - source.plsql.oracle meta.procedure.oracle,source.plsql.oracle meta.function.oracle, source.plsql.oracle meta.package.oracle + source.plsql.oracle meta.procedure.oracle,source.plsql.oracle meta.function.oracle, source.plsql.oracle meta.package.oracle, source.plsql.oracle meta.type.oracle settings showInSymbolList diff --git a/oracle_commands.py b/oracle_commands.py index 20eae04..a9b244c 100644 --- a/oracle_commands.py +++ b/oracle_commands.py @@ -1,6 +1,6 @@ import sublime import sublime_plugin -import oracle_lib +from . import oracle_lib class OracleGotoBodyCommand(sublime_plugin.TextCommand): From 3b29b0ff6611d58b67c7b215c995d134e93f553a Mon Sep 17 00:00:00 2001 From: mezdm Date: Fri, 31 Jan 2014 10:01:04 +0200 Subject: [PATCH 13/23] Fix build, now works with ST3. Tested on Windows --- RunSQL.sql | 23 ++++++++++++++--------- oracle_exec.py | 41 ++++++++++++++--------------------------- 2 files changed, 28 insertions(+), 36 deletions(-) diff --git a/RunSQL.sql b/RunSQL.sql index 3b1b86d..635fa6f 100644 --- a/RunSQL.sql +++ b/RunSQL.sql @@ -1,13 +1,18 @@ SET LINESIZE 2000 SET PAGESIZE 0 SET VERIFY OFF -SET FEEDBACK ON +SET FEEDBACK OFF + @&1 -show errors -SELECT 'Filename: &1' FROM DUAL; --- SELECT '(' || TYPE || ' ' || NAME || '/0:' || POSITION || ')' || ' ' || LINE || ':' || POSITION || ' ' || TEXT as ERRORS --- FROM USER_ERRORS --- WHERE line <> 0 --- AND TYPE || ' ' || NAME in (&2) --- ORDER BY NAME, TYPE, SEQUENCE; -exit + +SELECT 'Filename: &1' FROM DUAL +/ + +SELECT '(' || type || ' ' || name || '/0:' || position || ')' || ' ' || line || ':' || position || ' ' || text as errors + FROM user_errorS + WHERE line <> 0 + AND type || ' ' || name in (&2) +ORDER BY name, type, sequence +/ + +EXIT diff --git a/oracle_exec.py b/oracle_exec.py index 767bbad..b3454bd 100644 --- a/oracle_exec.py +++ b/oracle_exec.py @@ -2,12 +2,15 @@ import re import os.path from . import oracle_lib -from Default import exec as execmod +import Default.exec as execmod RE_ENTITIES = re.compile("^\\((.+?)/(0):[0-9]+\\) ([0-9]+):[0-9]+ (.+)$", re.M) + class OracleExecCommand(execmod.ExecCommand): def run(self, dsn="", **kwargs): + print(dsn) + print(kwargs) if not dsn and not kwargs.get("kill", False): # if cmd is empty, open the command_palette with the available build list self.window.run_command("show_overlay", {"overlay": "command_palette", "text": "Build: " + kwargs.get("prefix", "")}) @@ -17,39 +20,23 @@ def run(self, dsn="", **kwargs): # Create a string for the in of sql command sqlfilter = '"' + ",".join("'%s'" % entity for entity in self.entities.keys()) + '"' - # Windows - # cmd = ["sqlplus.exe", "-s", dsn, "@", os.path.join(sublime.packages_path(), 'OracleSQL', 'RunSQL.sql'), self.window.active_view().file_name(), sqlfilter] - - # UNIX/Mac - # cmd = ["sqlplus", "-s", dsn, "@", os.path.join(sublime.packages_path(), 'OracleSQL', 'RunSQL.sql'), self.window.active_view().file_name(), sqlfilter] - runsql = os.path.expanduser('~') + '/Documents/SublimeText3_OracleSQL_RunSQL.sql' - if not os.path.exists(runsql): - f = open(runsql, "w") - f.write('SET LINESIZE 2000\n') - f.write('SET PAGESIZE 0\n') - f.write('SET VERIFY OFF\n') - f.write('SET FEEDBACK ON\n') - f.write('@&1\n') - f.write('show errors\n') - #f.write('SELECT \'Filename: &1\' FROM DUAL;\n') - f.close() - cmd = ["sqlplus", "-s", dsn, "@", runsql, self.window.active_view().file_name(), sqlfilter] - - super(OracleExecCommand, self).run(cmd, "", "^Filename: (.+)$", "^\\(.+?/([0-9]+):([0-9]+)\\) [0-9]+:[0-9]+ (.+)$", **kwargs) - - def append_data(self, proc, data): + (directory, filename) = os.path.split(self.window.active_view().file_name()) + cmd = ["sqlplus.exe", "-s", dsn, "@", os.path.join(sublime.packages_path(), 'OracleSQL', 'RunSQL.sql'), '"'+filename+'"', sqlfilter] + + super(OracleExecCommand, self).run(cmd, None, "^Filename: (.+)$", "^\\(.+?/([0-9]+):([0-9]+)\\) [0-9]+:[0-9]+ (.+)$", working_dir=directory, **kwargs) + + def append_string(self, proc, data): # Update the line number of output_view with the correct line number of source view - orgstr = data.decode(self.encoding) - datastr = orgstr + orgdata = data posoffset = 0 - for re_ent in RE_ENTITIES.finditer(orgstr): + for re_ent in RE_ENTITIES.finditer(orgdata): pos = re_ent.span(2) pos = (pos[0] + posoffset, pos[1] + posoffset) sourceoffset = self.entities[re_ent.group(1)] sqlerrorline = int(re_ent.group(3)) sourceline = sqlerrorline + sourceoffset - datastr = datastr[:pos[0]] + str(sourceline) + datastr[pos[1]:] + data = data[:pos[0]] + str(sourceline) + data[pos[1]:] posoffset += len(str(sourceline)) - 1 - super(OracleExecCommand, self).append_data(proc, datastr.encode(self.encoding)) \ No newline at end of file + super(OracleExecCommand, self).append_string(proc, data) From 7579b22c3302d884d450ab147a6ba914e3b9479c Mon Sep 17 00:00:00 2001 From: Dmitry Mezhuev Date: Fri, 31 Jan 2014 10:06:51 +0200 Subject: [PATCH 14/23] Update readme.rst --- readme.rst | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/readme.rst b/readme.rst index bba1981..3b8a420 100644 --- a/readme.rst +++ b/readme.rst @@ -1,5 +1,5 @@ ========================================================= -Sublime Text 2 plackage for editing Oracle SQL and PL/SQL +Sublime Text 3 plackage for editing Oracle SQL and PL/SQL ========================================================= Language definition and execution utilities for Oracle PL/SQL files. @@ -17,28 +17,17 @@ Build To execute your PL/SQL source on your schema with ST2 Build command, you have to create a .sublime-build in your ST2 Users folder file containing something like:: { - "target": "oracle_exec", "selector": "source.plsql.oracle", - "path": "/usr/local/oracle/instantclient_10_2", - "env": - { - "ORACLE_HOME": "/usr/local/oracle/instantclient_10_2", - "DYLD_LIBRARY_PATH": "/usr/local/oracle/instantclient_10_2", - "SQLPATH": "/usr/local/oracle/instantclient_10_2", - "NLS_LANG": "AMERICAN_AMERICA.UTF8", - "TNS_ADMIN": "/usr/local/oracle/network/admin" - }, + "target": "oracle_exec", "variants": [ { - "name": "SCHEMA 1", - "dsn": "USERNAME/PASSWORD@SCHEMANAME1", - "encoding": "UTF-8" + "dsn": "USERNAME/PASSWORD@SCHEMANAME2", + "name": "COMMON SCHEMA 1" }, { - "name": "SCHEMA 2", "dsn": "USERNAME/PASSWORD@SCHEMANAME2", - "encoding": "UTF-8" + "name": "COMMON SCHEMA 2" } ] } From 9f36be7e594bfecbf932431d62019436aedcc9aa Mon Sep 17 00:00:00 2001 From: Dmitry Mezhuev Date: Fri, 31 Jan 2014 10:19:00 +0200 Subject: [PATCH 15/23] Fix plugin description --- readme.rst | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/readme.rst b/readme.rst index 3b8a420..9e63da0 100644 --- a/readme.rst +++ b/readme.rst @@ -6,15 +6,16 @@ Language definition and execution utilities for Oracle PL/SQL files. It is based on the bundle http://code.google.com/p/oracle-textmate-bundle/ + Install ----- -- Download and extract package. Rename folder from *Oracle-master* to *OracleSQL* and place in C:\\Users\\...\\AppData\\Roaming\\Sublime Text 2\\Packages\\ +- Download and extract package. Place it in C:\\Users\\...\\AppData\\Roaming\\Sublime Text 3\\Packages\\ - Install keymaps for the commands (see Example.sublime-keymap for my preferred keys) Build ----- -To execute your PL/SQL source on your schema with ST2 Build command, you have to create a .sublime-build in your ST2 Users folder file containing something like:: +To execute your PL/SQL source on your schema with ST3 Build command, you have to create a .sublime-build in your ST3 Users folder file containing something like:: { "selector": "source.plsql.oracle", @@ -32,3 +33,10 @@ To execute your PL/SQL source on your schema with ST2 Build command, you have to ] } +Some other useful settings +---- +I'm using TOAD standards iof the PLSQL file extentions. To be able to switch between package specification (.pks) and package body (.pkb) file add "pks" and "pkb" to the switch_file commant in the users keymap + + { "keys": ["alt+o"], "command": "switch_file", "args": {"extensions": ["cpp", "cxx", "cc", "c", "hpp", "hxx", "h", "ipp", "inl", "m", "mm", "pkb", "pks"]} }, + + From 1928c48aa37d31911b679958fff0bc939cbf4a08 Mon Sep 17 00:00:00 2001 From: mezdm Date: Mon, 3 Feb 2014 16:32:37 +0200 Subject: [PATCH 16/23] improve build system, add some missing keywords --- PL_SQL (Oracle).JSON-tmLanguage | 226 ++++++++++++++++++-------------- PL_SQL (Oracle).tmLanguage | 2 +- RunSQL.sql | 7 +- oracle_exec.py | 22 ++-- 4 files changed, 138 insertions(+), 119 deletions(-) diff --git a/PL_SQL (Oracle).JSON-tmLanguage b/PL_SQL (Oracle).JSON-tmLanguage index e5a5303..2f0bb69 100644 --- a/PL_SQL (Oracle).JSON-tmLanguage +++ b/PL_SQL (Oracle).JSON-tmLanguage @@ -1,5 +1,8 @@ { - "name": "PL/SQL (Oracle)", + "scopeName": "source.plsql.oracle", + "foldingStartMarker": "(?i)^\\s*(begin|if|loop)\\b", + "foldingStopMarker": "(?i)^\\s*(end)\\b", + "uuid": "28DCE4DD-F5E1-4ED3-8847-64DA6B1F9163", "fileTypes": [ "sql", "ddl", @@ -14,193 +17,216 @@ "tpb", "fk" ], - "uuid": "28DCE4DD-F5E1-4ED3-8847-64DA6B1F9163", "keyEquivalent": "^~S", - "foldingStartMarker": "(?i)^\\s*(begin|if|loop)\\b", - "foldingStopMarker": "(?i)^\\s*(end)\\b", - "scopeName": "source.plsql.oracle", "patterns": [ { + "begin": "/\\*", "name": "comment.block.oracle", - "end": "\\*/", - "begin": "/\\*" + "end": "\\*/" }, { - "name": "comment.line.double-dash.oracle", - "match": "--.*$" + "match": "--.*$", + "name": "comment.line.double-dash.oracle" }, { - "name": "meta.create.oracle", - "match": "(?i)^\\s*(create)(\\s+or\\s+replace)?\\s+", "captures": { - "1": {"name": "keyword.other.oracle"}, - "2": {"name": "keyword.other.oracle"} - } + "2": { + "name": "keyword.other.oracle" + }, + "1": { + "name": "keyword.other.oracle" + } + }, + "match": "(?i)^\\s*(create)(\\s+or\\s+replace)?\\s+", + "name": "meta.create.oracle" }, { - "name": "meta.package.oracle", - "match": "(?i)\\b(package)(\\s+body)?\\s+(\\S+)", "captures": { - "1": {"name": "keyword.other.oracle"}, - "2": {"name": "keyword.other.oracle"}, - "3": {"name": "entity.name.class.oracle"} - } + "2": { + "name": "keyword.other.oracle" + }, + "3": { + "name": "entity.name.class.oracle" + }, + "1": { + "name": "keyword.other.oracle" + } + }, + "match": "(?i)\\b(package)(\\s+body)?\\s+(\\S+)", + "name": "meta.package.oracle" }, { - "name": "meta.type.oracle", - "match": "(?i)^\\s*(type)\\s+(\\w{1,30})\\b", "captures": { - "1": {"name": "keyword.other.oracle"}, - "2": {"name": "entity.name.type.oracle"} - } + "2": { + "name": "entity.name.type.oracle" + }, + "1": { + "name": "keyword.other.oracle" + } + }, + "match": "(?i)^\\s*(type)\\s+(\\w{1,30})\\b", + "name": "meta.type.oracle" }, { - "name": "meta.function.oracle", - "match": "(?i)^\\s*(function|procedure)\\s+(\\w{1,30}|(\\w{31,}))\\b", "captures": { - "1": {"name": "storage.type.function.oracle"}, - "2": {"name": "entity.name.function.oracle"}, - "3": {"name": "invalid.oracle"} - } + "2": { + "name": "entity.name.function.oracle" + }, + "3": { + "name": "invalid.oracle" + }, + "1": { + "name": "storage.type.function.oracle" + } + }, + "match": "(?i)^\\s*(function|procedure)\\s+(\\w{1,30}|(\\w{31,}))\\b", + "name": "meta.function.oracle" }, { - "name": "keyword.operator.oracle", - "match": "[!<>:]?=|<>|<|>|\\+|(?:]?=|<>|<|>|\\+|(?'", - "begin": "q'<" + "end": ">'" }, { + "begin": "q'\\!", "name": "string.quoted.q.oracle", - "end": "\\!'", - "begin": "q'\\!" + "end": "\\!'" }, { - "name": "storage.type.builtin.oracle", - "match": "(?i)\\b(char|varchar2|nchar|nvarchar2|date|timestamp(\\s+with(\\s+local)?\\s+time\\s+zone)?|interval\\s+(year\\s+to\\s+month|day\\s+to\\s+second)|blob|clob|nclob|bfile|long|long\\s+raw|raw|number|float|binary_(float|double|integer)|pls_(float|double|integer)|rowid|urowid|vararray)\\b" + "match": "(?i)\\b(char|varchar2|nchar|nvarchar2|boolean|date|timestamp(\\s+with(\\s+local)?\\s+time\\s+zone)?|interval\\s+(year\\s+to\\s+month|day\\s+to\\s+second)|blob|clob|nclob|bfile|long|long\\s+raw|raw|number|integer|float|binary_(float|double|integer)|pls_(float|double|integer)|rowid|urowid|vararray)\\b", + "name": "storage.type.builtin.oracle" } - ] + ], + "name": "PL/SQL (Oracle)" } \ No newline at end of file diff --git a/PL_SQL (Oracle).tmLanguage b/PL_SQL (Oracle).tmLanguage index bdb46e6..9877037 100644 --- a/PL_SQL (Oracle).tmLanguage +++ b/PL_SQL (Oracle).tmLanguage @@ -345,7 +345,7 @@ match - (?i)\b(char|varchar2|nchar|nvarchar2|date|timestamp(\s+with(\s+local)?\s+time\s+zone)?|interval\s+(year\s+to\s+month|day\s+to\s+second)|blob|clob|nclob|bfile|long|long\s+raw|raw|number|float|binary_(float|double|integer)|pls_(float|double|integer)|rowid|urowid|vararray)\b + (?i)\b(char|varchar2|nchar|nvarchar2|boolean|date|timestamp(\s+with(\s+local)?\s+time\s+zone)?|interval\s+(year\s+to\s+month|day\s+to\s+second)|blob|clob|nclob|bfile|long|long\s+raw|raw|number|integer|float|binary_(float|double|integer)|pls_(float|double|integer)|rowid|urowid|vararray)\b name storage.type.builtin.oracle diff --git a/RunSQL.sql b/RunSQL.sql index 635fa6f..62cb3b9 100644 --- a/RunSQL.sql +++ b/RunSQL.sql @@ -8,11 +8,6 @@ SET FEEDBACK OFF SELECT 'Filename: &1' FROM DUAL / -SELECT '(' || type || ' ' || name || '/0:' || position || ')' || ' ' || line || ':' || position || ' ' || text as errors - FROM user_errorS - WHERE line <> 0 - AND type || ' ' || name in (&2) -ORDER BY name, type, sequence -/ +SHOW ERRORS EXIT diff --git a/oracle_exec.py b/oracle_exec.py index b3454bd..8710904 100644 --- a/oracle_exec.py +++ b/oracle_exec.py @@ -9,34 +9,32 @@ class OracleExecCommand(execmod.ExecCommand): def run(self, dsn="", **kwargs): - print(dsn) - print(kwargs) if not dsn and not kwargs.get("kill", False): # if cmd is empty, open the command_palette with the available build list self.window.run_command("show_overlay", {"overlay": "command_palette", "text": "Build: " + kwargs.get("prefix", "")}) else: # Find entities declaration in source self.entities = oracle_lib.find_entities(self.window.active_view()) - # Create a string for the in of sql command - sqlfilter = '"' + ",".join("'%s'" % entity for entity in self.entities.keys()) + '"' (directory, filename) = os.path.split(self.window.active_view().file_name()) - cmd = ["sqlplus.exe", "-s", dsn, "@", os.path.join(sublime.packages_path(), 'OracleSQL', 'RunSQL.sql'), '"'+filename+'"', sqlfilter] + cmd = ["sqlplus", "-s", dsn, "@", os.path.join(sublime.packages_path(), 'OracleSQL', 'RunSQL.sql'), '"'+filename+'"'] - super(OracleExecCommand, self).run(cmd, None, "^Filename: (.+)$", "^\\(.+?/([0-9]+):([0-9]+)\\) [0-9]+:[0-9]+ (.+)$", working_dir=directory, **kwargs) + super(OracleExecCommand, self).run(cmd, None, "^Filename: (.+)$", "^([0-9]+)/([0-9]+) (.+)$", working_dir=directory, **kwargs) - def append_string(self, proc, data): - # Update the line number of output_view with the correct line number of source view - orgdata = data + def append_string(self, proc, string): + """ Update the line number of output_view with the correct line number of source view + """ + orgstring = string posoffset = 0 - for re_ent in RE_ENTITIES.finditer(orgdata): + + for re_ent in RE_ENTITIES.finditer(orgstring): pos = re_ent.span(2) pos = (pos[0] + posoffset, pos[1] + posoffset) sourceoffset = self.entities[re_ent.group(1)] sqlerrorline = int(re_ent.group(3)) sourceline = sqlerrorline + sourceoffset - data = data[:pos[0]] + str(sourceline) + data[pos[1]:] + string = string[:pos[0]] + str(sourceline) + string[pos[1]:] posoffset += len(str(sourceline)) - 1 - super(OracleExecCommand, self).append_string(proc, data) + super(OracleExecCommand, self).append_string(proc, string) From 5b6d3bce22b549bd925ee322996a95c1d5dff6c7 Mon Sep 17 00:00:00 2001 From: mezdm Date: Tue, 4 Feb 2014 16:40:38 +0200 Subject: [PATCH 17/23] Fix some syntax problems ome high Please enter the commit message for your changes. Lines starting --- PL_SQL (Oracle).JSON-tmLanguage | 6 +++--- PL_SQL (Oracle).tmLanguage | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/PL_SQL (Oracle).JSON-tmLanguage b/PL_SQL (Oracle).JSON-tmLanguage index 2f0bb69..ee2c5a1 100644 --- a/PL_SQL (Oracle).JSON-tmLanguage +++ b/PL_SQL (Oracle).JSON-tmLanguage @@ -143,7 +143,7 @@ "name": "support.function.builtin.xml.oracle" }, { - "match": "(?i)\\b(pragma\\s+(autonomous_transaction|serially_reusable|restrict_refrences|exception_init|inline))\\b", + "match": "(?i)\\b(pragma\\s+(autonomous_transaction|serially_reusable|restrict_references|exception_init|inline))\\b", "name": "keyword.other.pragma.oracle" }, { @@ -169,11 +169,11 @@ "name": "keyword.hierarchical.sql.oracle" }, { - "match": "(?i)\\b(end|then|deterministic|exception|when|declare|begin|in|out|nocopy|is|as|exit|open|fetch|into|close|subtype|type|rowtype|default|exclusive|mode|lock|record|index\\s+by)\\b", + "match": "(?i)\\b(end|then|deterministic|exception|when|declare|begin|in|out|nocopy|is|as|exit|open|fetch|into|close|subtype|type|rowtype|default|exclusive|mode|lock|record|index\\s+by|result_cache)\\b", "name": "keyword.other.oracle" }, { - "match": "(?i)\\b(with|select|from|where|order\\s+(siblings\\s+)?by|group\\s+by|rollup|cube|((outer|left|right)\\s+)?join|asc|desc|update|set|insert|into|values|delete|from|distinct|union|minus|intersect|having|limit|table|between|like|of|all|any|exists|rownum|cursor|returning)\\b", + "match": "(?i)\\b(with|select|from|where|order\\s+(siblings\\s+)?by|group\\s+by|rollup|cube|((left|right|cross)\\s+(outer\\s+)?)?join|on|asc|desc|update|set|insert|into|values|delete|from|distinct|union|minus|intersect|having|limit|table|between|like|of|all|any|exists|rownum|cursor|returning)\\b", "name": "keyword.other.sql.oracle" }, { diff --git a/PL_SQL (Oracle).tmLanguage b/PL_SQL (Oracle).tmLanguage index 9877037..fa562bd 100644 --- a/PL_SQL (Oracle).tmLanguage +++ b/PL_SQL (Oracle).tmLanguage @@ -219,7 +219,7 @@ match - (?i)\b(pragma\s+(autonomous_transaction|serially_reusable|restrict_refrences|exception_init|inline))\b + (?i)\b(pragma\s+(autonomous_transaction|serially_reusable|restrict_references|exception_init|inline))\b name keyword.other.pragma.oracle @@ -259,13 +259,13 @@ match - (?i)\b(end|then|deterministic|exception|when|declare|begin|in|out|nocopy|is|as|exit|open|fetch|into|close|subtype|type|rowtype|default|exclusive|mode|lock|record|index\s+by)\b + (?i)\b(end|then|deterministic|exception|when|declare|begin|in|out|nocopy|is|as|exit|open|fetch|into|close|subtype|type|rowtype|default|exclusive|mode|lock|record|index\s+by|result_cache)\b name keyword.other.oracle match - (?i)\b(with|select|from|where|order\s+(siblings\s+)?by|group\s+by|rollup|cube|((outer|left|right)\s+)?join|asc|desc|update|set|insert|into|values|delete|from|distinct|union|minus|intersect|having|limit|table|between|like|of|all|any|exists|rownum|cursor|returning)\b + (?i)\b(with|select|from|where|order\s+(siblings\s+)?by|group\s+by|rollup|cube|((left|right|cross)\s+(outer\s+)?)?join|on|asc|desc|update|set|insert|into|values|delete|from|distinct|union|minus|intersect|having|limit|table|between|like|of|all|any|exists|rownum|cursor|returning)\b name keyword.other.sql.oracle From 5740b446120fbc93027c30b6e568400786f810d2 Mon Sep 17 00:00:00 2001 From: mezdm Date: Wed, 12 Feb 2014 16:38:10 +0200 Subject: [PATCH 18/23] Fix description --- readme.rst => readme.md | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) rename readme.rst => readme.md (72%) diff --git a/readme.rst b/readme.md similarity index 72% rename from readme.rst rename to readme.md index 9e63da0..8437035 100644 --- a/readme.rst +++ b/readme.md @@ -1,23 +1,17 @@ -========================================================= -Sublime Text 3 plackage for editing Oracle SQL and PL/SQL -========================================================= +# Sublime Text 3 pkackage for editing Oracle SQL and PL/SQL Language definition and execution utilities for Oracle PL/SQL files. - It is based on the bundle http://code.google.com/p/oracle-textmate-bundle/ - -Install ------ +## Install - Download and extract package. Place it in C:\\Users\\...\\AppData\\Roaming\\Sublime Text 3\\Packages\\ - Install keymaps for the commands (see Example.sublime-keymap for my preferred keys) -Build ------ - +## Build To execute your PL/SQL source on your schema with ST3 Build command, you have to create a .sublime-build in your ST3 Users folder file containing something like:: - { +```json + { "selector": "source.plsql.oracle", "target": "oracle_exec", "variants": @@ -32,11 +26,19 @@ To execute your PL/SQL source on your schema with ST3 Build command, you have to } ] } +``` -Some other useful settings ----- +## Some other useful settings I'm using TOAD standards iof the PLSQL file extentions. To be able to switch between package specification (.pks) and package body (.pkb) file add "pks" and "pkb" to the switch_file commant in the users keymap - { "keys": ["alt+o"], "command": "switch_file", "args": {"extensions": ["cpp", "cxx", "cc", "c", "hpp", "hxx", "h", "ipp", "inl", "m", "mm", "pkb", "pks"]} }, +```json +{ + "keys": ["alt+o"], + "command": "switch_file", + "args": { + "extensions": ["cpp", "cxx", "cc", "c", "hpp", "hxx", "h", "ipp", "inl", "m", "mm", "pkb", "pks"] + } +} +``` From 678fe0b049188c1b0cf5b8990df9b2e8e564344c Mon Sep 17 00:00:00 2001 From: mezdm Date: Wed, 12 Feb 2014 16:39:53 +0200 Subject: [PATCH 19/23] Fix in comment definition, compatibility with DocBlockr plugin --- PL_SQL (Oracle).JSON-tmLanguage | 178 ++++++++++++++++---------------- PL_SQL (Oracle).tmLanguage | 2 +- 2 files changed, 90 insertions(+), 90 deletions(-) diff --git a/PL_SQL (Oracle).JSON-tmLanguage b/PL_SQL (Oracle).JSON-tmLanguage index ee2c5a1..24f6580 100644 --- a/PL_SQL (Oracle).JSON-tmLanguage +++ b/PL_SQL (Oracle).JSON-tmLanguage @@ -1,8 +1,8 @@ { - "scopeName": "source.plsql.oracle", - "foldingStartMarker": "(?i)^\\s*(begin|if|loop)\\b", "foldingStopMarker": "(?i)^\\s*(end)\\b", "uuid": "28DCE4DD-F5E1-4ED3-8847-64DA6B1F9163", + "foldingStartMarker": "(?i)^\\s*(begin|if|loop)\\b", + "scopeName": "source.plsql.oracle", "fileTypes": [ "sql", "ddl", @@ -17,216 +17,216 @@ "tpb", "fk" ], + "name": "PL/SQL (Oracle)", "keyEquivalent": "^~S", "patterns": [ { - "begin": "/\\*", "name": "comment.block.oracle", - "end": "\\*/" + "end": "\\*/", + "begin": "/\\*" }, { - "match": "--.*$", - "name": "comment.line.double-dash.oracle" + "name": "comment.line.double-dash.oracle", + "match": "(--).*$\\n?" }, { + "name": "meta.create.oracle", "captures": { - "2": { + "1": { "name": "keyword.other.oracle" }, - "1": { + "2": { "name": "keyword.other.oracle" } }, - "match": "(?i)^\\s*(create)(\\s+or\\s+replace)?\\s+", - "name": "meta.create.oracle" + "match": "(?i)^\\s*(create)(\\s+or\\s+replace)?\\s+" }, { + "name": "meta.package.oracle", "captures": { + "1": { + "name": "keyword.other.oracle" + }, "2": { "name": "keyword.other.oracle" }, "3": { "name": "entity.name.class.oracle" - }, - "1": { - "name": "keyword.other.oracle" } }, - "match": "(?i)\\b(package)(\\s+body)?\\s+(\\S+)", - "name": "meta.package.oracle" + "match": "(?i)\\b(package)(\\s+body)?\\s+(\\S+)" }, { + "name": "meta.type.oracle", "captures": { - "2": { - "name": "entity.name.type.oracle" - }, "1": { "name": "keyword.other.oracle" + }, + "2": { + "name": "entity.name.type.oracle" } }, - "match": "(?i)^\\s*(type)\\s+(\\w{1,30})\\b", - "name": "meta.type.oracle" + "match": "(?i)^\\s*(type)\\s+(\\w{1,30})\\b" }, { + "name": "meta.function.oracle", "captures": { + "1": { + "name": "storage.type.function.oracle" + }, "2": { "name": "entity.name.function.oracle" }, "3": { "name": "invalid.oracle" - }, - "1": { - "name": "storage.type.function.oracle" } }, - "match": "(?i)^\\s*(function|procedure)\\s+(\\w{1,30}|(\\w{31,}))\\b", - "name": "meta.function.oracle" + "match": "(?i)^\\s*(function|procedure)\\s+(\\w{1,30}|(\\w{31,}))\\b" }, { - "match": "[!<>:]?=|<>|<|>|\\+|(?:]?=|<>|<|>|\\+|(?'" + "end": ">'", + "begin": "q'<" }, { - "begin": "q'\\!", "name": "string.quoted.q.oracle", - "end": "\\!'" + "end": "\\!'", + "begin": "q'\\!" }, { - "match": "(?i)\\b(char|varchar2|nchar|nvarchar2|boolean|date|timestamp(\\s+with(\\s+local)?\\s+time\\s+zone)?|interval\\s+(year\\s+to\\s+month|day\\s+to\\s+second)|blob|clob|nclob|bfile|long|long\\s+raw|raw|number|integer|float|binary_(float|double|integer)|pls_(float|double|integer)|rowid|urowid|vararray)\\b", - "name": "storage.type.builtin.oracle" + "name": "storage.type.builtin.oracle", + "match": "(?i)\\b(char|varchar2|nchar|nvarchar2|boolean|date|timestamp(\\s+with(\\s+local)?\\s+time\\s+zone)?|interval\\s+(year\\s+to\\s+month|day\\s+to\\s+second)|blob|clob|nclob|bfile|long|long\\s+raw|raw|number|integer|float|binary_(float|double|integer)|pls_(float|double|integer)|rowid|urowid|vararray)\\b" } - ], - "name": "PL/SQL (Oracle)" + ] } \ No newline at end of file diff --git a/PL_SQL (Oracle).tmLanguage b/PL_SQL (Oracle).tmLanguage index fa562bd..bab37a4 100644 --- a/PL_SQL (Oracle).tmLanguage +++ b/PL_SQL (Oracle).tmLanguage @@ -37,7 +37,7 @@ match - --.*$ + (--).*$\n? name comment.line.double-dash.oracle From 1922541df8351168ae6132aece6a9efaf7056a4c Mon Sep 17 00:00:00 2001 From: mezdm Date: Mon, 17 Feb 2014 11:53:44 +0200 Subject: [PATCH 20/23] Remove and ignore JSON syntax definition file --- .gitignore | 1 + PL_SQL (Oracle).JSON-tmLanguage | 232 -------------------------------- 2 files changed, 1 insertion(+), 232 deletions(-) delete mode 100644 PL_SQL (Oracle).JSON-tmLanguage diff --git a/.gitignore b/.gitignore index 7a9ecf2..3095372 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.cache *.pyc +*.JSON-tmLanguage .DS_Store package-metadata.json \ No newline at end of file diff --git a/PL_SQL (Oracle).JSON-tmLanguage b/PL_SQL (Oracle).JSON-tmLanguage deleted file mode 100644 index 24f6580..0000000 --- a/PL_SQL (Oracle).JSON-tmLanguage +++ /dev/null @@ -1,232 +0,0 @@ -{ - "foldingStopMarker": "(?i)^\\s*(end)\\b", - "uuid": "28DCE4DD-F5E1-4ED3-8847-64DA6B1F9163", - "foldingStartMarker": "(?i)^\\s*(begin|if|loop)\\b", - "scopeName": "source.plsql.oracle", - "fileTypes": [ - "sql", - "ddl", - "dml", - "pks", - "pkb", - "prc", - "fnc", - "vw", - "trg", - "tps", - "tpb", - "fk" - ], - "name": "PL/SQL (Oracle)", - "keyEquivalent": "^~S", - "patterns": [ - { - "name": "comment.block.oracle", - "end": "\\*/", - "begin": "/\\*" - }, - { - "name": "comment.line.double-dash.oracle", - "match": "(--).*$\\n?" - }, - { - "name": "meta.create.oracle", - "captures": { - "1": { - "name": "keyword.other.oracle" - }, - "2": { - "name": "keyword.other.oracle" - } - }, - "match": "(?i)^\\s*(create)(\\s+or\\s+replace)?\\s+" - }, - { - "name": "meta.package.oracle", - "captures": { - "1": { - "name": "keyword.other.oracle" - }, - "2": { - "name": "keyword.other.oracle" - }, - "3": { - "name": "entity.name.class.oracle" - } - }, - "match": "(?i)\\b(package)(\\s+body)?\\s+(\\S+)" - }, - { - "name": "meta.type.oracle", - "captures": { - "1": { - "name": "keyword.other.oracle" - }, - "2": { - "name": "entity.name.type.oracle" - } - }, - "match": "(?i)^\\s*(type)\\s+(\\w{1,30})\\b" - }, - { - "name": "meta.function.oracle", - "captures": { - "1": { - "name": "storage.type.function.oracle" - }, - "2": { - "name": "entity.name.function.oracle" - }, - "3": { - "name": "invalid.oracle" - } - }, - "match": "(?i)^\\s*(function|procedure)\\s+(\\w{1,30}|(\\w{31,}))\\b" - }, - { - "name": "keyword.operator.oracle", - "match": "[!<>:]?=|<>|<|>|\\+|(?'", - "begin": "q'<" - }, - { - "name": "string.quoted.q.oracle", - "end": "\\!'", - "begin": "q'\\!" - }, - { - "name": "storage.type.builtin.oracle", - "match": "(?i)\\b(char|varchar2|nchar|nvarchar2|boolean|date|timestamp(\\s+with(\\s+local)?\\s+time\\s+zone)?|interval\\s+(year\\s+to\\s+month|day\\s+to\\s+second)|blob|clob|nclob|bfile|long|long\\s+raw|raw|number|integer|float|binary_(float|double|integer)|pls_(float|double|integer)|rowid|urowid|vararray)\\b" - } - ] -} \ No newline at end of file From d0b3c75e02daec48e7ada14a16a83810a2f3b37d Mon Sep 17 00:00:00 2001 From: mezdm Date: Mon, 17 Feb 2014 11:54:35 +0200 Subject: [PATCH 21/23] Add some missing keywords --- PL_SQL (Oracle).tmLanguage | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PL_SQL (Oracle).tmLanguage b/PL_SQL (Oracle).tmLanguage index bab37a4..c747802 100644 --- a/PL_SQL (Oracle).tmLanguage +++ b/PL_SQL (Oracle).tmLanguage @@ -165,7 +165,7 @@ match - (?i)\b(avg|collect|corr|corr_\w+|count|covar_(pop|samp)|cume_dist|dense_rank|first|group_id|grouping|grouping_id|last|max|median|min|percentile_cont|percentile_disc|percent_rank|rank|regr_\w+|stats_binomial_test|stats_crosstab|stats_f_test|stats_ks_test|stats_mode|stats_mw_test|stats_one_way_anova|stats_t_test_\w+|stats_wsr_test|stddev|stddev_pop|stddev_samp|sum|var_pop|var_samp|variance)\b + (?i)\b(avg|collect|corr|corr_\w+|count|covar_(pop|samp)|cume_dist|dense_rank|first|group_id|grouping|grouping_id|last|max|median|min|percentile_cont|percentile_disc|percent_rank|rank|regr_\w+|row_number|stats_binomial_test|stats_crosstab|stats_f_test|stats_ks_test|stats_mode|stats_mw_test|stats_one_way_anova|stats_t_test_\w+|stats_wsr_test|stddev|stddev_pop|stddev_samp|sum|var_pop|var_samp|variance)\b name support.function.builtin.aggregate.oracle @@ -265,7 +265,7 @@ match - (?i)\b(with|select|from|where|order\s+(siblings\s+)?by|group\s+by|rollup|cube|((left|right|cross)\s+(outer\s+)?)?join|on|asc|desc|update|set|insert|into|values|delete|from|distinct|union|minus|intersect|having|limit|table|between|like|of|all|any|exists|rownum|cursor|returning)\b + (?i)\b(with|select|from|where|order\s+(siblings\s+)?by|group\s+by|rollup|cube|((left|right|cross)\s+(outer\s+)?)?join|on|asc|desc|update|set|insert|into|values|delete|from|distinct|union|minus|intersect|having|limit|table|between|like|of|all|any|exists|rownum|cursor|returning|over|partition\s+by|)\b name keyword.other.sql.oracle From 04ea57b08065107fd90c3b02c4a98d61a15c6e82 Mon Sep 17 00:00:00 2001 From: mezdm Date: Wed, 21 Oct 2015 15:17:10 +0300 Subject: [PATCH 22/23] Fix path --- oracle_exec.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oracle_exec.py b/oracle_exec.py index 8710904..638ebe2 100644 --- a/oracle_exec.py +++ b/oracle_exec.py @@ -17,7 +17,7 @@ def run(self, dsn="", **kwargs): self.entities = oracle_lib.find_entities(self.window.active_view()) (directory, filename) = os.path.split(self.window.active_view().file_name()) - cmd = ["sqlplus", "-s", dsn, "@", os.path.join(sublime.packages_path(), 'OracleSQL', 'RunSQL.sql'), '"'+filename+'"'] + cmd = ["sqlplus", "-s", dsn, "@", os.path.join(sublime.packages_path(), 'OraclePLSQL', 'RunSQL.sql'), '"'+filename+'"'] super(OracleExecCommand, self).run(cmd, None, "^Filename: (.+)$", "^([0-9]+)/([0-9]+) (.+)$", working_dir=directory, **kwargs) From fec4291b2f4406043022aec081a12fc6605c2751 Mon Sep 17 00:00:00 2001 From: mezdm Date: Fri, 16 Dec 2016 15:11:29 +0200 Subject: [PATCH 23/23] Fix syntax --- PL_SQL (Oracle).JSON-tmLanguage.bak | 232 ++++++++++++++++++ PL_SQL (Oracle).sublime-syntax | 175 ++++++++++++++ PL_SQL (Oracle).tmLanguage | 349 --------------------------- PL_SQL (Oracle).tmLanguage.bak | 358 ++++++++++++++++++++++++++++ RunSQL.sql | 18 +- Symbol List.tmPreferences | 2 +- oracle_commands.py | 2 +- oracle_exec.py | 47 ++-- 8 files changed, 792 insertions(+), 391 deletions(-) create mode 100644 PL_SQL (Oracle).JSON-tmLanguage.bak create mode 100644 PL_SQL (Oracle).sublime-syntax delete mode 100644 PL_SQL (Oracle).tmLanguage create mode 100644 PL_SQL (Oracle).tmLanguage.bak diff --git a/PL_SQL (Oracle).JSON-tmLanguage.bak b/PL_SQL (Oracle).JSON-tmLanguage.bak new file mode 100644 index 0000000..ee2c5a1 --- /dev/null +++ b/PL_SQL (Oracle).JSON-tmLanguage.bak @@ -0,0 +1,232 @@ +{ + "scopeName": "source.plsql.oracle", + "foldingStartMarker": "(?i)^\\s*(begin|if|loop)\\b", + "foldingStopMarker": "(?i)^\\s*(end)\\b", + "uuid": "28DCE4DD-F5E1-4ED3-8847-64DA6B1F9163", + "fileTypes": [ + "sql", + "ddl", + "dml", + "pks", + "pkb", + "prc", + "fnc", + "vw", + "trg", + "tps", + "tpb", + "fk" + ], + "keyEquivalent": "^~S", + "patterns": [ + { + "begin": "/\\*", + "name": "comment.block.oracle", + "end": "\\*/" + }, + { + "match": "--.*$", + "name": "comment.line.double-dash.oracle" + }, + { + "captures": { + "2": { + "name": "keyword.other.oracle" + }, + "1": { + "name": "keyword.other.oracle" + } + }, + "match": "(?i)^\\s*(create)(\\s+or\\s+replace)?\\s+", + "name": "meta.create.oracle" + }, + { + "captures": { + "2": { + "name": "keyword.other.oracle" + }, + "3": { + "name": "entity.name.class.oracle" + }, + "1": { + "name": "keyword.other.oracle" + } + }, + "match": "(?i)\\b(package)(\\s+body)?\\s+(\\S+)", + "name": "meta.package.oracle" + }, + { + "captures": { + "2": { + "name": "entity.name.type.oracle" + }, + "1": { + "name": "keyword.other.oracle" + } + }, + "match": "(?i)^\\s*(type)\\s+(\\w{1,30})\\b", + "name": "meta.type.oracle" + }, + { + "captures": { + "2": { + "name": "entity.name.function.oracle" + }, + "3": { + "name": "invalid.oracle" + }, + "1": { + "name": "storage.type.function.oracle" + } + }, + "match": "(?i)^\\s*(function|procedure)\\s+(\\w{1,30}|(\\w{31,}))\\b", + "name": "meta.function.oracle" + }, + { + "match": "[!<>:]?=|<>|<|>|\\+|(?'" + }, + { + "begin": "q'\\!", + "name": "string.quoted.q.oracle", + "end": "\\!'" + }, + { + "match": "(?i)\\b(char|varchar2|nchar|nvarchar2|boolean|date|timestamp(\\s+with(\\s+local)?\\s+time\\s+zone)?|interval\\s+(year\\s+to\\s+month|day\\s+to\\s+second)|blob|clob|nclob|bfile|long|long\\s+raw|raw|number|integer|float|binary_(float|double|integer)|pls_(float|double|integer)|rowid|urowid|vararray)\\b", + "name": "storage.type.builtin.oracle" + } + ], + "name": "PL/SQL (Oracle)" +} \ No newline at end of file diff --git a/PL_SQL (Oracle).sublime-syntax b/PL_SQL (Oracle).sublime-syntax new file mode 100644 index 0000000..ddb25cf --- /dev/null +++ b/PL_SQL (Oracle).sublime-syntax @@ -0,0 +1,175 @@ +%YAML 1.2 +--- +# http://www.sublimetext.com/docs/3/syntax.html +name: PL/SQL (Oracle) +file_extensions: + - sql + - ddl + - dml + - pks + - pkb + - prc + - fnc + - vw + - trg + - tps + - tpb + - fk + +scope: source.plsql.oracle +contexts: + main: + - match: /\* + push: + - meta_scope: comment.block.oracle + - match: \*/ + pop: true + + - match: "--.*$" + scope: comment.line.double-dash.oracle + + - match: (?i)^\s*(create)(\s+or\s+replace)?\s+ + scope: meta.create.oracle + captures: + 1: keyword.other.oracle + 2: keyword.other.oracle + + - match: (?i)\b(package)(\s+body)?\s+(\S+) + scope: meta.package.oracle + captures: + 1: keyword.other.oracle + 2: keyword.other.oracle + 3: entity.name.class.oracle + + - match: '(?i)^\s*(type)\s+(\w{1,30})\b' + scope: meta.type.oracle + captures: + 1: keyword.other.oracle + 2: entity.name.type.oracle + + - match: '(?i)^\s*(function|procedure)\s+(\w{1,30}|(\w{31,}))\b' + scope: meta.function.oracle + captures: + 1: storage.type.function.oracle + 2: entity.name.function.oracle + 3: invalid.oracle + + - match: '[!<>:]?=|<>|<|>|\+|(?'" + pop: true + + - match: q'\! + push: + - meta_scope: string.quoted.q.oracle + - match: \!' + pop: true + diff --git a/PL_SQL (Oracle).tmLanguage b/PL_SQL (Oracle).tmLanguage deleted file mode 100644 index 912a0fd..0000000 --- a/PL_SQL (Oracle).tmLanguage +++ /dev/null @@ -1,349 +0,0 @@ - - - - - fileTypes - - sql - ddl - dml - - foldingStartMarker - (?i)^\s*(begin|if|loop)\b - foldingStopMarker - (?i)^\s*(end)\b - keyEquivalent - ^~S - name - PL/SQL (Oracle) - patterns - - - begin - /\* - end - \*/ - name - comment.block.oracle - - - match - --.*$ - name - comment.line.double-dash.oracle - - - captures - - 1 - - name - keyword.other.oracle - - 2 - - name - keyword.other.oracle - - - match - (?i)^\s*(create)(\s+or\s+replace)?\s+ - name - meta.create.oracle - - - captures - - 1 - - name - keyword.other.oracle - - 2 - - name - keyword.other.oracle - - 3 - - name - entity.name.class.oracle - - - match - (?i)\b(package)(\s+body)?\s+(\S+) - name - meta.package.oracle - - - captures - - 1 - - name - keyword.other.oracle - - 2 - - name - entity.name.type.oracle - - - match - (?i)\b(type)\s+"([^"]+)" - name - meta.type.oracle - - - captures - - 1 - - name - storage.type.function.oracle - - 2 - - name - entity.name.function.oracle - - 3 - - name - invalid.oracle - - - match - (?i)^\s*(function|procedure)\s+(\w{1,30}|(\w{31,}))\b - name - meta.function.oracle - - - match - [!<>:]?=|<>|<|>|\+|(?<!\.)\*|-|(?<!^)/|\|\| - name - keyword.operator.oracle - - - match - (?i)\b(true|false|null)\b - name - constant.language.oracle - - - match - \b\d+(\.\d+)?\b - name - constant.numeric.oracle - - - match - (?i)\b(if|elsif|else|loop|for|while|case|end\s+case|continue|goto|return)\b - name - keyword.control.oracle - - - match - (?i)\b(or|and|not|like)\b - name - keyword.operator.oracle - - - match - (?i)\b(sysdate|%(isopen|found|notfound|rowcount)|commit|rollback|sqlerrm|sql|sqlcode)\b - name - support.function.builtin.other.oracle - - - match - (?i)\b(avg|collect|corr|corr_\w+|count|covar_(pop|samp)|cume_dist|dense_rank|first|group_id|grouping|grouping_id|last|max|median|min|percentile_cont|percentile_disc|percent_rank|rank|regr_\w+|stats_binomial_test|stats_crosstab|stats_f_test|stats_ks_test|stats_mode|stats_mw_test|stats_one_way_anova|stats_t_test_\w+|stats_wsr_test|stddev|stddev_pop|stddev_samp|sum|var_pop|var_samp|variance)\b - name - support.function.builtin.aggregate.oracle - - - match - (?i)\b(ascii|asciistr|chr|compose|concat|convert|decompose|dump|initcap|instr|instrb|instrc|instr2|instr4|length|lengthb|lengthc|length2|length4|lower|lpad|ltrim|nchr|replace|rpad|rtrim|soundex|substr|translate|trim|upper|vsize)\b - name - support.function.builtin.char.oracle - - - match - (?i)\b(add_months|current_date|current_timestamp|dbtimezone|from_tz|last_day|localtimestamp|months_between|new_time|next_day|round|sessiontimezone|sysdate|to_date|trunc|tz_offset|systimestamp|to_char)\b - name - support.function.builtin.date.oracle - - - match - (?i)\b(bfilename|cardinality|coalesce|decode|empty_(blob|clob)|group_id|lag|lead|listagg|lnnvl|nanvl|nullif|nvl|nvl2|sys_(context|guid|typeid)|uid|user|userenv|cardinality|collect|powermultiset(_by_cardinality)?|set|dump|ora_hash|vsize)\b - name - support.function.builtin.advanced.oracle - - - match - (?i)\b(bin_to_num|cast|chartorowid|from_tz|hextoraw|numtodsinterval|numtoyminterval|rawtohex|to_char|to_clob|to_date|to_dsinterval|to_lob|to_multi_byte|to_nclob|to_number|to_single_byte|to_timestamp|to_timestamp_tz|to_yminterval)\b - name - support.function.builtin.convert.oracle - - - match - (?i)\b(abs|acos|asin|atan|atan2|avg|bin_to_num|bit_(and|or|xor)|ceil|corr|cos|cosh|covar_pop|covar_samp|count|cume_dist|dense_rank|exp|extract|floor|greatest|least|ln|log|max|median|min|mod|power|rank|remainder|round|sign|sin|sinh|sqrt|stddev|sum|tan|tanh|trunc|var_pop|var_samp|variance)\b - name - support.function.builtin.math.oracle - - - match - (?i)\b(\.(count|delete|exists|extend|first|last|limit|next|prior|trim))\b - name - support.function.builtin.collection.oracle - - - match - (?i)\b(cluster_id|cluster_probability|cluster_set|feature_id|feature_set|feature_value|prediction|prediction_cost|prediction_details|prediction_probability|prediction_set)\b - name - support.function.builtin.data_mining.oracle - - - match - (?i)\b(appendchildxml|deletexml|depth|extract (xml)|existsnode|extractvalue|insertchildxml|insertxmlbefore|path|sys_dburigen|sys_xmlagg|sys_xmlgen|updatexml|xmlagg|xmlcdata|xmlcolattval|xmlcomment|xmlconcat|xmlforest|xmlparse|xmlpi|xmlquery|xmlroot|xmlsequence|xmlserialize|xmltable|xmltransform)\b - name - support.function.builtin.xml.oracle - - - match - (?i)\b(pragma\s+(autonomous_transaction|serially_reusable|restrict_refrences|exception_init|inline))\b - name - keyword.other.pragma.oracle - - - match - (?i)\b((i|o|io)p_(\w{1,27}|(\w{28,})))\b - captures - - 4 - - name - invalid.oracle - - - name - variable.parameter.oracle - - - match - (?i)\b((c|g|v)(c|t|n|v)_(\w{1,27}|(\w{28,})))\b - captures - - 5 - - name - invalid.oracle - - - name - variable.standard.oracle - - - match - (?i)\b(connect\s+by\s+(nocycle\s+)?(prior|level)|connect_by_(root|icycle)|level|start\s+with|)\b - name - keyword.hierarchical.sql.oracle - - - match - (?i)\b(end|then|deterministic|exception|when|declare|begin|in|out|nocopy|is|as|exit|open|fetch|into|close|subtype|type|rowtype|default|exclusive|mode|lock|record|index\s+by)\b - name - keyword.other.oracle - - - match - (?i)\b(with|select|from|where|order\s+(siblings\s+)?by|group\s+by|rollup|cube|((outer|left|right)\s+)?join|asc|desc|update|set|insert|into|values|delete|from|distinct|union|minus|intersect|having|limit|table|between|like|of|all|any|exists|rownum|cursor|returning)\b - name - keyword.other.sql.oracle - - - match - (?i)\b(access_into_null|case_not_found|collection_is_null|cursor_already_open|dup_val_on_index|invalid_cursor|invalid_number|login_denied|no_data_found|not_logged_on|program_error|rowtype_mismatch|self_is_null|storage_error|subscript_beyond_count|subscript_outside_limit|sys_invalid_rowid|timeout_on_resource|too_many_rows|value_error|zero_divide|others)\b - name - support.type.exception.oracle - - - match - (?i)\b((dbms|utl|owa)_\w+.(\w+))\b - captures - - 3 - - name - support.class.oracle - - - name - support.function.oracle - - - match - (?i)\b(raise|raise_application_error)\b - name - support.function.oracle - - - begin - ' - end - ' - name - string.quoted.single.oracle - - - begin - q'\[ - end - \]' - name - string.quoted.q.oracle - - - begin - q'\( - end - \)' - name - string.quoted.q.oracle - - - begin - q'\{ - end - \}' - name - string.quoted.q.oracle - - - begin - q'< - end - >' - name - string.quoted.q.oracle - - - begin - q'\! - end - \!' - name - string.quoted.q.oracle - - - match - (?i)\b(char|varchar2|nchar|nvarchar2|date|timestamp(\s+with(\s+local)?\s+time\s+zone)?|interval\s+(year\s+to\s+month|day\s+to\s+second)|blob|clob|nclob|bfile|long|long\s+raw|raw|number|float|binary_(float|double|integer)|pls_(float|double|integer)|rowid|urowid|vararray)\b - name - storage.type.builtin.oracle - - - scopeName - source.plsql.oracle - uuid - 28DCE4DD-F5E1-4ED3-8847-64DA6B1F9163 - - diff --git a/PL_SQL (Oracle).tmLanguage.bak b/PL_SQL (Oracle).tmLanguage.bak new file mode 100644 index 0000000..fa562bd --- /dev/null +++ b/PL_SQL (Oracle).tmLanguage.bak @@ -0,0 +1,358 @@ + + + + + fileTypes + + sql + ddl + dml + pks + pkb + prc + fnc + vw + trg + tps + tpb + fk + + foldingStartMarker + (?i)^\s*(begin|if|loop)\b + foldingStopMarker + (?i)^\s*(end)\b + keyEquivalent + ^~S + name + PL/SQL (Oracle) + patterns + + + begin + /\* + end + \*/ + name + comment.block.oracle + + + match + --.*$ + name + comment.line.double-dash.oracle + + + captures + + 1 + + name + keyword.other.oracle + + 2 + + name + keyword.other.oracle + + + match + (?i)^\s*(create)(\s+or\s+replace)?\s+ + name + meta.create.oracle + + + captures + + 1 + + name + keyword.other.oracle + + 2 + + name + keyword.other.oracle + + 3 + + name + entity.name.class.oracle + + + match + (?i)\b(package)(\s+body)?\s+(\S+) + name + meta.package.oracle + + + captures + + 1 + + name + keyword.other.oracle + + 2 + + name + entity.name.type.oracle + + + match + (?i)^\s*(type)\s+(\w{1,30})\b + name + meta.type.oracle + + + captures + + 1 + + name + storage.type.function.oracle + + 2 + + name + entity.name.function.oracle + + 3 + + name + invalid.oracle + + + match + (?i)^\s*(function|procedure)\s+(\w{1,30}|(\w{31,}))\b + name + meta.function.oracle + + + match + [!<>:]?=|<>|<|>|\+|(?<!\.)\*|-|(?<!^)/|\|\| + name + keyword.operator.oracle + + + match + (?i)\b(true|false|null)\b + name + constant.language.oracle + + + match + \b\d+(\.\d+)?\b + name + constant.numeric.oracle + + + match + (?i)\b(if|elsif|else|loop|for|while|case|end\s+case|continue|goto|return)\b + name + keyword.control.oracle + + + match + (?i)\b(or|and|not|like)\b + name + keyword.operator.oracle + + + match + (?i)\b(sysdate|%(isopen|found|notfound|rowcount)|commit|rollback|sqlerrm|sql|sqlcode)\b + name + support.function.builtin.other.oracle + + + match + (?i)\b(avg|collect|corr|corr_\w+|count|covar_(pop|samp)|cume_dist|dense_rank|first|group_id|grouping|grouping_id|last|max|median|min|percentile_cont|percentile_disc|percent_rank|rank|regr_\w+|stats_binomial_test|stats_crosstab|stats_f_test|stats_ks_test|stats_mode|stats_mw_test|stats_one_way_anova|stats_t_test_\w+|stats_wsr_test|stddev|stddev_pop|stddev_samp|sum|var_pop|var_samp|variance)\b + name + support.function.builtin.aggregate.oracle + + + match + (?i)\b(ascii|asciistr|chr|compose|concat|convert|decompose|dump|initcap|instr|instrb|instrc|instr2|instr4|length|lengthb|lengthc|length2|length4|lower|lpad|ltrim|nchr|replace|rpad|rtrim|soundex|substr|translate|trim|upper|vsize)\b + name + support.function.builtin.char.oracle + + + match + (?i)\b(add_months|current_date|current_timestamp|dbtimezone|from_tz|last_day|localtimestamp|months_between|new_time|next_day|round|sessiontimezone|sysdate|to_date|trunc|tz_offset|systimestamp|to_char)\b + name + support.function.builtin.date.oracle + + + match + (?i)\b(bfilename|cardinality|coalesce|decode|empty_(blob|clob)|group_id|lag|lead|listagg|lnnvl|nanvl|nullif|nvl|nvl2|sys_(context|guid|typeid)|uid|user|userenv|cardinality|collect|powermultiset(_by_cardinality)?|set|dump|ora_hash|vsize)\b + name + support.function.builtin.advanced.oracle + + + match + (?i)\b(bin_to_num|cast|chartorowid|from_tz|hextoraw|numtodsinterval|numtoyminterval|rawtohex|to_char|to_clob|to_date|to_dsinterval|to_lob|to_multi_byte|to_nclob|to_number|to_single_byte|to_timestamp|to_timestamp_tz|to_yminterval)\b + name + support.function.builtin.convert.oracle + + + match + (?i)\b(abs|acos|asin|atan|atan2|avg|bin_to_num|bit_(and|or|xor)|ceil|corr|cos|cosh|covar_pop|covar_samp|count|cume_dist|dense_rank|exp|extract|floor|greatest|least|ln|log|max|median|min|mod|power|rank|remainder|round|sign|sin|sinh|sqrt|stddev|sum|tan|tanh|trunc|var_pop|var_samp|variance)\b + name + support.function.builtin.math.oracle + + + match + (?i)\b(\.(count|delete|exists|extend|first|last|limit|next|prior|trim))\b + name + support.function.builtin.collection.oracle + + + match + (?i)\b(cluster_id|cluster_probability|cluster_set|feature_id|feature_set|feature_value|prediction|prediction_cost|prediction_details|prediction_probability|prediction_set)\b + name + support.function.builtin.data_mining.oracle + + + match + (?i)\b(appendchildxml|deletexml|depth|extract (xml)|existsnode|extractvalue|insertchildxml|insertxmlbefore|path|sys_dburigen|sys_xmlagg|sys_xmlgen|updatexml|xmlagg|xmlcdata|xmlcolattval|xmlcomment|xmlconcat|xmlforest|xmlparse|xmlpi|xmlquery|xmlroot|xmlsequence|xmlserialize|xmltable|xmltransform)\b + name + support.function.builtin.xml.oracle + + + match + (?i)\b(pragma\s+(autonomous_transaction|serially_reusable|restrict_references|exception_init|inline))\b + name + keyword.other.pragma.oracle + + + captures + + 4 + + name + invalid.oracle + + + match + (?i)\b(p(?:(i|o|io))?_(\w{1,27}|(\w{28,})))\b + name + variable.parameter.oracle + + + captures + + 5 + + name + invalid.oracle + + + match + (?i)\b((l|g)_(\w{1,27}|(\w{28,})))\b + name + variable.standard.oracle + + + match + (?i)\b(connect\s+by\s+(nocycle\s+)?(prior|level)|connect_by_(root|icycle)|level|start\s+with|)\b + name + keyword.hierarchical.sql.oracle + + + match + (?i)\b(end|then|deterministic|exception|when|declare|begin|in|out|nocopy|is|as|exit|open|fetch|into|close|subtype|type|rowtype|default|exclusive|mode|lock|record|index\s+by|result_cache)\b + name + keyword.other.oracle + + + match + (?i)\b(with|select|from|where|order\s+(siblings\s+)?by|group\s+by|rollup|cube|((left|right|cross)\s+(outer\s+)?)?join|on|asc|desc|update|set|insert|into|values|delete|from|distinct|union|minus|intersect|having|limit|table|between|like|of|all|any|exists|rownum|cursor|returning)\b + name + keyword.other.sql.oracle + + + match + (?i)\b(access_into_null|case_not_found|collection_is_null|cursor_already_open|dup_val_on_index|invalid_cursor|invalid_number|login_denied|no_data_found|not_logged_on|program_error|rowtype_mismatch|self_is_null|storage_error|subscript_beyond_count|subscript_outside_limit|sys_invalid_rowid|timeout_on_resource|too_many_rows|value_error|zero_divide|others)\b + name + support.type.exception.oracle + + + captures + + 3 + + name + support.class.oracle + + + match + (?i)\b((dbms|utl|owa)_\w+.(\w+))\b + name + support.function.oracle + + + match + (?i)\b(raise|raise_application_error)\b + name + support.function.oracle + + + begin + ' + end + ' + name + string.quoted.single.oracle + + + begin + q'\[ + end + \]' + name + string.quoted.q.oracle + + + begin + q'\( + end + \)' + name + string.quoted.q.oracle + + + begin + q'\{ + end + \}' + name + string.quoted.q.oracle + + + begin + q'< + end + >' + name + string.quoted.q.oracle + + + begin + q'\! + end + \!' + name + string.quoted.q.oracle + + + match + (?i)\b(char|varchar2|nchar|nvarchar2|boolean|date|timestamp(\s+with(\s+local)?\s+time\s+zone)?|interval\s+(year\s+to\s+month|day\s+to\s+second)|blob|clob|nclob|bfile|long|long\s+raw|raw|number|integer|float|binary_(float|double|integer)|pls_(float|double|integer)|rowid|urowid|vararray)\b + name + storage.type.builtin.oracle + + + scopeName + source.plsql.oracle + uuid + 28DCE4DD-F5E1-4ED3-8847-64DA6B1F9163 + + diff --git a/RunSQL.sql b/RunSQL.sql index 3b1b86d..62cb3b9 100644 --- a/RunSQL.sql +++ b/RunSQL.sql @@ -1,13 +1,13 @@ SET LINESIZE 2000 SET PAGESIZE 0 SET VERIFY OFF -SET FEEDBACK ON +SET FEEDBACK OFF + @&1 -show errors -SELECT 'Filename: &1' FROM DUAL; --- SELECT '(' || TYPE || ' ' || NAME || '/0:' || POSITION || ')' || ' ' || LINE || ':' || POSITION || ' ' || TEXT as ERRORS --- FROM USER_ERRORS --- WHERE line <> 0 --- AND TYPE || ' ' || NAME in (&2) --- ORDER BY NAME, TYPE, SEQUENCE; -exit + +SELECT 'Filename: &1' FROM DUAL +/ + +SHOW ERRORS + +EXIT diff --git a/Symbol List.tmPreferences b/Symbol List.tmPreferences index a6ab06d..0c75ba7 100644 --- a/Symbol List.tmPreferences +++ b/Symbol List.tmPreferences @@ -5,7 +5,7 @@ name Symbol List scope - source.plsql.oracle meta.procedure.oracle,source.plsql.oracle meta.function.oracle, source.plsql.oracle meta.package.oracle + source.plsql.oracle meta.procedure.oracle,source.plsql.oracle meta.function.oracle, source.plsql.oracle meta.package.oracle, source.plsql.oracle meta.type.oracle settings showInSymbolList diff --git a/oracle_commands.py b/oracle_commands.py index 20eae04..a9b244c 100644 --- a/oracle_commands.py +++ b/oracle_commands.py @@ -1,6 +1,6 @@ import sublime import sublime_plugin -import oracle_lib +from . import oracle_lib class OracleGotoBodyCommand(sublime_plugin.TextCommand): diff --git a/oracle_exec.py b/oracle_exec.py index 767bbad..8710904 100644 --- a/oracle_exec.py +++ b/oracle_exec.py @@ -2,10 +2,11 @@ import re import os.path from . import oracle_lib -from Default import exec as execmod +import Default.exec as execmod RE_ENTITIES = re.compile("^\\((.+?)/(0):[0-9]+\\) ([0-9]+):[0-9]+ (.+)$", re.M) + class OracleExecCommand(execmod.ExecCommand): def run(self, dsn="", **kwargs): if not dsn and not kwargs.get("kill", False): @@ -14,42 +15,26 @@ def run(self, dsn="", **kwargs): else: # Find entities declaration in source self.entities = oracle_lib.find_entities(self.window.active_view()) - # Create a string for the in of sql command - sqlfilter = '"' + ",".join("'%s'" % entity for entity in self.entities.keys()) + '"' - - # Windows - # cmd = ["sqlplus.exe", "-s", dsn, "@", os.path.join(sublime.packages_path(), 'OracleSQL', 'RunSQL.sql'), self.window.active_view().file_name(), sqlfilter] - - # UNIX/Mac - # cmd = ["sqlplus", "-s", dsn, "@", os.path.join(sublime.packages_path(), 'OracleSQL', 'RunSQL.sql'), self.window.active_view().file_name(), sqlfilter] - runsql = os.path.expanduser('~') + '/Documents/SublimeText3_OracleSQL_RunSQL.sql' - if not os.path.exists(runsql): - f = open(runsql, "w") - f.write('SET LINESIZE 2000\n') - f.write('SET PAGESIZE 0\n') - f.write('SET VERIFY OFF\n') - f.write('SET FEEDBACK ON\n') - f.write('@&1\n') - f.write('show errors\n') - #f.write('SELECT \'Filename: &1\' FROM DUAL;\n') - f.close() - cmd = ["sqlplus", "-s", dsn, "@", runsql, self.window.active_view().file_name(), sqlfilter] - - super(OracleExecCommand, self).run(cmd, "", "^Filename: (.+)$", "^\\(.+?/([0-9]+):([0-9]+)\\) [0-9]+:[0-9]+ (.+)$", **kwargs) - - def append_data(self, proc, data): - # Update the line number of output_view with the correct line number of source view - orgstr = data.decode(self.encoding) - datastr = orgstr + + (directory, filename) = os.path.split(self.window.active_view().file_name()) + cmd = ["sqlplus", "-s", dsn, "@", os.path.join(sublime.packages_path(), 'OracleSQL', 'RunSQL.sql'), '"'+filename+'"'] + + super(OracleExecCommand, self).run(cmd, None, "^Filename: (.+)$", "^([0-9]+)/([0-9]+) (.+)$", working_dir=directory, **kwargs) + + def append_string(self, proc, string): + """ Update the line number of output_view with the correct line number of source view + """ + orgstring = string posoffset = 0 - for re_ent in RE_ENTITIES.finditer(orgstr): + + for re_ent in RE_ENTITIES.finditer(orgstring): pos = re_ent.span(2) pos = (pos[0] + posoffset, pos[1] + posoffset) sourceoffset = self.entities[re_ent.group(1)] sqlerrorline = int(re_ent.group(3)) sourceline = sqlerrorline + sourceoffset - datastr = datastr[:pos[0]] + str(sourceline) + datastr[pos[1]:] + string = string[:pos[0]] + str(sourceline) + string[pos[1]:] posoffset += len(str(sourceline)) - 1 - super(OracleExecCommand, self).append_data(proc, datastr.encode(self.encoding)) \ No newline at end of file + super(OracleExecCommand, self).append_string(proc, string)