@@ -35,6 +35,7 @@ class UtplsqlDao {
3535 public static val UTPLSQL_PACKAGE_NAME = " UT"
3636 public static val FIRST_VERSION_WITH_INTERNAL_ANNOTATION_API = 3000004
3737 public static val FIRST_VERSION_WITH_ANNOTATION_API = 3001003
38+ public static val NOT_YET_AVAILABLE = 9009009
3839 var Connection conn
3940 var JdbcTemplate jdbcTemplate
4041 // cache fields
@@ -173,16 +174,41 @@ class UtplsqlDao {
173174 */
174175 def boolean containsUtplsqlTest (String owner , String objectName , String subobjectName ) {
175176 try {
176- var Integer found
177- if (normalizedUtPlsqlVersionNumber >= FIRST_VERSION_WITH_ANNOTATION_API ) {
178- // using API available since 3.1.3
177+ if (normalizedUtPlsqlVersionNumber >= NOT_YET_AVAILABLE && objectName !== null && subobjectName !== null ) {
178+ // use faster check function available since v3.1.3 (FIRST_VERSION_WITH_ANNOTATION_API)
179+ // disabled (NOT_YET_AVAILABLE) due to wrong results in v3.1.7
180+ val sql = ' ' '
181+ DECLARE
182+ l_return VARCHAR2(1) := ' 0 ' ;
183+ BEGIN
184+ IF ut_runner.is_test(?, ?, ?) THEN
185+ l_return := ' 1 ' ;
186+ END IF;
187+ ? := l_return;
188+ END;
189+ ' ' '
190+ val ret = jdbcTemplate. execute(sql, new CallableStatementCallback<Boolean > () {
191+ override Boolean doInCallableStatement(CallableStatement cs) throws SQLException , DataAccessException {
192+ cs. setString(1 , owner)
193+ cs. setString(2 , objectName)
194+ cs. setString(3 , subobjectName)
195+ cs. registerOutParameter(4 , Types . VARCHAR );
196+ cs. execute
197+ val ret = cs. getString(4 )
198+ return ret == " 1"
199+ }
200+ })
201+ return ret
202+ } else if (normalizedUtPlsqlVersionNumber >= FIRST_VERSION_WITH_ANNOTATION_API ) {
203+ // using API available since 3.1.3, can handle nulls in objectName and subobjectName
179204 val sql = ' ' '
180205 SELECT count(*)
181206 FROM TABLE(ut_runner.get_suites_info(upper(?), upper(?)))
182207 WHERE item_type IN (' UT_TEST ' , ' UT_SUITE ' )
183208 AND (item_name = upper(?) or ? IS NULL)
184209 ' ' '
185- found = jdbcTemplate. queryForObject(sql, Integer , #[owner, objectName, subobjectName, subobjectName])
210+ val found = jdbcTemplate. queryForObject(sql, Integer , #[owner, objectName, subobjectName, subobjectName])
211+ return found > 0
186212 } else {
187213 // using internal API (deprecated)
188214 val sql = ' ' '
@@ -209,20 +235,71 @@ class UtplsqlDao {
209235 END
210236 ) > 0
211237 ' ' '
212- found = jdbcTemplate. queryForObject(sql, Integer , #[subobjectName, subobjectName, owner, objectName, objectName])
213- }
214- return found > 0
238+ val found = jdbcTemplate. queryForObject(sql, Integer , #[subobjectName, subobjectName, owner, objectName, objectName])
239+ return found > 0
240+ }
215241 } catch (EmptyResultDataAccessException e) {
216242 return false
217243 }
218244 }
219245
220246 def boolean containsUtplsqlTest (String owner ) {
221- return containsUtplsqlTest(owner, null , null )
247+ if (normalizedUtPlsqlVersionNumber >= NOT_YET_AVAILABLE ) {
248+ // use faster check function available since v3.1.3 (FIRST_VERSION_WITH_ANNOTATION_API)
249+ // disabled (NOT_YET_AVAILABLE) due to wrong results in v3.1.7
250+ val sql = ' ' '
251+ DECLARE
252+ l_return VARCHAR2(1) := ' 0 ' ;
253+ BEGIN
254+ IF ut_runner.has_suites(?) THEN
255+ l_return := ' 1 ' ;
256+ END IF;
257+ ? := l_return;
258+ END;
259+ ' ' '
260+ val ret = jdbcTemplate. execute(sql, new CallableStatementCallback<Boolean > () {
261+ override Boolean doInCallableStatement(CallableStatement cs) throws SQLException , DataAccessException {
262+ cs. setString(1 , owner)
263+ cs. registerOutParameter(2 , Types . VARCHAR );
264+ cs. execute
265+ val ret = cs. getString(2 )
266+ return ret == " 1"
267+ }
268+ })
269+ return ret
270+ } else {
271+ return containsUtplsqlTest(owner, null , null )
272+ }
222273 }
223274
224275 def boolean containsUtplsqlTest (String owner , String objectName ) {
225- return containsUtplsqlTest(owner, objectName, null )
276+ if (normalizedUtPlsqlVersionNumber >= NOT_YET_AVAILABLE ) {
277+ // use faster check function available since v3.1.3 (FIRST_VERSION_WITH_ANNOTATION_API)
278+ // disabled (NOT_YET_AVAILABLE) due to wrong results in v3.1.7
279+ val sql = ' ' '
280+ DECLARE
281+ l_return VARCHAR2(1) := ' 0 ' ;
282+ BEGIN
283+ IF ut_runner.is_suite(?, ?) THEN
284+ l_return := ' 1 ' ;
285+ END IF;
286+ ? := l_return;
287+ END;
288+ ' ' '
289+ val ret = jdbcTemplate. execute(sql, new CallableStatementCallback<Boolean > () {
290+ override Boolean doInCallableStatement(CallableStatement cs) throws SQLException , DataAccessException {
291+ cs. setString(1 , owner)
292+ cs. setString(2 , objectName)
293+ cs. registerOutParameter(3 , Types . VARCHAR );
294+ cs. execute
295+ val ret = cs. getString(3 )
296+ return ret == " 1"
297+ }
298+ })
299+ return ret
300+ } else {
301+ return containsUtplsqlTest(owner, objectName, null )
302+ }
226303 }
227304
228305 /**
0 commit comments