16
16
package org.utplsql.sqldev
17
17
18
18
import java.util.ArrayList
19
+ import java.util.HashSet
19
20
import java.util.List
20
21
import java.util.logging.Logger
22
+ import java.util.regex.Pattern
21
23
import javax.swing.JSplitPane
22
24
import oracle.dbtools.raptor.utils.Connections
23
25
import oracle.dbtools.worksheet.editor.OpenWorksheetWizard
@@ -57,6 +59,30 @@ class UtplsqlWorksheet {
57
59
}
58
60
}
59
61
62
+ private def dedupPathList () {
63
+ val set = new HashSet<String >
64
+ for (path : pathList) {
65
+ set. add(path)
66
+ }
67
+ val ret = new ArrayList<String >
68
+ val p = Pattern . compile(" ((((\\ w+)\\ .)?\\ w+)\\ .)?\\ w+" )
69
+ for (path : set) {
70
+ val m = p. matcher(path)
71
+ if (m. matches()) {
72
+ val parent1 = m. group(4 ) // user
73
+ val parent2 = m. group(2 ) // user.package
74
+ if (parent1 == = null || ! set. contains(parent1)) {
75
+ if (parent2 == = null || ! set. contains(parent2)) {
76
+ ret. add(path)
77
+ }
78
+ }
79
+ } else {
80
+ logger. severe(' ' ' path: «path» did not pattern «p.toString», this is unexected!' ' ' )
81
+ }
82
+ }
83
+ return ret
84
+ }
85
+
60
86
private def getCode () '''
61
87
«IF preferences.resetPackage»
62
88
EXECUTE dbms_session.reset_package;
@@ -65,10 +91,11 @@ class UtplsqlWorksheet {
65
91
«IF preferences. clearScreen»
66
92
CLEAR SCREEN
67
93
«ENDIF »
68
- «IF pathList. size == 1 »
69
- EXECUTE ut. run(' «pathList.get(0)»' );
94
+ «val paths = dedupPathList»
95
+ «IF paths. size == 1 »
96
+ EXECUTE ut. run(' «paths.get(0)»' );
70
97
«ELSE »
71
- EXECUTE ut. run(ut_varchar2_list(«FOR path : pathList SEPARATOR ' , ' »' «path»' «ENDFOR »));
98
+ EXECUTE ut. run(ut_varchar2_list(«FOR path : paths SEPARATOR ' , ' »' «path»' «ENDFOR »));
72
99
«ENDIF »
73
100
' ' '
74
101
@@ -117,7 +144,7 @@ class UtplsqlWorksheet {
117
144
thread.start
118
145
}
119
146
120
- def static void openWithCode(String code, String connectionName) {
147
+ static def void openWithCode(String code, String connectionName) {
121
148
val worksheet = OpenWorksheetWizard.openNewTempWorksheet(connectionName, code) as Worksheet
122
149
if (connectionName === null) {
123
150
worksheet.comboConnection = null
0 commit comments