@@ -35,6 +35,7 @@ class UtplsqlDao {
35
35
public static val UTPLSQL_PACKAGE_NAME = " UT"
36
36
public static val FIRST_VERSION_WITH_INTERNAL_ANNOTATION_API = 3000004
37
37
public static val FIRST_VERSION_WITH_ANNOTATION_API = 3001003
38
+ public static val NOT_YET_AVAILABLE = 9009009
38
39
var Connection conn
39
40
var JdbcTemplate jdbcTemplate
40
41
// cache fields
@@ -173,16 +174,41 @@ class UtplsqlDao {
173
174
*/
174
175
def boolean containsUtplsqlTest (String owner , String objectName , String subobjectName ) {
175
176
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
179
204
val sql = ' ' '
180
205
SELECT count(*)
181
206
FROM TABLE(ut_runner.get_suites_info(upper(?), upper(?)))
182
207
WHERE item_type IN (' UT_TEST ' , ' UT_SUITE ' )
183
208
AND (item_name = upper(?) or ? IS NULL)
184
209
' ' '
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
186
212
} else {
187
213
// using internal API (deprecated)
188
214
val sql = ' ' '
@@ -209,20 +235,71 @@ class UtplsqlDao {
209
235
END
210
236
) > 0
211
237
' ' '
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
+ }
215
241
} catch (EmptyResultDataAccessException e) {
216
242
return false
217
243
}
218
244
}
219
245
220
246
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
+ }
222
273
}
223
274
224
275
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
+ }
226
303
}
227
304
228
305
/**
0 commit comments