1616package org .utplsql .sqldev .dal ;
1717
1818import java .net .URL ;
19- import java .sql .CallableStatement ;
2019import java .sql .Connection ;
21- import java .sql .SQLException ;
2220import java .sql .Types ;
23- import java .util .Arrays ;
21+ import java .util .Collections ;
2422import java .util .List ;
2523import java .util .regex .Matcher ;
2624import java .util .regex .Pattern ;
3836
3937public class UtplsqlDao {
4038 public static final String UTPLSQL_PACKAGE_NAME = "UT" ;
41- public static final int NOT_INSTALLED = 0 ;
4239 public static final int FIRST_VERSION_WITH_INTERNAL_ANNOTATION_API = 3000004 ;
4340 public static final int FIRST_VERSION_WITH_ANNOTATION_API = 3001003 ;
4441 public static final int FIRST_VERSION_WITHOUT_INTERNAL_API = 3001008 ;
4542 public static final int FIRST_VERSION_WITH_HAS_SUITES_API = 3001008 ;
4643 public static final int FETCH_ROWS = 100 ;
47- private JdbcTemplate jdbcTemplate ;
44+ private final JdbcTemplate jdbcTemplate ;
4845 // cache fields
4946 private Boolean cachedDbaViewAccessible ;
5047 private String cachedUtplsqlSchema ;
@@ -90,7 +87,7 @@ public int normalizedUtPlsqlVersionNumber() {
9087 final String minor = m .group ();
9188 m .find ();
9289 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 );
9491 }
9592
9693 /**
@@ -104,13 +101,10 @@ public String getUtPlsqlVersion() {
104101 sb .append ("END;" );
105102 final String sql = sb .toString ();
106103 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 );
114108 });
115109 } catch (DataAccessException e ) {
116110 // ignore error
@@ -141,7 +135,7 @@ public boolean isDbaViewAccessible() {
141135 cachedDbaViewAccessible = false ;
142136 }
143137 }
144- return cachedDbaViewAccessible . booleanValue () ;
138+ return cachedDbaViewAccessible ;
145139 }
146140
147141 public String getDbaView (String viewName ) {
@@ -178,8 +172,7 @@ public String getUtplsqlSchema() {
178172 sb .append ("'" );
179173 final String sql = sb .toString ();
180174 try {
181- final String schema = jdbcTemplate .queryForObject (sql , String .class );
182- cachedUtplsqlSchema = schema ;
175+ cachedUtplsqlSchema = jdbcTemplate .queryForObject (sql , String .class );
183176 } catch (EmptyResultDataAccessException e ) {
184177 cachedUtplsqlSchema = null ;
185178 }
@@ -229,18 +222,16 @@ public boolean containsUtplsqlTest(final String owner, final String objectName,
229222 sb .append (" ? := l_return;\n " );
230223 sb .append ("END;" );
231224 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 );
243233 });
234+ return ret != null && ret ;
244235 } else if (normalizedUtPlsqlVersionNumber () >= FIRST_VERSION_WITH_ANNOTATION_API ) {
245236 // using API available since 3.1.3, can handle nulls in objectName and subobjectName
246237 StringBuilder sb = new StringBuilder ();
@@ -251,7 +242,7 @@ public Boolean doInCallableStatement(final CallableStatement cs) throws SQLExcep
251242 final String sql = sb .toString ();
252243 final Object [] binds = new Object [] {owner , objectName , subobjectName , subobjectName };
253244 final Integer found = jdbcTemplate .queryForObject (sql , Integer .class , binds );
254- return found > 0 ;
245+ return found != null && found > 0 ;
255246 } else {
256247 // using internal API (deprecated, not accessible in latest version)
257248 StringBuilder sb = new StringBuilder ();
@@ -282,7 +273,7 @@ public Boolean doInCallableStatement(final CallableStatement cs) throws SQLExcep
282273 final String sql = sb .toString ();
283274 final Object [] binds = new Object [] {subobjectName , subobjectName , owner , objectName , objectName };
284275 final Integer found = jdbcTemplate .queryForObject (sql , Integer .class , binds );
285- return found > 0 ;
276+ return found != null && found > 0 ;
286277 }
287278 } catch (EmptyResultDataAccessException e ) {
288279 return false ;
@@ -302,17 +293,14 @@ public boolean containsUtplsqlTest(final String owner) {
302293 sb .append (" ? := l_return;\n " );
303294 sb .append ("END;" );
304295 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 );
315302 });
303+ return ret != null && ret ;
316304 } else {
317305 return containsUtplsqlTest (owner , null , null );
318306 }
@@ -330,18 +318,15 @@ public boolean containsUtplsqlTest(final String owner, final String objectName)
330318 sb .append (" ? := l_return;\n " );
331319 sb .append ("END;" );
332320 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 );
344328 });
329+ return ret != null && ret ;
345330 } else {
346331 return containsUtplsqlTest (owner , objectName , null );
347332 }
@@ -410,7 +395,7 @@ public List<String> units(final String objectType, final String objectName) {
410395 final Object [] binds = new Object [] {objectType , objectName };
411396 return jdbcTemplate .queryForList (sql , String .class , binds );
412397 } else {
413- return Arrays . asList (objectName );
398+ return Collections . singletonList (objectName );
414399 }
415400 }
416401
@@ -868,30 +853,34 @@ public String getDbmsOutput(final int bufferSize) {
868853 sb .append (" sys.dbms_output.get_lines(?, ?);\n " );
869854 sb .append ("END;" );
870855 final String sql = sb .toString ();
871- OutputLines ret = null ;
856+ OutputLines ret ;
872857 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 {
881865 Object array = cs .getArray (1 ).getArray ();
882866 out .setLines ((String []) array );
883867 out .setNumlines (cs .getInt (2 ));
884- return out ;
868+ } catch (NullPointerException e ) {
869+ out .setLines (null );
870+ out .setNumlines (0 );
885871 }
872+ return out ;
886873 });
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 ());
891881 }
892- resultSb .append (System .lineSeparator ());
893882 }
894- } while (ret .getNumlines () > 0 );
883+ } while (ret != null && ret . getNumlines () != null && ret .getNumlines () > 0 );
895884 return resultSb .toString ();
896885 }
897886
@@ -1032,16 +1021,13 @@ public String getSource(final String owner, final String objectType, final Strin
10321021 sb .append (" );\n " );
10331022 sb .append ("END;" );
10341023 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 );
10451031 });
10461032 }
10471033
@@ -1071,6 +1057,6 @@ public String getObjectType(final String owner, final String objectName) {
10711057 sb .append (" WHERE rownum = 1" );
10721058 final String sql = sb .toString ();
10731059 final Object [] binds = new Object [] {owner , objectName };
1074- return jdbcTemplate .queryForObject (sql , binds , String .class );
1060+ return jdbcTemplate .queryForObject (sql , String .class , binds );
10751061 }
10761062}
0 commit comments