From 8a193a168a7968e4b0b5a017a6918aef28bdddd7 Mon Sep 17 00:00:00 2001 From: Dominique Wahli Date: Thu, 22 Aug 2013 10:11:13 +0200 Subject: [PATCH 1/9] Add returning keyword resolve issue #7 --- 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 e236b5c..9b0edf3 100644 --- a/PL_SQL (Oracle).tmLanguage +++ b/PL_SQL (Oracle).tmLanguage @@ -181,7 +181,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)\b + (?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 name keyword.other.sql.oracle From a79eb7bf41f727846f0a94d0f1ff5789fe205191 Mon Sep 17 00:00:00 2001 From: Josh Bjornson Date: Fri, 24 Jan 2014 10:21:57 +0100 Subject: [PATCH 2/9] Fixing bug with empty sqlfilter Occurs when there are no create/replace statements in the sql file being executed (oracle_lib.find_entities returns an empty dict). The second parameter being sent to RunSQL.sql is empty and the USER_ERRORS select statement fails with an error, even though the sql file was executed successfully (which can be confusing to the user). This fix simple sends an empty string as the second parameter in the case when no entities are returned by oracle_lib. --- oracle_exec.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/oracle_exec.py b/oracle_exec.py index 4728b80..ec0cb3f 100644 --- a/oracle_exec.py +++ b/oracle_exec.py @@ -16,8 +16,11 @@ def run(self, dsn="", **kwargs): # 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()) + '"' - + if len(self.entities) == 0: + sqlfilter = "\"''\"" + else: + 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] From 92c1025cd9c0a6e4ad05735f9fb4ac0a970634be Mon Sep 17 00:00:00 2001 From: Josh Bjornson Date: Fri, 24 Jan 2014 12:02:30 +0100 Subject: [PATCH 3/9] Support file paths with spaces Adds support for the directory the script is saved in to contain spaces. SQLPLUS has issues with spaces in filenames so we need to set the working directory to the one the script is in and then send SQLPLUS the script without the path. --- oracle_exec.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/oracle_exec.py b/oracle_exec.py index ec0cb3f..52a91fc 100644 --- a/oracle_exec.py +++ b/oracle_exec.py @@ -20,11 +20,11 @@ def run(self, dsn="", **kwargs): sqlfilter = "\"''\"" else: 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] - super(OracleExecCommand, self).run(cmd, "^Filename: (.+)$", "^\\(.+?/([0-9]+):([0-9]+)\\) [0-9]+:[0-9]+ (.+)$", **kwargs) + (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, "^Filename: (.+)$", "^\\(.+?/([0-9]+):([0-9]+)\\) [0-9]+:[0-9]+ (.+)$", working_dir=directory, **kwargs) def append_data(self, proc, data): # Update the line number of output_view with the correct line number of source view From 56fa23f24e8033dbab83e9cb23141de7c70f0938 Mon Sep 17 00:00:00 2001 From: ilkin Date: Wed, 29 Jan 2014 14:20:34 +0400 Subject: [PATCH 4/9] Update PL_SQL (Oracle).tmLanguage added new fileTypes pks, pkb, fnc, prc, pck --- PL_SQL (Oracle).tmLanguage | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/PL_SQL (Oracle).tmLanguage b/PL_SQL (Oracle).tmLanguage index 9b0edf3..d2be0dd 100644 --- a/PL_SQL (Oracle).tmLanguage +++ b/PL_SQL (Oracle).tmLanguage @@ -7,6 +7,11 @@ sql ddl dml + pks + pkb + fnc + prc + pck foldingStartMarker (?i)^\s*(begin|if|loop)\b From a66e6168cc928ee9a259623910d0273e1b3333ff Mon Sep 17 00:00:00 2001 From: Tom Cross Date: Wed, 29 Jan 2014 11:53:19 +0000 Subject: [PATCH 5/9] corrected typo in readme.rst --- readme.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.rst b/readme.rst index 24eb1c7..97f4e48 100644 --- a/readme.rst +++ b/readme.rst @@ -1,5 +1,5 @@ ========================================================= -Sublime Text 2 plackage for editing Oracle SQL and PL/SQL +Sublime Text 2 package for editing Oracle SQL and PL/SQL ========================================================= Language definition and execution utilities for Oracle PL/SQL files. From 981d1d1eb8069a8fc7d5e69a5692d764652fdf31 Mon Sep 17 00:00:00 2001 From: ilkin Date: Tue, 25 Feb 2014 15:47:23 +0400 Subject: [PATCH 6/9] Update PL_SQL (Oracle).tmLanguage added |merge|using|on|matched --- 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 d2be0dd..aefbc7d 100644 --- a/PL_SQL (Oracle).tmLanguage +++ b/PL_SQL (Oracle).tmLanguage @@ -186,7 +186,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|asc|desc|update|set|insert|into|values|delete|from|distinct|union|having|limit|table|between|of|all|any|exists|rownum|cursor|returning|merge|using|on|matched)\b name keyword.other.sql.oracle From 8853bdb56f28843ed65d8d405da6c2836249b157 Mon Sep 17 00:00:00 2001 From: Dominique Wahli Date: Tue, 4 Mar 2014 14:03:21 +0100 Subject: [PATCH 7/9] Update PL_SQL (Oracle).tmLanguage Add join keyword --- 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 aefbc7d..23419c1 100644 --- a/PL_SQL (Oracle).tmLanguage +++ b/PL_SQL (Oracle).tmLanguage @@ -186,7 +186,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|merge|using|on|matched)\b + (?i)\b(with|select|from|join|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|merge|using|on|matched)\b name keyword.other.sql.oracle From 869561cb34bfeb2bc7595e3b5dea721ce5859634 Mon Sep 17 00:00:00 2001 From: Mike Leonard Date: Thu, 3 Jul 2014 17:05:12 +1000 Subject: [PATCH 8/9] Schema names are now retained so that you can connect to a database as one user and compile packages for a different user. Errors are reported correctly. --- RunSQL.sql | 10 +++++++--- oracle_lib.py | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/RunSQL.sql b/RunSQL.sql index cad1e81..2fb2981 100644 --- a/RunSQL.sql +++ b/RunSQL.sql @@ -4,9 +4,13 @@ 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 +SELECT '(' || TYPE || ' ' || NAME || '/' || LINE || ':' || POSITION || ')' || ' ' || LINE || ':' || POSITION || ' ' || TEXT as ERRORS + FROM ALL_ERRORS WHERE line <> 0 - AND TYPE || ' ' || NAME in (&2) + AND ( + TYPE || ' ' || OWNER || '.' || NAME in (&2) + OR + (OWNER = USER AND TYPE || ' ' || NAME in (&2)) + ) ORDER BY NAME, TYPE, SEQUENCE; exit diff --git a/oracle_lib.py b/oracle_lib.py index df5854a..21a3104 100644 --- a/oracle_lib.py +++ b/oracle_lib.py @@ -6,7 +6,7 @@ def find_entities(view): Return all 'create or replace' type and name in the script. """ results = [] - positions = view.find_all(r'(?im)create\s+(?:or\s+replace\s+)?(?:force\s+)?(package(?:\s+body)?|procedure|function|trigger|view|type)\s+(\w+\.)?(\w+)', 0, "$1 $3", results) + positions = view.find_all(r'(?im)create\s+(?:or\s+replace\s+)?(?:force\s+)?(package(?:\s+body)?|procedure|function|trigger|view|type)\s+(\w+\.)?(\w+)', 0, "$1 $2$3", results) return dict((val.upper(), view.rowcol(pos.begin())[0]) for (pos, val) in zip(positions, results)) From d6383a1f771b06ec31463a882ffa46cbb6271531 Mon Sep 17 00:00:00 2001 From: Mike Leonard Date: Thu, 3 Jul 2014 17:22:52 +1000 Subject: [PATCH 9/9] Reverted accidental remove of changes made to RunSQL.sql. --- RunSQL.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RunSQL.sql b/RunSQL.sql index 2fb2981..e1e32c3 100644 --- a/RunSQL.sql +++ b/RunSQL.sql @@ -4,7 +4,7 @@ SET VERIFY OFF SET FEEDBACK OFF @&1 SELECT 'Filename: &1' FROM DUAL; -SELECT '(' || TYPE || ' ' || NAME || '/' || LINE || ':' || POSITION || ')' || ' ' || LINE || ':' || POSITION || ' ' || TEXT as ERRORS +SELECT '(' || TYPE || ' ' || NAME || '/0:' || POSITION || ')' || ' ' || LINE || ':' || POSITION || ' ' || TEXT as ERRORS FROM ALL_ERRORS WHERE line <> 0 AND (