From b3973d09a7d111e85b5e8a6c4904e1e1e28b35d1 Mon Sep 17 00:00:00 2001 From: Jacek Gebal Date: Fri, 29 Nov 2019 22:54:35 +0000 Subject: [PATCH 1/3] Fixed test dependency on user running them. Resolves #969 --- test/ut3_tester/core/test_ut_suite.pkb | 14 +++--- test/ut3_tester/core/test_ut_test.pkb | 60 +++++++++++++------------- test/ut3_tester_helper/run_helper.pkb | 6 +-- 3 files changed, 40 insertions(+), 40 deletions(-) diff --git a/test/ut3_tester/core/test_ut_suite.pkb b/test/ut3_tester/core/test_ut_suite.pkb index 3ea323a6d..9c52df9e5 100644 --- a/test/ut3_tester/core/test_ut_suite.pkb +++ b/test/ut3_tester/core/test_ut_suite.pkb @@ -19,11 +19,11 @@ create or replace package body test_ut_suite is l_suite ut3.ut_suite; begin --Arrange - l_suite := ut3.ut_suite(a_object_owner => USER, a_object_name => 'UT_EXAMPLE_TESTS', a_line_no=> 1); + l_suite := ut3.ut_suite(a_object_owner => 'ut3_tester_helper', a_object_name => 'UT_EXAMPLE_TESTS', a_line_no=> 1); l_suite.path := 'ut3_tester_helper.ut_example_tests'; l_suite.disabled_flag := ut3.ut_utils.boolean_to_int(true); - l_suite.before_all_list := ut3.ut_executables(ut3.ut_executable(USER, 'UT_EXAMPLE_TESTS', 'set_g_number_0', ut3.ut_utils.gc_before_all)); - l_suite.after_all_list := ut3.ut_executables(ut3.ut_executable(USER, 'UT_EXAMPLE_TESTS', 'add_1_to_g_number', ut3.ut_utils.gc_before_all)); + l_suite.before_all_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'UT_EXAMPLE_TESTS', 'set_g_number_0', ut3.ut_utils.gc_before_all)); + l_suite.after_all_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'UT_EXAMPLE_TESTS', 'add_1_to_g_number', ut3.ut_utils.gc_before_all)); l_suite.items.extend; l_suite.items(l_suite.items.last) := ut3.ut_test(a_object_owner => 'ut3_tester_helper', a_object_name => 'UT_EXAMPLE_TESTS',a_name => 'add_1_to_g_number', a_line_no=> 1); l_suite.items.extend; @@ -44,9 +44,9 @@ create or replace package body test_ut_suite is l_suite ut3.ut_suite; begin --Arrange - l_suite := ut3.ut_suite(a_object_owner => USER, a_object_name => 'UT_EXAMPLE_TESTS', a_line_no=> 1); + l_suite := ut3.ut_suite(a_object_owner => 'ut3_tester_helper', a_object_name => 'UT_EXAMPLE_TESTS', a_line_no=> 1); l_suite.path := 'ut3_tester_helper.ut_example_tests'; - l_suite.before_all_list := ut3.ut_executables(ut3.ut_executable(USER, 'UT_EXAMPLE_TESTS', 'failing_procedure', ut3.ut_utils.gc_before_all)); + l_suite.before_all_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'UT_EXAMPLE_TESTS', 'failing_procedure', ut3.ut_utils.gc_before_all)); l_suite.items.extend; l_suite.items(l_suite.items.last) := ut3.ut_test(a_object_owner => 'ut3_tester_helper',a_object_name => 'UT_EXAMPLE_TESTS',a_name => 'set_g_number_0', a_line_no=> 1); --Act @@ -65,9 +65,9 @@ create or replace package body test_ut_suite is l_suite ut3.ut_suite; begin --Arrange - l_suite := ut3.ut_suite(a_object_owner => USER, a_object_name => 'UT_EXAMPLE_TESTS', a_line_no=> 1); + l_suite := ut3.ut_suite(a_object_owner => 'ut3_tester_helper', a_object_name => 'UT_EXAMPLE_TESTS', a_line_no=> 1); l_suite.path := 'ut3_tester_helper.ut_example_tests'; - l_suite.after_all_list := ut3.ut_executables(ut3.ut_executable(USER, 'UT_EXAMPLE_TESTS', 'failing_procedure', ut3.ut_utils.gc_after_all)); + l_suite.after_all_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'UT_EXAMPLE_TESTS', 'failing_procedure', ut3.ut_utils.gc_after_all)); l_suite.items.extend; l_suite.items(l_suite.items.last) := ut3.ut_test(a_object_owner => 'ut3_tester_helper', a_object_name => 'UT_EXAMPLE_TESTS',a_name => 'set_g_number_0', a_line_no=> 1); diff --git a/test/ut3_tester/core/test_ut_test.pkb b/test/ut3_tester/core/test_ut_test.pkb index 2a85a323f..b4dcc2536 100644 --- a/test/ut3_tester/core/test_ut_test.pkb +++ b/test/ut3_tester/core/test_ut_test.pkb @@ -12,7 +12,7 @@ create or replace package body test_ut_test is --Arrange l_suite := ut3.ut_suite(a_object_owner => 'ut3_tester_helper', a_object_name => 'ut_example_tests', a_line_no=> 1); l_suite.path := 'ut3_tester_helper.ut_example_tests'; - l_suite.before_all_list := ut3.ut_executables(ut3.ut_executable(USER, 'ut_example_tests', 'set_g_number_0', ut3.ut_utils.gc_before_all)); + l_suite.before_all_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'set_g_number_0', ut3.ut_utils.gc_before_all)); l_suite.items.extend; l_suite.items(l_suite.items.last) := ut3.ut_test(a_object_owner => 'ut3_tester_helper',a_object_name => 'ut_example_tests',a_name => 'add_1_to_g_number', a_line_no=> 1); @@ -38,11 +38,11 @@ create or replace package body test_ut_test is --Arrange l_suite := ut3.ut_suite(a_object_owner => 'ut3_tester_helper', a_object_name => 'ut_example_tests', a_line_no=> 1); l_suite.path := 'ut3_tester_helper.ut_example_tests'; - l_suite.before_all_list := ut3.ut_executables(ut3.ut_executable(USER, 'ut_example_tests', 'set_g_number_0', ut3.ut_utils.gc_before_all)); + l_suite.before_all_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'set_g_number_0', ut3.ut_utils.gc_before_all)); l_test := ut3.ut_test(a_object_owner => 'ut3_tester_helper',a_object_name => 'ut_example_tests',a_name => 'add_1_to_g_number', a_line_no=> 1); - l_test.before_test_list := ut3.ut_executables(ut3.ut_executable(USER, 'ut_example_tests', 'add_1_to_g_number', ut3.ut_utils.gc_before_test)); - l_test.after_test_list := ut3.ut_executables(ut3.ut_executable(USER, 'ut_example_tests', 'failing_procedure', ut3.ut_utils.gc_after_test)); + l_test.before_test_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'add_1_to_g_number', ut3.ut_utils.gc_before_test)); + l_test.after_test_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'failing_procedure', ut3.ut_utils.gc_after_test)); l_suite.items.extend; l_suite.items(l_suite.items.last) := l_test; l_suite.items.extend; @@ -65,10 +65,10 @@ create or replace package body test_ut_test is begin --Arrange l_suite := ut3.ut_suite(a_object_owner => 'ut3_tester_helper', a_object_name => 'ut_example_tests', a_line_no=> 1); - l_suite.before_all_list := ut3.ut_executables(ut3.ut_executable(USER, 'ut_example_tests', 'set_g_number_0', ut3.ut_utils.gc_before_all)); + l_suite.before_all_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'set_g_number_0', ut3.ut_utils.gc_before_all)); l_test := ut3.ut_test(a_object_owner => 'ut3_tester_helper',a_object_name => 'ut_example_tests',a_name => 'add_1_to_g_number', a_line_no=> 1); - l_test.before_each_list := ut3.ut_executables(ut3.ut_executable(USER, 'ut_example_tests', 'add_1_to_g_number', ut3.ut_utils.gc_before_each)); - l_test.after_each_list := ut3.ut_executables(ut3.ut_executable(USER, 'ut_example_tests', 'failing_procedure', ut3.ut_utils.gc_after_each)); + l_test.before_each_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'add_1_to_g_number', ut3.ut_utils.gc_before_each)); + l_test.after_each_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'failing_procedure', ut3.ut_utils.gc_after_each)); l_suite.items.extend; l_suite.items(l_suite.items.last) := l_test; l_suite.items.extend; @@ -90,11 +90,11 @@ create or replace package body test_ut_test is l_test ut3.ut_test; begin --Arrange - l_suite := ut3.ut_suite(a_object_owner => USER, a_object_name => 'ut_example_tests', a_line_no=> 1); - l_suite.before_all_list := ut3.ut_executables(ut3.ut_executable(USER, 'ut_example_tests', 'set_g_number_0', ut3.ut_utils.gc_before_all)); + l_suite := ut3.ut_suite(a_object_owner => 'ut3_tester_helper', a_object_name => 'ut_example_tests', a_line_no=> 1); + l_suite.before_all_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'set_g_number_0', ut3.ut_utils.gc_before_all)); l_test := ut3.ut_test(a_object_owner =>'ut3_tester_helper',a_object_name => 'ut_example_tests',a_name => 'add_1_to_g_number', a_line_no=> 1); - l_test.before_test_list := ut3.ut_executables(ut3.ut_executable(USER, 'ut_example_tests', 'failing_procedure', ut3.ut_utils.gc_before_test)); - l_test.after_test_list := ut3.ut_executables(ut3.ut_executable(USER, 'ut_example_tests', 'add_1_to_g_number', ut3.ut_utils.gc_after_test)); + l_test.before_test_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'failing_procedure', ut3.ut_utils.gc_before_test)); + l_test.after_test_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'add_1_to_g_number', ut3.ut_utils.gc_after_test)); l_suite.items.extend; l_suite.items(l_suite.items.last) := l_test; l_suite.items.extend; @@ -116,15 +116,15 @@ create or replace package body test_ut_test is l_test ut3.ut_test; begin --Arrange - l_suite := ut3.ut_suite(a_object_owner => USER, a_object_name => 'ut_example_tests', a_line_no=> 1); - l_suite.before_all_list := ut3.ut_executables(ut3.ut_executable(USER, 'ut_example_tests', 'set_g_number_0', ut3.ut_utils.gc_before_all)); - l_test := ut3.ut_test(a_object_owner => USER,a_object_name => 'ut_example_tests',a_name => 'add_1_to_g_number', a_line_no=> 1); - l_test.before_each_list := ut3.ut_executables(ut3.ut_executable(USER, 'ut_example_tests', 'failing_procedure', ut3.ut_utils.gc_before_each)); - l_test.after_each_list := ut3.ut_executables(ut3.ut_executable(USER, 'ut_example_tests', 'add_1_to_g_number', ut3.ut_utils.gc_after_each)); + l_suite := ut3.ut_suite(a_object_owner => 'ut3_tester_helper', a_object_name => 'ut_example_tests', a_line_no=> 1); + l_suite.before_all_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'set_g_number_0', ut3.ut_utils.gc_before_all)); + l_test := ut3.ut_test(a_object_owner => 'ut3_tester_helper',a_object_name => 'ut_example_tests',a_name => 'add_1_to_g_number', a_line_no=> 1); + l_test.before_each_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'failing_procedure', ut3.ut_utils.gc_before_each)); + l_test.after_each_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'add_1_to_g_number', ut3.ut_utils.gc_after_each)); l_suite.items.extend; l_suite.items(l_suite.items.last) := l_test; l_suite.items.extend; - l_suite.items(l_suite.items.last) := ut3.ut_test(a_object_owner => USER,a_object_name => 'ut_example_tests',a_name => 'add_1_to_g_number', a_line_no=> 1); + l_suite.items(l_suite.items.last) := ut3.ut_test(a_object_owner => 'ut3_tester_helper',a_object_name => 'ut_example_tests',a_name => 'add_1_to_g_number', a_line_no=> 1); --Act l_suite.do_execute(); --Assert @@ -148,8 +148,8 @@ create or replace package body test_ut_test is begin l_test.after_each_list := ut3.ut_executables( ut3.ut_executable( - user, - 'UT_EXAMPLE_TESTS', + 'ut3_tester_helper', + 'ut_example_tests', 'add_1_to_g_number', ut3.ut_utils.gc_after_each ) @@ -171,7 +171,7 @@ create or replace package body test_ut_test is ); begin l_test.after_each_list := ut3.ut_executables( - ut3.ut_executable(user, 'ut_example_tests', 'invalid setup name', ut3.ut_utils.gc_after_each) + ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'invalid setup name', ut3.ut_utils.gc_after_each) ); --Act l_test.do_execute(); @@ -190,7 +190,7 @@ create or replace package body test_ut_test is ); begin l_test.after_each_list := ut3.ut_executables( - ut3.ut_executable(user, 'ut_example_tests', null, ut3.ut_utils.gc_after_each) + ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', null, ut3.ut_utils.gc_after_each) ); --Act l_test.do_execute(); @@ -325,7 +325,7 @@ create or replace package body test_ut_test is a_line_no => null ); begin - l_test.before_each_list := ut3.ut_executables(ut3.ut_executable(user, 'ut_example_tests', 'set_g_number_0', ut3.ut_utils.gc_before_each)); + l_test.before_each_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'set_g_number_0', ut3.ut_utils.gc_before_each)); --Act l_test.do_execute(); --Assert @@ -344,7 +344,7 @@ create or replace package body test_ut_test is ); begin l_test.before_each_list := ut3.ut_executables( - ut3.ut_executable(user, 'ut_example_tests', 'invalid setup name', ut3.ut_utils.gc_before_each) + ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'invalid setup name', ut3.ut_utils.gc_before_each) ); --Act l_test.do_execute(); @@ -363,7 +363,7 @@ create or replace package body test_ut_test is ); begin l_test.before_each_list := ut3.ut_executables( - ut3.ut_executable(user, 'ut_example_tests', null, ut3.ut_utils.gc_before_each) + ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', null, ut3.ut_utils.gc_before_each) ); --Act l_test.do_execute(); @@ -529,7 +529,7 @@ create or replace package body test_ut_test is a_line_no => null ); begin - l_test.before_test_list := ut3.ut_executables(ut3.ut_executable(user, 'ut_example_tests', 'set_g_number_0', ut3.ut_utils.gc_before_test)); + l_test.before_test_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'set_g_number_0', ut3.ut_utils.gc_before_test)); --Act l_test.do_execute(); --Assert @@ -547,7 +547,7 @@ create or replace package body test_ut_test is ); begin l_test.before_test_list := ut3.ut_executables( - ut3.ut_executable(user, 'ut_example_tests', 'invalid setup name', ut3.ut_utils.gc_before_test) + ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'invalid setup name', ut3.ut_utils.gc_before_test) ); --Act l_test.do_execute(); @@ -566,7 +566,7 @@ create or replace package body test_ut_test is ); begin l_test.before_test_list := ut3.ut_executables( - ut3.ut_executable(user, 'ut_example_tests', null, ut3.ut_utils.gc_before_test) + ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', null, ut3.ut_utils.gc_before_test) ); --Act l_test.do_execute(); @@ -584,7 +584,7 @@ create or replace package body test_ut_test is a_line_no => null ); begin - l_test.after_test_list := ut3.ut_executables(ut3.ut_executable(user, 'ut_example_tests', 'add_1_to_g_number', ut3.ut_utils.gc_after_test)); + l_test.after_test_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'add_1_to_g_number', ut3.ut_utils.gc_after_test)); --Act l_test.do_execute(); --Assert @@ -602,7 +602,7 @@ create or replace package body test_ut_test is ); begin l_test.after_test_list := ut3.ut_executables( - ut3.ut_executable(user, 'ut_example_tests', 'invalid procedure name', ut3.ut_utils.gc_after_test) + ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', 'invalid procedure name', ut3.ut_utils.gc_after_test) ); --Act l_test.do_execute(); @@ -621,7 +621,7 @@ create or replace package body test_ut_test is ); begin l_test.after_test_list := ut3.ut_executables( - ut3.ut_executable(user, 'ut_example_tests', null, ut3.ut_utils.gc_after_test) + ut3.ut_executable('ut3_tester_helper', 'ut_example_tests', null, ut3.ut_utils.gc_after_test) ); --Act l_test.do_execute(); diff --git a/test/ut3_tester_helper/run_helper.pkb b/test/ut3_tester_helper/run_helper.pkb index ef6528e04..9a9c8587f 100644 --- a/test/ut3_tester_helper/run_helper.pkb +++ b/test/ut3_tester_helper/run_helper.pkb @@ -550,11 +550,11 @@ create or replace package body run_helper is begin --Arrange execute immediate 'delete from ut$test_table'; - l_suite := ut3.ut_suite(a_object_owner => USER, a_object_name => 'UT_TRANSACTION_CONTROL', a_line_no=> 1); + l_suite := ut3.ut_suite(a_object_owner => 'ut3_tester_helper', a_object_name => 'UT_TRANSACTION_CONTROL', a_line_no=> 1); l_suite.path := 'ut_transaction_control'; - l_suite.before_all_list := ut3.ut_executables(ut3.ut_executable(USER, 'UT_TRANSACTION_CONTROL', 'setup', ut3.ut_utils.gc_before_all)); + l_suite.before_all_list := ut3.ut_executables(ut3.ut_executable('ut3_tester_helper', 'UT_TRANSACTION_CONTROL', 'setup', ut3.ut_utils.gc_before_all)); l_suite.items.extend; - l_suite.items(l_suite.items.last) := ut3.ut_test(a_object_owner => USER, a_object_name => 'ut_transaction_control',a_name => a_procedure_name, a_line_no=> 1); + l_suite.items(l_suite.items.last) := ut3.ut_test(a_object_owner => 'ut3_tester_helper', a_object_name => 'ut_transaction_control',a_name => a_procedure_name, a_line_no=> 1); l_suite.set_rollback_type(a_rollback_type); --Act From 39d144ae7f55cf13cd22d5d313f96c742980b305 Mon Sep 17 00:00:00 2001 From: Jacek Gebal Date: Sat, 30 Nov 2019 00:59:11 +0000 Subject: [PATCH 2/3] Changed how savepoint name is generated. Resolves #982 --- source/core/coverage/proftab.sql | 2 +- source/core/ut_savepoint_seq.sql | 15 --------------- source/core/ut_utils.pkb | 2 +- source/install.sql | 1 - source/uninstall_objects.sql | 2 -- 5 files changed, 2 insertions(+), 20 deletions(-) delete mode 100644 source/core/ut_savepoint_seq.sql diff --git a/source/core/coverage/proftab.sql b/source/core/coverage/proftab.sql index 62c69dc9a..a5d09f43d 100644 --- a/source/core/coverage/proftab.sql +++ b/source/core/coverage/proftab.sql @@ -37,7 +37,7 @@ begin if l_tab_exist = 0 then execute immediate q'[create table plsql_profiler_units ( - runid number references plsql_profiler_runs, + runid number(18) references plsql_profiler_runs, unit_number number, -- internally generated library unit # unit_type varchar2(128), -- library unit type unit_owner varchar2(128), -- library unit owner name diff --git a/source/core/ut_savepoint_seq.sql b/source/core/ut_savepoint_seq.sql deleted file mode 100644 index e1d80f452..000000000 --- a/source/core/ut_savepoint_seq.sql +++ /dev/null @@ -1,15 +0,0 @@ -create sequence ut_savepoint_seq - /* - utPLSQL - Version 3 - Copyright 2016 - 2019 utPLSQL Project - Licensed under the Apache License, Version 2.0 (the "License"): - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - start with 1 cache 20; \ No newline at end of file diff --git a/source/core/ut_utils.pkb b/source/core/ut_utils.pkb index 83d519811..d593f0a65 100644 --- a/source/core/ut_utils.pkb +++ b/source/core/ut_utils.pkb @@ -59,7 +59,7 @@ create or replace package body ut_utils is function gen_savepoint_name return varchar2 is begin - return 's'||trim(to_char(ut_savepoint_seq.nextval,'0000000000000000000000000000')); + return 's'||to_char(systimestamp,'yyyymmddhh24missff9'); end; procedure debug_log(a_message varchar2) is diff --git a/source/install.sql b/source/install.sql index 1f9913b0a..5a4f1449c 100644 --- a/source/install.sql +++ b/source/install.sql @@ -59,7 +59,6 @@ end; @@install_component.sql 'core/types/ut_reporters_info.tps' @@install_component.sql 'core/ut_utils.pks' @@install_component.sql 'core/ut_metadata.pks' -@@install_component.sql 'core/ut_savepoint_seq.sql' @@install_component.sql 'core/ut_utils.pkb' @@install_component.sql 'core/ut_metadata.pkb' @@install_component.sql 'reporters/ut_ansiconsole_helper.pks' diff --git a/source/uninstall_objects.sql b/source/uninstall_objects.sql index c905153f4..d540efbbb 100644 --- a/source/uninstall_objects.sql +++ b/source/uninstall_objects.sql @@ -243,8 +243,6 @@ end; drop package ut_utils; -drop sequence ut_savepoint_seq; - drop type ut_documentation_reporter force; drop type ut_debug_reporter force; From 4bb7a951ef5bac19ec98233e979d093c3bef9bc8 Mon Sep 17 00:00:00 2001 From: Jacek Gebal Date: Sat, 30 Nov 2019 16:55:24 +0000 Subject: [PATCH 3/3] Added a hash of owner to the generated savepoint name. Resolves #982 --- source/core/coverage/proftab.sql | 2 +- source/core/ut_savepoint_seq.sql | 15 +++++++++++++++ source/core/ut_utils.pkb | 3 ++- source/install.sql | 1 + source/uninstall_objects.sql | 2 ++ 5 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 source/core/ut_savepoint_seq.sql diff --git a/source/core/coverage/proftab.sql b/source/core/coverage/proftab.sql index a5d09f43d..62c69dc9a 100644 --- a/source/core/coverage/proftab.sql +++ b/source/core/coverage/proftab.sql @@ -37,7 +37,7 @@ begin if l_tab_exist = 0 then execute immediate q'[create table plsql_profiler_units ( - runid number(18) references plsql_profiler_runs, + runid number references plsql_profiler_runs, unit_number number, -- internally generated library unit # unit_type varchar2(128), -- library unit type unit_owner varchar2(128), -- library unit owner name diff --git a/source/core/ut_savepoint_seq.sql b/source/core/ut_savepoint_seq.sql new file mode 100644 index 000000000..b87d18e6d --- /dev/null +++ b/source/core/ut_savepoint_seq.sql @@ -0,0 +1,15 @@ +create sequence ut_savepoint_seq + /* + utPLSQL - Version 3 + Copyright 2016 - 2019 utPLSQL Project + Licensed under the Apache License, Version 2.0 (the "License"): + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + start with 1 cache 20 minvalue 1 maxvalue 99999999999999999 cycle; \ No newline at end of file diff --git a/source/core/ut_utils.pkb b/source/core/ut_utils.pkb index d593f0a65..8ebb50f53 100644 --- a/source/core/ut_utils.pkb +++ b/source/core/ut_utils.pkb @@ -22,6 +22,7 @@ create or replace package body ut_utils is gc_invalid_first_xml_char constant varchar2(50) := '[^_a-zA-Z]'; gc_invalid_xml_char constant varchar2(50) := '[^_a-zA-Z0-9\.-]'; gc_full_valid_xml_name constant varchar2(50) := '^([_a-zA-Z])([_a-zA-Z0-9\.-])*$'; + gc_owner_hash constant integer(11) := dbms_utility.get_hash_value( ut_owner(), 0, power(2,31)-1); function surround_with(a_value varchar2, a_quote_char varchar2) return varchar2 is begin @@ -59,7 +60,7 @@ create or replace package body ut_utils is function gen_savepoint_name return varchar2 is begin - return 's'||to_char(systimestamp,'yyyymmddhh24missff9'); + return 's'||gc_owner_hash||trim(to_char(ut_savepoint_seq.nextval,'00000000000000000')); end; procedure debug_log(a_message varchar2) is diff --git a/source/install.sql b/source/install.sql index 5a4f1449c..1f9913b0a 100644 --- a/source/install.sql +++ b/source/install.sql @@ -59,6 +59,7 @@ end; @@install_component.sql 'core/types/ut_reporters_info.tps' @@install_component.sql 'core/ut_utils.pks' @@install_component.sql 'core/ut_metadata.pks' +@@install_component.sql 'core/ut_savepoint_seq.sql' @@install_component.sql 'core/ut_utils.pkb' @@install_component.sql 'core/ut_metadata.pkb' @@install_component.sql 'reporters/ut_ansiconsole_helper.pks' diff --git a/source/uninstall_objects.sql b/source/uninstall_objects.sql index d540efbbb..c905153f4 100644 --- a/source/uninstall_objects.sql +++ b/source/uninstall_objects.sql @@ -243,6 +243,8 @@ end; drop package ut_utils; +drop sequence ut_savepoint_seq; + drop type ut_documentation_reporter force; drop type ut_debug_reporter force;