16
16
package org .utplsql .sqldev .dal ;
17
17
18
18
import java .net .URL ;
19
- import java .sql .CallableStatement ;
20
19
import java .sql .Connection ;
21
- import java .sql .SQLException ;
22
20
import java .sql .Types ;
23
- import java .util .Arrays ;
21
+ import java .util .Collections ;
24
22
import java .util .List ;
25
23
import java .util .regex .Matcher ;
26
24
import java .util .regex .Pattern ;
38
36
39
37
public class UtplsqlDao {
40
38
public static final String UTPLSQL_PACKAGE_NAME = "UT" ;
41
- public static final int NOT_INSTALLED = 0 ;
42
39
public static final int FIRST_VERSION_WITH_INTERNAL_ANNOTATION_API = 3000004 ;
43
40
public static final int FIRST_VERSION_WITH_ANNOTATION_API = 3001003 ;
44
41
public static final int FIRST_VERSION_WITHOUT_INTERNAL_API = 3001008 ;
45
42
public static final int FIRST_VERSION_WITH_HAS_SUITES_API = 3001008 ;
46
43
public static final int FETCH_ROWS = 100 ;
47
- private JdbcTemplate jdbcTemplate ;
44
+ private final JdbcTemplate jdbcTemplate ;
48
45
// cache fields
49
46
private Boolean cachedDbaViewAccessible ;
50
47
private String cachedUtplsqlSchema ;
@@ -90,7 +87,7 @@ public int normalizedUtPlsqlVersionNumber() {
90
87
final String minor = m .group ();
91
88
m .find ();
92
89
final String bugfix = m .group ();
93
- return Integer .valueOf (major ) * 1000000 + Integer .valueOf (minor ) * 1000 + Integer .valueOf (bugfix );
90
+ return Integer .parseInt (major ) * 1000000 + Integer .parseInt (minor ) * 1000 + Integer .parseInt (bugfix );
94
91
}
95
92
96
93
/**
@@ -104,13 +101,10 @@ public String getUtPlsqlVersion() {
104
101
sb .append ("END;" );
105
102
final String sql = sb .toString ();
106
103
try {
107
- cachedUtPlsqlVersion = jdbcTemplate .execute (sql , new CallableStatementCallback <String >() {
108
- @ Override
109
- public String doInCallableStatement (final CallableStatement cs ) throws SQLException {
110
- cs .registerOutParameter (1 , Types .VARCHAR );
111
- cs .execute ();
112
- return cs .getString (1 );
113
- }
104
+ cachedUtPlsqlVersion = jdbcTemplate .execute (sql , (CallableStatementCallback <String >) cs -> {
105
+ cs .registerOutParameter (1 , Types .VARCHAR );
106
+ cs .execute ();
107
+ return cs .getString (1 );
114
108
});
115
109
} catch (DataAccessException e ) {
116
110
// ignore error
@@ -141,7 +135,7 @@ public boolean isDbaViewAccessible() {
141
135
cachedDbaViewAccessible = false ;
142
136
}
143
137
}
144
- return cachedDbaViewAccessible . booleanValue () ;
138
+ return cachedDbaViewAccessible ;
145
139
}
146
140
147
141
public String getDbaView (String viewName ) {
@@ -178,8 +172,7 @@ public String getUtplsqlSchema() {
178
172
sb .append ("'" );
179
173
final String sql = sb .toString ();
180
174
try {
181
- final String schema = jdbcTemplate .queryForObject (sql , String .class );
182
- cachedUtplsqlSchema = schema ;
175
+ cachedUtplsqlSchema = jdbcTemplate .queryForObject (sql , String .class );
183
176
} catch (EmptyResultDataAccessException e ) {
184
177
cachedUtplsqlSchema = null ;
185
178
}
@@ -229,18 +222,16 @@ public boolean containsUtplsqlTest(final String owner, final String objectName,
229
222
sb .append (" ? := l_return;\n " );
230
223
sb .append ("END;" );
231
224
final String sql = sb .toString ();
232
- return jdbcTemplate .execute (sql , new CallableStatementCallback <Boolean >() {
233
- @ Override
234
- public Boolean doInCallableStatement (final CallableStatement cs ) throws SQLException {
235
- cs .setString (1 , owner );
236
- cs .setString (2 , objectName );
237
- cs .setString (3 , subobjectName );
238
- cs .registerOutParameter (4 , Types .VARCHAR );
239
- cs .execute ();
240
- final String ret = cs .getString (4 );
241
- return "1" .equals (ret );
242
- }
225
+ final Boolean ret = jdbcTemplate .execute (sql , (CallableStatementCallback <Boolean >) cs -> {
226
+ cs .setString (1 , owner );
227
+ cs .setString (2 , objectName );
228
+ cs .setString (3 , subobjectName );
229
+ cs .registerOutParameter (4 , Types .VARCHAR );
230
+ cs .execute ();
231
+ final String ret1 = cs .getString (4 );
232
+ return "1" .equals (ret1 );
243
233
});
234
+ return ret != null && ret ;
244
235
} else if (normalizedUtPlsqlVersionNumber () >= FIRST_VERSION_WITH_ANNOTATION_API ) {
245
236
// using API available since 3.1.3, can handle nulls in objectName and subobjectName
246
237
StringBuilder sb = new StringBuilder ();
@@ -251,7 +242,7 @@ public Boolean doInCallableStatement(final CallableStatement cs) throws SQLExcep
251
242
final String sql = sb .toString ();
252
243
final Object [] binds = new Object [] {owner , objectName , subobjectName , subobjectName };
253
244
final Integer found = jdbcTemplate .queryForObject (sql , Integer .class , binds );
254
- return found > 0 ;
245
+ return found != null && found > 0 ;
255
246
} else {
256
247
// using internal API (deprecated, not accessible in latest version)
257
248
StringBuilder sb = new StringBuilder ();
@@ -282,7 +273,7 @@ public Boolean doInCallableStatement(final CallableStatement cs) throws SQLExcep
282
273
final String sql = sb .toString ();
283
274
final Object [] binds = new Object [] {subobjectName , subobjectName , owner , objectName , objectName };
284
275
final Integer found = jdbcTemplate .queryForObject (sql , Integer .class , binds );
285
- return found > 0 ;
276
+ return found != null && found > 0 ;
286
277
}
287
278
} catch (EmptyResultDataAccessException e ) {
288
279
return false ;
@@ -302,17 +293,14 @@ public boolean containsUtplsqlTest(final String owner) {
302
293
sb .append (" ? := l_return;\n " );
303
294
sb .append ("END;" );
304
295
final String sql = sb .toString ();
305
- return jdbcTemplate .execute (sql , new CallableStatementCallback <Boolean >() {
306
- @ Override
307
- public Boolean doInCallableStatement (final CallableStatement cs )
308
- throws SQLException {
309
- cs .setString (1 , owner );
310
- cs .registerOutParameter (2 , Types .VARCHAR );
311
- cs .execute ();
312
- final String ret = cs .getString (2 );
313
- return "1" .equals (ret );
314
- }
296
+ final Boolean ret = jdbcTemplate .execute (sql , (CallableStatementCallback <Boolean >) cs -> {
297
+ cs .setString (1 , owner );
298
+ cs .registerOutParameter (2 , Types .VARCHAR );
299
+ cs .execute ();
300
+ final String ret1 = cs .getString (2 );
301
+ return "1" .equals (ret1 );
315
302
});
303
+ return ret != null && ret ;
316
304
} else {
317
305
return containsUtplsqlTest (owner , null , null );
318
306
}
@@ -330,18 +318,15 @@ public boolean containsUtplsqlTest(final String owner, final String objectName)
330
318
sb .append (" ? := l_return;\n " );
331
319
sb .append ("END;" );
332
320
final String sql = sb .toString ();
333
- return jdbcTemplate .execute (sql , new CallableStatementCallback <Boolean >() {
334
- @ Override
335
- public Boolean doInCallableStatement (final CallableStatement cs )
336
- throws SQLException {
337
- cs .setString (1 , owner );
338
- cs .setString (2 , objectName );
339
- cs .registerOutParameter (3 , Types .VARCHAR );
340
- cs .execute ();
341
- final String ret = cs .getString (3 );
342
- return "1" .equals (ret );
343
- }
321
+ Boolean ret = jdbcTemplate .execute (sql , (CallableStatementCallback <Boolean >) cs -> {
322
+ cs .setString (1 , owner );
323
+ cs .setString (2 , objectName );
324
+ cs .registerOutParameter (3 , Types .VARCHAR );
325
+ cs .execute ();
326
+ final String ret1 = cs .getString (3 );
327
+ return "1" .equals (ret1 );
344
328
});
329
+ return ret != null && ret ;
345
330
} else {
346
331
return containsUtplsqlTest (owner , objectName , null );
347
332
}
@@ -410,7 +395,7 @@ public List<String> units(final String objectType, final String objectName) {
410
395
final Object [] binds = new Object [] {objectType , objectName };
411
396
return jdbcTemplate .queryForList (sql , String .class , binds );
412
397
} else {
413
- return Arrays . asList (objectName );
398
+ return Collections . singletonList (objectName );
414
399
}
415
400
}
416
401
@@ -868,30 +853,34 @@ public String getDbmsOutput(final int bufferSize) {
868
853
sb .append (" sys.dbms_output.get_lines(?, ?);\n " );
869
854
sb .append ("END;" );
870
855
final String sql = sb .toString ();
871
- OutputLines ret = null ;
856
+ OutputLines ret ;
872
857
do {
873
- ret = jdbcTemplate .execute (sql , new CallableStatementCallback <OutputLines >() {
874
- @ Override
875
- public OutputLines doInCallableStatement (final CallableStatement cs ) throws SQLException {
876
- cs .registerOutParameter (1 , Types .ARRAY , "DBMSOUTPUT_LINESARRAY" );
877
- cs .registerOutParameter (2 , Types .INTEGER );
878
- cs .setInt (2 , bufferSize );
879
- cs .execute ();
880
- final OutputLines out = new OutputLines ();
858
+ ret = jdbcTemplate .execute (sql , (CallableStatementCallback <OutputLines >) cs -> {
859
+ cs .registerOutParameter (1 , Types .ARRAY , "DBMSOUTPUT_LINESARRAY" );
860
+ cs .registerOutParameter (2 , Types .INTEGER );
861
+ cs .setInt (2 , bufferSize );
862
+ cs .execute ();
863
+ final OutputLines out = new OutputLines ();
864
+ try {
881
865
Object array = cs .getArray (1 ).getArray ();
882
866
out .setLines ((String []) array );
883
867
out .setNumlines (cs .getInt (2 ));
884
- return out ;
868
+ } catch (NullPointerException e ) {
869
+ out .setLines (null );
870
+ out .setNumlines (0 );
885
871
}
872
+ return out ;
886
873
});
887
- for (int i = 0 ; i < ret .getNumlines (); i ++) {
888
- final String line = ret .getLines ()[i ];
889
- if (line != null ) {
890
- resultSb .append (ret .getLines ()[i ]);
874
+ if (ret != null && ret .getNumlines () != null ) {
875
+ for (int i = 0 ; i < ret .getNumlines (); i ++) {
876
+ final String line = ret .getLines ()[i ];
877
+ if (line != null ) {
878
+ resultSb .append (ret .getLines ()[i ]);
879
+ }
880
+ resultSb .append (System .lineSeparator ());
891
881
}
892
- resultSb .append (System .lineSeparator ());
893
882
}
894
- } while (ret .getNumlines () > 0 );
883
+ } while (ret != null && ret . getNumlines () != null && ret .getNumlines () > 0 );
895
884
return resultSb .toString ();
896
885
}
897
886
@@ -1032,16 +1021,13 @@ public String getSource(final String owner, final String objectType, final Strin
1032
1021
sb .append (" );\n " );
1033
1022
sb .append ("END;" );
1034
1023
final String sql = sb .toString ();
1035
- return jdbcTemplate .execute (sql , new CallableStatementCallback <String >() {
1036
- @ Override
1037
- public String doInCallableStatement (final CallableStatement cs ) throws SQLException {
1038
- cs .registerOutParameter (1 , Types .CLOB );
1039
- cs .setString (2 , owner );
1040
- cs .setString (3 , fixedObjectType );
1041
- cs .setString (4 , objectName );
1042
- cs .execute ();
1043
- return cs .getString (1 );
1044
- }
1024
+ return jdbcTemplate .execute (sql , (CallableStatementCallback <String >) cs -> {
1025
+ cs .registerOutParameter (1 , Types .CLOB );
1026
+ cs .setString (2 , owner );
1027
+ cs .setString (3 , fixedObjectType );
1028
+ cs .setString (4 , objectName );
1029
+ cs .execute ();
1030
+ return cs .getString (1 );
1045
1031
});
1046
1032
}
1047
1033
@@ -1071,6 +1057,6 @@ public String getObjectType(final String owner, final String objectName) {
1071
1057
sb .append (" WHERE rownum = 1" );
1072
1058
final String sql = sb .toString ();
1073
1059
final Object [] binds = new Object [] {owner , objectName };
1074
- return jdbcTemplate .queryForObject (sql , binds , String .class );
1060
+ return jdbcTemplate .queryForObject (sql , String .class , binds );
1075
1061
}
1076
1062
}
0 commit comments