diff --git a/README.md b/README.md index 9769555..1709516 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,59 @@ -# wtPLSQL - PL/SQL Whitebox Testing +[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) -Welcome to the wtPLSQL repository on GitHub. This site is for contributors. +# wtPLSQL - Whitebox Testing for PLSQL -[wtPLSQL website (on GitHub.io)](https://ddieterich.github.io/wtPLSQL/) +Welcome to the wtPLSQL source code repository on GitHub. -The wtPLSQL website has more information about how to use wtPLSQL and why it is different. It also includes wtPLSQL features, definitions, and best practices. +The http://wtPLSQL.org website (hosted on GitHub.io) has more information about how to use wtPLSQL and why it is different. -[Get the latest release here.](https://github.com/DDieterich/wtPLSQL/releases) +[Click here](https://github.com/DDieterich/wtPLSQL/releases/latest) for the latest release. -[wtPLSQL compatability wiki page.](https://github.com/DDieterich/wtPLSQL/wiki/Compatibility) +[Click here](https://github.com/DDieterich/wtPLSQL/wiki/Compatibility) for the compatibility wiki page. -### Files and Directories +*NOTE:* Issues are tracked in the Wiki. See: [Issues Summary](https://github.com/wtPLSQL/wtPLSQL/wiki/Z-Issues-Summary) + + +### Versions + +* The "master" branch contains this website, other documentation, and source code for the latest release +* The default "V1.2" branch contains the website, other documentation, and source code that is under development for the next release. -File Name | Description ----------------------|------------ -docs | Directory for documentation. Also contains wtPLSQL website (GitHub.io) source. -releases | Directory for current and previous releases (zip files). -src | Directory for source code. -LICENSE | Open Source Terms and Conditions. -README.md | Top level Markdown file for the wtPLSQL repository on GitHub ### Participation -See the "To Do" column in one of the [Projects](https://github.com/DDieterich/wtPLSQL/projects) for cards/issues that are ready to work. +See the ["V1.2 Hooks and GUI" Milestone](https://github.com/DDieterich/wtPLSQL/milestone/4) for issues that are ready to work. + +The [repository wiki](https://github.com/DDieterich/wtPLSQL/wiki) includes helpful procedures and discussions for code development and repository maintenance. + +All software documentation is on the http://wtPLSQL.org website. The document repository is in the "docs" directory (see table below). + + +## File/Folder List + +File Name | Description +----------|------------ +apex | Application Express Scripts Folder +builds | Build/Test Scripts Folder +conv | Conversion Utility Scripts Folder +demo | Demonstrations and Examples Folder +diffs | Upgrade/Downgrade Scripts Folder +docs | User Documentation Folder. Also contains wtPLSQL website (GitHub.io) source. +grbsrc | ODBCapture Source Code Folder. +junit | JUnit XML Report Scripts Folder +wtpgrb | Configuration Data for ODBCapture Folder +wtpsav | Persisting Test Results Add-on Scripts Folder +wtpsrc | Core wtPLSQL Component Scripts Folder +LICENSE | Open Source Terms and Conditions. +README.md | Top level Markdown file for the wtPLSQL repository on GitHub + -The [repository wiki](https://github.com/DDieterich/wtPLSQL/wiki) includes helpful procedures and discussions. +## Installation -[DBDocs (like JavaDocs) on GitHub.io](https://ddieterich.github.io/wtPLSQL/core/DBDocs/index.html) +1. cd wtpsrc +2. sqlplus / as sysdba @install.sql +3. select * from odbcapture_installation_logs; +4. If problems found: more *.log -[E-R Diagram on GitHub.io](https://ddieterich.github.io/wtPLSQL/core/ER_Diagrams.pdf) --- diff --git a/apex/APEX Scratch Notes.txt b/apex/APEX Scratch Notes.txt new file mode 100644 index 0000000..5f56317 --- /dev/null +++ b/apex/APEX Scratch Notes.txt @@ -0,0 +1,84 @@ + +P2_NEW_DB_LINK_HOST: +select '//localhost:1521/' || global_name from global_name; + +Page 2, p_process_name=> 'TEST_ALL_SEQ': +on dbl.db_link || ''.'' like proc.owner || ''.%'''|| +and dbl.db_link || ''.'' like dbl.username || ''.%'''|| + +Page 2, p_process_name=> 'TEST_ALL_PAR': +group by proc.owner'|| +order by proc.owner )'|| + + +create or replace view wt_test_runners as +select owner, object_name PACKAGE_NAME + from dba_procedures + where procedure_name = wtplsql.get_runner_entry_point + and object_type = 'PACKAGE'; + +-- Page 0: P0_TEST_OWNER LOV +select owner DISPLAY + ,owner RETURN + from wt_test_runners + group by owner + order by owner; + +-- Page 0: P0_TEST_RUNNER LOV +select package_name DISPLAY + ,package_name RETURN + from wt_test_runners + where owner = 'WTP' + order by package_name; + +-- Page 2: All Test Runner Owners +select proc.owner TEST_RUNNER_OWNER + ,dbl.db_link + ,dbl.username + ,dbl.host + ,dbl.created + ,case when dbl.username is null + then + 'Username missing' + when dbl.host is null + then + 'Host value missing' + when dbl.db_link || '.' not like dbl.username || '.%' + then + 'DB Link != Username' + else + 'Good Link' + end LINK_STATUS + from wt_test_runners proc + left join user_db_links dbl + on dbl.db_link = proc.owner + or dbl.username = proc.owner + group by proc.owner + ,dbl.db_link + ,dbl.username + ,dbl.host + ,dbl.created; + +-- Page2: TEST_ALL_SEQ + select proc.owner TEST_OWNER + from wt_test_runners proc + join user_db_links dbl + on dbl.db_link = proc.owner + and dbl.db_link || '.' like dbl.username || '.%' + and dbl.username is not null + and dbl.host is not null + group by proc.owner + order by proc.owner; + +-- Page2: TEST_ALL_PAR + select proc.owner TEST_OWNER + from wt_test_runners proc + join user_db_links dbl + on dbl.db_link || '.' like proc.owner || '.%' + and dbl.db_link || '.' like dbl.username || '.%' + and dbl.username is not null + and dbl.host is not null + group by proc.owner; + +select * from wt_results + where testcase is null; diff --git a/apex/README.md b/apex/README.md new file mode 100644 index 0000000..2e606db --- /dev/null +++ b/apex/README.md @@ -0,0 +1,38 @@ +# Application Express Scripts + + +File Name | Description +------------------|------------ +f700.sql | APEX Application for wtPLSQL +install.sql | Main Installation Script +WTP_workspace.sql | APEX Workspace for wtPLSQL + + +** Note: Requires installation of Persist Add-on. + + +### Install Procedure + +1) sqlplus SYS/password as SYSDBA @install +2) exit +3) Compare install.LST to install.LST + + +### Un-install Procedure + + + +### Gui Demo + + 1) Demo Installation + 2) Demo Review ??? + 3) GUI Installation + 4) Setup DB Link and Job Queue Process Parameter + 5) Run Demo Test (w/ Test Case, No DBOUT) + 6) Review Test Run + 7) Review Test Case + 8) Run Demo Test (w/ DBOUT) + 9) Review Test Run +10) Search DBOUT +11) Run Test All +10) Dashboard diff --git a/apex/WTP_workspace.sql b/apex/WTP_workspace.sql new file mode 100644 index 0000000..7d0ed16 --- /dev/null +++ b/apex/WTP_workspace.sql @@ -0,0 +1,160 @@ +set define off +set verify off +set serveroutput on size 1000000 +set feedback off +WHENEVER SQLERROR EXIT SQL.SQLCODE ROLLBACK +begin wwv_flow.g_import_in_progress := true; end; +/ + +-- AAAA PPPPP EEEEEE XX XX +-- AA AA PP PP EE XX XX +-- AA AA PP PP EE XX XX +-- AAAAAAAAAA PPPPP EEEE XXXX +-- AA AA PP EE XX XX +-- AA AA PP EE XX XX +-- AA AA PP EEEEEE XX XX +begin +select value into wwv_flow_api.g_nls_numeric_chars from nls_session_parameters where parameter='NLS_NUMERIC_CHARACTERS'; +execute immediate 'alter session set nls_numeric_characters=''.,'''; +end; +/ +-- Workspace, user group, user and team development export +-- Generated 2018.09.11 04:08:29 by ADMIN +-- This script can be run in sqlplus as the owner of the Oracle Apex owner. +begin + wwv_flow_api.set_security_group_id(p_security_group_id=>4779017982861389); +end; +/ +---------------- +-- W O R K S P A C E +-- Creating a workspace will not create database schemas or objects. +-- This API creates only the meta data for this APEX workspace +prompt Creating workspace WTP... +begin +wwv_flow_fnd_user_api.create_company ( + p_id => 4779103101861408, + p_provisioning_company_id => 4779017982861389, + p_short_name => 'WTP', + p_first_schema_provisioned => 'WTP', + p_company_schemas => 'WTP', + p_expire_fnd_user_accounts => '', + p_account_lifetime_days => '', + p_fnd_user_max_login_failures => '', + p_allow_plsql_editing => 'Y', + p_allow_app_building_yn => 'Y', + p_allow_sql_workshop_yn => 'Y', + p_allow_websheet_dev_yn => 'Y', + p_allow_team_development_yn => 'Y', + p_allow_to_be_purged_yn => 'Y', + p_source_identifier => 'WTP', + p_builder_notification_message => ''); +end; +/ +---------------- +-- G R O U P S +-- +prompt Creating Groups... +---------------- +-- U S E R S +-- User repository for use with apex cookie based authenticaion. +-- +prompt Creating Users... +begin +wwv_flow_fnd_user_api.create_fnd_user ( + p_user_id => '4778909006861389', + p_user_name => 'WTP', + p_first_name => '', + p_last_name => '', + p_description => '', + p_email_address=> '', + p_web_password => '3EA63A6A974BFB0A243AA4FD397AF841', + p_web_password_format => 'HEX_ENCODED_DIGEST_V2', + p_group_ids => '', + p_developer_privs=> 'ADMIN:CREATE:DATA_LOADER:EDIT:HELP:MONITOR:SQL', + p_default_schema=> 'WTP', + p_account_locked=> 'N', + p_account_expiry=> to_date('201808180910','YYYYMMDDHH24MI'), + p_failed_access_attempts=> 0, + p_change_password_on_first_use=> 'N', + p_first_password_use_occurred=> 'Y', + p_allow_app_building_yn=> 'Y', + p_allow_sql_workshop_yn=> 'Y', + p_allow_websheet_dev_yn=> 'Y', + p_allow_team_development_yn=> 'Y', + p_allow_access_to_schemas => ''); +end; +/ +prompt Check Compatibility... +begin +-- This date identifies the minimum version required to import this file. +wwv_flow_team_api.check_version(p_version_yyyy_mm_dd=>'2010.05.13'); +end; +/ + +begin wwv_flow.g_import_in_progress := true; wwv_flow.g_user := USER; end; +/ + +-- +prompt ...news +-- +begin +null; +end; +/ +-- +prompt ...links +-- +begin +null; +end; +/ +-- +prompt ...bugs +-- +begin +null; +end; +/ +-- +prompt ...events +-- +begin +null; +end; +/ +-- +prompt ...features +-- +begin +null; +end; +/ +-- +prompt ...tasks +-- +begin +null; +end; +/ +-- +prompt ...feedback +-- +begin +null; +end; +/ +-- +prompt ...task defaults +-- +begin +null; +end; +/ +commit; +begin +execute immediate 'begin dbms_session.set_nls( param => ''NLS_NUMERIC_CHARACTERS'', value => '''''''' || replace(wwv_flow_api.g_nls_numeric_chars,'''''''','''''''''''') || ''''''''); end;'; +end; +/ +set verify on +set feedback on +prompt ...done diff --git a/apex/f700.sql b/apex/f700.sql new file mode 100644 index 0000000..3a1fc5f --- /dev/null +++ b/apex/f700.sql @@ -0,0 +1,17611 @@ +set define off +set verify off +set serveroutput on size 1000000 +set feedback off +WHENEVER SQLERROR EXIT SQL.SQLCODE ROLLBACK +begin wwv_flow.g_import_in_progress := true; end; +/ + + +--application/set_environment +prompt APPLICATION 700 - wtPLSQL Core GUI +-- +-- Application Export: +-- Application: 700 +-- Name: wtPLSQL Core GUI +-- Date and Time: 18:08 Monday November 5, 2018 +-- Exported By: WTP +-- Flashback: 0 +-- Export Type: Application Export +-- Version: 4.0.2.00.09 + +-- Import: +-- Using application builder +-- or +-- Using SQL*Plus as the Oracle user APEX_040000 or as the owner (parsing schema) of the application. + +-- Application Statistics: +-- Pages: 8 +-- Items: 27 +-- Computations: 8 +-- Validations: 0 +-- Processes: 16 +-- Regions: 41 +-- Buttons: 6 +-- Dynamic Actions: 5 +-- Shared Components +-- Breadcrumbs: 1 +-- Entries 2 +-- Items: 1 +-- Computations: 1 +-- Processes: 1 +-- Parent Tabs: 0 +-- Tab Sets: 1 +-- Tabs: 6 +-- NavBars: 1 +-- Lists: 0 +-- Shortcuts: 0 +-- Themes: 1 +-- Templates: +-- Page: 15 +-- List: 15 +-- Report: 11 +-- Label: 5 +-- Region: 25 +-- Messages: 0 +-- Build Options: 0 + + +-- AAAA PPPPP EEEEEE XX XX +-- AA AA PP PP EE XX XX +-- AA AA PP PP EE XX XX +-- AAAAAAAAAA PPPPP EEEE XXXX +-- AA AA PP EE XX XX +-- AA AA PP EE XX XX +-- AA AA PP EEEEEE XX XX +prompt Set Credentials... + +begin + + -- Assumes you are running the script connected to SQL*Plus as the Oracle user APEX_040000 or as the owner (parsing schema) of the application. + wwv_flow_api.set_security_group_id(p_security_group_id=>nvl(wwv_flow_application_install.get_workspace_id,4779017982861389)); + +end; +/ + +begin wwv_flow.g_import_in_progress := true; end; +/ +begin + +select value into wwv_flow_api.g_nls_numeric_chars from nls_session_parameters where parameter='NLS_NUMERIC_CHARACTERS'; + +end; + +/ +begin execute immediate 'alter session set nls_numeric_characters=''.,'''; + +end; + +/ +begin wwv_flow.g_browser_language := 'en'; end; +/ +prompt Check Compatibility... + +begin + +-- This date identifies the minimum version required to import this file. +wwv_flow_api.set_version(p_version_yyyy_mm_dd=>'2010.05.13'); + +end; +/ + +prompt Set Application ID... + +begin + + -- SET APPLICATION ID + wwv_flow.g_flow_id := nvl(wwv_flow_application_install.get_application_id,700); + wwv_flow_api.g_id_offset := nvl(wwv_flow_application_install.get_offset,0); +null; + +end; +/ + +--application/delete_application + +begin + + -- Remove Application +wwv_flow_api.remove_flow(nvl(wwv_flow_application_install.get_application_id,700)); + +end; +/ + + +begin + +wwv_flow_audit.remove_audit_trail(nvl(wwv_flow_application_install.get_application_id,700)); +null; + +end; +/ + +--application/create_application + +begin + +wwv_flow_api.create_flow( + p_id => nvl(wwv_flow_application_install.get_application_id,700), + p_display_id=> nvl(wwv_flow_application_install.get_application_id,700), + p_owner => nvl(wwv_flow_application_install.get_schema,'WTP'), + p_name => nvl(wwv_flow_application_install.get_application_name,'wtPLSQL Core GUI'), + p_alias => nvl(wwv_flow_application_install.get_application_alias,'WTPLSQLCORE'), + p_page_view_logging => 'YES', + p_default_page_template=> 4837525507414910 + wwv_flow_api.g_id_offset, + p_printer_friendly_template=> 4837724123414910 + wwv_flow_api.g_id_offset, + p_default_region_template=> 4840201642414912 + wwv_flow_api.g_id_offset, + p_error_template=> 4837131094414910 + wwv_flow_api.g_id_offset, + p_page_protection_enabled_y_n=> 'Y', + p_checksum_salt_last_reset => '20181105180850', + p_max_session_length_sec=> 28800, + p_home_link=> 'f?p=&APP_ID.:3:&SESSION.', + p_flow_language=> 'en', + p_flow_language_derived_from=> 'FLOW_PRIMARY_LANGUAGE', + p_allow_feedback_yn=> 'N', + p_date_format=> 'DD-MON-YYYY HH24:MI:SS', + p_flow_image_prefix => nvl(wwv_flow_application_install.get_image_prefix,'/i/'), + p_publish_yn=> 'N', + p_documentation_banner=> '', + p_authentication=> 'CUSTOM2', + p_login_url=> '', + p_logout_url=> 'wwv_flow_custom_auth_std.logout?p_this_flow=&APP_ID.&p_next_flow_page_sess=&APP_ID.:1', + p_application_tab_set=> 1, + p_logo_image => 'TEXT:wtPLSQL - White Box Test Server for PL/SQL', + p_public_url_prefix => '', + p_public_user=> 'APEX_PUBLIC_USER', + p_dbauth_url_prefix => '', + p_proxy_server=> nvl(wwv_flow_application_install.get_proxy,''), + p_cust_authentication_process=> '.'||to_char(4845319779414920 + wwv_flow_api.g_id_offset)||'.', + p_cust_authentication_page=> '', + p_custom_auth_login_url=> '', + p_flow_version=> 'wtPLSQL Core GUI V1.2.0', + p_flow_status=> 'AVAILABLE_W_EDIT_LINK', + p_flow_unavailable_text=> 'This application is currently unavailable at this time.', + p_build_status=> 'RUN_AND_BUILD', + p_exact_substitutions_only=> 'Y', + p_vpd=> '', + p_csv_encoding=> 'Y', + p_auto_time_zone=> 'N', + p_default_error_display_loc=> 'INLINE_WITH_FIELD_AND_NOTIFICATION', + p_theme_id => 7, + p_default_label_template => 4843803724414915 + wwv_flow_api.g_id_offset, + p_default_report_template => 4843113555414914 + wwv_flow_api.g_id_offset, + p_default_list_template => 4842217442414913 + wwv_flow_api.g_id_offset, + p_default_menu_template => 4844109108414915 + wwv_flow_api.g_id_offset, + p_default_button_template => 4838226535414911 + wwv_flow_api.g_id_offset, + p_default_chart_template => 4839217975414912 + wwv_flow_api.g_id_offset, + p_default_form_template => 4839304121414912 + wwv_flow_api.g_id_offset, + p_default_wizard_template => 4840913627414912 + wwv_flow_api.g_id_offset, + p_default_tabform_template => 4840201642414912 + wwv_flow_api.g_id_offset, + p_default_reportr_template =>4840201642414912 + wwv_flow_api.g_id_offset, + p_default_menur_template => 4838801336414912 + wwv_flow_api.g_id_offset, + p_default_listr_template => 4839116402414912 + wwv_flow_api.g_id_offset, + p_default_irr_template => 4839831975414912 + wwv_flow_api.g_id_offset, + p_last_updated_by => 'WTP', + p_last_upd_yyyymmddhh24miss=> '20181105180850', + p_required_roles=> wwv_flow_utilities.string_to_table2('')); + + +end; +/ + +prompt ...authorization schemes +-- + +begin + +null; + +end; +/ + +--application/shared_components/navigation/navigation_bar +prompt ...navigation bar entries +-- + +begin + +wwv_flow_api.create_icon_bar_item( + p_id => 4845410456414920 + wwv_flow_api.g_id_offset, + p_flow_id => wwv_flow.g_flow_id, + p_icon_sequence=> 200, + p_icon_image => '', + p_icon_subtext=> 'Logout', + p_icon_target=> '&LOGOUT_URL.', + p_icon_image_alt=> 'Logout', + p_icon_height=> 32, + p_icon_width=> 32, + p_icon_height2=> 24, + p_icon_width2=> 24, + p_nav_entry_is_feedback_yn => 'N', + p_icon_bar_disp_cond=> '', + p_icon_bar_disp_cond_type=> '', + p_begins_on_new_line=> '', + p_cell_colspan => 1, + p_onclick=> '', + p_icon_bar_comment=> ''); + + +end; +/ + +prompt ...application processes +-- +--application/shared_components/logic/application_processes/initialize_items + +begin + +declare + p varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +p:=p||'DECLARE'||chr(10)|| +' -- Set Test Run ID based on Test Owner and (optionally) Test Runner'||chr(10)|| +' procedure set_run_id (in_runner_name varchar2 default NULL) is'||chr(10)|| +' begin'||chr(10)|| +' -- Group function will not raise NO_DATA_FOUND'||chr(10)|| +' select max(id)'||chr(10)|| +' into :P0_TEST_RUN_ID'||chr(10)|| +' from wt_test_runs'||chr(10)|| +' where runner_owner = :P0_TEST_OWNER'||chr(10)|| +' and ( in_runner_name is NULL'||chr(10)|| +' or in_runner_name = '; + +p:=p||'runner_name);'||chr(10)|| +' end set_run_id;'||chr(10)|| +' -- Set Owner based on Test Run ID'||chr(10)|| +' procedure set_owner is'||chr(10)|| +' begin'||chr(10)|| +' -- Group function will not raise NO_DATA_FOUND'||chr(10)|| +' select min(runner_owner)'||chr(10)|| +' into :P0_TEST_OWNER'||chr(10)|| +' from wt_test_runs'||chr(10)|| +' where id = :P0_TEST_RUN_ID;'||chr(10)|| +' end set_owner;'||chr(10)|| +' -- Set Runner based on Test Run ID'||chr(10)|| +' procedure set_runner is'||chr(10)|| +' num_recs pls_integer;'||chr(10)|| +' begin'||chr(10)|| +' '; + +p:=p||' -- Group function will not raise NO_DATA_FOUND'||chr(10)|| +' select count(*)'||chr(10)|| +' into num_recs'||chr(10)|| +' from wt_test_runs'||chr(10)|| +' where id = :P0_TEST_RUN_ID'||chr(10)|| +' and runner_name = :P0_TEST_RUNNER;'||chr(10)|| +' if num_recs = 0'||chr(10)|| +' then'||chr(10)|| +' -- Group function will not raise NO_DATA_FOUND'||chr(10)|| +' select min(runner_name)'||chr(10)|| +' into :P0_TEST_RUNNER'||chr(10)|| +' from wt_test_runs'||chr(10)|| +' '; + +p:=p||' where id = :P0_TEST_RUN_ID;'||chr(10)|| +' end if;'||chr(10)|| +' end set_runner;'||chr(10)|| +' -- Set Test Case based on Test Run ID if Test Case not valid'||chr(10)|| +' procedure set_test_case is'||chr(10)|| +' num_recs pls_integer;'||chr(10)|| +' begin'||chr(10)|| +' -- Group function will not raise NO_DATA_FOUND'||chr(10)|| +' select count(*)'||chr(10)|| +' into num_recs'||chr(10)|| +' from wt_testcase_runs'||chr(10)|| +' where test_run_id = :P0_TEST_RUN_ID'||chr(10)|| +' and testcase = :P0_TES'; + +p:=p||'T_CASE;'||chr(10)|| +' if num_recs = 0'||chr(10)|| +' then'||chr(10)|| +' -- Group function will not raise NO_DATA_FOUND'||chr(10)|| +' select min(testcase)'||chr(10)|| +' into :P0_TEST_CASE'||chr(10)|| +' from wt_testcase_runs'||chr(10)|| +' where test_run_id = :P0_TEST_RUN_ID;'||chr(10)|| +' end if;'||chr(10)|| +' end set_test_case;'||chr(10)|| +'BEGIN'||chr(10)|| +' -- Main Decision Logic'||chr(10)|| +' case'||chr(10)|| +' --'||chr(10)|| +' when :P0_TEST_RUN_ID is not null'||chr(10)|| +' and ( :P0_OLD_TEST_RUN'; + +p:=p||'_ID is null'||chr(10)|| +' or :P0_OLD_TEST_RUN_ID != :P0_TEST_RUN_ID )'||chr(10)|| +' then'||chr(10)|| +' -- This is the most common case of getting called from a link'||chr(10)|| +' :P0_DBG := ''P0_TEST_RUN_ID changed from '' || :P0_OLD_TEST_RUN_ID ||'||chr(10)|| +' '' to '' || :P0_TEST_RUN_ID ;'||chr(10)|| +' set_owner; -- Based on Test Run ID'||chr(10)|| +' set_runner; '; + +p:=p||' -- Based on Test Run ID'||chr(10)|| +' set_test_case; -- Based on Test Run ID'||chr(10)|| +' -- if Test Case not valid'||chr(10)|| +' --'||chr(10)|| +' when :P0_TEST_OWNER is NULL'||chr(10)|| +' then'||chr(10)|| +' -- Set everything to NULL'||chr(10)|| +' -- :P0_TEST_RUN_ID has not changed'||chr(10)|| +' :P0_DBG := ''P0_TEST_ONWER is null'';'||chr(10)|| +' :P0_TEST_RUNNER := NULL;'||chr(10)|| +' :P'; + +p:=p||'0_TEST_RUN_ID := NULL;'||chr(10)|| +' :P0_TEST_CASE := NULL;'||chr(10)|| +' --'||chr(10)|| +' when :P0_OLD_TEST_OWNER is null'||chr(10)|| +' or :P0_OLD_TEST_OWNER != :P0_TEST_OWNER'||chr(10)|| +' then'||chr(10)|| +' -- :P0_TEST_RUN_ID has not changed'||chr(10)|| +' -- :P0_TEST_OWNER is not null'||chr(10)|| +' :P0_DBG := ''P0_TEST_OWNER changed from '' || :P0_OLD_TEST_OWNER ||'||chr(10)|| +' '' to '' || :P0_TEST_OWNER ;'; + +p:=p||''||chr(10)|| +' set_run_id; -- Based on Test Owner'||chr(10)|| +' set_runner; -- Based on Test Run ID'||chr(10)|| +' set_test_case; -- Based on Test Run ID'||chr(10)|| +' -- if Test Case not valid'||chr(10)|| +' --'||chr(10)|| +' when NOT ( ( :P0_TEST_RUNNER is null'||chr(10)|| +' and :P0_OLD_TEST_RUNNER is null )'||chr(10)|| +' or :P'; + +p:=p||'0_TEST_RUNNER = :P0_OLD_TEST_RUNNER )'||chr(10)|| +' then'||chr(10)|| +' -- :P0_TEST_RUN_ID has not changed'||chr(10)|| +' -- :P0_TEST_OWNER is not null'||chr(10)|| +' -- :P0_TEST_OWNER has not changed'||chr(10)|| +' :P0_DBG := ''P0_TEST_RUNNER changed from '' || :P0_OLD_TEST_RUNNER ||'||chr(10)|| +' '' to '' || :P0_TEST_RUNNER ;'||chr(10)|| +' set_run_id(:P0_TEST_RUNNER); -- Based on Test Owner and Tes'; + +p:=p||'t Runner'||chr(10)|| +' set_test_case; -- Based on Test Run ID'||chr(10)|| +' -- if Test Case not valid'||chr(10)|| +' --'||chr(10)|| +' else'||chr(10)|| +' -- :P0_TEST_RUN_ID has not changed'||chr(10)|| +' -- :P0_TEST_OWNER is not null'||chr(10)|| +' -- :P0_TEST_OWNER has not changed'||chr(10)|| +' -- :P0_TEST_RUNNER has not changed'||chr(10)|| +' :P0_DBG := ''Do nothing'';'||chr(10)|| +' null;'||chr(10)|| +' --'||chr(10)|| +' e'; + +p:=p||'nd case;'||chr(10)|| +' :P0_OLD_TEST_RUN_ID := :P0_TEST_RUN_ID;'||chr(10)|| +' :P0_OLD_TEST_OWNER := :P0_TEST_OWNER;'||chr(10)|| +' :P0_OLD_TEST_RUNNER := :P0_TEST_RUNNER;'||chr(10)|| +'END;'; + +wwv_flow_api.create_flow_process( + p_id => 5124821433507746 + wwv_flow_api.g_id_offset, + p_flow_id => wwv_flow.g_flow_id, + p_process_sequence=> 10, + p_process_point => 'BEFORE_HEADER', + p_process_type=> 'PLSQL', + p_process_name=> 'Initialize Items', + p_process_sql_clob=> p, + p_process_error_message=> 'Global Page Initialization Failed', + p_process_when=> '', + p_process_when_type=> '', + p_process_comment=> ''); +end; + +null; + +end; +/ + +prompt ...application items +-- +--application/shared_components/logic/application_items/fsp_after_login_url + +begin + +wwv_flow_api.create_flow_item( + p_id=> 5108203250645963 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> 'FSP_AFTER_LOGIN_URL', + p_data_type=> 'VARCHAR', + p_is_persistent=> 'Y', + p_protection_level=> 'N', + p_item_comment=> ''); + +null; + +end; +/ + +prompt ...application level computations +-- + +begin + +--application/shared_components/logic/application_computations/p0_test_owner +wwv_flow_api.create_flow_computation ( + p_id => 5148803335141101 + wwv_flow_api.g_id_offset, + p_flow_id => wwv_flow.g_flow_id, + p_computation_sequence => 10, + p_computation_item => 'P0_TEST_OWNER', + p_computation_point => 'ON_NEW_INSTANCE', + p_computation_type => 'QUERY', + p_computation_processed=> 'REPLACE_EXISTING', + p_computation => 'with q1 as ('||chr(10)|| +'select max(runner_owner) max_owner'||chr(10)|| +' from wt_test_runs'||chr(10)|| +' where runner_owner <= :APP_USER'||chr(10)|| +'), q2 as ('||chr(10)|| +'select min(runner_owner) min_owner'||chr(10)|| +' from wt_test_runs'||chr(10)|| +' where runner_owner >= :APP_USER'||chr(10)|| +')'||chr(10)|| +'select nvl(q1.max_owner, q2.min_owner)'||chr(10)|| +' from q1 cross join q2', + p_compute_when=> '', + p_compute_when_type=> '', + p_computation_error_message=>'', + p_computation_comment=> '', + p_required_patch => null + wwv_flow_api.g_id_offset); + + +end; +/ + +prompt ...Application Tabs +-- + +begin + +--application/shared_components/navigation/tabs/standard/t_dashboard +wwv_flow_api.create_tab ( + p_id=> 4846811586414924 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_tab_set=> 'TS1', + p_tab_sequence=> 10, + p_tab_name=> 'T_DASHBOARD', + p_tab_text => 'Dashboard', + p_tab_step => 1, + p_tab_also_current_for_pages => '', + p_tab_parent_tabset=>'', + p_tab_comment => ''); + +--application/shared_components/navigation/tabs/standard/t_run_test +wwv_flow_api.create_tab ( + p_id=> 4847411144414925 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_tab_set=> 'TS1', + p_tab_sequence=> 20, + p_tab_name=> 'T_RUN_TEST', + p_tab_text => 'Run Test', + p_tab_step => 2, + p_tab_also_current_for_pages => '', + p_tab_parent_tabset=>'', + p_tab_comment => ''); + +--application/shared_components/navigation/tabs/standard/t_test_runner +wwv_flow_api.create_tab ( + p_id=> 4848009034414926 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_tab_set=> 'TS1', + p_tab_sequence=> 30, + p_tab_name=> 'T_TEST_RUNNER', + p_tab_text => 'Test Runner', + p_tab_step => 3, + p_tab_also_current_for_pages => '', + p_tab_parent_tabset=>'', + p_tab_comment => ''); + +--application/shared_components/navigation/tabs/standard/t_test_cases +wwv_flow_api.create_tab ( + p_id=> 4977229177323155 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_tab_set=> 'TS1', + p_tab_sequence=> 40, + p_tab_name=> 'T_TEST CASES', + p_tab_text => 'Test Case', + p_tab_step => 6, + p_tab_also_current_for_pages => '', + p_tab_parent_tabset=>'', + p_tab_comment => ''); + +--application/shared_components/navigation/tabs/standard/t_dbout_profile +wwv_flow_api.create_tab ( + p_id=> 5047612005953773 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_tab_set=> 'TS1', + p_tab_sequence=> 50, + p_tab_name=> 'T_DBOUT PROFILE', + p_tab_text => 'DBOUT Profile', + p_tab_step => 4, + p_tab_also_current_for_pages => '4', + p_tab_parent_tabset=>'', + p_tab_comment => ''); + +--application/shared_components/navigation/tabs/standard/t_about +wwv_flow_api.create_tab ( + p_id=> 4905926268694339 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_tab_set=> 'TS1', + p_tab_sequence=> 60, + p_tab_name=> 'T_ABOUT', + p_tab_text => 'About', + p_tab_step => 5, + p_tab_also_current_for_pages => '', + p_tab_parent_tabset=>'', + p_tab_comment => ''); + + +end; +/ + +prompt ...Application Parent Tabs +-- + +begin + +null; + +end; +/ + +prompt ...Shared Lists of values +-- +--application/shared_components/user_interface/lov/p3_report_row_per_page + +begin + +wwv_flow_api.create_list_of_values ( + p_id => 4952509356578433 + wwv_flow_api.g_id_offset, + p_flow_id => wwv_flow.g_flow_id, + p_lov_name => 'P3_Report Row Per Page', + p_lov_query=> '.'||to_char(4952509356578433 + wwv_flow_api.g_id_offset)||'.'); + +null; + +end; +/ + + +begin + +wwv_flow_api.create_static_lov_data ( + p_id=>4952816929578434 + wwv_flow_api.g_id_offset, + p_lov_id=>4952509356578433 + wwv_flow_api.g_id_offset, + p_lov_disp_sequence=>10, + p_lov_disp_value=>'10', + p_lov_return_value=>'10', + p_lov_data_comment=> ''); + +null; + +end; +/ + + +begin + +wwv_flow_api.create_static_lov_data ( + p_id=>4953007560578434 + wwv_flow_api.g_id_offset, + p_lov_id=>4952509356578433 + wwv_flow_api.g_id_offset, + p_lov_disp_sequence=>20, + p_lov_disp_value=>'15', + p_lov_return_value=>'15', + p_lov_data_comment=> ''); + +null; + +end; +/ + + +begin + +wwv_flow_api.create_static_lov_data ( + p_id=>4953224813578435 + wwv_flow_api.g_id_offset, + p_lov_id=>4952509356578433 + wwv_flow_api.g_id_offset, + p_lov_disp_sequence=>30, + p_lov_disp_value=>'20', + p_lov_return_value=>'20', + p_lov_data_comment=> ''); + +null; + +end; +/ + + +begin + +wwv_flow_api.create_static_lov_data ( + p_id=>4953425086578435 + wwv_flow_api.g_id_offset, + p_lov_id=>4952509356578433 + wwv_flow_api.g_id_offset, + p_lov_disp_sequence=>40, + p_lov_disp_value=>'30', + p_lov_return_value=>'30', + p_lov_data_comment=> ''); + +null; + +end; +/ + + +begin + +wwv_flow_api.create_static_lov_data ( + p_id=>4953605022578435 + wwv_flow_api.g_id_offset, + p_lov_id=>4952509356578433 + wwv_flow_api.g_id_offset, + p_lov_disp_sequence=>50, + p_lov_disp_value=>'50', + p_lov_return_value=>'50', + p_lov_data_comment=> ''); + +null; + +end; +/ + + +begin + +wwv_flow_api.create_static_lov_data ( + p_id=>4953800039578435 + wwv_flow_api.g_id_offset, + p_lov_id=>4952509356578433 + wwv_flow_api.g_id_offset, + p_lov_disp_sequence=>60, + p_lov_disp_value=>'100', + p_lov_return_value=>'100', + p_lov_data_comment=> ''); + +null; + +end; +/ + + +begin + +wwv_flow_api.create_static_lov_data ( + p_id=>4954011164578435 + wwv_flow_api.g_id_offset, + p_lov_id=>4952509356578433 + wwv_flow_api.g_id_offset, + p_lov_disp_sequence=>70, + p_lov_disp_value=>'200', + p_lov_return_value=>'200', + p_lov_data_comment=> ''); + +null; + +end; +/ + + +begin + +wwv_flow_api.create_static_lov_data ( + p_id=>4954208134578435 + wwv_flow_api.g_id_offset, + p_lov_id=>4952509356578433 + wwv_flow_api.g_id_offset, + p_lov_disp_sequence=>80, + p_lov_disp_value=>'500', + p_lov_return_value=>'500', + p_lov_data_comment=> ''); + +null; + +end; +/ + + +begin + +wwv_flow_api.create_static_lov_data ( + p_id=>4954416221578435 + wwv_flow_api.g_id_offset, + p_lov_id=>4952509356578433 + wwv_flow_api.g_id_offset, + p_lov_disp_sequence=>90, + p_lov_disp_value=>'1000', + p_lov_return_value=>'1000', + p_lov_data_comment=> ''); + +null; + +end; +/ + + +begin + +wwv_flow_api.create_static_lov_data ( + p_id=>4954628322578435 + wwv_flow_api.g_id_offset, + p_lov_id=>4952509356578433 + wwv_flow_api.g_id_offset, + p_lov_disp_sequence=>100, + p_lov_disp_value=>'5000', + p_lov_return_value=>'5000', + p_lov_data_comment=> ''); + +null; + +end; +/ + +--application/shared_components/user_interface/lov/y_or_n + +begin + +wwv_flow_api.create_list_of_values ( + p_id => 4923728354614299 + wwv_flow_api.g_id_offset, + p_flow_id => wwv_flow.g_flow_id, + p_lov_name => 'Y_OR_N', + p_lov_query=> '.'||to_char(4923728354614299 + wwv_flow_api.g_id_offset)||'.'); + +null; + +end; +/ + + +begin + +wwv_flow_api.create_static_lov_data ( + p_id=>4924006022614301 + wwv_flow_api.g_id_offset, + p_lov_id=>4923728354614299 + wwv_flow_api.g_id_offset, + p_lov_disp_sequence=>1, + p_lov_disp_value=>'Yes', + p_lov_return_value=>'Y', + p_lov_data_comment=> ''); + +null; + +end; +/ + + +begin + +wwv_flow_api.create_static_lov_data ( + p_id=>4924205788614301 + wwv_flow_api.g_id_offset, + p_lov_id=>4923728354614299 + wwv_flow_api.g_id_offset, + p_lov_disp_sequence=>2, + p_lov_disp_value=>'No', + p_lov_return_value=>'N', + p_lov_data_comment=> ''); + +null; + +end; +/ + +prompt ...Application Trees +-- +--application/pages/page_groups +prompt ...page groups +-- + +begin + +null; + +end; +/ + +--application/comments +prompt ...comments: requires application express 2.2 or higher +-- + +--application/pages/page_00000 +prompt ...PAGE 0: Global +-- + +begin + +wwv_flow_api.create_page ( + p_flow_id => wwv_flow.g_flow_id + ,p_id => 0 + ,p_name => 'Global' + ,p_step_title => '0' + ,p_step_sub_title_type => 'TEXT_WITH_SUBSTITUTIONS' + ,p_first_item => 'NO_FIRST_ITEM' + ,p_include_apex_css_js_yn => 'Y' + ,p_autocomplete_on_off => 'ON' + ,p_page_is_public_y_n => 'N' + ,p_protection_level => 'N' + ,p_cache_page_yn => 'N' + ,p_last_updated_by => 'WTP' + ,p_last_upd_yyyymmddhh24miss => '20181104135107' + ); +null; + +end; +/ + +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||'begin'||chr(10)|| +' -- htp.p(''P0_TEST_OWNER = '' || v(''P0_TEST_OWNER'' ) || ''
'');'||chr(10)|| +' -- htp.p(''P0_TEST_RUNNER = '' || v(''P0_TEST_RUNNER'' ) || ''
'');'||chr(10)|| +' -- htp.p(''P0_TEST_RUN_ID = '' || v(''P0_TEST_RUN_ID'' ) || ''
'');'||chr(10)|| +' -- htp.p(''P0_TEST_CASE = '' || v(''P0_TEST_CASE'' ) || ''
'');'||chr(10)|| +' -- htp.p(''P0_DISPLAY = '' || v(''P0_DISPLAY'' ) || ''
'');'||chr(10)|| +' -- htp.p(''P0_OLD_'; + +s:=s||'TEST_OWNER = '' || v(''P0_OLD_TEST_OWNER'' ) || ''
'');'||chr(10)|| +' -- htp.p(''P0_OLD_TEST_RUNNER = '' || v(''P0_OLD_TEST_RUNNER'' ) || ''
'');'||chr(10)|| +' -- htp.p(''P0_OLD_TEST_RUN_ID = '' || v(''P0_OLD_TEST_RUN_ID'' ) || ''
'');'||chr(10)|| +' null;'||chr(10)|| +'end;'; + +wwv_flow_api.create_page_plug ( + p_id=> 5109401519013442 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 0, + p_plug_name=> 'Common Control', + p_region_name=>'', + p_plug_template=> 4840201642414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 10, + p_plug_display_column=> 1, + p_plug_display_point=> 'REGION_POSITION_02', + p_plug_source=> s, + p_plug_source_type=> 'PLSQL_PROCEDURE', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'QUERY_COLUMNS', + p_plug_query_num_rows_type => 'NEXT_PREVIOUS_LINKS', + p_plug_query_row_count_max => 500, + p_plug_query_show_nulls_as => ' - ', + p_plug_display_condition_type => 'PLSQL_EXPRESSION', + p_plug_display_when_condition => ':P0_DISPLAY = ''Y''', + p_pagination_display_position=>'BOTTOM_RIGHT', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ + +begin + +null; + +end; +/ + + +begin + +null; + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>5111411983271940 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 0, + p_name=>'P0_DISPLAY', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 9, + p_item_plug_id => 5109401519013442+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_source_type=> 'STATIC', + p_display_as=> 'NATIVE_HIDDEN', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> 1, + p_cMaxlength=> 1, + p_cHeight=> 1, + p_cAttributes=> 'nowrap="nowrap"', + p_begin_on_new_line=> 'NO', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'ABOVE', + p_field_alignment=> 'LEFT', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_lov_display_extra=>'YES', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => 'Y', + p_show_quick_picks=>'N', + p_item_comment => 'This item is set by each page.'); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>5115915435597711 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 0, + p_name=>'P0_TEST_OWNER', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 1, + p_item_plug_id => 5109401519013442+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_prompt=>'Test Runner Owner:', + p_source_type=> 'STATIC', + p_display_as=> 'NATIVE_POPUP_LOV', + p_lov=> 'select owner DISPLAY'||chr(10)|| +' ,owner RETURN'||chr(10)|| +' from wt_qual_test_runners_vw'||chr(10)|| +' group by owner'||chr(10)|| +' order by owner', + p_lov_display_null=> 'YES', + p_lov_translated=> 'N', + p_lov_null_text=>'All Owners', + p_lov_null_value=> '', + p_cSize=> 128, + p_cMaxlength=> 128, + p_cHeight=> 1, + p_cAttributes=> 'nowrap="nowrap"', + p_begin_on_new_line=> 'YES', + p_begin_on_new_field=> 'YES', + p_colspan=> 2, + p_rowspan=> 1, + p_label_alignment=> 'ABOVE', + p_field_alignment=> 'LEFT-CENTER', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_lov_display_extra=>'NO', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => 'NOT_ENTERABLE', + p_attribute_02 => 'FIRST_ROWSET', + p_show_quick_picks=>'N', + p_item_comment => 'This item is initialized by the "Initialize Items" process.'); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>5116105869604358 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 0, + p_name=>'P0_TEST_RUNNER', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 2, + p_item_plug_id => 5109401519013442+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_prompt=>'Test Runner Name:', + p_source_type=> 'STATIC', + p_display_as=> 'NATIVE_POPUP_LOV', + p_lov=> 'select package_name DISPLAY'||chr(10)|| +' ,package_name RETURN'||chr(10)|| +' from wt_qual_test_runners_vw'||chr(10)|| +' where owner = :P0_TEST_OWNER'||chr(10)|| +' order by package_name', + p_lov_display_null=> 'YES', + p_lov_translated=> 'N', + p_lov_null_text=>'', + p_lov_null_value=> '', + p_cSize=> 128, + p_cMaxlength=> 128, + p_cHeight=> 1, + p_cAttributes=> 'nowrap="nowrap"', + p_begin_on_new_line=> 'YES', + p_begin_on_new_field=> 'YES', + p_colspan=> 2, + p_rowspan=> 1, + p_label_alignment=> 'ABOVE', + p_field_alignment=> 'LEFT-CENTER', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_lov_display_extra=>'NO', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => 'NOT_ENTERABLE', + p_attribute_02 => 'FIRST_ROWSET', + p_show_quick_picks=>'N', + p_item_comment => 'This item is initialized by the "Initialize Items" process.'); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>5116329072611020 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 0, + p_name=>'P0_TEST_RUN_ID', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 3, + p_item_plug_id => 5109401519013442+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_prompt=>'Test Run ID:', + p_source_type=> 'STATIC', + p_display_as=> 'NATIVE_POPUP_LOV', + p_lov=> 'select id || '': '' ||'||chr(10)|| +' to_char(start_dtm,''YYYY-MM-DD HH24:MI:SS'') DISPLAY'||chr(10)|| +' ,id RETURN'||chr(10)|| +' from wt_test_runs'||chr(10)|| +' where runner_owner = :P0_TEST_OWNER'||chr(10)|| +' and runner_name = :P0_TEST_RUNNER'||chr(10)|| +' order by id desc', + p_lov_display_null=> 'YES', + p_lov_translated=> 'N', + p_lov_null_text=>'', + p_lov_null_value=> '', + p_cSize=> 30, + p_cMaxlength=> 30, + p_cHeight=> 1, + p_cAttributes=> 'nowrap="nowrap"', + p_begin_on_new_line=> 'YES', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'ABOVE', + p_field_alignment=> 'LEFT-CENTER', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_lov_display_extra=>'NO', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => 'NOT_ENTERABLE', + p_attribute_02 => 'FIRST_ROWSET', + p_show_quick_picks=>'N', + p_item_comment => 'This item is initialized by the "Initialize Items" process.'||chr(10)|| +'30 Width = 9 ID + 2 Separator + 19 Date/Time'); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>5116511887615523 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 0, + p_name=>'P0_TEST_CASE', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 4, + p_item_plug_id => 5109401519013442+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_prompt=>'Test Case Name', + p_source_type=> 'STATIC', + p_display_as=> 'NATIVE_POPUP_LOV', + p_lov=> 'select testcase DISPLAY'||chr(10)|| +' ,testcase RETURN'||chr(10)|| +' from wt_testcase_runs'||chr(10)|| +' where test_run_id = :P0_TEST_RUN_ID'||chr(10)|| +' order by testcase', + p_lov_display_null=> 'YES', + p_lov_translated=> 'N', + p_lov_null_text=>'', + p_lov_null_value=> '', + p_cSize=> 50, + p_cMaxlength=> 50, + p_cHeight=> 1, + p_cAttributes=> 'nowrap="nowrap"', + p_begin_on_new_line=> 'NO', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'ABOVE', + p_field_alignment=> 'LEFT-CENTER', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_lov_display_extra=>'NO', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => 'NOT_ENTERABLE', + p_attribute_02 => 'FIRST_ROWSET', + p_show_quick_picks=>'N', + p_item_comment => 'This item is initialized by the "Initialize Items" process.'); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>5123905176304413 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 0, + p_name=>'P0_OLD_TEST_OWNER', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 6, + p_item_plug_id => 5109401519013442+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_source_type=> 'STATIC', + p_display_as=> 'NATIVE_HIDDEN', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> 1, + p_cMaxlength=> 1, + p_cHeight=> 1, + p_cAttributes=> 'nowrap="nowrap"', + p_begin_on_new_line=> 'NO', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'ABOVE', + p_field_alignment=> 'LEFT', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_lov_display_extra=>'YES', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => 'Y', + p_show_quick_picks=>'N', + p_item_comment => 'This item is initialized by the "Initialize Items" process.'); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>5124122837309434 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 0, + p_name=>'P0_OLD_TEST_RUNNER', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 7, + p_item_plug_id => 5109401519013442+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_source_type=> 'STATIC', + p_display_as=> 'NATIVE_HIDDEN', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> 1, + p_cMaxlength=> 1, + p_cHeight=> 1, + p_cAttributes=> 'nowrap="nowrap"', + p_begin_on_new_line=> 'NO', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'ABOVE', + p_field_alignment=> 'LEFT', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_lov_display_extra=>'YES', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => 'Y', + p_show_quick_picks=>'N', + p_item_comment => 'This item is initialized by the "Initialize Items" process.'); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>5124303922313440 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 0, + p_name=>'P0_OLD_TEST_RUN_ID', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 8, + p_item_plug_id => 5109401519013442+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_source_type=> 'STATIC', + p_display_as=> 'NATIVE_HIDDEN', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> 1, + p_cMaxlength=> 1, + p_cHeight=> 1, + p_cAttributes=> 'nowrap="nowrap"', + p_begin_on_new_line=> 'NO', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'ABOVE', + p_field_alignment=> 'LEFT', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_lov_display_extra=>'YES', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => 'Y', + p_show_quick_picks=>'N', + p_item_comment => 'This item is initialized by the "Initialize Items" process.'); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>5156507341612883 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 0, + p_name=>'P0_DBG', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 5, + p_item_plug_id => 5109401519013442+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_prompt=>'Page 0 Init Debug:', + p_source_type=> 'STATIC', + p_display_as=> 'NATIVE_DISPLAY_ONLY', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> 30, + p_cMaxlength=> 4000, + p_cHeight=> 1, + p_cAttributes=> 'nowrap="nowrap"', + p_begin_on_new_line=> 'YES', + p_begin_on_new_field=> 'YES', + p_colspan=> 2, + p_rowspan=> 1, + p_label_alignment=> 'ABOVE', + p_field_alignment=> 'LEFT-CENTER', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_lov_display_extra=>'YES', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => 'N', + p_attribute_02 => 'VALUE', + p_attribute_04 => 'Y', + p_show_quick_picks=>'N', + p_item_comment => 'This item is initialized by the "Initialize Items" process.'); + + +end; +/ + + +begin + +wwv_flow_api.create_page_da_event ( + p_id => 5132717988076486 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_page_id => 0 + ,p_name => 'Submit After Test Owner Change' + ,p_event_sequence => 10 + ,p_triggering_element_type => 'ITEM' + ,p_triggering_element => 'P0_TEST_OWNER' + ,p_bind_type => 'bind' + ,p_bind_event_type => 'change' + ); +wwv_flow_api.create_page_da_action ( + p_id => 5133011351076491 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_page_id => 0 + ,p_event_id => 5132717988076486 + wwv_flow_api.g_id_offset + ,p_event_result => 'TRUE' + ,p_action_sequence => 10 + ,p_execute_on_page_init => 'N' + ,p_action => 'NATIVE_SUBMIT_PAGE' + ,p_attribute_01 => 'REFRESH' + ,p_stop_execution_on_error => 'Y' + ); +null; + +end; +/ + + +begin + +wwv_flow_api.create_page_da_event ( + p_id => 5133128377079428 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_page_id => 0 + ,p_name => 'Submit After Test Runner Change' + ,p_event_sequence => 20 + ,p_triggering_element_type => 'ITEM' + ,p_triggering_element => 'P0_TEST_RUNNER' + ,p_bind_type => 'bind' + ,p_bind_event_type => 'change' + ); +wwv_flow_api.create_page_da_action ( + p_id => 5133404881079428 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_page_id => 0 + ,p_event_id => 5133128377079428 + wwv_flow_api.g_id_offset + ,p_event_result => 'TRUE' + ,p_action_sequence => 10 + ,p_execute_on_page_init => 'N' + ,p_action => 'NATIVE_SUBMIT_PAGE' + ,p_attribute_01 => 'REFRESH' + ,p_stop_execution_on_error => 'Y' + ); +null; + +end; +/ + + +begin + +wwv_flow_api.create_page_da_event ( + p_id => 5133521236086857 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_page_id => 0 + ,p_name => 'Submit After Test Run ID Change' + ,p_event_sequence => 30 + ,p_triggering_element_type => 'ITEM' + ,p_triggering_element => 'P0_TEST_RUN_ID' + ,p_bind_type => 'bind' + ,p_bind_event_type => 'change' + ); +wwv_flow_api.create_page_da_action ( + p_id => 5133821690086857 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_page_id => 0 + ,p_event_id => 5133521236086857 + wwv_flow_api.g_id_offset + ,p_event_result => 'TRUE' + ,p_action_sequence => 10 + ,p_execute_on_page_init => 'N' + ,p_action => 'NATIVE_SUBMIT_PAGE' + ,p_attribute_01 => 'REFRESH' + ,p_stop_execution_on_error => 'Y' + ); +null; + +end; +/ + + +begin + +wwv_flow_api.create_page_da_event ( + p_id => 5133928854089093 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_page_id => 0 + ,p_name => 'Submit After Test Case Change' + ,p_event_sequence => 40 + ,p_triggering_element_type => 'ITEM' + ,p_triggering_element => 'P0_TEST_CASE' + ,p_bind_type => 'bind' + ,p_bind_event_type => 'change' + ); +wwv_flow_api.create_page_da_action ( + p_id => 5134216946089093 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_page_id => 0 + ,p_event_id => 5133928854089093 + wwv_flow_api.g_id_offset + ,p_event_result => 'TRUE' + ,p_action_sequence => 10 + ,p_execute_on_page_init => 'N' + ,p_action => 'NATIVE_SUBMIT_PAGE' + ,p_attribute_01 => 'REFRESH' + ,p_stop_execution_on_error => 'Y' + ); +null; + +end; +/ + + +begin + +--------------------------------------- +-- ...updatable report columns for page 0 +-- + +begin + +null; +end; +null; + +end; +/ + + +--application/pages/page_00001 +prompt ...PAGE 1: Dashboard +-- + +begin + +wwv_flow_api.create_page ( + p_flow_id => wwv_flow.g_flow_id + ,p_id => 1 + ,p_tab_set => 'TS1' + ,p_name => 'Dashboard' + ,p_alias => 'DASHBOARD' + ,p_step_title => 'Home' + ,p_allow_duplicate_submissions => 'Y' + ,p_step_sub_title => 'Home' + ,p_step_sub_title_type => 'TEXT_WITH_SUBSTITUTIONS' + ,p_first_item => 'AUTO_FIRST_ITEM' + ,p_include_apex_css_js_yn => 'Y' + ,p_autocomplete_on_off => 'ON' + ,p_page_is_public_y_n => 'N' + ,p_protection_level => 'N' + ,p_cache_page_yn => 'N' + ,p_cache_timeout_seconds => 21600 + ,p_cache_by_user_yn => 'N' + ,p_help_text => +'No help is available for this page.' + ,p_last_updated_by => 'WTP' + ,p_last_upd_yyyymmddhh24miss => '20181104171304' + ); +null; + +end; +/ + +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||'declare'||chr(10)|| +' num_owners number;'||chr(10)|| +' num_runners number;'||chr(10)|| +' num_dbouts number;'||chr(10)|| +' num_cases number;'||chr(10)|| +'begin'||chr(10)|| +' --'||chr(10)|| +' with q1 as ('||chr(10)|| +' select runner_owner'||chr(10)|| +' from wt_test_runs'||chr(10)|| +' where :P0_TEST_OWNER is NULL'||chr(10)|| +' or :P0_TEST_OWNER = runner_owner'||chr(10)|| +' group by runner_owner'||chr(10)|| +' )'||chr(10)|| +' --'||chr(10)|| +' select count(*)'||chr(10)|| +' into num_owners'||chr(10)|| +' from q1;'||chr(10)|| +' with q1 as ('||chr(10)|| +' select runner_owner, runner_name'||chr(10)|| +' fr'; + +s:=s||'om wt_test_runs'||chr(10)|| +' where :P0_TEST_OWNER is NULL'||chr(10)|| +' or :P0_TEST_OWNER = runner_owner'||chr(10)|| +' group by runner_owner, runner_name'||chr(10)|| +' )'||chr(10)|| +' select count(*)'||chr(10)|| +' into num_runners'||chr(10)|| +' from q1;'||chr(10)|| +' --'||chr(10)|| +' with q1 as ('||chr(10)|| +' select dbout_owner, dbout_name, dbout_type'||chr(10)|| +' from wt_test_runs'||chr(10)|| +' where :P0_TEST_OWNER is NULL'||chr(10)|| +' or :P0_TEST_OWNER = runner_owner'||chr(10)|| +' group by dbout_owner, dbout_name, dbout_typ'; + +s:=s||'e'||chr(10)|| +' )'||chr(10)|| +' select count(*)'||chr(10)|| +' into num_dbouts'||chr(10)|| +' from q1;'||chr(10)|| +' --'||chr(10)|| +' with q1 as ('||chr(10)|| +' select runner_owner, runner_name, testcase'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_testcase_runs case'||chr(10)|| +' on case.test_run_id = run.id'||chr(10)|| +' where :P0_TEST_OWNER is NULL'||chr(10)|| +' or :P0_TEST_OWNER = runner_owner'||chr(10)|| +' group by runner_owner, runner_name, testcase'||chr(10)|| +' )'||chr(10)|| +' select count(*)'||chr(10)|| +' into num'; + +s:=s||'_cases'||chr(10)|| +' from q1;'||chr(10)|| +' --'||chr(10)|| +' htp.p(''
 '');'||chr(10)|| +' htp.p(''Number of Test Owners: '' || num_owners || ''
'');'||chr(10)|| +' htp.p(''
 '');'||chr(10)|| +' htp.p(''Number of Test Runners: '' || num_runners || ''
'');'||chr(10)|| +' htp.p(''
 '');'||chr(10)|| +' htp.p(''Number of Test Cases: '' || num_cases || ''
'');'||chr(10)|| +' htp.p(''
 '');'||chr(10)|| +' htp.p(''Number of Tested DBOUTs: '' || num_dbouts || ''
'');'||chr(10)|| +' htp.p(''
 
'');'||chr(10)|| +''; + +s:=s||'end;'; + +wwv_flow_api.create_page_plug ( + p_id=> 4846907308414925 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 1, + p_plug_name=> 'Summary', + p_region_name=>'', + p_plug_template=> 4839912075414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 2, + p_plug_display_column=> 2, + p_plug_display_point=> 'BEFORE_BOX_BODY', + p_plug_source=> s, + p_plug_source_type=> 'PLSQL_PROCEDURE', + p_translate_title=> 'Y', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_column_width => 'td width="320"', + p_plug_display_condition_type => '', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#CHART_REFRESH#'; + +wwv_flow_api.create_page_plug ( + p_id=> 4854109180566690 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 1, + p_plug_name=> 'Test Runners Status Summary', + p_region_name=>'', + p_plug_template=> 4840201642414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 1, + p_plug_display_column=> 1, + p_plug_display_point=> 'BEFORE_BOX_BODY', + p_plug_source=> s, + p_plug_source_type=> 'FLASH_CHART5', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => '', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1 := null; +wwv_flow_api.create_flash_chart5( + p_id => 4854324865566692+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id => 1, + p_region_id => 4854109180566690+wwv_flow_api.g_id_offset, + p_default_chart_type =>'2DPie', + p_chart_title =>'', + p_chart_name =>'chart_4854324865566692', + p_chart_width =>300, + p_chart_height =>150, + p_chart_animation =>'N', + p_display_attr =>':H:::::Left::V:Y:None:::N:::Default', + p_dial_tick_attr =>':::::::::::', + p_gantt_attr =>'Y:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:30:15:5:Y:I:N:S:E', + p_map_attr =>'Orthographic:RegionBounds:REGION_NAME', + p_map_source =>'%', + p_margins =>':::', + p_omit_label_interval => null, + p_bgtype =>'Trans', + p_bgcolor1 =>'', + p_bgcolor2 =>'', + p_gradient_rotation =>null, + p_grid_bgtype =>'', + p_grid_bgcolor1 =>'', + p_grid_bgcolor2 =>'', + p_grid_gradient_rotation =>null, + p_color_scheme =>'0', + p_custom_colors =>'#99FF99,#FFFF99,#FF6699', + p_map_undef_color_scheme =>'', + p_map_undef_custom_colors =>'', + p_x_axis_title =>'', + p_x_axis_min =>null, + p_x_axis_max =>null, + p_x_axis_decimal_place =>null, + p_x_axis_prefix =>'', + p_x_axis_postfix =>'', + p_x_axis_label_rotation =>'', + p_x_axis_label_font =>'::', + p_x_axis_major_interval =>null, + p_x_axis_minor_interval =>null, + p_y_axis_title =>'', + p_y_axis_min =>null, + p_y_axis_max =>null, + p_y_axis_decimal_place =>null, + p_y_axis_prefix =>'', + p_y_axis_postfix =>'', + p_y_axis_label_rotation =>'', + p_y_axis_label_font =>'::', + p_y_axis_major_interval =>null, + p_y_axis_minor_interval =>null, + p_async_update =>'N', + p_async_time =>null, + p_legend_title =>'', + p_legend_title_font =>'', + p_names_font => null, + p_names_rotation => null, + p_values_font =>'Arial:10:#000000', + p_values_rotation =>null, + p_values_prefix =>'', + p_values_postfix =>'', + p_hints_font =>'Tahoma:10:#000000', + p_legend_font =>'Arial:10:#000000', + p_grid_labels_font =>'', + p_chart_title_font =>'Tahoma:14:#000000', + p_x_axis_title_font =>'Tahoma:14:', + p_x_axis_title_rotation =>'', + p_y_axis_title_font =>'Tahoma:14:', + p_y_axis_title_rotation =>'', + p_gauge_labels_font =>'Tahoma:10:', + p_use_chart_xml =>'N', + p_chart_xml => a1); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'with q_main as ('||chr(10)|| +'select sum(res.passes) PASS'||chr(10)|| +' ,sum(res.failures) FAIL'||chr(10)|| +' ,sum(res.errors) ERR'||chr(10)|| +' from wt_test_runs tr'||chr(10)|| +' join wt_test_run_stats res'||chr(10)|| +' on res.test_run_id = tr.id'||chr(10)|| +' where ( :P0_TEST_OWNER is NULL'||chr(10)|| +' or :P0_TEST_OWNER = tr.runner_owner )'||chr(10)|| +' and tr.is_last_run = wtplsql.get_last_run_flag'||chr(10)|| +'), q1 as ('||chr(10)|| +'select NULL LINK'||chr(10)|| +' ,''PASS'' LABEL'||chr(10)|| +' '; + +a1:=a1||' ,pass VALUE'||chr(10)|| +' from q_main'||chr(10)|| +'union all'||chr(10)|| +'select NULL LINK'||chr(10)|| +' ,''FAIL'' LABEL'||chr(10)|| +' ,fail VALUE'||chr(10)|| +' from q_main'||chr(10)|| +'union all'||chr(10)|| +'select NULL LINK'||chr(10)|| +' ,''ERR'' LABEL'||chr(10)|| +' ,err VALUE'||chr(10)|| +' from q_main'||chr(10)|| +')'||chr(10)|| +'select link, label, value'||chr(10)|| +' from q1'||chr(10)|| +' order by label desc'; + +wwv_flow_api.create_flash_chart5_series( + p_id => 4854410354566693+wwv_flow_api.g_id_offset, + p_chart_id => 4854324865566692+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_series_seq =>10, + p_series_name =>'Series 1', + p_series_query => a1, + p_series_type =>'', + p_series_query_type =>'SQL_QUERY', + p_series_query_parse_opt =>'PARSE_CHART_QUERY', + p_series_query_no_data_found=>'No data found.', + p_series_query_row_count_max=>15, + p_action_link =>'', + p_show_action_link =>'N', + p_action_link_checksum_type =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#CHART_REFRESH#'; + +wwv_flow_api.create_page_plug ( + p_id=> 4855306596029607 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 1, + p_plug_name=> 'DBOUT Profiles Status Summary', + p_region_name=>'', + p_plug_template=> 4840201642414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 3, + p_plug_display_column=> 3, + p_plug_display_point=> 'BEFORE_BOX_BODY', + p_plug_source=> s, + p_plug_source_type=> 'FLASH_CHART5', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => '', + p_plug_display_when_condition => ':P1_NUM_RUNNERS > 0', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1 := null; +wwv_flow_api.create_flash_chart5( + p_id => 4855509614029610+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id => 1, + p_region_id => 4855306596029607+wwv_flow_api.g_id_offset, + p_default_chart_type =>'2DPie', + p_chart_title =>'', + p_chart_name =>'chart_4854324865566692', + p_chart_width =>300, + p_chart_height =>150, + p_chart_animation =>'N', + p_display_attr =>':H:::::Left::V:Y:None:::N:::Default', + p_dial_tick_attr =>':::::::::::', + p_gantt_attr =>'Y:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:30:15:5:Y:I:N:S:E', + p_map_attr =>'Orthographic:RegionBounds:REGION_NAME', + p_map_source =>'%', + p_margins =>':::', + p_omit_label_interval => null, + p_bgtype =>'Trans', + p_bgcolor1 =>'', + p_bgcolor2 =>'', + p_gradient_rotation =>null, + p_grid_bgtype =>'', + p_grid_bgcolor1 =>'', + p_grid_bgcolor2 =>'', + p_grid_gradient_rotation =>null, + p_color_scheme =>'0', + p_custom_colors =>'#0099FF,#99FF99,#FF6699,#FFFF99', + p_map_undef_color_scheme =>'', + p_map_undef_custom_colors =>'', + p_x_axis_title =>'', + p_x_axis_min =>null, + p_x_axis_max =>null, + p_x_axis_decimal_place =>null, + p_x_axis_prefix =>'', + p_x_axis_postfix =>'', + p_x_axis_label_rotation =>'', + p_x_axis_label_font =>'::', + p_x_axis_major_interval =>null, + p_x_axis_minor_interval =>null, + p_y_axis_title =>'', + p_y_axis_min =>null, + p_y_axis_max =>null, + p_y_axis_decimal_place =>null, + p_y_axis_prefix =>'', + p_y_axis_postfix =>'', + p_y_axis_label_rotation =>'', + p_y_axis_label_font =>'::', + p_y_axis_major_interval =>null, + p_y_axis_minor_interval =>null, + p_async_update =>'N', + p_async_time =>null, + p_legend_title =>'', + p_legend_title_font =>'', + p_names_font => null, + p_names_rotation => null, + p_values_font =>'Arial:10:#000000', + p_values_rotation =>null, + p_values_prefix =>'', + p_values_postfix =>'', + p_hints_font =>'Tahoma:10:#000000', + p_legend_font =>'Arial:10:#000000', + p_grid_labels_font =>'', + p_chart_title_font =>'Tahoma:14:#000000', + p_x_axis_title_font =>'Tahoma:14:', + p_x_axis_title_rotation =>'', + p_y_axis_title_font =>'Tahoma:14:', + p_y_axis_title_rotation =>'', + p_gauge_labels_font =>'Tahoma:10:', + p_use_chart_xml =>'N', + p_chart_xml => a1); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'with q_main as ('||chr(10)|| +'select sum(res.excluded_lines) EXCL'||chr(10)|| +' ,sum(res.executed_lines) EXEC'||chr(10)|| +' ,sum(res.notexec_lines) NOTX'||chr(10)|| +' ,sum(res.unknown_lines) UNKN'||chr(10)|| +' from wt_test_runs tr'||chr(10)|| +' join wt_test_run_stats res'||chr(10)|| +' on res.test_run_id = tr.id'||chr(10)|| +' where ( :P0_TEST_OWNER is NULL'||chr(10)|| +' or :P0_TEST_OWNER = runner_owner )'||chr(10)|| +' and is_last_run = wtplsql.get_last_run_flag'||chr(10)|| +'), q1 as'; + +a1:=a1||' ('||chr(10)|| +'select NULL LINK'||chr(10)|| +' ,''EXCL'' LABEL'||chr(10)|| +' ,excl VALUE'||chr(10)|| +' from q_main'||chr(10)|| +'union all'||chr(10)|| +'select NULL LINK'||chr(10)|| +' ,''EXEC'' LABEL'||chr(10)|| +' ,exec VALUE'||chr(10)|| +' from q_main'||chr(10)|| +'union all'||chr(10)|| +'select NULL LINK'||chr(10)|| +' ,''NOTX'' LABEL'||chr(10)|| +' ,notx VALUE'||chr(10)|| +' from q_main'||chr(10)|| +'union all'||chr(10)|| +'select NULL LINK'||chr(10)|| +' ,''UNKN'' LABEL'||chr(10)|| +' ,unkn VALUE'||chr(10)|| +' from q_main'||chr(10)|| +')'||chr(10)|| +'select link, label, value'||chr(10)|| +' from q1'||chr(10)|| +' order by label'; + +wwv_flow_api.create_flash_chart5_series( + p_id => 4855610331029611+wwv_flow_api.g_id_offset, + p_chart_id => 4855509614029610+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_series_seq =>10, + p_series_name =>'Series 1', + p_series_query => a1, + p_series_type =>'', + p_series_query_type =>'SQL_QUERY', + p_series_query_parse_opt =>'PARSE_CHART_QUERY', + p_series_query_no_data_found=>'No data found.', + p_series_query_row_count_max=>15, + p_action_link =>'', + p_show_action_link =>'N', + p_action_link_checksum_type =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#CHART_REFRESH#'; + +wwv_flow_api.create_page_plug ( + p_id=> 4857720139336331 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 1, + p_plug_name=> 'Top Test Runner Failures', + p_region_name=>'', + p_plug_template=> 4839217975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 1, + p_plug_display_column=> 1, + p_plug_display_point=> 'BEFORE_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'FLASH_CHART5', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => '', + p_plug_display_when_condition => ':P1_NUM_RUNNERS > 0', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1 := null; +wwv_flow_api.create_flash_chart5( + p_id => 4857903544336332+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id => 1, + p_region_id => 4857720139336331+wwv_flow_api.g_id_offset, + p_default_chart_type =>'2DColumn', + p_chart_title =>'', + p_chart_name =>'chart_4857903544336332', + p_chart_width =>300, + p_chart_height =>150, + p_chart_animation =>'N', + p_display_attr =>':H::V:Y:N:N::V:Y:None:::N:::Default', + p_dial_tick_attr =>':::::::::::', + p_gantt_attr =>'Y:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:30:15:5:Y:I:N:S:E', + p_map_attr =>'Orthographic:RegionBounds:REGION_NAME', + p_map_source =>'%', + p_margins =>':::', + p_omit_label_interval => null, + p_bgtype =>'Trans', + p_bgcolor1 =>'', + p_bgcolor2 =>'', + p_gradient_rotation =>null, + p_grid_bgtype =>'', + p_grid_bgcolor1 =>'', + p_grid_bgcolor2 =>'', + p_grid_gradient_rotation =>null, + p_color_scheme =>'0', + p_custom_colors =>'#FFFF00', + p_map_undef_color_scheme =>'', + p_map_undef_custom_colors =>'', + p_x_axis_title =>'', + p_x_axis_min =>null, + p_x_axis_max =>null, + p_x_axis_decimal_place =>null, + p_x_axis_prefix =>'', + p_x_axis_postfix =>'', + p_x_axis_label_rotation =>'', + p_x_axis_label_font =>'Tahoma:10:#000000', + p_x_axis_major_interval =>null, + p_x_axis_minor_interval =>null, + p_y_axis_title =>'Failures', + p_y_axis_min =>null, + p_y_axis_max =>null, + p_y_axis_decimal_place =>null, + p_y_axis_prefix =>'', + p_y_axis_postfix =>'', + p_y_axis_label_rotation =>'', + p_y_axis_label_font =>'Tahoma:10:#000000', + p_y_axis_major_interval =>null, + p_y_axis_minor_interval =>null, + p_async_update =>'N', + p_async_time =>null, + p_legend_title =>'', + p_legend_title_font =>'', + p_names_font => null, + p_names_rotation => null, + p_values_font =>'Arial:10:#000000', + p_values_rotation =>90, + p_values_prefix =>'', + p_values_postfix =>'', + p_hints_font =>'Tahoma:10:#000000', + p_legend_font =>'Arial:10:#000000', + p_grid_labels_font =>'', + p_chart_title_font =>'Tahoma:14:#000000', + p_x_axis_title_font =>'Tahoma:14:#000000', + p_x_axis_title_rotation =>'', + p_y_axis_title_font =>'Tahoma:14:#000000', + p_y_axis_title_rotation =>'', + p_gauge_labels_font =>'Tahoma:10:', + p_use_chart_xml =>'N', + p_chart_xml => a1); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'select tr.id LINK'||chr(10)|| +' ,tr.runner_owner || ''.'' ||'||chr(10)|| +' tr.runner_name LABEL'||chr(10)|| +' ,res.failures VALUE'||chr(10)|| +' from wt_test_runs tr'||chr(10)|| +' join wt_test_run_stats res'||chr(10)|| +' on res.test_run_id = tr.id'||chr(10)|| +' and res.failures > 0'||chr(10)|| +' where ( :P0_TEST_OWNER is NULL'||chr(10)|| +' or :P0_TEST_OWNER = tr.runner_owner )'||chr(10)|| +' and tr.is_last_run = wtp'; + +a1:=a1||'lsql.get_last_run_flag'||chr(10)|| +' order by res.failures desc, LABEL'||chr(10)|| +''; + +wwv_flow_api.create_flash_chart5_series( + p_id => 4858000738336332+wwv_flow_api.g_id_offset, + p_chart_id => 4857903544336332+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_series_seq =>10, + p_series_name =>'Series 1', + p_series_query => a1, + p_series_type =>'Bar', + p_series_query_type =>'SQL_QUERY', + p_series_query_parse_opt =>'PARSE_CHART_QUERY', + p_series_query_no_data_found=>'No data found.', + p_series_query_row_count_max=>10, + p_action_link =>'f?p=&APP_ID.:3:&SESSION.::&DEBUG.::P0_TEST_RUN_ID:#LINK#', + p_show_action_link =>'C', + p_action_link_checksum_type =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#CHART_REFRESH#'; + +wwv_flow_api.create_page_plug ( + p_id=> 4858315631526698 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 1, + p_plug_name=> 'Top Test Runner Durations', + p_region_name=>'', + p_plug_template=> 4839217975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 4, + p_plug_display_column=> 1, + p_plug_display_point=> 'BEFORE_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'FLASH_CHART5', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => '', + p_plug_display_when_condition => ':P1_NUM_RUNNERS > 0', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1 := null; +wwv_flow_api.create_flash_chart5( + p_id => 4858521402526708+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id => 1, + p_region_id => 4858315631526698+wwv_flow_api.g_id_offset, + p_default_chart_type =>'2DColumn', + p_chart_title =>'', + p_chart_name =>'chart_4857903544336332', + p_chart_width =>300, + p_chart_height =>150, + p_chart_animation =>'N', + p_display_attr =>':H::V:Y:N:N::V:Y:None:::N:::Default', + p_dial_tick_attr =>':::::::::::', + p_gantt_attr =>'Y:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:30:15:5:Y:I:N:S:E', + p_map_attr =>'Orthographic:RegionBounds:REGION_NAME', + p_map_source =>'%', + p_margins =>':::', + p_omit_label_interval => null, + p_bgtype =>'Trans', + p_bgcolor1 =>'', + p_bgcolor2 =>'', + p_gradient_rotation =>null, + p_grid_bgtype =>'', + p_grid_bgcolor1 =>'', + p_grid_bgcolor2 =>'', + p_grid_gradient_rotation =>null, + p_color_scheme =>'0', + p_custom_colors =>'#3366FF', + p_map_undef_color_scheme =>'', + p_map_undef_custom_colors =>'', + p_x_axis_title =>'', + p_x_axis_min =>null, + p_x_axis_max =>null, + p_x_axis_decimal_place =>1, + p_x_axis_prefix =>'', + p_x_axis_postfix =>'', + p_x_axis_label_rotation =>'', + p_x_axis_label_font =>'Tahoma:10:#000000', + p_x_axis_major_interval =>null, + p_x_axis_minor_interval =>null, + p_y_axis_title =>'Seconds', + p_y_axis_min =>null, + p_y_axis_max =>null, + p_y_axis_decimal_place =>1, + p_y_axis_prefix =>'', + p_y_axis_postfix =>'', + p_y_axis_label_rotation =>'', + p_y_axis_label_font =>'Tahoma:10:#000000', + p_y_axis_major_interval =>null, + p_y_axis_minor_interval =>null, + p_async_update =>'N', + p_async_time =>null, + p_legend_title =>'', + p_legend_title_font =>'', + p_names_font => null, + p_names_rotation => null, + p_values_font =>'Arial:10:#000000', + p_values_rotation =>90, + p_values_prefix =>'', + p_values_postfix =>'', + p_hints_font =>'Tahoma:10:#000000', + p_legend_font =>'Arial:10:#000000', + p_grid_labels_font =>'', + p_chart_title_font =>'Tahoma:14:#000000', + p_x_axis_title_font =>'Tahoma:14:#000000', + p_x_axis_title_rotation =>'', + p_y_axis_title_font =>'Tahoma:14:#000000', + p_y_axis_title_rotation =>'', + p_gauge_labels_font =>'Tahoma:10:', + p_use_chart_xml =>'N', + p_chart_xml => a1); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'select id LINK'||chr(10)|| +' ,runner_owner || ''.'' || runner_name LABEL'||chr(10)|| +' ,extract(day from (end_dtm - start_dtm)*86400*100)/100'||chr(10)|| +' VALUE'||chr(10)|| +' from wt_test_runs'||chr(10)|| +' where ( :P0_TEST_OWNER is NULL'||chr(10)|| +' or :P0_TEST_OWNER = runner_owner )'||chr(10)|| +' and is_last_run = wtplsql.get_last_run_flag'||chr(10)|| +' and extract(day from (end_dtm - start'; + +a1:=a1||'_dtm)*86400*100)/100 > 0'||chr(10)|| +' order by VALUE desc, LABEL'||chr(10)|| +''; + +wwv_flow_api.create_flash_chart5_series( + p_id => 4858612747526709+wwv_flow_api.g_id_offset, + p_chart_id => 4858521402526708+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_series_seq =>10, + p_series_name =>'Series 1', + p_series_query => a1, + p_series_type =>'Bar', + p_series_query_type =>'SQL_QUERY', + p_series_query_parse_opt =>'PARSE_CHART_QUERY', + p_series_query_no_data_found=>'No data found.', + p_series_query_row_count_max=>10, + p_action_link =>'f?p=&APP_ID.:3:&SESSION.::&DEBUG.::P0_TEST_RUN_ID:#LINK#', + p_show_action_link =>'C', + p_action_link_checksum_type =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#CHART_REFRESH#'; + +wwv_flow_api.create_page_plug ( + p_id=> 4859830202458220 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 1, + p_plug_name=> 'Top Test Runner Age', + p_region_name=>'', + p_plug_template=> 4839217975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 5, + p_plug_display_column=> 2, + p_plug_display_point=> 'BEFORE_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'FLASH_CHART5', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => '', + p_plug_display_when_condition => ':P1_NUM_RUNNERS > 0', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1 := null; +wwv_flow_api.create_flash_chart5( + p_id => 4860011375458221+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id => 1, + p_region_id => 4859830202458220+wwv_flow_api.g_id_offset, + p_default_chart_type =>'2DColumn', + p_chart_title =>'', + p_chart_name =>'chart_4857903544336332', + p_chart_width =>300, + p_chart_height =>150, + p_chart_animation =>'N', + p_display_attr =>':H::V:Y:N:N::V:Y:None:::N:::Default', + p_dial_tick_attr =>':::::::::::', + p_gantt_attr =>'Y:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:30:15:5:Y:I:N:S:E', + p_map_attr =>'Orthographic:RegionBounds:REGION_NAME', + p_map_source =>'%', + p_margins =>':::', + p_omit_label_interval => null, + p_bgtype =>'Trans', + p_bgcolor1 =>'', + p_bgcolor2 =>'', + p_gradient_rotation =>null, + p_grid_bgtype =>'', + p_grid_bgcolor1 =>'', + p_grid_bgcolor2 =>'', + p_grid_gradient_rotation =>null, + p_color_scheme =>'0', + p_custom_colors =>'#CCCCCC', + p_map_undef_color_scheme =>'', + p_map_undef_custom_colors =>'', + p_x_axis_title =>'', + p_x_axis_min =>null, + p_x_axis_max =>null, + p_x_axis_decimal_place =>1, + p_x_axis_prefix =>'', + p_x_axis_postfix =>'', + p_x_axis_label_rotation =>'', + p_x_axis_label_font =>'Tahoma:10:#000000', + p_x_axis_major_interval =>null, + p_x_axis_minor_interval =>null, + p_y_axis_title =>'Days', + p_y_axis_min =>null, + p_y_axis_max =>null, + p_y_axis_decimal_place =>1, + p_y_axis_prefix =>'', + p_y_axis_postfix =>'', + p_y_axis_label_rotation =>'', + p_y_axis_label_font =>'Tahoma:10:#000000', + p_y_axis_major_interval =>null, + p_y_axis_minor_interval =>null, + p_async_update =>'N', + p_async_time =>null, + p_legend_title =>'', + p_legend_title_font =>'', + p_names_font => null, + p_names_rotation => null, + p_values_font =>'Arial:10:#000000', + p_values_rotation =>90, + p_values_prefix =>'', + p_values_postfix =>'', + p_hints_font =>'Tahoma:10:#000000', + p_legend_font =>'Arial:10:#000000', + p_grid_labels_font =>'', + p_chart_title_font =>'Tahoma:14:#000000', + p_x_axis_title_font =>'Tahoma:14:#000000', + p_x_axis_title_rotation =>'', + p_y_axis_title_font =>'Tahoma:14:#000000', + p_y_axis_title_rotation =>'', + p_gauge_labels_font =>'Tahoma:10:', + p_use_chart_xml =>'N', + p_chart_xml => a1); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'select id LINK'||chr(10)|| +' ,runner_owner || ''.'' ||'||chr(10)|| +' runner_name LABEL'||chr(10)|| +' ,extract(day from (sysdate - start_dtm)*10)/10'||chr(10)|| +' VALUE'||chr(10)|| +' from wt_test_runs'||chr(10)|| +' where ( :P0_TEST_OWNER is NULL'||chr(10)|| +' or :P0_TEST_OWNER = runner_owner )'||chr(10)|| +' and is_last_run = wtplsql.get_last_run_flag'||chr(10)|| +' and start_dtm is not null'||chr(10)|| +' and extract(day '; + +a1:=a1||'from (sysdate - start_dtm)*10)/10 > 0'||chr(10)|| +' order by VALUE desc, LABEL'||chr(10)|| +''; + +wwv_flow_api.create_flash_chart5_series( + p_id => 4860108666458221+wwv_flow_api.g_id_offset, + p_chart_id => 4860011375458221+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_series_seq =>10, + p_series_name =>'Series 1', + p_series_query => a1, + p_series_type =>'Bar', + p_series_query_type =>'SQL_QUERY', + p_series_query_parse_opt =>'PARSE_CHART_QUERY', + p_series_query_no_data_found=>'No data found.', + p_series_query_row_count_max=>10, + p_action_link =>'f?p=&APP_ID.:3:&SESSION.::&DEBUG.::P0_TEST_RUN_ID:#LINK#', + p_show_action_link =>'C', + p_action_link_checksum_type =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#CHART_REFRESH#'; + +wwv_flow_api.create_page_plug ( + p_id=> 4860309181584610 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 1, + p_plug_name=> 'Top DBOUT NotExec Lines', + p_region_name=>'', + p_plug_template=> 4839217975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 3, + p_plug_display_column=> 3, + p_plug_display_point=> 'BEFORE_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'FLASH_CHART5', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => '', + p_plug_display_when_condition => ':P1_NUM_DBOUTS > 0', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1 := null; +wwv_flow_api.create_flash_chart5( + p_id => 4860500924584610+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id => 1, + p_region_id => 4860309181584610+wwv_flow_api.g_id_offset, + p_default_chart_type =>'2DColumn', + p_chart_title =>'', + p_chart_name =>'chart_4857903544336332', + p_chart_width =>300, + p_chart_height =>150, + p_chart_animation =>'N', + p_display_attr =>':H::V:Y:N:N::V:Y:None:::N:::Default', + p_dial_tick_attr =>':::::::::::', + p_gantt_attr =>'Y:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:30:15:5:Y:I:N:S:E', + p_map_attr =>'Orthographic:RegionBounds:REGION_NAME', + p_map_source =>'%', + p_margins =>':::', + p_omit_label_interval => null, + p_bgtype =>'Trans', + p_bgcolor1 =>'', + p_bgcolor2 =>'', + p_gradient_rotation =>null, + p_grid_bgtype =>'', + p_grid_bgcolor1 =>'', + p_grid_bgcolor2 =>'', + p_grid_gradient_rotation =>null, + p_color_scheme =>'0', + p_custom_colors =>'#FF0066', + p_map_undef_color_scheme =>'', + p_map_undef_custom_colors =>'', + p_x_axis_title =>'', + p_x_axis_min =>null, + p_x_axis_max =>null, + p_x_axis_decimal_place =>null, + p_x_axis_prefix =>'', + p_x_axis_postfix =>'', + p_x_axis_label_rotation =>'', + p_x_axis_label_font =>'Tahoma:10:#000000', + p_x_axis_major_interval =>null, + p_x_axis_minor_interval =>null, + p_y_axis_title =>'Source Lines', + p_y_axis_min =>null, + p_y_axis_max =>null, + p_y_axis_decimal_place =>null, + p_y_axis_prefix =>'', + p_y_axis_postfix =>'', + p_y_axis_label_rotation =>'', + p_y_axis_label_font =>'Tahoma:10:#000000', + p_y_axis_major_interval =>null, + p_y_axis_minor_interval =>null, + p_async_update =>'N', + p_async_time =>null, + p_legend_title =>'', + p_legend_title_font =>'', + p_names_font => null, + p_names_rotation => null, + p_values_font =>'Arial:10:#000000', + p_values_rotation =>90, + p_values_prefix =>'', + p_values_postfix =>'', + p_hints_font =>'Tahoma:10:#000000', + p_legend_font =>'Arial:10:#000000', + p_grid_labels_font =>'', + p_chart_title_font =>'Tahoma:14:#000000', + p_x_axis_title_font =>'Tahoma:14:#000000', + p_x_axis_title_rotation =>'', + p_y_axis_title_font =>'Tahoma:14:#000000', + p_y_axis_title_rotation =>'', + p_gauge_labels_font =>'Tahoma:10:', + p_use_chart_xml =>'N', + p_chart_xml => a1); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'select run.id LINK'||chr(10)|| +' ,run.dbout_owner || ''.'' ||'||chr(10)|| +' run.dbout_name || ''('' ||'||chr(10)|| +' run.dbout_type || '')'' LABEL'||chr(10)|| +' ,res.notexec_lines VALUE'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_test_run_stats res'||chr(10)|| +' on res.test_run_id = run.id'||chr(10)|| +' and res.notexec_lines > 0'||chr(10)|| +' where ( :P0_TEST_OWNER is NULL'||chr(10)|| +' or :P0_TEST_OWNER = run.ru'; + +a1:=a1||'nner_owner )'||chr(10)|| +' and run.is_last_run = wtplsql.get_last_run_flag'||chr(10)|| +' and run.dbout_name is not null'||chr(10)|| +' order by res.notexec_lines desc, LABEL'||chr(10)|| +''; + +wwv_flow_api.create_flash_chart5_series( + p_id => 4860628410584610+wwv_flow_api.g_id_offset, + p_chart_id => 4860500924584610+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_series_seq =>10, + p_series_name =>'Series 1', + p_series_query => a1, + p_series_type =>'Bar', + p_series_query_type =>'SQL_QUERY', + p_series_query_parse_opt =>'PARSE_CHART_QUERY', + p_series_query_no_data_found=>'No data found.', + p_series_query_row_count_max=>10, + p_action_link =>'f?p=&APP_ID.:3:&SESSION.::&DEBUG.::P0_TEST_RUN_ID:#LINK#', + p_show_action_link =>'C', + p_action_link_checksum_type =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#CHART_REFRESH#'; + +wwv_flow_api.create_page_plug ( + p_id=> 4861210200133728 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 1, + p_plug_name=> 'Top Test Case Failures', + p_region_name=>'', + p_plug_template=> 4839217975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 2, + p_plug_display_column=> 2, + p_plug_display_point=> 'BEFORE_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'FLASH_CHART5', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => '', + p_plug_display_when_condition => ':P1_NUM_RUNNERS > 0', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1 := null; +wwv_flow_api.create_flash_chart5( + p_id => 4861429150133729+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id => 1, + p_region_id => 4861210200133728+wwv_flow_api.g_id_offset, + p_default_chart_type =>'2DColumn', + p_chart_title =>'', + p_chart_name =>'chart_4857903544336332', + p_chart_width =>300, + p_chart_height =>150, + p_chart_animation =>'N', + p_display_attr =>':H::V:Y:N:N::V:Y:None:::N:::Default', + p_dial_tick_attr =>':::::::::::', + p_gantt_attr =>'Y:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:30:15:5:Y:I:N:S:E', + p_map_attr =>'Orthographic:RegionBounds:REGION_NAME', + p_map_source =>'%', + p_margins =>':::', + p_omit_label_interval => null, + p_bgtype =>'Trans', + p_bgcolor1 =>'', + p_bgcolor2 =>'', + p_gradient_rotation =>null, + p_grid_bgtype =>'', + p_grid_bgcolor1 =>'', + p_grid_bgcolor2 =>'', + p_grid_gradient_rotation =>null, + p_color_scheme =>'0', + p_custom_colors =>'#FFFF00', + p_map_undef_color_scheme =>'', + p_map_undef_custom_colors =>'', + p_x_axis_title =>'', + p_x_axis_min =>null, + p_x_axis_max =>null, + p_x_axis_decimal_place =>null, + p_x_axis_prefix =>'', + p_x_axis_postfix =>'', + p_x_axis_label_rotation =>'', + p_x_axis_label_font =>'Tahoma:10:#000000', + p_x_axis_major_interval =>null, + p_x_axis_minor_interval =>null, + p_y_axis_title =>'Failures', + p_y_axis_min =>null, + p_y_axis_max =>null, + p_y_axis_decimal_place =>null, + p_y_axis_prefix =>'', + p_y_axis_postfix =>'', + p_y_axis_label_rotation =>'', + p_y_axis_label_font =>'Tahoma:10:#000000', + p_y_axis_major_interval =>null, + p_y_axis_minor_interval =>null, + p_async_update =>'N', + p_async_time =>null, + p_legend_title =>'', + p_legend_title_font =>'', + p_names_font => null, + p_names_rotation => null, + p_values_font =>'Arial:10:#000000', + p_values_rotation =>90, + p_values_prefix =>'', + p_values_postfix =>'', + p_hints_font =>'Tahoma:10:#000000', + p_legend_font =>'Arial:10:#000000', + p_grid_labels_font =>'', + p_chart_title_font =>'Tahoma:14:#000000', + p_x_axis_title_font =>'Tahoma:14:#000000', + p_x_axis_title_rotation =>'', + p_y_axis_title_font =>'Tahoma:14:#000000', + p_y_axis_title_rotation =>'', + p_gauge_labels_font =>'Tahoma:10:', + p_use_chart_xml =>'N', + p_chart_xml => a1); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'select ''f?p='' || :APP_ID ||'||chr(10)|| +' '':'' || ''6'' || -- Page'||chr(10)|| +' '':'' || :APP_SESSION ||'||chr(10)|| +' '':'' || :REQUEST ||'||chr(10)|| +' '':'' || :DEBUG ||'||chr(10)|| +' '':'' || ''N'' || -- CLear Cache'||chr(10)|| +' '':'' || ''P0_TEST_RUN_ID'' || '','' ||'||chr(10)|| +' ''P0_TEST_CASE'' || -- Item Names'||chr(10)|| +' '; + +a1:=a1||' '':'' || run.id || '','' ||'||chr(10)|| +' tc.testcase || -- Item Values'||chr(10)|| +' '':'' || V(''PRINTER_FRIENDLY'') LINK'||chr(10)|| +' ,run.runner_owner || ''.'' ||'||chr(10)|| +' run.runner_name || '':'' ||'||chr(10)|| +' tc.testcase LABEL'||chr(10)|| +' ,tc.failures VALUE'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_testcase_runs tc'||chr(10)|| +' on tc.test_run_'; + +a1:=a1||'id = run.id'||chr(10)|| +' and tc.failures > 0'||chr(10)|| +' where ( :P0_TEST_OWNER is NULL'||chr(10)|| +' or :P0_TEST_OWNER = runner_owner )'||chr(10)|| +' and is_last_run = wtplsql.get_last_run_flag'||chr(10)|| +' order by failures desc, TESTCASE'||chr(10)|| +''; + +wwv_flow_api.create_flash_chart5_series( + p_id => 4861511054133729+wwv_flow_api.g_id_offset, + p_chart_id => 4861429150133729+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_series_seq =>10, + p_series_name =>'Series 1', + p_series_query => a1, + p_series_type =>'Bar', + p_series_query_type =>'SQL_QUERY', + p_series_query_parse_opt =>'PARSE_CHART_QUERY', + p_series_query_no_data_found=>'No data found.', + p_series_query_row_count_max=>10, + p_action_link =>'', + p_show_action_link =>'N', + p_action_link_checksum_type =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#CHART_REFRESH#'; + +wwv_flow_api.create_page_plug ( + p_id=> 4861614487144344 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 1, + p_plug_name=> 'Top DBOUT LineExec Times', + p_region_name=>'', + p_plug_template=> 4839217975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 6, + p_plug_display_column=> 3, + p_plug_display_point=> 'BEFORE_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'FLASH_CHART5', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => '', + p_plug_display_when_condition => ':P1_NUM_RUNNERS > 0', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1 := null; +wwv_flow_api.create_flash_chart5( + p_id => 4861806074144344+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id => 1, + p_region_id => 4861614487144344+wwv_flow_api.g_id_offset, + p_default_chart_type =>'2DColumn', + p_chart_title =>'', + p_chart_name =>'chart_4857903544336332', + p_chart_width =>300, + p_chart_height =>150, + p_chart_animation =>'N', + p_display_attr =>':H::V:Y:N:N::V:Y:None:::N:::Default', + p_dial_tick_attr =>':::::::::::', + p_gantt_attr =>'Y:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:30:15:5:Y:I:N:S:E', + p_map_attr =>'Orthographic:RegionBounds:REGION_NAME', + p_map_source =>'%', + p_margins =>':::', + p_omit_label_interval => null, + p_bgtype =>'Trans', + p_bgcolor1 =>'', + p_bgcolor2 =>'', + p_gradient_rotation =>null, + p_grid_bgtype =>'', + p_grid_bgcolor1 =>'', + p_grid_bgcolor2 =>'', + p_grid_gradient_rotation =>null, + p_color_scheme =>'0', + p_custom_colors =>'#3366FF', + p_map_undef_color_scheme =>'', + p_map_undef_custom_colors =>'', + p_x_axis_title =>'', + p_x_axis_min =>null, + p_x_axis_max =>null, + p_x_axis_decimal_place =>null, + p_x_axis_prefix =>'', + p_x_axis_postfix =>'', + p_x_axis_label_rotation =>'', + p_x_axis_label_font =>'Tahoma:10:#000000', + p_x_axis_major_interval =>null, + p_x_axis_minor_interval =>null, + p_y_axis_title =>'Milliseconds', + p_y_axis_min =>null, + p_y_axis_max =>null, + p_y_axis_decimal_place =>null, + p_y_axis_prefix =>'', + p_y_axis_postfix =>'', + p_y_axis_label_rotation =>'', + p_y_axis_label_font =>'Tahoma:10:#000000', + p_y_axis_major_interval =>null, + p_y_axis_minor_interval =>null, + p_async_update =>'N', + p_async_time =>null, + p_legend_title =>'', + p_legend_title_font =>'', + p_names_font => null, + p_names_rotation => null, + p_values_font =>'Arial:10:#000000', + p_values_rotation =>90, + p_values_prefix =>'', + p_values_postfix =>'', + p_hints_font =>'Tahoma:10:#000000', + p_legend_font =>'Arial:10:#000000', + p_grid_labels_font =>'', + p_chart_title_font =>'Tahoma:14:#000000', + p_x_axis_title_font =>'Tahoma:14:#000000', + p_x_axis_title_rotation =>'', + p_y_axis_title_font =>'Tahoma:14:#000000', + p_y_axis_title_rotation =>'', + p_gauge_labels_font =>'Tahoma:10:', + p_use_chart_xml =>'N', + p_chart_xml => a1); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'select res.test_run_id LINK'||chr(10)|| +' ,run.dbout_owner || ''.'' ||'||chr(10)|| +' run.dbout_name || ''('' ||'||chr(10)|| +' run.dbout_type || '')'' LABEL'||chr(10)|| +' ,res.max_executed_usec/1000 VALUE'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_test_run_stats res'||chr(10)|| +' on res.test_run_id = run.id'||chr(10)|| +' and res.max_executed_usec > 0'||chr(10)|| +' where ( :P0_TEST_OWNER is NULL'||chr(10)|| +' or :'; + +a1:=a1||'P0_TEST_OWNER = run.runner_owner )'||chr(10)|| +' and run.is_last_run = wtplsql.get_last_run_flag'||chr(10)|| +' order by VALUE desc, LABEL'||chr(10)|| +''; + +wwv_flow_api.create_flash_chart5_series( + p_id => 4861925325144344+wwv_flow_api.g_id_offset, + p_chart_id => 4861806074144344+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_series_seq =>10, + p_series_name =>'Series 1', + p_series_query => a1, + p_series_type =>'Bar', + p_series_query_type =>'SQL_QUERY', + p_series_query_parse_opt =>'PARSE_CHART_QUERY', + p_series_query_no_data_found=>'No data found.', + p_series_query_row_count_max=>10, + p_action_link =>'f?p=&APP_ID.:3:&SESSION.::&DEBUG.::P0_TEST_RUN_ID:#LINK#', + p_show_action_link =>'C', + p_action_link_checksum_type =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||'select log_id'||chr(10)|| +' ,start_date'||chr(10)|| +' ,job_name'||chr(10)|| +' ,status'||chr(10)|| +' ,inst'||chr(10)|| +' ,session_id'||chr(10)|| +' ,os_pid'||chr(10)|| +' ,error_num'||chr(10)|| +' ,additional_info'||chr(10)|| +' from wt_scheduler_jobs'||chr(10)|| +' where status not in (''SUCCEEDED'',''FAILED'')'||chr(10)|| +' and ( :P0_TEST_OWNER is null'||chr(10)|| +' or job_name like :P0_TEST_OWNER || ''$%'' )'; + +wwv_flow_api.create_report_region ( + p_id=> 4868303731390297 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 1, + p_name=> 'Incomplete Test Runner Jobs', + p_region_name=>'', + p_template=> 4840201642414912+ wwv_flow_api.g_id_offset, + p_display_sequence=> 51, + p_report_attributes=>'style="color:#0088FF"', + p_display_column=> 1, + p_display_point=> 'AFTER_SHOW_ITEMS', + p_source=> s, + p_source_type=> 'SQL_QUERY', + p_display_error_message=> '#SQLERRM#', + p_plug_caching=> 'NOT_CACHED', + p_customized=> '0', + p_translate_title=> 'Y', + p_ajax_enabled=> 'Y', + p_query_row_template=> 4843113555414914+ wwv_flow_api.g_id_offset, + p_query_headings_type=> 'COLON_DELMITED_LIST', + p_query_num_rows=> '15', + p_query_options=> 'DERIVED_REPORT_COLUMNS', + p_query_show_nulls_as=> ' - ', + p_query_break_cols=> '0', + p_query_no_data_found=> 'no data found', + p_query_num_rows_type=> 'NEXT_PREVIOUS_LINKS', + p_pagination_display_position=> 'BOTTOM_LEFT', + p_csv_output=> 'N', + p_query_asc_image=> 'apex/builder/dup.gif', + p_query_asc_image_attr=> 'width="16" height="16" alt="" ', + p_query_desc_image=> 'apex/builder/ddown.gif', + p_query_desc_image_attr=> 'width="16" height="16" alt="" ', + p_plug_query_strip_html=> 'Y', + p_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 5037626427564981 + wwv_flow_api.g_id_offset, + p_region_id=> 4868303731390297 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 1, + p_form_element_id=> null, + p_column_alias=> 'LOG_ID', + p_column_display_sequence=> 1, + p_column_heading=> 'Log ID', + p_column_alignment=>'LEFT', + p_heading_alignment=>'CENTER', + p_default_sort_column_sequence=>1, + p_default_sort_dir=>'desc', + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 5039813342816631 + wwv_flow_api.g_id_offset, + p_region_id=> 4868303731390297 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 2, + p_form_element_id=> null, + p_column_alias=> 'START_DATE', + p_column_display_sequence=> 2, + p_column_heading=> 'Start Date', + p_column_alignment=>'LEFT', + p_heading_alignment=>'CENTER', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 5037901990564982 + wwv_flow_api.g_id_offset, + p_region_id=> 4868303731390297 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 3, + p_form_element_id=> null, + p_column_alias=> 'JOB_NAME', + p_column_display_sequence=> 3, + p_column_heading=> 'Job Name', + p_column_alignment=>'LEFT', + p_heading_alignment=>'CENTER', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 4881232628476372 + wwv_flow_api.g_id_offset, + p_region_id=> 4868303731390297 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 4, + p_form_element_id=> null, + p_column_alias=> 'STATUS', + p_column_display_sequence=> 4, + p_column_heading=> 'Status', + p_column_alignment=>'LEFT', + p_heading_alignment=>'CENTER', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 5038027139564982 + wwv_flow_api.g_id_offset, + p_region_id=> 4868303731390297 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 5, + p_form_element_id=> null, + p_column_alias=> 'INST', + p_column_display_sequence=> 5, + p_column_heading=> 'Inst', + p_column_alignment=>'LEFT', + p_heading_alignment=>'CENTER', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 5038112499564982 + wwv_flow_api.g_id_offset, + p_region_id=> 4868303731390297 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 6, + p_form_element_id=> null, + p_column_alias=> 'SESSION_ID', + p_column_display_sequence=> 6, + p_column_heading=> 'Session ID', + p_column_alignment=>'LEFT', + p_heading_alignment=>'CENTER', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 5039922124816631 + wwv_flow_api.g_id_offset, + p_region_id=> 4868303731390297 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 7, + p_form_element_id=> null, + p_column_alias=> 'OS_PID', + p_column_display_sequence=> 7, + p_column_heading=> 'OS PID', + p_column_alignment=>'LEFT', + p_heading_alignment=>'CENTER', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 5040017675816631 + wwv_flow_api.g_id_offset, + p_region_id=> 4868303731390297 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 8, + p_form_element_id=> null, + p_column_alias=> 'ERROR_NUM', + p_column_display_sequence=> 8, + p_column_heading=> 'Error Num', + p_column_alignment=>'LEFT', + p_heading_alignment=>'CENTER', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 5038421217564982 + wwv_flow_api.g_id_offset, + p_region_id=> 4868303731390297 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 9, + p_form_element_id=> null, + p_column_alias=> 'ADDITIONAL_INFO', + p_column_display_sequence=> 9, + p_column_heading=> 'Additional Info', + p_column_alignment=>'LEFT', + p_heading_alignment=>'CENTER', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||'select id'||chr(10)|| +' ,runner_owner || ''.'' ||'||chr(10)|| +' runner_name TEST_RUNNER'||chr(10)|| +' ,dbout_owner || ''.'' ||'||chr(10)|| +' dbout_name || ''('' ||'||chr(10)|| +' dbout_type || '')'' DBOUT_PROFILED'||chr(10)|| +' ,start_dtm'||chr(10)|| +' ,error_message'||chr(10)|| +' from wt_test_runs'||chr(10)|| +' where ( :P0_TEST_OWNER is NULL'||chr(10)|| +' or :P0_TEST_OWNER = runner_owner )'||chr(10)|| +' and is_last_run = wtplsql.get_last_run_flag'||chr(10)|| +' and error_message is not nul'; + +s:=s||'l'; + +wwv_flow_api.create_report_region ( + p_id=> 4869425043509942 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 1, + p_name=> 'Test Runner Errors', + p_region_name=>'', + p_template=> 4840201642414912+ wwv_flow_api.g_id_offset, + p_display_sequence=> 52, + p_report_attributes=>'style="color:#FF0000"', + p_display_column=> 1, + p_display_point=> 'AFTER_SHOW_ITEMS', + p_source=> s, + p_source_type=> 'SQL_QUERY', + p_display_error_message=> '#SQLERRM#', + p_plug_caching=> 'NOT_CACHED', + p_customized=> '0', + p_translate_title=> 'Y', + p_ajax_enabled=> 'Y', + p_query_row_template=> 4843113555414914+ wwv_flow_api.g_id_offset, + p_query_headings_type=> 'COLON_DELMITED_LIST', + p_query_num_rows=> '15', + p_query_options=> 'DERIVED_REPORT_COLUMNS', + p_query_show_nulls_as=> ' - ', + p_query_break_cols=> '0', + p_query_no_data_found=> 'no data found', + p_query_num_rows_type=> 'NEXT_PREVIOUS_LINKS', + p_pagination_display_position=> 'BOTTOM_LEFT', + p_csv_output=> 'N', + p_prn_output=> 'N', + p_prn_format=> 'PDF', + p_prn_output_show_link=> 'Y', + p_prn_output_link_text=> 'Print', + p_prn_content_disposition=> 'ATTACHMENT', + p_prn_document_header=> 'APEX', + p_prn_units=> 'INCHES', + p_prn_paper_size=> 'LETTER', + p_prn_width_units=> 'PERCENTAGE', + p_prn_width=> 11, + p_prn_height=> 8.5, + p_prn_orientation=> 'HORIZONTAL', + p_prn_page_header_font_color=> '#000000', + p_prn_page_header_font_family=> 'Helvetica', + p_prn_page_header_font_weight=> 'normal', + p_prn_page_header_font_size=> '12', + p_prn_page_footer_font_color=> '#000000', + p_prn_page_footer_font_family=> 'Helvetica', + p_prn_page_footer_font_weight=> 'normal', + p_prn_page_footer_font_size=> '12', + p_prn_header_bg_color=> '#9bafde', + p_prn_header_font_color=> '#ffffff', + p_prn_header_font_family=> 'Helvetica', + p_prn_header_font_weight=> 'normal', + p_prn_header_font_size=> '10', + p_prn_body_bg_color=> '#efefef', + p_prn_body_font_color=> '#000000', + p_prn_body_font_family=> 'Helvetica', + p_prn_body_font_weight=> 'normal', + p_prn_body_font_size=> '10', + p_prn_border_width=> .5, + p_prn_page_header_alignment=> 'CENTER', + p_prn_page_footer_alignment=> 'CENTER', + p_query_asc_image=> 'apex/builder/dup.gif', + p_query_asc_image_attr=> 'width="16" height="16" alt="" ', + p_query_desc_image=> 'apex/builder/ddown.gif', + p_query_desc_image_attr=> 'width="16" height="16" alt="" ', + p_plug_query_strip_html=> 'Y', + p_comment=>''); +end; +/ + +-- maintain plug_column_width attribute for 2.2 and greater +begin +execute immediate 'begin wwv_flow_api.set_region_column_width ( + p_id=>4869425043509942 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_page_id=>1, + p_plug_column_width=>''style="color:red"''); end;'; +exception when others then null; +end; +/ + +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 4871606819864244 + wwv_flow_api.g_id_offset, + p_region_id=> 4869425043509942 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 1, + p_form_element_id=> null, + p_column_alias=> 'ID', + p_column_display_sequence=> 1, + p_column_heading=> 'Test Run ID', + p_column_link=>'f?p=&APP_ID.:3:&SESSION.::&DEBUG.::P0_TEST_RUN_ID:#ID#', + p_column_linktext=>'#ID#', + p_column_alignment=>'LEFT', + p_heading_alignment=>'RIGHT', + p_default_sort_column_sequence=>2, + p_default_sort_dir=>'desc', + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_lov_show_nulls=> 'NO', + p_is_required=> false, + p_pk_col_source=> s, + p_lov_display_extra=> 'YES', + p_include_in_export=> 'Y', + p_print_col_width=> '20', + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 4869808842509943 + wwv_flow_api.g_id_offset, + p_region_id=> 4869425043509942 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 2, + p_form_element_id=> null, + p_column_alias=> 'TEST_RUNNER', + p_column_display_sequence=> 2, + p_column_heading=> 'Test Runner Package', + p_column_alignment=>'LEFT', + p_heading_alignment=>'LEFT', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_lov_show_nulls=> 'NO', + p_is_required=> false, + p_pk_col_source=> s, + p_lov_display_extra=> 'YES', + p_include_in_export=> 'Y', + p_print_col_width=> '20', + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 4869907123509943 + wwv_flow_api.g_id_offset, + p_region_id=> 4869425043509942 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 3, + p_form_element_id=> null, + p_column_alias=> 'DBOUT_PROFILED', + p_column_display_sequence=> 3, + p_column_heading=> 'DB Object Under Test', + p_column_alignment=>'LEFT', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_include_in_export=> 'Y', + p_print_col_width=> '20', + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 4870003732509943 + wwv_flow_api.g_id_offset, + p_region_id=> 4869425043509942 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 4, + p_form_element_id=> null, + p_column_alias=> 'START_DTM', + p_column_display_sequence=> 4, + p_column_heading=> 'Start Date/Time', + p_column_alignment=>'LEFT', + p_default_sort_column_sequence=>1, + p_default_sort_dir=>'desc', + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_include_in_export=> 'Y', + p_print_col_width=> '20', + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 4870105383509943 + wwv_flow_api.g_id_offset, + p_region_id=> 4869425043509942 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 5, + p_form_element_id=> null, + p_column_alias=> 'ERROR_MESSAGE', + p_column_display_sequence=> 5, + p_column_heading=> 'Error Message', + p_column_alignment=>'LEFT', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_include_in_export=> 'Y', + p_print_col_width=> '20', + p_column_comment=>''); +end; +/ + +begin + +null; + +end; +/ + + +begin + +wwv_flow_api.create_page_branch( + p_id=>4852128982276097 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 1, + p_branch_action=> 'f?p=&FLOW_ID.:1:&SESSION.', + p_branch_point=> 'AFTER_PROCESSING', + p_branch_type=> 'REDIRECT_URL', + p_branch_sequence=> 99, + p_save_state_before_branch_yn=>'Y', + p_branch_comment=> ''); + + +end; +/ + + +begin + +wwv_flow_api.create_page_computation( + p_id=> 5111815015291792 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 1, + p_computation_sequence => 10, + p_computation_item=> 'P0_DISPLAY', + p_computation_point=> 'BEFORE_HEADER', + p_computation_type=> 'STATIC_ASSIGNMENT', + p_computation_processed=> 'REPLACE_EXISTING', + p_computation=> 'Y', + p_compute_when => '', + p_compute_when_type=>''); + +null; + +end; +/ + + +begin + +--------------------------------------- +-- ...updatable report columns for page 1 +-- + +begin + +null; +end; +null; + +end; +/ + + +--application/pages/page_00002 +prompt ...PAGE 2: Run Test +-- + +begin + +wwv_flow_api.create_page ( + p_flow_id => wwv_flow.g_flow_id + ,p_id => 2 + ,p_tab_set => 'TS1' + ,p_name => 'Run Test' + ,p_alias => 'RUNTEST' + ,p_step_title => 'Run Test' + ,p_allow_duplicate_submissions => 'Y' + ,p_step_sub_title => 'Run Test' + ,p_step_sub_title_type => 'TEXT_WITH_SUBSTITUTIONS' + ,p_first_item => 'AUTO_FIRST_ITEM' + ,p_include_apex_css_js_yn => 'Y' + ,p_autocomplete_on_off => 'ON' + ,p_page_is_public_y_n => 'N' + ,p_protection_level => 'N' + ,p_cache_page_yn => 'N' + ,p_cache_timeout_seconds => 21600 + ,p_cache_by_user_yn => 'N' + ,p_help_text => +'No help is available for this page.' + ,p_last_updated_by => 'WTP' + ,p_last_upd_yyyymmddhh24miss => '20181104135425' + ); +null; + +end; +/ + +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||'declare'||chr(10)|| +' last_run_id number;'||chr(10)|| +'begin'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' if :P2_DB_LINK_HOST is null'||chr(10)|| +' and :P0_TEST_OWNER is not null'||chr(10)|| +' then'||chr(10)|| +' htp.p(''*** DB Link is missing. ***'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' end if;'||chr(10)|| +' htp.p(''   Last Run ID: '');'||chr(10)|| +' select id into last_run_id'||chr(10)|| +' from wt_test_runs'||chr(10)|| +' where runner_own'; + +s:=s||'er = :P0_TEST_OWNER'||chr(10)|| +' and runner_name = :P0_TEST_RUNNER'||chr(10)|| +' and is_last_run = ''Y'';'||chr(10)|| +' -- last_run_id cannot be null, or NO_DATA_FOUND'||chr(10)|| +' -- would have been raised (ID is a Primary Key)'||chr(10)|| +' if last_run_id != nvl(:P0_TEST_RUN_ID,-1)'||chr(10)|| +' then'||chr(10)|| +' htp.p('''' || last_run_id ||'||chr(10)|| +' '' (Click to View)'' || ''
'');'||chr(10)|| +' else'||chr(10)|| +' htp.p(''Same ID
'');'||chr(10)|| +' end if;'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +'exception when NO_DATA_FOUND'||chr(10)|| +'then'||chr(10)|| +' htp.p(''Last Test Run Not found
'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +'end;'; + +wwv_flow_api.create_page_plug ( + p_id=> 4847515458414925 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 2, + p_plug_name=> 'Run Test', + p_region_name=>'', + p_plug_template=> 4839912075414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 10, + p_plug_display_column=> 1, + p_plug_display_point=> 'BEFORE_BOX_BODY', + p_plug_source=> s, + p_plug_source_type=> 'PLSQL_PROCEDURE', + p_translate_title=> 'Y', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_column_width => 'td width="320"', + p_plug_display_condition_type => '', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||'select log_id'||chr(10)|| +' ,start_date'||chr(10)|| +' ,job_name'||chr(10)|| +' ,status'||chr(10)|| +' ,inst'||chr(10)|| +' ,session_id'||chr(10)|| +' ,os_pid'||chr(10)|| +' ,error_num'||chr(10)|| +' ,additional_info'||chr(10)|| +' from wt_scheduler_jobs'||chr(10)|| +'-- where job_name like :APP_USER || ''$%'''; + +wwv_flow_api.create_page_plug ( + p_id=> 4885513244116318 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 2, + p_plug_name=> 'DBMS_SCHEDULER Jobs', + p_region_name=>'', + p_plug_template=> 4839831975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 40, + p_plug_display_column=> 1, + p_plug_display_point=> 'AFTER_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'DYNAMIC_QUERY', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_show_nulls_as => ' - ', + p_plug_display_condition_type => '', + p_pagination_display_position=>'BOTTOM_RIGHT', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'select log_id'||chr(10)|| +' ,start_date'||chr(10)|| +' ,job_name'||chr(10)|| +' ,status'||chr(10)|| +' ,inst'||chr(10)|| +' ,session_id'||chr(10)|| +' ,os_pid'||chr(10)|| +' ,error_num'||chr(10)|| +' ,additional_info'||chr(10)|| +' from wt_scheduler_jobs'||chr(10)|| +'-- where job_name like :APP_USER || ''$%'''; + +wwv_flow_api.create_worksheet( + p_id=> 4885631457116318+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 2, + p_region_id=> 4885513244116318+wwv_flow_api.g_id_offset, + p_name=> 'List of APEX PLSQL Jobs', + p_folder_id=> null, + p_alias=> '', + p_report_id_item=> '', + p_max_row_count=> '10000', + p_max_row_count_message=> 'This query returns more than #MAX_ROW_COUNT# rows, please filter your data to ensure complete results.', + p_no_data_found_message=> 'No data found.', + p_max_rows_per_page=>'10', + p_search_button_label=>'', + p_page_items_to_submit=>'', + p_sort_asc_image=>'', + p_sort_asc_image_attr=>'', + p_sort_desc_image=>'', + p_sort_desc_image_attr=>'', + p_sql_query => a1, + p_status=>'AVAILABLE_FOR_OWNER', + p_allow_report_saving=>'Y', + p_allow_save_rpt_public=>'N', + p_allow_report_categories=>'N', + p_show_nulls_as=>'-', + p_pagination_type=>'ROWS_X_TO_Y', + p_pagination_display_pos=>'BOTTOM_LEFT', + p_show_finder_drop_down=>'Y', + p_show_display_row_count=>'N', + p_show_search_bar=>'Y', + p_show_search_textbox=>'Y', + p_show_actions_menu=>'Y', + p_report_list_mode=>'TABS', + p_show_detail_link=>'N', + p_show_select_columns=>'Y', + p_show_rows_per_page=>'Y', + p_show_filter=>'Y', + p_show_sort=>'Y', + p_show_control_break=>'Y', + p_show_highlight=>'Y', + p_show_computation=>'Y', + p_show_aggregate=>'Y', + p_show_chart=>'Y', + p_show_group_by=>'Y', + p_show_notify=>'N', + p_show_calendar=>'N', + p_show_flashback=>'Y', + p_show_reset=>'Y', + p_show_download=>'Y', + p_show_help=>'Y', + p_download_formats=>'CSV:HTML:EMAIL', + p_allow_exclude_null_values=>'N', + p_allow_hide_extra_columns=>'N', + p_icon_view_enabled_yn=>'N', + p_icon_view_columns_per_row=>1, + p_detail_view_enabled_yn=>'N', + p_owner=>'WTP'); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5032410666172454+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 2, + p_worksheet_id => 4885631457116318+wwv_flow_api.g_id_offset, + p_db_column_name =>'LOG_ID', + p_display_order =>1, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'B', + p_column_label =>'Log ID', + p_report_label =>'Log ID', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5039132211784254+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 2, + p_worksheet_id => 4885631457116318+wwv_flow_api.g_id_offset, + p_db_column_name =>'START_DATE', + p_display_order =>2, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'K', + p_column_label =>'Start Date', + p_report_label =>'Start Date', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'DATE', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'LEFT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5032729825172455+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 2, + p_worksheet_id => 4885631457116318+wwv_flow_api.g_id_offset, + p_db_column_name =>'JOB_NAME', + p_display_order =>3, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'E', + p_column_label =>'Job Name', + p_report_label =>'Job Name', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'STRING', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'LEFT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 4885819894116324+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 2, + p_worksheet_id => 4885631457116318+wwv_flow_api.g_id_offset, + p_db_column_name =>'STATUS', + p_display_order =>4, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'A', + p_column_label =>'Status', + p_report_label =>'Status', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'STRING', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'LEFT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5039226462784262+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 2, + p_worksheet_id => 4885631457116318+wwv_flow_api.g_id_offset, + p_db_column_name =>'INST', + p_display_order =>5, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'L', + p_column_label =>'Inst', + p_report_label =>'Inst', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5040419669875210+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 2, + p_worksheet_id => 4885631457116318+wwv_flow_api.g_id_offset, + p_db_column_name =>'SESSION_ID', + p_display_order =>6, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'O', + p_column_label =>'Session ID', + p_report_label =>'Session ID', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5040526819875210+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 2, + p_worksheet_id => 4885631457116318+wwv_flow_api.g_id_offset, + p_db_column_name =>'OS_PID', + p_display_order =>7, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'P', + p_column_label =>'OS PID', + p_report_label =>'OS PID', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5039401783784262+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 2, + p_worksheet_id => 4885631457116318+wwv_flow_api.g_id_offset, + p_db_column_name =>'ERROR_NUM', + p_display_order =>8, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'N', + p_column_label =>'Error Num', + p_report_label =>'Error Num', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5033208190172456+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 2, + p_worksheet_id => 4885631457116318+wwv_flow_api.g_id_offset, + p_db_column_name =>'ADDITIONAL_INFO', + p_display_order =>9, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'J', + p_column_label =>'Additional Info', + p_report_label =>'Additional Info', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'STRING', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'LEFT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +declare + rc1 varchar2(32767) := null; +begin +rc1:=rc1||'LOG_ID:START_DATE:JOB_NAME:STATUS:INST:SESSION_ID:OS_PID:ERROR_NUM:ADDITIONAL_INFO'; + +wwv_flow_api.create_worksheet_rpt( + p_id => 4886308472128052+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 2, + p_worksheet_id => 4885631457116318+wwv_flow_api.g_id_offset, + p_session_id => null, + p_base_report_id => null+wwv_flow_api.g_id_offset, + p_application_user => 'APXWS_DEFAULT', + p_report_seq =>10, + p_report_alias =>'48864', + p_status =>'PUBLIC', + p_category_id =>null+wwv_flow_api.g_id_offset, + p_is_default =>'Y', + p_display_rows =>10, + p_report_columns =>rc1, + p_sort_column_1 =>'LOG_ID', + p_sort_direction_1 =>'DESC', + p_sort_column_2 =>'0', + p_sort_direction_2 =>'DESC', + p_sort_column_3 =>'0', + p_sort_direction_3 =>'ASC', + p_sort_column_4 =>'0', + p_sort_direction_4 =>'ASC', + p_sort_column_5 =>'0', + p_sort_direction_5 =>'ASC', + p_sort_column_6 =>'0', + p_sort_direction_6 =>'ASC', + p_flashback_enabled =>'N', + p_calendar_display_column =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_condition( + p_id => 5039623254809995+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 2, + p_worksheet_id => 4885631457116318+wwv_flow_api.g_id_offset, + p_report_id => 4886308472128052+wwv_flow_api.g_id_offset, + p_condition_type =>'FILTER', + p_allow_delete =>'Y', + p_column_name =>'STATUS', + p_operator =>'=', + p_expr =>'RUNNING', + p_condition_sql =>'"STATUS" = #APXWS_EXPR#', + p_condition_display =>'#APXWS_COL_NAME# = ''RUNNING'' ', + p_enabled =>'Y', + p_column_format =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s := null; +wwv_flow_api.create_page_plug ( + p_id=> 5024330300632423 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 2, + p_plug_name=> 'Test Runner Jobs Setup', + p_region_name=>'', + p_plug_template=> 4839912075414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 20, + p_plug_display_column=> 3, + p_plug_display_point=> 'BEFORE_BOX_BODY', + p_plug_source=> s, + p_plug_source_type=> 'STATIC_TEXT', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'QUERY_COLUMNS', + p_plug_query_num_rows => 15, + p_plug_query_num_rows_type => 'NEXT_PREVIOUS_LINKS', + p_plug_query_row_count_max => 500, + p_plug_query_show_nulls_as => ' - ', + p_plug_display_condition_type => '', + p_pagination_display_position=>'BOTTOM_RIGHT', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||'select proc.owner TEST_RUNNER_OWNER'||chr(10)|| +' ,dbl.db_link'||chr(10)|| +' ,dbl.username'||chr(10)|| +' ,dbl.host'||chr(10)|| +' ,dbl.created'||chr(10)|| +' ,case when dbl.username is null'||chr(10)|| +' then'||chr(10)|| +' ''Username missing'''||chr(10)|| +' when dbl.host is null'||chr(10)|| +' then'||chr(10)|| +' ''Host value missing'''||chr(10)|| +' when dbl.db_link || ''.'; + +s:=s||''' not like dbl.username || ''.%'''||chr(10)|| +' then'||chr(10)|| +' ''DB Link != Username'''||chr(10)|| +' else'||chr(10)|| +' ''Good Link'''||chr(10)|| +' end LINK_STATUS'||chr(10)|| +' from wt_qual_test_runners_vw proc'||chr(10)|| +' left join user_db_links dbl'||chr(10)|| +' on dbl.db_link = proc.owner'||chr(10)|| +' or dbl.username = proc.owner'||chr(10)|| +' group by proc.'; + +s:=s||'owner'||chr(10)|| +' ,dbl.db_link'||chr(10)|| +' ,dbl.username'||chr(10)|| +' ,dbl.host'||chr(10)|| +' ,dbl.created'; + +wwv_flow_api.create_report_region ( + p_id=> 5180621438298420 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 2, + p_name=> 'All Test Runner Owners', + p_region_name=>'', + p_template=> 4840201642414912+ wwv_flow_api.g_id_offset, + p_display_sequence=> 30, + p_display_column=> 1, + p_display_point=> 'BEFORE_SHOW_ITEMS', + p_source=> s, + p_source_type=> 'SQL_QUERY', + p_display_error_message=> '#SQLERRM#', + p_display_when_condition=> 'P2_SHOW_OWNERS', + p_display_when_cond2=> 'Y', + p_display_condition_type=> 'VAL_OF_ITEM_IN_COND_EQ_COND2', + p_plug_caching=> 'NOT_CACHED', + p_customized=> '0', + p_translate_title=> 'Y', + p_ajax_enabled=> 'Y', + p_query_row_template=> 4843113555414914+ wwv_flow_api.g_id_offset, + p_query_headings_type=> 'COLON_DELMITED_LIST', + p_query_num_rows=> '15', + p_query_options=> 'DERIVED_REPORT_COLUMNS', + p_query_show_nulls_as=> ' - ', + p_query_break_cols=> '0', + p_query_no_data_found=> 'no data found', + p_query_num_rows_type=> 'NEXT_PREVIOUS_LINKS', + p_pagination_display_position=> 'BOTTOM_RIGHT', + p_csv_output=> 'N', + p_query_asc_image=> 'apex/builder/dup.gif', + p_query_asc_image_attr=> 'width="16" height="16" alt="" ', + p_query_desc_image=> 'apex/builder/ddown.gif', + p_query_desc_image_attr=> 'width="16" height="16" alt="" ', + p_plug_query_strip_html=> 'Y', + p_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 5182216515391627 + wwv_flow_api.g_id_offset, + p_region_id=> 5180621438298420 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 1, + p_form_element_id=> null, + p_column_alias=> 'TEST_RUNNER_OWNER', + p_column_display_sequence=> 1, + p_column_heading=> 'Test Runner Owner', + p_column_link=>'f?p=&APP_ID.:2:&SESSION.::&DEBUG.::P0_TEST_OWNER:#TEST_RUNNER_OWNER#', + p_column_linktext=>'#TEST_RUNNER_OWNER#', + p_column_alignment=>'LEFT', + p_heading_alignment=>'CENTER', + p_default_sort_column_sequence=>1, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_lov_show_nulls=> 'NO', + p_is_required=> false, + p_pk_col_source=> s, + p_lov_display_extra=> 'YES', + p_include_in_export=> 'Y', + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 5181215424303709 + wwv_flow_api.g_id_offset, + p_region_id=> 5180621438298420 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 2, + p_form_element_id=> null, + p_column_alias=> 'DB_LINK', + p_column_display_sequence=> 2, + p_column_heading=> 'Db Link', + p_column_alignment=>'LEFT', + p_heading_alignment=>'CENTER', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 5181332039303709 + wwv_flow_api.g_id_offset, + p_region_id=> 5180621438298420 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 3, + p_form_element_id=> null, + p_column_alias=> 'USERNAME', + p_column_display_sequence=> 3, + p_column_heading=> 'Username', + p_column_alignment=>'LEFT', + p_heading_alignment=>'CENTER', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 5181428671303709 + wwv_flow_api.g_id_offset, + p_region_id=> 5180621438298420 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 4, + p_form_element_id=> null, + p_column_alias=> 'HOST', + p_column_display_sequence=> 4, + p_column_heading=> 'Host', + p_column_alignment=>'LEFT', + p_heading_alignment=>'CENTER', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 5181522703303709 + wwv_flow_api.g_id_offset, + p_region_id=> 5180621438298420 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 5, + p_form_element_id=> null, + p_column_alias=> 'CREATED', + p_column_display_sequence=> 5, + p_column_heading=> 'Created', + p_column_alignment=>'LEFT', + p_heading_alignment=>'CENTER', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 5181806987351019 + wwv_flow_api.g_id_offset, + p_region_id=> 5180621438298420 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 6, + p_form_element_id=> null, + p_column_alias=> 'LINK_STATUS', + p_column_display_sequence=> 6, + p_column_heading=> 'Link Status', + p_column_alignment=>'LEFT', + p_heading_alignment=>'CENTER', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'WITHOUT_MODIFICATION', + p_lov_show_nulls=> 'NO', + p_is_required=> false, + p_pk_col_source=> s, + p_lov_display_extra=> 'YES', + p_include_in_export=> 'Y', + p_column_comment=>''); +end; +/ + +begin + +wwv_flow_api.create_page_button( + p_id => 5173925590382378 + wwv_flow_api.g_id_offset, + p_flow_id => wwv_flow.g_flow_id, + p_flow_step_id => 2, + p_button_sequence=> 10, + p_button_plug_id => 4847515458414925+wwv_flow_api.g_id_offset, + p_button_name => 'RUN_TEST', + p_button_image => 'template:'||to_char(4838226535414911+wwv_flow_api.g_id_offset), + p_button_image_alt=> 'Run Test', + p_button_position=> 'ABOVE_BOX', + p_button_alignment=> 'LEFT', + p_button_redirect_url=> '', + p_button_execute_validations=>'Y', + p_button_condition=> 'P2_DB_LINK_HOST', + p_button_condition_type=> 'ITEM_IS_NOT_NULL', + p_required_patch => null + wwv_flow_api.g_id_offset); + +wwv_flow_api.create_page_button( + p_id => 4943012566012609 + wwv_flow_api.g_id_offset, + p_flow_id => wwv_flow.g_flow_id, + p_flow_step_id => 2, + p_button_sequence=> 20, + p_button_plug_id => 4847515458414925+wwv_flow_api.g_id_offset, + p_button_name => 'P3_TEST_ALL', + p_button_image => 'template:'||to_char(4838306817414911+wwv_flow_api.g_id_offset), + p_button_image_alt=> 'Run All Tests for This Owner', + p_button_position=> 'BOTTOM', + p_button_alignment=> 'LEFT', + p_button_redirect_url=> 'javascript:confirmDelete(''Run all Tests for Owner &P0_TEST_OWNER.'', ''TEST_ALL'')', + p_button_execute_validations=>'Y', + p_button_condition=> 'P2_DB_LINK_HOST', + p_button_condition_type=> 'ITEM_IS_NOT_NULL', + p_required_patch => null + wwv_flow_api.g_id_offset); + +wwv_flow_api.create_page_button( + p_id => 5182629852433290 + wwv_flow_api.g_id_offset, + p_flow_id => wwv_flow.g_flow_id, + p_flow_step_id => 2, + p_button_sequence=> 30, + p_button_plug_id => 5180621438298420+wwv_flow_api.g_id_offset, + p_button_name => 'P2_TEST_ALL_SEQ', + p_button_image => 'template:'||to_char(4838306817414911+wwv_flow_api.g_id_offset), + p_button_image_alt=> 'Run All Tests for All Owners Sequentially', + p_button_position=> 'BOTTOM', + p_button_alignment=> 'LEFT', + p_button_redirect_url=> 'javascript:confirmDelete(''Run all Tests for all Owners, one after another'', ''TEST_ALL_SEQ'')', + p_button_execute_validations=>'Y', + p_button_condition=> 'P2_DB_LINK_HOST', + p_required_patch => null + wwv_flow_api.g_id_offset); + +wwv_flow_api.create_page_button( + p_id => 5183117778458242 + wwv_flow_api.g_id_offset, + p_flow_id => wwv_flow.g_flow_id, + p_flow_step_id => 2, + p_button_sequence=> 40, + p_button_plug_id => 5180621438298420+wwv_flow_api.g_id_offset, + p_button_name => 'P2_TEST_ALL_PAR', + p_button_image => 'template:'||to_char(4838306817414911+wwv_flow_api.g_id_offset), + p_button_image_alt=> 'Run All Tests for All Owners in Parallel', + p_button_position=> 'BOTTOM', + p_button_alignment=> 'LEFT', + p_button_redirect_url=> 'javascript:confirmDelete(''Run all Tests for all Owners with all Owners running at the same time'', ''TEST_ALL_PAR'')', + p_button_execute_validations=>'Y', + p_button_condition=> 'P2_DB_LINK_HOST', + p_required_patch => null + wwv_flow_api.g_id_offset); + + +end; +/ + + +begin + +wwv_flow_api.create_page_branch( + p_id=>4941327317931667 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 2, + p_branch_action=> 'f?p=&APP_ID.:1:&SESSION.::&DEBUG.:::&success_msg=#SUCCESS_MSG#', + p_branch_point=> 'AFTER_PROCESSING', + p_branch_type=> 'REDIRECT_URL', + p_branch_sequence=> 10, + p_branch_condition_type=> 'REQUEST_EQUALS_CONDITION', + p_branch_condition=> 'TEST_ALL', + p_save_state_before_branch_yn=>'Y', + p_branch_comment=> 'Created 07-JUL-2018 11:52 by WTP'); + +wwv_flow_api.create_page_branch( + p_id=>4877001457701994 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 2, + p_branch_action=> 'f?p=&APP_ID.:2:&SESSION.::&DEBUG.:::&success_msg=#SUCCESS_MSG#', + p_branch_point=> 'AFTER_PROCESSING', + p_branch_type=> 'REDIRECT_URL', + p_branch_sequence=> 99, + p_save_state_before_branch_yn=>'Y', + p_branch_comment=> ''); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>4884208416023999 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 2, + p_name=>'P2_JOBS_PARAMETER', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 1, + p_item_plug_id => 5024330300632423+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_source_type=> 'STATIC', + p_display_as=> 'NATIVE_DISPLAY_ONLY', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> 30, + p_cMaxlength=> 4000, + p_cHeight=> 1, + p_cAttributes=> 'nowrap="nowrap"', + p_begin_on_new_line=> 'YES', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'RIGHT', + p_field_alignment=> 'LEFT-CENTER', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_lov_display_extra=>'YES', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => 'N', + p_attribute_02 => 'PLSQL', + p_attribute_03 => 'begin'||chr(10)|| +' htp.p(''Job Queue Process Parameter:
'');'||chr(10)|| +' htp.p(''
    '');'||chr(10)|| +' for buff in ('||chr(10)|| +' select inst_id, value'||chr(10)|| +' from sys.gv_$parameter'||chr(10)|| +' where name = ''job_queue_processes'''||chr(10)|| +' order by inst_id )'||chr(10)|| +' loop'||chr(10)|| +' -- Set these as list items'||chr(10)|| +' htp.p(''
  • '');'||chr(10)|| +' if buff.value > 0'||chr(10)|| +' then'||chr(10)|| +' htp.p(''Instance '' || buff.inst_id ||'||chr(10)|| +' '': '' || buff.value ||'||chr(10)|| +' '''');'||chr(10)|| +' else'||chr(10)|| +' htp.p(''Instance '' || buff.inst_id ||'||chr(10)|| +' '': '' || buff.value ||'||chr(10)|| +' '''');'||chr(10)|| +' end if;'||chr(10)|| +' htp.p(''
  • '');'||chr(10)|| +' end loop;'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +'end;', + p_show_quick_picks=>'N', + p_item_comment => ''); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>5026010934853871 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 2, + p_name=>'P2_RESET_DB_LINK', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 6, + p_item_plug_id => 5024330300632423+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'NO', + p_item_default=> 'RESET_DB_LINK', + p_prompt=>'Reset DB Link', + p_source=>'RESET_DB_LINK', + p_source_type=> 'STATIC', + p_display_as=> 'BUTTON', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> null, + p_cMaxlength=> 2000, + p_cHeight=> null, + p_begin_on_new_line=> 'YES', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'RIGHT', + p_field_alignment=> 'LEFT', + p_display_when=>'P0_TEST_OWNER', + p_display_when_type=>'ITEM_IS_NOT_NULL', + p_is_persistent=> 'N', + p_button_execute_validations=>'Y', + p_item_comment => ''); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>5027508136976108 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 2, + p_name=>'P2_PASSWORD', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 5, + p_item_plug_id => 5024330300632423+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_prompt=>'Password:', + p_source_type=> 'STATIC', + p_display_as=> 'NATIVE_PASSWORD', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> 15, + p_cMaxlength=> 128, + p_cHeight=> 1, + p_cAttributes=> 'nowrap="nowrap"', + p_begin_on_new_line=> 'YES', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'RIGHT', + p_field_alignment=> 'LEFT', + p_display_when=>'P0_TEST_OWNER', + p_display_when_type=>'ITEM_IS_NOT_NULL', + p_is_persistent=> 'Y', + p_lov_display_extra=>'YES', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => 'N', + p_attribute_02 => 'Y', + p_show_quick_picks=>'N', + p_item_comment => ''); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>5028532733058845 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 2, + p_name=>'P2_NEW_DB_LINK_HOST', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 4, + p_item_plug_id => 5024330300632423+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_prompt=>'New DB Link Host:', + p_source=>'''//localhost:1521/'' || SYS_CONTEXT(''USERENV'',''SERVICE_NAME'')', + p_source_type=> 'FUNCTION', + p_display_as=> 'NATIVE_TEXT_FIELD', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> 20, + p_cMaxlength=> 50, + p_cHeight=> 1, + p_cAttributes=> 'nowrap="nowrap"', + p_begin_on_new_line=> 'YES', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'RIGHT', + p_field_alignment=> 'LEFT-CENTER', + p_display_when=>'P0_TEST_OWNER', + p_display_when_type=>'ITEM_IS_NOT_NULL', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_lov_display_extra=>'YES', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => 'N', + p_attribute_02 => 'N', + p_show_quick_picks=>'N', + p_item_comment => ''); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>5029510053130586 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 2, + p_name=>'P2_DB_LINK_HOST', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 3, + p_item_plug_id => 5024330300632423+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_prompt=>'DB Link Host:', + p_pre_element_text=>'', + p_post_element_text=>'', + p_source_type=> 'STATIC', + p_display_as=> 'NATIVE_DISPLAY_ONLY', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> 30, + p_cMaxlength=> 4000, + p_cHeight=> 1, + p_cAttributes=> 'nowrap="nowrap"', + p_begin_on_new_line=> 'YES', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'RIGHT', + p_field_alignment=> 'LEFT-CENTER', + p_display_when=>'P0_TEST_OWNER', + p_display_when_type=>'ITEM_IS_NOT_NULL', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_lov_display_extra=>'YES', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => 'N', + p_attribute_02 => 'VALUE', + p_attribute_04 => 'Y', + p_show_quick_picks=>'N', + p_item_comment => 'Set by a page computation before header.'); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>5044818450655759 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 2, + p_name=>'P2_DB_LINK_NAME', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 2, + p_item_plug_id => 5024330300632423+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_prompt=>'DB Link Name:', + p_source_type=> 'STATIC', + p_display_as=> 'NATIVE_DISPLAY_ONLY', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> 30, + p_cMaxlength=> 4000, + p_cHeight=> 1, + p_cAttributes=> 'nowrap="nowrap"', + p_begin_on_new_line=> 'YES', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'RIGHT', + p_field_alignment=> 'LEFT-CENTER', + p_display_when=>'P0_TEST_OWNER', + p_display_when_type=>'ITEM_IS_NOT_NULL', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_lov_display_extra=>'YES', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => 'N', + p_attribute_02 => 'PLSQL', + p_attribute_03 => 'begin'||chr(10)|| +' htp.p(:P0_TEST_OWNER);'||chr(10)|| +'end;', + p_show_quick_picks=>'N', + p_item_comment => ''); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>5179801820226564 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 2, + p_name=>'P2_SHOW_OWNERS', + p_data_type=> 'VARCHAR', + p_is_required=> true, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 10, + p_item_plug_id => 4847515458414925+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_prompt=>'Show All Test Runner Owners:', + p_source=>'N', + p_source_type=> 'STATIC', + p_display_as=> 'NATIVE_RADIOGROUP', + p_named_lov=> 'Y_OR_N', + p_lov=> '.'||to_char(4923728354614299 + wwv_flow_api.g_id_offset)||'.', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> 30, + p_cMaxlength=> 4000, + p_cHeight=> 1, + p_cAttributes=> 'nowrap="nowrap"', + p_begin_on_new_line=> 'YES', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'RIGHT', + p_field_alignment=> 'LEFT-CENTER', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_lov_display_extra=>'YES', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => '2', + p_attribute_02 => 'SUBMIT', + p_attribute_03 => 'Y', + p_show_quick_picks=>'N', + p_item_comment => ''); + + +end; +/ + + +begin + +wwv_flow_api.create_page_computation( + p_id=> 5112015839301513 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 2, + p_computation_sequence => 10, + p_computation_item=> 'P0_DISPLAY', + p_computation_point=> 'BEFORE_HEADER', + p_computation_type=> 'STATIC_ASSIGNMENT', + p_computation_processed=> 'REPLACE_EXISTING', + p_computation=> 'Y', + p_compute_when => '', + p_compute_when_type=>''); + +null; + +end; +/ + + +begin + +wwv_flow_api.create_page_computation( + p_id=> 5174632347422111 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 2, + p_computation_sequence => 10, + p_computation_item=> 'P2_DB_LINK_HOST', + p_computation_point=> 'BEFORE_HEADER', + p_computation_type=> 'QUERY', + p_computation_processed=> 'REPLACE_EXISTING', + p_computation=> 'select host'||chr(10)|| +' from user_db_links'||chr(10)|| +' where db_link || ''.'' like :P0_TEST_OWNER || ''.%'''||chr(10)|| +'', + p_compute_when => '', + p_compute_when_type=>''); + +null; + +end; +/ + + +begin + +declare + p varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +p:=p||'DECLARE'||chr(10)|| +' run_str varchar2(2000) := ''wtplsql.test_run@'' ||'||chr(10)|| +' :P0_TEST_OWNER || ''('''''' ||'||chr(10)|| +' :P0_TEST_RUNNER || '''''')'' ;'||chr(10)|| +'BEGIN'||chr(10)|| +' DBMS_SCHEDULER.CREATE_JOB'||chr(10)|| +' (job_name => substr(:P0_TEST_OWNER || ''$'' || :P0_TEST_RUNNER, 1, 30)'||chr(10)|| +' ,job_type => ''PLSQL_BLOCK'''||chr(10)|| +' ,job_action => ''begin '' || run_str || ''; commit; end;'''||chr(10)|| +' '; + +p:=p||' ,comments => run_str'||chr(10)|| +' ,enabled => TRUE);'||chr(10)|| +' COMMIT;'||chr(10)|| +'END;'; + +wwv_flow_api.create_page_process( + p_id => 4876513059692293 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id => 2, + p_process_sequence=> 10, + p_process_point=> 'AFTER_SUBMIT', + p_process_type=> 'PLSQL', + p_process_name=> 'RUN_TEST', + p_process_sql_clob => p, + p_process_error_message=> '', + p_process_when=>'RUN_TEST', + p_process_when_type=>'REQUEST_EQUALS_CONDITION', + p_process_success_message=> '', + p_process_is_stateful_y_n=>'N', + p_process_comment=>''); +end; +null; + +end; +/ + + +begin + +declare + p varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +p:=p||'DECLARE'||chr(10)|| +' run_str varchar2(2000) := ''wtplsql.test_all@'' || :P0_TEST_OWNER;'||chr(10)|| +'BEGIN'||chr(10)|| +' DBMS_SCHEDULER.CREATE_JOB'||chr(10)|| +' (job_name => substr(:P0_TEST_OWNER || ''$TEST$ALL'', 1, 30)'||chr(10)|| +' ,job_type => ''PLSQL_BLOCK'''||chr(10)|| +' ,job_action => ''begin '' || run_str || ''; commit; end;'''||chr(10)|| +' ,comments => run_str'||chr(10)|| +' ,enabled => TRUE);'||chr(10)|| +' COMMIT;'||chr(10)|| +'END;'; + +wwv_flow_api.create_page_process( + p_id => 4941719483938905 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id => 2, + p_process_sequence=> 20, + p_process_point=> 'AFTER_SUBMIT', + p_process_type=> 'PLSQL', + p_process_name=> 'TEST_ALL', + p_process_sql_clob => p, + p_process_error_message=> 'Failed to submit job (&P2_LAST_JOB_ID.)', + p_process_when=>'TEST_ALL', + p_process_when_type=>'REQUEST_EQUALS_CONDITION', + p_process_success_message=> 'Successful submitted job &P2_LAST_JOB_ID.', + p_process_is_stateful_y_n=>'N', + p_process_comment=>''); +end; +null; + +end; +/ + + +begin + +declare + p varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +p:=p||'DECLARE'||chr(10)|| +' run_str varchar2(32000);'||chr(10)|| +'BEGIN'||chr(10)|| +' -- String all the "Test Alls" into one PL/SQL Block'||chr(10)|| +' for buff in ('||chr(10)|| +' select proc.owner TEST_OWNER'||chr(10)|| +' from wt_qual_test_runners_vw proc'||chr(10)|| +' join user_db_links dbl'||chr(10)|| +' on dbl.db_link = proc.owner'||chr(10)|| +' and dbl.db_link || ''.'' like dbl.username || ''.%'''||chr(10)|| +' and dbl.username is not n'; + +p:=p||'ull'||chr(10)|| +' and dbl.host is not null'||chr(10)|| +' group by proc.owner'||chr(10)|| +' order by proc.owner )'||chr(10)|| +' loop'||chr(10)|| +' run_str := run_str || ''wtplsql.test_all@'' || buff.TEST_OWNER || '';'' || CHR(10);'||chr(10)|| +' end loop;'||chr(10)|| +' -- Create 1 Scheduler Job'||chr(10)|| +' DBMS_SCHEDULER.CREATE_JOB'||chr(10)|| +' (job_name => ''TEST_ALL_SEQ'''||chr(10)|| +' ,job_type => ''PLSQL_BLOCK'''||chr(10)|| +' ,job_action => ''begin'' || CHR(10) || run_str '; + +p:=p||'|| ''commit;'' || CHR(10) || ''end;'''||chr(10)|| +' ,comments => ''Sequential Tests for All Owners'''||chr(10)|| +' ,enabled => TRUE);'||chr(10)|| +' COMMIT;'||chr(10)|| +'END;'; + +wwv_flow_api.create_page_process( + p_id => 5183316524467299 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id => 2, + p_process_sequence=> 40, + p_process_point=> 'AFTER_SUBMIT', + p_process_type=> 'PLSQL', + p_process_name=> 'TEST_ALL_SEQ', + p_process_sql_clob => p, + p_process_error_message=> 'Failed to submit job (&P2_LAST_JOB_ID.)', + p_process_when=>'TEST_ALL_SEQ', + p_process_when_type=>'REQUEST_EQUALS_CONDITION', + p_process_success_message=> 'Successfully submitted job &P2_LAST_JOB_ID.', + p_process_is_stateful_y_n=>'N', + p_process_comment=>''); +end; +null; + +end; +/ + + +begin + +declare + p varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +p:=p||'DECLARE'||chr(10)|| +' run_str varchar2(32000);'||chr(10)|| +'BEGIN'||chr(10)|| +' for buff in ('||chr(10)|| +' select proc.owner TEST_OWNER'||chr(10)|| +' from wt_qual_test_runners_vw proc'||chr(10)|| +' join user_db_links dbl'||chr(10)|| +' on dbl.db_link || ''.'' like proc.owner || ''.%'''||chr(10)|| +' and dbl.db_link || ''.'' like dbl.username || ''.%'''||chr(10)|| +' and dbl.username is not null'||chr(10)|| +' and dbl.host '; + +p:=p||' is not null'||chr(10)|| +' group by proc.owner )'||chr(10)|| +' loop'||chr(10)|| +' -- Create a Scheduler Job for each Test Owner'||chr(10)|| +' run_str := ''wtplsql.test_all@'' || buff.TEST_OWNER;'||chr(10)|| +' DBMS_SCHEDULER.CREATE_JOB'||chr(10)|| +' (job_name => substr(buff.TEST_OWNER || ''$PAR$TEST$ALL'', 1, 30)'||chr(10)|| +' ,job_type => ''PLSQL_BLOCK'''||chr(10)|| +' ,job_action => ''begin '' || run_str || ''; commit; end;'''||chr(10)|| +' ,comments => '; + +p:=p||' buff.TEST_OWNER || '': Parallel Tests for All Owners'''||chr(10)|| +' ,enabled => TRUE);'||chr(10)|| +' end loop;'||chr(10)|| +' COMMIT;'||chr(10)|| +'END;'; + +wwv_flow_api.create_page_process( + p_id => 5184104609728862 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id => 2, + p_process_sequence=> 50, + p_process_point=> 'AFTER_SUBMIT', + p_process_type=> 'PLSQL', + p_process_name=> 'TEST_ALL_PAR', + p_process_sql_clob => p, + p_process_error_message=> 'Failed to submit job (&P2_LAST_JOB_ID.)', + p_process_when=>'TEST_ALL_PAR', + p_process_when_type=>'REQUEST_EQUALS_CONDITION', + p_process_success_message=> 'Successful submitted job &P2_LAST_JOB_ID.', + p_process_is_stateful_y_n=>'N', + p_process_comment=>''); +end; +null; + +end; +/ + + +begin + +declare + p varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +p:=p||'begin'||chr(10)|| +' --'||chr(10)|| +' begin'||chr(10)|| +' execute immediate ''drop database link '' || :P0_TEST_OWNER;'||chr(10)|| +' exception when OTHERS then'||chr(10)|| +' if SQLERRM = ''ORA-02024: database link not found'''||chr(10)|| +' then'||chr(10)|| +' null; -- Ignore Exception'||chr(10)|| +' else'||chr(10)|| +' raise;'||chr(10)|| +' end if;'||chr(10)|| +' end;'||chr(10)|| +' --'||chr(10)|| +' execute immediate ''create database link '' || :P0_TEST_OWNER ||'||chr(10)|| +' '' connect to '' || :P0_TE'; + +p:=p||'ST_OWNER ||'||chr(10)|| +' '' identified by '' || :P2_PASSWORD ||'||chr(10)|| +' '' using '''''' || :P2_NEW_DB_LINK_HOST || '''''''';'||chr(10)|| +'end;'; + +wwv_flow_api.create_page_process( + p_id => 5027926237038111 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id => 2, + p_process_sequence=> 90, + p_process_point=> 'AFTER_SUBMIT', + p_process_type=> 'PLSQL', + p_process_name=> 'RESET_DB_LINK', + p_process_sql_clob => p, + p_process_error_message=> '#SQLERRM#', + p_process_when=>'RESET_DB_LINK', + p_process_when_type=>'REQUEST_EQUALS_CONDITION', + p_process_success_message=> '', + p_process_is_stateful_y_n=>'N', + p_process_comment=>''); +end; +null; + +end; +/ + + +begin + +--------------------------------------- +-- ...updatable report columns for page 2 +-- + +begin + +null; +end; +null; + +end; +/ + + +--application/pages/page_00003 +prompt ...PAGE 3: Test Runner +-- + +begin + +wwv_flow_api.create_page ( + p_flow_id => wwv_flow.g_flow_id + ,p_id => 3 + ,p_tab_set => 'TS1' + ,p_name => 'Test Runner' + ,p_alias => 'TESTRUNNER' + ,p_step_title => 'Test Runner' + ,p_allow_duplicate_submissions => 'Y' + ,p_step_sub_title => 'Test Runner' + ,p_step_sub_title_type => 'TEXT_WITH_SUBSTITUTIONS' + ,p_first_item => 'AUTO_FIRST_ITEM' + ,p_include_apex_css_js_yn => 'Y' + ,p_autocomplete_on_off => 'ON' + ,p_step_template => 4837525507414910 + wwv_flow_api.g_id_offset + ,p_page_is_public_y_n => 'N' + ,p_protection_level => 'N' + ,p_cache_page_yn => 'N' + ,p_cache_timeout_seconds => 21600 + ,p_cache_by_user_yn => 'N' + ,p_help_text => +'No help is available for this page.' + ,p_last_updated_by => 'WTP' + ,p_last_upd_yyyymmddhh24miss => '20180911035321' + ); +null; + +end; +/ + +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||'declare'||chr(10)|| +' cursor main is'||chr(10)|| +' select round(extract(day from (tr.end_dtm -'||chr(10)|| +' tr.start_dtm'||chr(10)|| +' )*86400*100'||chr(10)|| +' )/100,2'||chr(10)|| +' ) DURATION'||chr(10)|| +' ,tr.dbout_owner'||chr(10)|| +' ,tr.dbout_name'||chr(10)|| +' ,tr.dbout_type'||chr(10)|| +' ,tr.trigger_offset'||chr(10)|| +' ,tr.error_messag'; + +s:=s||'e'||chr(10)|| +' ,count(tc.testcase) NUM_TESTCASES'||chr(10)|| +' from wt_test_runs tr'||chr(10)|| +' left join wt_testcase_runs tc'||chr(10)|| +' on tc.test_run_id = tr.id'||chr(10)|| +' where tr.id = :P0_TEST_RUN_ID'||chr(10)|| +' group by round(extract(day from (tr.end_dtm -'||chr(10)|| +' tr.start_dtm'||chr(10)|| +' )*86400*100'||chr(10)|| +' )/100,2'||chr(10)|| +' '; + +s:=s||' )'||chr(10)|| +' ,tr.dbout_owner'||chr(10)|| +' ,tr.dbout_name'||chr(10)|| +' ,tr.dbout_type'||chr(10)|| +' ,tr.trigger_offset'||chr(10)|| +' ,tr.error_message;'||chr(10)|| +' buff main%ROWTYPE;'||chr(10)|| +' num_runs number;'||chr(10)|| +'begin'||chr(10)|| +' --'||chr(10)|| +' open main;'||chr(10)|| +' fetch main into buff;'||chr(10)|| +' close main;'||chr(10)|| +' --'||chr(10)|| +' select count(runner_name)'||chr(10)|| +' into num_runs'||chr(10)|| +' from wt_test_runs'||chr(10)|| +' where runner_owner = :P0_TEST_OWNER'||chr(10)|| +' and r'; + +s:=s||'unner_name = :P0_TEST_RUNNER;'||chr(10)|| +' --'||chr(10)|| +' htp.p('''');'||chr(10)|| +' htp.p('' Duration (secs): '' || buff.duration || ''
'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' htp.p('' Num Testcases: '' || buff.num_testcases || ''
'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' htp.p('' Num Test Runs: '' || num_runs || ''
'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' htp.p('' DBOUT Owner: '' || buff.dbout_owner || ''
'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' htp.p('' DBOUT N'; + +s:=s||'ame: '' || buff.dbout_name || ''
'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' htp.p('' DBOUT Type: '' || buff.dbout_type || ''
'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' htp.p('' Trigger Offset: '' || buff.trigger_offset || ''
'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' --'||chr(10)|| +'end;'; + +wwv_flow_api.create_page_plug ( + p_id=> 4848108018414926 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_plug_name=> 'Summary', + p_region_name=>'', + p_plug_template=> 4839912075414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 2, + p_plug_display_column=> 2, + p_plug_display_point=> 'BEFORE_BOX_BODY', + p_plug_source=> s, + p_plug_source_type=> 'PLSQL_PROCEDURE', + p_translate_title=> 'Y', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_column_width => 'td width="320"', + p_plug_display_condition_type => '', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#CHART_REFRESH#'; + +wwv_flow_api.create_page_plug ( + p_id=> 4927702379997301 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_plug_name=> 'Test Runner Status', + p_region_name=>'', + p_plug_template=> 4839217975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 1, + p_plug_display_column=> 1, + p_plug_display_point=> 'BEFORE_BOX_BODY', + p_plug_source=> s, + p_plug_source_type=> 'FLASH_CHART5', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => '', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1 := null; +wwv_flow_api.create_flash_chart5( + p_id => 4927915384997301+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id => 3, + p_region_id => 4927702379997301+wwv_flow_api.g_id_offset, + p_default_chart_type =>'2DPie', + p_chart_title =>'', + p_chart_name =>'chart_4927915384997301', + p_chart_width =>300, + p_chart_height =>200, + p_chart_animation =>'N', + p_display_attr =>':H:::::Left::V:Y:None:::N:::Default', + p_dial_tick_attr =>':::::::::::', + p_gantt_attr =>'Y:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:30:15:5:Y:I:N:S:E', + p_map_attr =>'Orthographic:RegionBounds:REGION_NAME', + p_map_source =>'%', + p_margins =>':::', + p_omit_label_interval => null, + p_bgtype =>'Trans', + p_bgcolor1 =>'', + p_bgcolor2 =>'', + p_gradient_rotation =>null, + p_grid_bgtype =>'', + p_grid_bgcolor1 =>'', + p_grid_bgcolor2 =>'', + p_grid_gradient_rotation =>null, + p_color_scheme =>'0', + p_custom_colors =>'#99FF99,#FFFF99,#FF6699', + p_map_undef_color_scheme =>'', + p_map_undef_custom_colors =>'', + p_x_axis_title =>'', + p_x_axis_min =>null, + p_x_axis_max =>null, + p_x_axis_decimal_place =>null, + p_x_axis_prefix =>'', + p_x_axis_postfix =>'', + p_x_axis_label_rotation =>'', + p_x_axis_label_font =>'::', + p_x_axis_major_interval =>null, + p_x_axis_minor_interval =>null, + p_y_axis_title =>'', + p_y_axis_min =>null, + p_y_axis_max =>null, + p_y_axis_decimal_place =>null, + p_y_axis_prefix =>'', + p_y_axis_postfix =>'', + p_y_axis_label_rotation =>'', + p_y_axis_label_font =>'::', + p_y_axis_major_interval =>null, + p_y_axis_minor_interval =>null, + p_async_update =>'N', + p_async_time =>null, + p_legend_title =>'', + p_legend_title_font =>'', + p_names_font => null, + p_names_rotation => null, + p_values_font =>'Arial:10:#000000', + p_values_rotation =>null, + p_values_prefix =>'', + p_values_postfix =>'', + p_hints_font =>'Tahoma:10:#000000', + p_legend_font =>'Arial:10:#000000', + p_grid_labels_font =>'', + p_chart_title_font =>'Tahoma:14:#000000', + p_x_axis_title_font =>'Tahoma:14:', + p_x_axis_title_rotation =>'', + p_y_axis_title_font =>'Tahoma:14:', + p_y_axis_title_rotation =>'', + p_gauge_labels_font =>'Tahoma:10:', + p_use_chart_xml =>'N', + p_chart_xml => a1); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'with q1 as ('||chr(10)|| +'select NULL LINK'||chr(10)|| +' ,''PASS'' LABEL'||chr(10)|| +' ,sum(res.passes) VALUE'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_test_run_stats res'||chr(10)|| +' on res.test_run_id = run.id'||chr(10)|| +' where id = :P0_TEST_RUN_ID'||chr(10)|| +'union all'||chr(10)|| +'select NULL LINK'||chr(10)|| +' ,''FAIL'' LABEL'||chr(10)|| +' ,sum(res.failures) VALUE'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_test_run_stats res'||chr(10)|| +' '; + +a1:=a1||' on res.test_run_id = run.id'||chr(10)|| +' where id = :P0_TEST_RUN_ID'||chr(10)|| +'union all'||chr(10)|| +'select NULL LINK'||chr(10)|| +' ,''ERR'' LABEL'||chr(10)|| +' ,sum(res.errors) VALUE'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_test_run_stats res'||chr(10)|| +' on res.test_run_id = run.id'||chr(10)|| +' where id = :P0_TEST_RUN_ID'||chr(10)|| +')'||chr(10)|| +'select link, label, value'||chr(10)|| +' from q1'||chr(10)|| +' order by label desc'; + +wwv_flow_api.create_flash_chart5_series( + p_id => 4928017042997302+wwv_flow_api.g_id_offset, + p_chart_id => 4927915384997301+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_series_seq =>10, + p_series_name =>'Series 1', + p_series_query => a1, + p_series_type =>'', + p_series_query_type =>'SQL_QUERY', + p_series_query_parse_opt =>'PARSE_CHART_QUERY', + p_series_query_no_data_found=>'No data found.', + p_series_query_row_count_max=>15, + p_action_link =>'', + p_show_action_link =>'N', + p_action_link_checksum_type =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#CHART_REFRESH#'; + +wwv_flow_api.create_page_plug ( + p_id=> 4930902107252669 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_plug_name=> 'DBOUT Profile Status', + p_region_name=>'', + p_plug_template=> 4839217975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 3, + p_plug_display_column=> 3, + p_plug_display_point=> 'BEFORE_BOX_BODY', + p_plug_source=> s, + p_plug_source_type=> 'FLASH_CHART5', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => '', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1 := null; +wwv_flow_api.create_flash_chart5( + p_id => 4931121643252671+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id => 3, + p_region_id => 4930902107252669+wwv_flow_api.g_id_offset, + p_default_chart_type =>'2DPie', + p_chart_title =>'', + p_chart_name =>'chart_4927915384997301', + p_chart_width =>300, + p_chart_height =>200, + p_chart_animation =>'N', + p_display_attr =>':H:::::Left::V:Y:None:::N:::Default', + p_dial_tick_attr =>':::::::::::', + p_gantt_attr =>'Y:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:30:15:5:Y:I:N:S:E', + p_map_attr =>'Orthographic:RegionBounds:REGION_NAME', + p_map_source =>'%', + p_margins =>':::', + p_omit_label_interval => null, + p_bgtype =>'Trans', + p_bgcolor1 =>'', + p_bgcolor2 =>'', + p_gradient_rotation =>null, + p_grid_bgtype =>'', + p_grid_bgcolor1 =>'', + p_grid_bgcolor2 =>'', + p_grid_gradient_rotation =>null, + p_color_scheme =>'0', + p_custom_colors =>'#0099FF,#99FF99,#FF6699,#FFFF99', + p_map_undef_color_scheme =>'', + p_map_undef_custom_colors =>'', + p_x_axis_title =>'', + p_x_axis_min =>null, + p_x_axis_max =>null, + p_x_axis_decimal_place =>null, + p_x_axis_prefix =>'', + p_x_axis_postfix =>'', + p_x_axis_label_rotation =>'', + p_x_axis_label_font =>'::', + p_x_axis_major_interval =>null, + p_x_axis_minor_interval =>null, + p_y_axis_title =>'', + p_y_axis_min =>null, + p_y_axis_max =>null, + p_y_axis_decimal_place =>null, + p_y_axis_prefix =>'', + p_y_axis_postfix =>'', + p_y_axis_label_rotation =>'', + p_y_axis_label_font =>'::', + p_y_axis_major_interval =>null, + p_y_axis_minor_interval =>null, + p_async_update =>'N', + p_async_time =>null, + p_legend_title =>'', + p_legend_title_font =>'', + p_names_font => null, + p_names_rotation => null, + p_values_font =>'Arial:10:#000000', + p_values_rotation =>null, + p_values_prefix =>'', + p_values_postfix =>'', + p_hints_font =>'Tahoma:10:#000000', + p_legend_font =>'Arial:10:#000000', + p_grid_labels_font =>'', + p_chart_title_font =>'Tahoma:14:#000000', + p_x_axis_title_font =>'Tahoma:14:', + p_x_axis_title_rotation =>'', + p_y_axis_title_font =>'Tahoma:14:', + p_y_axis_title_rotation =>'', + p_gauge_labels_font =>'Tahoma:10:', + p_use_chart_xml =>'N', + p_chart_xml => a1); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'with q1 as ('||chr(10)|| +'select NULL LINK'||chr(10)|| +' ,''EXCL'' LABEL'||chr(10)|| +' ,sum(excluded_lines) VALUE'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_test_run_stats res'||chr(10)|| +' on res.test_run_id = run.id'||chr(10)|| +' where id = :P0_TEST_RUN_ID'||chr(10)|| +'union all'||chr(10)|| +'select NULL LINK'||chr(10)|| +' ,''EXEC'' LABEL'||chr(10)|| +' ,sum(executed_lines) VALUE'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_test_r'; + +a1:=a1||'un_stats res'||chr(10)|| +' on res.test_run_id = run.id'||chr(10)|| +' where id = :P0_TEST_RUN_ID'||chr(10)|| +'union all'||chr(10)|| +'select NULL LINK'||chr(10)|| +' ,''NOTX'' LABEL'||chr(10)|| +' ,sum(notexec_lines) VALUE'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_test_run_stats res'||chr(10)|| +' on res.test_run_id = run.id'||chr(10)|| +' where id = :P0_TEST_RUN_ID'||chr(10)|| +'union all'||chr(10)|| +'select NULL LINK'||chr(10)|| +' ,''UNKN'' LABEL'||chr(10)|| +' '; + +a1:=a1||' ,sum(unknown_lines) VALUE'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_test_run_stats res'||chr(10)|| +' on res.test_run_id = run.id'||chr(10)|| +' where id = :P0_TEST_RUN_ID'||chr(10)|| +')'||chr(10)|| +'select link, label, value'||chr(10)|| +' from q1'||chr(10)|| +' order by label'; + +wwv_flow_api.create_flash_chart5_series( + p_id => 4931210998252672+wwv_flow_api.g_id_offset, + p_chart_id => 4931121643252671+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_series_seq =>10, + p_series_name =>'Series 1', + p_series_query => a1, + p_series_type =>'', + p_series_query_type =>'SQL_QUERY', + p_series_query_parse_opt =>'PARSE_CHART_QUERY', + p_series_query_no_data_found=>'No data found.', + p_series_query_row_count_max=>15, + p_action_link =>'', + p_show_action_link =>'N', + p_action_link_checksum_type =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#CHART_REFRESH#'; + +wwv_flow_api.create_page_plug ( + p_id=> 4932622090476124 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_plug_name=> 'Test Runner Status Trend', + p_region_name=>'', + p_plug_template=> 4839217975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 1, + p_plug_display_column=> 1, + p_plug_display_point=> 'BEFORE_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'FLASH_CHART5', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => 'PLSQL_EXPRESSION', + p_plug_display_when_condition => ':P3_SHOW_TREND=''Y''', + p_plug_display_when_cond2=>'Y', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1 := null; +wwv_flow_api.create_flash_chart5( + p_id => 4932831378476124+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id => 3, + p_region_id => 4932622090476124+wwv_flow_api.g_id_offset, + p_default_chart_type =>'Stacked2DColumn', + p_chart_title =>'', + p_chart_name =>'chart_4932831378476124', + p_chart_width =>300, + p_chart_height =>200, + p_chart_animation =>'N', + p_display_attr =>':H:N::Y:N:Left::V:Y:Circle:::N:::Default', + p_dial_tick_attr =>':::::::::::', + p_gantt_attr =>'Y:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:30:15:5:Y:I:N:S:E', + p_map_attr =>'Orthographic:RegionBounds:REGION_NAME', + p_map_source =>'%', + p_margins =>':::', + p_omit_label_interval => null, + p_bgtype =>'Trans', + p_bgcolor1 =>'', + p_bgcolor2 =>'', + p_gradient_rotation =>null, + p_grid_bgtype =>'', + p_grid_bgcolor1 =>'', + p_grid_bgcolor2 =>'', + p_grid_gradient_rotation =>null, + p_color_scheme =>'0', + p_custom_colors =>'#99FF99,#FFFF99,#FF6699', + p_map_undef_color_scheme =>'', + p_map_undef_custom_colors =>'', + p_x_axis_title =>'', + p_x_axis_min =>null, + p_x_axis_max =>null, + p_x_axis_decimal_place =>null, + p_x_axis_prefix =>'', + p_x_axis_postfix =>'', + p_x_axis_label_rotation =>'', + p_x_axis_label_font =>'Tahoma:10:#000000', + p_x_axis_major_interval =>null, + p_x_axis_minor_interval =>null, + p_y_axis_title =>'', + p_y_axis_min =>null, + p_y_axis_max =>null, + p_y_axis_decimal_place =>null, + p_y_axis_prefix =>'', + p_y_axis_postfix =>'', + p_y_axis_label_rotation =>'', + p_y_axis_label_font =>'Tahoma:10:#000000', + p_y_axis_major_interval =>null, + p_y_axis_minor_interval =>null, + p_async_update =>'N', + p_async_time =>null, + p_legend_title =>'', + p_legend_title_font =>'', + p_names_font => null, + p_names_rotation => null, + p_values_font =>'Arial:10:#000000', + p_values_rotation =>null, + p_values_prefix =>'', + p_values_postfix =>'', + p_hints_font =>'Tahoma:10:#000000', + p_legend_font =>'Arial:10:#000000', + p_grid_labels_font =>'', + p_chart_title_font =>'Tahoma:14:#000000', + p_x_axis_title_font =>'Tahoma:14:#000000', + p_x_axis_title_rotation =>'', + p_y_axis_title_font =>'Tahoma:14:#000000', + p_y_axis_title_rotation =>'', + p_gauge_labels_font =>'Tahoma:10:', + p_use_chart_xml =>'N', + p_chart_xml => a1); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'with q1 as ('||chr(10)|| +'select res.test_run_id LINK'||chr(10)|| +' ,''ID'' || run.id LABEL'||chr(10)|| +' ,res.passes PASS'||chr(10)|| +' ,res.failures FAIL'||chr(10)|| +' ,res.errors ERROR'||chr(10)|| +' ,rownum RNUM'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_test_run_stats res'||chr(10)|| +' on res.test_run_id = run.id'||chr(10)|| +' where run.runner_owner = :P0_TEST_OWNER'||chr(10)|| +' and run.runner_name = :P0_TEST_RUNNER'||chr(10)|| +' order by run.id'||chr(10)|| +'), q'; + +a1:=a1||'2 as ('||chr(10)|| +'select count(*) num_rows from q1'||chr(10)|| +')'||chr(10)|| +'select link, label, pass, fail, error'||chr(10)|| +' from q1'||chr(10)|| +' where rnum > (select num_rows from q2) - 10'; + +wwv_flow_api.create_flash_chart5_series( + p_id => 4932905763476124+wwv_flow_api.g_id_offset, + p_chart_id => 4932831378476124+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_series_seq =>10, + p_series_name =>'Main', + p_series_query => a1, + p_series_type =>'Bar', + p_series_query_type =>'SQL_QUERY', + p_series_query_parse_opt =>'PARSE_CHART_QUERY', + p_series_query_no_data_found=>'No data found.', + p_series_query_row_count_max=>15, + p_action_link =>'f?p=&APP_ID.:3:&SESSION.::&DEBUG.::P0_TEST_RUN_ID:#LINK#', + p_show_action_link =>'C', + p_action_link_checksum_type =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#CHART_REFRESH#'; + +wwv_flow_api.create_page_plug ( + p_id=> 4934122379722218 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_plug_name=> 'DBOUT Profile Status Trend', + p_region_name=>'', + p_plug_template=> 4839217975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 3, + p_plug_display_column=> 3, + p_plug_display_point=> 'BEFORE_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'FLASH_CHART5', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => 'PLSQL_EXPRESSION', + p_plug_display_when_condition => ':P3_SHOW_TREND=''Y''', + p_plug_display_when_cond2=>'Y', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1 := null; +wwv_flow_api.create_flash_chart5( + p_id => 4934324926722219+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id => 3, + p_region_id => 4934122379722218+wwv_flow_api.g_id_offset, + p_default_chart_type =>'Stacked2DColumn', + p_chart_title =>'', + p_chart_name =>'chart_4932831378476124', + p_chart_width =>300, + p_chart_height =>200, + p_chart_animation =>'N', + p_display_attr =>':H:N::Y:N:Left::V:Y:Circle:::N:::Default', + p_dial_tick_attr =>':::::::::::', + p_gantt_attr =>'Y:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:30:15:5:Y:I:N:S:E', + p_map_attr =>'Orthographic:RegionBounds:REGION_NAME', + p_map_source =>'%', + p_margins =>':::', + p_omit_label_interval => null, + p_bgtype =>'Trans', + p_bgcolor1 =>'', + p_bgcolor2 =>'', + p_gradient_rotation =>null, + p_grid_bgtype =>'', + p_grid_bgcolor1 =>'', + p_grid_bgcolor2 =>'', + p_grid_gradient_rotation =>null, + p_color_scheme =>'0', + p_custom_colors =>'#99FF99,#0099FF,#FFFF99,#FF6699', + p_map_undef_color_scheme =>'', + p_map_undef_custom_colors =>'', + p_x_axis_title =>'', + p_x_axis_min =>null, + p_x_axis_max =>null, + p_x_axis_decimal_place =>null, + p_x_axis_prefix =>'', + p_x_axis_postfix =>'', + p_x_axis_label_rotation =>'', + p_x_axis_label_font =>'Tahoma:10:#000000', + p_x_axis_major_interval =>null, + p_x_axis_minor_interval =>null, + p_y_axis_title =>'', + p_y_axis_min =>null, + p_y_axis_max =>null, + p_y_axis_decimal_place =>null, + p_y_axis_prefix =>'', + p_y_axis_postfix =>'', + p_y_axis_label_rotation =>'', + p_y_axis_label_font =>'Tahoma:10:#000000', + p_y_axis_major_interval =>null, + p_y_axis_minor_interval =>null, + p_async_update =>'N', + p_async_time =>null, + p_legend_title =>'', + p_legend_title_font =>'', + p_names_font => null, + p_names_rotation => null, + p_values_font =>'Arial:10:#000000', + p_values_rotation =>null, + p_values_prefix =>'', + p_values_postfix =>'', + p_hints_font =>'Tahoma:10:#000000', + p_legend_font =>'Arial:10:#000000', + p_grid_labels_font =>'', + p_chart_title_font =>'Tahoma:14:#000000', + p_x_axis_title_font =>'Tahoma:14:#000000', + p_x_axis_title_rotation =>'', + p_y_axis_title_font =>'Tahoma:14:#000000', + p_y_axis_title_rotation =>'', + p_gauge_labels_font =>'Tahoma:10:', + p_use_chart_xml =>'N', + p_chart_xml => a1); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'with q1 as ('||chr(10)|| +'select res.test_run_id LINK'||chr(10)|| +' ,''ID'' || run.id LABEL'||chr(10)|| +' ,res.executed_lines EXEC'||chr(10)|| +' ,res.excluded_lines EXCL'||chr(10)|| +' ,res.unknown_lines UNKN'||chr(10)|| +' ,res.notexec_lines NOTX'||chr(10)|| +' ,rownum RNUM'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_test_run_stats res'||chr(10)|| +' on res.test_run_id = run.id'||chr(10)|| +' where run.runner_owner = :P0_TEST_OWNER'||chr(10)|| +' and run.runner_na'; + +a1:=a1||'me = :P0_TEST_RUNNER'||chr(10)|| +' order by run.id'||chr(10)|| +'), q2 as ('||chr(10)|| +'select count(*) num_rows from q1'||chr(10)|| +')'||chr(10)|| +'select link'||chr(10)|| +' ,label'||chr(10)|| +' ,exec'||chr(10)|| +' ,excl'||chr(10)|| +' ,unkn'||chr(10)|| +' ,notx'||chr(10)|| +' from q1'||chr(10)|| +' where rnum > (select num_rows from q2) - 10'; + +wwv_flow_api.create_flash_chart5_series( + p_id => 4934601765722219+wwv_flow_api.g_id_offset, + p_chart_id => 4934324926722219+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_series_seq =>10, + p_series_name =>'Series 1', + p_series_query => a1, + p_series_type =>'Bar', + p_series_query_type =>'SQL_QUERY', + p_series_query_parse_opt =>'PARSE_CHART_QUERY', + p_series_query_no_data_found=>'No data found.', + p_series_query_row_count_max=>15, + p_action_link =>'f?p=&APP_ID.:3:&SESSION.::&DEBUG.::P0_TEST_RUN_ID:#LINK#', + p_show_action_link =>'C', + p_action_link_checksum_type =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#CHART_REFRESH#'; + +wwv_flow_api.create_page_plug ( + p_id=> 4935906636831213 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_plug_name=> 'Top Test Case Failures', + p_region_name=>'', + p_plug_template=> 4839217975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 2, + p_plug_display_column=> 2, + p_plug_display_point=> 'BEFORE_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'FLASH_CHART5', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => 'PLSQL_EXPRESSION', + p_plug_display_when_condition => ':P3_SHOW_TREND=''Y''', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1 := null; +wwv_flow_api.create_flash_chart5( + p_id => 4936119233831213+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id => 3, + p_region_id => 4935906636831213+wwv_flow_api.g_id_offset, + p_default_chart_type =>'2DColumn', + p_chart_title =>'', + p_chart_name =>'chart_4857903544336332', + p_chart_width =>300, + p_chart_height =>200, + p_chart_animation =>'N', + p_display_attr =>':H:::Y:N:N::V:Y:None:::N:::Default', + p_dial_tick_attr =>':::::::::::', + p_gantt_attr =>'Y:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:30:15:5:Y:I:N:S:E', + p_map_attr =>'Orthographic:RegionBounds:REGION_NAME', + p_map_source =>'%', + p_margins =>':::', + p_omit_label_interval => null, + p_bgtype =>'Trans', + p_bgcolor1 =>'', + p_bgcolor2 =>'', + p_gradient_rotation =>null, + p_grid_bgtype =>'', + p_grid_bgcolor1 =>'', + p_grid_bgcolor2 =>'', + p_grid_gradient_rotation =>null, + p_color_scheme =>'0', + p_custom_colors =>'#FFFF00', + p_map_undef_color_scheme =>'', + p_map_undef_custom_colors =>'', + p_x_axis_title =>'', + p_x_axis_min =>null, + p_x_axis_max =>null, + p_x_axis_decimal_place =>null, + p_x_axis_prefix =>'', + p_x_axis_postfix =>'', + p_x_axis_label_rotation =>'', + p_x_axis_label_font =>'Tahoma:10:#000000', + p_x_axis_major_interval =>null, + p_x_axis_minor_interval =>null, + p_y_axis_title =>'Failures', + p_y_axis_min =>null, + p_y_axis_max =>null, + p_y_axis_decimal_place =>null, + p_y_axis_prefix =>'', + p_y_axis_postfix =>'', + p_y_axis_label_rotation =>'', + p_y_axis_label_font =>'Tahoma:10:#000000', + p_y_axis_major_interval =>null, + p_y_axis_minor_interval =>null, + p_async_update =>'N', + p_async_time =>null, + p_legend_title =>'', + p_legend_title_font =>'', + p_names_font => null, + p_names_rotation => null, + p_values_font =>'Arial:10:#000000', + p_values_rotation =>null, + p_values_prefix =>'', + p_values_postfix =>'', + p_hints_font =>'Tahoma:10:#000000', + p_legend_font =>'Arial:10:#000000', + p_grid_labels_font =>'', + p_chart_title_font =>'Tahoma:14:#000000', + p_x_axis_title_font =>'Tahoma:14:#000000', + p_x_axis_title_rotation =>'', + p_y_axis_title_font =>'Tahoma:14:#000000', + p_y_axis_title_rotation =>'', + p_gauge_labels_font =>'Tahoma:10:', + p_use_chart_xml =>'N', + p_chart_xml => a1); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'select ''f?p='' || :APP_ID ||'||chr(10)|| +' '':'' || ''6'' || -- Page'||chr(10)|| +' '':'' || :APP_SESSION ||'||chr(10)|| +' '':'' || :REQUEST ||'||chr(10)|| +' '':'' || :DEBUG ||'||chr(10)|| +' '':'' || ''N'' || -- CLear Cache'||chr(10)|| +' '':'' || ''P0_TEST_RUN_ID'' || '','' ||'||chr(10)|| +' ''P0_TEST_CASE'' || -- Item Names'||chr(10)|| +' '; + +a1:=a1||' '':'' || tc.test_run_id || '','' ||'||chr(10)|| +' tc.testcase || -- Item Values'||chr(10)|| +' '':'' || V(''PRINTER_FRIENDLY'') LINK'||chr(10)|| +' ,run.runner_owner || ''.'' ||'||chr(10)|| +' run.runner_name || '':'' ||'||chr(10)|| +' tc.testcase LABEL'||chr(10)|| +' ,tc.failures VALUE'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_testcase_runs tc'||chr(10)|| +' on tc.test_run_'; + +a1:=a1||'id = run.id'||chr(10)|| +' where run.id = :P0_TEST_RUN_ID'||chr(10)|| +' and tc.failures > 0'||chr(10)|| +' order by failures desc, tc.testcase'||chr(10)|| +''; + +wwv_flow_api.create_flash_chart5_series( + p_id => 4936205597831214+wwv_flow_api.g_id_offset, + p_chart_id => 4936119233831213+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_series_seq =>10, + p_series_name =>'Series 1', + p_series_query => a1, + p_series_type =>'Bar', + p_series_query_type =>'SQL_QUERY', + p_series_query_parse_opt =>'PARSE_CHART_QUERY', + p_series_query_no_data_found=>'No data found.', + p_series_query_row_count_max=>10, + p_action_link =>'', + p_show_action_link =>'N', + p_action_link_checksum_type =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#CHART_REFRESH#'; + +wwv_flow_api.create_page_plug ( + p_id=> 4946418865544258 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_plug_name=> 'Test Runner Duration Trend', + p_region_name=>'', + p_plug_template=> 4839217975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 4, + p_plug_display_column=> 1, + p_plug_display_point=> 'BEFORE_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'FLASH_CHART5', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => 'PLSQL_EXPRESSION', + p_plug_display_when_condition => ':P3_SHOW_TREND=''Y''', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1 := null; +wwv_flow_api.create_flash_chart5( + p_id => 4946607806544261+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id => 3, + p_region_id => 4946418865544258+wwv_flow_api.g_id_offset, + p_default_chart_type =>'2DColumn', + p_chart_title =>'', + p_chart_name =>'chart_4946607806544261', + p_chart_width =>300, + p_chart_height =>200, + p_chart_animation =>'N', + p_display_attr =>':H:N::Y:N:N::V:Y:None:::N:::Default', + p_dial_tick_attr =>':::::::::::', + p_gantt_attr =>'Y:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:30:15:5:Y:I:N:S:E', + p_map_attr =>'Orthographic:RegionBounds:REGION_NAME', + p_map_source =>'', + p_margins =>':::', + p_omit_label_interval => null, + p_bgtype =>'Trans', + p_bgcolor1 =>'', + p_bgcolor2 =>'', + p_gradient_rotation =>null, + p_grid_bgtype =>'', + p_grid_bgcolor1 =>'', + p_grid_bgcolor2 =>'', + p_grid_gradient_rotation =>null, + p_color_scheme =>'6', + p_custom_colors =>'', + p_map_undef_color_scheme =>'', + p_map_undef_custom_colors =>'', + p_x_axis_title =>'', + p_x_axis_min =>null, + p_x_axis_max =>null, + p_x_axis_decimal_place =>2, + p_x_axis_prefix =>'', + p_x_axis_postfix =>'', + p_x_axis_label_rotation =>'', + p_x_axis_label_font =>'Tahoma:10:#000000', + p_x_axis_major_interval =>null, + p_x_axis_minor_interval =>null, + p_y_axis_title =>'Seconds', + p_y_axis_min =>null, + p_y_axis_max =>null, + p_y_axis_decimal_place =>2, + p_y_axis_prefix =>'', + p_y_axis_postfix =>'', + p_y_axis_label_rotation =>'', + p_y_axis_label_font =>'Tahoma:10:#000000', + p_y_axis_major_interval =>null, + p_y_axis_minor_interval =>null, + p_async_update =>'N', + p_async_time =>null, + p_legend_title =>'', + p_legend_title_font =>'', + p_names_font => null, + p_names_rotation => null, + p_values_font =>'Arial:10:#000000', + p_values_rotation =>null, + p_values_prefix =>'', + p_values_postfix =>'', + p_hints_font =>'Tahoma:10:#000000', + p_legend_font =>'Arial:10:#000000', + p_grid_labels_font =>'', + p_chart_title_font =>'Tahoma:14:#000000', + p_x_axis_title_font =>'Tahoma:14:#000000', + p_x_axis_title_rotation =>'', + p_y_axis_title_font =>'Tahoma:14:#000000', + p_y_axis_title_rotation =>'', + p_gauge_labels_font =>'Tahoma:10:', + p_use_chart_xml =>'N', + p_chart_xml => a1); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'with q1 as ('||chr(10)|| +'select res.test_run_id LINK'||chr(10)|| +' ,''ID'' || run.id LABEL'||chr(10)|| +' ,extract(day from (run.end_dtm - run.start_dtm)*86400*100)/100'||chr(10)|| +' SECONDS'||chr(10)|| +' ,rownum RNUM'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_test_run_stats res'||chr(10)|| +' on res.test_run_id = run.id'||chr(10)|| +' where run.runner_owner = :P0_TEST_OWNER'||chr(10)|| +' and run.runner_name = :P0_TEST_RUNNER'||chr(10)|| +' order by '; + +a1:=a1||'id'||chr(10)|| +'), q2 as ('||chr(10)|| +'select count(*) num_rows from q1'||chr(10)|| +')'||chr(10)|| +'select link'||chr(10)|| +' ,label'||chr(10)|| +' ,seconds'||chr(10)|| +' from q1'||chr(10)|| +' where rnum > (select num_rows from q2) - 10'; + +wwv_flow_api.create_flash_chart5_series( + p_id => 4946720535544262+wwv_flow_api.g_id_offset, + p_chart_id => 4946607806544261+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_series_seq =>10, + p_series_name =>'Series 1', + p_series_query => a1, + p_series_type =>'Bar', + p_series_query_type =>'SQL_QUERY', + p_series_query_parse_opt =>'PARSE_CHART_QUERY', + p_series_query_no_data_found=>'No data found.', + p_series_query_row_count_max=>15, + p_action_link =>'f?p=&APP_ID.:3:&SESSION.::&DEBUG.::P0_TEST_RUN_ID:#LINK#', + p_show_action_link =>'C', + p_action_link_checksum_type =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#CHART_REFRESH#'; + +wwv_flow_api.create_page_plug ( + p_id=> 4948217713035992 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_plug_name=> 'LineExec Long Duration Trend', + p_region_name=>'', + p_plug_template=> 4839217975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 6, + p_plug_display_column=> 3, + p_plug_display_point=> 'BEFORE_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'FLASH_CHART5', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => 'PLSQL_EXPRESSION', + p_plug_display_when_condition => ':P3_SHOW_TREND=''Y''', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1 := null; +wwv_flow_api.create_flash_chart5( + p_id => 4948428749035997+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id => 3, + p_region_id => 4948217713035992+wwv_flow_api.g_id_offset, + p_default_chart_type =>'2DColumn', + p_chart_title =>'', + p_chart_name =>'chart_4948428749035997', + p_chart_width =>300, + p_chart_height =>200, + p_chart_animation =>'N', + p_display_attr =>':H:N::Y:N:N::V:Y:None:::N:::Default', + p_dial_tick_attr =>':::::::::::', + p_gantt_attr =>'Y:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:30:15:5:Y:I:N:S:E', + p_map_attr =>'Orthographic:RegionBounds:REGION_NAME', + p_map_source =>'%', + p_margins =>':::', + p_omit_label_interval => null, + p_bgtype =>'Trans', + p_bgcolor1 =>'', + p_bgcolor2 =>'', + p_gradient_rotation =>null, + p_grid_bgtype =>'', + p_grid_bgcolor1 =>'', + p_grid_bgcolor2 =>'', + p_grid_gradient_rotation =>null, + p_color_scheme =>'6', + p_custom_colors =>'', + p_map_undef_color_scheme =>'', + p_map_undef_custom_colors =>'', + p_x_axis_title =>'', + p_x_axis_min =>null, + p_x_axis_max =>null, + p_x_axis_decimal_place =>null, + p_x_axis_prefix =>'', + p_x_axis_postfix =>'', + p_x_axis_label_rotation =>'', + p_x_axis_label_font =>'Tahoma:10:#000000', + p_x_axis_major_interval =>null, + p_x_axis_minor_interval =>null, + p_y_axis_title =>'MicroSeconds', + p_y_axis_min =>0, + p_y_axis_max =>null, + p_y_axis_decimal_place =>null, + p_y_axis_prefix =>'', + p_y_axis_postfix =>'', + p_y_axis_label_rotation =>'', + p_y_axis_label_font =>'Tahoma:10:#000000', + p_y_axis_major_interval =>null, + p_y_axis_minor_interval =>null, + p_async_update =>'N', + p_async_time =>null, + p_legend_title =>'', + p_legend_title_font =>'', + p_names_font => null, + p_names_rotation => null, + p_values_font =>'Arial:10:#000000', + p_values_rotation =>null, + p_values_prefix =>'', + p_values_postfix =>'', + p_hints_font =>'Tahoma:10:#000000', + p_legend_font =>'Arial:10:#000000', + p_grid_labels_font =>'', + p_chart_title_font =>'Tahoma:14:#000000', + p_x_axis_title_font =>'Tahoma:14:#000000', + p_x_axis_title_rotation =>'', + p_y_axis_title_font =>'Tahoma:14:#000000', + p_y_axis_title_rotation =>'', + p_gauge_labels_font =>'Tahoma:10:', + p_use_chart_xml =>'N', + p_chart_xml => a1); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'with q1 as ('||chr(10)|| +'select res.test_run_id'||chr(10)|| +' ,res.max_executed_usec'||chr(10)|| +' ,rownum RNUM'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_test_run_stats res'||chr(10)|| +' on res.test_run_id = run.id'||chr(10)|| +' left join wt_dbout_profiles prof'||chr(10)|| +' on prof.test_run_id = run.id'||chr(10)|| +' and prof.max_usec = res.max_executed_usec'||chr(10)|| +' where run.runner_owner = :P0_TEST_OWNER'||chr(10)|| +' and run.runner_na'; + +a1:=a1||'me = :P0_TEST_RUNNER'||chr(10)|| +' order by id'||chr(10)|| +'), q2 as ('||chr(10)|| +'select count(*) num_rows from q1'||chr(10)|| +'), q3 as ('||chr(10)|| +'select test_run_id'||chr(10)|| +' ,max_usec'||chr(10)|| +' ,min(line) line'||chr(10)|| +' from wt_dbout_profiles'||chr(10)|| +' group by test_run_id'||chr(10)|| +' ,max_usec'||chr(10)|| +')'||chr(10)|| +'select q1.test_run_id LINK'||chr(10)|| +' ,''ID'' || q1.test_run_id ||'||chr(10)|| +' '',Line'' || q3.line LABEL'||chr(10)|| +' ,q1.max_executed_usec VALUE'||chr(10)|| +' from q1 '||chr(10)|| +' left join'; + +a1:=a1||' q3'||chr(10)|| +' on q3.test_run_id = q1.test_run_id'||chr(10)|| +' and q3.max_usec = q1.max_executed_usec'||chr(10)|| +' where q1.rnum > (select num_rows from q2) - 10'||chr(10)|| +' order by q1.test_run_id'||chr(10)|| +''; + +wwv_flow_api.create_flash_chart5_series( + p_id => 4948500124035997+wwv_flow_api.g_id_offset, + p_chart_id => 4948428749035997+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_series_seq =>10, + p_series_name =>'Series 1', + p_series_query => a1, + p_series_type =>'Bar', + p_series_query_type =>'SQL_QUERY', + p_series_query_parse_opt =>'PARSE_CHART_QUERY', + p_series_query_no_data_found=>'No data found.', + p_series_query_row_count_max=>15, + p_action_link =>'f?p=&APP_ID.:3:&SESSION.::&DEBUG.::P0_TEST_RUN_ID:#LINK#', + p_show_action_link =>'C', + p_action_link_checksum_type =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#CHART_REFRESH#'; + +wwv_flow_api.create_page_plug ( + p_id=> 4948625219180073 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_plug_name=> 'Top Test Case Long Duration', + p_region_name=>'', + p_plug_template=> 4839217975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 5, + p_plug_display_column=> 2, + p_plug_display_point=> 'BEFORE_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'FLASH_CHART5', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => 'PLSQL_EXPRESSION', + p_plug_display_when_condition => ':P3_SHOW_TREND=''Y''', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1 := null; +wwv_flow_api.create_flash_chart5( + p_id => 4948812894180073+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id => 3, + p_region_id => 4948625219180073+wwv_flow_api.g_id_offset, + p_default_chart_type =>'2DColumn', + p_chart_title =>'', + p_chart_name =>'chart_4948812894180073', + p_chart_width =>300, + p_chart_height =>200, + p_chart_animation =>'N', + p_display_attr =>':H::V:Y:N:N::V:Y:None:::N:::Default', + p_dial_tick_attr =>':::::::::::', + p_gantt_attr =>'Y:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:30:15:5:Y:I:N:S:E', + p_map_attr =>'Orthographic:RegionBounds:REGION_NAME', + p_map_source =>'', + p_margins =>':::', + p_omit_label_interval => null, + p_bgtype =>'Trans', + p_bgcolor1 =>'', + p_bgcolor2 =>'', + p_gradient_rotation =>null, + p_grid_bgtype =>'', + p_grid_bgcolor1 =>'', + p_grid_bgcolor2 =>'', + p_grid_gradient_rotation =>null, + p_color_scheme =>'6', + p_custom_colors =>'', + p_map_undef_color_scheme =>'', + p_map_undef_custom_colors =>'', + p_x_axis_title =>'', + p_x_axis_min =>null, + p_x_axis_max =>null, + p_x_axis_decimal_place =>null, + p_x_axis_prefix =>'', + p_x_axis_postfix =>'', + p_x_axis_label_rotation =>'', + p_x_axis_label_font =>'Tahoma:10:#000000', + p_x_axis_major_interval =>null, + p_x_axis_minor_interval =>null, + p_y_axis_title =>'MilliSeconds', + p_y_axis_min =>0, + p_y_axis_max =>null, + p_y_axis_decimal_place =>null, + p_y_axis_prefix =>'', + p_y_axis_postfix =>'', + p_y_axis_label_rotation =>'', + p_y_axis_label_font =>'Tahoma:10:#000000', + p_y_axis_major_interval =>null, + p_y_axis_minor_interval =>null, + p_async_update =>'N', + p_async_time =>null, + p_legend_title =>'', + p_legend_title_font =>'', + p_names_font => null, + p_names_rotation => null, + p_values_font =>'Arial:10:#000000', + p_values_rotation =>null, + p_values_prefix =>'', + p_values_postfix =>'', + p_hints_font =>'Tahoma:10:#000000', + p_legend_font =>'Arial:10:#000000', + p_grid_labels_font =>'', + p_chart_title_font =>'Tahoma:14:#000000', + p_x_axis_title_font =>'Tahoma:14:#000000', + p_x_axis_title_rotation =>'', + p_y_axis_title_font =>'Tahoma:14:#000000', + p_y_axis_title_rotation =>'', + p_gauge_labels_font =>'Tahoma:10:', + p_use_chart_xml =>'N', + p_chart_xml => a1); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'select ''f?p='' || :APP_ID ||'||chr(10)|| +' '':'' || ''6'' || -- Page'||chr(10)|| +' '':'' || :APP_SESSION ||'||chr(10)|| +' '':'' || :REQUEST ||'||chr(10)|| +' '':'' || :DEBUG ||'||chr(10)|| +' '':'' || ''N'' || -- CLear Cache'||chr(10)|| +' '':'' || ''P0_TEST_RUN_ID'' || '','' ||'||chr(10)|| +' ''P0_TEST_CASE'' || -- Item Names'||chr(10)|| +' '; + +a1:=a1||' '':'' || test_run_id || '','' ||'||chr(10)|| +' testcase || -- Item Values'||chr(10)|| +' '':'' || V(''PRINTER_FRIENDLY'') LINK'||chr(10)|| +' ,testcase LABEL'||chr(10)|| +' ,tot_interval_msec VALUE'||chr(10)|| +' from wt_testcase_runs'||chr(10)|| +' where test_run_id = :P0_TEST_RUN_ID'||chr(10)|| +' order by tot_interval_msec desc'||chr(10)|| +''; + +wwv_flow_api.create_flash_chart5_series( + p_id => 4948907337180074+wwv_flow_api.g_id_offset, + p_chart_id => 4948812894180073+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_series_seq =>10, + p_series_name =>'Series 1', + p_series_query => a1, + p_series_type =>'Bar', + p_series_query_type =>'SQL_QUERY', + p_series_query_parse_opt =>'PARSE_CHART_QUERY', + p_series_query_no_data_found=>'No data found.', + p_series_query_row_count_max=>10, + p_action_link =>'', + p_show_action_link =>'N', + p_action_link_checksum_type =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||'select test_run_id'||chr(10)|| +' ,result_seq SEQ'||chr(10)|| +' ,executed_dtm EXECUTED_DATE_TIME'||chr(10)|| +' ,interval_msec MSECS'||chr(10)|| +' ,assertion'||chr(10)|| +' ,status'||chr(10)|| +' ,details'||chr(10)|| +' ,testcase'||chr(10)|| +' ,message'||chr(10)|| +' from wt_results'||chr(10)|| +' where test_run_id = :P0_TEST_RUN_ID'; + +wwv_flow_api.create_page_plug ( + p_id=> 4949525229387041 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_plug_name=> 'Test Runner Results Details', + p_region_name=>'', + p_plug_template=> 4839831975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 20, + p_plug_display_column=> 1, + p_plug_display_point=> 'AFTER_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'DYNAMIC_QUERY', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_show_nulls_as => ' - ', + p_plug_display_condition_type => '', + p_pagination_display_position=>'BOTTOM_RIGHT', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'select test_run_id'||chr(10)|| +' ,result_seq SEQ'||chr(10)|| +' ,executed_dtm EXECUTED_DATE_TIME'||chr(10)|| +' ,interval_msec MSECS'||chr(10)|| +' ,assertion'||chr(10)|| +' ,status'||chr(10)|| +' ,details'||chr(10)|| +' ,testcase'||chr(10)|| +' ,message'||chr(10)|| +' from wt_results'||chr(10)|| +' where test_run_id = :P0_TEST_RUN_ID'; + +wwv_flow_api.create_worksheet( + p_id=> 4949624635387041+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_region_id=> 4949525229387041+wwv_flow_api.g_id_offset, + p_name=> 'Test Runner Results Details', + p_folder_id=> null, + p_alias=> '', + p_report_id_item=> '', + p_max_row_count=> '10000', + p_max_row_count_message=> 'This query returns more than #MAX_ROW_COUNT# rows, please filter your data to ensure complete results.', + p_no_data_found_message=> 'No data found.', + p_max_rows_per_page=>'', + p_search_button_label=>'', + p_page_items_to_submit=>'', + p_sort_asc_image=>'', + p_sort_asc_image_attr=>'', + p_sort_desc_image=>'', + p_sort_desc_image_attr=>'', + p_sql_query => a1, + p_status=>'AVAILABLE_FOR_OWNER', + p_allow_report_saving=>'Y', + p_allow_save_rpt_public=>'N', + p_allow_report_categories=>'N', + p_show_nulls_as=>'-', + p_pagination_display_pos=>'BOTTOM_RIGHT', + p_show_finder_drop_down=>'Y', + p_show_display_row_count=>'N', + p_show_search_bar=>'Y', + p_show_search_textbox=>'Y', + p_show_actions_menu=>'Y', + p_report_list_mode=>'TABS', + p_show_detail_link=>'N', + p_show_select_columns=>'Y', + p_show_rows_per_page=>'Y', + p_show_filter=>'Y', + p_show_sort=>'Y', + p_show_control_break=>'Y', + p_show_highlight=>'Y', + p_show_computation=>'Y', + p_show_aggregate=>'Y', + p_show_chart=>'Y', + p_show_group_by=>'Y', + p_show_notify=>'N', + p_show_calendar=>'N', + p_show_flashback=>'Y', + p_show_reset=>'Y', + p_show_download=>'Y', + p_show_help=>'Y', + p_download_formats=>'CSV:HTML:EMAIL', + p_allow_exclude_null_values=>'N', + p_allow_hide_extra_columns=>'N', + p_icon_view_enabled_yn=>'N', + p_icon_view_columns_per_row=>1, + p_detail_view_enabled_yn=>'N', + p_owner=>'WTP'); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5046210513880502+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_worksheet_id => 4949624635387041+wwv_flow_api.g_id_offset, + p_db_column_name =>'TEST_RUN_ID', + p_display_order =>1, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'M', + p_column_label =>'Test Run ID', + p_report_label =>'Test Run ID', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 4951219968424536+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_worksheet_id => 4949624635387041+wwv_flow_api.g_id_offset, + p_db_column_name =>'SEQ', + p_display_order =>2, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'J', + p_column_label =>'Seq', + p_report_label =>'Seq', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 4951309893424536+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_worksheet_id => 4949624635387041+wwv_flow_api.g_id_offset, + p_db_column_name =>'EXECUTED_DATE_TIME', + p_display_order =>3, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'K', + p_column_label =>'Executed Date/Time', + p_report_label =>'Executed Date/Time', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'DATE', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'LEFT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 4951430855424536+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_worksheet_id => 4949624635387041+wwv_flow_api.g_id_offset, + p_db_column_name =>'MSECS', + p_display_order =>4, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'L', + p_column_label =>'Msecs', + p_report_label =>'Msecs', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 4950228064387045+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_worksheet_id => 4949624635387041+wwv_flow_api.g_id_offset, + p_db_column_name =>'ASSERTION', + p_display_order =>5, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'E', + p_column_label =>'Assertion', + p_report_label =>'Assertion', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'STRING', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'LEFT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 4950325498387045+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_worksheet_id => 4949624635387041+wwv_flow_api.g_id_offset, + p_db_column_name =>'STATUS', + p_display_order =>6, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'F', + p_column_label =>'Status', + p_report_label =>'Status', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'STRING', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'LEFT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 4950430581387045+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_worksheet_id => 4949624635387041+wwv_flow_api.g_id_offset, + p_db_column_name =>'DETAILS', + p_display_order =>7, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'G', + p_column_label =>'Details', + p_report_label =>'Details', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'STRING', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'LEFT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 4950523632387045+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_worksheet_id => 4949624635387041+wwv_flow_api.g_id_offset, + p_db_column_name =>'TESTCASE', + p_display_order =>8, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'H', + p_column_label =>'Testcase', + p_report_label =>'Testcase', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_column_link =>'f?p=&APP_ID.:6:&SESSION.::&DEBUG.::P0_TEST_RUN_ID,P0_TEST_CASE:#TEST_RUN_ID#,#TESTCASE#', + p_column_linktext =>'#TESTCASE#', + p_column_link_attr =>'title="Go To Test Case #TESTCASE#" style="color:blue"', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'STRING', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'LEFT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 4950607731387045+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_worksheet_id => 4949624635387041+wwv_flow_api.g_id_offset, + p_db_column_name =>'MESSAGE', + p_display_order =>9, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'I', + p_column_label =>'Message', + p_report_label =>'Message', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'STRING', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'LEFT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +declare + rc1 varchar2(32767) := null; +begin +rc1:=rc1||'TEST_RUN_ID:SEQ:EXECUTED_DATE_TIME:MSECS:STATUS:TESTCASE:ASSERTION:MESSAGE:DETAILS'; + +wwv_flow_api.create_worksheet_rpt( + p_id => 4950724292387987+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_worksheet_id => 4949624635387041+wwv_flow_api.g_id_offset, + p_session_id => null, + p_base_report_id => null+wwv_flow_api.g_id_offset, + p_application_user => 'APXWS_DEFAULT', + p_report_seq =>10, + p_report_alias =>'49508', + p_status =>'PUBLIC', + p_category_id =>null+wwv_flow_api.g_id_offset, + p_is_default =>'Y', + p_display_rows =>100000, + p_report_columns =>rc1, + p_sort_column_1 =>'SEQ', + p_sort_direction_1 =>'ASC', + p_flashback_enabled =>'N', + p_calendar_display_column =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_condition( + p_id => 5046424584891526+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_worksheet_id => 4949624635387041+wwv_flow_api.g_id_offset, + p_report_id => 4950724292387987+wwv_flow_api.g_id_offset, + p_name =>'Highlight Errors', + p_condition_type =>'HIGHLIGHT', + p_allow_delete =>'Y', + p_column_name =>'STATUS', + p_operator =>'=', + p_expr =>'ERR', + p_condition_sql =>' (case when ("STATUS" = #APXWS_EXPR#) then #APXWS_HL_ID# end) ', + p_condition_display =>'#APXWS_COL_NAME# = ''ERR'' ', + p_enabled =>'Y', + p_highlight_sequence =>10, + p_row_bg_color =>'#FF5588', + p_column_format =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_condition( + p_id => 5046501496891526+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_worksheet_id => 4949624635387041+wwv_flow_api.g_id_offset, + p_report_id => 4950724292387987+wwv_flow_api.g_id_offset, + p_name =>'Highlight Failures', + p_condition_type =>'HIGHLIGHT', + p_allow_delete =>'Y', + p_column_name =>'STATUS', + p_operator =>'=', + p_expr =>'FAIL', + p_condition_sql =>' (case when ("STATUS" = #APXWS_EXPR#) then #APXWS_HL_ID# end) ', + p_condition_display =>'#APXWS_COL_NAME# = ''FAIL'' ', + p_enabled =>'Y', + p_highlight_sequence =>10, + p_row_bg_color =>'#FFFF99', + p_column_format =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_condition( + p_id => 5046315838891526+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_worksheet_id => 4949624635387041+wwv_flow_api.g_id_offset, + p_report_id => 4950724292387987+wwv_flow_api.g_id_offset, + p_condition_type =>'FILTER', + p_allow_delete =>'Y', + p_column_name =>'STATUS', + p_operator =>'!=', + p_expr =>'PASS', + p_condition_sql =>'"STATUS" != #APXWS_EXPR#', + p_condition_display =>'#APXWS_COL_NAME# != ''PASS'' ', + p_enabled =>'Y', + p_column_format =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||'begin'||chr(10)|| +' for buff in (select error_message from wt_test_runs'||chr(10)|| +' where id = :P0_TEST_RUN_ID'||chr(10)|| +' and error_message is not null)'||chr(10)|| +' loop'||chr(10)|| +' htp.p(''Test Runner Error Message: '' ||'||chr(10)|| +' buff.error_message || ''
'');'||chr(10)|| +' end loop;'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' htp.p(''Test Results Details Search:'');'||chr(10)|| +'end;'||chr(10)|| +''; + +wwv_flow_api.create_page_plug ( + p_id=> 4957623889633835 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_plug_name=> 'Test Run Error Message', + p_region_name=>'', + p_plug_template=> 4839831975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 10, + p_plug_display_column=> 1, + p_plug_display_point=> 'AFTER_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'PLSQL_PROCEDURE', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'QUERY_COLUMNS', + p_plug_query_num_rows => 15, + p_plug_query_num_rows_type => 'NEXT_PREVIOUS_LINKS', + p_plug_query_row_count_max => 500, + p_plug_query_show_nulls_as => ' - ', + p_plug_display_condition_type => '', + p_pagination_display_position=>'BOTTOM_RIGHT', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s := null; +wwv_flow_api.create_page_plug ( + p_id=> 4971511333490098 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_plug_name=> 'Code Coverage Details', + p_region_name=>'', + p_plug_template=> 4839416734414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 30, + p_plug_display_column=> 1, + p_plug_display_point=> 'AFTER_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'STATIC_TEXT', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'QUERY_COLUMNS', + p_plug_query_num_rows_type => 'NEXT_PREVIOUS_LINKS', + p_plug_query_row_count_max => 500, + p_plug_query_show_nulls_as => ' - ', + p_plug_display_condition_type => 'EXISTS', + p_plug_display_when_condition => 'select dbout_name'||chr(10)|| +' from wt_test_runs'||chr(10)|| +' where id = :P0_TEST_RUN_ID'||chr(10)|| +' and dbout_name is not null', + p_pagination_display_position=>'BOTTOM_RIGHT', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s := null; +wwv_flow_api.create_page_plug ( + p_id=> 4952328298578419 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_plug_name=> 'Code Coverage Search', + p_region_name=>'', + p_parent_plug_id=>4971511333490098 + wwv_flow_api.g_id_offset, + p_plug_template=> 4840023588414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 50, + p_plug_display_column=> 1, + p_plug_display_point=> 'AFTER_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'STATIC_TEXT', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => '', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||'select line'||chr(10)|| +' ,status'||chr(10)|| +' ,total_occur'||chr(10)|| +' ,round(min_usec) MIN_USECS'||chr(10)|| +' ,case when total_occur = 0 then 0'||chr(10)|| +' else round(total_usec/total_occur)'||chr(10)|| +' end AVG_Usec'||chr(10)|| +' ,round(max_usec) MAX_Usec'||chr(10)|| +' ,replace(htf.escape_sc(rtrim(text,CHR(10))),'' '',''  '')'||chr(10)|| +' TEXT'||chr(10)|| +' from wt_dbout_profil'; + +s:=s||'es'||chr(10)|| +' where test_run_id = :P0_TEST_RUN_ID'||chr(10)|| +' -- and status != ''IGNR'''||chr(10)|| +' and ( instr(upper("STATUS"),upper(nvl(:P3_SEARCH,"STATUS"))) > 0'||chr(10)|| +' OR instr(upper("TEXT"),upper(nvl(:P3_SEARCH,"TEXT"))) > 0 )'||chr(10)|| +''; + +wwv_flow_api.create_report_region ( + p_id=> 4952405887578432 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 3, + p_name=> 'Code Coverage Report', + p_region_name=>'', + p_parent_plug_id=>4971511333490098 + wwv_flow_api.g_id_offset, + p_template=> 4839912075414912+ wwv_flow_api.g_id_offset, + p_display_sequence=> 60, + p_report_attributes=>'style="font-family: monospace"', + p_display_column=> 1, + p_display_point=> 'AFTER_SHOW_ITEMS', + p_source=> s, + p_source_type=> 'SQL_QUERY', + p_display_error_message=> '#SQLERRM#', + p_display_when_condition=> 'P3_DBOUT_NAME', + p_plug_caching=> 'NOT_CACHED', + p_customized=> '0', + p_translate_title=> 'Y', + p_ajax_enabled=> 'Y', + p_query_row_template=> 4963602874586482+ wwv_flow_api.g_id_offset, + p_query_headings_type=> 'COLON_DELMITED_LIST', + p_query_options=> 'DERIVED_REPORT_COLUMNS', + p_query_show_nulls_as=> ' - ', + p_query_break_cols=> '0', + p_query_no_data_found=> 'no data found', + p_query_num_rows_item=> 'P3_ROWS', + p_query_num_rows_type=> 'ROW_RANGES_IN_SELECT_LIST', + p_query_row_count_max=> '5000', + p_pagination_display_position=> 'BOTTOM_LEFT', + p_csv_output=> 'Y', + p_csv_output_link_text=> 'Create CVS File', + p_prn_output=> 'N', + p_prn_format=> 'PDF', + p_prn_output_show_link=> 'Y', + p_prn_output_link_text=> 'Print', + p_prn_content_disposition=> 'ATTACHMENT', + p_prn_document_header=> 'APEX', + p_prn_units=> 'INCHES', + p_prn_paper_size=> 'LETTER', + p_prn_width_units=> 'PERCENTAGE', + p_prn_width=> 11, + p_prn_height=> 8.5, + p_prn_orientation=> 'HORIZONTAL', + p_prn_page_header_font_color=> '#000000', + p_prn_page_header_font_family=> 'Helvetica', + p_prn_page_header_font_weight=> 'normal', + p_prn_page_header_font_size=> '12', + p_prn_page_footer_font_color=> '#000000', + p_prn_page_footer_font_family=> 'Helvetica', + p_prn_page_footer_font_weight=> 'normal', + p_prn_page_footer_font_size=> '12', + p_prn_header_bg_color=> '#9bafde', + p_prn_header_font_color=> '#ffffff', + p_prn_header_font_family=> 'Helvetica', + p_prn_header_font_weight=> 'normal', + p_prn_header_font_size=> '10', + p_prn_body_bg_color=> '#efefef', + p_prn_body_font_color=> '#000000', + p_prn_body_font_family=> 'Helvetica', + p_prn_body_font_weight=> 'normal', + p_prn_body_font_size=> '10', + p_prn_border_width=> .5, + p_prn_page_header_alignment=> 'CENTER', + p_prn_page_footer_alignment=> 'CENTER', + p_query_asc_image=> 'apex/builder/dup.gif', + p_query_asc_image_attr=> 'width="16" height="16" alt="" ', + p_query_desc_image=> 'apex/builder/ddown.gif', + p_query_desc_image_attr=> 'width="16" height="16" alt="" ', + p_plug_query_exp_filename=> '&P3_DBOUT_OWNER..&P3_DBOUT_NAME.(&P3_DBOUT_TYPE.)#&P3_TEST_RUN_ID..csv', + p_plug_query_exp_separator=> ',', + p_plug_query_exp_enclosed_by=> '"', + p_plug_query_strip_html=> 'N', + p_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 4956416987578441 + wwv_flow_api.g_id_offset, + p_region_id=> 4952405887578432 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 1, + p_form_element_id=> null, + p_column_alias=> 'LINE', + p_column_display_sequence=> 1, + p_column_heading=> 'Line', + p_column_alignment=>'RIGHT', + p_heading_alignment=>'RIGHT', + p_default_sort_column_sequence=>1, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_include_in_export=> 'Y', + p_print_col_width=> '14', + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 4956504864578441 + wwv_flow_api.g_id_offset, + p_region_id=> 4952405887578432 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 2, + p_form_element_id=> null, + p_column_alias=> 'STATUS', + p_column_display_sequence=> 2, + p_column_heading=> 'Status', + p_column_alignment=>'LEFT', + p_heading_alignment=>'LEFT', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_include_in_export=> 'Y', + p_print_col_width=> '14', + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 4956610572578441 + wwv_flow_api.g_id_offset, + p_region_id=> 4952405887578432 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 3, + p_form_element_id=> null, + p_column_alias=> 'TOTAL_OCCUR', + p_column_display_sequence=> 3, + p_column_heading=> 'Total
Occur', + p_column_alignment=>'RIGHT', + p_heading_alignment=>'RIGHT', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_include_in_export=> 'Y', + p_print_col_width=> '14', + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 4956712638578441 + wwv_flow_api.g_id_offset, + p_region_id=> 4952405887578432 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 4, + p_form_element_id=> null, + p_column_alias=> 'MIN_USECS', + p_column_display_sequence=> 4, + p_column_heading=> 'Min
Usecs', + p_column_alignment=>'RIGHT', + p_heading_alignment=>'RIGHT', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_include_in_export=> 'Y', + p_print_col_width=> '14', + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 4956829235578441 + wwv_flow_api.g_id_offset, + p_region_id=> 4952405887578432 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 5, + p_form_element_id=> null, + p_column_alias=> 'AVG_USECS', + p_column_display_sequence=> 5, + p_column_heading=> 'Avg
Usecs', + p_column_alignment=>'RIGHT', + p_heading_alignment=>'RIGHT', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_include_in_export=> 'Y', + p_print_col_width=> '14', + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 4956928135578441 + wwv_flow_api.g_id_offset, + p_region_id=> 4952405887578432 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 6, + p_form_element_id=> null, + p_column_alias=> 'MAX_USECS', + p_column_display_sequence=> 6, + p_column_heading=> 'Max
Usecs', + p_column_alignment=>'RIGHT', + p_heading_alignment=>'RIGHT', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_include_in_export=> 'Y', + p_print_col_width=> '14', + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 4957019564578442 + wwv_flow_api.g_id_offset, + p_region_id=> 4952405887578432 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 7, + p_form_element_id=> null, + p_column_alias=> 'TEXT', + p_column_display_sequence=> 7, + p_column_heading=> 'Text', + p_column_alignment=>'LEFT', + p_heading_alignment=>'LEFT', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'WITHOUT_MODIFICATION', + p_lov_show_nulls=> 'NO', + p_is_required=> false, + p_pk_col_source=> s, + p_lov_display_extra=> 'YES', + p_include_in_export=> 'Y', + p_print_col_width=> '14', + p_column_comment=>''); +end; +/ + +begin + +wwv_flow_api.create_page_button( + p_id => 4939204461575007 + wwv_flow_api.g_id_offset, + p_flow_id => wwv_flow.g_flow_id, + p_flow_step_id => 3, + p_button_sequence=> 10, + p_button_plug_id => 4848108018414926+wwv_flow_api.g_id_offset, + p_button_name => 'P3_DELETE', + p_button_image => 'template:'||to_char(4838306817414911+wwv_flow_api.g_id_offset), + p_button_image_alt=> 'DELETE Runner Results All Runs', + p_button_position=> 'BOTTOM', + p_button_alignment=> 'LEFT', + p_button_redirect_url=> 'javascript:confirmDelete(''Confirm DELETE of all Test Results for '' + document.getElementById(''P0_TEST_OWNER'').value + ''.'' + document.getElementById(''P0_TEST_RUNNER'').value, ''DELETE'')', + p_button_execute_validations=>'Y', + p_required_patch => null + wwv_flow_api.g_id_offset); + +wwv_flow_api.create_page_button( + p_id => 5168718571973414 + wwv_flow_api.g_id_offset, + p_flow_id => wwv_flow.g_flow_id, + p_flow_step_id => 3, + p_button_sequence=> 20, + p_button_plug_id => 4848108018414926+wwv_flow_api.g_id_offset, + p_button_name => 'RUN_NOW', + p_button_image => 'template:'||to_char(4838226535414911+wwv_flow_api.g_id_offset), + p_button_image_alt=> 'Run Now & Wait', + p_button_position=> 'TOP', + p_button_alignment=> 'LEFT', + p_button_redirect_url=> '', + p_button_execute_validations=>'Y', + p_button_condition=> 'select host'||chr(10)|| +' from user_db_links'||chr(10)|| +' where :P0_TEST_OWNER = :APP_USER'||chr(10)|| +' and db_link || ''.'' like :P0_TEST_OWNER || ''.%'''||chr(10)|| +' and :P0_TEST_RUNNER is not null', + p_button_condition_type=> 'EXISTS', + p_button_comment=>'Warning: The web page will not return until the test runner has completed.', + p_required_patch => null + wwv_flow_api.g_id_offset); + + +end; +/ + + +begin + +wwv_flow_api.create_page_branch( + p_id=>4956122682578439 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 3, + p_branch_action=> 'f?p=&APP_ID.:3:&SESSION.', + p_branch_point=> 'AFTER_PROCESSING', + p_branch_type=> 'REDIRECT_URL', + p_branch_sequence=> 10, + p_save_state_before_branch_yn=>'Y', + p_branch_comment=> ''); + +wwv_flow_api.create_page_branch( + p_id=>4923132166541430 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 3, + p_branch_action=> 'f?p=&APP_ID.:3:&SESSION.::&DEBUG.:::&success_msg=#SUCCESS_MSG#', + p_branch_point=> 'AFTER_PROCESSING', + p_branch_type=> 'REDIRECT_URL', + p_branch_sequence=> 99, + p_save_state_before_branch_yn=>'Y', + p_branch_comment=> ''); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>4924510262627933 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 3, + p_name=>'P3_SHOW_TREND', + p_data_type=> 'VARCHAR', + p_is_required=> true, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 13, + p_item_plug_id => 4848108018414926+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_prompt=>'Show Trend:', + p_source=>'N', + p_source_type=> 'STATIC', + p_display_as=> 'NATIVE_RADIOGROUP', + p_named_lov=> 'Y_OR_N', + p_lov=> '.'||to_char(4923728354614299 + wwv_flow_api.g_id_offset)||'.', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> 30, + p_cMaxlength=> 4000, + p_cHeight=> 1, + p_cAttributes=> 'nowrap="nowrap"', + p_begin_on_new_line=> 'YES', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'RIGHT', + p_field_alignment=> 'LEFT-CENTER', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_lov_display_extra=>'YES', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => '2', + p_attribute_02 => 'SUBMIT', + p_attribute_03 => 'Y', + p_show_quick_picks=>'N', + p_item_comment => ''); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>4939603900584303 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 3, + p_name=>'P3_ROWS_DELETED_MSG', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 15, + p_item_plug_id => 4848108018414926+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_source_type=> 'STATIC', + p_display_as=> 'NATIVE_HIDDEN', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> 30, + p_cMaxlength=> 4000, + p_cHeight=> 1, + p_cAttributes=> 'nowrap="nowrap"', + p_begin_on_new_line=> 'NO', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'LEFT', + p_field_alignment=> 'LEFT', + p_is_persistent=> 'Y', + p_lov_display_extra=>'YES', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => 'N', + p_show_quick_picks=>'N', + p_item_comment => ''); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>4954902281578436 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 3, + p_name=>'P3_SEARCH', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 10, + p_item_plug_id => 4952328298578419+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_prompt=>'Search', + p_display_as=> 'NATIVE_TEXT_FIELD', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> 30, + p_cMaxlength=> 2000, + p_cHeight=> null, + p_begin_on_new_line=> 'YES', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'RIGHT', + p_field_alignment=> 'LEFT', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_attribute_01 => 'Y', + p_attribute_02 => 'N', + p_attribute_03 => 'N', + p_item_comment => ''); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>4955118227578437 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 3, + p_name=>'P3_ROWS', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 20, + p_item_plug_id => 4952328298578419+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_prompt=>'Display', + p_source=>'500', + p_source_type=> 'STATIC', + p_display_as=> 'NATIVE_SELECT_LIST', + p_named_lov=> 'P3_Report Row Per Page', + p_lov=> '.'||to_char(4952509356578433 + wwv_flow_api.g_id_offset)||'.', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> 30, + p_cMaxlength=> 2000, + p_cHeight=> 1, + p_begin_on_new_line=> 'NO', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'RIGHT', + p_field_alignment=> 'LEFT', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_lov_display_extra=>'YES', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => 'NONE', + p_attribute_02 => 'N', + p_show_quick_picks=>'N', + p_item_comment => ''); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>4955319672578437 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 3, + p_name=>'P3_GO', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 30, + p_item_plug_id => 4952328298578419+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default=> 'GO', + p_prompt=>'Go', + p_source=>'GO', + p_source_type=> 'STATIC', + p_display_as=> 'BUTTON', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> null, + p_cMaxlength=> null, + p_cHeight=> null, + p_tag_attributes => 'template:'||to_char(4838226535414911 + wwv_flow_api.g_id_offset), + p_begin_on_new_line=> 'NO', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'LEFT', + p_field_alignment=> 'LEFT', + p_is_persistent=> 'Y', + p_item_comment => ''); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>4955512070578437 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 3, + p_name=>'P3_RESET', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 40, + p_item_plug_id => 4952328298578419+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default=> 'RESET', + p_prompt=>'Reset', + p_source=>'RESET', + p_source_type=> 'STATIC', + p_display_as=> 'BUTTON', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> null, + p_cMaxlength=> null, + p_cHeight=> null, + p_tag_attributes => 'template:'||to_char(4838226535414911 + wwv_flow_api.g_id_offset), + p_begin_on_new_line=> 'NO', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'LEFT', + p_field_alignment=> 'LEFT', + p_is_persistent=> 'Y', + p_item_comment => ''); + + +end; +/ + + +begin + +wwv_flow_api.create_page_computation( + p_id=> 5113008183346610 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 3, + p_computation_sequence => 20, + p_computation_item=> 'P0_DISPLAY', + p_computation_point=> 'BEFORE_HEADER', + p_computation_type=> 'STATIC_ASSIGNMENT', + p_computation_processed=> 'REPLACE_EXISTING', + p_computation=> 'Y', + p_compute_when => '', + p_compute_when_type=>''); + +null; + +end; +/ + + +begin + +wwv_flow_api.create_page_da_event ( + p_id => 4931927743335808 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_page_id => 3 + ,p_name => 'Submit After LOV Change' + ,p_event_sequence => 10 + ,p_triggering_element_type => 'ITEM' + ,p_triggering_element => 'P3_GOTO_RUN_ID' + ,p_bind_type => 'bind' + ,p_bind_event_type => 'change' + ); +wwv_flow_api.create_page_da_action ( + p_id => 4932206270335808 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_page_id => 3 + ,p_event_id => 4931927743335808 + wwv_flow_api.g_id_offset + ,p_event_result => 'TRUE' + ,p_action_sequence => 10 + ,p_execute_on_page_init => 'N' + ,p_action => 'NATIVE_SUBMIT_PAGE' + ,p_attribute_01 => 'REFRESH' + ,p_stop_execution_on_error => 'Y' + ); +null; + +end; +/ + + +begin + +declare + p varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +p:=p||'reset_pagination'; + +wwv_flow_api.create_page_process( + p_id => 4955700238578438 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id => 3, + p_process_sequence=> 10, + p_process_point=> 'AFTER_SUBMIT', + p_process_type=> 'RESET_PAGINATION', + p_process_name=> 'Reset Pagination', + p_process_sql_clob => p, + p_process_error_message=> 'Unable to reset pagination.', + p_process_when=>'GO,P3_SEARCH,RESET', + p_process_when_type=>'REQUEST_IN_CONDITION', + p_process_success_message=> '', + p_process_is_stateful_y_n=>'N', + p_process_comment=>''); +end; +null; + +end; +/ + + +begin + +declare + p varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +p:=p||'P3_SEARCH,P3_ROWS'; + +wwv_flow_api.create_page_process( + p_id => 4955926050578438 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id => 3, + p_process_sequence=> 20, + p_process_point=> 'AFTER_SUBMIT', + p_process_type=> 'CLEAR_CACHE_FOR_ITEMS', + p_process_name=> 'Reset report search', + p_process_sql_clob => p, + p_process_error_message=> 'Unable to clear cache.', + p_process_when_button_id=>4955512070578437 + wwv_flow_api.g_id_offset, + p_process_success_message=> '', + p_process_is_stateful_y_n=>'N', + p_process_comment=>''); +end; +null; + +end; +/ + + +begin + +declare + p varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +p:=p||'declare'||chr(10)|| +' run_str varchar2(2000) := ''wtplsql.test_run@'' ||'||chr(10)|| +' :P0_TEST_OWNER || ''('''''' ||'||chr(10)|| +' :P0_TEST_RUNNER || '''''')'' ;'||chr(10)|| +'begin'||chr(10)|| +' execute immediate ''begin '' || run_str || ''; end;'';'||chr(10)|| +' begin'||chr(10)|| +' select max(id)'||chr(10)|| +' into :P0_TEST_RUN_ID'||chr(10)|| +' from wt_test_runs'||chr(10)|| +' where runner_owner = :P0_TEST_OWNER'||chr(10)|| +' and runner_name = '; + +p:=p||':P0_TEST_RUNNER;'||chr(10)|| +' exception when NO_DATA_FOUND'||chr(10)|| +' then'||chr(10)|| +' null; -- Do Nothing'||chr(10)|| +' end;'||chr(10)|| +'end;'; + +wwv_flow_api.create_page_process( + p_id => 5168825843975543 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id => 3, + p_process_sequence=> 50, + p_process_point=> 'AFTER_SUBMIT', + p_process_type=> 'PLSQL', + p_process_name=> 'RUN_NOW', + p_process_sql_clob => p, + p_process_error_message=> '', + p_process_when_button_id=>5168718571973414 + wwv_flow_api.g_id_offset, + p_process_success_message=> '', + p_process_is_stateful_y_n=>'N', + p_process_comment=>''); +end; +null; + +end; +/ + + +begin + +declare + p varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +p:=p||'declare'||chr(10)|| +' num_runs number := 0;'||chr(10)|| +' num_stats number := 0;'||chr(10)|| +' num_tcase number := 0;'||chr(10)|| +' num_res number := 0;'||chr(10)|| +' num_profs number := 0;'||chr(10)|| +' procedure load_msg is begin'||chr(10)|| +' :P3_ROWS_DELETED_MSG := num_runs || '' WT_TEST_RUNS, '' ||'||chr(10)|| +' num_stats || '' WT_TEST_RUN_STATS, '' ||'||chr(10)|| +' num_tcase || '' wt_testcase_runs, '' ||'||chr(10)|| +' '; + +p:=p||' num_res || '' WT_RESULTS, '' ||'||chr(10)|| +' num_profs || '' WT_DBOUT_PROFILES'' ;'||chr(10)|| +' end load_msg;'||chr(10)|| +'begin'||chr(10)|| +' load_msg;'||chr(10)|| +' for buff in ('||chr(10)|| +' select id from wt_test_runs'||chr(10)|| +' where runner_owner = :P0_TEST_OWNER'||chr(10)|| +' and runner_name = :P0_TEST_RUNNER )'||chr(10)|| +' loop'||chr(10)|| +' --'||chr(10)|| +' delete from wt_test_run_stats'||chr(10)|| +' where test_run_id = buff.id;'||chr(10)|| +' num_stats :'; + +p:=p||'= num_stats + SQL%ROWCOUNT;'||chr(10)|| +' --'||chr(10)|| +' delete from wt_testcase_runs'||chr(10)|| +' where test_run_id = buff.id;'||chr(10)|| +' num_tcase := num_tcase + SQL%ROWCOUNT;'||chr(10)|| +' --'||chr(10)|| +' delete from wt_results'||chr(10)|| +' where test_run_id = buff.id;'||chr(10)|| +' num_res := num_res + SQL%ROWCOUNT;'||chr(10)|| +' --'||chr(10)|| +' delete from wt_dbout_profiles'||chr(10)|| +' where test_run_id = buff.id;'||chr(10)|| +' num_profs := num_profs + SQL%ROWCOUNT;'||chr(10)|| +' '; + +p:=p||' --'||chr(10)|| +' delete from wt_test_runs'||chr(10)|| +' where id = buff.id;'||chr(10)|| +' num_runs := num_runs + SQL%ROWCOUNT;'||chr(10)|| +' --'||chr(10)|| +' load_msg;'||chr(10)|| +' --'||chr(10)|| +' end loop;'||chr(10)|| +' :P0_TEST_RUN_ID := NULL;'||chr(10)|| +' :P0_TEST_RUNNER := NULL;'||chr(10)|| +'end;'; + +wwv_flow_api.create_page_process( + p_id => 4927320293945637 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id => 3, + p_process_sequence=> 10, + p_process_point=> 'ON_SUBMIT_BEFORE_COMPUTATION', + p_process_type=> 'PLSQL', + p_process_name=> 'Delete Test Runs', + p_process_sql_clob => p, + p_process_error_message=> 'Failed to delete rows (&P3_ROWS_DELETED_MSG.)', + p_process_when=>'DELETE', + p_process_when_type=>'REQUEST_EQUALS_CONDITION', + p_process_success_message=> 'Successfully deleted &P3_ROWS_DELETED_MSG.', + p_process_is_stateful_y_n=>'N', + p_process_comment=>''); +end; +null; + +end; +/ + + +begin + +--------------------------------------- +-- ...updatable report columns for page 3 +-- + +begin + +null; +end; +null; + +end; +/ + + +--application/pages/page_00004 +prompt ...PAGE 4: DBOUT Profile +-- + +begin + +wwv_flow_api.create_page ( + p_flow_id => wwv_flow.g_flow_id + ,p_id => 4 + ,p_tab_set => 'TS1' + ,p_name => 'DBOUT Profile' + ,p_alias => 'DBOUTPROFILE' + ,p_step_title => 'DBOUT Profile' + ,p_allow_duplicate_submissions => 'Y' + ,p_step_sub_title => 'DBOUT Profile' + ,p_step_sub_title_type => 'TEXT_WITH_SUBSTITUTIONS' + ,p_first_item => 'AUTO_FIRST_ITEM' + ,p_include_apex_css_js_yn => 'Y' + ,p_autocomplete_on_off => 'ON' + ,p_page_is_public_y_n => 'N' + ,p_protection_level => 'N' + ,p_cache_page_yn => 'N' + ,p_cache_timeout_seconds => 21600 + ,p_cache_by_user_yn => 'N' + ,p_help_text => +'No help is available for this page.' + ,p_last_updated_by => 'WTP' + ,p_last_upd_yyyymmddhh24miss => '20180829211824' + ); +null; + +end; +/ + +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||'select r.dbout_owner'||chr(10)|| +' ,r.dbout_name'||chr(10)|| +' ,r.dbout_type'||chr(10)|| +' ,s.code_coverage*100 CODE_COVERAGE'||chr(10)|| +' ,r.id TEST_RUN_ID'||chr(10)|| +' ,r.runner_owner'||chr(10)|| +' ,r.runner_name'||chr(10)|| +' ,r.start_dtm'||chr(10)|| +' ,r.end_dtm'||chr(10)|| +' ,s.profiled_lines'||chr(10)|| +' ,s.executed_lines'||chr(10)|| +' ,s.ignored_lines'||chr(10)|| +' ,s.excluded_lines'||chr(10)|| +' ,s.notexec_lines'||chr(10)|| +' ,s.unknown_lines'||chr(10)|| +' ,s.min_exec'; + +s:=s||'uted_usec'||chr(10)|| +' ,s.avg_executed_usec'||chr(10)|| +' ,s.max_executed_usec'||chr(10)|| +' ,round(s.tot_executed_usec,3) TOT_EXECUTED_USECS'||chr(10)|| +' ,r.trigger_offset'||chr(10)|| +' ,r.error_message'||chr(10)|| +' from wt_test_runs r'||chr(10)|| +' join wt_test_run_stats s'||chr(10)|| +' on s.test_run_id = r.id'||chr(10)|| +' where r.dbout_name is not null'; + +wwv_flow_api.create_page_plug ( + p_id=> 5058029495145138 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_plug_name=> 'DBOUT Profile', + p_region_name=>'', + p_plug_template=> 4839831975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 10, + p_plug_display_column=> 1, + p_plug_display_point=> 'AFTER_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'DYNAMIC_QUERY', + p_translate_title=> 'Y', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_display_condition_type => '', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'select r.dbout_owner'||chr(10)|| +' ,r.dbout_name'||chr(10)|| +' ,r.dbout_type'||chr(10)|| +' ,s.code_coverage*100 CODE_COVERAGE'||chr(10)|| +' ,r.id TEST_RUN_ID'||chr(10)|| +' ,r.runner_owner'||chr(10)|| +' ,r.runner_name'||chr(10)|| +' ,r.start_dtm'||chr(10)|| +' ,r.end_dtm'||chr(10)|| +' ,s.profiled_lines'||chr(10)|| +' ,s.executed_lines'||chr(10)|| +' ,s.ignored_lines'||chr(10)|| +' ,s.excluded_lines'||chr(10)|| +' ,s.notexec_lines'||chr(10)|| +' ,s.unknown_lines'||chr(10)|| +' ,s.min_exec'; + +a1:=a1||'uted_usec'||chr(10)|| +' ,s.avg_executed_usec'||chr(10)|| +' ,s.max_executed_usec'||chr(10)|| +' ,round(s.tot_executed_usec,3) TOT_EXECUTED_USECS'||chr(10)|| +' ,r.trigger_offset'||chr(10)|| +' ,r.error_message'||chr(10)|| +' from wt_test_runs r'||chr(10)|| +' join wt_test_run_stats s'||chr(10)|| +' on s.test_run_id = r.id'||chr(10)|| +' where r.dbout_name is not null'; + +wwv_flow_api.create_worksheet( + p_id=> 5058117729145138+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_region_id=> 5058029495145138+wwv_flow_api.g_id_offset, + p_name=> 'DBOUT Profile', + p_folder_id=> null, + p_alias=> '', + p_report_id_item=> '', + p_max_row_count=> '10000', + p_max_row_count_message=> 'This query returns more than #MAX_ROW_COUNT# rows, please filter your data to ensure complete results.', + p_no_data_found_message=> 'No data found.', + p_max_rows_per_page=>'', + p_search_button_label=>'', + p_page_items_to_submit=>'', + p_sort_asc_image=>'', + p_sort_asc_image_attr=>'', + p_sort_desc_image=>'', + p_sort_desc_image_attr=>'', + p_sql_query => a1, + p_base_pk1=>'TEST_RUN_ID', + p_status=>'AVAILABLE_FOR_OWNER', + p_allow_report_saving=>'Y', + p_allow_save_rpt_public=>'N', + p_allow_report_categories=>'N', + p_show_nulls_as=>'-', + p_pagination_type=>'ROWS_X_TO_Y', + p_pagination_display_pos=>'BOTTOM_LEFT', + p_show_finder_drop_down=>'Y', + p_show_display_row_count=>'N', + p_show_search_bar=>'Y', + p_show_search_textbox=>'Y', + p_show_actions_menu=>'Y', + p_report_list_mode=>'TABS', + p_show_detail_link=>'Y', + p_show_select_columns=>'Y', + p_show_rows_per_page=>'Y', + p_show_filter=>'Y', + p_show_sort=>'Y', + p_show_control_break=>'Y', + p_show_highlight=>'Y', + p_show_computation=>'Y', + p_show_aggregate=>'Y', + p_show_chart=>'Y', + p_show_group_by=>'Y', + p_show_notify=>'N', + p_show_calendar=>'N', + p_show_flashback=>'Y', + p_show_reset=>'Y', + p_show_download=>'Y', + p_show_help=>'Y', + p_download_formats=>'CSV:HTML:EMAIL', + p_detail_link_text=>'', + p_allow_exclude_null_values=>'Y', + p_allow_hide_extra_columns=>'Y', + p_icon_view_enabled_yn=>'N', + p_icon_view_columns_per_row=>1, + p_detail_view_enabled_yn=>'N', + p_owner=>'WTP'); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5058332650145140+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'DBOUT_OWNER', + p_display_order =>1, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'A', + p_column_label =>'DB Object Under Test Owner', + p_report_label =>'DBOUT
Owner', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'STRING', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'RIGHT', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5058422778145140+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'DBOUT_NAME', + p_display_order =>2, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'B', + p_column_label =>'DB Object Under Test Name', + p_report_label =>'DBOUT
Name', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'STRING', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'LEFT', + p_column_alignment =>'LEFT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5058500986145140+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'DBOUT_TYPE', + p_display_order =>3, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'C', + p_column_label =>'DB Object Under Test Type', + p_report_label =>'DBOUT
Type', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'STRING', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'CENTER', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5058603676145141+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'CODE_COVERAGE', + p_display_order =>4, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'D', + p_column_label =>'Code Coverage Percent', + p_report_label =>'Code
Cvrg
Pct', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'RIGHT', + p_column_alignment =>'RIGHT', + p_format_mask =>'999.9', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5058729192145141+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'TEST_RUN_ID', + p_display_order =>5, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'E', + p_column_label =>'Test Run ID', + p_report_label =>'Test
Run
ID', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_column_link =>'f?p=&APP_ID.:3:&SESSION.::&DEBUG.::P0_TEST_RUN_ID:#TEST_RUN_ID#', + p_column_linktext =>'#TEST_RUN_ID#', + p_column_link_attr =>'title="Go To Test Run ID #TEST_RUN_ID#" style="color:blue"', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'RIGHT', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5058806330145141+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'RUNNER_OWNER', + p_display_order =>6, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'F', + p_column_label =>'Test Runner Owner', + p_report_label =>'Test
Runner
Owner', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'STRING', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'RIGHT', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5058915547145141+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'RUNNER_NAME', + p_display_order =>7, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'G', + p_column_label =>'Test Runner Name', + p_report_label =>'Test
Runner
Name', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'STRING', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'LEFT', + p_column_alignment =>'LEFT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5059009515145141+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'START_DTM', + p_display_order =>8, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'H', + p_column_label =>'Start Date/Time', + p_report_label =>'Start
Date
Time', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'DATE', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'CENTER', + p_format_mask =>'DD-MON-YYYY HH24:MI:SS', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5059121065145141+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'END_DTM', + p_display_order =>9, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'I', + p_column_label =>'End Date/Time', + p_report_label =>'End
Date
Time', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'DATE', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'CENTER', + p_format_mask =>'DD-MON-YYYY HH24:MI:SS', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5059220275145141+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'PROFILED_LINES', + p_display_order =>10, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'J', + p_column_label =>'Profiled Source Lines', + p_report_label =>'Profiled
Source
Lines', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'RIGHT', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5059315222145141+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'EXECUTED_LINES', + p_display_order =>11, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'K', + p_column_label =>'Executed Source Lines', + p_report_label =>'Executed
Source
Lines', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'RIGHT', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5059411706145141+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'IGNORED_LINES', + p_display_order =>12, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'L', + p_column_label =>'Ignored Source Lines', + p_report_label =>'Ignored
Source
Lines', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'RIGHT', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5059518034145141+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'EXCLUDED_LINES', + p_display_order =>13, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'M', + p_column_label =>'Excluded Source Lines', + p_report_label =>'Excluded
Source
Lines', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'RIGHT', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5059610513145141+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'NOTEXEC_LINES', + p_display_order =>14, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'N', + p_column_label =>'Not Executed Source Lines', + p_report_label =>'Not
Executed
Lines', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'RIGHT', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5059710978145141+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'UNKNOWN_LINES', + p_display_order =>15, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'O', + p_column_label =>'Unknown Source Lines', + p_report_label =>'Unknown
Source
Lines', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'RIGHT', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5059811323145141+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'MIN_EXECUTED_USECS', + p_display_order =>16, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'P', + p_column_label =>'Minimum Executed Microsecs', + p_report_label =>'Minimum
Executed
Microsecs', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'RIGHT', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5059913789145141+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'AVG_EXECUTED_USECS', + p_display_order =>17, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'Q', + p_column_label =>'Average Executed Microsecs', + p_report_label =>'Avgerage
Executed
Microsecs', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'RIGHT', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5060023226145142+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'MAX_EXECUTED_USECS', + p_display_order =>18, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'R', + p_column_label =>'Maximum Executed Microsecs', + p_report_label =>'Maximum
Executed
Microsecs', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'RIGHT', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5060123834145142+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'TOT_EXECUTED_USECS', + p_display_order =>19, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'S', + p_column_label =>'Total Executed Microsecs', + p_report_label =>'Total
Executed
Microsecs', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'RIGHT', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5060204482145142+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'TRIGGER_OFFSET', + p_display_order =>20, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'T', + p_column_label =>'Trigger Offset', + p_report_label =>'Trigger
Offset', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'RIGHT', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 5060309927145142+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_db_column_name =>'ERROR_MESSAGE', + p_display_order =>21, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'U', + p_column_label =>'Error Message', + p_report_label =>'Error
Message', + p_sync_form_label =>'N', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'STRING', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'LEFT', + p_column_alignment =>'LEFT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +declare + rc1 varchar2(32767) := null; +begin +rc1:=rc1||'DBOUT_OWNER:DBOUT_NAME:DBOUT_TYPE:CODE_COVERAGE:TEST_RUN_ID:RUNNER_OWNER:RUNNER_NAME:START_DTM:MAX_EXECUTED_USECS:ERROR_MESSAGE'; + +wwv_flow_api.create_worksheet_rpt( + p_id => 5060410372145412+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_session_id => null, + p_base_report_id => null+wwv_flow_api.g_id_offset, + p_application_user => 'APXWS_DEFAULT', + p_report_seq =>10, + p_report_alias =>'50605', + p_status =>'PUBLIC', + p_category_id =>null+wwv_flow_api.g_id_offset, + p_is_default =>'Y', + p_display_rows =>15, + p_report_columns =>rc1, + p_sort_column_1 =>'TEST_RUN_ID', + p_sort_direction_1 =>'DESC', + p_sort_column_2 =>'0', + p_sort_direction_2 =>'ASC', + p_sort_column_3 =>'0', + p_sort_direction_3 =>'ASC', + p_sort_column_4 =>'0', + p_sort_direction_4 =>'ASC', + p_sort_column_5 =>'0', + p_sort_direction_5 =>'ASC', + p_sort_column_6 =>'0', + p_sort_direction_6 =>'ASC', + p_flashback_enabled =>'N', + p_calendar_display_column =>''); +end; +/ +declare + rc1 varchar2(32767) := null; +begin +rc1:=rc1||'DBOUT_OWNER:DBOUT_NAME:DBOUT_TYPE:CODE_COVERAGE:TEST_RUN_ID:RUNNER_OWNER:RUNNER_NAME:START_DTM:END_DTM:PROFILED_LINES:EXECUTED_LINES:IGNORED_LINES:EXCLUDED_LINES:NOTEXEC_LINES:UNKNOWN_LINES:MIN_EXECUTED_USECS:AVG_EXECUTED_USECS:MAX_EXECUTED_USECS:TOT_EXECUTED_USECS:TRIGGER_OFFSET:ERROR_MESSAGE'; + +wwv_flow_api.create_worksheet_rpt( + p_id => 5062402397417566+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 4, + p_worksheet_id => 5058117729145138+wwv_flow_api.g_id_offset, + p_session_id => null, + p_base_report_id => null+wwv_flow_api.g_id_offset, + p_application_user => 'APXWS_ALTERNATIVE', + p_name =>'All Columns', + p_report_seq =>10, + p_report_alias =>'50625', + p_status =>'PUBLIC', + p_category_id =>null+wwv_flow_api.g_id_offset, + p_is_default =>'Y', + p_display_rows =>15, + p_report_columns =>rc1, + p_sort_column_1 =>'TEST_RUN_ID', + p_sort_direction_1 =>'DESC', + p_sort_column_2 =>'0', + p_sort_direction_2 =>'ASC', + p_sort_column_3 =>'0', + p_sort_direction_3 =>'ASC', + p_sort_column_4 =>'0', + p_sort_direction_4 =>'ASC', + p_sort_column_5 =>'0', + p_sort_direction_5 =>'ASC', + p_sort_column_6 =>'0', + p_sort_direction_6 =>'ASC', + p_flashback_enabled =>'N', + p_calendar_display_column =>''); +end; +/ + +begin + +null; + +end; +/ + + +begin + +null; + +end; +/ + + +begin + +wwv_flow_api.create_page_computation( + p_id=> 5113829569371666 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 4, + p_computation_sequence => 30, + p_computation_item=> 'P0_DISPLAY', + p_computation_point=> 'BEFORE_HEADER', + p_computation_type=> 'STATIC_ASSIGNMENT', + p_computation_processed=> 'REPLACE_EXISTING', + p_computation=> 'N', + p_compute_when => '', + p_compute_when_type=>''); + +null; + +end; +/ + + +begin + +--------------------------------------- +-- ...updatable report columns for page 4 +-- + +begin + +null; +end; +null; + +end; +/ + + +--application/pages/page_00005 +prompt ...PAGE 5: About +-- + +begin + +wwv_flow_api.create_page ( + p_flow_id => wwv_flow.g_flow_id + ,p_id => 5 + ,p_tab_set => 'TS1' + ,p_name => 'About' + ,p_alias => 'ABOUT' + ,p_step_title => 'About' + ,p_allow_duplicate_submissions => 'Y' + ,p_step_sub_title_type => 'TEXT_WITH_SUBSTITUTIONS' + ,p_first_item => 'NO_FIRST_ITEM' + ,p_include_apex_css_js_yn => 'Y' + ,p_autocomplete_on_off => 'ON' + ,p_page_is_public_y_n => 'N' + ,p_protection_level => 'N' + ,p_cache_page_yn => 'N' + ,p_cache_timeout_seconds => 21600 + ,p_cache_by_user_yn => 'N' + ,p_last_updated_by => 'WTP' + ,p_last_upd_yyyymmddhh24miss => '20180825100311' + ); +null; + +end; +/ + +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||'select install_dtm'||chr(10)|| +' ,action'||chr(10)|| +' ,text'||chr(10)|| +' from wt_version'; + +wwv_flow_api.create_report_region ( + p_id=> 4906213947718211 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 5, + p_name=> 'wtPLSQL Core Installation History:', + p_region_name=>'', + p_template=> 4838619911414911+ wwv_flow_api.g_id_offset, + p_display_sequence=> 30, + p_display_column=> 1, + p_display_point=> 'AFTER_SHOW_ITEMS', + p_source=> s, + p_source_type=> 'SQL_QUERY', + p_display_error_message=> '#SQLERRM#', + p_plug_caching=> 'NOT_CACHED', + p_customized=> '0', + p_translate_title=> 'Y', + p_ajax_enabled=> 'Y', + p_query_row_template=> 4843113555414914+ wwv_flow_api.g_id_offset, + p_query_headings_type=> 'COLON_DELMITED_LIST', + p_query_num_rows=> '15', + p_query_options=> 'DERIVED_REPORT_COLUMNS', + p_query_show_nulls_as=> ' - ', + p_query_break_cols=> '0', + p_query_no_data_found=> 'no data found', + p_query_num_rows_type=> 'NEXT_PREVIOUS_LINKS', + p_pagination_display_position=> 'BOTTOM_RIGHT', + p_csv_output=> 'N', + p_query_asc_image=> 'apex/builder/dup.gif', + p_query_asc_image_attr=> 'width="16" height="16" alt="" ', + p_query_desc_image=> 'apex/builder/ddown.gif', + p_query_desc_image_attr=> 'width="16" height="16" alt="" ', + p_plug_query_strip_html=> 'Y', + p_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 4906513668718218 + wwv_flow_api.g_id_offset, + p_region_id=> 4906213947718211 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 1, + p_form_element_id=> null, + p_column_alias=> 'INSTALL_DTM', + p_column_display_sequence=> 1, + p_column_heading=> 'INSTALL_DTM', + p_column_alignment=>'LEFT', + p_default_sort_column_sequence=>1, + p_default_sort_dir=>'desc', + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 4906620342718218 + wwv_flow_api.g_id_offset, + p_region_id=> 4906213947718211 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 2, + p_form_element_id=> null, + p_column_alias=> 'ACTION', + p_column_display_sequence=> 2, + p_column_heading=> 'ACTION', + p_column_alignment=>'LEFT', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; +begin +s := null; +wwv_flow_api.create_report_columns ( + p_id=> 4906723875718218 + wwv_flow_api.g_id_offset, + p_region_id=> 4906213947718211 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_query_column_id=> 3, + p_form_element_id=> null, + p_column_alias=> 'TEXT', + p_column_display_sequence=> 3, + p_column_heading=> 'TEXT', + p_column_alignment=>'LEFT', + p_default_sort_column_sequence=>0, + p_disable_sort_column=>'N', + p_sum_column=> 'N', + p_hidden_column=> 'N', + p_display_as=>'ESCAPE_SC', + p_is_required=> false, + p_pk_col_source=> s, + p_column_comment=>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||'&APP_VERSION.
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +''||chr(10)|| +'Use GitHub “issues” for support. (A free GitHub account will be required to create a new issue. Issues can be searched without an account.)
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +''||chr(10)|| +'Find more information at wtPLSQL Website.
'||chr(10)|| +'
'||chr(10)|| +'
'; + +wwv_flow_api.create_page_plug ( + p_id=> 4907318411766797 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 5, + p_plug_name=> 'About', + p_region_name=>'', + p_plug_template=> 4839831975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 20, + p_plug_display_column=> 1, + p_plug_display_point=> 'BEFORE_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'STATIC_TEXT_WITH_SHORTCUTS', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 4843113555414914+ wwv_flow_api.g_id_offset, + p_plug_query_headings_type=> 'QUERY_COLUMNS', + p_plug_query_num_rows => 15, + p_plug_query_num_rows_type => 'NEXT_PREVIOUS_LINKS', + p_plug_query_row_count_max => 500, + p_plug_query_show_nulls_as => ' - ', + p_plug_display_condition_type => '', + p_pagination_display_position=>'BOTTOM_RIGHT', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||'
'||chr(10)|| +'
'; + +wwv_flow_api.create_page_plug ( + p_id=> 4907909454792629 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 5, + p_plug_name=> 'Version', + p_region_name=>'', + p_plug_template=> 4839831975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 10, + p_plug_display_column=> 1, + p_plug_display_point=> 'BEFORE_BOX_BODY', + p_plug_source=> s, + p_plug_source_type=> 'STATIC_TEXT', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 4843113555414914+ wwv_flow_api.g_id_offset, + p_plug_query_headings_type=> 'QUERY_COLUMNS', + p_plug_query_num_rows => 15, + p_plug_query_num_rows_type => 'NEXT_PREVIOUS_LINKS', + p_plug_query_row_count_max => 500, + p_plug_query_show_nulls_as => ' - ', + p_plug_display_condition_type => '', + p_pagination_display_position=>'BOTTOM_RIGHT', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ + +begin + +null; + +end; +/ + + +begin + +null; + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>4907225553759367 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 5, + p_name=>'P5_WT_VERSION', + p_data_type=> 'VARCHAR', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 10, + p_item_plug_id => 4907909454792629+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'NO', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_prompt=>'wtPLSQL Core Version', + p_source=>'begin'||chr(10)|| +' for buff in (select text from wt_version'||chr(10)|| +' where install_dtm ='||chr(10)|| +' (select max(install_dtm)'||chr(10)|| +' from wt_version) )'||chr(10)|| +' loop'||chr(10)|| +' return buff.text;'||chr(10)|| +' end loop;'||chr(10)|| +' return '''';'||chr(10)|| +'end;', + p_source_type=> 'FUNCTION_BODY', + p_display_as=> 'NATIVE_DISPLAY_ONLY', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> 30, + p_cMaxlength=> 4000, + p_cHeight=> 1, + p_cAttributes=> 'nowrap="nowrap"', + p_begin_on_new_line=> 'YES', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'RIGHT', + p_field_alignment=> 'LEFT-CENTER', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_lov_display_extra=>'YES', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => 'N', + p_attribute_02 => 'VALUE', + p_attribute_04 => 'Y', + p_show_quick_picks=>'N', + p_item_comment => ''); + + +end; +/ + + +begin + +wwv_flow_api.create_page_computation( + p_id=> 5112710130337711 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 5, + p_computation_sequence => 20, + p_computation_item=> 'P0_DISPLAY', + p_computation_point=> 'BEFORE_HEADER', + p_computation_type=> 'STATIC_ASSIGNMENT', + p_computation_processed=> 'REPLACE_EXISTING', + p_computation=> 'N', + p_compute_when => '', + p_compute_when_type=>''); + +null; + +end; +/ + + +begin + +--------------------------------------- +-- ...updatable report columns for page 5 +-- + +begin + +null; +end; +null; + +end; +/ + + +--application/pages/page_00006 +prompt ...PAGE 6: Test Cases +-- + +begin + +wwv_flow_api.create_page ( + p_flow_id => wwv_flow.g_flow_id + ,p_id => 6 + ,p_tab_set => 'TS1' + ,p_name => 'Test Cases' + ,p_alias => 'TESTCASES' + ,p_step_title => 'Test Cases' + ,p_allow_duplicate_submissions => 'Y' + ,p_step_sub_title => 'Test Cases' + ,p_step_sub_title_type => 'TEXT_WITH_SUBSTITUTIONS' + ,p_first_item => 'AUTO_FIRST_ITEM' + ,p_include_apex_css_js_yn => 'Y' + ,p_autocomplete_on_off => 'ON' + ,p_step_template => 4837525507414910 + wwv_flow_api.g_id_offset + ,p_page_is_public_y_n => 'N' + ,p_protection_level => 'N' + ,p_cache_page_yn => 'N' + ,p_cache_timeout_seconds => 21600 + ,p_cache_by_user_yn => 'N' + ,p_help_text => +'No help is available for this page.' + ,p_last_updated_by => 'WTP' + ,p_last_upd_yyyymmddhh24miss => '20180901170818' + ); +null; + +end; +/ + +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||'declare'||chr(10)|| +' total_elapsed number;'||chr(10)|| +' num_runs number;'||chr(10)|| +'begin'||chr(10)|| +' --'||chr(10)|| +' select max(tot_interval_msec) -- Need Group Function for NULL'||chr(10)|| +' into total_elapsed'||chr(10)|| +' from wt_testcase_runs'||chr(10)|| +' where test_run_id = :P0_TEST_RUN_ID'||chr(10)|| +' and testcase = :P0_TEST_CASE;'||chr(10)|| +' --'||chr(10)|| +' select count(tr.id) -- Need Group Function for NULL'||chr(10)|| +' into num_runs'||chr(10)|| +' from wt_test_runs tr'||chr(10)|| +' join wt_te'; + +s:=s||'stcase_stats tc'||chr(10)|| +' on tc.test_run_id = tr.id'||chr(10)|| +' and tc.testcase = :P0_TEST_CASE'||chr(10)|| +' where tr.runner_owner = :P0_TEST_OWNER'||chr(10)|| +' and tr.runner_name = :P0_TEST_RUNNER;'||chr(10)|| +' --'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' htp.p(''Test Case Duration (msec): '' || total_elapsed || ''
'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' htp.p(''Number of Test Runs: '' || num_runs || ''
'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' --'||chr(10)|| +'end;'||chr(10)|| +''; + +wwv_flow_api.create_page_plug ( + p_id=> 4978906587323161 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 6, + p_plug_name=> 'Summary', + p_region_name=>'', + p_plug_template=> 4839831975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 2, + p_plug_display_column=> 2, + p_plug_display_point=> 'BEFORE_BOX_BODY', + p_plug_source=> s, + p_plug_source_type=> 'PLSQL_PROCEDURE', + p_translate_title=> 'Y', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_column_width => 'td width="320"', + p_plug_display_condition_type => '', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||'select result_seq SEQ'||chr(10)|| +' ,executed_dtm EXECUTED_DATE_TIME'||chr(10)|| +' ,interval_msec MSECS'||chr(10)|| +' ,assertion'||chr(10)|| +' ,status'||chr(10)|| +' ,details'||chr(10)|| +' ,testcase'||chr(10)|| +' ,message'||chr(10)|| +' from wt_results'||chr(10)|| +' where test_run_id = :P0_TEST_RUN_ID'||chr(10)|| +' and testcase = :P0_TEST_CASE'; + +wwv_flow_api.create_page_plug ( + p_id=> 4982202570323168 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 6, + p_plug_name=> 'Test Case Results Details', + p_region_name=>'', + p_plug_template=> 4839831975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 20, + p_plug_display_column=> 1, + p_plug_display_point=> 'AFTER_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'DYNAMIC_QUERY', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_show_nulls_as => ' - ', + p_plug_display_condition_type => '', + p_pagination_display_position=>'BOTTOM_RIGHT', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'select result_seq SEQ'||chr(10)|| +' ,executed_dtm EXECUTED_DATE_TIME'||chr(10)|| +' ,interval_msec MSECS'||chr(10)|| +' ,assertion'||chr(10)|| +' ,status'||chr(10)|| +' ,details'||chr(10)|| +' ,testcase'||chr(10)|| +' ,message'||chr(10)|| +' from wt_results'||chr(10)|| +' where test_run_id = :P0_TEST_RUN_ID'||chr(10)|| +' and testcase = :P0_TEST_CASE'; + +wwv_flow_api.create_worksheet( + p_id=> 4982411530323169+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 6, + p_region_id=> 4982202570323168+wwv_flow_api.g_id_offset, + p_name=> 'Test Runner Results Details', + p_folder_id=> null, + p_alias=> '', + p_report_id_item=> '', + p_max_row_count=> '10000', + p_max_row_count_message=> 'This query returns more than #MAX_ROW_COUNT# rows, please filter your data to ensure complete results.', + p_no_data_found_message=> 'No data found.', + p_max_rows_per_page=>'', + p_search_button_label=>'', + p_page_items_to_submit=>'', + p_sort_asc_image=>'', + p_sort_asc_image_attr=>'', + p_sort_desc_image=>'', + p_sort_desc_image_attr=>'', + p_sql_query => a1, + p_status=>'AVAILABLE_FOR_OWNER', + p_allow_report_saving=>'Y', + p_allow_save_rpt_public=>'N', + p_allow_report_categories=>'N', + p_show_nulls_as=>'-', + p_pagination_display_pos=>'BOTTOM_RIGHT', + p_show_finder_drop_down=>'Y', + p_show_display_row_count=>'N', + p_show_search_bar=>'Y', + p_show_search_textbox=>'Y', + p_show_actions_menu=>'Y', + p_report_list_mode=>'TABS', + p_show_detail_link=>'N', + p_show_select_columns=>'Y', + p_show_rows_per_page=>'Y', + p_show_filter=>'Y', + p_show_sort=>'Y', + p_show_control_break=>'Y', + p_show_highlight=>'Y', + p_show_computation=>'Y', + p_show_aggregate=>'Y', + p_show_chart=>'Y', + p_show_group_by=>'Y', + p_show_notify=>'N', + p_show_calendar=>'N', + p_show_flashback=>'Y', + p_show_reset=>'Y', + p_show_download=>'Y', + p_show_help=>'Y', + p_download_formats=>'CSV:HTML:EMAIL', + p_allow_exclude_null_values=>'N', + p_allow_hide_extra_columns=>'N', + p_icon_view_enabled_yn=>'N', + p_icon_view_columns_per_row=>1, + p_detail_view_enabled_yn=>'N', + p_owner=>'WTP'); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 4983029951323173+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 6, + p_worksheet_id => 4982411530323169+wwv_flow_api.g_id_offset, + p_db_column_name =>'SEQ', + p_display_order =>1, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'J', + p_column_label =>'Seq', + p_report_label =>'Seq', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 4983107465323173+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 6, + p_worksheet_id => 4982411530323169+wwv_flow_api.g_id_offset, + p_db_column_name =>'EXECUTED_DATE_TIME', + p_display_order =>2, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'K', + p_column_label =>'Executed Date/Time', + p_report_label =>'Executed Date/Time', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'DATE', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'LEFT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 4983222398323174+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 6, + p_worksheet_id => 4982411530323169+wwv_flow_api.g_id_offset, + p_db_column_name =>'MSECS', + p_display_order =>3, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'L', + p_column_label =>'Msecs', + p_report_label =>'Msecs', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'NUMBER', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'RIGHT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 4982519401323172+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 6, + p_worksheet_id => 4982411530323169+wwv_flow_api.g_id_offset, + p_db_column_name =>'ASSERTION', + p_display_order =>4, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'E', + p_column_label =>'Assertion', + p_report_label =>'Assertion', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'STRING', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'LEFT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 4982626816323173+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 6, + p_worksheet_id => 4982411530323169+wwv_flow_api.g_id_offset, + p_db_column_name =>'STATUS', + p_display_order =>5, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'F', + p_column_label =>'Status', + p_report_label =>'Status', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'STRING', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'LEFT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 4982730180323173+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 6, + p_worksheet_id => 4982411530323169+wwv_flow_api.g_id_offset, + p_db_column_name =>'DETAILS', + p_display_order =>6, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'G', + p_column_label =>'Details', + p_report_label =>'Details', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'STRING', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'LEFT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 4982829265323173+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 6, + p_worksheet_id => 4982411530323169+wwv_flow_api.g_id_offset, + p_db_column_name =>'TESTCASE', + p_display_order =>7, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'H', + p_column_label =>'Testcase', + p_report_label =>'Testcase', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'STRING', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'LEFT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_column( + p_id => 4982913874323173+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 6, + p_worksheet_id => 4982411530323169+wwv_flow_api.g_id_offset, + p_db_column_name =>'MESSAGE', + p_display_order =>8, + p_group_id =>null+wwv_flow_api.g_id_offset, + p_column_identifier =>'I', + p_column_label =>'Message', + p_report_label =>'Message', + p_sync_form_label =>'Y', + p_display_in_default_rpt =>'Y', + p_is_sortable =>'Y', + p_allow_sorting =>'Y', + p_allow_filtering =>'Y', + p_allow_highlighting =>'Y', + p_allow_ctrl_breaks =>'Y', + p_allow_aggregations =>'Y', + p_allow_computations =>'Y', + p_allow_charting =>'Y', + p_allow_group_by =>'Y', + p_allow_hide =>'Y', + p_others_may_edit =>'Y', + p_others_may_view =>'Y', + p_column_type =>'STRING', + p_display_as =>'TEXT', + p_display_text_as =>'ESCAPE_SC', + p_heading_alignment =>'CENTER', + p_column_alignment =>'LEFT', + p_tz_dependent =>'N', + p_rpt_distinct_lov =>'Y', + p_rpt_show_filter_lov =>'D', + p_rpt_filter_date_ranges =>'ALL', + p_help_text =>''); +end; +/ +declare + rc1 varchar2(32767) := null; +begin +rc1:=rc1||'SEQ:MSECS:STATUS:TESTCASE:ASSERTION:MESSAGE:DETAILS'; + +wwv_flow_api.create_worksheet_rpt( + p_id => 4983313754323174+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 6, + p_worksheet_id => 4982411530323169+wwv_flow_api.g_id_offset, + p_session_id => null, + p_base_report_id => null+wwv_flow_api.g_id_offset, + p_application_user => 'APXWS_DEFAULT', + p_report_seq =>10, + p_report_alias =>'49834', + p_status =>'PUBLIC', + p_category_id =>null+wwv_flow_api.g_id_offset, + p_is_default =>'Y', + p_display_rows =>100000, + p_report_columns =>rc1, + p_sort_column_1 =>'SEQ', + p_sort_direction_1 =>'ASC', + p_flashback_enabled =>'N', + p_calendar_display_column =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_condition( + p_id => 4983615236323175+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 6, + p_worksheet_id => 4982411530323169+wwv_flow_api.g_id_offset, + p_report_id => 4983313754323174+wwv_flow_api.g_id_offset, + p_name =>'Highlight Errors', + p_condition_type =>'HIGHLIGHT', + p_allow_delete =>'Y', + p_column_name =>'STATUS', + p_operator =>'=', + p_expr =>'ERR', + p_condition_sql =>' (case when ("STATUS" = #APXWS_EXPR#) then #APXWS_HL_ID# end) ', + p_condition_display =>'#APXWS_COL_NAME# = ''ERR'' ', + p_enabled =>'Y', + p_highlight_sequence =>10, + p_row_bg_color =>'#FF5588', + p_column_format =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_condition( + p_id => 4983707104323175+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 6, + p_worksheet_id => 4982411530323169+wwv_flow_api.g_id_offset, + p_report_id => 4983313754323174+wwv_flow_api.g_id_offset, + p_name =>'Highlight Failures', + p_condition_type =>'HIGHLIGHT', + p_allow_delete =>'Y', + p_column_name =>'STATUS', + p_operator =>'=', + p_expr =>'FAIL', + p_condition_sql =>' (case when ("STATUS" = #APXWS_EXPR#) then #APXWS_HL_ID# end) ', + p_condition_display =>'#APXWS_COL_NAME# = ''FAIL'' ', + p_enabled =>'Y', + p_highlight_sequence =>10, + p_row_bg_color =>'#FFFF99', + p_column_format =>''); +end; +/ +begin +wwv_flow_api.create_worksheet_condition( + p_id => 4983512775323175+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 6, + p_worksheet_id => 4982411530323169+wwv_flow_api.g_id_offset, + p_report_id => 4983313754323174+wwv_flow_api.g_id_offset, + p_condition_type =>'FILTER', + p_allow_delete =>'Y', + p_column_name =>'STATUS', + p_operator =>'!=', + p_expr =>'PASS', + p_condition_sql =>'"STATUS" != #APXWS_EXPR#', + p_condition_display =>'#APXWS_COL_NAME# != ''PASS'' ', + p_enabled =>'Y', + p_column_format =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||'begin'||chr(10)|| +' for buff in (select error_message from wt_test_runs'||chr(10)|| +' where id = :P0_TEST_RUN_ID'||chr(10)|| +' and error_message is not null)'||chr(10)|| +' loop'||chr(10)|| +' htp.p(''Test Runner Error Message: '' ||'||chr(10)|| +' buff.error_message || ''
'');'||chr(10)|| +' end loop;'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' htp.p(''
'');'||chr(10)|| +' htp.p(''Test Results Details Search:'');'||chr(10)|| +'end;'||chr(10)|| +''; + +wwv_flow_api.create_page_plug ( + p_id=> 4983829548323176 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 6, + p_plug_name=> 'Test Run Error Message', + p_region_name=>'', + p_plug_template=> 4839831975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 10, + p_plug_display_column=> 1, + p_plug_display_point=> 'AFTER_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'PLSQL_PROCEDURE', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'QUERY_COLUMNS', + p_plug_query_num_rows => 15, + p_plug_query_num_rows_type => 'NEXT_PREVIOUS_LINKS', + p_plug_query_row_count_max => 500, + p_plug_query_show_nulls_as => ' - ', + p_plug_display_condition_type => '', + p_pagination_display_position=>'BOTTOM_RIGHT', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#CHART_REFRESH#'; + +wwv_flow_api.create_page_plug ( + p_id=> 4987121729323182 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 6, + p_plug_name=> 'Test Case Status', + p_region_name=>'', + p_plug_template=> 4839217975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 1, + p_plug_display_column=> 1, + p_plug_display_point=> 'BEFORE_BOX_BODY', + p_plug_source=> s, + p_plug_source_type=> 'FLASH_CHART5', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => '', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1 := null; +wwv_flow_api.create_flash_chart5( + p_id => 4987320221323183+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id => 6, + p_region_id => 4987121729323182+wwv_flow_api.g_id_offset, + p_default_chart_type =>'2DPie', + p_chart_title =>'', + p_chart_name =>'chart_4927915384997301', + p_chart_width =>300, + p_chart_height =>200, + p_chart_animation =>'N', + p_display_attr =>':H:::::Left::V:Y:None:::N:::Default', + p_dial_tick_attr =>':::::::::::', + p_gantt_attr =>'Y:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:30:15:5:Y:I:N:S:E', + p_map_attr =>'Orthographic:RegionBounds:REGION_NAME', + p_map_source =>'%', + p_margins =>':::', + p_omit_label_interval => null, + p_bgtype =>'Trans', + p_bgcolor1 =>'', + p_bgcolor2 =>'', + p_gradient_rotation =>null, + p_grid_bgtype =>'', + p_grid_bgcolor1 =>'', + p_grid_bgcolor2 =>'', + p_grid_gradient_rotation =>null, + p_color_scheme =>'0', + p_custom_colors =>'#99FF99,#FFFF99,#FF6699', + p_map_undef_color_scheme =>'', + p_map_undef_custom_colors =>'', + p_x_axis_title =>'', + p_x_axis_min =>null, + p_x_axis_max =>null, + p_x_axis_decimal_place =>null, + p_x_axis_prefix =>'', + p_x_axis_postfix =>'', + p_x_axis_label_rotation =>'', + p_x_axis_label_font =>'::', + p_x_axis_major_interval =>null, + p_x_axis_minor_interval =>null, + p_y_axis_title =>'', + p_y_axis_min =>null, + p_y_axis_max =>null, + p_y_axis_decimal_place =>null, + p_y_axis_prefix =>'', + p_y_axis_postfix =>'', + p_y_axis_label_rotation =>'', + p_y_axis_label_font =>'::', + p_y_axis_major_interval =>null, + p_y_axis_minor_interval =>null, + p_async_update =>'N', + p_async_time =>null, + p_legend_title =>'', + p_legend_title_font =>'', + p_names_font => null, + p_names_rotation => null, + p_values_font =>'Arial:10:#000000', + p_values_rotation =>null, + p_values_prefix =>'', + p_values_postfix =>'', + p_hints_font =>'Tahoma:10:#000000', + p_legend_font =>'Arial:10:#000000', + p_grid_labels_font =>'', + p_chart_title_font =>'Tahoma:14:#000000', + p_x_axis_title_font =>'Tahoma:14:', + p_x_axis_title_rotation =>'', + p_y_axis_title_font =>'Tahoma:14:', + p_y_axis_title_rotation =>'', + p_gauge_labels_font =>'Tahoma:10:', + p_use_chart_xml =>'N', + p_chart_xml => a1); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'with q1 as ('||chr(10)|| +'select NULL LINK'||chr(10)|| +' ,''PASS'' LABEL'||chr(10)|| +' ,sum(res.passes) VALUE'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_testcase_runs res'||chr(10)|| +' on res.test_run_id = run.id'||chr(10)|| +' and res.testcase = :P0_TEST_CASE'||chr(10)|| +' where id = :P0_TEST_RUN_ID'||chr(10)|| +'union all'||chr(10)|| +'select NULL LINK'||chr(10)|| +' ,''FAIL'' LABEL'||chr(10)|| +' ,sum(res.failures) VALUE'||chr(10)|| +' from wt_test_runs'; + +a1:=a1||' run'||chr(10)|| +' join wt_testcase_runs res'||chr(10)|| +' on res.test_run_id = run.id'||chr(10)|| +' and res.testcase = :P0_TEST_CASE'||chr(10)|| +' where id = :P0_TEST_RUN_ID'||chr(10)|| +'union all'||chr(10)|| +'select NULL LINK'||chr(10)|| +' ,''ERR'' LABEL'||chr(10)|| +' ,sum(res.errors) VALUE'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_testcase_runs res'||chr(10)|| +' on res.test_run_id = run.id'||chr(10)|| +' and res.testcase = :P0_TEST_CASE'||chr(10)|| +''; + +a1:=a1||' where id = :P0_TEST_RUN_ID'||chr(10)|| +')'||chr(10)|| +'select link, label, value'||chr(10)|| +' from q1'||chr(10)|| +' order by label desc'; + +wwv_flow_api.create_flash_chart5_series( + p_id => 4987425886323183+wwv_flow_api.g_id_offset, + p_chart_id => 4987320221323183+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_series_seq =>10, + p_series_name =>'Series 1', + p_series_query => a1, + p_series_type =>'', + p_series_query_type =>'SQL_QUERY', + p_series_query_parse_opt =>'PARSE_CHART_QUERY', + p_series_query_no_data_found=>'No data found.', + p_series_query_row_count_max=>15, + p_action_link =>'', + p_show_action_link =>'N', + p_action_link_checksum_type =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#CHART_REFRESH#'; + +wwv_flow_api.create_page_plug ( + p_id=> 4987511974323183 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 6, + p_plug_name=> 'Test Case Status Trend', + p_region_name=>'', + p_plug_template=> 4839217975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 21, + p_plug_display_column=> 1, + p_plug_display_point=> 'BEFORE_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'FLASH_CHART5', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => 'PLSQL_EXPRESSION', + p_plug_display_when_condition => ':P6_SHOW_TREND=''Y''', + p_plug_display_when_cond2=>'Y', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1 := null; +wwv_flow_api.create_flash_chart5( + p_id => 4987702388323183+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id => 6, + p_region_id => 4987511974323183+wwv_flow_api.g_id_offset, + p_default_chart_type =>'Stacked2DColumn', + p_chart_title =>'', + p_chart_name =>'chart_4932831378476124', + p_chart_width =>300, + p_chart_height =>200, + p_chart_animation =>'N', + p_display_attr =>':H:N::Y:N:Left::V:Y:Circle:::N:::Default', + p_dial_tick_attr =>':::::::::::', + p_gantt_attr =>'Y:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:30:15:5:Y:I:N:S:E', + p_map_attr =>'Orthographic:RegionBounds:REGION_NAME', + p_map_source =>'%', + p_margins =>':::', + p_omit_label_interval => null, + p_bgtype =>'Trans', + p_bgcolor1 =>'', + p_bgcolor2 =>'', + p_gradient_rotation =>null, + p_grid_bgtype =>'', + p_grid_bgcolor1 =>'', + p_grid_bgcolor2 =>'', + p_grid_gradient_rotation =>null, + p_color_scheme =>'0', + p_custom_colors =>'#99FF99,#FFFF99,#FF6699', + p_map_undef_color_scheme =>'', + p_map_undef_custom_colors =>'', + p_x_axis_title =>'Test Run ID', + p_x_axis_min =>null, + p_x_axis_max =>null, + p_x_axis_decimal_place =>null, + p_x_axis_prefix =>'', + p_x_axis_postfix =>'', + p_x_axis_label_rotation =>'', + p_x_axis_label_font =>'Tahoma:10:#000000', + p_x_axis_major_interval =>null, + p_x_axis_minor_interval =>null, + p_y_axis_title =>'', + p_y_axis_min =>0, + p_y_axis_max =>null, + p_y_axis_decimal_place =>null, + p_y_axis_prefix =>'', + p_y_axis_postfix =>'', + p_y_axis_label_rotation =>'', + p_y_axis_label_font =>'Tahoma:10:#000000', + p_y_axis_major_interval =>null, + p_y_axis_minor_interval =>null, + p_async_update =>'N', + p_async_time =>null, + p_legend_title =>'', + p_legend_title_font =>'', + p_names_font => null, + p_names_rotation => null, + p_values_font =>'Arial:10:#000000', + p_values_rotation =>null, + p_values_prefix =>'', + p_values_postfix =>'', + p_hints_font =>'Tahoma:10:#000000', + p_legend_font =>'Arial:10:#000000', + p_grid_labels_font =>'', + p_chart_title_font =>'Tahoma:14:#000000', + p_x_axis_title_font =>'Tahoma:14:#000000', + p_x_axis_title_rotation =>'', + p_y_axis_title_font =>'Tahoma:14:#000000', + p_y_axis_title_rotation =>'', + p_gauge_labels_font =>'Tahoma:10:', + p_use_chart_xml =>'N', + p_chart_xml => a1); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'with q1 as ('||chr(10)|| +'select res.test_run_id LINK'||chr(10)|| +' ,res.test_run_id LABEL'||chr(10)|| +' ,res.passes PASS'||chr(10)|| +' ,res.failures FAIL'||chr(10)|| +' ,res.errors ERR'||chr(10)|| +' ,rownum RNUM'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_testcase_runs res'||chr(10)|| +' on res.test_run_id = run.id'||chr(10)|| +' '; + +a1:=a1||' and res.testcase = :P0_TEST_CASE'||chr(10)|| +' where run.runner_owner = :P0_TEST_OWNER'||chr(10)|| +' and run.runner_name = :P0_TEST_RUNNER'||chr(10)|| +' order by run.id'||chr(10)|| +'), q2 as ('||chr(10)|| +'select count(*) num_rows from q1'||chr(10)|| +')'||chr(10)|| +'select link'||chr(10)|| +' ,label'||chr(10)|| +' ,pass'||chr(10)|| +' ,fail'||chr(10)|| +' ,err'||chr(10)|| +' from q1'||chr(10)|| +' where rnum > (select num_rows from q2) - 10'; + +wwv_flow_api.create_flash_chart5_series( + p_id => 4988016280323183+wwv_flow_api.g_id_offset, + p_chart_id => 4987702388323183+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_series_seq =>10, + p_series_name =>'Series 1', + p_series_query => a1, + p_series_type =>'Bar', + p_series_query_type =>'SQL_QUERY', + p_series_query_parse_opt =>'PARSE_CHART_QUERY', + p_series_query_no_data_found=>'No data found.', + p_series_query_row_count_max=>15, + p_action_link =>'f?p=&APP_ID.:6:&SESSION.::&DEBUG.::P0_TEST_RUN_ID:#LINK#', + p_show_action_link =>'C', + p_action_link_checksum_type =>''); +end; +/ +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s:=s||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#CHART_REFRESH#'; + +wwv_flow_api.create_page_plug ( + p_id=> 4988130280323184 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 6, + p_plug_name=> 'Test Case Duration Trend', + p_region_name=>'', + p_plug_template=> 4839217975414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 22, + p_plug_display_column=> 2, + p_plug_display_point=> 'BEFORE_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'FLASH_CHART5', + p_translate_title=> 'Y', + p_plug_display_error_message=> '#SQLERRM#', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => 'PLSQL_EXPRESSION', + p_plug_display_when_condition => ':P6_SHOW_TREND=''Y''', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1 := null; +wwv_flow_api.create_flash_chart5( + p_id => 4988311601323184+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id => 6, + p_region_id => 4988130280323184+wwv_flow_api.g_id_offset, + p_default_chart_type =>'2DColumn', + p_chart_title =>'', + p_chart_name =>'chart_4946607806544261', + p_chart_width =>300, + p_chart_height =>200, + p_chart_animation =>'N', + p_display_attr =>':H:N::Y:N:N::V:Y:None:::N:::Default', + p_dial_tick_attr =>':::::::::::', + p_gantt_attr =>'Y:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:Rhomb:Rhomb:Full:30:15:5:Y:I:N:S:E', + p_map_attr =>'Orthographic:RegionBounds:REGION_NAME', + p_map_source =>'', + p_margins =>':::', + p_omit_label_interval => null, + p_bgtype =>'Trans', + p_bgcolor1 =>'', + p_bgcolor2 =>'', + p_gradient_rotation =>null, + p_grid_bgtype =>'', + p_grid_bgcolor1 =>'', + p_grid_bgcolor2 =>'', + p_grid_gradient_rotation =>null, + p_color_scheme =>'6', + p_custom_colors =>'', + p_map_undef_color_scheme =>'', + p_map_undef_custom_colors =>'', + p_x_axis_title =>'Test Run ID', + p_x_axis_min =>null, + p_x_axis_max =>null, + p_x_axis_decimal_place =>null, + p_x_axis_prefix =>'', + p_x_axis_postfix =>'', + p_x_axis_label_rotation =>'', + p_x_axis_label_font =>'Tahoma:10:#000000', + p_x_axis_major_interval =>null, + p_x_axis_minor_interval =>null, + p_y_axis_title =>'Milliseconds', + p_y_axis_min =>0, + p_y_axis_max =>null, + p_y_axis_decimal_place =>null, + p_y_axis_prefix =>'', + p_y_axis_postfix =>'', + p_y_axis_label_rotation =>'', + p_y_axis_label_font =>'Tahoma:10:#000000', + p_y_axis_major_interval =>null, + p_y_axis_minor_interval =>null, + p_async_update =>'N', + p_async_time =>null, + p_legend_title =>'', + p_legend_title_font =>'', + p_names_font => null, + p_names_rotation => null, + p_values_font =>'Arial:10:#000000', + p_values_rotation =>null, + p_values_prefix =>'', + p_values_postfix =>'', + p_hints_font =>'Tahoma:10:#000000', + p_legend_font =>'Arial:10:#000000', + p_grid_labels_font =>'', + p_chart_title_font =>'Tahoma:14:#000000', + p_x_axis_title_font =>'Tahoma:14:#000000', + p_x_axis_title_rotation =>'', + p_y_axis_title_font =>'Tahoma:14:#000000', + p_y_axis_title_rotation =>'', + p_gauge_labels_font =>'Tahoma:10:', + p_use_chart_xml =>'N', + p_chart_xml => a1); +end; +/ +declare + a1 varchar2(32767) := null; +begin +a1:=a1||'with q1 as ('||chr(10)|| +'select res.test_run_id LINK'||chr(10)|| +' ,res.test_run_id LABEL'||chr(10)|| +' ,res.tot_interval_msec MILLISECONDS'||chr(10)|| +' ,rownum RNUM'||chr(10)|| +' from wt_test_runs run'||chr(10)|| +' join wt_testcase_runs res'||chr(10)|| +' on res.test_run_id = run.id'||chr(10)|| +' and res.testcase = :P0_TEST_CASE'||chr(10)|| +' where run.runner_owner = :P0_TEST_OWNER'||chr(10)|| +' a'; + +a1:=a1||'nd run.runner_name = :P0_TEST_RUNNER'||chr(10)|| +' order by id'||chr(10)|| +'), q2 as ('||chr(10)|| +'select count(*) num_rows from q1'||chr(10)|| +')'||chr(10)|| +'select link'||chr(10)|| +' ,label'||chr(10)|| +' ,milliseconds'||chr(10)|| +' from q1'||chr(10)|| +' where rnum > (select num_rows from q2) - 10'; + +wwv_flow_api.create_flash_chart5_series( + p_id => 4988419037323184+wwv_flow_api.g_id_offset, + p_chart_id => 4988311601323184+wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_series_seq =>10, + p_series_name =>'Series 1', + p_series_query => a1, + p_series_type =>'Bar', + p_series_query_type =>'SQL_QUERY', + p_series_query_parse_opt =>'PARSE_CHART_QUERY', + p_series_query_no_data_found=>'No data found.', + p_series_query_row_count_max=>15, + p_action_link =>'f?p=&APP_ID.:6:&SESSION.::&DEBUG.::P0_TEST_RUN_ID:#LINK#', + p_show_action_link =>'C', + p_action_link_checksum_type =>''); +end; +/ + +begin + +null; + +end; +/ + + +begin + +wwv_flow_api.create_page_branch( + p_id=>4990208512323191 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 6, + p_branch_action=> 'f?p=&APP_ID.:6:&SESSION.::&DEBUG.:::&success_msg=#SUCCESS_MSG#', + p_branch_point=> 'AFTER_PROCESSING', + p_branch_type=> 'REDIRECT_URL', + p_branch_sequence=> 99, + p_save_state_before_branch_yn=>'Y', + p_branch_comment=> ''); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>4979721568323165 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 6, + p_name=>'P6_SHOW_TREND', + p_data_type=> 'VARCHAR', + p_is_required=> true, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 11, + p_item_plug_id => 4978906587323161+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> 'YES', + p_item_default_type=> 'STATIC_TEXT_WITH_SUBSTITUTIONS', + p_prompt=>'Show Trend:', + p_source=>'N', + p_source_type=> 'STATIC', + p_display_as=> 'NATIVE_RADIOGROUP', + p_named_lov=> 'Y_OR_N', + p_lov=> '.'||to_char(4923728354614299 + wwv_flow_api.g_id_offset)||'.', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> 30, + p_cMaxlength=> 4000, + p_cHeight=> 1, + p_cAttributes=> 'nowrap="nowrap"', + p_begin_on_new_line=> 'YES', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'RIGHT', + p_field_alignment=> 'LEFT-CENTER', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_lov_display_extra=>'YES', + p_protection_level => 'N', + p_escape_on_http_output => 'Y', + p_attribute_01 => '2', + p_attribute_02 => 'SUBMIT', + p_attribute_03 => 'Y', + p_show_quick_picks=>'N', + p_item_comment => ''); + + +end; +/ + + +begin + +wwv_flow_api.create_page_computation( + p_id=> 5113216840349039 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 6, + p_computation_sequence => 20, + p_computation_item=> 'P0_DISPLAY', + p_computation_point=> 'BEFORE_HEADER', + p_computation_type=> 'STATIC_ASSIGNMENT', + p_computation_processed=> 'REPLACE_EXISTING', + p_computation=> 'Y', + p_compute_when => '', + p_compute_when_type=>''); + +null; + +end; +/ + + +begin + +declare + p varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +p:=p||'reset_pagination'; + +wwv_flow_api.create_page_process( + p_id => 4989314029323189 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id => 6, + p_process_sequence=> 10, + p_process_point=> 'AFTER_SUBMIT', + p_process_type=> 'RESET_PAGINATION', + p_process_name=> 'Reset Pagination', + p_process_sql_clob => p, + p_process_error_message=> 'Unable to reset pagination.', + p_process_when=>'GO,P6_SEARCH,RESET', + p_process_when_type=>'REQUEST_IN_CONDITION', + p_process_success_message=> '', + p_process_is_stateful_y_n=>'N', + p_process_comment=>''); +end; +null; + +end; +/ + + +begin + +declare + p varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +p:=p||'P6_SEARCH,P6_ROWS'; + +wwv_flow_api.create_page_process( + p_id => 4989512951323189 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id => 6, + p_process_sequence=> 20, + p_process_point=> 'AFTER_SUBMIT', + p_process_type=> 'CLEAR_CACHE_FOR_ITEMS', + p_process_name=> 'Reset report search', + p_process_sql_clob => p, + p_process_error_message=> 'Unable to clear cache.', + p_process_when_button_id=>4985222849323178 + wwv_flow_api.g_id_offset, + p_process_success_message=> '', + p_process_is_stateful_y_n=>'N', + p_process_comment=>''); +end; +null; + +end; +/ + + +begin + +--------------------------------------- +-- ...updatable report columns for page 6 +-- + +begin + +null; +end; +null; + +end; +/ + + +--application/pages/page_00101 +prompt ...PAGE 101: Login +-- + +begin + +wwv_flow_api.create_page ( + p_flow_id => wwv_flow.g_flow_id + ,p_id => 101 + ,p_name => 'Login' + ,p_alias => 'LOGIN' + ,p_step_title => 'Login' + ,p_step_sub_title_type => 'TEXT_WITH_SUBSTITUTIONS' + ,p_first_item => 'AUTO_FIRST_ITEM' + ,p_include_apex_css_js_yn => 'Y' + ,p_autocomplete_on_off => 'OFF' + ,p_step_template => 4836711590414909 + wwv_flow_api.g_id_offset + ,p_page_is_public_y_n => 'N' + ,p_cache_page_yn => 'N' + ,p_last_updated_by => 'WTP' + ,p_last_upd_yyyymmddhh24miss => '20180828203310' + ); +null; + +end; +/ + +declare + s varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +s := null; +wwv_flow_api.create_page_plug ( + p_id=> 4845720626414921 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_page_id=> 101, + p_plug_name=> 'wtPLSQL - White Box Testing for Oracle''s PL/SQL', + p_region_name=>'', + p_plug_template=> 4839304121414912+ wwv_flow_api.g_id_offset, + p_plug_display_sequence=> 10, + p_plug_display_column=> 1, + p_plug_display_point=> 'AFTER_SHOW_ITEMS', + p_plug_source=> s, + p_plug_source_type=> 'STATIC_TEXT', + p_translate_title=> 'Y', + p_plug_query_row_template=> 1, + p_plug_query_headings_type=> 'COLON_DELMITED_LIST', + p_plug_query_row_count_max => 500, + p_plug_display_condition_type => '', + p_plug_customized=>'0', + p_plug_caching=> 'NOT_CACHED', + p_plug_comment=> ''); +end; +/ + +begin + +null; + +end; +/ + + +begin + +null; + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>4845806651414922 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 101, + p_name=>'P101_USERNAME', + p_data_type=> '', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 10, + p_item_plug_id => 4845720626414921+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> '', + p_prompt=>'Username', + p_display_as=> 'NATIVE_TEXT_FIELD', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> 40, + p_cMaxlength=> 100, + p_cHeight=> null, + p_begin_on_new_line=> 'YES', + p_begin_on_new_field=> 'YES', + p_colspan=> 2, + p_rowspan=> 1, + p_label_alignment=> 'RIGHT', + p_field_alignment=> 'LEFT', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_attribute_01 => 'N', + p_attribute_02 => 'N', + p_attribute_03 => 'N', + p_item_comment => ''); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>4845920534414922 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 101, + p_name=>'P101_PASSWORD', + p_data_type=> '', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 20, + p_item_plug_id => 4845720626414921+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> '', + p_prompt=>'Password', + p_display_as=> 'NATIVE_PASSWORD', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> 40, + p_cMaxlength=> 100, + p_cHeight=> null, + p_begin_on_new_line=> 'YES', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'RIGHT', + p_field_alignment=> 'LEFT', + p_field_template=> 4843803724414915+wwv_flow_api.g_id_offset, + p_is_persistent=> 'Y', + p_attribute_01 => 'Y', + p_attribute_02 => 'Y', + p_item_comment => ''); + + +end; +/ + +declare + h varchar2(32767) := null; +begin +wwv_flow_api.create_page_item( + p_id=>4846006439414922 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 101, + p_name=>'P101_LOGIN', + p_data_type=> '', + p_is_required=> false, + p_accept_processing=> 'REPLACE_EXISTING', + p_item_sequence=> 30, + p_item_plug_id => 4845720626414921+wwv_flow_api.g_id_offset, + p_use_cache_before_default=> '', + p_item_default=> 'Login', + p_prompt=>'Login', + p_source=>'LOGIN', + p_source_type=> 'STATIC', + p_display_as=> 'BUTTON', + p_lov_display_null=> 'NO', + p_lov_translated=> 'N', + p_cSize=> null, + p_cMaxlength=> null, + p_cHeight=> null, + p_tag_attributes => 'template:'||to_char(4838226535414911 + wwv_flow_api.g_id_offset), + p_begin_on_new_line=> 'NO', + p_begin_on_new_field=> 'YES', + p_colspan=> 1, + p_rowspan=> 1, + p_label_alignment=> 'LEFT', + p_field_alignment=> 'LEFT', + p_is_persistent=> 'Y', + p_item_comment => ''); + + +end; +/ + + +begin + +wwv_flow_api.create_page_computation( + p_id=> 5113529438362167 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id=> 101, + p_computation_sequence => 30, + p_computation_item=> 'P0_DISPLAY', + p_computation_point=> 'BEFORE_HEADER', + p_computation_type=> 'STATIC_ASSIGNMENT', + p_computation_processed=> 'REPLACE_EXISTING', + p_computation=> 'N', + p_compute_when => '', + p_compute_when_type=>''); + +null; + +end; +/ + + +begin + +declare + p varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +p:=p||'begin'||chr(10)|| +'owa_util.mime_header(''text/html'', FALSE);'||chr(10)|| +'owa_cookie.send('||chr(10)|| +' name=>''LOGIN_USERNAME_COOKIE'','||chr(10)|| +' value=>lower(:P101_USERNAME));'||chr(10)|| +'exception when others then null;'||chr(10)|| +'end;'; + +wwv_flow_api.create_page_process( + p_id => 4846217300414922 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id => 101, + p_process_sequence=> 10, + p_process_point=> 'AFTER_SUBMIT', + p_process_type=> 'PLSQL', + p_process_name=> 'Set Username Cookie', + p_process_sql_clob => p, + p_process_error_message=> '', + p_process_success_message=> '', + p_process_is_stateful_y_n=>'N', + p_process_comment=>''); +end; +null; + +end; +/ + + +begin + +declare + p varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +p:=p||'wwv_flow_custom_auth_std.login('||chr(10)|| +' P_UNAME => :P101_USERNAME,'||chr(10)|| +' P_PASSWORD => :P101_PASSWORD,'||chr(10)|| +' P_SESSION_ID => v(''APP_SESSION''),'||chr(10)|| +' P_FLOW_PAGE => :APP_ID||'':1'''||chr(10)|| +' );'; + +wwv_flow_api.create_page_process( + p_id => 4846117403414922 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id => 101, + p_process_sequence=> 20, + p_process_point=> 'AFTER_SUBMIT', + p_process_type=> 'PLSQL', + p_process_name=> 'Login', + p_process_sql_clob => p, + p_process_error_message=> '', + p_process_success_message=> '', + p_process_is_stateful_y_n=>'N', + p_process_comment=>''); +end; +null; + +end; +/ + + +begin + +declare + p varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +p:=p||'101'; + +wwv_flow_api.create_page_process( + p_id => 4846420685414923 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id => 101, + p_process_sequence=> 30, + p_process_point=> 'AFTER_SUBMIT', + p_process_type=> 'CLEAR_CACHE_FOR_PAGES', + p_process_name=> 'Clear Page(s) Cache', + p_process_sql_clob => p, + p_process_error_message=> '', + p_process_success_message=> '', + p_process_is_stateful_y_n=>'N', + p_process_comment=>''); +end; +null; + +end; +/ + + +begin + +declare + p varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +p:=p||'begin'||chr(10)|| +' :P0_TEST_OWNER := :APP_USER;'||chr(10)|| +'end;'; + +wwv_flow_api.create_page_process( + p_id => 5166510581225261 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id => 101, + p_process_sequence=> 40, + p_process_point=> 'AFTER_SUBMIT', + p_process_type=> 'PLSQL', + p_process_name=> 'Set Test Owner', + p_process_sql_clob => p, + p_process_error_message=> '', + p_process_success_message=> '', + p_process_is_stateful_y_n=>'N', + p_process_comment=>''); +end; +null; + +end; +/ + + +begin + +declare + p varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +p:=p||'declare'||chr(10)|| +' v varchar2(255) := null;'||chr(10)|| +' c owa_cookie.cookie;'||chr(10)|| +'begin'||chr(10)|| +' c := owa_cookie.get(''LOGIN_USERNAME_COOKIE'');'||chr(10)|| +' :P101_USERNAME := c.vals(1);'||chr(10)|| +'exception when others then null;'||chr(10)|| +'end;'; + +wwv_flow_api.create_page_process( + p_id => 4846327512414923 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_flow_step_id => 101, + p_process_sequence=> 10, + p_process_point=> 'BEFORE_HEADER', + p_process_type=> 'PLSQL', + p_process_name=> 'Get Username Cookie', + p_process_sql_clob => p, + p_process_error_message=> '', + p_process_success_message=> '', + p_process_is_stateful_y_n=>'N', + p_process_comment=>''); +end; +null; + +end; +/ + + +begin + +--------------------------------------- +-- ...updatable report columns for page 101 +-- + +begin + +null; +end; +null; + +end; +/ + +prompt ...lists +-- +--application/shared_components/navigation/breadcrumbs +prompt ...breadcrumbs +-- + +begin + +wwv_flow_api.create_menu ( + p_id=> 4846524976414923 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> ' Breadcrumb'); + +wwv_flow_api.create_menu_option ( + p_id=>4847624895414926 + wwv_flow_api.g_id_offset, + p_menu_id=>4846524976414923 + wwv_flow_api.g_id_offset, + p_parent_id=>0, + p_option_sequence=>20, + p_short_name=>'Run Test', + p_long_name=>'', + p_link=>'f?p=700:2:&SESSION.', + p_page_id=>2, + p_also_current_for_pages=> ''); + +wwv_flow_api.create_menu_option ( + p_id=>4848215650414926 + wwv_flow_api.g_id_offset, + p_menu_id=>4846524976414923 + wwv_flow_api.g_id_offset, + p_parent_id=>0, + p_option_sequence=>30, + p_short_name=>'Test Runner', + p_long_name=>'', + p_link=>'f?p=700:3:&SESSION.', + p_page_id=>3, + p_also_current_for_pages=> ''); + +null; + +end; +/ + +prompt ...page templates for application: 700 +-- +--application/shared_components/user_interface/templates/page/login +prompt ......Page template 4836711590414909 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +c1:=c1||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +' #TITLE#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' #HEAD#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#FORM_OPEN#'||chr(10)|| +''; + +c2:=c2||'#FORM_CLOSE#'||chr(10)|| +''||chr(10)|| +''; + +c3:=c3||'
'||chr(10)|| +'
#SUCCESS_MESSAGE##NOTIFICATION_MESSAGE##GLOBAL_NOTIFICATION#
'||chr(10)|| +'
#REGION_POSITION_02##BOX_BODY##REGION_POSITION_03#
'||chr(10)|| +'
'||chr(10)|| +''; + +wwv_flow_api.create_template( + p_id=> 4836711590414909 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> 'Login', + p_body_title=> '', + p_header_template=> c1, + p_box=> c3, + p_footer_template=> c2, + p_success_message=> '
'||chr(10)|| +' '||chr(10)|| +' #SUCCESS_MESSAGE#'||chr(10)|| +'
', + p_current_tab=> '', + p_current_tab_font_attr=> '', + p_non_current_tab=> '', + p_non_current_tab_font_attr => '', + p_top_current_tab=> '', + p_top_current_tab_font_attr => '', + p_top_non_curr_tab=> '', + p_top_non_curr_tab_font_attr=> '', + p_current_image_tab=> '', + p_non_current_image_tab=> '', + p_notification_message=> '
'||chr(10)|| +' #MESSAGE#'||chr(10)|| +'
', + p_navigation_bar=> '#BAR_BODY#', + p_navbar_entry=> '
#TEXT#
', + p_app_tab_before_tabs=>'', + p_app_tab_current_tab=>'', + p_app_tab_non_current_tab=>'', + p_app_tab_after_tabs=>'', + p_region_table_cattributes=> ' summary="" cellpadding="0" border="0" cellspacing="0"', + p_theme_id => 7, + p_theme_class_id => 6, + p_translate_this_template => 'N', + p_template_comment => '18'); +end; + +null; + +end; +/ + +--application/shared_components/user_interface/templates/page/no_tabs_left_sidebar_fixed_width_div_based +prompt ......Page template 4836803791414910 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +c1:=c1||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +' #TITLE#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' #HEAD#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#FORM_OPEN#'||chr(10)|| +''; + +c2:=c2||''||chr(10)|| +'#FORM_CLOSE#'||chr(10)|| +''||chr(10)|| +''; + +c3:=c3||''||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'  '||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
#REGION_POSITION_01##REGION_POSITION_04#
'||chr(10)|| +'
#SUCCESS_MESSAGE##NOTIFICATION_MESSAGE##GLOBAL_NOTIFICATION#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +'
'||chr(10)|| +' #BOX_BODY##REGION_POSITION_03#'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'; + +wwv_flow_api.create_template( + p_id=> 4836803791414910 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> 'No Tabs - Left Sidebar (fixed-width / DIV based)', + p_body_title=> '', + p_header_template=> c1, + p_box=> c3, + p_footer_template=> c2, + p_success_message=> '
'||chr(10)|| +' '||chr(10)|| +' #SUCCESS_MESSAGE#'||chr(10)|| +'
', + p_current_tab=> '', + p_current_tab_font_attr=> '', + p_non_current_tab=> '', + p_non_current_tab_font_attr => '', + p_top_current_tab=> '', + p_top_current_tab_font_attr => '', + p_top_non_curr_tab=> '', + p_top_non_curr_tab_font_attr=> '', + p_current_image_tab=> '', + p_non_current_image_tab=> '', + p_notification_message=> '
'||chr(10)|| +' #MESSAGE#'||chr(10)|| +'
', + p_navigation_bar=> '#BAR_BODY#', + p_navbar_entry=> '
#TEXT#
', + p_app_tab_before_tabs=>'', + p_app_tab_current_tab=>'', + p_app_tab_non_current_tab=>'', + p_app_tab_after_tabs=>'', + p_region_table_cattributes=> 'summary="" cellpadding="0" border="0" cellspacing="0" width="100%"', + p_sidebar_def_reg_pos => 'REGION_POSITION_02', + p_breadcrumb_def_reg_pos => 'REGION_POSITION_01', + p_theme_id => 7, + p_theme_class_id => 17, + p_translate_this_template => 'N', + p_template_comment => ''); +end; + +null; + +end; +/ + +--application/shared_components/user_interface/templates/page/no_tabs_left_and_right_sidebar_fixed_width_div_left_and_optional_table_based_right +prompt ......Page template 4836929045414910 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +c1:=c1||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +' #TITLE#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' #HEAD#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#FORM_OPEN#'||chr(10)|| +''; + +c2:=c2||''||chr(10)|| +'#FORM_CLOSE#'||chr(10)|| +''||chr(10)|| +''; + +c3:=c3||''||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'  '||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
#REGION_POSITION_01##REGION_POSITION_04#
'||chr(10)|| +'
#SUCCESS_MESSAGE##NOTIFICATION_MESSAGE##GLOBAL_NOTIFICATION#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +'
#BOX_BODY##REGION_POSITION_03#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'; + +wwv_flow_api.create_template( + p_id=> 4836929045414910 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> 'No Tabs - Left and Right Sidebar (fixed-width / DIV left and optional table-based right)', + p_body_title=> '', + p_header_template=> c1, + p_box=> c3, + p_footer_template=> c2, + p_success_message=> '
'||chr(10)|| +' '||chr(10)|| +' #SUCCESS_MESSAGE#'||chr(10)|| +'
', + p_current_tab=> '', + p_current_tab_font_attr=> '', + p_non_current_tab=> '', + p_non_current_tab_font_attr => '', + p_top_current_tab=> '', + p_top_current_tab_font_attr => '', + p_top_non_curr_tab=> '', + p_top_non_curr_tab_font_attr=> '', + p_current_image_tab=> '', + p_non_current_image_tab=> '', + p_notification_message=> '
'||chr(10)|| +' #MESSAGE#'||chr(10)|| +'
', + p_navigation_bar=> '#BAR_BODY#', + p_navbar_entry=> '
#TEXT#
', + p_app_tab_before_tabs=>'', + p_app_tab_current_tab=>'', + p_app_tab_non_current_tab=>'', + p_app_tab_after_tabs=>'', + p_region_table_cattributes=> 'summary="" cellpadding="0" border="0" cellspacing="0" width="100%"', + p_sidebar_def_reg_pos => 'REGION_POSITION_02', + p_breadcrumb_def_reg_pos => 'REGION_POSITION_01', + p_theme_id => 7, + p_theme_class_id => 17, + p_translate_this_template => 'N', + p_template_comment => ''); +end; + +null; + +end; +/ + +--application/shared_components/user_interface/templates/page/no_tabs_right_sidebar_fixed_width_div_based +prompt ......Page template 4837019193414910 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +c1:=c1||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +' #TITLE#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' #HEAD#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#FORM_OPEN#'||chr(10)|| +''; + +c2:=c2||''||chr(10)|| +'#FORM_CLOSE#'||chr(10)|| +''||chr(10)|| +''; + +c3:=c3||''||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'  '||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
#REGION_POSITION_01##REGION_POSITION_04#
'||chr(10)|| +'
#SUCCESS_MESSAGE##NOTIFICATION_MESSAGE##GLOBAL_NOTIFICATION#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +'
#REGION_POSITION_02##BOX_BODY#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +''; + +wwv_flow_api.create_template( + p_id=> 4837019193414910 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> 'No Tabs - Right Sidebar (fixed-width / DIV based)', + p_body_title=> '', + p_header_template=> c1, + p_box=> c3, + p_footer_template=> c2, + p_success_message=> '
'||chr(10)|| +' '||chr(10)|| +' #SUCCESS_MESSAGE#'||chr(10)|| +'
', + p_current_tab=> '', + p_current_tab_font_attr=> '', + p_non_current_tab=> '', + p_non_current_tab_font_attr => '', + p_top_current_tab=> '', + p_top_current_tab_font_attr => '', + p_top_non_curr_tab=> '', + p_top_non_curr_tab_font_attr=> '', + p_current_image_tab=> '', + p_non_current_image_tab=> '', + p_notification_message=> '
'||chr(10)|| +' #MESSAGE#'||chr(10)|| +'
', + p_navigation_bar=> '#BAR_BODY#', + p_navbar_entry=> '
#TEXT#
', + p_app_tab_before_tabs=>'', + p_app_tab_current_tab=>'', + p_app_tab_non_current_tab=>'', + p_app_tab_after_tabs=>'', + p_region_table_cattributes=> ' summary="" cellpadding="0" border="0" cellspacing="0" width="100%"', + p_sidebar_def_reg_pos => 'REGION_POSITION_02', + p_breadcrumb_def_reg_pos => 'REGION_POSITION_01', + p_theme_id => 7, + p_theme_class_id => 3, + p_translate_this_template => 'N', + p_template_comment => ''); +end; + +null; + +end; +/ + +--application/shared_components/user_interface/templates/page/no_tabs_right_sidebar_optional_table_based +prompt ......Page template 4837131094414910 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +c1:=c1||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +' #TITLE#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' #HEAD#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#FORM_OPEN#'||chr(10)|| +''; + +c2:=c2||''||chr(10)|| +'#FORM_CLOSE#'||chr(10)|| +''||chr(10)|| +''; + +c3:=c3||''||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'  '||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
#REGION_POSITION_01##REGION_POSITION_04#
'||chr(10)|| +'
#SUCCESS_MESSAGE##NOTIFICATION_MESSAGE##GLOBAL_NOTIFICATION#
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '; + +c3:=c3||' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +'
#REGION_POSITION_02##BOX_BODY##REGION_POSITION_03#
'||chr(10)|| +'
'; + +wwv_flow_api.create_template( + p_id=> 4837131094414910 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> 'No Tabs - Right Sidebar (optional / table-based)', + p_body_title=> '', + p_header_template=> c1, + p_box=> c3, + p_footer_template=> c2, + p_success_message=> '
'||chr(10)|| +' '||chr(10)|| +' #SUCCESS_MESSAGE#'||chr(10)|| +'
', + p_current_tab=> '', + p_current_tab_font_attr=> '', + p_non_current_tab=> '', + p_non_current_tab_font_attr => '', + p_top_current_tab=> '', + p_top_current_tab_font_attr => '', + p_top_non_curr_tab=> '', + p_top_non_curr_tab_font_attr=> '', + p_current_image_tab=> '', + p_non_current_image_tab=> '', + p_notification_message=> '
'||chr(10)|| +' #MESSAGE#'||chr(10)|| +'
', + p_navigation_bar=> '#BAR_BODY#', + p_navbar_entry=> '
#TEXT#
', + p_app_tab_before_tabs=>'', + p_app_tab_current_tab=>'', + p_app_tab_non_current_tab=>'', + p_app_tab_after_tabs=>'', + p_region_table_cattributes=> ' summary="" cellpadding="0" border="0" cellspacing="0" width="100%"', + p_sidebar_def_reg_pos => 'REGION_POSITION_02', + p_breadcrumb_def_reg_pos => 'REGION_POSITION_01', + p_theme_id => 7, + p_theme_class_id => 3, + p_error_page_template => '
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' #INTERNAL_MESSAGE#'||chr(10)|| +' #MESSAGE#'||chr(10)|| +'

'||chr(10)|| +' '||chr(10)|| +'

'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
', + p_translate_this_template => 'N', + p_template_comment => ''); +end; + +null; + +end; +/ + +--application/shared_components/user_interface/templates/page/one_level_tabs_left_sidebar_fixed_width_div_based +prompt ......Page template 4837222651414910 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +c1:=c1||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +' #TITLE#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' #HEAD#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#FORM_OPEN#'||chr(10)|| +''; + +c2:=c2||''||chr(10)|| +'#FORM_CLOSE#'||chr(10)|| +''||chr(10)|| +''; + +c3:=c3||''||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' #TAB_CELLS#'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'#REGION_POSITION_01##REGION_POSITION_04#'||chr(10)|| +'
#SUCCESS_MESSAGE##NOTIFICATION_MESSAGE##GLOBAL_NOTIFICATION#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +'
'||chr(10)|| +' #BOX_BODY##REGION_POSITION_03#'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'; + +wwv_flow_api.create_template( + p_id=> 4837222651414910 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> 'One Level Tabs - Left Sidebar (fixed-width / DIV based)', + p_body_title=> '', + p_header_template=> c1, + p_box=> c3, + p_footer_template=> c2, + p_success_message=> '
'||chr(10)|| +' '||chr(10)|| +' #SUCCESS_MESSAGE#'||chr(10)|| +'
', + p_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
'||chr(10)|| +'', + p_current_tab_font_attr=> '', + p_non_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
'||chr(10)|| +'', + p_non_current_tab_font_attr => '', + p_top_current_tab=> '', + p_top_current_tab_font_attr => '', + p_top_non_curr_tab=> '', + p_top_non_curr_tab_font_attr=> '', + p_current_image_tab=> '', + p_non_current_image_tab=> '', + p_notification_message=> '
'||chr(10)|| +' #MESSAGE#'||chr(10)|| +'
', + p_navigation_bar=> '#BAR_BODY#', + p_navbar_entry=> '
#TEXT#
', + p_app_tab_before_tabs=>'', + p_app_tab_current_tab=>'', + p_app_tab_non_current_tab=>'', + p_app_tab_after_tabs=>'', + p_region_table_cattributes=> ' summary="" cellpadding="0" border="0" cellspacing="0" width="100%"', + p_sidebar_def_reg_pos => 'REGION_POSITION_02', + p_breadcrumb_def_reg_pos => 'REGION_POSITION_01', + p_theme_id => 7, + p_theme_class_id => 16, + p_translate_this_template => 'N', + p_template_comment => ''); +end; + +null; + +end; +/ + +--application/shared_components/user_interface/templates/page/one_level_tabs_left_and_right_sidebar_fixed_width_div_left_and_optional_table_based_right +prompt ......Page template 4837316808414910 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +c1:=c1||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +' #TITLE#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' #HEAD#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#FORM_OPEN#'||chr(10)|| +''; + +c2:=c2||''||chr(10)|| +'#FORM_CLOSE#'||chr(10)|| +''||chr(10)|| +''; + +c3:=c3||''||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' #TAB_CELLS#'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'#REGION_POSITION_01##REGION_POSITION_04#'||chr(10)|| +'
#SUCCESS_MESSAGE##NOTIFICATION_MESSAGE##GLOBAL_NOTIFICATION#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +'
#BOX_BODY##REGION_POSITION_03#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'; + +wwv_flow_api.create_template( + p_id=> 4837316808414910 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> 'One Level Tabs - Left and Right Sidebar (fixed-width / DIV left and optional table-based right)', + p_body_title=> '', + p_header_template=> c1, + p_box=> c3, + p_footer_template=> c2, + p_success_message=> '
'||chr(10)|| +' '||chr(10)|| +' #SUCCESS_MESSAGE#'||chr(10)|| +'
', + p_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
'||chr(10)|| +'', + p_current_tab_font_attr=> '', + p_non_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
'||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'', + p_non_current_tab_font_attr => '', + p_top_current_tab=> '', + p_top_current_tab_font_attr => '', + p_top_non_curr_tab=> '', + p_top_non_curr_tab_font_attr=> '', + p_current_image_tab=> '', + p_non_current_image_tab=> '', + p_notification_message=> '
'||chr(10)|| +' #MESSAGE#'||chr(10)|| +'
', + p_navigation_bar=> '#BAR_BODY#', + p_navbar_entry=> '
#TEXT#
', + p_app_tab_before_tabs=>'', + p_app_tab_current_tab=>'', + p_app_tab_non_current_tab=>'', + p_app_tab_after_tabs=>'', + p_region_table_cattributes=> ' summary="" cellpadding="0" border="0" cellspacing="0" width="100%"', + p_sidebar_def_reg_pos => 'REGION_POSITION_02', + p_breadcrumb_def_reg_pos => 'REGION_POSITION_01', + p_theme_id => 7, + p_theme_class_id => 16, + p_translate_this_template => 'N', + p_template_comment => ''); +end; + +null; + +end; +/ + +--application/shared_components/user_interface/templates/page/one_level_tabs_right_sidebar_fixed_width_div_based +prompt ......Page template 4837413408414910 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +c1:=c1||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +' #TITLE#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' #HEAD#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#FORM_OPEN#'||chr(10)|| +''; + +c2:=c2||''||chr(10)|| +'#FORM_CLOSE#'||chr(10)|| +''||chr(10)|| +''; + +c3:=c3||''||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' #TAB_CELLS#'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'#REGION_POSITION_01##REGION_POSITION_04#'||chr(10)|| +'
#SUCCESS_MESSAGE##NOTIFICATION_MESSAGE##GLOBAL_NOTIFICATION#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +'
#REGION_POSITION_02##BOX_BODY#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +''; + +wwv_flow_api.create_template( + p_id=> 4837413408414910 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> 'One Level Tabs - Right Sidebar (fixed-width / DIV based)', + p_body_title=> '', + p_header_template=> c1, + p_box=> c3, + p_footer_template=> c2, + p_success_message=> '
'||chr(10)|| +' '||chr(10)|| +' #SUCCESS_MESSAGE#'||chr(10)|| +'
', + p_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
'||chr(10)|| +'', + p_current_tab_font_attr=> '', + p_non_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
'||chr(10)|| +'', + p_non_current_tab_font_attr => '', + p_top_current_tab=> '', + p_top_current_tab_font_attr => '', + p_top_non_curr_tab=> '', + p_top_non_curr_tab_font_attr=> '', + p_current_image_tab=> '', + p_non_current_image_tab=> '', + p_notification_message=> '
'||chr(10)|| +' #MESSAGE#'||chr(10)|| +'
', + p_navigation_bar=> '#BAR_BODY#', + p_navbar_entry=> '
#TEXT#
', + p_app_tab_before_tabs=>'', + p_app_tab_current_tab=>'', + p_app_tab_non_current_tab=>'', + p_app_tab_after_tabs=>'', + p_region_table_cattributes=> '', + p_breadcrumb_def_reg_pos => 'REGION_POSITION_01', + p_theme_id => 7, + p_theme_class_id => 8, + p_translate_this_template => 'N', + p_template_comment => ''); +end; + +null; + +end; +/ + +--application/shared_components/user_interface/templates/page/one_level_tabs_right_sidebar_optional_table_based +prompt ......Page template 4837525507414910 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +c1:=c1||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +' #TITLE#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' #HEAD#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#FORM_OPEN#'||chr(10)|| +''; + +c2:=c2||''||chr(10)|| +'#FORM_CLOSE#'||chr(10)|| +''||chr(10)|| +''; + +c3:=c3||''||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' #TAB_CELLS#'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'#REGION_POSITION_01##REGION_POSITION_04#'||chr(10)|| +'
#SUCCESS_MESSAGE##NOTIFICATION_MESSAGE##GLOBAL_NOTIFICATION#
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +'
#REGION_POSITION_02##BOX_BODY##REGION_POSITION_03# '||chr(10)|| +'
'||chr(10)|| +'
'; + +wwv_flow_api.create_template( + p_id=> 4837525507414910 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> 'One Level Tabs - Right Sidebar (optional / table-based)', + p_body_title=> '', + p_header_template=> c1, + p_box=> c3, + p_footer_template=> c2, + p_success_message=> '
'||chr(10)|| +' '||chr(10)|| +' #SUCCESS_MESSAGE#'||chr(10)|| +'
', + p_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
', + p_current_tab_font_attr=> '', + p_non_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
'||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'', + p_non_current_tab_font_attr => '', + p_top_current_tab=> '', + p_top_current_tab_font_attr => '', + p_top_non_curr_tab=> '', + p_top_non_curr_tab_font_attr=> '', + p_current_image_tab=> '', + p_non_current_image_tab=> '', + p_notification_message=> '
'||chr(10)|| +' #MESSAGE#'||chr(10)|| +'
', + p_navigation_bar=> '#BAR_BODY#', + p_navbar_entry=> '
#TEXT#
', + p_app_tab_before_tabs=>'', + p_app_tab_current_tab=>'', + p_app_tab_non_current_tab=>'', + p_app_tab_after_tabs=>'', + p_region_table_cattributes=> '', + p_breadcrumb_def_reg_pos => 'REGION_POSITION_01', + p_theme_id => 7, + p_theme_class_id => 1, + p_translate_this_template => 'N', + p_template_comment => ''); +end; + +null; + +end; +/ + +--application/shared_components/user_interface/templates/page/popup +prompt ......Page template 4837613823414910 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +c1:=c1||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#TITLE#'||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#HEAD#'||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#FORM_OPEN#'; + +c2:=c2||'#FORM_CLOSE#'||chr(10)|| +''; + +c3:=c3||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'
#SUCCESS_MESSAGE##NOTIFICATION_MESSAGE#
#BOX_BODY##REGION_POSITION_01##REGION_POSITION_02##REGION_POSITION_04##REGION_POSITION_05##REGION_POSITION_06##REGION_POSITION_07##REGION_POSITION_08#
#REGION_POSITION_03#
'; + +wwv_flow_api.create_template( + p_id=> 4837613823414910 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> 'Popup', + p_body_title=> '', + p_header_template=> c1, + p_box=> c3, + p_footer_template=> c2, + p_success_message=> '
#SUCCESS_MESSAGE#
', + p_current_tab=> '', + p_current_tab_font_attr=> '', + p_non_current_tab=> '', + p_non_current_tab_font_attr => '', + p_top_current_tab=> '', + p_top_current_tab_font_attr => '', + p_top_non_curr_tab=> '', + p_top_non_curr_tab_font_attr=> '', + p_current_image_tab=> '', + p_non_current_image_tab=> '', + p_notification_message=> '
#MESSAGE#
', + p_navigation_bar=> '#BAR_BODY#', + p_navbar_entry=> '#TEXT#', + p_app_tab_before_tabs=>'', + p_app_tab_current_tab=>'', + p_app_tab_non_current_tab=>'', + p_app_tab_after_tabs=>'', + p_region_table_cattributes=> ' summary="" cellpadding="0" border="0" cellspacing="0" width="100%"', + p_theme_id => 7, + p_theme_class_id => 4, + p_translate_this_template => 'N', + p_template_comment => ''); +end; + +null; + +end; +/ + +--application/shared_components/user_interface/templates/page/printer_friendly +prompt ......Page template 4837724123414910 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +c1:=c1||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +' #TITLE#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' #HEAD#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#FORM_OPEN#'||chr(10)|| +''; + +c2:=c2||'#FORM_CLOSE#'||chr(10)|| +''; + +c3:=c3||''||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +'
#REGION_POSITION_02##BOX_BODY##REGION_POSITION_03#
'||chr(10)|| +'
'||chr(10)|| +''; + +wwv_flow_api.create_template( + p_id=> 4837724123414910 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> 'Printer Friendly', + p_body_title=> '', + p_header_template=> c1, + p_box=> c3, + p_footer_template=> c2, + p_success_message=> '', + p_current_tab=> '', + p_current_tab_font_attr=> '', + p_non_current_tab=> '', + p_non_current_tab_font_attr => '', + p_top_current_tab=> '', + p_top_current_tab_font_attr => '', + p_top_non_curr_tab=> '', + p_top_non_curr_tab_font_attr=> '', + p_current_image_tab=> '', + p_non_current_image_tab=> '', + p_notification_message=> '', + p_navigation_bar=> '', + p_navbar_entry=> '', + p_app_tab_before_tabs=>'', + p_app_tab_current_tab=>'', + p_app_tab_non_current_tab=>'', + p_app_tab_after_tabs=>'', + p_region_table_cattributes=> ' summary="" cellpadding="0" border="0" cellspacing="0" width="100%"', + p_theme_id => 7, + p_theme_class_id => 5, + p_translate_this_template => 'N', + p_template_comment => '3'); +end; + +null; + +end; +/ + +--application/shared_components/user_interface/templates/page/two_level_tabs_left_sidebar_fixed_width_div_based +prompt ......Page template 4837820641414910 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +c1:=c1||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +' #TITLE#'||chr(10)|| +' #HEAD#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'<'; + +c1:=c1||'!--[if lte IE 6]>
#OUTDATED_BROWSER#
'||chr(10)|| +'#FORM_OPEN#'||chr(10)|| +''; + +c2:=c2||''||chr(10)|| +'#FORM_CLOSE#'||chr(10)|| +''||chr(10)|| +''; + +c3:=c3||''||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +' #TAB_CELLS#'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +''||chr(10)|| +'
#REGION_POSITION_01##REGION_POSITION_04#
'||chr(10)|| +'
#SUCCESS_MESSAGE##NOTIFICATION_MESSAGE##GLOBAL_NOTIFICATION#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +'
'||chr(10)|| +' #BOX_BODY##REGION_POSITION_03#'||chr(10)|| +' '; + +c3:=c3||'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +''; + +wwv_flow_api.create_template( + p_id=> 4837820641414910 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> 'Two Level Tabs - Left Sidebar (fixed-width / DIV based)', + p_body_title=> '', + p_header_template=> c1, + p_box=> c3, + p_footer_template=> c2, + p_success_message=> '
'||chr(10)|| +' '||chr(10)|| +' #SUCCESS_MESSAGE#'||chr(10)|| +'
', + p_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
'||chr(10)|| +'', + p_current_tab_font_attr=> '', + p_non_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
'||chr(10)|| +'', + p_non_current_tab_font_attr => '', + p_top_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
'||chr(10)|| +''||chr(10)|| +'', + p_top_current_tab_font_attr => '', + p_top_non_curr_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
'||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'', + p_top_non_curr_tab_font_attr=> '', + p_current_image_tab=> '', + p_non_current_image_tab=> '', + p_notification_message=> '
'||chr(10)|| +' #MESSAGE#'||chr(10)|| +'
', + p_navigation_bar=> '#BAR_BODY#', + p_navbar_entry=> '
#TEXT#
', + p_app_tab_before_tabs=>'', + p_app_tab_current_tab=>'', + p_app_tab_non_current_tab=>'', + p_app_tab_after_tabs=>'', + p_region_table_cattributes=> ' summary="" cellpadding="0" border="0" cellspacing="0" width="100%"', + p_sidebar_def_reg_pos => 'REGION_POSITION_02', + p_breadcrumb_def_reg_pos => 'REGION_POSITION_01', + p_theme_id => 7, + p_theme_class_id => 18, + p_translate_this_template => 'N', + p_template_comment => ''); +end; + +null; + +end; +/ + +--application/shared_components/user_interface/templates/page/two_level_tabs_left_and_right_sidebar_fixed_width_div_left_and_optional_table_based_right +prompt ......Page template 4837929553414911 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +c1:=c1||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +' #TITLE#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' #HEAD#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#FORM_OPEN#'||chr(10)|| +''; + +c2:=c2||''||chr(10)|| +'#FORM_CLOSE#'||chr(10)|| +''||chr(10)|| +''; + +c3:=c3||''||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +' #TAB_CELLS#'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +''||chr(10)|| +'
#REGION_POSITION_01##REGION_POSITION_04#
'||chr(10)|| +'
#SUCCESS_MESSAGE##NOTIFICATION_MESSAGE##GLOBAL_NOTIFICATION#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +'
#BOX_BODY##REGION_POSITION_03#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +''; + +wwv_flow_api.create_template( + p_id=> 4837929553414911 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> 'Two Level Tabs - Left and Right Sidebar (fixed-width / DIV left and optional table-based right)', + p_body_title=> '', + p_header_template=> c1, + p_box=> c3, + p_footer_template=> c2, + p_success_message=> '
'||chr(10)|| +' '||chr(10)|| +' #SUCCESS_MESSAGE#'||chr(10)|| +'
', + p_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
'||chr(10)|| +'', + p_current_tab_font_attr=> '', + p_non_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
', + p_non_current_tab_font_attr => '', + p_top_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
'||chr(10)|| +''||chr(10)|| +'', + p_top_current_tab_font_attr => '', + p_top_non_curr_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
'||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'', + p_top_non_curr_tab_font_attr=> '', + p_current_image_tab=> '', + p_non_current_image_tab=> '', + p_notification_message=> '
'||chr(10)|| +' #MESSAGE#'||chr(10)|| +'
', + p_navigation_bar=> '#BAR_BODY#', + p_navbar_entry=> '
#TEXT#
', + p_app_tab_before_tabs=>'', + p_app_tab_current_tab=>'', + p_app_tab_non_current_tab=>'', + p_app_tab_after_tabs=>'', + p_region_table_cattributes=> ' summary="" cellpadding="0" border="0" cellspacing="0" width="100%"', + p_sidebar_def_reg_pos => 'REGION_POSITION_02', + p_breadcrumb_def_reg_pos => 'REGION_POSITION_01', + p_theme_id => 7, + p_theme_class_id => 18, + p_translate_this_template => 'N', + p_template_comment => ''); +end; + +null; + +end; +/ + +--application/shared_components/user_interface/templates/page/two_level_tabs_right_sidebar_fixed_width_div_based +prompt ......Page template 4838023662414911 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +c1:=c1||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +' #TITLE#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' #HEAD#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#FORM_OPEN#'||chr(10)|| +''; + +c2:=c2||''||chr(10)|| +'#FORM_CLOSE#'||chr(10)|| +''||chr(10)|| +''; + +c3:=c3||''||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +' #TAB_CELLS#'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +''||chr(10)|| +'
#REGION_POSITION_01##REGION_POSITION_04#
'||chr(10)|| +'
#SUCCESS_MESSAGE##NOTIFICATION_MESSAGE##GLOBAL_NOTIFICATION#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +'
#REGION_POSITION_02##BOX_BODY#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +''; + +wwv_flow_api.create_template( + p_id=> 4838023662414911 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> 'Two Level Tabs - Right Sidebar (fixed-width / DIV based)', + p_body_title=> '', + p_header_template=> c1, + p_box=> c3, + p_footer_template=> c2, + p_success_message=> '
'||chr(10)|| +' '||chr(10)|| +' #SUCCESS_MESSAGE#'||chr(10)|| +'
', + p_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
', + p_current_tab_font_attr=> '', + p_non_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
', + p_non_current_tab_font_attr => '', + p_top_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
'||chr(10)|| +''||chr(10)|| +'', + p_top_current_tab_font_attr => '', + p_top_non_curr_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
'||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'', + p_top_non_curr_tab_font_attr=> '', + p_current_image_tab=> '', + p_non_current_image_tab=> '', + p_notification_message=> '
'||chr(10)|| +' #MESSAGE#'||chr(10)|| +'
', + p_navigation_bar=> '#BAR_BODY#', + p_navbar_entry=> '
#TEXT#
', + p_app_tab_before_tabs=>'', + p_app_tab_current_tab=>'', + p_app_tab_non_current_tab=>'', + p_app_tab_after_tabs=>'', + p_region_table_cattributes=> ' summary="" cellpadding="0" border="0" cellspacing="0" width="100%"', + p_breadcrumb_def_reg_pos => 'REGION_POSITION_01', + p_theme_id => 7, + p_theme_class_id => 2, + p_translate_this_template => 'N', + p_template_comment => ''); +end; + +null; + +end; +/ + +--application/shared_components/user_interface/templates/page/two_level_tabs_right_sidebar_optional_table_based +prompt ......Page template 4838107174414911 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +c1:=c1||''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +' #TITLE#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' #HEAD#'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#FORM_OPEN#'||chr(10)|| +''; + +c2:=c2||''||chr(10)|| +'#FORM_CLOSE#'||chr(10)|| +''||chr(10)|| +''; + +c3:=c3||''||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +' #TAB_CELLS#'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +''||chr(10)|| +'
#REGION_POSITION_01##REGION_POSITION_04#
'||chr(10)|| +'
#SUCCESS_MESSAGE##NOTIFICATION_MESSAGE##GLOBAL_NOTIFICATION#
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +'
#REGI'; + +c3:=c3||'ON_POSITION_02##BOX_BODY##REGION_POSITION_03#
'||chr(10)|| +'
'; + +wwv_flow_api.create_template( + p_id=> 4838107174414911 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> 'Two Level Tabs - Right Sidebar (optional / table-based)', + p_body_title=> '', + p_header_template=> c1, + p_box=> c3, + p_footer_template=> c2, + p_success_message=> '
'||chr(10)|| +' '||chr(10)|| +' #SUCCESS_MESSAGE#'||chr(10)|| +'
', + p_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
'||chr(10)|| +'', + p_current_tab_font_attr=> '', + p_non_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
', + p_non_current_tab_font_attr => '', + p_top_current_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
'||chr(10)|| +''||chr(10)|| +'', + p_top_current_tab_font_attr => '', + p_top_non_curr_tab=> '
'||chr(10)|| +'#TAB_LABEL##TAB_INLINE_EDIT#'||chr(10)|| +'
'||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'', + p_top_non_curr_tab_font_attr=> '', + p_current_image_tab=> '', + p_non_current_image_tab=> '', + p_notification_message=> '
'||chr(10)|| +' #MESSAGE#'||chr(10)|| +'
', + p_navigation_bar=> '#BAR_BODY#', + p_navbar_entry=> '
#TEXT#
', + p_app_tab_before_tabs=>'', + p_app_tab_current_tab=>'', + p_app_tab_non_current_tab=>'', + p_app_tab_after_tabs=>'', + p_region_table_cattributes=> ' summary="" cellpadding="0" border="0" cellspacing="0" width="100%"', + p_breadcrumb_def_reg_pos => 'REGION_POSITION_01', + p_theme_id => 7, + p_theme_class_id => 2, + p_translate_this_template => 'N', + p_template_comment => ''); +end; + +null; + +end; +/ + +prompt ...button templates +-- +--application/shared_components/user_interface/templates/button/button +prompt ......Button Template 4838226535414911 +declare + t varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +t:=t||''; + +wwv_flow_api.create_button_templates ( + p_id=>4838226535414911 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_template=>t, + p_template_name=> 'Button', + p_translate_this_template => 'N', + p_theme_id => 7, + p_theme_class_id => 1, + p_template_comment => ''); +end; +/ +--application/shared_components/user_interface/templates/button/button_alternative_1_hot_button +prompt ......Button Template 4838306817414911 +declare + t varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +t:=t||''; + +wwv_flow_api.create_button_templates ( + p_id=>4838306817414911 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_template=>t, + p_template_name=> 'Button, Alternative 1 - Hot Button', + p_translate_this_template => 'N', + p_theme_id => 7, + p_theme_class_id => 4, + p_template_comment => ''); +end; +/ +--application/shared_components/user_interface/templates/button/button_alternative_2 +prompt ......Button Template 4838412442414911 +declare + t varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +t:=t||''; + +wwv_flow_api.create_button_templates ( + p_id=>4838412442414911 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_template=>t, + p_template_name=> 'Button, Alternative 2', + p_translate_this_template => 'N', + p_theme_id => 7, + p_theme_class_id => 5, + p_template_comment => 'XP Square FFFFFF'); +end; +/ +--application/shared_components/user_interface/templates/button/button_alternative_3 +prompt ......Button Template 4838512495414911 +declare + t varchar2(32767) := null; + l_clob clob; + l_length number := 1; +begin +t:=t||''; + +wwv_flow_api.create_button_templates ( + p_id=>4838512495414911 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_template=>t, + p_template_name=> 'Button, Alternative 3', + p_translate_this_template => 'N', + p_theme_id => 7, + p_theme_class_id => 2, + p_template_comment => 'Standard Button'); +end; +/ +--------------------------------------- +prompt ...region templates +-- +--application/shared_components/user_interface/templates/region/borderless_region +prompt ......region template 4838619911414911 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4838619911414911 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'
'||chr(10)|| +'
'||chr(10)|| +'
#TITLE#
'||chr(10)|| +'
#CLOSE##PREVIOUS##NEXT##DELETE##EDIT##CHANGE##CREATE##CREATE2##EXPAND##COPY##HELP#
'||chr(10)|| +'
'||chr(10)|| +'
#BODY#
'||chr(10)|| +'
'||chr(10)|| +'
' + ,p_page_plug_template_name => 'Borderless Region' + ,p_theme_id => 7 + ,p_theme_class_id => 7 + ,p_translate_this_template => 'N' + ,p_template_comment => 'Use this region template when you want to contain content without a border.'||chr(10)|| +''||chr(10)|| +'TITLE=YES'||chr(10)|| +'BUTTONS=YES'||chr(10)|| +'100% WIDTH=NO' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4838619911414911 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/bracketed_region +prompt ......region template 4838728225414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4838728225414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
#TITLE#
'||chr(10)|| +'
#CLOSE##PREVIOUS##NEXT##DELETE##EDIT##CHANGE##CREATE##CREATE2##EXPAND##COPY##HELP#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
#BODY#
'||chr(10)|| +'
'||chr(10)|| +'
 
'||chr(10)|| +'
'||chr(10)|| +'
' + ,p_page_plug_template_name => 'Bracketed Region' + ,p_theme_id => 7 + ,p_theme_class_id => 18 + ,p_translate_this_template => 'N' + ,p_template_comment => 'Use this region template when you want to contain content with a bracket UI.'||chr(10)|| +''||chr(10)|| +'TITLE=YES'||chr(10)|| +'BUTTONS=YES'||chr(10)|| +'100% WIDTH=NO' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4838728225414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/breadcrumb_region +prompt ......region template 4838801336414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4838801336414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'' + ,p_page_plug_template_name => 'Breadcrumb Region' + ,p_theme_id => 7 + ,p_theme_class_id => 6 + ,p_translate_this_template => 'N' + ,p_template_comment => 'Use this region template to contain breadcrumb menus. Breadcrumb menus are implemented using breadcrumbs. Breadcrumb menus are designed to displayed in #REGION_POSITION_01#' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4838801336414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/button_region_with_title +prompt ......region template 4838905909414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4838905909414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' #TITLE#'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' #CLOSE##COPY##DELETE##CHANGE##EDIT##PREVIOUS##N'|| +'EXT##CREATE##EXPAND#'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
' + ,p_page_plug_template_name => 'Button Region with Title' + ,p_theme_id => 7 + ,p_theme_class_id => 4 + ,p_translate_this_template => 'N' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4838905909414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/button_region_without_title +prompt ......region template 4839013563414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4839013563414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' #BODY#'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' #CLOSE##COPY##DELETE##CHANGE##EDIT##PREVIOUS##NE'|| +'XT##CREATE##EXPAND#'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
' + ,p_page_plug_template_name => 'Button Region without Title' + ,p_theme_id => 7 + ,p_theme_class_id => 17 + ,p_translate_this_template => 'N' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4839013563414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/chart_list +prompt ......region template 4839116402414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4839116402414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'
'||chr(10)|| +'
'||chr(10)|| +'
#TITLE#
'||chr(10)|| +'
#CLOSE##PREVIOUS##NEXT##DELETE##EDIT##CHANGE##CREATE##CREATE2##EXPAND##COPY##HELP#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
#BODY#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
' + ,p_page_plug_template_name => 'Chart List' + ,p_plug_table_bgcolor => '#ffffff' + ,p_theme_id => 7 + ,p_theme_class_id => 29 + ,p_plug_heading_bgcolor => '#ffffff' + ,p_plug_font_size => '-1' + ,p_translate_this_template => 'N' + ,p_template_comment => 'Red Theme' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4839116402414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/chart_region +prompt ......region template 4839217975414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4839217975414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'
'||chr(10)|| +'
'||chr(10)|| +'
#TITLE#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
#CLOSE##PREVIOUS##NEXT##DELETE##EDIT##CHANGE##CREATE##CREATE2##EXPAND##COPY##HELP#
'||chr(10)|| +'
#BODY#
'||chr(10)|| +'
'||chr(10)|| +'
' + ,p_page_plug_template_name => 'Chart Region' + ,p_plug_table_bgcolor => '#ffffff' + ,p_theme_id => 7 + ,p_theme_class_id => 30 + ,p_plug_heading_bgcolor => '#ffffff' + ,p_plug_font_size => '-1' + ,p_translate_this_template => 'N' + ,p_template_comment => 'Red Theme' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4839217975414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/form_region +prompt ......region template 4839304121414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4839304121414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'
'||chr(10)|| +'
'||chr(10)|| +'
#TITLE#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
#CLOSE##PREVIOUS##NEXT##DELETE##EDIT##CHANGE##CREATE##CREATE2##EXPAND##COPY##HELP#
'||chr(10)|| +'
'||chr(10)|| +'#BODY#
'||chr(10)|| +'
'||chr(10)|| +'
' + ,p_page_plug_template_name => 'Form Region' + ,p_plug_table_bgcolor => '#f7f7e7' + ,p_theme_id => 7 + ,p_theme_class_id => 8 + ,p_plug_heading_bgcolor => '#f7f7e7' + ,p_plug_font_size => '-1' + ,p_translate_this_template => 'N' + ,p_template_comment => 'Red Theme' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4839304121414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/hide_and_show_region +prompt ......region template 4839416734414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4839416734414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'
'||chr(10)|| +'
'||chr(10)|| +'
#TITLE#
'||chr(10)|| +'
#CLOSE##PREVIOUS##NEXT##DELETE##EDIT##CHANGE##CREATE##CREATE2##EXPAND##COPY##HELP#
'||chr(10)|| +'
'||chr(10)|| +'
#BODY#
'||chr(10)|| +'
' + ,p_page_plug_template_name => 'Hide and Show Region' + ,p_theme_id => 7 + ,p_theme_class_id => 1 + ,p_translate_this_template => 'N' + ,p_template_comment => 'Gray Head, white body' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4839416734414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/navigation_region +prompt ......region template 4839509274414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4839509274414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'' + ,p_page_plug_template_name => 'Navigation Region' + ,p_theme_id => 7 + ,p_theme_class_id => 5 + ,p_translate_this_template => 'N' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4839509274414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/navigation_region_alternative_1 +prompt ......region template 4839603421414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4839603421414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'' + ,p_page_plug_template_name => 'Navigation Region, Alternative 1' + ,p_theme_id => 7 + ,p_theme_class_id => 16 + ,p_translate_this_template => 'N' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4839603421414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/nested_region +prompt ......region template 4839728718414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4839728718414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
#TITLE#
'||chr(10)|| +'
#CLOSE##PREVIOUS##NEXT##DELETE##EDIT##CHANGE##CREATE##CREATE2##EXPAND##COPY##HELP#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' #BODY#'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
' + ,p_page_plug_template_name => 'Nested Region' + ,p_theme_id => 7 + ,p_theme_class_id => 22 + ,p_translate_this_template => 'N' + ,p_template_comment => 'Use this region template when you want to contain content without a border.'||chr(10)|| +''||chr(10)|| +'TITLE=YES'||chr(10)|| +'BUTTONS=YES'||chr(10)|| +'100% WIDTH=NO' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4839728718414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/region_without_buttons_and_titles +prompt ......region template 4839831975414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4839831975414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'
'||chr(10)|| +'
#BODY#
'||chr(10)|| +'
' + ,p_page_plug_template_name => 'Region without Buttons and Titles' + ,p_theme_id => 7 + ,p_theme_class_id => 19 + ,p_translate_this_template => 'N' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4839831975414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/region_without_title +prompt ......region template 4839912075414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4839912075414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'
'||chr(10)|| +'
'||chr(10)|| +'
 
'||chr(10)|| +'
#CLOSE##PREVIOUS##NEXT##DELETE##EDIT##CHANGE##CREATE##CREATE2##EXPAND##COPY##HELP#
'||chr(10)|| +'
'||chr(10)|| +'
#BODY#
'||chr(10)|| +'
' + ,p_page_plug_template_name => 'Region without Title' + ,p_theme_id => 7 + ,p_theme_class_id => 11 + ,p_translate_this_template => 'N' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4839912075414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/report_filter_single_row +prompt ......region template 4840023588414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4840023588414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'
#BODY#
#CLOSE##EDIT##CHANGE##DELETE##CREATE##CREATE2##COPY##PREVIOUS##NEXT##EXPAND##HELP#

' + ,p_page_plug_template_name => 'Report Filter - Single Row' + ,p_theme_id => 7 + ,p_theme_class_id => 31 + ,p_translate_this_template => 'N' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4840023588414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/report_list +prompt ......region template 4840108515414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4840108515414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'
'||chr(10)|| +'
'||chr(10)|| +'
#TITLE#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
#CLOSE##PREVIOUS##NEXT##DELETE##EDIT##CHANGE##CREATE##CREATE2##EXPAND##COPY##HELP#
'||chr(10)|| +'
'||chr(10)|| +' '|| +'#BODY#'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
' + ,p_page_plug_template_name => 'Report List' + ,p_plug_table_bgcolor => '#ffffff' + ,p_theme_id => 7 + ,p_theme_class_id => 29 + ,p_plug_heading_bgcolor => '#ffffff' + ,p_plug_font_size => '-1' + ,p_translate_this_template => 'N' + ,p_template_comment => 'Red Theme' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4840108515414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/reports_region +prompt ......region template 4840201642414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4840201642414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'
'||chr(10)|| +'
'||chr(10)|| +'
#TITLE#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
#CLOSE##PREVIOUS##NEXT##DELETE##EDIT##CHANGE##CREATE##CREATE2##EXPAND##COPY##HELP#
'||chr(10)|| +'
#BODY#
'||chr(10)|| +'
'||chr(10)|| +'
' + ,p_page_plug_template_name => 'Reports Region' + ,p_plug_table_bgcolor => '#ffffff' + ,p_theme_id => 7 + ,p_theme_class_id => 9 + ,p_plug_heading_bgcolor => '#ffffff' + ,p_plug_font_size => '-1' + ,p_translate_this_template => 'N' + ,p_template_comment => 'Red Theme' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4840201642414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/reports_region_100_width +prompt ......region template 4840330674414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4840330674414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'
'||chr(10)|| +'
'||chr(10)|| +'
#TITLE#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
#CLOSE##PREVIOUS##NEXT##DELETE##EDIT##CHANGE##CREATE##CREATE2##EXPAND##COPY##HELP#
'||chr(10)|| +'
#BODY#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'' + ,p_page_plug_template_name => 'Reports Region 100% Width' + ,p_plug_table_bgcolor => '#ffffff' + ,p_theme_id => 7 + ,p_theme_class_id => 13 + ,p_plug_heading_bgcolor => '#ffffff' + ,p_plug_font_size => '-1' + ,p_translate_this_template => 'N' + ,p_template_comment => 'Red Theme' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4840330674414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/reports_region_alternative_1 +prompt ......region template 4840430420414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4840430420414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'
'||chr(10)|| +'
'||chr(10)|| +'
#TITLE#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
#CLOSE##PREVIOUS##NEXT##DELETE##EDIT##CHANGE##CREATE##CREATE2##EXPAND##COPY##HELP#
'||chr(10)|| +'
#BODY#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
' + ,p_page_plug_template_name => 'Reports Region, Alternative 1' + ,p_plug_table_bgcolor => '#ffffff' + ,p_theme_id => 7 + ,p_theme_class_id => 10 + ,p_plug_heading_bgcolor => '#ffffff' + ,p_plug_font_size => '-1' + ,p_translate_this_template => 'N' + ,p_template_comment => 'Red Theme' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4840430420414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/sidebar_region +prompt ......region template 4840501966414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4840501966414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'' + ,p_page_plug_template_name => 'Sidebar Region' + ,p_plug_table_bgcolor => '#f7f7e7' + ,p_theme_id => 7 + ,p_theme_class_id => 2 + ,p_plug_heading_bgcolor => '#f7f7e7' + ,p_plug_font_size => '-1' + ,p_translate_this_template => 'N' + ,p_template_comment => ''||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +' #TITLE#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +''||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +'

'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +'
 '||chr(10)|| +'

'||chr(10)|| +' #BODY#'||chr(10)|| +' '||chr(10)|| +'

'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +'
'||chr(10)|| +'' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4840501966414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/sidebar_region_alternative_1 +prompt ......region template 4840606092414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4840606092414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'' + ,p_page_plug_template_name => 'Sidebar Region, Alternative 1' + ,p_plug_table_bgcolor => '#f7f7e7' + ,p_theme_id => 7 + ,p_theme_class_id => 3 + ,p_plug_heading_bgcolor => '#f7f7e7' + ,p_plug_font_size => '-1' + ,p_translate_this_template => 'N' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4840606092414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/sidebar_region_alternative_2 +prompt ......region template 4840710757414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4840710757414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'' + ,p_page_plug_template_name => 'Sidebar Region, Alternative 2' + ,p_plug_table_bgcolor => '#f7f7e7' + ,p_theme_id => 7 + ,p_theme_class_id => 3 + ,p_plug_heading_bgcolor => '#f7f7e7' + ,p_plug_font_size => '-1' + ,p_translate_this_template => 'N' + ,p_template_comment => ''||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +' #TITLE#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +''||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +'

'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +'
 '||chr(10)|| +'

'||chr(10)|| +' #BODY#'||chr(10)|| +' '||chr(10)|| +'

'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +'
'||chr(10)|| +'' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4840710757414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/top_bar +prompt ......region template 4840807393414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4840807393414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' #BODY#'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +' #CLOSE##COPY##DELETE##CHANGE##EDIT##PREVIOUS##NE'|| +'XT##CREATE##EXPAND#'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
' + ,p_page_plug_template_name => 'Top Bar' + ,p_theme_id => 7 + ,p_theme_class_id => 21 + ,p_translate_this_template => 'N' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4840807393414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/wizard_region +prompt ......region template 4840913627414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4840913627414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'
'||chr(10)|| +'
'||chr(10)|| +'
#TITLE#
'||chr(10)|| +'
#CLOSE##PREVIOUS##NEXT##DELETE##EDIT##CHANGE##CREATE##CREATE2##EXPAND##COPY##HELP#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
#BODY#
'||chr(10)|| +'
'||chr(10)|| +'
' + ,p_page_plug_template_name => 'Wizard Region' + ,p_theme_id => 7 + ,p_theme_class_id => 12 + ,p_translate_this_template => 'N' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4840913627414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/region/wizard_region_with_icon +prompt ......region template 4841016262414912 + +begin + +wwv_flow_api.create_plug_template ( + p_id => 4841016262414912 + wwv_flow_api.g_id_offset + ,p_flow_id => wwv_flow.g_flow_id + ,p_template => +'
'||chr(10)|| +'
'||chr(10)|| +'
#TITLE#
'||chr(10)|| +'
#CLOSE##PREVIOUS##NEXT##DELETE##EDIT##CHANGE##CREATE##CREATE2##EXPAND##COPY##HELP#
'||chr(10)|| +'
'||chr(10)|| +'
'||chr(10)|| +'
#BODY#
'||chr(10)|| +'
'||chr(10)|| +'
' + ,p_page_plug_template_name => 'Wizard Region with Icon' + ,p_theme_id => 7 + ,p_theme_class_id => 20 + ,p_translate_this_template => 'N' + ); +null; + +end; +/ + + +begin + +declare + t2 varchar2(32767) := null; +begin +t2 := null; +wwv_flow_api.set_plug_template_tab_attr ( + p_id=> 4841016262414912 + wwv_flow_api.g_id_offset, + p_form_table_attr=> t2 ); +exception when others then null; +end; +null; + +end; +/ + +prompt ...List Templates +-- +--application/shared_components/user_interface/templates/list/button_list +prompt ......list template 4841113607414912 + +begin + +declare + t varchar2(32767) := null; + t2 varchar2(32767) := null; + t3 varchar2(32767) := null; + t4 varchar2(32767) := null; + t5 varchar2(32767) := null; + t6 varchar2(32767) := null; + t7 varchar2(32767) := null; + t8 varchar2(32767) := null; + l_clob clob; + l_clob2 clob; + l_clob3 clob; + l_clob4 clob; + l_clob5 clob; + l_clob6 clob; + l_clob7 clob; + l_clob8 clob; + l_length number := 1; +begin +t:=t||''; + +t2:=t2||''; + +t3 := null; +t4 := null; +t5 := null; +t6 := null; +t7 := null; +t8 := null; +wwv_flow_api.create_list_template ( + p_id=>4841113607414912 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_list_template_current=>t, + p_list_template_noncurrent=> t2, + p_list_template_name=>'Button List', + p_theme_id => 7, + p_theme_class_id => 6, + p_list_template_before_rows=>'
', + p_list_template_after_rows=>'
', + p_translate_this_template => 'N', + p_list_template_comment=>''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/list/dhtml_tree +prompt ......list template 4841206791414913 + +begin + +declare + t varchar2(32767) := null; + t2 varchar2(32767) := null; + t3 varchar2(32767) := null; + t4 varchar2(32767) := null; + t5 varchar2(32767) := null; + t6 varchar2(32767) := null; + t7 varchar2(32767) := null; + t8 varchar2(32767) := null; + l_clob clob; + l_clob2 clob; + l_clob3 clob; + l_clob4 clob; + l_clob5 clob; + l_clob6 clob; + l_clob7 clob; + l_clob8 clob; + l_length number := 1; +begin +t:=t||'
  • #TEXT#
  • '; + +t2:=t2||'
  • #TEXT#
  • '; + +t3:=t3||'
  • #TEXT#
  • '; + +t4:=t4||'
  • #TEXT#
  • '; + +t5:=t5||'
  • #TEXT#
  • '; + +t6:=t6||'
  • #TEXT#
  • '; + +t7:=t7||'
  • #TEXT#
  • '; + +t8:=t8||'
  • #TEXT#
  • '; + +wwv_flow_api.create_list_template ( + p_id=>4841206791414913 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_list_template_current=>t, + p_list_template_noncurrent=> t2, + p_list_template_name=>'DHTML Tree', + p_theme_id => 7, + p_theme_class_id => 23, + p_list_template_before_rows=>'
      ', + p_list_template_after_rows=>'


    ', + p_before_sub_list=>'
      ', + p_after_sub_list=>'
    ', + p_sub_list_item_current=> t3, + p_sub_list_item_noncurrent=> t4, + p_item_templ_curr_w_child=> t5, + p_item_templ_noncurr_w_child=> t6, + p_sub_templ_curr_w_child=> t7, + p_sub_templ_noncurr_w_child=> t8, + p_translate_this_template => 'N', + p_list_template_comment=>''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/list/hierarchical_expanding +prompt ......list template 4841305748414913 + +begin + +declare + t varchar2(32767) := null; + t2 varchar2(32767) := null; + t3 varchar2(32767) := null; + t4 varchar2(32767) := null; + t5 varchar2(32767) := null; + t6 varchar2(32767) := null; + t7 varchar2(32767) := null; + t8 varchar2(32767) := null; + l_clob clob; + l_clob2 clob; + l_clob3 clob; + l_clob4 clob; + l_clob5 clob; + l_clob6 clob; + l_clob7 clob; + l_clob8 clob; + l_length number := 1; +begin +t:=t||'
  • #TEXT#
  • '; + +t2:=t2||'
  • #TEXT#
  • '; + +t3:=t3||'
  • #TEXT#
  • '; + +t4:=t4||'
  • #TEXT#
  • '; + +t5:=t5||'
  • #TEXT#
  • '; + +t6:=t6||'
  • #TEXT#
  • '; + +t7:=t7||'
  • #TEXT#
  • '; + +t8:=t8||'
  • #TEXT#
  • '; + +wwv_flow_api.create_list_template ( + p_id=>4841305748414913 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_list_template_current=>t, + p_list_template_noncurrent=> t2, + p_list_template_name=>'Hierarchical Expanding', + p_theme_id => 7, + p_theme_class_id => 22, + p_list_template_before_rows=>'
      ', + p_list_template_after_rows=>'


    ', + p_before_sub_list=>'', + p_sub_list_item_current=> t3, + p_sub_list_item_noncurrent=> t4, + p_item_templ_curr_w_child=> t5, + p_item_templ_noncurr_w_child=> t6, + p_sub_templ_curr_w_child=> t7, + p_sub_templ_noncurr_w_child=> t8, + p_translate_this_template => 'N', + p_list_template_comment=>''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/list/horizontal_images_with_label_list +prompt ......list template 4841426973414913 + +begin + +declare + t varchar2(32767) := null; + t2 varchar2(32767) := null; + t3 varchar2(32767) := null; + t4 varchar2(32767) := null; + t5 varchar2(32767) := null; + t6 varchar2(32767) := null; + t7 varchar2(32767) := null; + t8 varchar2(32767) := null; + l_clob clob; + l_clob2 clob; + l_clob3 clob; + l_clob4 clob; + l_clob5 clob; + l_clob6 clob; + l_clob7 clob; + l_clob8 clob; + l_length number := 1; +begin +t:=t||'
    '||chr(10)|| +'
    '||chr(10)|| +' '||chr(10)|| +'
    '; + +t2:=t2||'
    '||chr(10)|| +'
    '||chr(10)|| +' '||chr(10)|| +'
    '; + +t3 := null; +t4 := null; +t5 := null; +t6 := null; +t7 := null; +t8 := null; +wwv_flow_api.create_list_template ( + p_id=>4841426973414913 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_list_template_current=>t, + p_list_template_noncurrent=> t2, + p_list_template_name=>'Horizontal Images with Label List', + p_theme_id => 7, + p_theme_class_id => 4, + p_list_template_before_rows=>'
    ', + p_list_template_after_rows=>'
    ', + p_translate_this_template => 'N', + p_list_template_comment=>''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/list/horizontal_links_list +prompt ......list template 4841525373414913 + +begin + +declare + t varchar2(32767) := null; + t2 varchar2(32767) := null; + t3 varchar2(32767) := null; + t4 varchar2(32767) := null; + t5 varchar2(32767) := null; + t6 varchar2(32767) := null; + t7 varchar2(32767) := null; + t8 varchar2(32767) := null; + l_clob clob; + l_clob2 clob; + l_clob3 clob; + l_clob4 clob; + l_clob5 clob; + l_clob6 clob; + l_clob7 clob; + l_clob8 clob; + l_length number := 1; +begin +t:=t||'#TEXT#'; + +t2:=t2||'#TEXT#'; + +t3 := null; +t4 := null; +t5 := null; +t6 := null; +t7 := null; +t8 := null; +wwv_flow_api.create_list_template ( + p_id=>4841525373414913 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_list_template_current=>t, + p_list_template_noncurrent=> t2, + p_list_template_name=>'Horizontal Links List', + p_theme_id => 7, + p_theme_class_id => 3, + p_list_template_before_rows=>'', + p_translate_this_template => 'N', + p_list_template_comment=>''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/list/pull_down_menu +prompt ......list template 4841628580414913 + +begin + +declare + t varchar2(32767) := null; + t2 varchar2(32767) := null; + t3 varchar2(32767) := null; + t4 varchar2(32767) := null; + t5 varchar2(32767) := null; + t6 varchar2(32767) := null; + t7 varchar2(32767) := null; + t8 varchar2(32767) := null; + l_clob clob; + l_clob2 clob; + l_clob3 clob; + l_clob4 clob; + l_clob5 clob; + l_clob6 clob; + l_clob7 clob; + l_clob8 clob; + l_length number := 1; +begin +t:=t||'
  • #TEXT#
  • '; + +t2:=t2||'
  • #TEXT#
  • '; + +t3:=t3||'
  • '; + +t4:=t4||'
  • #TEXT#
  • '; + +t5:=t5||'
  • #TEXT#Expand'||chr(10)|| +'
  • '; + +t6:=t6||'
  • #TEXT#Expand
  • '; + +t7:=t7||'
  • #TEXT#
  • '; + +t8:=t8||'
  • #TEXT#
  • '; + +wwv_flow_api.create_list_template ( + p_id=>4841628580414913 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_list_template_current=>t, + p_list_template_noncurrent=> t2, + p_list_template_name=>'Pull Down Menu', + p_theme_id => 7, + p_theme_class_id => 20, + p_list_template_before_rows=>'
      ', + p_list_template_after_rows=>'


    ', + p_before_sub_list=>'', + p_sub_list_item_current=> t3, + p_sub_list_item_noncurrent=> t4, + p_item_templ_curr_w_child=> t5, + p_item_templ_noncurr_w_child=> t6, + p_sub_templ_curr_w_child=> t7, + p_sub_templ_noncurr_w_child=> t8, + p_translate_this_template => 'N', + p_list_template_comment=>''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/list/pull_down_menu_with_image +prompt ......list template 4841701587414913 + +begin + +declare + t varchar2(32767) := null; + t2 varchar2(32767) := null; + t3 varchar2(32767) := null; + t4 varchar2(32767) := null; + t5 varchar2(32767) := null; + t6 varchar2(32767) := null; + t7 varchar2(32767) := null; + t8 varchar2(32767) := null; + l_clob clob; + l_clob2 clob; + l_clob3 clob; + l_clob4 clob; + l_clob5 clob; + l_clob6 clob; + l_clob7 clob; + l_clob8 clob; + l_length number := 1; +begin +t:=t||''; + +t2:=t2||''; + +t3:=t3||'
  • '; + +t4:=t4||'
  • #TEXT#
  • '; + +t5:=t5||'
    '||chr(10)|| +'#TEXT#'||chr(10)|| +'
    '; + +t6:=t6||'
    '||chr(10)|| +'#TEXT#'||chr(10)|| +'
    '; + +t7:=t7||'
  • #TEXT#
  • '; + +t8:=t8||'
  • #TEXT#
  • '; + +wwv_flow_api.create_list_template ( + p_id=>4841701587414913 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_list_template_current=>t, + p_list_template_noncurrent=> t2, + p_list_template_name=>'Pull Down Menu with Image', + p_theme_id => 7, + p_theme_class_id => 21, + p_list_template_before_rows=>'
    ', + p_list_template_after_rows=>'


    ', + p_before_sub_list=>'', + p_sub_list_item_current=> t3, + p_sub_list_item_noncurrent=> t4, + p_item_templ_curr_w_child=> t5, + p_item_templ_noncurr_w_child=> t6, + p_sub_templ_curr_w_child=> t7, + p_sub_templ_noncurr_w_child=> t8, + p_translate_this_template => 'N', + p_list_template_comment=>''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/list/tabbed_navigation_list +prompt ......list template 4841804704414913 + +begin + +declare + t varchar2(32767) := null; + t2 varchar2(32767) := null; + t3 varchar2(32767) := null; + t4 varchar2(32767) := null; + t5 varchar2(32767) := null; + t6 varchar2(32767) := null; + t7 varchar2(32767) := null; + t8 varchar2(32767) := null; + l_clob clob; + l_clob2 clob; + l_clob3 clob; + l_clob4 clob; + l_clob5 clob; + l_clob6 clob; + l_clob7 clob; + l_clob8 clob; + l_length number := 1; +begin +t:=t||'
  • #TEXT#
  • '; + +t2:=t2||'
  • #TEXT#
  • '; + +t3 := null; +t4 := null; +t5 := null; +t6 := null; +t7 := null; +t8 := null; +wwv_flow_api.create_list_template ( + p_id=>4841804704414913 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_list_template_current=>t, + p_list_template_noncurrent=> t2, + p_list_template_name=>'Tabbed Navigation List', + p_theme_id => 7, + p_theme_class_id => 7, + p_list_template_before_rows=>'
    '||chr(10)|| +'
    '||chr(10)|| +'
      ', + p_list_template_after_rows=>'
    '||chr(10)|| +'
    '||chr(10)|| +'
    ', + p_translate_this_template => 'N', + p_list_template_comment=>''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/list/vertical_images_list +prompt ......list template 4841925462414913 + +begin + +declare + t varchar2(32767) := null; + t2 varchar2(32767) := null; + t3 varchar2(32767) := null; + t4 varchar2(32767) := null; + t5 varchar2(32767) := null; + t6 varchar2(32767) := null; + t7 varchar2(32767) := null; + t8 varchar2(32767) := null; + l_clob clob; + l_clob2 clob; + l_clob3 clob; + l_clob4 clob; + l_clob5 clob; + l_clob6 clob; + l_clob7 clob; + l_clob8 clob; + l_length number := 1; +begin +t:=t||'
    '||chr(10)|| +'
    '||chr(10)|| +' '||chr(10)|| +'
    '; + +t2:=t2||'
    '||chr(10)|| +'
    '||chr(10)|| +' '||chr(10)|| +'
    '; + +t3 := null; +t4 := null; +t5 := null; +t6 := null; +t7 := null; +t8 := null; +wwv_flow_api.create_list_template ( + p_id=>4841925462414913 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_list_template_current=>t, + p_list_template_noncurrent=> t2, + p_list_template_name=>'Vertical Images List', + p_theme_id => 7, + p_theme_class_id => 5, + p_list_template_before_rows=>'
    ', + p_list_template_after_rows=>'
    ', + p_translate_this_template => 'N', + p_list_template_comment=>''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/list/vertical_ordered_list +prompt ......list template 4842002006414913 + +begin + +declare + t varchar2(32767) := null; + t2 varchar2(32767) := null; + t3 varchar2(32767) := null; + t4 varchar2(32767) := null; + t5 varchar2(32767) := null; + t6 varchar2(32767) := null; + t7 varchar2(32767) := null; + t8 varchar2(32767) := null; + l_clob clob; + l_clob2 clob; + l_clob3 clob; + l_clob4 clob; + l_clob5 clob; + l_clob6 clob; + l_clob7 clob; + l_clob8 clob; + l_length number := 1; +begin +t:=t||'
  • #TEXT#
  • '; + +t2:=t2||'
  • #TEXT#
  • '; + +t3 := null; +t4 := null; +t5 := null; +t6 := null; +t7 := null; +t8 := null; +wwv_flow_api.create_list_template ( + p_id=>4842002006414913 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_list_template_current=>t, + p_list_template_noncurrent=> t2, + p_list_template_name=>'Vertical Ordered List', + p_theme_id => 7, + p_theme_class_id => 2, + p_list_template_before_rows=>'
      ', + p_list_template_after_rows=>'
    ', + p_translate_this_template => 'N', + p_list_template_comment=>''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/list/vertical_sidebar_list +prompt ......list template 4842129542414913 + +begin + +declare + t varchar2(32767) := null; + t2 varchar2(32767) := null; + t3 varchar2(32767) := null; + t4 varchar2(32767) := null; + t5 varchar2(32767) := null; + t6 varchar2(32767) := null; + t7 varchar2(32767) := null; + t8 varchar2(32767) := null; + l_clob clob; + l_clob2 clob; + l_clob3 clob; + l_clob4 clob; + l_clob5 clob; + l_clob6 clob; + l_clob7 clob; + l_clob8 clob; + l_length number := 1; +begin +t:=t||'
  • #TEXT#
  • '; + +t2:=t2||'
  • #TEXT#
  • '; + +t3 := null; +t4 := null; +t5 := null; +t6 := null; +t7 := null; +t8 := null; +wwv_flow_api.create_list_template ( + p_id=>4842129542414913 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_list_template_current=>t, + p_list_template_noncurrent=> t2, + p_list_template_name=>'Vertical Sidebar List', + p_theme_id => 7, + p_theme_class_id => 19, + p_list_template_before_rows=>'
      ', + p_list_template_after_rows=>'
    ', + p_translate_this_template => 'N', + p_list_template_comment=>''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/list/vertical_unordered_list_with_bullets +prompt ......list template 4842217442414913 + +begin + +declare + t varchar2(32767) := null; + t2 varchar2(32767) := null; + t3 varchar2(32767) := null; + t4 varchar2(32767) := null; + t5 varchar2(32767) := null; + t6 varchar2(32767) := null; + t7 varchar2(32767) := null; + t8 varchar2(32767) := null; + l_clob clob; + l_clob2 clob; + l_clob3 clob; + l_clob4 clob; + l_clob5 clob; + l_clob6 clob; + l_clob7 clob; + l_clob8 clob; + l_length number := 1; +begin +t:=t||'
  • #TEXT#
  • '; + +t2:=t2||'
  • #TEXT#
  • '; + +t3 := null; +t4 := null; +t5 := null; +t6 := null; +t7 := null; +t8 := null; +wwv_flow_api.create_list_template ( + p_id=>4842217442414913 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_list_template_current=>t, + p_list_template_noncurrent=> t2, + p_list_template_name=>'Vertical Unordered List with Bullets', + p_theme_id => 7, + p_theme_class_id => 1, + p_list_template_before_rows=>'
      ', + p_list_template_after_rows=>'
    ', + p_translate_this_template => 'N', + p_list_template_comment=>''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/list/vertical_unordered_list_without_bullets +prompt ......list template 4842305846414913 + +begin + +declare + t varchar2(32767) := null; + t2 varchar2(32767) := null; + t3 varchar2(32767) := null; + t4 varchar2(32767) := null; + t5 varchar2(32767) := null; + t6 varchar2(32767) := null; + t7 varchar2(32767) := null; + t8 varchar2(32767) := null; + l_clob clob; + l_clob2 clob; + l_clob3 clob; + l_clob4 clob; + l_clob5 clob; + l_clob6 clob; + l_clob7 clob; + l_clob8 clob; + l_length number := 1; +begin +t:=t||'
  • #TEXT#
  • '; + +t2:=t2||'
  • #TEXT#
  • '; + +t3 := null; +t4 := null; +t5 := null; +t6 := null; +t7 := null; +t8 := null; +wwv_flow_api.create_list_template ( + p_id=>4842305846414913 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_list_template_current=>t, + p_list_template_noncurrent=> t2, + p_list_template_name=>'Vertical Unordered List without Bullets', + p_theme_id => 7, + p_theme_class_id => 18, + p_list_template_before_rows=>'
      ', + p_list_template_after_rows=>'
    ', + p_translate_this_template => 'N', + p_list_template_comment=>''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/list/wizard_progress_bar_horizontal_train +prompt ......list template 4842416341414913 + +begin + +declare + t varchar2(32767) := null; + t2 varchar2(32767) := null; + t3 varchar2(32767) := null; + t4 varchar2(32767) := null; + t5 varchar2(32767) := null; + t6 varchar2(32767) := null; + t7 varchar2(32767) := null; + t8 varchar2(32767) := null; + l_clob clob; + l_clob2 clob; + l_clob3 clob; + l_clob4 clob; + l_clob5 clob; + l_clob6 clob; + l_clob7 clob; + l_clob8 clob; + l_length number := 1; +begin +t:=t||'
  • '||chr(10)|| +' #TEXT#'||chr(10)|| +'
  • '; + +t2:=t2||'
  • '||chr(10)|| +' #TEXT#'||chr(10)|| +'
  • '; + +t3 := null; +t4 := null; +t5 := null; +t6 := null; +t7 := null; +t8 := null; +wwv_flow_api.create_list_template ( + p_id=>4842416341414913 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_list_template_current=>t, + p_list_template_noncurrent=> t2, + p_list_template_name=>'Wizard Progress Bar, Horizontal Train', + p_theme_id => 7, + p_theme_class_id => 17, + p_list_template_before_rows=>'
    '||chr(10)|| +'
      ', + p_list_template_after_rows=>'
    '||chr(10)|| +'
    ', + p_translate_this_template => 'N', + p_list_template_comment=>''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/list/wizard_progress_list +prompt ......list template 4842501315414914 + +begin + +declare + t varchar2(32767) := null; + t2 varchar2(32767) := null; + t3 varchar2(32767) := null; + t4 varchar2(32767) := null; + t5 varchar2(32767) := null; + t6 varchar2(32767) := null; + t7 varchar2(32767) := null; + t8 varchar2(32767) := null; + l_clob clob; + l_clob2 clob; + l_clob3 clob; + l_clob4 clob; + l_clob5 clob; + l_clob6 clob; + l_clob7 clob; + l_clob8 clob; + l_length number := 1; +begin +t:=t||'
  • #TEXT#
  • '; + +t2:=t2||'
  • #TEXT#
  • '; + +t3 := null; +t4 := null; +t5 := null; +t6 := null; +t7 := null; +t8 := null; +wwv_flow_api.create_list_template ( + p_id=>4842501315414914 + wwv_flow_api.g_id_offset, + p_flow_id=>wwv_flow.g_flow_id, + p_list_template_current=>t, + p_list_template_noncurrent=> t2, + p_list_template_name=>'Wizard Progress List', + p_theme_id => 7, + p_theme_class_id => 17, + p_list_template_before_rows=>'
      ', + p_list_template_after_rows=>'
    ', + p_between_items=>'
  •  
  • ', + p_translate_this_template => 'N', + p_list_template_comment=>''); +end; +null; + +end; +/ + +prompt ...report templates +-- +--application/shared_components/user_interface/templates/report/borderless_report +prompt ......report template 4842613113414914 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + c4 varchar2(32767) := null; +begin +c1:=c1||'#COLUMN_VALUE#'; + +c2 := null; +c3 := null; +c4 := null; +wwv_flow_api.create_row_template ( + p_id=> 4842613113414914 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_row_template_name=> 'Borderless Report', + p_row_template1=> c1, + p_row_template_condition1=> '', + p_row_template2=> c2, + p_row_template_condition2=> '', + p_row_template3=> c3, + p_row_template_condition3=> '', + p_row_template4=> c4, + p_row_template_condition4=> '', + p_row_template_before_rows=>'#TOP_PAGINATION#'||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#PAGINATION#'||chr(10)|| +'
    ', + p_row_template_after_rows =>'
    #EXTERNAL_LINK##CSV_LINK#
    ', + p_row_template_table_attr =>'', + p_row_template_type =>'GENERIC_COLUMNS', + p_column_heading_template=>'#COLUMN_HEADER#', + p_row_template_display_cond1=>'0', + p_row_template_display_cond2=>'0', + p_row_template_display_cond3=>'0', + p_row_template_display_cond4=>'0', + p_next_page_template=>'#PAGINATION_NEXT#', + p_previous_page_template=>'#PAGINATION_PREVIOUS#', + p_next_set_template=>'#PAGINATION_NEXT_SET#', + p_previous_set_template=>'#PAGINATION_PREVIOUS_SET#', + p_row_style_checked=>'#ccc', + p_theme_id => 7, + p_theme_class_id => 1, + p_translate_this_template => 'N', + p_row_template_comment=> ''); +end; +null; + +end; +/ + + +begin + +begin +wwv_flow_api.create_row_template_patch ( + p_id => 4842613113414914 + wwv_flow_api.g_id_offset, + p_row_template_before_first =>'', + p_row_template_after_last =>''); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/report/fixed_headers +prompt ......report template 4842709891414914 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + c4 varchar2(32767) := null; +begin +c1:=c1||'

    #COLUMN_VALUE#

    '; + +c2:=c2||'

    #COLUMN_VALUE#

    '; + +c3 := null; +c4 := null; +wwv_flow_api.create_row_template ( + p_id=> 4842709891414914 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_row_template_name=> 'Fixed Headers', + p_row_template1=> c1, + p_row_template_condition1=> '', + p_row_template2=> c2, + p_row_template_condition2=> '', + p_row_template3=> c3, + p_row_template_condition3=> '', + p_row_template4=> c4, + p_row_template_condition4=> '', + p_row_template_before_rows=>'#TOP_PAGINATION#'||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#PAGINATION#'||chr(10)|| +'
    ', + p_row_template_after_rows =>'
    #EXTERNAL_LINK##CSV_LINK#
    ', + p_row_template_table_attr =>'OMIT', + p_row_template_type =>'GENERIC_COLUMNS', + p_before_column_heading=>''||chr(10)|| +'', + p_column_heading_template=>'#COLUMN_HEADER#', + p_after_column_heading=>''||chr(10)|| +''||chr(10)|| +'', + p_row_template_display_cond1=>'ODD_ROW_NUMBERS', + p_row_template_display_cond2=>'0', + p_row_template_display_cond3=>'0', + p_row_template_display_cond4=>'ODD_ROW_NUMBERS', + p_next_page_template=>'#PAGINATION_NEXT#'||chr(10)|| +'', + p_previous_page_template=>'#PAGINATION_PREVIOUS#', + p_next_set_template=>'#PAGINATION_NEXT_SET#', + p_previous_set_template=>'#PAGINATION_PREVIOUS_SET#', + p_row_style_mouse_over=>'#d6dae4', + p_row_style_checked=>'#d6dae4', + p_theme_id => 7, + p_theme_class_id => 7, + p_translate_this_template => 'N', + p_row_template_comment=> ''); +end; +null; + +end; +/ + + +begin + +begin +wwv_flow_api.create_row_template_patch ( + p_id => 4842709891414914 + wwv_flow_api.g_id_offset, + p_row_template_before_first =>'', + p_row_template_after_last =>''||chr(10)|| +''); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/report/horizontal_border +prompt ......report template 4842813330414914 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + c4 varchar2(32767) := null; +begin +c1:=c1||'#COLUMN_VALUE#'; + +c2 := null; +c3 := null; +c4 := null; +wwv_flow_api.create_row_template ( + p_id=> 4842813330414914 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_row_template_name=> 'Horizontal Border', + p_row_template1=> c1, + p_row_template_condition1=> '', + p_row_template2=> c2, + p_row_template_condition2=> '', + p_row_template3=> c3, + p_row_template_condition3=> '', + p_row_template4=> c4, + p_row_template_condition4=> '', + p_row_template_before_rows=>'#TOP_PAGINATION#'||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#PAGINATION#'||chr(10)|| +'
    ', + p_row_template_after_rows =>'
    #EXTERNAL_LINK##CSV_LINK#
    ', + p_row_template_table_attr =>'', + p_row_template_type =>'GENERIC_COLUMNS', + p_column_heading_template=>'#COLUMN_HEADER#', + p_row_template_display_cond1=>'0', + p_row_template_display_cond2=>'0', + p_row_template_display_cond3=>'0', + p_row_template_display_cond4=>'0', + p_next_page_template=>'#PAGINATION_NEXT#', + p_previous_page_template=>'#PAGINATION_PREVIOUS#', + p_next_set_template=>'#PAGINATION_NEXT_SET#', + p_previous_set_template=>'#PAGINATION_PREVIOUS_SET#', + p_row_style_checked=>'#ccc', + p_theme_id => 7, + p_theme_class_id => 2, + p_translate_this_template => 'N', + p_row_template_comment=> ''); +end; +null; + +end; +/ + + +begin + +begin +wwv_flow_api.create_row_template_patch ( + p_id => 4842813330414914 + wwv_flow_api.g_id_offset, + p_row_template_before_first =>'', + p_row_template_after_last =>''); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/report/one_column_unordered_list +prompt ......report template 4842926860414914 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + c4 varchar2(32767) := null; +begin +c1:=c1||'
  • #COLUMN_VALUE#
  • '; + +c2 := null; +c3 := null; +c4 := null; +wwv_flow_api.create_row_template ( + p_id=> 4842926860414914 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_row_template_name=> 'One Column Unordered List', + p_row_template1=> c1, + p_row_template_condition1=> '', + p_row_template2=> c2, + p_row_template_condition2=> '', + p_row_template3=> c3, + p_row_template_condition3=> '', + p_row_template4=> c4, + p_row_template_condition4=> '', + p_row_template_before_rows=>''||chr(10)|| +'#TOP_PAGINATION#'||chr(10)|| +''||chr(10)|| +'#PAGINATION#'||chr(10)|| +'
      ', + p_row_template_after_rows =>'
    #EXTERNAL_LINK##CSV_LINK#
    ', + p_row_template_table_attr =>'OMIT', + p_row_template_type =>'GENERIC_COLUMNS', + p_column_heading_template=>'', + p_row_template_display_cond1=>'NOT_CONDITIONAL', + p_row_template_display_cond2=>'NOT_CONDITIONAL', + p_row_template_display_cond3=>'NOT_CONDITIONAL', + p_row_template_display_cond4=>'NOT_CONDITIONAL', + p_next_page_template=>'#PAGINATION_NEXT#', + p_previous_page_template=>'#PAGINATION_PREVIOUS#', + p_next_set_template=>'#PAGINATION_NEXT_SET#', + p_previous_set_template=>'#PAGINATION_PREVIOUS_SET#', + p_theme_id => 7, + p_theme_class_id => 3, + p_translate_this_template => 'N', + p_row_template_comment=> ''); +end; +null; + +end; +/ + + +begin + +begin +wwv_flow_api.create_row_template_patch ( + p_id => 4842926860414914 + wwv_flow_api.g_id_offset, + p_row_template_before_first =>'OMIT', + p_row_template_after_last =>'OMIT'); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/report/search_results_report_link_text_link_target_detail1_detail2_last_modified +prompt ......report template 4843007415414914 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + c4 varchar2(32767) := null; +begin +c1:=c1||'
  • '||chr(10)|| +'#1#'||chr(10)|| +'#5##3#'||chr(10)|| +'#4#'||chr(10)|| +'
  • '; + +c2 := null; +c3 := null; +c4 := null; +wwv_flow_api.create_row_template ( + p_id=> 4843007415414914 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_row_template_name=> 'Search Results Report (link_text, link_target, detail1, detail2, last_modified)', + p_row_template1=> c1, + p_row_template_condition1=> '', + p_row_template2=> c2, + p_row_template_condition2=> '', + p_row_template3=> c3, + p_row_template_condition3=> '', + p_row_template4=> c4, + p_row_template_condition4=> '', + p_row_template_before_rows=>'
      ', + p_row_template_after_rows =>'
    '||chr(10)|| +'#PAGINATION#', + p_row_template_table_attr =>'', + p_row_template_type =>'NAMED_COLUMNS', + p_column_heading_template=>'', + p_row_template_display_cond1=>'0', + p_row_template_display_cond2=>'0', + p_row_template_display_cond3=>'0', + p_row_template_display_cond4=>'0', + p_next_page_template=>'', + p_previous_page_template=>''||chr(10)|| +'', + p_next_set_template=>''||chr(10)|| +'', + p_previous_set_template=>'', + p_theme_id => 7, + p_theme_class_id => 1, + p_translate_this_template => 'N', + p_row_template_comment=> ''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/report/standard +prompt ......report template 4843113555414914 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + c4 varchar2(32767) := null; +begin +c1:=c1||'#COLUMN_VALUE#'; + +c2 := null; +c3 := null; +c4 := null; +wwv_flow_api.create_row_template ( + p_id=> 4843113555414914 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_row_template_name=> 'Standard', + p_row_template1=> c1, + p_row_template_condition1=> '', + p_row_template2=> c2, + p_row_template_condition2=> '', + p_row_template3=> c3, + p_row_template_condition3=> '', + p_row_template4=> c4, + p_row_template_condition4=> '', + p_row_template_before_rows=>'#TOP_PAGINATION#'||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#PAGINATION#'||chr(10)|| +'
    ', + p_row_template_after_rows =>'
    #EXTERNAL_LINK##CSV_LINK#
    ', + p_row_template_table_attr =>'', + p_row_template_type =>'GENERIC_COLUMNS', + p_column_heading_template=>'#COLUMN_HEADER#', + p_row_template_display_cond1=>'0', + p_row_template_display_cond2=>'0', + p_row_template_display_cond3=>'0', + p_row_template_display_cond4=>'0', + p_next_page_template=>'#PAGINATION_NEXT#', + p_previous_page_template=>'#PAGINATION_PREVIOUS#', + p_next_set_template=>'#PAGINATION_NEXT_SET#', + p_previous_set_template=>'#PAGINATION_PREVIOUS_SET#', + p_row_style_mouse_over=>'#DDD', + p_row_style_checked=>'#ccc', + p_theme_id => 7, + p_theme_class_id => 4, + p_translate_this_template => 'N', + p_row_template_comment=> ''); +end; +null; + +end; +/ + + +begin + +begin +wwv_flow_api.create_row_template_patch ( + p_id => 4843113555414914 + wwv_flow_api.g_id_offset, + p_row_template_before_first =>'', + p_row_template_after_last =>''); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/report/standard_alternating_row_colors +prompt ......report template 4843205265414914 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + c4 varchar2(32767) := null; +begin +c1:=c1||'#COLUMN_VALUE#'; + +c2:=c2||'#COLUMN_VALUE#'; + +c3 := null; +c4 := null; +wwv_flow_api.create_row_template ( + p_id=> 4843205265414914 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_row_template_name=> 'Standard, Alternating Row Colors', + p_row_template1=> c1, + p_row_template_condition1=> '', + p_row_template2=> c2, + p_row_template_condition2=> '', + p_row_template3=> c3, + p_row_template_condition3=> '', + p_row_template4=> c4, + p_row_template_condition4=> '', + p_row_template_before_rows=>'#TOP_PAGINATION#'||chr(10)|| +''||chr(10)|| +'#PAGINATION#'||chr(10)|| +'
    '||chr(10)|| +'', + p_row_template_after_rows =>'
    #EXTERNAL_LINK##CSV_LINK#
    ', + p_row_template_table_attr =>'OMIT', + p_row_template_type =>'GENERIC_COLUMNS', + p_column_heading_template=>'#COLUMN_HEADER#', + p_row_template_display_cond1=>'ODD_ROW_NUMBERS', + p_row_template_display_cond2=>'0', + p_row_template_display_cond3=>'0', + p_row_template_display_cond4=>'ODD_ROW_NUMBERS', + p_next_page_template=>'#PAGINATION_NEXT#', + p_previous_page_template=>'#PAGINATION_PREVIOUS#', + p_next_set_template=>'#PAGINATION_NEXT_SET#', + p_previous_set_template=>'#PAGINATION_PREVIOUS_SET#', + p_theme_id => 7, + p_theme_class_id => 5, + p_translate_this_template => 'N', + p_row_template_comment=> ''); +end; +null; + +end; +/ + + +begin + +begin +wwv_flow_api.create_row_template_patch ( + p_id => 4843205265414914 + wwv_flow_api.g_id_offset, + p_row_template_before_first =>'', + p_row_template_after_last =>''||chr(10)|| +''); +exception when others then null; +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/report/two_column_portlet +prompt ......report template 4843314147414914 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + c4 varchar2(32767) := null; +begin +c1:=c1||'
    '||chr(10)|| +'
    #1#
    '||chr(10)|| +'
    #2#
    '||chr(10)|| +'
    '; + +c2 := null; +c3 := null; +c4 := null; +wwv_flow_api.create_row_template ( + p_id=> 4843314147414914 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_row_template_name=> 'Two Column Portlet', + p_row_template1=> c1, + p_row_template_condition1=> '', + p_row_template2=> c2, + p_row_template_condition2=> '', + p_row_template3=> c3, + p_row_template_condition3=> '', + p_row_template4=> c4, + p_row_template_condition4=> '', + p_row_template_before_rows=>'
    ', + p_row_template_after_rows =>'
    ', + p_row_template_table_attr =>'', + p_row_template_type =>'NAMED_COLUMNS', + p_column_heading_template=>'', + p_row_template_display_cond1=>'0', + p_row_template_display_cond2=>'0', + p_row_template_display_cond3=>'0', + p_row_template_display_cond4=>'0', + p_theme_id => 7, + p_theme_class_id => 7, + p_translate_this_template => 'N', + p_row_template_comment=> ''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/report/value_attribute_pairs_div +prompt ......report template 4843416487414914 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + c4 varchar2(32767) := null; +begin +c1:=c1||'
    '||chr(10)|| +'
    #COLUMN_HEADER#
    '||chr(10)|| +'
    #COLUMN_VALUE#
    '||chr(10)|| +'
    '; + +c2 := null; +c3 := null; +c4 := null; +wwv_flow_api.create_row_template ( + p_id=> 4843416487414914 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_row_template_name=> 'Value Attribute Pairs - Div', + p_row_template1=> c1, + p_row_template_condition1=> '', + p_row_template2=> c2, + p_row_template_condition2=> '', + p_row_template3=> c3, + p_row_template_condition3=> '', + p_row_template4=> c4, + p_row_template_condition4=> '', + p_row_template_before_rows=>'
    ', + p_row_template_after_rows =>'
    ', + p_row_template_table_attr =>'', + p_row_template_type =>'GENERIC_COLUMNS', + p_column_heading_template=>'', + p_row_template_display_cond1=>'0', + p_row_template_display_cond2=>'0', + p_row_template_display_cond3=>'0', + p_row_template_display_cond4=>'0', + p_theme_id => 7, + p_theme_class_id => 6, + p_translate_this_template => 'N', + p_row_template_comment=> ''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/report/value_attribute_pairs_table +prompt ......report template 4843512470414914 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + c4 varchar2(32767) := null; +begin +c1:=c1||'#COLUMN_HEADER##COLUMN_VALUE#'; + +c2 := null; +c3 := null; +c4 := null; +wwv_flow_api.create_row_template ( + p_id=> 4843512470414914 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_row_template_name=> 'Value Attribute Pairs - Table', + p_row_template1=> c1, + p_row_template_condition1=> '', + p_row_template2=> c2, + p_row_template_condition2=> '', + p_row_template3=> c3, + p_row_template_condition3=> '', + p_row_template4=> c4, + p_row_template_condition4=> '', + p_row_template_before_rows=>'#TOP_PAGINATION##PAGINATION#
    ', + p_row_template_after_rows =>'
    #EXTERNAL_LINK##CSV_LINK#
    ', + p_row_template_table_attr =>'', + p_row_template_type =>'GENERIC_COLUMNS', + p_column_heading_template=>'', + p_row_template_display_cond1=>'0', + p_row_template_display_cond2=>'0', + p_row_template_display_cond3=>'0', + p_row_template_display_cond4=>'0', + p_next_page_template=>'#PAGINATION_NEXT#', + p_previous_page_template=>'#PAGINATION_PREVIOUS#', + p_next_set_template=>'#PAGINATION_NEXT_SET#', + p_previous_set_template=>'#PAGINATION_PREVIOUS_SET#', + p_theme_id => 7, + p_theme_class_id => 6, + p_translate_this_template => 'N', + p_row_template_comment=> ''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/report/borderless_report_with_colors +prompt ......report template 4963602874586482 + +begin + +declare + c1 varchar2(32767) := null; + c2 varchar2(32767) := null; + c3 varchar2(32767) := null; + c4 varchar2(32767) := null; +begin +c1:=c1||'#COLUMN_VALUE#'; + +c2:=c2||'#COLUMN_VALUE#'; + +c3:=c3||'#COLUMN_VALUE#'; + +c4:=c4||'#COLUMN_VALUE#'; + +wwv_flow_api.create_row_template ( + p_id=> 4963602874586482 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_row_template_name=> 'Borderless Report with Colors', + p_row_template1=> c1, + p_row_template_condition1=> '''#STATUS#''=''NOTX''', + p_row_template2=> c2, + p_row_template_condition2=> '''#STATUS#''=''UNKN''', + p_row_template3=> c3, + p_row_template_condition3=> '''#STATUS#''=''IGNR'' or ''#STATUS#''=''EXCL''', + p_row_template4=> c4, + p_row_template_condition4=> '', + p_row_template_before_rows=>'#TOP_PAGINATION#'||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'#PAGINATION#'||chr(10)|| +'
    ', + p_row_template_after_rows =>'
    #EXTERNAL_LINK##CSV_LINK#
    ', + p_row_template_table_attr =>'', + p_row_template_type =>'GENERIC_COLUMNS', + p_column_heading_template=>'#COLUMN_HEADER#', + p_row_template_display_cond1=>'NOT_CONDITIONAL', + p_row_template_display_cond2=>'NOT_CONDITIONAL', + p_row_template_display_cond3=>'NOT_CONDITIONAL', + p_row_template_display_cond4=>'0', + p_next_page_template=>'#PAGINATION_NEXT#', + p_previous_page_template=>'#PAGINATION_PREVIOUS#', + p_next_set_template=>'#PAGINATION_NEXT_SET#', + p_previous_set_template=>'#PAGINATION_PREVIOUS_SET#', + p_row_style_checked=>'#ccc', + p_theme_id => 7, + p_theme_class_id => 1, + p_row_template_comment=> ''); +end; +null; + +end; +/ + + +begin + +begin +wwv_flow_api.create_row_template_patch ( + p_id => 4963602874586482 + wwv_flow_api.g_id_offset, + p_row_template_before_first =>'', + p_row_template_after_last =>''); +exception when others then null; +end; +null; + +end; +/ + +prompt ...label templates +-- +--application/shared_components/user_interface/templates/label/no_label +prompt ......label template 4843631236414915 + +begin + +begin +wwv_flow_api.create_field_template ( + p_id=> 4843631236414915 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_template_name=>'No Label', + p_template_body1=>'', + p_template_body2=>'', + p_on_error_before_label=>'
    ', + p_on_error_after_label=>'
    #ERROR_MESSAGE#
    ', + p_theme_id => 7, + p_theme_class_id => 13, + p_translate_this_template=> 'N', + p_template_comment=> ''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/label/optional +prompt ......label template 4843706770414915 + +begin + +begin +wwv_flow_api.create_field_template ( + p_id=> 4843706770414915 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_template_name=>'Optional', + p_template_body1=>'', + p_on_error_before_label=>'
    ', + p_on_error_after_label=>'
    #ERROR_MESSAGE#
    ', + p_theme_id => 7, + p_theme_class_id => 3, + p_translate_this_template=> 'N', + p_template_comment=> ''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/label/optional_with_help +prompt ......label template 4843803724414915 + +begin + +begin +wwv_flow_api.create_field_template ( + p_id=> 4843803724414915 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_template_name=>'Optional with help', + p_template_body1=>'', + p_on_error_before_label=>'
    ', + p_on_error_after_label=>'
    #ERROR_MESSAGE#
    ', + p_theme_id => 7, + p_theme_class_id => 1, + p_translate_this_template=> 'N', + p_template_comment=> ''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/label/required +prompt ......label template 4843906688414915 + +begin + +begin +wwv_flow_api.create_field_template ( + p_id=> 4843906688414915 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_template_name=>'Required', + p_template_body1=>'', + p_on_error_before_label=>'
    ', + p_on_error_after_label=>'
    #ERROR_MESSAGE#
    ', + p_theme_id => 7, + p_theme_class_id => 4, + p_translate_this_template=> 'N', + p_template_comment=> ''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/label/required_with_help +prompt ......label template 4844030761414915 + +begin + +begin +wwv_flow_api.create_field_template ( + p_id=> 4844030761414915 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_template_name=>'Required with help', + p_template_body1=>'', + p_on_error_before_label=>'
    ', + p_on_error_after_label=>'
    #ERROR_MESSAGE#
    ', + p_theme_id => 7, + p_theme_class_id => 2, + p_translate_this_template=> 'N', + p_template_comment=> ''); +end; +null; + +end; +/ + +prompt ...breadcrumb templates +-- +--application/shared_components/user_interface/templates/breadcrumb/breadcrumb_menu +prompt ......template 4844109108414915 + +begin + +begin +wwv_flow_api.create_menu_template ( + p_id=> 4844109108414915 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=>'Breadcrumb Menu', + p_before_first=>'
    ', + p_max_levels=>12, + p_start_with_node=>'PARENT_TO_LEAF', + p_theme_id => 7, + p_theme_class_id => 1, + p_translate_this_template => 'N', + p_template_comments=>''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/breadcrumb/hierarchical_menu +prompt ......template 4844228117414915 + +begin + +begin +wwv_flow_api.create_menu_template ( + p_id=> 4844228117414915 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=>'Hierarchical Menu', + p_before_first=>'
      ', + p_current_page_option=>'
    • #NAME#
    • ', + p_non_current_page_option=>'
    • #NAME#
    • ', + p_menu_link_attributes=>'', + p_between_levels=>'', + p_after_last=>'
    ', + p_max_levels=>11, + p_start_with_node=>'CHILD_MENU', + p_theme_id => 7, + p_theme_class_id => 2, + p_translate_this_template => 'N', + p_template_comments=>''); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/popuplov +prompt ...popup list of values templates +-- +prompt ......template 4844920567414917 + +begin + +begin +wwv_flow_api.create_popup_lov_template ( + p_id=> 4844920567414917 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_popup_icon=>'#IMAGE_PREFIX#list_gray.gif', + p_popup_icon_attr=>'width="13" height="13" alt="Popup Lov"', + p_popup_icon2=>'', + p_popup_icon_attr2=>'', + p_page_name=>'winlov', + p_page_title=>'Search Dialog', + p_page_html_head=>''||chr(10)|| +'', + p_page_body_attr=>'onload="first_field()" class="pop-up-lov"', + p_before_field_text=>'
    ', + p_page_heading_text=>'', + p_page_footer_text =>'', + p_filter_width =>'20', + p_filter_max_width =>'100', + p_filter_text_attr =>'', + p_find_button_text =>'Search', + p_find_button_image=>'', + p_find_button_attr =>'', + p_close_button_text=>'Close', + p_close_button_image=>'', + p_close_button_attr=>'', + p_next_button_text =>'Next >', + p_next_button_image=>'', + p_next_button_attr =>'', + p_prev_button_text =>'< Previous', + p_prev_button_image=>'', + p_prev_button_attr =>'', + p_after_field_text=>'
    ', + p_scrollbars=>'1', + p_resizable=>'1', + p_width =>'400', + p_height=>'450', + p_result_row_x_of_y=>'
    Row(s) #FIRST_ROW# - #LAST_ROW#
    ', + p_result_rows_per_pg=>500, + p_before_result_set=>'
    ', + p_theme_id => 7, + p_theme_class_id => 1, + p_translate_this_template => 'N', + p_after_result_set =>'
    '); +end; +null; + +end; +/ + +prompt ...calendar templates +-- +--application/shared_components/user_interface/templates/calendar/calendar +prompt ......template 4844317242414915 + +begin + +begin +wwv_flow_api.create_calendar_template( + p_id=> 4844317242414915 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_cal_template_name=>'Calendar', + p_translate_this_template=> 'N', + p_day_of_week_format=> '#IDAY#', + p_month_title_format=> ' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +''||chr(10)|| +'
    #IMONTH# #YYYY#
    ', + p_month_open_format=> '', + p_month_close_format=> '
    '||chr(10)|| +'', + p_day_title_format=> '
    #DD#
    ', + p_day_open_format=> '', + p_day_close_format=> '', + p_today_open_format=> '', + p_weekend_title_format=> '
    #DD#
    ', + p_weekend_open_format => '', + p_weekend_close_format => '', + p_nonday_title_format => '
    #DD#
    ', + p_nonday_open_format => '', + p_nonday_close_format => '', + p_week_title_format => '', + p_week_open_format => '', + p_week_close_format => ' ', + p_daily_title_format => '', + p_daily_close_format => '', + p_weekly_title_format => '
    #IMONTH# #DD#, #YYYY#
    ', + p_daily_open_format => '
    '||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'', + p_weekly_month_open_format => '
    #WTITLE#
    ', + p_weekly_day_of_week_format => '#IDAY#
    #MM#/#DD#
    ', + p_weekly_month_close_format => '
    ', + p_weekly_day_title_format => '', + p_weekly_day_open_format => '', + p_weekly_day_close_format => '
    ', + p_weekly_today_open_format => '', + p_weekly_weekend_title_format => '', + p_weekly_weekend_open_format => '', + p_weekly_weekend_close_format => '
    ', + p_weekly_time_open_format => '', + p_weekly_time_close_format => '
    ', + p_weekly_time_title_format => '#TIME#', + p_weekly_hour_open_format => '', + p_weekly_hour_close_format => '', + p_daily_day_of_week_format => '#IDAY# #DD#/#MM#', + p_daily_month_title_format => '
    #IMONTH# #DD#, #YYYY#
    '||chr(10)|| +'', + p_daily_month_open_format => '', + p_daily_month_close_format => '
    ', + p_daily_day_title_format => '', + p_daily_day_open_format => '', + p_daily_day_close_format => '
    ', + p_daily_today_open_format => '', + p_daily_time_open_format => '', + p_daily_time_close_format => '
    ', + p_daily_time_title_format => '#TIME#', + p_daily_hour_open_format => '', + p_daily_hour_close_format => '', + p_cust_month_title_format => ' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' ', + p_cust_month_open_format => '
    #WTITLE#
    ', + p_cust_day_of_week_format => '#IDAY#
    ', + p_cust_month_close_format => '
    '||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'', + p_cust_week_title_format => '', + p_cust_week_open_format => '', + p_cust_week_close_format => ' ', + p_cust_day_title_format => '
    #DD#
    ', + p_cust_day_open_format => '', + p_cust_day_close_format => '', + p_cust_today_open_format => '', + p_cust_daily_title_format => '', + p_cust_daily_open_format => '', + p_cust_daily_close_format => '', + p_cust_nonday_title_format => '
    #DD#
    ', + p_cust_nonday_open_format => '', + p_cust_nonday_close_format => '', + p_cust_weekend_title_format => '
    #DD#
    ', + p_cust_weekend_open_format => '', + p_cust_weekend_close_format => '', + p_cust_hour_open_format => '', + p_cust_hour_close_format => '', + p_cust_time_title_format => '#TIME#', + p_cust_time_open_format => '', + p_cust_time_close_format => '
    ', + p_cust_wk_month_title_format => ''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'', + p_cust_wk_month_open_format => '
    #WTITLE#
    ', + p_cust_wk_day_of_week_format => '#IDAY#
    #MM#/#DD#
    ', + p_cust_wk_month_close_format => '
    ', + p_cust_wk_week_title_format => '', + p_cust_wk_week_open_format => '', + p_cust_wk_week_close_format => '', + p_cust_wk_day_title_format => '', + p_cust_wk_day_open_format => '', + p_cust_wk_day_close_format => '
    ', + p_cust_wk_today_open_format => '', + p_cust_wk_weekend_title_format => '', + p_cust_wk_weekend_open_format => '', + p_cust_wk_weekend_close_format => '
    ', + p_cust_month_day_height_pix => '75', + p_cust_month_day_height_per => '', + p_cust_week_day_width_pix => '', + p_cust_week_day_width_per => '14', + p_theme_id => 7, + p_theme_class_id => 1, + p_reference_id=> null); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/calendar/calendar_alternative_1 +prompt ......template 4844531208414916 + +begin + +begin +wwv_flow_api.create_calendar_template( + p_id=> 4844531208414916 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_cal_template_name=>'Calendar, Alternative 1', + p_translate_this_template=> 'N', + p_day_of_week_format=> '#IDAY#', + p_month_title_format=> ' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +''||chr(10)|| +'
    #IMONTH# #YYYY#
    ', + p_month_open_format=> '', + p_month_close_format=> '
    '||chr(10)|| +'', + p_day_title_format=> '
    #DD#
    ', + p_day_open_format=> '', + p_day_close_format=> '', + p_today_open_format=> '', + p_weekend_title_format=> '
    #DD#
    ', + p_weekend_open_format => '', + p_weekend_close_format => '', + p_nonday_title_format => '
    #DD#
    ', + p_nonday_open_format => '', + p_nonday_close_format => '', + p_week_title_format => '', + p_week_open_format => '', + p_week_close_format => ' ', + p_daily_title_format => '', + p_daily_close_format => '', + p_weekly_title_format => '
    #IMONTH# #DD#, #YYYY#
    ', + p_daily_open_format => '
    '||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'', + p_weekly_month_open_format => '
    #WTITLE#
    ', + p_weekly_day_of_week_format => '#IDAY#
    #MM#/#DD#
    ', + p_weekly_month_close_format => '
    ', + p_weekly_day_title_format => '', + p_weekly_day_open_format => '', + p_weekly_day_close_format => '
    ', + p_weekly_today_open_format => '', + p_weekly_weekend_title_format => '', + p_weekly_weekend_open_format => '', + p_weekly_weekend_close_format => '
    ', + p_weekly_time_open_format => '', + p_weekly_time_close_format => '
    ', + p_weekly_time_title_format => '#TIME#', + p_weekly_hour_open_format => '', + p_weekly_hour_close_format => '', + p_daily_day_of_week_format => '#IDAY# #DD#/#MM#', + p_daily_month_title_format => '
    #IMONTH# #DD#, #YYYY#
    '||chr(10)|| +'', + p_daily_month_open_format => '', + p_daily_month_close_format => '
    ', + p_daily_day_title_format => '', + p_daily_day_open_format => '', + p_daily_day_close_format => '
    ', + p_daily_today_open_format => '', + p_daily_time_open_format => '', + p_daily_time_close_format => '
    ', + p_daily_time_title_format => '#TIME#', + p_daily_hour_open_format => '', + p_daily_hour_close_format => '', + p_cust_month_title_format => ' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' ', + p_cust_month_open_format => '
    #WTITLE#
    ', + p_cust_day_of_week_format => '#IDAY#
    '||chr(10)|| +'', + p_cust_month_close_format => '
    '||chr(10)|| +''||chr(10)|| +'', + p_cust_week_title_format => '', + p_cust_week_open_format => '', + p_cust_week_close_format => '', + p_cust_day_title_format => '
    #DD#
    ', + p_cust_day_open_format => '', + p_cust_day_close_format => '', + p_cust_today_open_format => '', + p_cust_daily_title_format => '', + p_cust_daily_open_format => '', + p_cust_daily_close_format => '', + p_cust_nonday_title_format => '
    #DD#
    ', + p_cust_nonday_open_format => '', + p_cust_nonday_close_format => '', + p_cust_weekend_title_format => '
    #DD#
    ', + p_cust_weekend_open_format => '', + p_cust_weekend_close_format => '', + p_cust_hour_open_format => '', + p_cust_hour_close_format => '', + p_cust_time_title_format => '#TIME#', + p_cust_time_open_format => '', + p_cust_time_close_format => '
    ', + p_cust_wk_month_title_format => ''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'', + p_cust_wk_month_open_format => '
    #WTITLE#
    ', + p_cust_wk_day_of_week_format => '#IDAY#
    #MM#/#DD#
    '||chr(10)|| +'', + p_cust_wk_month_close_format => '
    ', + p_cust_wk_week_title_format => '', + p_cust_wk_week_open_format => '', + p_cust_wk_week_close_format => '', + p_cust_wk_day_title_format => '', + p_cust_wk_day_open_format => '', + p_cust_wk_day_close_format => '
    ', + p_cust_wk_today_open_format => '', + p_cust_wk_weekend_title_format => '', + p_cust_wk_weekend_open_format => '', + p_cust_wk_weekend_close_format => '
    ', + p_cust_month_day_height_pix => '100', + p_cust_month_day_height_per => '', + p_cust_week_day_width_pix => '100', + p_cust_week_day_width_per => '', + p_theme_id => 7, + p_theme_class_id => 2, + p_reference_id=> null); +end; +null; + +end; +/ + +--application/shared_components/user_interface/templates/calendar/small_calendar +prompt ......template 4844722889414916 + +begin + +begin +wwv_flow_api.create_calendar_template( + p_id=> 4844722889414916 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_cal_template_name=>'Small Calendar', + p_translate_this_template=> 'N', + p_day_of_week_format=> '#DY#', + p_month_title_format=> ' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +''||chr(10)|| +'
    #IMONTH# #YYYY#
    ', + p_month_open_format=> '', + p_month_close_format=> '
    ', + p_day_title_format=> '
    #DD#
    ', + p_day_open_format=> '', + p_day_close_format=> '', + p_today_open_format=> '', + p_weekend_title_format=> '
    #DD#
    ', + p_weekend_open_format => '', + p_weekend_close_format => '', + p_nonday_title_format => '
    #DD#
    ', + p_nonday_open_format => '', + p_nonday_close_format => '', + p_week_title_format => '', + p_week_open_format => '', + p_week_close_format => ' ', + p_daily_title_format => '', + p_daily_close_format => '', + p_weekly_title_format => '
    #IMONTH# #DD#, #YYYY#
    ', + p_daily_open_format => '
    '||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'', + p_weekly_month_open_format => '
    #WTITLE#
    ', + p_weekly_day_of_week_format => '#DY#
    #MM#/#DD#
    ', + p_weekly_month_close_format => '
    ', + p_weekly_day_title_format => '', + p_weekly_day_open_format => '
    ', + p_weekly_day_close_format => '
    ', + p_weekly_today_open_format => '
    ', + p_weekly_weekend_title_format => '', + p_weekly_weekend_open_format => '
    ', + p_weekly_weekend_close_format => '
    ', + p_weekly_time_open_format => '', + p_weekly_time_close_format => '
    ', + p_weekly_time_title_format => '#TIME#', + p_weekly_hour_open_format => '', + p_weekly_hour_close_format => '', + p_daily_day_of_week_format => '#DY# #DD#/#MM#', + p_daily_month_title_format => '
    #IMONTH# #DD#, #YYYY#
    '||chr(10)|| +'', + p_daily_month_open_format => '', + p_daily_month_close_format => '
    ', + p_daily_day_title_format => '', + p_daily_day_open_format => '', + p_daily_day_close_format => '
    ', + p_daily_today_open_format => '', + p_daily_time_open_format => '', + p_daily_time_close_format => '
    ', + p_daily_time_title_format => '#TIME#', + p_daily_hour_open_format => '', + p_daily_hour_close_format => '', + p_cust_month_title_format => ' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' '||chr(10)|| +' ', + p_cust_month_open_format => '
    #WTITLE#
    ', + p_cust_day_of_week_format => '#DY#
    ', + p_cust_month_close_format => '
    '||chr(10)|| +''||chr(10)|| +'', + p_cust_week_title_format => '', + p_cust_week_open_format => '', + p_cust_week_close_format => '', + p_cust_day_title_format => '
    #DD#
    ', + p_cust_day_open_format => '', + p_cust_day_close_format => '', + p_cust_today_open_format => '', + p_cust_daily_title_format => '', + p_cust_daily_open_format => '', + p_cust_daily_close_format => '', + p_cust_nonday_title_format => '
    #DD#
    ', + p_cust_nonday_open_format => '', + p_cust_nonday_close_format => '', + p_cust_weekend_title_format => '
    #DD#
    ', + p_cust_weekend_open_format => '', + p_cust_weekend_close_format => '', + p_cust_hour_open_format => '', + p_cust_hour_close_format => '', + p_cust_time_title_format => '#TIME#', + p_cust_time_open_format => '', + p_cust_time_close_format => '
    ', + p_cust_wk_month_title_format => ''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +''||chr(10)|| +'', + p_cust_wk_month_open_format => '
    #WTITLE#
    ', + p_cust_wk_day_of_week_format => '#DY#
    #MM#/#DD#
    ', + p_cust_wk_month_close_format => '
    '||chr(10)|| +''||chr(10)|| +'', + p_cust_wk_week_title_format => '', + p_cust_wk_week_open_format => '', + p_cust_wk_week_close_format => '', + p_cust_wk_day_title_format => '', + p_cust_wk_day_open_format => '', + p_cust_wk_day_close_format => '
    ', + p_cust_wk_today_open_format => '', + p_cust_wk_weekend_title_format => '', + p_cust_wk_weekend_open_format => '', + p_cust_wk_weekend_close_format => '
    ', + p_cust_month_day_height_pix => '14', + p_cust_month_day_height_per => '14', + p_cust_week_day_width_pix => '40', + p_cust_week_day_width_per => '14', + p_theme_id => 7, + p_theme_class_id => 3, + p_reference_id=> null); +end; +null; + +end; +/ + +prompt ...application themes +-- +--application/shared_components/user_interface/themes/modern_blue +prompt ......theme 4845000128414917 +begin +wwv_flow_api.create_theme ( + p_id =>4845000128414917 + wwv_flow_api.g_id_offset, + p_flow_id =>wwv_flow.g_flow_id, + p_theme_id => 7, + p_theme_name=>'Modern Blue', + p_default_page_template=>4837525507414910 + wwv_flow_api.g_id_offset, + p_error_template=>4837131094414910 + wwv_flow_api.g_id_offset, + p_printer_friendly_template=>4837724123414910 + wwv_flow_api.g_id_offset, + p_breadcrumb_display_point=>'REGION_POSITION_01', + p_sidebar_display_point=>'REGION_POSITION_02', + p_login_template=>4836711590414909 + wwv_flow_api.g_id_offset, + p_default_button_template=>4838226535414911 + wwv_flow_api.g_id_offset, + p_default_region_template=>4840201642414912 + wwv_flow_api.g_id_offset, + p_default_chart_template =>4839217975414912 + wwv_flow_api.g_id_offset, + p_default_form_template =>4839304121414912 + wwv_flow_api.g_id_offset, + p_default_reportr_template =>4840201642414912 + wwv_flow_api.g_id_offset, + p_default_tabform_template=>4840201642414912 + wwv_flow_api.g_id_offset, + p_default_wizard_template=>4840913627414912 + wwv_flow_api.g_id_offset, + p_default_menur_template=>4838801336414912 + wwv_flow_api.g_id_offset, + p_default_listr_template=>4839116402414912 + wwv_flow_api.g_id_offset, + p_default_irr_template=>4839831975414912 + wwv_flow_api.g_id_offset, + p_default_report_template =>4843113555414914 + wwv_flow_api.g_id_offset, + p_default_label_template=>4843803724414915 + wwv_flow_api.g_id_offset, + p_default_menu_template=>4844109108414915 + wwv_flow_api.g_id_offset, + p_default_calendar_template=>4844317242414915 + wwv_flow_api.g_id_offset, + p_default_list_template=>4842217442414913 + wwv_flow_api.g_id_offset, + p_default_option_label=>4843803724414915 + wwv_flow_api.g_id_offset, + p_default_required_label=>4844030761414915 + wwv_flow_api.g_id_offset); +end; +/ + +prompt ...build options used by application 700 +-- + +begin + +null; + +end; +/ + +--application/shared_components/globalization/messages +prompt ...messages used by application: 700 +-- +--application/shared_components/globalization/dyntranslations +prompt ...dynamic translations used by application: 700 +-- +--application/shared_components/globalization/language +prompt ...Language Maps for Application 700 +-- + +begin + +null; + +end; +/ + +prompt ...Shortcuts +-- +prompt ...web services (9iR2 or better) +-- +prompt ...shared queries +-- +prompt ...report layouts +-- +prompt ...authentication schemes +-- +--application/shared_components/security/authentication/application_express +prompt ......scheme 4845116734414920 + +begin + +declare + s1 varchar2(32767) := null; + s2 varchar2(32767) := null; + s3 varchar2(32767) := null; + s4 varchar2(32767) := null; + s5 varchar2(32767) := null; +begin +s1 := null; +s2 := null; +s3 := null; +s4:=s4||'-BUILTIN-'; + +s5 := null; +wwv_flow_api.create_auth_setup ( + p_id=> 4845116734414920 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> 'Application Express', + p_description=>'Use internal Application Express account credentials and login page in this application.', + p_page_sentry_function=> s1, + p_sess_verify_function=> s2, + p_pre_auth_process=> s3, + p_auth_function=> s4, + p_post_auth_process=> s5, + p_invalid_session_page=>'101', + p_invalid_session_url=>'', + p_cookie_name=>'', + p_cookie_path=>'', + p_cookie_domain=>'', + p_use_secure_cookie_yn=>'', + p_ldap_host=>'', + p_ldap_port=>'', + p_ldap_string=>'', + p_attribute_01=>'', + p_attribute_02=>'wwv_flow_custom_auth_std.logout?p_this_flow=&APP_ID.&p_next_flow_page_sess=&APP_ID.:1', + p_attribute_03=>'', + p_attribute_04=>'', + p_attribute_05=>'', + p_attribute_06=>'', + p_attribute_07=>'', + p_attribute_08=>'', + p_required_patch => null + wwv_flow_api.g_id_offset); +end; +null; + +end; +/ + +--application/shared_components/security/authentication/database +prompt ......scheme 4845226213414920 + +begin + +declare + s1 varchar2(32767) := null; + s2 varchar2(32767) := null; + s3 varchar2(32767) := null; + s4 varchar2(32767) := null; + s5 varchar2(32767) := null; +begin +s1:=s1||'-DATABASE-'; + +s2 := null; +s3 := null; +s4 := null; +s5 := null; +wwv_flow_api.create_auth_setup ( + p_id=> 4845226213414920 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> 'DATABASE', + p_description=>'Use database authentication (user identified by DAD).', + p_page_sentry_function=> s1, + p_sess_verify_function=> s2, + p_pre_auth_process=> s3, + p_auth_function=> s4, + p_post_auth_process=> s5, + p_invalid_session_page=>'', + p_invalid_session_url=>'', + p_cookie_name=>'', + p_cookie_path=>'', + p_cookie_domain=>'', + p_use_secure_cookie_yn=>'', + p_ldap_host=>'', + p_ldap_port=>'', + p_ldap_string=>'', + p_attribute_01=>'', + p_attribute_02=>'', + p_attribute_03=>'', + p_attribute_04=>'', + p_attribute_05=>'', + p_attribute_06=>'', + p_attribute_07=>'', + p_attribute_08=>'', + p_required_patch => null + wwv_flow_api.g_id_offset); +end; +null; + +end; +/ + +--application/shared_components/security/authentication/database_account +prompt ......scheme 4845319779414920 + +begin + +declare + s1 varchar2(32767) := null; + s2 varchar2(32767) := null; + s3 varchar2(32767) := null; + s4 varchar2(32767) := null; + s5 varchar2(32767) := null; +begin +s1 := null; +s2 := null; +s3 := null; +s4:=s4||'return false; end;--'; + +s5 := null; +wwv_flow_api.create_auth_setup ( + p_id=> 4845319779414920 + wwv_flow_api.g_id_offset, + p_flow_id=> wwv_flow.g_flow_id, + p_name=> 'DATABASE ACCOUNT', + p_description=>'Use database account credentials.', + p_page_sentry_function=> s1, + p_sess_verify_function=> s2, + p_pre_auth_process=> s3, + p_auth_function=> s4, + p_post_auth_process=> s5, + p_invalid_session_page=>'101', + p_invalid_session_url=>'', + p_cookie_name=>'', + p_cookie_path=>'', + p_cookie_domain=>'', + p_use_secure_cookie_yn=>'', + p_ldap_host=>'', + p_ldap_port=>'', + p_ldap_string=>'', + p_attribute_01=>'', + p_attribute_02=>'wwv_flow_custom_auth_std.logout?p_this_flow=&APP_ID.&p_next_flow_page_sess=&APP_ID.:1', + p_attribute_03=>'', + p_attribute_04=>'', + p_attribute_05=>'', + p_attribute_06=>'', + p_attribute_07=>'', + p_attribute_08=>'', + p_required_patch => null + wwv_flow_api.g_id_offset); +end; +null; + +end; +/ + +prompt ...plugins +-- +--application/end_environment +commit; +commit; +begin +execute immediate 'begin dbms_session.set_nls( param => ''NLS_NUMERIC_CHARACTERS'', value => '''''''' || replace(wwv_flow_api.g_nls_numeric_chars,'''''''','''''''''''') || ''''''''); end;'; +end; +/ +set verify on +set feedback on +prompt ...done diff --git a/apex/install.sql b/apex/install.sql new file mode 100644 index 0000000..87a2387 --- /dev/null +++ b/apex/install.sql @@ -0,0 +1,6 @@ + +-- Install APEX Workspace +@WTP_workspace.sql + +-- Install APEX Application +@f700.sql diff --git a/builds/OraEE213_AP212_ORDS222/README.md b/builds/OraEE213_AP212_ORDS222/README.md new file mode 100644 index 0000000..3676ed9 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/README.md @@ -0,0 +1,5 @@ + +## Log Files +* Oracle EE 21.3 +* APEX 21.2 +* ORDS 22.2 diff --git a/builds/OraEE213_AP212_ORDS222/build.log b/builds/OraEE213_AP212_ORDS222/build.log new file mode 100644 index 0000000..d689a75 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/build.log @@ -0,0 +1,3693 @@ +build.sh +Running from /opt/DMSTEX_dev/wtPLSQL/builds/OraEE213_AP212_ORDS222 + +Setup Variables + +Capture Version + +build_initialize.sql + +SQL*Plus: Release 21.0.0.0.0 - Production on Mon Apr 15 01:41:59 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle. All rights reserved. + + +New Session +Connected. + +Reset Output Connections + +PL/SQL procedure successfully completed. + +Elapsed: 00:00:00.05 + +PL/SQL procedure successfully completed. + +Elapsed: 00:00:00.01 + +Show Database Connection + +'DB:'||NAME||',CON:'||SYS_CONTEXT('USERENV','CON_NAME')||',TSTMP:'||SYSTIMESTAMP +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +db: EE213CDB, con: CDB$ROOT, tstmp: 15-APR-24 01.41.59.202630 AM +00:00 + +Elapsed: 00:00:00.01 + +Show PDBs + + CON_ID CON_NAME OPEN MODE RESTRICTED +---------- ------------------------------ ---------- ---------- + 2 PDB$SEED READ ONLY NO + 3 TESTPDB READ WRITE NO + 4 DEVPDB READ WRITE NO + 6 AP212PDB READ WRITE NO + +Create PDB +ALTER PLUGGABLE DATABASE "DEVPDB" CLOSE IMMEDIATE INSTANCES=ALL; +DROP PLUGGABLE DATABASE "DEVPDB" INCLUDING DATAFILES; +create pluggable database "DEVPDB" + admin user "PDB_ADMIN" identified by "PDB_ADMIN_Password" + default tablespace users datafile '/opt/oracle/oradata/EE213CDB/DEVPDB/users01.dbf' size 5M autoextend on + FILE_NAME_CONVERT = ('pdbseed', 'DEVPDB') + STORAGE UNLIMITED TEMPFILE REUSE; + +PL/SQL procedure successfully completed. + +Elapsed: 00:00:14.80 + +Open PDB + +Pluggable database altered. + +Elapsed: 00:00:08.33 + +Show Services + +NAME +---------------------------------------------------------------- +EE213CDB +SYS$BACKGROUND +ap212pdb +SYS$USERS +testpdb +devpdb +EE213CDBXDB + +7 rows selected. + +Elapsed: 00:00:00.03 + +Update DEFAULT Profile + +Session altered. + +Elapsed: 00:00:00.03 + +Profile altered. + +Elapsed: 00:00:00.14 + +Session altered. + +Elapsed: 00:00:00.01 +Disconnected from Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 + +Clear old wtpsrc logs + +Move to ../../wtpsrc + +../builds/OraEE213_AP212_ORDS222/build.sql wtpsrc + +SQL*Plus: Release 21.0.0.0.0 - Production on Mon Apr 15 01:42:22 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle. All rights reserved. + + +New Session +Connected. + +Reset Output Connections + +PL/SQL procedure successfully completed. + +Elapsed: 00:00:00.03 + +PL/SQL procedure successfully completed. + +Elapsed: 00:00:00.01 + +Show Database Connection + +'DB:'||NAME||',CON:'||SYS_CONTEXT('USERENV','CON_NAME')||',TSTMP:'||SYSTIMESTAMP +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +db: EE213CDB, con: DEVPDB, tstmp: 15-APR-24 01.42.22.957182 AM +00:00 + +Elapsed: 00:00:00.02 + +PL/SQL procedure successfully completed. + +Identify this Module in V$SESSION +Setup Abort on Error + +************************** +* Run SYS Installation * +************************** + +=== DBI Started: SYS/WTP.usr + +User created. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:23 for a duration of .46 seconds (started at 2024-04-15T01:42:23) +Setup Continue on Error + +***************************** +* Run SYSTEM Installation * +***************************** + +Connected. + +PL/SQL procedure successfully completed. + +=== DBI Started: SYSTEM/WTP_usr.grnt + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:24 for a duration of .42 seconds (started at 2024-04-15T01:42:23) + +************************* +* Install Application * +************************* + +=== DBI Started: ./installation_prepare.sql + +Create_Temp_Publicly_Updateable_Table_SQL + +Table created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:24 for a duration of .17 seconds (started at 2024-04-15T01:42:24) +=== DBI Started: WTP/WT_AD_HOC_REPORT.proc + +Warning: Procedure created with compilation errors. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:24 for a duration of .17 seconds (started at 2024-04-15T01:42:24) +=== DBI Started: WTP/WT_EXECUTE_TEST_RUNNER.proc + +Warning: Procedure created with compilation errors. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:24 for a duration of .13 seconds (started at 2024-04-15T01:42:24) +=== DBI Started: WTP/CORE_DATA.pspec + +Package created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:24 for a duration of .19 seconds (started at 2024-04-15T01:42:24) +=== DBI Started: WTP/HOOK.pspec + +Package created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:24 for a duration of .11 seconds (started at 2024-04-15T01:42:24) +=== DBI Started: WTP/JUNIT_CORE_REPORT.pspec + +Package created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:25 for a duration of .08 seconds (started at 2024-04-15T01:42:24) +=== DBI Started: WTP/WTPLSQL.pspec + +Package created. + + +Grant succeeded. + + +Synonym created. + + +Synonym created. + +=== DBI Completed at 2024-04-15T01:42:25 for a duration of .18 seconds (started at 2024-04-15T01:42:25) +=== DBI Started: WTP/WT_ASSERT.pspec + +Package created. + + +Grant succeeded. + + +Synonym created. + + +Synonym created. + +=== DBI Completed at 2024-04-15T01:42:25 for a duration of .21 seconds (started at 2024-04-15T01:42:25) +=== DBI Started: WTP/WT_CORE_REPORT.pspec + +Package created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:25 for a duration of .09 seconds (started at 2024-04-15T01:42:25) +=== DBI Started: WTP/HOOKS.tab + +Table created. + + +Table altered. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:41 for a duration of 16.04 seconds (started at 2024-04-15T01:42:25) +=== DBI Started: WTP/WT_VERSIONS.tab + +Table created. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:41 for a duration of .31 seconds (started at 2024-04-15T01:42:41) +=== DBI Started: WTP/HOOKS.cdl + +Disable Triggers and Foreign Keys + +PL/SQL procedure successfully completed. + + +sqlldr_control=WTP/HOOKS.ctl + + 5 Rows successfully loaded. + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:42:46 for a duration of 4.38 seconds (started at 2024-04-15T01:42:41) +=== DBI Started: WTP/WT_QUAL_TEST_RUNNERS_VW.vw + +View created. + + +Grant succeeded. + + +View created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:46 for a duration of .36 seconds (started at 2024-04-15T01:42:46) +=== DBI Started: WTP/CORE_DATA.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:42:46 for a duration of .1 seconds (started at 2024-04-15T01:42:46) +=== DBI Started: WTP/HOOK.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:42:46 for a duration of .09 seconds (started at 2024-04-15T01:42:46) +=== DBI Started: WTP/JUNIT_CORE_REPORT.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:42:47 for a duration of .09 seconds (started at 2024-04-15T01:42:46) +=== DBI Started: WTP/WTPLSQL.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:42:47 for a duration of .12 seconds (started at 2024-04-15T01:42:47) +=== DBI Started: WTP/WT_ASSERT.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:42:47 for a duration of .22 seconds (started at 2024-04-15T01:42:47) +=== DBI Started: WTP/WT_CORE_REPORT.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:42:47 for a duration of .08 seconds (started at 2024-04-15T01:42:47) +=== DBI Started: ./installation_finalize.sql + +Drop_Temp_Publicly_Updateable_Table_SQL + +Table dropped. + + +fix_invalid_public_synonyms + +Re-create Invalid Public Synonyms + +PL/SQL procedure successfully completed. + + +compile_all +Compile All for wtpsrc Install Type +-- WTP Compile All is done. + +PL/SQL procedure successfully completed. + + +alter_foreign_keys_ENABLE +Alter Foreign Keys for wtpsrc Install Type +-- WTP Alter Foreign Keys is done. + +PL/SQL procedure successfully completed. + + +alter_triggers_ENABLE +Alter Triggers for wtpsrc Install Type +-- WTP Alter Triggers is done. + +PL/SQL procedure successfully completed. + + +update_id_sequences +Update ID Sequences for wtpsrc Install Type +-- WTP Identity Sequence Updates is done. + +PL/SQL procedure successfully completed. + + +Load Installation Files + +Confirm/Create odbcapture_installation_logs Table +create table odbcapture_installation_logs + (load_dtm date + ,install_type varchar2(10) + ,file_name varchar2(512) + ,contents clob); +comment on column odbcapture_installation_logs.load_dtm is 'Date/Time the installation log file was loaded.'; +comment on column odbcapture_installation_logs.install_type is 'Type of installation (from TYPE_CONF).'; +comment on column odbcapture_installation_logs.file_name is 'Name of installation log file.'; +comment on column odbcapture_installation_logs.contents is 'Contents/Text of the installation log file.'; +comment on table odbcapture_installation_logs is 'ODBCAPTURE installation log files.'; +grant select on odbcapture_installation_logs to public; +create public synonym odbcapture_installation_logs for odbcapture_installation_logs; + +PL/SQL procedure successfully completed. + + +sqlldr_control=./odbcapture_installation_logs.ctl + + 4 Rows successfully loaded. + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:42:55 for a duration of 8.1 seconds (started at 2024-04-15T01:42:47) + +***************** +* Run Reports * +***************** + + +Reporting Summary of Install Type Log Errors +Processing file WTP/HOOKS.log (2024-04-15 01:42:55) +Processing file install_sys.log (2024-04-15 01:42:55) +Processing file install_system.log (2024-04-15 01:42:55) +Processing file install_wtpsrc.log (2024-04-15 01:42:55) + +PL/SQL procedure successfully completed. + + +Reporting Invalid Objects + +Reporting JUnit XML Database Build Status + +Reorting JUnit XML Installation Log + +"wtpsrc" Installation is Done. +old 2: if '&INSTALL_TYPE.' like 'wtp%' +new 2: if 'wtpsrc' like 'wtp%' +old 5: values ('&INSTALL_TYPE.', '&APP_VERSION.', 'INSTALL'); +new 5: values ('wtpsrc', '1.003', 'INSTALL'); + +PL/SQL procedure successfully completed. + +Disconnected from Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 + +Move Log Files to Build Folder +'db_build_junit_report.xml' -> '../builds/OraEE213_AP212_ORDS222/wtpsrc/db_build_junit_report.xml' +'install_sys.log' -> '../builds/OraEE213_AP212_ORDS222/wtpsrc/install_sys.log' +'install_system.log' -> '../builds/OraEE213_AP212_ORDS222/wtpsrc/install_system.log' +'install_wtpsrc.log' -> '../builds/OraEE213_AP212_ORDS222/wtpsrc/install_wtpsrc.log' +'log_files_junit_report.xml' -> '../builds/OraEE213_AP212_ORDS222/wtpsrc/log_files_junit_report.xml' +'odbcapture_installation_logs.log' -> '../builds/OraEE213_AP212_ORDS222/wtpsrc/odbcapture_installation_logs.log' +'WTP/HOOKS.log' -> '../builds/OraEE213_AP212_ORDS222/wtpsrc/WTP/HOOKS.log' + +Move back to /opt/DMSTEX_dev/wtPLSQL/builds/OraEE213_AP212_ORDS222 + +Clear old wtptst logs + +Move to ../../wtptst + +../builds/OraEE213_AP212_ORDS222/build.sql wtptst + +SQL*Plus: Release 21.0.0.0.0 - Production on Mon Apr 15 01:42:57 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle. All rights reserved. + + +New Session +Connected. + +Reset Output Connections + +PL/SQL procedure successfully completed. + +Elapsed: 00:00:00.00 + +PL/SQL procedure successfully completed. + +Elapsed: 00:00:00.00 + +Show Database Connection + +'DB:'||NAME||',CON:'||SYS_CONTEXT('USERENV','CON_NAME')||',TSTMP:'||SYSTIMESTAMP +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +db: EE213CDB, con: DEVPDB, tstmp: 15-APR-24 01.42.57.313637 AM +00:00 + +Elapsed: 00:00:00.00 + +PL/SQL procedure successfully completed. + +Identify this Module in V$SESSION +Setup Abort on Error + +************************** +* Run SYS Installation * +************************** + +Setup Continue on Error + +***************************** +* Run SYSTEM Installation * +***************************** + +Connected. + +PL/SQL procedure successfully completed. + + +************************* +* Install Application * +************************* + +=== DBI Started: ./installation_prepare.sql + +Create_Temp_Publicly_Updateable_Table_SQL + +Table created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:57 for a duration of .1 seconds (started at 2024-04-15T01:42:57) +=== DBI Started: WTP/WT_SELF_TEST.tab + +Table created. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:42:59 for a duration of 1.48 seconds (started at 2024-04-15T01:42:57) +=== DBI Started: WTP/WT_SELF_TEST.cdl + +Disable Triggers and Foreign Keys + +PL/SQL procedure successfully completed. + + +sqlldr_control=WTP/WT_SELF_TEST.ctl + + 2 Rows successfully loaded. + + +PL/SQL procedure successfully completed. + + +PL/SQL procedure successfully completed. + + +Commit complete. + +=== DBI Completed at 2024-04-15T01:43:03 for a duration of 4.69 seconds (started at 2024-04-15T01:42:59) +=== DBI Started: WTP/WT_SELF_TEST.tabtrg + +Trigger created. + + +Trigger altered. + +=== DBI Completed at 2024-04-15T01:43:03 for a duration of .13 seconds (started at 2024-04-15T01:43:03) +=== DBI Started: ./installation_finalize.sql + +Drop_Temp_Publicly_Updateable_Table_SQL + +Table dropped. + + +fix_invalid_public_synonyms + +Re-create Invalid Public Synonyms + +PL/SQL procedure successfully completed. + + +compile_all +Compile All for wtptst Install Type +-- WTP Compile All is done. + +PL/SQL procedure successfully completed. + + +alter_foreign_keys_ENABLE +Alter Foreign Keys for wtptst Install Type +-- WTP Alter Foreign Keys is done. + +PL/SQL procedure successfully completed. + + +alter_triggers_ENABLE +Alter Triggers for wtptst Install Type +alter trigger "WTP"."WT_SELF_TEST$TEST" ENABLE; +-- WTP Alter Triggers is done. + +PL/SQL procedure successfully completed. + + +update_id_sequences +Update ID Sequences for wtptst Install Type +-- WTP Identity Sequence Updates is done. + +PL/SQL procedure successfully completed. + + +Load Installation Files + +Confirm/Create odbcapture_installation_logs Table + +PL/SQL procedure successfully completed. + + +sqlldr_control=./odbcapture_installation_logs.ctl + + 4 Rows successfully loaded. + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:43:06 for a duration of 2.77 seconds (started at 2024-04-15T01:43:03) + +***************** +* Run Reports * +***************** + + +Reporting Summary of Install Type Log Errors +Processing file WTP/WT_SELF_TEST.log (2024-04-15 01:43:05) +Processing file install_sys.log (2024-04-15 01:43:05) +Processing file install_system.log (2024-04-15 01:43:05) +Processing file install_wtptst.log (2024-04-15 01:43:05) + +PL/SQL procedure successfully completed. + + +Reporting Invalid Objects + +Reporting JUnit XML Database Build Status + +Reorting JUnit XML Installation Log + +"wtptst" Installation is Done. +old 2: if '&INSTALL_TYPE.' like 'wtp%' +new 2: if 'wtptst' like 'wtp%' +old 5: values ('&INSTALL_TYPE.', '&APP_VERSION.', 'INSTALL'); +new 5: values ('wtptst', '1.003', 'INSTALL'); + +PL/SQL procedure successfully completed. + +Disconnected from Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 + +Move Log Files to Build Folder +'db_build_junit_report.xml' -> '../builds/OraEE213_AP212_ORDS222/wtptst/db_build_junit_report.xml' +'install_sys.log' -> '../builds/OraEE213_AP212_ORDS222/wtptst/install_sys.log' +'install_system.log' -> '../builds/OraEE213_AP212_ORDS222/wtptst/install_system.log' +'install_wtptst.log' -> '../builds/OraEE213_AP212_ORDS222/wtptst/install_wtptst.log' +'log_files_junit_report.xml' -> '../builds/OraEE213_AP212_ORDS222/wtptst/log_files_junit_report.xml' +'odbcapture_installation_logs.log' -> '../builds/OraEE213_AP212_ORDS222/wtptst/odbcapture_installation_logs.log' +'WTP/WT_SELF_TEST.log' -> '../builds/OraEE213_AP212_ORDS222/wtptst/WTP/WT_SELF_TEST.log' + +Move back to /opt/DMSTEX_dev/wtPLSQL/builds/OraEE213_AP212_ORDS222 + +Clear old wtpsav logs + +Move to ../../wtpsav + +../builds/OraEE213_AP212_ORDS222/build.sql wtpsav + +SQL*Plus: Release 21.0.0.0.0 - Production on Mon Apr 15 01:43:07 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle. All rights reserved. + + +New Session +Connected. + +Reset Output Connections + +PL/SQL procedure successfully completed. + +Elapsed: 00:00:00.00 + +PL/SQL procedure successfully completed. + +Elapsed: 00:00:00.00 + +Show Database Connection + +'DB:'||NAME||',CON:'||SYS_CONTEXT('USERENV','CON_NAME')||',TSTMP:'||SYSTIMESTAMP +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +db: EE213CDB, con: DEVPDB, tstmp: 15-APR-24 01.43.07.620672 AM +00:00 + +Elapsed: 00:00:00.01 + +PL/SQL procedure successfully completed. + +Identify this Module in V$SESSION +Setup Abort on Error + +************************** +* Run SYS Installation * +************************** + +Setup Continue on Error + +***************************** +* Run SYSTEM Installation * +***************************** + +Connected. + +PL/SQL procedure successfully completed. + + +************************* +* Install Application * +************************* + +=== DBI Started: ./installation_prepare.sql + +Create_Temp_Publicly_Updateable_Table_SQL + +Table created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:07 for a duration of .09 seconds (started at 2024-04-15T01:43:07) +=== DBI Started: WTP/PLSQL_PROFILER_RUNNUMBER.seq + +Sequence created. + +=== DBI Completed at 2024-04-15T01:43:07 for a duration of .06 seconds (started at 2024-04-15T01:43:07) +=== DBI Started: WTP/WT_DBOUTS_SEQ.seq + +Sequence created. + +=== DBI Completed at 2024-04-15T01:43:07 for a duration of .05 seconds (started at 2024-04-15T01:43:07) +=== DBI Started: WTP/WT_TESTCASES_SEQ.seq + +Sequence created. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .04 seconds (started at 2024-04-15T01:43:07) +=== DBI Started: WTP/WT_TEST_RUNNERS_SEQ.seq + +Sequence created. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .05 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/WT_TEST_RUNS_SEQ.seq + +Sequence created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .1 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/JUNIT_XML_PERSIST_ALL.proc + +Warning: Procedure created with compilation errors. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .06 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/WT_DBOUT.pspec + +Package created. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .06 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/WT_JOB.pspec + +Package created. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .04 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/WT_PERSIST_REPORT.pspec + +Package created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .1 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/WT_PROFILE.pspec + +Warning: Package created with compilation errors. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .08 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/WT_RESULT.pspec + +Package created. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .07 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/WT_TESTCASE.pspec + +Package created. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .06 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/WT_TEST_RUN.pspec + +Package created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .09 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/WT_TEST_RUNNER.pspec + +Package created. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .04 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/PLSQL_PROFILER_DATA.tab + +Table created. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:43:09 for a duration of .43 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/PLSQL_PROFILER_RUNS.tab + +Table created. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:43:10 for a duration of .69 seconds (started at 2024-04-15T01:43:09) +=== DBI Started: WTP/PLSQL_PROFILER_UNITS.tab + +Table created. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:43:10 for a duration of .34 seconds (started at 2024-04-15T01:43:10) +=== DBI Started: WTP/WT_DBOUTS.tab + +Table created. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:10 for a duration of .39 seconds (started at 2024-04-15T01:43:10) +=== DBI Started: WTP/WT_DBOUT_RUNS.tab + +Table created. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:11 for a duration of .56 seconds (started at 2024-04-15T01:43:10) +=== DBI Started: WTP/WT_PROFILES.tab + +Table created. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:11 for a duration of .34 seconds (started at 2024-04-15T01:43:11) +=== DBI Started: WTP/WT_RESULTS.tab + +Table created. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:12 for a duration of .38 seconds (started at 2024-04-15T01:43:11) +=== DBI Started: WTP/WT_TESTCASES.tab + +Table created. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:12 for a duration of .33 seconds (started at 2024-04-15T01:43:12) +=== DBI Started: WTP/WT_TESTCASE_RUNS.tab + +Table created. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:13 for a duration of .7 seconds (started at 2024-04-15T01:43:12) +=== DBI Started: WTP/WT_TEST_RUNNERS.tab + +Table created. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:13 for a duration of .34 seconds (started at 2024-04-15T01:43:13) +=== DBI Started: WTP/WT_TEST_RUNS.tab + +Table created. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:14 for a duration of .69 seconds (started at 2024-04-15T01:43:13) +=== DBI Started: WTP/PLSQL_PROFILER_RUNS.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:43:14 for a duration of .07 seconds (started at 2024-04-15T01:43:14) +=== DBI Started: WTP/WT_DBOUTS.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:43:14 for a duration of .07 seconds (started at 2024-04-15T01:43:14) +=== DBI Started: WTP/WT_RESULTS.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:43:14 for a duration of .07 seconds (started at 2024-04-15T01:43:14) +=== DBI Started: WTP/WT_TESTCASE_RUNS.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:43:14 for a duration of .06 seconds (started at 2024-04-15T01:43:14) +=== DBI Started: WTP/WT_TEST_RUNS.tabind + +Index created. + + +Index created. + +=== DBI Completed at 2024-04-15T01:43:14 for a duration of .14 seconds (started at 2024-04-15T01:43:14) +=== DBI Started: WTP/WT_DBOUT_RUNS_VW.vw + +View created. + + +Grant succeeded. + + +View created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:15 for a duration of .7 seconds (started at 2024-04-15T01:43:14) +=== DBI Started: WTP/WT_PROFILES_VW.vw + +View created. + + +Grant succeeded. + + +View created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:15 for a duration of .55 seconds (started at 2024-04-15T01:43:15) +=== DBI Started: WTP/WT_RESULTS_VW.vw + +View created. + + +Grant succeeded. + + +View created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:16 for a duration of .61 seconds (started at 2024-04-15T01:43:15) +=== DBI Started: WTP/WT_SCHEDULER_JOBS_VW.vw + +View created. + + +View created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:43:17 for a duration of .42 seconds (started at 2024-04-15T01:43:16) +=== DBI Started: WTP/WT_TESTCASE_RUNS_VW.vw + +View created. + + +Grant succeeded. + + +View created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:17 for a duration of .5 seconds (started at 2024-04-15T01:43:17) +=== DBI Started: WTP/WT_TEST_RUNS_VW.vw + +View created. + + +Grant succeeded. + + +View created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:18 for a duration of .63 seconds (started at 2024-04-15T01:43:17) +=== DBI Started: WTP/WT_DBOUT.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:43:18 for a duration of .08 seconds (started at 2024-04-15T01:43:18) +=== DBI Started: WTP/WT_JOB.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:43:18 for a duration of .17 seconds (started at 2024-04-15T01:43:18) +=== DBI Started: WTP/WT_PERSIST_REPORT.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:43:18 for a duration of .21 seconds (started at 2024-04-15T01:43:18) +=== DBI Started: WTP/WT_PROFILE.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:43:18 for a duration of .26 seconds (started at 2024-04-15T01:43:18) +=== DBI Started: WTP/WT_RESULT.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .09 seconds (started at 2024-04-15T01:43:18) +=== DBI Started: WTP/WT_TESTCASE.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .08 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: WTP/WT_TEST_RUN.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .09 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: WTP/WT_TEST_RUNNER.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .08 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: WTP/PLSQL_PROFILER_DATA.tabfk + +Table altered. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .07 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: WTP/PLSQL_PROFILER_UNITS.tabfk + +Table altered. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .06 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: WTP/WT_DBOUT_RUNS.tabfk + +Table altered. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .07 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: WTP/WT_PROFILES.tabfk + +Table altered. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .07 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: WTP/WT_RESULTS.tabfk + +Table altered. + + +Table altered. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .12 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: WTP/WT_TESTCASE_RUNS.tabfk + +Table altered. + + +Table altered. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .11 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: WTP/WT_TEST_RUNS.tabfk + +Table altered. + + +Table altered. + +=== DBI Completed at 2024-04-15T01:43:20 for a duration of .12 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: ./installation_finalize.sql + +Drop_Temp_Publicly_Updateable_Table_SQL + +Table dropped. + + +fix_invalid_public_synonyms + +Re-create Invalid Public Synonyms + +PL/SQL procedure successfully completed. + + +compile_all +Compile All for wtpsav Install Type +-- WTP Compile All is done. + +PL/SQL procedure successfully completed. + + +alter_foreign_keys_ENABLE +Alter Foreign Keys for wtpsav Install Type +alter table "WTP"."PLSQL_PROFILER_DATA" ENABLE constraint "PLSQL_PROFILER_DATA_FK1"; +alter table "WTP"."PLSQL_PROFILER_UNITS" ENABLE constraint "PLSQL_PROFILER_UNITS_FK1"; +alter table "WTP"."WT_DBOUT_RUNS" ENABLE constraint "WT_DBOUT_RUNS_FK1"; +alter table "WTP"."WT_PROFILES" ENABLE constraint "WT_PROFILES_FK1"; +alter table "WTP"."WT_RESULTS" ENABLE constraint "WT_RESULTS_FK1"; +alter table "WTP"."WT_RESULTS" ENABLE constraint "WT_RESULTS_FK2"; +alter table "WTP"."WT_TESTCASE_RUNS" ENABLE constraint "WT_TESTCASE_RUNS_FK1"; +alter table "WTP"."WT_TESTCASE_RUNS" ENABLE constraint "WT_TESTCASE_RUNS_FK2"; +alter table "WTP"."WT_TEST_RUNS" ENABLE constraint "WT_TEST_RUNS_FK1"; +alter table "WTP"."WT_TEST_RUNS" ENABLE constraint "WT_TEST_RUNS_FK2"; +-- WTP Alter Foreign Keys is done. + +PL/SQL procedure successfully completed. + + +alter_triggers_ENABLE +Alter Triggers for wtpsav Install Type +alter trigger "WTP"."WT_SELF_TEST$TEST" ENABLE; +-- WTP Alter Triggers is done. + +PL/SQL procedure successfully completed. + + +update_id_sequences +Update ID Sequences for wtpsav Install Type +-- WTP Identity Sequence Updates is done. + +PL/SQL procedure successfully completed. + + +Load Installation Files + +Confirm/Create odbcapture_installation_logs Table + +PL/SQL procedure successfully completed. + + +sqlldr_control=./odbcapture_installation_logs.ctl + + 3 Rows successfully loaded. + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:43:23 for a duration of 3.41 seconds (started at 2024-04-15T01:43:20) + +***************** +* Run Reports * +***************** + + +Reporting Summary of Install Type Log Errors +Processing file install_sys.log (2024-04-15 01:43:22) +Processing file install_system.log (2024-04-15 01:43:22) +Processing file install_wtpsav.log (2024-04-15 01:43:22) + +PL/SQL procedure successfully completed. + + +Reporting Invalid Objects + +Reporting JUnit XML Database Build Status + +Reorting JUnit XML Installation Log + +"wtpsav" Installation is Done. +old 2: if '&INSTALL_TYPE.' like 'wtp%' +new 2: if 'wtpsav' like 'wtp%' +old 5: values ('&INSTALL_TYPE.', '&APP_VERSION.', 'INSTALL'); +new 5: values ('wtpsav', '1.003', 'INSTALL'); + +PL/SQL procedure successfully completed. + +Disconnected from Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 + +Move Log Files to Build Folder +'db_build_junit_report.xml' -> '../builds/OraEE213_AP212_ORDS222/wtpsav/db_build_junit_report.xml' +'install_sys.log' -> '../builds/OraEE213_AP212_ORDS222/wtpsav/install_sys.log' +'install_system.log' -> '../builds/OraEE213_AP212_ORDS222/wtpsav/install_system.log' +'install_wtpsav.log' -> '../builds/OraEE213_AP212_ORDS222/wtpsav/install_wtpsav.log' +'log_files_junit_report.xml' -> '../builds/OraEE213_AP212_ORDS222/wtpsav/log_files_junit_report.xml' +'odbcapture_installation_logs.log' -> '../builds/OraEE213_AP212_ORDS222/wtpsav/odbcapture_installation_logs.log' + +Move back to /opt/DMSTEX_dev/wtPLSQL/builds/OraEE213_AP212_ORDS222 + +Running ../util/setup_for_test.sql from /opt/DMSTEX_dev/wtPLSQL/builds/OraEE213_AP212_ORDS222 + +SQL*Plus: Release 21.0.0.0.0 - Production on Mon Apr 15 01:43:24 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle. All rights reserved. + +Last Successful login time: Mon Apr 15 2024 01:43:22 +00:00 + +Connected to: +Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 + + +Show the Services for this PDB + +NAME +---------------------------------------------------------------- +devpdb + +Using the following service at localhost:1521 +devpdb + +PL/SQL procedure successfully completed. + + +Update PLSQL_CCFLAGS parameter +OLD parm_value: +NEW parm_value: WTPLSQL_SELFTEST:TRUE + +PL/SQL procedure successfully completed. + + +Recompile All Packages +alter PROCEDURE "WTP"."WT_AD_HOC_REPORT" compile +alter PROCEDURE "WTP"."WT_EXECUTE_TEST_RUNNER" compile +alter PACKAGE "WTP"."CORE_DATA" compile +alter PACKAGE "WTP"."HOOK" compile +alter PACKAGE "WTP"."JUNIT_CORE_REPORT" compile +alter PACKAGE "WTP"."WTPLSQL" compile +alter PACKAGE "WTP"."WT_ASSERT" compile +alter PACKAGE "WTP"."WT_CORE_REPORT" compile +alter VIEW "WTP"."WT_QUAL_TEST_RUNNERS_VW" compile +alter TRIGGER "WTP"."WT_SELF_TEST$TEST" compile +alter PROCEDURE "WTP"."JUNIT_XML_PERSIST_ALL" compile +alter PACKAGE "WTP"."WT_DBOUT" compile +alter PACKAGE "WTP"."WT_JOB" compile +alter PACKAGE "WTP"."WT_PERSIST_REPORT" compile +alter PACKAGE "WTP"."WT_PROFILE" compile +alter PACKAGE "WTP"."WT_RESULT" compile +alter PACKAGE "WTP"."WT_TESTCASE" compile +alter PACKAGE "WTP"."WT_TEST_RUN" compile +alter PACKAGE "WTP"."WT_TEST_RUNNER" compile +alter VIEW "WTP"."WT_DBOUT_RUNS_VW" compile +alter VIEW "WTP"."WT_PROFILES_VW" compile +alter VIEW "WTP"."WT_RESULTS_VW" compile +alter VIEW "WTP"."WT_SCHEDULER_JOBS_VW" compile +alter VIEW "WTP"."WT_TESTCASE_RUNS_VW" compile +alter VIEW "WTP"."WT_TEST_RUNS_VW" compile + +PL/SQL procedure successfully completed. + +Disconnected from Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 + +Running ../util/run_core_test.sql from /opt/DMSTEX_dev/wtPLSQL/builds/OraEE213_AP212_ORDS222 + +SQL*Plus: Release 21.0.0.0.0 - Production on Mon Apr 15 01:43:26 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle. All rights reserved. + + +Connected to: +Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 + + +Setup for Unit Tests. + +PL/SQL procedure successfully completed. + + +PL/SQL procedure successfully completed. + + +Run Unit Test and Report. + +Done with Unit Tests. +Disconnected from Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 + +Running ../util/run_junit_test.sql from /opt/DMSTEX_dev/wtPLSQL/builds/OraEE213_AP212_ORDS222 + +SQL*Plus: Release 21.0.0.0.0 - Production on Mon Apr 15 01:43:49 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle. All rights reserved. + +Last Successful login time: Mon Apr 15 2024 01:43:39 +00:00 + +Connected to: +Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 + + +Setup for Unit Tests. + +PL/SQL procedure successfully completed. + + +PL/SQL procedure successfully completed. + + +Initialize Hooks. +3 "wt_core_report" rows deleted from HOOKS table. + +PL/SQL procedure successfully completed. + +0 "wt_test_run" rows deleted from HOOKS table. + +PL/SQL procedure successfully completed. + +0 "junit_core_report" rows deleted from HOOKS table. + +PL/SQL procedure successfully completed. + + +Run and Report Unit Tests. + +Done with Reports +Disconnected from Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 + +Running ../util/run_save_test.sql from /opt/DMSTEX_dev/wtPLSQL/builds/OraEE213_AP212_ORDS222 + +SQL*Plus: Release 21.0.0.0.0 - Production on Mon Apr 15 01:44:04 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle. All rights reserved. + +Last Successful login time: Mon Apr 15 2024 01:43:56 +00:00 + +Connected to: +Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 + + +Reporting Unit Test Results... + +PL/SQL procedure successfully completed. + + +PL/SQL procedure successfully completed. + + +Initialize Hooks. +0 "wt_core_report" rows deleted from HOOKS table. + +PL/SQL procedure successfully completed. + +3 "junit_core_report" rows deleted from HOOKS table. + +PL/SQL procedure successfully completed. + +0 "wt_test_run" rows deleted from HOOKS table. + +PL/SQL procedure successfully completed. + + +Run Unit Tests and Report. + +JUnit Report Unit Tests. + +Done with Reports +Disconnected from Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 + +Clear old grbsrc logs + +Move to ../../grbsrc + +../builds/OraEE213_AP212_ORDS222/build.sql grbsrc + +SQL*Plus: Release 21.0.0.0.0 - Production on Mon Apr 15 01:44:28 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle. All rights reserved. + + +New Session +Connected. + +Reset Output Connections + +PL/SQL procedure successfully completed. + +Elapsed: 00:00:00.01 + +PL/SQL procedure successfully completed. + +Elapsed: 00:00:00.00 + +Show Database Connection + +'DB:'||NAME||',CON:'||SYS_CONTEXT('USERENV','CON_NAME')||',TSTMP:'||SYSTIMESTAMP +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +db: EE213CDB, con: DEVPDB, tstmp: 15-APR-24 01.44.28.229359 AM +00:00 + +Elapsed: 00:00:00.01 + +PL/SQL procedure successfully completed. + +Identify this Module in V$SESSION +Setup Abort on Error + +************************** +* Run SYS Installation * +************************** + +=== DBI Started: SYS/ODBCAPTURE.usr + +User created. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:44:32 for a duration of 3.93 seconds (started at 2024-04-15T01:44:28) +Setup Continue on Error + +***************************** +* Run SYSTEM Installation * +***************************** + +Connected. + +PL/SQL procedure successfully completed. + +=== DBI Started: SYSTEM/GRAB_SCRIPTS_DIR.dir + +Directory created. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:44:32 for a duration of .17 seconds (started at 2024-04-15T01:44:32) +=== DBI Started: SYSTEM/ODBCAPTURE_usr.grnt + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:44:32 for a duration of .33 seconds (started at 2024-04-15T01:44:32) + +************************* +* Install Application * +************************* + +=== DBI Started: ./installation_prepare.sql + +Create_Temp_Publicly_Updateable_Table_SQL + +Table created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .15 seconds (started at 2024-04-15T01:44:32) +=== DBI Started: ODBCAPTURE/COMMON_UTIL.pspec + +Package created. + +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .07 seconds (started at 2024-04-15T01:44:33) +=== DBI Started: ODBCAPTURE/GRAB_SCRIPTS.pspec + +Package created. + +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .11 seconds (started at 2024-04-15T01:44:33) +=== DBI Started: ODBCAPTURE/ROOT_SCRIPTS.pspec + +Package created. + +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .05 seconds (started at 2024-04-15T01:44:33) +=== DBI Started: ODBCAPTURE/ZIP_UTIL_PKG.pspec + +Package created. + +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .06 seconds (started at 2024-04-15T01:44:33) +=== DBI Started: ODBCAPTURE/DBA_DEPENDENCIES_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .06 seconds (started at 2024-04-15T01:44:33) +=== DBI Started: ODBCAPTURE/DBA_OBJECTS_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .06 seconds (started at 2024-04-15T01:44:33) +=== DBI Started: ODBCAPTURE/DBA_TAB_PRIVS_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .22 seconds (started at 2024-04-15T01:44:33) +=== DBI Started: ODBCAPTURE/DLOAD_CONF.tab + +Table created. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .35 seconds (started at 2024-04-15T01:44:33) +=== DBI Started: ODBCAPTURE/INSTALL_TYPE_TIMING.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .07 seconds (started at 2024-04-15T01:44:34) +=== DBI Started: ODBCAPTURE/OBJECT_CONF.tab + +Table created. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .34 seconds (started at 2024-04-15T01:44:34) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .05 seconds (started at 2024-04-15T01:44:34) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_CONTEXT_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .05 seconds (started at 2024-04-15T01:44:34) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .07 seconds (started at 2024-04-15T01:44:34) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_FKEY_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .06 seconds (started at 2024-04-15T01:44:34) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_INDEX_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .07 seconds (started at 2024-04-15T01:44:34) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_OBJECT_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:35 for a duration of .07 seconds (started at 2024-04-15T01:44:34) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_SYNONYM_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:35 for a duration of .08 seconds (started at 2024-04-15T01:44:35) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_TRIGGER_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:35 for a duration of .08 seconds (started at 2024-04-15T01:44:35) +=== DBI Started: ODBCAPTURE/OTYPE_CONF.tab + +Table created. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:44:35 for a duration of .39 seconds (started at 2024-04-15T01:44:35) +=== DBI Started: ODBCAPTURE/ROLE_CONF.tab + +Table created. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:44:36 for a duration of .46 seconds (started at 2024-04-15T01:44:35) +=== DBI Started: ODBCAPTURE/SCHEMA_CONF.tab + +Table created. + + +Table altered. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:44:36 for a duration of .4 seconds (started at 2024-04-15T01:44:36) +=== DBI Started: ODBCAPTURE/TYPE_CONF.tab + +Table created. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:44:36 for a duration of .41 seconds (started at 2024-04-15T01:44:36) +=== DBI Started: ODBCAPTURE/ZIP_FILES.tab + +Table created. + + +Table altered. + +=== DBI Completed at 2024-04-15T01:44:37 for a duration of .15 seconds (started at 2024-04-15T01:44:36) +=== DBI Started: ODBCAPTURE/ZX_OBJ_INSTALL_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:37 for a duration of .07 seconds (started at 2024-04-15T01:44:37) +=== DBI Started: ODBCAPTURE/ZX_PRIV_ALL_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:37 for a duration of .06 seconds (started at 2024-04-15T01:44:37) +=== DBI Started: ODBCAPTURE/DLOAD_CONF.cdl + +Disable Triggers and Foreign Keys + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/DLOAD_CONF.ctl + + 6 Rows successfully loaded. + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:44:40 for a duration of 2.95 seconds (started at 2024-04-15T01:44:37) +=== DBI Started: ODBCAPTURE/OBJECT_CONF.cdl + +Disable Triggers and Foreign Keys + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/OBJECT_CONF.ctl + + 0 Rows successfully loaded. + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:44:43 for a duration of 2.92 seconds (started at 2024-04-15T01:44:40) +=== DBI Started: ODBCAPTURE/OTYPE_CONF.cdl + +Disable Triggers and Foreign Keys + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/OTYPE_CONF.ctl + + 35 Rows successfully loaded. + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:44:45 for a duration of 2.82 seconds (started at 2024-04-15T01:44:43) +=== DBI Started: ODBCAPTURE/ROLE_CONF.cdl + +Disable Triggers and Foreign Keys + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/ROLE_CONF.ctl + + 105 Rows successfully loaded. + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:44:48 for a duration of 2.78 seconds (started at 2024-04-15T01:44:45) +=== DBI Started: ODBCAPTURE/SCHEMA_CONF.cdl + +Disable Triggers and Foreign Keys + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/SCHEMA_CONF.ctl + + 9 Rows successfully loaded. + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:44:51 for a duration of 2.9 seconds (started at 2024-04-15T01:44:48) +=== DBI Started: ODBCAPTURE/TYPE_CONF.cdl + +Disable Triggers and Foreign Keys + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/TYPE_CONF.ctl + + 3 Rows successfully loaded. + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:44:54 for a duration of 2.9 seconds (started at 2024-04-15T01:44:51) +=== DBI Started: ODBCAPTURE/DBA_DEPENDENCIES_TAB.tabind + +Index created. + + +Index created. + +=== DBI Completed at 2024-04-15T01:44:54 for a duration of .11 seconds (started at 2024-04-15T01:44:54) +=== DBI Started: ODBCAPTURE/DBA_OBJECTS_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:54 for a duration of .24 seconds (started at 2024-04-15T01:44:54) +=== DBI Started: ODBCAPTURE/DBA_TAB_PRIVS_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .17 seconds (started at 2024-04-15T01:44:54) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .08 seconds (started at 2024-04-15T01:44:55) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_CONTEXT_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .06 seconds (started at 2024-04-15T01:44:55) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .07 seconds (started at 2024-04-15T01:44:55) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_FKEY_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .08 seconds (started at 2024-04-15T01:44:55) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_INDEX_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .06 seconds (started at 2024-04-15T01:44:55) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_OBJECT_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .08 seconds (started at 2024-04-15T01:44:55) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_SYNONYM_TAB.tabind + +Index created. + + +Index created. + +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .15 seconds (started at 2024-04-15T01:44:55) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_TRIGGER_TAB.tabind + +Index created. + + +Index created. + +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .13 seconds (started at 2024-04-15T01:44:55) +=== DBI Started: ODBCAPTURE/ZX_OBJ_INSTALL_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .07 seconds (started at 2024-04-15T01:44:55) +=== DBI Started: ODBCAPTURE/ZX_PRIV_ALL_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .07 seconds (started at 2024-04-15T01:44:56) +=== DBI Started: ODBCAPTURE/AQ_SYSTEM_PRIVS_VW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .11 seconds (started at 2024-04-15T01:44:56) +=== DBI Started: ODBCAPTURE/DBA_DEPENDENCIES_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .1 seconds (started at 2024-04-15T01:44:56) +=== DBI Started: ODBCAPTURE/DBA_OBJECTS_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .23 seconds (started at 2024-04-15T01:44:56) +=== DBI Started: ODBCAPTURE/DBA_TAB_PRIVS_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .1 seconds (started at 2024-04-15T01:44:56) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_COMMENTS_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .09 seconds (started at 2024-04-15T01:44:56) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_CONTEXT_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .12 seconds (started at 2024-04-15T01:44:56) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .12 seconds (started at 2024-04-15T01:44:57) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_FKEY_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .13 seconds (started at 2024-04-15T01:44:57) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_INDEX_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .12 seconds (started at 2024-04-15T01:44:57) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_OBJECT_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .15 seconds (started at 2024-04-15T01:44:57) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_SYNONYM_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .1 seconds (started at 2024-04-15T01:44:57) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_TRIGGER_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .11 seconds (started at 2024-04-15T01:44:57) +=== DBI Started: ODBCAPTURE/PRIV_OBJ_DIR_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .11 seconds (started at 2024-04-15T01:44:57) +=== DBI Started: ODBCAPTURE/PRIV_OBJ_INSTALL_VW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .11 seconds (started at 2024-04-15T01:44:57) +=== DBI Started: ODBCAPTURE/PRIV_OBJ_JAVA_FG_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .11 seconds (started at 2024-04-15T01:44:58) +=== DBI Started: ODBCAPTURE/PRIV_OBJ_QUEUE_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .11 seconds (started at 2024-04-15T01:44:58) +=== DBI Started: ODBCAPTURE/PRIV_OBJ_XDBACL_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .11 seconds (started at 2024-04-15T01:44:58) +=== DBI Started: ODBCAPTURE/PRIV_QUEUE_REGISTER_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .1 seconds (started at 2024-04-15T01:44:58) +=== DBI Started: ODBCAPTURE/PRIV_QUEUE_SUBSCRIBE_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .12 seconds (started at 2024-04-15T01:44:58) +=== DBI Started: ODBCAPTURE/PRIV_QUEUE_SYSPRIVS_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .09 seconds (started at 2024-04-15T01:44:58) +=== DBI Started: ODBCAPTURE/PRIV_ROLE_PRIVILEGES_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .11 seconds (started at 2024-04-15T01:44:58) +=== DBI Started: ODBCAPTURE/PRIV_SYSOBJ_PRIVILEGES_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .1 seconds (started at 2024-04-15T01:44:58) +=== DBI Started: ODBCAPTURE/PRIV_SYSTEM_PRIVILEGES_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .09 seconds (started at 2024-04-15T01:44:59) +=== DBI Started: ODBCAPTURE/SCHEMA_OBJECTS_VW.vw + +View created. + + +View created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .23 seconds (started at 2024-04-15T01:44:59) +=== DBI Started: ODBCAPTURE/UOR_INSTALL_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .1 seconds (started at 2024-04-15T01:44:59) +=== DBI Started: ODBCAPTURE/ZX_OBJ_INSTALL_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .11 seconds (started at 2024-04-15T01:44:59) +=== DBI Started: ODBCAPTURE/ZX_PRIV_ALL_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .21 seconds (started at 2024-04-15T01:44:59) +=== DBI Started: ODBCAPTURE/COMMON_UTIL.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .14 seconds (started at 2024-04-15T01:44:59) +=== DBI Started: ODBCAPTURE/GRAB_SCRIPTS.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:45:00 for a duration of .97 seconds (started at 2024-04-15T01:44:59) +=== DBI Started: ODBCAPTURE/ROOT_SCRIPTS.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .13 seconds (started at 2024-04-15T01:45:00) +=== DBI Started: ODBCAPTURE/ZIP_UTIL_PKG.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .15 seconds (started at 2024-04-15T01:45:01) +=== DBI Started: ODBCAPTURE/DLOAD_CONF.tabfk + +Table altered. + + +Table altered. + +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .12 seconds (started at 2024-04-15T01:45:01) +=== DBI Started: ODBCAPTURE/OBJECT_CONF.tabfk + +Table altered. + + +Table altered. + + +Table altered. + +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .19 seconds (started at 2024-04-15T01:45:01) +=== DBI Started: ODBCAPTURE/ROLE_CONF.tabfk + +Table altered. + +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .12 seconds (started at 2024-04-15T01:45:01) +=== DBI Started: ODBCAPTURE/SCHEMA_CONF.tabfk + +Table altered. + +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .07 seconds (started at 2024-04-15T01:45:01) +=== DBI Started: ODBCAPTURE/TYPE_CONF.tabfk + +Table altered. + +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .09 seconds (started at 2024-04-15T01:45:01) +=== DBI Started: ./installation_finalize.sql + +Drop_Temp_Publicly_Updateable_Table_SQL + +Table dropped. + + +fix_invalid_public_synonyms + +Re-create Invalid Public Synonyms + +PL/SQL procedure successfully completed. + + +compile_all +Compile All for grbsrc Install Type +-- ODBCAPTURE Compile All is done. + +PL/SQL procedure successfully completed. + + +alter_foreign_keys_ENABLE +Alter Foreign Keys for grbsrc Install Type +alter table "ODBCAPTURE"."DLOAD_CONF" ENABLE constraint "DLOAD_CONF_FK1"; +alter table "ODBCAPTURE"."DLOAD_CONF" ENABLE constraint "DLOAD_CONF_FK2"; +alter table "ODBCAPTURE"."OBJECT_CONF" ENABLE constraint "OBJECT_CONF_FK1"; +alter table "ODBCAPTURE"."OBJECT_CONF" ENABLE constraint "OBJECT_CONF_FK2"; +alter table "ODBCAPTURE"."OBJECT_CONF" ENABLE constraint "OBJECT_CONF_FK3"; +alter table "ODBCAPTURE"."ROLE_CONF" ENABLE constraint "ROLE_CONF_FK1"; +alter table "ODBCAPTURE"."SCHEMA_CONF" ENABLE constraint "SCHEMA_CONF_FK1"; +alter table "ODBCAPTURE"."TYPE_CONF" ENABLE constraint "TYPE_CONF_FK1"; +-- ODBCAPTURE Alter Foreign Keys is done. + +PL/SQL procedure successfully completed. + + +alter_triggers_ENABLE +Alter Triggers for grbsrc Install Type +-- ODBCAPTURE Alter Triggers is done. + +PL/SQL procedure successfully completed. + + +update_id_sequences +Update ID Sequences for grbsrc Install Type +-- ODBCAPTURE Identity Sequence Updates is done. + +PL/SQL procedure successfully completed. + + +Load Installation Files + +Confirm/Create odbcapture_installation_logs Table + +PL/SQL procedure successfully completed. + + +sqlldr_control=./odbcapture_installation_logs.ctl + + 9 Rows successfully loaded. + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:45:06 for a duration of 4.33 seconds (started at 2024-04-15T01:45:01) + +***************** +* Run Reports * +***************** + + +Reporting Summary of Install Type Log Errors +Processing file ODBCAPTURE/DLOAD_CONF.log (2024-04-15 01:45:05) +Processing file ODBCAPTURE/OBJECT_CONF.log (2024-04-15 01:45:05) +Processing file ODBCAPTURE/OTYPE_CONF.log (2024-04-15 01:45:05) +Processing file ODBCAPTURE/ROLE_CONF.log (2024-04-15 01:45:05) +Processing file ODBCAPTURE/SCHEMA_CONF.log (2024-04-15 01:45:05) +Processing file ODBCAPTURE/TYPE_CONF.log (2024-04-15 01:45:05) +Processing file install_grbsrc.log (2024-04-15 01:45:05) +Processing file install_sys.log (2024-04-15 01:45:05) +Processing file install_system.log (2024-04-15 01:45:05) + +PL/SQL procedure successfully completed. + + +Reporting Invalid Objects + +Reporting JUnit XML Database Build Status + +Reorting JUnit XML Installation Log + +"grbsrc" Installation is Done. +old 2: if '&INSTALL_TYPE.' like 'wtp%' +new 2: if 'grbsrc' like 'wtp%' +old 5: values ('&INSTALL_TYPE.', '&APP_VERSION.', 'INSTALL'); +new 5: values ('grbsrc', '1.003', 'INSTALL'); + +PL/SQL procedure successfully completed. + +Disconnected from Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 + +Move Log Files to Build Folder +'db_build_junit_report.xml' -> '../builds/OraEE213_AP212_ORDS222/grbsrc/db_build_junit_report.xml' +'install_grbsrc.log' -> '../builds/OraEE213_AP212_ORDS222/grbsrc/install_grbsrc.log' +'install_sys.log' -> '../builds/OraEE213_AP212_ORDS222/grbsrc/install_sys.log' +'install_system.log' -> '../builds/OraEE213_AP212_ORDS222/grbsrc/install_system.log' +'log_files_junit_report.xml' -> '../builds/OraEE213_AP212_ORDS222/grbsrc/log_files_junit_report.xml' +'odbcapture_installation_logs.log' -> '../builds/OraEE213_AP212_ORDS222/grbsrc/odbcapture_installation_logs.log' +'ODBCAPTURE/DLOAD_CONF.log' -> '../builds/OraEE213_AP212_ORDS222/grbsrc/ODBCAPTURE/DLOAD_CONF.log' +'ODBCAPTURE/OBJECT_CONF.log' -> '../builds/OraEE213_AP212_ORDS222/grbsrc/ODBCAPTURE/OBJECT_CONF.log' +'ODBCAPTURE/OTYPE_CONF.log' -> '../builds/OraEE213_AP212_ORDS222/grbsrc/ODBCAPTURE/OTYPE_CONF.log' +'ODBCAPTURE/ROLE_CONF.log' -> '../builds/OraEE213_AP212_ORDS222/grbsrc/ODBCAPTURE/ROLE_CONF.log' +'ODBCAPTURE/SCHEMA_CONF.log' -> '../builds/OraEE213_AP212_ORDS222/grbsrc/ODBCAPTURE/SCHEMA_CONF.log' +'ODBCAPTURE/TYPE_CONF.log' -> '../builds/OraEE213_AP212_ORDS222/grbsrc/ODBCAPTURE/TYPE_CONF.log' + +Move back to /opt/DMSTEX_dev/wtPLSQL/builds/OraEE213_AP212_ORDS222 + +Clear old wtpgrb logs + +Move to ../../wtpgrb + +../builds/OraEE213_AP212_ORDS222/build.sql wtpgrb + +SQL*Plus: Release 21.0.0.0.0 - Production on Mon Apr 15 01:45:07 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle. All rights reserved. + + +New Session +Connected. + +Reset Output Connections + +PL/SQL procedure successfully completed. + +Elapsed: 00:00:00.01 + +PL/SQL procedure successfully completed. + +Elapsed: 00:00:00.00 + +Show Database Connection + +'DB:'||NAME||',CON:'||SYS_CONTEXT('USERENV','CON_NAME')||',TSTMP:'||SYSTIMESTAMP +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +db: EE213CDB, con: DEVPDB, tstmp: 15-APR-24 01.45.07.957753 AM +00:00 + +Elapsed: 00:00:00.01 + +PL/SQL procedure successfully completed. + +Identify this Module in V$SESSION +Setup Abort on Error + +************************** +* Run SYS Installation * +************************** + +Setup Continue on Error + +***************************** +* Run SYSTEM Installation * +***************************** + +Connected. + +PL/SQL procedure successfully completed. + + +************************* +* Install Application * +************************* + +=== DBI Started: ./installation_prepare.sql + +Create_Temp_Publicly_Updateable_Table_SQL + +Table created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:45:08 for a duration of .11 seconds (started at 2024-04-15T01:45:08) +=== DBI Started: ODBCAPTURE/DLOAD_CONF.cdl + +Disable Triggers and Foreign Keys +alter table "ODBCAPTURE"."DLOAD_CONF" DISABLE constraint "DLOAD_CONF_FK1"; +alter table "ODBCAPTURE"."DLOAD_CONF" DISABLE constraint "DLOAD_CONF_FK2"; + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/DLOAD_CONF.ctl + + 7 Rows successfully loaded. + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:45:09 for a duration of 1.27 seconds (started at 2024-04-15T01:45:08) +=== DBI Started: ODBCAPTURE/OBJECT_CONF.cdl + +Disable Triggers and Foreign Keys +alter table "ODBCAPTURE"."OBJECT_CONF" DISABLE constraint "OBJECT_CONF_FK1"; +alter table "ODBCAPTURE"."OBJECT_CONF" DISABLE constraint "OBJECT_CONF_FK2"; +alter table "ODBCAPTURE"."OBJECT_CONF" DISABLE constraint "OBJECT_CONF_FK3"; + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/OBJECT_CONF.ctl + + 8 Rows successfully loaded. + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:45:10 for a duration of 1.29 seconds (started at 2024-04-15T01:45:09) +=== DBI Started: ODBCAPTURE/ROLE_CONF.cdl + +Disable Triggers and Foreign Keys +alter table "ODBCAPTURE"."ROLE_CONF" DISABLE constraint "ROLE_CONF_FK1"; + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/ROLE_CONF.ctl + + 0 Rows successfully loaded. + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:45:12 for a duration of 1.27 seconds (started at 2024-04-15T01:45:10) +=== DBI Started: ODBCAPTURE/SCHEMA_CONF.cdl + +Disable Triggers and Foreign Keys +alter table "ODBCAPTURE"."SCHEMA_CONF" DISABLE constraint "SCHEMA_CONF_FK1"; + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/SCHEMA_CONF.ctl + + 1 Row successfully loaded. + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:45:13 for a duration of 1.22 seconds (started at 2024-04-15T01:45:12) +=== DBI Started: ODBCAPTURE/TYPE_CONF.cdl + +Disable Triggers and Foreign Keys +alter table "ODBCAPTURE"."TYPE_CONF" DISABLE constraint "TYPE_CONF_FK1"; + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/TYPE_CONF.ctl + + 4 Rows successfully loaded. + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:45:14 for a duration of 1.23 seconds (started at 2024-04-15T01:45:13) +=== DBI Started: ./installation_finalize.sql + +Drop_Temp_Publicly_Updateable_Table_SQL + +Table dropped. + + +fix_invalid_public_synonyms + +Re-create Invalid Public Synonyms + +PL/SQL procedure successfully completed. + + +compile_all +Compile All for wtpgrb Install Type +-- ODBCAPTURE Compile All is done. + +PL/SQL procedure successfully completed. + + +alter_foreign_keys_ENABLE +Alter Foreign Keys for wtpgrb Install Type +alter table "ODBCAPTURE"."DLOAD_CONF" ENABLE constraint "DLOAD_CONF_FK1"; +alter table "ODBCAPTURE"."DLOAD_CONF" ENABLE constraint "DLOAD_CONF_FK2"; +alter table "ODBCAPTURE"."OBJECT_CONF" ENABLE constraint "OBJECT_CONF_FK1"; +alter table "ODBCAPTURE"."OBJECT_CONF" ENABLE constraint "OBJECT_CONF_FK2"; +alter table "ODBCAPTURE"."OBJECT_CONF" ENABLE constraint "OBJECT_CONF_FK3"; +alter table "ODBCAPTURE"."ROLE_CONF" ENABLE constraint "ROLE_CONF_FK1"; +alter table "ODBCAPTURE"."SCHEMA_CONF" ENABLE constraint "SCHEMA_CONF_FK1"; +alter table "ODBCAPTURE"."TYPE_CONF" ENABLE constraint "TYPE_CONF_FK1"; +-- ODBCAPTURE Alter Foreign Keys is done. + +PL/SQL procedure successfully completed. + + +alter_triggers_ENABLE +Alter Triggers for wtpgrb Install Type +-- ODBCAPTURE Alter Triggers is done. + +PL/SQL procedure successfully completed. + + +update_id_sequences +Update ID Sequences for wtpgrb Install Type +-- ODBCAPTURE Identity Sequence Updates is done. + +PL/SQL procedure successfully completed. + + +Load Installation Files + +Confirm/Create odbcapture_installation_logs Table + +PL/SQL procedure successfully completed. + + +sqlldr_control=./odbcapture_installation_logs.ctl + + 8 Rows successfully loaded. + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:45:17 for a duration of 2.67 seconds (started at 2024-04-15T01:45:14) + +***************** +* Run Reports * +***************** + + +Reporting Summary of Install Type Log Errors +Processing file ODBCAPTURE/DLOAD_CONF.log (2024-04-15 01:45:16) +Processing file ODBCAPTURE/OBJECT_CONF.log (2024-04-15 01:45:16) +Processing file ODBCAPTURE/ROLE_CONF.log (2024-04-15 01:45:16) +Processing file ODBCAPTURE/SCHEMA_CONF.log (2024-04-15 01:45:16) +Processing file ODBCAPTURE/TYPE_CONF.log (2024-04-15 01:45:16) +Processing file install_sys.log (2024-04-15 01:45:16) +Processing file install_system.log (2024-04-15 01:45:16) +Processing file install_wtpgrb.log (2024-04-15 01:45:16) + +PL/SQL procedure successfully completed. + + +Reporting Invalid Objects + +Reporting JUnit XML Database Build Status + +Reorting JUnit XML Installation Log + +"wtpgrb" Installation is Done. +old 2: if '&INSTALL_TYPE.' like 'wtp%' +new 2: if 'wtpgrb' like 'wtp%' +old 5: values ('&INSTALL_TYPE.', '&APP_VERSION.', 'INSTALL'); +new 5: values ('wtpgrb', '1.003', 'INSTALL'); + +PL/SQL procedure successfully completed. + +Disconnected from Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production +Version 21.3.0.0.0 + +Move Log Files to Build Folder +'db_build_junit_report.xml' -> '../builds/OraEE213_AP212_ORDS222/wtpgrb/db_build_junit_report.xml' +'install_sys.log' -> '../builds/OraEE213_AP212_ORDS222/wtpgrb/install_sys.log' +'install_system.log' -> '../builds/OraEE213_AP212_ORDS222/wtpgrb/install_system.log' +'install_wtpgrb.log' -> '../builds/OraEE213_AP212_ORDS222/wtpgrb/install_wtpgrb.log' +'log_files_junit_report.xml' -> '../builds/OraEE213_AP212_ORDS222/wtpgrb/log_files_junit_report.xml' +'odbcapture_installation_logs.log' -> '../builds/OraEE213_AP212_ORDS222/wtpgrb/odbcapture_installation_logs.log' +'ODBCAPTURE/DLOAD_CONF.log' -> '../builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/DLOAD_CONF.log' +'ODBCAPTURE/OBJECT_CONF.log' -> '../builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/OBJECT_CONF.log' +'ODBCAPTURE/ROLE_CONF.log' -> '../builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/ROLE_CONF.log' +'ODBCAPTURE/SCHEMA_CONF.log' -> '../builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/SCHEMA_CONF.log' +'ODBCAPTURE/TYPE_CONF.log' -> '../builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/TYPE_CONF.log' + +Move back to /opt/DMSTEX_dev/wtPLSQL/builds/OraEE213_AP212_ORDS222 diff --git a/builds/OraEE213_AP212_ORDS222/build.sh b/builds/OraEE213_AP212_ORDS222/build.sh new file mode 100644 index 0000000..4f3ec7f --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/build.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +# +# Build Script for +# -) Oracle Enterprise Edition 21.3 +# -) Application Express 21.2 +# -) Oracle REST Data Services 22.2 +# +# Command Line Parameters +# -) 1 - SYS Password +# -) 2 - User Password +# -) 3 - Version +# + +SYS_PASS="${1}" +USR_PASS="${2}" +VERSION="${3}" + +# Copy stderr and stdout to log file +exec &> >(tee build.log) + +######################################## +# Confirm starting location +if ! ls "$(basename $0)" +then + echo "This script must be run from its source location" + exit -1 +fi +HOME_DIR="${PWD}" +echo "Running from ${HOME_DIR}" + +######################################## +echo "" +echo "Setup Variables" +### +BUILD_PATH='../builds/OraEE213_AP212_ORDS222' +BUTIL_PATH='../builds/util' +IFILE_PATH='../../../install_files' +HOST_NAME_PORT='localhost:1521' +CDB_NAME='EE213CDB' +PDB_NAME='DEVPDB' +### +CDB_SYS="SYS/${SYS_PASS}@//${HOST_NAME_PORT}/${CDB_NAME} as sysdba" +PDB_SYS="SYS/${SYS_PASS}@//${HOST_NAME_PORT}/${PDB_NAME} as sysdba" +PDB_SYSTEM="SYSTEM/${SYS_PASS}@//${HOST_NAME_PORT}/${PDB_NAME}" +PDB_WTP="WTP/26${USR_PASS}@//${HOST_NAME_PORT}/${PDB_NAME}" + +######################################## +# Source the Build Functions +. ../util/build_functions.sh + +######################################## +clear_log_files +capture_version +build_init +run_build 'wtpsrc' +run_build 'wtptst' +run_build 'wtpsav' +setup_for_test +run_core_test +run_junit_test +run_save_test +run_build 'grbsrc' +run_build 'wtpgrb' +move_log_files diff --git a/builds/OraEE213_AP212_ORDS222/build_initialize.sql b/builds/OraEE213_AP212_ORDS222/build_initialize.sql new file mode 100644 index 0000000..d14194f --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/build_initialize.sql @@ -0,0 +1,26 @@ + +-- +-- Base Build Script +-- +-- Command Line Parameters: +-- 1 - PDB_NAME: Name of the Pluggable Database +-- 2 - CDB_SYS: Connect String for SYS in the Container Database +-- + +WHENEVER SQLERROR EXIT SQL.SQLCODE +WHENEVER OSERROR EXIT + +define PDB_NAME="&1." +define CDB_SYS="&2." + +set linesize 2499 +set trimspool on +set termout on +set verify off +set echo off +set timing on + +@"../util/new_session.sql" "&CDB_SYS." "" "" +@"../util/create_pdb.sql" "&PDB_NAME." + +exit diff --git a/builds/OraEE213_AP212_ORDS222/grbsrc/ODBCapture/DLOAD_CONF.log b/builds/OraEE213_AP212_ORDS222/grbsrc/ODBCapture/DLOAD_CONF.log new file mode 100644 index 0000000..8f538b2 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/grbsrc/ODBCapture/DLOAD_CONF.log @@ -0,0 +1,57 @@ + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:44:39 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. + +Control File: ODBCAPTURE/DLOAD_CONF.ctl +Data File: ODBCAPTURE/DLOAD_CONF.csv + Bad File: ODBCAPTURE/DLOAD_CONF.bad + Discard File: none specified + + (Allow all discards) + +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE"."DLOAD_CONF", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +USERNAME FIRST 128 , O(") CHARACTER +TABLE_NAME NEXT 128 , O(") CHARACTER +INSTALL_TYPE NEXT 10 , O(") CHARACTER +BEFORE_SELECT_SQL NEXT 4000 , O(") CHARACTER +WHERE_CLAUSE NEXT 4000 , O(") CHARACTER +ORDER_BY_COLUMNS NEXT 4000 , O(") CHARACTER +AFTER_ORDER_BY_SQL NEXT 4000 , O(") CHARACTER +NOTES NEXT 1024 , O(") CHARACTER + +value used for ROWS parameter changed from 250 to 60 + +Table "ODBCAPTURE"."DLOAD_CONF": + 6 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + + +Space allocated for bind array: 1038360 bytes(60 rows) +Read buffer bytes: 1048576 + +Total logical records skipped: 1 +Total logical records read: 6 +Total logical records rejected: 0 +Total logical records discarded: 0 + +Run began on Mon Apr 15 01:44:39 2024 +Run ended on Mon Apr 15 01:44:39 2024 + +Elapsed time was: 00:00:00.47 +CPU time was: 00:00:00.04 diff --git a/builds/OraEE213_AP212_ORDS222/grbsrc/ODBCapture/OBJECT_CONF.log b/builds/OraEE213_AP212_ORDS222/grbsrc/ODBCapture/OBJECT_CONF.log new file mode 100644 index 0000000..e9ad3fb --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/grbsrc/ODBCapture/OBJECT_CONF.log @@ -0,0 +1,54 @@ + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:44:41 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. + +Control File: ODBCAPTURE/OBJECT_CONF.ctl +Data File: ODBCAPTURE/OBJECT_CONF.csv + Bad File: ODBCAPTURE/OBJECT_CONF.bad + Discard File: none specified + + (Allow all discards) + +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE"."OBJECT_CONF", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +USERNAME FIRST 128 , O(") CHARACTER +INSTALL_OTYPE NEXT 20 , O(") CHARACTER +INSTALL_TYPE NEXT 10 , O(") CHARACTER +ONAME_FILTER NEXT 4000 , O(") CHARACTER +NOTES NEXT 1024 , O(") CHARACTER + +value used for ROWS parameter changed from 250 to 201 + +Table "ODBCAPTURE"."OBJECT_CONF": + 0 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + + +Space allocated for bind array: 1043592 bytes(201 rows) +Read buffer bytes: 1048576 + +Total logical records skipped: 1 +Total logical records read: 0 +Total logical records rejected: 0 +Total logical records discarded: 0 + +Run began on Mon Apr 15 01:44:41 2024 +Run ended on Mon Apr 15 01:44:42 2024 + +Elapsed time was: 00:00:00.34 +CPU time was: 00:00:00.04 diff --git a/builds/OraEE213_AP212_ORDS222/grbsrc/ODBCapture/OTYPE_CONF.log b/builds/OraEE213_AP212_ORDS222/grbsrc/ODBCapture/OTYPE_CONF.log new file mode 100644 index 0000000..9d279a1 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/grbsrc/ODBCapture/OTYPE_CONF.log @@ -0,0 +1,56 @@ + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:44:44 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. + +Control File: ODBCAPTURE/OTYPE_CONF.ctl +Data File: ODBCAPTURE/OTYPE_CONF.csv + Bad File: ODBCAPTURE/OTYPE_CONF.bad + Discard File: none specified + + (Allow all discards) + +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE"."OTYPE_CONF", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +INSTALL_OTYPE FIRST 20 , O(") CHARACTER +INSTALL_ORDER NEXT * , O(") CHARACTER +EXT NEXT 6 , O(") CHARACTER +EXT2 NEXT 6 , O(") CHARACTER +EXT3 NEXT 6 , O(") CHARACTER +NAME_CHECK_OTYPE NEXT 30 , O(") CHARACTER +NOTES NEXT 1024 , O(") CHARACTER +OBJECT_TYPE NEXT 30 , O(") CHARACTER + + +Table "ODBCAPTURE"."OTYPE_CONF": + 35 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + + +Space allocated for bind array: 348500 bytes(250 rows) +Read buffer bytes: 1048576 + +Total logical records skipped: 1 +Total logical records read: 35 +Total logical records rejected: 0 +Total logical records discarded: 0 + +Run began on Mon Apr 15 01:44:44 2024 +Run ended on Mon Apr 15 01:44:45 2024 + +Elapsed time was: 00:00:00.34 +CPU time was: 00:00:00.04 diff --git a/builds/OraEE213_AP212_ORDS222/grbsrc/ODBCapture/ROLE_CONF.log b/builds/OraEE213_AP212_ORDS222/grbsrc/ODBCapture/ROLE_CONF.log new file mode 100644 index 0000000..d45cb6d --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/grbsrc/ODBCapture/ROLE_CONF.log @@ -0,0 +1,51 @@ + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:44:47 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. + +Control File: ODBCAPTURE/ROLE_CONF.ctl +Data File: ODBCAPTURE/ROLE_CONF.csv + Bad File: ODBCAPTURE/ROLE_CONF.bad + Discard File: none specified + + (Allow all discards) + +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE"."ROLE_CONF", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +ROLENAME FIRST 128 , O(") CHARACTER +INSTALL_TYPE NEXT 10 , O(") CHARACTER +NOTES NEXT 1024 , O(") CHARACTER + + +Table "ODBCAPTURE"."ROLE_CONF": + 105 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + + +Space allocated for bind array: 292000 bytes(250 rows) +Read buffer bytes: 1048576 + +Total logical records skipped: 1 +Total logical records read: 105 +Total logical records rejected: 0 +Total logical records discarded: 0 + +Run began on Mon Apr 15 01:44:47 2024 +Run ended on Mon Apr 15 01:44:47 2024 + +Elapsed time was: 00:00:00.33 +CPU time was: 00:00:00.03 diff --git a/builds/OraEE213_AP212_ORDS222/grbsrc/ODBCapture/SCHEMA_CONF.log b/builds/OraEE213_AP212_ORDS222/grbsrc/ODBCapture/SCHEMA_CONF.log new file mode 100644 index 0000000..9f09eef --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/grbsrc/ODBCapture/SCHEMA_CONF.log @@ -0,0 +1,53 @@ + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:44:50 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. + +Control File: ODBCAPTURE/SCHEMA_CONF.ctl +Data File: ODBCAPTURE/SCHEMA_CONF.csv + Bad File: ODBCAPTURE/SCHEMA_CONF.bad + Discard File: none specified + + (Allow all discards) + +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE"."SCHEMA_CONF", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +USERNAME FIRST 128 , O(") CHARACTER +INSTALL_TYPE NEXT 10 , O(") CHARACTER +TS_SIZE NEXT 10 , O(") CHARACTER +NOTES NEXT 1024 , O(") CHARACTER +TABLESPACE_NAME NEXT 30 , O(") CHARACTER + + +Table "ODBCAPTURE"."SCHEMA_CONF": + 9 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + + +Space allocated for bind array: 303000 bytes(250 rows) +Read buffer bytes: 1048576 + +Total logical records skipped: 1 +Total logical records read: 9 +Total logical records rejected: 0 +Total logical records discarded: 0 + +Run began on Mon Apr 15 01:44:50 2024 +Run ended on Mon Apr 15 01:44:50 2024 + +Elapsed time was: 00:00:00.34 +CPU time was: 00:00:00.04 diff --git a/builds/OraEE213_AP212_ORDS222/grbsrc/ODBCapture/TYPE_CONF.log b/builds/OraEE213_AP212_ORDS222/grbsrc/ODBCapture/TYPE_CONF.log new file mode 100644 index 0000000..b64af63 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/grbsrc/ODBCapture/TYPE_CONF.log @@ -0,0 +1,51 @@ + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:44:53 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. + +Control File: ODBCAPTURE/TYPE_CONF.ctl +Data File: ODBCAPTURE/TYPE_CONF.csv + Bad File: ODBCAPTURE/TYPE_CONF.bad + Discard File: none specified + + (Allow all discards) + +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE"."TYPE_CONF", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +INSTALL_TYPE FIRST 10 , O(") CHARACTER +NOTES NEXT 1024 , O(") CHARACTER +INSTALL_TYPE_PARENT NEXT 10 , O(") CHARACTER + + +Table "ODBCAPTURE"."TYPE_CONF": + 3 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + + +Space allocated for bind array: 262500 bytes(250 rows) +Read buffer bytes: 1048576 + +Total logical records skipped: 1 +Total logical records read: 3 +Total logical records rejected: 0 +Total logical records discarded: 0 + +Run began on Mon Apr 15 01:44:53 2024 +Run ended on Mon Apr 15 01:44:53 2024 + +Elapsed time was: 00:00:00.38 +CPU time was: 00:00:00.05 diff --git a/builds/OraEE213_AP212_ORDS222/grbsrc/db_build_junit_report.xml b/builds/OraEE213_AP212_ORDS222/grbsrc/db_build_junit_report.xml new file mode 100644 index 0000000..9fbf132 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/grbsrc/db_build_junit_report.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/builds/OraEE213_AP212_ORDS222/grbsrc/install_grbsrc.log b/builds/OraEE213_AP212_ORDS222/grbsrc/install_grbsrc.log new file mode 100644 index 0000000..e89eefc --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/grbsrc/install_grbsrc.log @@ -0,0 +1,782 @@ +=== DBI Started: ./installation_prepare.sql + +Create_Temp_Publicly_Updateable_Table_SQL + +Table created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .15 seconds (started at 2024-04-15T01:44:32) +=== DBI Started: ODBCAPTURE/COMMON_UTIL.pspec + +Package created. + +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .07 seconds (started at 2024-04-15T01:44:33) +=== DBI Started: ODBCAPTURE/GRAB_SCRIPTS.pspec + +Package created. + +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .11 seconds (started at 2024-04-15T01:44:33) +=== DBI Started: ODBCAPTURE/ROOT_SCRIPTS.pspec + +Package created. + +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .05 seconds (started at 2024-04-15T01:44:33) +=== DBI Started: ODBCAPTURE/ZIP_UTIL_PKG.pspec + +Package created. + +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .06 seconds (started at 2024-04-15T01:44:33) +=== DBI Started: ODBCAPTURE/DBA_DEPENDENCIES_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .06 seconds (started at 2024-04-15T01:44:33) +=== DBI Started: ODBCAPTURE/DBA_OBJECTS_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .06 seconds (started at 2024-04-15T01:44:33) +=== DBI Started: ODBCAPTURE/DBA_TAB_PRIVS_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .22 seconds (started at 2024-04-15T01:44:33) +=== DBI Started: ODBCAPTURE/DLOAD_CONF.tab + +Table created. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .35 seconds (started at 2024-04-15T01:44:33) +=== DBI Started: ODBCAPTURE/INSTALL_TYPE_TIMING.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .07 seconds (started at 2024-04-15T01:44:34) +=== DBI Started: ODBCAPTURE/OBJECT_CONF.tab + +Table created. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .34 seconds (started at 2024-04-15T01:44:34) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .05 seconds (started at 2024-04-15T01:44:34) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_CONTEXT_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .05 seconds (started at 2024-04-15T01:44:34) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .07 seconds (started at 2024-04-15T01:44:34) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_FKEY_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .06 seconds (started at 2024-04-15T01:44:34) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_INDEX_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .07 seconds (started at 2024-04-15T01:44:34) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_OBJECT_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:35 for a duration of .07 seconds (started at 2024-04-15T01:44:34) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_SYNONYM_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:35 for a duration of .08 seconds (started at 2024-04-15T01:44:35) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_TRIGGER_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:35 for a duration of .08 seconds (started at 2024-04-15T01:44:35) +=== DBI Started: ODBCAPTURE/OTYPE_CONF.tab + +Table created. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:44:35 for a duration of .39 seconds (started at 2024-04-15T01:44:35) +=== DBI Started: ODBCAPTURE/ROLE_CONF.tab + +Table created. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:44:36 for a duration of .46 seconds (started at 2024-04-15T01:44:35) +=== DBI Started: ODBCAPTURE/SCHEMA_CONF.tab + +Table created. + + +Table altered. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:44:36 for a duration of .4 seconds (started at 2024-04-15T01:44:36) +=== DBI Started: ODBCAPTURE/TYPE_CONF.tab + +Table created. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:44:36 for a duration of .41 seconds (started at 2024-04-15T01:44:36) +=== DBI Started: ODBCAPTURE/ZIP_FILES.tab + +Table created. + + +Table altered. + +=== DBI Completed at 2024-04-15T01:44:37 for a duration of .15 seconds (started at 2024-04-15T01:44:36) +=== DBI Started: ODBCAPTURE/ZX_OBJ_INSTALL_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:37 for a duration of .07 seconds (started at 2024-04-15T01:44:37) +=== DBI Started: ODBCAPTURE/ZX_PRIV_ALL_TAB.tab + +Table created. + +=== DBI Completed at 2024-04-15T01:44:37 for a duration of .06 seconds (started at 2024-04-15T01:44:37) +=== DBI Started: ODBCAPTURE/DLOAD_CONF.cdl + +Disable Triggers and Foreign Keys + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/DLOAD_CONF.ctl + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:44:40 for a duration of 2.95 seconds (started at 2024-04-15T01:44:37) +=== DBI Started: ODBCAPTURE/OBJECT_CONF.cdl + +Disable Triggers and Foreign Keys + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/OBJECT_CONF.ctl + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:44:43 for a duration of 2.92 seconds (started at 2024-04-15T01:44:40) +=== DBI Started: ODBCAPTURE/OTYPE_CONF.cdl + +Disable Triggers and Foreign Keys + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/OTYPE_CONF.ctl + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:44:45 for a duration of 2.82 seconds (started at 2024-04-15T01:44:43) +=== DBI Started: ODBCAPTURE/ROLE_CONF.cdl + +Disable Triggers and Foreign Keys + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/ROLE_CONF.ctl + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:44:48 for a duration of 2.78 seconds (started at 2024-04-15T01:44:45) +=== DBI Started: ODBCAPTURE/SCHEMA_CONF.cdl + +Disable Triggers and Foreign Keys + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/SCHEMA_CONF.ctl + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:44:51 for a duration of 2.9 seconds (started at 2024-04-15T01:44:48) +=== DBI Started: ODBCAPTURE/TYPE_CONF.cdl + +Disable Triggers and Foreign Keys + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/TYPE_CONF.ctl + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:44:54 for a duration of 2.9 seconds (started at 2024-04-15T01:44:51) +=== DBI Started: ODBCAPTURE/DBA_DEPENDENCIES_TAB.tabind + +Index created. + + +Index created. + +=== DBI Completed at 2024-04-15T01:44:54 for a duration of .11 seconds (started at 2024-04-15T01:44:54) +=== DBI Started: ODBCAPTURE/DBA_OBJECTS_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:54 for a duration of .24 seconds (started at 2024-04-15T01:44:54) +=== DBI Started: ODBCAPTURE/DBA_TAB_PRIVS_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .17 seconds (started at 2024-04-15T01:44:54) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .08 seconds (started at 2024-04-15T01:44:55) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_CONTEXT_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .06 seconds (started at 2024-04-15T01:44:55) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .07 seconds (started at 2024-04-15T01:44:55) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_FKEY_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .08 seconds (started at 2024-04-15T01:44:55) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_INDEX_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .06 seconds (started at 2024-04-15T01:44:55) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_OBJECT_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .08 seconds (started at 2024-04-15T01:44:55) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_SYNONYM_TAB.tabind + +Index created. + + +Index created. + +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .15 seconds (started at 2024-04-15T01:44:55) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_TRIGGER_TAB.tabind + +Index created. + + +Index created. + +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .13 seconds (started at 2024-04-15T01:44:55) +=== DBI Started: ODBCAPTURE/ZX_OBJ_INSTALL_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .07 seconds (started at 2024-04-15T01:44:55) +=== DBI Started: ODBCAPTURE/ZX_PRIV_ALL_TAB.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .07 seconds (started at 2024-04-15T01:44:56) +=== DBI Started: ODBCAPTURE/AQ_SYSTEM_PRIVS_VW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .11 seconds (started at 2024-04-15T01:44:56) +=== DBI Started: ODBCAPTURE/DBA_DEPENDENCIES_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .1 seconds (started at 2024-04-15T01:44:56) +=== DBI Started: ODBCAPTURE/DBA_OBJECTS_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .23 seconds (started at 2024-04-15T01:44:56) +=== DBI Started: ODBCAPTURE/DBA_TAB_PRIVS_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .1 seconds (started at 2024-04-15T01:44:56) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_COMMENTS_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .09 seconds (started at 2024-04-15T01:44:56) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_CONTEXT_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .12 seconds (started at 2024-04-15T01:44:56) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .12 seconds (started at 2024-04-15T01:44:57) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_FKEY_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .13 seconds (started at 2024-04-15T01:44:57) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_INDEX_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .12 seconds (started at 2024-04-15T01:44:57) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_OBJECT_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .15 seconds (started at 2024-04-15T01:44:57) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_SYNONYM_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .1 seconds (started at 2024-04-15T01:44:57) +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_TRIGGER_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .11 seconds (started at 2024-04-15T01:44:57) +=== DBI Started: ODBCAPTURE/PRIV_OBJ_DIR_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .11 seconds (started at 2024-04-15T01:44:57) +=== DBI Started: ODBCAPTURE/PRIV_OBJ_INSTALL_VW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .11 seconds (started at 2024-04-15T01:44:57) +=== DBI Started: ODBCAPTURE/PRIV_OBJ_JAVA_FG_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .11 seconds (started at 2024-04-15T01:44:58) +=== DBI Started: ODBCAPTURE/PRIV_OBJ_QUEUE_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .11 seconds (started at 2024-04-15T01:44:58) +=== DBI Started: ODBCAPTURE/PRIV_OBJ_XDBACL_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .11 seconds (started at 2024-04-15T01:44:58) +=== DBI Started: ODBCAPTURE/PRIV_QUEUE_REGISTER_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .1 seconds (started at 2024-04-15T01:44:58) +=== DBI Started: ODBCAPTURE/PRIV_QUEUE_SUBSCRIBE_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .12 seconds (started at 2024-04-15T01:44:58) +=== DBI Started: ODBCAPTURE/PRIV_QUEUE_SYSPRIVS_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .09 seconds (started at 2024-04-15T01:44:58) +=== DBI Started: ODBCAPTURE/PRIV_ROLE_PRIVILEGES_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .11 seconds (started at 2024-04-15T01:44:58) +=== DBI Started: ODBCAPTURE/PRIV_SYSOBJ_PRIVILEGES_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .1 seconds (started at 2024-04-15T01:44:58) +=== DBI Started: ODBCAPTURE/PRIV_SYSTEM_PRIVILEGES_VIEW.vw + +View created. + + +Warning: View created with compilation errors. + +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .09 seconds (started at 2024-04-15T01:44:59) +=== DBI Started: ODBCAPTURE/SCHEMA_OBJECTS_VW.vw + +View created. + + +View created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .23 seconds (started at 2024-04-15T01:44:59) +=== DBI Started: ODBCAPTURE/UOR_INSTALL_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .1 seconds (started at 2024-04-15T01:44:59) +=== DBI Started: ODBCAPTURE/ZX_OBJ_INSTALL_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .11 seconds (started at 2024-04-15T01:44:59) +=== DBI Started: ODBCAPTURE/ZX_PRIV_ALL_VIEW.vw + +View created. + + +View created. + +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .21 seconds (started at 2024-04-15T01:44:59) +=== DBI Started: ODBCAPTURE/COMMON_UTIL.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .14 seconds (started at 2024-04-15T01:44:59) +=== DBI Started: ODBCAPTURE/GRAB_SCRIPTS.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:45:00 for a duration of .97 seconds (started at 2024-04-15T01:44:59) +=== DBI Started: ODBCAPTURE/ROOT_SCRIPTS.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .13 seconds (started at 2024-04-15T01:45:00) +=== DBI Started: ODBCAPTURE/ZIP_UTIL_PKG.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .15 seconds (started at 2024-04-15T01:45:01) +=== DBI Started: ODBCAPTURE/DLOAD_CONF.tabfk + +Table altered. + + +Table altered. + +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .12 seconds (started at 2024-04-15T01:45:01) +=== DBI Started: ODBCAPTURE/OBJECT_CONF.tabfk + +Table altered. + + +Table altered. + + +Table altered. + +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .19 seconds (started at 2024-04-15T01:45:01) +=== DBI Started: ODBCAPTURE/ROLE_CONF.tabfk + +Table altered. + +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .12 seconds (started at 2024-04-15T01:45:01) +=== DBI Started: ODBCAPTURE/SCHEMA_CONF.tabfk + +Table altered. + +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .07 seconds (started at 2024-04-15T01:45:01) +=== DBI Started: ODBCAPTURE/TYPE_CONF.tabfk + +Table altered. + +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .09 seconds (started at 2024-04-15T01:45:01) +=== DBI Started: ./installation_finalize.sql + +Drop_Temp_Publicly_Updateable_Table_SQL + +Table dropped. + + +fix_invalid_public_synonyms + +Re-create Invalid Public Synonyms + +PL/SQL procedure successfully completed. + + +compile_all +Compile All for grbsrc Install Type +-- ODBCAPTURE Compile All is done. + +PL/SQL procedure successfully completed. + + +alter_foreign_keys_ENABLE +Alter Foreign Keys for grbsrc Install Type +alter table "ODBCAPTURE"."DLOAD_CONF" ENABLE constraint "DLOAD_CONF_FK1"; +alter table "ODBCAPTURE"."DLOAD_CONF" ENABLE constraint "DLOAD_CONF_FK2"; +alter table "ODBCAPTURE"."OBJECT_CONF" ENABLE constraint "OBJECT_CONF_FK1"; +alter table "ODBCAPTURE"."OBJECT_CONF" ENABLE constraint "OBJECT_CONF_FK2"; +alter table "ODBCAPTURE"."OBJECT_CONF" ENABLE constraint "OBJECT_CONF_FK3"; +alter table "ODBCAPTURE"."ROLE_CONF" ENABLE constraint "ROLE_CONF_FK1"; +alter table "ODBCAPTURE"."SCHEMA_CONF" ENABLE constraint "SCHEMA_CONF_FK1"; +alter table "ODBCAPTURE"."TYPE_CONF" ENABLE constraint "TYPE_CONF_FK1"; +-- ODBCAPTURE Alter Foreign Keys is done. + +PL/SQL procedure successfully completed. + + +alter_triggers_ENABLE +Alter Triggers for grbsrc Install Type +-- ODBCAPTURE Alter Triggers is done. + +PL/SQL procedure successfully completed. + + +update_id_sequences +Update ID Sequences for grbsrc Install Type +-- ODBCAPTURE Identity Sequence Updates is done. + +PL/SQL procedure successfully completed. + + +Load Installation Files + +Confirm/Create odbcapture_installation_logs Table + +PL/SQL procedure successfully completed. + + +sqlldr_control=./odbcapture_installation_logs.ctl + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:45:06 for a duration of 4.33 seconds (started at 2024-04-15T01:45:01) diff --git a/builds/OraEE213_AP212_ORDS222/grbsrc/install_sys.log b/builds/OraEE213_AP212_ORDS222/grbsrc/install_sys.log new file mode 100644 index 0000000..5e7a689 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/grbsrc/install_sys.log @@ -0,0 +1,269 @@ +=== DBI Started: SYS/ODBCAPTURE.usr + +User created. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:44:32 for a duration of 3.93 seconds (started at 2024-04-15T01:44:28) diff --git a/builds/OraEE213_AP212_ORDS222/grbsrc/install_system.log b/builds/OraEE213_AP212_ORDS222/grbsrc/install_system.log new file mode 100644 index 0000000..6e4b9b7 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/grbsrc/install_system.log @@ -0,0 +1,40 @@ +=== DBI Started: SYSTEM/GRAB_SCRIPTS_DIR.dir + +Directory created. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:44:32 for a duration of .17 seconds (started at 2024-04-15T01:44:32) +=== DBI Started: SYSTEM/ODBCAPTURE_usr.grnt + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:44:32 for a duration of .33 seconds (started at 2024-04-15T01:44:32) diff --git a/builds/OraEE213_AP212_ORDS222/grbsrc/log_files_junit_report.xml b/builds/OraEE213_AP212_ORDS222/grbsrc/log_files_junit_report.xml new file mode 100644 index 0000000..85ba78d --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/grbsrc/log_files_junit_report.xml @@ -0,0 +1,1082 @@ + + + + + + + +=== DBI Started: ./installation_prepare.sql +Create_Temp_Publicly_Updateable_Table_SQL +Table created. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .15 seconds (started at 2024-04-15T01:44:32) + + + + +=== DBI Started: ODBCAPTURE/AQ_SYSTEM_PRIVS_VW.vw +View created. +View created. +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .11 seconds (started at 2024-04-15T01:44:56) + + + + +=== DBI Started: ODBCAPTURE/COMMON_UTIL.pbody +Package body created. +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .14 seconds (started at 2024-04-15T01:44:59) + + + + +=== DBI Started: ODBCAPTURE/COMMON_UTIL.pspec +Package created. +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .07 seconds (started at 2024-04-15T01:44:33) + + + + +=== DBI Started: ODBCAPTURE/DBA_DEPENDENCIES_TAB.tab +Table created. +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .06 seconds (started at 2024-04-15T01:44:33) + + + + +=== DBI Started: ODBCAPTURE/DBA_DEPENDENCIES_TAB.tabind +Index created. +Index created. +=== DBI Completed at 2024-04-15T01:44:54 for a duration of .11 seconds (started at 2024-04-15T01:44:54) + + + + +=== DBI Started: ODBCAPTURE/DBA_DEPENDENCIES_VIEW.vw +View created. +View created. +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .1 seconds (started at 2024-04-15T01:44:56) + + + + +=== DBI Started: ODBCAPTURE/DBA_OBJECTS_TAB.tab +Table created. +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .06 seconds (started at 2024-04-15T01:44:33) + + + + +=== DBI Started: ODBCAPTURE/DBA_OBJECTS_TAB.tabind +Index created. +=== DBI Completed at 2024-04-15T01:44:54 for a duration of .24 seconds (started at 2024-04-15T01:44:54) + + + + +=== DBI Started: ODBCAPTURE/DBA_OBJECTS_VIEW.vw +View created. +View created. +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .23 seconds (started at 2024-04-15T01:44:56) + + + + +=== DBI Started: ODBCAPTURE/DBA_TAB_PRIVS_TAB.tab +Table created. +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .22 seconds (started at 2024-04-15T01:44:33) + + + + +=== DBI Started: ODBCAPTURE/DBA_TAB_PRIVS_TAB.tabind +Index created. +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .17 seconds (started at 2024-04-15T01:44:54) + + + + +=== DBI Started: ODBCAPTURE/DBA_TAB_PRIVS_VIEW.vw +View created. +Warning: View created with compilation errors. +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .1 seconds (started at 2024-04-15T01:44:56) + + + + +=== DBI Started: ODBCAPTURE/DLOAD_CONF.cdl +Disable Triggers and Foreign Keys +PL/SQL procedure successfully completed. +sqlldr_control=ODBCAPTURE/DLOAD_CONF.ctl +PL/SQL procedure successfully completed. +=== DBI Completed at 2024-04-15T01:44:40 for a duration of 2.95 seconds (started at 2024-04-15T01:44:37) +### SQL*Loader Log File: ODBCAPTURE/DLOAD_CONF.log + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:44:39 2024 +Version 21.3.0.0.0 +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. +Control File: ODBCAPTURE/DLOAD_CONF.ctl +Data File: ODBCAPTURE/DLOAD_CONF.csv + Bad File: ODBCAPTURE/DLOAD_CONF.bad + Discard File: none specified + + (Allow all discards) +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE"."DLOAD_CONF", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +USERNAME FIRST 128 , O(") CHARACTER +TABLE_NAME NEXT 128 , O(") CHARACTER +INSTALL_TYPE NEXT 10 , O(") CHARACTER +BEFORE_SELECT_SQL NEXT 4000 , O(") CHARACTER +WHERE_CLAUSE NEXT 4000 , O(") CHARACTER +ORDER_BY_COLUMNS NEXT 4000 , O(") CHARACTER +AFTER_ORDER_BY_SQL NEXT 4000 , O(") CHARACTER +NOTES NEXT 1024 , O(") CHARACTER +value used for ROWS parameter changed from 250 to 60 +Table "ODBCAPTURE"."DLOAD_CONF": + 6 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + +Space allocated for bind array: 1038360 bytes(60 rows) +Read buffer bytes: 1048576 +Total logical records skipped: 1 +Total logical records read: 6 +Total logical records rejected: 0 +Total logical records discarded: 0 +Run began on Mon Apr 15 01:44:39 2024 +Run ended on Mon Apr 15 01:44:39 2024 +Elapsed time was: 00:00:00.47 +CPU time was: 00:00:00.04 + + + + + +=== DBI Started: ODBCAPTURE/DLOAD_CONF.tab +Table created. +Table altered. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .35 seconds (started at 2024-04-15T01:44:33) + + + + +=== DBI Started: ODBCAPTURE/DLOAD_CONF.tabfk +Table altered. +Table altered. +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .12 seconds (started at 2024-04-15T01:45:01) + + + + +=== DBI Started: ODBCAPTURE/GRAB_SCRIPTS.pbody +Package body created. +=== DBI Completed at 2024-04-15T01:45:00 for a duration of .97 seconds (started at 2024-04-15T01:44:59) + + + + +=== DBI Started: ODBCAPTURE/GRAB_SCRIPTS.pspec +Package created. +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .11 seconds (started at 2024-04-15T01:44:33) + + + + +=== DBI Started: ODBCAPTURE/INSTALL_TYPE_TIMING.tab +Table created. +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .07 seconds (started at 2024-04-15T01:44:34) + + + + +=== DBI Started: ODBCAPTURE/OBJECT_CONF.cdl +Disable Triggers and Foreign Keys +PL/SQL procedure successfully completed. +sqlldr_control=ODBCAPTURE/OBJECT_CONF.ctl +PL/SQL procedure successfully completed. +=== DBI Completed at 2024-04-15T01:44:43 for a duration of 2.92 seconds (started at 2024-04-15T01:44:40) +### SQL*Loader Log File: ODBCAPTURE/OBJECT_CONF.log + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:44:41 2024 +Version 21.3.0.0.0 +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. +Control File: ODBCAPTURE/OBJECT_CONF.ctl +Data File: ODBCAPTURE/OBJECT_CONF.csv + Bad File: ODBCAPTURE/OBJECT_CONF.bad + Discard File: none specified + + (Allow all discards) +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE"."OBJECT_CONF", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +USERNAME FIRST 128 , O(") CHARACTER +INSTALL_OTYPE NEXT 20 , O(") CHARACTER +INSTALL_TYPE NEXT 10 , O(") CHARACTER +ONAME_FILTER NEXT 4000 , O(") CHARACTER +NOTES NEXT 1024 , O(") CHARACTER +value used for ROWS parameter changed from 250 to 201 +Table "ODBCAPTURE"."OBJECT_CONF": + 0 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + +Space allocated for bind array: 1043592 bytes(201 rows) +Read buffer bytes: 1048576 +Total logical records skipped: 1 +Total logical records read: 0 +Total logical records rejected: 0 +Total logical records discarded: 0 +Run began on Mon Apr 15 01:44:41 2024 +Run ended on Mon Apr 15 01:44:42 2024 +Elapsed time was: 00:00:00.34 +CPU time was: 00:00:00.04 + + + + + +=== DBI Started: ODBCAPTURE/OBJECT_CONF.tab +Table created. +Table altered. +Table altered. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .34 seconds (started at 2024-04-15T01:44:34) + + + + +=== DBI Started: ODBCAPTURE/OBJECT_CONF.tabfk +Table altered. +Table altered. +Table altered. +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .19 seconds (started at 2024-04-15T01:45:01) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tab +Table created. +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .05 seconds (started at 2024-04-15T01:44:34) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tabind +Index created. +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .08 seconds (started at 2024-04-15T01:44:55) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_COMMENTS_VIEW.vw +View created. +Warning: View created with compilation errors. +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .09 seconds (started at 2024-04-15T01:44:56) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_CONTEXT_TAB.tab +Table created. +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .05 seconds (started at 2024-04-15T01:44:34) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_CONTEXT_TAB.tabind +Index created. +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .06 seconds (started at 2024-04-15T01:44:55) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_CONTEXT_VIEW.vw +View created. +View created. +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .12 seconds (started at 2024-04-15T01:44:56) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_TAB.tab +Table created. +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .07 seconds (started at 2024-04-15T01:44:34) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_TAB.tabind +Index created. +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .07 seconds (started at 2024-04-15T01:44:55) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_VIEW.vw +View created. +View created. +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .12 seconds (started at 2024-04-15T01:44:57) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_FKEY_TAB.tab +Table created. +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .06 seconds (started at 2024-04-15T01:44:34) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_FKEY_TAB.tabind +Index created. +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .08 seconds (started at 2024-04-15T01:44:55) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_FKEY_VIEW.vw +View created. +View created. +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .13 seconds (started at 2024-04-15T01:44:57) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_INDEX_TAB.tab +Table created. +=== DBI Completed at 2024-04-15T01:44:34 for a duration of .07 seconds (started at 2024-04-15T01:44:34) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_INDEX_TAB.tabind +Index created. +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .06 seconds (started at 2024-04-15T01:44:55) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_INDEX_VIEW.vw +View created. +View created. +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .12 seconds (started at 2024-04-15T01:44:57) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_OBJECT_TAB.tab +Table created. +=== DBI Completed at 2024-04-15T01:44:35 for a duration of .07 seconds (started at 2024-04-15T01:44:34) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_OBJECT_TAB.tabind +Index created. +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .08 seconds (started at 2024-04-15T01:44:55) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_OBJECT_VIEW.vw +View created. +View created. +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .15 seconds (started at 2024-04-15T01:44:57) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_SYNONYM_TAB.tab +Table created. +=== DBI Completed at 2024-04-15T01:44:35 for a duration of .08 seconds (started at 2024-04-15T01:44:35) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_SYNONYM_TAB.tabind +Index created. +Index created. +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .15 seconds (started at 2024-04-15T01:44:55) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_SYNONYM_VIEW.vw +View created. +View created. +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .1 seconds (started at 2024-04-15T01:44:57) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_TRIGGER_TAB.tab +Table created. +=== DBI Completed at 2024-04-15T01:44:35 for a duration of .08 seconds (started at 2024-04-15T01:44:35) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_TRIGGER_TAB.tabind +Index created. +Index created. +=== DBI Completed at 2024-04-15T01:44:55 for a duration of .13 seconds (started at 2024-04-15T01:44:55) + + + + +=== DBI Started: ODBCAPTURE/OBJ_INSTALL_TRIGGER_VIEW.vw +View created. +View created. +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .11 seconds (started at 2024-04-15T01:44:57) + + + + +=== DBI Started: ODBCAPTURE/OTYPE_CONF.cdl +Disable Triggers and Foreign Keys +PL/SQL procedure successfully completed. +sqlldr_control=ODBCAPTURE/OTYPE_CONF.ctl +PL/SQL procedure successfully completed. +=== DBI Completed at 2024-04-15T01:44:45 for a duration of 2.82 seconds (started at 2024-04-15T01:44:43) +### SQL*Loader Log File: ODBCAPTURE/OTYPE_CONF.log + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:44:44 2024 +Version 21.3.0.0.0 +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. +Control File: ODBCAPTURE/OTYPE_CONF.ctl +Data File: ODBCAPTURE/OTYPE_CONF.csv + Bad File: ODBCAPTURE/OTYPE_CONF.bad + Discard File: none specified + + (Allow all discards) +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE"."OTYPE_CONF", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +INSTALL_OTYPE FIRST 20 , O(") CHARACTER +INSTALL_ORDER NEXT * , O(") CHARACTER +EXT NEXT 6 , O(") CHARACTER +EXT2 NEXT 6 , O(") CHARACTER +EXT3 NEXT 6 , O(") CHARACTER +NAME_CHECK_OTYPE NEXT 30 , O(") CHARACTER +NOTES NEXT 1024 , O(") CHARACTER +OBJECT_TYPE NEXT 30 , O(") CHARACTER + +Table "ODBCAPTURE"."OTYPE_CONF": + 35 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + +Space allocated for bind array: 348500 bytes(250 rows) +Read buffer bytes: 1048576 +Total logical records skipped: 1 +Total logical records read: 35 +Total logical records rejected: 0 +Total logical records discarded: 0 +Run began on Mon Apr 15 01:44:44 2024 +Run ended on Mon Apr 15 01:44:45 2024 +Elapsed time was: 00:00:00.34 +CPU time was: 00:00:00.04 + + + + + +=== DBI Started: ODBCAPTURE/OTYPE_CONF.tab +Table created. +Table altered. +Table altered. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +=== DBI Completed at 2024-04-15T01:44:35 for a duration of .39 seconds (started at 2024-04-15T01:44:35) + + + + +=== DBI Started: ODBCAPTURE/PRIV_OBJ_DIR_VIEW.vw +View created. +Warning: View created with compilation errors. +=== DBI Completed at 2024-04-15T01:44:57 for a duration of .11 seconds (started at 2024-04-15T01:44:57) + + + + +=== DBI Started: ODBCAPTURE/PRIV_OBJ_INSTALL_VW.vw +View created. +Warning: View created with compilation errors. +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .11 seconds (started at 2024-04-15T01:44:57) + + + + +=== DBI Started: ODBCAPTURE/PRIV_OBJ_JAVA_FG_VIEW.vw +View created. +Warning: View created with compilation errors. +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .11 seconds (started at 2024-04-15T01:44:58) + + + + +=== DBI Started: ODBCAPTURE/PRIV_OBJ_QUEUE_VIEW.vw +View created. +Warning: View created with compilation errors. +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .11 seconds (started at 2024-04-15T01:44:58) + + + + +=== DBI Started: ODBCAPTURE/PRIV_OBJ_XDBACL_VIEW.vw +View created. +Warning: View created with compilation errors. +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .11 seconds (started at 2024-04-15T01:44:58) + + + + +=== DBI Started: ODBCAPTURE/PRIV_QUEUE_REGISTER_VIEW.vw +View created. +Warning: View created with compilation errors. +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .1 seconds (started at 2024-04-15T01:44:58) + + + + +=== DBI Started: ODBCAPTURE/PRIV_QUEUE_SUBSCRIBE_VIEW.vw +View created. +Warning: View created with compilation errors. +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .12 seconds (started at 2024-04-15T01:44:58) + + + + +=== DBI Started: ODBCAPTURE/PRIV_QUEUE_SYSPRIVS_VIEW.vw +View created. +Warning: View created with compilation errors. +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .09 seconds (started at 2024-04-15T01:44:58) + + + + +=== DBI Started: ODBCAPTURE/PRIV_ROLE_PRIVILEGES_VIEW.vw +View created. +Warning: View created with compilation errors. +=== DBI Completed at 2024-04-15T01:44:58 for a duration of .11 seconds (started at 2024-04-15T01:44:58) + + + + +=== DBI Started: ODBCAPTURE/PRIV_SYSOBJ_PRIVILEGES_VIEW.vw +View created. +View created. +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .1 seconds (started at 2024-04-15T01:44:58) + + + + +=== DBI Started: ODBCAPTURE/PRIV_SYSTEM_PRIVILEGES_VIEW.vw +View created. +Warning: View created with compilation errors. +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .09 seconds (started at 2024-04-15T01:44:59) + + + + +=== DBI Started: ODBCAPTURE/ROLE_CONF.cdl +Disable Triggers and Foreign Keys +PL/SQL procedure successfully completed. +sqlldr_control=ODBCAPTURE/ROLE_CONF.ctl +PL/SQL procedure successfully completed. +=== DBI Completed at 2024-04-15T01:44:48 for a duration of 2.78 seconds (started at 2024-04-15T01:44:45) +### SQL*Loader Log File: ODBCAPTURE/ROLE_CONF.log + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:44:47 2024 +Version 21.3.0.0.0 +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. +Control File: ODBCAPTURE/ROLE_CONF.ctl +Data File: ODBCAPTURE/ROLE_CONF.csv + Bad File: ODBCAPTURE/ROLE_CONF.bad + Discard File: none specified + + (Allow all discards) +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE"."ROLE_CONF", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +ROLENAME FIRST 128 , O(") CHARACTER +INSTALL_TYPE NEXT 10 , O(") CHARACTER +NOTES NEXT 1024 , O(") CHARACTER + +Table "ODBCAPTURE"."ROLE_CONF": + 105 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + +Space allocated for bind array: 292000 bytes(250 rows) +Read buffer bytes: 1048576 +Total logical records skipped: 1 +Total logical records read: 105 +Total logical records rejected: 0 +Total logical records discarded: 0 +Run began on Mon Apr 15 01:44:47 2024 +Run ended on Mon Apr 15 01:44:47 2024 +Elapsed time was: 00:00:00.33 +CPU time was: 00:00:00.03 + + + + + +=== DBI Started: ODBCAPTURE/ROLE_CONF.tab +Table created. +Table altered. +Comment created. +Comment created. +Comment created. +Comment created. +=== DBI Completed at 2024-04-15T01:44:36 for a duration of .46 seconds (started at 2024-04-15T01:44:35) + + + + +=== DBI Started: ODBCAPTURE/ROLE_CONF.tabfk +Table altered. +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .12 seconds (started at 2024-04-15T01:45:01) + + + + +=== DBI Started: ODBCAPTURE/ROOT_SCRIPTS.pbody +Package body created. +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .13 seconds (started at 2024-04-15T01:45:00) + + + + +=== DBI Started: ODBCAPTURE/ROOT_SCRIPTS.pspec +Package created. +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .05 seconds (started at 2024-04-15T01:44:33) + + + + +=== DBI Started: ODBCAPTURE/SCHEMA_CONF.cdl +Disable Triggers and Foreign Keys +PL/SQL procedure successfully completed. +sqlldr_control=ODBCAPTURE/SCHEMA_CONF.ctl +PL/SQL procedure successfully completed. +=== DBI Completed at 2024-04-15T01:44:51 for a duration of 2.9 seconds (started at 2024-04-15T01:44:48) +### SQL*Loader Log File: ODBCAPTURE/SCHEMA_CONF.log + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:44:50 2024 +Version 21.3.0.0.0 +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. +Control File: ODBCAPTURE/SCHEMA_CONF.ctl +Data File: ODBCAPTURE/SCHEMA_CONF.csv + Bad File: ODBCAPTURE/SCHEMA_CONF.bad + Discard File: none specified + + (Allow all discards) +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE"."SCHEMA_CONF", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +USERNAME FIRST 128 , O(") CHARACTER +INSTALL_TYPE NEXT 10 , O(") CHARACTER +TS_SIZE NEXT 10 , O(") CHARACTER +NOTES NEXT 1024 , O(") CHARACTER +TABLESPACE_NAME NEXT 30 , O(") CHARACTER + +Table "ODBCAPTURE"."SCHEMA_CONF": + 9 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + +Space allocated for bind array: 303000 bytes(250 rows) +Read buffer bytes: 1048576 +Total logical records skipped: 1 +Total logical records read: 9 +Total logical records rejected: 0 +Total logical records discarded: 0 +Run began on Mon Apr 15 01:44:50 2024 +Run ended on Mon Apr 15 01:44:50 2024 +Elapsed time was: 00:00:00.34 +CPU time was: 00:00:00.04 + + + + + +=== DBI Started: ODBCAPTURE/SCHEMA_CONF.tab +Table created. +Table altered. +Table altered. +Table altered. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +=== DBI Completed at 2024-04-15T01:44:36 for a duration of .4 seconds (started at 2024-04-15T01:44:36) + + + + +=== DBI Started: ODBCAPTURE/SCHEMA_CONF.tabfk +Table altered. +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .07 seconds (started at 2024-04-15T01:45:01) + + + + +=== DBI Started: ODBCAPTURE/SCHEMA_OBJECTS_VW.vw +View created. +View created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .23 seconds (started at 2024-04-15T01:44:59) + + + + +=== DBI Started: ODBCAPTURE/TYPE_CONF.cdl +Disable Triggers and Foreign Keys +PL/SQL procedure successfully completed. +sqlldr_control=ODBCAPTURE/TYPE_CONF.ctl +PL/SQL procedure successfully completed. +=== DBI Completed at 2024-04-15T01:44:54 for a duration of 2.9 seconds (started at 2024-04-15T01:44:51) +### SQL*Loader Log File: ODBCAPTURE/TYPE_CONF.log + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:44:53 2024 +Version 21.3.0.0.0 +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. +Control File: ODBCAPTURE/TYPE_CONF.ctl +Data File: ODBCAPTURE/TYPE_CONF.csv + Bad File: ODBCAPTURE/TYPE_CONF.bad + Discard File: none specified + + (Allow all discards) +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE"."TYPE_CONF", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +INSTALL_TYPE FIRST 10 , O(") CHARACTER +NOTES NEXT 1024 , O(") CHARACTER +INSTALL_TYPE_PARENT NEXT 10 , O(") CHARACTER + +Table "ODBCAPTURE"."TYPE_CONF": + 3 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + +Space allocated for bind array: 262500 bytes(250 rows) +Read buffer bytes: 1048576 +Total logical records skipped: 1 +Total logical records read: 3 +Total logical records rejected: 0 +Total logical records discarded: 0 +Run began on Mon Apr 15 01:44:53 2024 +Run ended on Mon Apr 15 01:44:53 2024 +Elapsed time was: 00:00:00.38 +CPU time was: 00:00:00.05 + + + + + +=== DBI Started: ODBCAPTURE/TYPE_CONF.tab +Table created. +Table altered. +Table altered. +Comment created. +Comment created. +Comment created. +=== DBI Completed at 2024-04-15T01:44:36 for a duration of .41 seconds (started at 2024-04-15T01:44:36) + + + + +=== DBI Started: ODBCAPTURE/TYPE_CONF.tabfk +Table altered. +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .09 seconds (started at 2024-04-15T01:45:01) + + + + +=== DBI Started: ODBCAPTURE/UOR_INSTALL_VIEW.vw +View created. +View created. +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .1 seconds (started at 2024-04-15T01:44:59) + + + + +=== DBI Started: ODBCAPTURE/ZIP_FILES.tab +Table created. +Table altered. +=== DBI Completed at 2024-04-15T01:44:37 for a duration of .15 seconds (started at 2024-04-15T01:44:36) + + + + +=== DBI Started: ODBCAPTURE/ZIP_UTIL_PKG.pbody +Package body created. +=== DBI Completed at 2024-04-15T01:45:01 for a duration of .15 seconds (started at 2024-04-15T01:45:01) + + + + +=== DBI Started: ODBCAPTURE/ZIP_UTIL_PKG.pspec +Package created. +=== DBI Completed at 2024-04-15T01:44:33 for a duration of .06 seconds (started at 2024-04-15T01:44:33) + + + + +=== DBI Started: ODBCAPTURE/ZX_OBJ_INSTALL_TAB.tab +Table created. +=== DBI Completed at 2024-04-15T01:44:37 for a duration of .07 seconds (started at 2024-04-15T01:44:37) + + + + +=== DBI Started: ODBCAPTURE/ZX_OBJ_INSTALL_TAB.tabind +Index created. +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .07 seconds (started at 2024-04-15T01:44:55) + + + + +=== DBI Started: ODBCAPTURE/ZX_OBJ_INSTALL_VIEW.vw +View created. +View created. +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .11 seconds (started at 2024-04-15T01:44:59) + + + + +=== DBI Started: ODBCAPTURE/ZX_PRIV_ALL_TAB.tab +Table created. +=== DBI Completed at 2024-04-15T01:44:37 for a duration of .06 seconds (started at 2024-04-15T01:44:37) + + + + +=== DBI Started: ODBCAPTURE/ZX_PRIV_ALL_TAB.tabind +Index created. +=== DBI Completed at 2024-04-15T01:44:56 for a duration of .07 seconds (started at 2024-04-15T01:44:56) + + + + +=== DBI Started: ODBCAPTURE/ZX_PRIV_ALL_VIEW.vw +View created. +View created. +=== DBI Completed at 2024-04-15T01:44:59 for a duration of .21 seconds (started at 2024-04-15T01:44:59) + + + + + + +=== DBI Started: SYS/ODBCAPTURE.usr +User created. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:44:32 for a duration of 3.93 seconds (started at 2024-04-15T01:44:28) + + + + + + +=== DBI Started: SYSTEM/GRAB_SCRIPTS_DIR.dir +Directory created. +Grant succeeded. +Grant succeeded. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:44:32 for a duration of .17 seconds (started at 2024-04-15T01:44:32) + + + + +=== DBI Started: SYSTEM/ODBCAPTURE_usr.grnt +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:44:32 for a duration of .33 seconds (started at 2024-04-15T01:44:32) + + + + diff --git a/builds/OraEE213_AP212_ORDS222/grbsrc/odbcapture_installation_logs.log b/builds/OraEE213_AP212_ORDS222/grbsrc/odbcapture_installation_logs.log new file mode 100644 index 0000000..26950f7 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/grbsrc/odbcapture_installation_logs.log @@ -0,0 +1,52 @@ + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:45:05 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. + +Control File: odbcapture_installation_logs.ctl +Data File: odbcapture_installation_logs.csv + Bad File: odbcapture_installation_logs.bad + Discard File: none specified + + (Allow all discards) + +Number to load: ALL +Number to skip: 0 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE_INSTALLATION_LOGS", loaded from every logical record. +Insert option in effect for this table: APPEND + + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +LOAD_DTM SYSDATE +INSTALL_TYPE FIRST 10 , O(") CHARACTER +FILE_NAME NEXT 512 , O(") CHARACTER +CONTENTS DERIVED * EOF CHARACTER + Dynamic LOBFILE. Filename in field FILE_NAME + + +Table "ODBCAPTURE_INSTALLATION_LOGS": + 9 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + + +Space allocated for bind array: 131500 bytes(250 rows) +Read buffer bytes: 1048576 + +Total logical records skipped: 0 +Total logical records read: 9 +Total logical records rejected: 0 +Total logical records discarded: 0 + +Run began on Mon Apr 15 01:45:05 2024 +Run ended on Mon Apr 15 01:45:05 2024 + +Elapsed time was: 00:00:00.72 +CPU time was: 00:00:00.06 diff --git a/builds/OraEE213_AP212_ORDS222/junit_core_report_show_current.xml b/builds/OraEE213_AP212_ORDS222/junit_core_report_show_current.xml new file mode 100644 index 0000000..60171a4 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/junit_core_report_show_current.xml @@ -0,0 +1,626 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/builds/OraEE213_AP212_ORDS222/junit_xml_persist_all.xml b/builds/OraEE213_AP212_ORDS222/junit_xml_persist_all.xml new file mode 100644 index 0000000..5eef905 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/junit_xml_persist_all.xml @@ -0,0 +1,308 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/builds/OraEE213_AP212_ORDS222/version.txt b/builds/OraEE213_AP212_ORDS222/version.txt new file mode 100644 index 0000000..9afc5c8 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/version.txt @@ -0,0 +1 @@ +1.003 diff --git a/builds/OraEE213_AP212_ORDS222/wt_core_report_dbms_out.log b/builds/OraEE213_AP212_ORDS222/wt_core_report_dbms_out.log new file mode 100644 index 0000000..a5d4f7e --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wt_core_report_dbms_out.log @@ -0,0 +1,136 @@ + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Start Date/Time: 15-Apr-2024 01:43:27 AM + Test Results for WTP.CORE_DATA + Database Object Under Test is PACKAGE BODY WTP.CORE_DATA + ------------------------------------------------------------------ + Minimum Elapsed msec: 0 Total Assertions: 64 + Average Elapsed msec: 0 Failed Assertions: 0 + Maximum Elapsed msec: 3 Total Testcases: 9 + Total Run Time (sec): 0.6 Failed Testcases: 0 + Testcase Yield: 100% + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Start Date/Time: 15-Apr-2024 01:43:28 AM + Test Results for WTP.HOOK + Database Object Under Test is PACKAGE BODY WTP.HOOK + ------------------------------------------------------------------ + Minimum Elapsed msec: 0 Total Assertions: 23 + Average Elapsed msec: 2 Failed Assertions: 0 + Maximum Elapsed msec: 10 Total Testcases: 5 + Total Run Time (sec): 0.2 Failed Testcases: 0 + Testcase Yield: 100% + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Start Date/Time: 15-Apr-2024 01:43:28 AM + Test Results for WTP.WTPLSQL + ------------------------------------------------------------------ + Minimum Elapsed msec: 0 Total Assertions: 33 + Average Elapsed msec: 16 Failed Assertions: 0 + Maximum Elapsed msec: 138 Total Testcases: 16 + Total Run Time (sec): 0.5 Failed Testcases: 0 + Testcase Yield: 100% + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Start Date/Time: 15-Apr-2024 01:43:28 AM + Test Results for WTP.WT_ASSERT + Database Object Under Test is PACKAGE BODY WTP.WT_ASSERT + ------------------------------------------------------------------ + Minimum Elapsed msec: 0 Total Assertions: 414 + Average Elapsed msec: 22 Failed Assertions: 0 + Maximum Elapsed msec: 2892 Total Testcases: 152 + Total Run Time (sec): 9.2 Failed Testcases: 0 + Testcase Yield: 100% + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Start Date/Time: 15-Apr-2024 01:43:38 AM + Test Results for WTP.WT_DBOUT + Database Object Under Test is PACKAGE BODY WTP.WT_DBOUT + ------------------------------------------------------------------ + Minimum Elapsed msec: 0 Total Assertions: 15 + Average Elapsed msec: 4 Failed Assertions: 0 + Maximum Elapsed msec: 26 Total Testcases: 12 + Total Run Time (sec): 0.7 Failed Testcases: 0 + Testcase Yield: 100% + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Start Date/Time: 15-Apr-2024 01:43:38 AM + Test Results for WTP.WT_JOB + Database Object Under Test is PACKAGE BODY WTP.WT_JOB + ------------------------------------------------------------------ + Minimum Elapsed msec: 0 Total Assertions: 31 + Average Elapsed msec: 212 Failed Assertions: 0 + Maximum Elapsed msec: 1205 Total Testcases: 8 + Total Run Time (sec): 6.8 Failed Testcases: 0 + Testcase Yield: 100% + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Start Date/Time: 15-Apr-2024 01:43:45 AM + Test Results for WTP.WT_PROFILE + Database Object Under Test is PACKAGE BODY WTP.WT_PROFILE + ------------------------------------------------------------------ + Minimum Elapsed msec: 0 Total Assertions: 302 + Average Elapsed msec: 9 Failed Assertions: 1 + Maximum Elapsed msec: 625 Total Testcases: 39 + Total Run Time (sec): 2.9 Failed Testcases: 1 + Testcase Yield: 97% + + WTP.WT_PROFILE Test Runner Details + -------------------------------------------------------------- +---*** Finalize Happy Path 2 ***---------------------------------------------- +#FAIL#.028ms l_recTEST.profiler_runid. ISNOTNULL - Expected NOT NULL and got "" + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Start Date/Time: 15-Apr-2024 01:43:48 AM + Test Results for WTP.WT_RESULT + Database Object Under Test is PACKAGE BODY WTP.WT_RESULT + ------------------------------------------------------------------ + Minimum Elapsed msec: 0 Total Assertions: 21 + Average Elapsed msec: 3 Failed Assertions: 0 + Maximum Elapsed msec: 35 Total Testcases: 3 + Total Run Time (sec): 0.2 Failed Testcases: 0 + Testcase Yield: 100% + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Start Date/Time: 15-Apr-2024 01:43:48 AM + Test Results for WTP.WT_TESTCASE + Database Object Under Test is PACKAGE BODY WTP.WT_TESTCASE + ------------------------------------------------------------------ + Minimum Elapsed msec: 0 Total Assertions: 15 + Average Elapsed msec: 3 Failed Assertions: 0 + Maximum Elapsed msec: 37 Total Testcases: 12 + Total Run Time (sec): 0.2 Failed Testcases: 0 + Testcase Yield: 100% + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Start Date/Time: 15-Apr-2024 01:43:48 AM + Test Results for WTP.WT_TEST_RUN + Database Object Under Test is PACKAGE BODY WTP.WT_TEST_RUN + ------------------------------------------------------------------ + Minimum Elapsed msec: 0 Total Assertions: 75 + Average Elapsed msec: 1 Failed Assertions: 0 + Maximum Elapsed msec: 19 Total Testcases: 18 + Total Run Time (sec): 0.2 Failed Testcases: 0 + Testcase Yield: 100% + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Start Date/Time: 15-Apr-2024 01:43:49 AM + Test Results for WTP.WT_TEST_RUNNER + Database Object Under Test is PACKAGE BODY WTP.WT_TEST_RUNNER + ------------------------------------------------------------------ + Minimum Elapsed msec: 0 Total Assertions: 27 + Average Elapsed msec: 2 Failed Assertions: 0 + Maximum Elapsed msec: 26 Total Testcases: 16 + Total Run Time (sec): 0.4 Failed Testcases: 0 + Testcase Yield: 100% + diff --git a/builds/OraEE213_AP212_ORDS222/wt_persist_report_dbms_out.log b/builds/OraEE213_AP212_ORDS222/wt_persist_report_dbms_out.log new file mode 100644 index 0000000..0aa5aa1 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wt_persist_report_dbms_out.log @@ -0,0 +1,211 @@ + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Test Results for WTP.CORE_DATA + Run ID 3: 15-Apr-2024 01:44:04 AM + -------------------------------------------------------------- + Minimum Elapsed msec: 0 Total Assertions: 64 + Average Elapsed msec: 0 Failed Assertions: 0 + Maximum Elapsed msec: 2 Total Testcases: 9 + Total Run Time (sec): 0.2 Failed Testcases: 0 + Testcase Yield: 100% + + Code Coverage for PACKAGE BODY WTP.CORE_DATA + ---------------------------------------------------------------- + Ignored Lines: 184 Total Profiled Lines: 263 + Excluded Lines: 1 Total Executed Lines: 73 + Minimum LineExec usec: 0 Not Executed Lines: 0 + Average LineExec usec: 2 Unknown Lines: 5 + Maximum LineExec usec: 164 Code Coverage: 100.0% + Trigger Source Offset: 0 + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Test Results for WTP.HOOK + Run ID 4: 15-Apr-2024 01:44:05 AM + -------------------------------------------------------------- + Minimum Elapsed msec: 0 Total Assertions: 23 + Average Elapsed msec: 0 Failed Assertions: 0 + Maximum Elapsed msec: 2 Total Testcases: 5 + Total Run Time (sec): 0.1 Failed Testcases: 0 + Testcase Yield: 100% + + Code Coverage for PACKAGE BODY WTP.HOOK + ---------------------------------------------------------------- + Ignored Lines: 68 Total Profiled Lines: 86 + Excluded Lines: 1 Total Executed Lines: 14 + Minimum LineExec usec: 0 Not Executed Lines: 0 + Average LineExec usec: 23 Unknown Lines: 3 + Maximum LineExec usec: 120 Code Coverage: 100.0% + Trigger Source Offset: 0 + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Test Results for WTP.WTPLSQL + Run ID 5: 15-Apr-2024 01:44:06 AM + -------------------------------------------------------------- + Minimum Elapsed msec: 0 Total Assertions: 33 + Average Elapsed msec: 16 Failed Assertions: 0 + Maximum Elapsed msec: 149 Total Testcases: 16 + Total Run Time (sec): 0.6 Failed Testcases: 0 + Testcase Yield: 100% + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Test Results for WTP.WT_ASSERT + Run ID 6: 15-Apr-2024 01:44:06 AM + -------------------------------------------------------------- + Minimum Elapsed msec: 0 Total Assertions: 414 + Average Elapsed msec: 12 Failed Assertions: 0 + Maximum Elapsed msec: 2446 Total Testcases: 152 + Total Run Time (sec): 4.9 Failed Testcases: 0 + Testcase Yield: 100% + + Code Coverage for PACKAGE BODY WTP.WT_ASSERT + ---------------------------------------------------------------- + Ignored Lines: 1150 Total Profiled Lines: 1520 + Excluded Lines: 2 Total Executed Lines: 314 + Minimum LineExec usec: 0 Not Executed Lines: 0 + Average LineExec usec: 156 Unknown Lines: 54 + Maximum LineExec usec: 34014 Code Coverage: 100.0% + Trigger Source Offset: 0 + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Test Results for WTP.WT_DBOUT + Run ID 7: 15-Apr-2024 01:44:14 AM + -------------------------------------------------------------- + Minimum Elapsed msec: 0 Total Assertions: 15 + Average Elapsed msec: 0 Failed Assertions: 0 + Maximum Elapsed msec: 1 Total Testcases: 12 + Total Run Time (sec): 0.1 Failed Testcases: 0 + Testcase Yield: 100% + + Code Coverage for PACKAGE BODY WTP.WT_DBOUT + ---------------------------------------------------------------- + Ignored Lines: 55 Total Profiled Lines: 82 + Excluded Lines: 2 Total Executed Lines: 22 + Minimum LineExec usec: 0 Not Executed Lines: 0 + Average LineExec usec: 29 Unknown Lines: 3 + Maximum LineExec usec: 494 Code Coverage: 100.0% + Trigger Source Offset: 0 + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Test Results for WTP.WT_JOB + Run ID 8: 15-Apr-2024 01:44:14 AM + -------------------------------------------------------------- + Minimum Elapsed msec: 0 Total Assertions: 31 + Average Elapsed msec: 190 Failed Assertions: 0 + Maximum Elapsed msec: 1066 Total Testcases: 8 + Total Run Time (sec): 6.0 Failed Testcases: 0 + Testcase Yield: 100% + + Code Coverage for PACKAGE BODY WTP.WT_JOB + ---------------------------------------------------------------- + Ignored Lines: 118 Total Profiled Lines: 143 + Excluded Lines: 0 Total Executed Lines: 20 + Minimum LineExec usec: 0 Not Executed Lines: 0 + Average LineExec usec: 297 Unknown Lines: 5 + Maximum LineExec usec: 3728 Code Coverage: 100.0% + Trigger Source Offset: 0 + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Test Results for WTP.WT_PROFILE + Run ID 9: 15-Apr-2024 01:44:21 AM + -------------------------------------------------------------- + Minimum Elapsed msec: 0 Total Assertions: 302 + Average Elapsed msec: 5 Failed Assertions: 0 + Maximum Elapsed msec: 514 Total Testcases: 39 + Total Run Time (sec): 1.5 Failed Testcases: 0 + Testcase Yield: 100% + + Code Coverage for PACKAGE BODY WTP.WT_PROFILE + ---------------------------------------------------------------- + Ignored Lines: 639 Total Profiled Lines: 792 + Excluded Lines: 3 Total Executed Lines: 131 + Minimum LineExec usec: 0 Not Executed Lines: 0 + Average LineExec usec: 626 Unknown Lines: 19 + Maximum LineExec usec: 26887 Code Coverage: 100.0% + Trigger Source Offset: 0 + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Test Results for WTP.WT_RESULT + Run ID 10: 15-Apr-2024 01:44:24 AM + -------------------------------------------------------------- + Minimum Elapsed msec: 0 Total Assertions: 21 + Average Elapsed msec: 0 Failed Assertions: 0 + Maximum Elapsed msec: 4 Total Testcases: 3 + Total Run Time (sec): 0.1 Failed Testcases: 0 + Testcase Yield: 100% + + Code Coverage for PACKAGE BODY WTP.WT_RESULT + ---------------------------------------------------------------- + Ignored Lines: 93 Total Profiled Lines: 140 + Excluded Lines: 0 Total Executed Lines: 45 + Minimum LineExec usec: 0 Not Executed Lines: 0 + Average LineExec usec: 12 Unknown Lines: 2 + Maximum LineExec usec: 1124 Code Coverage: 100.0% + Trigger Source Offset: 0 + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Test Results for WTP.WT_TESTCASE + Run ID 11: 15-Apr-2024 01:44:25 AM + -------------------------------------------------------------- + Minimum Elapsed msec: 0 Total Assertions: 15 + Average Elapsed msec: 0 Failed Assertions: 0 + Maximum Elapsed msec: 2 Total Testcases: 12 + Total Run Time (sec): 0.2 Failed Testcases: 0 + Testcase Yield: 100% + + Code Coverage for PACKAGE BODY WTP.WT_TESTCASE + ---------------------------------------------------------------- + Ignored Lines: 53 Total Profiled Lines: 76 + Excluded Lines: 2 Total Executed Lines: 20 + Minimum LineExec usec: 0 Not Executed Lines: 0 + Average LineExec usec: 43 Unknown Lines: 1 + Maximum LineExec usec: 861 Code Coverage: 100.0% + Trigger Source Offset: 0 + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Test Results for WTP.WT_TEST_RUN + Run ID 13: 15-Apr-2024 01:44:25 AM + -------------------------------------------------------------- + Minimum Elapsed msec: 0 Total Assertions: 75 + Average Elapsed msec: 0 Failed Assertions: 0 + Maximum Elapsed msec: 6 Total Testcases: 18 + Total Run Time (sec): 0.2 Failed Testcases: 0 + Testcase Yield: 100% + + Code Coverage for PACKAGE BODY WTP.WT_TEST_RUN + ---------------------------------------------------------------- + Ignored Lines: 278 Total Profiled Lines: 365 + Excluded Lines: 5 Total Executed Lines: 73 + Minimum LineExec usec: 0 Not Executed Lines: 0 + Average LineExec usec: 15 Unknown Lines: 9 + Maximum LineExec usec: 347 Code Coverage: 100.0% + Trigger Source Offset: 0 + + + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003 + Test Results for WTP.WT_TEST_RUNNER + Run ID 14: 15-Apr-2024 01:44:26 AM + -------------------------------------------------------------- + Minimum Elapsed msec: 0 Total Assertions: 27 + Average Elapsed msec: 0 Failed Assertions: 0 + Maximum Elapsed msec: 2 Total Testcases: 16 + Total Run Time (sec): 0.1 Failed Testcases: 0 + Testcase Yield: 100% + + Code Coverage for PACKAGE BODY WTP.WT_TEST_RUNNER + ---------------------------------------------------------------- + Ignored Lines: 92 Total Profiled Lines: 130 + Excluded Lines: 2 Total Executed Lines: 32 + Minimum LineExec usec: 0 Not Executed Lines: 0 + Average LineExec usec: 27 Unknown Lines: 4 + Maximum LineExec usec: 566 Code Coverage: 100.0% + Trigger Source Offset: 0 + diff --git a/builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/DLOAD_CONF.log b/builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/DLOAD_CONF.log new file mode 100644 index 0000000..caa443c --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/DLOAD_CONF.log @@ -0,0 +1,57 @@ + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:45:08 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. + +Control File: ODBCAPTURE/DLOAD_CONF.ctl +Data File: ODBCAPTURE/DLOAD_CONF.csv + Bad File: ODBCAPTURE/DLOAD_CONF.bad + Discard File: none specified + + (Allow all discards) + +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE"."DLOAD_CONF", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +USERNAME FIRST 128 , O(") CHARACTER +TABLE_NAME NEXT 128 , O(") CHARACTER +INSTALL_TYPE NEXT 10 , O(") CHARACTER +BEFORE_SELECT_SQL NEXT 4000 , O(") CHARACTER +WHERE_CLAUSE NEXT 4000 , O(") CHARACTER +ORDER_BY_COLUMNS NEXT 4000 , O(") CHARACTER +AFTER_ORDER_BY_SQL NEXT 4000 , O(") CHARACTER +NOTES NEXT 1024 , O(") CHARACTER + +value used for ROWS parameter changed from 250 to 60 + +Table "ODBCAPTURE"."DLOAD_CONF": + 7 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + + +Space allocated for bind array: 1038360 bytes(60 rows) +Read buffer bytes: 1048576 + +Total logical records skipped: 1 +Total logical records read: 7 +Total logical records rejected: 0 +Total logical records discarded: 0 + +Run began on Mon Apr 15 01:45:08 2024 +Run ended on Mon Apr 15 01:45:08 2024 + +Elapsed time was: 00:00:00.41 +CPU time was: 00:00:00.04 diff --git a/builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/OBJECT_CONF.log b/builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/OBJECT_CONF.log new file mode 100644 index 0000000..4bc27d8 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/OBJECT_CONF.log @@ -0,0 +1,54 @@ + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:45:09 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. + +Control File: ODBCAPTURE/OBJECT_CONF.ctl +Data File: ODBCAPTURE/OBJECT_CONF.csv + Bad File: ODBCAPTURE/OBJECT_CONF.bad + Discard File: none specified + + (Allow all discards) + +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE"."OBJECT_CONF", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +USERNAME FIRST 128 , O(") CHARACTER +INSTALL_OTYPE NEXT 20 , O(") CHARACTER +INSTALL_TYPE NEXT 10 , O(") CHARACTER +ONAME_FILTER NEXT 4000 , O(") CHARACTER +NOTES NEXT 1024 , O(") CHARACTER + +value used for ROWS parameter changed from 250 to 201 + +Table "ODBCAPTURE"."OBJECT_CONF": + 8 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + + +Space allocated for bind array: 1043592 bytes(201 rows) +Read buffer bytes: 1048576 + +Total logical records skipped: 1 +Total logical records read: 8 +Total logical records rejected: 0 +Total logical records discarded: 0 + +Run began on Mon Apr 15 01:45:09 2024 +Run ended on Mon Apr 15 01:45:09 2024 + +Elapsed time was: 00:00:00.33 +CPU time was: 00:00:00.03 diff --git a/builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/ROLE_CONF.log b/builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/ROLE_CONF.log new file mode 100644 index 0000000..489ce87 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/ROLE_CONF.log @@ -0,0 +1,51 @@ + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:45:10 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. + +Control File: ODBCAPTURE/ROLE_CONF.ctl +Data File: ODBCAPTURE/ROLE_CONF.csv + Bad File: ODBCAPTURE/ROLE_CONF.bad + Discard File: none specified + + (Allow all discards) + +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE"."ROLE_CONF", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +ROLENAME FIRST 128 , O(") CHARACTER +INSTALL_TYPE NEXT 10 , O(") CHARACTER +NOTES NEXT 1024 , O(") CHARACTER + + +Table "ODBCAPTURE"."ROLE_CONF": + 0 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + + +Space allocated for bind array: 292000 bytes(250 rows) +Read buffer bytes: 1048576 + +Total logical records skipped: 1 +Total logical records read: 0 +Total logical records rejected: 0 +Total logical records discarded: 0 + +Run began on Mon Apr 15 01:45:10 2024 +Run ended on Mon Apr 15 01:45:11 2024 + +Elapsed time was: 00:00:00.32 +CPU time was: 00:00:00.05 diff --git a/builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/SCHEMA_CONF.log b/builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/SCHEMA_CONF.log new file mode 100644 index 0000000..bb3de27 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/SCHEMA_CONF.log @@ -0,0 +1,53 @@ + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:45:12 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. + +Control File: ODBCAPTURE/SCHEMA_CONF.ctl +Data File: ODBCAPTURE/SCHEMA_CONF.csv + Bad File: ODBCAPTURE/SCHEMA_CONF.bad + Discard File: none specified + + (Allow all discards) + +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE"."SCHEMA_CONF", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +USERNAME FIRST 128 , O(") CHARACTER +INSTALL_TYPE NEXT 10 , O(") CHARACTER +TS_SIZE NEXT 10 , O(") CHARACTER +NOTES NEXT 1024 , O(") CHARACTER +TABLESPACE_NAME NEXT 30 , O(") CHARACTER + + +Table "ODBCAPTURE"."SCHEMA_CONF": + 1 Row successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + + +Space allocated for bind array: 303000 bytes(250 rows) +Read buffer bytes: 1048576 + +Total logical records skipped: 1 +Total logical records read: 1 +Total logical records rejected: 0 +Total logical records discarded: 0 + +Run began on Mon Apr 15 01:45:12 2024 +Run ended on Mon Apr 15 01:45:12 2024 + +Elapsed time was: 00:00:00.33 +CPU time was: 00:00:00.04 diff --git a/builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/TYPE_CONF.log b/builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/TYPE_CONF.log new file mode 100644 index 0000000..92ef2c0 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpgrb/ODBCAPTURE/TYPE_CONF.log @@ -0,0 +1,51 @@ + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:45:13 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. + +Control File: ODBCAPTURE/TYPE_CONF.ctl +Data File: ODBCAPTURE/TYPE_CONF.csv + Bad File: ODBCAPTURE/TYPE_CONF.bad + Discard File: none specified + + (Allow all discards) + +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE"."TYPE_CONF", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +INSTALL_TYPE FIRST 10 , O(") CHARACTER +NOTES NEXT 1024 , O(") CHARACTER +INSTALL_TYPE_PARENT NEXT 10 , O(") CHARACTER + + +Table "ODBCAPTURE"."TYPE_CONF": + 4 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + + +Space allocated for bind array: 262500 bytes(250 rows) +Read buffer bytes: 1048576 + +Total logical records skipped: 1 +Total logical records read: 4 +Total logical records rejected: 0 +Total logical records discarded: 0 + +Run began on Mon Apr 15 01:45:13 2024 +Run ended on Mon Apr 15 01:45:13 2024 + +Elapsed time was: 00:00:00.34 +CPU time was: 00:00:00.04 diff --git a/builds/OraEE213_AP212_ORDS222/wtpgrb/db_build_junit_report.xml b/builds/OraEE213_AP212_ORDS222/wtpgrb/db_build_junit_report.xml new file mode 100644 index 0000000..9fbf132 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpgrb/db_build_junit_report.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/builds/OraEE213_AP212_ORDS222/wtpgrb/install_sys.log b/builds/OraEE213_AP212_ORDS222/wtpgrb/install_sys.log new file mode 100644 index 0000000..e69de29 diff --git a/builds/OraEE213_AP212_ORDS222/wtpgrb/install_system.log b/builds/OraEE213_AP212_ORDS222/wtpgrb/install_system.log new file mode 100644 index 0000000..e69de29 diff --git a/builds/OraEE213_AP212_ORDS222/wtpgrb/install_wtpgrb.log b/builds/OraEE213_AP212_ORDS222/wtpgrb/install_wtpgrb.log new file mode 100644 index 0000000..85c67d2 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpgrb/install_wtpgrb.log @@ -0,0 +1,146 @@ +=== DBI Started: ./installation_prepare.sql + +Create_Temp_Publicly_Updateable_Table_SQL + +Table created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:45:08 for a duration of .11 seconds (started at 2024-04-15T01:45:08) +=== DBI Started: ODBCAPTURE/DLOAD_CONF.cdl + +Disable Triggers and Foreign Keys +alter table "ODBCAPTURE"."DLOAD_CONF" DISABLE constraint "DLOAD_CONF_FK1"; +alter table "ODBCAPTURE"."DLOAD_CONF" DISABLE constraint "DLOAD_CONF_FK2"; + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/DLOAD_CONF.ctl + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:45:09 for a duration of 1.27 seconds (started at 2024-04-15T01:45:08) +=== DBI Started: ODBCAPTURE/OBJECT_CONF.cdl + +Disable Triggers and Foreign Keys +alter table "ODBCAPTURE"."OBJECT_CONF" DISABLE constraint "OBJECT_CONF_FK1"; +alter table "ODBCAPTURE"."OBJECT_CONF" DISABLE constraint "OBJECT_CONF_FK2"; +alter table "ODBCAPTURE"."OBJECT_CONF" DISABLE constraint "OBJECT_CONF_FK3"; + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/OBJECT_CONF.ctl + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:45:10 for a duration of 1.29 seconds (started at 2024-04-15T01:45:09) +=== DBI Started: ODBCAPTURE/ROLE_CONF.cdl + +Disable Triggers and Foreign Keys +alter table "ODBCAPTURE"."ROLE_CONF" DISABLE constraint "ROLE_CONF_FK1"; + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/ROLE_CONF.ctl + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:45:12 for a duration of 1.27 seconds (started at 2024-04-15T01:45:10) +=== DBI Started: ODBCAPTURE/SCHEMA_CONF.cdl + +Disable Triggers and Foreign Keys +alter table "ODBCAPTURE"."SCHEMA_CONF" DISABLE constraint "SCHEMA_CONF_FK1"; + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/SCHEMA_CONF.ctl + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:45:13 for a duration of 1.22 seconds (started at 2024-04-15T01:45:12) +=== DBI Started: ODBCAPTURE/TYPE_CONF.cdl + +Disable Triggers and Foreign Keys +alter table "ODBCAPTURE"."TYPE_CONF" DISABLE constraint "TYPE_CONF_FK1"; + +PL/SQL procedure successfully completed. + + +sqlldr_control=ODBCAPTURE/TYPE_CONF.ctl + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:45:14 for a duration of 1.23 seconds (started at 2024-04-15T01:45:13) +=== DBI Started: ./installation_finalize.sql + +Drop_Temp_Publicly_Updateable_Table_SQL + +Table dropped. + + +fix_invalid_public_synonyms + +Re-create Invalid Public Synonyms + +PL/SQL procedure successfully completed. + + +compile_all +Compile All for wtpgrb Install Type +-- ODBCAPTURE Compile All is done. + +PL/SQL procedure successfully completed. + + +alter_foreign_keys_ENABLE +Alter Foreign Keys for wtpgrb Install Type +alter table "ODBCAPTURE"."DLOAD_CONF" ENABLE constraint "DLOAD_CONF_FK1"; +alter table "ODBCAPTURE"."DLOAD_CONF" ENABLE constraint "DLOAD_CONF_FK2"; +alter table "ODBCAPTURE"."OBJECT_CONF" ENABLE constraint "OBJECT_CONF_FK1"; +alter table "ODBCAPTURE"."OBJECT_CONF" ENABLE constraint "OBJECT_CONF_FK2"; +alter table "ODBCAPTURE"."OBJECT_CONF" ENABLE constraint "OBJECT_CONF_FK3"; +alter table "ODBCAPTURE"."ROLE_CONF" ENABLE constraint "ROLE_CONF_FK1"; +alter table "ODBCAPTURE"."SCHEMA_CONF" ENABLE constraint "SCHEMA_CONF_FK1"; +alter table "ODBCAPTURE"."TYPE_CONF" ENABLE constraint "TYPE_CONF_FK1"; +-- ODBCAPTURE Alter Foreign Keys is done. + +PL/SQL procedure successfully completed. + + +alter_triggers_ENABLE +Alter Triggers for wtpgrb Install Type +-- ODBCAPTURE Alter Triggers is done. + +PL/SQL procedure successfully completed. + + +update_id_sequences +Update ID Sequences for wtpgrb Install Type +-- ODBCAPTURE Identity Sequence Updates is done. + +PL/SQL procedure successfully completed. + + +Load Installation Files + +Confirm/Create odbcapture_installation_logs Table + +PL/SQL procedure successfully completed. + + +sqlldr_control=./odbcapture_installation_logs.ctl + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:45:17 for a duration of 2.67 seconds (started at 2024-04-15T01:45:14) diff --git a/builds/OraEE213_AP212_ORDS222/wtpgrb/log_files_junit_report.xml b/builds/OraEE213_AP212_ORDS222/wtpgrb/log_files_junit_report.xml new file mode 100644 index 0000000..7b5d20c --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpgrb/log_files_junit_report.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + +=== DBI Started: ./installation_prepare.sql +Create_Temp_Publicly_Updateable_Table_SQL +Table created. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:45:08 for a duration of .11 seconds (started at 2024-04-15T01:45:08) + + + + +=== DBI Started: ODBCAPTURE/DLOAD_CONF.cdl +Disable Triggers and Foreign Keys +alter table "ODBCAPTURE"."DLOAD_CONF" DISABLE constraint "DLOAD_CONF_FK1"; +alter table "ODBCAPTURE"."DLOAD_CONF" DISABLE constraint "DLOAD_CONF_FK2"; +PL/SQL procedure successfully completed. +sqlldr_control=ODBCAPTURE/DLOAD_CONF.ctl +PL/SQL procedure successfully completed. +=== DBI Completed at 2024-04-15T01:45:09 for a duration of 1.27 seconds (started at 2024-04-15T01:45:08) +### SQL*Loader Log File: ODBCAPTURE/DLOAD_CONF.log +ORA-01422: exact fetch returns more than requested number of rows + + + + +=== DBI Started: ODBCAPTURE/OBJECT_CONF.cdl +Disable Triggers and Foreign Keys +alter table "ODBCAPTURE"."OBJECT_CONF" DISABLE constraint "OBJECT_CONF_FK1"; +alter table "ODBCAPTURE"."OBJECT_CONF" DISABLE constraint "OBJECT_CONF_FK2"; +alter table "ODBCAPTURE"."OBJECT_CONF" DISABLE constraint "OBJECT_CONF_FK3"; +PL/SQL procedure successfully completed. +sqlldr_control=ODBCAPTURE/OBJECT_CONF.ctl +PL/SQL procedure successfully completed. +=== DBI Completed at 2024-04-15T01:45:10 for a duration of 1.29 seconds (started at 2024-04-15T01:45:09) +### SQL*Loader Log File: ODBCAPTURE/OBJECT_CONF.log +ORA-01422: exact fetch returns more than requested number of rows + + + + +=== DBI Started: ODBCAPTURE/ROLE_CONF.cdl +Disable Triggers and Foreign Keys +alter table "ODBCAPTURE"."ROLE_CONF" DISABLE constraint "ROLE_CONF_FK1"; +PL/SQL procedure successfully completed. +sqlldr_control=ODBCAPTURE/ROLE_CONF.ctl +PL/SQL procedure successfully completed. +=== DBI Completed at 2024-04-15T01:45:12 for a duration of 1.27 seconds (started at 2024-04-15T01:45:10) +### SQL*Loader Log File: ODBCAPTURE/ROLE_CONF.log +ORA-01422: exact fetch returns more than requested number of rows + + + + +=== DBI Started: ODBCAPTURE/SCHEMA_CONF.cdl +Disable Triggers and Foreign Keys +alter table "ODBCAPTURE"."SCHEMA_CONF" DISABLE constraint "SCHEMA_CONF_FK1"; +PL/SQL procedure successfully completed. +sqlldr_control=ODBCAPTURE/SCHEMA_CONF.ctl +PL/SQL procedure successfully completed. +=== DBI Completed at 2024-04-15T01:45:13 for a duration of 1.22 seconds (started at 2024-04-15T01:45:12) +### SQL*Loader Log File: ODBCAPTURE/SCHEMA_CONF.log +ORA-01422: exact fetch returns more than requested number of rows + + + + +=== DBI Started: ODBCAPTURE/TYPE_CONF.cdl +Disable Triggers and Foreign Keys +alter table "ODBCAPTURE"."TYPE_CONF" DISABLE constraint "TYPE_CONF_FK1"; +PL/SQL procedure successfully completed. +sqlldr_control=ODBCAPTURE/TYPE_CONF.ctl +PL/SQL procedure successfully completed. +=== DBI Completed at 2024-04-15T01:45:14 for a duration of 1.23 seconds (started at 2024-04-15T01:45:13) +### SQL*Loader Log File: ODBCAPTURE/TYPE_CONF.log +ORA-01422: exact fetch returns more than requested number of rows + + + + diff --git a/builds/OraEE213_AP212_ORDS222/wtpgrb/odbcapture_installation_logs.log b/builds/OraEE213_AP212_ORDS222/wtpgrb/odbcapture_installation_logs.log new file mode 100644 index 0000000..51bce11 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpgrb/odbcapture_installation_logs.log @@ -0,0 +1,52 @@ + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:45:16 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. + +Control File: odbcapture_installation_logs.ctl +Data File: odbcapture_installation_logs.csv + Bad File: odbcapture_installation_logs.bad + Discard File: none specified + + (Allow all discards) + +Number to load: ALL +Number to skip: 0 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE_INSTALLATION_LOGS", loaded from every logical record. +Insert option in effect for this table: APPEND + + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +LOAD_DTM SYSDATE +INSTALL_TYPE FIRST 10 , O(") CHARACTER +FILE_NAME NEXT 512 , O(") CHARACTER +CONTENTS DERIVED * EOF CHARACTER + Dynamic LOBFILE. Filename in field FILE_NAME + + +Table "ODBCAPTURE_INSTALLATION_LOGS": + 8 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + + +Space allocated for bind array: 131500 bytes(250 rows) +Read buffer bytes: 1048576 + +Total logical records skipped: 0 +Total logical records read: 8 +Total logical records rejected: 0 +Total logical records discarded: 0 + +Run began on Mon Apr 15 01:45:16 2024 +Run ended on Mon Apr 15 01:45:16 2024 + +Elapsed time was: 00:00:00.57 +CPU time was: 00:00:00.06 diff --git a/builds/OraEE213_AP212_ORDS222/wtpsav/db_build_junit_report.xml b/builds/OraEE213_AP212_ORDS222/wtpsav/db_build_junit_report.xml new file mode 100644 index 0000000..b4669f6 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpsav/db_build_junit_report.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/builds/OraEE213_AP212_ORDS222/wtpsav/install_sys.log b/builds/OraEE213_AP212_ORDS222/wtpsav/install_sys.log new file mode 100644 index 0000000..e69de29 diff --git a/builds/OraEE213_AP212_ORDS222/wtpsav/install_system.log b/builds/OraEE213_AP212_ORDS222/wtpsav/install_system.log new file mode 100644 index 0000000..e69de29 diff --git a/builds/OraEE213_AP212_ORDS222/wtpsav/install_wtpsav.log b/builds/OraEE213_AP212_ORDS222/wtpsav/install_wtpsav.log new file mode 100644 index 0000000..440b19b --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpsav/install_wtpsav.log @@ -0,0 +1,1159 @@ +=== DBI Started: ./installation_prepare.sql + +Create_Temp_Publicly_Updateable_Table_SQL + +Table created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:07 for a duration of .09 seconds (started at 2024-04-15T01:43:07) +=== DBI Started: WTP/PLSQL_PROFILER_RUNNUMBER.seq + +Sequence created. + +=== DBI Completed at 2024-04-15T01:43:07 for a duration of .06 seconds (started at 2024-04-15T01:43:07) +=== DBI Started: WTP/WT_DBOUTS_SEQ.seq + +Sequence created. + +=== DBI Completed at 2024-04-15T01:43:07 for a duration of .05 seconds (started at 2024-04-15T01:43:07) +=== DBI Started: WTP/WT_TESTCASES_SEQ.seq + +Sequence created. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .04 seconds (started at 2024-04-15T01:43:07) +=== DBI Started: WTP/WT_TEST_RUNNERS_SEQ.seq + +Sequence created. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .05 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/WT_TEST_RUNS_SEQ.seq + +Sequence created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .1 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/JUNIT_XML_PERSIST_ALL.proc + +Warning: Procedure created with compilation errors. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .06 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/WT_DBOUT.pspec + +Package created. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .06 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/WT_JOB.pspec + +Package created. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .04 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/WT_PERSIST_REPORT.pspec + +Package created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .1 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/WT_PROFILE.pspec + +Warning: Package created with compilation errors. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .08 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/WT_RESULT.pspec + +Package created. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .07 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/WT_TESTCASE.pspec + +Package created. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .06 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/WT_TEST_RUN.pspec + +Package created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .09 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/WT_TEST_RUNNER.pspec + +Package created. + +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .04 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/PLSQL_PROFILER_DATA.tab + +Table created. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:43:09 for a duration of .43 seconds (started at 2024-04-15T01:43:08) +=== DBI Started: WTP/PLSQL_PROFILER_RUNS.tab + +Table created. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:43:10 for a duration of .69 seconds (started at 2024-04-15T01:43:09) +=== DBI Started: WTP/PLSQL_PROFILER_UNITS.tab + +Table created. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:43:10 for a duration of .34 seconds (started at 2024-04-15T01:43:10) +=== DBI Started: WTP/WT_DBOUTS.tab + +Table created. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:10 for a duration of .39 seconds (started at 2024-04-15T01:43:10) +=== DBI Started: WTP/WT_DBOUT_RUNS.tab + +Table created. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:11 for a duration of .56 seconds (started at 2024-04-15T01:43:10) +=== DBI Started: WTP/WT_PROFILES.tab + +Table created. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:11 for a duration of .34 seconds (started at 2024-04-15T01:43:11) +=== DBI Started: WTP/WT_RESULTS.tab + +Table created. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:12 for a duration of .38 seconds (started at 2024-04-15T01:43:11) +=== DBI Started: WTP/WT_TESTCASES.tab + +Table created. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:12 for a duration of .33 seconds (started at 2024-04-15T01:43:12) +=== DBI Started: WTP/WT_TESTCASE_RUNS.tab + +Table created. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:13 for a duration of .7 seconds (started at 2024-04-15T01:43:12) +=== DBI Started: WTP/WT_TEST_RUNNERS.tab + +Table created. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:13 for a duration of .34 seconds (started at 2024-04-15T01:43:13) +=== DBI Started: WTP/WT_TEST_RUNS.tab + +Table created. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:14 for a duration of .69 seconds (started at 2024-04-15T01:43:13) +=== DBI Started: WTP/PLSQL_PROFILER_RUNS.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:43:14 for a duration of .07 seconds (started at 2024-04-15T01:43:14) +=== DBI Started: WTP/WT_DBOUTS.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:43:14 for a duration of .07 seconds (started at 2024-04-15T01:43:14) +=== DBI Started: WTP/WT_RESULTS.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:43:14 for a duration of .07 seconds (started at 2024-04-15T01:43:14) +=== DBI Started: WTP/WT_TESTCASE_RUNS.tabind + +Index created. + +=== DBI Completed at 2024-04-15T01:43:14 for a duration of .06 seconds (started at 2024-04-15T01:43:14) +=== DBI Started: WTP/WT_TEST_RUNS.tabind + +Index created. + + +Index created. + +=== DBI Completed at 2024-04-15T01:43:14 for a duration of .14 seconds (started at 2024-04-15T01:43:14) +=== DBI Started: WTP/WT_DBOUT_RUNS_VW.vw + +View created. + + +Grant succeeded. + + +View created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:15 for a duration of .7 seconds (started at 2024-04-15T01:43:14) +=== DBI Started: WTP/WT_PROFILES_VW.vw + +View created. + + +Grant succeeded. + + +View created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:15 for a duration of .55 seconds (started at 2024-04-15T01:43:15) +=== DBI Started: WTP/WT_RESULTS_VW.vw + +View created. + + +Grant succeeded. + + +View created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:16 for a duration of .61 seconds (started at 2024-04-15T01:43:15) +=== DBI Started: WTP/WT_SCHEDULER_JOBS_VW.vw + +View created. + + +View created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:43:17 for a duration of .42 seconds (started at 2024-04-15T01:43:16) +=== DBI Started: WTP/WT_TESTCASE_RUNS_VW.vw + +View created. + + +Grant succeeded. + + +View created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:17 for a duration of .5 seconds (started at 2024-04-15T01:43:17) +=== DBI Started: WTP/WT_TEST_RUNS_VW.vw + +View created. + + +Grant succeeded. + + +View created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:43:18 for a duration of .63 seconds (started at 2024-04-15T01:43:17) +=== DBI Started: WTP/WT_DBOUT.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:43:18 for a duration of .08 seconds (started at 2024-04-15T01:43:18) +=== DBI Started: WTP/WT_JOB.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:43:18 for a duration of .17 seconds (started at 2024-04-15T01:43:18) +=== DBI Started: WTP/WT_PERSIST_REPORT.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:43:18 for a duration of .21 seconds (started at 2024-04-15T01:43:18) +=== DBI Started: WTP/WT_PROFILE.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:43:18 for a duration of .26 seconds (started at 2024-04-15T01:43:18) +=== DBI Started: WTP/WT_RESULT.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .09 seconds (started at 2024-04-15T01:43:18) +=== DBI Started: WTP/WT_TESTCASE.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .08 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: WTP/WT_TEST_RUN.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .09 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: WTP/WT_TEST_RUNNER.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .08 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: WTP/PLSQL_PROFILER_DATA.tabfk + +Table altered. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .07 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: WTP/PLSQL_PROFILER_UNITS.tabfk + +Table altered. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .06 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: WTP/WT_DBOUT_RUNS.tabfk + +Table altered. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .07 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: WTP/WT_PROFILES.tabfk + +Table altered. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .07 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: WTP/WT_RESULTS.tabfk + +Table altered. + + +Table altered. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .12 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: WTP/WT_TESTCASE_RUNS.tabfk + +Table altered. + + +Table altered. + +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .11 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: WTP/WT_TEST_RUNS.tabfk + +Table altered. + + +Table altered. + +=== DBI Completed at 2024-04-15T01:43:20 for a duration of .12 seconds (started at 2024-04-15T01:43:19) +=== DBI Started: ./installation_finalize.sql + +Drop_Temp_Publicly_Updateable_Table_SQL + +Table dropped. + + +fix_invalid_public_synonyms + +Re-create Invalid Public Synonyms + +PL/SQL procedure successfully completed. + + +compile_all +Compile All for wtpsav Install Type +-- WTP Compile All is done. + +PL/SQL procedure successfully completed. + + +alter_foreign_keys_ENABLE +Alter Foreign Keys for wtpsav Install Type +alter table "WTP"."PLSQL_PROFILER_DATA" ENABLE constraint "PLSQL_PROFILER_DATA_FK1"; +alter table "WTP"."PLSQL_PROFILER_UNITS" ENABLE constraint "PLSQL_PROFILER_UNITS_FK1"; +alter table "WTP"."WT_DBOUT_RUNS" ENABLE constraint "WT_DBOUT_RUNS_FK1"; +alter table "WTP"."WT_PROFILES" ENABLE constraint "WT_PROFILES_FK1"; +alter table "WTP"."WT_RESULTS" ENABLE constraint "WT_RESULTS_FK1"; +alter table "WTP"."WT_RESULTS" ENABLE constraint "WT_RESULTS_FK2"; +alter table "WTP"."WT_TESTCASE_RUNS" ENABLE constraint "WT_TESTCASE_RUNS_FK1"; +alter table "WTP"."WT_TESTCASE_RUNS" ENABLE constraint "WT_TESTCASE_RUNS_FK2"; +alter table "WTP"."WT_TEST_RUNS" ENABLE constraint "WT_TEST_RUNS_FK1"; +alter table "WTP"."WT_TEST_RUNS" ENABLE constraint "WT_TEST_RUNS_FK2"; +-- WTP Alter Foreign Keys is done. + +PL/SQL procedure successfully completed. + + +alter_triggers_ENABLE +Alter Triggers for wtpsav Install Type +alter trigger "WTP"."WT_SELF_TEST$TEST" ENABLE; +-- WTP Alter Triggers is done. + +PL/SQL procedure successfully completed. + + +update_id_sequences +Update ID Sequences for wtpsav Install Type +-- WTP Identity Sequence Updates is done. + +PL/SQL procedure successfully completed. + + +Load Installation Files + +Confirm/Create odbcapture_installation_logs Table + +PL/SQL procedure successfully completed. + + +sqlldr_control=./odbcapture_installation_logs.ctl + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:43:23 for a duration of 3.41 seconds (started at 2024-04-15T01:43:20) diff --git a/builds/OraEE213_AP212_ORDS222/wtpsav/log_files_junit_report.xml b/builds/OraEE213_AP212_ORDS222/wtpsav/log_files_junit_report.xml new file mode 100644 index 0000000..a382c0b --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpsav/log_files_junit_report.xml @@ -0,0 +1,653 @@ + + + + + + + + + + + +=== DBI Started: ./installation_prepare.sql +Create_Temp_Publicly_Updateable_Table_SQL +Table created. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:43:07 for a duration of .09 seconds (started at 2024-04-15T01:43:07) + + + + +=== DBI Started: WTP/JUNIT_XML_PERSIST_ALL.proc +Warning: Procedure created with compilation errors. +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .06 seconds (started at 2024-04-15T01:43:08) + + + + +=== DBI Started: WTP/PLSQL_PROFILER_DATA.tab +Table created. +Table altered. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +=== DBI Completed at 2024-04-15T01:43:09 for a duration of .43 seconds (started at 2024-04-15T01:43:08) + + + + +=== DBI Started: WTP/PLSQL_PROFILER_DATA.tabfk +Table altered. +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .07 seconds (started at 2024-04-15T01:43:19) + + + + +=== DBI Started: WTP/PLSQL_PROFILER_RUNNUMBER.seq +Sequence created. +=== DBI Completed at 2024-04-15T01:43:07 for a duration of .06 seconds (started at 2024-04-15T01:43:07) + + + + +=== DBI Started: WTP/PLSQL_PROFILER_RUNS.tab +Table created. +Table altered. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +=== DBI Completed at 2024-04-15T01:43:10 for a duration of .69 seconds (started at 2024-04-15T01:43:09) + + + + +=== DBI Started: WTP/PLSQL_PROFILER_RUNS.tabind +Index created. +=== DBI Completed at 2024-04-15T01:43:14 for a duration of .07 seconds (started at 2024-04-15T01:43:14) + + + + +=== DBI Started: WTP/PLSQL_PROFILER_UNITS.tab +Table created. +Table altered. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +=== DBI Completed at 2024-04-15T01:43:10 for a duration of .34 seconds (started at 2024-04-15T01:43:10) + + + + +=== DBI Started: WTP/PLSQL_PROFILER_UNITS.tabfk +Table altered. +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .06 seconds (started at 2024-04-15T01:43:19) + + + + +=== DBI Started: WTP/WT_DBOUT.pbody +Package body created. +=== DBI Completed at 2024-04-15T01:43:18 for a duration of .08 seconds (started at 2024-04-15T01:43:18) + + + + +=== DBI Started: WTP/WT_DBOUT.pspec +Package created. +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .06 seconds (started at 2024-04-15T01:43:08) + + + + +=== DBI Started: WTP/WT_DBOUTS.tab +Table created. +Table altered. +Table altered. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Grant succeeded. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:43:10 for a duration of .39 seconds (started at 2024-04-15T01:43:10) + + + + +=== DBI Started: WTP/WT_DBOUTS.tabind +Index created. +=== DBI Completed at 2024-04-15T01:43:14 for a duration of .07 seconds (started at 2024-04-15T01:43:14) + + + + +=== DBI Started: WTP/WT_DBOUTS_SEQ.seq +Sequence created. +=== DBI Completed at 2024-04-15T01:43:07 for a duration of .05 seconds (started at 2024-04-15T01:43:07) + + + + +=== DBI Started: WTP/WT_DBOUT_RUNS.tab +Table created. +Table altered. +Table altered. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Grant succeeded. +Grant succeeded. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:43:11 for a duration of .56 seconds (started at 2024-04-15T01:43:10) + + + + +=== DBI Started: WTP/WT_DBOUT_RUNS.tabfk +Table altered. +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .07 seconds (started at 2024-04-15T01:43:19) + + + + +=== DBI Started: WTP/WT_DBOUT_RUNS_VW.vw +View created. +Grant succeeded. +View created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:43:15 for a duration of .7 seconds (started at 2024-04-15T01:43:14) + + + + +=== DBI Started: WTP/WT_JOB.pbody +Package body created. +=== DBI Completed at 2024-04-15T01:43:18 for a duration of .17 seconds (started at 2024-04-15T01:43:18) + + + + +=== DBI Started: WTP/WT_JOB.pspec +Package created. +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .04 seconds (started at 2024-04-15T01:43:08) + + + + +=== DBI Started: WTP/WT_PERSIST_REPORT.pbody +Package body created. +=== DBI Completed at 2024-04-15T01:43:18 for a duration of .21 seconds (started at 2024-04-15T01:43:18) + + + + +=== DBI Started: WTP/WT_PERSIST_REPORT.pspec +Package created. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .1 seconds (started at 2024-04-15T01:43:08) + + + + +=== DBI Started: WTP/WT_PROFILE.pbody +Package body created. +=== DBI Completed at 2024-04-15T01:43:18 for a duration of .26 seconds (started at 2024-04-15T01:43:18) + + + + +=== DBI Started: WTP/WT_PROFILE.pspec +Warning: Package created with compilation errors. +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .08 seconds (started at 2024-04-15T01:43:08) + + + + +=== DBI Started: WTP/WT_PROFILES.tab +Table created. +Table altered. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Grant succeeded. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:43:11 for a duration of .34 seconds (started at 2024-04-15T01:43:11) + + + + +=== DBI Started: WTP/WT_PROFILES.tabfk +Table altered. +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .07 seconds (started at 2024-04-15T01:43:19) + + + + +=== DBI Started: WTP/WT_PROFILES_VW.vw +View created. +Grant succeeded. +View created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:43:15 for a duration of .55 seconds (started at 2024-04-15T01:43:15) + + + + +=== DBI Started: WTP/WT_RESULT.pbody +Package body created. +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .09 seconds (started at 2024-04-15T01:43:18) + + + + +=== DBI Started: WTP/WT_RESULT.pspec +Package created. +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .07 seconds (started at 2024-04-15T01:43:08) + + + + +=== DBI Started: WTP/WT_RESULTS.tab +Table created. +Table altered. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Grant succeeded. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:43:12 for a duration of .38 seconds (started at 2024-04-15T01:43:11) + + + + +=== DBI Started: WTP/WT_RESULTS.tabfk +Table altered. +Table altered. +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .12 seconds (started at 2024-04-15T01:43:19) + + + + +=== DBI Started: WTP/WT_RESULTS.tabind +Index created. +=== DBI Completed at 2024-04-15T01:43:14 for a duration of .07 seconds (started at 2024-04-15T01:43:14) + + + + +=== DBI Started: WTP/WT_RESULTS_VW.vw +View created. +Grant succeeded. +View created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:43:16 for a duration of .61 seconds (started at 2024-04-15T01:43:15) + + + + +=== DBI Started: WTP/WT_SCHEDULER_JOBS_VW.vw +View created. +View created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +=== DBI Completed at 2024-04-15T01:43:17 for a duration of .42 seconds (started at 2024-04-15T01:43:16) + + + + +=== DBI Started: WTP/WT_TESTCASE.pbody +Package body created. +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .08 seconds (started at 2024-04-15T01:43:19) + + + + +=== DBI Started: WTP/WT_TESTCASE.pspec +Package created. +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .06 seconds (started at 2024-04-15T01:43:08) + + + + +=== DBI Started: WTP/WT_TESTCASES.tab +Table created. +Table altered. +Table altered. +Comment created. +Comment created. +Comment created. +Grant succeeded. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:43:12 for a duration of .33 seconds (started at 2024-04-15T01:43:12) + + + + +=== DBI Started: WTP/WT_TESTCASES_SEQ.seq +Sequence created. +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .04 seconds (started at 2024-04-15T01:43:07) + + + + +=== DBI Started: WTP/WT_TESTCASE_RUNS.tab +Table created. +Table altered. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Grant succeeded. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:43:13 for a duration of .7 seconds (started at 2024-04-15T01:43:12) + + + + +=== DBI Started: WTP/WT_TESTCASE_RUNS.tabfk +Table altered. +Table altered. +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .11 seconds (started at 2024-04-15T01:43:19) + + + + +=== DBI Started: WTP/WT_TESTCASE_RUNS.tabind +Index created. +=== DBI Completed at 2024-04-15T01:43:14 for a duration of .06 seconds (started at 2024-04-15T01:43:14) + + + + +=== DBI Started: WTP/WT_TESTCASE_RUNS_VW.vw +View created. +Grant succeeded. +View created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:43:17 for a duration of .5 seconds (started at 2024-04-15T01:43:17) + + + + +=== DBI Started: WTP/WT_TEST_RUN.pbody +Package body created. +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .09 seconds (started at 2024-04-15T01:43:19) + + + + +=== DBI Started: WTP/WT_TEST_RUN.pspec +Package created. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .09 seconds (started at 2024-04-15T01:43:08) + + + + +=== DBI Started: WTP/WT_TEST_RUNNER.pbody +Package body created. +=== DBI Completed at 2024-04-15T01:43:19 for a duration of .08 seconds (started at 2024-04-15T01:43:19) + + + + +=== DBI Started: WTP/WT_TEST_RUNNER.pspec +Package created. +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .04 seconds (started at 2024-04-15T01:43:08) + + + + +=== DBI Started: WTP/WT_TEST_RUNNERS.tab +Table created. +Table altered. +Table altered. +Comment created. +Comment created. +Comment created. +Comment created. +Grant succeeded. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:43:13 for a duration of .34 seconds (started at 2024-04-15T01:43:13) + + + + +=== DBI Started: WTP/WT_TEST_RUNNERS_SEQ.seq +Sequence created. +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .05 seconds (started at 2024-04-15T01:43:08) + + + + +=== DBI Started: WTP/WT_TEST_RUNS.tab +Table created. +Table altered. +Table altered. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Grant succeeded. +Grant succeeded. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:43:14 for a duration of .69 seconds (started at 2024-04-15T01:43:13) + + + + +=== DBI Started: WTP/WT_TEST_RUNS.tabfk +Table altered. +Table altered. +=== DBI Completed at 2024-04-15T01:43:20 for a duration of .12 seconds (started at 2024-04-15T01:43:19) + + + + +=== DBI Started: WTP/WT_TEST_RUNS.tabind +Index created. +Index created. +=== DBI Completed at 2024-04-15T01:43:14 for a duration of .14 seconds (started at 2024-04-15T01:43:14) + + + + +=== DBI Started: WTP/WT_TEST_RUNS_SEQ.seq +Sequence created. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:43:08 for a duration of .1 seconds (started at 2024-04-15T01:43:08) + + + + +=== DBI Started: WTP/WT_TEST_RUNS_VW.vw +View created. +Grant succeeded. +View created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:43:18 for a duration of .63 seconds (started at 2024-04-15T01:43:17) + + + + diff --git a/builds/OraEE213_AP212_ORDS222/wtpsav/odbcapture_installation_logs.log b/builds/OraEE213_AP212_ORDS222/wtpsav/odbcapture_installation_logs.log new file mode 100644 index 0000000..c04190d --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpsav/odbcapture_installation_logs.log @@ -0,0 +1,52 @@ + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:43:22 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. + +Control File: odbcapture_installation_logs.ctl +Data File: odbcapture_installation_logs.csv + Bad File: odbcapture_installation_logs.bad + Discard File: none specified + + (Allow all discards) + +Number to load: ALL +Number to skip: 0 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE_INSTALLATION_LOGS", loaded from every logical record. +Insert option in effect for this table: APPEND + + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +LOAD_DTM SYSDATE +INSTALL_TYPE FIRST 10 , O(") CHARACTER +FILE_NAME NEXT 512 , O(") CHARACTER +CONTENTS DERIVED * EOF CHARACTER + Dynamic LOBFILE. Filename in field FILE_NAME + + +Table "ODBCAPTURE_INSTALLATION_LOGS": + 3 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + + +Space allocated for bind array: 131500 bytes(250 rows) +Read buffer bytes: 1048576 + +Total logical records skipped: 0 +Total logical records read: 3 +Total logical records rejected: 0 +Total logical records discarded: 0 + +Run began on Mon Apr 15 01:43:22 2024 +Run ended on Mon Apr 15 01:43:22 2024 + +Elapsed time was: 00:00:00.50 +CPU time was: 00:00:00.04 diff --git a/builds/OraEE213_AP212_ORDS222/wtpsrc/WTP/HOOKS.log b/builds/OraEE213_AP212_ORDS222/wtpsrc/WTP/HOOKS.log new file mode 100644 index 0000000..a9829cf --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpsrc/WTP/HOOKS.log @@ -0,0 +1,53 @@ + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:42:44 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. + +Control File: WTP/HOOKS.ctl +Data File: WTP/HOOKS.csv + Bad File: WTP/HOOKS.bad + Discard File: none specified + + (Allow all discards) + +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "WTP"."HOOKS", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +HOOK_NAME FIRST 20 , O(") CHARACTER +SEQ NEXT * , O(") CHARACTER +RUN_STRING NEXT 4000 , O(") CHARACTER +DESCRIPTION NEXT 1000 , O(") CHARACTER + +value used for ROWS parameter changed from 250 to 198 + +Table "WTP"."HOOKS": + 5 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + + +Space allocated for bind array: 1046232 bytes(198 rows) +Read buffer bytes: 1048576 + +Total logical records skipped: 1 +Total logical records read: 5 +Total logical records rejected: 0 +Total logical records discarded: 0 + +Run began on Mon Apr 15 01:42:44 2024 +Run ended on Mon Apr 15 01:42:46 2024 + +Elapsed time was: 00:00:02.04 +CPU time was: 00:00:00.04 diff --git a/builds/OraEE213_AP212_ORDS222/wtpsrc/db_build_junit_report.xml b/builds/OraEE213_AP212_ORDS222/wtpsrc/db_build_junit_report.xml new file mode 100644 index 0000000..a7629af --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpsrc/db_build_junit_report.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/builds/OraEE213_AP212_ORDS222/wtpsrc/install_sys.log b/builds/OraEE213_AP212_ORDS222/wtpsrc/install_sys.log new file mode 100644 index 0000000..0b4cd55 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpsrc/install_sys.log @@ -0,0 +1,26 @@ +=== DBI Started: SYS/WTP.usr + +User created. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:23 for a duration of .46 seconds (started at 2024-04-15T01:42:23) diff --git a/builds/OraEE213_AP212_ORDS222/wtpsrc/install_system.log b/builds/OraEE213_AP212_ORDS222/wtpsrc/install_system.log new file mode 100644 index 0000000..954c857 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpsrc/install_system.log @@ -0,0 +1,35 @@ +=== DBI Started: SYSTEM/WTP_usr.grnt + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:24 for a duration of .42 seconds (started at 2024-04-15T01:42:23) diff --git a/builds/OraEE213_AP212_ORDS222/wtpsrc/install_wtpsrc.log b/builds/OraEE213_AP212_ORDS222/wtpsrc/install_wtpsrc.log new file mode 100644 index 0000000..3d5442b --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpsrc/install_wtpsrc.log @@ -0,0 +1,292 @@ +=== DBI Started: ./installation_prepare.sql + +Create_Temp_Publicly_Updateable_Table_SQL + +Table created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:24 for a duration of .17 seconds (started at 2024-04-15T01:42:24) +=== DBI Started: WTP/WT_AD_HOC_REPORT.proc + +Warning: Procedure created with compilation errors. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:24 for a duration of .17 seconds (started at 2024-04-15T01:42:24) +=== DBI Started: WTP/WT_EXECUTE_TEST_RUNNER.proc + +Warning: Procedure created with compilation errors. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:24 for a duration of .13 seconds (started at 2024-04-15T01:42:24) +=== DBI Started: WTP/CORE_DATA.pspec + +Package created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:24 for a duration of .19 seconds (started at 2024-04-15T01:42:24) +=== DBI Started: WTP/HOOK.pspec + +Package created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:24 for a duration of .11 seconds (started at 2024-04-15T01:42:24) +=== DBI Started: WTP/JUNIT_CORE_REPORT.pspec + +Package created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:25 for a duration of .08 seconds (started at 2024-04-15T01:42:24) +=== DBI Started: WTP/WTPLSQL.pspec + +Package created. + + +Grant succeeded. + + +Synonym created. + + +Synonym created. + +=== DBI Completed at 2024-04-15T01:42:25 for a duration of .18 seconds (started at 2024-04-15T01:42:25) +=== DBI Started: WTP/WT_ASSERT.pspec + +Package created. + + +Grant succeeded. + + +Synonym created. + + +Synonym created. + +=== DBI Completed at 2024-04-15T01:42:25 for a duration of .21 seconds (started at 2024-04-15T01:42:25) +=== DBI Started: WTP/WT_CORE_REPORT.pspec + +Package created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:25 for a duration of .09 seconds (started at 2024-04-15T01:42:25) +=== DBI Started: WTP/HOOKS.tab + +Table created. + + +Table altered. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:41 for a duration of 16.04 seconds (started at 2024-04-15T01:42:25) +=== DBI Started: WTP/WT_VERSIONS.tab + +Table created. + + +Table altered. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:41 for a duration of .31 seconds (started at 2024-04-15T01:42:41) +=== DBI Started: WTP/HOOKS.cdl + +Disable Triggers and Foreign Keys + +PL/SQL procedure successfully completed. + + +sqlldr_control=WTP/HOOKS.ctl + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:42:46 for a duration of 4.38 seconds (started at 2024-04-15T01:42:41) +=== DBI Started: WTP/WT_QUAL_TEST_RUNNERS_VW.vw + +View created. + + +Grant succeeded. + + +View created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:46 for a duration of .36 seconds (started at 2024-04-15T01:42:46) +=== DBI Started: WTP/CORE_DATA.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:42:46 for a duration of .1 seconds (started at 2024-04-15T01:42:46) +=== DBI Started: WTP/HOOK.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:42:46 for a duration of .09 seconds (started at 2024-04-15T01:42:46) +=== DBI Started: WTP/JUNIT_CORE_REPORT.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:42:47 for a duration of .09 seconds (started at 2024-04-15T01:42:46) +=== DBI Started: WTP/WTPLSQL.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:42:47 for a duration of .12 seconds (started at 2024-04-15T01:42:47) +=== DBI Started: WTP/WT_ASSERT.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:42:47 for a duration of .22 seconds (started at 2024-04-15T01:42:47) +=== DBI Started: WTP/WT_CORE_REPORT.pbody + +Package body created. + +=== DBI Completed at 2024-04-15T01:42:47 for a duration of .08 seconds (started at 2024-04-15T01:42:47) +=== DBI Started: ./installation_finalize.sql + +Drop_Temp_Publicly_Updateable_Table_SQL + +Table dropped. + + +fix_invalid_public_synonyms + +Re-create Invalid Public Synonyms + +PL/SQL procedure successfully completed. + + +compile_all +Compile All for wtpsrc Install Type +-- WTP Compile All is done. + +PL/SQL procedure successfully completed. + + +alter_foreign_keys_ENABLE +Alter Foreign Keys for wtpsrc Install Type +-- WTP Alter Foreign Keys is done. + +PL/SQL procedure successfully completed. + + +alter_triggers_ENABLE +Alter Triggers for wtpsrc Install Type +-- WTP Alter Triggers is done. + +PL/SQL procedure successfully completed. + + +update_id_sequences +Update ID Sequences for wtpsrc Install Type +-- WTP Identity Sequence Updates is done. + +PL/SQL procedure successfully completed. + + +Load Installation Files + +Confirm/Create odbcapture_installation_logs Table +create table odbcapture_installation_logs + (load_dtm date + ,install_type varchar2(10) + ,file_name varchar2(512) + ,contents clob); +comment on column odbcapture_installation_logs.load_dtm is 'Date/Time the installation log file was loaded.'; +comment on column odbcapture_installation_logs.install_type is 'Type of installation (from TYPE_CONF).'; +comment on column odbcapture_installation_logs.file_name is 'Name of installation log file.'; +comment on column odbcapture_installation_logs.contents is 'Contents/Text of the installation log file.'; +comment on table odbcapture_installation_logs is 'ODBCAPTURE installation log files.'; +grant select on odbcapture_installation_logs to public; +create public synonym odbcapture_installation_logs for odbcapture_installation_logs; + +PL/SQL procedure successfully completed. + + +sqlldr_control=./odbcapture_installation_logs.ctl + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:42:55 for a duration of 8.1 seconds (started at 2024-04-15T01:42:47) diff --git a/builds/OraEE213_AP212_ORDS222/wtpsrc/log_files_junit_report.xml b/builds/OraEE213_AP212_ORDS222/wtpsrc/log_files_junit_report.xml new file mode 100644 index 0000000..be32553 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpsrc/log_files_junit_report.xml @@ -0,0 +1,264 @@ + + + + + +=== DBI Started: SYS/WTP.usr +User created. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:42:23 for a duration of .46 seconds (started at 2024-04-15T01:42:23) + + + + + + +=== DBI Started: SYSTEM/WTP_usr.grnt +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:42:24 for a duration of .42 seconds (started at 2024-04-15T01:42:23) + + + + + + + + +=== DBI Started: ./installation_prepare.sql +Create_Temp_Publicly_Updateable_Table_SQL +Table created. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:42:24 for a duration of .17 seconds (started at 2024-04-15T01:42:24) + + + + +=== DBI Started: WTP/CORE_DATA.pbody +Package body created. +=== DBI Completed at 2024-04-15T01:42:46 for a duration of .1 seconds (started at 2024-04-15T01:42:46) + + + + +=== DBI Started: WTP/CORE_DATA.pspec +Package created. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:42:24 for a duration of .19 seconds (started at 2024-04-15T01:42:24) + + + + +=== DBI Started: WTP/HOOK.pbody +Package body created. +=== DBI Completed at 2024-04-15T01:42:46 for a duration of .09 seconds (started at 2024-04-15T01:42:46) + + + + +=== DBI Started: WTP/HOOK.pspec +Package created. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:42:24 for a duration of .11 seconds (started at 2024-04-15T01:42:24) + + + + +=== DBI Started: WTP/HOOKS.cdl +Disable Triggers and Foreign Keys +PL/SQL procedure successfully completed. +sqlldr_control=WTP/HOOKS.ctl +PL/SQL procedure successfully completed. +=== DBI Completed at 2024-04-15T01:42:46 for a duration of 4.38 seconds (started at 2024-04-15T01:42:41) +### SQL*Loader Log File: WTP/HOOKS.log + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:42:44 2024 +Version 21.3.0.0.0 +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. +Control File: WTP/HOOKS.ctl +Data File: WTP/HOOKS.csv + Bad File: WTP/HOOKS.bad + Discard File: none specified + + (Allow all discards) +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "WTP"."HOOKS", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +HOOK_NAME FIRST 20 , O(") CHARACTER +SEQ NEXT * , O(") CHARACTER +RUN_STRING NEXT 4000 , O(") CHARACTER +DESCRIPTION NEXT 1000 , O(") CHARACTER +value used for ROWS parameter changed from 250 to 198 +Table "WTP"."HOOKS": + 5 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + +Space allocated for bind array: 1046232 bytes(198 rows) +Read buffer bytes: 1048576 +Total logical records skipped: 1 +Total logical records read: 5 +Total logical records rejected: 0 +Total logical records discarded: 0 +Run began on Mon Apr 15 01:42:44 2024 +Run ended on Mon Apr 15 01:42:46 2024 +Elapsed time was: 00:00:02.04 +CPU time was: 00:00:00.04 + + + + + +=== DBI Started: WTP/HOOKS.tab +Table created. +Table altered. +Table altered. +Table altered. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Grant succeeded. +Grant succeeded. +Grant succeeded. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:42:41 for a duration of 16.04 seconds (started at 2024-04-15T01:42:25) + + + + +=== DBI Started: WTP/JUNIT_CORE_REPORT.pbody +Package body created. +=== DBI Completed at 2024-04-15T01:42:47 for a duration of .09 seconds (started at 2024-04-15T01:42:46) + + + + +=== DBI Started: WTP/JUNIT_CORE_REPORT.pspec +Package created. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:42:25 for a duration of .08 seconds (started at 2024-04-15T01:42:24) + + + + +=== DBI Started: WTP/WTPLSQL.pbody +Package body created. +=== DBI Completed at 2024-04-15T01:42:47 for a duration of .12 seconds (started at 2024-04-15T01:42:47) + + + + +=== DBI Started: WTP/WTPLSQL.pspec +Package created. +Grant succeeded. +Synonym created. +Synonym created. +=== DBI Completed at 2024-04-15T01:42:25 for a duration of .18 seconds (started at 2024-04-15T01:42:25) + + + + +=== DBI Started: WTP/WT_AD_HOC_REPORT.proc +Warning: Procedure created with compilation errors. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:42:24 for a duration of .17 seconds (started at 2024-04-15T01:42:24) + + + + +=== DBI Started: WTP/WT_ASSERT.pbody +Package body created. +=== DBI Completed at 2024-04-15T01:42:47 for a duration of .22 seconds (started at 2024-04-15T01:42:47) + + + + +=== DBI Started: WTP/WT_ASSERT.pspec +Package created. +Grant succeeded. +Synonym created. +Synonym created. +=== DBI Completed at 2024-04-15T01:42:25 for a duration of .21 seconds (started at 2024-04-15T01:42:25) + + + + +=== DBI Started: WTP/WT_CORE_REPORT.pbody +Package body created. +=== DBI Completed at 2024-04-15T01:42:47 for a duration of .08 seconds (started at 2024-04-15T01:42:47) + + + + +=== DBI Started: WTP/WT_CORE_REPORT.pspec +Package created. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:42:25 for a duration of .09 seconds (started at 2024-04-15T01:42:25) + + + + +=== DBI Started: WTP/WT_EXECUTE_TEST_RUNNER.proc +Warning: Procedure created with compilation errors. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:42:24 for a duration of .13 seconds (started at 2024-04-15T01:42:24) + + + + +=== DBI Started: WTP/WT_QUAL_TEST_RUNNERS_VW.vw +View created. +Grant succeeded. +View created. +Comment created. +Comment created. +Comment created. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:42:46 for a duration of .36 seconds (started at 2024-04-15T01:42:46) + + + + +=== DBI Started: WTP/WT_VERSIONS.tab +Table created. +Table altered. +Table altered. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:42:41 for a duration of .31 seconds (started at 2024-04-15T01:42:41) + + + + diff --git a/builds/OraEE213_AP212_ORDS222/wtpsrc/odbcapture_installation_logs.log b/builds/OraEE213_AP212_ORDS222/wtpsrc/odbcapture_installation_logs.log new file mode 100644 index 0000000..690e52a --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtpsrc/odbcapture_installation_logs.log @@ -0,0 +1,52 @@ + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:42:53 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. + +Control File: odbcapture_installation_logs.ctl +Data File: odbcapture_installation_logs.csv + Bad File: odbcapture_installation_logs.bad + Discard File: none specified + + (Allow all discards) + +Number to load: ALL +Number to skip: 0 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE_INSTALLATION_LOGS", loaded from every logical record. +Insert option in effect for this table: APPEND + + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +LOAD_DTM SYSDATE +INSTALL_TYPE FIRST 10 , O(") CHARACTER +FILE_NAME NEXT 512 , O(") CHARACTER +CONTENTS DERIVED * EOF CHARACTER + Dynamic LOBFILE. Filename in field FILE_NAME + + +Table "ODBCAPTURE_INSTALLATION_LOGS": + 4 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + + +Space allocated for bind array: 131500 bytes(250 rows) +Read buffer bytes: 1048576 + +Total logical records skipped: 0 +Total logical records read: 4 +Total logical records rejected: 0 +Total logical records discarded: 0 + +Run began on Mon Apr 15 01:42:53 2024 +Run ended on Mon Apr 15 01:42:55 2024 + +Elapsed time was: 00:00:01.98 +CPU time was: 00:00:00.05 diff --git a/builds/OraEE213_AP212_ORDS222/wtptst/WTP/WT_SELF_TEST.log b/builds/OraEE213_AP212_ORDS222/wtptst/WTP/WT_SELF_TEST.log new file mode 100644 index 0000000..814a6d3 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtptst/WTP/WT_SELF_TEST.log @@ -0,0 +1,58 @@ + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:43:00 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. + +Control File: WTP/WT_SELF_TEST.ctl +Data File: WTP/WT_SELF_TEST.csv + Bad File: WTP/WT_SELF_TEST.bad + Discard File: none specified + + (Allow all discards) + +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "WTP"."WT_SELF_TEST", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +ID FIRST * , O(") CHARACTER +TEMP_CLOB NEXT ***** , O(") CHARACTER + Maximum field length is 1048576 +TEMP_NCLOB NEXT ***** , O(") CHARACTER + Maximum field length is 1048576 +TEMP_XML NEXT ***** , O(") CHARACTER + Maximum field length is 1048576 +TEMP_BLOB NEXT ***** , O(") CHARACTER + Maximum field length is 1572864 + +value used for ROWS parameter changed from 250 to 1 + +Table "WTP"."WT_SELF_TEST": + 2 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + + +Space allocated for bind array: 4718874 bytes(1 rows) +Read buffer bytes: 1048576 + +Total logical records skipped: 1 +Total logical records read: 2 +Total logical records rejected: 0 +Total logical records discarded: 0 + +Run began on Mon Apr 15 01:43:00 2024 +Run ended on Mon Apr 15 01:43:03 2024 + +Elapsed time was: 00:00:02.82 +CPU time was: 00:00:00.06 diff --git a/builds/OraEE213_AP212_ORDS222/wtptst/db_build_junit_report.xml b/builds/OraEE213_AP212_ORDS222/wtptst/db_build_junit_report.xml new file mode 100644 index 0000000..13b9e41 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtptst/db_build_junit_report.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/builds/OraEE213_AP212_ORDS222/wtptst/install_sys.log b/builds/OraEE213_AP212_ORDS222/wtptst/install_sys.log new file mode 100644 index 0000000..e69de29 diff --git a/builds/OraEE213_AP212_ORDS222/wtptst/install_system.log b/builds/OraEE213_AP212_ORDS222/wtptst/install_system.log new file mode 100644 index 0000000..e69de29 diff --git a/builds/OraEE213_AP212_ORDS222/wtptst/install_wtptst.log b/builds/OraEE213_AP212_ORDS222/wtptst/install_wtptst.log new file mode 100644 index 0000000..f75eb3c --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtptst/install_wtptst.log @@ -0,0 +1,119 @@ +=== DBI Started: ./installation_prepare.sql + +Create_Temp_Publicly_Updateable_Table_SQL + +Table created. + + +Grant succeeded. + +=== DBI Completed at 2024-04-15T01:42:57 for a duration of .1 seconds (started at 2024-04-15T01:42:57) +=== DBI Started: WTP/WT_SELF_TEST.tab + +Table created. + + +Table altered. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + + +Comment created. + +=== DBI Completed at 2024-04-15T01:42:59 for a duration of 1.48 seconds (started at 2024-04-15T01:42:57) +=== DBI Started: WTP/WT_SELF_TEST.cdl + +Disable Triggers and Foreign Keys + +PL/SQL procedure successfully completed. + + +sqlldr_control=WTP/WT_SELF_TEST.ctl + + +PL/SQL procedure successfully completed. + + +PL/SQL procedure successfully completed. + + +Commit complete. + +=== DBI Completed at 2024-04-15T01:43:03 for a duration of 4.69 seconds (started at 2024-04-15T01:42:59) +=== DBI Started: WTP/WT_SELF_TEST.tabtrg + +Trigger created. + + +Trigger altered. + +=== DBI Completed at 2024-04-15T01:43:03 for a duration of .13 seconds (started at 2024-04-15T01:43:03) +=== DBI Started: ./installation_finalize.sql + +Drop_Temp_Publicly_Updateable_Table_SQL + +Table dropped. + + +fix_invalid_public_synonyms + +Re-create Invalid Public Synonyms + +PL/SQL procedure successfully completed. + + +compile_all +Compile All for wtptst Install Type +-- WTP Compile All is done. + +PL/SQL procedure successfully completed. + + +alter_foreign_keys_ENABLE +Alter Foreign Keys for wtptst Install Type +-- WTP Alter Foreign Keys is done. + +PL/SQL procedure successfully completed. + + +alter_triggers_ENABLE +Alter Triggers for wtptst Install Type +alter trigger "WTP"."WT_SELF_TEST$TEST" ENABLE; +-- WTP Alter Triggers is done. + +PL/SQL procedure successfully completed. + + +update_id_sequences +Update ID Sequences for wtptst Install Type +-- WTP Identity Sequence Updates is done. + +PL/SQL procedure successfully completed. + + +Load Installation Files + +Confirm/Create odbcapture_installation_logs Table + +PL/SQL procedure successfully completed. + + +sqlldr_control=./odbcapture_installation_logs.ctl + + +PL/SQL procedure successfully completed. + +=== DBI Completed at 2024-04-15T01:43:06 for a duration of 2.77 seconds (started at 2024-04-15T01:43:03) diff --git a/builds/OraEE213_AP212_ORDS222/wtptst/log_files_junit_report.xml b/builds/OraEE213_AP212_ORDS222/wtptst/log_files_junit_report.xml new file mode 100644 index 0000000..93724e3 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtptst/log_files_junit_report.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + +=== DBI Started: ./installation_prepare.sql +Create_Temp_Publicly_Updateable_Table_SQL +Table created. +Grant succeeded. +=== DBI Completed at 2024-04-15T01:42:57 for a duration of .1 seconds (started at 2024-04-15T01:42:57) + + + + +=== DBI Started: WTP/WT_SELF_TEST.cdl +Disable Triggers and Foreign Keys +PL/SQL procedure successfully completed. +sqlldr_control=WTP/WT_SELF_TEST.ctl +PL/SQL procedure successfully completed. +PL/SQL procedure successfully completed. +Commit complete. +=== DBI Completed at 2024-04-15T01:43:03 for a duration of 4.69 seconds (started at 2024-04-15T01:42:59) +### SQL*Loader Log File: WTP/WT_SELF_TEST.log + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:43:00 2024 +Version 21.3.0.0.0 +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. +Control File: WTP/WT_SELF_TEST.ctl +Data File: WTP/WT_SELF_TEST.csv + Bad File: WTP/WT_SELF_TEST.bad + Discard File: none specified + + (Allow all discards) +Number to load: ALL +Number to skip: 1 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "WTP"."WT_SELF_TEST", loaded from every logical record. +Insert option in effect for this table: APPEND +TRAILING NULLCOLS option in effect + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +ID FIRST * , O(") CHARACTER +TEMP_CLOB NEXT ***** , O(") CHARACTER + Maximum field length is 1048576 +TEMP_NCLOB NEXT ***** , O(") CHARACTER + Maximum field length is 1048576 +TEMP_XML NEXT ***** , O(") CHARACTER + Maximum field length is 1048576 +TEMP_BLOB NEXT ***** , O(") CHARACTER + Maximum field length is 1572864 +value used for ROWS parameter changed from 250 to 1 +Table "WTP"."WT_SELF_TEST": + 2 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + +Space allocated for bind array: 4718874 bytes(1 rows) +Read buffer bytes: 1048576 +Total logical records skipped: 1 +Total logical records read: 2 +Total logical records rejected: 0 +Total logical records discarded: 0 +Run began on Mon Apr 15 01:43:00 2024 +Run ended on Mon Apr 15 01:43:03 2024 +Elapsed time was: 00:00:02.82 +CPU time was: 00:00:00.06 + + + + + +=== DBI Started: WTP/WT_SELF_TEST.tab +Table created. +Table altered. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +Comment created. +=== DBI Completed at 2024-04-15T01:42:59 for a duration of 1.48 seconds (started at 2024-04-15T01:42:57) + + + + +=== DBI Started: WTP/WT_SELF_TEST.tabtrg +Trigger created. +Trigger altered. +=== DBI Completed at 2024-04-15T01:43:03 for a duration of .13 seconds (started at 2024-04-15T01:43:03) + + + + diff --git a/builds/OraEE213_AP212_ORDS222/wtptst/odbcapture_installation_logs.log b/builds/OraEE213_AP212_ORDS222/wtptst/odbcapture_installation_logs.log new file mode 100644 index 0000000..ae85622 --- /dev/null +++ b/builds/OraEE213_AP212_ORDS222/wtptst/odbcapture_installation_logs.log @@ -0,0 +1,52 @@ + +SQL*Loader: Release 21.0.0.0.0 - Production on Mon Apr 15 01:43:05 2024 +Version 21.3.0.0.0 + +Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. + +Control File: odbcapture_installation_logs.ctl +Data File: odbcapture_installation_logs.csv + Bad File: odbcapture_installation_logs.bad + Discard File: none specified + + (Allow all discards) + +Number to load: ALL +Number to skip: 0 +Errors allowed: 50 +Bind array: 250 rows, maximum of 1048576 bytes +Continuation: none specified +Path used: Conventional +Silent options: FEEDBACK +Table "ODBCAPTURE_INSTALLATION_LOGS", loaded from every logical record. +Insert option in effect for this table: APPEND + + Column Name Position Len Term Encl Datatype +------------------------------ ---------- ----- ---- ---- --------------------- +LOAD_DTM SYSDATE +INSTALL_TYPE FIRST 10 , O(") CHARACTER +FILE_NAME NEXT 512 , O(") CHARACTER +CONTENTS DERIVED * EOF CHARACTER + Dynamic LOBFILE. Filename in field FILE_NAME + + +Table "ODBCAPTURE_INSTALLATION_LOGS": + 4 Rows successfully loaded. + 0 Rows not loaded due to data errors. + 0 Rows not loaded because all WHEN clauses were failed. + 0 Rows not loaded because all fields were null. + + +Space allocated for bind array: 131500 bytes(250 rows) +Read buffer bytes: 1048576 + +Total logical records skipped: 0 +Total logical records read: 4 +Total logical records rejected: 0 +Total logical records discarded: 0 + +Run began on Mon Apr 15 01:43:05 2024 +Run ended on Mon Apr 15 01:43:05 2024 + +Elapsed time was: 00:00:00.38 +CPU time was: 00:00:00.04 diff --git a/builds/README.md b/builds/README.md new file mode 100644 index 0000000..189dc1c --- /dev/null +++ b/builds/README.md @@ -0,0 +1,62 @@ +## Build Scripts + +### Folder Descriptions + +File Name | Description +-----------------------|------------ +OraEE122_AP191_ORDS222 | Oracle 12.1 Enterprise Edition, APEX 19.1, ORDS 22.2 +OraXE184_AP191_ORDS222 | Oracle 18.4 Express Edition, APEX 19.1, ORDS 22.2 +OraEE193_AP212_ORDS222 | Oracle 19.3 Enterprise Edition, APEX 21.2, ORDS 22.2 +OraEE213_AP212_ORDS222 | Oracle 21.3 Enterprise Edition, APEX 21.2, ORDS 22.2 +OraXE213_AP212_ORDS222 | Oracle 21.3 Express Edition, APEX 21.2, ORDS 22.2 + +### Build Results Reporting Notes + +``` +

    This is a heading

    +

    This is a paragraph.

    +``` + +

    This is a heading

    +

    This is a paragraph.

    + +Create a build status HTML file and use "lframe" to publish it in the main README.md? + +https://www.w3schools.com/html/html_iframe.asp + +### Build Sequence + +builds/*/build.sh (To Be Run in Jenkins?) + +1. builds/*/build_initialize.sql + 1. builds/util/new_session.sql + 1. builds/util/create_pdb.sql +1. builds/*/build.sql + 1. builds/util/new_session.sql + 1. wtpsrc/install.sql +1. builds/*/build.sql + 1. builds/util/new_session.sql + 1. wtptst/install.sql +1. builds/pdb_test.sql + 1. builds/util/new_session.sql + 1. builds/util/run_all_wtplsql_tests.sql + 1. builds/util/timing_report.sql + 1. builds/util/JUnit_Test_DB_Build.sql +1. builds/gui_build.sh + 1. builds/util/new_session.sql - PDB SYSTEM + 1. builds/util/install_ords.sql - 2.22 + 1. builds/util/install_apex.sql - 2.12 + 1. apex/ODBCAPTURE_workspace.sql + 1. apex/f200.sql + 1. builds/util/timing_report.sql + 1. builds/util/JUnit_Test_DB_Build.sql +1. gui_test.sh + 1. *(Build/Deploy ORDS.war File)* + 1. Load/Run wtplsql Unit Testing +1. builds/*/build.sql + 1. builds/util/new_session.sql + 1. grbsrc/install.sql +1. builds/*/build.sql + 1. builds/util/new_session.sql + 1. wtpgrb/install.sql +1. builds/util/archive_pdb.sql diff --git a/builds/util/archive_pdb.sql b/builds/util/archive_pdb.sql new file mode 100644 index 0000000..135ef64 --- /dev/null +++ b/builds/util/archive_pdb.sql @@ -0,0 +1,49 @@ + +-- Unplug Pluggable Database +spool pdb_unplug.lst + +-- Variable Definitions +define DFILE_PREFIX = "/opt/OraEE213/oradata" +define CDB_SID = "EE213CDB" +define PDB_SID = "DEVPDB" +define DB_DOMAIN = "" +define SYS_PASS = "Orac13is#1" + +-- Derived Variables +define CDB_CONN = "//localhost:1521/&CDB_SID.&DB_DOMAIN." +define PDB_DFILES = "&DFILE_PREFIX./&CDB_SID./&PDB_SID." +define SYS_CRED = "SYS/&SYS_PASS." +define CDB_SYS = "&SYS_CRED.@&CDB_CONN. as sysdba" + +@new_connection.sql &CDB_SYS. + +alter pluggable database "&PDB_SID." close immediate; +alter pluggable database "&PDB_SID." unplug into '&PDB_DFILES./&PDB_SID..XML'; +drop pluggable database "&PDB_SID." keep datafiles; +spool off + +--prompt ============================================================ +--prompt Zipping Pluggable Database +-- Quote the echo so the "&" in CD_DFILE_LOC is not executed +-- +--host bash -c '(echo "Status of Mounted Files Systems"; df -k; echo "") &host_log.' +-- +--host bash -c '(echo "KBytes of Disk Usage in ${PWD}"; du -sk .; echo "") &host_log.' +--host bash -c '(echo "Files in ${PWD}"; ls -al; echo "") &host_log.' +-- +--host bash -c '(echo "KBytes of Disk Usage in &CD_DFILE_LOC."; &CD_DFILE_LOC. du -sk .; echo "") &host_log.' +--host bash -c '(echo "Files in &CD_DFILE_LOC."; &CD_DFILE_LOC. ls -al; echo "") &host_log.' +-- +--define extra_pdbzip_files = "Jenkinsfile.reduced autobuild/*.csv autobuild/*.lst autobuild/*.xml install/*/*.csv install/*/*/*.log" +--host bash -c '(echo \$ cd ..; echo \$ zip -q &SHARED_PATH./&PDB_SID._PDB.zip &extra_pdbzip_files.) &host_log.' +--host bash -c '(cd ..; zip -q &SHARED_PATH./&PDB_SID._PDB.zip &extra_pdbzip_files.) &host_log.' +--host bash -c '(ls -al &SHARED_PATH./&PDB_SID._PDB.zip; echo "") &host_log.' +-- +--host bash -c '(echo \$ &CD_DFILE_LOC. echo \$ zip -q &SHARED_PATH./&PDB_SID._PDB.zip) &host_log.' +--host bash -c '(&CD_DFILE_LOC. zip -q &SHARED_PATH./&PDB_SID._PDB.zip ./*) &host_log.' +--host bash -c '(ls -al &SHARED_PATH./&PDB_SID._PDB.zip; echo "") &host_log.' +-- +--host bash -c '(echo \$ &run_sudo rm -rf &DFILE_LOC.; &run_sudo rm -rf &DFILE_LOC.; echo "") &host_log.' + +prompt . +exit 0 diff --git a/builds/util/archive_pdb2.sql b/builds/util/archive_pdb2.sql new file mode 100644 index 0000000..045eeea --- /dev/null +++ b/builds/util/archive_pdb2.sql @@ -0,0 +1,50 @@ + +-- +-- Unplug Pluggable Database +-- +-- Variables: +-- SYS_LOGIN: Connect String for SYS in the Container Database +-- CDB_SID: Name of the Container Database +-- PDB_SID: Name of the Pluggable Database +-- + +spool archive_pdb.lst + +-- Variable Definitions +define PDB_DFILES = "/opt/OraEE213/oradata/&CDB_SID./&PDB_SID." +set define off +define host_log = ">> archive_pdb.lst 2>&1" +define extra_pdbzip_files = "*.csv *.lst *.xml */*.csv */*.log" +set define on + +@"../util/new_session.sql" "&SYS_LOGIN." "" "" + +alter pluggable database "&PDB_SID." close immediate; +alter pluggable database "&PDB_SID." unplug into '&PDB_SID..XML'; +drop pluggable database "&PDB_SID." keep datafiles; +spool off + +prompt ============================================================ +prompt Zipping Pluggable Database +-- Quote the echo so the "&" in PDB_DFILES is not executed + +host bash -c '(echo "Status of Mounted Files Systems"; df -k; echo "") &host_log.' + +host bash -c '(echo "KBytes of Disk Usage in ${PWD}"; du -sk .; echo "") &host_log.' +host bash -c '(echo "Files in ${PWD}"; ls -al; echo "") &host_log.' + +host bash -c '(echo "KBytes of Disk Usage in &PDB_DFILES."; cd &PDB_DFILES.; du -sk .; echo "") &host_log.' +host bash -c '(echo "Files in &PDB_DFILES."; cd &PDB_DFILES.; ls -al; echo "") &host_log.' + +host bash -c '(echo \$ zip -q &PDB_SID._PDB.zip &extra_pdbzip_files.) &host_log.' +host bash -c '(zip -q &PDB_SID._PDB.zip &extra_pdbzip_files.) &host_log.' +host bash -c '(ls -al &PDB_SID._PDB.zip; echo "") &host_log.' + +host bash -c '(echo \$ zip -q &PDB_SID._PDB.zip) &host_log.' +host bash -c '(zip -q &PDB_SID._PDB.zip &PDB_DFILES./*) &host_log.' +host bash -c '(ls -al &PDB_SID._PDB.zip; echo "") &host_log.' + +host bash -c '(echo \$ rm -rf &PDB_DFILES.; rm -rf &PDB_DFILES.; echo "") &host_log.' + +prompt . +exit 0 diff --git a/builds/util/build_functions.sh b/builds/util/build_functions.sh new file mode 100644 index 0000000..1d64bf6 --- /dev/null +++ b/builds/util/build_functions.sh @@ -0,0 +1,122 @@ + +# Source this file using '.' + +######################################## +function capture_version { + echo "" + echo "Capture Version" + # 'Branch main at f2c736d0cc6fd80d961414dcae37df2bed0d69e2 - https://github.com/DMSTEX/DMSTEX.git' + VERSION_NOTE="Branch $(git rev-parse --abbrev-ref HEAD 2>&1))" && + VERSION_NOTE="${VERSION_NOTE} at $(git rev-parse HEAD 2>&1)" && + VERSION_NOTE="${VERSION_NOTE} - $(git config --get remote.origin.url 2>&1)" + if [ $? = 0 ] + then + echo "${VERSION_NOTE}" > "version.txt" + else + echo "${VERSION}" > "version.txt" + fi + } + +######################################## +function build_init { + echo "" + echo "build_initialize.sql" + sqlplus /nolog "@build_initialize.sql" "${PDB_NAME}" "${CDB_SYS}" + retcd="${?}" + if [ "${retcd}" != "0" ] + then + echo "SQL*Plus returned ${retcd}. Aborting" + exit "${retcd}" + fi + } + +######################################## +function clear_log_files { + echo "" + echo "Clear old ${INSTALL_TYPE} logs" + rm -f "${INSTALL_TYPE}"/*.xml + rm -f "${INSTALL_TYPE}"/*.log + rm -f "${INSTALL_TYPE}"/*.bad + rm -f "${INSTALL_TYPE}"/*.dsc + rm -f "${INSTALL_TYPE}"/*/*.log + rm -f "${INSTALL_TYPE}"/*/*.bad + rm -f "${INSTALL_TYPE}"/*/*.dsc + } + +######################################## +function run_build { + INSTALL_TYPE="${1}" + echo "" + echo "Move to ../../${INSTALL_TYPE}" + cd "../../${INSTALL_TYPE}" + echo "" + echo "${BUTIL_PATH}/build.sql ${INSTALL_TYPE}" + sqlplus /nolog "@${BUTIL_PATH}/run_build.sql" "${BUTIL_PATH}" "${PDB_SYS}" "${PDB_SYSTEM}" "${USR_PASS}" "${INSTALL_TYPE}" "$(< version.txt)" + retcd="${?}" + if [ "${retcd}" != "0" ] + then + echo "SQL*Plus returned ${retcd}. Aborting" + exit "${retcd}" + fi + echo "" + echo "Move back to ${HOME_DIR}" + cd "${HOME_DIR}" + } + +######################################## +function setup_for_test { + echo "" + echo "Running ../util/setup_for_test.sql from ${PWD}" + sqlplus "${PDB_SYSTEM}" "@../util/setup_for_test.sql" + # Unit Testing Expects NO DB Links + #echo "Running ../util/setup_db_links.sql from ${PWD}" + #sqlplus "${PDB_WTP}" "@../util/setup_db_links.sql" + } + +######################################## +function run_core_test { + echo "" + echo "Running ../util/run_core_test.sql from ${PWD}" + sqlplus "${PDB_WTP}" "@../util/run_core_test.sql" + } + +######################################## +function run_junit_test { + echo "" + echo "Running ../util/run_junit_test.sql from ${PWD}" + sqlplus "${PDB_WTP}" "@../util/run_junit_test.sql" + } + +######################################## +function run_save_test { + echo "" + echo "Running ../util/run_save_test.sql from ${PWD}" + sqlplus "${PDB_WTP}" "@../util/run_save_test.sql" + } + +######################################## +function move_log_files { + echo "" + echo "Move Log Files to Build Folder" + echo "Move to ../../${INSTALL_TYPE}" + cd "../../${INSTALL_TYPE}" + mkdir -p "${BUILD_PATH}/${INSTALL_TYPE}" 2> /dev/null + ls *.xml *.log *.bad *.dsc 2>/dev/null | + while read FILE + do + mv -v "${FILE}" "${BUILD_PATH}/${INSTALL_TYPE}" + done + ls -F | grep '.*/$' | + while read DIR + do + mkdir -p "${BUILD_PATH}/${INSTALL_TYPE}/${DIR}" 2> /dev/null + ls "${DIR}"*.log "${DIR}"*.bad "${DIR}"*.dsc 2> /dev/null | + while read FILE + do + mv -v "${FILE}" "${BUILD_PATH}/${INSTALL_TYPE}/${DIR}" + done + done + echo "" + echo "Move back to ${HOME_DIR}" + cd "${HOME_DIR}" + } diff --git a/builds/util/create_pdb.sql b/builds/util/create_pdb.sql new file mode 100644 index 0000000..64fc464 --- /dev/null +++ b/builds/util/create_pdb.sql @@ -0,0 +1,71 @@ + +-- +-- Pluggable Database Build Script for Local Environment +-- +-- Command Line Parameters: +-- -) 1: CPDB_PDB_SID - Database SID for the new pluggable database. +-- + +define CPDB_PDB_SID="&1." + +---------------------------------------- +--prompt Show Parameters +--show parameters + +---------------------------------------- +prompt +prompt Show PDBs +show pdbs + +---------------------------------------- +prompt +prompt Create PDB +declare + database_name varchar2(128); + users_datafile varchar2(256); + procedure run_stxt (in_stxt in varchar2) is + begin + dbms_output.put_line(in_stxt || ';'); + execute immediate in_stxt; + end run_stxt; +begin + select name + into database_name + from v$database; + select replace(min(file_name), database_name, database_name || '/&CPDB_PDB_SID.') + into users_datafile + from dba_data_files + where tablespace_name = 'USERS'; + for buff in (select name from v$pdbs where name = '&CPDB_PDB_SID.') + loop + begin + run_stxt('ALTER PLUGGABLE DATABASE "' || buff.name || '" CLOSE IMMEDIATE INSTANCES=ALL'); + exception when others then + dbms_output.put_line(SQLERRM); + end; + run_stxt('DROP PLUGGABLE DATABASE "' || buff.name || '" INCLUDING DATAFILES'); + end loop; + run_stxt('create pluggable database "&CPDB_PDB_SID."' || CHR(10) || + ' admin user "PDB_ADMIN" identified by "PDB_ADMIN_Password"' || CHR(10) || + ' default tablespace users datafile ''' || users_datafile || ''' size 5M autoextend on' || CHR(10) || + ' FILE_NAME_CONVERT = (''pdbseed'', ''&CPDB_PDB_SID.'')' || CHR(10) || + ' STORAGE UNLIMITED TEMPFILE REUSE'); +end; +/ + +------------------------- +prompt +prompt Open PDB +alter pluggable database "&CPDB_PDB_SID." open; + +---------------------------------------- +prompt +prompt Show Services +select name from v$services; + +---------------------------------------- +prompt +prompt Update DEFAULT Profile +alter session set container = "&CPDB_PDB_SID."; +alter profile "DEFAULT" limit password_life_time unlimited; +alter session set container = "CDB$ROOT"; diff --git a/builds/util/new_session.sql b/builds/util/new_session.sql new file mode 100644 index 0000000..663b213 --- /dev/null +++ b/builds/util/new_session.sql @@ -0,0 +1,27 @@ + +-- +-- New Oracle Database Session +-- +-- Parameters +-- 1 - Connection String. Ex. username/password@//host:port/pdb.domain +-- + +---------------------------------------- +prompt +prompt New Session +connect &1. + +---------------------------------------- +prompt +prompt Reset Output Connections +execute DBMS_JAVA.SET_OUTPUT(1000000); +set serveroutput on size unlimited format wrapped +execute DBMS_OUTPUT.ENABLE(NULL); + +---------------------------------------- +prompt +prompt Show Database Connection +select 'db: ' || name || + ', con: ' || sys_context('USERENV', 'CON_NAME') || + ', tstmp: ' || systimestamp + from v$database; diff --git a/builds/util/pdb_test.sql b/builds/util/pdb_test.sql new file mode 100644 index 0000000..73d9af9 --- /dev/null +++ b/builds/util/pdb_test.sql @@ -0,0 +1,69 @@ + +---------------------------------------- +-- Generate Dynamic Test Data + +set termout on +prompt Generate Dynamic Test Data... +set termout off +@new_connection_reset.sql &PDB_SYS. + +@"&INSTALL_PATH./tdat_gen/install.sql" "&INSTALL_PATH./tdat_gen" "&PDB_SYSTEM." + +---------------------------------------- +set termout on +prompt Run all wtPLSQL Unit Tests... +set termout off +@new_connection.sql WTP/WTP@&PDB_CONN. + +@run_all_wtplsql_tests.sql + +@timing_report.sql 'Testing of Unit' + +---------------------------------------- +-- Show the Services for this PDB +select name from v$services; + +---------------------------------------- +-- Setup for Reports +connect &PDB_SYSTEM. +set serveroutput on size unlimited format wrapped +execute DBMS_OUTPUT.ENABLE(NULL); +select 'db: ' || name || + ', con: ' || sys_context('USERENV', 'CON_NAME') || + ', tstmp: ' || systimestamp + from v$database; +set linesize 2499 +set trimspool on +set echo off +set verify off +set feedback off + +spool off + +---------------------------------------- +set termout on +prompt Reporting Unit Test Results... +set serveroutput on size unlimited format wrapped +execute DBMS_OUTPUT.ENABLE(NULL); +set linesize 2499 +set trimspool on +set echo off +set verify off +set feedback off +set termout off + +spool JUnit_Report_All.xml + +begin + wtp.junit_report_all; +end; +/ + +spool off +set termout on + +---------------------------------------- +-- Done with Reports +set linesize 80 +set verify on +set feedback on diff --git a/builds/util/run_build.sql b/builds/util/run_build.sql new file mode 100644 index 0000000..9604dd1 --- /dev/null +++ b/builds/util/run_build.sql @@ -0,0 +1,54 @@ + +-- +-- Data Build Script +-- +-- Command Line Parameters: +-- 1 - BUTIL_PATH: Path to Build Utility Scripts +-- 2 - PDB_SYS: Connect String for SYS in the Pluggable Database +-- 3 - PDB_SYSTEM: Connect String for SYSTEM in the Pluggable Database +-- 4 - PDB_PASSKEY: Part of the User/Schema Password Authentication +-- 5 - INSTALL_TYPE: Installation Type +-- 6 - APP_VERSION: Version for this application installation +-- + +WHENEVER SQLERROR EXIT SQL.SQLCODE +WHENEVER OSERROR EXIT + +define BUTIL_PATH="&1." +define PDB_SYS="&2." +define PDB_SYSTEM="&3." +define PDB_PASSKEY="&4." +define INSTALL_TYPE="&5." +define APP_VERSION="&6." + +set linesize 2499 +set trimspool on +set termout on +set verify off +set echo off +set timing on +@"&BUTIL_PATH./new_session.sql" "&PDB_SYS." "" "" +set timing off +@"install.sql" "&PDB_SYSTEM." "" "" + +begin + if '&INSTALL_TYPE.' like 'wtp%' + then + insert into WTP.wt_versions (component, version, action) + values ('&INSTALL_TYPE.', '&APP_VERSION.', 'INSTALL'); + commit; + end if; +end; +/ + +set linesize 123 +set trimspool on +set termout on +set verify off +set echo off +set timing on +@"&BUTIL_PATH./new_session.sql" "&PDB_SYSTEM." "" "" +set timing off +@"set_user_authentication.sql" "&PDB_PASSKEY." "" "" + +exit diff --git a/builds/util/run_core_test.sql b/builds/util/run_core_test.sql new file mode 100644 index 0000000..3347fae --- /dev/null +++ b/builds/util/run_core_test.sql @@ -0,0 +1,45 @@ + +-- +-- Run Core Unit Test +-- +-- Should be run as WTP Schema/User after installation +-- + +---------------------------------------- +prompt +prompt Setup for Unit Tests. +set termout on +execute DBMS_JAVA.SET_OUTPUT(1000000); +set serveroutput on size unlimited format wrapped +execute DBMS_OUTPUT.ENABLE(NULL); +set linesize 2499 +set trimspool on +set echo off + +---------------------------------------- +-- Should be default Installation Settings +--prompt +--prompt Initialize Hooks. +--execute wt_test_run.delete_hooks; +--execute junit_core_report.delete_hooks; +--execute wt_core_report.insert_hooks; + +---------------------------------------- +prompt +prompt Run Unit Test and Report. +set verify off +set feedback off +set termout off +spool wt_core_report_dbms_out.log +execute wtplsql.test_all; +spool off +set termout on +set feedback on +set verify on + +---------------------------------------- +prompt +prompt Done with Unit Tests. +set linesize 80 + +EXIT diff --git a/builds/util/run_junit_test.sql b/builds/util/run_junit_test.sql new file mode 100644 index 0000000..497376c --- /dev/null +++ b/builds/util/run_junit_test.sql @@ -0,0 +1,44 @@ + +-- +-- Run Unit Tests with JUnit Report +-- +-- Should be run as WTP Schema/User after run_core_test.sql +-- + +---------------------------------------- +prompt +prompt Setup for Unit Tests. +set termout on +execute DBMS_JAVA.SET_OUTPUT(1000000); +set serveroutput on size unlimited format wrapped +execute DBMS_OUTPUT.ENABLE(NULL); +set linesize 2499 +set trimspool on +set echo off + +---------------------------------------- +prompt +prompt Initialize Hooks. +execute wt_core_report.delete_hooks; +execute wt_test_run.delete_hooks; +execute junit_core_report.insert_hooks; + +---------------------------------------- +prompt +prompt Run and Report Unit Tests. +set verify off +set feedback off +set termout off +spool junit_core_report_show_current.xml +execute wtplsql.test_all; +spool off +set termout on +set feedback on +set verify on + +---------------------------------------- +prompt +prompt Done with Reports +set linesize 80 + +EXIT diff --git a/builds/util/run_save_test.sql b/builds/util/run_save_test.sql new file mode 100644 index 0000000..9db424e --- /dev/null +++ b/builds/util/run_save_test.sql @@ -0,0 +1,56 @@ + +-- +-- Run Unit Test with Peristence +-- + +---------------------------------------- +prompt +prompt Reporting Unit Test Results... +set termout on +execute DBMS_JAVA.SET_OUTPUT(1000000); +set serveroutput on size unlimited format wrapped +execute DBMS_OUTPUT.ENABLE(NULL); +set linesize 2499 +set trimspool on +set echo off + +---------------------------------------- +prompt +prompt Initialize Hooks. +execute wt_core_report.delete_hooks; +execute junit_core_report.delete_hooks; +execute wt_test_run.insert_hooks; + +---------------------------------------- +prompt +prompt Run Unit Tests and Report. +set verify off +set feedback off +set termout off +spool wt_persist_report_dbms_out.log +execute wtplsql.test_all; +execute wt_persist_report.dbms_out(in_detail_level => 10); +spool off +set termout on +set feedback on +set verify on + +---------------------------------------- +prompt +prompt JUnit Report Unit Tests. +set verify off +set feedback off +set termout off +spool junit_xml_persist_all.xml +execute junit_xml_persist_all; +spool off +set termout on +set feedback on +set verify on + +---------------------------------------- +prompt +prompt Done with Reports +set linesize 80 + +EXIT diff --git a/builds/util/setup_db_links.sql b/builds/util/setup_db_links.sql new file mode 100644 index 0000000..7e50377 --- /dev/null +++ b/builds/util/setup_db_links.sql @@ -0,0 +1,47 @@ + +-- +-- Setup Datbase Linkgs for Unit Testing +-- +-- Run as WTP Schema/User +-- + +set serveroutput on size unlimited format wrapped + +---------------------------------------- +prompt +prompt Recreate Database Links +declare + procedure run_sql (in_sql in varchar2) is + -- ORA-02024: database link not found + no_db_link exception; + pragma exception_init(no_db_link, -02024); + begin + dbms_output.put_line(in_sql); + execute immediate in_sql; + exception + when no_db_link then + null; -- Ignore this errror; + when others then + dbms_output.put_line(SQLERRM || CHR(10)); + end run_sql; +begin + -- Test every Schema Owner in the Database + for buff in (select proc.owner TEST_OWNER + from dba_procedures proc + where proc.procedure_name = 'WTPLSQL_RUN' + and proc.object_type = 'PACKAGE' + group by proc.owner + order by proc.owner ) + loop + run_sql('alter session set current_schema = "' || buff.TEST_OWNER || '"'); + run_sql('drop database link "' || buff.TEST_OWNER || '"'); + run_sql('create database link "' || buff.TEST_OWNER || + '" connect to "' || buff.TEST_OWNER || + '" identified by "' || buff.TEST_OWNER || + '" using ''//localhost:1521/' || SYS_CONTEXT('USERENV','SERVICE_NAME') || ''''); + end loop; + run_sql('alter session set current_schema = "' || USER || '"'); +end; +/ + +exit diff --git a/builds/util/setup_for_test.sql b/builds/util/setup_for_test.sql new file mode 100644 index 0000000..3b1a6b7 --- /dev/null +++ b/builds/util/setup_for_test.sql @@ -0,0 +1,99 @@ + +-- +-- Setup for Unit Testing +-- +-- Run as SYS or SYSTEM +-- + +set serveroutput on size unlimited format wrapped + +---------------------------------------- +prompt +prompt Show the Services for this PDB +select name from v$services; +prompt Using the following service at localhost:1521 +execute dbms_output.put_line(SYS_CONTEXT('USERENV','SERVICE_NAME')); + +---------------------------------------- +prompt +prompt Update PLSQL_CCFLAGS parameter +declare + parm_value v$parameter.value%TYPE; + function update_parm_value + (parm_val_in in varchar2 + ,attribute_in in varchar2 + ,value_in in varchar2) + return varchar2 + is + parm_len number; + attr_pos number; + comma_pos number; + begin + parm_len := length(parm_val_in); + if parm_len = 0 + then + -- "parm_val_in" is empty + return attribute_in || ':' || value_in; + end if; + attr_pos := instr(parm_val_in, attribute_in, 1); + if attr_pos = 0 + then + -- "parm_val_in" does not include our attribute + return attribute_in || ':' || value_in || ', ' || parm_val_in; + end if; + comma_pos := instr(parm_val_in, ',', attr_pos); + if comma_pos = 0 + then + -- "parm_val_in" includes our attribute, but no following "comma" + return substr(parm_val_in, 1, attr_pos - 1) || + attribute_in || ':' || value_in; + end if; + -- "parm_val_in" includes our attribute with a following "comma" + return substr(parm_val_in, 1, attr_pos - 1) || + attribute_in || ':' || value_in || + substr(parm_val_in, comma_pos, parm_len); + end update_parm_value; +begin + select p.value + into parm_value + from dual d + left join v$parameter p + on d.dummy = 'X' + where name in 'plsql_ccflags'; + dbms_output.put_line('OLD parm_value: ' || parm_value); + parm_value := update_parm_value(parm_value, 'WTPLSQL_SELFTEST', 'TRUE'); + --parm_value := update_parm_value(parm_value, 'WTPLSQL_ENABLE' , 'TRUE'); + dbms_output.put_line('NEW parm_value: ' || parm_value); + execute immediate 'alter system set PLSQL_CCFLAGS = ''' || + parm_value || ''' scope=BOTH'; +end; +/ + +---------------------------------------- +prompt +prompt Recompile All Packages +declare + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql); + execute immediate in_sql; + exception when others then + dbms_output.put_line(SQLERRM); + dbms_output.put_line('----------------------------------------'); + end run_sql; +begin + for buff in (select obj.object_type, obj.owner, obj.object_name + from dba_objects obj + join dba_users usr + on usr.username = obj.owner + and ( obj.oracle_maintained is null + OR obj.oracle_maintained != 'Y') + where obj.object_type in ('FUNCTION','PACKAGE','PROCEDURE','LIBRARY','TYPE','TRIGGER','VIEW')) + loop + run_sql('alter ' || buff.object_type || ' "' || + buff.owner || '"."' || + buff.object_name || '" compile' ); + end loop; +end; +/ + +exit diff --git a/builds/util/update_nonid_sequences.sql b/builds/util/update_nonid_sequences.sql new file mode 100644 index 0000000..0b08798 --- /dev/null +++ b/builds/util/update_nonid_sequences.sql @@ -0,0 +1,54 @@ + +-- +-- Update Non-Identity SEQUENCES +-- +-- Command Line Parmeters +-- 1 - Table Owner +-- 2 - Table Name +-- 3 - Table Column Name +-- 4 - Sequence Name +-- 5 - Sequence Owner (optional) +-- + +declare + UNDEFINED_SEQUENCE EXCEPTION; -- sequence not yet defined in this session + PRAGMA EXCEPTION_INIT (UNDEFINED_SEQUENCE, -8002); + l_tab_owner varchar2(256) := '&1.'; + l_tab_name varchar2(256) := '&2.'; + l_tab_column varchar2(256) := '&3.'; + l_seq_name varchar2(256) := '&4.'; + l_seq_owner varchar2(256) := nvl('&5.', '&1.'); + l_last_seq number; + l_max_val number; + sql_txt varchar2(4000); +begin + -- Find the Current Sequence Value + sql_txt := 'select "' || l_seq_owner || '"."' || l_seq_name || '".currval from dual'; + begin + execute immediate sql_txt into l_last_seq; + exception when UNDEFINED_SEQUENCE + then + -- Find the Last Number for the Sequence + select last_number into l_last_seq + from dba_sequences + where sequence_owner = l_seq_owner + and sequence_name = l_seq_name; + end; + -- Find the maximum IDENTITY column value + sql_txt := 'select max("' || l_tab_column || '") from "' || l_tab_owner || '"."' || l_tab_name || '"'; + execute immediate sql_txt into l_max_val; + -- Display values found + dbms_output.put_line(l_seq_owner || '.' || l_seq_name || ' Last Sequence: ' || l_last_seq || + ', ' || l_tab_owner || '.' || l_tab_name || '.max(' || l_tab_column || '): ' || l_max_val); + if l_last_seq < l_max_val + then + -- Increment the sequence as necessary + sql_txt := 'begin' || + ' while "' || l_seq_owner || '"."' || l_seq_name || '".nextval < ' || l_max_val || + ' loop null; end loop;' || + 'end;'; + dbms_output.put_line(sql_txt); + execute immediate sql_txt;-- using l_last_seq; + end if; +end; +/ diff --git a/conv/README.md b/conv/README.md new file mode 100644 index 0000000..677bef6 --- /dev/null +++ b/conv/README.md @@ -0,0 +1,14 @@ +# wtPLSQL Conversion Scripts README + +File Name | Description +-----------------------|------------ +wtplsql_conversion.sql | PL/SQL block that adds Runner Entry Point to packages + + + +### Install Procedure + + + +### UnInstall Procedure + diff --git a/conv/utplsql_to_wtplsql.sql b/conv/utplsql_to_wtplsql.sql new file mode 100644 index 0000000..ae073b0 --- /dev/null +++ b/conv/utplsql_to_wtplsql.sql @@ -0,0 +1,202 @@ +declare + invalid_sql_statment EXCEPTION; + PRAGMA EXCEPTION_INIT(invalid_sql_statment, -900); + src_clob CLOB; + tmp_clob CLOB; + end_ptr number; + end_str varchar2(32767); + -- Big Put Line, because DBMS_OUTPUT.PUT_LINE can't + procedure big_put_line + is + max_len number := 32767; -- Max Line Length + ptr number := 1; -- Current Position in IN_TXT + oset number; -- Offset from PTR to a LF + safety number := 1; -- Number of iterations + begin + while length(substr(src_clob, ptr)) > max_len + loop + -- Try to find a Line Feed at the sweet spot + oset := instr(substr(src_clob, ptr, max_len),CHR(10),-1); + --dbms_output.put_line('safety: ' || safety || + -- ', ptr: ' || ptr || + -- ', oset: ' || oset ); + if oset <= 0 + then + raise_application_error(-20000, 'Unknown OSET returned from INSTR: ' || OSET); + end if; + -- Output the next segment and move ptr + dbms_output.put_line(substr(src_clob, ptr, oset-1)); + ptr := ptr + oset; + safety := safety + 1; + if safety >= 100000 + then + raise_application_error(-20000, 'Safety exceeded '); + end if; + end loop; + dbms_output.put_line(substr(src_clob, ptr)); + dbms_output.put_line('/' || CHR(10) || '----------'); + end big_put_line; + function find_end_ptr (in_type in varchar2) + return number + is + orig_end_ptr number; + new_end_ptr number; + old1_end_ptr number; + old2_end_ptr number; + begin_ptr number; + begin + orig_end_ptr := 17; -- "CREATE PROCEDURE " is 17 characters + new_end_ptr := orig_end_ptr; + old1_end_ptr := orig_end_ptr + 1; + -- Adjust for smaller source + while new_end_ptr > 0 + loop + old2_end_ptr := old1_end_ptr; + old1_end_ptr := new_end_ptr + 1; + new_end_ptr := regexp_instr(tmp_clob -- Source Char + ,'[[:space:]]' || -- Find a space character (includes LF), + 'end' || -- followed by the string "end", + '[^;]*' || -- followed by zero or more non-semi-colon characters, + '[;]' -- followed by a semi-colon. + ,old1_end_ptr -- Position + ,1 -- Occurrence + ,0 -- Return Option + ,'i' -- Match Parameter + ,0 -- Sub Expr + ); + end loop; + if old2_end_ptr > orig_end_ptr + 1 + and in_type = 'PACKAGE BODY' + then + -- A package body with a possible "initialization part" + begin_ptr := regexp_instr(tmp_clob -- Source Char + ,'[[:space:]]' || -- Find a space character (includes LF), + 'begin' || -- followed by the string "begin", + '[[:space:]]' -- followed by a space character (includes LF), + ,old2_end_ptr -- Position + ,1 -- Occurrence + ,0 -- Return Option + ,'i' -- Match Parameter + ,0 -- Sub Expr + ); + else + begin_ptr := 0; + end if; + if begin_ptr > 0 + then + -- Found an initialization part, start before it + return begin_ptr; + else + -- No initialization part, start before the last END + return old1_end_ptr; + end if; + end find_end_ptr; + function get_procedures + (in_owner in varchar2 + ,in_name in varchar2) + return varchar2 + is + ret_str varchar2(32767); + add_teardown boolean; + begin + for proc_buff in ( + select procedure_name + from dba_procedures + where owner = in_owner + and object_name = in_name + and object_type = 'PACKAGE' + and procedure_name is not null + and procedure_name like 'ZTST\_%' escape '\' + order by procedure_name ) + loop + case proc_buff.procedure_name + when 'ZTST_SETUP' + then + ret_str := ' wt_assert.g_testcase := ''' || proc_buff.object_name || + '_ZTST_TEARDOWN'';' || CHR(10) || + ' ZTST_TEARDOWN;' || CHR(10) || + CHR(10) || + ret_str ; + when 'ZTST_TEARDOWN' + then + add_teardown := TRUE; + else + ret_str := ret_str || + ' ' || 'wt_assert.g_testcase := ' || + substr(proc_buff.procedure_name,1,50) || + ';' || CHR(10) || + ' ' || proc_buff.procedure_name || + ';' || CHR(10) || + CHR(10) ; + end case; + end loop; + if add_teardown + then + ret_str := ret_str || + ' wt_assert.g_testcase := ''' || proc_buff.object_name || + '_ZTST_TEARDOWN'';' || CHR(10) || + ' ZTST_TEARDOWN;' || CHR(10) || + CHR(10) ; + end if; + return ret_str; + end get_procedures; +begin + for obj_rec in ( + select object_type, owner, object_name + from dba_objects obj + where object_name like 'ZTST\_%' escape '\' + and object_name not like '%\_DATA' escape '\' + and object_type in ('PACKAGE', 'PACKAGE BODY') + and owner = :SCHEMA_NAME + and owner not in ('SYS','UTP') + and not exists (select 'x' + from wt_qual_test_runners_vw src + where src.owner = obj.owner + and src.package_name = obj.object_name ) + order by object_type desc, owner, object_name ) + -- Package Bodies before Package Specifications + loop + src_clob := dbms_metadata.get_ddl(object_type => case obj_rec.object_type + when 'PACKAGE' then 'PACKAGE_SPEC' + when 'PACKAGE BODY' then 'PACKAGE_BODY' + else obj_rec.object_type + end + ,name => obj_rec.object_name + ,schema => obj_rec.owner); + tmp_clob := regexp_replace(src_clob, '\r$', ''); + end_ptr := find_end_ptr(obj_rec.object_type); + end_str := substr(tmp_clob, end_ptr); + case obj_rec.object_type + when 'PACKAGE' + then + src_clob := substr(tmp_clob, 1, end_ptr-1) || CHR(10) || + ' procedure ' || wtplsql.C_RUNNER_ENTRY_POINT || ';' || + CHR(10) || + CHR(10) || + end_str; + when 'PACKAGE BODY' + then + src_clob := substr(tmp_clob, 1, end_ptr-1) || CHR(10) || + 'procedure ' || wtplsql.C_RUNNER_ENTRY_POINT || + ' is begin' || CHR(10) || + get_procedures(obj_rec.owner, obj_rec.object_name) || + 'end ' || wtplsql.C_RUNNER_ENTRY_POINT || ';' || + CHR(10) || + CHR(10) || + end_str; + else + raise_application_error(-20000, 'Unknown Object Type: ' || + obj_rec.object_type) ; + end case; + dbms_output.put_line('Compiling ' || obj_rec.object_type || + ' ' || obj_rec.owner || + '.' || obj_rec.object_name ); + begin + execute immediate src_clob; + exception when invalid_sql_statment + then + big_put_line; + end; + end loop; +end; +/ diff --git a/src/demo/Package-Test.sql b/demo/Package-Test.sql similarity index 90% rename from src/demo/Package-Test.sql rename to demo/Package-Test.sql index 4cc35eb..07cd3bc 100644 --- a/src/demo/Package-Test.sql +++ b/demo/Package-Test.sql @@ -4,6 +4,7 @@ as procedure wtplsql_run; end test_dbms_output; / +show errors create or replace package body test_dbms_output as @@ -14,6 +15,7 @@ as end wtplsql_run; end test_dbms_output; / +show errors create or replace package body test_dbms_output as @@ -35,10 +37,19 @@ as end wtplsql_run; end test_dbms_output; / +show errors + +set serveroutput on size unlimited format truncated + +begin + wtp.junit_core_report.delete_hooks; + wtp.wt_test_run.delete_hooks; + wtp.wt_core_report.insert_hooks; +end; +/ begin wtplsql.test_run('TEST_DBMS_OUTPUT'); - wt_text_report.dbms_out(USER,'TEST_DBMS_OUTPUT',30); end; / @@ -63,16 +74,13 @@ as end wtplsql_run; end test_dbms_output; / +show errors begin wtplsql.test_run('TEST_DBMS_OUTPUT'); end; / - -begin - wt_text_report.dbms_out(USER,'TEST_DBMS_OUTPUT',30); -end; -/ +show errors create or replace package body test_dbms_output as @@ -123,21 +131,19 @@ as test_put_get_line; teardown; exception when others then - l_error_message := substr(dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace,1,4000); + l_error_message := substr(SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace + ,1,4000); teardown; raise_application_error(-20000, l_error_message); end wtplsql_run; -- end test_dbms_output; / +show errors begin wtplsql.test_run('TEST_DBMS_OUTPUT'); end; / - -begin - wt_text_report.dbms_out(USER,'TEST_DBMS_OUTPUT',30); -end; -/ +show errors diff --git a/demo/README.md b/demo/README.md new file mode 100644 index 0000000..0167e09 --- /dev/null +++ b/demo/README.md @@ -0,0 +1,34 @@ +# wtPLSQL Demp Scripts + +File Name | Description +-------------------------|------------ +common_setup.sql | Common Installation Settings +install.sql | Installation Script +installO.sql | Sample Installation Log +Package-Test.sql | Package Test Example +Table-Test.sql | Table Test Example +Test-Runner.sql | Test Runner Example +Trigger-Test.sql | Trigger Test Example +Type-Test.sql | Type Test Example +uninstall.sql | Uninstall Script +ut_betwnstr.sql | utPLSQL 2.3 ut_betwnstr Example +ut_calc_secs_between.sql | utPLSQL 2.3 ut_calc_secs_between Example +ut_str.sql | utPLSQL 2.3 ut_str Example +ut_truncit.sql | utPLSQL 2.3 ut_truncit Example + + +For more information, see https://ddieterich.github.io/wtPLSQL/demo/ + + +### Install Procedure + +1) sqlplus SYS/password as SYSDBA @install +2) exit +3) Compare install.LST to installO.LST + + +### UnInstall Procedure + +1) sqlplus SYS/password as SYSDBA @uninstall +2) exit +3) Compare uninstall.LST to uninstallO.LST diff --git a/src/demo/Table-Test.sql b/demo/Table-Test.sql similarity index 59% rename from src/demo/Table-Test.sql rename to demo/Table-Test.sql index ea01eee..822b484 100644 --- a/src/demo/Table-Test.sql +++ b/demo/Table-Test.sql @@ -14,6 +14,7 @@ as procedure wtplsql_run; end table_test_pkg; / +show errors create or replace package body table_test_pkg as @@ -33,17 +34,39 @@ as against_this_in => 'TEST1'); rollback; end t_happy_path_1; + procedure t_sad_path_1 + is + begin + wt_assert.g_testcase := 'Sad Path 1'; + wt_assert.raises ( + msg_in => 'Raise Error', + check_call_in => 'insert into table_test_tab (id, name) values (1, ''Test1'')', + against_exc_in => 'ORA-02290: check constraint (WTP_DEMO.TABLE_TEST_TAB_CK1) violated'); + end t_sad_path_1; procedure wtplsql_run is begin t_happy_path_1; + t_sad_path_1; end wtplsql_run; end table_test_pkg; / +show errors + +set serveroutput on size unlimited format truncated -set serveroutput on size unlimited format word_wrapped +begin + wtp.wt_test_run.delete_hooks; + wtp.junit_core_report.delete_hooks; + wtp.wt_core_report.insert_hooks; + update wtp.hooks + set run_string = 'begin wtp.wt_core_report.dbms_out(in_detail_level => 30); end;' + where hook_name = 'after_test_run' + and run_string = 'begin wtp.wt_core_report.dbms_out(in_detail_level => 10); end;'; + wtp.hook.init; +end; +/ begin wtplsql.test_run('TABLE_TEST_PKG'); - wt_text_report.dbms_out(USER,'TABLE_TEST_PKG',30); end; / diff --git a/src/demo/Test-Runner.sql b/demo/Test-Runner.sql similarity index 66% rename from src/demo/Test-Runner.sql rename to demo/Test-Runner.sql index 3d4568e..4074964 100644 --- a/src/demo/Test-Runner.sql +++ b/demo/Test-Runner.sql @@ -4,6 +4,7 @@ as procedure wtplsql_run; end simple_test_runner; / +show errors create or replace package body simple_test_runner as @@ -14,24 +15,27 @@ as end wtplsql_run; end simple_test_runner; / +show errors + +set serveroutput on size unlimited format truncated begin - wtplsql.test_run('SIMPLE_TEST_RUNNER'); + wtp.junit_core_report.delete_hooks; + wtp.wt_core_report.delete_hooks; + wtp.wt_test_run.insert_hooks; end; / -set serveroutput on size unlimited format word_wrapped - begin - wt_text_report.dbms_out(USER,'SIMPLE_TEST_RUNNER'); + wtplsql.test_run('SIMPLE_TEST_RUNNER'); + wtp.wt_persist_report.dbms_out(in_runner_name => 'SIMPLE_TEST_RUNNER'); end; / -set serveroutput on size unlimited format word_wrapped - begin - wt_text_report.dbms_out(in_runner_name => 'SIMPLE_TEST_RUNNER' - ,in_detail_level => 30); + wtp.wt_persist_report.dbms_out(in_runner_owner => USER + ,in_runner_name => 'SIMPLE_TEST_RUNNER' + ,in_detail_level => 30); end; / @@ -55,34 +59,37 @@ as end wtplsql_run; end simple_test_runner; / +show errors begin wtplsql.test_run('SIMPLE_TEST_RUNNER'); - wt_text_report.dbms_out(in_runner_name => 'SIMPLE_TEST_RUNNER' - ,in_detail_level => 30); + wtp.wt_persist_report.dbms_out(in_runner_owner => USER + ,in_runner_name => 'SIMPLE_TEST_RUNNER' + ,in_detail_level => 30); end; / create or replace package body simple_test_runner as - --% WTPLSQL SET DBOUT "SIMPLE_TEST_RUNNER:PACKAGE BODY" %-- procedure wtplsql_run is begin + wtplsql.g_DBOUT := 'SIMPLE_TEST_RUNNER:PACKAGE BODY'; wt_assert.eq(msg_in => 'Ad-Hoc Test' ,check_this_in => 1 ,against_this_in => '1'); end wtplsql_run; end simple_test_runner; / +show errors begin wtplsql.test_run('SIMPLE_TEST_RUNNER'); - wt_text_report.dbms_out(USER,'SIMPLE_TEST_RUNNER'); + wtp.wt_persist_report.dbms_out(in_runner_owner => USER + ,in_runner_name => 'SIMPLE_TEST_RUNNER'); end; / create or replace package body simple_test_runner as - --% WTPLSQL SET DBOUT "SIMPLE_TEST_RUNNER:PACKAGE BODY" %-- function add2 (in_val1 number, in_val2 number) return number is l_result number; begin @@ -90,6 +97,7 @@ as return l_result; end add2; procedure wtplsql_run is begin --%WTPLSQL_begin_ignore_lines%-- + wtplsql.g_DBOUT := 'SIMPLE_TEST_RUNNER:PACKAGE BODY'; wt_assert.g_testcase := 'My Test Case'; wt_assert.eq(msg_in => 'Ad-Hoc Test' ,check_this_in => add2(2, 3) @@ -97,9 +105,12 @@ as end wtplsql_run; --%WTPLSQL_end_ignore_lines%-- end simple_test_runner; / +show errors begin wtplsql.test_run('SIMPLE_TEST_RUNNER'); - wt_text_report.dbms_out(USER,'SIMPLE_TEST_RUNNER',30); + wtp.wt_persist_report.dbms_out(in_runner_owner => USER + ,in_runner_name => 'SIMPLE_TEST_RUNNER' + ,in_detail_level => 30); end; / diff --git a/src/demo/Trigger-Test.sql b/demo/Trigger-Test.sql similarity index 79% rename from src/demo/Trigger-Test.sql rename to demo/Trigger-Test.sql index 57d0799..378bccc 100644 --- a/src/demo/Trigger-Test.sql +++ b/demo/Trigger-Test.sql @@ -24,12 +24,14 @@ begin :new.created_dtm := sysdate; end; / +show errors create or replace package trigger_test_pkg authid definer as procedure wtplsql_run; end trigger_test_pkg; / +show errors create or replace package body trigger_test_pkg as @@ -53,19 +55,29 @@ as check_this_in => l_rec.created_dtm); rollback; end t_happy_path_1; - --% WTPLSQL SET DBOUT "TRIGGER_TEST_BIR:TRIGGER" %-- procedure wtplsql_run is begin + wtplsql.g_DBOUT := 'TRIGGER_TEST_BIR:TRIGGER'; t_happy_path_1; end wtplsql_run; end trigger_test_pkg; / +show errors -set serveroutput on size unlimited format word_wrapped +set serveroutput on size unlimited format truncated + +begin + wtp.junit_core_report.delete_hooks; + wtp.wt_core_report.delete_hooks; + wtp.wt_test_run.insert_hooks; +end; +/ begin wtplsql.test_run('TRIGGER_TEST_PKG'); - wt_text_report.dbms_out(USER,'TRIGGER_TEST_PKG',30); + wtp.wt_persist_report.dbms_out(in_runner_owner => USER + ,in_runner_name => 'TRIGGER_TEST_PKG' + ,in_detail_level => 30); end; / diff --git a/src/demo/Type-Test.sql b/demo/Type-Test.sql similarity index 80% rename from src/demo/Type-Test.sql rename to demo/Type-Test.sql index c5ad540..ba91884 100644 --- a/src/demo/Type-Test.sql +++ b/demo/Type-Test.sql @@ -11,6 +11,7 @@ create or replace type simple_test_obj_type authid definer ,in_observation number) ); / +show errors create or replace type body simple_test_obj_type is CONSTRUCTOR FUNCTION simple_test_obj_type @@ -34,16 +35,17 @@ create or replace type body simple_test_obj_type is end add_observation; end; / +show errors create or replace package test_simple_object authid definer as procedure wtplsql_run; end test_simple_object; / +show errors create or replace package body test_simple_object as - --% WTPLSQL SET DBOUT "SIMPLE_TEST_OBJ_TYPE:TYPE BODY" %-- procedure t_constructor is simple_test_obj simple_test_obj_type; @@ -59,15 +61,26 @@ as procedure wtplsql_run as begin + wtplsql.g_DBOUT := 'SIMPLE_TEST_OBJ_TYPE:TYPE BODY'; t_constructor; end wtplsql_run; end test_simple_object; / +show errors -set serveroutput on size unlimited format word_wrapped +set serveroutput on size unlimited format truncated + +begin + wtp.junit_core_report.delete_hooks; + wtp.wt_core_report.delete_hooks; + wtp.wt_test_run.insert_hooks; +end; +/ begin wtplsql.test_run('TEST_SIMPLE_OBJECT'); - wt_text_report.dbms_out(USER,'TEST_SIMPLE_OBJECT',30); + wtp.wt_persist_report.dbms_out(in_runner_owner => USER + ,in_runner_name => 'TEST_SIMPLE_OBJECT' + ,in_detail_level => 30); end; / diff --git a/demo/gilded_rose.sql b/demo/gilded_rose.sql new file mode 100644 index 0000000..46f8e02 --- /dev/null +++ b/demo/gilded_rose.sql @@ -0,0 +1,106 @@ + +-- +-- Here are the requirements for the GildedRose Code Kata: +-- 1) All items have a SellIn value which denotes the number of days we have to sell the item. +-- 2) All items have a Quality value which denotes how valuable the item is. +-- 3) At the end of each day our system lowers both values for every item. +-- 4) Once the sell by date has passed, Quality degrades twice as fast. +-- 5) The Quality of an item is never negative. +-- 6) "Aged Brie" actually increases in Quality the older it gets. +-- 7) The Quality of an item is never more than 50. +-- 8) "Sulfuras", being a legendary item, never has to be sold or decreases in Quality. +-- 9) "Backstage passes", like aged brie, increases in Quality as it's SellIn value approaches. +-- Quality increases by 2 when there are 10 days or less and by 3 when there are 5 days or less +-- but Quality drops to 0 after the concert. +-- 10) "Conjured" items degrade in Quality twice as fast as normal items. +-- +-- There are several kinds of requirements here. +-- -) 1 & 2 are Attributes. Everything has/is +-- -) 3, 4, 6, 8, 9, & 10 are processes. Always do, with exceptions. +-- -) 5 & 7 are corner cases, boundary conditions. +-- + +create table gilded_roses + (name varchar2(100) constraint gilded_roses_nn1 not null + ,sell_in number(6) constraint gilded_roses_nn2 not null + ,quality number(6) constraint gilded_roses_nn3 not null + ,reduce number(3) constraint gilded_roses_nn4 not null + ,reduce10 number(3) + ,reduce5 number(3) + ,constraint gilded_roses_ck1 check (quality between 0 and 50)); + +comment on column gilded_roses.name is 'Name of Item'; +comment on column gilded_roses.sell_in is 'Number of Days to Sell'; +comment on column gilded_roses.quality is 'Value of Quality'; +comment on column gilded_roses.reduce is 'Quality Reduction Per Day'; +comment on column gilded_roses.reduce10 is 'Quality Reduction Per Day with 10 days or less'; +comment on column gilded_roses.reduce5 is 'Quality Reduction Per Day with 5 days or less'; + +insert into gilded_roses values ('Aged Brie' , 0, 30, -1); +insert into gilded_roses values ('Sulfuras' , -1, 30, 0); +insert into gilded_roses values ('Backstage Pass', 30, 30, -1, -2, -3); +insert into gilded_roses values ('Conjured' , 30, 30, 2); +insert into gilded_roses values ('Normal' , 30, 30, 1); + +create or replace package gilded_rose + authid definer +as + + procedure end_of_day; + + $IF $$WTPLSQL_ENABLE + $THEN + procedure WTPLSQL_RUN; + $END + +end gilded_rose; +/ +show errors + + +create or replace package body gilded_rose +as + + +procedure end_of_day +is + TYPE gr_nt_type is table of gilded_roses%ROWTYPE; + gr_nt gr_nt_type; +begin + select * bulk collect into gr_nt + from gilded_roses + where sell_in >= 0; + for i in 1 .. gr_nt.COUNT + loop + if gr_nt(i).reduce5 is not null + AND sell_in <= 5 + then + elsif gr_nt(i).reduce5 is not null + AND sell_in <= 5 + then + else + gr_nt(i).sell_in := gr_nt(i).sell_in - 1; + if gr_nt(i).sell_in < 0 + then + gr_nt(i).quality := 0; + else + gr_nt(i).quality := gr_nt(i).quality - gr_nt(i).reduce; + end if; + end if; + if gr_nt(i).quality > 50 then gr_nt(i).quality := 50; end if; + if gr_nt(i).quality < 0 then gr_nt(i).quality := 0; end if; + end loop; +end end_of_day; + +$IF $$WTPLSQL_ENABLE +$THEN +procedure WTPLSQL_RUN +is +begin + utassert.g_testcase_name = ''; +end WTPLSQL_RUN; +$END + +end gilded_rose; +/ +show errors diff --git a/demo/install_sys.sql b/demo/install_sys.sql new file mode 100644 index 0000000..8a1cf39 --- /dev/null +++ b/demo/install_sys.sql @@ -0,0 +1,48 @@ + +-- +-- Demo Installation +-- + +-- Capture output +spool install_sys +set serveroutput on size unlimited format truncated + +WHENEVER SQLERROR exit SQL.SQLCODE + +begin + if USER not in ('SYS','SYSTEM') + then + raise_application_error (-20000, + 'Not logged in as SYS or SYSTEM'); + end if; +end; +/ + +WHENEVER SQLERROR continue + +prompt +prompt Create Demo owner + +create user WTP_DEMO identified by WTP_DEMO + default tablespace users + quota 1M on users + temporary tablespace temp; + +grant create session to WTP_DEMO; +grant create type to WTP_DEMO; +grant create sequence to WTP_DEMO; +grant create table to WTP_DEMO; +grant create trigger to WTP_DEMO; +grant create view to WTP_DEMO; +grant create procedure to WTP_DEMO; + +begin + $IF $$WTPLSQL_ENABLE + $THEN + dbms_output.put_line('WTPLSQL_ENABLE is TRUE'); + $END + dbms_output.put_line('Check WTPLSQL_ENABLE is Done.'); +end; +/ + +WHENEVER SQLERROR exit SQL.SQLCODE diff --git a/demo/uninstall.sql b/demo/uninstall.sql new file mode 100644 index 0000000..9bac0b3 --- /dev/null +++ b/demo/uninstall.sql @@ -0,0 +1,7 @@ + +spool uninstall +set serveroutput on size unlimited format truncated + +drop user WT_DEMO cascade; + +spool off diff --git a/src/demo/ut_betwnstr.sql b/demo/ut_betwnstr.sql similarity index 80% rename from src/demo/ut_betwnstr.sql rename to demo/ut_betwnstr.sql index a838ddf..f394c4d 100644 --- a/src/demo/ut_betwnstr.sql +++ b/demo/ut_betwnstr.sql @@ -16,6 +16,7 @@ BEGIN ); END; / +show errors CREATE OR REPLACE PACKAGE ut_betwnstr IS @@ -26,6 +27,7 @@ IS PROCEDURE wtplsql_run; END ut_betwnstr; / +show errors CREATE OR REPLACE PACKAGE BODY ut_betwnstr IS @@ -91,9 +93,9 @@ IS END ut_BETWNSTR; - --% WTPLSQL SET DBOUT "BETWNSTR:FUNCTION" %-- PROCEDURE wtPLSQL_run IS BEGIN + wtplsql.g_DBOUT := 'BETWNSTR:FUNCTION'; ut_setup; ut_betwnstr; ut_teardown; @@ -101,11 +103,21 @@ IS END ut_betwnstr; / +show errors -set serveroutput on size unlimited format word_wrapped +set serveroutput on size unlimited format truncated + +begin + wtp.junit_core_report.delete_hooks; + wtp.wt_core_report.delete_hooks; + wtp.wt_test_run.insert_hooks; +end; +/ begin wtplsql.test_run('UT_BETWNSTR'); - wt_text_report.dbms_out(USER,'UT_BETWNSTR',30); + wtp.wt_persist_report.dbms_out(in_runner_owner => USER + ,in_runner_name => 'UT_BETWNSTR' + ,in_detail_level => 30); end; / diff --git a/src/demo/ut_calc_secs_between.sql b/demo/ut_calc_secs_between.sql similarity index 76% rename from src/demo/ut_calc_secs_between.sql rename to demo/ut_calc_secs_between.sql index e98a414..7aa74f8 100644 --- a/src/demo/ut_calc_secs_between.sql +++ b/demo/ut_calc_secs_between.sql @@ -12,6 +12,7 @@ BEGIN secs := (date2 - date1) * 24 * 60 * 60; END; / +show errors CREATE OR REPLACE PACKAGE ut_calc_secs_between IS @@ -23,6 +24,7 @@ IS PROCEDURE wtplsql_run; END ut_calc_secs_between; / +show errors CREATE OR REPLACE PACKAGE BODY ut_calc_secs_between IS @@ -73,9 +75,9 @@ IS END ut_CALC_SECS_BETWEEN; - --% WTPLSQL SET DBOUT "CALC_SECS_BETWEEN:PROCEDURE" %-- PROCEDURE wtPLSQL_run IS BEGIN + wtplsql.g_DBOUT := 'CALC_SECS_BETWEEN:PROCEDURE'; ut_setup; ut_CALC_SECS_BETWEEN; ut_teardown; @@ -83,12 +85,21 @@ IS END ut_calc_secs_between; / +show errors -set serveroutput on size unlimited format word_wrapped +set serveroutput on size unlimited format truncated + +begin + wtp.junit_core_report.delete_hooks; + wtp.wt_core_report.delete_hooks; + wtp.wt_test_run.insert_hooks; +end; +/ begin wtplsql.test_run('UT_CALC_SECS_BETWEEN'); - wt_text_report.dbms_out(in_runner_name => 'UT_CALC_SECS_BETWEEN' - ,in_detail_level => 30); + wtp.wt_persist_report.dbms_out(in_runner_owner => USER + ,in_runner_name => 'UT_CALC_SECS_BETWEEN' + ,in_detail_level => 30); end; / diff --git a/src/demo/ut_str.sql b/demo/ut_str.sql similarity index 85% rename from src/demo/ut_str.sql rename to demo/ut_str.sql index 317564b..343c6ab 100644 --- a/src/demo/ut_str.sql +++ b/demo/ut_str.sql @@ -25,6 +25,7 @@ IS PROCEDURE wtplsql_run; END str; / +show errors /* Formatted on 2001/11/19 15:15 (Formatter Plus v4.5.2) */ CREATE OR REPLACE PACKAGE BODY str @@ -113,9 +114,9 @@ IS ); END; - --% WTPLSQL SET DBOUT "STR:PACKAGE BODY" %-- PROCEDURE wtplsql_run IS BEGIN + wtplsql.g_DBOUT := 'STR:PACKAGE BODY'; ut_setup; ut_betwn; ut_teardown; @@ -123,12 +124,21 @@ IS END str; / +show errors -set serveroutput on size unlimited format word_wrapped +set serveroutput on size unlimited format truncated + +begin + wtp.junit_core_report.delete_hooks; + wtp.wt_core_report.delete_hooks; + wtp.wt_test_run.insert_hooks; +end; +/ begin wtplsql.test_run('STR'); - wt_text_report.dbms_out(in_runner_name => 'STR' - ,in_detail_level => 30); + wtp.wt_persist_report.dbms_out(in_runner_owner => USER + ,in_runner_name => 'STR' + ,in_detail_level => 30); end; / diff --git a/src/demo/ut_truncit.sql b/demo/ut_truncit.sql similarity index 76% rename from src/demo/ut_truncit.sql rename to demo/ut_truncit.sql index 7addb6e..c85ad2a 100644 --- a/src/demo/ut_truncit.sql +++ b/demo/ut_truncit.sql @@ -9,6 +9,7 @@ BEGIN EXECUTE IMMEDIATE 'truncate table ' || NVL (sch, USER) || '.' || tab; END; / +show errors /*file tabcount.sf */ CREATE OR REPLACE FUNCTION tabcount ( @@ -28,6 +29,7 @@ EXCEPTION RETURN NULL; END; / +show errors CREATE OR REPLACE PACKAGE ut_truncit IS @@ -39,6 +41,7 @@ IS PROCEDURE wtplsql_run; END ut_truncit; / +show errors /*file ut_truncit.pkb */ CREATE OR REPLACE PACKAGE BODY ut_truncit @@ -73,22 +76,30 @@ IS ); END ut_TRUNCIT; - --% WTPLSQL SET DBOUT "TRUNCIT:PROCEDURE" %-- - PROCEDURE wtplsql_run IS BEGIN + wtplsql.g_DBOUT := 'TRUNCIT:PROCEDURE'; ut_setup; ut_TRUNCIT; ut_teardown; END wtplsql_run; END ut_truncit; / +show errors + +set serveroutput on size unlimited format truncated -set serveroutput on size unlimited format word_wrapped +begin + wtp.junit_core_report.delete_hooks; + wtp.wt_core_report.delete_hooks; + wtp.wt_test_run.insert_hooks; +end; +/ begin wtplsql.test_run('UT_TRUNCIT'); - wt_text_report.dbms_out(in_runner_name => 'UT_TRUNCIT' - ,in_detail_level => 30); + wtp.wt_persist_report.dbms_out(in_runner_owner => USER + ,in_runner_name => 'UT_TRUNCIT' + ,in_detail_level => 30); end; / diff --git a/diffs/README.md b/diffs/README.md new file mode 100644 index 0000000..d070326 --- /dev/null +++ b/diffs/README.md @@ -0,0 +1,11 @@ +# wtPLSQL Releases + +[wtPLSQL website (on GitHub.io)](https://ddieterich.github.io/wtPLSQL/) + + +### Files and Directories + +File Name | Description +----------|------------ +V1.1.0 | Directory of V1.1.0 Release Notes, Upgrades, and Downgrades +V1.2 | Directory of V1.2 Release Notes, Upgrades, and Downgrades diff --git a/diffs/V1.1.0/RELEASE_NOTES.md b/diffs/V1.1.0/RELEASE_NOTES.md new file mode 100644 index 0000000..1a4b210 --- /dev/null +++ b/diffs/V1.1.0/RELEASE_NOTES.md @@ -0,0 +1,88 @@ + +wtPLSQL 1.1.0 Release Notes: + +### New Features +* Added THROWS assertion. +* Fully implemented the utPLSQL V1 UT_ASSERT API for implemented assertions. +* Exceptions from "query" assertions are now handled. +* Streamlined WT_TEXT_REPORT output. +* Added WT_TEST_RUN_STATS and WT_TESTCASE_STATS summary tables. +* Added comments to DBMS_PROFILER tables. +* Changed ANNO annotation to IGNR in WT_DBOUT_PROFILES table. +* Added units to time columns in WT_DBOUT_PROFILES table. +* Improved robustness of WT_PROFILER package. +* Corrected problems with wtPLSQL non-owner testing. + +### Detailed Changes +* Permission Changes + * revoke connect, resource from &schema_owner.; + * revoke select, insert, delete on plsql_profiler_runs from public; + * revoke select, insert, delete on plsql_profiler_units from public; + * revoke select, insert, delete on plsql_profiler_data from public; + * revoke insert on wt_results from public; + * revoke insert on wt_dbout_profiles from public; + * revoke update on wt_dbout_profiles from public; + * alter user &schema_owner. quota unlimited on USERS; + * grant create session to &schema_owner.; + * grant create type to &schema_owner.; + * grant create sequence to &schema_owner.; + * grant create table to &schema_owner.; + * grant create trigger to &schema_owner.; + * grant create view to &schema_owner.; + * grant create procedure to &schema_owner.; + * grant select on dba_source to &schema_owner.; + * grant select on dba_objects to &schema_owner.; + * grant select on wt_test_runs_seq to public; + * grant execute on wtplsql to public; + * grant execute on wt_assert to public; + * grant execute on wt_text_report to public; +* Public Synonym Changes + * drop public synonym wt_not_executable; + * drop public synonym plsql_profiler_runs; + * drop public synonym plsql_profiler_units; + * drop public synonym plsql_profiler_data; + * drop public synonym wt_profiler; + * drop public synonym wt_result; + * create or replace public synonym utassert for &schema_owner..wt_assert; + * create or replace public synonym wt_version for &schema_owner..wt_version; + * create or replace public synonym wt_test_runs_seq for &schema_owner..wt_test_runs_seq; + * create or replace public synonym wt_test_run_stats for &schema_owner..wt_test_run_stats; + * create or replace public synonym wt_testcase_stats for &schema_owner..wt_testcase_stats; + * create or replace public synonym wt_self_test for &schema_owner..wt_self_test; + * grant select on plsql_profiler_runnumber to public; +* Add Profile Table Comments + * @proftab_comments.sql +* Table Changes + * drop table wt_test_data; + * wt_version.tab + * wt_testcase_stats.tab + * wt_test_run_stats.tab + * wt_self_test.tab + * wt_test_runs.tab + * @wt_results.tab + * alter table wt_results rename column elapsed_msecs to interval_msecs; + * comment on column wt_results.interval_msecs + * alter table wt_dbout_profiles rename column total_time to total_usecs; + * alter table wt_dbout_profiles rename column min_time to min_usecs; + * alter table wt_dbout_profiles rename column max_time to max_usecs; + * comment on column wt_dbout_profiles.status + * comment on column wt_dbout_profiles.total_usecs + * comment on column wt_dbout_profiles.min_usecs + * comment on column wt_dbout_profiles.max_usecs + * alter table wt_dbout_profiles drop constraint wt_dbout_profiles_ck1; + * update wt_dbout_profiles set status = 'IGNR' where status = 'ANNO'; + * alter table wt_dbout_profiles add constraint wt_dbout_profiles_ck1 check (status in ('EXEC','NOTX','EXCL','IGNR','UNKN')); + * update_all_stats.sql +* Packages + * wtplsql.pks + * wtplsql.pkb + * wt_result.pks + * wt_result.pkb + * wt_assert.pks + * wt_assert.pkb + * wt_profiler.pks + * wt_profiler.pkb + * wt_test_run_stat.pks + * wt_test_run_stat.pkb + * wt_text_report.pks + * wt_text_report.pkb diff --git a/src/core/downgrades/Current_to_V1.0.0/README.txt b/diffs/V1.1.0/downgrade_to_V1.0.0/README.md similarity index 61% rename from src/core/downgrades/Current_to_V1.0.0/README.txt rename to diffs/V1.1.0/downgrade_to_V1.0.0/README.md index 39c4d69..5424424 100644 --- a/src/core/downgrades/Current_to_V1.0.0/README.txt +++ b/diffs/V1.1.0/downgrade_to_V1.0.0/README.md @@ -1,2 +1,3 @@ +# V1.1.0 to V1.0.0 Downgrade ReadMe V1.0 of wtPLSQL was too flawed. No downgrade available. diff --git a/diffs/V1.1.0/upgrade_from_V1.0.0/README.md b/diffs/V1.1.0/upgrade_from_V1.0.0/README.md new file mode 100644 index 0000000..675d9cb --- /dev/null +++ b/diffs/V1.1.0/upgrade_from_V1.0.0/README.md @@ -0,0 +1,14 @@ +# V1.0.0 to V1.1.0 Upgrade ReadMe + +File Name | Description +---------------------|------------ +update_all_stats.sql | Populate the new STATS tables +upgrade.sql | Main upgrade script +upgradeO.LST | Example of successful results from Demo Installation + + +### Install Procedure + +1) sqlplus SYS/password as SYSDBA @upgrade +2) exit +3) Compare upgrade.LST to upgradeO.LST diff --git a/src/core/upgrades/V1.0.0_to_Current/update_all_stats.sql b/diffs/V1.1.0/upgrade_from_V1.0.0/update_all_stats.sql similarity index 92% rename from src/core/upgrades/V1.0.0_to_Current/update_all_stats.sql rename to diffs/V1.1.0/upgrade_from_V1.0.0/update_all_stats.sql index 6846aa9..57ead82 100644 --- a/src/core/upgrades/V1.0.0_to_Current/update_all_stats.sql +++ b/diffs/V1.1.0/upgrade_from_V1.0.0/update_all_stats.sql @@ -5,7 +5,7 @@ -- Compute and Add statistics to V1.1.0 "stats" tables -- -set serveroutput on size unlimited format wrapped +set serveroutput on size unlimited format truncated set linesize 1000 set trimspool on @@ -88,8 +88,9 @@ begin where test_run_id = buff.id; insert into wt_test_run_stats values test_run_stats_rec; exception when others then - dbms_output.put_line(dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace); + dbms_output.put_line(SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack); rollback; end; -- @@ -147,8 +148,9 @@ begin and testcase = buff.testcase; insert into wt_testcase_stats values testcase_stats_rec; exception when others then - dbms_output.put_line(dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace); + dbms_output.put_line(SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack); rollback; end; -- diff --git a/src/core/upgrades/V1.0.0_to_Current/upgrade.sql b/diffs/V1.1.0/upgrade_from_V1.0.0/upgrade.sql similarity index 99% rename from src/core/upgrades/V1.0.0_to_Current/upgrade.sql rename to diffs/V1.1.0/upgrade_from_V1.0.0/upgrade.sql index a6dcf1a..22ea202 100644 --- a/src/core/upgrades/V1.0.0_to_Current/upgrade.sql +++ b/diffs/V1.1.0/upgrade_from_V1.0.0/upgrade.sql @@ -11,7 +11,7 @@ set serveroutput on size unlimited format truncated set showmode off -- Shared Setup Script -@../../common_setup.sql +@../../../common_setup.sql WHENEVER SQLERROR exit SQL.SQLCODE diff --git a/src/core/upgrades/V1.0.0_to_Current/upgradeO.LST b/diffs/V1.1.0/upgrade_from_V1.0.0/upgradeO.LST similarity index 100% rename from src/core/upgrades/V1.0.0_to_Current/upgradeO.LST rename to diffs/V1.1.0/upgrade_from_V1.0.0/upgradeO.LST diff --git a/diffs/V1.2/RELEASE_NOTES.md b/diffs/V1.2/RELEASE_NOTES.md new file mode 100644 index 0000000..fa13c01 --- /dev/null +++ b/diffs/V1.2/RELEASE_NOTES.md @@ -0,0 +1,39 @@ + +wtPLSQL 1.2 Release Notes: + +Proposed V1.2 Release +* Hooks allow add-ons to attach to basic framework + * Move all reporting into hooks + * Move all persistence into hooks + * Move all code coverage into hooks. + * Brutally fast JUnit XML reporting +* GUI (Graphical Used Interface) using APEX (Application Express) + * Trend Analysis + * Launch Test Runners + * Test Case and Assertion Drill-Down + * Code Coverage Drill Down +* Travis-CI integration ?? + * New HTML file based reporting + +### Overview +* Assertion results are recorded in memory arrays by Core. +* Assertion results are stored in tables by Persist. +* Code coverage is included in Persist. +* There are 2 versions of JUnit XML reports, one each for Core and Persist. +* There are 2 versions of WT_TEXT_OUTPUT package, one each for Core and Persist. +* The GUI only works with Persist. Demo works with Core and Persist. +* Major Website Updates (docs directory) + +### New Features +* Add-ons have been implemented. The V1.2 source is now split into multiple directories. +* The HOOKS table can be used to implement add-ons. +* A comprehensive GUI has been implemented using Application Express. +* A utPLSQL conversion tool is available. +* The WT_VERIONS table has more detail for add-ons. +* New WT_QUAL_TEST_RUNNERS_VW to list packages that qualify as Test Runners. +* New WT_JOB package and WT_SCHEDULER_JOBS view for executing Test Runners in parallel. +* New TEST_RUNNERS table in Persist for increased normalization. +* Test yield from WT_TEXT_OUTPUT and GUI reports based on test cases instead of assertions. + +### Detailed Changes +* Too numerous to list diff --git a/diffs/V1.2/downgrade_to_V1.1.0/README.md b/diffs/V1.2/downgrade_to_V1.1.0/README.md new file mode 100644 index 0000000..0aeac11 --- /dev/null +++ b/diffs/V1.2/downgrade_to_V1.1.0/README.md @@ -0,0 +1,11 @@ +# V1.2.0 to V1.1.0 Downgrade ReadMe + +File Name | Description +---------------------|------------ + + +### Install Procedure + +1) sqlplus SYS/password as SYSDBA @upgrade +2) exit +3) Compare upgrade.LST to upgradeO.LST diff --git a/diffs/V1.2/upgrade_from_V1.1.0/README.md b/diffs/V1.2/upgrade_from_V1.1.0/README.md new file mode 100644 index 0000000..7d94d0d --- /dev/null +++ b/diffs/V1.2/upgrade_from_V1.1.0/README.md @@ -0,0 +1,11 @@ +# V1.1.0 to V1.2.0 Upgrade ReadMe + +File Name | Description +---------------------|------------ + + +### Install Procedure + +1) sqlplus SYS/password as SYSDBA @upgrade +2) exit +3) Compare upgrade.LST to upgradeO.LST diff --git a/docs/About-wtPLSQL.htm b/docs/About-wtPLSQL.htm index 072bffa..79554d4 100644 --- a/docs/About-wtPLSQL.htm +++ b/docs/About-wtPLSQL.htm @@ -9,14 +9,18 @@

    History

    utPLSQL V3 Website

    Background

    Because of his reputation with Oracle's PL/SQL, Steven Feuerstein's utPLSQL has been widely adopted. However, maintenance of the utPLSQL source code became a problem with the latest utPLSQL V2 releases. Inspection of the utPLSQL V2 source code revealed some very complex code pathways. Much of this resulted from the layering of the V1 API on top of the V2 implementation. There is no documentation on how the V1 layering was intended to work. There is no documentation on the overall design of the V2 implementation. There is no documentation on how to use the V2 API. (Kudos to @PaulWalkerUK for an amazing job of maintaining the V2 code set.) As a result, most all unit tests written with utPLSQL V2 use the V1 APIs.

    -

    The utPLSQL V3 project was started with a "clean sheet" approach. The project took a distinctly object oriented direction. This is apropos, given that Steven Feuerstein subtitles utPLSQL as "JUnit for PLSQL". The V3 project has also adopted other aspects of JUnit testing like annotations. It is a clever and useful approach and will be familiar to Java developers. @jgebal was part of the utPLSQL V3 development from the beginning and continues to provide excellent contributions and information for that project.

    -

    Before the "clean sheet" approach was adopted, the V3 team reviewed what has been published as the utPLSQL_Lite project. The utPSQL_Lite project was an effort to create a simplified utPLSQL core with the use of options/add-ons to achieve additional functionality.

    +

    The utPLSQL V3 project was started with a "clean sheet" approach. The project took a distinctly object oriented direction. This is apropos, given that Steven Feuerstein subtitles utPLSQL as "JUnit for PLSQL". The V3 project has also adopted other aspects of JUnit testing like annotations. It is a clever and useful approach and will be familiar to Java developers. @jgebal was part of the utPLSQL V3 development from the beginning and continues to provide excellent contributions and information for that project.

    +

    Before the "clean sheet" approach was adopted, the V3 team reviewed what has been published as the utPLSQL_Lite project. The utPSQL_Lite project was an effort to create a simplified utPLSQL core with the use of options/add-ons to achieve additional functionality.

    The wtPLSQL project is a continuation of the utPLSQL_Lite project.

    +

    What is wtPLSQL (Whitebox Testing PL/SQL)?

    +

    wtPLSQL helps with white-box testing of Oracle database objects. It is particularly well suited for unit testing and simple integration testing. It is written in PL/SQL. It contains a self-test which makes it easier to support and customize.

    +

    wtPLSQL provides a set of assertion tests that can be used to determine how well an Oracle database object is performing. These assertions record the outcome (success or failure) of each test. These assertions also record the time between calls. A test runner (PL/SQL package) must be created with these assertion tests included.

    +

    wtPLSQL implements the basic/core functionality of utPLSQL V2 while preserving the programming investment in the assertion API (utAssert.eq, utAssert.isnotnull, etc.). The additional functionality of utPLSQL V2 that is not included in the wtPLSQL core component will be achieved through add-ons.

    Goals

    This project focuses on providing a simple, yet robust, framework for dynamic, white box testing of Oracle Database Objects.

    Simple Framework

    Kent wants people to control their own environment, so he liked to have each team build the framework themselves

    -

    The wtPLSQL project is an attempt to allow PL/SQL developers to be PL/SQL developers. The test runners are entirely user-written in PL/SQL. The framework supplies resources for collecting and reporting information from those test runners. Through its simplified architecture and open source approach, extensions of the functionality are relatively easy.

    +

    The wtPLSQL project is an attempt to allow PL/SQL developers to be PL/SQL developers. The test runners are entirely user-written in PL/SQL. The framework supplies resources for collecting and reporting information from those test runners. Through its simplified architecture, configurable hooks, and open source approach, extensions of the functionality are relatively easy.

    Robust Framework

    Robustness is the ability of a computer system to cope with errors during execution

    The wtPLSQL framework includes provisions for the following errors during execution:

    @@ -32,7 +36,11 @@

    Dynamic Testing

    The wtPLSQL framework supports testing of source code during its execution. That is, the source code is executed during testing. It is not a static code analyzer or a guide for review meetings.

    White Box Testing

    Tests internal structures or workings of a program

    -

    The essence of white box testing is the careful testing of the application at the source code level to prevent any hidden errors later on. A key measure of completeness for this kind of testing is the code coverage of the test. A complete white box test will achieve 100% code coverage. This does not guarantee all aspects of the code have been tested, but it does ensure that all code pathways have been tested.

    +

    The essence of white box testing is the careful testing of the application at the source code level to prevent any hidden errors later on. A key measure of completeness for this kind of testing is the code coverage of the test. A complete white box test will achieve 100% code coverage (if the needed line feeds are in the PL/SQL source). This does not guarantee all aspects of the code have been tested but it does ensure that all code pathways have been tested (if the needed line feeds are in the PL/SQL source).

    +

    An important part of establishing code coverage is identifying what code is being tested. The Persist add-on uses a DBOUT (DataBase Object Under Test) to identify the code being tested. Upon identifying the DBOUT, code coverage information can be gathered and reported.

    +

    Support for various Testing Levels

    +

    Broadly speaking, there are at least three levels of testing: unit testing, integration testing, and system testing.

    +

    wtPLSQL is useful for all levels of testing. White box testing is especially useful for testing at the unit level. The flexibility of a Test Runner package is useful for testing at the integration and system levels.

    An important part of establishing code coverage is identifying what code is being tested. The wtPLSQL framework uses a DBOUT (DataBase Object Under Test) to identify the code being tested. Upon identifying the DBOUT, the framework can gather and report information regarding code coverage.

    Oracle Database Objects

    Some of the (database) objects that schemas can contain are Packages, Procedures, Functions, Triggers, and Views.

    @@ -76,6 +84,6 @@

    Test Fixtures and Test Suites

    Test fixtures and test suites are a part of the xUnit testing framework. At the core, wtPLSQL does not include test fixtures or test suites. If needed, these can be easily defined and implemented in a test runner package.

    Test Driven Development

    With TDD (Test Driven Development), you write a test before you write just enough production code to fulfill that test

    -

    The wtPLSQL framework is not intended for Test Driven Development. 100% code coverage is not desirable under the TDD approach. Test isolation and test transience are welcomed mechanisms to assist in getting tests to pass quickly in TDD. The wtPLSQL framework embraces 100% code coverage and does not require test isolation or test transience.

    +

    The wtPLSQL framework is not intended for Test Driven Development. The wtPLSQL framework embraces 100% code coverage and does not require test isolation or test transience.


    Website Home Page

    diff --git a/docs/About-wtPLSQL.md b/docs/About-wtPLSQL.md index 30d7344..36e641f 100644 --- a/docs/About-wtPLSQL.md +++ b/docs/About-wtPLSQL.md @@ -23,13 +23,21 @@ Before the "clean sheet" approach was adopted, the V3 team reviewed what has bee The wtPLSQL project is a continuation of the utPLSQL_Lite project. +## What is wtPLSQL (Whitebox Testing PL/SQL)? + +wtPLSQL helps with white-box testing of Oracle database objects. It is particularly well suited for unit testing and simple integration testing. It is written in PL/SQL. It contains a self-test which makes it easier to support and customize. + +wtPLSQL provides a set of assertion tests that can be used to determine how well an Oracle database object is performing. These assertions record the outcome (success or failure) of each test. These assertions also record the time between calls. A test runner (PL/SQL package) must be created with these assertion tests included. + +wtPLSQL implements the basic/core functionality of utPLSQL V2 while preserving the programming investment in the assertion API (utAssert.eq, utAssert.isnotnull, etc.). The additional functionality of utPLSQL V2 that is not included in the wtPLSQL core component will be achieved through add-ons. + ## Goals This project focuses on providing a **simple**, yet **robust**, framework for **dynamic**, **white box** testing of **Oracle Database Objects**. ### Simple Framework [Kent wants people to control their own environment, so he liked to have each team build the framework themselves](https://martinfowler.com/bliki/Xunit.html) -The wtPLSQL project is an attempt to allow PL/SQL developers to be PL/SQL developers. The test runners are entirely user-written in PL/SQL. The framework supplies resources for collecting and reporting information from those test runners. Through its simplified architecture and open source approach, extensions of the functionality are relatively easy. +The wtPLSQL project is an attempt to allow PL/SQL developers to be PL/SQL developers. The test runners are entirely user-written in PL/SQL. The framework supplies resources for collecting and reporting information from those test runners. Through its simplified architecture, configurable hooks, and open source approach, extensions of the functionality are relatively easy. ### Robust Framework [Robustness is the ability of a computer system to cope with errors during execution](https://en.wikipedia.org/wiki/Robustness_(computer_science)) @@ -49,7 +57,15 @@ The wtPLSQL framework supports testing of source code during its execution. Tha ### White Box Testing [Tests internal structures or workings of a program](https://en.wikipedia.org/wiki/Software_testing#White-box_testing) -The [essence of white box testing](https://en.wikipedia.org/wiki/White-box_testing#Overview) is the careful testing of the application at the source code level to prevent any hidden errors later on. A key measure of completeness for this kind of testing is the [code coverage](https://en.wikipedia.org/wiki/Code_coverage) of the test. A complete white box test will achieve 100% code coverage. This does not guarantee all aspects of the code have been tested, but it does ensure that all code pathways have been tested. +The [essence of white box testing](https://en.wikipedia.org/wiki/White-box_testing#Overview) is the careful testing of the application at the source code level to prevent any hidden errors later on. A key measure of completeness for this kind of testing is the [code coverage](https://en.wikipedia.org/wiki/Code_coverage) of the test. A complete white box test will achieve 100% code coverage (*if the needed line feeds are in the PL/SQL source*). This does not guarantee all aspects of the code have been tested but it does ensure that all code pathways have been tested (*if the needed line feeds are in the PL/SQL source*). + +An important part of establishing code coverage is identifying what code is being tested. The Persist add-on uses a DBOUT (DataBase Object Under Test) to identify the code being tested. Upon identifying the DBOUT, code coverage information can be gathered and reported. + +### Support for various Testing Levels + +[Broadly speaking, there are at least three levels of testing: unit testing, integration testing, and system testing.](https://en.wikipedia.org/wiki/Software_testing#Testing_levels) + +wtPLSQL is useful for all levels of testing. White box testing is especially useful for testing at the unit level. The flexibility of a Test Runner package is useful for testing at the integration and system levels. An important part of establishing code coverage is identifying what code is being tested. The wtPLSQL framework uses a DBOUT (DataBase Object Under Test) to identify the code being tested. Upon identifying the DBOUT, the framework can gather and report information regarding code coverage. diff --git a/docs/Best-Practices.htm b/docs/Best-Practices.htm index 3099d5c..347c73a 100644 --- a/docs/Best-Practices.htm +++ b/docs/Best-Practices.htm @@ -1,18 +1,15 @@

    Website Home Page

    Best Practices


    -

    Place the "WTPLSQL_RUN" procedure at the end of the package body. This allows the procedure call any procedure/function in the package.

    -

    Place the "--% WTPLSQL SET DBOUT" annotation next to the WTPLSQL_RUN procedure definition in the package body.

    -
       procedure WTPLSQL_RUN  --% WTPLSQL SET DBOUT "MY_PACKAGE" %--
    -   is
    -
    -

    Separate "setup" and "teardown" steps into their own Test Cases.**

    -

    Use words consistently in Test Case names.

    +

    Place the "WTPLSQL_RUN" procedure at the end of the package body. This allows the WTPLSQL_RUN procedure to call any procedure/function in the package.

    +

    Set the package variable "wtplsql.g_DBOUT" at the top of the WTPLSQL_RUN procedure definition in the package body. This is a common location for all Test Runner packages.

    +

    Separate "setup" and "teardown" subroutines into their own Test Cases.

    +

    Name Test Cases Consistently

      -
    • Use the word "Setup" in Test Case names perform setup operations.
    • -
    • Use the word "Teardown" in Test Case names that perform tear-down operations.
    • -
    • Use the words "Happy Path" in Test Case names that perform "happy path" tests.
    • -
    • Use the words "Sad Path" in Test Case names that perform "sad path" tests. +
    • Use the word "Setup" in Test Case names that perform setup operations.
    • +
    • Use the word "Teardown" in Test Case names that perform tear-down operations.
    • +
    • Use the words "Happy Path" in Test Case names that perform "happy path" tests.
    • +
    • Use the words "Sad Path" in Test Case names that perform "sad path" tests.
      • expected failure testing.
      • fault insertion testing.
      • @@ -24,27 +21,30 @@

        Best Practices

      • Longest and shortest values
      • All combinations of default and non-default values
      -

      Create test procedures for each procedure/function in a DBOUT PACKAGE BODY.

      +

      Create individual test procedures for each procedure/function in a DBOUT package.

      • Call all test procedures from the WTPLSQL_RUN procedure.
      • Embed the test procedure just after the procedure/function it tests.
      • -
      • Use a consistent prefix on all test procedure names, like "t_".
      • +
      • Use a consistent prefix on all test procedure names, like "t_".
      -

      Use conditional compilation select directive "WTPLSQL_ENABLE" in the Oracle database initialization parameter "PLSQL_CCFLAGS" to enable and disable embedded test code in all PACKAGE BODYs.

      +

      Use conditional compilation select directive "WTPLSQL_ENABLE" in the Oracle database initialization parameter "PLSQL_CCFLAGS" to enable and disable embedded test code in all PACKAGE BODYs.

        -
      • "WTPLSQL_ENABLE:TRUE" will enable test code.
      • -
      • "WTPLSQL_ENABLE:FALSE" will disable test code.
      • +
      • "WTPLSQL_ENABLE:TRUE" will enable test code.
      • +
      • "WTPLSQL_ENABLE:FALSE" will disable test code.
      -

      Use consistent begin and end test code markers for embedded tests. These examples will setup conditional compiling and annotate lines of code to be excluded from code coverage calculations.

      -
      $IF $$WTPLSQL_ENABLE  -------%WTPLSQL_begin_ignore_lines%-------
      -$THEN
      - ...
      -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
      +

      Use consistent begin and end test markers for embedded tests. These examples will setup conditional compiling and annotate lines of code to be excluded from code coverage calculations.

      +

      Here is an example "begin test marker".

      +
         $IF $$WTPLSQL_ENABLE  -------%WTPLSQL_begin_ignore_lines%-------
      +   $THEN
      +
      +

      Here is an example "end test marker".

      +
         $END  ----------------%WTPLSQL_end_ignore_lines%----------------
       
      -

      Keep embedded test code indented between the test code markers

      -

      Add WTPLSQL markers every 10 lines or less in an embedded procedure. This helps identify a long embedded test procedure while scrolling through source code. When in doubt, add more of these.

      +

      Indent embedded test code between the test code markers

      +

      Add test markers every 10 lines or less. This helps identify a long embedded test procedure while scrolling through source code. When in doubt, add more of these.

      +

      Here is an example test marker.

         --------------------------------------  WTPLSQL Testing --
       
      -

      Check and/or set NLS settings before testing. Many data types are implicitly converted to VARCHAR2 before comparison. The "wtplsql" package includes functions to check and set NLS settings. Note: Modifying these settings always includes a COMMIT.

      +

      Check and/or set NLS settings before testing. Many data types are implicitly converted to VARCHAR2 before comparison. The "wtplsql" package includes functions to check and set NLS settings. Note: Modifying these settings always includes a COMMIT.


      Website Home Page

      diff --git a/docs/Best-Practices.md b/docs/Best-Practices.md index 7979017..be6026b 100644 --- a/docs/Best-Practices.md +++ b/docs/Best-Practices.md @@ -3,19 +3,14 @@ # Best Practices --- -Place the **"WTPLSQL_RUN" procedure at the end of the package body.** This allows the procedure call any procedure/function in the package. +Place the **"WTPLSQL_RUN" procedure at the end** of the package body. This allows the WTPLSQL_RUN procedure to call any procedure/function in the package. -Place the **"--% WTPLSQL SET DBOUT" annotation next to the WTPLSQL_RUN procedure** definition in the package body. +Set the package variable **"wtplsql.g_DBOUT" at the top** of the WTPLSQL_RUN procedure definition in the package body. This is a common location for all Test Runner packages. -``` - procedure WTPLSQL_RUN --% WTPLSQL SET DBOUT "MY_PACKAGE" %-- - is -``` - -**Separate "setup" and "teardown" steps** into their own Test Cases.** +**Separate "setup" and "teardown"** subroutines into their own Test Cases. -**Use words consistently in Test Case names.** -* Use the word "Setup" in Test Case names perform setup operations. +**Name Test Cases Consistently** +* Use the word "Setup" in Test Case names that perform setup operations. * Use the word "Teardown" in Test Case names that perform tear-down operations. * Use the words "Happy Path" in Test Case names that perform "happy path" tests. * Use the words "Sad Path" in Test Case names that perform "sad path" tests. @@ -27,7 +22,7 @@ Place the **"--% WTPLSQL SET DBOUT" annotation next to the WTPLSQL_RUN procedure * Longest and shortest values * All combinations of default and non-default values -**Create test procedures for each procedure/function** in a DBOUT PACKAGE BODY. +Create **individual test procedures for each procedure/function** in a DBOUT package. * Call all test procedures from the WTPLSQL_RUN procedure. * Embed the test procedure just after the procedure/function it tests. * Use a consistent prefix on all test procedure names, like "t_". @@ -36,24 +31,32 @@ Place the **"--% WTPLSQL SET DBOUT" annotation next to the WTPLSQL_RUN procedure * "WTPLSQL_ENABLE:TRUE" will enable test code. * "WTPLSQL_ENABLE:FALSE" will disable test code. -**Use consistent begin and end test code markers** for embedded tests. These examples will setup conditional compiling and annotate lines of code to be excluded from code coverage calculations. +**Use consistent begin and end test markers** for embedded tests. These examples will setup conditional compiling and annotate lines of code to be excluded from code coverage calculations. + +Here is an example "begin test marker". ``` -$IF $$WTPLSQL_ENABLE -------%WTPLSQL_begin_ignore_lines%------- -$THEN - ... -$END ----------------%WTPLSQL_end_ignore_lines%---------------- + $IF $$WTPLSQL_ENABLE -------%WTPLSQL_begin_ignore_lines%------- + $THEN ``` -**Keep embedded test code indented** between the test code markers +Here is an example "end test marker". + +``` + $END ----------------%WTPLSQL_end_ignore_lines%---------------- +``` + +**Indent embedded test code** between the test code markers + +**Add test markers** every 10 lines or less. This helps identify a long embedded test procedure while scrolling through source code. When in doubt, add more of these. -**Add WTPLSQL markers every 10 lines or less** in an embedded procedure. This helps identify a long embedded test procedure while scrolling through source code. When in doubt, add more of these. +Here is an example test marker. ``` -------------------------------------- WTPLSQL Testing -- ``` -**Check and/or set NLS settings before testing.** Many data types are implicitly converted to VARCHAR2 before comparison. The "wtplsql" package includes functions to check and set NLS settings. Note: Modifying these settings always includes a COMMIT. +**Check and/or set NLS settings** before testing. Many data types are implicitly converted to VARCHAR2 before comparison. The "wtplsql" package includes functions to check and set NLS settings. Note: Modifying these settings always includes a COMMIT. --- [Website Home Page](README.md) diff --git a/docs/Conversion-Component.htm b/docs/Conversion-Component.htm new file mode 100644 index 0000000..ddbab6e --- /dev/null +++ b/docs/Conversion-Component.htm @@ -0,0 +1,6 @@ +

      Website Home Page

      +

      wtPLSQL Conversion Component

      +
      +

      See the README.md file in the src/conversion directory for installation instructions.

      +
      +

      Website Home Page

      diff --git a/docs/Conversion-Component.md b/docs/Conversion-Component.md new file mode 100644 index 0000000..fdf8907 --- /dev/null +++ b/docs/Conversion-Component.md @@ -0,0 +1,10 @@ +[Website Home Page](README.md) + +# wtPLSQL Conversion Component + +--- + +See the README.md file in the src/conversion directory for installation instructions. + +--- +[Website Home Page](README.md) diff --git a/docs/Core-Component.htm b/docs/Core-Component.htm new file mode 100644 index 0000000..e9da793 --- /dev/null +++ b/docs/Core-Component.htm @@ -0,0 +1,77 @@ +

      Website Home Page

      +

      wtPLSQL Core Component

      +
      +

      Overview

      +

      The Core component is built to be very small and very fast. It has 5 packages, 3 tables, 1 view, and 1 procedure. During execution of a Test Runner, it stores all assertion results in memory. It can be run without any add-ons. It is the backbone of the wtPLSQL whitebox testing server.

      +

      Assertion Storage

      +

      The core component stores all assertion results in the CORE_DATA package. Previous assertion results are erased before the execution of the next Test Runner. The average assertion record is about 256 bytes. 4,000 assertion results will require about a Megabyte of memory. Detailed results from the last assertion are also available as global variables in the CORE_DATA package.

      +

      Assertions

      +

      The WT_ASSERT package contains the assertion API. There are 10 basic assertions.

      +
        +
      • eq
      • +
      • isnotnull
      • +
      • isnull
      • +
      • raises
      • +
      • eqqueryvalue
      • +
      • eqquery
      • +
      • eqtable
      • +
      • eqtabcount
      • +
      • objexists
      • +
      • objnotexists
      • +
      +

      The WT_ASSERT package includes an internal self-test. The following data types are tested in this self-test.

      +
        +
      • varchar2
      • +
      • nvarchar2
      • +
      • clob
      • +
      • nclob
      • +
      • number
      • +
      • pls_integer
      • +
      • boolean
      • +
      • date
      • +
      • timestamp
      • +
      • timestamp with local time zone
      • +
      • timestamp with time zone
      • +
      • interval day to second
      • +
      • interval year to month
      • +
      • xmltype
      • +
      • long
      • +
      • raw
      • +
      • long raw
      • +
      • blob
      • +
      • rowid
      • +
      +

      Assertion Reporting

      +

      The WT_TEST_REPORT package is provided for reporting assertion results from a Test Runner. The package has several settings to vary the levels of detail. All output goes to DBMS_OUTPUT. See the WT_TEST_REPORT package specification for details.

      +

      Without any add-ons, the Core package automatically writes test results to the DBMS_OUTPUT buffer. This behavior can be changed by modifying the records in the HOOKS table. The Persist add-on removes this behavior during installation.

      +

      Ad-hoc assertions (executed outside a Test Runner) always report results to DBMS_OUTPUT.

      +

      Hooks

      +

      The HOOKS table provides a mechanism for add-ons and customization. The table makes various execution points available via unnamed PL/SQL blocks. The following execution points are available in HOOKS.

      +
        +
      • Before test_all
      • +
      • Before test_run
      • +
      • Execute Test Runner
      • +
      • After Assertion
      • +
      • After test_run
      • +
      • After test_all
      • +
      • Ad Hoc Report
      • +
      +

      Important Note:

      +

      No Test Runner will be executed if there is no "execute_test_runner" hook in the HOOKS table.

      + + + + + + + + + + + + + +
      hook_namerun_string
      execute_test_runnerbegin wt_execute_test_runner; end;
      +

      See the README.md file in the src/core directory for installation instructions.

      +
      +

      Website Home Page

      diff --git a/docs/Core-Component.md b/docs/Core-Component.md new file mode 100644 index 0000000..a4ed65d --- /dev/null +++ b/docs/Core-Component.md @@ -0,0 +1,73 @@ +[Website Home Page](README.md) + +# wtPLSQL Core Component + +--- +### Overview +The Core component is built to be very small and very fast. It has 5 packages, 3 tables, 1 view, and 1 procedure. During execution of a Test Runner, it stores all assertion results in memory. It can be run without any add-ons. It is the backbone of the wtPLSQL whitebox testing server. + +### Assertion Storage +The core component stores all assertion results in the CORE_DATA package. Previous assertion results are erased before the execution of the next Test Runner. The average assertion record is about 256 bytes. 4,000 assertion results will require about a Megabyte of memory. Detailed results from the last assertion are also available as global variables in the CORE_DATA package. + +### Assertions +The WT_ASSERT package contains the assertion API. There are 10 basic assertions. + * eq + * isnotnull + * isnull + * raises + * eqqueryvalue + * eqquery + * eqtable + * eqtabcount + * objexists + * objnotexists + +The WT_ASSERT package includes an internal self-test. The following data types are tested in this self-test. + * varchar2 + * nvarchar2 + * clob + * nclob + * number + * pls_integer + * boolean + * date + * timestamp + * timestamp with local time zone + * timestamp with time zone + * interval day to second + * interval year to month + * xmltype + * long + * raw + * long raw + * blob + * rowid + +### Assertion Reporting +The WT_TEST_REPORT package is provided for reporting assertion results from a Test Runner. The package has several settings to vary the levels of detail. All output goes to DBMS_OUTPUT. See the WT_TEST_REPORT package specification for details. + +Without any add-ons, the Core package automatically writes test results to the DBMS_OUTPUT buffer. This behavior can be changed by modifying the records in the HOOKS table. The Persist add-on removes this behavior during installation. + +Ad-hoc assertions (executed outside a Test Runner) always report results to DBMS_OUTPUT. + +### Hooks +The HOOKS table provides a mechanism for add-ons and customization. The table makes various execution points available via unnamed PL/SQL blocks. The following execution points are available in HOOKS. + * Before test_all + * Before test_run + * Execute Test Runner + * After Assertion + * After test_run + * After test_all + * Ad Hoc Report + +### Important Note: +No Test Runner will be executed if there is no "execute_test_runner" hook in the HOOKS table. + +hook_name | run_string +--------------------|----------- +execute_test_runner | begin wt_execute_test_runner; end; + +See the README.md file in the src/core directory for installation instructions. + +--- +[Website Home Page](README.md) diff --git a/docs/Core-Features.htm b/docs/Core-Features.htm index 20c044e..ec19562 100644 --- a/docs/Core-Features.htm +++ b/docs/Core-Features.htm @@ -10,30 +10,24 @@

      Test Anything in the Oracle databa
    • Table Constraints and Triggers
    • Types and Type Bodies
    -

    Built-in Code Coverage

    -

    The Database Object Under Test, or DBOUT, is a database object that is the target of the test runner package. An annotation is used to identify the DBOUT in a test runner package. If the DBOUT annotation is missing from a test runner package, no code coverage data is collected. If more than one annotation occurs in a test runner package, the first occurrence in the source code is used.

    -

    Regular Expression:

    -
        --% WTPLSQL SET DBOUT "[[:alnum:]._$#]+" %--
    -
    -

    Example:

    -
        --% WTPLSQL SET DBOUT "SCHEMA.TEST_ME" %--
    -
    -

    "Ignore" annotations are used to indicate source code lines to ignore when calculating code coverage metrics.

    +

    Plug-in Code Coverage

    +

    The Database Object Under Test, or DBOUT, is a database object that is the target of the test runner package. A global variable "g_DBOUT" in the "wtplsql" package is used to identify the DBOUT. If the not set by the test runner package, no code coverage data is collected. If more than one value of "g_DBOUT" is set by a test runner package, the last setting is used.

    +

    "Ignore" annotations are used to indicate which source code lines will be ignored when calculating code coverage metrics.

    Regular Expression:

        --%WTPLSQL_(begin|end)_ignore_lines%--
     

    Example:

        --%WTPLSQL_begin_ignore_lines%--
     
    -

    Occasionally, DBMS_PROFILER does not capture the execution of some PL/SQL source. Examples PL/SQL source that are reported incorrectly include "end if", "select", and "return". wtPLSQL excludes some of these source lines when calculating code coverage metrics. Use the "Ignore" annotations to ignore other lines of PL/SQL when calculating code coverage metrics.

    +

    Occasionally, DBMS_PROFILER does not capture the execution of some PL/SQL source. Examples PL/SQL source that are reported incorrectly include "end if", "select", and "return". wtPLSQL excludes some of these source lines when calculating code coverage metrics. Use the "Ignore" annotations to ignore other lines of PL/SQL when calculating code coverage metrics.

    Built-in Schema-wide Testing

    -

    wtPLSQL will locate and execute all test runner packages in a schema. This is done by finding all packages with a WTPLSQL_RUN procedure that has no parameters. There is no requirement to pre-define the test runners in a schema.

    +

    wtPLSQL will locate and execute all test runner packages in a schema. This is done by finding all packages with a WTPLSQL_RUN procedure that has no parameters. There is no other requirement to predefine test runners in a schema.

    Test Result Capture

    Test results from assertions executed in a test runner package are automatically captured in WTPLSQL database tables. Results are stored by test runner execution. If specified in the test runner, test results are stored by test case. If a DBOUT is specified in the test runner, code coverage data is also stored. All captured data is automatically deleted except for the last 20 runs of any test runner.

    Test Result Reporting

    Reporting of the assertion test results is not a included with the execution of the test runner package(s). Some other mechanism, like the reporting package, must be used to display the assertion test results. This allows the following choices during test execution:

      -
    • Run the WT_TEXT_REPORT.DBMS_OUT Report - This is the default Reporting Package to report test results using DBMS_OUTPUT. Several parameter options are available to change level of detail and report sequencing.
    • +
    • Run the WT_CORE_REPORT.DBMS_OUT Report - This is the default Reporting Package to report test results using DBMS_OUTPUT. Several parameter options are available to change level of detail and report sequencing.
    • Run an Add-On Reporting Package - Bespoke reporting packages can be created or downloaded to provide for the exact requirements of test result reporting.
    • Copy Test Results - Create or download bespoke storage and reporting systems that copy the test result data from the WTPLSQL database tables for more complex test result reporting.
    • No Action - Test results remain in the WTPLSQL database tables until they are automatically deleted.
    • @@ -41,17 +35,17 @@

      Test Result Reporting

      Stand Alone Assertion Execution

      In utPLSQL V2, executing an assertion outside of the test execution procedure produced an error message. wtPLSQL allows a single assertion can be executed outside of the WTPLSQL.test_run procedure. The results of the assertion will be output to DBMS_OUTPUT. The result is the same when executing a WTPLSQL_RUN procedure in a test runner package.

      Private Procedure Testing within a Package

      -

      One of the difficult parts of testing a package is testing the private "internals" within the package. With wtPLSQL, the test runner procedure (WTPLSQL_RUN) can be included, or embedded, in the package that is being testing. In this way, the test runner has full access to all internal procedures and variables. It also keeps the package and the test together. The test runner can be "hidden" in the production deployment by using the "PLSQL_CCFLAGS" conditional compilation select directives. If the directive is missing, FALSE is assumed:

      +

      One of the difficult parts of testing a package is testing the private "internals" within the package. With wtPLSQL, the test runner procedure (WTPLSQL_RUN) can be included, or embedded, in the package that is being testing. In this way, the test runner has full access to all internal procedures and variables. It also keeps the package and the test together. The test runner can be "hidden" in the production deployment by using the "PLSQL_CCFLAGS" conditional compilation select directives. If the directive is missing, FALSE is assumed:

      alter system set PLSQL_CCFLAGS = 'WTPLSQL_ENABLE:TRUE';
       

      Optional Setup and Teardown

      -

      In utPLSQL V2, setup and teardown procedures were required in each test suite. V2 also has a "per method setup" parameter to control startup and teardown timing/sequencing. In wtPSQL, setup and teardown are optional. Setup and teardown are written into a test runner package.

      +

      In utPLSQL V2, setup and teardown procedures were required in each test suite. V2 also has a "per method setup" parameter to control startup and teardown timing/sequencing. In wtPSQL, setup and teardown are optional. Setup and teardown are written into a test runner package.

      Simpler Installation Scripts

      In utPLSQL V2, a very sophisticated set of installation scripts are available. The source code for these scripts is very complex. wtPLSQL will use simpler installation scripts for core and option installation. This will require multiple installation steps on the part of the DBA. (Simplicity of coding has priority over convenience of installation)

      Minimal Database Footprint

      -

      In utPLSQL V2, an extensive amount of source code is dedicated to the detection and adaptation of previous releases of Oracle, as far back as Oracle database version 6. In wtPLSQL, the minimum edition of the oldest available Oracle database version is supported. Currently, Oracle XE 11gR2 is the minimum edition of the oldest available Oracle database version. Any testing of features in Oracle database releases beyond Oracle 11g XE will be included in Oracle edition and database version specific "options".

      +

      In utPLSQL V2, an extensive amount of source code is dedicated to the detection and adaptation of previous releases of Oracle, as far back as Oracle database version 6. In wtPLSQL, the minimum edition of the oldest available Oracle database version is supported. Currently, Oracle XE 11gR2 is the minimum edition of the oldest available Oracle database version. Any testing of features in Oracle database releases beyond Oracle 11g XE will be included in Oracle edition and database version specific "options".

      Operation Overview

      -

      When the WTPLSQL.test_run procedure is called, a test runner package name is passed in as a parameter. The "WTPLSQL_RUN" procedure in the test runner package is called with an EXECUTE IMMEDIATE. An exception handler is used in the WTPLSQL package to catch any exceptions raised from a test runner Package. Results from assertions are immediately stored in a Nested Table in the WTPLSQL package. After the test runner completes execution, the results are transferred into database tables.

      +

      When the WTPLSQL.test_run procedure is called, a test runner package name is passed in as a parameter. The "WTPLSQL_RUN" procedure in the test runner package is called with an EXECUTE IMMEDIATE. An exception handler is used in the WTPLSQL package to catch any exceptions raised from a test runner Package. Results from assertions are immediately stored in a Nested Table in the WTPLSQL package. After the test runner completes execution, the results are transferred into database tables.

      The WTPLSQL.test_all procedure will locate all test runner packages (containing the WTPLSQL_RUN procedure) and execute them using the WTPLSQL.test_run procedure.


      Website Home Page

      diff --git a/docs/Core-Features.md b/docs/Core-Features.md index 681cb8f..65fe2e0 100644 --- a/docs/Core-Features.md +++ b/docs/Core-Features.md @@ -12,18 +12,10 @@ Because the test runner packages are user written, they can be used to test anyt - Table Constraints and Triggers - Types and Type Bodies -## Built-in Code Coverage -The Database Object Under Test, or DBOUT, is a database object that is the target of the test runner package. An annotation is used to identify the DBOUT in a test runner package. If the DBOUT annotation is missing from a test runner package, no code coverage data is collected. If more than one annotation occurs in a test runner package, the first occurrence in the source code is used. +## Plug-in Code Coverage +The Database Object Under Test, or DBOUT, is a database object that is the target of the test runner package. A global variable "g_DBOUT" in the "wtplsql" package is used to identify the DBOUT. If the not set by the test runner package, no code coverage data is collected. If more than one value of "g_DBOUT" is set by a test runner package, the last setting is used. -**Regular Expression:** -``` - --% WTPLSQL SET DBOUT "[[:alnum:]._$#]+" %-- -``` -**Example:** -``` - --% WTPLSQL SET DBOUT "SCHEMA.TEST_ME" %-- -``` -"Ignore" annotations are used to indicate source code lines to ignore when calculating code coverage metrics. +"Ignore" annotations are used to indicate which source code lines will be ignored when calculating code coverage metrics. **Regular Expression:** ``` @@ -36,14 +28,14 @@ The Database Object Under Test, or DBOUT, is a database object that is the targe Occasionally, DBMS_PROFILER does not capture the execution of some PL/SQL source. Examples PL/SQL source that are reported incorrectly include "end if", "select", and "return". wtPLSQL excludes some of these source lines when calculating code coverage metrics. Use the "Ignore" annotations to ignore other lines of PL/SQL when calculating code coverage metrics. ## Built-in Schema-wide Testing -wtPLSQL will locate and execute all test runner packages in a schema. This is done by finding all packages with a WTPLSQL_RUN procedure that has no parameters. There is no requirement to pre-define the test runners in a schema. +wtPLSQL will locate and execute all test runner packages in a schema. This is done by finding all packages with a WTPLSQL_RUN procedure that has no parameters. There is no other requirement to predefine test runners in a schema. ## Test Result Capture Test results from assertions executed in a test runner package are automatically captured in WTPLSQL database tables. Results are stored by test runner execution. If specified in the test runner, test results are stored by test case. If a DBOUT is specified in the test runner, code coverage data is also stored. All captured data is automatically deleted except for the last 20 runs of any test runner. ## Test Result Reporting Reporting of the assertion test results is not a included with the execution of the test runner package(s). Some other mechanism, like the reporting package, must be used to display the assertion test results. This allows the following choices during test execution: -- **Run the WT_TEXT_REPORT.DBMS_OUT Report** - This is the default Reporting Package to report test results using DBMS_OUTPUT. Several parameter options are available to change level of detail and report sequencing. +- **Run the WT_CORE_REPORT.DBMS_OUT Report** - This is the default Reporting Package to report test results using DBMS_OUTPUT. Several parameter options are available to change level of detail and report sequencing. - **Run an Add-On Reporting Package** - Bespoke reporting packages can be created or downloaded to provide for the exact requirements of test result reporting. - **Copy Test Results** - Create or download bespoke storage and reporting systems that copy the test result data from the WTPLSQL database tables for more complex test result reporting. - **No Action** - Test results remain in the WTPLSQL database tables until they are automatically deleted. diff --git a/docs/Definitions.htm b/docs/Definitions.htm index 10bbb65..63c59fd 100644 --- a/docs/Definitions.htm +++ b/docs/Definitions.htm @@ -10,7 +10,7 @@

      wtPLSQL Definitions

      Setup - Modifying the database or environment in preparation for an assertion, testcase, or group of either.

      Teardown - Restoring a database or environment after an assertion, testcase, or group of either.

      Testcase - A logical grouping of assertions to run happy path, decision tree, boundary condition, and/or fault insertion tests. May included one or more setup, teardown, and intermediate setups.

      -

      Test Runner - A PL/SQL package that exercises a DBOUT and uses assertions to confirm the correct funcionality of the DBOUT. It may have zero or more testcases. It always contains a call to the WTPLSQL.TEST_RUN procedure. It may contain DBOUT annotations and "ignore source lines" annotations.

      +

      Test Runner - A PL/SQL package that exercises a DBOUT and uses assertions to confirm the correct funcionality of the DBOUT. It may have zero or more testcases. It always contains a call to the WTPLSQL.TEST_RUN procedure. It may contain DBOUT annotations and "ignore source lines" annotations.


      Oracle Database

      Note: Some Oracle database terms overlap with Object Oriented terms.

      diff --git a/docs/Gui-Add-On.htm b/docs/Gui-Add-On.htm new file mode 100644 index 0000000..de6576b --- /dev/null +++ b/docs/Gui-Add-On.htm @@ -0,0 +1,8 @@ +

      Website Home Page

      +

      wtPLSQL Graphical User Interface Add-on

      +
      +

      PL/SQL development in the database is different from other

      +

      All examples shown here use the WTP_DEMO demonstration as described in Demonstrations and Examples Page. Use the "Demo Installer" at the bottom of the page to create a fresh install in a different schema.

      +

      See the README.md file in the src/core directory for installation instructions.

      +
      +

      Website Home Page

      diff --git a/docs/Gui-Add-On.md b/docs/Gui-Add-On.md new file mode 100644 index 0000000..12d2042 --- /dev/null +++ b/docs/Gui-Add-On.md @@ -0,0 +1,14 @@ +[Website Home Page](README.md) + +# wtPLSQL Graphical User Interface Add-on + +--- + +PL/SQL development in the database is different from other + +All examples shown here use the WTP_DEMO demonstration as described in [Demonstrations and Examples Page](../demo/README.md). Use the "Demo Installer" at the bottom of the page to create a fresh install in a different schema. + +See the README.md file in the src/core directory for installation instructions. + +--- +[Website Home Page](README.md) diff --git a/docs/Junit-Add-On.htm b/docs/Junit-Add-On.htm new file mode 100644 index 0000000..6004e60 --- /dev/null +++ b/docs/Junit-Add-On.htm @@ -0,0 +1,6 @@ +

      Website Home Page

      +

      wtPLSQL JUnit Add-on

      +
      +

      See the README.md file in the src/junit directory for installation instructions.

      +
      +

      Website Home Page

      diff --git a/docs/Junit-Add-On.md b/docs/Junit-Add-On.md new file mode 100644 index 0000000..c184abc --- /dev/null +++ b/docs/Junit-Add-On.md @@ -0,0 +1,11 @@ +[Website Home Page](README.md) + +# wtPLSQL JUnit Add-on + +--- + +See the README.md file in the src/junit directory for installation instructions. + + +--- +[Website Home Page](README.md) diff --git a/docs/OO-Style-Unit-Testing.htm b/docs/OO-Style-Unit-Testing.htm new file mode 100644 index 0000000..000ab3f --- /dev/null +++ b/docs/OO-Style-Unit-Testing.htm @@ -0,0 +1,56 @@ +

      Website Home Page

      +

      OO Style Unit Testing

      +
      +

      The wtPLSQL project focuses on white box testing instead of OO style unit testing. This is done to avoid some aspects of OO style unit testing that are not database friendly:

      +
        +
      • Test Isolation
      • +
      • Test Transience
      • +
      • Test Fixtures
      • +
      • Test Suites
      • +
      +

      Test Isolation

      +

      A unit test should usually not go outside of its own class boundary

      +

      In OO (object oriented) programming, object data is transient. This is due to the nature of object instantiation. Persistence of object data beyond the instance of an object is banished to non-OO components. Since the unit test movement gained its largest following in OO, the idea of testing persisted object data is, unfortunately, a distraction. This has evolved into the idea that testing a database interface should always involve the use of a fake or mock to isolate the unit under test from the influence of these non-OO components.

      +

      Transactional data (ACID compliance) introduces a complexity to the persistence of object data. Attempting to fake this complexity is very difficult. Particularly difficult is the determination of how much functionality to include in the fake, especially when the storage of the data is the main purpose for the system. Focusing on white box testing, instead of unit testing, allows Test Runners that use the wtPLSQL server to test integrated functionality from other system components.

      +

      Test Transience

      +

      A unit test should set up a known good state before the tests and return to the original state after the tests

      +

      There are many arguments to be made regarding the idea of a known good state in a database. The only sure way to achieve a known good state is to leave the the database unchanged after a unit test. Ideally, changes made by a test process would be transient, that is the process would setup (insert) and tear down (delete) data in the database. However, many Oracle database implementations include additional functionality that can make this difficult.

      +
        +
      • Complex data setup
      • +
      • Additional processing that is unknown or poorly defined
      • +
      • Built-in auditing
      • +
      +

      With the wtPLSQL server, Test Runners are allow to perform integration testing of multiple database objects (no mocks or fakes). That is, the Test Runners are not bounded by the transience aspect of unit testing. Artifacts from multiple test runs can remain in the database after the testing is complete. Additionally, artifacts that remain after testing can help identify other problems in the database.

      +

      Test Fixtures

      +

      A test fixture ... is the set of preconditions or state needed to run a test

      +

      An Oracle database loaded with test data is a fixture. In OO terms, it is a persistent store that is pre-loaded with data. If the test data is pre-loaded, there is no need to setup test fixtures. wtPLSQL does not require test fixtures. They are optional.

      +

      Test Suites

      +

      A test suite is a set of tests that all share the same fixture.

      +

      wtPLSQL does not require test suites. If needed, test suites can be defined and implemented in Test Runner packages. The "test_all" functionality of wtPLSQL creates a form of test suite at the database schema level.

      +

      Testing Methodologies

      +

      Fundamentally, the Oracle database is a relational database. The relational database is based on transaction processing. Data is stored and shared in a precise manner between processes.

      +

      JUnit testing is OO (Object Oriented programming) based. Encapsulation is a core part of OO. Data sharing is done through APIs (Application Programmatic Interfaces), i.e. no fundamental data persistence.

      +

      The principle of "store and share" is the opposite of data encapsulation. As a result, OO testing approaches are inappropriate for relational databases.

      +

      Here are several differences in testing methodologies between relational databases and Object Oriented.

      +

      Testing Persistence of Data

      +
        +
      • Object Oriented - Use fakes or mocks to avoid any data persistence.
      • +
      • Relational Database - Testing of data persistence is fundamental.
      • +
      +

      Isolation of Tests

      +
        +
      • Object Oriented - Use fakes or mocks to avoid any "integration" testing.
      • +
      • Relational Database - Isolating PL/SQL code from database CRUD (Create, Retrieve, Update, Delete) defeats the purpose of most PL/SQL testing.
      • +
      +

      Test Transience

      +
        +
      • Object Oriented - Return object to original state.
      • +
      • Relational Database - Integrity constraints on complex persisted data and/or complex data operations make simple test transience more difficult. An alternative is to add new data during each test and/or reset the database to a known test data set before testing.
      • +
      +

      Non-Sequenced Testing

      +
        +
      • Object Oriented - All unit tests should be able to run in any order.
      • +
      • Relational Database - Testing with integrity constraints on complex persisted data and/or complex data operations can be simpler with test sequencing.
      • +
      +
      +

      Website Home Page

      diff --git a/docs/OO-Style-Unit-Testing.md b/docs/OO-Style-Unit-Testing.md new file mode 100644 index 0000000..d4140f1 --- /dev/null +++ b/docs/OO-Style-Unit-Testing.md @@ -0,0 +1,71 @@ +[Website Home Page](README.md) + +# OO Style Unit Testing + +--- + +The wtPLSQL project focuses on white box testing instead of OO style unit testing. This is done to avoid some aspects of OO style unit testing that are not database friendly: +* Test Isolation +* Test Transience +* Test Fixtures +* Test Suites + +### Test Isolation + +A unit test should [usually not go outside of its own class boundary](https://en.wikipedia.org/wiki/Unit_testing#Description) + +In OO (object oriented) programming, object data is transient. This is due to the nature of object instantiation. Persistence of object data beyond the instance of an object is banished to non-OO components. Since the unit test movement gained its largest following in OO, the idea of testing persisted object data is, unfortunately, a distraction. This has evolved into the idea that testing a database interface should always involve the use of a [fake or mock](https://en.wikipedia.org/wiki/Test-driven_development#Fakes.2C_mocks_and_integration_tests) to **isolate** the unit under test from the influence of these non-OO components. + +Transactional data (ACID compliance) introduces a complexity to the persistence of object data. Attempting to fake this complexity is very difficult. Particularly difficult is the determination of how much functionality to include in the fake, especially when the storage of the data is the main purpose for the system. Focusing on white box testing, instead of unit testing, allows Test Runners that use the wtPLSQL server to test integrated functionality from other system components. + +### Test Transience + +A unit test should set up a known good state before the tests and [return to the original state after the tests](https://en.wikipedia.org/wiki/XUnit#Test_fixtures) + +There are many arguments to be made regarding the idea of a known good state in a database. The only sure way to achieve a known good state is to leave the the database unchanged after a unit test. Ideally, changes made by a test process would be **transient**, that is the process would setup (insert) and tear down (delete) data in the database. However, many Oracle database implementations include additional functionality that can make this difficult. +* Complex data setup +* Additional processing that is unknown or poorly defined +* Built-in auditing + +With the wtPLSQL server, Test Runners are allow to perform integration testing of multiple database objects (no mocks or fakes). That is, the Test Runners are not bounded by the **transience** aspect of unit testing. Artifacts from multiple test runs can remain in the database after the testing is complete. Additionally, artifacts that remain after testing can help identify other problems in the database. + +### Test Fixtures + +[A test fixture ... is the set of preconditions or state needed to run a test](https://en.wikipedia.org/wiki/XUnit#Test_fixtures) + +An Oracle database loaded with test data is a fixture. In OO terms, it is a persistent store that is pre-loaded with data. If the test data is pre-loaded, there is no need to setup test fixtures. wtPLSQL does not require test fixtures. They are optional. + +### Test Suites + +[A test suite is a set of tests that all share the same fixture.](https://en.wikipedia.org/wiki/XUnit#Test_suites) + +wtPLSQL does not require test suites. If needed, test suites can be defined and implemented in Test Runner packages. The "test_all" functionality of wtPLSQL creates a form of test suite at the database schema level. + +## Testing Methodologies + +Fundamentally, the Oracle database is a relational database. The relational database is based on transaction processing. Data is stored and shared in a precise manner between processes. + +JUnit testing is OO (Object Oriented programming) based. Encapsulation is a core part of OO. Data sharing is done through APIs (Application Programmatic Interfaces), i.e. no fundamental data persistence. + +The principle of "store and share" is the opposite of data encapsulation. As a result, OO testing approaches are inappropriate for relational databases. + +Here are several differences in testing methodologies between relational databases and Object Oriented. + +### Testing Persistence of Data +* Object Oriented - Use fakes or mocks to avoid any data persistence. +* Relational Database - Testing of data persistence is fundamental. + +### Isolation of Tests +* Object Oriented - Use fakes or mocks to avoid any "integration" testing. +* Relational Database - Isolating PL/SQL code from database CRUD (Create, Retrieve, Update, Delete) defeats the purpose of most PL/SQL testing. + +### Test Transience +* Object Oriented - Return object to original state. +* Relational Database - Integrity constraints on complex persisted data and/or complex data operations make simple test transience more difficult. An alternative is to add new data during each test and/or reset the database to a known test data set before testing. + +### Non-Sequenced Testing +* Object Oriented - All unit tests should be able to run in any order. +* Relational Database - Testing with integrity constraints on complex persisted data and/or complex data operations can be simpler with test sequencing. + +--- +[Website Home Page](README.md) diff --git a/docs/Persist-Add-On.htm b/docs/Persist-Add-On.htm new file mode 100644 index 0000000..dc3c5f4 --- /dev/null +++ b/docs/Persist-Add-On.htm @@ -0,0 +1,8 @@ +

      Website Home Page

      +

      wtPLSQL Core Component

      +
      +

      Must install core first.

      +

      See the README.md file in the src/core directory for installation instructions.

      +

      Doubles the memory usage of core (1 Mb) by duplicating all results in memory before inserting to tables.

      +
      +

      Website Home Page

      diff --git a/docs/Persist-Add-On.md b/docs/Persist-Add-On.md new file mode 100644 index 0000000..2c58c8a --- /dev/null +++ b/docs/Persist-Add-On.md @@ -0,0 +1,13 @@ +[Website Home Page](README.md) + +# wtPLSQL Core Component + +--- +Must install core first. + +See the README.md file in the src/core directory for installation instructions. + +Doubles the memory usage of core (1 Mb) by duplicating all results in memory before inserting to tables. + +--- +[Website Home Page](README.md) diff --git a/docs/README.htm b/docs/README.htm index 4ee7d2b..e800388 100644 --- a/docs/README.htm +++ b/docs/README.htm @@ -1,61 +1,178 @@

      wtPLSQL Home Page


      -

      To install/upgrade, download the latest Release

      -

      Also see the compatibility page in the wtPLSQL repository wiki.

      -

      Use GitHub "issues" for support. A (free) GitHub account will be required to create a new issue. Issues can be searched without an account.

      -

      Example wtPLSQL Test Results

      -

      This is the summary from the WT_ASSERT package self-test. It was created with the default DBMS_OUTPUT reporting package. Because test results and code coverage is stored in Oracle tables, other report formats are simple to create.

      -
          wtPLSQL 1.1.0 - Run ID 7: 09-Jun-2018 11:48:42 AM
      +

      Click here for the latest release on GitHub.

      +

      Click here for the compatibility wiki page on GitHub.

      +

      Use GitHub "issues" for support. A (free) GitHub account will be required to create a new issue. Issues can be searched without an account.

      +

      Overview

      +

      wtPLSQL is a test automation server that runs in an Oracle database to provide the following services for Test Runner packages written in PL/SQL.

      +
        +
      • Execution of One or More Test Runners
      • +
      • Assertion Results including Timing Between Assertions
      • +
      • Capture/Storage/Reporting of Assertion Results
      • +
      • Source Code Coverage of Test Runner
      • +
      • Web Based Graphical User Interface (APEX)
      • +
      +

      Core Component Example Test Results

      +

      Here is an example result summary from the core component. Only core is needed to produce this result.

      +Sample DBMS_OUTPUT from wtPLSQL core - Test Results for WTP.WT_ASSERT - Total Testcases: 150 Total Assertions: 404 - Minimum Interval msec: 0 Failed Assertions: 0 - Average Interval msec: 7 Error Assertions: 0 - Maximum Interval msec: 761 Test Yield: 100.00% - Total Run Time (sec): 2.8 +

      To view the complete test results from the wtPLSQL core self-test, go to the "src/core/test_allO.LST" file in GitHub.

      +

      Persist Add-on Example Test Results

      +

      Here is the summary from the WT_ASSERT package self-test. It was created with the default DBMS_OUTPUT reporting package. Because test results and code coverage are stored in Oracle tables, other report formats are simple to create.

      +Sample DBMS_OUTPUT from wtPLSQL Persist - Code Coverage for PACKAGE BODY WTP.WT_ASSERT - Ignored Lines: 1103 Total Profiled Lines: 1464 - Excluded Lines: 6 Total Executed Lines: 309 - Minimum LineExec usec: 0 Not Executed Lines: 0 - Average LineExec usec: 394 Unknown Lines: 46 - Maximum LineExec usec: 65814 Code Coverage: 100.00% - Trigger Source Offset: 0 -
      -

      To view the complete test results from the wtPLSQL self-test, go to the test_allO.LST file in GitHub. The Demonstrations and Examples Page has more examples.

      -

      What is wtPLSQL?

      -

      wtPLSQL helps with white-box testing of Oracle database objects. It is particularly well suited for unit testing and simple integration testing. It is written in PL/SQL. It contains a self-test which makes it easier to support and customize.

      -

      Like utPLSQL, wtPLSQL provides a set of assertion tests that can be used to determine how well an Oracle database object is performing. These assertions record the outcome (success or failure) of each test. These assertions also record the time between calls. A test runner (PL/SQL package) must be created with these assertion tests included. The Core Features page introduces the main functionality of wtPLSQL.

      -

      A simple text based reporting package called "WT_TEXT_REPORT" is included with the core installation. Custom reports are easy to create because the assertion outcomes and interval time between assertions are stored in the Oracle database. A set of DBDocs and E-R diagrams are provided to assist with any reporting customization.

      -

      Because all testing with wtPLSQL is for driven by custom PL/SQL packages, a Best Practices page has some guidance for creating test runner packages.

      -

      The About wtPLSQL page has more information about the history and testing methodology of wtPLSQL.

      -

      The Definitions page includes definitions from many sources to help define the terms used in various software testing methodologies.

      -

      How does wtPLSQL compare to utPLSQL V3?

      -

      utPLSQL V3 is an excellent choice for unit testing. It is well supported and includes extensive functionality.

      -

      wtPLSQL has a different focus than utPLSQL V3. More information is available in this link.

      -

      How does wtPLSQL compare to utPLSQL V1 or utPLSQL V2?

      -

      utPLSQL V2 is an extension of utPLSQL V1. Since utPSQL V2 is being replaced by utPLSQL V3, neither utPLSQL V2 or utPLSQL V1 are good choices for starting a new software testing implementation.

      -

      The goal of wtPLSQL has been to implement the basic/core functionality of utPLSQL V2 while preserving the the programming investment in the assertion API (utAssert.eq, utAssert.isnotnull, etc.). The additional functionality of utPLSQL V2 that is not included in the wtPLSQL core will be added through optionally installed modules (also known as add-ons).

      -

      More information is available in this link.

      - -

      User Help

      +

      To view the complete test results from the wtPLSQL persist self-test, go to the "src/persist/test_allO.LST" file in GitHub.

      +

      GUI Add-on Example Test Results

      +

      The GUI module uses the Oracle APEX to enhance the UI experience. Many useful reports are available with the GUI module. This is an example of ???

      +Sample Graphical from wtPLSQL GUI + +

      General Documentation

      -

      Background

      + + + + + + + + + + + + + + + + + +
      ComponentDescription
      coreRequired for all wtPLSQL functionality. Small, fast, and maintenance free.
      conversionConvert Test Runner packages from utPLSQL V1/V2 to wtPLSQL
      +
      + + + + + + + + + + + + + + + + + + + + + + +
      Add-onDescription
      persistAdds storage in tables. Adds code coverage.
      guiAdds Oracle APEX screens and reports. Requires persist add-on.
      junitAdds JUnit XML reporting.
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      DB DocsE-R DiagramsCall Tree Diags
      core docscore ERDscore trees
      persist docspersist ERDspersist trees
      gui docsgui ERDsgui trees
      +

      To determine which components and add-ons have been installed, run this query:

      +
      select wtplsql.show_version from dual;
      +

      Contribute

      Help us improve by joining us at the wtPLSQL repository.

      +

      The web pages in this website contain information about the wtPLSQL software. Documentation on design and usage are included here. This website is version specific. Each release includes its own version of this website. The "master" branch (latest release) is always displayed at Github.io. Un-released updates are not displayed here.

      +

      For project information, see the wtPLSQL wiki. Documentation on procedures and compatibility are included in the wiki. The wiki includes information for all releases of wtPLSQL. Any updates are immediately displayed.

      +
      +

      The following applies to files and directories at this location in the documentation repository.

      +

      Files and Directories

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      File NameDescription
      coreCore Documentation Directory
      demoDemonstration Documentation Directory
      guiGraphical User Interface Documentation
      imagesImage Files referenced by MD and HTML
      persistPersist Documentation Directory
      _config.ymlYAML Configuration File for Markdown
      *.mdMarkdown files for "github.io"
      *.htmHTML files for local documentation
      md-to-htm.batMS-Dos Batch File to convert MD to HTML
      md-to-htm.luaLua script used by Pandoc for MD to HTML
      +

      To view documentation use the URL "file://README.htm" or Double-click on the README.htm file.

      +

      NOTE: All HTML files are sourced from Markdown files. Modify the Markdown files, then build HTML from the Markdown files using "md-to-htm.bat".


      Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.

      diff --git a/docs/README.md b/docs/README.md index 8868366..2a33143 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,86 +1,119 @@ # wtPLSQL Home Page --- -To install/upgrade, download the [latest Release](https://github.com/DDieterich/wtPLSQL/releases) +[Click here](https://github.com/DDieterich/wtPLSQL/releases/latest) for the latest release on GitHub. -Also see the [compatibility page](https://github.com/DDieterich/wtPLSQL/wiki/Compatibility) in the wtPLSQL repository wiki. +[Click here](https://github.com/DDieterich/wtPLSQL/wiki/Compatibility) for the compatibility wiki page on GitHub. Use [GitHub "issues"](https://github.com/DDieterich/wtPLSQL/issues) for support. A (free) GitHub account will be required to create a new issue. Issues can be searched without an account. -## Example wtPLSQL Test Results +### Overview -This is the summary from the WT_ASSERT package self-test. It was created with the default DBMS_OUTPUT reporting package. Because test results and code coverage is stored in Oracle tables, other report formats are simple to create. +wtPLSQL is a test automation server that runs in an Oracle database to provide the following services for Test Runner packages written in PL/SQL. +* Execution of One or More Test Runners +* Assertion Results including Timing Between Assertions +* Capture/Storage/Reporting of Assertion Results +* Source Code Coverage of Test Runner +* Web Based Graphical User Interface (APEX) -``` - wtPLSQL 1.1.0 - Run ID 7: 09-Jun-2018 11:48:42 AM - - Test Results for WTP.WT_ASSERT - Total Testcases: 150 Total Assertions: 404 - Minimum Interval msec: 0 Failed Assertions: 0 - Average Interval msec: 7 Error Assertions: 0 - Maximum Interval msec: 761 Test Yield: 100.00% - Total Run Time (sec): 2.8 - - Code Coverage for PACKAGE BODY WTP.WT_ASSERT - Ignored Lines: 1103 Total Profiled Lines: 1464 - Excluded Lines: 6 Total Executed Lines: 309 - Minimum LineExec usec: 0 Not Executed Lines: 0 - Average LineExec usec: 394 Unknown Lines: 46 - Maximum LineExec usec: 65814 Code Coverage: 100.00% - Trigger Source Offset: 0 -``` +### Core Component Example Test Results -To view the complete test results from the wtPLSQL self-test, go to the [test_allO.LST](https://github.com/DDieterich/wtPLSQL/blob/master/src/core/test_allO.LST) file in GitHub. The [Demonstrations and Examples Page](demo/README.md) has more examples. +Here is an example result summary from the core component. Only core is needed to produce this result. -## What is wtPLSQL? +Sample DBMS_OUTPUT from wtPLSQL core -wtPLSQL helps with white-box testing of Oracle database objects. It is particularly well suited for unit testing and simple integration testing. It is written in PL/SQL. It contains a self-test which makes it easier to support and customize. +To view the complete test results from the wtPLSQL core self-test, go to the "[src/core/test_allO.LST](https://github.com/DDieterich/wtPLSQL/blob/master/src/core/test_allO.LST)" file in GitHub. -Like utPLSQL, wtPLSQL provides a set of assertion tests that can be used to determine how well an Oracle database object is performing. These assertions record the outcome (success or failure) of each test. These assertions also record the time between calls. A test runner (PL/SQL package) must be created with these assertion tests included. The [Core Features page](Core-Features.md) introduces the main functionality of wtPLSQL. +### Persist Add-on Example Test Results -A simple text based reporting package called "WT_TEXT_REPORT" is included with the core installation. Custom reports are easy to create because the assertion outcomes and interval time between assertions are stored in the Oracle database. A set of DBDocs and E-R diagrams are provided to assist with any reporting customization. +Here is the summary from the WT_ASSERT package self-test. It was created with the default DBMS_OUTPUT reporting package. Because test results and code coverage are stored in Oracle tables, other report formats are simple to create. -Because all testing with wtPLSQL is for driven by custom PL/SQL packages, a [Best Practices page](Best-Practices.md) has some guidance for creating test runner packages. +Sample DBMS_OUTPUT from wtPLSQL Persist -The [About wtPLSQL page](About-wtPLSQL.md) has more information about the history and testing methodology of wtPLSQL. +To view the complete test results from the wtPLSQL persist self-test, go to the "[src/persist/test_allO.LST](https://github.com/DDieterich/wtPLSQL/blob/master/src/persist/test_allO.LST)" file in GitHub. -The [Definitions page](Definitions.md) includes definitions from many sources to help define the terms used in various software testing methodologies. +### GUI Add-on Example Test Results -## How does wtPLSQL compare to utPLSQL V3? +The GUI module uses the Oracle APEX to enhance the UI experience. Many useful reports are available with the GUI module. This is an example of ??? -utPLSQL V3 is an excellent choice for unit testing. It is well supported and includes extensive functionality. +Sample Graphical from wtPLSQL GUI -wtPLSQL has a different focus than utPLSQL V3. More information is available [in this link](utPLSQL-V3-Comparison.md). +### General Documentation -## How does wtPLSQL compare to utPLSQL V1 or utPLSQL V2? +* [About wtPLSQL](About-wtPLSQL.md) +* [Examples and Documentation](demo/README.md) +* [Definitions](Definitions.md) +* [Best Practices](Best-Practices.md) +* [Reference](Reference.md) +* [utPLSQL V1/V2 Comparison](utPLSQL-V2-Comparison.md) +* [utPLSQL V3 Comparison](utPLSQL-V3-Comparison.md) +* [OO Style Unit Testing is not for Databases](OO-Style-Unit-Testing.md) -utPLSQL V2 is an extension of utPLSQL V1. Since utPSQL V2 is being replaced by utPLSQL V3, neither utPLSQL V2 or utPLSQL V1 are good choices for starting a new software testing implementation. +Component | Description +--------------------------------------|------------ +[core](core-component.md) | Required for all wtPLSQL functionality. Small, fast, and maintenance free. +[conversion](conversion-component.md) | Convert Test Runner packages from utPLSQL V1/V2 to wtPLSQL -The goal of wtPLSQL has been to implement the basic/core functionality of utPLSQL V2 while preserving the the programming investment in the assertion API (utAssert.eq, utAssert.isnotnull, etc.). The additional functionality of utPLSQL V2 that is not included in the wtPLSQL core will be added through optionally installed modules (also known as add-ons). +
      -More information is available [in this link](utPLSQL-V2-Comparison.md). +Add-on | Description +-----------------------------|------------ +[persist](persist-add-on.md) | Adds storage in tables. Adds code coverage. +[gui](gui-add-on.md) | Adds Oracle APEX screens and reports. Requires persist add-on. +[junit](junit-add-on.md) | Adds JUnit XML reporting. -### Site Links +
      -User Help -* [Demonstrations and Examples Page](demo/README.md) -* [Reference](Reference.md) -* [Best Practices](Best-Practices.md) -* [DB Docs from SQL*Developer](core/DBDocs/index.html) -* [ER Diagram PDF](core/ER_Diagrams.pdf) -* [Call Tree Diagrams PDF](core/Call_Tree_Diagrams.pdf) +DB Docs | E-R Diagrams | Call Tree Diags +------------------------------------------|-----------------------------------------|---------------- +[core docs](core/DBDocs/index.html) | [core ERDs](core/ER_Diagrams.pdf) | [core trees](core/Call_Tree_Diagrams.pdf) +[persist docs](persist/DBDocs/index.html) | [persist ERDs](persist/ER_Diagrams.pdf) | [persist trees](persist/Call_Tree_Diagrams.pdf) +[gui docs](gui/DBDocs/index.html) | [gui ERDs](gui/ER_Diagrams.pdf) | [gui trees](gui/Call_Tree_Diagrams.pdf) -Background -* [Definitions](Definitions.md) -* [About wtPLSQL](About-wtPLSQL.md) -* [Core Features](Core-Features.md) -* [utPLSQL V3 Comparison](utPLSQL-V3-Comparison.md) -* [utPLSQL V1/V2 Comparison](utPLSQL-V2-Comparison.md) +* **DB Docs** has web pages similar to JavaDocs created by Oracle's SQL*Developer. +* **E-R Diagrams** show relationships between tables (entities). +* **Call Tree Diagrams** show the PL/SQL programs, tables, and common (global) memory structures called by all PL/SQL programs. + +To determine which components and add-ons have been installed, run this query: + +``` +select wtplsql.show_version from dual; +``` ## Contribute Help us improve by joining us at the [wtPLSQL repository](https://github.com/DDieterich/wtPLSQL). +The web pages in this website contain information about the wtPLSQL software. Documentation on design and usage are included here. This website is version specific. Each release includes its own version of this website. The "master" branch (latest release) is always displayed at Github.io. Un-released updates are not displayed here. + +For project information, see the [wtPLSQL wiki](https://github.com/DDieterich/wtPLSQL/wiki). Documentation on procedures and compatibility are included in the wiki. The wiki includes information for all releases of wtPLSQL. Any updates are immediately displayed. + + +--- + +*The following applies to files and directories at this location in the documentation repository.* + +### Files and Directories + +File Name | Description +--------------|------------ +core | Core Documentation Directory +demo | Demonstration Documentation Directory +gui | Graphical User Interface Documentation +images | Image Files referenced by MD and HTML +persist | Persist Documentation Directory +_config.yml | YAML Configuration File for Markdown +*.md | Markdown files for "github.io" +*.htm | HTML files for local documentation +md-to-htm.bat | MS-Dos Batch File to convert MD to HTML +md-to-htm.lua | Lua script used by Pandoc for MD to HTML + +To view documentation use the URL "file://README.htm" or Double-click on the README.htm file. + +NOTE: All HTML files are sourced from Markdown files. + Modify the Markdown files, then build HTML from the + Markdown files using "md-to-htm.bat". + --- _Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners._ diff --git a/docs/README.txt b/docs/README.txt deleted file mode 100644 index ef58485..0000000 --- a/docs/README.txt +++ /dev/null @@ -1,16 +0,0 @@ - -Files and Directories ---------------------- - -File Name Description ------------ ------------ -Core Core Documentation -Demo Demonstration Documentation -README.md README Markdown file for "github.io" -_config.yml YAML Configuration File for this Website - - -Local Documentation URL ------------------------ -file://README.htm -(Double-click on the README.htm file) diff --git a/docs/README_leap-day.htm b/docs/README_leap-day.htm new file mode 100644 index 0000000..7156575 --- /dev/null +++ b/docs/README_leap-day.htm @@ -0,0 +1,75 @@ +

      The Leap day theme

      +

      .github/workflows/ci.yaml Gem Version

      +

      Leap day is a Jekyll theme for GitHub Pages. You can preview the theme to see what it looks like, or even use it today.

      +

      Thumbnail of Leap day

      +

      Usage

      +

      To use the Leap day theme:

      +
        +
      1. Add the following to your site's _config.yml:

        +
        remote_theme: pages-themes/leap-day@v0.2.0
        +plugins:
        +- jekyll-remote-theme # add this line to the plugins list if you already have one
      2. +
      3. Optionally, if you'd like to preview your site on your computer, add the following to your site's Gemfile:

        +
        gem "github-pages", group: :jekyll_plugins
      4. +
      +

      Customizing

      +

      Configuration variables

      +

      Leap day will respect the following variables, if set in your site's _config.yml:

      +
      title: [The title of your site]
      +description: [A short description of your site's purpose]
      +

      Additionally, you may choose to set the following optional variables:

      +
      show_downloads: ["true" or "false" (unquoted) to indicate whether to provide a download URL]
      +google_analytics: [Your Google Analytics tracking ID]
      +

      Stylesheet

      +

      If you'd like to add your own custom styles:

      +
        +
      1. Create a file called /assets/css/style.scss in your site
      2. +
      3. Add the following content to the top of the file, exactly as shown: +
        ---
        +---
        +
        +@import "{{ site.theme }}";
        +
      4. +
      5. Add any custom CSS (or Sass, including imports) you'd like immediately after the @import line
      6. +
      +

      Note: If you'd like to change the theme's Sass variables, you must set new values before the @import line in your stylesheet.

      +

      Layouts

      +

      If you'd like to change the theme's HTML layout:

      +
        +
      1. For some changes such as a custom favicon, you can add custom files in your local _includes folder. The files provided with the theme provide a starting point and are included by the original layout template.
      2. +
      3. For more extensive changes, copy the original template from the theme's repository
        (Pro-tip: click "raw" to make copying easier)
      4. +
      5. Create a file called /_layouts/default.html in your site
      6. +
      7. Paste the default layout content copied in the first step
      8. +
      9. Customize the layout as you'd like
      10. +
      +

      Customizing Google Analytics code

      +

      Google has released several iterations to their Google Analytics code over the years since this theme was first created. If you would like to take advantage of the latest code, paste it into _includes/head-custom-google-analytics.html in your Jekyll site.

      +

      Overriding GitHub-generated URLs

      +

      Templates often rely on URLs supplied by GitHub such as links to your repository or links to download your project. If you'd like to override one or more default URLs:

      +
        +
      1. Look at the template source to determine the name of the variable. It will be in the form of {{ site.github.zip_url }}.
      2. +
      3. Specify the URL that you'd like the template to use in your site's _config.yml. For example, if the variable was site.github.url, you'd add the following: +
        github:
        +  zip_url: http://example.com/download.zip
        +  another_url: another value
      4. +
      5. When your site is built, Jekyll will use the URL you specified, rather than the default one provided by GitHub.
      6. +
      +

      Note: You must remove the site. prefix, and each variable name (after the github.) should be indent with two space below github:.

      +

      For more information, see the Jekyll variables documentation.

      +

      Roadmap

      +

      See the open issues for a list of proposed features (and known issues).

      +

      Project philosophy

      +

      The Leap day theme is intended to make it quick and easy for GitHub Pages users to create their first (or 100th) website. The theme should meet the vast majority of users' needs out of the box, erring on the side of simplicity rather than flexibility, and provide users the opportunity to opt-in to additional complexity if they have specific needs or wish to further customize their experience (such as adding custom CSS or modifying the default layout). It should also look great, but that goes without saying.

      +

      Contributing

      +

      Interested in contributing to Leap day? We'd love your help. Leap day is an open source project, built one contribution at a time by users like you. See the CONTRIBUTING file for instructions on how to contribute.

      +

      Previewing the theme locally

      +

      If you'd like to preview the theme locally (for example, in the process of proposing a change):

      +
        +
      1. Clone down the theme's repository (git clone https://github.com/pages-themes/leap-day)
      2. +
      3. cd into the theme's directory
      4. +
      5. Run script/bootstrap to install the necessary dependencies
      6. +
      7. Run bundle exec jekyll serve to start the preview server
      8. +
      9. Visit localhost:4000 in your browser to preview the theme
      10. +
      +

      Running tests

      +

      The theme contains a minimal test suite, to ensure a site with the theme would build successfully. To run the tests, simply run script/cibuild. You'll need to run script/bootstrap once before the test script will work.

      diff --git a/docs/Reference.htm b/docs/Reference.htm index b495ed6..551799d 100644 --- a/docs/Reference.htm +++ b/docs/Reference.htm @@ -2,7 +2,7 @@

      Reference


      Datatypes Supported

      -

      Oracle Data Type Families
      https://docs.oracle.com/cd/E11882_01/appdev.112/e25519/predefined.htm#LNPLS2047

      +

      Oracle Data Type Families
      https://docs.oracle.com/cd/E11882_01/appdev.112/e25519/predefined.htm#LNPLS2047

      • VARCHAR2 - Includes ROWID, LONG*, RAW, LONG RAW*, and NVARCHAR2
      • DATE** - Includes TIMESTAMP and INTERVAL
      • @@ -12,23 +12,44 @@

        Datatypes Supported

      • CLOB - Includes NCLOB
      • BLOB
      -

      *LONG and LONG RAW data length is limited to VARCHAR2 length in PL/SQL (32K).
      **VARCHAR2 includes DATE and NUMBER using Implicit Data Conversions:
      https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements002.htm#i163326

      +

      *LONG and LONG RAW data length is limited to VARCHAR2 length in PL/SQL (32K).
      **VARCHAR2 includes DATE and NUMBER using Implicit Data Conversions:
      https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements002.htm#i163326

      Many data types are converted to VARCHAR2 before comparison. This ensures most results are captured and reported exactly as they were tested.

      -

      There is a balance to strike between simplicity and localization. Many data types must be converted to "strings" before display. Converting a data type at the time it is displayed can lead to confusing results. Since each assertion includes the capture of the values that were compared, the values that are captured are the actual values tested.

      +

      There is a balance to strike between simplicity and localization. Many data types must be converted to "strings" before display. Converting a data type at the time it is displayed can lead to confusing results. Since each assertion includes the capture of the values that were compared, the values that are captured are the actual values tested.

      An obvious drawback of this approach is running assertions when NLS settings must be set to something other than the setting that is needed for comparison. In this case, an explicit conversion can be made in the Test Runnner using the needed format.

      -

      Custom Error Codes

      +

      Core Error Codes

      • ORA-20001 - WTPLSQL Package: RUNNER_NAME is NULL
      • ORA-20002 - WTPLSQL Package: RUNNER_NAME (name) is not valid
      • -
      • ORA-20003 - WT_ASSERT Package: User Test Result is FAIL (g_raise_exception is TRUE)
      • -
      • ORA-20004 - WT_PROFILER Package: in_test_run_id is NULL
      • -
      • ORA-20005 - WT_PROFILER Package: dbms_profiler.INTERNAL_VERSION_CHECK returned (error)
      • -
      • ORA-20006 - WT_PROFILER Package: dbms_profiler.START_PROFILER returned (error)
      • -
      • ORA-20009 - WT_RESULT Package: "in_test_run_id" cannot be NULL
      • -
      • ORA-20010 - WT_TEST_RUN_STAT Package: Unknown Result status
      • -
      • ORA-20011 - WT_TEST_RUN_STAT Package: Unknown Profile status
      • +
      • ORA-20003 - HOOK Package: Unknown HOOK_NAME Case
      • +
      • ORA-20004 - WT_ASSERT Package: User Test Result is FAIL (g_raise_exception is TRUE)
      -

      WT_TEXT_REPORT Detail Levels

      +

      Persist Error Codes

      +
        +
      • ORA-20009 ORA-20011 - WT_RESULT Package: "in_test_run_id" cannot be NULL
      • +
      • ORA-20004 ORA-20012 - WT_PROFILER Package: in_test_run_id is NULL
      • +
      • ORA-20005 ORA-20013 - WT_PROFILER Package: dbms_profiler.INTERNAL_VERSION_CHECK returned (error)
      • +
      • ORA-20006 ORA-20014 - WT_PROFILER Package: dbms_profiler.START_PROFILER returned (error)
      • +
      • ORA-20010 ORA-20015 - WT_TEST_RUN_STAT Package: Unknown Result status
      • +
      • ORA-20011 ORA-20016 - WT_TEST_RUN_STAT Package: Unknown Profile status
      • +
      +

      WT_CORE_REPORT Detail Levels

      +
        +
      • Less than 10 (including null) - No Detail +
          +
        • Assertion results summary.
        • +
      • +
      • 10 to 19 - Minimal Detail +
          +
        • Assertion results summary.
        • +
        • Failed assertion result details.
        • +
      • +
      • 20 or more - Full Detail +
          +
        • Assertion results summary.
        • +
        • All assertion result details.
        • +
      • +
      +

      WT_PERSIST_REPORT Detail Levels

      • Less than 10 (including null) - No Detail
          @@ -40,14 +61,14 @@

          WT_TEXT_REPORT Detail Levels

        • Assertion results summary.
        • Profiled lines summary.
        • Failed assertion result details.
        • -
        • Profiled source lines that were "not executed".
        • +
        • Profiled source lines that were "not executed".
      • 20 to 29 - Partial Full Detail
        • Assertion results summary.
        • Profiled lines summary.
        • All assertion result details.
        • -
        • Profiled source lines that were "not executed".
        • +
        • Profiled source lines that were "not executed".
      • 30 or more - Full Detail
          diff --git a/docs/Reference.md b/docs/Reference.md index 92c2f27..4ad08da 100644 --- a/docs/Reference.md +++ b/docs/Reference.md @@ -25,18 +25,31 @@ There is a balance to strike between simplicity and localization. Many data type An obvious drawback of this approach is running assertions when NLS settings must be set to something other than the setting that is needed for comparison. In this case, an explicit conversion can be made in the Test Runnner using the needed format. -## Custom Error Codes +## Core Error Codes * ORA-20001 - WTPLSQL Package: RUNNER_NAME is NULL * ORA-20002 - WTPLSQL Package: RUNNER_NAME (name) is not valid -* ORA-20003 - WT_ASSERT Package: User Test Result is FAIL (g_raise_exception is TRUE) -* ORA-20004 - WT_PROFILER Package: in_test_run_id is NULL -* ORA-20005 - WT_PROFILER Package: dbms_profiler.INTERNAL_VERSION_CHECK returned (error) -* ORA-20006 - WT_PROFILER Package: dbms_profiler.START_PROFILER returned (error) -* ORA-20009 - WT_RESULT Package: "in_test_run_id" cannot be NULL -* ORA-20010 - WT_TEST_RUN_STAT Package: Unknown Result status -* ORA-20011 - WT_TEST_RUN_STAT Package: Unknown Profile status - -## WT_TEXT_REPORT Detail Levels +* ORA-20003 - HOOK Package: Unknown HOOK_NAME Case +* ORA-20004 - WT_ASSERT Package: User Test Result is FAIL (g_raise_exception is TRUE) + +## Persist Error Codes +* ORA-20009 ORA-20011 - WT_RESULT Package: "in_test_run_id" cannot be NULL +* ORA-20004 ORA-20012 - WT_PROFILER Package: in_test_run_id is NULL +* ORA-20005 ORA-20013 - WT_PROFILER Package: dbms_profiler.INTERNAL_VERSION_CHECK returned (error) +* ORA-20006 ORA-20014 - WT_PROFILER Package: dbms_profiler.START_PROFILER returned (error) +* ORA-20010 ORA-20015 - WT_TEST_RUN_STAT Package: Unknown Result status +* ORA-20011 ORA-20016 - WT_TEST_RUN_STAT Package: Unknown Profile status + +## WT_CORE_REPORT Detail Levels +* **Less than 10 (including null)** - No Detail + * Assertion results summary. +* **10 to 19** - Minimal Detail + * Assertion results summary. + * Failed assertion result details. +* **20 or more** - Full Detail + * Assertion results summary. + * All assertion result details. + +## WT_PERSIST_REPORT Detail Levels * **Less than 10 (including null)** - No Detail * Assertion results summary. * Profiled lines summary. diff --git a/docs/_includes/head-custom-google-analytics.html b/docs/_includes/head-custom-google-analytics.html index 8a63a63..f148ccc 100644 --- a/docs/_includes/head-custom-google-analytics.html +++ b/docs/_includes/head-custom-google-analytics.html @@ -17,4 +17,4 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-G8YBMHE7X2'); - \ No newline at end of file + diff --git a/docs/another-page_leap-day.htm b/docs/another-page_leap-day.htm new file mode 100644 index 0000000..9f07e7f --- /dev/null +++ b/docs/another-page_leap-day.htm @@ -0,0 +1,5 @@ +
          +

          layout: default

          +

          Welcome to another page

          +

          yay

          +

          back

          diff --git a/docs/core/Call_Tree_Diagrams.odg b/docs/core/Call_Tree_Diagrams.odg deleted file mode 100644 index 8da6676..0000000 Binary files a/docs/core/Call_Tree_Diagrams.odg and /dev/null differ diff --git a/docs/core/Call_Tree_Diagrams.pdf b/docs/core/Call_Tree_Diagrams.pdf deleted file mode 100644 index f3ebd38..0000000 Binary files a/docs/core/Call_Tree_Diagrams.pdf and /dev/null differ diff --git a/docs/core/DBDocs/dbdoc.css b/docs/core/DBDocs/dbdoc.css deleted file mode 100644 index d3a861e..0000000 --- a/docs/core/DBDocs/dbdoc.css +++ /dev/null @@ -1,151 +0,0 @@ -img { - border: 0; -} - -* { - font-size: 9pt; - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; - margin: 5px; -} - -#top_left, #bottom_left { - margin: 0px; -} - -td, body, p, div, span { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; - font-size: 9pt; - color: #000; -} - -a:link, a:visited { - color: #2B7C92; - text-decoration: underline; -} - -a:active, a:hover { - color: red; -} - -td { - empty-cells: show; - border-collapse: collapse; -} - -iframe { - border: 1px solid black; -} - -br { - clear: both !important; -} - -.clearfix:after { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; -} -/* Hides from IE-mac \*/ -* html .clearfix { - height: 1%; -} -/* End hide from IE-mac */ -table { - border-spacing: 0; - empty-cells: show; -} - -table th { - color: #2b7c92 !important; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1 !important; - background-image: none !important; - color: #2b7c92 !important; - font-size: 11px; - letter-spacing: 1; - text-decoration: underline; - cursor: pointer; -} - -table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - empty-cells: show; - background-color: #f2f2f5 !important -} - -#bottom_left h2 { - text-align: center; - padding: 4px 0; - background: #CFE0F1; - color: #2B7C92; - font-size: 1.2em; -} - -#top_left h2 { - text-align: center; - padding: 4px 0; - background: #CFE0F1; - color: #2B7C92; - font-size: 1.2em; -} - -#top_left a, #bottom_left a { - display: block; - font-size: 8pt; - padding: 2px 8px; -} - -#top_left a:hover, #bottom_left a:hover, #top_left .current, #bottom_left .current { - background: #CFE0F1; - color: #2B7C92; -} - -#header { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -body.object { - margin: 0; -} - -body.object h2 { - color: #fff; - font-size: 2em; -} - -#loading { - text-align: center; -} - -#search { - line-height: 25px; - vertical-align: middle; - background-position: center center; - background-image: url('round_text.png'); - height: 25px; - background-repeat: no-repeat; - vertical-align: center; -} - -#search input { - line-height: 25px; - vertical-align: middle; - border: none; - height: 22px; - margin: 2px; -} \ No newline at end of file diff --git a/docs/core/DBDocs/dbdoc.js b/docs/core/DBDocs/dbdoc.js deleted file mode 100644 index 5f49736..0000000 --- a/docs/core/DBDocs/dbdoc.js +++ /dev/null @@ -1,409 +0,0 @@ -function $x(pNd){ - var lThis; - switch(typeof (pNd)){ - case 'string':lThis = document.getElementById(pNd);break; - case 'object':lThis = pNd;break; - default:return false;break; - } - return (lThis.nodeType == 1)?lThis:false; -} - -function $u_Narray(pNd){return (pNd.length == 1)?pNd[0]:pNd;} -function $u_Carray(pNd){return ($x(pNd))?[pNd]:pNd;} - -function $x_Class(pNd,pClass){ - if($x(pNd)){pNd = [pNd];} - var l=pNd.length; - for(var i=0;i 2) ? argv[2] : null; - var path = (argc > 3) ? argv[3] : null; - var domain = (argc > 4) ? argv[4] : null; - var secure = (argc > 5) ? true : false; - document.cookie = pName + "=" + escape (pValue) + - ((expires === null) ? "" : ("; expires=" + expires.toGMTString())) + - ((path === null) ? "" : ("; path=" + path)) + - ((domain === null) ? "" : ("; domain=" + domain)) + - ((secure === true) ? "; secure" : ""); -} - - - -function $h(pThis,pThat){ - $x('current').id = ''; - pThis.parentNode.parentNode.id = 'current'; - $d_TabClick(pThis,pThat); - SetCookie ('dbdoc_tab',pThis.id+':'+pThat); -} - -function $init(pThis,pThat){ - var lCook = GetCookie ('dbdoc_tab',pThis.id); - if(!!lCook){ - var lArray = lCook.split(":"); - if($x(lArray[0])){$h($x(lArray[0]),lArray[1]);} - else{$h($x(pThis),pThat);} - }else{ - $h($x(pThis),pThat); - } - $x_Hide('loading'); - $x_Show('tab-panes'); -} - -function html_GetTarget(e){ - var targ,lEvt; - if(!e){e = window.event;} - if(e.target){targ = e.target;} - else if(e.srcElement){targ = e.srcElement;} - if(targ.nodeType == 3){targ = targ.parentNode;}// defeat Safari bug - return targ; -} - -function $d(pThis){ - $x_SetSiblingsClass($x(pThis),'','current'); - parent.ObjectDetailsFrame.location = pThis +'_details.html'; -} - -function $n(pThis){ - $x_SetSiblingsClass($x(pThis),'','current'); - parent.ObjectDetailsFrame.location = 'about:blank'; - parent.DBObjectsFrame.location = pThis +'/index.html'; -} - -var gRegex=false; -function $d_Find(pThis,pString,pTags,pClass){ - if(!pTags){pTags = 'DIV';} - pThis = $x(pThis); - if(pThis){ - var d=pThis.getElementsByTagName(pTags); - pThis.style.display="none"; - if(!gRegex){gRegex =new RegExp("test");} - gRegex.compile(pString,"i"); - for(var i=0,len=d.length ;i 0 && - (elementClassName == className || - new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName) - )); -} - -function addClassName(element, className) { - if (!hasClassName(element, className)) { - element.className += (element.className ? ' ' : '') + className; - } - return element; -} - -function removeClassName(element, className) { - if (hasClassName(element, className)) { - // Replace className and surrounding whitespace to single space - // Then remove leading and trailing whitespace - element.className = element.className.replace( - new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').replace(/^\s+/, '').replace(/\s+$/, '') - } - return element; -} - -function toggleBranch(anEvent) { - var branch, subBranches; - branch = getEventTarget(anEvent); - // If user clicks in area to left of tree (background UL area), - // we don't want to do anything - // FIXME: BUT what about clicking to left of sub list & target - // being parent LI - if ("UL" == branch.tagName || - "OL" == branch.tagName) { - return; - } - // We expect branch to be a li, but Chrome treats click on li icon as - // clicking on it's content (even though icon is "outside") so need to - // do some tweaking here - while ("LI" != branch.tagName && branch.parentNode) { - branch = branch.parentNode; - } - if ("LI" == branch.tagName) { - subBranches = branch.getElementsByTagName("ul"); - if (subBranches.length > 0) { - var subBranch = subBranches[0]; - if (subBranch.style.display == "block") { - subBranch.style.display = "none"; - removeClassName(branch, "expanded"); - addClassName(branch, "collapsed"); - } else { - subBranch.style.display = "block"; - removeClassName(branch, "collapsed"); - addClassName(branch, "expanded"); - } - } - } -} - -function addEventListener(anElement, anEventName, anEventHandler) { - if (anElement.addEventListener) { - anElement.addEventListener(anEventName, anEventHandler, false); - } else if (tree.attachEvent) { - ieEventName = "on" + anEventName; // MS IE different (of course) - anElement.attachEvent(ieEventName, anEventHandler); - } -} - -function activateTree(tree) { - // Collapse (hide) the tree branches - var branches = tree.getElementsByTagName("ul"); - for (var i=0; i < branches.length; i++) { - branches[i].style.display="none"; - } - // Style the items (see dbdoc.css) - var items = tree.getElementsByTagName("li"); - for (var i=0; i < items.length; i++) { - if (items[i].getElementsByTagName("li").length > 0) { - addClassName(items[i], "collapsed"); - } else { - addClassName(items[i], "noChildren"); - } - } - addEventListener(tree, "click", toggleBranch); -} - -function initializeTrees() { - var trees = document.getElementsByName("Tree"); - for (var idx = 0; idx < trees.length; idx++) { - activateTree(trees[idx]); - } -} - -//=============== -// Frame Loaders -//=============== - -//http://stackoverflow.com/questions/984510/what-is-my-script-src-url/984656#984656 -var scriptSource = (function(scripts) { - var scripts = document.getElementsByTagName('script'), - script = scripts[scripts.length - 1]; - - return (script.getAttribute.length !== undefined) ? - //FF/Chrome/Safari - script.src : //(only FYI, this would work also in IE8) - //IE 6/7/8 - script.getAttribute('src', 4); //using 4 (and not -1) see MSDN http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx -}()); -// Now that we know where we are, compose URL fo empty.html (which should -// be in the same directory as this script) -var emptyHtml = scriptSource.substr(0, scriptSource.length - 8) + "empty.html"; - -function loadDBObjects(src) { - parent.DBObjectsFrame.location.href = src; -} - -function loadDetails(src) { - parent.ObjectDetailsFrame.location.href = src; -} - -function loadChildren(src) { - parent.ObjectDetailsChildrenFrame.location.href = src; -} - -function loadDependentFrames() { - var found = false; - // ObjectsFrame - // ObjectTypeFrame - // DBObjectsFrame - if (window.name == "ObjectsFrame") { - for (idx = 0; idx < document.links.length; idx++) { - if (document.links[idx].target == "ObjectDetailsFrame") { - loadDetails(document.links[idx].href); - found = true; - break; - } - } - if (!found) { - loadDetails(emptyHtml); - } - } else if (window.name == "ObjectTypeFrame") { - for (idx = 0; idx < document.links.length; idx++) { - if (document.links[idx].target == "DBObjectsFrame") { - loadDBObjects(document.links[idx].href); - found = true; - break; - } - } - if (!found) { - loadChildren(emptyHtml); - } - } else if (window.name == "DBObjectsFrame") { - for (idx = 0; idx < document.links.length; idx++) { - if (document.links[idx].target == "ObjectDetailsFrame") { - loadDetails(document.links[idx].href); - found = true; - break; - } - } - if (!found) { - loadChildren(emptyHtml); - } - } else if (window.name == "ObjectDetailsFrame") { - for (idx = 0; idx < document.links.length; idx++) { - if (document.links[idx].target == "ObjectDetailsChildrenFrame") { - loadChildren(document.links[idx].href); - found = true; - break; - } - } - if (!found) { - loadChildren(emptyHtml); - } - } -} - -// Initialization -function addLoadEventListener(func) { - var prevOnLoad = window.onload; - if (typeof window.onload != 'function') { - // That is, not defined yet - window.onload = func; - } else { - window.onload = function() { - if (prevOnLoad) { - prevOnLoad(); - } - func(); - } - } -} -addLoadEventListener(initializeTrees); -addLoadEventListener(loadDependentFrames); diff --git a/docs/core/DBDocs/empty.html b/docs/core/DBDocs/empty.html deleted file mode 100644 index 2325660..0000000 --- a/docs/core/DBDocs/empty.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/docs/core/DBDocs/index.html b/docs/core/DBDocs/index.html deleted file mode 100644 index 729eb44..0000000 --- a/docs/core/DBDocs/index.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - <H2> - Frame Alert</H2> - <P> - This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. - <BR> - - - - - diff --git a/docs/core/DBDocs/nodeTypes.html b/docs/core/DBDocs/nodeTypes.html deleted file mode 100644 index 710bc57..0000000 --- a/docs/core/DBDocs/nodeTypes.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - -

          WTP

          -Tables -Packages -Package Bodies -Sequences - - \ No newline at end of file diff --git a/docs/core/DBDocs/package body/WTPLSQL.html b/docs/core/DBDocs/package body/WTPLSQL.html deleted file mode 100644 index e70c1f3..0000000 --- a/docs/core/DBDocs/package body/WTPLSQL.html +++ /dev/null @@ -1,788 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Doc

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Code

          -
          -
          -
          -
          -
          -
          -
          - -


          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          OWNERWTP
          OBJECT_NAMEWTPLSQL
          SUBOBJECT_NAMEnull
          OBJECT_ID41930
          DATA_OBJECT_IDnull
          OBJECT_TYPEPACKAGE BODY
          CREATED29-JUN-2018 15:09:15
          LAST_DDL_TIME29-JUN-2018 15:21:16
          TIMESTAMP2018-06-29:15:21:16
          STATUSVALID
          TEMPORARYN
          GENERATEDN
          SECONDARYN
          NAMESPACE2
          EDITION_NAMEnull
          -
          -
          -
          -
          - - - - - - - - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          EXECUTEPUBLICNOWTPWTPLSQL
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          -
          -package body wtplsql
          -as
          -
          -   C_KEEP_NUM_RECS  number := 20;
          -
          -   g_test_runs_rec   wt_test_runs%ROWTYPE;
          -
          -   $IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -   $THEN
          -      TYPE test_all_aa_type is table of varchar2(400) index by varchar2(400);
          -      test_all_aa       test_all_aa_type;
          -      wtplsql_skip_test boolean := FALSE;
          -   $END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -----------------------
          ---  Private Procedures
          -----------------------
          -
          -
          -------------------------------------------------------------
          --- This procedure is separated for internal WTPLSQL testing
          -procedure check_runner
          -is
          -   l_package_check        number;
          -begin
          -   -- These RAISEs can be captured because the Test Runs Record is set.
          -   --  Check for NULL Runner Name
          -   if g_test_runs_rec.runner_name is null
          -   then
          -      raise_application_error (-20001, 'RUNNER_NAME is null');
          -   end if;
          -   --  Check for Valid Runner Name
          -   select count(*) into l_package_check
          -    from  all_arguments
          -    where owner         = USER
          -     and  object_name   = 'WTPLSQL_RUN'
          -     and  package_name  = g_test_runs_rec.runner_name
          -     and  argument_name is null
          -     and  position      = 1
          -     and  sequence      = 0;
          -   if l_package_check != 1
          -   then
          -      raise_application_error (-20002, 'RUNNER_NAME "' ||
          -                           g_test_runs_rec.runner_name ||
          -                           '.WTPLSQL_RUN" is not valid');
          -   end if;
          -end check_runner;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_check_runner
          -   is
          -      l_save_test_runs_rec   wt_test_runs%ROWTYPE := g_test_runs_rec;
          -      l_msg_in   varchar2(4000);
          -      l_err_in   varchar2(4000);
          -      --------------------------------------  WTPLSQL Testing --
          -      procedure l_test_sqlerrm is begin
          -         -- Restore the G_TEST_RUNS_REC
          -         g_test_runs_rec := l_save_test_runs_rec;
          -         wt_assert.eq
          -                  (msg_in          => l_msg_in
          -                  ,check_this_in   => SQLERRM
          -                  ,against_this_in => l_err_in);
          -      end l_test_sqlerrm;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      -- This Test Case runs in the EXECUTE IMMEDAITE in the TEST_RUN
          -      --   procedure in this package.
          -      wt_assert.g_testcase := 'CHECK_RUNNER Sad Path 1';
          -      begin
          -         g_test_runs_rec.runner_name := '';
          -         l_msg_in := 'Null RUNNER_NAME';
          -         l_err_in := 'ORA-20001: RUNNER_NAME is null';
          -         check_runner;
          -         l_test_sqlerrm;
          -      exception when others then
          -         l_test_sqlerrm;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'CHECK_RUNNER Sad Path 2';
          -      begin
          -         g_test_runs_rec.runner_name := 'BOGUS';
          -         l_msg_in := 'Invalid RUNNER_NAME';
          -         l_err_in := 'ORA-20002: RUNNER_NAME "BOGUS.WTPLSQL_RUN" is not valid';
          -         check_runner;
          -         l_test_sqlerrm;
          -      exception when others then
          -         l_test_sqlerrm;
          -      end;
          -   end t_check_runner;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure insert_test_run
          -is
          -   PRAGMA AUTONOMOUS_TRANSACTION;
          -   l_wt_test_runs_recNULL  wt_test_runs%ROWTYPE;
          -begin
          -   if g_test_runs_rec.id is null
          -   then
          -      return;
          -   end if;
          -   g_test_runs_rec.end_dtm := systimestamp;
          -   insert into wt_test_runs values g_test_runs_rec;
          -   g_test_runs_rec := l_wt_test_runs_recNULL;
          -   COMMIT;
          -exception
          -   when OTHERS
          -   then
          -      DBMS_OUTPUT.PUT_LINE(dbms_utility.format_error_stack ||
          -                           dbms_utility.format_error_backtrace);
          -end insert_test_run;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_insert_test_run
          -   is
          -      --------------------------------------  WTPLSQL Testing --
          -      TYPE l_dbmsout_buff_type is table of varchar2(32767);
          -      l_dbmsout_buff   l_dbmsout_buff_type := l_dbmsout_buff_type(1);
          -      l_test_runs_rec  wt_test_runs%ROWTYPE;
          -      l_dbmsout_line   varchar2(32767);
          -      l_dbmsout_stat   number;
          -      l_num_recs       number;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'INSERT_TEST_RUN Happy Path 1';
          -      l_test_runs_rec := g_test_runs_rec;
          -      insert_test_run;
          -      g_test_runs_rec := l_test_runs_rec;
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'Number of Records',
          -         check_query_in   => 'select count(*) from wt_test_runs' ||
          -                             ' where id = ' || l_test_runs_rec.id,
          -         against_value_in => 1);
          -      --------------------------------------  WTPLSQL Testing --
          -      delete from wt_test_runs
          -       where id = l_test_runs_rec.id;
          -      COMMIT;
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'Records After Delete',
          -         check_query_in   => 'select count(*) from wt_test_runs' ||
          -                             ' where id = ' || l_test_runs_rec.id,
          -         against_value_in => 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'INSERT_TEST_RUN Sad Path 1';
          -      -- Save/Clear the DBMS_OUPTUT Buffer
          -      loop
          -         DBMS_OUTPUT.GET_LINE (
          -            line   => l_dbmsout_line,
          -            status => l_dbmsout_stat);
          -         exit when l_dbmsout_stat != 0;
          -         l_dbmsout_buff(l_dbmsout_buff.COUNT) := l_dbmsout_line;
          -         l_dbmsout_buff.extend;
          -      end loop;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in        => 'l_dbmsout_buff.COUNT - 1',
          -         check_this_in => l_dbmsout_buff.COUNT - 1);
          -      --------------------------------------  WTPLSQL Testing --
          -      select count(*) into l_num_recs from wt_test_runs;
          -      l_test_runs_rec := g_test_runs_rec;
          -      g_test_runs_rec.start_dtm := null;
          -      insert_test_run;
          -      g_test_runs_rec := l_test_runs_rec;
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'Number of Records should stay the same',
          -         check_query_in   => 'select count(*) from wt_test_runs',
          -         against_value_in => l_num_recs);
          -      --------------------------------------  WTPLSQL Testing --
          -      DBMS_OUTPUT.GET_LINE (
          -         line   => l_dbmsout_line,
          -         status => l_dbmsout_stat);
          -      wt_assert.eq (
          -         msg_in          => 'DBMS_OUTPUT Status',
          -         check_this_in   => l_dbmsout_stat,
          -         against_this_in => 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      if wt_assert.last_pass
          -      then
          -         wt_assert.isnotnull (
          -            msg_in        => 'DBMS_OUTPUT Line',
          -            check_this_in => l_dbmsout_line);
          -         wt_assert.this (
          -            msg_in        => 'Confirm DBMS_OUTPUT Line text',
          -            check_this_in => (l_dbmsout_line like 'ORA-01400: cannot insert NULL into ("WTP"."WT_TEST_RUNS"."START_DTM")%'));
          -      --------------------------------------  WTPLSQL Testing --
          -         if not wt_assert.last_pass
          -         then
          -            -- No match, put the line back into DBMS_OUTPUT buffer and end this.
          -            DBMS_OUTPUT.PUT_LINE(l_dbmsout_line);
          -         end if;
          -      end if;
          -      --------------------------------------  WTPLSQL Testing --
          -      -- Restore the DBMS_OUPTUT Buffer
          -      for i in 1 .. l_dbmsout_buff.COUNT - 1
          -      loop
          -         DBMS_OUTPUT.PUT_LINE(l_dbmsout_buff(i));
          -      end loop;
          -      wt_assert.isnotnull (
          -         msg_in        => 'l_dbmsout_buff.COUNT - 1',
          -         check_this_in =>  l_dbmsout_buff.COUNT - 1);
          -   end t_insert_test_run;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          ----------------------
          ---  Public Procedures
          ----------------------
          -
          -
          -------------------------------------------------------------
          -function show_version
          -   return varchar2
          -is
          -   ret_str  wt_version.text%TYPE;
          -begin
          -   select max(t1.text) into ret_str
          -    from  wt_version  t1
          -    where t1.install_dtm = (select max(t2.install_dtm)
          -                             from  wt_version  t2);
          -   return ret_str;
          -exception when NO_DATA_FOUND
          -then
          -   return '';
          -end show_version;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_show_version
          -   is
          -      existing_version   wt_version.text%TYPE;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Show Version Happy Path';
          -      existing_version := show_version;
          -      wt_assert.isnotnull (
          -         msg_in        => 'Test Existing Version',
          -         check_this_in => existing_version);
          -      --------------------------------------  WTPLSQL Testing --
          -      insert into wt_version (install_dtm, action, text)
          -         values (to_date('31-DEC-4000','DD-MON-YYYY'), 'TESTING', 'TESTING');
          -      wt_assert.eq (
          -         msg_in          => 'Test New Version',
          -         check_this_in   => show_version,
          -         against_this_in => 'TESTING');
          -      --------------------------------------  WTPLSQL Testing --
          -      rollback;
          -      wt_assert.eq (
          -         msg_in          => 'Return to Existing Version',
          -         check_this_in   => show_version,
          -         against_this_in => existing_version);
          -   end t_show_version;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure test_run
          -      (in_package_name  in  varchar2)
          -is
          -   l_test_runs_rec_NULL   wt_test_runs%ROWTYPE;
          -   l_error_stack          varchar2(32000);
          -   procedure concat_err_message is begin
          -      if g_test_runs_rec.error_message is not null
          -      then
          -         g_test_runs_rec.error_message := substr(l_error_stack || CHR(10)||
          -                                                 g_test_runs_rec.error_message
          -                                                ,1,4000);
          -      else
          -         g_test_runs_rec.error_message := l_error_stack;
          -      end if;
          -   end concat_err_message;
          -begin
          -   $IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -   $THEN
          -      -- This will avoid running the TEST_RUN procedure for some self-tests
          -      if wtplsql_skip_test
          -      then
          -         test_all_aa(in_package_name) := 'X';
          -         return;
          -      end if;
          -      --DBMS_OUTPUT.PUT_LINE('DEBUG WTPLSQL selftest Enabled for Test Runner "' || in_package_name || '"');
          -   $END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -   -- Reset the Test Runs Record before checking anything
          -   g_test_runs_rec               := l_test_runs_rec_NULL;
          -   g_test_runs_rec.id            := wt_test_runs_seq.nextval;
          -   g_test_runs_rec.start_dtm     := systimestamp;
          -   g_test_runs_rec.runner_owner  := USER;
          -   g_test_runs_rec.runner_name   := in_package_name;
          -   g_test_runs_rec.error_message := '';
          -   check_runner;
          -   -- Initialize
          -   delete_runs(in_runner_owner => g_test_runs_rec.runner_owner  -- Autonomous Transaction COMMIT
          -              ,in_runner_name  => g_test_runs_rec.runner_name);
          -   wt_assert.reset_globals;
          -   wt_test_run_stat.initialize;
          -   wt_result.initialize(g_test_runs_rec.id);
          -   wt_profiler.initialize(in_test_run_id      => g_test_runs_rec.id,
          -                          in_runner_name      => g_test_runs_rec.runner_name,
          -                          out_dbout_owner     => g_test_runs_rec.dbout_owner,
          -                          out_dbout_name      => g_test_runs_rec.dbout_name,
          -                          out_dbout_type      => g_test_runs_rec.dbout_type,
          -                          out_trigger_offset  => g_test_runs_rec.trigger_offset,
          -                          out_profiler_runid  => g_test_runs_rec.profiler_runid,
          -                          out_error_message   => l_error_stack);
          -   concat_err_message;
          -   -- Call the Test Runner
          -   begin
          -      execute immediate 'BEGIN ' || in_package_name || '.WTPLSQL_RUN; END;';
          -   exception
          -      when OTHERS
          -      then
          -         l_error_stack := dbms_utility.format_error_stack     ||
          -                          dbms_utility.format_error_backtrace ;
          -         concat_err_message;
          -   end;
          -
          -   -- Finalize
          -   insert_test_run;            -- Autonomous Transaction COMMIT
          -   wt_profiler.finalize;       -- Autonomous Transaction COMMIT
          -   wt_result.finalize;         -- Autonomous Transaction COMMIT
          -   wt_test_run_stat.finalize;  -- Autonomous Transaction COMMIT
          -
          -exception
          -   when OTHERS
          -   then
          -      l_error_stack := dbms_utility.format_error_stack     ||
          -                       dbms_utility.format_error_backtrace ;
          -      if g_test_runs_rec.id is null
          -      then
          -         DBMS_OUTPUT.PUT_LINE(l_error_stack);
          -         DBMS_OUTPUT.PUT_LINE('---------------------------');
          -         DBMS_OUTPUT.PUT_LINE(g_test_runs_rec.error_message);
          -      else
          -         concat_err_message;
          -         insert_test_run;    -- Autonomous Transaction COMMIT
          -      end if;
          -      wt_profiler.finalize;       -- Autonomous Transaction COMMIT
          -      wt_result.finalize;         -- Autonomous Transaction COMMIT
          -      wt_test_run_stat.finalize;  -- Autonomous Transaction COMMIT
          -
          -end test_run;
          -
          ---==============================================================--
          --- No Unit Test for TEST_RUN.
          ---   Too complicated because testing occurs while the TEST_RUN
          ---   procedure is executing.  This also prevents 100% profiling.
          ---==============================================================--
          -
          -
          -------------------------------------------------------------
          -procedure test_all
          -is
          -   TYPE runners_nt_type is table of varchar2(128);
          -   l_runners_nt      runners_nt_type;
          -begin
          -   select package_name
          -     bulk collect into l_runners_nt
          -    from  user_arguments  t1
          -    where object_name = 'WTPLSQL_RUN'
          -     and  position    = 1
          -     and  sequence    = 0
          -     and  data_type   is null
          -     and  not exists (
          -          select 'x' from user_arguments  t2
          -           where t2.object_name = t1.object_name
          -            and  t2.position    > t1.position
          -            and  t2.sequence    > t1.sequence
          -            and  (   t2.overload is null
          -                  OR t2.overload = t1.overload)
          -          );
          -   for i in 1 .. l_runners_nt.COUNT
          -   loop
          -      test_run(l_runners_nt(i));
          -   end loop;
          -end test_all;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_test_all
          -   is
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'TEST_ALL Happy Path';
          -      test_all_aa.DELETE;
          -      wtplsql_skip_test := TRUE;
          -      -- TEST_ALL will populate the test_all_aa array
          -      wtplsql.test_all;
          -      wtplsql_skip_test := FALSE;
          -      -- This package should be in the test_all_aa array
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.this (
          -         msg_in        => 'test_all_aa.EXISTS(''WTPLSQL'')',
          -         check_this_in => test_all_aa.EXISTS('WTPLSQL'));
          -   end t_test_all;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure delete_runs
          -      (in_test_run_id  in number)
          -is
          -   PRAGMA AUTONOMOUS_TRANSACTION;
          -begin
          -   -- Profiler delete must be first because it contains a
          -   --    PRAGMA AUTONOMOUS_TRANSACTION
          -   wt_test_run_stat.delete_records(in_test_run_id);
          -   wt_profiler.delete_records(in_test_run_id);
          -   wt_result.delete_records(in_test_run_id);
          -   delete from wt_test_runs where id = in_test_run_id;
          -   COMMIT;
          -end delete_runs;
          -
          -procedure delete_runs
          -      (in_runner_owner  in varchar2
          -      ,in_runner_name   in varchar2)
          -is
          -   num_recs    number;
          -begin
          -   num_recs := 1;
          -   for buf2 in (select id from wt_test_runs
          -                 where runner_owner = in_runner_owner
          -                  and  runner_name  = in_runner_name
          -                 order by start_dtm desc, id desc)
          -   loop
          -      -- Keep the last 20 rest runs for this USER
          -      if num_recs > C_KEEP_NUM_RECS
          -      then
          -       -- Autonomous Transaction COMMIT
          -       delete_runs(buf2.id);
          -      end if;
          -      num_recs := num_recs + 1;
          -   end loop;
          -end delete_runs;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_delete_run_id
          -   is
          -      l_num_recs   number;
          -      l_err_stack  varchar2(32000);
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      --  DELETE_RECORDS has already run when we arrive here.
          -      -- Cleanup from previous test
          -      delete from wt_test_runs
          -        where id between 0-C_KEEP_NUM_RECS and 0-1;
          -      commit;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'DELETE_RUNS Happy Path 1';
          -      select count(*)
          -       into  l_num_recs
          -       from  wt_test_runs
          -       where runner_owner = USER
          -        and  runner_name  = g_test_runs_rec.runner_name;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in        => 'Number of Records Before Insert',
          -         check_this_in => l_num_recs);
          -      wt_assert.this (
          -         msg_in        => 'Number of Records Before Insert <= ' || C_KEEP_NUM_RECS,
          -         check_this_in => l_num_recs <= C_KEEP_NUM_RECS);
          -      --------------------------------------  WTPLSQL Testing --
          -      insert into wt_test_runs values g_test_runs_rec;
          -      COMMIT;
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'Number of Records After Insert',
          -         check_query_in   => 'select count(*) from wt_test_runs' ||
          -                             ' where id = ' || g_test_runs_rec.id,
          -         against_value_in => 1);
          -      delete_runs(g_test_runs_rec.id);  -- Autonomous Transaction
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'Number of Records After Delete',
          -         check_query_in   => 'select count(*) from wt_test_runs' ||
          -                             ' where id = ' || g_test_runs_rec.id,
          -         against_value_in => 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'DELETE_RUNS Happy Path 2';
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'Confirm number of records',
          -         check_query_in   => 'select count(*) from wt_test_runs' ||
          -                             ' where runner_owner = ''' || USER ||
          -                           ''' and runner_name = ''' || g_test_runs_rec.runner_name ||
          -                           '''',
          -         against_value_in => l_num_recs);
          -      --------------------------------------  WTPLSQL Testing --
          -      for i in 1 .. C_KEEP_NUM_RECS
          -      loop
          -         insert into wt_test_runs
          -               (id, start_dtm, runner_owner, runner_name)
          -            values
          -               (0-i, sysdate-7000-i, USER, g_test_runs_rec.runner_name);
          -      end loop;
          -      commit;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'Check Added ' || C_KEEP_NUM_RECS || ' records',
          -         check_query_in   => 'select count(*) from wt_test_runs' ||
          -                             ' where runner_owner = ''' || USER ||
          -                           ''' and runner_name = ''' || g_test_runs_rec.runner_name ||
          -                           '''',
          -         against_value_in => l_num_recs + C_KEEP_NUM_RECS);
          -      delete_runs(USER, g_test_runs_rec.runner_name);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'Check number of records reduced',
          -         check_query_in   => 'select count(*) from wt_test_runs' ||
          -                             ' where runner_owner = ''' || USER ||
          -                           ''' and runner_name = ''' || g_test_runs_rec.runner_name ||
          -                           '''',
          -         against_value_in => C_KEEP_NUM_RECS);
          -      delete from wt_test_runs
          -        where id between 0-C_KEEP_NUM_RECS and 0-1;
          -      commit;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'Confirm original number of records',
          -         check_query_in   => 'select count(*) from wt_test_runs' ||
          -                             ' where runner_owner = ''' || USER ||
          -                           ''' and runner_name = ''' || g_test_runs_rec.runner_name ||
          -                           '''',
          -         against_value_in => l_num_recs);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'DELETE_RUNS Sad Path 1';
          -      begin
          -         delete_runs(-9995);  -- Should run without error
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      exception when others then
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'Delete Runs(-9995)',
          -         check_this_in   => l_err_stack);
          -   end t_delete_run_id;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          ---==============================================================--
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_test_runs_rec_and_table
          -   is
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'TEST_RUNS_REC_AND_TABLE Happy Path';
          -      -- This Test Case runs in the EXECUTE IMMEDAITE in the TEST_RUN
          -      --   procedure in this package.
          -      wt_assert.isnotnull
          -               (msg_in        => 'g_test_runs_rec.id'
          -               ,check_this_in => g_test_runs_rec.id);
          -      wt_assert.isnotnull
          -               (msg_in        => 'g_test_runs_rec.start_dtm'
          -               ,check_this_in => g_test_runs_rec.start_dtm);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull
          -               (msg_in        => 'g_test_runs_rec.runner_owner'
          -               ,check_this_in => g_test_runs_rec.runner_owner);
          -      wt_assert.eq
          -               (msg_in          => 'g_test_runs_rec.runner_name'
          -               ,check_this_in   => g_test_runs_rec.runner_name
          -               ,against_this_in => 'WTPLSQL');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull
          -               (msg_in        => 'g_test_runs_rec.dbout_owner'
          -               ,check_this_in => g_test_runs_rec.dbout_owner);
          -      wt_assert.isnull
          -               (msg_in          => 'g_test_runs_rec.dbout_name'
          -               ,check_this_in   => g_test_runs_rec.dbout_name);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull
          -               (msg_in          => 'g_test_runs_rec.dbout_type'
          -               ,check_this_in   => g_test_runs_rec.dbout_type);
          -      wt_assert.isnull
          -               (msg_in        => 'g_test_runs_rec.profiler_runid'
          -               ,check_this_in => g_test_runs_rec.profiler_runid);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull
          -               (msg_in        => 'g_test_runs_rec.end_dtm'
          -               ,check_this_in => g_test_runs_rec.end_dtm);
          -      wt_assert.isnull
          -               (msg_in        => 'g_test_runs_rec.error_message'
          -               ,check_this_in => g_test_runs_rec.error_message);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eqqueryvalue
          -               (msg_in             => 'TEST_RUNS Record for this TEST_RUN'
          -               ,check_query_in     => 'select count(*) from WT_TEST_RUNS' ||
          -                                      ' where id = ''' || g_test_runs_rec.id || ''''
          -               ,against_value_in   => 0);
          -   end t_test_runs_rec_and_table;
          -   ----------------------------------------
          -   procedure WTPLSQL_RUN
          -   is
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      t_show_version;
          -      t_check_runner;
          -      t_insert_test_run;
          -      t_test_all;
          -      t_delete_run_id;
          -      t_test_runs_rec_and_table;
          -   end;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          ---==============================================================--
          -
          -
          -end wtplsql;
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/package body/WTPLSQL/headerBg.jpg b/docs/core/DBDocs/package body/WTPLSQL/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/package body/WTPLSQL/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/package body/WTPLSQL/report.css b/docs/core/DBDocs/package body/WTPLSQL/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/package body/WTPLSQL/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/package body/WTPLSQL/report.js b/docs/core/DBDocs/package body/WTPLSQL/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/package body/WTPLSQL/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/package body/WTPLSQL/topDimTabBg.gif b/docs/core/DBDocs/package body/WTPLSQL/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/package body/WTPLSQL/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WTPLSQL/topDimTabL.gif b/docs/core/DBDocs/package body/WTPLSQL/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/package body/WTPLSQL/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WTPLSQL/topDimTabR.gif b/docs/core/DBDocs/package body/WTPLSQL/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/package body/WTPLSQL/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WTPLSQL/topTabBg.gif b/docs/core/DBDocs/package body/WTPLSQL/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/package body/WTPLSQL/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WTPLSQL/topTabL.gif b/docs/core/DBDocs/package body/WTPLSQL/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/package body/WTPLSQL/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WTPLSQL/topTabR.gif b/docs/core/DBDocs/package body/WTPLSQL/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/package body/WTPLSQL/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_ASSERT.html b/docs/core/DBDocs/package body/WT_ASSERT.html deleted file mode 100644 index 20edb69..0000000 --- a/docs/core/DBDocs/package body/WT_ASSERT.html +++ /dev/null @@ -1,4080 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Doc

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Code

          -
          -
          -
          -
          -
          -
          -
          - -

          See (public) RESET_GLOBALS procedure for default global values


          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          OWNERWTP
          OBJECT_NAMEWT_ASSERT
          SUBOBJECT_NAMEnull
          OBJECT_ID41932
          DATA_OBJECT_IDnull
          OBJECT_TYPEPACKAGE BODY
          CREATED29-JUN-2018 15:09:16
          LAST_DDL_TIME29-JUN-2018 15:21:16
          TIMESTAMP2018-06-29:15:21:16
          STATUSVALID
          TEMPORARYN
          GENERATEDN
          SECONDARYN
          NAMESPACE2
          EDITION_NAMEnull
          -
          -
          -
          -
          - - - - - - - - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          EXECUTEPUBLICNOWTPWT_ASSERT
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          -
          -package body wt_assert is
          -
          -   -- See (public) RESET_GLOBALS procedure for default global values
          -   TYPE g_rec_type is record
          -      (last_pass        boolean
          -      ,raise_exception  boolean
          -      ,last_assert      wt_results.assertion%TYPE
          -      ,last_msg         wt_results.message%TYPE
          -      ,last_details     wt_results.details%TYPE);
          -   g_rec  g_rec_type;
          -
          -   $IF $$WTPLSQL_SELFTEST $THEN  ------%WTPLSQL_begin_ignore_lines%------
          -      temp_rowid1 CONSTANT rowid          := chartorowid('AAAFd1AAFAAAABSAA/');
          -      temp_rowid2 CONSTANT rowid          := chartorowid('AAAFd1AAFAAAABSAB/');
          -      temp_long1  CONSTANT long           := hextoraw('0123456789ABCDEF0123456789ABCDEF');
          -      temp_long2  CONSTANT long           := hextoraw('FEDCBA9876543210FEDCBA9876543210');
          -      temp_raw1   CONSTANT raw(2)         := hextoraw('2345');
          -      temp_raw2   CONSTANT raw(2)         := hextoraw('6789');
          -      temp_lraw1  CONSTANT long raw       := hextoraw('0123456789ABCDEF0123456789ABCDEF');
          -      temp_lraw2  CONSTANT long raw       := hextoraw('FEDCBA9876543210FEDCBA9876543210');
          -      temp_blob1           BLOB;
          -      temp_blob2  CONSTANT BLOB           := hextoraw('FEDCBA9876543210FEDCBA9876543210');
          -      --------------------------------------  WTPLSQL Testing --
          -      temp_nc1    CONSTANT NVARCHAR2(12)  := 'NCHAR1';
          -      temp_nc2    CONSTANT NVARCHAR2(12)  := 'NCHAR2';
          -      temp_bool   CONSTANT boolean        := NULL;
          -      temp_clob1           CLOB;
          -      temp_clob2  CONSTANT CLOB           := 'This is another clob.';
          -      temp_nclob1          NCLOB;
          -      temp_nclob2 CONSTANT NCLOB          := 'This is another clob.';
          -      temp_xml1            XMLTYPE;
          -      temp_xml2   CONSTANT XMLTYPE        := xmltype('<?xml version="1.0" encoding="UTF-8"?><note>2</note>');
          -      --------------------------------------  WTPLSQL Testing --
          -      temp_pint1  CONSTANT pls_integer    := 2;
          -      temp_pint2  CONSTANT pls_integer    := 3;
          -      temp_date   CONSTANT date           := sysdate;
          -      temp_tstmp  CONSTANT timestamp      := systimestamp;
          -      temp_tstlzn CONSTANT timestamp with local time zone := systimestamp;
          -      temp_tstzn  CONSTANT timestamp with time zone := systimestamp;
          -      temp_intds1 CONSTANT interval day to second   := interval '+01 01:01:01.001' day to second;
          -      temp_intds2 CONSTANT interval day to second   := interval '+02 02:02:02.002' day to second;
          -      temp_intym1 CONSTANT interval year to month   := interval '+01-01' year to month;
          -      temp_intym2 CONSTANT interval year to month   := interval '+02-02' year to month;
          -      --------------------------------------  WTPLSQL Testing --
          -      temp_rec          g_rec_type;
          -      temp_testcase     VARCHAR2(4000);
          -      wtplsql_skip_save boolean := FALSE;
          -   $END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -----------------------
          ---  Private Procedures
          -----------------------
          -
          -------------------------------------------------------------
          -function boolean_to_status
          -      (in_boolean  in boolean)
          -   return varchar2
          -is
          -begin
          -   if in_boolean is null
          -   then
          -      return '';
          -   elsif in_boolean
          -   then
          -      return 'TRUE';
          -   end if;
          -   return 'FALSE';
          -end boolean_to_status;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_boolean_to_status
          -   is
          -   begin
          -      wt_assert.g_testcase := 'BOOLEAN_TO_STATUS';
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq
          -         (msg_in            => 'Test for "TRUE" conversion'
          -         ,check_this_in     => boolean_to_status(TRUE)
          -         ,against_this_in   => 'TRUE');
          -      wt_assert.eq
          -         (msg_in            => 'Test for "FALSE" conversion'
          -         ,check_this_in     => boolean_to_status(FALSE)
          -         ,against_this_in   => 'FALSE');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull
          -         (msg_in            => 'Test for NULL'
          -         ,check_this_in     => boolean_to_status(temp_bool));
          -   end t_boolean_to_status;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure process_assertion
          -is
          -begin
          -
          -$IF $$WTPLSQL_SELFTEST $THEN  ------%WTPLSQL_begin_ignore_lines%------
          -   if not wtplsql_skip_save then
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -   wt_result.save
          -      (in_assertion      => g_rec.last_assert
          -      ,in_status         => case g_rec.last_pass
          -                            when TRUE then C_PASS
          -                                      else C_FAIL
          -                            end
          -      ,in_details        => g_rec.last_details
          -      ,in_testcase       => g_testcase
          -      ,in_message        => g_rec.last_msg);
          -$IF $$WTPLSQL_SELFTEST $THEN   ------%WTPLSQL_begin_ignore_lines%------
          -   end if;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -   if g_rec.raise_exception and not g_rec.last_pass
          -   then
          -      raise_application_error(-20003, wt_text_report.format_test_result
          -                                         (in_assertion      => g_rec.last_assert
          -                                         ,in_status         => C_FAIL
          -                                         ,in_details        => g_rec.last_details
          -                                         ,in_testcase       => g_testcase
          -                                         ,in_message        => g_rec.last_msg) );
          -   end if;
          -
          -end process_assertion;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_process_assertion
          -   is
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      g_testcase  := 'PROCESS_ASSERTION';
          -      g_rec.last_assert     := 'THIS';
          -      g_rec.last_pass       := FALSE;
          -      g_rec.last_details    := 'Expected "PASS" and got "FAIL"';
          -      g_rec.last_msg        := 'Process Assertion Forced Failure';
          -      g_rec.raise_exception := TRUE;
          -      wtplsql_skip_save  := TRUE;
          -      process_assertion;  -- Should throw exception
          -      wtplsql_skip_save  := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -   exception
          -      when ASSERT_FAILURE_EXCEPTION then
          -         wtplsql_skip_save := FALSE;
          -   end t_process_assertion;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure compare_queries (
          -      check_query_in     in   varchar2,
          -      against_query_in   in   varchar2)
          -is
          -   l_ret_txt    varchar2(10);
          -   l_qry_txt    varchar2(32000);
          -   l_exec_txt   varchar2(32767);
          -begin
          -   -- Define Query for the Comparison
          -   l_qry_txt := 'with check_query as (' || check_query_in   ||
          -                '), against_query as (' || against_query_in ||
          -                '), q1 as (select * from check_query'       ||
          -                   ' MINUS select * from against_query'     ||
          -                '), q2 as (select * from against_query'     ||
          -                   ' MINUS select * from check_query'       ||
          -                ') select * from q1 UNION select * from q2' ;
          -   ----------------------------------------
          -   -- Define EXECUTE IMMEDIATE text
          -   l_exec_txt :=
          -'declare
          -   cursor cur is ' || l_qry_txt || ';
          -   rec cur%rowtype;
          -begin     
          -   open cur;
          -   fetch cur into rec;
          -	:ret_txt := case cur%FOUND when TRUE then ''FOUND''
          -                              else ''NOTFOUND'' end;
          -   close cur;
          -end;';
          -   ----------------------------------------
          -   -- Run the Comparison
          -   execute immediate l_exec_txt using out l_ret_txt;
          -   if l_ret_txt = 'FOUND'
          -   then
          -      g_rec.last_pass := FALSE; -- Some Difference Found
          -   else
          -      g_rec.last_pass := TRUE;  -- Nothing found, queries match
          -   end if;
          -   -- No Exceptions Raised
          -   g_rec.last_details := 'Comparison Query: ' || l_qry_txt;
          -exception
          -   when OTHERS
          -   then
          -      g_rec.last_details := SQLERRM || CHR(10) ||
          -                            'FAILURE of Compare Query: ' || l_qry_txt || ';';
          -      g_rec.last_pass    := FALSE;
          -end compare_queries;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_compare_queries
          -   is
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'COMPARE_QUERIES Bad Query Test 1';
          -      compare_queries (
          -         check_query_in     => 'select bogus123 from bogus456',
          -         against_query_in   => 'select bogus987 from bogus654');
          -      temp_rec := g_rec;
          -      wt_assert.eq (
          -         msg_in           => 'temp_rec.last_pass',
          -         check_this_in    => temp_rec.last_pass,
          -         against_this_in  => FALSE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull(
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this(
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => (temp_rec.last_details like
          -                            '%PL/SQL: ORA-00942: table or view does not exist%'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'COMPARE_QUERIES Bad Query Test 2';
          -      compare_queries (
          -         check_query_in     => 'select table_name from user_tables',
          -         against_query_in   => 'select tablespace_name from user_tables');
          -      temp_rec := g_rec;
          -      wt_assert.eq (
          -         msg_in           => 'temp_rec.last_pass',
          -         check_this_in    => temp_rec.last_pass,
          -         against_this_in  => FALSE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull(
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this(
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details like
          -                            '%Comparison Query: with check_query as' ||
          -                            ' (select table_name from user_tables%');
          -   end t_compare_queries;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          ----------------------
          ---  Public Procedures
          ----------------------
          -
          -------------------------------------------------------------
          -function last_pass
          -   return boolean
          -is
          -begin
          -   return g_rec.last_pass;
          -end last_pass;
          -
          -function last_assert
          -   return wt_results.assertion%TYPE
          -is
          -begin
          -   return g_rec.last_assert;
          -end last_assert;
          -
          -function last_msg
          -   return wt_results.message%TYPE
          -is
          -begin
          -   return g_rec.last_msg;
          -end last_msg;
          -
          -function last_details
          -   return wt_results.details%TYPE
          -is
          -begin
          -   return g_rec.last_details;
          -end last_details;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_last_values
          -   is
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Last Values Tests';
          -      wt_assert.eq (
          -         msg_in          => 'Last Pass',
          -         check_this_in   => last_pass,
          -         against_this_in => g_rec.last_pass,
          -         null_ok_in      => TRUE);
          -      wt_assert.eq (
          -         msg_in          => 'Last Assert',
          -         check_this_in   => last_assert,
          -         against_this_in => g_rec.last_assert,
          -         null_ok_in      => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      temp_rec := g_rec;
          -      wt_assert.eq (
          -         msg_in          => 'Last MSG',
          -         check_this_in   => last_msg,
          -         against_this_in => temp_rec.last_msg,
          -         null_ok_in      => TRUE);
          -      wt_assert.eq (
          -         msg_in          => 'Last Details',
          -         check_this_in   => last_details,
          -         against_this_in => g_rec.last_details,
          -         null_ok_in      => TRUE);
          -   end t_last_values;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure reset_globals
          -is
          -begin
          -   g_testcase            := '';
          -   g_rec.last_pass       := NULL;
          -   g_rec.last_assert     := '';
          -   g_rec.last_msg        := '';
          -   g_rec.last_details    := '';
          -   g_rec.raise_exception := FALSE;
          -end reset_globals;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_reset_globals
          -   is
          -   begin
          -      reset_globals;  -- Resets g_testcase
          -      temp_rec         := g_rec;
          -      temp_testcase    := g_testcase;
          -      --------------------------------------  WTPLSQL Testing --
          -      g_testcase       := 'RESET_GLOBALS';
          -      wt_assert.isnull(
          -         msg_in        => 'temp_testcase',
          -         check_this_in => temp_testcase);
          -      wt_assert.isnull
          -         (msg_in        => 'temp_rec.last_pass'
          -         ,check_this_in => temp_rec.last_pass);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq(
          -         msg_in          => 'temp_rec.raise_exception',
          -         check_this_in   => temp_rec.raise_exception,
          -         against_this_in => FALSE);
          -      wt_assert.isnull
          -         (msg_in        => 'temp_rec.last_assert'
          -         ,check_this_in => temp_rec.last_assert);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull
          -         (msg_in        => 'temp_rec.last_msg'
          -         ,check_this_in => temp_rec.last_msg);
          -      wt_assert.isnull
          -         (msg_in        => 'temp_rec.last_details'
          -         ,check_this_in => temp_rec.last_details);
          -   end t_reset_globals;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -function get_NLS_DATE_FORMAT
          -      return varchar2
          -is
          -   l_format   varchar2(50);
          -begin
          -   select value into l_format
          -    from  nls_session_parameters
          -    where parameter in 'NLS_DATE_FORMAT';
          -   return l_format;
          -end get_NLS_DATE_FORMAT;
          -
          -procedure set_NLS_DATE_FORMAT
          -      (in_format in varchar2 default 'DD-MON-YYYY HH24:MI:SS')
          -is
          -begin
          -   execute immediate 'alter session set NLS_DATE_FORMAT = ''' ||
          -                      in_format || '''';
          -end set_NLS_DATE_FORMAT;
          -
          -function get_NLS_TIMESTAMP_FORMAT
          -      return varchar2
          -is
          -   l_format   varchar2(50);
          -begin
          -   select value into l_format
          -    from  nls_session_parameters
          -    where parameter in 'NLS_TIMESTAMP_FORMAT';
          -   return l_format;
          -end get_NLS_TIMESTAMP_FORMAT;
          -
          -procedure set_NLS_TIMESTAMP_FORMAT
          -      (in_format in varchar2 default 'DD-MON-YYYY HH24:MI:SS.FF6')
          -is
          -begin
          -   execute immediate 'alter session set NLS_TIMESTAMP_FORMAT = ''' ||
          -                      in_format || '''';
          -end set_NLS_TIMESTAMP_FORMAT;
          -
          -function get_NLS_TIMESTAMP_TZ_FORMAT
          -      return varchar2
          -is
          -   l_format   varchar2(50);
          -begin
          -   select value into l_format
          -    from  nls_session_parameters
          -    where parameter in 'NLS_TIMESTAMP_TZ_FORMAT';
          -   return l_format;
          -end get_NLS_TIMESTAMP_TZ_FORMAT;
          -
          -procedure set_NLS_TIMESTAMP_TZ_FORMAT
          -      (in_format in varchar2 default 'DD-MON-YYYY HH24:MI:SS.FF6 TZH:TZM')
          -is
          -begin
          -   execute immediate 'alter session set NLS_TIMESTAMP_TZ_FORMAT = ''' ||
          -                      in_format || '''';
          -end set_NLS_TIMESTAMP_TZ_FORMAT;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_nls_settings
          -   is
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'NLS Settings';
          -      set_NLS_DATE_FORMAT('DD-MON-YYYY');
          -      wt_assert.eq
          -         (msg_in          => 'get_NLS_DATE_FORMAT 1'
          -         ,check_this_in   => get_NLS_DATE_FORMAT
          -         ,against_this_in => 'DD-MON-YYYY');
          -      set_NLS_DATE_FORMAT;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq
          -         (msg_in          => 'get_NLS_DATE_FORMAT 2'
          -         ,check_this_in   => get_NLS_DATE_FORMAT
          -         ,against_this_in => 'DD-MON-YYYY HH24:MI:SS');
          -      set_NLS_TIMESTAMP_FORMAT('DD-MON-YYYY');
          -      wt_assert.eq
          -         (msg_in          => 'get_NLS_TIMESTAMP_FORMAT 2'
          -         ,check_this_in   => get_NLS_TIMESTAMP_FORMAT
          -         ,against_this_in => 'DD-MON-YYYY');
          -      set_NLS_TIMESTAMP_FORMAT;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq
          -         (msg_in          => 'get_NLS_TIMESTAMP_FORMAT 2'
          -         ,check_this_in   => get_NLS_TIMESTAMP_FORMAT
          -         ,against_this_in => 'DD-MON-YYYY HH24:MI:SS.FF6');
          -      set_NLS_TIMESTAMP_TZ_FORMAT('DD-MON-YYYY');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq
          -         (msg_in          => 'get_NLS_TIMESTAMP_TZ_FORMAT 2'
          -         ,check_this_in   => get_NLS_TIMESTAMP_TZ_FORMAT
          -         ,against_this_in => 'DD-MON-YYYY');
          -      set_NLS_TIMESTAMP_TZ_FORMAT;
          -      wt_assert.eq
          -         (msg_in          => 'get_NLS_TIMESTAMP_TZ_FORMAT 2'
          -         ,check_this_in   => get_NLS_TIMESTAMP_TZ_FORMAT
          -         ,against_this_in => 'DD-MON-YYYY HH24:MI:SS.FF6 TZH:TZM');
          -   end t_nls_settings;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------
          ---  Assertion Procedures
          -------------------------
          -
          -------------------------------------------------------------
          -procedure this (
          -      msg_in          in   varchar2,
          -      check_this_in   in   boolean,
          -      null_ok_in      in   boolean := false,   -- Not Used, utPLSQL V1 API
          -      raise_exc_in    in   boolean := false)
          -is
          -begin
          -   g_rec.last_assert  := 'THIS';
          -   g_rec.last_msg     := msg_in;
          -   g_rec.last_pass    := nvl(check_this_in, FALSE);
          -   g_rec.last_details := 'Expected "TRUE" and got "' ||
          -                          boolean_to_status(check_this_in) || '"';
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end this;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_this
          -   is
          -      l_found_exception  BOOLEAN;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'This Happy Path';
          -      wt_assert.this (
          -         msg_in         => 'Run Test',
          -         check_this_in  => TRUE);
          -      temp_rec := g_rec;
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => temp_rec.last_assert,
          -         against_this_in => 'THIS');
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => temp_rec.last_msg,
          -         against_this_in => 'Run Test');
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'Expected "TRUE" and got "TRUE"');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'This Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      this (
          -         msg_in         => 'Not Used',
          -         check_this_in  => FALSE);
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'This Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         this (
          -            msg_in         => 'Not Used',
          -            check_this_in  => FALSE,
          -            raise_exc_in   => TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'This Sad Path 3';
          -      wtplsql_skip_save := TRUE;
          -      this (
          -         msg_in         => 'Not Used',
          -         check_this_in  => NULL);
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -   end t_this;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          --- EQ: string overload
          -procedure eq (
          -   msg_in            in   varchar2,
          -   check_this_in     in   varchar2,
          -   against_this_in   in   varchar2,
          -   null_ok_in        in   boolean := false,
          -   raise_exc_in      in   boolean := false)
          -is
          -begin
          -   g_rec.last_assert  := 'EQ';
          -   g_rec.last_msg     := msg_in;
          -   g_rec.last_pass    := (   nvl(check_this_in = against_this_in, false)
          -                           or (    check_this_in is null
          -                              and against_this_in is null
          -                              and null_ok_in              )
          -                         );
          -   g_rec.last_details := 'Expected "' || substr(against_this_in,1,1000) ||
          -                        '" and got "' || substr(check_this_in  ,1,1000) ||
          -                        '"';
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end eq;
          -
          --- EQ: boolean overload
          -procedure eq (
          -   msg_in            in   varchar2,
          -   check_this_in     in   boolean,
          -   against_this_in   in   boolean,
          -   null_ok_in        in   boolean := false,
          -   raise_exc_in      in   boolean := false)
          -is
          -begin
          -   eq (msg_in           => msg_in
          -      ,check_this_in    => boolean_to_status(check_this_in)
          -      ,against_this_in  => boolean_to_status(against_this_in)
          -      ,null_ok_in       => null_ok_in
          -      ,raise_exc_in     => raise_exc_in);
          -end eq;
          -
          --- EQ: XMLTYPE
          -procedure eq (
          -   msg_in            in   varchar2,
          -   check_this_in     in   XMLTYPE,
          -   against_this_in   in   XMLTYPE,
          -   null_ok_in        in   boolean := false,   -- Not Used, utPLSQL V1 API
          -   raise_exc_in      in   boolean := false)
          -is
          -begin
          -   g_rec.last_assert  := 'EQ';
          -   g_rec.last_msg     := msg_in;
          -   g_rec.last_pass    := (xmltype.getclobval(check_this_in)  =
          -                          xmltype.getclobval(against_this_in)  );
          -   g_rec.last_details := 'Expected "' || substr(xmltype.getclobval(against_this_in),1,1000) ||
          -                        '" and got "' || substr(xmltype.getclobval(check_this_in)  ,1,1000) ||
          -                        '"';
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end eq;
          -
          --- EQ: CLOB
          -procedure eq (
          -   msg_in            in   varchar2,
          -   check_this_in     in   CLOB,
          -   against_this_in   in   CLOB,
          -   null_ok_in        in   boolean := false,
          -   raise_exc_in      in   boolean := false)
          -is
          -begin
          -   g_rec.last_assert  := 'EQ';
          -   g_rec.last_msg     := msg_in;
          -   g_rec.last_pass    := (   nvl(check_this_in = against_this_in, false)
          -                           or (    check_this_in is null
          -                              and against_this_in is null
          -                              and null_ok_in              )
          -                         );
          -   g_rec.last_details := 'Expected "' || substr(against_this_in,1,1000) ||
          -                        '" and got "' || substr(check_this_in  ,1,1000) ||
          -                        '"';
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end eq;
          -
          --- EQ: BLOB
          -procedure eq (
          -   msg_in            in   varchar2,
          -   check_this_in     in   BLOB,
          -   against_this_in   in   BLOB,
          -   null_ok_in        in   boolean := false,
          -   raise_exc_in      in   boolean := false)
          -is
          -   compare_results  number;
          -begin
          -   g_rec.last_assert  := 'EQ';
          -   g_rec.last_msg     := msg_in;
          -   compare_results    := nvl(DBMS_LOB.COMPARE(check_this_in, against_this_in),-1);
          -   g_rec.last_pass    := (    (compare_results = 0)
          -                           or (    check_this_in is null
          -                              and against_this_in is null
          -                              and null_ok_in              )
          -                         );
          -   g_rec.last_details := 'DBMS_LOB.COMPARE on BLOBs, compare_results: ' || compare_results;
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end eq;
          -
          --------------------------------------------------------------------------
          ---   This is the start of a MASSIVE Unit Test on the "EQ" assertion   ---
          --------------------------------------------------------------------------
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_eq
          -   is
          -      l_found_exception  BOOLEAN;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ VARCHAR2 Happy Path 1';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => 'X',
          -         against_this_in => 'X');
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_pass value',
          -         check_this_in   => temp_rec.last_pass);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => (temp_rec.last_pass = TRUE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_assert value',
          -         check_this_in   => temp_rec.last_assert);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => (temp_rec.last_assert = 'EQ'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_msg value',
          -         check_this_in   => temp_rec.last_msg);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => (temp_rec.last_msg = 'Run Test'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => (temp_rec.last_details = 'Expected "X" and got "X"'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ VARCHAR2 Happy Path 2';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => 'X',
          -         against_this_in => 'X',
          -         null_ok_in      => TRUE);
          -      wt_assert.g_testcase := 'EQ VARCHAR2 Happy Path 3';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => '',
          -         against_this_in => '',
          -         null_ok_in      => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ VARCHAR2 Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => 'X',
          -         against_this_in => 'Y');
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => 'X');
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => 'Y');
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ VARCHAR2 Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         eq (
          -            msg_in          => 'Not Used',
          -            check_this_in   => 'X',
          -            against_this_in => 'Y',
          -            raise_exc_in    => TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ VARCHAR2 Sad Path 3';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => '',
          -         against_this_in => 'Y');
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => '');
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => 'Y');
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ VARCHAR2 Sad Path 4';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => '',
          -         against_this_in => '');
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => '');
          -      wt_assert.isnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => '');
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ VARCHAR2 Sad Path 5';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => 'X',
          -         against_this_in => 'Y',
          -         null_ok_in      => TRUE);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => 'X');
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => 'Y');
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ VARCHAR2 Sad Path 6';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => '',
          -         against_this_in => 'Y',
          -         null_ok_in      => TRUE);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => '');
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => 'Y');
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      -- VARCHAR2 includes Includes ROWID
          -      wt_assert.g_testcase := 'EQ ROWID Happy Path 1';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => temp_rowid1,
          -         against_this_in => temp_rowid1);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ ROWID Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_rowid1,
          -         against_this_in => temp_rowid2);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_rowid1);
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => temp_rowid2);
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      -- VARCHAR2 includes Includes LONG
          -      wt_assert.g_testcase := 'EQ LONG Happy Path 1';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => temp_long1,
          -         against_this_in => temp_long1);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ LONG Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_long1,
          -         against_this_in => temp_long2);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_long1);
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => temp_long2);
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      -- VARCHAR2 includes Includes RAW
          -      wt_assert.g_testcase := 'EQ RAW Happy Path 1';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => temp_raw1,
          -         against_this_in => temp_raw1);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ RAW Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_raw1,
          -         against_this_in => temp_raw2);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_raw1);
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => temp_raw2);
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      -- VARCHAR2 includes Includes LONG RAW
          -      wt_assert.g_testcase := 'EQ LANG RAW Happy Path 1';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => temp_lraw1,
          -         against_this_in => temp_lraw1);
          -      --------------------------------------  WTPLSQL Testing --
          -      -- VARCHAR2 includes Includes LONG RAW
          -      wt_assert.g_testcase := 'EQ LANG RAW Happy Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_lraw1,
          -         against_this_in => temp_lraw2);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ LONG RAW Sad Path 1';
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_lraw1);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => temp_lraw2);
          -      wt_assert.this (
          -         msg_in          => 'Sad Path 1',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      -- VARCHAR2 includes Includes NVARCHAR2
          -      wt_assert.g_testcase := 'EQ NVARCHAR2 Happy Path 1';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => temp_nc1,
          -         against_this_in => temp_nc1);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ NVARCHAR2 Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_nc1,
          -         against_this_in => temp_nc2);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_nc1);
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => temp_nc2);
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ BOOLEAN Happy Path 1';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => FALSE,
          -         against_this_in => FALSE);
          -      wt_assert.g_testcase := 'EQ BOOLEAN Happy Path 2';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => FALSE,
          -         against_this_in => FALSE,
          -         null_ok_in      => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ BOOLEAN Happy Path 3';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => temp_bool,
          -         against_this_in => temp_bool,
          -         null_ok_in      => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ BOOLEAN Happy Sad 1';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => FALSE,
          -         against_this_in => TRUE);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => FALSE);
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => TRUE);
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ BOOLEAN Happy Sad 2';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => FALSE,
          -         against_this_in => temp_bool);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => FALSE);
          -      wt_assert.isnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => temp_bool);
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ BOOLEAN Happy Sad 3';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => FALSE,
          -         against_this_in => TRUE,
          -         null_ok_in      => TRUE);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => FALSE);
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => TRUE);
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ BOOLEAN Happy Sad 4';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => FALSE,
          -         against_this_in => temp_bool,
          -         null_ok_in      => TRUE);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => FALSE);
          -      wt_assert.isnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => temp_bool);
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ NUMBER Happy Path 1';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => 4,
          -         against_this_in => 4);
          -      wt_assert.g_testcase := 'EQ NUMBER Happy Path 2';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => 9876543210987654321098765432109876543210,
          -         against_this_in => 9876543210987654321098765432109876543210);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ NUMBER Happy Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => 4,
          -         against_this_in => 5);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => 4);
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => 5);
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      -- EQ: NUMBER implicit conversion includes PLS_INTEGER
          -      wt_assert.g_testcase := 'EQ PLS_INTEGER Happy Path 1';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => temp_pint1,
          -         against_this_in => temp_pint1);
          -      wtplsql_skip_save := TRUE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ PLS_INTEGER Sad Path 1';
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_pint1,
          -         against_this_in => temp_pint2);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_pint1);
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => temp_pint2);
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ DATE Happy Path 1';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => temp_date,
          -         against_this_in => temp_date);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ DATE Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_date,
          -         against_this_in => temp_date + 1/24);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_date);
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => temp_date + 1/24);
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      -- EQ: DATE implicit conversion includes TIMESTAMP
          -      wt_assert.g_testcase := 'EQ TIMSETAMP Happy Path 1';
          -      eq (
          -         msg_in          => 'EQ TIMSETAMP Happy Path 1',
          -         check_this_in   => temp_tstmp,
          -         against_this_in => temp_tstmp);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ TIMSETAMP Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_tstmp,
          -         against_this_in => temp_tstmp + 1/24);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_tstmp);
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => temp_tstmp + 1/24);
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      -- EQ: DATE implicit conversion includes TIMESTAMP
          -      wt_assert.g_testcase := 'EQ TIMSETAMP WITH LOCAL TIME ZONE Happy Path 1';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => temp_tstzn,
          -         against_this_in => temp_tstzn);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ TIMSETAMP WITH LOCAL TIME ZONE Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_tstlzn,
          -         against_this_in => temp_tstlzn + 1/24);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_tstlzn);
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => temp_tstlzn + 1/24);
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      -- EQ: DATE implicit conversion includes TIMESTAMP
          -      wt_assert.g_testcase := 'EQ TIMSETAMP WITH TIME ZONE Happy Path 1';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => temp_tstzn,
          -         against_this_in => temp_tstzn);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ TIMSETAMP WITH TIME ZONE Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_tstzn,
          -         against_this_in => temp_tstzn + 1/24);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_tstzn);
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => temp_tstzn + 1/24);
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      -- EQ: DATE implicit conversion includes INTERVAL
          -      wt_assert.g_testcase := 'EQ INTERVAL DAY TO SECOND Happy Path 1';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => temp_intds1,
          -         against_this_in => temp_intds1);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ INTERVAL DAY TO SECOND Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_intds1,
          -         against_this_in => temp_intds2);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_intds1);
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => temp_intds2);
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      -- EQ: DATE implicit conversion includes INTERVAL
          -      wt_assert.g_testcase := 'EQ INTERVAL YEAR TO MONTH Happy Path 1';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => temp_intym1,
          -         against_this_in => temp_intym1);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ INTERVAL YEAR TO MONTH Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_intym1,
          -         against_this_in => temp_intym2);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_intym1);
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => temp_intym2);
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ XMLTYPE Happy Path 1';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => temp_xml1,
          -         against_this_in => temp_xml1);
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_pass value',
          -         check_this_in   => temp_rec.last_pass);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => (temp_rec.last_pass = TRUE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => ' g_rec.last_assert value',
          -         check_this_in   => temp_rec.last_assert);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => (temp_rec.last_assert = 'EQ'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_msg value',
          -         check_this_in   => temp_rec.last_msg);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => (temp_rec.last_msg = 'Run Test'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => (temp_rec.last_details like
          -                            'Expected "<?xml version="1.0" encoding="UTF-8"?>%'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ XMLTYPE Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_xml1,
          -         against_this_in => temp_xml2);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => xmltype.getclobval(temp_xml1));
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => xmltype.getclobval(temp_xml2));
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ XMLTYPE Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         eq (
          -            msg_in          => 'Not Used',
          -            check_this_in   => temp_xml1,
          -            against_this_in => temp_xml2,
          -            raise_exc_in    => TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ CLOB Happy Path 1';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => temp_clob1,
          -         against_this_in => temp_clob1);
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_pass value',
          -         check_this_in   => temp_rec.last_pass);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => (temp_rec.last_pass = TRUE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_assert value',
          -         check_this_in   => temp_rec.last_assert);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => (temp_rec.last_assert = 'EQ'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_msg value',
          -         check_this_in   => temp_rec.last_msg);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => (temp_rec.last_msg = 'Run Test'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => (temp_rec.last_details like
          -                            'Expected "<?xml version="1.0" encoding="UTF-8"?>%'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ CLOB Happy Path 2';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => temp_clob1,
          -         against_this_in => temp_clob1,
          -         null_ok_in      => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ CLOB Happy Path 3';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => cast (NULL as CLOB),
          -         against_this_in => cast (NULL as CLOB),
          -         null_ok_in      => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ CLOB Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_clob1,
          -         against_this_in => temp_clob2);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_clob1);
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => temp_clob2);
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ CLOB Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         eq (
          -            msg_in          => 'Not Used',
          -            check_this_in   => temp_clob1,
          -            against_this_in => temp_clob2,
          -            raise_exc_in    => TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ CLOB Sad Path 3';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_clob1,
          -         against_this_in => cast (NULL as CLOB));
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_clob1);
          -      wt_assert.isnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => cast (NULL as CLOB));
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ CLOB Sad Path 4';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_clob1,
          -         against_this_in => cast (NULL as CLOB),
          -         null_ok_in      => TRUE);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_clob1);
          -      wt_assert.isnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => cast (NULL as CLOB));
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ NCLOB Happy Path 1';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => temp_nclob1,
          -         against_this_in => temp_nclob1);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ NCLOB Happy Path 2';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => temp_nclob1,
          -         against_this_in => temp_nclob1,
          -         null_ok_in      => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ NCLOB Happy Path 3';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => cast (NULL as NCLOB),
          -         against_this_in => cast (NULL as NCLOB),
          -         null_ok_in      => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ NCLOB Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_nclob1,
          -         against_this_in => temp_nclob2);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_nclob1);
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => temp_nclob2);
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ NCLOB Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         eq (
          -            msg_in          => 'Not Used',
          -            check_this_in   => temp_nclob1,
          -            against_this_in => temp_nclob2,
          -            raise_exc_in    => TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ NCLOB Sad Path 3';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_nclob1,
          -         against_this_in => cast (NULL as NCLOB));
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_nclob1);
          -      wt_assert.isnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => cast (NULL as NCLOB));
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ NCLOB Sad Path 4';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_nclob1,
          -         against_this_in => cast (NULL as NCLOB),
          -         null_ok_in      => TRUE);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_nclob1);
          -      wt_assert.isnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => cast (NULL as NCLOB));
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ BLOB Happy Path 1';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => temp_blob1,
          -         against_this_in => temp_blob1);
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_pass value',
          -         check_this_in   => temp_rec.last_pass);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => (temp_rec.last_pass = TRUE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_assert value',
          -         check_this_in   => temp_rec.last_assert);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => (temp_rec.last_assert = 'EQ'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_msg value',
          -         check_this_in   => temp_rec.last_msg);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => (temp_rec.last_msg = 'Run Test'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => (temp_rec.last_details =
          -                            'DBMS_LOB.COMPARE on BLOBs, compare_results: 0'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ BLOB Happy Path 2';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => temp_blob1,
          -         against_this_in => temp_blob1,
          -         null_ok_in      => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ BLOB Happy Path 3';
          -      eq (
          -         msg_in          => 'Run Test',
          -         check_this_in   => cast (NULL as BLOB),
          -         against_this_in => cast (NULL as BLOB),
          -         null_ok_in      => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ BLOB Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_blob1,
          -         against_this_in => temp_blob2);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_blob1);
          -      wt_assert.isnotnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => temp_blob2);
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ BLOB Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         eq (
          -            msg_in          => 'Not Used',
          -            check_this_in   => temp_blob1,
          -            against_this_in => temp_blob2,
          -            raise_exc_in    => TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ BLOB Sad Path 3';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_blob1,
          -         against_this_in => cast (NULL as BLOB));
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_blob1);
          -      wt_assert.isnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => cast (NULL as BLOB));
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQ BLOB Sad Path 4';
          -      wtplsql_skip_save := TRUE;
          -      eq (
          -         msg_in          => 'Not Used',
          -         check_this_in   => temp_blob1,
          -         against_this_in => cast (NULL as BLOB),
          -         null_ok_in      => TRUE);
          -      wtplsql_skip_save := FALSE;
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'check_this_in value',
          -         check_this_in   => temp_blob1);
          -      wt_assert.isnull (
          -         msg_in          => 'against_this_in value',
          -         check_this_in   => cast (NULL as BLOB));
          -      wt_assert.this (
          -         msg_in          => 'last_pass = FALSE',
          -         check_this_in   => (temp_rec.last_pass = FALSE));
          -   end t_eq;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          ------------------------------------------------------------------------
          ---   This is the end of a MASSIVE Unit Test on the "EQ" assertion   ---
          ------------------------------------------------------------------------
          -
          -
          -------------------------------------------------------------
          --- ISNOTNULL string overload
          -procedure isnotnull (
          -   msg_in          in   varchar2,
          -   check_this_in   in   varchar2,
          -   null_ok_in      in   boolean := false,   -- Not Used, utPLSQL V1 API
          -   raise_exc_in    in   boolean := false)
          -is
          -begin
          -   g_rec.last_assert  := 'ISNOTNULL';
          -   g_rec.last_msg     := msg_in;
          -   g_rec.last_pass    := (check_this_in is not null);
          -   g_rec.last_details := 'Expected NOT NULL and got "' ||
          -                          substr(check_this_in,1,2000) || '"';
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end isnotnull;
          -
          --- ISNOTNULL boolean overload
          -procedure isnotnull (
          -   msg_in          in   varchar2,
          -   check_this_in   in   boolean,
          -   null_ok_in      in   boolean := false,   -- Not Used, utPLSQL V1 API
          -   raise_exc_in    in   boolean := false)
          -is
          -begin
          -   isnotnull (msg_in        => msg_in
          -             ,check_this_in => boolean_to_status(check_this_in)
          -             ,null_ok_in    => null_ok_in
          -             ,raise_exc_in  => raise_exc_in);
          -end isnotnull;
          -
          --- ISNOTNULL CLOB overload
          -procedure isnotnull (
          -   msg_in          in   varchar2,
          -   check_this_in   in   CLOB,
          -   null_ok_in      in   boolean := false,   -- Not Used, utPLSQL V1 API
          -   raise_exc_in    in   boolean := false)
          -is
          -begin
          -   g_rec.last_assert  := 'ISNOTNULL';
          -   g_rec.last_msg     := msg_in;
          -   g_rec.last_pass    := (check_this_in is not null);
          -   g_rec.last_details := 'Expected NOT NULL and got "' ||
          -                          substr(check_this_in,1,2000) || '"';
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end isnotnull;
          -
          --- ISNOTNULL BLOB overload
          -procedure isnotnull (
          -   msg_in          in   varchar2,
          -   check_this_in   in   BLOB,
          -   null_ok_in      in   boolean := false,   -- Not Used, utPLSQL V1 API
          -   raise_exc_in    in   boolean := false)
          -is
          -begin
          -   g_rec.last_assert  := 'ISNOTNULL';
          -   g_rec.last_msg     := msg_in;
          -   g_rec.last_pass    := (check_this_in is not null);
          -   if g_rec.last_pass
          -   then
          -      g_rec.last_details := 'BLOB is NOT NULL';
          -   else
          -      g_rec.last_details := 'BLOB is NULL';
          -   end if;
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end isnotnull;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_isnotnull
          -   is
          -      l_found_exception  BOOLEAN;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNOTNULL VARCHAR2 Happy Path 1';
          -      isnotnull (
          -         msg_in        => 'Run Test',
          -         check_this_in => 'X');
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => TRUE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => temp_rec.last_assert,
          -         against_this_in => 'ISNOTNULL');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => temp_rec.last_msg,
          -         against_this_in => 'Run Test');
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'Expected NOT NULL and got "X"');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNOTNULL VARCHAR2 Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      isnotnull (
          -         msg_in        => 'Not Used',
          -         check_this_in => '');
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'g_rec.last_pass',
          -         check_this_in   => g_rec.last_pass,
          -         against_this_in => FALSE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNOTNULL VARCHAR2 Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         isnotnull (
          -            msg_in        => 'Not Used',
          -            check_this_in => '',
          -            raise_exc_in  => TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'g_rec.last_pass',
          -         check_this_in   => g_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNOTNULL BOOLEAN Happy Path 1';
          -      isnotnull (
          -         msg_in        => 'Run Test',
          -         check_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNOTNULL BOOLEAN Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      isnotnull (
          -         msg_in        => 'Not Used',
          -         check_this_in => temp_bool);
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'g_rec.last_pass',
          -         check_this_in   => g_rec.last_pass,
          -         against_this_in => FALSE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNOTNULL BOOLEAN Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         isnotnull (
          -            msg_in        => 'Not Used',
          -            check_this_in => temp_bool,
          -            raise_exc_in  => TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'g_rec.last_pass',
          -         check_this_in   => g_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNOTNULL CLOB Happy Path 1';
          -      isnotnull (
          -         msg_in        => 'Run Test',
          -         check_this_in => temp_clob1);
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => TRUE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => temp_rec.last_assert,
          -         against_this_in => 'ISNOTNULL');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => temp_rec.last_msg,
          -         against_this_in => 'Run Test');
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => (temp_rec.last_details like
          -                            'Expected NOT NULL and got "<?xml version="1.0" encoding="UTF-8"?>%'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNOTNULL CLOB Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      isnotnull (
          -         msg_in        => 'Not Used',
          -         check_this_in => cast (null as CLOB));
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'g_rec.last_pass',
          -         check_this_in   => g_rec.last_pass,
          -         against_this_in => FALSE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNOTNULL CLOB Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         isnotnull (
          -            msg_in        => 'Not Used',
          -            check_this_in => cast (null as CLOB),
          -            raise_exc_in  => TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'g_rec.last_pass',
          -         check_this_in   => g_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNOTNULL BLOB Happy Path 1';
          -      isnotnull (
          -         msg_in        => 'Run Test',
          -         check_this_in => temp_blob1);
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => TRUE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => temp_rec.last_assert,
          -         against_this_in => 'ISNOTNULL');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => temp_rec.last_msg,
          -         against_this_in => 'Run Test');
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'BLOB is NOT NULL');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNOTNULL BLOB Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      isnotnull (
          -         msg_in        => 'Not Used',
          -         check_this_in => cast (null as BLOB));
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'g_rec.last_pass',
          -         check_this_in   => g_rec.last_pass,
          -         against_this_in => FALSE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNOTNULL BLOB Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         isnotnull (
          -            msg_in        => 'Not Used',
          -            check_this_in => cast (null as BLOB),
          -            raise_exc_in  => TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'g_rec.last_pass',
          -         check_this_in   => g_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -   end t_isnotnull;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          --- ISNULL string overload
          -procedure isnull (
          -   msg_in          in   varchar2,
          -   check_this_in   in   varchar2,
          -   null_ok_in      in   boolean := false,   -- Not Used, utPLSQL V1 API
          -   raise_exc_in    in   boolean := false)
          -is
          -begin
          -   g_rec.last_assert  := 'ISNULL';
          -   g_rec.last_msg     := msg_in;
          -   g_rec.last_pass    := (check_this_in is null);
          -   g_rec.last_details := 'Expected NULL and got "' ||
          -                      substr(check_this_in,1,2000) || '"';
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end isnull;
          -
          --- ISNULL boolean overload
          -procedure isnull (
          -   msg_in          in   varchar2,
          -   check_this_in   in   boolean,
          -   null_ok_in      in   boolean := false,   -- Not Used, utPLSQL V1 API
          -   raise_exc_in    in   boolean := false)
          -is
          -begin
          -   isnull (msg_in        => msg_in
          -          ,check_this_in => boolean_to_status(check_this_in)
          -          ,null_ok_in    => null_ok_in
          -          ,raise_exc_in  => raise_exc_in);
          -end isnull;
          -
          --- ISNULL CLOB overload
          -procedure isnull (
          -   msg_in          in   varchar2,
          -   check_this_in   in   CLOB,
          -   null_ok_in      in   boolean := false,   -- Not Used, utPLSQL V1 API
          -   raise_exc_in    in   boolean := false)
          -is
          -begin
          -   g_rec.last_assert  := 'ISNULL';
          -   g_rec.last_msg     := msg_in;
          -   g_rec.last_pass    := (check_this_in is null);
          -   g_rec.last_details := 'Expected NULL and got "' ||
          -                      substr(check_this_in,1,2000) || '"';
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end isnull;
          -
          --- ISNULL BLOB overload
          -procedure isnull (
          -   msg_in          in   varchar2,
          -   check_this_in   in   BLOB,
          -   null_ok_in      in   boolean := false,   -- Not Used, utPLSQL V1 API
          -   raise_exc_in    in   boolean := false)
          -is
          -begin
          -   g_rec.last_assert  := 'ISNULL';
          -   g_rec.last_msg     := msg_in;
          -   g_rec.last_pass    := (check_this_in is null);
          -   if g_rec.last_pass
          -   then
          -      g_rec.last_details := 'BLOB is NULL';
          -   else
          -      g_rec.last_details := 'BLOB is NOT NULL';
          -   end if;
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end isnull;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_isnull
          -   is
          -      l_found_exception  BOOLEAN;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNULL VARCHAR2 Happy Path 1';
          -      isnull (
          -         msg_in        => 'Run Test',
          -         check_this_in => '');
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => TRUE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => temp_rec.last_assert,
          -         against_this_in => 'ISNULL');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => temp_rec.last_msg,
          -         against_this_in => 'Run Test');
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'Expected NULL and got ""');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNULL VARCHAR2 Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      isnull (
          -         msg_in        => 'Not Used',
          -         check_this_in => 'X');
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'g_rec.last_pass',
          -         check_this_in   => g_rec.last_pass,
          -         against_this_in => FALSE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNULL VARCHAR2 Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         isnull (
          -            msg_in        => 'Not Used',
          -            check_this_in => 'X',
          -            raise_exc_in  => TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'g_rec.last_pass',
          -         check_this_in   => g_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNULL BOOLEAN Happy Path 1';
          -      isnull (
          -         msg_in        => 'Run Test',
          -         check_this_in => temp_bool);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNULL BOOLEAN Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      isnull (
          -         msg_in        => 'Not Used',
          -         check_this_in => FALSE);
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'g_rec.last_pass',
          -         check_this_in   => g_rec.last_pass,
          -         against_this_in => FALSE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNULL BOOLEAN Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         isnull (
          -            msg_in        => 'Not Used',
          -            check_this_in => FALSE,
          -            raise_exc_in  => TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'g_rec.last_pass',
          -         check_this_in   => g_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNULL CLOB Happy Path 1';
          -      isnull (
          -         msg_in        => 'Run Test',
          -         check_this_in => cast (null as CLOB));
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => TRUE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => temp_rec.last_assert,
          -         against_this_in => 'ISNULL');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => temp_rec.last_msg,
          -         against_this_in => 'Run Test');
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'Expected NULL and got ""');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNULL CLOB Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      isnull (
          -         msg_in        => 'Not Used',
          -         check_this_in => temp_clob1);
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'g_rec.last_pass',
          -         check_this_in   => g_rec.last_pass,
          -         against_this_in => FALSE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNULL CLOB Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         isnull (
          -            msg_in        => 'Not Used',
          -            check_this_in => temp_clob1,
          -            raise_exc_in  => TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'g_rec.last_pass',
          -         check_this_in   => g_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNULL BLOB Happy Path 1';
          -      isnull (
          -         msg_in        => 'Run Test',
          -         check_this_in => cast (null as BLOB));
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => TRUE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => temp_rec.last_assert,
          -         against_this_in => 'ISNULL');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => temp_rec.last_msg,
          -         against_this_in => 'Run Test');
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'BLOB is NULL');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNULL BLOB Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      isnull (
          -         msg_in        => 'Not Used',
          -         check_this_in => temp_blob1);
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'g_rec.last_pass',
          -         check_this_in   => g_rec.last_pass,
          -         against_this_in => FALSE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'ISNULL BLOB Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         isnull (
          -            msg_in        => 'Not Used',
          -            check_this_in => temp_blob1,
          -            raise_exc_in  => TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'g_rec.last_pass',
          -         check_this_in   => g_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -   end t_isnull;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          ---  Check a given call raises an exception
          -procedure raises (
          -      msg_in                varchar2,
          -      check_call_in    in   varchar2,
          -      against_exc_in   in   varchar2)
          -is
          -   l_sqlerrm    varchar2(4000);
          -   l_errstack   varchar2(4000);
          -begin
          -   begin
          -      execute immediate check_call_in;
          -   exception when OTHERS then
          -      l_sqlerrm := SQLERRM;
          -      l_errstack := substr(dbms_utility.format_error_stack  ||
          -                           dbms_utility.format_error_backtrace
          -                           ,1,4000);
          -   end;
          -   --
          -   g_rec.last_assert  := 'RAISES/THROWS';
          -   g_rec.last_msg     := msg_in;
          -   if against_exc_in is null AND l_sqlerrm is null
          -   then
          -      -- Both are Null
          -      g_rec.last_pass := TRUE;
          -   elsif against_exc_in is null OR l_sqlerrm is null
          -   then
          -      -- If both were Null, it would have been caught above.
          -      --   So, only one can be Null
          -      g_rec.last_pass := FALSE;
          -   else
          -      -- If either was Null, it would have been caught above.
          -      g_rec.last_pass := l_sqlerrm like '%' || against_exc_in || '%';
          -   end if;
          -   if against_exc_in is null
          -   then
          -      g_rec.last_details := 'No exception was expected' ||
          -                             '. Exception raised was "' || l_sqlerrm      ||
          -                            '". Exception raised by: "' || check_call_in  || '".';
          -   elsif l_sqlerrm is null
          -   then
          -      g_rec.last_details := 'Expected exception "%'           || against_exc_in ||
          -                          '%". No exception was raised by: "' || check_call_in  || '".';
          -   else
          -      g_rec.last_details := 'Expected exception "%'           || against_exc_in ||
          -                          '%". Actual exception raised was "' || l_sqlerrm      ||
          -                                  '". Exception raised by: "' || check_call_in  || '".';
          -   end if;
          -   if not g_rec.last_pass
          -   then
          -      g_rec.last_details := 
          -         substr(g_rec.last_details || ' Error Stack: ' || l_errstack, 1, 4000);
          -   end if;
          -   process_assertion;
          -end raises;
          -
          -procedure raises (
          -      msg_in                varchar2,
          -      check_call_in    in   varchar2,
          -      against_exc_in   in   number)
          -is
          -begin
          -   if against_exc_in is null
          -   then
          -      raises (
          -         msg_in          => msg_in,
          -         check_call_in   => check_call_in,
          -         against_exc_in  => '');
          -   else
          -      raises (
          -         msg_in          => msg_in,
          -         check_call_in   => check_call_in,
          -         against_exc_in  => '-' || lpad(abs(against_exc_in),5,'0'));
          -   end if;
          -end raises;
          -
          -procedure throws (
          -      msg_in              varchar2,
          -      check_call_in   in  varchar2,
          -      against_exc_in  in  varchar2)
          -is
          -begin
          -   raises (
          -      msg_in          => msg_in,
          -      check_call_in   => check_call_in,
          -      against_exc_in  => against_exc_in);
          -end throws;
          -
          -procedure throws (
          -      msg_in              varchar2,
          -      check_call_in   in  varchar2,
          -      against_exc_in  in  number)
          -is
          -begin
          -   raises (
          -      msg_in          => msg_in,
          -      check_call_in   => check_call_in,
          -      against_exc_in  => against_exc_in);
          -end throws;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_raises
          -   is
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Raises Tests Happy Path 1';
          -      raises (
          -         msg_in         => 'RAISES Varchar2 Test',
          -         check_call_in  => 'begin wt_assert.bogus; end;',
          -         against_exc_in => 'PLS-00302: component ''BOGUS'' must be declared');
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => TRUE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => temp_rec.last_assert,
          -         against_this_in => 'RAISES/THROWS');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => temp_rec.last_msg,
          -         against_this_in => 'RAISES Varchar2 Test');
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'Expected exception "%PLS-00302: component ''BOGUS'' must be declared%". ' ||
          -                            'Actual exception raised was "ORA-06550: line 1, column 17:' || CHR(10) ||
          -                            'PLS-00302: component ''BOGUS'' must be declared' || CHR(10) ||
          -                            'ORA-06550: line 1, column 7:' || CHR(10) ||
          -                            'PL/SQL: Statement ignored". ' ||
          -                            'Exception raised by: "begin wt_assert.bogus; end;".');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Raises Tests Happy Path 2';
          -      raises (
          -         msg_in         => 'RAISES Number Test',
          -         check_call_in  => 'begin wt_assert.bogus; end;',
          -         against_exc_in => 302);
          -      temp_rec := g_rec;
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'Expected exception "%-00302%". ' ||
          -                            'Actual exception raised was "' ||
          -                            'ORA-06550: line 1, column 17:' || CHR(10) ||
          -                            'PLS-00302: component ''BOGUS'' must be declared' || CHR(10) ||
          -                            'ORA-06550: line 1, column 7:' || CHR(10) ||
          -                            'PL/SQL: Statement ignored". ' ||
          -                            'Exception raised by: "begin wt_assert.bogus; end;".');
          -      --------------------------------------  WTPLSQL Testing --
          -      throws (
          -         msg_in         => 'THROWS Varchar2 Test',
          -         check_call_in  => 'begin wt_assert.bogus; end;',
          -         against_exc_in => 'PLS-00302: component ''BOGUS'' must be declared');
          -      temp_rec := g_rec;
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'Expected exception "%PLS-00302: component ''BOGUS'' must be declared%". ' ||
          -                            'Actual exception raised was "' ||
          -                            'ORA-06550: line 1, column 17:' || CHR(10) ||
          -                            'PLS-00302: component ''BOGUS'' must be declared' || CHR(10) ||
          -                            'ORA-06550: line 1, column 7:' || CHR(10) ||
          -                            'PL/SQL: Statement ignored". ' ||
          -                            'Exception raised by: "begin wt_assert.bogus; end;".');
          -      --------------------------------------  WTPLSQL Testing --
          -      throws (
          -         msg_in         => 'THROWS Number Test',
          -         check_call_in  => 'begin wt_assert.bogus; end;',
          -         against_exc_in => 302);
          -      temp_rec := g_rec;
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'Expected exception "%-00302%". ' ||
          -                            'Actual exception raised was "' ||
          -                            'ORA-06550: line 1, column 17:' || CHR(10) ||
          -                            'PLS-00302: component ''BOGUS'' must be declared' || CHR(10) ||
          -                            'ORA-06550: line 1, column 7:' || CHR(10) ||
          -                            'PL/SQL: Statement ignored". ' ||
          -                            'Exception raised by: "begin wt_assert.bogus; end;".');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Raises Tests Happy Path 3';
          -      raises (
          -         msg_in         => 'RAISES Varchar2 No Error',
          -         check_call_in  => 'begin wt_assert.set_NLS_DATE_FORMAT(wt_assert.get_NLS_DATE_FORMAT); end;',
          -         against_exc_in => '');
          -      temp_rec := g_rec;
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'No exception was expected. ' ||
          -                            'Exception raised was "". ' ||
          -                            'Exception raised by: "begin wt_assert.set_NLS_DATE_FORMAT(wt_assert.get_NLS_DATE_FORMAT); end;".');
          -      --------------------------------------  WTPLSQL Testing --
          -      raises (
          -         msg_in         => 'RAISES Number No Error',
          -         check_call_in  => 'begin wt_assert.set_NLS_DATE_FORMAT(wt_assert.get_NLS_DATE_FORMAT); end;',
          -         against_exc_in => cast (null as number));
          -      temp_rec := g_rec;
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'No exception was expected. ' ||
          -                            'Exception raised was "". ' ||
          -                            'Exception raised by: "begin wt_assert.set_NLS_DATE_FORMAT(wt_assert.get_NLS_DATE_FORMAT); end;".');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Raises Tests Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      raises (
          -         msg_in         => 'Not Used',
          -         check_call_in  => 'begin wt_assert.bogus; end;',
          -         against_exc_in => 'Incorrect Exception');
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => (temp_rec.last_details like
          -                            'Expected exception "%Incorrect Exception%". ' ||
          -                            'Actual exception raised was "ORA-%'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Raises Tests Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      raises (
          -         msg_in         => 'Not Used',
          -         check_call_in  => 'begin wt_assert.set_NLS_DATE_FORMAT; end;',
          -         against_exc_in => 'Incorrect Exception');
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'Expected exception "%Incorrect Exception%". ' ||
          -                            'No exception was raised by: "begin wt_assert.set_NLS_DATE_FORMAT; end;". ' ||
          -                            'Error Stack: ');
          -   end t_raises;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          --- EQQUERYVALUE
          -procedure eqqueryvalue (
          -      msg_in             in   varchar2,
          -      check_query_in     in   varchar2,
          -      against_value_in   in   varchar2,
          -      null_ok_in         in   boolean := false,
          -      raise_exc_in       in   boolean := false)
          -is
          -   type rc_type is ref cursor;
          -   l_rc          rc_type;
          -   l_rc_buff     varchar2(32000);
          -   l_errstack    varchar2(4000);
          -begin
          -   g_rec.last_assert     := 'EQQUERYVALUE';
          -   g_rec.last_msg        := msg_in;
          -   open l_rc for check_query_in;
          -   fetch l_rc into l_rc_buff;
          -   close l_rc;
          -   g_rec.last_pass    := (   l_rc_buff = against_value_in
          -                          or (    l_rc_buff is null
          -                              and against_value_in is null
          -                              and null_ok_in               )  );
          -   g_rec.last_details := 'Expected "' || substr(against_value_in,1,1000) ||
          -                        '" and got "' || substr(l_rc_buff       ,1,1000) ||
          -                      '" for Query: ' || substr(check_query_in  ,1,1000) ;
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -exception when others then
          -   l_errstack := substr(dbms_utility.format_error_stack ||
          -                        dbms_utility.format_error_backtrace,1,2900);
          -   g_rec.last_details := 'Exception raised for Query: ' ||
          -                          substr(check_query_in  ,1,1000) ||
          -                          CHR(10) || l_errstack;
          -   g_rec.last_pass    := FALSE;
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end eqqueryvalue;
          -
          --- EQQUERYVALUE XMLTYPE Overload
          -procedure eqqueryvalue (
          -      msg_in             in   varchar2,
          -      check_query_in     in   varchar2,
          -      against_value_in   in   XMLTYPE,
          -      null_ok_in         in   boolean := false,  -- Not Used, utPLSQL V1 API
          -      raise_exc_in       in   boolean := false)
          -is
          -   type rc_type is ref cursor;
          -   l_rc          rc_type;
          -   l_rc_buff     XMLTYPE;
          -   l_errstack    varchar2(4000);
          -begin
          -   g_rec.last_assert  := 'EQQUERYVALUE';
          -   g_rec.last_msg     := msg_in;
          -   open l_rc for check_query_in;
          -   fetch l_rc into l_rc_buff;
          -   close l_rc;
          -   g_rec.last_pass    := (xmltype.getclobval(l_rc_buff)       =
          -                          xmltype.getclobval(against_value_in)  );
          -   g_rec.last_details := 'Expected "' || substr(xmltype.getclobval(against_value_in),1,1000) ||
          -                        '" and got "' || substr(xmltype.getclobval(l_rc_buff       ),1,1000) ||
          -                      '" for Query: ' || substr(                   check_query_in   ,1,1000) ;
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -exception when others then
          -   l_errstack := substr(dbms_utility.format_error_stack ||
          -                        dbms_utility.format_error_backtrace,1,2900);
          -   g_rec.last_details := 'Exception raised for Query: ' ||
          -                          substr(check_query_in  ,1,1000) ||
          -                          CHR(10) || l_errstack;
          -   g_rec.last_pass    := FALSE;
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end eqqueryvalue;
          -
          --- EQQUERYVALUE CLOB Overload
          -procedure eqqueryvalue (
          -      msg_in             in   varchar2,
          -      check_query_in     in   varchar2,
          -      against_value_in   in   CLOB,
          -      null_ok_in         in   boolean := false,
          -      raise_exc_in       in   boolean := false)
          -is
          -   type rc_type is ref cursor;
          -   l_rc          rc_type;
          -   l_rc_buff     CLOB;
          -   l_errstack    varchar2(4000);
          -begin
          -   g_rec.last_assert  := 'EQQUERYVALUE';
          -   g_rec.last_msg     := msg_in;
          -   open l_rc for check_query_in;
          -   fetch l_rc into l_rc_buff;
          -   close l_rc;
          -   g_rec.last_pass    := (   l_rc_buff = against_value_in
          -                          or (    l_rc_buff is null
          -                              and against_value_in is null
          -                              and null_ok_in               )  );
          -   g_rec.last_details := 'Expected "' || substr(against_value_in,1,1000) ||
          -                        '" and got "' || substr(l_rc_buff       ,1,1000) ||
          -                      '" for Query: ' || substr(check_query_in  ,1,1000) ;
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -exception when others then
          -   l_errstack := substr(dbms_utility.format_error_stack ||
          -                        dbms_utility.format_error_backtrace,1,2900);
          -   g_rec.last_details := 'Exception raised for Query: ' ||
          -                          substr(check_query_in  ,1,1000) ||
          -                          CHR(10) || l_errstack;
          -   g_rec.last_pass    := FALSE;
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end eqqueryvalue;
          -
          --- EQQUERYVALUE BLOB Overload
          -procedure eqqueryvalue (
          -      msg_in             in   varchar2,
          -      check_query_in     in   varchar2,
          -      against_value_in   in   BLOB,
          -      null_ok_in         in   boolean := false,
          -      raise_exc_in       in   boolean := false)
          -is
          -   type rc_type is ref cursor;
          -   l_rc            rc_type;
          -   l_rc_buff       BLOB;
          -   compare_results number;
          -   l_errstack      varchar2(4000);
          -begin
          -   g_rec.last_assert  := 'EQQUERYVALUE';
          -   g_rec.last_msg     := msg_in;
          -   open l_rc for check_query_in;
          -   fetch l_rc into l_rc_buff;
          -   close l_rc;
          -   compare_results    := nvl(DBMS_LOB.COMPARE(l_rc_buff, against_value_in),-1);
          -   g_rec.last_pass    := (   (compare_results = 0)
          -                          or (    l_rc_buff is null
          -                              and against_value_in is null
          -                              and null_ok_in               )  );
          -   g_rec.last_details := 'DBMS_LOB.COMPARE between BLOB and Query: ' ||
          -                           substr(check_query_in  ,1,2000) ||
          -                        ', compare_results: ' || compare_results;
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -exception when others then
          -   l_errstack := substr(dbms_utility.format_error_stack ||
          -                        dbms_utility.format_error_backtrace,1,2900);
          -   g_rec.last_details := 'Exception raised for Query: ' ||
          -                          substr(check_query_in  ,1,1000) ||
          -                          CHR(10) || l_errstack;
          -   g_rec.last_pass    := FALSE;
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end eqqueryvalue;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_eqqueryvalue
          -   is
          -      l_found_exception  BOOLEAN;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERYVALUE VARCHAR2 Happy Path 1';
          -      eqqueryvalue (
          -         msg_in             =>   'Run Test',
          -         check_query_in     =>   'select dummy from DUAL',
          -         against_value_in   =>   'X',
          -         null_ok_in         =>   false);
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => TRUE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => temp_rec.last_assert,
          -         against_this_in => 'EQQUERYVALUE');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => temp_rec.last_msg,
          -         against_this_in => 'Run Test');
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'Expected "X" and got "X" for Query: select dummy from DUAL');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERYVALUE VARCHAR2 Happy Path 2';
          -      eqqueryvalue (
          -         msg_in             =>   'Run Test',
          -         check_query_in     =>   'select max(dummy) from DUAL where 0 = 1',
          -         against_value_in   =>   '',
          -         null_ok_in         =>   true);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERYVALUE VARCHAR2 Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eqqueryvalue (
          -         msg_in             =>   'Not Used',
          -         check_query_in     =>   'select dummy from DUAL',
          -         against_value_in   =>   'Y');
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERYVALUE VARCHAR2 Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         eqqueryvalue (
          -            msg_in             =>   'Not Used',
          -            check_query_in     =>   'select dummy from DUAL',
          -            against_value_in   =>   'Y',
          -            raise_exc_in       =>   TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERYVALUE VARCHAR2 Sad Path 3';
          -      wtplsql_skip_save := TRUE;
          -      eqqueryvalue (
          -         msg_in             =>   'Not Used',
          -         check_query_in     =>   'Garbage query that won''t work',
          -         against_value_in   =>   'Y');
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details like
          -            'Exception raised for Query: Garbage query that won''t work' ||
          -            CHR(10) || 'ORA-00900: invalid SQL statement%');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERYVALUE XMLTYPE Happy Path 1';
          -      eqqueryvalue (
          -         msg_in           => 'Run Test',
          -         check_query_in   => 'select temp_xml from wt_self_test where id = 1',
          -         against_value_in => temp_xml1);
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => TRUE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => temp_rec.last_assert,
          -         against_this_in => 'EQQUERYVALUE');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => temp_rec.last_msg,
          -         against_this_in => 'Run Test');
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => (temp_rec.last_details like
          -                            'Expected "<?xml version="1.0" encoding="UTF-8"?>%'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERYVALUE XMLTYPE Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eqqueryvalue (
          -         msg_in             =>   'Not Used',
          -         check_query_in     =>   'select temp_xml from wt_self_test where id = 1',
          -         against_value_in   =>   temp_xml2);
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => (temp_rec.last_details like
          -                            'Expected "<?xml version="1.0" encoding="UTF-8"?>' ||
          -             '<note>2</note>" and got "<?xml version="1.0" encoding="UTF-8"?>%'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERYVALUE XMLTYPE Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         eqqueryvalue (
          -            msg_in             =>   'Not Used',
          -            check_query_in     =>   'select temp_xml from wt_self_test where id = 1',
          -            against_value_in   =>   temp_xml2,
          -            raise_exc_in       =>   TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERYVALUE XMLTYPE Sad Path 3';
          -      wtplsql_skip_save := TRUE;
          -      eqqueryvalue (
          -         msg_in             =>   'Not Used',
          -         check_query_in     =>   'Garbage query that won''t work',
          -         against_value_in   =>   temp_xml2);
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details like
          -            'Exception raised for Query: Garbage query that won''t work' ||
          -            CHR(10) || 'ORA-00900: invalid SQL statement%');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERYVALUE CLOB Happy Path 1';
          -      eqqueryvalue (
          -         msg_in             =>   'Run Test',
          -         check_query_in     =>   'select temp_clob from wt_self_test where id = 1',
          -         against_value_in   =>   temp_clob1,
          -         null_ok_in         =>   false);
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => TRUE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => temp_rec.last_assert,
          -         against_this_in => 'EQQUERYVALUE');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => temp_rec.last_msg,
          -         against_this_in => 'Run Test');
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => (temp_rec.last_details like
          -                            'Expected "<?xml version="1.0" encoding="UTF-8"?>%'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERYVALUE CLOB Happy Path 2';
          -      eqqueryvalue (
          -         msg_in             =>   'Run Test',
          -         check_query_in     =>   'select temp_clob from wt_self_test where 0 = 1',
          -         against_value_in   =>   '',
          -         null_ok_in         =>   true);
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERYVALUE CLOB Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eqqueryvalue (
          -         msg_in             =>   'Not Used',
          -         check_query_in     =>   'select temp_clob from wt_self_test where id = 1',
          -         against_value_in   =>   temp_clob2);
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => (temp_rec.last_details like
          -                            'Expected "This is another clob." and got "' ||
          -                            '<?xml version="1.0" encoding="UTF-8"?>%'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERYVALUE CLOB Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         eqqueryvalue (
          -            msg_in             =>   'Not Used',
          -            check_query_in     =>   'select temp_clob from wt_self_test where id = 1',
          -            against_value_in   =>   temp_clob2,
          -            raise_exc_in       =>   TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERYVALUE CLOB Sad Path 3';
          -      wtplsql_skip_save := TRUE;
          -      eqqueryvalue (
          -         msg_in             =>   'Not Used',
          -         check_query_in     =>   'Garbage query that won''t work',
          -         against_value_in   =>   temp_clob2);
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details like
          -            'Exception raised for Query: Garbage query that won''t work' ||
          -            CHR(10) || 'ORA-00900: invalid SQL statement%');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERYVALUE BLOB Happy Path 1';
          -      eqqueryvalue (
          -         msg_in             =>   'Run Test',
          -         check_query_in     =>   'select temp_blob from wt_self_test where id = 1',
          -         against_value_in   =>   temp_blob1,
          -         null_ok_in         =>   false);
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => TRUE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => temp_rec.last_assert,
          -         against_this_in => 'EQQUERYVALUE');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => temp_rec.last_msg,
          -         against_this_in => 'Run Test');
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'DBMS_LOB.COMPARE between BLOB and Query:' ||
          -                           ' select temp_blob from wt_self_test where id = 1, compare_results: 0');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERYVALUE BLOB Happy Path 2';
          -      eqqueryvalue (
          -         msg_in             =>   'Run Test',
          -         check_query_in     =>   'select temp_blob from wt_self_test where 0 = 1',
          -         against_value_in   =>   cast (null as BLOB),
          -         null_ok_in         =>   true);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERYVALUE BLOB Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eqqueryvalue (
          -         msg_in             =>   'Not Used',
          -         check_query_in     =>   'select temp_blob from wt_self_test where id = 1',
          -         against_value_in   =>   temp_blob2);
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'DBMS_LOB.COMPARE between BLOB and Query: ' ||
          -               'select temp_blob from wt_self_test where id = 1, compare_results: -1');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERYVALUE BLOB Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         eqqueryvalue (
          -            msg_in             =>   'Not Used',
          -            check_query_in     =>   'select temp_blob from wt_self_test where id = 1',
          -            against_value_in   =>   temp_blob2,
          -            raise_exc_in       =>   TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERYVALUE BLOB Sad Path 3';
          -      wtplsql_skip_save := TRUE;
          -      eqqueryvalue (
          -         msg_in             =>   'Not Used',
          -         check_query_in     =>   'Garbage query that won''t work',
          -         against_value_in   =>   temp_blob2);
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details like
          -            'Exception raised for Query: Garbage query that won''t work' ||
          -            CHR(10) || 'ORA-00900: invalid SQL statement%');
          -   end t_eqqueryvalue;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure eqquery (
          -      msg_in             in   varchar2,
          -      check_query_in     in   varchar2,
          -      against_query_in   in   varchar2,
          -      raise_exc_in       in   boolean := false)
          -is
          -begin
          -   g_rec.last_assert  := 'EQQUERY';
          -   g_rec.last_msg     := msg_in;
          -   compare_queries(check_query_in, against_query_in);
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end eqquery;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_eqquery
          -   is
          -      l_found_exception  BOOLEAN;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERY Tests Happy Path 1';
          -      wt_assert.eqquery (
          -         msg_in             =>   'Run Test',
          -         check_query_in     =>   'select * from USER_TABLES',
          -         against_query_in   =>   'select * from USER_TABLES');
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => TRUE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => temp_rec.last_assert,
          -         against_this_in => 'EQQUERY');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => temp_rec.last_msg,
          -         against_this_in => 'Run Test');
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'EQQUERY Tests Happy Path 1b g_rec.last_details',
          -         check_this_in   => (temp_rec.last_details like
          -                            'Comparison Query: %'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERY Tests Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eqquery (
          -         msg_in             =>   'Not Used',
          -         check_query_in     =>   'select * from USER_TABLES',
          -         against_query_in   =>   'select * from USER_TABLES where 0 = 1');
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => (temp_rec.last_details like
          -                            'Comparison Query: %'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERY Tests Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         eqquery (
          -            msg_in             =>   'Not Used',
          -            check_query_in     =>   'select * from USER_TABLES',
          -            against_query_in   =>   'select * from USER_TABLES where 0 = 1',
          -            raise_exc_in       =>   TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQQUERY Tests Sad Path 3';
          -      wtplsql_skip_save := TRUE;
          -      eqquery (
          -         msg_in             =>   'Not Used',
          -         check_query_in     =>   'select * from USER_TABLES',
          -         against_query_in   =>   'select * from ALL_TABLES');
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => (temp_rec.last_details like
          -                '%PL/SQL: ORA-01789: query block has incorrect number of result columns%'));
          -   end t_eqquery;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure eqtable (
          -      msg_in             in   varchar2,
          -      check_this_in      in   varchar2,
          -      against_this_in    in   varchar2,
          -      check_where_in     in   varchar2 := null,
          -      against_where_in   in   varchar2 := null,
          -      raise_exc_in       in   boolean := false)
          -is
          -   l_check_query    varchar2(16000) := 'select * from ' || check_this_in;
          -   l_against_query  varchar2(16000) := 'select * from ' || against_this_in;
          -begin
          -   g_rec.last_assert  := 'EQTABLE';
          -   g_rec.last_msg     := msg_in;
          -   if check_where_in is not null
          -   then
          -      l_check_query := l_check_query || ' where ' || check_where_in;
          -   end if;
          -   if against_where_in is not null
          -   then
          -      l_against_query := l_against_query || ' where ' || against_where_in;
          -   end if;
          -   compare_queries(l_check_query, l_against_query);
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end eqtable;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_eqtable
          -   is
          -      l_found_exception  BOOLEAN;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQTABLE Tests Happy Path 1';
          -      wt_assert.eqtable (
          -         msg_in             =>   'Run Test',
          -         check_this_in      =>   'USER_TABLES',
          -         against_this_in    =>   'USER_TABLES',
          -         check_where_in     =>   '',
          -         against_where_in   =>   '');
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => TRUE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => temp_rec.last_assert,
          -         against_this_in => 'EQTABLE');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => temp_rec.last_msg,
          -         against_this_in => 'Run Test');
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => (temp_rec.last_details like
          -                            'Comparison Query: %'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQTABLE Tests Happy Path 2';
          -      eqtable (
          -         msg_in             =>   'Run Test',
          -         check_this_in      =>   'ALL_TABLES',
          -         against_this_in    =>   'ALL_TABLES',
          -         check_where_in     =>   'owner = ''' || USER || '''',
          -         against_where_in   =>   'owner = ''' || USER || '''');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQTABLE Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eqtable (
          -         msg_in             =>   'Not Used',
          -         check_this_in      =>   'ALL_TABLES',
          -         against_this_in    =>   'ALL_TABLES',
          -         check_where_in     =>   'owner = ''' || USER || '''',
          -         against_where_in   =>   '0 = 1');
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => (temp_rec.last_details like
          -                            'Comparison Query: %'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQTABLE Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         eqtable (
          -            msg_in             =>   'Not Used',
          -            check_this_in      =>   'ALL_TABLES',
          -            against_this_in    =>   'ALL_TABLES',
          -            check_where_in     =>   'owner = ''' || USER || '''',
          -            against_where_in   =>   '0 = 1',
          -            raise_exc_in       =>   TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQTABLE Sad Path 3';
          -      wtplsql_skip_save := TRUE;
          -      eqtable (
          -         msg_in             =>   'Not Used',
          -         check_this_in      =>   'USER_TABLES',
          -         against_this_in    =>   'ALL_TABLES');
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details like
          -               '%PL/SQL: ORA-01789: query block has incorrect number of result columns%');
          -   end t_eqtable;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure eqtabcount (
          -      msg_in             in   varchar2,
          -      check_this_in      in   varchar2,
          -      against_this_in    in   varchar2,
          -      check_where_in     in   varchar2 := null,
          -      against_where_in   in   varchar2 := null,
          -      raise_exc_in       in   boolean := false)
          -is
          -   l_query      varchar2(16000) := 'select count(*) from ' || check_this_in;
          -   l_cnt        number;
          -   l_success    boolean;
          -   l_check_cnt  number;
          -   procedure l_run_query is
          -      type rc_type is ref cursor;
          -      l_rc rc_type;
          -   begin
          -      open l_rc for l_query;
          -      fetch l_rc into l_cnt;
          -      close l_rc;
          -      l_success := TRUE;
          -   exception
          -      when OTHERS
          -      then
          -         g_rec.last_details := SQLERRM || CHR(10) ||
          -                           'FAILURE of Compare Query: ' || l_query || ';';
          -         g_rec.last_pass    := FALSE;
          -         l_success      := FALSE;
          -         g_rec.raise_exception := raise_exc_in;
          -         process_assertion;
          -   end l_run_query;
          -begin
          -   g_rec.last_assert  := 'EQTABCOUNT';
          -   g_rec.last_msg     := msg_in;
          -   --
          -   l_query := 'select count(*) from ' || check_this_in;
          -   if check_where_in is not null
          -   then
          -      l_query := l_query || ' where ' || check_where_in;
          -   end if;
          -   l_run_query;
          -   if NOT l_success then return; end if;
          -   l_check_cnt := l_cnt;
          -   --
          -   l_query := 'select count(*) from ' || against_this_in;
          -   if against_where_in is not null
          -   then
          -      l_query := l_query || ' where ' || against_where_in;
          -   end if;
          -   l_run_query;
          -   if NOT l_success then return; end if;
          -   g_rec.last_pass    := (l_check_cnt = l_cnt);
          -   --
          -   g_rec.last_details := 'Expected ' || l_cnt       || ' rows from "' || against_this_in ||
          -                        '" and got ' || l_check_cnt || ' rows from "' || check_this_in   ||
          -                        '"';
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end eqtabcount;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_eqtabcount
          -   is
          -      l_found_exception  BOOLEAN;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQTABCOUNT Tests Happy Path 1';
          -      eqtabcount (
          -         msg_in             =>   'Run Test',
          -         check_this_in      =>   'ALL_TABLES',
          -         against_this_in    =>   'ALL_TABLES',
          -         check_where_in     =>   'owner = ''' || USER || '''',
          -         against_where_in   =>   'owner = ''' || USER || '''');
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => TRUE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => temp_rec.last_assert,
          -         against_this_in => 'EQTABCOUNT');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => temp_rec.last_msg,
          -         against_this_in => 'Run Test');
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => (temp_rec.last_details like
          -                            'Expected % rows from "ALL_TABLES"' ||
          -                            ' and got % rows from "ALL_TABLES"'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQTABCOUNT Tests Happy Path 2';
          -      eqtabcount (
          -         msg_in             =>   'Run Test',
          -         check_this_in      =>   'ALL_TABLES',
          -         against_this_in    =>   'USER_TABLES',
          -         check_where_in     =>   'owner = ''' || USER || '''',
          -         against_where_in   =>   '');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQTABCOUNT Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      eqtabcount (
          -         msg_in             =>   'Not Used',
          -         check_this_in      =>   'ALL_TABLES',
          -         against_this_in    =>   'ALL_TABLES',
          -         check_where_in     =>   'owner = ''JOHN DOE''',
          -         against_where_in   =>   'owner = ''' || USER || '''');
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => (temp_rec.last_details like
          -                            'Expected % rows from "ALL_TABLES" and ' ||
          -                                 'got % rows from "ALL_TABLES"'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQTABCOUNT Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         eqtabcount (
          -            msg_in             =>   'Not Used',
          -            check_this_in      =>   'ALL_TABLES',
          -            against_this_in    =>   'ALL_TABLES',
          -            check_where_in     =>   'owner = ''JOHN DOE''',
          -            against_where_in   =>   'owner = ''' || USER || '''',
          -            raise_exc_in       =>   TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQTABCOUNT Sad Path 3';
          -      wtplsql_skip_save := TRUE;
          -      eqtabcount (
          -         msg_in             =>   'Not Used',
          -         check_this_in      =>   'USER_TABLES',
          -         against_this_in    =>   'USER_TAB_COLUMNS');
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => (temp_rec.last_details like
          -               'Expected % rows from "USER_TAB_COLUMNS" and got % rows from "USER_TABLES"'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'EQTABCOUNT Sad Path 4';
          -      wtplsql_skip_save := TRUE;
          -      eqtabcount (
          -         msg_in             =>   'Not Used',
          -         check_this_in      =>   'BOGUS1',
          -         against_this_in    =>   'BOGUS2');
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.isnotnull (
          -         msg_in          => 'temp_rec.last_details value',
          -         check_this_in   => temp_rec.last_details);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => (temp_rec.last_details like
          -               '%table or view does not exist%'));
          -      wt_assert.this (
          -         msg_in          => 'temp_rec.last_details 2',
          -         check_this_in   => (temp_rec.last_details like
          -               '%FAILURE of Compare Query%'));
          -   end t_eqtabcount;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure objexists (
          -      msg_in        in   varchar2,
          -      obj_owner_in  in   varchar2,
          -      obj_name_in   in   varchar2,
          -      obj_type_in   in   varchar2 default null,
          -      raise_exc_in  in   boolean := false)
          -is
          -   l_num_objects  number;
          -begin
          -   g_rec.last_assert  := 'OBJEXISTS';
          -   g_rec.last_msg     := msg_in;
          -   select count(*) into l_num_objects
          -    from  all_objects
          -    where object_name = obj_name_in
          -     and  (   obj_owner_in is null
          -           or obj_owner_in = owner)
          -     and  (   obj_type_in is null
          -           or obj_type_in = object_type);
          -   g_rec.last_pass    := case l_num_objects when 0 then FALSE else TRUE end;
          -   g_rec.last_details := 'Number of objects found for "' ||
          -                         case when obj_owner_in is null then ''
          -                              else obj_owner_in || '.' end ||
          -                         obj_name_in || '"' ||
          -                         case when obj_type_in is null then ''
          -                              else '(' || obj_type_in || ')' end ||
          -                         ' is ' || l_num_objects;
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end objexists;
          -
          --- Concatenated SCHEMA_NAME.OBJECT_NAME
          -procedure objexists (
          -      msg_in          in   varchar2,
          -      check_this_in   in   varchar2,
          -      null_ok_in      in   boolean := false,  -- Not Used, utPLSQL V1 API
          -      raise_exc_in    in   boolean := false)
          -is
          -   l_pos    number := instr(check_this_in, '.');
          -begin
          -   objexists(msg_in       => msg_in
          -            ,obj_owner_in => substr(check_this_in, 1, l_pos-1)
          -            ,obj_name_in  => substr(check_this_in, l_pos+1, length(check_this_in)));
          -end objexists;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_object_exists
          -   is
          -      l_found_exception  BOOLEAN;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'OBJEXISTS Happy Path 1';
          -      objexists (
          -         msg_in        =>   'Run Test',
          -         obj_owner_in  =>   'SYS',
          -         obj_name_in   =>   'DUAL');
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => TRUE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => temp_rec.last_assert,
          -         against_this_in => 'OBJEXISTS');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => temp_rec.last_msg,
          -         against_this_in => 'Run Test');
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'Number of objects found for "SYS.DUAL" is 1');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'OBJEXISTS Happy Path 2';
          -      objexists (
          -         msg_in        =>   'Run Test',
          -         obj_owner_in  =>   'SYS',
          -         obj_name_in   =>   'DUAL',
          -         obj_type_in   =>   'TABLE');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'OBJEXISTS Happy Path 3';
          -      objexists (
          -         msg_in          =>  'Run Test',
          -         check_this_in   =>  'SYS.DUAL');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'OBJEXISTS Happy Path 4';
          -      objexists (
          -         msg_in          =>  'Run Test',
          -         check_this_in   =>  'DUAL');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'OBJEXISTS Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      objexists (
          -         msg_in        =>   'Not Used',
          -         obj_owner_in  =>   'JOE SMITH',
          -         obj_name_in   =>   'BOGUS');
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'Number of objects found for "JOE SMITH.BOGUS" is 0');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'OBJEXISTS Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         objexists (
          -            msg_in        =>   'Not Used',
          -            obj_owner_in  =>   'JOE SMITH',
          -            obj_name_in   =>   'BOGUS',
          -            raise_exc_in  =>   TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -   end t_object_exists;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure objnotexists (
          -      msg_in        in   varchar2,
          -      obj_owner_in  in   varchar2,
          -      obj_name_in   in   varchar2,
          -      obj_type_in   in   varchar2 default null,
          -      raise_exc_in  in   boolean := false)
          -is
          -   l_num_objects  number;
          -begin
          -   g_rec.last_assert  := 'OBJNOTEXISTS';
          -   g_rec.last_msg     := msg_in;
          -   select count(*) into l_num_objects
          -    from  all_objects
          -    where object_name = obj_name_in
          -     and  (   obj_owner_in is null
          -           or obj_owner_in = owner)
          -     and  (   obj_type_in is null
          -           or obj_type_in = object_type);
          -   g_rec.last_pass    := case l_num_objects when 0 then TRUE else FALSE end;
          -   g_rec.last_details := 'Number of objects found for "' ||
          -                         case when obj_owner_in is null then ''
          -                              else obj_owner_in || '.' end ||
          -                         obj_name_in || '"' ||
          -                         case when obj_type_in is null then ''
          -                              else '(' || obj_type_in || ')' end ||
          -                         ' is ' || l_num_objects;
          -   g_rec.raise_exception := raise_exc_in;
          -   process_assertion;
          -end objnotexists;
          -
          --- Concatenated SCHEMA_NAME.OBJECT_NAME
          -procedure objnotexists (
          -      msg_in          in   varchar2,
          -      check_this_in   in   varchar2,
          -      null_ok_in      in   boolean := false,  -- Not Used, utPLSQL V1 API
          -      raise_exc_in    in   boolean := false)
          -is
          -   l_pos    number := instr(check_this_in, '.');
          -begin
          -   objnotexists(msg_in       => msg_in
          -               ,obj_owner_in => substr(check_this_in, 1, l_pos-1)
          -               ,obj_name_in  => substr(check_this_in, l_pos+1, length(check_this_in)));
          -end objnotexists;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_object_not_exists
          -   is
          -      l_found_exception  BOOLEAN;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'OBJNOTEXISTS Happy Path 1';
          -      objnotexists (
          -         msg_in        =>   'Run Test',
          -         obj_owner_in  =>   'BOGUS',
          -         obj_name_in   =>   'THING123');
          -      temp_rec := g_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => TRUE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_assert',
          -         check_this_in   => temp_rec.last_assert,
          -         against_this_in => 'OBJNOTEXISTS');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_msg',
          -         check_this_in   => temp_rec.last_msg,
          -         against_this_in => 'Run Test');
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'Number of objects found for "BOGUS.THING123" is 0');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'OBJNOTEXISTS Happy Path 2';
          -      objnotexists (
          -         msg_in        =>   'Run Test',
          -         obj_owner_in  =>   'BOGUS',
          -         obj_name_in   =>   'THING123',
          -         obj_type_in   =>   'PACKAGE');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'OBJNOTEXISTS Happy Path 3';
          -      objnotexists (
          -         msg_in          =>   'Run Test',
          -         check_this_in   =>   'BOGUS.THING123');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'OBJNOTEXISTS Sad Path 1';
          -      wtplsql_skip_save := TRUE;
          -      objnotexists (
          -         msg_in        =>   'Not Used',
          -         obj_owner_in  =>   'SYS',
          -         obj_name_in   =>   'DUAL');
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_details',
          -         check_this_in   => temp_rec.last_details,
          -         against_this_in => 'Number of objects found for "SYS.DUAL" is 1');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'OBJNOTEXISTS Sad Path 2';
          -      wtplsql_skip_save := TRUE;
          -      begin
          -         objnotexists (
          -            msg_in        =>   'Not Used',
          -            obj_owner_in  =>   'SYS',
          -            obj_name_in   =>   'DUAL',
          -            raise_exc_in  =>   TRUE);
          -         l_found_exception := FALSE;
          -      exception when ASSERT_FAILURE_EXCEPTION then
          -         l_found_exception := TRUE;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      temp_rec := g_rec;
          -      wtplsql_skip_save := FALSE;
          -      wt_assert.eq (
          -         msg_in          => 'temp_rec.last_pass',
          -         check_this_in   => temp_rec.last_pass,
          -         against_this_in => FALSE);
          -      wt_assert.eq (
          -         msg_in          => 'RAISE_EXC_IN Test, Exception Raised?',
          -         check_this_in   => l_found_exception,
          -         against_this_in => TRUE);
          -   end t_object_not_exists;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          ---==============================================================--
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   -- Can't profile this package because all the "assert" tests
          -   --   pause profiling before they execute.
          -   procedure WTPLSQL_RUN  --% WTPLSQL SET DBOUT "WT_ASSERT:PACKAGE BODY" %--
          -   is
          -   begin
          -      select temp_clob,  temp_nclob,  temp_xml,  temp_blob
          -       into  temp_clob1, temp_nclob1, temp_xml1, temp_blob1
          -       from  wt_self_test where id = 1;
          -      --------------------------------------  WTPLSQL Testing --
          -      t_boolean_to_status;
          -      t_process_assertion;
          -      t_compare_queries;
          -      t_nls_settings;
          -      t_last_values;
          -      t_reset_globals;
          -      t_this;
          -      t_eq;
          -      t_isnotnull;
          -      t_isnull;
          -      --------------------------------------  WTPLSQL Testing --
          -      t_raises;
          -      t_eqqueryvalue;
          -      t_eqquery;
          -      t_eqtable;
          -      t_eqtabcount;
          -      t_object_exists;
          -      t_object_not_exists;
          -   end WTPLSQL_RUN;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          ---==============================================================--
          -
          -
          -end wt_assert;
          -
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/package body/WT_ASSERT/headerBg.jpg b/docs/core/DBDocs/package body/WT_ASSERT/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/package body/WT_ASSERT/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_ASSERT/report.css b/docs/core/DBDocs/package body/WT_ASSERT/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/package body/WT_ASSERT/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/package body/WT_ASSERT/report.js b/docs/core/DBDocs/package body/WT_ASSERT/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/package body/WT_ASSERT/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/package body/WT_ASSERT/topDimTabBg.gif b/docs/core/DBDocs/package body/WT_ASSERT/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/package body/WT_ASSERT/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_ASSERT/topDimTabL.gif b/docs/core/DBDocs/package body/WT_ASSERT/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/package body/WT_ASSERT/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_ASSERT/topDimTabR.gif b/docs/core/DBDocs/package body/WT_ASSERT/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/package body/WT_ASSERT/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_ASSERT/topTabBg.gif b/docs/core/DBDocs/package body/WT_ASSERT/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/package body/WT_ASSERT/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_ASSERT/topTabL.gif b/docs/core/DBDocs/package body/WT_ASSERT/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/package body/WT_ASSERT/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_ASSERT/topTabR.gif b/docs/core/DBDocs/package body/WT_ASSERT/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/package body/WT_ASSERT/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_PROFILER.html b/docs/core/DBDocs/package body/WT_PROFILER.html deleted file mode 100644 index 807c74b..0000000 --- a/docs/core/DBDocs/package body/WT_PROFILER.html +++ /dev/null @@ -1,2167 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Doc

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Code

          -
          -
          -
          -
          -
          -
          -
          - -


          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          OWNERWTP
          OBJECT_NAMEWT_PROFILER
          SUBOBJECT_NAMEnull
          OBJECT_ID41933
          DATA_OBJECT_IDnull
          OBJECT_TYPEPACKAGE BODY
          CREATED29-JUN-2018 15:09:17
          LAST_DDL_TIME29-JUN-2018 15:21:17
          TIMESTAMP2018-06-29:15:21:17
          STATUSVALID
          TEMPORARYN
          GENERATEDN
          SECONDARYN
          NAMESPACE2
          EDITION_NAMEnull
          -
          -
          -
          -
          - - - - - - - - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          EXECUTEPUBLICNOWTPWT_PROFILER
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          -
          -package body wt_profiler
          -as
          -
          -   TYPE rec_type is record
          -      (test_run_id     wt_test_runs.id%TYPE
          -      ,dbout_owner     wt_test_runs.dbout_owner%TYPE
          -      ,dbout_name      wt_test_runs.dbout_name%TYPE
          -      ,dbout_type      wt_test_runs.dbout_type%TYPE
          -      ,prof_runid      binary_integer
          -      ,trigger_offset  binary_integer
          -      ,error_message   varchar2(4000));
          -   g_rec  rec_type;
          -
          -   TYPE ignr_aa_type is table
          -      of varchar2(1)
          -      index by PLS_INTEGER;
          -   g_ignr_aa   ignr_aa_type;
          -
          -   $IF $$WTPLSQL_SELFTEST $THEN  ------%WTPLSQL_begin_ignore_lines%------
          -      g_skip_insert  boolean := FALSE;
          -      g_skip_add     boolean := FALSE;
          -   $END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -----------------------
          ---  Private Procedures
          -----------------------
          -
          -
          ---==============================================================--
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -
          -   procedure tl_compile_db_object
          -         (in_ptype   in varchar2
          -         ,in_pname   in varchar2
          -         ,in_source  in varchar2)
          -   is
          -      l_sql_txt  varchar2(4000);
          -      l_errtxt   varchar2(32000) := '';
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      -- Wrap in_source to complete the DDL statement
          -      l_sql_txt := 'create or replace ' || in_ptype || ' ' ||
          -                   in_pname || ' is' || CHR(10) ||
          -                   in_source || CHR(10) ||
          -                   'end ' || in_pname || ';';
          -      wt_assert.raises
          -         (msg_in         => 'Compile ' || in_ptype || ' ' || in_pname
          -         ,check_call_in  => l_sql_txt
          -         ,against_exc_in => '');
          -      --------------------------------------  WTPLSQL Testing --
          -      for buff in (select * from user_errors
          -                    where attribute = 'ERROR'
          -                     and  name      = in_pname
          -                     and  type      = in_ptype
          -                    order by sequence)
          -      loop
          -         l_errtxt := l_errtxt || buff.line || ', ' ||
          -            buff.position || ': ' || buff.text || CHR(10);
          -      end loop;
          -      wt_assert.isnull
          -         (msg_in        => 'Compile ' || in_ptype || ' ' || in_pname ||
          -                            ' Error'
          -         ,check_this_in => l_errtxt);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.objexists (
          -         msg_in        => in_pname || ' ' || in_ptype,
          -         obj_owner_in  => USER,
          -         obj_name_in   => upper(in_pname),
          -         obj_type_in   => upper(in_ptype));
          -   end tl_compile_db_object;
          ---==============================================================--
          -      --------------------------------------  WTPLSQL Testing --
          -   procedure tl_drop_db_object
          -      (in_pname  in  varchar2,
          -       in_ptype  in  varchar2)
          -   is
          -      l_sql_txt  varchar2(4000);
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      l_sql_txt := 'drop ' || in_ptype || ' ' || in_pname;
          -      wt_assert.raises
          -         (msg_in         => 'drop ' || in_ptype || ' ' || in_pname
          -         ,check_call_in  => l_sql_txt
          -         ,against_exc_in => '');
          -      wt_assert.objnotexists (
          -         msg_in        => in_pname || ' ' || in_ptype,
          -         obj_owner_in  => USER,
          -         obj_name_in   => upper(in_pname),
          -         obj_type_in   => upper(in_ptype));
          -   end tl_drop_db_object;
          ---==============================================================--
          -      --------------------------------------  WTPLSQL Testing --
          -   procedure tl_count_plsql_profiler_recs
          -         (in_test_run_id     in number
          -         ,in_expected_count  in number)
          -   is
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eqqueryvalue
          -         (msg_in           => 'Number of plsql_profiler_runs (' || in_test_run_id || ')'
          -         ,check_query_in   => 'select count(*) from plsql_profiler_runs' ||
          -                              ' where runid = ' || in_test_run_id
          -         ,against_value_in => in_expected_count);
          -      wt_assert.eqqueryvalue
          -         (msg_in           => 'Number of plsql_profiler_units (' || in_test_run_id || ')'
          -         ,check_query_in   => 'select count(*) from plsql_profiler_units' ||
          -                              ' where runid = ' || in_test_run_id
          -         ,against_value_in => in_expected_count);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eqqueryvalue
          -         (msg_in           => 'Number of plsql_profiler_data (' || in_test_run_id || ')'
          -         ,check_query_in   => 'select count(*) from plsql_profiler_data' ||
          -                              ' where runid = ' || in_test_run_id
          -         ,against_value_in => in_expected_count);
          -   end tl_count_plsql_profiler_recs;
          ---==============================================================--
          -      --------------------------------------  WTPLSQL Testing --
          -   procedure tl_insert_plsql_profiler_recs
          -         (in_test_run_id     in number)
          -   is
          -      l_sql_txt    varchar2(4000);
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      l_sql_txt := 'insert into plsql_profiler_runs (runid)' ||
          -                   ' values (' || in_test_run_id || ')';
          -      wt_assert.raises (
          -         msg_in         => 'insert plsql_profiler_runs (' || in_test_run_id || ')',
          -         check_call_in  => l_sql_txt,
          -         against_exc_in => '');
          -      --------------------------------------  WTPLSQL Testing --
          -      l_sql_txt := 'insert into plsql_profiler_units (runid, unit_number, total_time)' ||
          -                   ' values (' || in_test_run_id || ', ' || in_test_run_id || ', 0)';
          -      wt_assert.raises (
          -         msg_in         => 'insert plsql_profiler_units (' || in_test_run_id || ')',
          -         check_call_in  => l_sql_txt,
          -         against_exc_in => '');
          -      --------------------------------------  WTPLSQL Testing --
          -      l_sql_txt := 'insert into plsql_profiler_data (runid, unit_number, line#)' ||
          -                   ' values (' || in_test_run_id || ', ' || in_test_run_id || ', 0)';
          -      wt_assert.raises (
          -         msg_in         => 'insert plsql_profiler_data (RUNID: ' || in_test_run_id || ')',
          -         check_call_in  => l_sql_txt,
          -         against_exc_in => '');
          -      commit;
          -   end tl_insert_plsql_profiler_recs;
          ---==============================================================--
          -      --------------------------------------  WTPLSQL Testing --
          -   procedure tl_delete_plsql_profiler_recs
          -         (in_test_run_id     in number)
          -   is
          -      l_sql_txt    varchar2(4000);
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      l_sql_txt := 'delete from plsql_profiler_data' ||
          -                   ' where runid = ' || in_test_run_id;
          -      wt_assert.raises (
          -         msg_in         => 'delete plsql_profiler_data (' || in_test_run_id || ')',
          -         check_call_in  => l_sql_txt,
          -         against_exc_in => '');
          -      --------------------------------------  WTPLSQL Testing --
          -      l_sql_txt := 'delete from plsql_profiler_units' ||
          -                   ' where runid = ' || in_test_run_id;
          -      wt_assert.raises (
          -         msg_in         => 'delete plsql_profiler_units (' || in_test_run_id || ')',
          -         check_call_in  => l_sql_txt,
          -         against_exc_in => '');
          -      --------------------------------------  WTPLSQL Testing --
          -      l_sql_txt := 'delete from plsql_profiler_runs' ||
          -                   ' where runid = ' || in_test_run_id;
          -      wt_assert.raises (
          -         msg_in         => 'delete plsql_profiler_runs (' || in_test_run_id || ')',
          -         check_call_in  => l_sql_txt,
          -         against_exc_in => '');
          -      commit;
          -   end tl_delete_plsql_profiler_recs;
          ---==============================================================--
          -      --------------------------------------  WTPLSQL Testing --
          -   procedure tl_insert_test_runs
          -         (in_test_run_id  in NUMBER
          -         ,in_runner_name  in varchar2)
          -   is
          -      l_sql_txt    varchar2(4000);
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      l_sql_txt := 'insert into wt_test_runs' ||
          -                   ' (id, start_dtm, runner_owner, runner_name)' ||
          -                   ' values (' || in_test_run_id || ', sysdate, USER, ''' ||
          -                                  in_runner_name || ''')';
          -      wt_assert.raises (
          -         msg_in         => 'Insert wt_test_runs (' || in_test_run_id || ')',
          -         check_call_in  => l_sql_txt,
          -         against_exc_in => '');
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'wt_test_runs (' || in_test_run_id || ') Count',
          -         check_query_in   => 'select count(*) from wt_test_runs' ||
          -                             ' where id = ' || in_test_run_id,
          -         against_value_in => 1);
          -      commit;
          -   end tl_insert_test_runs;
          ---==============================================================--
          -      --------------------------------------  WTPLSQL Testing --
          -   procedure tl_delete_test_runs
          -         (in_test_run_id  in NUMBER)
          -   is
          -      l_sql_txt  varchar2(4000);
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      l_sql_txt := 'delete from wt_test_runs where id = ' || in_test_run_id;
          -      wt_assert.raises (
          -         msg_in         => 'Delete wt_test_runs (' || in_test_run_id || ')',
          -         check_call_in  => l_sql_txt,
          -         against_exc_in => '');
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'wt_test_runs (' || in_test_run_id || ') Count',
          -         check_query_in   => 'select count(*) from wt_test_runs' ||
          -                             ' where id = ' || in_test_run_id,
          -         against_value_in => 0);
          -      commit;
          -   end tl_delete_test_runs;
          ---==============================================================--
          -      --------------------------------------  WTPLSQL Testing --
          -   procedure tl_insert_dbout_profiles
          -         (in_rec  in wt_dbout_profiles%ROWTYPE)
          -   is
          -      l_sqlerrm  varchar2(4000);
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      begin
          -         insert into wt_dbout_profiles values in_rec;
          -         l_sqlerrm := SQLERRM;
          -         commit;
          -      exception when others then
          -         l_sqlerrm := SQLERRM;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in        => 'Insert wt_dbout_profiles (' || in_rec.test_run_id ||
          -                                                   ',' || in_rec.line || ')',
          -         check_this_in => l_sqlerrm,
          -         against_this_in => 'ORA-0000: normal, successful completion');
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'wt_dbout_profiles (' || in_rec.test_run_id || 
          -                                               ',' || in_rec.line || ') Count',
          -         check_query_in   => 'select count(*) from wt_dbout_profiles' ||
          -                             ' where test_run_id = ' || in_rec.test_run_id ||
          -                             ' and line = ' || in_rec.line,
          -         against_value_in => 1);
          -   end tl_insert_dbout_profiles;
          ---==============================================================--
          -      --------------------------------------  WTPLSQL Testing --
          -   procedure tl_delete_dbout_profiles
          -         (in_test_run_id  in NUMBER)
          -   is
          -      l_sql_txt  varchar2(4000);
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      l_sql_txt := 'delete from wt_dbout_profiles where test_run_id = ' ||
          -                    in_test_run_id;
          -      wt_assert.raises (
          -         msg_in         => 'Delete wt_dbout_profiles (' || in_test_run_id || ')',
          -         check_call_in  => l_sql_txt,
          -         against_exc_in => '');
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'wt_dbout_profiles (' || in_test_run_id || ') Count',
          -         check_query_in   => 'select count(*) from wt_dbout_profiles' ||
          -                             ' where test_run_id = ' || in_test_run_id,
          -         against_value_in => 0);
          -      commit;
          -   end tl_delete_dbout_profiles;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          ---==============================================================--
          -
          -
          -------------------------------------------------------------
          --- Return DBMS_PROFILER specific error messages
          -function get_error_msg
          -      (retnum_in  in  binary_integer)
          -   return varchar2
          -is
          -   l_msg_prefix  varchar2(50) := 'DBMS_PROFILER Error: ';
          -begin
          -   case retnum_in
          -   when dbms_profiler.error_param then return l_msg_prefix ||
          -       'A subprogram was called with an incorrect parameter.';
          -   when dbms_profiler.error_io then return l_msg_prefix ||
          -       'Data flush operation failed.' ||
          -       ' Check whether the profiler tables have been created,' ||
          -       ' are accessible, and that there is adequate space.';
          -   when dbms_profiler.error_version then return l_msg_prefix ||
          -       'There is a mismatch between package and database implementation.' ||
          -       ' Oracle returns this error if an incorrect version of the' ||
          -       ' DBMS_PROFILER package is installed, and if the version of the' ||
          -       ' profiler package cannot work with this database version.';
          -   else return l_msg_prefix ||
          -       'Unknown error number ' || retnum_in;
          -   end case;
          -end get_error_msg;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_get_error_msg
          -   is
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Get Error Messages';
          -      wt_assert.isnotnull (
          -         msg_in        => 'ERROR_PARAM Test 1',
          -         check_this_in => get_error_msg(dbms_profiler.error_param));
          -      wt_assert.this (
          -         msg_in        => 'ERROR_PARAM Test 2',
          -         check_this_in => regexp_like(get_error_msg(dbms_profiler.error_param)
          -                                     ,'incorrect parameter','i'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in        => 'ERROR_IO Test 1',
          -         check_this_in => get_error_msg(dbms_profiler.error_io));
          -      wt_assert.this (
          -         msg_in        => 'ERROR_IO Test 2',
          -         check_this_in => regexp_like(get_error_msg(dbms_profiler.error_io)
          -                                     ,'Data flush operation','i'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in        => 'ERROR_VERSION Test 1',
          -         check_this_in => get_error_msg(dbms_profiler.error_version));
          -      wt_assert.this (
          -         msg_in        => 'ERROR_VERSION Test 2',
          -         check_this_in => regexp_like(get_error_msg(dbms_profiler.error_version)
          -                                     ,'incorrect version','i'));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in        => 'Unknown Error Test 1',
          -         check_this_in => get_error_msg(-9999));
          -      wt_assert.this (
          -         msg_in        => 'Unknown Error Test 2',
          -         check_this_in => regexp_like(get_error_msg(-9999)
          -                                     ,'Unknown error','i'));
          -   end t_get_error_msg;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure delete_plsql_profiler_recs
          -      (in_profiler_runid  in number)
          -is
          -   PRAGMA AUTONOMOUS_TRANSACTION;
          -begin
          -   delete from plsql_profiler_data
          -    where runid = in_profiler_runid;
          -   delete from plsql_profiler_units
          -    where runid = in_profiler_runid;
          -   delete from plsql_profiler_runs
          -    where runid = in_profiler_runid;
          -   COMMIT;
          -end delete_plsql_profiler_recs;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_delete_profiler_recs
          -   is
          -      c_test_run_id   constant number := -99;
          -      l_err_stack     varchar2(32000);
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Delete PL/SQL Profiler Records Happy Path 1';
          -      begin
          -         delete_plsql_profiler_recs(c_test_run_id);  -- Should run without error
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      exception when others then
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'delete_plsql_profiler_recs(' || c_test_run_id || ') 1',
          -         check_this_in   => l_err_stack);
          -      tl_count_plsql_profiler_recs(c_test_run_id, 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Delete PL/SQL Profiler Records Happy Path 2';
          -      tl_insert_plsql_profiler_recs(c_test_run_id);
          -      tl_count_plsql_profiler_recs(c_test_run_id, 1);
          -      begin
          -         delete_plsql_profiler_recs(c_test_run_id);  -- Should run without error
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      exception when others then
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'delete_plsql_profiler_recs(' || c_test_run_id || ') 2',
          -         check_this_in   => l_err_stack);
          -      tl_count_plsql_profiler_recs(c_test_run_id, 0);
          -   end t_delete_profiler_recs;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure find_dbout
          -      (in_pkg_name  in  varchar2)
          -is
          -   --
          -   -- https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements008.htm#SQLRF51129
          -   -- Within a namespace, no two objects can have the same name.  The following
          -   --   schema objects share one namespace:
          -   --  -) Packages
          -   --  -) Private synonyms
          -   --  -) Sequences
          -   --  -) Stand-alone procedures
          -   --  -) Stand-alone stored functions
          -   --  -) User-defined operators
          -   --  -) User-defined types
          -   --  -) Tables
          -   --  -) Views
          -   -- Each of the following schema objects has its own namespace:
          -   --  -) Clusters
          -   --  -) Constraints
          -   --  -) Database triggers
          -   --  -) Dimensions
          -   --  -) Indexes
          -   --  -) Materialized views (When you create a materialized view, the database
          -   --     creates an internal table of the same name. This table has the same
          -   --     namespace as the other tables in the schema. Therefore, a schema
          -   --     cannot contain a table and a materialized view of the same name.)
          -   --  -) Private database links
          -   -- Because tables and sequences are in the same namespace, a table and a
          -   --   sequence in the same schema cannot have the same name. However, tables
          -   --   and indexes are in different namespaces. Therefore, a table and an index
          -   --   in the same schema can have the same name.
          -   -- Each schema in the database has its own namespaces for the objects it
          -   --   contains. This means, for example, that two tables in different schemas
          -   --   are in different namespaces and can have the same name.
          -   -- Results are unknown if a Database Object Under Test has the same name in
          -   --   different namespaces.
          -   --
          -   -- Head Regular Expression is
          -   --   '--% WTPLSQL SET DBOUT "' - literal string
          -   -- Main Regular Expression is
          -   --   '[[:alnum:] ._$#:]'         - Any alpha, numeric, " ", ".", "_", "$", "#", or ":" character
          -   --   +                         - One or more of the previous characters
          -   -- Tail Regular Expression is
          -   --   '" %--'                   - literal string
          -   C_HEAD_RE CONSTANT varchar2(30) := '--% WTPLSQL SET DBOUT "';
          -   C_MAIN_RE CONSTANT varchar2(30) := '[[:alnum:] ._$#:]+';
          -   C_TAIL_RE CONSTANT varchar2(30) := '" %--';
          -   -- This cursor is used to catch the first occurance of a DBOUT annotation
          -   cursor c_annotation is
          -      select regexp_substr(src.text, C_HEAD_RE||C_MAIN_RE||C_TAIL_RE)  TEXT
          -       from  dba_source  src
          -       where src.owner = USER
          -        and  src.name  = in_pkg_name
          -        and  src.type  = 'PACKAGE BODY'
          -        and  regexp_like(src.text, C_HEAD_RE||C_MAIN_RE||C_TAIL_RE)
          -       order by src.line;
          -   l_target   varchar2(32000);
          -   -- This cursor is used to confirm the PL/SQL source is readable
          -   cursor c_readable is
          -      select *
          -       from  dba_source  src
          -       where src.owner  = g_rec.dbout_owner
          -        and  src.name   = g_rec.dbout_name
          -        and  src.type   = g_rec.dbout_type;
          -   b_readable  c_readable%ROWTYPE;
          -   -- These hold the positions of the separators dot (.) and colon (:)
          -   l_dot_pos   number;
          -   l_cln_pos   number;
          -begin
          -   -- Find the first occurance of the DBOUT annotation
          -   open c_annotation;
          -   fetch c_annotation into l_target;
          -   if c_annotation%NOTFOUND
          -   then
          -      -- No annotation was found, close and end
          -      close c_annotation;
          -      return;
          -   end if;
          -   close c_annotation;
          -   -- Strip the Head Sub-String
          -   l_target := regexp_replace(SRCSTR      => l_target
          -                             ,PATTERN     => '^' || C_HEAD_RE
          -                             ,REPLACESTR  => ''
          -                             ,POSITION    => 1
          -                             ,OCCURRENCE  => 1);
          -   -- Strip the Tail Sub-String
          -   l_target := regexp_replace(SRCSTR      => l_target
          -                             ,PATTERN     => C_TAIL_RE || '$'
          -                             ,REPLACESTR  => ''
          -                             ,POSITION    => 1
          -                             ,OCCURRENCE  => 1);
          -   -- Locate the Owner/Name separator
          -   l_dot_pos := instr(l_target,'.');
          -   l_cln_pos := instr(l_target,':');
          -   begin
          -      select obj.owner
          -            ,obj.object_name
          -            ,obj.object_type
          -       into  g_rec.dbout_owner
          -            ,g_rec.dbout_name
          -            ,g_rec.dbout_type
          -       from  dba_objects  obj
          -       where (   ( -- No separators were given, assume USER is the owner.
          -                   -- No object type was given. This could throw TOO_MANY_ROWS.
          -                      l_dot_pos       = 0
          -                  and l_cln_pos       = 0
          -                  and obj.owner       = USER
          -                  and obj.object_name = l_target  )
          -              OR ( -- No object type was given. This could throw TOO_MANY_ROWS.
          -                      l_dot_pos      != 0
          -                  and l_cln_pos       = 0
          -                  and obj.owner       = substr(l_target, 1, l_dot_pos-1)
          -                  and obj.object_name = substr(l_target, l_dot_pos+1, 512) )
          -              OR ( -- No object owner was given, assume USER is the owner.
          -                      l_dot_pos       = 0
          -                  and l_cln_pos      != 0
          -                  and obj.owner       = USER
          -                  and obj.object_name = substr(l_target, 1, l_cln_pos-1)
          -                  and obj.object_type = substr(l_target, l_cln_pos+1, 512) )
          -              OR ( -- All separators were given
          -                      l_dot_pos      != 0
          -                  and l_cln_pos      != 0
          -                  and obj.owner       = substr(l_target, 1, l_dot_pos-1)
          -                  and obj.object_name = substr(l_target, l_dot_pos+1, l_cln_pos-l_dot_pos-1)
          -                  and obj.object_type = substr(l_target, l_cln_pos+1, 512) )
          -             );
          -   exception
          -      when NO_DATA_FOUND
          -      then
          -         g_rec.error_message := 'Unable to find database object "' ||
          -                                 l_target  || '".';
          -         return;
          -      when TOO_MANY_ROWS
          -      then
          -         g_rec.error_message := 'Found too many database objects "' ||
          -                                 l_target || '".';
          -         return;
          -   end;
          -   -- Find the first occurance of any PL/SQL source
          -   open c_readable;
          -   fetch c_readable into b_readable;
          -   if c_readable%NOTFOUND
          -   then
          -      if g_rec.dbout_type in ('FUNCTION', 'PROCEDURE', 'PACKAGE BODY',
          -                              'TYPE BODY', 'TRIGGER')
          -      then
          -         -- These object types should have PL/SQL source code available
          -         --%WTPLSQL_begin_ignore_lines%--  Untestable:
          -         g_rec.error_message := 'Unable to read source for ' || g_rec.dbout_type ||
          -                             ' ' || g_rec.dbout_owner || '.' || g_rec.dbout_name ;
          -         --%WTPLSQL_end_ignore_lines%--
          -      else
          -         g_rec.prof_runid := -1;  -- Don't run profiler.
          -      end if;
          -   end if;
          -   close c_readable;
          -   --
          -end find_dbout;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_find_dbout
          -   is
          -      l_recSAVE    rec_type;
          -      l_recNULL    rec_type;
          -      l_recTEST    rec_type;
          -      l_pname      varchar2(128) := 'WT_PROFILE_FIND_DBOUT';
          -      --------------------------------------  WTPLSQL Testing --
          -      procedure run_find_dbout is begin
          -         l_recSAVE := g_rec;
          -         g_rec := l_recNULL;
          -         find_dbout(l_pname);
          -         l_recTEST := g_rec;
          -         g_rec := l_recSAVE;
          -      end run_find_dbout;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Find DBOUT Setup';
          -      tl_compile_db_object
          -         (in_ptype   => 'package'
          -         ,in_pname   => l_pname
          -         ,in_source  => '   l_junk number;' );
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Find DBOUT Happy Path 1';
          -      tl_compile_db_object
          -         (in_ptype   => 'package body'
          -         ,in_pname   => l_pname
          -         ,in_source  => 'begin'          || CHR(10) ||
          -                        '  l_junk := 1;' );
          -      run_find_dbout;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull
          -         (msg_in          => 'l_recTEST.dbout_owner'
          -         ,check_this_in   => l_recTEST.dbout_owner);
          -      wt_assert.isnull
          -         (msg_in          => 'l_recTEST.dbout_name'
          -         ,check_this_in   => l_recTEST.dbout_name);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull
          -         (msg_in          => 'l_recTEST.dbout_type'
          -         ,check_this_in   => l_recTEST.dbout_type);
          -      wt_assert.isnull
          -         (msg_in          => 'l_recTEST.error_message'
          -         ,check_this_in   => l_recTEST.error_message);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Find DBOUT Happy Path 2';
          -      tl_compile_db_object
          -         (in_ptype   => 'package body'
          -         ,in_pname   => l_pname
          -         ,in_source  => 
          -            '  --% WTPLSQL SET DBOUT "' || l_pname ||
          -                                     ':PACKAGE BODY" %--' || CHR(10) ||
          -            'begin'                                       || CHR(10) ||
          -            '  l_junk := 1;'                              );
          -      run_find_dbout;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq
          -         (msg_in          => 'l_recTEST.dbout_owner'
          -         ,check_this_in   => l_recTEST.dbout_owner
          -         ,against_this_in => USER);
          -      wt_assert.eq
          -         (msg_in          => 'l_recTEST.dbout_name'
          -         ,check_this_in   => l_recTEST.dbout_name
          -         ,against_this_in => l_pname);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq
          -         (msg_in          => 'l_recTEST.dbout_type'
          -         ,check_this_in   => l_recTEST.dbout_type
          -         ,against_this_in => 'PACKAGE BODY');
          -      wt_assert.isnull
          -         (msg_in        => 'l_recTEST.error_message'
          -         ,check_this_in => l_recTEST.error_message);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Find DBOUT Happy Path 3';
          -      tl_compile_db_object
          -         (in_ptype   => 'package body'
          -         ,in_pname   => l_pname
          -         ,in_source  => 
          -            '  --% WTPLSQL SET DBOUT "' || USER ||
          -                                    '.' || l_pname ||
          -                                    ':PACKAGE BODY" %--' || CHR(10) ||
          -            'begin'                                      || CHR(10) ||
          -            '  l_junk := 1;'                             );
          -      run_find_dbout;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq
          -         (msg_in          => 'l_recTEST.dbout_owner'
          -         ,check_this_in   => l_recTEST.dbout_owner
          -         ,against_this_in => USER);
          -      wt_assert.eq
          -         (msg_in          => 'l_recTEST.dbout_name'
          -         ,check_this_in   => l_recTEST.dbout_name
          -         ,against_this_in => l_pname);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq
          -         (msg_in          => 'l_recTEST.dbout_type'
          -         ,check_this_in   => l_recTEST.dbout_type
          -         ,against_this_in => 'PACKAGE BODY');
          -      wt_assert.isnull
          -         (msg_in        => 'l_recTEST.error_message'
          -         ,check_this_in => l_recTEST.error_message);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Find DBOUT Sad Path 1';
          -      tl_compile_db_object
          -         (in_ptype   => 'package body'
          -         ,in_pname   => l_pname
          -         ,in_source  =>
          -            -- Don't remove the "||", otherwise this will set the DBOUT
          -            '  --% WTPLSQL SET DBOUT ' || '"BOGUS1" %--' || CHR(10) ||
          -            'begin'                                      || CHR(10) ||
          -            '  l_junk := 1;'                             );
          -      run_find_dbout;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull
          -         (msg_in          => 'l_recTEST.dbout_owner'
          -         ,check_this_in   => l_recTEST.dbout_owner);
          -      wt_assert.isnull
          -         (msg_in          => 'l_recTEST.dbout_name'
          -         ,check_this_in   => l_recTEST.dbout_name);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull
          -         (msg_in          => 'l_recTEST.dbout_type'
          -         ,check_this_in   => l_recTEST.dbout_type);
          -      wt_assert.eq
          -         (msg_in          => 'l_recTEST.error_message'
          -         ,check_this_in   => l_recTEST.error_message
          -         ,against_this_in => 'Unable to find database object "BOGUS1".');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Find DBOUT Sad Path 2';
          -      tl_compile_db_object
          -         (in_ptype   => 'package body'
          -         ,in_pname   => l_pname
          -         ,in_source  => 
          -            '  --% WTPLSQL SET DBOUT "' || USER ||
          -                                    '.' || l_pname || '" %--'  || CHR(10) ||
          -            'begin'                                            || CHR(10) ||
          -            '  l_junk := 1;'                                   );
          -      run_find_dbout;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq
          -         (msg_in          => 'l_recTEST.dbout_owner'
          -         ,check_this_in   => l_recTEST.dbout_owner
          -         ,against_this_in => USER);
          -      wt_assert.eq
          -         (msg_in          => 'l_recTEST.dbout_name'
          -         ,check_this_in   => l_recTEST.dbout_name
          -         ,against_this_in => l_pname);
          -      wt_assert.eq
          -         (msg_in          => 'l_recTEST.error_message'
          -         ,check_this_in   => l_recTEST.error_message
          -         ,against_this_in => 'Found too many database objects "WTP.WT_PROFILE_FIND_DBOUT".');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Find DBOUT Sad Path 3';
          -      tl_compile_db_object
          -         (in_ptype   => 'package body'
          -         ,in_pname   => l_pname
          -         ,in_source  => 
          -            -- Don't remove the "||", otherwise this will set the DBOUT
          -            '  --% WTPLSQL SET DBOUT ' || '"SYS.ALL_OBJECTS:VIEW" %--' || CHR(10) ||
          -            'begin'                                                    || CHR(10) ||
          -            '  l_junk := 1;'                                           );
          -      run_find_dbout;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq
          -         (msg_in          => 'l_recTEST.dbout_owner'
          -         ,check_this_in   => l_recTEST.dbout_owner
          -         ,against_this_in => 'SYS');
          -      wt_assert.eq
          -         (msg_in          => 'l_recTEST.dbout_name'
          -         ,check_this_in   => l_recTEST.dbout_name
          -         ,against_this_in => 'ALL_OBJECTS');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq
          -         (msg_in          => 'l_recTEST.dbout_type'
          -         ,check_this_in   => l_recTEST.dbout_type
          -         ,against_this_in => 'VIEW');
          -      wt_assert.isnull
          -         (msg_in          => 'l_recTEST.error_message'
          -         ,check_this_in   => l_recTEST.error_message);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Find DBOUT Teardown';
          -      tl_drop_db_object(l_pname, 'package');
          -   end t_find_dbout;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure load_ignr_aa
          -is
          -   cursor c_find_begin is
          -      select line
          -            ,instr(text,'--%WTPLSQL_begin_ignore_lines%--') col
          -       from  dba_source
          -       where owner = g_rec.dbout_owner
          -        and  name  = g_rec.dbout_name
          -        and  type  = g_rec.dbout_type
          -        and  text like '%--\%WTPLSQL_begin_ignore_lines\%--%' escape '\'
          -       order by line;
          -   buff_find_begin  c_find_begin%ROWTYPE;
          -   cursor c_find_end (in_line in number, in_col in number) is
          -      with q1 as (
          -      select line
          -            ,instr(text,'--%WTPLSQL_end_ignore_lines%--') col
          -       from  dba_source
          -       where owner = g_rec.dbout_owner
          -        and  name  = g_rec.dbout_name
          -        and  type  = g_rec.dbout_type
          -        and  line >= in_line
          -        and  text like '%--\%WTPLSQL_end_ignore_lines\%--%' escape '\'
          -      )
          -      select line
          -            ,col
          -       from  q1
          -       where line > in_line
          -          or (    line = in_line
          -              and col  > in_col)
          -       order by line
          -            ,col;
          -   buff_find_end  c_find_end%ROWTYPE;
          -begin
          -   g_ignr_aa.delete;
          -   open c_find_begin;
          -   loop
          -      fetch c_find_begin into buff_find_begin;
          -      exit when c_find_begin%NOTFOUND;
          -      open c_find_end (buff_find_begin.line, buff_find_begin.col);
          -      fetch c_find_end into buff_find_end;
          -      if c_find_end%NOTFOUND
          -      then
          -         select max(line)
          -          into  buff_find_end.line
          -          from  dba_source
          -          where owner = g_rec.dbout_owner
          -           and  name  = g_rec.dbout_name
          -           and  type  = g_rec.dbout_type;
          -      end if;
          -      close c_find_end;
          -      for i in buff_find_begin.line + g_rec.trigger_offset ..
          -               buff_find_end.line   + g_rec.trigger_offset
          -      loop
          -         g_ignr_aa(i) := 'X';
          -      end loop;
          -   end loop;
          -   close c_find_begin;
          -end load_ignr_aa;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_load_ignr_aa
          -   is
          -      l_recSAVE    rec_type;
          -      l_ignrSAVE   ignr_aa_type;
          -      l_ignrTEST   ignr_aa_type;
          -      l_pname      varchar2(128) := 'WT_PROFILE_LOAD_IGNR';
          -      --------------------------------------  WTPLSQL Testing --
          -      procedure run_load_ignr is begin
          -         l_recSAVE  := g_rec;
          -         l_ignrSAVE := g_ignr_aa;
          -         g_ignr_aa.delete;
          -         g_rec.dbout_owner    := USER;
          -         g_rec.dbout_name     := l_pname;
          -         g_rec.dbout_type     := 'PACKAGE BODY';
          -         g_rec.trigger_offset := 0;
          -         load_ignr_aa;
          -         l_ignrTEST := g_ignr_aa;
          -         g_ignr_aa := l_ignrSAVE;
          -         g_rec   := l_recSAVE;
          -      end run_load_ignr;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Load Ignr Setup';
          -      wt_assert.isnotnull
          -         (msg_in    => 'Number of IGNR_AA elements'
          -         ,check_this_in => g_ignr_aa.COUNT);
          -      tl_compile_db_object
          -         (in_ptype   => 'package'
          -         ,in_pname   => l_pname
          -         ,in_source  => '  l_junk number;' );
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Load Ignr Happy Path 1';
          -      tl_compile_db_object
          -         (in_ptype   => 'package body'
          -         ,in_pname   => l_pname
          -         ,in_source  => 'begin'          || CHR(10) ||
          -                        '  l_junk := 1;' );
          -      run_load_ignr;
          -      wt_assert.eq
          -         (msg_in          => 'l_ignrTest.COUNT'
          -         ,check_this_in   => l_ignrTest.COUNT
          -         ,against_this_in => 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Load Ignr Happy Path 2';
          -      tl_compile_db_object
          -         (in_ptype   => 'package body'
          -         ,in_pname   => l_pname
          -         ,in_source  => 
          -            'begin'                                    || CHR(10) ||  -- Line 2
          -            '  --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) ||  -- Line 3
          -            '  l_junk := 1;'                           );             -- Line 4
          -            -- end                                                    -- Line 5
          -      run_load_ignr;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq
          -         (msg_in          => 'l_ignrTest.COUNT'
          -         ,check_this_in   => l_ignrTest.COUNT
          -         ,against_this_in => 3);
          -      for i in 3 .. 5
          -      loop
          -         wt_assert.eq
          -            (msg_in          => 'l_ignrTest.exists(' || i || ')'
          -            ,check_this_in   => l_ignrTest.exists(i)
          -            ,against_this_in => TRUE);
          -      end loop;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Load Ignr Happy Path 3';
          -      tl_compile_db_object
          -         (in_ptype   => 'package body'
          -         ,in_pname   => l_pname
          -         ,in_source  => 
          -            'begin'                                    || CHR(10) ||  -- Line 2
          -            '  l_junk := 1;'                           || CHR(10) ||  -- Line 3
          -            '  --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) ||  -- Line 4
          -            '  l_junk := 2;'                           || CHR(10) ||  -- Line 5
          -            '  --%WTPLSQL_end_' || 'ignore_lines%--'   || CHR(10) ||  -- Line 6
          -            '  l_junk := 3;'                           );             -- Line 7
          -      run_load_ignr;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq
          -         (msg_in          => 'l_ignrTest.COUNT'
          -         ,check_this_in   => l_ignrTest.COUNT
          -         ,against_this_in => 3);
          -      for i in 4 .. 6
          -      loop
          -         wt_assert.eq
          -            (msg_in          => 'l_ignrTest.exists(' || i || ')'
          -            ,check_this_in   => l_ignrTest.exists(i)
          -            ,against_this_in => TRUE);
          -      end loop;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Load Ignr Happy Path 4';
          -      tl_compile_db_object
          -         (in_ptype   => 'package body'
          -         ,in_pname   => l_pname
          -         ,in_source  => 
          -            'begin'                                    || CHR(10) ||  -- Line 2
          -            '  l_junk := 1;'                           || CHR(10) ||  -- Line 3
          -            '  --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) ||  -- Line 4
          -            '  l_junk := 2;'                           || CHR(10) ||  -- Line 5
          -            '  --%WTPLSQL_end_' || 'ignore_lines%--'   || CHR(10) ||  -- Line 6
          -            '  l_junk := 3;'                           || CHR(10) ||  -- Line 7
          -            '  --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) ||  -- Line 8
          -            '  l_junk := 4;'                           );             -- Line 9
          -            -- end                                                    -- Line 10
          -      run_load_ignr;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq
          -         (msg_in          => 'l_ignrTest.COUNT'
          -         ,check_this_in   => l_ignrTest.COUNT
          -         ,against_this_in => 6);
          -      for i in 4 .. 6
          -      loop
          -         wt_assert.eq
          -            (msg_in          => 'l_ignrTest.exists(' || i || ')'
          -            ,check_this_in   => l_ignrTest.exists(i)
          -            ,against_this_in => TRUE);
          -      end loop;
          -      --------------------------------------  WTPLSQL Testing --
          -      for i in 8 .. 10
          -      loop
          -         wt_assert.eq
          -            (msg_in          => 'l_ignrTest.exists(' || i || ')'
          -            ,check_this_in   => l_ignrTest.exists(i)
          -            ,against_this_in => TRUE);
          -      end loop;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Load Ignr Sad Path 1';
          -      tl_compile_db_object
          -         (in_ptype   => 'package body'
          -         ,in_pname   => l_pname
          -         ,in_source  => 
          -            'begin'                                    || CHR(10) ||  -- Line 2
          -            '  --%WTPLSQL_end_' || 'ignore_lines%--'   || CHR(10) ||  -- Line 3
          -            '  l_junk := 4;'                           );             -- Line 4
          -      run_load_ignr;
          -      wt_assert.eq
          -         (msg_in          => 'l_ignrTest.COUNT'
          -         ,check_this_in   => l_ignrTest.COUNT
          -         ,against_this_in => 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Load Ignr Sad Path 2';
          -      tl_compile_db_object
          -         (in_ptype   => 'package body'
          -         ,in_pname   => l_pname
          -         ,in_source  => 
          -            'begin'                                    || CHR(10) ||  -- Line 2
          -            '  l_junk := 1;'                           || CHR(10) ||  -- Line 3
          -            '  --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) ||  -- Line 4
          -            '  l_junk := 2;'                           || CHR(10) ||  -- Line 5
          -            '  --%WTPLSQL_end_' || 'ignore_lines%--'   || CHR(10) ||  -- Line 6
          -            '  l_junk := 3;'                           || CHR(10) ||  -- Line 7
          -            '  --%WTPLSQL_end_' || 'ignore_lines%--'   || CHR(10) ||  -- Line 8
          -            '  l_junk := 4;'                           );             -- Line 9
          -      run_load_ignr;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq
          -         (msg_in          => 'l_ignrTest.COUNT'
          -         ,check_this_in   => l_ignrTest.COUNT
          -         ,against_this_in => 3);
          -      for i in 4 .. 6
          -      loop
          -         wt_assert.eq
          -            (msg_in          => 'l_ignrTest.exists(' || i || ')'
          -            ,check_this_in   => l_ignrTest.exists(i)
          -            ,against_this_in => TRUE);
          -      end loop;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Load Ignr Sad Path 3';
          -      tl_compile_db_object
          -         (in_ptype   => 'package body'
          -         ,in_pname   => l_pname
          -         ,in_source  => 
          -            'begin'                                    || CHR(10) ||  -- Line 2
          -            '  l_junk := 1;'                           || CHR(10) ||  -- Line 3
          -            '  --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) ||  -- Line 4
          -            '  l_junk := 2;'                           || CHR(10) ||  -- Line 5
          -            '  --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) ||  -- Line 6
          -            '  l_junk := 3;'                           || CHR(10) ||  -- Line 7
          -            '  --%WTPLSQL_end_' || 'ignore_lines%--'   || CHR(10) ||  -- Line 8
          -            '  l_junk := 4;'                           );             -- Line 9
          -      run_load_ignr;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq
          -         (msg_in          => 'l_ignrTest.COUNT'
          -         ,check_this_in   => l_ignrTest.COUNT
          -         ,against_this_in => 5);
          -      for i in 4 .. 8
          -      loop
          -         wt_assert.eq
          -            (msg_in          => 'l_ignrTest.exists(' || i || ')'
          -            ,check_this_in   => l_ignrTest.exists(i)
          -            ,against_this_in => TRUE);
          -      end loop;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Load Ignr Teardown';
          -      tl_drop_db_object(l_pname, 'package');
          -      wt_assert.isnotnull
          -         (msg_in    => 'Number of IGNR_AA elements'
          -         ,check_this_in => g_ignr_aa.COUNT);
          -   end t_load_ignr_aa;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure insert_dbout_profile
          -is
          -   PRAGMA AUTONOMOUS_TRANSACTION;
          -   prof_rec    wt_dbout_profiles%ROWTYPE;
          -   l_max_line  number;
          -   procedure l_set_status is begin
          -      if g_ignr_aa.EXISTS(prof_rec.line)
          -      then
          -         -- Found Statement to Ignore
          -         prof_rec.status := 'IGNR';
          -         return;
          -      end if;
          -      if prof_rec.total_occur > 0
          -      then
          -         -- Found Executed Statement
          -         prof_rec.status := 'EXEC';
          -         return;
          -      end if;
          -      if    prof_rec.total_occur = 0
          -        and prof_rec.total_usecs = 0
          -      then
          -         -- Check for declaration if Not Executed
          -         if regexp_like(prof_rec.text, '^[[:space:]]*' ||
          -                       '(FUNCTION|PROCEDURE|PACKAGE|TYPE|TRIGGER)' ||
          -                       '[[:space:]]', 'i')
          -         then
          -            -- Exclude declarations if Not Executed
          -            prof_rec.status := 'EXCL';
          -         elsif     prof_rec.line = l_max_line
          -               AND regexp_like(prof_rec.text, 'END', 'i')
          -         then
          -            prof_rec.status := 'EXCL';
          -         else
          -            -- Found Not Executed Statement
          -            prof_rec.status := 'NOTX';
          -         end if;
          -         return;
          -      end if;
          -      -- Everything else is unknown
          -      prof_rec.status := 'UNKN';
          -   end l_set_status;
          -begin
          -   -- This will not RAISE NO_DATA_FOUND because it uses a GROUP FUNCTION.
          -   select max(ppd.line#) into l_max_line
          -    from  plsql_profiler_units ppu
          -          join plsql_profiler_data  ppd
          -               on  ppd.unit_number = ppu.unit_number
          -               and ppd.runid       = g_rec.prof_runid
          -    where ppu.unit_owner = g_rec.dbout_owner
          -     and  ppu.unit_name  = g_rec.dbout_name
          -     and  ppu.unit_type  = g_rec.dbout_type
          -     and  ppu.runid      = g_rec.prof_runid;
          -   load_ignr_aa;
          -   prof_rec.test_run_id := g_rec.test_run_id;
          -   for buf1 in (
          -      select src.line
          -            ,ppd.total_occur
          -            ,ppd.total_time
          -            ,ppd.min_time
          -            ,ppd.max_time
          -            ,src.text
          -       from  plsql_profiler_units ppu
          -             join plsql_profiler_data  ppd
          -                  on  ppd.unit_number = ppu.unit_number
          -                  and ppd.runid       = g_rec.prof_runid
          -             join dba_source  src
          -                  on  src.line  = ppd.line# + g_rec.trigger_offset
          -                  and src.owner = g_rec.dbout_owner
          -                  and src.name  = g_rec.dbout_name
          -                  and src.type  = g_rec.dbout_type
          -       where ppu.unit_owner = g_rec.dbout_owner
          -        and  ppu.unit_name  = g_rec.dbout_name
          -        and  ppu.unit_type  = g_rec.dbout_type
          -        and  ppu.runid      = g_rec.prof_runid )
          -   loop
          -      prof_rec.line        := buf1.line;
          -      prof_rec.total_occur := buf1.total_occur;
          -      prof_rec.total_usecs := buf1.total_time/1000;
          -      prof_rec.min_usecs   := buf1.min_time/1000;
          -      prof_rec.max_usecs   := buf1.max_time/1000;
          -      prof_rec.text        := buf1.text;
          -      prof_rec.status      := NULL;
          -      l_set_status;
          -      insert into wt_dbout_profiles values prof_rec;
          -
          -   $IF $$WTPLSQL_SELFTEST $THEN  ------%WTPLSQL_begin_ignore_lines%------
          -      if not g_skip_add then
          -   $END
          -      wt_test_run_stat.add_profile(prof_rec);
          -   $IF $$WTPLSQL_SELFTEST $THEN
          -      end if;
          -   $END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -   end loop;
          -   COMMIT;
          -   -- Delete PLSQL Profiler has it's own
          -   --   PRAGMA AUTONOMOUS_TRANSACTION and COMMIT;
          -   g_ignr_aa.delete;
          -   delete_plsql_profiler_recs(g_rec.prof_runid);
          -end insert_dbout_profile;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_insert_dbout_profile
          -   is
          -      units_rec      plsql_profiler_units%ROWTYPE;
          -      data_rec       plsql_profiler_data%ROWTYPE;
          -      l_recSAVE      rec_type;
          -      l_recNULL      rec_type;
          -      c_test_run_id  constant number := -97;
          -      l_pname        varchar2(128) := 'WT_PROFILE_INSERT_DBOUT';
          -      l_sqlerrm      varchar2(4000);
          -      l_err_stack    varchar2(32000);
          -      --------------------------------------  WTPLSQL Testing --
          -      procedure insert_plsql_profiler_data
          -            (in_line#        in number
          -            ,in_total_occur  in number
          -            ,in_total_time   in number)
          -      is
          -      begin
          -         data_rec.line#       := in_line#;
          -         data_rec.total_occur := in_total_occur;
          -         data_rec.total_time  := in_total_time;
          -      --------------------------------------  WTPLSQL Testing --
          -         begin
          -            insert into plsql_profiler_data values data_rec;
          -            commit;
          -            l_sqlerrm := SQLERRM;
          -         exception when others then
          -            l_sqlerrm := SQLERRM;
          -         end;
          -         wt_assert.eq (
          -            msg_in          => 'insert plsql_profiler_data (LINE#: ' || data_rec.line#|| ')',
          -            check_this_in   => SQLERRM,
          -            against_this_in => 'ORA-0000: normal, successful completion');
          -      end insert_plsql_profiler_data;
          -      --------------------------------------  WTPLSQL Testing --
          -      procedure test_dbout_profiler
          -            (in_line#     in  number
          -            ,in_col_name  in  varchar2
          -            ,in_value     in  varchar2)
          -      is
          -      begin
          -         wt_assert.eqqueryvalue
          -            (msg_in           => 'wt_dbout_profiles line ' || in_line# ||
          -                                               ', column ' || in_col_name
          -            ,check_query_in   => 'select ' || in_col_name ||
          -                                 ' from wt_dbout_profiles' ||
          -                                 ' where test_run_id = ' || c_test_run_id ||
          -                                 ' and line = ' || in_line#
          -            ,against_value_in => in_value);
          -      end test_dbout_profiler;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Insert DBOUT Profile Setup';
          -      tl_compile_db_object
          -         (in_ptype   => 'package'
          -         ,in_pname   => l_pname
          -         ,in_source  => '  l_junk number;' );
          -      --------------------------------------  WTPLSQL Testing --
          -      tl_compile_db_object
          -         (in_ptype   => 'package body'
          -         ,in_pname   => l_pname
          -         ,in_source  => 
          -            'begin'                                    || CHR(10) ||  -- Line 2
          -            '  l_junk := 1;'                           || CHR(10) ||  -- Line 3
          -            '  --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) ||  -- Line 4
          -            '  l_junk := 2;'                           || CHR(10) ||  -- Line 5
          -            '  --%WTPLSQL_end_' || 'ignore_lines%--'   || CHR(10) ||  -- Line 6
          -            '  if 0 = 1 then'                          || CHR(10) ||  -- Line 7
          -            '     l_junk := 3;'                        || CHR(10) ||  -- Line 8
          -            '  end if;'                                );             -- Line 9
          -      tl_insert_plsql_profiler_recs(c_test_run_id);
          -      tl_count_plsql_profiler_recs(c_test_run_id, 1);
          -      tl_insert_test_runs(c_test_run_id, 'Insert DBOUT Test');
          -      --------------------------------------  WTPLSQL Testing --
          -      units_rec.runid        := c_test_run_id;
          -      units_rec.unit_number  := 1;
          -      units_rec.unit_owner   := USER;
          -      units_rec.unit_name    := l_pname;
          -      units_rec.unit_type    := 'PACKAGE BODY';
          -      units_rec.total_time   := 0;
          -      --------------------------------------  WTPLSQL Testing --
          -      begin
          -         insert into plsql_profiler_units values units_rec;
          -         commit;
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      exception when others then
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'insert UNIT 1 into plsql_profiler_units',
          -         check_this_in   => l_err_stack);
          -      wt_assert.eqqueryvalue
          -         (msg_in           => 'Number of UNIT 1 plsql_profiler_units'
          -         ,check_query_in   => 'select count(*) from plsql_profiler_units' ||
          -                              ' where runid = ' || c_test_run_id ||
          -                              ' and unit_number = 1'
          -         ,against_value_in => 1);
          -      --------------------------------------  WTPLSQL Testing --
          -      data_rec.runid       := c_test_run_id;
          -      data_rec.unit_number := 1;
          -      data_rec.min_time    := 0;
          -      data_rec.max_time    := 1;
          -      insert_plsql_profiler_data(1, 0, 0);
          -      insert_plsql_profiler_data(2, 0, 1);
          -      insert_plsql_profiler_data(3, 1, 1);
          -      insert_plsql_profiler_data(5, 1, 1);
          -      insert_plsql_profiler_data(7, 1, 1);
          -      insert_plsql_profiler_data(8, 0, 0);
          -      insert_plsql_profiler_data(9, 1, 1);
          -      insert_plsql_profiler_data(10, 0, 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eqqueryvalue
          -         (msg_in           => 'Number of UNIT 1 plsql_profiler_data'
          -         ,check_query_in   => 'select count(*) from plsql_profiler_data' ||
          -                              ' where runid = ' || c_test_run_id ||
          -                              ' and unit_number = 1'
          -         ,against_value_in => 8);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Insert DBOUT Profile Happy Path';
          -      l_recSAVE := g_rec;
          -      g_rec.test_run_id     := c_test_run_id;
          -      g_rec.dbout_owner     := USER;
          -      g_rec.dbout_name      := l_pname;
          -      g_rec.dbout_type      := 'PACKAGE BODY';
          -      g_rec.prof_runid      := c_test_run_id;
          -      g_rec.trigger_offset  := 0;
          -      g_rec.error_message   := '';
          -      --------------------------------------  WTPLSQL Testing --
          -      g_skip_add := TRUE;
          -      begin
          -         insert_dbout_profile;
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      exception when others then
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      end;
          -      g_skip_add := FALSE;
          -      g_rec := l_recSAVE;
          -      wt_assert.isnull (
          -         msg_in          => 'SQLERRM',
          -         check_this_in   => l_err_stack);
          -      --------------------------------------  WTPLSQL Testing --
          -      test_dbout_profiler(1, 'STATUS', 'EXCL');
          -      test_dbout_profiler(1, 'TEXT',   'package body WT_PROFILE_INSERT_DBOUT is' || CHR(10));
          -      test_dbout_profiler(2, 'STATUS', 'UNKN');
          -      test_dbout_profiler(2, 'TEXT',   'begin' || CHR(10));
          -      test_dbout_profiler(3, 'STATUS', 'EXEC');
          -      test_dbout_profiler(3, 'TEXT',   '  l_junk := 1;' || CHR(10));
          -      test_dbout_profiler(5, 'STATUS', 'IGNR');
          -      test_dbout_profiler(5, 'TEXT',   '  l_junk := 2;' || CHR(10));
          -      test_dbout_profiler(7, 'STATUS', 'EXEC');
          -      test_dbout_profiler(7, 'TEXT',   '  if 0 = 1 then' || CHR(10));
          -      test_dbout_profiler(8, 'STATUS', 'NOTX');
          -      test_dbout_profiler(8, 'TEXT',   '     l_junk := 3;' || CHR(10));
          -      test_dbout_profiler(9, 'STATUS', 'EXEC');
          -      test_dbout_profiler(9, 'TEXT',   '  end if;' || CHR(10));
          -      test_dbout_profiler(10, 'STATUS', 'EXCL');
          -      test_dbout_profiler(10, 'TEXT',   'end WT_PROFILE_INSERT_DBOUT;');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Insert DBOUT Profile Teardown';
          -      tl_delete_dbout_profiles(c_test_run_id);
          -      tl_delete_test_runs(c_test_run_id);
          -      tl_delete_plsql_profiler_recs(c_test_run_id);
          -      tl_count_plsql_profiler_recs(c_test_run_id, 0);
          -      tl_drop_db_object(l_pname, 'package');
          -   end t_insert_dbout_profile;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          ----------------------
          ---  Public Procedures
          ----------------------
          -
          -
          -------------------------------------------------------------
          -procedure initialize
          -      (in_test_run_id      in  number,
          -       in_runner_name      in  varchar2,
          -       out_dbout_owner     out varchar2,
          -       out_dbout_name      out varchar2,
          -       out_dbout_type      out varchar2,
          -       out_trigger_offset  out number,
          -       out_profiler_runid  out number,
          -       out_error_message   out varchar2)
          -is
          -   l_rec_NULL     rec_type;
          -   l_retnum       binary_integer;
          -begin
          -   -- Reset variables
          -   out_dbout_owner     := '';
          -   out_dbout_name      := '';
          -   out_dbout_type      := '';
          -   out_trigger_offset  := NULL;
          -   out_profiler_runid  := NULL;
          -   out_error_message   := '';
          -   g_rec := l_rec_NULL;
          -   $IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -   $THEN
          -      -- In case a test failed and left this set to TRUE
          -      g_skip_insert := FALSE;
          -      g_skip_add    := FALSE;
          -   $END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -   -- Abort if there is no Test Run ID
          -   if in_test_run_id is null
          -   then
          -      raise_application_error  (-20004, 'i_test_run_id is null');
          -   end if;
          -   g_rec.test_run_id := in_test_run_id;
          -   -- Find the Database Object Under Test
          -   find_dbout(in_pkg_name => in_runner_name);
          -   out_dbout_owner    := g_rec.dbout_owner;
          -   out_dbout_name     := g_rec.dbout_name;
          -   out_dbout_type     := g_rec.dbout_type;
          -   out_error_message  := g_rec.error_message;
          -   -- There muxt be a name and no error message
          -   if    g_rec.dbout_name    is null      -- No DBOUT notation
          -      or g_rec.error_message is not null  -- Error with DBOUT or Source
          -      or g_rec.prof_runid     = -1        -- Skip Profiling
          -   then
          -      g_rec.prof_runid := NULL;
          -      return;
          -   end if;
          -   -- Calculate the trigger offset, if any.
          -   g_rec.trigger_offset := wt_profiler.trigger_offset
          -                              (dbout_owner_in => g_rec.dbout_owner
          -                              ,dbout_name_in  => g_rec.dbout_name
          -                              ,dbout_type_in  => g_rec.dbout_type );
          -   out_trigger_offset := g_rec.trigger_offset;
          -   -- Check Versions
          -   l_retnum := dbms_profiler.INTERNAL_VERSION_CHECK;
          -   if l_retnum <> 0 then
          -      ------%WTPLSQL_begin_ignore_lines%------  Can't test this
          -      --dbms_profiler.get_version(major_version, minor_version);
          -      raise_application_error(-20005,
          -         'dbms_profiler.INTERNAL_VERSION_CHECK returned: ' || get_error_msg(l_retnum));
          -      ----------------%WTPLSQL_end_ignore_lines%----------------
          -   end if;
          -   -- This starts the PROFILER Running!!!
          -   --dbms_output.put_line('DEBUG1. g_rec.prof_runid = ' || g_rec.prof_runid);
          -   l_retnum := dbms_profiler.START_PROFILER(run_number => g_rec.prof_runid);
          -   if l_retnum <> 0 then
          -      ------%WTPLSQL_begin_ignore_lines%------  Can't test this
          -      raise_application_error(-20006,
          -         'dbms_profiler.START_PROFILER returned: ' || get_error_msg(l_retnum));
          -      ----------------%WTPLSQL_end_ignore_lines%----------------
          -   end if;
          -   -- Everything is OK, set the Profiler Run ID
          -   out_profiler_runid := g_rec.prof_runid;
          -   --dbms_output.put_line('DEBUG2. g_rec.prof_runid = ' || g_rec.prof_runid);
          -end initialize;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_initialize
          -   is
          -      c_test_run_id   constant number := -96;
          -      l_pname         varchar2(128) := 'WT_PROFILE_INITIALIZE';
          -      l_recSAVE       rec_type;
          -      l_recTEST       rec_type;
          -      l_recOUT        rec_type;
          -      l_sqlerrm       varchar2(4000);
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Insert DBOUT Profile Setup';
          -      tl_compile_db_object
          -         (in_ptype   => 'package'
          -         ,in_pname   => l_pname
          -         ,in_source  => '  l_junk number;' );
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Initialize Test HAPPY Path 1';
          -      tl_compile_db_object
          -         (in_ptype   => 'package body'
          -         ,in_pname   => l_pname
          -         ,in_source  => 
          -            'begin'          || CHR(10) ||  -- Line 2
          -            '  l_junk := 7;' );             -- Line 3
          -      --------------------------------------  WTPLSQL Testing --
          -      l_recSAVE := g_rec;
          -      initialize
          -         (in_test_run_id      => c_test_run_id,
          -          in_runner_name      => l_pname,
          -          out_dbout_owner     => l_recOUT.dbout_owner,
          -          out_dbout_name      => l_recOUT.dbout_name,
          -          out_dbout_type      => l_recOUT.dbout_type,
          -          out_trigger_offset  => l_recOUT.trigger_offset,
          -          out_profiler_runid  => l_recOUT.prof_runid,
          -          out_error_message   => l_recOUT.error_message);
          -      l_recTEST := g_rec;
          -      g_rec := l_recSAVE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'OUT dbout_owner',
          -         check_this_in   => l_recOUT.dbout_owner);
          -      wt_assert.isnull (
          -         msg_in          => 'OUT dbout_name',
          -         check_this_in   => l_recOUT.dbout_name);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'OUT dbout_type',
          -         check_this_in   => l_recOUT.dbout_type);
          -      wt_assert.isnull (
          -         msg_in          => 'OUT prof_runid',
          -         check_this_in   => l_recOUT.prof_runid);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'OUT trigger_offset',
          -         check_this_in   => l_recOUT.trigger_offset);
          -      wt_assert.isnull (
          -         msg_in          => 'OUT error_message',
          -         check_this_in   => l_recOUT.error_message);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.dbout_owner',
          -         check_this_in   => l_recTEST.dbout_owner);
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.dbout_name',
          -         check_this_in   => l_recTEST.dbout_name);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.dbout_type',
          -         check_this_in   => l_recTEST.dbout_type);
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.prof_runid',
          -         check_this_in   => l_recTEST.prof_runid);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.trigger_offset',
          -         check_this_in   => l_recTEST.trigger_offset);
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.error_message',
          -         check_this_in   => l_recTEST.error_message);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Initialize Test HAPPY Path 2';
          -      tl_compile_db_object
          -         (in_ptype   => 'package body'
          -         ,in_pname   => l_pname
          -         ,in_source  => 
          -            'begin'                                     || CHR(10) ||  -- Line 2
          -            '--% WTPLSQL SET DBOUT "' || l_pname ||
          -                                   ':PACKAGE BODY" %--' || CHR(10) ||  -- Line 3
          -            '  l_junk := 7;'                            );             -- Line 4
          -      --------------------------------------  WTPLSQL Testing --
          -      l_recSAVE := g_rec;
          -      initialize
          -         (in_test_run_id      => c_test_run_id,
          -          in_runner_name      => l_pname,
          -          out_dbout_owner     => l_recOUT.dbout_owner,
          -          out_dbout_name      => l_recOUT.dbout_name,
          -          out_dbout_type      => l_recOUT.dbout_type,
          -          out_trigger_offset  => l_recOUT.trigger_offset,
          -          out_profiler_runid  => l_recOUT.prof_runid,
          -          out_error_message   => l_recOUT.error_message);
          -      l_recTEST := g_rec;
          -      g_rec := l_recSAVE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'OUT dbout_owner',
          -         check_this_in   => l_recOUT.dbout_owner,
          -         against_this_in => USER);
          -      wt_assert.eq (
          -         msg_in          => 'OUT dbout_name',
          -         check_this_in   => l_recOUT.dbout_name,
          -         against_this_in => l_pname);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'OUT dbout_type',
          -         check_this_in   => l_recOUT.dbout_type,
          -         against_this_in => 'PACKAGE BODY');
          -      wt_assert.isnotnull (
          -         msg_in          => 'OUT prof_runid',
          -         check_this_in   => l_recOUT.prof_runid);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'OUT trigger_offset',
          -         check_this_in   => l_recOUT.trigger_offset,
          -         against_this_in => 0);
          -      wt_assert.isnull (
          -         msg_in          => 'OUT error_message',
          -         check_this_in   => l_recOUT.error_message);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.dbout_owner',
          -         check_this_in   => l_recTEST.dbout_owner,
          -         against_this_in => USER);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.dbout_name',
          -         check_this_in   => l_recTEST.dbout_name,
          -         against_this_in => l_pname);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.dbout_type',
          -         check_this_in   => l_recTEST.dbout_type,
          -         against_this_in => 'PACKAGE BODY');
          -      wt_assert.isnotnull (
          -         msg_in          => 'l_recTEST.prof_runid',
          -         check_this_in   => l_recTEST.prof_runid);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.trigger_offset',
          -         check_this_in   => l_recTEST.trigger_offset,
          -         against_this_in => 0);
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.error_message',
          -         check_this_in   => l_recTEST.error_message);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Initialize Test Sad Path 1';
          -      l_recSAVE := g_rec;
          -      begin
          -         initialize
          -            (in_test_run_id      => null,
          -             in_runner_name      => 'Sad Path 1',
          -             out_dbout_owner     => l_recOUT.dbout_owner,
          -             out_dbout_name      => l_recOUT.dbout_name,
          -             out_dbout_type      => l_recOUT.dbout_type,
          -             out_trigger_offset  => l_recOUT.trigger_offset,
          -             out_profiler_runid  => l_recOUT.prof_runid,
          -             out_error_message   => l_recOUT.error_message);
          -         l_sqlerrm := SQLERRM;
          -      --------------------------------------  WTPLSQL Testing --
          -      exception when others then
          -         l_sqlerrm := SQLERRM;
          -      end;
          -      l_recTEST := g_rec;
          -      g_rec := l_recSAVE;
          -      wt_assert.eq (
          -         msg_in          => 'SQLERRM',
          -         check_this_in   => l_sqlerrm,
          -         against_this_in => 'ORA-20004: i_test_run_id is null');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Insert DBOUT Profile Teardown';
          -      tl_drop_db_object
          -         (in_ptype   => 'package'
          -         ,in_pname   => l_pname);
          -   end t_initialize;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          --- Because this procedure is called to cleanup after erorrs,
          ---  it must be able to run multiple times without causing damage.
          -procedure finalize
          -is
          -   l_rec_NULL  rec_type;
          -begin
          -   if g_rec.prof_runid is null
          -   then
          -      return;
          -   end if;
          -   if g_rec.test_run_id is null
          -   then
          -      raise_application_error (-20000, 'g_rec.test_run_id is null');
          -   end if;
          -   $IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -   $THEN
          -      if not g_skip_insert
          -      then
          -   $END
          -   begin
          -      -- DBMS_PROFILER.FLUSH_DATA is included with DBMS_PROFILER.STOP_PROFILER
          -      --dbms_output.put_line('DEBUG3. g_rec.prof_runid = ' || g_rec.prof_runid);
          -      dbms_profiler.STOP_PROFILER;
          -   exception when others then
          -      g_rec := l_rec_NULL;
          -      --dbms_output.put_line('DEBUG4. SQLERRM = ' || sqlerrm);
          -      raise;
          -   end;
          -   insert_dbout_profile;
          -   $IF $$WTPLSQL_SELFTEST
          -   $THEN
          -      end if;
          -   $END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -   g_rec := l_rec_NULL;
          -end finalize;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_finalize
          -   is
          -      l_recSAVE    rec_type;
          -      l_recTEST    rec_type;
          -      l_sqlerrm    varchar2(4000);
          -      l_err_stack  varchar2(32000);
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Finalize Happy Path 1';
          -      l_recSAVE := g_rec;
          -      g_rec.prof_runid := NULL;
          -      wt_assert.isnull (
          -         msg_in          => 'g_rec.prof_runid',
          -         check_this_in   => g_rec.prof_runid);
          -      --------------------------------------  WTPLSQL Testing --
          -      begin
          -         finalize;
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      exception when others then
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      end;
          -      g_rec := l_recSAVE;
          -      wt_assert.isnull (
          -         msg_in          => 'format_error_stack and format_error_backtrace',
          -         check_this_in   => l_err_stack);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Finalize Happy Path 2';
          -      l_recSAVE := g_rec;
          -      g_rec.test_run_id    := -1;
          -      g_rec.dbout_owner    := 'TEST OWNER';
          -      g_rec.dbout_name     := 'TEST NAME';
          -      g_rec.dbout_type     := 'TEST TYPE';
          -      g_rec.prof_runid     := -2;
          -      g_rec.trigger_offset := -3;
          -      g_rec.error_message  := 'TEST MESSAGE';
          -      --------------------------------------  WTPLSQL Testing --
          -      g_skip_insert := TRUE;
          -      begin
          -         finalize;
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      exception when others then
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      end;
          -      g_skip_insert := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      l_recTEST := g_rec;
          -      g_rec := l_recSAVE;
          -      wt_assert.isnull (
          -         msg_in          => 'SQLERRM',
          -         check_this_in   => l_err_stack);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.test_run_id',
          -         check_this_in   => l_recTEST.test_run_id);
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.dbout_owner',
          -         check_this_in   => l_recTEST.dbout_owner);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.dbout_name',
          -         check_this_in   => l_recTEST.dbout_name);
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.dbout_type',
          -         check_this_in   => l_recTEST.dbout_type);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.prof_runid',
          -         check_this_in   => l_recTEST.prof_runid);
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.trigger_offset',
          -         check_this_in   => l_recTEST.trigger_offset);
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.error_message',
          -         check_this_in   => l_recTEST.error_message);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Finalize Sad Path 1';
          -      l_recSAVE := g_rec;
          -      g_rec.prof_runid := -1;
          -      g_rec.test_run_id := NULL;
          -      begin
          -         finalize;
          -      exception when others then
          -         l_sqlerrm := SQLERRM;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      g_rec := l_recSAVE;
          -      wt_assert.eq (
          -         msg_in          => 'SQLERRM',
          -         check_this_in   => l_sqlerrm,
          -         against_this_in => 'ORA-20000: g_rec.test_run_id is null');
          -   end t_finalize;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          --- Find begining of PL/SQL Block in a Trigger
          -function trigger_offset
          -      (dbout_owner_in  in  varchar2
          -      ,dbout_name_in   in  varchar2
          -      ,dbout_type_in   in  varchar2)
          -   return number
          -is
          -begin
          -   if dbout_type_in != 'TRIGGER'
          -   then
          -      return 0;
          -   end if;
          -   for buff in (
          -      select line, text from dba_source
          -       where owner = dbout_owner_in
          -        and  name  = dbout_name_in
          -        and  type  = 'TRIGGER'
          -      order by line )
          -   loop
          -      if regexp_instr(buff.text,
          -                      '(^declare$' ||
          -                      '|^declare[[:space:]]' ||
          -                      '|[[:space:]]declare$' ||
          -                      '|[[:space:]]declare[[:space:]])', 1, 1, 0, 'i') <> 0
          -         OR
          -         regexp_instr(buff.text,
          -                      '(^begin$' ||
          -                      '|^begin[[:space:]]' ||
          -                      '|[[:space:]]begin$' ||
          -                      '|[[:space:]]begin[[:space:]])', 1, 1, 0, 'i') <> 0 
          -      then
          -         return buff.line - 1;
          -      end if;
          -   end loop;
          -   return 0;
          -end trigger_offset;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_trigger_offset
          -   is
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Trigger Offset Happy Path';
          -      wt_assert.eq (
          -         msg_in          => 'Trigger Test',
          -         check_this_in   => trigger_offset (dbout_owner_in => USER
          -                                           ,dbout_name_in  => 'WT_SELF_TEST$TEST'
          -                                           ,dbout_type_in  => 'TRIGGER'),
          -         against_this_in => 3);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'Package Test',
          -         check_this_in   => trigger_offset (dbout_owner_in => USER
          -                                           ,dbout_name_in  => 'WT_PROFILER'
          -                                           ,dbout_type_in  => 'PACKAGE BODY'),
          -         against_this_in => 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Trigger Offset Sad Path';
          -      wt_assert.eq (
          -         msg_in          => 'Non Existent Object',
          -         check_this_in   => trigger_offset (dbout_owner_in => 'BOGUS456'
          -                                           ,dbout_name_in  => 'BOGUS123'
          -                                           ,dbout_type_in  => 'TRIGGER'),
          -         against_this_in => 0);
          -   end t_trigger_offset;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -function calc_pct_coverage
          -      (in_test_run_id  in  number)
          -   return number
          -IS
          -BEGIN
          -   for buff in (
          -      select sum(case status when 'EXEC' then 1 else 0 end)    HITS
          -            ,sum(case status when 'NOTX' then 1 else 0 end)    MISSES
          -       from  wt_dbout_profiles  p
          -       where test_run_id = in_test_run_id  )
          -   loop
          -      if buff.hits + buff.misses = 0
          -      then
          -         return -1;
          -      else
          -         return round(100 * buff.hits / (buff.hits + buff.misses),2);
          -      end if;
          -   end loop;
          -   return null;
          -END calc_pct_coverage;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_calc_pct_coverage
          -   is
          -      c_test_run_id  constant number := -95;
          -      l_rec          wt_dbout_profiles%ROWTYPE;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Calculate Percent Coverage Setup';
          -      tl_insert_test_runs(c_test_run_id, 'Calculate Offset Test');
          -      l_rec.test_run_id  := c_test_run_id;
          -      l_rec.total_occur  := 1;
          -      l_rec.total_usecs  := 1;
          -      l_rec.min_usecs    := 1;
          -      l_rec.max_usecs    := 1;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Calculate Percent Coverage Happy Path 1';
          -      l_rec.line         := 1;
          -      l_rec.status       := 'EXEC';
          -      l_rec.text         := 'Testing ' || l_rec.line;
          -      tl_insert_dbout_profiles(l_rec);
          -      --------------------------------------  WTPLSQL Testing --
          -      l_rec.line         := 2;
          -      l_rec.status       := 'NOTX';
          -      l_rec.text         := 'Testing ' || l_rec.line;
          -      tl_insert_dbout_profiles(l_rec);
          -      --------------------------------------  WTPLSQL Testing --
          -      l_rec.line         := 3;
          -      l_rec.status       := 'EXEC';
          -      l_rec.text         := 'Testing ' || l_rec.line;
          -      tl_insert_dbout_profiles(l_rec);
          -      wt_assert.eq (
          -         msg_in          => 'Main Test',
          -         check_this_in   => calc_pct_coverage(c_test_run_id),
          -         against_this_in => 66.67);
          -      tl_delete_dbout_profiles(c_test_run_id);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Calculate Percent Coverage Happy Path 2';
          -      l_rec.line         := 1;
          -      l_rec.status       := 'EXCL';
          -      l_rec.text         := 'Testing ' || l_rec.line;
          -      tl_insert_dbout_profiles(l_rec);
          -      --------------------------------------  WTPLSQL Testing --
          -      l_rec.line         := 2;
          -      l_rec.status       := 'UNKN';
          -      l_rec.text         := 'Testing ' || l_rec.line;
          -      tl_insert_dbout_profiles(l_rec);
          -      --------------------------------------  WTPLSQL Testing --
          -      l_rec.line         := 3;
          -      l_rec.status       := 'EXCL';
          -      l_rec.text         := 'Testing ' || l_rec.line;
          -      tl_insert_dbout_profiles(l_rec);
          -      wt_assert.eq (
          -         msg_in          => 'Main Test',
          -         check_this_in   => calc_pct_coverage(c_test_run_id),
          -         against_this_in => -1);
          -      tl_delete_dbout_profiles(c_test_run_id);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Calculate Percent Coverage Sad Path';
          -      wt_assert.isnull (
          -         msg_in        => 'Missing Test Run ID',
          -         check_this_in => calc_pct_coverage(-99990));
          -      wt_assert.isnull (
          -         msg_in        => 'NULL Test Run ID',
          -         check_this_in => calc_pct_coverage(null));
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Calculate Percent Coverage Teardown';
          -      tl_delete_test_runs(c_test_run_id);
          -   end t_calc_pct_coverage;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure delete_records
          -      (in_test_run_id  in number)
          -is
          -   l_profiler_runid  number;
          -begin
          -   select profiler_runid into l_profiler_runid
          -    from wt_test_runs where id = in_test_run_id;
          -   delete_plsql_profiler_recs(l_profiler_runid);
          -   delete from wt_dbout_profiles
          -    where test_run_id = in_test_run_id;
          -exception
          -   when NO_DATA_FOUND
          -   then
          -      return;
          -end delete_records;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_delete_records
          -   is
          -      c_test_run_id  constant number := -98;
          -      l_rec          wt_dbout_profiles%ROWTYPE;
          -      l_err_stack    varchar2(32000);
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Delete Records Setup';
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'wt_test_runs Count 0',
          -         check_query_in   => 'select count(*) from wt_test_runs' ||
          -                             ' where id = ' || c_test_run_id,
          -         against_value_in => 0);
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'wt_dbout_profiles Count 0',
          -         check_query_in   => 'select count(*) from wt_dbout_profiles' ||
          -                             ' where test_run_id = ' || c_test_run_id,
          -         against_value_in => 0);
          -      tl_insert_test_runs(c_test_run_id, 'Delete Records Test');
          -      --------------------------------------  WTPLSQL Testing --
          -      l_rec.test_run_id  := c_test_run_id;
          -      l_rec.line         := 1;
          -      l_rec.status       := 'EXEC';
          -      l_rec.total_occur  := 1;
          -      l_rec.total_usecs  := 1;
          -      l_rec.min_usecs    := 1;
          -      l_rec.max_usecs    := 1;
          -      l_rec.text         := 'Testing';
          -      tl_insert_dbout_profiles(l_rec);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Delete Records Happy Path 1';
          -      begin
          -         delete_records(c_test_run_id);
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      exception when others then
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in        => 'SQLERRM',
          -         check_this_in => l_err_stack);
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'wt_dbout_profiles Count 2',
          -         check_query_in   => 'select count(*) from wt_dbout_profiles' ||
          -                             ' where test_run_id = ' || c_test_run_id,
          -         against_value_in => 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Delete Records Sad Path 1';
          -      begin
          -         delete_records(-9876);
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      exception when others then
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in        => 'SQLERRM',
          -         check_this_in => l_err_stack);
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'wt_dbout_profiles Count 2',
          -         check_query_in   => 'select count(*) from wt_dbout_profiles' ||
          -                             ' where test_run_id = ' || c_test_run_id,
          -         against_value_in => 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Delete Records Sad Path 2';
          -      begin
          -         delete_records(NULL);
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      exception when others then
          -         l_err_stack := dbms_utility.format_error_stack     ||
          -                        dbms_utility.format_error_backtrace ;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in        => 'SQLERRM',
          -         check_this_in => l_err_stack);
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'wt_dbout_profiles Count 2',
          -         check_query_in   => 'select count(*) from wt_dbout_profiles' ||
          -                             ' where test_run_id = ' || c_test_run_id,
          -         against_value_in => 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Delete Records Teardown';
          -      tl_delete_test_runs(c_test_run_id);
          -   end t_delete_records;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          ---==============================================================--
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure WTPLSQL_RUN  --% WTPLSQL SET DBOUT "WT_PROFILER:PACKAGE BODY" %--
          -   is
          -   begin
          -      t_get_error_msg;
          -      t_delete_profiler_recs;
          -      t_find_dbout;
          -      t_load_ignr_aa;
          -      t_insert_dbout_profile;
          -      t_initialize;
          -      t_finalize;
          -      t_trigger_offset;
          -      t_calc_pct_coverage;
          -      t_delete_records;
          -   end WTPLSQL_RUN;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          ---==============================================================--
          -
          -
          -end wt_profiler;
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/package body/WT_PROFILER/headerBg.jpg b/docs/core/DBDocs/package body/WT_PROFILER/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/package body/WT_PROFILER/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_PROFILER/report.css b/docs/core/DBDocs/package body/WT_PROFILER/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/package body/WT_PROFILER/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/package body/WT_PROFILER/report.js b/docs/core/DBDocs/package body/WT_PROFILER/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/package body/WT_PROFILER/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/package body/WT_PROFILER/topDimTabBg.gif b/docs/core/DBDocs/package body/WT_PROFILER/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/package body/WT_PROFILER/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_PROFILER/topDimTabL.gif b/docs/core/DBDocs/package body/WT_PROFILER/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/package body/WT_PROFILER/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_PROFILER/topDimTabR.gif b/docs/core/DBDocs/package body/WT_PROFILER/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/package body/WT_PROFILER/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_PROFILER/topTabBg.gif b/docs/core/DBDocs/package body/WT_PROFILER/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/package body/WT_PROFILER/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_PROFILER/topTabL.gif b/docs/core/DBDocs/package body/WT_PROFILER/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/package body/WT_PROFILER/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_PROFILER/topTabR.gif b/docs/core/DBDocs/package body/WT_PROFILER/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/package body/WT_PROFILER/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_RESULT.html b/docs/core/DBDocs/package body/WT_RESULT.html deleted file mode 100644 index 9358aa6..0000000 --- a/docs/core/DBDocs/package body/WT_RESULT.html +++ /dev/null @@ -1,666 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Doc

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Code

          -
          -
          -
          -
          -
          -
          -
          - -


          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          OWNERWTP
          OBJECT_NAMEWT_RESULT
          SUBOBJECT_NAMEnull
          OBJECT_ID41931
          DATA_OBJECT_IDnull
          OBJECT_TYPEPACKAGE BODY
          CREATED29-JUN-2018 15:09:15
          LAST_DDL_TIME29-JUN-2018 15:21:16
          TIMESTAMP2018-06-29:15:21:16
          STATUSVALID
          TEMPORARYN
          GENERATEDN
          SECONDARYN
          NAMESPACE2
          EDITION_NAMEnull
          -
          -
          -
          -
          - - - - - - - - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          EXECUTEPUBLICNOWTPWT_RESULT
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          -
          -package body wt_result
          -as
          -
          -   TYPE results_nt_type is table of wt_results%ROWTYPE;
          -   g_results_nt      results_nt_type;
          -   g_results_rec     wt_results%ROWTYPE;
          -
          -   $IF $$WTPLSQL_SELFTEST $THEN  ------%WTPLSQL_begin_ignore_lines%------
          -      g_skip_add  BOOLEAN := FALSE;
          -   $END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -----------------------
          ---  Private Procedures
          -----------------------
          -
          -
          ----------------------
          ---  Public Procedures
          ----------------------
          -
          -------------------------------------------------------------
          -procedure initialize
          -      (in_test_run_id   in wt_test_runs.id%TYPE)
          -is
          -   l_results_recNULL  wt_results%ROWTYPE;
          -begin
          -   if in_test_run_id is NULL
          -   then
          -      raise_application_error(-20009, '"in_test_run_id" cannot be NULL');
          -   end if;
          -   g_results_rec := l_results_recNULL;
          -   g_results_rec.test_run_id  := in_test_run_id;
          -   g_results_rec.result_seq   := 0;
          -   g_results_rec.executed_dtm := systimestamp;
          -   g_results_nt := results_nt_type(null);
          -$IF $$WTPLSQL_SELFTEST $THEN  ------%WTPLSQL_begin_ignore_lines%------
          -   g_skip_add := FALSE;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -end initialize;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_initialize
          -   is
          -      l_results_recNULL  wt_results%ROWTYPE;
          -      l_results_recSAVE  wt_results%ROWTYPE;
          -      l_results_recTEST  wt_results%ROWTYPE;
          -      l_results_ntSAVE   results_nt_type;
          -      l_results_ntTEST   results_nt_type;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      l_results_ntSAVE  := g_results_nt;
          -      l_results_recSAVE := g_results_rec;
          -      g_results_rec     := l_results_recNULL;
          -      initialize(-99);
          -      l_results_recTEST := g_results_rec;
          -      g_results_rec     := l_results_recSAVE;
          -      l_results_ntTEST  := g_results_nt;
          -      g_results_nt      := l_results_ntSAVE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Initialize Happy Path';
          -      wt_assert.eq (
          -         msg_in          => 'l_results_recTEST.test_run_id',
          -         check_this_in   => l_results_recTEST.test_run_id,
          -         against_this_in => -99);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_results_recTEST.result_seq',
          -         check_this_in   => l_results_recTEST.result_seq,
          -         against_this_in => 0);
          -      wt_assert.isnotnull (
          -         msg_in          => 'l_results_recTEST.executed_dtm',
          -         check_this_in   => l_results_recTEST.executed_dtm);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'l_results_recTEST.interval_msecs',
          -         check_this_in   => l_results_recTEST.interval_msecs);
          -      wt_assert.isnull (
          -         msg_in          => 'l_results_recTEST.assertion',
          -         check_this_in   => l_results_recTEST.assertion);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'l_results_recTEST.status',
          -         check_this_in   => l_results_recTEST.status);
          -      wt_assert.isnull (
          -         msg_in          => 'l_results_recTEST.details',
          -         check_this_in   => l_results_recTEST.details);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'l_results_recTEST.testcase',
          -         check_this_in   => l_results_recTEST.testcase);
          -      wt_assert.isnull (
          -         msg_in          => 'l_results_recTEST.message',
          -         check_this_in   => l_results_recTEST.message);
          -      wt_assert.eq (
          -         msg_in          => 'l_results_ntTEST.COUNT',
          -         check_this_in   => l_results_ntTEST.COUNT,
          -         against_this_in => 1);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'l_results_ntTEST(1).test_run_id',
          -         check_this_in   => l_results_ntTEST(1).test_run_id);
          -      wt_assert.raises (
          -         msg_in         => 'Raises ORA-20009',
          -         check_call_in  => 'begin wt_result.initialize(NULL); end;',
          -         against_exc_in => 'ORA-20009: "in_test_run_id" cannot be NULL');
          -   end t_initialize;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          --- Because this procedure is called to cleanup after errors,
          ---  it must be able to run multiple times without causing damage.
          -procedure finalize
          -is
          -   PRAGMA AUTONOMOUS_TRANSACTION;
          -   l_results_recNULL   wt_results%ROWTYPE;
          -begin
          -   if g_results_rec.test_run_id IS NULL
          -   then
          -      return;
          -   end if;
          -   -- There is always an extra NULL element in the g_results_nt array.
          -   forall i in 1 .. g_results_nt.COUNT - 1
          -      insert into wt_results values g_results_nt(i);
          -   COMMIT;
          -   g_results_nt := results_nt_type(null);
          -   g_results_rec := l_results_recNULL;
          -   g_results_nt := results_nt_type(null);
          -end finalize;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_finalize
          -   is
          -      --------------------------------------  WTPLSQL Testing --
          -      type num_recs_aa_type is table of number index by varchar2(50);
          -      num_recs_aa   num_recs_aa_type;
          -      l_test_runs_rec      wt_test_runs%ROWTYPE;
          -      l_results_recNULL    wt_results%ROWTYPE;
          -      l_results_recSAVE    wt_results%ROWTYPE;
          -      l_results_recTEST    wt_results%ROWTYPE;
          -      l_results_ntSAVE     results_nt_type;
          -      l_results_ntTEST     results_nt_type;
          -      l_num_recs           number;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := '   ';
          -      l_results_ntSAVE     := g_results_nt;    -- Capture Original Values
          -      l_results_recSAVE    := g_results_rec;   -- Capture Original Values
          -      --------------------------------------  WTPLSQL Testing --
          -      -- Can't Test in this block because g_results_rec has test data
          -      g_results_rec  := l_results_recNULL;
          -      g_results_rec.test_run_id    := -99;
          -      g_results_rec.result_seq     := 1;
          -      g_results_rec.executed_dtm   := systimestamp;
          -      g_results_rec.interval_msecs := 99;
          -      --------------------------------------  WTPLSQL Testing --
          -      g_results_rec.assertion     := 'FINALTEST';
          -      g_results_rec.status        := wt_assert.C_PASS;
          -      g_results_rec.details       := 'This is a WT_RESULT.FINALIZE Test';
          -      g_results_nt := results_nt_type(null);
          -      g_results_nt(1) := g_results_rec;
          -      g_results_nt.extend;  -- Finalize expects that last element to be NULL
          -      --------------------------------------  WTPLSQL Testing --
          -      -- Can't Test in this block because g_results_rec has test data
          -      g_results_rec.test_run_id   := NULL;
          -      select count(*)
          -       into  num_recs_aa('Finalize Before NULL Test Record Count')
          -       from  wt_results
          -       where test_run_id = -99;
          -      finalize;
          -      --------------------------------------  WTPLSQL Testing --
          -      select count(*)
          -       into  num_recs_aa('Finalize After NULL Test Record Count')
          -       from  wt_results
          -       where test_run_id = -99;
          -      rollback;    -- UNDO all database changes
          -      g_results_rec.test_run_id   := -99;
          -      --------------------------------------  WTPLSQL Testing --
          -      -- Can't Test in this block because g_results_rec has test data
          -      l_test_runs_rec.id           := -99;
          -      l_test_runs_rec.start_dtm    := systimestamp;
          -      l_test_runs_rec.runner_name  := 'Finalize Test';
          -      l_test_runs_rec.runner_owner := 'BOGUS';
          -      insert into wt_test_runs values l_test_runs_rec;
          -      commit;      -- Must commit because finalize is AUTONOMOUS TRANSACTION
          -      --------------------------------------  WTPLSQL Testing --
          -      finalize;    -- g_results_nt is still loaded with one element
          -      l_results_ntTEST  := g_results_nt;
          -      l_results_recTEST := g_results_rec;
          -      select count(*)
          -       into  num_recs_aa('Finalize Record Count Test')
          -       from  wt_results
          -       where test_run_id = -99;
          -      delete from wt_results where test_run_id = -99;
          -      delete from wt_test_runs where id = -99;
          -      commit;      -- UNDO all database changes
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Finalize Happy Path';
          -      -- Restore values so we can test
          -      g_results_rec := l_results_recSAVE;
          -      g_results_nt  := l_results_ntSAVE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'Before NULL Test Record Count',
          -         check_this_in   => num_recs_aa('Finalize Before NULL Test Record Count'),
          -         against_this_in => 0);
          -      wt_assert.eq (
          -         msg_in          => 'After NULL Test Record Count',
          -         check_this_in   => num_recs_aa('Finalize After NULL Test Record Count'),
          -         against_this_in => 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in        => 'l_results_recTEST.test_run_id',
          -         check_this_in => l_results_recTEST.test_run_id);
          -      wt_assert.eq (
          -         msg_in          => 'l_results_ntTEST.COUNT',
          -         check_this_in   => l_results_ntTEST.COUNT,
          -         against_this_in => 1);
          -      wt_assert.eq (
          -         msg_in          => 'Record Count Test',
          -         check_this_in   => num_recs_aa('Finalize Record Count Test'),
          -         against_this_in => 1);
          -   end t_finalize;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure save
          -      (in_assertion      in wt_results.assertion%TYPE
          -      ,in_status         in wt_results.status%TYPE
          -      ,in_details        in wt_results.details%TYPE
          -      ,in_testcase       in wt_results.testcase%TYPE
          -      ,in_message        in wt_results.message%TYPE)
          -is
          -   l_current_tstamp  timestamp;
          -begin
          -   if g_results_rec.test_run_id IS NULL
          -   then
          -      wt_text_report.ad_hoc_result
          -         (in_assertion
          -         ,in_status
          -         ,in_details
          -         ,in_testcase
          -         ,in_message);
          -      return;
          -   end if;
          -   -- Set the time and interval
          -   l_current_tstamp := systimestamp;
          -   g_results_rec.interval_msecs := extract(day from (
          -                                  l_current_tstamp - g_results_rec.executed_dtm
          -                                  ) * 86400 * 1000);
          -   g_results_rec.executed_dtm  := l_current_tstamp;
          -   -- Set the IN variables
          -   g_results_rec.assertion     := in_assertion;
          -   g_results_rec.status        := in_status;
          -   g_results_rec.details       := substr(in_details,1,4000);
          -   g_results_rec.testcase      := substr(in_testcase,1,50);
          -   g_results_rec.message       := substr(in_message,1,200);
          -   -- Increment, Extend, and Load
          -   g_results_rec.result_seq    := g_results_rec.result_seq + 1;
          -   g_results_nt(g_results_nt.COUNT) := g_results_rec;
          -   g_results_nt.extend;
          -
          -$IF $$WTPLSQL_SELFTEST $THEN  ------%WTPLSQL_begin_ignore_lines%------
          -   if not g_skip_add then
          -$END
          -   wt_test_run_stat.add_result(g_results_rec);
          -$IF $$WTPLSQL_SELFTEST $THEN
          -   end if;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -end save;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_save_testing
          -   is
          -      --------------------------------------  WTPLSQL Testing --
          -      TYPE l_dbmsout_buff_type is table of varchar2(32767);
          -      l_dbmsout_buff   l_dbmsout_buff_type := l_dbmsout_buff_type(1);
          -      l_test_run_id    number;
          -      l_dbmsout_line   varchar2(32767);
          -      l_dbmsout_stat   number;
          -      l_nt_count       number;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Ad Hoc Save Happy Path Setup';
          -      -- Save/Clear the DBMS_OUPTUT Buffer
          -      loop
          -         DBMS_OUTPUT.GET_LINE (
          -            line   => l_dbmsout_line,
          -            status => l_dbmsout_stat);
          -         exit when l_dbmsout_stat != 0;
          -         l_dbmsout_buff(l_dbmsout_buff.COUNT) := l_dbmsout_line;
          -         l_dbmsout_buff.extend;
          -      end loop;
          -      wt_assert.isnotnull (
          -         msg_in        => 'l_dbmsout_buff.COUNT - 1',
          -         check_this_in => l_dbmsout_buff.COUNT - 1);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Ad Hoc Save Testing Happy Path';
          -      l_test_run_id  := g_results_rec.test_run_id;
          -      g_results_rec.test_run_id := NULL;
          -      g_skip_add := TRUE;
          -      wt_result.save (
          -         in_assertion  => 'SELFTEST1',
          -         in_status     => wt_assert.C_PASS,
          -         in_details    => 't_save_testing Details',
          -         in_testcase   => wt_assert.g_testcase,
          -         in_message    => 't_save_testing Message');
          -      g_skip_add := FALSE;
          -      g_results_rec.test_run_id := l_test_run_id;
          -      --------------------------------------  WTPLSQL Testing --
          -      DBMS_OUTPUT.GET_LINE (
          -         line   => l_dbmsout_line,
          -         status => l_dbmsout_stat);
          -      wt_assert.eq (
          -         msg_in          => 'DBMS_OUTPUT Status',
          -         check_this_in   => l_dbmsout_stat,
          -         against_this_in => 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      if wt_assert.last_pass
          -      then
          -         wt_assert.isnotnull (
          -            msg_in        => 'DBMS_OUTPUT Line',
          -            check_this_in => l_dbmsout_line);
          -         wt_assert.this (
          -            msg_in        => 'Save Testing NULL Test DBMS_OUTPUT 3 Message',
          -            check_this_in => (l_dbmsout_line like '%' || wt_assert.g_testcase ||
          -                             '%t_save_testing %'));
          -      --------------------------------------  WTPLSQL Testing --
          -         if not wt_assert.last_pass
          -         then
          -            -- No match, put the line back into DBMS_OUTPUT buffer and end this.
          -            DBMS_OUTPUT.PUT_LINE(l_dbmsout_line);
          -         end if;
          -      end if;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Ad Hoc Save Happy Path Teardown';
          -      -- Restore the DBMS_OUPTUT Buffer
          -      for i in 1 .. l_dbmsout_buff.COUNT - 1
          -      loop
          -         DBMS_OUTPUT.PUT_LINE(l_dbmsout_buff(i));
          -      end loop;
          -      wt_assert.isnotnull (
          -         msg_in        => 'l_dbmsout_buff.COUNT - 1',
          -         check_this_in =>  l_dbmsout_buff.COUNT - 1);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Save Testing Happy Path';
          -      l_nt_count     := g_results_nt.COUNT;
          -      g_skip_add := TRUE;
          -      wt_result.save (
          -         in_assertion  => 'SELFTEST2',
          -         in_status     => wt_assert.C_PASS,
          -         in_details    => 't_save_testing Testing Details',
          -         in_testcase   => wt_assert.g_testcase,
          -         in_message    => 't_save_testing Testing Message');
          -      g_skip_add := FALSE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'g_results_nt.COUNT',
          -         check_this_in   => g_results_nt.COUNT,
          -         against_this_in => l_nt_count + 1);
          -      if not wt_assert.last_pass
          -      then
          -         return;   -- Something went wrong, end this now.
          -      end if;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'g_results_nt(' || l_nt_count || ').assetion',
          -         check_this_in   => g_results_nt(l_nt_count).assertion,
          -         against_this_in => 'SELFTEST2');
          -      wt_assert.eq (
          -         msg_in          => 'g_results_nt(' || l_nt_count || ').status',
          -         check_this_in   => g_results_nt(l_nt_count).status,
          -         against_this_in => wt_assert.C_PASS);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'g_results_nt(' || l_nt_count || ').details',
          -         check_this_in   => g_results_nt(l_nt_count).details,
          -         against_this_in => 't_save_testing Testing Details');
          -      wt_assert.eq (
          -         msg_in          => 'g_results_nt(' || l_nt_count || ').testcase',
          -         check_this_in   => g_results_nt(l_nt_count).testcase,
          -         against_this_in => wt_assert.g_testcase);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'g_results_nt(' || l_nt_count || ').message',
          -         check_this_in   => g_results_nt(l_nt_count).message,
          -         against_this_in => 't_save_testing Testing Message');
          -      wt_assert.isnotnull (
          -         msg_in          => 'g_results_nt(' || l_nt_count || ').interval_msecs',
          -         check_this_in   => g_results_nt(l_nt_count).interval_msecs);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnotnull (
          -         msg_in          => 'g_results_nt(' || l_nt_count || ').executed_dtm',
          -         check_this_in   => g_results_nt(l_nt_count).executed_dtm);
          -      wt_assert.isnotnull (
          -         msg_in          => 'g_results_nt(' || l_nt_count || ').result_seq',
          -         check_this_in   => g_results_nt(l_nt_count).result_seq);
          -      --  Can't Delete Test Element.  g_results_nt.COUNT is not reduced
          -      --    because nested tables are not dense.
          -      --g_results_nt.delete(l_nt_count + 1);
          -   end t_save_testing;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure delete_records
          -      (in_test_run_id  in number)
          -is
          -begin
          -   delete from wt_results
          -    where test_run_id = in_test_run_id;
          -end delete_records;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_delete_records
          -   is
          -      --------------------------------------  WTPLSQL Testing --
          -      l_test_runs_rec  wt_test_runs%ROWTYPE;
          -      l_results_rec    wt_results%ROWTYPE;
          -      l_num_recs       number;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Delete Records Happy Path';
          -      select count(*) into l_num_recs
          -       from  wt_results
          -       where test_run_id = -99;
          -      wt_assert.isnotnull (
          -         msg_in        => 'Before Insert Count',
          -         check_this_in => l_num_recs);
          -      --------------------------------------  WTPLSQL Testing --
          -      l_test_runs_rec.id           := -99;
          -      l_test_runs_rec.start_dtm    := sysdate;
          -      l_test_runs_rec.runner_name  := 'Delete Records Test';
          -      l_test_runs_rec.runner_owner := 'BOGUS';
          -      insert into wt_test_runs values l_test_runs_rec;
          -      l_results_rec.test_run_id    := -99;
          -      --------------------------------------  WTPLSQL Testing --
          -      l_results_rec.result_seq     := 1;
          -      l_results_rec.executed_dtm   := sysdate;
          -      l_results_rec.interval_msecs := 99;
          -      l_results_rec.assertion      := 'DELRECTEST';
          -      l_results_rec.status         := wt_assert.C_PASS;
          -      l_results_rec.details        := 'This is a WT_RESULT.DELETE_RECORDS Test';
          -      insert into wt_results values l_results_rec;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eqqueryvalue (
          -         msg_in            => 'After Insert Count',
          -         check_query_in    => 'select count(*) from wt_results' ||
          -                              ' where test_run_id = -99',
          -         against_value_in  => l_num_recs + 1);
          -      delete_records(-99);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eqqueryvalue (
          -         msg_in            => 'After Test Count',
          -         check_query_in    => 'select count(*) from wt_results' ||
          -                              ' where test_run_id = -99',
          -         against_value_in  => l_num_recs);
          -      rollback;
          -      wt_assert.eqqueryvalue (
          -         msg_in            => 'After ROLLBACK Count',
          -         check_query_in    => 'select count(*) from wt_results' ||
          -                              ' where test_run_id = -99',
          -         against_value_in  => l_num_recs);
          -   end t_delete_records;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          ---==============================================================--
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure WTPLSQL_RUN  --% WTPLSQL SET DBOUT "WT_RESULT:PACKAGE BODY" %--
          -   is
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      t_initialize;
          -      t_finalize;
          -      t_save_testing;
          -      t_delete_records;
          -   end WTPLSQL_RUN;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          ---==============================================================--
          -
          -
          -end wt_result;
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/package body/WT_RESULT/headerBg.jpg b/docs/core/DBDocs/package body/WT_RESULT/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/package body/WT_RESULT/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_RESULT/report.css b/docs/core/DBDocs/package body/WT_RESULT/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/package body/WT_RESULT/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/package body/WT_RESULT/report.js b/docs/core/DBDocs/package body/WT_RESULT/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/package body/WT_RESULT/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/package body/WT_RESULT/topDimTabBg.gif b/docs/core/DBDocs/package body/WT_RESULT/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/package body/WT_RESULT/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_RESULT/topDimTabL.gif b/docs/core/DBDocs/package body/WT_RESULT/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/package body/WT_RESULT/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_RESULT/topDimTabR.gif b/docs/core/DBDocs/package body/WT_RESULT/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/package body/WT_RESULT/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_RESULT/topTabBg.gif b/docs/core/DBDocs/package body/WT_RESULT/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/package body/WT_RESULT/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_RESULT/topTabL.gif b/docs/core/DBDocs/package body/WT_RESULT/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/package body/WT_RESULT/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_RESULT/topTabR.gif b/docs/core/DBDocs/package body/WT_RESULT/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/package body/WT_RESULT/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT.html b/docs/core/DBDocs/package body/WT_TEST_RUN_STAT.html deleted file mode 100644 index ad770f5..0000000 --- a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT.html +++ /dev/null @@ -1,1150 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Doc

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Code

          -
          -
          -
          -
          -
          -
          -
          - -


          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          OWNERWTP
          OBJECT_NAMEWT_TEST_RUN_STAT
          SUBOBJECT_NAMEnull
          OBJECT_ID41961
          DATA_OBJECT_IDnull
          OBJECT_TYPEPACKAGE BODY
          CREATED29-JUN-2018 15:21:18
          LAST_DDL_TIME29-JUN-2018 15:21:18
          TIMESTAMP2018-06-29:15:21:18
          STATUSVALID
          TEMPORARYN
          GENERATEDN
          SECONDARYN
          NAMESPACE2
          EDITION_NAMEnull
          -
          -
          -
          -
          - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          -
          -package body wt_test_run_stat
          -as
          -
          -   TYPE tc_aa_type is
          -        table of wt_testcase_stats%ROWTYPE
          -        index by varchar2(50);
          -   g_tc_aa  tc_aa_type;
          -   g_rec    wt_test_run_stats%ROWTYPE;
          -
          -
          -----------------------
          ---  Private Procedures
          -----------------------
          -
          -
          ----------------------
          ---  Public Procedures
          ----------------------
          -
          -
          -------------------------------------------------------------
          -procedure initialize
          -is
          -   l_recNULL  wt_test_run_stats%ROWTYPE;
          -begin
          -   g_rec := l_recNULL;
          -   g_tc_aa.delete;
          -end initialize;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_initialize
          -   is
          -      l_tc_aaSAVE  tc_aa_type;
          -      l_recSAVE    wt_test_run_stats%ROWTYPE;
          -      l_tc_aaTEST  tc_aa_type;
          -      l_recTEST    wt_test_run_stats%ROWTYPE;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Initialize Happy Path 1 Setup';
          -      l_tc_aaTEST('TESTCASE1').test_run_id := -2;
          -      l_recTEST.test_run_id := -1;
          -      wt_assert.eq (
          -         msg_in          => 'l_tc_aaTEST(''TESTCASE1'').test_run_id',
          -         check_this_in   =>  l_tc_aaTEST('TESTCASE1').test_run_id,
          -         against_this_in =>  -2 );
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.test_run_id',
          -         check_this_in   =>  l_recTEST.test_run_id,
          -         against_this_in =>  -1 );
          -      --------------------------------------  WTPLSQL Testing --
          -      l_tc_aaSAVE := g_tc_aa;
          -      l_recSAVE   := g_rec;
          -      g_tc_aa     := l_tc_aaTEST;
          -      g_rec       := l_recTEST;
          -      initialize;
          -      l_tc_aaTEST := g_tc_aa;
          -      l_recTEST   := g_rec;
          -      g_tc_aa     := l_tc_aaSAVE;
          -      g_rec       := l_recSAVE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Initialize Happy Path 1';
          -      wt_assert.eq (
          -         msg_in          => 'l_tc_aaTEST.COUNT',
          -         check_this_in   =>  l_tc_aaTEST.COUNT,
          -         against_this_in =>  0 );
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.test_run_id',
          -         check_this_in   =>  l_recTEST.test_run_id );
          -   end t_initialize;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure add_result
          -      (in_results_rec  in wt_results%ROWTYPE)
          -is
          -   tc  varchar2(50);
          -begin
          -   -- If this raises an exception, it must be done before any other values
          -   --   are set because they will not be rolled-back after the "raise".
          -   case in_results_rec.status
          -      when 'PASS' then
          -         g_rec.passes := nvl(g_rec.passes,0) + 1;
          -      when 'FAIL' then
          -         g_rec.failures := nvl(g_rec.failures,0) + 1;
          -      when 'ERR' then
          -         g_rec.errors := nvl(g_rec.errors,0) + 1;
          -      else
          -         raise_application_error(-20010, 'Unknown Result status "' ||
          -                                      in_results_rec.status || '"');
          -   end case;
          -   g_rec.test_run_id := in_results_rec.test_run_id;
          -   g_rec.asserts     := nvl(g_rec.asserts,0) + 1;
          -   g_rec.min_interval_msecs := least(nvl(g_rec.min_interval_msecs,999999999)
          -                                    ,in_results_rec.interval_msecs);
          -   g_rec.max_interval_msecs := greatest(nvl(g_rec.max_interval_msecs,0)
          -                                       ,in_results_rec.interval_msecs);
          -   g_rec.tot_interval_msecs := nvl(g_rec.tot_interval_msecs,0) +
          -                               in_results_rec.interval_msecs;
          -   if in_results_rec.testcase is not null
          -   then
          -      tc := in_results_rec.testcase;
          -      g_tc_aa(tc).testcase    := tc;
          -      g_tc_aa(tc).test_run_id := in_results_rec.test_run_id;
          -      g_tc_aa(tc).asserts     := nvl(g_tc_aa(tc).asserts,0) + 1;
          -      case in_results_rec.status
          -         when 'PASS' then
          -            g_tc_aa(tc).passes := nvl(g_tc_aa(tc).passes,0) + 1;
          -         when 'FAIL' then
          -            g_tc_aa(tc).failures := nvl(g_tc_aa(tc).failures,0) + 1;
          -         when 'ERR' then
          -            g_tc_aa(tc).errors := nvl(g_tc_aa(tc).errors,0) + 1;
          -         -- No need to check "ELSE" because it would have been caught above
          -      end case;
          -      g_tc_aa(tc).min_interval_msecs := least(nvl(g_tc_aa(tc).min_interval_msecs,999999999)
          -                                             ,in_results_rec.interval_msecs);
          -      g_tc_aa(tc).max_interval_msecs := greatest(nvl(g_tc_aa(tc).max_interval_msecs,0)
          -                                                ,in_results_rec.interval_msecs);
          -      g_tc_aa(tc).tot_interval_msecs := nvl(g_tc_aa(tc).tot_interval_msecs,0) +
          -                                        in_results_rec.interval_msecs;
          -   end if;
          -end add_result;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_add_result
          -   is
          -      l_tc_aaSAVE   tc_aa_type;
          -      l_recSAVE     wt_test_run_stats%ROWTYPE;
          -      l_tc_aaTEST   tc_aa_type;
          -      l_recTEST     wt_test_run_stats%ROWTYPE;
          -      l_resultTEST  wt_results%ROWTYPE;
          -      l_sqlerrm     varchar2(4000);
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      -- Overview:
          -      -- 1) Save results in temporary variables
          -      -- 2) Clear ADD_RESULT variables
          -      -- 3) Call ADD_RESULT several times with test data.
          -      -- 4) Capture test results
          -      -- 5) Restore saved results
          -      -- 6) Confirm the test results using WT_ASSERT.
          -      --------------------------------------  WTPLSQL Testing --
          -      l_tc_aaSAVE := g_tc_aa;
          -      l_recSAVE   := g_rec;
          -      g_tc_aa     := l_tc_aaTEST;
          -      g_rec       := l_recTEST;
          -      l_resultTEST.test_run_id    := -10;
          -      l_resultTEST.interval_msecs := 10;
          -      l_resultTEST.status         := 'PASS';
          -      l_resultTEST.testcase       := 'TESTCASE1';
          -      add_result(l_resultTEST);
          -      --------------------------------------  WTPLSQL Testing --
          -      l_resultTEST.interval_msecs := 20;
          -      l_resultTEST.status         := 'FAIL';
          -      l_resultTEST.testcase       := 'TESTCASE1';
          -      add_result(l_resultTEST);
          -      l_resultTEST.interval_msecs := 30;
          -      l_resultTEST.status         := 'ERR';
          -      l_resultTEST.testcase       := 'TESTCASE1';
          -      add_result(l_resultTEST);
          -      --------------------------------------  WTPLSQL Testing --
          -      l_resultTEST.interval_msecs := 40;
          -      l_resultTEST.status         := 'ABC';
          -      l_resultTEST.testcase       := 'TESTCASE1';
          -      begin
          -         add_result(l_resultTEST);
          -         l_sqlerrm := SQLERRM;
          -      exception when others then
          -         l_sqlerrm := SQLERRM;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      l_tc_aaTEST := g_tc_aa;
          -      l_recTEST   := g_rec;
          -      g_tc_aa     := l_tc_aaSAVE;
          -      g_rec       := l_recSAVE;
          -      wt_assert.g_testcase := 'Add Result Testing';
          -      wt_assert.eq (
          -          msg_in          => 'Add Result Sad Path 1',
          -          check_this_in   => 'ORA-20010: Unknown Result status "ABC"',
          -          against_this_in => l_sqlerrm);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.test_run_id',
          -         check_this_in   => l_recTEST.test_run_id,
          -         against_this_in => -10);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.asserts',
          -         check_this_in   => l_recTEST.asserts,
          -         against_this_in => 3);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.passes',
          -         check_this_in   => l_recTEST.passes,
          -         against_this_in => 1);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.failures',
          -         check_this_in   => l_recTEST.failures,
          -         against_this_in => 1);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.errors',
          -         check_this_in   => l_recTEST.errors,
          -         against_this_in => 1);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.min_interval_msecs',
          -         check_this_in   => l_recTEST.min_interval_msecs,
          -         against_this_in => 10);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.max_interval_msecs',
          -         check_this_in   => l_recTEST.max_interval_msecs,
          -         against_this_in => 30);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.tot_interval_msecs',
          -         check_this_in   => l_recTEST.tot_interval_msecs,
          -         against_this_in => 60);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_tc_aaTEST(''TESTCASE1'').test_run_id',
          -         check_this_in   => l_tc_aaTEST('TESTCASE1').test_run_id,
          -         against_this_in => -10);
          -      wt_assert.eq (
          -         msg_in          => 'l_tc_aaTEST(''TESTCASE1'').asserts',
          -         check_this_in   => l_tc_aaTEST('TESTCASE1').asserts,
          -         against_this_in => 3);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_tc_aaTEST(''TESTCASE1'').passes',
          -         check_this_in   => l_tc_aaTEST('TESTCASE1').passes,
          -         against_this_in => 1);
          -      wt_assert.eq (
          -         msg_in          => 'l_tc_aaTEST(''TESTCASE1'').failures',
          -         check_this_in   => l_tc_aaTEST('TESTCASE1').failures,
          -         against_this_in => 1);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_tc_aaTEST(''TESTCASE1'').errors',
          -         check_this_in   => l_tc_aaTEST('TESTCASE1').errors,
          -         against_this_in => 1);
          -      wt_assert.eq (
          -         msg_in          => 'l_tc_aaTEST(''TESTCASE1'').min_interval_msecs',
          -         check_this_in   => l_tc_aaTEST('TESTCASE1').min_interval_msecs,
          -         against_this_in => 10);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_tc_aaTEST(''TESTCASE1'').max_interval_msecs',
          -         check_this_in   => l_tc_aaTEST('TESTCASE1').max_interval_msecs,
          -         against_this_in => 30);
          -      wt_assert.eq (
          -         msg_in          => 'l_tc_aaTEST(''TESTCASE1'').tot_interval_msecs',
          -         check_this_in   => l_tc_aaTEST('TESTCASE1').tot_interval_msecs,
          -         against_this_in => 60);
          -   end t_add_result;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure add_profile
          -      (in_dbout_profiles_rec  in wt_dbout_profiles%ROWTYPE)
          -is
          -begin
          -   -- If this raises an exception, it must be done before any other values
          -   --   are set because they will not be rolled-back after the "raise".
          -   case in_dbout_profiles_rec.status
          -      when 'EXEC' then
          -         g_rec.executed_lines := nvl(g_rec.executed_lines,0) + 1;
          -         -- Only count the executed time.
          -         g_rec.min_executed_usecs := least(nvl(g_rec.min_executed_usecs,999999999)
          -                                          ,in_dbout_profiles_rec.min_usecs);
          -         g_rec.max_executed_usecs := greatest(nvl(g_rec.max_executed_usecs,0)
          -                                             ,in_dbout_profiles_rec.max_usecs);
          -         g_rec.tot_executed_usecs := nvl(g_rec.tot_executed_usecs,0) +
          -                                     ( in_dbout_profiles_rec.total_usecs /
          -                                       in_dbout_profiles_rec.total_occur  );
          -      when 'IGNR' then
          -         g_rec.ignored_lines := nvl(g_rec.ignored_lines,0) + 1;
          -      when 'EXCL' then
          -         g_rec.excluded_lines := nvl(g_rec.excluded_lines,0) + 1;
          -      when 'NOTX' then
          -         g_rec.notexec_lines := nvl(g_rec.notexec_lines,0) + 1;
          -      when 'UNKN' then
          -         g_rec.unknown_lines := nvl(g_rec.unknown_lines,0) + 1;
          -      else
          -         raise_application_error(-20011, 'Unknown Profile status "' ||
          -                                       in_dbout_profiles_rec.status || '"');
          -   end case;
          -   g_rec.test_run_id    := in_dbout_profiles_rec.test_run_id;
          -   g_rec.profiled_lines := nvl(g_rec.profiled_lines,0) + 1;
          -end add_profile;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_add_profile
          -   is
          -      l_recSAVE      wt_test_run_stats%ROWTYPE;
          -      l_recTEST      wt_test_run_stats%ROWTYPE;
          -      l_profileTEST  wt_dbout_profiles%ROWTYPE;
          -      l_sqlerrm      varchar2(4000);
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      -- Overview:
          -      -- 1) Save results in temporary variables
          -      -- 2) Clear ADD_PROFILE variables
          -      -- 3) Call ADD_PROFILE several times with test data.
          -      -- 4) Capture test results
          -      -- 5) Restore saved results
          -      -- 6) Confirm the test results using WT_ASSERT.
          -      --------------------------------------  WTPLSQL Testing --
          -      l_recSAVE   := g_rec;
          -      g_rec       := l_recTEST;
          -      l_profileTEST.test_run_id := -20;
          -      l_profileTEST.min_usecs   := 10;
          -      l_profileTEST.max_usecs   := 20;
          -      l_profileTEST.total_usecs := 30;
          -      l_profileTEST.total_occur := 1;
          -      l_profileTEST.status := 'EXEC';
          -      add_profile(l_profileTEST);
          -      l_profileTEST.status := 'EXEC';
          -      add_profile(l_profileTEST);
          -      --------------------------------------  WTPLSQL Testing --
          -      l_profileTEST.status := 'EXEC';
          -      add_profile(l_profileTEST);
          -      l_profileTEST.status := 'EXEC';
          -      add_profile(l_profileTEST);
          -      l_profileTEST.status := 'EXEC';
          -      add_profile(l_profileTEST);
          -      l_profileTEST.status := 'IGNR';
          -      add_profile(l_profileTEST);
          -      l_profileTEST.status := 'IGNR';
          -      add_profile(l_profileTEST);
          -      --------------------------------------  WTPLSQL Testing --
          -      l_profileTEST.status := 'IGNR';
          -      add_profile(l_profileTEST);
          -      l_profileTEST.status := 'IGNR';
          -      add_profile(l_profileTEST);
          -      l_profileTEST.status := 'NOTX';
          -      add_profile(l_profileTEST);
          -      l_profileTEST.status := 'NOTX';
          -      add_profile(l_profileTEST);
          -      l_profileTEST.status := 'NOTX';
          -      add_profile(l_profileTEST);
          -      --------------------------------------  WTPLSQL Testing --
          -      l_profileTEST.status := 'EXCL';
          -      add_profile(l_profileTEST);
          -      l_profileTEST.status := 'EXCL';
          -      add_profile(l_profileTEST);
          -      l_profileTEST.status := 'UNKN';
          -      add_profile(l_profileTEST);
          -      --------------------------------------  WTPLSQL Testing --
          -      l_profileTEST.status := 'ABC';
          -      begin
          -         add_profile(l_profileTEST);
          -         l_sqlerrm := SQLERRM;
          -      exception when others then
          -         l_sqlerrm := SQLERRM;
          -      end;
          -      l_recTEST := g_rec;
          -      g_rec     := l_recSAVE;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Add Profile Testing';
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.test_run_id',
          -         check_this_in   => l_recTEST.test_run_id,
          -         against_this_in => -20);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.profiled_lines',
          -         check_this_in   => l_recTEST.profiled_lines,
          -         against_this_in => 15);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.min_executed_usecs',
          -         check_this_in   => l_recTEST.min_executed_usecs,
          -         against_this_in => 10);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.max_executed_usecs',
          -         check_this_in   => l_recTEST.max_executed_usecs,
          -         against_this_in => 20);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.tot_executed_usecs',
          -         check_this_in   => l_recTEST.tot_executed_usecs,
          -         against_this_in => 150);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.executed_lines',
          -         check_this_in   => l_recTEST.executed_lines,
          -         against_this_in => 5);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.ignored_lines',
          -         check_this_in   => l_recTEST.ignored_lines,
          -         against_this_in => 4);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.notexec_lines',
          -         check_this_in   => l_recTEST.notexec_lines,
          -         against_this_in => 3);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.excluded_lines',
          -         check_this_in   => l_recTEST.excluded_lines,
          -         against_this_in => 2);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.unknown_lines',
          -         check_this_in   => l_recTEST.unknown_lines,
          -         against_this_in => 1);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -          msg_in          => 'Add Result Sad Path 1',
          -          check_this_in   => 'ORA-20011: Unknown Profile status "ABC"',
          -          against_this_in => l_sqlerrm);
          -   end t_add_profile;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure finalize
          -is
          -   PRAGMA AUTONOMOUS_TRANSACTION;
          -   l_executable_lines   number;
          -   tc                   varchar2(50);
          -begin
          -   if g_rec.test_run_id is null
          -   then
          -      initialize;
          -      return;
          -   end if;
          -   g_rec.testcases := g_tc_aa.COUNT;
          -   g_rec.asserts   := nvl(g_rec.asserts ,0);
          -   g_rec.passes    := nvl(g_rec.passes  ,0);
          -   g_rec.failures  := nvl(g_rec.failures,0);
          -   g_rec.errors    := nvl(g_rec.errors  ,0);
          -   if g_rec.asserts != 0
          -   then
          -      g_rec.test_yield := round(g_rec.passes/g_rec.asserts, 3);
          -      g_rec.avg_interval_msecs := round(g_rec.tot_interval_msecs/g_rec.asserts, 3);
          -   end if;
          -   if g_rec.profiled_lines is not null
          -   then
          -      g_rec.executed_lines  := nvl(g_rec.executed_lines ,0);
          -      g_rec.ignored_lines   := nvl(g_rec.ignored_lines,0);
          -      g_rec.excluded_lines  := nvl(g_rec.excluded_lines ,0);
          -      g_rec.notexec_lines   := nvl(g_rec.notexec_lines  ,0);
          -      g_rec.unknown_lines   := nvl(g_rec.unknown_lines  ,0);
          -      l_executable_lines    := g_rec.executed_lines + g_rec.notexec_lines;
          -      if l_executable_lines != 0
          -      then
          -         g_rec.code_coverage := round(g_rec.executed_lines/l_executable_lines, 3);
          -         g_rec.avg_executed_usecs := round(g_rec.tot_executed_usecs/l_executable_lines, 3);
          -      end if;
          -   end if;
          -   insert into wt_test_run_stats values g_rec;
          -   if g_rec.testcases > 0
          -   then
          -      tc := g_tc_aa.FIRST;
          -      loop
          -         g_tc_aa(tc).asserts  := nvl(g_tc_aa(tc).asserts ,0);
          -         g_tc_aa(tc).passes   := nvl(g_tc_aa(tc).passes  ,0);
          -         g_tc_aa(tc).failures := nvl(g_tc_aa(tc).failures,0);
          -         g_tc_aa(tc).errors   := nvl(g_tc_aa(tc).errors  ,0);
          -         if g_rec.asserts != 0
          -         then
          -            g_tc_aa(tc).test_yield := round(g_tc_aa(tc).passes /
          -                                            g_tc_aa(tc).asserts, 3);
          -            g_tc_aa(tc).avg_interval_msecs := round(g_tc_aa(tc).tot_interval_msecs /
          -                                                   g_tc_aa(tc).asserts, 3);
          -         end if;
          -         insert into wt_testcase_stats values g_tc_aa(tc);
          -         exit when tc = g_tc_aa.LAST;
          -         tc := g_tc_aa.NEXT(tc);
          -      end loop;
          -   end if;
          -   COMMIT;
          -   initialize;
          -end finalize;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_finalize
          -   is
          -      l_tc_aaSAVE    tc_aa_type;
          -      l_recSAVE      wt_test_run_stats%ROWTYPE;
          -      l_tc_aaTEST    tc_aa_type;
          -      l_recTEST      wt_test_run_stats%ROWTYPE;
          -      l_recNULL      wt_test_run_stats%ROWTYPE;
          -      l_tstat_rec    wt_testcase_stats%ROWTYPE;
          -      l_test_run_id  number       := -102;
          -      l_tc           varchar2(50) := 'TC2';
          -      l_sql_txt      varchar2(4000);
          -      l_sqlerrm      varchar2(4000);
          -      --------------------------------------  WTPLSQL Testing --
          -      procedure run_finalize (in_msg_txt in varchar2) is begin
          -         l_tc_aaSAVE := g_tc_aa;
          -         l_recSAVE   := g_rec;
          -         g_tc_aa     := l_tc_aaTEST;
          -         g_rec       := l_recTEST;
          -         begin
          -            finalize;
          -            l_sqlerrm := SQLERRM;
          -         exception when others then
          -            l_sqlerrm := SQLERRM;
          -         end;
          -      --------------------------------------  WTPLSQL Testing --
          -         l_tc_aaTEST := g_tc_aa;
          -         l_recTEST   := g_rec;
          -         g_tc_aa     := l_tc_aaSAVE;
          -         g_rec       := l_recSAVE;
          -         wt_assert.eq (
          -            msg_in          => in_msg_txt,
          -            check_this_in   => l_sqlerrm,
          -            against_this_in => 'ORA-0000: normal, successful completion');
          -      end run_finalize;
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'FINALIZE Happy Path Setup';
          -      l_sql_txt := 'insert into WT_TEST_RUNS' ||
          -                   ' (id, start_dtm, runner_owner, runner_name)' ||
          -         ' values (' || l_test_run_id || ', sysdate, USER, ''TESTRUNNER3'')';
          -      wt_assert.raises (
          -         msg_in         => 'Insert WT_TEST_RUNS Record',
          -         check_call_in  => l_sql_txt,
          -         against_exc_in => '');
          -      commit;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase  := 'FINALIZE Happy Path 1';
          -      l_tc_aaTEST.delete;
          -      l_recTEST := l_recNULL;
          -      l_recTEST.test_run_id := l_test_run_id;
          -      run_finalize('Run Finalize for Happy Path 1');  -- AUTONOMOUS COMMIT
          -      --------------------------------------  WTPLSQL Testing --
          -      begin
          -         select * into l_recTEST
          -          from  WT_TEST_RUN_STATS
          -          where test_run_id = l_test_run_id;
          -         l_sqlerrm := SQLERRM;
          -      exception when others then
          -         l_sqlerrm := SQLERRM;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'Retieve WT_TEST_RUN_STATS record',
          -         check_this_in   => l_sqlerrm,
          -         against_this_in => 'ORA-0000: normal, successful completion');
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.test_run_id',
          -         check_this_in   => l_recTEST.test_run_id,
          -         against_this_in => l_test_run_id);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.test_yield',
          -         check_this_in   => l_recTEST.test_yield);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.asserts',
          -         check_this_in   => l_recTEST.asserts,
          -         against_this_in => 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.passes',
          -         check_this_in   => l_recTEST.passes,
          -         against_this_in => 0);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.failures',
          -         check_this_in   => l_recTEST.failures,
          -         against_this_in => 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.errors',
          -         check_this_in   => l_recTEST.errors,
          -         against_this_in => 0);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.testcases',
          -         check_this_in   => l_recTEST.testcases,
          -         against_this_in => 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.min_interval_msecs',
          -         check_this_in   => l_recTEST.min_interval_msecs);
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.avg_interval_msecs',
          -         check_this_in   => l_recTEST.avg_interval_msecs);
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.max_interval_msecs',
          -         check_this_in   => l_recTEST.max_interval_msecs);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.tot_interval_msecs',
          -         check_this_in   => l_recTEST.tot_interval_msecs);
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.code_coverage',
          -         check_this_in   => l_recTEST.code_coverage);
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.profiled_lines',
          -         check_this_in   => l_recTEST.profiled_lines);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.executed_lines',
          -         check_this_in   => l_recTEST.executed_lines);
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.ignored_lines',
          -         check_this_in   => l_recTEST.ignored_lines);
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.excluded_lines',
          -         check_this_in   => l_recTEST.excluded_lines);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.notexec_lines',
          -         check_this_in   => l_recTEST.notexec_lines);
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.unknown_lines',
          -         check_this_in   => l_recTEST.unknown_lines);
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.avg_executed_usecs',
          -         check_this_in   => l_recTEST.avg_executed_usecs);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'There should be no WT_TESTCASE_STATS records',
          -         check_query_in   => 'select count(*) from WT_TESTCASE_STATS' ||
          -                             ' where test_run_id = ' || l_test_run_id,
          -         against_value_in => 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.raises (
          -         msg_in         => 'Delete WT_TEST_RUN_STATS Record',
          -         check_call_in  => 'delete from WT_TEST_RUN_STATS where test_run_id = ' ||
          -                                                              l_test_run_id,
          -         against_exc_in => '');
          -      commit;
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'There should be no WT_TEST_RUN_STATS records',
          -         check_query_in   => 'select count(*) from WT_TEST_RUN_STATS' ||
          -                             ' where test_run_id = ' || l_test_run_id,
          -         against_value_in => 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'FINALIZE Happy Path 2';
          -      l_tc_aaTEST.delete;
          -      l_tc_aaTEST(l_tc||'a').test_run_id        := l_test_run_id;
          -      l_tc_aaTEST(l_tc||'a').testcase           := l_tc||'a';
          -      l_tc_aaTEST(l_tc||'a').asserts            := 3;
          -      l_tc_aaTEST(l_tc||'a').passes             := 2;
          -      l_tc_aaTEST(l_tc||'a').failures           := 1;
          -      --l_tc_aaTEST(l_tc||'a').errors             := null;
          -      l_tc_aaTEST(l_tc||'a').tot_interval_msecs := 300;
          -      --------------------------------------  WTPLSQL Testing --
          -      l_tc_aaTEST(l_tc||'b').test_run_id        := l_test_run_id;
          -      l_tc_aaTEST(l_tc||'b').testcase           := l_tc||'b';
          -      l_tc_aaTEST(l_tc||'b').asserts            := 3;
          -      l_tc_aaTEST(l_tc||'b').passes             := 2;
          -      l_tc_aaTEST(l_tc||'b').failures           := 1;
          -      --l_tc_aaTEST(l_tc||'b').errors             := null;
          -      l_tc_aaTEST(l_tc||'b').tot_interval_msecs := 300;
          -      --------------------------------------  WTPLSQL Testing --
          -      l_recTEST := l_recNULL;
          -      l_recTEST.test_run_id         := l_test_run_id;
          -      l_recTEST.asserts             := 6;
          -      l_recTEST.passes              := 4;
          -      l_recTEST.failures            := 2;
          -      --l_recTEST.errors              := null;
          -      l_recTEST.tot_interval_msecs  := 600;
          -      --------------------------------------  WTPLSQL Testing --
          -      l_recTEST.profiled_lines      := 20;
          -      l_recTEST.executed_lines      := 8;
          -      l_recTEST.ignored_lines       := 6;
          -      l_recTEST.excluded_lines      := 4;
          -      l_recTEST.notexec_lines       := 2;
          -      --l_recTEST.unknown_lines       := null;
          -      l_recTEST.tot_executed_usecs  := 2000;
          -      run_finalize('Run Finalize for Happy Path 2');  -- AUTONOMOUS COMMIT
          -      --------------------------------------  WTPLSQL Testing --
          -      begin
          -         select * into l_tstat_rec
          -          from  WT_TESTCASE_STATS
          -          where test_run_id = l_test_run_id
          -           and  testcase    = l_tc||'a';
          -         l_sqlerrm := SQLERRM;
          -      exception when others then
          -         l_sqlerrm := SQLERRM;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'Retieve WT_TESTCASE_STATS record',
          -         check_this_in   => l_sqlerrm,
          -         against_this_in => 'ORA-0000: normal, successful completion');
          -      wt_assert.eq (
          -         msg_in          => 'l_tstat_rec.test_run_id',
          -         check_this_in   => l_tstat_rec.test_run_id,
          -         against_this_in => l_test_run_id);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_tstat_rec.testcase',
          -         check_this_in   => l_tstat_rec.testcase,
          -         against_this_in => l_tc||'a');
          -      wt_assert.eq (
          -         msg_in          => 'l_tstat_rec.asserts',
          -         check_this_in   => l_tstat_rec.asserts,
          -         against_this_in => 3);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_tstat_rec.passes',
          -         check_this_in   => l_tstat_rec.passes,
          -         against_this_in => 2);
          -      wt_assert.eq (
          -         msg_in          => 'l_tstat_rec.failures',
          -         check_this_in   => l_tstat_rec.failures,
          -         against_this_in => 1);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_tstat_rec.errors',
          -         check_this_in   => l_tstat_rec.errors,
          -         against_this_in => 0);
          -      wt_assert.eq (
          -         msg_in          => 'l_tstat_rec.test_yield',
          -         check_this_in   => l_tstat_rec.test_yield,
          -         against_this_in => 0.667);
          -      wt_assert.eq (
          -         msg_in          => 'l_tstat_rec.avg_interval_msecs',
          -         check_this_in   => l_tstat_rec.avg_interval_msecs,
          -         against_this_in => 100);
          -      --------------------------------------  WTPLSQL Testing --
          -      begin
          -         select * into l_tstat_rec
          -          from  WT_TESTCASE_STATS
          -          where test_run_id = l_test_run_id
          -           and  testcase    = l_tc||'b';
          -         l_sqlerrm := SQLERRM;
          -      exception when others then
          -         l_sqlerrm := SQLERRM;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'Retieve WT_TESTCASE_STATS record',
          -         check_this_in   => l_sqlerrm,
          -         against_this_in => 'ORA-0000: normal, successful completion');
          -      wt_assert.eq (
          -         msg_in          => 'l_tstat_rec.test_run_id',
          -         check_this_in   => l_tstat_rec.test_run_id,
          -         against_this_in => l_test_run_id);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_tstat_rec.testcase',
          -         check_this_in   => l_tstat_rec.testcase,
          -         against_this_in => l_tc||'b');
          -      wt_assert.eq (
          -         msg_in          => 'l_tstat_rec.asserts',
          -         check_this_in   => l_tstat_rec.asserts,
          -         against_this_in => 3);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_tstat_rec.passes',
          -         check_this_in   => l_tstat_rec.passes,
          -         against_this_in => 2);
          -      wt_assert.eq (
          -         msg_in          => 'l_tstat_rec.failures',
          -         check_this_in   => l_tstat_rec.failures,
          -         against_this_in => 1);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_tstat_rec.errors',
          -         check_this_in   => l_tstat_rec.errors,
          -         against_this_in => 0);
          -      wt_assert.eq (
          -         msg_in          => 'l_tstat_rec.test_yield',
          -         check_this_in   => l_tstat_rec.test_yield,
          -         against_this_in => 0.667);
          -      wt_assert.eq (
          -         msg_in          => 'l_tstat_rec.avg_interval_msecs',
          -         check_this_in   => l_tstat_rec.avg_interval_msecs,
          -         against_this_in => 100);
          -      --------------------------------------  WTPLSQL Testing --
          -      begin
          -         select * into l_recTEST
          -          from  WT_TEST_RUN_STATS
          -          where test_run_id = l_test_run_id;
          -         l_sqlerrm := SQLERRM;
          -      exception when others then
          -         l_sqlerrm := SQLERRM;
          -      end;
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'Retieve WT_TEST_RUN_STATS record',
          -         check_this_in   => l_sqlerrm,
          -         against_this_in => 'ORA-0000: normal, successful completion');
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.test_run_id',
          -         check_this_in   => l_recTEST.test_run_id,
          -         against_this_in => l_test_run_id);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.test_yield',
          -         check_this_in   => l_recTEST.test_yield,
          -         against_this_in => 0.667);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.asserts',
          -         check_this_in   => l_recTEST.asserts,
          -         against_this_in => 6);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.passes',
          -         check_this_in   => l_recTEST.passes,
          -         against_this_in => 4);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.failures',
          -         check_this_in   => l_recTEST.failures,
          -         against_this_in => 2);
          -       --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.errors',
          -         check_this_in   => l_recTEST.errors,
          -         against_this_in => 0);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.testcases',
          -         check_this_in   => l_recTEST.testcases,
          -         against_this_in => 2);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.avg_interval_msecs',
          -         check_this_in   => l_recTEST.avg_interval_msecs,
          -         against_this_in => 100);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.code_coverage',
          -         check_this_in   => l_recTEST.code_coverage,
          -         against_this_in => 0.8);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.profiled_lines',
          -         check_this_in   => l_recTEST.profiled_lines,
          -         against_this_in => 20);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.executed_lines',
          -         check_this_in   => l_recTEST.executed_lines,
          -         against_this_in => 8);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.ignored_lines',
          -         check_this_in   => l_recTEST.ignored_lines,
          -         against_this_in => 6);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.excluded_lines',
          -         check_this_in   => l_recTEST.excluded_lines,
          -         against_this_in => 4);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.notexec_lines',
          -         check_this_in   => l_recTEST.notexec_lines,
          -         against_this_in => 2);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.unknown_lines',
          -         check_this_in   => l_recTEST.unknown_lines,
          -         against_this_in => 0);
          -      wt_assert.eq (
          -         msg_in          => 'l_recTEST.avg_executed_usecs',
          -         check_this_in   => l_recTEST.avg_executed_usecs,
          -         against_this_in => 200);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.raises (
          -         msg_in         => 'Delete WT_TESTCASE_STATS Record',
          -         check_call_in  => 'delete from WT_TESTCASE_STATS where test_run_id = ' ||
          -                                                              l_test_run_id,
          -         against_exc_in => '');
          -      commit;
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'There should be no WT_TESTCASE_STATS records',
          -         check_query_in   => 'select count(*) from WT_TESTCASE_STATS' ||
          -                             ' where test_run_id = ' || l_test_run_id,
          -         against_value_in => 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.raises (
          -         msg_in         => 'Delete WT_TEST_RUN_STATS Record',
          -         check_call_in  => 'delete from WT_TEST_RUN_STATS where test_run_id = ' ||
          -                                                              l_test_run_id,
          -         against_exc_in => '');
          -      commit;
          -      wt_assert.eqqueryvalue (
          -         msg_in           => 'There should be no WT_TEST_RUN_STATS records',
          -         check_query_in   => 'select count(*) from WT_TEST_RUN_STATS' ||
          -                             ' where test_run_id = ' || l_test_run_id,
          -         against_value_in => 0);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase  := 'FINALIZE Sad Path 1';
          -      l_tc_aaTEST.delete;
          -      l_recTEST := l_recNULL;
          -      l_recTEST.asserts := 2;
          -      run_finalize('Run Finalize for Sad Path 1');  -- AUTONOMOUS COMMIT
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.test_run_id',
          -         check_this_in   => l_recTEST.test_run_id);
          -      wt_assert.isnull (
          -         msg_in          => 'l_recTEST.asserts',
          -         check_this_in   => l_recTEST.asserts);
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'FINALIZE Happy Path Teardown';
          -      wt_assert.raises (
          -         msg_in         => 'Delete WT_TEST_RUNS Record',
          -         check_call_in  => 'delete from WT_TEST_RUNS where id = ' ||
          -                                                l_test_run_id,
          -         against_exc_in => '');
          -      commit;
          -   end t_finalize;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          -------------------------------------------------------------
          -procedure delete_records
          -      (in_test_run_id  in number)
          -is
          -begin
          -   delete from wt_testcase_stats
          -    where test_run_id = in_test_run_id;
          -   delete from wt_test_run_stats
          -    where test_run_id = in_test_run_id;
          -end delete_records;
          -
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure t_delete_records
          -   is
          -      l_test_run_id  number := -100;
          -      l_sql_txt      varchar2(4000);
          -   begin
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Delete Records Happy Path Setup';
          -      l_sql_txt := 'insert into WT_TEST_RUNS' ||
          -                   ' (id, start_dtm, runner_owner, runner_name)' ||
          -         ' values (' || l_test_run_id || ', sysdate, USER, ''TESTRUNNER2'')';
          -      wt_assert.raises (
          -         msg_in         => 'Insert WT_TEST_RUNS Record',
          -         check_call_in  => l_sql_txt,
          -         against_exc_in => '');
          -      --------------------------------------  WTPLSQL Testing --
          -      l_sql_txt := 'insert into WT_TEST_RUN_STATS (test_run_id) values (' ||
          -                                                 l_test_run_id || ')';
          -      wt_assert.raises (
          -         msg_in         => 'Insert WT_TEST_RUN_STATS Record',
          -         check_call_in  => l_sql_txt,
          -         against_exc_in => '');
          -      l_sql_txt := 'insert into WT_TESTCASE_STATS (test_run_id, testcase)' ||
          -                   ' values (' || l_test_run_id || ', ''TESTCASE2'')';
          -      wt_assert.raises (
          -         msg_in         => 'Insert WT_TESTCASE_STATS Record',
          -         check_call_in  => l_sql_txt,
          -         against_exc_in => '');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Delete Records Happy Path and Teardown';
          -      wt_assert.raises (
          -         msg_in         => 'Delete Records with NULL ID',
          -         check_call_in  => 'begin wt_test_run_stat.delete_records(' ||
          -                                       l_test_run_id || '); end;',
          -         against_exc_in => '');
          -      wt_assert.raises (
          -         msg_in         => 'Delete WT_TEST_RUNS Record',
          -         check_call_in  => 'delete from WT_TEST_RUNS where id = ' || l_test_run_id,
          -         against_exc_in => '');
          -      --------------------------------------  WTPLSQL Testing --
          -      wt_assert.g_testcase := 'Delete Records Test Sad Paths';
          -      wt_assert.raises (
          -         msg_in         => 'Delete Records with NULL ID',
          -         check_call_in  => 'begin wt_test_run_stat.delete_records(null); end;',
          -         against_exc_in => '');
          -      wt_assert.raises (
          -         msg_in         => 'Delete Records with Invalid ID',
          -         check_call_in  => 'begin wt_test_run_stat.delete_records(-0.01); end;',
          -         against_exc_in => '');
          -   end t_delete_records;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          -
          -
          ---==============================================================--
          -$IF $$WTPLSQL_SELFTEST  ------%WTPLSQL_begin_ignore_lines%------
          -$THEN
          -   procedure WTPLSQL_RUN  --% WTPLSQL SET DBOUT "WT_TEST_RUN_STAT:PACKAGE BODY" %--
          -   is
          -   begin
          -      t_initialize;
          -      t_add_result;
          -      t_add_profile;
          -      t_finalize;
          -      t_delete_records;
          -   end WTPLSQL_RUN;
          -$END  ----------------%WTPLSQL_end_ignore_lines%----------------
          ---==============================================================--
          -
          -
          -end wt_test_run_stat;
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/headerBg.jpg b/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/report.css b/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/report.js b/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/topDimTabBg.gif b/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/topDimTabL.gif b/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/topDimTabR.gif b/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/topTabBg.gif b/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/topTabL.gif b/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/topTabR.gif b/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/package body/WT_TEST_RUN_STAT/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_TEXT_REPORT.html b/docs/core/DBDocs/package body/WT_TEXT_REPORT.html deleted file mode 100644 index 820be42..0000000 --- a/docs/core/DBDocs/package body/WT_TEXT_REPORT.html +++ /dev/null @@ -1,527 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Doc

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Code

          -
          -
          -
          -
          -
          -
          -
          - -


          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          OWNERWTP
          OBJECT_NAMEWT_TEXT_REPORT
          SUBOBJECT_NAMEnull
          OBJECT_ID41934
          DATA_OBJECT_IDnull
          OBJECT_TYPEPACKAGE BODY
          CREATED29-JUN-2018 15:09:17
          LAST_DDL_TIME29-JUN-2018 15:21:18
          TIMESTAMP2018-06-29:15:21:18
          STATUSVALID
          TEMPORARYN
          GENERATEDN
          SECONDARYN
          NAMESPACE2
          EDITION_NAMEnull
          -
          -
          -
          -
          - - - - - - - - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          EXECUTEPUBLICNOWTPWT_TEXT_REPORT
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          -
          -package body wt_text_report
          -as
          -
          -   g_test_runs_rec       wt_test_runs%ROWTYPE;
          -   g_test_run_stats_rec  wt_test_run_stats%ROWTYPE;
          -
          -
          -----------------------
          ---  Private Procedures
          -----------------------
          -
          -------------------------------------------------------------
          -procedure p
          -      (in_text  in  varchar2)
          -is
          -begin
          -   dbms_output.put_line(in_text);
          -end p;
          -
          -------------------------------------------------------------
          -procedure result_summary
          -is
          -begin
          -   p('       Total Test Cases: ' || to_char(nvl(g_test_run_stats_rec.testcases         ,0),'9999999') ||
          -     '       Total Assertions: ' || to_char(nvl(g_test_run_stats_rec.asserts           ,0),'9999999') );
          -   p('  Minimum Interval msec: ' || to_char(nvl(g_test_run_stats_rec.min_interval_msecs,0),'9999999') ||
          -     '      Failed Assertions: ' || to_char(nvl(g_test_run_stats_rec.failures          ,0),'9999999') );
          -   p('  Average Interval msec: ' || to_char(nvl(g_test_run_stats_rec.avg_interval_msecs,0),'9999999') ||
          -     '       Error Assertions: ' || to_char(nvl(g_test_run_stats_rec.errors            ,0),'9999999') );
          -   p('  Maximum Interval msec: ' || to_char(nvl(g_test_run_stats_rec.max_interval_msecs,0),'9999999') ||
          -     '             Test Yield: ' || to_char(    g_test_run_stats_rec.test_yield * 100     ,'9990.99') ||
          -                                                                                                  '%' );
          -   p('   Total Run Time (sec): ' || to_char(extract(day from (g_test_runs_rec.end_dtm -
          -                                                g_test_runs_rec.start_dtm)*86400*100)/100 ,'99990.9') );
          -end result_summary;
          -
          -------------------------------------------------------------
          -procedure profile_summary
          -is
          -begin
          -   p('          Ignored Lines: ' || to_char(nvl(g_test_run_stats_rec.ignored_lines     ,0),'9999999') ||
          -     '   Total Profiled Lines: ' || to_char(nvl(g_test_run_stats_rec.profiled_lines    ,0),'9999999') );
          -   p('         Excluded Lines: ' || to_char(nvl(g_test_run_stats_rec.excluded_lines    ,0),'9999999') ||
          -     '   Total Executed Lines: ' || to_char(nvl(g_test_run_stats_rec.executed_lines    ,0),'9999999') );
          -   p('  Minimum LineExec usec: ' || to_char(nvl(g_test_run_stats_rec.min_executed_usecs,0),'9999999') ||
          -     '     Not Executed Lines: ' || to_char(nvl(g_test_run_stats_rec.notexec_lines     ,0),'9999999') );
          -   p('  Average LineExec usec: ' || to_char(nvl(g_test_run_stats_rec.avg_executed_usecs,0),'9999999') ||
          -     '          Unknown Lines: ' || to_char(nvl(g_test_run_stats_rec.unknown_lines     ,0),'9999999') );
          -   p('  Maximum LineExec usec: ' || to_char(nvl(g_test_run_stats_rec.max_executed_usecs,0),'9999999') ||
          -     '          Code Coverage: ' || to_char(    g_test_run_stats_rec.code_coverage * 100  ,'9990.99') ||
          -                                                                                                  '%' );
          -   p('  Trigger Source Offset: ' || to_char(    g_test_runs_rec.trigger_offset            ,'9999999') );
          -end profile_summary;
          -
          -------------------------------------------------------------
          -procedure summary_out
          -is
          -begin
          -   p('');
          -   p('    wtPLSQL ' || wtplsql.show_version ||
          -       ' - Run ID ' || g_test_runs_rec.id   ||
          -               ': ' || to_char(g_test_runs_rec.start_dtm, g_date_format) ||
          -            CHR(10) );
          -   p('  Test Results for ' || g_test_runs_rec.runner_owner ||
          -                       '.' || g_test_runs_rec.runner_name  );
          -   result_summary;
          -   if     g_test_runs_rec.dbout_name is not null
          -      AND g_test_runs_rec.profiler_runid is null
          -   then
          -      p('');
          -      p('  Note: ' || g_test_runs_rec.dbout_type  || ' ' ||
          -                      g_test_runs_rec.dbout_owner || '.' ||
          -                      g_test_runs_rec.dbout_name  || ' was not profiled.');
          -   end if;
          -   if g_test_runs_rec.error_message is not null
          -   then
          -      p('');
          -      p('  *** Test Runner Error ***');
          -      p(g_test_runs_rec.error_message);
          -   end if;
          -   ----------------------------------------
          -   if g_test_runs_rec.profiler_runid is null
          -   then
          -      return;
          -   end if;
          -   p('');
          -   p('  Code Coverage for ' || g_test_runs_rec.dbout_type  ||
          -                        ' ' || g_test_runs_rec.dbout_owner ||
          -                        '.' || g_test_runs_rec.dbout_name  );
          -   profile_summary;
          -end summary_out;
          -
          -------------------------------------------------------------
          -procedure results_out
          -      (in_show_pass  in boolean)
          -is
          -   l_last_testcase  wt_results.testcase%TYPE;
          -   l_show_pass_txt  varchar2(1);
          -   header_shown     boolean;
          -   procedure l_show_header is begin
          -      p('');
          -      p(' - ' || g_test_runs_rec.runner_owner  ||
          -          '.' || g_test_runs_rec.runner_name   || 
          -          ' Test Result Details (Test Run ID ' ||
          -                 g_test_runs_rec.id            ||
          -          ')' );
          -      p('-----------------------------------------------------------');
          -   end l_show_header;
          -begin
          -   if in_show_pass
          -   then
          -      l_show_pass_txt := 'Y';
          -   else
          -      l_show_pass_txt := 'N';
          -   end if;
          -   header_shown := FALSE;
          -   for buff in (
          -      select status
          -            ,interval_msecs
          -            ,testcase
          -            ,assertion
          -            ,details
          -            ,message
          -       from  wt_results
          -       where test_run_id = g_test_runs_rec.id
          -       and  (   l_show_pass_txt = 'Y'
          -             or status         != 'PASS')
          -       order by result_seq )
          -   loop
          -      if not header_shown
          -      then
          -         l_show_header;
          -         header_shown := TRUE;
          -      end if;
          -      if    buff.testcase = l_last_testcase
          -         OR (      buff.testcase is null
          -             AND l_last_testcase is null )
          -      then
          -         p(format_test_result
          -                        (in_assertion       => buff.assertion
          -                        ,in_status          => buff.status
          -                        ,in_details         => buff.details
          -                        ,in_testcase        => NULL
          -                        ,in_message         => buff.message
          -                        ,in_interval_msecs  => buff.interval_msecs) );
          -      else
          -         p(format_test_result
          -                        (in_assertion       => buff.assertion
          -                        ,in_status          => buff.status
          -                        ,in_details         => buff.details
          -                        ,in_testcase        => buff.testcase
          -                        ,in_message         => buff.message
          -                        ,in_interval_msecs  => buff.interval_msecs) );
          -         l_last_testcase := buff.testcase;
          -      end if;
          -   end loop;
          -end results_out;
          -
          -------------------------------------------------------------
          -procedure profile_out
          -      (in_show_aux  in boolean)
          -is
          -   l_header_txt  CONSTANT varchar2(2000) := 
          -     'Source               TotTime MinTime   MaxTime     ' || chr(10) ||
          -     '  Line Stat Occurs    (usec)  (usec)    (usec) Text' || chr(10) ||
          -     '------ ---- ------ --------- ------- --------- ------------';
          -   l_show_aux_txt  varchar2(1);
          -   header_shown     boolean;
          -   procedure l_show_header is begin
          -     p('');
          -     p(' - ' || g_test_runs_rec.dbout_owner     ||
          -         '.' || g_test_runs_rec.dbout_name      ||
          -         ' ' || g_test_runs_rec.dbout_type      ||
          -         ' Code Coverage Details (Test Run ID ' ||
          -                g_test_runs_rec.id              ||
          -         ')' );
          -   end l_show_header;
          -begin
          -   if g_test_runs_rec.profiler_runid is null
          -   then
          -      return;
          -   end if;
          -   if in_show_aux
          -   then
          -      l_show_aux_txt := 'Y';
          -   else
          -      l_show_aux_txt := 'N';
          -   end if;
          -   header_shown := FALSE;
          -   for buff in (
          -      select line
          -            ,status
          -            ,total_occur
          -            ,total_usecs
          -            ,min_usecs
          -            ,max_usecs
          -            ,text
          -            ,rownum
          -       from  wt_dbout_profiles
          -       where test_run_id = g_test_runs_rec.id
          -       and  (   l_show_aux_txt = 'Y'
          -             or status not in ('EXEC','IGNR','UNKN','EXCL'))
          -       order by line  )
          -   loop
          -      if not header_shown
          -      then
          -         l_show_header;
          -         p(l_header_txt);
          -         header_shown := TRUE;
          -      end if;
          -      if mod(buff.rownum,25) = 0
          -      then
          -         p(l_header_txt);
          -      end if;
          -      p(to_char(buff.line,'99999') ||
          -        case buff.status when 'NOTX' then '#NOTX#'
          -        else ' ' || rpad(buff.status,4) || ' '
          -        end                                  ||
          -        to_char(buff.total_occur,'99999')    || ' ' ||
          -        to_char(buff.total_usecs,'99999999') || ' ' ||
          -        to_char(buff.min_usecs,'999999')     || ' ' ||
          -        to_char(buff.max_usecs,'99999999')   || ' ' ||
          -        replace(buff.text,CHR(10),'')            );
          -   end loop;
          -end profile_out;
          -
          -
          ----------------------
          ---  Public Procedures
          ----------------------
          -
          -------------------------------------------------------------
          -function format_test_result
          -      (in_assertion       in wt_results.assertion%TYPE
          -      ,in_status          in wt_results.status%TYPE
          -      ,in_details         in wt_results.details%TYPE
          -      ,in_testcase        in wt_results.testcase%TYPE
          -      ,in_message         in wt_results.message%TYPE
          -      ,in_interval_msecs  in wt_results.interval_msecs%TYPE DEFAULT NULL)
          -   return varchar2
          -is
          -   l_out_str  varchar2(32000) := '';
          -begin
          -   if in_testcase is not null
          -   then
          -      l_out_str := ' ---- Test Case: ' || in_testcase || CHR(10);
          -   end if;
          -   if in_status = wt_assert.C_PASS
          -   then
          -      l_out_str := l_out_str || ' ' || rpad(in_status,4) || ' ';
          -   else
          -      l_out_str := l_out_str || '#' || rpad(in_status,4) || '#';
          -   end if;
          -   if in_interval_msecs is not null
          -   then
          -      l_out_str := l_out_str || lpad(in_interval_msecs,4) || 'ms ';
          -   end if;
          -   if in_message is not null
          -   then
          -      l_out_str := l_out_str || in_message  || '. ';
          -   end if;
          -   l_out_str := l_out_str || in_assertion || ' - ';
          -   if g_single_line_output
          -   then
          -      l_out_str := l_out_str || replace(replace(in_details,CHR(13),'\r'),CHR(10),'\n');
          -   else
          -      l_out_str := l_out_str || in_details;
          -   end if;
          -   return l_out_str;
          -end format_test_result;
          -
          -------------------------------------------------------------
          -procedure ad_hoc_result
          -      (in_assertion      in wt_results.assertion%TYPE
          -      ,in_status         in wt_results.status%TYPE
          -      ,in_details        in wt_results.details%TYPE
          -      ,in_testcase       in wt_results.testcase%TYPE
          -      ,in_message        in wt_results.message%TYPE)
          -is
          -begin
          -   p(format_test_result
          -        (in_assertion  => in_assertion
          -        ,in_status     => in_status
          -        ,in_details    => in_details
          -        ,in_testcase   => in_testcase
          -        ,in_message    => in_message));
          -end ad_hoc_result;
          -
          -------------------------------------------------------------
          -procedure dbms_out
          -      (in_runner_owner   in  wt_test_runs.runner_owner%TYPE default USER
          -      ,in_runner_name    in  wt_test_runs.runner_name%TYPE  default null
          -      ,in_detail_level   in  number                         default 0
          -      ,in_summary_last   in  boolean                        default FALSE)
          -is
          -
          -   cursor c_main(in_test_run_id  in number) is
          -      select * from wt_test_run_stats
          -       where test_run_id = in_test_run_id;
          -   g_test_run_statsNULL   wt_test_run_stats%ROWTYPE;
          -
          -begin
          -
          -   for buff in (
          -      select * from wt_test_runs
          -       where (          runner_name,        start_dtm) in
          -             (select t2.runner_name, max(t2.start_dtm)
          -               from  wt_test_runs  t2
          -               where (   (    in_runner_name is not null
          -                          and in_runner_name = t2.runner_name)
          -                      OR in_runner_name is null  )
          -                and  t2.runner_owner = in_runner_owner
          -               group by t2.runner_name )
          -       order by start_dtm, runner_name )
          -   loop
          -
          -      --  Load Test Run Record
          -      g_test_runs_rec := buff;
          -
          -      --  Load the Stats Record
          -      g_test_run_stats_rec := g_test_run_statsNULL;
          -      open c_main(buff.id);
          -      fetch c_main into g_test_run_stats_rec;
          -      close c_main;
          -
          -      --  Setup Display Order
          -      if in_summary_last
          -      then
          -        if in_detail_level >= 10
          -         then
          -            profile_out(in_detail_level >= 30);
          -            results_out(in_detail_level >= 20);
          -         end if;
          -         summary_out;
          -      else
          -         summary_out;
          -         if in_detail_level >= 10
          -         then
          -            results_out(in_detail_level >= 20);
          -            profile_out(in_detail_level >= 30);
          -         end if;
          -      end if;
          -
          -      p('');
          -
          -   end loop;
          -
          -end dbms_out;
          -
          -
          -end wt_text_report;
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/package body/WT_TEXT_REPORT/headerBg.jpg b/docs/core/DBDocs/package body/WT_TEXT_REPORT/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/package body/WT_TEXT_REPORT/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_TEXT_REPORT/report.css b/docs/core/DBDocs/package body/WT_TEXT_REPORT/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/package body/WT_TEXT_REPORT/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/package body/WT_TEXT_REPORT/report.js b/docs/core/DBDocs/package body/WT_TEXT_REPORT/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/package body/WT_TEXT_REPORT/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/package body/WT_TEXT_REPORT/topDimTabBg.gif b/docs/core/DBDocs/package body/WT_TEXT_REPORT/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/package body/WT_TEXT_REPORT/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_TEXT_REPORT/topDimTabL.gif b/docs/core/DBDocs/package body/WT_TEXT_REPORT/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/package body/WT_TEXT_REPORT/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_TEXT_REPORT/topDimTabR.gif b/docs/core/DBDocs/package body/WT_TEXT_REPORT/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/package body/WT_TEXT_REPORT/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_TEXT_REPORT/topTabBg.gif b/docs/core/DBDocs/package body/WT_TEXT_REPORT/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/package body/WT_TEXT_REPORT/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_TEXT_REPORT/topTabL.gif b/docs/core/DBDocs/package body/WT_TEXT_REPORT/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/package body/WT_TEXT_REPORT/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/WT_TEXT_REPORT/topTabR.gif b/docs/core/DBDocs/package body/WT_TEXT_REPORT/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/package body/WT_TEXT_REPORT/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package body/index.html b/docs/core/DBDocs/package body/index.html deleted file mode 100644 index d7cc1f3..0000000 --- a/docs/core/DBDocs/package body/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

          Package Bodies -

          \ No newline at end of file diff --git a/docs/core/DBDocs/package/WTPLSQL.html b/docs/core/DBDocs/package/WTPLSQL.html deleted file mode 100644 index 96ff75c..0000000 --- a/docs/core/DBDocs/package/WTPLSQL.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Doc

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Code

          -
          -
          -
          -
          -
          -
          -
          - -

          AUTHID CURRENT_USER is required for dynamic PL/SQL execution.


          - - - - - -
          Method Summary
           delete_runs( in_test_run_id in number )
                    
           delete_runs( in_runner_owner in varchar2 , in_runner_name in varchar2 )
                    
           show_version
                    
           test_all
                    
           test_run( in_package_name in varchar2 )
                    
           WTPLSQL_RUN
                    
          -

          Method Detail
          -

          delete_runs

                    delete_runs( in_test_run_id in number ) 
                    

          -

          delete_runs

                    delete_runs( in_runner_owner in varchar2 , in_runner_name in varchar2 ) 
                    

          -

          show_version

                    show_version
                    

          -

          test_all

                    test_all
                    

          -

          test_run

                    test_run( in_package_name in varchar2 ) 
                    

          -

          WTPLSQL_RUN

                    WTPLSQL_RUN
                    

          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          OWNERWTP
          OBJECT_NAMEWTPLSQL
          SUBOBJECT_NAMEnull
          OBJECT_ID41925
          DATA_OBJECT_IDnull
          OBJECT_TYPEPACKAGE
          CREATED29-JUN-2018 15:09:14
          LAST_DDL_TIME29-JUN-2018 15:21:16
          TIMESTAMP2018-06-29:15:21:15
          STATUSVALID
          TEMPORARYN
          GENERATEDN
          SECONDARYN
          NAMESPACE1
          EDITION_NAMEnull
          -
          -
          -
          -
          - - - - - - - - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          EXECUTEPUBLICNOWTPWTPLSQL
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          -
          -package wtplsql authid current_user
          -as
          -   -- AUTHID CURRENT_USER is required for dynamic PL/SQL execution.
          -
          -   function show_version
          -      return varchar2;
          -
          -   procedure test_run
          -      (in_package_name  in  varchar2);
          -
          -   procedure test_all;
          -
          -   procedure delete_runs
          -      (in_test_run_id  in number);
          -
          -   procedure delete_runs
          -      (in_runner_owner  in varchar2
          -      ,in_runner_name   in varchar2);
          -
          -   --   WtPLSQL Self Test Procedures
          -   --
          -   -- alter system set PLSQL_CCFLAGS = 
          -   --    'WTPLSQL_ENABLE:TRUE, WTPLSQL_SELFTEST:TRUE'
          -   --    scope=BOTH;
          -   --
          -   -- begin
          -   --    dbms_utility.compile_schema('WTP',TRUE,FALSE);
          -   -- end;
          -   -- /
          -   --
          -   $IF $$WTPLSQL_SELFTEST
          -   $THEN
          -      procedure WTPLSQL_RUN;
          -   $END
          -
          -end wtplsql;
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/package/WTPLSQL/headerBg.jpg b/docs/core/DBDocs/package/WTPLSQL/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/package/WTPLSQL/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/package/WTPLSQL/report.css b/docs/core/DBDocs/package/WTPLSQL/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/package/WTPLSQL/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/package/WTPLSQL/report.js b/docs/core/DBDocs/package/WTPLSQL/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/package/WTPLSQL/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/package/WTPLSQL/topDimTabBg.gif b/docs/core/DBDocs/package/WTPLSQL/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/package/WTPLSQL/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WTPLSQL/topDimTabL.gif b/docs/core/DBDocs/package/WTPLSQL/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/package/WTPLSQL/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WTPLSQL/topDimTabR.gif b/docs/core/DBDocs/package/WTPLSQL/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/package/WTPLSQL/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WTPLSQL/topTabBg.gif b/docs/core/DBDocs/package/WTPLSQL/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/package/WTPLSQL/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WTPLSQL/topTabL.gif b/docs/core/DBDocs/package/WTPLSQL/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/package/WTPLSQL/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WTPLSQL/topTabR.gif b/docs/core/DBDocs/package/WTPLSQL/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/package/WTPLSQL/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_ASSERT.html b/docs/core/DBDocs/package/WT_ASSERT.html deleted file mode 100644 index 0761ed8..0000000 --- a/docs/core/DBDocs/package/WT_ASSERT.html +++ /dev/null @@ -1,528 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Doc

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Code

          -
          -
          -
          -
          -
          -
          -
          - -

          AUTHID CURRENT_USER is required for dynamic PL/SQL execution.


          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          Method Summary
           eq( msg_in in varchar2 , check_this_in in varchar2 , against_this_in in varchar2 , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                    
           eq( msg_in in varchar2 , check_this_in in boolean , against_this_in in boolean , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                    
           eq( msg_in in varchar2 , check_this_in in XMLTYPE , against_this_in in XMLTYPE , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                    
           eq( msg_in in varchar2 , check_this_in in CLOB , against_this_in in CLOB , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                     Not Used, utPLSQL V1 API
           eq( msg_in in varchar2 , check_this_in in BLOB , against_this_in in BLOB , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                    
           eqquery( msg_in in varchar2 , check_query_in in varchar2 , against_query_in in varchar2 , raise_exc_in in boolean : = false )
                    
           eqqueryvalue( msg_in in varchar2 , check_query_in in varchar2 , against_value_in in varchar2 , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                    
           eqqueryvalue( msg_in in varchar2 , check_query_in in varchar2 , against_value_in in XMLTYPE , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                    
           eqqueryvalue( msg_in in varchar2 , check_query_in in varchar2 , against_value_in in CLOB , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                     Not Used, utPLSQL V1 API
           eqqueryvalue( msg_in in varchar2 , check_query_in in varchar2 , against_value_in in BLOB , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                    
           eqtabcount( msg_in in varchar2 , check_this_in in varchar2 , against_this_in in varchar2 , check_where_in in varchar2 : = null , against_where_in in varchar2 : = null , raise_exc_in in boolean : = false )
                    
           eqtable( msg_in in varchar2 , check_this_in in varchar2 , against_this_in in varchar2 , check_where_in in varchar2 : = null , against_where_in in varchar2 : = null , raise_exc_in in boolean : = false )
                    
           get_NLS_DATE_FORMAT
                     Date/Time Formats are configured at the Session Level
           get_NLS_TIMESTAMP_FORMAT
                    
           get_NLS_TIMESTAMP_TZ_FORMAT
                    
           isnotnull( msg_in in varchar2 , check_this_in in varchar2 , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                    
           isnotnull( msg_in in varchar2 , check_this_in in boolean , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                     Not Used, utPLSQL V1 API
           isnotnull( msg_in in varchar2 , check_this_in in CLOB , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                     Not Used, utPLSQL V1 API
           isnotnull( msg_in in varchar2 , check_this_in in BLOB , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                     Not Used, utPLSQL V1 API
           isnull( msg_in in varchar2 , check_this_in in varchar2 , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                    
           isnull( msg_in in varchar2 , check_this_in in boolean , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                     Not Used, utPLSQL V1 API
           isnull( msg_in in varchar2 , check_this_in in CLOB , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                     Not Used, utPLSQL V1 API
           isnull( msg_in in varchar2 , check_this_in in BLOB , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                     Not Used, utPLSQL V1 API
           last_assert
                    
           last_details
                    
           last_msg
                    
           last_pass
                     Modify as required
           objexists( msg_in in varchar2 , obj_owner_in in varchar2 , obj_name_in in varchar2 , obj_type_in in varchar2 default null , raise_exc_in in boolean : = false )
                    
           objexists( msg_in in varchar2 , check_this_in in varchar2 , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                    
           objnotexists( msg_in in varchar2 , obj_owner_in in varchar2 , obj_name_in in varchar2 , obj_type_in in varchar2 default null , raise_exc_in in boolean : = false )
                    
           objnotexists( msg_in in varchar2 , check_this_in in varchar2 , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                    
           raises( msg_in varchar2 , check_call_in in varchar2 , against_exc_in in varchar2 )
                    
           raises( msg_in varchar2 , check_call_in in varchar2 , against_exc_in in number )
                    
           reset_globals
                    
           set_NLS_DATE_FORMAT( in_format in varchar2 default 'DD-MON-YYYY HH24:MI:SS' )
                    
           set_NLS_TIMESTAMP_FORMAT( in_format in varchar2 default 'DD-MON-YYYY HH24:MI:SS.FF6' )
                    
           set_NLS_TIMESTAMP_TZ_FORMAT( in_format in varchar2 default 'DD-MON-YYYY HH24:MI:SS.FF6 TZH:TZM' )
                    
           this( msg_in in varchar2 , check_this_in in boolean , null_ok_in in boolean : = false , raise_exc_in in boolean : = false )
                    
           throws( msg_in varchar2 , check_call_in in varchar2 , against_exc_in in varchar2 )
                    
           throws( msg_in varchar2 , check_call_in in varchar2 , against_exc_in in number )
                    
           WTPLSQL_RUN
                    
          -

          Method Detail
          -

          eq

                    eq( msg_in in varchar2 , check_this_in in varchar2 , against_this_in in varchar2 , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                    

          -

          eq

                    eq( msg_in in varchar2 , check_this_in in boolean , against_this_in in boolean , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                    

          -

          eq

                    eq( msg_in in varchar2 , check_this_in in XMLTYPE , against_this_in in XMLTYPE , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                    

          -

          eq

                    eq( msg_in in varchar2 , check_this_in in CLOB , against_this_in in CLOB , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                     Not Used, utPLSQL V1 API

          -

          eq

                    eq( msg_in in varchar2 , check_this_in in BLOB , against_this_in in BLOB , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                    

          -

          eqquery

                    eqquery( msg_in in varchar2 , check_query_in in varchar2 , against_query_in in varchar2 , raise_exc_in in boolean : = false ) 
                    

          -

          eqqueryvalue

                    eqqueryvalue( msg_in in varchar2 , check_query_in in varchar2 , against_value_in in varchar2 , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                    

          -

          eqqueryvalue

                    eqqueryvalue( msg_in in varchar2 , check_query_in in varchar2 , against_value_in in XMLTYPE , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                    

          -

          eqqueryvalue

                    eqqueryvalue( msg_in in varchar2 , check_query_in in varchar2 , against_value_in in CLOB , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                     Not Used, utPLSQL V1 API

          -

          eqqueryvalue

                    eqqueryvalue( msg_in in varchar2 , check_query_in in varchar2 , against_value_in in BLOB , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                    

          -

          eqtabcount

                    eqtabcount( msg_in in varchar2 , check_this_in in varchar2 , against_this_in in varchar2 , check_where_in in varchar2 : = null , against_where_in in varchar2 : = null , raise_exc_in in boolean : = false ) 
                    

          -

          eqtable

                    eqtable( msg_in in varchar2 , check_this_in in varchar2 , against_this_in in varchar2 , check_where_in in varchar2 : = null , against_where_in in varchar2 : = null , raise_exc_in in boolean : = false ) 
                    

          -

          get_NLS_DATE_FORMAT

                    get_NLS_DATE_FORMAT
                     Date/Time Formats are configured at the Session Level

          -

          get_NLS_TIMESTAMP_FORMAT

                    get_NLS_TIMESTAMP_FORMAT
                    

          -

          get_NLS_TIMESTAMP_TZ_FORMAT

                    get_NLS_TIMESTAMP_TZ_FORMAT
                    

          -

          isnotnull

                    isnotnull( msg_in in varchar2 , check_this_in in varchar2 , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                    

          -

          isnotnull

                    isnotnull( msg_in in varchar2 , check_this_in in boolean , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                     Not Used, utPLSQL V1 API

          -

          isnotnull

                    isnotnull( msg_in in varchar2 , check_this_in in CLOB , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                     Not Used, utPLSQL V1 API

          -

          isnotnull

                    isnotnull( msg_in in varchar2 , check_this_in in BLOB , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                     Not Used, utPLSQL V1 API

          -

          isnull

                    isnull( msg_in in varchar2 , check_this_in in varchar2 , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                    

          -

          isnull

                    isnull( msg_in in varchar2 , check_this_in in boolean , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                     Not Used, utPLSQL V1 API

          -

          isnull

                    isnull( msg_in in varchar2 , check_this_in in CLOB , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                     Not Used, utPLSQL V1 API

          -

          isnull

                    isnull( msg_in in varchar2 , check_this_in in BLOB , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                     Not Used, utPLSQL V1 API

          -

          last_assert

                    last_assert
                    

          -

          last_details

                    last_details
                    

          -

          last_msg

                    last_msg
                    

          -

          last_pass

                    last_pass
                     Modify as required

          -

          objexists

                    objexists( msg_in in varchar2 , obj_owner_in in varchar2 , obj_name_in in varchar2 , obj_type_in in varchar2 default null , raise_exc_in in boolean : = false ) 
                    

          -

          objexists

                    objexists( msg_in in varchar2 , check_this_in in varchar2 , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                    

          -

          objnotexists

                    objnotexists( msg_in in varchar2 , obj_owner_in in varchar2 , obj_name_in in varchar2 , obj_type_in in varchar2 default null , raise_exc_in in boolean : = false ) 
                    

          -

          objnotexists

                    objnotexists( msg_in in varchar2 , check_this_in in varchar2 , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                    

          -

          raises

                    raises( msg_in varchar2 , check_call_in in varchar2 , against_exc_in in varchar2 ) 
                    

          -

          raises

                    raises( msg_in varchar2 , check_call_in in varchar2 , against_exc_in in number ) 
                    

          -

          reset_globals

                    reset_globals
                    

          -

          set_NLS_DATE_FORMAT

                    set_NLS_DATE_FORMAT( in_format in varchar2 default 'DD-MON-YYYY HH24:MI:SS' ) 
                    

          -

          set_NLS_TIMESTAMP_FORMAT

                    set_NLS_TIMESTAMP_FORMAT( in_format in varchar2 default 'DD-MON-YYYY HH24:MI:SS.FF6' ) 
                    

          -

          set_NLS_TIMESTAMP_TZ_FORMAT

                    set_NLS_TIMESTAMP_TZ_FORMAT( in_format in varchar2 default 'DD-MON-YYYY HH24:MI:SS.FF6 TZH:TZM' ) 
                    

          -

          this

                    this( msg_in in varchar2 , check_this_in in boolean , null_ok_in in boolean : = false , raise_exc_in in boolean : = false ) 
                    

          -

          throws

                    throws( msg_in varchar2 , check_call_in in varchar2 , against_exc_in in varchar2 ) 
                    

          -

          throws

                    throws( msg_in varchar2 , check_call_in in varchar2 , against_exc_in in number ) 
                    

          -

          WTPLSQL_RUN

                    WTPLSQL_RUN
                    

          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          OWNERWTP
          OBJECT_NAMEWT_ASSERT
          SUBOBJECT_NAMEnull
          OBJECT_ID41927
          DATA_OBJECT_IDnull
          OBJECT_TYPEPACKAGE
          CREATED29-JUN-2018 15:09:15
          LAST_DDL_TIME29-JUN-2018 15:21:16
          TIMESTAMP2018-06-29:15:21:15
          STATUSVALID
          TEMPORARYN
          GENERATEDN
          SECONDARYN
          NAMESPACE1
          EDITION_NAMEnull
          -
          -
          -
          -
          - - - - - - - - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          EXECUTEPUBLICNOWTPWT_ASSERT
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          -
          -package wt_assert authid current_user
          -is
          -   -- AUTHID CURRENT_USER is required for dynamic PL/SQL execution.
          -
          -   ASSERT_FAILURE_EXCEPTION  exception;
          -   PRAGMA EXCEPTION_INIT(ASSERT_FAILURE_EXCEPTION, -20003);
          -
          -   C_PASS  CONSTANT varchar2(10) := 'PASS';
          -   C_FAIL  CONSTANT varchar2(10) := 'FAIL';
          -
          -   -- See RESET_GLOBALS procedure for default global values
          -
          -   -- Testcase name for a series of assertions.
          -   --   Modify as required
          -   g_testcase         wt_results.testcase%TYPE;
          -
          -   function last_pass
          -   return boolean;
          -
          -   function last_assert
          -   return wt_results.assertion%TYPE;
          -
          -   function last_msg
          -   return wt_results.message%TYPE;
          -
          -   function last_details
          -   return wt_results.details%TYPE;
          -
          -   procedure reset_globals;
          -
          -   -- Date/Time Formats are configured at the Session Level
          -   function get_NLS_DATE_FORMAT
          -      return varchar2;
          -   procedure set_NLS_DATE_FORMAT
          -      (in_format in varchar2 default 'DD-MON-YYYY HH24:MI:SS');
          -   function get_NLS_TIMESTAMP_FORMAT
          -      return varchar2;
          -   procedure set_NLS_TIMESTAMP_FORMAT
          -      (in_format in varchar2 default 'DD-MON-YYYY HH24:MI:SS.FF6');
          -   function get_NLS_TIMESTAMP_TZ_FORMAT
          -       return varchar2;
          -   procedure set_NLS_TIMESTAMP_TZ_FORMAT
          -      (in_format in varchar2 default 'DD-MON-YYYY HH24:MI:SS.FF6 TZH:TZM');
          -
          -   ------------------------
          -   --   Datatypes Supported
          -   --     Oracle Data Type Families
          -   --   https://docs.oracle.com/cd/E11882_01/appdev.112/e25519/predefined.htm#LNPLS2047
          -   --
          -   -- VARCHAR2 - Includes ROWID, LONG*, RAW, LONG RAW*, and NVARCHAR2
          -   -- DATE** - Includes TIMESTAMP and INTERVAL
          -   -- NUMBER** - Includes PLS_INTEGER
          -   -- BOOLEAN
          -   -- XMLTYPE
          -   -- CLOB - Includes NCLOB
          -   -- BLOB
          -   --
          -   -- *LONG and LONG RAW data length is limited to VARCHAR2 length in PL/SQL (32K).
          -   -- **VARCHAR2 includes DATE and NUMBER using Implicit Data Conversions:
          -   --   https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements002.htm#i163326
          -   --
          -
          -   procedure this (
          -      msg_in          in   varchar2,
          -      check_this_in   in   boolean,
          -      null_ok_in      in   boolean := false,   -- Not Used, utPLSQL V1 API
          -      raise_exc_in    in   boolean := false);
          -
          -   --
          -   procedure eq (
          -      msg_in            in   varchar2,
          -      check_this_in     in   varchar2,
          -      against_this_in   in   varchar2,
          -      null_ok_in        in   boolean := false,
          -      raise_exc_in      in   boolean := false);
          -
          -   procedure eq (
          -      msg_in            in   varchar2,
          -      check_this_in     in   boolean,
          -      against_this_in   in   boolean,
          -      null_ok_in        in   boolean := false,
          -      raise_exc_in      in   boolean := false);
          -
          -   procedure eq (
          -      msg_in            in   varchar2,
          -      check_this_in     in   XMLTYPE,
          -      against_this_in   in   XMLTYPE,
          -      null_ok_in        in   boolean := false,   -- Not Used, utPLSQL V1 API
          -      raise_exc_in      in   boolean := false);
          -
          -   procedure eq (
          -      msg_in            in   varchar2,
          -      check_this_in     in   CLOB,
          -      against_this_in   in   CLOB,
          -      null_ok_in        in   boolean := false,
          -      raise_exc_in      in   boolean := false);
          -
          -   procedure eq (
          -      msg_in            in   varchar2,
          -      check_this_in     in   BLOB,
          -      against_this_in   in   BLOB,
          -      null_ok_in        in   boolean := false,
          -      raise_exc_in      in   boolean := false);
          -
          -   --
          -   procedure isnotnull (
          -      msg_in          in   varchar2,
          -      check_this_in   in   varchar2,
          -      null_ok_in      in   boolean := false,   -- Not Used, utPLSQL V1 API
          -      raise_exc_in    in   boolean := false);
          -
          -   procedure isnotnull (
          -      msg_in          in   varchar2,
          -      check_this_in   in   boolean,
          -      null_ok_in      in   boolean := false,   -- Not Used, utPLSQL V1 API
          -      raise_exc_in    in   boolean := false);
          -
          -   procedure isnotnull (
          -      msg_in          in   varchar2,
          -      check_this_in   in   CLOB,
          -      null_ok_in      in   boolean := false,   -- Not Used, utPLSQL V1 API
          -      raise_exc_in    in   boolean := false);
          -
          -   procedure isnotnull (
          -      msg_in          in   varchar2,
          -      check_this_in   in   BLOB,
          -      null_ok_in      in   boolean := false,   -- Not Used, utPLSQL V1 API
          -      raise_exc_in    in   boolean := false);
          -
          -   --
          -   procedure isnull (
          -      msg_in          in   varchar2,
          -      check_this_in   in   varchar2,
          -      null_ok_in      in   boolean := false,   -- Not Used, utPLSQL V1 API
          -      raise_exc_in    in   boolean := false);
          -
          -   procedure isnull (
          -      msg_in          in   varchar2,
          -      check_this_in   in   boolean,
          -      null_ok_in      in   boolean := false,   -- Not Used, utPLSQL V1 API
          -      raise_exc_in    in   boolean := false);
          -
          -   procedure isnull (
          -      msg_in          in   varchar2,
          -      check_this_in   in   CLOB,
          -      null_ok_in      in   boolean := false,   -- Not Used, utPLSQL V1 API
          -      raise_exc_in    in   boolean := false);
          -
          -   procedure isnull (
          -      msg_in          in   varchar2,
          -      check_this_in   in   BLOB,
          -      null_ok_in      in   boolean := false,   -- Not Used, utPLSQL V1 API
          -      raise_exc_in    in   boolean := false);
          -
          -   --
          -   procedure raises (
          -      msg_in                varchar2,
          -      check_call_in    in   varchar2,
          -      against_exc_in   in   varchar2);
          -
          -   procedure raises (
          -      msg_in                varchar2,
          -      check_call_in    in   varchar2,
          -      against_exc_in   in   number);
          -
          -   procedure throws (
          -      msg_in                varchar2,
          -      check_call_in    in   varchar2,
          -      against_exc_in   in   varchar2);
          -
          -   procedure throws (
          -      msg_in                varchar2,
          -      check_call_in    in   varchar2,
          -      against_exc_in   in   number);
          -
          -   --
          -   procedure eqqueryvalue (
          -      msg_in             in   varchar2,
          -      check_query_in     in   varchar2,
          -      against_value_in   in   varchar2,
          -      null_ok_in         in   boolean := false,
          -      raise_exc_in       in   boolean := false);
          -
          -   procedure eqqueryvalue (
          -      msg_in             in   varchar2,
          -      check_query_in     in   varchar2,
          -      against_value_in   in   XMLTYPE,
          -      null_ok_in         in   boolean := false,  -- Not Used, utPLSQL V1 API
          -      raise_exc_in       in   boolean := false);
          -
          -   procedure eqqueryvalue (
          -      msg_in             in   varchar2,
          -      check_query_in     in   varchar2,
          -      against_value_in   in   CLOB,
          -      null_ok_in         in   boolean := false,
          -      raise_exc_in       in   boolean := false);
          -
          -   procedure eqqueryvalue (
          -      msg_in             in   varchar2,
          -      check_query_in     in   varchar2,
          -      against_value_in   in   BLOB,
          -      null_ok_in         in   boolean := false,
          -      raise_exc_in       in   boolean := false);
          -
          -   --
          -   procedure eqquery (
          -      msg_in             in   varchar2,
          -      check_query_in     in   varchar2,
          -      against_query_in   in   varchar2,
          -      raise_exc_in       in   boolean := false);
          -
          -   --
          -   procedure eqtable (
          -      msg_in             in   varchar2,
          -      check_this_in      in   varchar2,
          -      against_this_in    in   varchar2,
          -      check_where_in     in   varchar2 := null,
          -      against_where_in   in   varchar2 := null,
          -      raise_exc_in       in   boolean := false);
          -
          -   --
          -   procedure eqtabcount (
          -      msg_in             in   varchar2,
          -      check_this_in      in   varchar2,
          -      against_this_in    in   varchar2,
          -      check_where_in     in   varchar2 := null,
          -      against_where_in   in   varchar2 := null,
          -      raise_exc_in       in   boolean := false);
          -
          -   --
          -   procedure objexists (
          -      msg_in        in   varchar2,
          -      obj_owner_in  in   varchar2,
          -      obj_name_in   in   varchar2,
          -      obj_type_in   in   varchar2 default null,
          -      raise_exc_in  in   boolean := false);
          -
          -   procedure objexists (
          -      msg_in          in   varchar2,
          -      check_this_in   in   varchar2,
          -      null_ok_in      in   boolean := false,  -- Not Used, utPLSQL V1 API
          -      raise_exc_in    in   boolean := false);
          -
          -   --
          -   procedure objnotexists (
          -      msg_in        in   varchar2,
          -      obj_owner_in  in   varchar2,
          -      obj_name_in   in   varchar2,
          -      obj_type_in   in   varchar2 default null,
          -      raise_exc_in  in   boolean := false);
          -
          -   procedure objnotexists (
          -      msg_in          in   varchar2,
          -      check_this_in   in   varchar2,
          -      null_ok_in      in   boolean := false,  -- Not Used, utPLSQL V1 API
          -      raise_exc_in    in   boolean := false);
          -
          -   --   WtPLSQL Self Test Procedures
          -   --
          -   -- alter system set PLSQL_CCFLAGS = 
          -   --    'WTPLSQL_SELFTEST:TRUE'
          -   --    scope=BOTH;
          -   --
          -   $IF $$WTPLSQL_SELFTEST
          -   $THEN
          -      procedure WTPLSQL_RUN;
          -   $END
          -
          -end wt_assert;
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/package/WT_ASSERT/headerBg.jpg b/docs/core/DBDocs/package/WT_ASSERT/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/package/WT_ASSERT/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_ASSERT/report.css b/docs/core/DBDocs/package/WT_ASSERT/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/package/WT_ASSERT/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/package/WT_ASSERT/report.js b/docs/core/DBDocs/package/WT_ASSERT/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/package/WT_ASSERT/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/package/WT_ASSERT/topDimTabBg.gif b/docs/core/DBDocs/package/WT_ASSERT/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/package/WT_ASSERT/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_ASSERT/topDimTabL.gif b/docs/core/DBDocs/package/WT_ASSERT/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/package/WT_ASSERT/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_ASSERT/topDimTabR.gif b/docs/core/DBDocs/package/WT_ASSERT/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/package/WT_ASSERT/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_ASSERT/topTabBg.gif b/docs/core/DBDocs/package/WT_ASSERT/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/package/WT_ASSERT/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_ASSERT/topTabL.gif b/docs/core/DBDocs/package/WT_ASSERT/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/package/WT_ASSERT/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_ASSERT/topTabR.gif b/docs/core/DBDocs/package/WT_ASSERT/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/package/WT_ASSERT/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_PROFILER.html b/docs/core/DBDocs/package/WT_PROFILER.html deleted file mode 100644 index f5214dc..0000000 --- a/docs/core/DBDocs/package/WT_PROFILER.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Doc

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Code

          -
          -
          -
          -
          -
          -
          -
          - -

          current_user


          - - - - - -
          Method Summary
           calc_pct_coverage( in_test_run_id in number ) return number ;
                    
           delete_records( in_test_run_id in number )
                    
           finalize
                    
           initialize( in_test_run_id in number , in_runner_name in varchar2 , out_dbout_owner out varchar2 , out_dbout_name out varchar2 , out_dbout_type out varchar2 , out_trigger_offset out number , out_profiler_runid out number , out_error_message out varchar2 )
                    
           trigger_offset( dbout_owner_in in varchar2 , dbout_name_in in varchar2 , dbout_type_in in varchar2 ) return number ;
                    
           WTPLSQL_RUN
                    
          -

          Method Detail
          -

          calc_pct_coverage

                    calc_pct_coverage( in_test_run_id in number ) return number ; 
                    

          -

          delete_records

                    delete_records( in_test_run_id in number ) 
                    

          -

          finalize

                    finalize
                    

          -

          initialize

                    initialize( in_test_run_id in number , in_runner_name in varchar2 , out_dbout_owner out varchar2 , out_dbout_name out varchar2 , out_dbout_type out varchar2 , out_trigger_offset out number , out_profiler_runid out number , out_error_message out varchar2 ) 
                    

          -

          trigger_offset

                    trigger_offset( dbout_owner_in in varchar2 , dbout_name_in in varchar2 , dbout_type_in in varchar2 ) return number ; 
                    

          -

          WTPLSQL_RUN

                    WTPLSQL_RUN
                    

          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          OWNERWTP
          OBJECT_NAMEWT_PROFILER
          SUBOBJECT_NAMEnull
          OBJECT_ID41928
          DATA_OBJECT_IDnull
          OBJECT_TYPEPACKAGE
          CREATED29-JUN-2018 15:09:15
          LAST_DDL_TIME29-JUN-2018 15:21:15
          TIMESTAMP2018-06-29:15:21:15
          STATUSVALID
          TEMPORARYN
          GENERATEDN
          SECONDARYN
          NAMESPACE1
          EDITION_NAMEnull
          -
          -
          -
          -
          - - - - - - - - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          EXECUTEPUBLICNOWTPWT_PROFILER
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          -
          -package wt_profiler authid definer --current_user
          -as
          -
          -   procedure initialize
          -      (in_test_run_id      in  number,
          -       in_runner_name      in  varchar2,
          -       out_dbout_owner     out varchar2,
          -       out_dbout_name      out varchar2,
          -       out_dbout_type      out varchar2,
          -       out_trigger_offset  out number,
          -       out_profiler_runid  out number,
          -       out_error_message   out varchar2);
          -
          -   procedure finalize;
          -
          -   function trigger_offset
          -      (dbout_owner_in  in  varchar2
          -      ,dbout_name_in   in  varchar2
          -      ,dbout_type_in   in  varchar2)
          -   return number;
          -
          -   function calc_pct_coverage
          -      (in_test_run_id  in  number)
          -   return number;
          -
          -   procedure delete_records
          -      (in_test_run_id  in number);
          -
          -   --   WtPLSQL Self Test Procedures
          -   --
          -   -- alter system set PLSQL_CCFLAGS = 
          -   --    'WTPLSQL_SELFTEST:TRUE'
          -   --    scope=BOTH;
          -   --
          -   $IF $$WTPLSQL_SELFTEST
          -   $THEN
          -      procedure WTPLSQL_RUN;
          -   $END
          -
          -end wt_profiler;
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/package/WT_PROFILER/headerBg.jpg b/docs/core/DBDocs/package/WT_PROFILER/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/package/WT_PROFILER/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_PROFILER/report.css b/docs/core/DBDocs/package/WT_PROFILER/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/package/WT_PROFILER/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/package/WT_PROFILER/report.js b/docs/core/DBDocs/package/WT_PROFILER/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/package/WT_PROFILER/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/package/WT_PROFILER/topDimTabBg.gif b/docs/core/DBDocs/package/WT_PROFILER/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/package/WT_PROFILER/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_PROFILER/topDimTabL.gif b/docs/core/DBDocs/package/WT_PROFILER/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/package/WT_PROFILER/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_PROFILER/topDimTabR.gif b/docs/core/DBDocs/package/WT_PROFILER/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/package/WT_PROFILER/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_PROFILER/topTabBg.gif b/docs/core/DBDocs/package/WT_PROFILER/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/package/WT_PROFILER/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_PROFILER/topTabL.gif b/docs/core/DBDocs/package/WT_PROFILER/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/package/WT_PROFILER/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_PROFILER/topTabR.gif b/docs/core/DBDocs/package/WT_PROFILER/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/package/WT_PROFILER/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_RESULT.html b/docs/core/DBDocs/package/WT_RESULT.html deleted file mode 100644 index 2d39d56..0000000 --- a/docs/core/DBDocs/package/WT_RESULT.html +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Doc

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Code

          -
          -
          -
          -
          -
          -
          -
          - -


          - - - - -
          Method Summary
           delete_records( in_test_run_id in number )
                    
           finalize
                    
           initialize( in_test_run_id in wt_test_runs . id % TYPE )
                    
           save( in_assertion in wt_results . assertion % TYPE , in_status in wt_results . status % TYPE , in_details in wt_results . details % TYPE , in_testcase in wt_results . testcase % TYPE , in_message in wt_results . message % TYPE )
                    
           WTPLSQL_RUN
                    
          -

          Method Detail
          -

          delete_records

                    delete_records( in_test_run_id in number ) 
                    

          -

          finalize

                    finalize
                    

          -

          initialize

                    initialize( in_test_run_id in wt_test_runs . id % TYPE ) 
                    

          -

          save

                    save( in_assertion in wt_results . assertion % TYPE , in_status in wt_results . status % TYPE , in_details in wt_results . details % TYPE , in_testcase in wt_results . testcase % TYPE , in_message in wt_results . message % TYPE ) 
                    

          -

          WTPLSQL_RUN

                    WTPLSQL_RUN
                    

          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          OWNERWTP
          OBJECT_NAMEWT_RESULT
          SUBOBJECT_NAMEnull
          OBJECT_ID41926
          DATA_OBJECT_IDnull
          OBJECT_TYPEPACKAGE
          CREATED29-JUN-2018 15:09:14
          LAST_DDL_TIME29-JUN-2018 15:21:15
          TIMESTAMP2018-06-29:15:21:15
          STATUSVALID
          TEMPORARYN
          GENERATEDN
          SECONDARYN
          NAMESPACE1
          EDITION_NAMEnull
          -
          -
          -
          -
          - - - - - - - - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          EXECUTEPUBLICNOWTPWT_RESULT
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          -
          -package wt_result authid definer
          -as
          -
          -   procedure initialize
          -      (in_test_run_id   in wt_test_runs.id%TYPE);
          -
          -   procedure finalize;
          -
          -   procedure save
          -      (in_assertion      in wt_results.assertion%TYPE
          -      ,in_status         in wt_results.status%TYPE
          -      ,in_details        in wt_results.details%TYPE
          -      ,in_testcase       in wt_results.testcase%TYPE
          -      ,in_message        in wt_results.message%TYPE);
          -
          -   procedure delete_records
          -      (in_test_run_id  in number);
          -
          -   --   WtPLSQL Self Test Procedures
          -   --
          -   -- alter system set PLSQL_CCFLAGS = 
          -   --    'WTPLSQL_SELFTEST:TRUE'
          -   --    scope=BOTH;
          -   --
          -   $IF $$WTPLSQL_SELFTEST
          -   $THEN
          -      procedure WTPLSQL_RUN;
          -   $END
          -
          -end wt_result;
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/package/WT_RESULT/headerBg.jpg b/docs/core/DBDocs/package/WT_RESULT/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/package/WT_RESULT/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_RESULT/report.css b/docs/core/DBDocs/package/WT_RESULT/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/package/WT_RESULT/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/package/WT_RESULT/report.js b/docs/core/DBDocs/package/WT_RESULT/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/package/WT_RESULT/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/package/WT_RESULT/topDimTabBg.gif b/docs/core/DBDocs/package/WT_RESULT/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/package/WT_RESULT/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_RESULT/topDimTabL.gif b/docs/core/DBDocs/package/WT_RESULT/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/package/WT_RESULT/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_RESULT/topDimTabR.gif b/docs/core/DBDocs/package/WT_RESULT/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/package/WT_RESULT/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_RESULT/topTabBg.gif b/docs/core/DBDocs/package/WT_RESULT/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/package/WT_RESULT/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_RESULT/topTabL.gif b/docs/core/DBDocs/package/WT_RESULT/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/package/WT_RESULT/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_RESULT/topTabR.gif b/docs/core/DBDocs/package/WT_RESULT/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/package/WT_RESULT/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_TEST_RUN_STAT.html b/docs/core/DBDocs/package/WT_TEST_RUN_STAT.html deleted file mode 100644 index 75f7997..0000000 --- a/docs/core/DBDocs/package/WT_TEST_RUN_STAT.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Doc

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Code

          -
          -
          -
          -
          -
          -
          -
          - -


          - - - - - -
          Method Summary
           add_profile( in_dbout_profiles_rec in wt_dbout_profiles % ROWTYPE )
                    
           add_result( in_results_rec in wt_results % ROWTYPE )
                    
           delete_records( in_test_run_id in number )
                    
           finalize
                    
           initialize
                    
           WTPLSQL_RUN
                    
          -

          Method Detail
          -

          add_profile

                    add_profile( in_dbout_profiles_rec in wt_dbout_profiles % ROWTYPE ) 
                    

          -

          add_result

                    add_result( in_results_rec in wt_results % ROWTYPE ) 
                    

          -

          delete_records

                    delete_records( in_test_run_id in number ) 
                    

          -

          finalize

                    finalize
                    

          -

          initialize

                    initialize
                    

          -

          WTPLSQL_RUN

                    WTPLSQL_RUN
                    

          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          OWNERWTP
          OBJECT_NAMEWT_TEST_RUN_STAT
          SUBOBJECT_NAMEnull
          OBJECT_ID41960
          DATA_OBJECT_IDnull
          OBJECT_TYPEPACKAGE
          CREATED29-JUN-2018 15:21:15
          LAST_DDL_TIME29-JUN-2018 15:21:15
          TIMESTAMP2018-06-29:15:21:15
          STATUSVALID
          TEMPORARYN
          GENERATEDN
          SECONDARYN
          NAMESPACE1
          EDITION_NAMEnull
          -
          -
          -
          -
          - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          -
          -package wt_test_run_stat authid definer
          -as
          -
          -   procedure initialize;
          -
          -   procedure add_result
          -      (in_results_rec  in wt_results%ROWTYPE);
          -
          -   procedure add_profile
          -      (in_dbout_profiles_rec  in wt_dbout_profiles%ROWTYPE);
          -
          -   procedure finalize;
          -
          -   procedure delete_records
          -      (in_test_run_id  in number);
          -
          -   --   WtPLSQL Self Test Procedures
          -   --
          -   -- alter system set PLSQL_CCFLAGS = 
          -   --    'WTPLSQL_SELFTEST:TRUE'
          -   --    scope=BOTH;
          -   --
          -   $IF $$WTPLSQL_SELFTEST
          -   $THEN
          -      procedure WTPLSQL_RUN;
          -   $END
          -
          -end wt_test_run_stat;
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/package/WT_TEST_RUN_STAT/headerBg.jpg b/docs/core/DBDocs/package/WT_TEST_RUN_STAT/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/package/WT_TEST_RUN_STAT/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_TEST_RUN_STAT/report.css b/docs/core/DBDocs/package/WT_TEST_RUN_STAT/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/package/WT_TEST_RUN_STAT/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/package/WT_TEST_RUN_STAT/report.js b/docs/core/DBDocs/package/WT_TEST_RUN_STAT/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/package/WT_TEST_RUN_STAT/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/package/WT_TEST_RUN_STAT/topDimTabBg.gif b/docs/core/DBDocs/package/WT_TEST_RUN_STAT/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/package/WT_TEST_RUN_STAT/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_TEST_RUN_STAT/topDimTabL.gif b/docs/core/DBDocs/package/WT_TEST_RUN_STAT/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/package/WT_TEST_RUN_STAT/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_TEST_RUN_STAT/topDimTabR.gif b/docs/core/DBDocs/package/WT_TEST_RUN_STAT/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/package/WT_TEST_RUN_STAT/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_TEST_RUN_STAT/topTabBg.gif b/docs/core/DBDocs/package/WT_TEST_RUN_STAT/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/package/WT_TEST_RUN_STAT/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_TEST_RUN_STAT/topTabL.gif b/docs/core/DBDocs/package/WT_TEST_RUN_STAT/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/package/WT_TEST_RUN_STAT/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_TEST_RUN_STAT/topTabR.gif b/docs/core/DBDocs/package/WT_TEST_RUN_STAT/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/package/WT_TEST_RUN_STAT/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_TEXT_REPORT.html b/docs/core/DBDocs/package/WT_TEXT_REPORT.html deleted file mode 100644 index a7e5a3f..0000000 --- a/docs/core/DBDocs/package/WT_TEXT_REPORT.html +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Doc

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Code

          -
          -
          -
          -
          -
          -
          -
          - -

          To report the latest result details for test runner:


          - - -
          Method Summary
           ad_hoc_result( in_assertion in wt_results . assertion % TYPE , in_status in wt_results . status % TYPE , in_details in wt_results . details % TYPE , in_testcase in wt_results . testcase % TYPE , in_message in wt_results . message % TYPE )
                    
           dbms_out( in_runner_owner in wt_test_runs . runner_owner % TYPE default USER , in_runner_name in wt_test_runs . runner_name % TYPE default null , in_detail_level in number default 0 , in_summary_last in boolean default FALSE )
                     All profiled source lines.
           format_test_result( in_assertion in wt_results . assertion % TYPE , in_status in wt_results . status % TYPE , in_details in wt_results . details % TYPE , in_testcase in wt_results . testcase % TYPE , in_message in wt_results . message % TYPE , in_interval_msecs in wt_results . interval_msecs % TYPE DEFAULT NULL ) return varchar2 ;
                    
          -

          Method Detail
          -

          ad_hoc_result

                    ad_hoc_result( in_assertion in wt_results . assertion % TYPE , in_status in wt_results . status % TYPE , in_details in wt_results . details % TYPE , in_testcase in wt_results . testcase % TYPE , in_message in wt_results . message % TYPE ) 
                    

          -

          dbms_out

                    dbms_out( in_runner_owner in wt_test_runs . runner_owner % TYPE default USER , in_runner_name in wt_test_runs . runner_name % TYPE default null , in_detail_level in number default 0 , in_summary_last in boolean default FALSE ) 
                     All profiled source lines.

          -

          format_test_result

                    format_test_result( in_assertion in wt_results . assertion % TYPE , in_status in wt_results . status % TYPE , in_details in wt_results . details % TYPE , in_testcase in wt_results . testcase % TYPE , in_message in wt_results . message % TYPE , in_interval_msecs in wt_results . interval_msecs % TYPE DEFAULT NULL ) return varchar2 ; 
                    

          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          OWNERWTP
          OBJECT_NAMEWT_TEXT_REPORT
          SUBOBJECT_NAMEnull
          OBJECT_ID41929
          DATA_OBJECT_IDnull
          OBJECT_TYPEPACKAGE
          CREATED29-JUN-2018 15:09:15
          LAST_DDL_TIME29-JUN-2018 15:21:16
          TIMESTAMP2018-06-29:15:21:15
          STATUSVALID
          TEMPORARYN
          GENERATEDN
          SECONDARYN
          NAMESPACE1
          EDITION_NAMEnull
          -
          -
          -
          -
          - - - - - - - - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          EXECUTEPUBLICNOWTPWT_TEXT_REPORT
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          - - - - - - - - - -
          NAMEOWNERTYPEOBJECT_IDSTATUSTYPE_LINK
          -
          -
          -
          -
          -
          -package wt_text_report authid definer
          -as
          -
          -   --   To report the latest result details for test runner:
          -   -- begin
          -   --    wt_text_report.dbms_out('TEST_RUNNER', FALSE, FALSE, TRUE, TRUE);
          -   -- end;
          -   -- /
          -
          -   -- Turn this off to allow output across multiple lines of text
          -   g_single_line_output  boolean := TRUE;
          -
          -   -- DATE data type format for Report Header
          -   g_date_format  varchar2(100) := 'DD-Mon-YYYY HH:MI:SS PM';
          -
          -   function format_test_result
          -      (in_assertion      in wt_results.assertion%TYPE
          -      ,in_status         in wt_results.status%TYPE
          -      ,in_details        in wt_results.details%TYPE
          -      ,in_testcase       in wt_results.testcase%TYPE
          -      ,in_message        in wt_results.message%TYPE
          -      ,in_interval_msecs in wt_results.interval_msecs%TYPE DEFAULT NULL)
          -   return varchar2;
          -
          -   procedure ad_hoc_result
          -      (in_assertion      in wt_results.assertion%TYPE
          -      ,in_status         in wt_results.status%TYPE
          -      ,in_details        in wt_results.details%TYPE
          -      ,in_testcase       in wt_results.testcase%TYPE
          -      ,in_message        in wt_results.message%TYPE);
          -
          ---  "in_detail_level" settings for DBMS_OUT procedure:
          ---  * Less than 10 (including null) - No Detail
          ---     * Assertion results summary.
          ---     * Profiled lines summary.
          ---  * 10 to 19 - Minimal Detail
          ---     * Assertion results summary.
          ---     * Profiled lines summary.
          ---     * Failed assertion result details.
          ---     * Profiled source lines that were "not executed".
          ---  * 20 to 29 - Partial Full Detail
          ---     * Assertion results summary.
          ---     * Profiled lines summary.
          ---     * All assertion result details.
          ---     * Profiled source lines that were "not executed".
          ---  * 30 or more - Full Detail
          ---     * Assertion results summary.
          ---     * Profiled lines summary.
          ---     * All assertion result details.
          ---     * All profiled source lines.
          -
          -   procedure dbms_out
          -      (in_runner_owner   in  wt_test_runs.runner_owner%TYPE default USER
          -      ,in_runner_name    in  wt_test_runs.runner_name%TYPE  default null
          -      ,in_detail_level   in  number                         default 0
          -      ,in_summary_last   in  boolean                        default FALSE);
          -
          -end wt_text_report;
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/package/WT_TEXT_REPORT/headerBg.jpg b/docs/core/DBDocs/package/WT_TEXT_REPORT/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/package/WT_TEXT_REPORT/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_TEXT_REPORT/report.css b/docs/core/DBDocs/package/WT_TEXT_REPORT/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/package/WT_TEXT_REPORT/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/package/WT_TEXT_REPORT/report.js b/docs/core/DBDocs/package/WT_TEXT_REPORT/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/package/WT_TEXT_REPORT/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/package/WT_TEXT_REPORT/topDimTabBg.gif b/docs/core/DBDocs/package/WT_TEXT_REPORT/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/package/WT_TEXT_REPORT/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_TEXT_REPORT/topDimTabL.gif b/docs/core/DBDocs/package/WT_TEXT_REPORT/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/package/WT_TEXT_REPORT/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_TEXT_REPORT/topDimTabR.gif b/docs/core/DBDocs/package/WT_TEXT_REPORT/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/package/WT_TEXT_REPORT/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_TEXT_REPORT/topTabBg.gif b/docs/core/DBDocs/package/WT_TEXT_REPORT/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/package/WT_TEXT_REPORT/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_TEXT_REPORT/topTabL.gif b/docs/core/DBDocs/package/WT_TEXT_REPORT/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/package/WT_TEXT_REPORT/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/WT_TEXT_REPORT/topTabR.gif b/docs/core/DBDocs/package/WT_TEXT_REPORT/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/package/WT_TEXT_REPORT/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/package/index.html b/docs/core/DBDocs/package/index.html deleted file mode 100644 index 06146e0..0000000 --- a/docs/core/DBDocs/package/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -

          Packages -

          \ No newline at end of file diff --git a/docs/core/DBDocs/round_text.png b/docs/core/DBDocs/round_text.png deleted file mode 100644 index fd54f2a..0000000 Binary files a/docs/core/DBDocs/round_text.png and /dev/null differ diff --git a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER.html b/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER.html deleted file mode 100644 index 022482d..0000000 --- a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          CREATED29-JUN-2018 15:09:11
          LAST_DDL_TIME29-JUN-2018 15:21:11
          SEQUENCE_OWNERWTP
          SEQUENCE_NAMEPLSQL_PROFILER_RUNNUMBER
          MIN_VALUE1
          MAX_VALUE9999999999999999999999999999
          INCREMENT_BY1
          CYCLE_FLAGN
          ORDER_FLAGN
          CACHE_SIZE0
          LAST_NUMBER16
          -
          -
          -
          -
          - - - - - - - - - -
          OBJECT_IDOWNEROBJECT_TYPEOBJECT_NAMESTATUSTYPE_LINK
          -
          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/headerBg.jpg b/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/report.css b/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/report.js b/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/topDimTabBg.gif b/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/topDimTabL.gif b/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/topDimTabR.gif b/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/topTabBg.gif b/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/topTabL.gif b/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/topTabR.gif b/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/sequence/PLSQL_PROFILER_RUNNUMBER/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ.html b/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ.html deleted file mode 100644 index 22af5be..0000000 --- a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          CREATED29-JUN-2018 15:09:12
          LAST_DDL_TIME29-JUN-2018 15:21:14
          SEQUENCE_OWNERWTP
          SEQUENCE_NAMEWT_TEST_RUNS_SEQ
          MIN_VALUE1
          MAX_VALUE9999999999999999999999999999
          INCREMENT_BY1
          CYCLE_FLAGN
          ORDER_FLAGN
          CACHE_SIZE20
          LAST_NUMBER41
          -
          -
          -
          -
          - - - - - - - - - -
          OBJECT_IDOWNEROBJECT_TYPEOBJECT_NAMESTATUSTYPE_LINK
          -
          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/headerBg.jpg b/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/report.css b/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/report.js b/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/topDimTabBg.gif b/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/topDimTabL.gif b/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/topDimTabR.gif b/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/topTabBg.gif b/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/topTabL.gif b/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/topTabR.gif b/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/sequence/WT_TEST_RUNS_SEQ/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/sequence/index.html b/docs/core/DBDocs/sequence/index.html deleted file mode 100644 index d5945db..0000000 --- a/docs/core/DBDocs/sequence/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - -

          Sequences -

          \ No newline at end of file diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA.html b/docs/core/DBDocs/table/PLSQL_PROFILER_DATA.html deleted file mode 100644 index 78343f9..0000000 --- a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA.html +++ /dev/null @@ -1,799 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -

          Constraints

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          Statistics

          -
          -
          -
          -
          -

          Triggers

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Partitions

          -
          -
          -
          -
          -

          Indexes

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          COLUMN_NAMEDATA_TYPENULLABLEDATA_DEFAULTCOLUMN_IDCOMMENTS
          RUNIDNUMBERNonull1Primary key, unique (generated) run identifier
          UNIT_NUMBERNUMBERNonull2Primary key, internally generated library unit number
          LINE#NUMBERNonull3Primary key, not null, line number in unit
          TOTAL_OCCURNUMBERYesnull4Number of times line was executed
          TOTAL_TIMENUMBERYesnull5Total time spent executing line in nanoseconds
          MIN_TIMENUMBERYesnull6Minimum execution time for this line in nanoseconds
          MAX_TIMENUMBERYesnull7Maximum execution time for this line in nanoseconds
          SPARE1NUMBERYesnull8Unused
          SPARE2NUMBERYesnull9Unused
          SPARE3NUMBERYesnull10Unused
          SPARE4NUMBERYesnull11Unused
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          CONSTRAINT_NAMECONSTRAINT_TYPESEARCH_CONDITIONR_OWNERR_TABLE_NAMER_CONSTRAINT_NAMEDELETE_RULESTATUSDEFERRABLEVALIDATEDGENERATEDBADRELYLAST_CHANGEINDEX_OWNERINDEX_NAMEINVALIDVIEW_RELATED
          SYS_C0020887Check"LINE#" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDGENERATED NAMEnullnull29-JUN-2018 15:09:11nullnullnullnull
          SYS_C0020888Primary_KeynullnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDGENERATED NAMEnullnull29-JUN-2018 15:09:11nullSYS_C0020888nullnull
          SYS_C0020889Foreign_KeynullWTPPLSQL_PROFILER_UNITSSYS_C0020885NO ACTIONENABLEDNOT DEFERRABLEVALIDATEDGENERATED NAMEnullnull29-JUN-2018 15:09:11nullnullnullnull
          -
          -
          -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          LINE#null
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          RUNID1
          UNIT_NUMBER2
          LINE#3
          -
          -
          -
          -
          - - - - - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          RUNID1
          UNIT_NUMBER2
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          NUM_ROWSnull
          BLOCKSnull
          AVG_ROW_LENnull
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          LAST_ANALYZED_SINCEnull
          -
          -
          -
          -
          -
          -

          Column Statistics

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - -
          TRIGGER_NAMETRIGGER_TYPETRIGGER_OWNERTRIGGERING_EVENTSTATUSTABLE_NAME
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          WTPWT_PROFILERPACKAGE BODYWTPPLSQL_PROFILER_DATATABLE
          -
          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          CREATED29-JUN-2018 15:09:11
          LAST_DDL_TIME29-JUN-2018 15:21:12
          OWNERWTP
          TABLE_NAMEPLSQL_PROFILER_DATA
          TABLESPACE_NAMEUSERS
          CLUSTER_NAMEnull
          IOT_NAMEnull
          STATUSVALID
          PCT_FREE10
          PCT_USEDnull
          INI_TRANS1
          MAX_TRANS255
          INITIAL_EXTENT65536
          NEXT_EXTENT1048576
          MIN_EXTENTS1
          MAX_EXTENTS2147483645
          PCT_INCREASEnull
          FREELISTSnull
          FREELIST_GROUPSnull
          LOGGINGYES
          BACKED_UPN
          NUM_ROWSnull
          BLOCKSnull
          EMPTY_BLOCKSnull
          AVG_SPACEnull
          CHAIN_CNTnull
          AVG_ROW_LENnull
          AVG_SPACE_FREELIST_BLOCKSnull
          NUM_FREELIST_BLOCKSnull
          DEGREE1
          INSTANCES1
          CACHEN
          TABLE_LOCKENABLED
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          PARTITIONEDNO
          IOT_TYPEnull
          OBJECT_ID_TYPEnull
          TABLE_TYPE_OWNERnull
          TABLE_TYPEnull
          TEMPORARYN
          SECONDARYN
          NESTEDNO
          BUFFER_POOLDEFAULT
          ROW_MOVEMENTDISABLED
          GLOBAL_STATSNO
          USER_STATSNO
          DURATIONnull
          SKIP_CORRUPTDISABLED
          MONITORINGYES
          CLUSTER_OWNERnull
          DEPENDENCIESDISABLED
          COMPRESSIONDISABLED
          COMPRESS_FORnull
          DROPPEDNO
          COMMENTSTable of program units for DBMS_PROFILER
          -
          -
          -
          -
          - - - - - - - - - -
          PARTITION_NAMELAST_ANALYZEDNUM_ROWSBLOCKSSAMPLE_SIZEHIGH_VALUE
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMEUNIQUENESSSTATUSINDEX_TYPETEMPORARYPARTITIONEDFUNCIDX_STATUSJOIN_INDEXCOLUMNS
          WTPSYS_C0020888UNIQUEVALIDNORMALNNOnullNORUNID, UNIT_NUMBER, LINE#
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMETABLE_OWNERTABLE_NAMECOLUMN_NAMECOLUMN_POSITIONCOLUMN_LENGTHCHAR_LENGTHDESCENDCOLUMN_EXPRESSION
          WTPSYS_C0020888WTPPLSQL_PROFILER_DATARUNID1220ASCnull
          WTPSYS_C0020888WTPPLSQL_PROFILER_DATAUNIT_NUMBER2220ASCnull
          WTPSYS_C0020888WTPPLSQL_PROFILER_DATALINE#3220ASCnull
          -
          -
          -
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/headerBg.jpg b/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/report.css b/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/report.js b/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/topDimTabBg.gif b/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/topDimTabL.gif b/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/topDimTabR.gif b/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/topTabBg.gif b/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/topTabL.gif b/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/topTabR.gif b/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_DATA/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS.html b/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS.html deleted file mode 100644 index 1f817ae..0000000 --- a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS.html +++ /dev/null @@ -1,722 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -

          Constraints

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          Statistics

          -
          -
          -
          -
          -

          Triggers

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Partitions

          -
          -
          -
          -
          -

          Indexes

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          COLUMN_NAMEDATA_TYPENULLABLEDATA_DEFAULTCOLUMN_IDCOMMENTS
          RUNIDNUMBERNonull1(PRIMARY KEY) Unique run identifier from plsql_profiler_runnumber
          RELATED_RUNNUMBERYesnull2Runid of related run (for client/server correlation)
          RUN_OWNERVARCHAR2(32 BYTE)Yesnull3User who started run
          RUN_DATEDATEYesnull4Start time of run
          RUN_COMMENTVARCHAR2(2047 BYTE)Yesnull5User provided comment for this run
          RUN_TOTAL_TIMENUMBERYesnull6Elapsed time for this run in nanoseconds
          RUN_SYSTEM_INFOVARCHAR2(2047 BYTE)Yesnull7Currently unused
          RUN_COMMENT1VARCHAR2(2047 BYTE)Yesnull8Additional comment
          SPARE1VARCHAR2(256 BYTE)Yesnull9Unused
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          CONSTRAINT_NAMECONSTRAINT_TYPESEARCH_CONDITIONR_OWNERR_TABLE_NAMER_CONSTRAINT_NAMEDELETE_RULESTATUSDEFERRABLEVALIDATEDGENERATEDBADRELYLAST_CHANGEINDEX_OWNERINDEX_NAMEINVALIDVIEW_RELATED
          SYS_C0020883Primary_KeynullnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDGENERATED NAMEnullnull29-JUN-2018 15:09:11nullSYS_C0020883nullnull
          -
          -
          -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          RUNID1
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          NUM_ROWSnull
          BLOCKSnull
          AVG_ROW_LENnull
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          LAST_ANALYZED_SINCEnull
          -
          -
          -
          -
          -
          -

          Column Statistics

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - -
          TRIGGER_NAMETRIGGER_TYPETRIGGER_OWNERTRIGGERING_EVENTSTATUSTABLE_NAME
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          WTPWT_PROFILERPACKAGE BODYWTPPLSQL_PROFILER_RUNSTABLE
          -
          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          CREATED29-JUN-2018 15:09:11
          LAST_DDL_TIME29-JUN-2018 15:21:12
          OWNERWTP
          TABLE_NAMEPLSQL_PROFILER_RUNS
          TABLESPACE_NAMEUSERS
          CLUSTER_NAMEnull
          IOT_NAMEnull
          STATUSVALID
          PCT_FREE10
          PCT_USEDnull
          INI_TRANS1
          MAX_TRANS255
          INITIAL_EXTENT65536
          NEXT_EXTENT1048576
          MIN_EXTENTS1
          MAX_EXTENTS2147483645
          PCT_INCREASEnull
          FREELISTSnull
          FREELIST_GROUPSnull
          LOGGINGYES
          BACKED_UPN
          NUM_ROWSnull
          BLOCKSnull
          EMPTY_BLOCKSnull
          AVG_SPACEnull
          CHAIN_CNTnull
          AVG_ROW_LENnull
          AVG_SPACE_FREELIST_BLOCKSnull
          NUM_FREELIST_BLOCKSnull
          DEGREE1
          INSTANCES1
          CACHEN
          TABLE_LOCKENABLED
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          PARTITIONEDNO
          IOT_TYPEnull
          OBJECT_ID_TYPEnull
          TABLE_TYPE_OWNERnull
          TABLE_TYPEnull
          TEMPORARYN
          SECONDARYN
          NESTEDNO
          BUFFER_POOLDEFAULT
          ROW_MOVEMENTDISABLED
          GLOBAL_STATSNO
          USER_STATSNO
          DURATIONnull
          SKIP_CORRUPTDISABLED
          MONITORINGYES
          CLUSTER_OWNERnull
          DEPENDENCIESDISABLED
          COMPRESSIONDISABLED
          COMPRESS_FORnull
          DROPPEDNO
          COMMENTSTable of profiler runs for DBMS_PROFILER
          -
          -
          -
          -
          - - - - - - - - - -
          PARTITION_NAMELAST_ANALYZEDNUM_ROWSBLOCKSSAMPLE_SIZEHIGH_VALUE
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMEUNIQUENESSSTATUSINDEX_TYPETEMPORARYPARTITIONEDFUNCIDX_STATUSJOIN_INDEXCOLUMNS
          WTPSYS_C0020883UNIQUEVALIDNORMALNNOnullNORUNID
          WTPPLSQL_PROFILER_RUNS_IDX1NONUNIQUEVALIDNORMALNNOnullNORUN_DATE
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMETABLE_OWNERTABLE_NAMECOLUMN_NAMECOLUMN_POSITIONCOLUMN_LENGTHCHAR_LENGTHDESCENDCOLUMN_EXPRESSION
          WTPSYS_C0020883WTPPLSQL_PROFILER_RUNSRUNID1220ASCnull
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMETABLE_OWNERTABLE_NAMECOLUMN_NAMECOLUMN_POSITIONCOLUMN_LENGTHCHAR_LENGTHDESCENDCOLUMN_EXPRESSION
          WTPPLSQL_PROFILER_RUNS_IDX1WTPPLSQL_PROFILER_RUNSRUN_DATE170ASCnull
          -
          -
          -
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/headerBg.jpg b/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/report.css b/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/report.js b/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/topDimTabBg.gif b/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/topDimTabL.gif b/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/topDimTabR.gif b/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/topTabBg.gif b/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/topTabL.gif b/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/topTabR.gif b/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_RUNS/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS.html b/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS.html deleted file mode 100644 index e49a296..0000000 --- a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS.html +++ /dev/null @@ -1,763 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -

          Constraints

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          Statistics

          -
          -
          -
          -
          -

          Triggers

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Partitions

          -
          -
          -
          -
          -

          Indexes

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          COLUMN_NAMEDATA_TYPENULLABLEDATA_DEFAULTCOLUMN_IDCOMMENTS
          RUNIDNUMBERNonull1(Primary key) References plsql_profiler_runs
          UNIT_NUMBERNUMBERNonull2(Primary key) Internally generated library unit #
          UNIT_TYPEVARCHAR2(32 BYTE)Yesnull3Library unit type
          UNIT_OWNERVARCHAR2(32 BYTE)Yesnull4Library unit owner name
          UNIT_NAMEVARCHAR2(32 BYTE)Yesnull5Library unit name timestamp on library unit
          UNIT_TIMESTAMPDATEYesnull6In the future will be used to detect changes to unit between runs
          TOTAL_TIMENUMBERNo7Total time spent in this unit in nanoseconds. The profiler does not set this field, but it is provided for the convenience of analysis tools
          SPARE1NUMBERYesnull8Unused
          SPARE2NUMBERYesnull9Unused
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          CONSTRAINT_NAMECONSTRAINT_TYPESEARCH_CONDITIONR_OWNERR_TABLE_NAMER_CONSTRAINT_NAMEDELETE_RULESTATUSDEFERRABLEVALIDATEDGENERATEDBADRELYLAST_CHANGEINDEX_OWNERINDEX_NAMEINVALIDVIEW_RELATED
          SYS_C0020884Check"TOTAL_TIME" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDGENERATED NAMEnullnull29-JUN-2018 15:09:11nullnullnullnull
          SYS_C0020885Primary_KeynullnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDGENERATED NAMEnullnull29-JUN-2018 15:09:11nullSYS_C0020885nullnull
          SYS_C0020886Foreign_KeynullWTPPLSQL_PROFILER_RUNSSYS_C0020883NO ACTIONENABLEDNOT DEFERRABLEVALIDATEDGENERATED NAMEnullnull29-JUN-2018 15:09:11nullnullnullnull
          -
          -
          -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          TOTAL_TIMEnull
          -
          -
          -
          -
          - - - - - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          RUNID1
          UNIT_NUMBER2
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          RUNID1
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          NUM_ROWSnull
          BLOCKSnull
          AVG_ROW_LENnull
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          LAST_ANALYZED_SINCEnull
          -
          -
          -
          -
          -
          -

          Column Statistics

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - -
          TRIGGER_NAMETRIGGER_TYPETRIGGER_OWNERTRIGGERING_EVENTSTATUSTABLE_NAME
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          WTPWT_PROFILERPACKAGE BODYWTPPLSQL_PROFILER_UNITSTABLE
          -
          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          CREATED29-JUN-2018 15:09:11
          LAST_DDL_TIME29-JUN-2018 15:21:12
          OWNERWTP
          TABLE_NAMEPLSQL_PROFILER_UNITS
          TABLESPACE_NAMEUSERS
          CLUSTER_NAMEnull
          IOT_NAMEnull
          STATUSVALID
          PCT_FREE10
          PCT_USEDnull
          INI_TRANS1
          MAX_TRANS255
          INITIAL_EXTENT65536
          NEXT_EXTENT1048576
          MIN_EXTENTS1
          MAX_EXTENTS2147483645
          PCT_INCREASEnull
          FREELISTSnull
          FREELIST_GROUPSnull
          LOGGINGYES
          BACKED_UPN
          NUM_ROWSnull
          BLOCKSnull
          EMPTY_BLOCKSnull
          AVG_SPACEnull
          CHAIN_CNTnull
          AVG_ROW_LENnull
          AVG_SPACE_FREELIST_BLOCKSnull
          NUM_FREELIST_BLOCKSnull
          DEGREE1
          INSTANCES1
          CACHEN
          TABLE_LOCKENABLED
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          PARTITIONEDNO
          IOT_TYPEnull
          OBJECT_ID_TYPEnull
          TABLE_TYPE_OWNERnull
          TABLE_TYPEnull
          TEMPORARYN
          SECONDARYN
          NESTEDNO
          BUFFER_POOLDEFAULT
          ROW_MOVEMENTDISABLED
          GLOBAL_STATSNO
          USER_STATSNO
          DURATIONnull
          SKIP_CORRUPTDISABLED
          MONITORINGYES
          CLUSTER_OWNERnull
          DEPENDENCIESDISABLED
          COMPRESSIONDISABLED
          COMPRESS_FORnull
          DROPPEDNO
          COMMENTSTable of program units for DBMS_PROFILER
          -
          -
          -
          -
          - - - - - - - - - -
          PARTITION_NAMELAST_ANALYZEDNUM_ROWSBLOCKSSAMPLE_SIZEHIGH_VALUE
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMEUNIQUENESSSTATUSINDEX_TYPETEMPORARYPARTITIONEDFUNCIDX_STATUSJOIN_INDEXCOLUMNS
          WTPSYS_C0020885UNIQUEVALIDNORMALNNOnullNORUNID, UNIT_NUMBER
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMETABLE_OWNERTABLE_NAMECOLUMN_NAMECOLUMN_POSITIONCOLUMN_LENGTHCHAR_LENGTHDESCENDCOLUMN_EXPRESSION
          WTPSYS_C0020885WTPPLSQL_PROFILER_UNITSRUNID1220ASCnull
          WTPSYS_C0020885WTPPLSQL_PROFILER_UNITSUNIT_NUMBER2220ASCnull
          -
          -
          -
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/headerBg.jpg b/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/report.css b/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/report.js b/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/topDimTabBg.gif b/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/topDimTabL.gif b/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/topDimTabR.gif b/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/topTabBg.gif b/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/topTabL.gif b/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/topTabR.gif b/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/table/PLSQL_PROFILER_UNITS/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_DBOUT_PROFILES.html b/docs/core/DBDocs/table/WT_DBOUT_PROFILES.html deleted file mode 100644 index 1b2ce9e..0000000 --- a/docs/core/DBDocs/table/WT_DBOUT_PROFILES.html +++ /dev/null @@ -1,1096 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -

          Constraints

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          Statistics

          -
          -
          -
          -
          -

          Triggers

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Partitions

          -
          -
          -
          -
          -

          Indexes

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          COLUMN_NAMEDATA_TYPENULLABLEDATA_DEFAULTCOLUMN_IDCOMMENTS
          TEST_RUN_IDNUMBER(38,0)Nonull1Foreign Key for the Test Run, Primary Key part 1.
          LINENUMBER(6,0)Nonull2Source code line number, Primary Key part 2.
          STATUSVARCHAR2(4 BYTE)Nonull3Executed/NotExecuted/Excluded/Ignored/Unknown Status from the Profiler
          TOTAL_OCCURNUMBER(9,0)Nonull4Number of times this line was executed.
          TOTAL_USECSNUMBER(9,0)Nonull5Total time in microseconds spent executing this line.
          MIN_USECSNUMBER(9,0)Nonull6Minimum execution time in microseconds for this line.
          MAX_USECSNUMBER(9,0)Nonull7Maximum execution time in microseconds for this line.
          TEXTVARCHAR2(4000 BYTE)Nonull8Source code text for this line number.
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          CONSTRAINT_NAMECONSTRAINT_TYPESEARCH_CONDITIONR_OWNERR_TABLE_NAMER_CONSTRAINT_NAMEDELETE_RULESTATUSDEFERRABLEVALIDATEDGENERATEDBADRELYLAST_CHANGEINDEX_OWNERINDEX_NAMEINVALIDVIEW_RELATED
          WT_DBOUT_PROFILES_CK1Checkstatus in ('EXEC','NOTX','EXCL','IGNR','UNKN')nullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:21:14nullnullnullnull
          WT_DBOUT_PROFILES_FK1Foreign_KeynullWTPWT_TEST_RUNSWT_TEST_RUNS_PKNO ACTIONENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:13nullnullnullnull
          WT_DBOUT_PROFILES_NN1Check"TEST_RUN_ID" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:13nullnullnullnull
          WT_DBOUT_PROFILES_NN2Check"LINE" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:13nullnullnullnull
          WT_DBOUT_PROFILES_NN3Check"STATUS" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:13nullnullnullnull
          WT_DBOUT_PROFILES_NN4Check"TOTAL_OCCUR" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:13nullnullnullnull
          WT_DBOUT_PROFILES_NN5Check"TOTAL_USECS" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:13nullnullnullnull
          WT_DBOUT_PROFILES_NN6Check"MIN_USECS" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:13nullnullnullnull
          WT_DBOUT_PROFILES_NN7Check"MAX_USECS" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:13nullnullnullnull
          WT_DBOUT_PROFILES_NN8Check"TEXT" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:13nullnullnullnull
          WT_DBOUT_PROFILES_PKPrimary_KeynullnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:13nullWT_DBOUT_PROFILES_PKnullnull
          -
          -
          -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          STATUSnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          TEST_RUN_ID1
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          TEST_RUN_IDnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          LINEnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          STATUSnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          TOTAL_OCCURnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          TOTAL_USECSnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          MIN_USECSnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          MAX_USECSnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          TEXTnull
          -
          -
          -
          -
          - - - - - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          TEST_RUN_ID1
          LINE2
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          DELETEPUBLICNOWTPWT_DBOUT_PROFILES
          SELECTPUBLICNOWTPWT_DBOUT_PROFILES
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          NUM_ROWSnull
          BLOCKSnull
          AVG_ROW_LENnull
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          LAST_ANALYZED_SINCEnull
          -
          -
          -
          -
          -
          -

          Column Statistics

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - -
          TRIGGER_NAMETRIGGER_TYPETRIGGER_OWNERTRIGGERING_EVENTSTATUSTABLE_NAME
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          WTPWT_PROFILERPACKAGE BODYWTPWT_DBOUT_PROFILESTABLE
          WTPWT_TEST_RUN_STATPACKAGE BODYWTPWT_DBOUT_PROFILESTABLE
          WTPWT_TEXT_REPORTPACKAGE BODYWTPWT_DBOUT_PROFILESTABLE
          WTPWT_TEST_RUN_STATPACKAGEWTPWT_DBOUT_PROFILESTABLE
          -
          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          CREATED29-JUN-2018 15:09:13
          LAST_DDL_TIME29-JUN-2018 15:21:14
          OWNERWTP
          TABLE_NAMEWT_DBOUT_PROFILES
          TABLESPACE_NAMEUSERS
          CLUSTER_NAMEnull
          IOT_NAMEnull
          STATUSVALID
          PCT_FREE0
          PCT_USEDnull
          INI_TRANS1
          MAX_TRANS255
          INITIAL_EXTENT65536
          NEXT_EXTENT1048576
          MIN_EXTENTS1
          MAX_EXTENTS2147483645
          PCT_INCREASEnull
          FREELISTSnull
          FREELIST_GROUPSnull
          LOGGINGYES
          BACKED_UPN
          NUM_ROWSnull
          BLOCKSnull
          EMPTY_BLOCKSnull
          AVG_SPACEnull
          CHAIN_CNTnull
          AVG_ROW_LENnull
          AVG_SPACE_FREELIST_BLOCKSnull
          NUM_FREELIST_BLOCKSnull
          DEGREE1
          INSTANCES1
          CACHEN
          TABLE_LOCKENABLED
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          PARTITIONEDNO
          IOT_TYPEnull
          OBJECT_ID_TYPEnull
          TABLE_TYPE_OWNERnull
          TABLE_TYPEnull
          TEMPORARYN
          SECONDARYN
          NESTEDNO
          BUFFER_POOLDEFAULT
          ROW_MOVEMENTDISABLED
          GLOBAL_STATSNO
          USER_STATSNO
          DURATIONnull
          SKIP_CORRUPTDISABLED
          MONITORINGYES
          CLUSTER_OWNERnull
          DEPENDENCIESDISABLED
          COMPRESSIONDISABLED
          COMPRESS_FORnull
          DROPPEDNO
          COMMENTSPL/SQL Profiler data for Database Object Under Test (DBOUT).
          -
          -
          -
          -
          - - - - - - - - - -
          PARTITION_NAMELAST_ANALYZEDNUM_ROWSBLOCKSSAMPLE_SIZEHIGH_VALUE
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMEUNIQUENESSSTATUSINDEX_TYPETEMPORARYPARTITIONEDFUNCIDX_STATUSJOIN_INDEXCOLUMNS
          WTPWT_DBOUT_PROFILES_PKUNIQUEVALIDNORMALNNOnullNOTEST_RUN_ID, LINE
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMETABLE_OWNERTABLE_NAMECOLUMN_NAMECOLUMN_POSITIONCOLUMN_LENGTHCHAR_LENGTHDESCENDCOLUMN_EXPRESSION
          WTPWT_DBOUT_PROFILES_PKWTPWT_DBOUT_PROFILESTEST_RUN_ID1220ASCnull
          WTPWT_DBOUT_PROFILES_PKWTPWT_DBOUT_PROFILESLINE2220ASCnull
          -
          -
          -
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/table/WT_DBOUT_PROFILES/headerBg.jpg b/docs/core/DBDocs/table/WT_DBOUT_PROFILES/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/table/WT_DBOUT_PROFILES/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_DBOUT_PROFILES/report.css b/docs/core/DBDocs/table/WT_DBOUT_PROFILES/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/table/WT_DBOUT_PROFILES/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/table/WT_DBOUT_PROFILES/report.js b/docs/core/DBDocs/table/WT_DBOUT_PROFILES/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/table/WT_DBOUT_PROFILES/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/table/WT_DBOUT_PROFILES/topDimTabBg.gif b/docs/core/DBDocs/table/WT_DBOUT_PROFILES/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/table/WT_DBOUT_PROFILES/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_DBOUT_PROFILES/topDimTabL.gif b/docs/core/DBDocs/table/WT_DBOUT_PROFILES/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/table/WT_DBOUT_PROFILES/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_DBOUT_PROFILES/topDimTabR.gif b/docs/core/DBDocs/table/WT_DBOUT_PROFILES/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/table/WT_DBOUT_PROFILES/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_DBOUT_PROFILES/topTabBg.gif b/docs/core/DBDocs/table/WT_DBOUT_PROFILES/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/table/WT_DBOUT_PROFILES/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_DBOUT_PROFILES/topTabL.gif b/docs/core/DBDocs/table/WT_DBOUT_PROFILES/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/table/WT_DBOUT_PROFILES/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_DBOUT_PROFILES/topTabR.gif b/docs/core/DBDocs/table/WT_DBOUT_PROFILES/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/table/WT_DBOUT_PROFILES/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_RESULTS.html b/docs/core/DBDocs/table/WT_RESULTS.html deleted file mode 100644 index babf78f..0000000 --- a/docs/core/DBDocs/table/WT_RESULTS.html +++ /dev/null @@ -1,1155 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -

          Constraints

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          Statistics

          -
          -
          -
          -
          -

          Triggers

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Partitions

          -
          -
          -
          -
          -

          Indexes

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          COLUMN_NAMEDATA_TYPENULLABLEDATA_DEFAULTCOLUMN_IDCOMMENTS
          TEST_RUN_IDNUMBER(38,0)Nonull1Foreign Key for the Test Run, Primary Key part 1.
          RESULT_SEQNUMBER(8,0)Nonull2Sequence number for this Result, Primary Key part 2.
          EXECUTED_DTMTIMESTAMP(6)Nonull3Date/Time (with Fractional Seconds) this Result was captured
          INTERVAL_MSECSNUMBER(10,3)Nonull4Interval time in milliseonds since the previous Result or start ot the Test Run.
          ASSERTIONVARCHAR2(15 BYTE)Nonull5Name of the Assertion Test performed
          STATUSVARCHAR2(4 BYTE)Nonull6Passed/Failed Status from the Assertion
          DETAILSVARCHAR2(4000 BYTE)Nonull7Assertion Details, i.e. Expected Value and Actual Value
          TESTCASEVARCHAR2(50 BYTE)Yesnull8Optional Test Case name.
          MESSAGEVARCHAR2(200 BYTE)Yesnull9Optional test identifier that helps connect an Assertion to the Test Runner.
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          CONSTRAINT_NAMECONSTRAINT_TYPESEARCH_CONDITIONR_OWNERR_TABLE_NAMER_CONSTRAINT_NAMEDELETE_RULESTATUSDEFERRABLEVALIDATEDGENERATEDBADRELYLAST_CHANGEINDEX_OWNERINDEX_NAMEINVALIDVIEW_RELATED
          WT_RESULTS_CK1Checkstatus in ('PASS','FAIL')nullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:12nullnullnullnull
          WT_RESULTS_FK1Foreign_KeynullWTPWT_TEST_RUNSWT_TEST_RUNS_PKNO ACTIONENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:12nullnullnullnull
          WT_RESULTS_NN2Check"TEST_RUN_ID" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:12nullnullnullnull
          WT_RESULTS_NN3Check"RESULT_SEQ" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:12nullnullnullnull
          WT_RESULTS_NN4Check"EXECUTED_DTM" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:12nullnullnullnull
          WT_RESULTS_NN5Check"INTERVAL_MSECS" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:12nullnullnullnull
          WT_RESULTS_NN6Check"ASSERTION" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:12nullnullnullnull
          WT_RESULTS_NN7Check"STATUS" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:12nullnullnullnull
          WT_RESULTS_NN8Check"DETAILS" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:12nullnullnullnull
          WT_RESULTS_PKPrimary_KeynullnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:12nullWT_RESULTS_PKnullnull
          -
          -
          -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          STATUSnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          TEST_RUN_ID1
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          TEST_RUN_IDnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          RESULT_SEQnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          EXECUTED_DTMnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          INTERVAL_MSECSnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          ASSERTIONnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          STATUSnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          DETAILSnull
          -
          -
          -
          -
          - - - - - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          TEST_RUN_ID1
          RESULT_SEQ2
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          DELETEPUBLICNOWTPWT_RESULTS
          SELECTPUBLICNOWTPWT_RESULTS
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          NUM_ROWSnull
          BLOCKSnull
          AVG_ROW_LENnull
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          LAST_ANALYZED_SINCEnull
          -
          -
          -
          -
          -
          -

          Column Statistics

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - -
          TRIGGER_NAMETRIGGER_TYPETRIGGER_OWNERTRIGGERING_EVENTSTATUSTABLE_NAME
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          WTPWT_RESULTPACKAGE BODYWTPWT_RESULTSTABLE
          WTPWT_ASSERTPACKAGE BODYWTPWT_RESULTSTABLE
          WTPWT_TEST_RUN_STATPACKAGE BODYWTPWT_RESULTSTABLE
          WTPWT_TEXT_REPORTPACKAGE BODYWTPWT_RESULTSTABLE
          WTPWT_ASSERTPACKAGEWTPWT_RESULTSTABLE
          WTPWT_TEST_RUN_STATPACKAGEWTPWT_RESULTSTABLE
          WTPWT_TEXT_REPORTPACKAGEWTPWT_RESULTSTABLE
          WTPWT_RESULTPACKAGEWTPWT_RESULTSTABLE
          -
          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          CREATED29-JUN-2018 15:09:12
          LAST_DDL_TIME29-JUN-2018 15:21:14
          OWNERWTP
          TABLE_NAMEWT_RESULTS
          TABLESPACE_NAMEUSERS
          CLUSTER_NAMEnull
          IOT_NAMEnull
          STATUSVALID
          PCT_FREE0
          PCT_USEDnull
          INI_TRANS1
          MAX_TRANS255
          INITIAL_EXTENT65536
          NEXT_EXTENT1048576
          MIN_EXTENTS1
          MAX_EXTENTS2147483645
          PCT_INCREASEnull
          FREELISTSnull
          FREELIST_GROUPSnull
          LOGGINGYES
          BACKED_UPN
          NUM_ROWSnull
          BLOCKSnull
          EMPTY_BLOCKSnull
          AVG_SPACEnull
          CHAIN_CNTnull
          AVG_ROW_LENnull
          AVG_SPACE_FREELIST_BLOCKSnull
          NUM_FREELIST_BLOCKSnull
          DEGREE1
          INSTANCES1
          CACHEN
          TABLE_LOCKENABLED
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          PARTITIONEDNO
          IOT_TYPEnull
          OBJECT_ID_TYPEnull
          TABLE_TYPE_OWNERnull
          TABLE_TYPEnull
          TEMPORARYN
          SECONDARYN
          NESTEDNO
          BUFFER_POOLDEFAULT
          ROW_MOVEMENTDISABLED
          GLOBAL_STATSNO
          USER_STATSNO
          DURATIONnull
          SKIP_CORRUPTDISABLED
          MONITORINGYES
          CLUSTER_OWNERnull
          DEPENDENCIESDISABLED
          COMPRESSIONDISABLED
          COMPRESS_FORnull
          DROPPEDNO
          COMMENTSResults data from Test Runs.
          -
          -
          -
          -
          - - - - - - - - - -
          PARTITION_NAMELAST_ANALYZEDNUM_ROWSBLOCKSSAMPLE_SIZEHIGH_VALUE
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMEUNIQUENESSSTATUSINDEX_TYPETEMPORARYPARTITIONEDFUNCIDX_STATUSJOIN_INDEXCOLUMNS
          WTPWT_RESULTS_PKUNIQUEVALIDNORMALNNOnullNOTEST_RUN_ID, RESULT_SEQ
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMETABLE_OWNERTABLE_NAMECOLUMN_NAMECOLUMN_POSITIONCOLUMN_LENGTHCHAR_LENGTHDESCENDCOLUMN_EXPRESSION
          WTPWT_RESULTS_PKWTPWT_RESULTSTEST_RUN_ID1220ASCnull
          WTPWT_RESULTS_PKWTPWT_RESULTSRESULT_SEQ2220ASCnull
          -
          -
          -
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/table/WT_RESULTS/headerBg.jpg b/docs/core/DBDocs/table/WT_RESULTS/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/table/WT_RESULTS/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_RESULTS/report.css b/docs/core/DBDocs/table/WT_RESULTS/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/table/WT_RESULTS/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/table/WT_RESULTS/report.js b/docs/core/DBDocs/table/WT_RESULTS/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/table/WT_RESULTS/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/table/WT_RESULTS/topDimTabBg.gif b/docs/core/DBDocs/table/WT_RESULTS/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/table/WT_RESULTS/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_RESULTS/topDimTabL.gif b/docs/core/DBDocs/table/WT_RESULTS/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/table/WT_RESULTS/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_RESULTS/topDimTabR.gif b/docs/core/DBDocs/table/WT_RESULTS/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/table/WT_RESULTS/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_RESULTS/topTabBg.gif b/docs/core/DBDocs/table/WT_RESULTS/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/table/WT_RESULTS/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_RESULTS/topTabL.gif b/docs/core/DBDocs/table/WT_RESULTS/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/table/WT_RESULTS/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_RESULTS/topTabR.gif b/docs/core/DBDocs/table/WT_RESULTS/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/table/WT_RESULTS/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_SELF_TEST.html b/docs/core/DBDocs/table/WT_SELF_TEST.html deleted file mode 100644 index fa9760c..0000000 --- a/docs/core/DBDocs/table/WT_SELF_TEST.html +++ /dev/null @@ -1,739 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -

          Constraints

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          Statistics

          -
          -
          -
          -
          -

          Triggers

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Partitions

          -
          -
          -
          -
          -

          Indexes

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          COLUMN_NAMEDATA_TYPENULLABLEDATA_DEFAULTCOLUMN_IDCOMMENTS
          IDNUMBERNonull1Primary Key
          TEMP_CLOBCLOBYesnull2CLOB test data
          TEMP_NCLOBNCLOBYesnull3NCLOB test data
          TEMP_XMLXMLTYPEYesnull4XML test data
          TEMP_BLOBBLOBYesnull5BLOB test data
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          CONSTRAINT_NAMECONSTRAINT_TYPESEARCH_CONDITIONR_OWNERR_TABLE_NAMER_CONSTRAINT_NAMEDELETE_RULESTATUSDEFERRABLEVALIDATEDGENERATEDBADRELYLAST_CHANGEINDEX_OWNERINDEX_NAMEINVALIDVIEW_RELATED
          WT_SELF_TEST_PKPrimary_KeynullnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:21:13nullWT_SELF_TEST_PKnullnull
          -
          -
          -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          ID1
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          NUM_ROWSnull
          BLOCKSnull
          AVG_ROW_LENnull
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          LAST_ANALYZED_SINCEnull
          -
          -
          -
          -
          -
          -

          Column Statistics

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - -
          TRIGGER_NAMETRIGGER_TYPETRIGGER_OWNERTRIGGERING_EVENTSTATUSTABLE_NAME
          WT_SELF_TEST$TESTBEFORE EACH ROWWTPINSERTENABLEDWT_SELF_TEST
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -trigger wt_self_test$test
          -   before insert on wt_self_test
          -   for each row
          -declare
          -   l_junk  number;
          -begin
          -   l_junk := 1;
          -end;
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          WTPWT_ASSERTPACKAGE BODYWTPWT_SELF_TESTTABLE
          WTPWT_SELF_TEST$TESTTRIGGERWTPWT_SELF_TESTTABLE
          -
          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          WTPWT_SELF_TESTTABLESYSXMLTYPETYPE
          WTPWT_SELF_TESTTABLESYSSTANDARDPACKAGE
          WTPWT_SELF_TESTTABLEPUBLICXMLTYPESYNONYM
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          WTPWT_SELF_TESTTABLESYSXMLTYPETYPE
          WTPWT_SELF_TESTTABLESYSSTANDARDPACKAGE
          WTPWT_SELF_TESTTABLEPUBLICXMLTYPESYNONYM
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          CREATED29-JUN-2018 15:21:13
          LAST_DDL_TIME29-JUN-2018 15:21:13
          OWNERWTP
          TABLE_NAMEWT_SELF_TEST
          TABLESPACE_NAMEUSERS
          CLUSTER_NAMEnull
          IOT_NAMEnull
          STATUSVALID
          PCT_FREE10
          PCT_USEDnull
          INI_TRANS1
          MAX_TRANS255
          INITIAL_EXTENT65536
          NEXT_EXTENT1048576
          MIN_EXTENTS1
          MAX_EXTENTS2147483645
          PCT_INCREASEnull
          FREELISTSnull
          FREELIST_GROUPSnull
          LOGGINGYES
          BACKED_UPN
          NUM_ROWSnull
          BLOCKSnull
          EMPTY_BLOCKSnull
          AVG_SPACEnull
          CHAIN_CNTnull
          AVG_ROW_LENnull
          AVG_SPACE_FREELIST_BLOCKSnull
          NUM_FREELIST_BLOCKSnull
          DEGREE1
          INSTANCES1
          CACHEN
          TABLE_LOCKENABLED
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          PARTITIONEDNO
          IOT_TYPEnull
          OBJECT_ID_TYPEnull
          TABLE_TYPE_OWNERnull
          TABLE_TYPEnull
          TEMPORARYN
          SECONDARYN
          NESTEDNO
          BUFFER_POOLDEFAULT
          ROW_MOVEMENTDISABLED
          GLOBAL_STATSNO
          USER_STATSNO
          DURATIONnull
          SKIP_CORRUPTDISABLED
          MONITORINGYES
          CLUSTER_OWNERnull
          DEPENDENCIESDISABLED
          COMPRESSIONDISABLED
          COMPRESS_FORnull
          DROPPEDNO
          COMMENTSTest Data for unit testing of WTPLSQL.
          -
          -
          -
          -
          - - - - - - - - - -
          PARTITION_NAMELAST_ANALYZEDNUM_ROWSBLOCKSSAMPLE_SIZEHIGH_VALUE
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMEUNIQUENESSSTATUSINDEX_TYPETEMPORARYPARTITIONEDFUNCIDX_STATUSJOIN_INDEXCOLUMNS
          WTPWT_SELF_TEST_PKUNIQUEVALIDNORMALNNOnullNOID
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMETABLE_OWNERTABLE_NAMECOLUMN_NAMECOLUMN_POSITIONCOLUMN_LENGTHCHAR_LENGTHDESCENDCOLUMN_EXPRESSION
          WTPWT_SELF_TEST_PKWTPWT_SELF_TESTID1220ASCnull
          -
          -
          -
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/table/WT_SELF_TEST/headerBg.jpg b/docs/core/DBDocs/table/WT_SELF_TEST/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/table/WT_SELF_TEST/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_SELF_TEST/report.css b/docs/core/DBDocs/table/WT_SELF_TEST/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/table/WT_SELF_TEST/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/table/WT_SELF_TEST/report.js b/docs/core/DBDocs/table/WT_SELF_TEST/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/table/WT_SELF_TEST/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/table/WT_SELF_TEST/topDimTabBg.gif b/docs/core/DBDocs/table/WT_SELF_TEST/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/table/WT_SELF_TEST/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_SELF_TEST/topDimTabL.gif b/docs/core/DBDocs/table/WT_SELF_TEST/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/table/WT_SELF_TEST/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_SELF_TEST/topDimTabR.gif b/docs/core/DBDocs/table/WT_SELF_TEST/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/table/WT_SELF_TEST/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_SELF_TEST/topTabBg.gif b/docs/core/DBDocs/table/WT_SELF_TEST/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/table/WT_SELF_TEST/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_SELF_TEST/topTabL.gif b/docs/core/DBDocs/table/WT_SELF_TEST/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/table/WT_SELF_TEST/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_SELF_TEST/topTabR.gif b/docs/core/DBDocs/table/WT_SELF_TEST/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/table/WT_SELF_TEST/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TESTCASE_STATS.html b/docs/core/DBDocs/table/WT_TESTCASE_STATS.html deleted file mode 100644 index fdc8e9c..0000000 --- a/docs/core/DBDocs/table/WT_TESTCASE_STATS.html +++ /dev/null @@ -1,826 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -

          Constraints

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          Statistics

          -
          -
          -
          -
          -

          Triggers

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Partitions

          -
          -
          -
          -
          -

          Indexes

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          COLUMN_NAMEDATA_TYPENULLABLEDATA_DEFAULTCOLUMN_IDCOMMENTS
          TEST_RUN_IDNUMBER(38,0)Nonull1Primary (Surrogate) Key for each Test Run. Also the Test Runs Foreign Key.
          TESTCASEVARCHAR2(50 BYTE)Nonull2Primary Key (part 2). The testcase name
          TEST_YIELDNUMBERYesnull3Ratio of successful assertions to total assertions.
          ASSERTSNUMBERYesnull4Total number of assetions for the testcase.
          PASSESNUMBERYesnull5Number of passed assertions for the testcase.
          FAILURESNUMBERYesnull6Number of failed assertions for the testcase.
          ERRORSNUMBERYesnull7Number of errored assertions for the testcase.
          MIN_INTERVAL_MSECSNUMBERYesnull8Minimum interval time between assertions in milliseconds for the testcase
          AVG_INTERVAL_MSECSNUMBERYesnull9Average interval time between assertions in milliseconds for the testcase
          MAX_INTERVAL_MSECSNUMBERYesnull10Maximum interval time between assertions in milliseconds for the testcase
          TOT_INTERVAL_MSECSNUMBERYesnull11Total (sum) of interval times between assertions in milliseconds for the testcase
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          CONSTRAINT_NAMECONSTRAINT_TYPESEARCH_CONDITIONR_OWNERR_TABLE_NAMER_CONSTRAINT_NAMEDELETE_RULESTATUSDEFERRABLEVALIDATEDGENERATEDBADRELYLAST_CHANGEINDEX_OWNERINDEX_NAMEINVALIDVIEW_RELATED
          WT_TESTCASE_STATS_FK1Foreign_KeynullWTPWT_TEST_RUNSWT_TEST_RUNS_PKNO ACTIONENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:21:12nullnullnullnull
          WT_TESTCASE_STATS_NN1Check"TEST_RUN_ID" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:21:12nullnullnullnull
          WT_TESTCASE_STATS_NN2Check"TESTCASE" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:21:12nullnullnullnull
          WT_TESTCASE_STATS_PKPrimary_KeynullnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:21:12nullWT_TESTCASE_STATS_PKnullnull
          -
          -
          -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          TEST_RUN_ID1
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          TEST_RUN_IDnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          TESTCASEnull
          -
          -
          -
          -
          - - - - - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          TEST_RUN_ID1
          TESTCASE2
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          DELETEPUBLICNOWTPWT_TESTCASE_STATS
          SELECTPUBLICNOWTPWT_TESTCASE_STATS
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          NUM_ROWSnull
          BLOCKSnull
          AVG_ROW_LENnull
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          LAST_ANALYZED_SINCEnull
          -
          -
          -
          -
          -
          -

          Column Statistics

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - -
          TRIGGER_NAMETRIGGER_TYPETRIGGER_OWNERTRIGGERING_EVENTSTATUSTABLE_NAME
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          WTPWT_TEST_RUN_STATPACKAGE BODYWTPWT_TESTCASE_STATSTABLE
          -
          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          CREATED29-JUN-2018 15:21:12
          LAST_DDL_TIME29-JUN-2018 15:21:12
          OWNERWTP
          TABLE_NAMEWT_TESTCASE_STATS
          TABLESPACE_NAMEUSERS
          CLUSTER_NAMEnull
          IOT_NAMEnull
          STATUSVALID
          PCT_FREE0
          PCT_USEDnull
          INI_TRANS1
          MAX_TRANS255
          INITIAL_EXTENT65536
          NEXT_EXTENT1048576
          MIN_EXTENTS1
          MAX_EXTENTS2147483645
          PCT_INCREASEnull
          FREELISTSnull
          FREELIST_GROUPSnull
          LOGGINGYES
          BACKED_UPN
          NUM_ROWSnull
          BLOCKSnull
          EMPTY_BLOCKSnull
          AVG_SPACEnull
          CHAIN_CNTnull
          AVG_ROW_LENnull
          AVG_SPACE_FREELIST_BLOCKSnull
          NUM_FREELIST_BLOCKSnull
          DEGREE1
          INSTANCES1
          CACHEN
          TABLE_LOCKENABLED
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          PARTITIONEDNO
          IOT_TYPEnull
          OBJECT_ID_TYPEnull
          TABLE_TYPE_OWNERnull
          TABLE_TYPEnull
          TEMPORARYN
          SECONDARYN
          NESTEDNO
          BUFFER_POOLDEFAULT
          ROW_MOVEMENTDISABLED
          GLOBAL_STATSNO
          USER_STATSNO
          DURATIONnull
          SKIP_CORRUPTDISABLED
          MONITORINGYES
          CLUSTER_OWNERnull
          DEPENDENCIESDISABLED
          COMPRESSIONDISABLED
          COMPRESS_FORnull
          DROPPEDNO
          COMMENTSTest Run data statistics for each testcase in the execution of the WTPLSQL_RUN procedure.
          -
          -
          -
          -
          - - - - - - - - - -
          PARTITION_NAMELAST_ANALYZEDNUM_ROWSBLOCKSSAMPLE_SIZEHIGH_VALUE
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMEUNIQUENESSSTATUSINDEX_TYPETEMPORARYPARTITIONEDFUNCIDX_STATUSJOIN_INDEXCOLUMNS
          WTPWT_TESTCASE_STATS_PKUNIQUEVALIDNORMALNNOnullNOTEST_RUN_ID, TESTCASE
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMETABLE_OWNERTABLE_NAMECOLUMN_NAMECOLUMN_POSITIONCOLUMN_LENGTHCHAR_LENGTHDESCENDCOLUMN_EXPRESSION
          WTPWT_TESTCASE_STATS_PKWTPWT_TESTCASE_STATSTEST_RUN_ID1220ASCnull
          WTPWT_TESTCASE_STATS_PKWTPWT_TESTCASE_STATSTESTCASE25050ASCnull
          -
          -
          -
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/table/WT_TESTCASE_STATS/headerBg.jpg b/docs/core/DBDocs/table/WT_TESTCASE_STATS/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/table/WT_TESTCASE_STATS/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TESTCASE_STATS/report.css b/docs/core/DBDocs/table/WT_TESTCASE_STATS/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/table/WT_TESTCASE_STATS/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/table/WT_TESTCASE_STATS/report.js b/docs/core/DBDocs/table/WT_TESTCASE_STATS/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/table/WT_TESTCASE_STATS/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/table/WT_TESTCASE_STATS/topDimTabBg.gif b/docs/core/DBDocs/table/WT_TESTCASE_STATS/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/table/WT_TESTCASE_STATS/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TESTCASE_STATS/topDimTabL.gif b/docs/core/DBDocs/table/WT_TESTCASE_STATS/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/table/WT_TESTCASE_STATS/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TESTCASE_STATS/topDimTabR.gif b/docs/core/DBDocs/table/WT_TESTCASE_STATS/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/table/WT_TESTCASE_STATS/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TESTCASE_STATS/topTabBg.gif b/docs/core/DBDocs/table/WT_TESTCASE_STATS/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/table/WT_TESTCASE_STATS/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TESTCASE_STATS/topTabL.gif b/docs/core/DBDocs/table/WT_TESTCASE_STATS/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/table/WT_TESTCASE_STATS/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TESTCASE_STATS/topTabR.gif b/docs/core/DBDocs/table/WT_TESTCASE_STATS/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/table/WT_TESTCASE_STATS/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TEST_RUNS.html b/docs/core/DBDocs/table/WT_TEST_RUNS.html deleted file mode 100644 index 7dd7b30..0000000 --- a/docs/core/DBDocs/table/WT_TEST_RUNS.html +++ /dev/null @@ -1,1156 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -

          Constraints

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          Statistics

          -
          -
          -
          -
          -

          Triggers

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Partitions

          -
          -
          -
          -
          -

          Indexes

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          COLUMN_NAMEDATA_TYPENULLABLEDATA_DEFAULTCOLUMN_IDCOMMENTS
          IDNUMBER(38,0)Nonull1Primary (Surrogate) Key for each Test Run
          START_DTMTIMESTAMP(6)Nonull2Date/time (and fractional seconds) this Test Run started. Natural Key 1 part 1
          RUNNER_NAMEVARCHAR2(128 BYTE)Nonull3Name of the package with the WTPLSQL_RUN procedure. Natural Key 1 part 2
          RUNNER_OWNERVARCHAR2(128 BYTE)Nonull4Owner of the package with the WTPLSQL_RUN procedure. Natural Key 2 part 3
          DBOUT_OWNERVARCHAR2(128 BYTE)Yesnull5Optional Owner of the Database Object Under Test (DBOUT).
          DBOUT_NAMEVARCHAR2(128 BYTE)Yesnull6Optional Name of the Database Object Under Test (DBOUT).
          DBOUT_TYPEVARCHAR2(20 BYTE)Yesnull7Optional Type of the Database Object Under Test (DBOUT).
          TRIGGER_OFFSETNUMBERYesnull8Optional calculated offset from start of Trigger Source to start of Trigger PL/SQL Block.
          PROFILER_RUNIDNUMBERYesnull9Optional DBMS_PROFILER unique run identifier from plsql_profiler_runnumber sequence
          END_DTMTIMESTAMP(6)Yesnull10Date/time (and fractional seconds) this Test Run ended.
          ERROR_MESSAGEVARCHAR2(4000 BYTE)Yesnull11Optional Last error messages from this Test Run.
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          CONSTRAINT_NAMECONSTRAINT_TYPESEARCH_CONDITIONR_OWNERR_TABLE_NAMER_CONSTRAINT_NAMEDELETE_RULESTATUSDEFERRABLEVALIDATEDGENERATEDBADRELYLAST_CHANGEINDEX_OWNERINDEX_NAMEINVALIDVIEW_RELATED
          WT_TEST_RUNS_FK1Foreign_KeynullWTPPLSQL_PROFILER_RUNSSYS_C0020883NO ACTIONDISABLEDNOT DEFERRABLENOT VALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:12nullnullnullnull
          WT_TEST_RUNS_NK1UniquenullnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:12nullWT_TEST_RUNS_NK1nullnull
          WT_TEST_RUNS_NN1Check"ID" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:12nullnullnullnull
          WT_TEST_RUNS_NN2Check"START_DTM" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:12nullnullnullnull
          WT_TEST_RUNS_NN3Check"RUNNER_NAME" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:12nullnullnullnull
          WT_TEST_RUNS_NN4Check"RUNNER_OWNER" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:12nullnullnullnull
          WT_TEST_RUNS_PKPrimary_KeynullnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:09:12nullWT_TEST_RUNS_PKnullnull
          -
          -
          -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          PROFILER_RUNID1
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          START_DTM1
          RUNNER_NAME2
          RUNNER_OWNER3
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          IDnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          START_DTMnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          RUNNER_NAMEnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          RUNNER_OWNERnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          ID1
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          DELETEPUBLICNOWTPWT_TEST_RUNS
          INSERTPUBLICNOWTPWT_TEST_RUNS
          SELECTPUBLICNOWTPWT_TEST_RUNS
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          NUM_ROWSnull
          BLOCKSnull
          AVG_ROW_LENnull
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          LAST_ANALYZED_SINCEnull
          -
          -
          -
          -
          -
          -

          Column Statistics

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - -
          TRIGGER_NAMETRIGGER_TYPETRIGGER_OWNERTRIGGERING_EVENTSTATUSTABLE_NAME
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          WTPWT_RESULTPACKAGE BODYWTPWT_TEST_RUNSTABLE
          WTPWT_PROFILERPACKAGE BODYWTPWT_TEST_RUNSTABLE
          WTPWT_TEXT_REPORTPACKAGE BODYWTPWT_TEST_RUNSTABLE
          PUBLICWT_TEST_RUNSSYNONYMWTPWT_TEST_RUNSTABLE
          WTPWTPLSQLPACKAGE BODYWTPWT_TEST_RUNSTABLE
          WTPWT_RESULTPACKAGEWTPWT_TEST_RUNSTABLE
          WTPWT_TEXT_REPORTPACKAGEWTPWT_TEST_RUNSTABLE
          -
          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          CREATED29-JUN-2018 15:09:12
          LAST_DDL_TIME29-JUN-2018 15:09:12
          OWNERWTP
          TABLE_NAMEWT_TEST_RUNS
          TABLESPACE_NAMEUSERS
          CLUSTER_NAMEnull
          IOT_NAMEnull
          STATUSVALID
          PCT_FREE0
          PCT_USEDnull
          INI_TRANS1
          MAX_TRANS255
          INITIAL_EXTENT65536
          NEXT_EXTENT1048576
          MIN_EXTENTS1
          MAX_EXTENTS2147483645
          PCT_INCREASEnull
          FREELISTSnull
          FREELIST_GROUPSnull
          LOGGINGYES
          BACKED_UPN
          NUM_ROWSnull
          BLOCKSnull
          EMPTY_BLOCKSnull
          AVG_SPACEnull
          CHAIN_CNTnull
          AVG_ROW_LENnull
          AVG_SPACE_FREELIST_BLOCKSnull
          NUM_FREELIST_BLOCKSnull
          DEGREE1
          INSTANCES1
          CACHEN
          TABLE_LOCKENABLED
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          PARTITIONEDNO
          IOT_TYPEnull
          OBJECT_ID_TYPEnull
          TABLE_TYPE_OWNERnull
          TABLE_TYPEnull
          TEMPORARYN
          SECONDARYN
          NESTEDNO
          BUFFER_POOLDEFAULT
          ROW_MOVEMENTDISABLED
          GLOBAL_STATSNO
          USER_STATSNO
          DURATIONnull
          SKIP_CORRUPTDISABLED
          MONITORINGYES
          CLUSTER_OWNERnull
          DEPENDENCIESDISABLED
          COMPRESSIONDISABLED
          COMPRESS_FORnull
          DROPPEDNO
          COMMENTSTest Run data for each execution of the WTPLSQL_RUN procedure.
          -
          -
          -
          -
          - - - - - - - - - -
          PARTITION_NAMELAST_ANALYZEDNUM_ROWSBLOCKSSAMPLE_SIZEHIGH_VALUE
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMEUNIQUENESSSTATUSINDEX_TYPETEMPORARYPARTITIONEDFUNCIDX_STATUSJOIN_INDEXCOLUMNS
          WTPWT_TEST_RUNS_PKUNIQUEVALIDNORMALNNOnullNOID
          WTPWT_TEST_RUNS_NK1UNIQUEVALIDNORMALNNOnullNOSTART_DTM, RUNNER_NAME, RUNNER_OWNER
          WTPWT_TEST_RUNS_IDX1NONUNIQUEVALIDNORMALNNOnullNOSTART_DTM
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMETABLE_OWNERTABLE_NAMECOLUMN_NAMECOLUMN_POSITIONCOLUMN_LENGTHCHAR_LENGTHDESCENDCOLUMN_EXPRESSION
          WTPWT_TEST_RUNS_PKWTPWT_TEST_RUNSID1220ASCnull
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMETABLE_OWNERTABLE_NAMECOLUMN_NAMECOLUMN_POSITIONCOLUMN_LENGTHCHAR_LENGTHDESCENDCOLUMN_EXPRESSION
          WTPWT_TEST_RUNS_NK1WTPWT_TEST_RUNSSTART_DTM1110ASCnull
          WTPWT_TEST_RUNS_NK1WTPWT_TEST_RUNSRUNNER_NAME2128128ASCnull
          WTPWT_TEST_RUNS_NK1WTPWT_TEST_RUNSRUNNER_OWNER3128128ASCnull
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMETABLE_OWNERTABLE_NAMECOLUMN_NAMECOLUMN_POSITIONCOLUMN_LENGTHCHAR_LENGTHDESCENDCOLUMN_EXPRESSION
          WTPWT_TEST_RUNS_IDX1WTPWT_TEST_RUNSSTART_DTM1110ASCnull
          -
          -
          -
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/table/WT_TEST_RUNS/headerBg.jpg b/docs/core/DBDocs/table/WT_TEST_RUNS/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/table/WT_TEST_RUNS/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TEST_RUNS/report.css b/docs/core/DBDocs/table/WT_TEST_RUNS/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/table/WT_TEST_RUNS/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/table/WT_TEST_RUNS/report.js b/docs/core/DBDocs/table/WT_TEST_RUNS/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/table/WT_TEST_RUNS/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/table/WT_TEST_RUNS/topDimTabBg.gif b/docs/core/DBDocs/table/WT_TEST_RUNS/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/table/WT_TEST_RUNS/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TEST_RUNS/topDimTabL.gif b/docs/core/DBDocs/table/WT_TEST_RUNS/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/table/WT_TEST_RUNS/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TEST_RUNS/topDimTabR.gif b/docs/core/DBDocs/table/WT_TEST_RUNS/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/table/WT_TEST_RUNS/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TEST_RUNS/topTabBg.gif b/docs/core/DBDocs/table/WT_TEST_RUNS/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/table/WT_TEST_RUNS/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TEST_RUNS/topTabL.gif b/docs/core/DBDocs/table/WT_TEST_RUNS/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/table/WT_TEST_RUNS/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TEST_RUNS/topTabR.gif b/docs/core/DBDocs/table/WT_TEST_RUNS/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/table/WT_TEST_RUNS/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TEST_RUN_STATS.html b/docs/core/DBDocs/table/WT_TEST_RUN_STATS.html deleted file mode 100644 index 85a149d..0000000 --- a/docs/core/DBDocs/table/WT_TEST_RUN_STATS.html +++ /dev/null @@ -1,886 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -

          Constraints

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          Statistics

          -
          -
          -
          -
          -

          Triggers

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Partitions

          -
          -
          -
          -
          -

          Indexes

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          COLUMN_NAMEDATA_TYPENULLABLEDATA_DEFAULTCOLUMN_IDCOMMENTS
          TEST_RUN_IDNUMBER(38,0)Nonull1Primary (Surrogate) Key for each Test Run. Also the Test Runs foreign key.
          TEST_YIELDNUMBERYesnull2Ratio of successful assertions to total assertions.
          ASSERTSNUMBERYesnull3Total number of assetions.
          PASSESNUMBERYesnull4Number of passed assertions.
          FAILURESNUMBERYesnull5Number of failed assertions.
          ERRORSNUMBERYesnull6Number of errored assertions.
          TESTCASESNUMBERYesnull7Total number of test cases.
          MIN_INTERVAL_MSECSNUMBERYesnull8Minimum interval time between assertions in milliseconds
          AVG_INTERVAL_MSECSNUMBERYesnull9Average interval time between assertions in milliseconds
          MAX_INTERVAL_MSECSNUMBERYesnull10Maximum interval time between assertions in milliseconds
          TOT_INTERVAL_MSECSNUMBERYesnull11Total (Sum) of interval times between assertions in milliseconds
          CODE_COVERAGENUMBERYesnull12Ratio of execute source lines to valid executable source lines.
          PROFILED_LINESNUMBERYesnull13Total number of source lines as counted by DBMS_PROFILER
          EXECUTED_LINESNUMBERYesnull14Number of source lines executed
          IGNORED_LINESNUMBERYesnull15Number of source lines ignored as uncountable
          EXCLUDED_LINESNUMBERYesnull16Number of source lines excluded due to unexplained DBMS_PROFILER metrics
          NOTEXEC_LINESNUMBERYesnull17Number of source lines not execute
          UNKNOWN_LINESNUMBERYesnull18Number of source lines that have unexplained DBMS_PROFILER metrics
          MIN_EXECUTED_USECSNUMBERYesnull19Minumum execution time for a line of source in microseconds
          AVG_EXECUTED_USECSNUMBERYesnull20Average execution time for a line of source in microseconds
          MAX_EXECUTED_USECSNUMBERYesnull21Maximum execution time for a line of source in microseconds
          TOT_EXECUTED_USECSNUMBERYesnull22Total (Sum) of execution times for a line of source in microseconds
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          CONSTRAINT_NAMECONSTRAINT_TYPESEARCH_CONDITIONR_OWNERR_TABLE_NAMER_CONSTRAINT_NAMEDELETE_RULESTATUSDEFERRABLEVALIDATEDGENERATEDBADRELYLAST_CHANGEINDEX_OWNERINDEX_NAMEINVALIDVIEW_RELATED
          WT_TEST_RUN_STATS_FK1Foreign_KeynullWTPWT_TEST_RUNSWT_TEST_RUNS_PKNO ACTIONENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:21:12nullnullnullnull
          WT_TEST_RUN_STATS_NN1Check"TEST_RUN_ID" IS NOT NULLnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:21:12nullnullnullnull
          WT_TEST_RUN_STATS_PKPrimary_KeynullnullnullnullnullENABLEDNOT DEFERRABLEVALIDATEDUSER NAMEnullnull29-JUN-2018 15:21:12nullWT_TEST_RUN_STATS_PKnullnull
          -
          -
          -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          TEST_RUN_ID1
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          TEST_RUN_IDnull
          -
          -
          -
          -
          - - - - - - - - -
          COLUMN_NAMECOLUMN_POSITION
          TEST_RUN_ID1
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          DELETEPUBLICNOWTPWT_TEST_RUN_STATS
          SELECTPUBLICNOWTPWT_TEST_RUN_STATS
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          NUM_ROWSnull
          BLOCKSnull
          AVG_ROW_LENnull
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          LAST_ANALYZED_SINCEnull
          -
          -
          -
          -
          -
          -

          Column Statistics

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - -
          TRIGGER_NAMETRIGGER_TYPETRIGGER_OWNERTRIGGERING_EVENTSTATUSTABLE_NAME
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          WTPWT_TEST_RUN_STATPACKAGE BODYWTPWT_TEST_RUN_STATSTABLE
          WTPWT_TEXT_REPORTPACKAGE BODYWTPWT_TEST_RUN_STATSTABLE
          -
          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          CREATED29-JUN-2018 15:21:12
          LAST_DDL_TIME29-JUN-2018 15:21:13
          OWNERWTP
          TABLE_NAMEWT_TEST_RUN_STATS
          TABLESPACE_NAMEUSERS
          CLUSTER_NAMEnull
          IOT_NAMEnull
          STATUSVALID
          PCT_FREE0
          PCT_USEDnull
          INI_TRANS1
          MAX_TRANS255
          INITIAL_EXTENT65536
          NEXT_EXTENT1048576
          MIN_EXTENTS1
          MAX_EXTENTS2147483645
          PCT_INCREASEnull
          FREELISTSnull
          FREELIST_GROUPSnull
          LOGGINGYES
          BACKED_UPN
          NUM_ROWSnull
          BLOCKSnull
          EMPTY_BLOCKSnull
          AVG_SPACEnull
          CHAIN_CNTnull
          AVG_ROW_LENnull
          AVG_SPACE_FREELIST_BLOCKSnull
          NUM_FREELIST_BLOCKSnull
          DEGREE1
          INSTANCES1
          CACHEN
          TABLE_LOCKENABLED
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          PARTITIONEDNO
          IOT_TYPEnull
          OBJECT_ID_TYPEnull
          TABLE_TYPE_OWNERnull
          TABLE_TYPEnull
          TEMPORARYN
          SECONDARYN
          NESTEDNO
          BUFFER_POOLDEFAULT
          ROW_MOVEMENTDISABLED
          GLOBAL_STATSNO
          USER_STATSNO
          DURATIONnull
          SKIP_CORRUPTDISABLED
          MONITORINGYES
          CLUSTER_OWNERnull
          DEPENDENCIESDISABLED
          COMPRESSIONDISABLED
          COMPRESS_FORnull
          DROPPEDNO
          COMMENTSTest Run data statistics for each execution of the WTPLSQL_RUN procedure.
          -
          -
          -
          -
          - - - - - - - - - -
          PARTITION_NAMELAST_ANALYZEDNUM_ROWSBLOCKSSAMPLE_SIZEHIGH_VALUE
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMEUNIQUENESSSTATUSINDEX_TYPETEMPORARYPARTITIONEDFUNCIDX_STATUSJOIN_INDEXCOLUMNS
          WTPWT_TEST_RUN_STATS_PKUNIQUEVALIDNORMALNNOnullNOTEST_RUN_ID
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMETABLE_OWNERTABLE_NAMECOLUMN_NAMECOLUMN_POSITIONCOLUMN_LENGTHCHAR_LENGTHDESCENDCOLUMN_EXPRESSION
          WTPWT_TEST_RUN_STATS_PKWTPWT_TEST_RUN_STATSTEST_RUN_ID1220ASCnull
          -
          -
          -
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/table/WT_TEST_RUN_STATS/headerBg.jpg b/docs/core/DBDocs/table/WT_TEST_RUN_STATS/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/table/WT_TEST_RUN_STATS/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TEST_RUN_STATS/report.css b/docs/core/DBDocs/table/WT_TEST_RUN_STATS/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/table/WT_TEST_RUN_STATS/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/table/WT_TEST_RUN_STATS/report.js b/docs/core/DBDocs/table/WT_TEST_RUN_STATS/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/table/WT_TEST_RUN_STATS/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/table/WT_TEST_RUN_STATS/topDimTabBg.gif b/docs/core/DBDocs/table/WT_TEST_RUN_STATS/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/table/WT_TEST_RUN_STATS/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TEST_RUN_STATS/topDimTabL.gif b/docs/core/DBDocs/table/WT_TEST_RUN_STATS/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/table/WT_TEST_RUN_STATS/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TEST_RUN_STATS/topDimTabR.gif b/docs/core/DBDocs/table/WT_TEST_RUN_STATS/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/table/WT_TEST_RUN_STATS/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TEST_RUN_STATS/topTabBg.gif b/docs/core/DBDocs/table/WT_TEST_RUN_STATS/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/table/WT_TEST_RUN_STATS/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TEST_RUN_STATS/topTabL.gif b/docs/core/DBDocs/table/WT_TEST_RUN_STATS/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/table/WT_TEST_RUN_STATS/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_TEST_RUN_STATS/topTabR.gif b/docs/core/DBDocs/table/WT_TEST_RUN_STATS/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/table/WT_TEST_RUN_STATS/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_VERSION.html b/docs/core/DBDocs/table/WT_VERSION.html deleted file mode 100644 index 995b3c6..0000000 --- a/docs/core/DBDocs/table/WT_VERSION.html +++ /dev/null @@ -1,587 +0,0 @@ - - - - - - - - -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -

          Constraints

          -
          -
          -
          -
          -

          Grants

          -
          -
          -
          -
          -

          Statistics

          -
          -
          -
          -
          -

          Triggers

          -
          -
          -
          -
          -

          Dependencies

          -
          -
          -
          -
          -

          Details

          -
          -
          -
          -
          -

          Partitions

          -
          -
          -
          -
          -

          Indexes

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          COLUMN_NAMEDATA_TYPENULLABLEDATA_DEFAULTCOLUMN_IDCOMMENTS
          INSTALL_DTMDATEYesnull1Date/Time the version that was installed/upgraded
          ACTIONVARCHAR2(15 BYTE)Yesnull2null
          TEXTVARCHAR2(15 BYTE)Yesnull3Name of the version that was installed/upgraded
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - -
          CONSTRAINT_NAMECONSTRAINT_TYPESEARCH_CONDITIONR_OWNERR_TABLE_NAMER_CONSTRAINT_NAMEDELETE_RULESTATUSDEFERRABLEVALIDATEDGENERATEDBADRELYLAST_CHANGEINDEX_OWNERINDEX_NAMEINVALIDVIEW_RELATED
          -
          -
          -
          -
          -
          -

          Columns

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - -
          PRIVILEGEGRANTEEGRANTABLEGRANTOROBJECT_NAME
          SELECTPUBLICNOWTPWT_VERSION
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          NUM_ROWSnull
          BLOCKSnull
          AVG_ROW_LENnull
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          LAST_ANALYZED_SINCEnull
          -
          -
          -
          -
          -
          -

          Column Statistics

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - -
          TRIGGER_NAMETRIGGER_TYPETRIGGER_OWNERTRIGGERING_EVENTSTATUSTABLE_NAME
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          PUBLICWT_VERSIONSYNONYMWTPWT_VERSIONTABLE
          WTPWTPLSQLPACKAGE BODYWTPWT_VERSIONTABLE
          -
          -
          -
          -
          -
          -

          References

          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          - - - - - - - - -
          OWNERNAMETYPEREFERENCED_OWNERREFERENCED_NAMEREFERENCED_TYPE
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NAMEVALUE
          CREATED29-JUN-2018 15:12:21
          LAST_DDL_TIME29-JUN-2018 15:21:12
          OWNERWTP
          TABLE_NAMEWT_VERSION
          TABLESPACE_NAMEUSERS
          CLUSTER_NAMEnull
          IOT_NAMEnull
          STATUSVALID
          PCT_FREE0
          PCT_USEDnull
          INI_TRANS1
          MAX_TRANS255
          INITIAL_EXTENT65536
          NEXT_EXTENT1048576
          MIN_EXTENTS1
          MAX_EXTENTS2147483645
          PCT_INCREASEnull
          FREELISTSnull
          FREELIST_GROUPSnull
          LOGGINGYES
          BACKED_UPN
          NUM_ROWSnull
          BLOCKSnull
          EMPTY_BLOCKSnull
          AVG_SPACEnull
          CHAIN_CNTnull
          AVG_ROW_LENnull
          AVG_SPACE_FREELIST_BLOCKSnull
          NUM_FREELIST_BLOCKSnull
          DEGREE1
          INSTANCES1
          CACHEN
          TABLE_LOCKENABLED
          SAMPLE_SIZEnull
          LAST_ANALYZEDnull
          PARTITIONEDNO
          IOT_TYPEnull
          OBJECT_ID_TYPEnull
          TABLE_TYPE_OWNERnull
          TABLE_TYPEnull
          TEMPORARYN
          SECONDARYN
          NESTEDNO
          BUFFER_POOLDEFAULT
          ROW_MOVEMENTDISABLED
          GLOBAL_STATSNO
          USER_STATSNO
          DURATIONnull
          SKIP_CORRUPTDISABLED
          MONITORINGYES
          CLUSTER_OWNERnull
          DEPENDENCIESDISABLED
          COMPRESSIONDISABLED
          COMPRESS_FORnull
          DROPPEDNO
          COMMENTSRecords the installed and upgraded versions.
          -
          -
          -
          -
          - - - - - - - - - -
          PARTITION_NAMELAST_ANALYZEDNUM_ROWSBLOCKSSAMPLE_SIZEHIGH_VALUE
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - - - - - - - - - - - - -
          INDEX_OWNERINDEX_NAMEUNIQUENESSSTATUSINDEX_TYPETEMPORARYPARTITIONEDFUNCIDX_STATUSJOIN_INDEXCOLUMNS
          -
          -
          -
          -
          -
          -

          -
          -
          -
          -
          -
          -
          -
          -
          -
          - - diff --git a/docs/core/DBDocs/table/WT_VERSION/headerBg.jpg b/docs/core/DBDocs/table/WT_VERSION/headerBg.jpg deleted file mode 100644 index 69df3af..0000000 Binary files a/docs/core/DBDocs/table/WT_VERSION/headerBg.jpg and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_VERSION/report.css b/docs/core/DBDocs/table/WT_VERSION/report.css deleted file mode 100644 index 8a1b233..0000000 --- a/docs/core/DBDocs/table/WT_VERSION/report.css +++ /dev/null @@ -1,149 +0,0 @@ -* { - font-family: Tahoma, Arial, Helvetica, Geneva, sans-serif; -} - -body { - background-color: #fff; - margin: 0; -} - -br { - clear: both -} - -pre { - font-family : Courier; -} - -/* IMAGES */ - -div.currentmasterreport img, div.currentchildreport img { - border: 0; -} - -/* TABLES */ - -div.currentmasterreport table, div.currentchildreport table { - border-spacing: 0px; - empty-cells: show; -} - -div.currentmasterreport table th, div.currentchildreport table th { - color: #2b7c92; - white-space: nowrap; - padding: 2px 8px; - background-color: #cfe0f1; - background-image: none; - color: #2b7c92; - font-size: 11px; - letter-spacing: 1px; - text-decoration: underline; -} - -div.currentmasterreport table td, div.currentchildreport table td { - background: none; - border-top: 1px #fff solid; - border-bottom: 1px #ccc solid; - font-size: 8pt; - padding: 3px 9px; - background-color: #f2f2f5; - border-collapse: collapse; -} - -div.currentmasterreport table td.currentcell, div.currentchildreport table td.currentcell { - background-color: rgb(214,214,214); -} - -/* TITLE BANNER */ - -div.banner { - background-image: url(headerBg.jpg); - background-repeat: repeat-x; - padding: 5px 5px 0 5px; - margin: 0 0 15px 0; -} - -h2.banner { - color: #fff; - font-size: 2em; -} - -small.banner { - color: #fff; -} - -/* REPORT TABS */ - -div.currentmaintab, div.currentchildtab { - background-image: url(topDimTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.maintab, div.childtab { - background-image: url(topTabL.gif); - display: block; - float: left; - height: 21px; - padding: 0; - margin: 0 5px 0 0; - background-repeat: no-repeat -} - -div.currentmaintab div, div.currentchildtab div { - background-image: url(topDimTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.maintab div, div.childtab div { - background-image: url(topTabR.gif); - background-repeat: no-repeat; - background-position: top right; - height: 21px; - float: left; - margin: 0; -} - -div.currentmaintab div p, div.currentchildtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topDimTabBg.gif); - font-weight:bold; - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -div.maintab div p, div.childtab div p { - margin: 0 8px; - height: 21px; - line-height: 21px; - background-image: url(topTabBg.gif); - display: block; - text-decoration: none; - vertical-align: middle; - float: left; - font-size: 9pt; -} - -/* REPORTS */ - -div.masterreport, div.childreport { - display:none; -} - -div.currentmasterreport, div.currentchildreport { - display:inline; -} - diff --git a/docs/core/DBDocs/table/WT_VERSION/report.js b/docs/core/DBDocs/table/WT_VERSION/report.js deleted file mode 100644 index 1577860..0000000 --- a/docs/core/DBDocs/table/WT_VERSION/report.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Called from the boilerplate html when a new main tab is selected. - */ -function onSelectMainTab(node, newMainIndex) { - highlightMainTab(node); - showMain(newMainIndex); -} - -/* - * Called from the boilerplate html when a new child tab is selected. - */ -function onSelectChildTab(node, newChildIndex) { - highlightChildTab(node); - showChild(newChildIndex, rowIndex); -} - -/* - * Called from the report specific code when a new master row is selected. - */ -function onSelectRowIndex(rowIndex) { - showChild(childIndex, rowIndex); -} - -/********************************************************************************************************************** - Implementation code - ***********************************************************************************************************************/ - -var mainIndex = 0; -var childIndex = 0; -var rowIndex = 0; -var selectedChildReport; - -/* - * Modifies the UI by highlighting the selected main tab and unhighlighting the rest. - */ -function highlightMainTab(node) { - if (node.className != "currentmaintab") { - var tabNodes = document.getElementById("maintabs").children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentmaintab") { - tabNode.className = "maintab"; - } - } - node.className = "currentmaintab"; - } -} - -/* - * Modifies the UI by highlighting the selected child tab and unhighlighting the rest. - */ -function highlightChildTab(node) { - if (node.className != "currentchildtab") { - var tabNodes = document.getElementById("ChildTabs." + mainIndex).children; - for (var t = 0;t < tabNodes.length;t++) { - var tabNode = tabNodes[t]; - if (tabNode.className == "currentchildtab") { - tabNode.className = "childtab"; - } - } - node.className = "currentchildtab"; - } -} - -/* - * Modifies the UI by showing the selected main report and hiding the rest. - */ -function showMain(newMainIndex) { - if (newMainIndex != mainIndex) { - var newMainId = "Master." + newMainIndex; - var mainElements = document.getElementById("masterreports").children; - for (var m = 0;m < mainElements.length;m++) { - var mainElement = mainElements[m]; - if (mainElement.id == newMainId) { - mainElement.children[0].className = "currentmasterreport"; - var childReportElement = document.getElementById("ChildReports." + newMainIndex); - if (childReportElement != null) { - var childElements = childReportElement.children; - for (var c = 0;c < childElements.length;c++) { - var childElement = childElements[c]; - if (childElement.children[0].className == "currentchildreport") { - var childReportId = childElement.id; - var firstDot = childReportId.indexOf("."); - var secondDot = childReportId.indexOf(".", firstDot + 1); - var thirdDot = childReportId.indexOf(".", secondDot + 1); - selectedChildReport = childElement; - rowIndex = parseInt(childReportId.substring(secondDot + 1, thirdDot)); - childIndex = parseInt(childReportId.substring(firstDot + 1, secondDot)); - } - } - } - mainIndex = newMainIndex; - } - else { - var firstChildElement = mainElement.children[0]; - if (firstChildElement.className == "currentmasterreport") { - firstChildElement.className = "masterreport"; - } - } - } - } -} - -/* - * Modifies the UI by showing the selected child report and hiding the rest. - */ -function showChild(newChildIndex, newRowIndex) { - if (newRowIndex != rowIndex || newChildIndex != childIndex) { - if (selectedChildReport == null) { - selectedChildReport = document.getElementById("ChildReports." + mainIndex).children[0]; - } - selectedChildReport.children[0].className = "childreport"; - var newChildId = "Child." + newChildIndex + "." + newRowIndex + "." + mainIndex; - selectedChildReport = document.getElementById(newChildId); - selectedChildReport.children[0].className = "currentchildreport"; - childIndex = newChildIndex; - rowIndex = newRowIndex; - } -}/********************************************************************************************************************** - Table report code -***********************************************************************************************************************/ - -var table_selectedRows = new Array(); - -function table_onSelectMasterRow(node, tableNo, newMasterIndex) { - table_onSelectRow(node, tableNo); - onSelectRowIndex(newMasterIndex); -} - -function table_onSelectRow(node, tableNo) { - if (node.className != "currentrow") { - previousRow = table_selectedRows[tableNo]; - if (previousRow == null) { - previousRow = node.parentNode.children[1]; - } - previousRow.className = ""; - var previousCells = previousRow.children; - for (var pc = 0;pc < previousCells.length;pc++) { - previousCells[pc].className = ""; - } - node.className = "currentrow"; - var nodeCells = node.children; - for (var nc = 0;nc < nodeCells.length;nc++) { - nodeCells[nc].className = "currentcell"; - } - table_selectedRows[tableNo] = node; - } -} diff --git a/docs/core/DBDocs/table/WT_VERSION/topDimTabBg.gif b/docs/core/DBDocs/table/WT_VERSION/topDimTabBg.gif deleted file mode 100644 index dae74c1..0000000 Binary files a/docs/core/DBDocs/table/WT_VERSION/topDimTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_VERSION/topDimTabL.gif b/docs/core/DBDocs/table/WT_VERSION/topDimTabL.gif deleted file mode 100644 index def5846..0000000 Binary files a/docs/core/DBDocs/table/WT_VERSION/topDimTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_VERSION/topDimTabR.gif b/docs/core/DBDocs/table/WT_VERSION/topDimTabR.gif deleted file mode 100644 index 3233a6e..0000000 Binary files a/docs/core/DBDocs/table/WT_VERSION/topDimTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_VERSION/topTabBg.gif b/docs/core/DBDocs/table/WT_VERSION/topTabBg.gif deleted file mode 100644 index f8b692b..0000000 Binary files a/docs/core/DBDocs/table/WT_VERSION/topTabBg.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_VERSION/topTabL.gif b/docs/core/DBDocs/table/WT_VERSION/topTabL.gif deleted file mode 100644 index 1b00dc0..0000000 Binary files a/docs/core/DBDocs/table/WT_VERSION/topTabL.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/WT_VERSION/topTabR.gif b/docs/core/DBDocs/table/WT_VERSION/topTabR.gif deleted file mode 100644 index d24e5eb..0000000 Binary files a/docs/core/DBDocs/table/WT_VERSION/topTabR.gif and /dev/null differ diff --git a/docs/core/DBDocs/table/index.html b/docs/core/DBDocs/table/index.html deleted file mode 100644 index 2ab8e9d..0000000 --- a/docs/core/DBDocs/table/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - -

          Tables -

          \ No newline at end of file diff --git a/docs/core/ER_Diagrams.pdf b/docs/core/ER_Diagrams.pdf deleted file mode 100644 index 12a4675..0000000 Binary files a/docs/core/ER_Diagrams.pdf and /dev/null differ diff --git a/docs/core/README.md b/docs/core/README.md deleted file mode 100644 index 2e981ae..0000000 --- a/docs/core/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# wtPLSQL -Whitebox Testing Framework for Oracle's PL/SQL Language - -### Files and Directories - -File Name | Description ------------------------|------------ -DBDocs | SQL Developer DBDocs Files -Call_Tree_Diagrams.odg | LibreOffice Draw File for Process Call Trees -Call_Tree_Diagrams.pdf | Process Call Tree (Graph) Diagrams -ER_Diagrams.pdf | Entity-Relationship Diagrams diff --git a/docs/demo/Package-Test.htm b/docs/demo/Package-Test.htm index 966deb2..3b30714 100644 --- a/docs/demo/Package-Test.htm +++ b/docs/demo/Package-Test.htm @@ -1,9 +1,9 @@

          Demos and Examples

          Test a PL/SQL Package


          -

          A majority of wtPLSQL testing is done with the test runner packages. In this example, a test runner package will be created to test the DBMS_OUTPUT package. For brevity, only PUT_LINE and GET_LINE will be tested.

          +

          A majority of wtPLSQL testing is done with a Test Runner package. In this example, we will create a Test Runner package that will test the DBMS_OUTPUT package. The DBMS_OUTPUT package is a part of every Oracle database. For brevity, only PUT_LINE and GET_LINE will be tested in the DBMS_OUTPUT package.

          Test Runner Package Specification

          -

          The specification for a test runner package is brutally simple. It only needs one procedure.

          +

          The specification for a Test Runner package is brutally simple. It only needs one procedure. Here, we create a package specification for the Test Runner.

          Run this:

          create or replace package test_dbms_output authid definer
           as
          @@ -13,6 +13,7 @@ 

          Test Runner Package Specification

          Test Runner Package Body

          Create a package body with the needed procedure. Add a call to enable DBMS_OUTPUT for testing. Setup and teardown will be handled later.

          +

          Run this:

          create or replace package body test_dbms_output
           as
              procedure wtplsql_run
          @@ -23,7 +24,6 @@ 

          Test Runner Package Body

          end test_dbms_output; /
          -

          Procedures will be added to this package body. These procedures will run the assertions that will test the DBMS_OUTPUT package.

          Testing Put Line and Get Line

          The new TEST_PUT_GET_LINE procedure will test the PUT_LINE and GET_LINE procedures together. Also, the TEST_PUT_GET_LINE procedure call is added to the WTPLSQL_RUN procedure.

          Run this:

          @@ -48,30 +48,34 @@

          Testing Put Line and Get Line

          end test_dbms_output; /
          -

          Run this:

          +

          Run this to setup HOOKS:

          +
          begin
          +   wtp.junit_core_report.delete_hooks;
          +   wtp.wt_test_run.delete_hooks;
          +   wtp.wt_core_report.insert_hooks;
          +end;
          +/
          +
          +

          Then, run this:

          begin
              wtplsql.test_run('TEST_DBMS_OUTPUT');
          -   wt_text_report.dbms_out(USER,'TEST_DBMS_OUTPUT',30);
           end;
           /
           

          And get this:

          -
              wtPLSQL 1.1.0 - Run ID 44: 16-Jun-2018 03:45:33 PM
          -
          -  Test Results for WTP_DEMO.TEST_DBMS_OUTPUT
          -       Total Test Cases:        0       Total Assertions:        1
          -  Minimum Interval msec:        4      Failed Assertions:        0
          -  Average Interval msec:        4       Error Assertions:        0
          -  Maximum Interval msec:        4             Test Yield:   100.00%
          -   Total Run Time (sec):      0.0
          -
          - - WTP_DEMO.TEST_DBMS_OUTPUT Test Result Details (Test Run ID 44)
          ------------------------------------------------------------
          - PASS    4ms Test 1. EQ - Expected "Test 1" and got "Test 1"
          +
            wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003
          +  Start Date/Time: 13-Apr-2024 01:21:28 AM
          +  Test Results for WT_DEMO.TEST_DBMS_OUTPUT
          +  ------------------------------------------------------------------
          +  Minimum Elapsed msec:          0      Total Assertions:          1
          +  Average Elapsed msec:          0     Failed Assertions:          0
          +  Maximum Elapsed msec:          0       Total Testcases:          1
          +  Total Run Time (sec):        0.0      Failed Testcases:          0
          +                                          Testcase Yield:        100%
           
          -

          A successful test. Notice that the value of the C_TEST1 constant is displayed in the test result details.

          -

          Leaving Something Behind

          -

          In the previous example, everything worked correctly. If a problem occurs during testing, things can be left behind. Here is an example of GET_LINE not working, leaving the value of C_TEST1 in the DBMS_OUTPUT buffer. For testing purposes, an exception will be thrown between the PUT_LINE and GET_LINE call.

          +

          A successful test.

          +

          Catching an Exception

          +

          In the previous example, everything worked correctly. Here is an example of GET_LINE not working. For testing purposes, an exception will be thrown between the PUT_LINE and GET_LINE call.

          Run this:

          create or replace package body test_dbms_output
           as
          @@ -103,31 +107,36 @@ 

          Leaving Something Behind

          And get this:

          Test 1
          -
          -

          Notice there was no exception raised. wtPLSQL captured the exception and logged it. Also, the value of C_TEST1 shows in the output. It was left behind in the DBMS_OUTPUT buffer.

          -

          Run this:

          -
          begin
          -   wt_text_report.dbms_out(USER,'TEST_DBMS_OUTPUT',30);
          -end;
          -/
          -
          -

          And get this:

          -
              wtPLSQL 1.1.0 - Run ID 49: 16-Jun-2018 04:18:39 PM
           
          -  Test Results for WTP_DEMO.TEST_DBMS_OUTPUT
          -       Total Test Cases:        0       Total Assertions:        0
          -  Minimum Interval msec:        0      Failed Assertions:        0
          -  Average Interval msec:        0       Error Assertions:        0
          -  Maximum Interval msec:        0             Test Yield: %
          -   Total Run Time (sec):      0.0
          +  wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003
          +  Start Date/Time: 12-Apr-2024 09:49:26 PM
          +  Test Results for WT_DEMO.TEST_DBMS_OUTPUT
          +  ------------------------------------------------------------------
          +  Minimum Elapsed msec:          0      Total Assertions:          0
          +  Average Elapsed msec:          0     Failed Assertions:          0
          +  Maximum Elapsed msec:          0       Total Testcases:          0
          +  Total Run Time (sec):        0.0      Failed Testcases:          0
          +                                          Testcase Yield:          0%
           
             *** Test Runner Error ***
          -ORA-20000: Fault insertion exception
          -ORA-06512: at "WTP_DEMO.TEST_DBMS_OUTPUT", line 10
          -ORA-06512: at "WTP_DEMO.TEST_DBMS_OUTPUT", line 18
          +Hook Error in "execute_test_runner", SEQ 20.
          +ORA-06512: at "WT_DEMO.TEST_DBMS_OUTPUT", line 10
          +ORA-06512: at "WT_DEMO.TEST_DBMS_OUTPUT", line 18
           ORA-06512: at line 1
          -ORA-06512: at "WTP.WTPLSQL", line 309
          +ORA-06512: at "WTP.WT_EXECUTE_TEST_RUNNER", line 11
          +ORA-06512: at line 1
          +ORA-06512: at "WTP.HOOK", line 41
          +----- PL/SQL Call Stack -----
          +  object      line  object
          +  handle    number  name
          +0xa28c8178        43  package body WTP.HOOK.RUN
          +0x6f239218       503  package body WTP.WTPLSQL.TEST_RUN
          +0x9fa74a88         2  anonymous block
          +
          + * NOTE: No Data in Test Results Array "core_data.g_results_nt"
           
          +

          Your results should include the above results, if DBMS_OUTPUT is enabled. There may be addition results due to a different wtPSQL configuration.

          +

          Notice there was no exception raised. wtPLSQL captured the exception and logged it. Also, the value of C_TEST1 shows in the output. It was left behind in the DBMS_OUTPUT buffer.

          No assertions were run because of the exception. The exception that was captured appears below the test results summary.

          Setup and Teardown

          Setup and Teardown procedures are used to prepare for and cleanup from tests. For DBMS_OUTPUT testing, the buffer needs to be preserved before testing starts. After testing is complete, the original buffer contents need to be returned to the buffer.

          @@ -181,8 +190,9 @@

          Setup and Teardown

          test_put_get_line; teardown; exception when others then - l_error_message := substr(dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace,1,4000); + l_error_message := substr(SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack,1,4000); teardown; raise_application_error(-20000, l_error_message); end wtplsql_run; @@ -190,7 +200,7 @@

          Setup and Teardown

          end test_dbms_output; /
          -

          The test runner package is quite large now. To review, the test runner will

          +

          The Test Runner package is quite large now. To review, the Test Runner will

          • Capture the current DBMS_OUPUT buffer.
          • Run a procedure that adds to the DBMS_OUPUT buffer.
          • @@ -199,7 +209,7 @@

            Setup and Teardown

          • Clear the current DBMS_OUPUT buffer.
          • Restore the original DBMS_OUPUT buffer.
          -

          In order to ensure it is restoring the original DBMS_OUPUT buffer, the message "This should be preserved." is added to the buffer. That message should be available after the test runner completes.

          +

          In order to ensure it is restoring the original DBMS_OUPUT buffer, the message "This should be preserved." is added to the buffer. That message should be available after the Test Runner completes.

          Run this:

          begin
              wtplsql.test_run('TEST_DBMS_OUTPUT');
          @@ -208,33 +218,38 @@ 

          Setup and Teardown

          And get this:

          This should be preserved.
          -
          -

          Excellent! The original DBMS_OUPUT buffer was preserved and the errant C_TEST1 value was removed.

          -

          Run this:

          -
          begin
          -   wt_text_report.dbms_out(USER,'TEST_DBMS_OUTPUT',30);
          -end;
          -/
          -
          -

          And get this:

          -
              wtPLSQL 1.1.0 - Run ID 51: 16-Jun-2018 04:56:39 PM
           
          -  Test Results for WTP_DEMO.TEST_DBMS_OUTPUT
          -       Total Test Cases:        0       Total Assertions:        0
          -  Minimum Interval msec:        0      Failed Assertions:        0
          -  Average Interval msec:        0       Error Assertions:        0
          -  Maximum Interval msec:        0             Test Yield: %
          -   Total Run Time (sec):      0.1
          +  wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003
          +  Start Date/Time: 13-Apr-2024 12:49:43 AM
          +  Test Results for WT_DEMO.TEST_DBMS_OUTPUT
          +  ------------------------------------------------------------------
          +  Minimum Elapsed msec:          0      Total Assertions:          0
          +  Average Elapsed msec:          0     Failed Assertions:          0
          +  Maximum Elapsed msec:          0       Total Testcases:          0
          +  Total Run Time (sec):        0.0      Failed Testcases:          0
          +                                          Testcase Yield:          0%
           
             *** Test Runner Error ***
          +Hook Error in "execute_test_runner", SEQ 20.
           ORA-20000: ORA-20000: Fault insertion exception
           ORA-06512: at "WTP_DEMO.TEST_DBMS_OUTPUT", line 21
           ORA-06512: at "WTP_DEMO.TEST_DBMS_OUTPUT", line 47
          -ORA-06512: at "WTP_DEMO.TEST_DBMS_OUTPUT", line 53
          +ORA-06512: at "WTP_DEMO.TEST_DBMS_OUTPUT", line 54
           ORA-06512: at line 1
          -ORA-06512: at "WTP.WTPLSQL", line 309
          +ORA-06512: at "WTP.WT_EXECUTE_TEST_RUNNER", line 11
          +ORA-06512: at line 1
          +ORA-06512: at "WTP.HOOK", line 41
          +----- PL/SQL Call Stack -----
          +  object      line  object
          +  handle    number  name
          +0x9deb4af8        43  package body WTP.HOOK.RUN
          +0x99b16938       503  package body WTP.WTPLSQL.TEST_RUN
          +0x7d7d6190         2  anonymous block
          +
          + * NOTE: No Data in Test Results Array "core_data.g_results_nt"
          +
           
          -

          The exception handler preserved the error stack before calling teardown. Also, there is an extra "ORA-20000:" at the front of the error stack displayed, but all the error information is preserved.

          -

          These are all the basic tools needed to successfully create and run test runner packages in wtPLSQL.

          +

          The exception handler preserved the error stack before calling teardown. Also, there is an extra "ORA-20000:" at the front of the error stack displayed, but all the error information is preserved.

          +

          These are all the basic tools needed to successfully create and run Test Runner packages in wtPLSQL.


          Demos and Examples

          diff --git a/docs/demo/Package-Test.md b/docs/demo/Package-Test.md index b2c2623..2b3b1c4 100644 --- a/docs/demo/Package-Test.md +++ b/docs/demo/Package-Test.md @@ -4,11 +4,11 @@ --- -A majority of wtPLSQL testing is done with the test runner packages. In this example, a test runner package will be created to test the DBMS_OUTPUT package. For brevity, only PUT_LINE and GET_LINE will be tested. +A majority of wtPLSQL testing is done with a Test Runner package. In this example, we will create a Test Runner package that will test the DBMS_OUTPUT package. The DBMS_OUTPUT package is a part of every Oracle database. For brevity, only PUT_LINE and GET_LINE will be tested in the DBMS_OUTPUT package. ## Test Runner Package Specification -The specification for a test runner package is brutally simple. It only needs one procedure. +The specification for a Test Runner package is brutally simple. It only needs one procedure. Here, we create a package specification for the Test Runner. Run this: @@ -24,6 +24,8 @@ end test_dbms_output; Create a package body with the needed procedure. Add a call to enable DBMS_OUTPUT for testing. Setup and teardown will be handled later. +Run this: + ``` create or replace package body test_dbms_output as @@ -36,8 +38,6 @@ end test_dbms_output; / ``` -Procedures will be added to this package body. These procedures will run the assertions that will test the DBMS_OUTPUT package. - ## Testing Put Line and Get Line The new TEST_PUT_GET_LINE procedure will test the PUT_LINE and GET_LINE procedures together. Also, the TEST_PUT_GET_LINE procedure call is added to the WTPLSQL_RUN procedure. @@ -67,12 +67,22 @@ end test_dbms_output; / ``` -Run this: +Run this to setup HOOKS: + +``` +begin + wtp.junit_core_report.delete_hooks; + wtp.wt_test_run.delete_hooks; + wtp.wt_core_report.insert_hooks; +end; +/ +``` + +Then, run this: ``` begin wtplsql.test_run('TEST_DBMS_OUTPUT'); - wt_text_report.dbms_out(USER,'TEST_DBMS_OUTPUT',30); end; / ``` @@ -80,25 +90,22 @@ end; And get this: ``` - wtPLSQL 1.1.0 - Run ID 44: 16-Jun-2018 03:45:33 PM - - Test Results for WTP_DEMO.TEST_DBMS_OUTPUT - Total Test Cases: 0 Total Assertions: 1 - Minimum Interval msec: 4 Failed Assertions: 0 - Average Interval msec: 4 Error Assertions: 0 - Maximum Interval msec: 4 Test Yield: 100.00% - Total Run Time (sec): 0.0 - - - WTP_DEMO.TEST_DBMS_OUTPUT Test Result Details (Test Run ID 44) ------------------------------------------------------------ - PASS 4ms Test 1. EQ - Expected "Test 1" and got "Test 1" + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003 + Start Date/Time: 13-Apr-2024 01:21:28 AM + Test Results for WT_DEMO.TEST_DBMS_OUTPUT + ------------------------------------------------------------------ + Minimum Elapsed msec: 0 Total Assertions: 1 + Average Elapsed msec: 0 Failed Assertions: 0 + Maximum Elapsed msec: 0 Total Testcases: 1 + Total Run Time (sec): 0.0 Failed Testcases: 0 + Testcase Yield: 100% ``` -A successful test. Notice that the value of the C_TEST1 constant is displayed in the test result details. +A successful test. -## Leaving Something Behind +## Catching an Exception -In the previous example, everything worked correctly. If a problem occurs during testing, things can be left behind. Here is an example of GET_LINE not working, leaving the value of C_TEST1 in the DBMS_OUTPUT buffer. For testing purposes, an exception will be thrown between the PUT_LINE and GET_LINE call. +In the previous example, everything worked correctly. Here is an example of GET_LINE not working. For testing purposes, an exception will be thrown between the PUT_LINE and GET_LINE call. Run this: @@ -139,39 +146,39 @@ And get this: ``` Test 1 -``` - -Notice there was no exception raised. wtPLSQL captured the exception and logged it. Also, the value of C_TEST1 shows in the output. It was left behind in the DBMS_OUTPUT buffer. - -Run this: - -``` -begin - wt_text_report.dbms_out(USER,'TEST_DBMS_OUTPUT',30); -end; -/ -``` - -And get this: - -``` - wtPLSQL 1.1.0 - Run ID 49: 16-Jun-2018 04:18:39 PM - Test Results for WTP_DEMO.TEST_DBMS_OUTPUT - Total Test Cases: 0 Total Assertions: 0 - Minimum Interval msec: 0 Failed Assertions: 0 - Average Interval msec: 0 Error Assertions: 0 - Maximum Interval msec: 0 Test Yield: % - Total Run Time (sec): 0.0 + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003 + Start Date/Time: 12-Apr-2024 09:49:26 PM + Test Results for WT_DEMO.TEST_DBMS_OUTPUT + ------------------------------------------------------------------ + Minimum Elapsed msec: 0 Total Assertions: 0 + Average Elapsed msec: 0 Failed Assertions: 0 + Maximum Elapsed msec: 0 Total Testcases: 0 + Total Run Time (sec): 0.0 Failed Testcases: 0 + Testcase Yield: 0% *** Test Runner Error *** -ORA-20000: Fault insertion exception -ORA-06512: at "WTP_DEMO.TEST_DBMS_OUTPUT", line 10 -ORA-06512: at "WTP_DEMO.TEST_DBMS_OUTPUT", line 18 +Hook Error in "execute_test_runner", SEQ 20. +ORA-06512: at "WT_DEMO.TEST_DBMS_OUTPUT", line 10 +ORA-06512: at "WT_DEMO.TEST_DBMS_OUTPUT", line 18 ORA-06512: at line 1 -ORA-06512: at "WTP.WTPLSQL", line 309 +ORA-06512: at "WTP.WT_EXECUTE_TEST_RUNNER", line 11 +ORA-06512: at line 1 +ORA-06512: at "WTP.HOOK", line 41 +----- PL/SQL Call Stack ----- + object line object + handle number name +0xa28c8178 43 package body WTP.HOOK.RUN +0x6f239218 503 package body WTP.WTPLSQL.TEST_RUN +0x9fa74a88 2 anonymous block + + * NOTE: No Data in Test Results Array "core_data.g_results_nt" ``` +Your results should include the above results, if DBMS_OUTPUT is enabled. There may be addition results due to a different wtPSQL configuration. + +Notice there was no exception raised. wtPLSQL captured the exception and logged it. Also, the value of C_TEST1 shows in the output. It was left behind in the DBMS_OUTPUT buffer. + No assertions were run because of the exception. The exception that was captured appears below the test results summary. ## Setup and Teardown @@ -230,8 +237,9 @@ as test_put_get_line; teardown; exception when others then - l_error_message := substr(dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace,1,4000); + l_error_message := substr(SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack,1,4000); teardown; raise_application_error(-20000, l_error_message); end wtplsql_run; @@ -240,7 +248,7 @@ end test_dbms_output; / ``` -The test runner package is quite large now. To review, the test runner will +The Test Runner package is quite large now. To review, the Test Runner will * Capture the current DBMS_OUPUT buffer. * Run a procedure that adds to the DBMS_OUPUT buffer. * Catch an exception raised by the procedure. @@ -248,7 +256,7 @@ The test runner package is quite large now. To review, the test runner will * Clear the current DBMS_OUPUT buffer. * Restore the original DBMS_OUPUT buffer. -In order to ensure it is restoring the original DBMS_OUPUT buffer, the message "This should be preserved." is added to the buffer. That message should be available after the test runner completes. +In order to ensure it is restoring the original DBMS_OUPUT buffer, the message "This should be preserved." is added to the buffer. That message should be available after the Test Runner completes. Run this: @@ -263,43 +271,41 @@ And get this: ``` This should be preserved. -``` - -Excellent! The original DBMS_OUPUT buffer was preserved and the errant C_TEST1 value was removed. - -Run this: - -``` -begin - wt_text_report.dbms_out(USER,'TEST_DBMS_OUTPUT',30); -end; -/ -``` - -And get this: - -``` - wtPLSQL 1.1.0 - Run ID 51: 16-Jun-2018 04:56:39 PM - Test Results for WTP_DEMO.TEST_DBMS_OUTPUT - Total Test Cases: 0 Total Assertions: 0 - Minimum Interval msec: 0 Failed Assertions: 0 - Average Interval msec: 0 Error Assertions: 0 - Maximum Interval msec: 0 Test Yield: % - Total Run Time (sec): 0.1 + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003 + Start Date/Time: 13-Apr-2024 12:49:43 AM + Test Results for WT_DEMO.TEST_DBMS_OUTPUT + ------------------------------------------------------------------ + Minimum Elapsed msec: 0 Total Assertions: 0 + Average Elapsed msec: 0 Failed Assertions: 0 + Maximum Elapsed msec: 0 Total Testcases: 0 + Total Run Time (sec): 0.0 Failed Testcases: 0 + Testcase Yield: 0% *** Test Runner Error *** +Hook Error in "execute_test_runner", SEQ 20. ORA-20000: ORA-20000: Fault insertion exception ORA-06512: at "WTP_DEMO.TEST_DBMS_OUTPUT", line 21 ORA-06512: at "WTP_DEMO.TEST_DBMS_OUTPUT", line 47 -ORA-06512: at "WTP_DEMO.TEST_DBMS_OUTPUT", line 53 +ORA-06512: at "WTP_DEMO.TEST_DBMS_OUTPUT", line 54 ORA-06512: at line 1 -ORA-06512: at "WTP.WTPLSQL", line 309 +ORA-06512: at "WTP.WT_EXECUTE_TEST_RUNNER", line 11 +ORA-06512: at line 1 +ORA-06512: at "WTP.HOOK", line 41 +----- PL/SQL Call Stack ----- + object line object + handle number name +0x9deb4af8 43 package body WTP.HOOK.RUN +0x99b16938 503 package body WTP.WTPLSQL.TEST_RUN +0x7d7d6190 2 anonymous block + + * NOTE: No Data in Test Results Array "core_data.g_results_nt" + ``` The exception handler preserved the error stack before calling teardown. Also, there is an extra "ORA-20000:" at the front of the error stack displayed, but all the error information is preserved. -These are all the basic tools needed to successfully create and run test runner packages in wtPLSQL. +These are all the basic tools needed to successfully create and run Test Runner packages in wtPLSQL. --- [Demos and Examples](README.md) diff --git a/docs/demo/README.htm b/docs/demo/README.htm index 94aebe1..0346d1f 100644 --- a/docs/demo/README.htm +++ b/docs/demo/README.htm @@ -1,36 +1,27 @@

          Website Home Page

          Demonstrations and Examples


          -

          Demonstrations and examples assume successful connection to an Oracle database with wtPLSQL installed. wtPLSQL Installation instructions are available on the wtPLSQL Releases page.

          -

          Test results from assertions can be queried from a set of wtPLSQL tables. The examples here will use the default reporting package called WT_TEXT_REPORT. This package displays test results using DBMS_OUTPUT.

          -

          The Basics

          +

          Demonstrations and examples assume successful connection to an Oracle database with wtPLSQL installed. wtPLSQL Installation instructions are available on the wtPLSQL Releases page.

          +

          Demonstrations and examples requires the Persist add-on. Test results from assertions can be queried from a set of wtPLSQL tables. The examples here will use the default reporting package called WT_PERSIST_REPORT. This package displays test results using DBMS_OUTPUT.

          +

          User Setup

          A login, or database session, is required to interact with the Oracle database. The SQL below will create a user that can run these examples. If you already have a database login, this is not necessary.

          -
          create user wtp_demo identified by wtp_demo
          -   default tablespace users
          -   quota unlimited on users
          -   temporary tablespace temp;
          -
          -grant create session   to wtp_demo;
          -grant create type      to wtp_demo;
          -grant create sequence  to wtp_demo;
          -grant create table     to wtp_demo;
          -grant create trigger   to wtp_demo;
          -grant create view      to wtp_demo;
          -grant create procedure to wtp_demo;
          -
          -

          The simplest check for a wtPLSQL installation is to select the "version from dual".

          +

          To create a database login, run this installer:

          +
            +
          1. cd to "src/demo"
          2. +
          3. login as SYS or SYSTEM using SQL*Plus
          4. +
          5. Run the "install_sys.sql" script
          6. +
          +

          To confirm a successful install, review the "install_sys.LST" log file.

          +

          Confirm the Installation

          +

          The simplest check for a wtPLSQL installation is to select the "version from dual". If wtPSQL is installed, it will show which add-ons have been installed if any.

          Run this:

          select wtplsql.show_version from dual;
           
          -

          And get this:

          -
          SHOW_VERSION
          ------------------------------------------------------------
          -1.1.0
          -
          -

          This shows the wtPLSQL version as 1.1.0.

          -

          Another simple test is an ad-hoc assertion. This test requires DBMS_OUTPUT. The results of this test are not recorded.

          +

          If the result is something like "wtpsrc 1.003, wtpsav 1.003", wtPSQL is installed with the Persist (wtpsav) add-on. If the result is ,missing "wtpsav", the Persist add-on has not been installed. For simplicity, the adjustments required to make the demonstrations and exercises work without the Persist add-on are not included.

          +

          Another simple test

          +

          Another simple test is an ad-hoc assertion. The ad-hoc assertion requires DBMS_OUTPUT. The results of the ad-hoc assertions are not recorded by wtPLSQL.

          Run this:

          -
          set serveroutput on size unlimited format word_wrapped
          +
          set serveroutput on size unlimited format truncated
           
           begin
              wt_assert.eq(msg_in          => 'Ad-Hoc Test'
          @@ -40,18 +31,22 @@ 

          The Basics

          /

          And get this:

          -
          PASS Ad-Hoc Test. EQ - Expected "1" and got "1"
          +
          Ad-Hoc Test
          + Assertion EQ PASSED.
          + Expected "1" and got "1"
           

          This indicates:

            +
          • the assertion had the message "Ad-Hoc Test"
          • +
          • the assertion name is "EQ"
          • the assertion passed
          • -
          • the assertion had the message "Ad-Hoc Test"
          • -
          • the assertion name is "EQ"
          • the assertion details which may include the values tested
          -

          Note: This ad-hoc test also demonstrates implicit data type conversion.

          +

          Note: This ad-hoc test also demonstrates implicit data type conversion between number and varchar2.

          Create a Test Runner Package

          -

          A test runner package is central to running tests in wtPLSQL. The Test Runner page covers all the basics of creating a test runner package.

          +

          Creating a Test Runner package is central to using the wtPLSQL server. The Test Runner package contains all the assertion API calls used for testing. The package can also update/change wtPSQL settings, like the name of the Database Object Under Test (DBOUT).

          +

          The web page link below includes an exercise that shows how create a Test Runner package. The web page covers all the basics of creating a Test Runner package.

          +

          Create Test Runner Package

          Database Object Tests

          More interesting examples actually test database objects. Here are some examples.

            @@ -61,12 +56,67 @@

            Database Object Tests

          • Type Test

          utPLSQL 2.3 Examples

          -

          wtPLSQL was built with the utPLSQL "ut_assert" API. These examples were created from the original utPLSQL 2.3 examples without modifying the "ut_assert" calls

          +

          wtPLSQL was built with the utPLSQL "ut_assert" API. These examples were created from the original utPLSQL 2.3 examples without modifying the "ut_assert" calls

          +

          Demo Installer

          +

          To save some typing, there are scripts in the "src/demo" folder for the demonstrations and examples:

          +
            +
          • Package-Test.sql
          • +
          • Table-Test.sql
          • +
          • Trigger-Test.sql
          • +
          • Type-Test.sql
          • +
          • ut_betwnstr.sql
          • +
          • ut_calc_secs_between.sql
          • +
          • ut_truncit.sql
          • +
          • ut_str.sql
          • +
          +

          Demo Un-Install

          +

          The "uninstall.sql" script provided in the "src/demo" directory drops the demo schema from the database, with cascade.

          +

          To un-install:

          +
            +
          1. cd to "src/demo"
          2. +
          3. login as SYS or SYSTEM using SQL*Plus
          4. +
          5. Run the "uninstall.sql" script
          6. +
          +

          To confirm a successful un-install, review the "uninstall.LST" log file.

          +
          +

          The following applies to files and directories at this location in the documentation repository.

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          File NameDescription
          DBDocsSQL Developer DBDocs Files
          *.mdMarkdown files for "github.io"
          *.htmHTML files for local documentation
          md-to-htm.batMS-Dos Batch File to convert MD to HTML
          md-to-htm.luaLua script used by Pandoc for MD to HTML
          +

          To view documentation use the URL "file://README.htm" or Double-click on the README.htm file.

          +

          NOTE: All HTML files are sourced from Markdown files. Modify the Markdown files, then build HTML from the Markdown files using "md-to-htm.bat".


          Website Home Page

          diff --git a/docs/demo/README.md b/docs/demo/README.md index 558ad0d..28da1c2 100644 --- a/docs/demo/README.md +++ b/docs/demo/README.md @@ -4,30 +4,25 @@ --- -Demonstrations and examples assume successful connection to an [Oracle database](http://www.oracle.com/technetwork/database/database-technologies/express-edition/overview/index.html) with wtPLSQL installed. [wtPLSQL Installation instructions](https://github.com/DDieterich/wtPLSQL/releases) are available on the [wtPLSQL Releases page](https://github.com/DDieterich/wtPLSQL/releases). +Demonstrations and examples assume successful connection to an [Oracle database](https://www.oracle.com/database/technologies/appdev/xe.html) with wtPLSQL installed. wtPLSQL Installation instructions are available on the [wtPLSQL Releases page](https://github.com/wtPLSQL/wtPLSQL/releases). -Test results from assertions can be queried from a set of wtPLSQL tables. The examples here will use the default reporting package called WT_TEXT_REPORT. This package displays test results using DBMS_OUTPUT. +Demonstrations and examples requires the Persist add-on. Test results from assertions can be queried from a set of wtPLSQL tables. The examples here will use the default reporting package called WT_PERSIST_REPORT. This package displays test results using DBMS_OUTPUT. -## The Basics +## User Setup A login, or database session, is required to interact with the Oracle database. The SQL below will create a user that can run these examples. If you already have a database login, this is not necessary. -``` -create user wtp_demo identified by wtp_demo - default tablespace users - quota unlimited on users - temporary tablespace temp; - -grant create session to wtp_demo; -grant create type to wtp_demo; -grant create sequence to wtp_demo; -grant create table to wtp_demo; -grant create trigger to wtp_demo; -grant create view to wtp_demo; -grant create procedure to wtp_demo; -``` +To create a database login, run this installer: +1. cd to "src/demo" +1. login as SYS or SYSTEM using SQL*Plus +1. Run the "install_sys.sql" script + +To confirm a successful install, review the "install_sys.LST" log file. + -The simplest check for a wtPLSQL installation is to select the "version from dual". +## Confirm the Installation + +The simplest check for a wtPLSQL installation is to select the "version from dual". If wtPSQL is installed, it will show which add-ons have been installed if any. Run this: @@ -35,22 +30,16 @@ Run this: select wtplsql.show_version from dual; ``` -And get this: +If the result is something like "wtpsrc 1.003, wtpsav 1.003", wtPSQL is installed with the Persist (wtpsav) add-on. If the result is ,missing "wtpsav", the Persist add-on has not been installed. For simplicity, the adjustments required to make the demonstrations and exercises work without the Persist add-on are not included. -``` -SHOW_VERSION ------------------------------------------------------------ -1.1.0 -``` - -This shows the wtPLSQL version as 1.1.0. +### Another simple test -Another simple test is an ad-hoc assertion. This test requires DBMS_OUTPUT. The results of this test are not recorded. +Another simple test is an ad-hoc assertion. The ad-hoc assertion requires DBMS_OUTPUT. The results of the ad-hoc assertions are not recorded by wtPLSQL. Run this: ``` -set serveroutput on size unlimited format word_wrapped +set serveroutput on size unlimited format truncated begin wt_assert.eq(msg_in => 'Ad-Hoc Test' @@ -63,20 +52,26 @@ end; And get this: ``` -PASS Ad-Hoc Test. EQ - Expected "1" and got "1" +Ad-Hoc Test + Assertion EQ PASSED. + Expected "1" and got "1" ``` This indicates: - * the assertion passed * the assertion had the message "Ad-Hoc Test" * the assertion name is "EQ" + * the assertion passed * the assertion details which may include the values tested -Note: This ad-hoc test also demonstrates implicit data type conversion. +Note: This ad-hoc test also demonstrates implicit data type conversion between number and varchar2. ## Create a Test Runner Package -A test runner package is central to running tests in wtPLSQL. The [Test Runner](Test-Runner.md) page covers all the basics of creating a test runner package. +Creating a Test Runner package is central to using the wtPLSQL server. The Test Runner package contains all the assertion API calls used for testing. The package can also update/change wtPSQL settings, like the name of the Database Object Under Test (DBOUT). + +The web page link below includes an exercise that shows how create a Test Runner package. The web page covers all the basics of creating a Test Runner package. + +[Create Test Runner Package](Test-Runner.md) ## Database Object Tests More interesting examples actually test database objects. Here are some examples. @@ -93,5 +88,46 @@ wtPLSQL was built with the utPLSQL "ut_assert" API. These examples were created * [ut_truncit](ut_truncit.md) - Test a Table Modification Procedure * [ut_str](ut_str.md) - Test a Simple Function +## Demo Installer +To save some typing, there are scripts in the "src/demo" folder for the demonstrations and examples: +* Package-Test.sql +* Table-Test.sql +* Trigger-Test.sql +* Type-Test.sql +* ut_betwnstr.sql +* ut_calc_secs_between.sql +* ut_truncit.sql +* ut_str.sql + +## Demo Un-Install + +The "uninstall.sql" script provided in the "src/demo" directory drops the demo schema from the database, with cascade. + +To un-install: +1. cd to "src/demo" +1. login as SYS or SYSTEM using SQL*Plus +1. Run the "uninstall.sql" script + + +To confirm a successful un-install, review the "uninstall.LST" log file. + +--- + +*The following applies to files and directories at this location in the documentation repository.* + +File Name | Description +--------------|------------ +DBDocs | SQL Developer DBDocs Files +*.md | Markdown files for "github.io" +*.htm | HTML files for local documentation +md-to-htm.bat | MS-Dos Batch File to convert MD to HTML +md-to-htm.lua | Lua script used by Pandoc for MD to HTML + +To view documentation use the URL "file://README.htm" or Double-click on the README.htm file. + +NOTE: All HTML files are sourced from Markdown files. + Modify the Markdown files, then build HTML from the + Markdown files using "md-to-htm.bat". + --- [Website Home Page](../README.md) \ No newline at end of file diff --git a/docs/demo/Table-Test.htm b/docs/demo/Table-Test.htm index f3698b3..37666c2 100644 --- a/docs/demo/Table-Test.htm +++ b/docs/demo/Table-Test.htm @@ -1,7 +1,7 @@

          Demos and Examples

          Test Table Constraints


          -

          The syntax diagram in Oracle's "Database SQL Language Reference" (11.2) gives the list of constraints this way:

          +

          The syntax diagram in Oracle's "Database SQL Language Reference" (11.2) gives the list of constraints this way:

          • Not Null
          • Unique (Key)
          • @@ -9,7 +9,7 @@

            Test Table Constraints

          • References (Foreign Key)
          • Check
          -

          Typical unit testing (or white box testing) does not include the testing of constraints. In large part, these constraints are assumed to work without testing. Confirmation of continued function of these constraints is a reason to test them.

          +

          Typical, these constraints are assumed to work without testing. Here we create a Test Runner to test the constraints on a table.

          Table with Constraints

          A table with constraints is needed for testing. This table has several constraints

          Run this:

          @@ -52,40 +52,63 @@

          Test Runner

          against_this_in => 'TEST1'); rollback; end t_happy_path_1; + procedure t_sad_path_1 + is + begin + wt_assert.g_testcase := 'Sad Path 1'; + wt_assert.raises ( + msg_in => 'Raise Error', + check_call_in => 'insert into table_test_tab (id, name) values (1, ''Test1'')', + against_exc_in => 'ORA-02290: check constraint (WTP_DEMO.TABLE_TEST_TAB_CK1) violated'); + end t_sad_path_1; procedure wtplsql_run is begin t_happy_path_1; + t_sad_path_1; end wtplsql_run; end table_test_pkg; /

          Check the results

          +

          Run this to setup HOOKS:

          +
          begin
          +   wtp.wt_test_run.delete_hooks;
          +   wtp.junit_core_report.delete_hooks;
          +   wtp.wt_core_report.insert_hooks;
          +   update wtp.hooks
          +     set  run_string = 'begin wtp.wt_core_report.dbms_out(in_detail_level => 30); end;'
          +    where hook_name  = 'after_test_run'
          +     and  run_string = 'begin wtp.wt_core_report.dbms_out(in_detail_level => 10); end;';
          +   wtp.hook.init;
          +end;
          +/
          +

          Run this:

          -
          set serveroutput on size unlimited format word_wrapped
          -
          -begin
          -   wtplsql.test_run('TRIGGER_TEST_PKG');
          -   wt_text_report.dbms_out(USER,'TRIGGER_TEST_PKG',30);
          +
          begin
          +   wtplsql.test_run('TABLE_TEST_PKG');
           end;
           /
           

          And Get This:

          -
              wtPLSQL 1.1.0 - Run ID 70: 23-Jun-2018 07:30:47 PM
          -
          -  Test Results for WTP_DEMO.TABLE_TEST_PKG
          -       Total Test Cases:        1       Total Assertions:        2
          -  Minimum Interval msec:        0      Failed Assertions:        0
          -  Average Interval msec:      443       Error Assertions:        0
          -  Maximum Interval msec:      886             Test Yield:   100.00%
          -   Total Run Time (sec):      0.9
          +
            wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003
          +  Start Date/Time: 13-Apr-2024 01:14:13 AM
          +  Test Results for WT_DEMO.TABLE_TEST_PKG
          +  ------------------------------------------------------------------
          +  Minimum Elapsed msec:          0      Total Assertions:          3
          +  Average Elapsed msec:          1     Failed Assertions:          0
          +  Maximum Elapsed msec:          2       Total Testcases:          2
          +  Total Run Time (sec):        0.0      Failed Testcases:          0
          +                                          Testcase Yield:        100%
           
          - - WTP_DEMO.TABLE_TEST_PKG Test Result Details (Test Run ID 70)
          ------------------------------------------------------------
          - ---- Test Case: Happy Path 1
          - PASS  886ms Successful Insert. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "insert into table_test_tab (id, name) values (1, 'TEST1')".
          - PASS    0ms Confirm l_rec.name. EQ - Expected "TEST1" and got "TEST1"
          +  WT_DEMO.TABLE_TEST_PKG Test Runner Details
          +  --------------------------------------------------------------
          +---***  Happy Path 1  ***-------------------------------------------------------
          + PASS .755ms Successful Insert. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "insert into table_test_tab (id, name) values (1, 'TEST1')".
          + PASS .184ms Confirm l_rec.name. EQ - Expected "TEST1" and got "TEST1"
          +---***  Sad Path 1  ***---------------------------------------------------------
          + PASS 2.27ms Raise Error. RAISES/THROWS - Expected exception "%ORA-02290: check constraint (WT_DEMO.TABLE_TEST_TAB_CK1) violated%". Actual exception raised was "ORA-02290: check constraint (WT_DEMO.TABLE_TEST_TAB_CK1) violated". Exception raised by: "insert into table_test_tab (id, name) values (1, 'Test1')".
           

          This is report level 30, the most detailed level of reporting. Starting from the top, we find the test runner executed 1 test case and 2 assertions. All tests passed for a 100% yield. There is no code coverage for the constraints.

          -

          This is not a complete test. More test cases are needed to confirm other constraints and sad path .

          +

          This is not a complete test. More test cases are needed to confirm other constraints and sad path testing.


          Demos and Examples

          diff --git a/docs/demo/Table-Test.md b/docs/demo/Table-Test.md index af861bf..8d8679a 100644 --- a/docs/demo/Table-Test.md +++ b/docs/demo/Table-Test.md @@ -12,7 +12,7 @@ The syntax diagram in Oracle's "Database SQL Language Reference" (11.2) gives th * References (Foreign Key) * Check -Typical unit testing (or white box testing) does not include the testing of constraints. In large part, these constraints are assumed to work without testing. Confirmation of continued function of these constraints is a reason to test them. +Typical, these constraints are assumed to work without testing. Here we create a Test Runner to test the constraints on a table. ## Table with Constraints @@ -71,9 +71,19 @@ as against_this_in => 'TEST1'); rollback; end t_happy_path_1; + procedure t_sad_path_1 + is + begin + wt_assert.g_testcase := 'Sad Path 1'; + wt_assert.raises ( + msg_in => 'Raise Error', + check_call_in => 'insert into table_test_tab (id, name) values (1, ''Test1'')', + against_exc_in => 'ORA-02290: check constraint (WTP_DEMO.TABLE_TEST_TAB_CK1) violated'); + end t_sad_path_1; procedure wtplsql_run is begin t_happy_path_1; + t_sad_path_1; end wtplsql_run; end table_test_pkg; / @@ -81,14 +91,27 @@ end table_test_pkg; ## Check the results -Run this: +Run this to setup HOOKS: ``` -set serveroutput on size unlimited format word_wrapped +begin + wtp.wt_test_run.delete_hooks; + wtp.junit_core_report.delete_hooks; + wtp.wt_core_report.insert_hooks; + update wtp.hooks + set run_string = 'begin wtp.wt_core_report.dbms_out(in_detail_level => 30); end;' + where hook_name = 'after_test_run' + and run_string = 'begin wtp.wt_core_report.dbms_out(in_detail_level => 10); end;'; + wtp.hook.init; +end; +/ +``` +Run this: + +``` begin - wtplsql.test_run('TRIGGER_TEST_PKG'); - wt_text_report.dbms_out(USER,'TRIGGER_TEST_PKG',30); + wtplsql.test_run('TABLE_TEST_PKG'); end; / ``` @@ -96,25 +119,28 @@ end; And Get This: ``` - wtPLSQL 1.1.0 - Run ID 70: 23-Jun-2018 07:30:47 PM - - Test Results for WTP_DEMO.TABLE_TEST_PKG - Total Test Cases: 1 Total Assertions: 2 - Minimum Interval msec: 0 Failed Assertions: 0 - Average Interval msec: 443 Error Assertions: 0 - Maximum Interval msec: 886 Test Yield: 100.00% - Total Run Time (sec): 0.9 - - - WTP_DEMO.TABLE_TEST_PKG Test Result Details (Test Run ID 70) ------------------------------------------------------------ - ---- Test Case: Happy Path 1 - PASS 886ms Successful Insert. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "insert into table_test_tab (id, name) values (1, 'TEST1')". - PASS 0ms Confirm l_rec.name. EQ - Expected "TEST1" and got "TEST1" + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003 + Start Date/Time: 13-Apr-2024 01:14:13 AM + Test Results for WT_DEMO.TABLE_TEST_PKG + ------------------------------------------------------------------ + Minimum Elapsed msec: 0 Total Assertions: 3 + Average Elapsed msec: 1 Failed Assertions: 0 + Maximum Elapsed msec: 2 Total Testcases: 2 + Total Run Time (sec): 0.0 Failed Testcases: 0 + Testcase Yield: 100% + + WT_DEMO.TABLE_TEST_PKG Test Runner Details + -------------------------------------------------------------- +---*** Happy Path 1 ***------------------------------------------------------- + PASS .755ms Successful Insert. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "insert into table_test_tab (id, name) values (1, 'TEST1')". + PASS .184ms Confirm l_rec.name. EQ - Expected "TEST1" and got "TEST1" +---*** Sad Path 1 ***--------------------------------------------------------- + PASS 2.27ms Raise Error. RAISES/THROWS - Expected exception "%ORA-02290: check constraint (WT_DEMO.TABLE_TEST_TAB_CK1) violated%". Actual exception raised was "ORA-02290: check constraint (WT_DEMO.TABLE_TEST_TAB_CK1) violated". Exception raised by: "insert into table_test_tab (id, name) values (1, 'Test1')". ``` This is report level 30, the most detailed level of reporting. Starting from the top, we find the test runner executed 1 test case and 2 assertions. All tests passed for a 100% yield. There is no code coverage for the constraints. -This is not a complete test. More test cases are needed to confirm other constraints and sad path . +This is not a complete test. More test cases are needed to confirm other constraints and sad path testing. --- [Demos and Examples](README.md) diff --git a/docs/demo/Test-Runner.htm b/docs/demo/Test-Runner.htm index db6f3ec..2f5630e 100644 --- a/docs/demo/Test-Runner.htm +++ b/docs/demo/Test-Runner.htm @@ -1,7 +1,7 @@

          Demos and Examples

          Create a Simple Test Runner Package


          -

          Most all wtPLSQL tests are executed by a test runner package. Test runner packages are written by the tester. Below are examples of very simple test runner packages.

          +

          Most all wtPLSQL tests are executed by a Test Runner package. Test runner packages are written by the tester. Below are examples of very simple Test Runner packages.

          Run this:

          create or replace package simple_test_runner authid definer
           as
          @@ -20,63 +20,66 @@ 

          Create a Simple Test Runner Package end simple_test_runner; /

          -

          SIMPLE_TEST_RUNNER is a minimal test runner. It is a package that contains the (public) WTPLSQL_RUN procedure and 1 assertion. It does the same assertion as the ad-hoc assertion in the Demos and Examples page.

          +

          SIMPLE_TEST_RUNNER is a minimal Test Runner. It is a package that contains the (public) WTPLSQL_RUN procedure and 1 assertion. It does the same assertion as the ad-hoc assertion in the Demos and Examples page.

          +

          The Persist add-on should be installed.

          Execute and Display

          -

          To execute the test runner package, run this:

          +

          Run this to setup HOOKS:

          begin
          -   wtplsql.test_run('SIMPLE_TEST_RUNNER');
          +   wtp.junit_core_report.delete_hooks;
          +   wtp.wt_core_report.delete_hooks;
          +   wtp.wt_test_run.insert_hooks;
           end;
           /
           
          -

          There are no test results because the test results were not sent to DBMS_OUTPUT. The test results were saved in the wtPLSQL tables.

          -

          To view the results, run this:

          -
          set serveroutput on size unlimited format word_wrapped
          -
          -begin
          -   wt_text_report.dbms_out(USER,'SIMPLE_TEST_RUNNER');
          +

          To execute the Test Runner package, run this:

          +
          begin
          +   wtplsql.test_run('SIMPLE_TEST_RUNNER');
          +   wtp.wt_persist_report.dbms_out(in_runner_name  => 'SIMPLE_TEST_RUNNER');
           end;
           /
           

          And get this:

          -
              wtPLSQL 1.1.0 - Run ID 12: 15-Jun-2018 01:45:16 PM
          -
          -  Test Results for WTP_DEMO.SIMPLE_TEST_RUNNER
          -       Total Test Cases:        0       Total Assertions:        1
          -  Minimum Interval msec:       56      Failed Assertions:        0
          -  Average Interval msec:       56       Error Assertions:        0
          -  Maximum Interval msec:       56             Test Yield:   100.00%
          -   Total Run Time (sec):      0.2
          -
          -

          This is the test result summary from the last execution of the SIMPLE_TEST_RUNNER package. The interval time shown here is the elapsed time from starting the test runner package until the first assertion was executed. The total run time is the elapsed time from start to finish for the test runner package. The report confirms that one assertion was executed for SIMPLE_TEST_RUNNER and it passed. All tests passed, so the test yield is 100%.

          -

          WT_TEXT_REPORT Display Levels

          +
            wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003
          +  Test Results for WT_DEMO.SIMPLE_TEST_RUNNER
          +  Run ID 39: 13-Apr-2024 06:07:21 PM
          +  --------------------------------------------------------------
          +  Minimum Elapsed msec:        6      Total Assertions:        1
          +  Average Elapsed msec:        6     Failed Assertions:        0
          +  Maximum Elapsed msec:        6       Total Testcases:        1
          +  Total Run Time (sec):      0.0      Failed Testcases:        0
          +                                        Testcase Yield:      100%
          +
          +

          This is the test result summary from the last execution of the SIMPLE_TEST_RUNNER package. The Total Run Time is the elapsed time from start to finish for the Test Runner package. The report confirms that one assertion was executed for SIMPLE_TEST_RUNNER and it passed. All tests passed, so the test yield is 100%.

          +

          WT_PERSIST_REPORT Display Levels

          This example shows all result details for the SIMPLE_TEST_RUNNER only.

          Run this:

          -
          set serveroutput on size unlimited format word_wrapped
          -
          -begin
          -   wt_text_report.dbms_out(in_runner_name  => 'SIMPLE_TEST_RUNNER'
          -                          ,in_detail_level => 30);
          +
          begin
          +   wtp.wt_persist_report.dbms_out(in_runner_owner => USER
          +                                 ,in_runner_name  => 'SIMPLE_TEST_RUNNER'
          +                                 ,in_detail_level => 30);
           end;
           /
           

          And get this:

          -
              wtPLSQL 1.1.0 - Run ID 12: 15-Jun-2018 01:45:16 PM
          +
            wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003
          +  Test Results for WT_DEMO.SIMPLE_TEST_RUNNER
          +  Run ID 39: 13-Apr-2024 06:07:21 PM
          +  --------------------------------------------------------------
          +  Minimum Elapsed msec:        6      Total Assertions:        1
          +  Average Elapsed msec:        6     Failed Assertions:        0
          +  Maximum Elapsed msec:        6       Total Testcases:        1
          +  Total Run Time (sec):      0.0      Failed Testcases:        0
          +                                        Testcase Yield:      100%
           
          -  Test Results for WTP_DEMO.SIMPLE_TEST_RUNNER
          -       Total Test Cases:        0       Total Assertions:        1
          -  Minimum Interval msec:       56      Failed Assertions:        0
          -  Average Interval msec:       56       Error Assertions:        0
          -  Maximum Interval msec:       56             Test Yield:   100.00%
          -   Total Run Time (sec):      0.2
          -
          - - WTP_DEMO.SIMPLE_TEST_RUNNER Test Result Details (Test Run ID 12)
          ------------------------------------------------------------
          - PASS   56ms Ad-Hoc Test. EQ - Expected "1" and got "1"
          +  WT_DEMO.SIMPLE_TEST_RUNNER Test Result Details
          +  Test Run ID: 39
          +  --------------------------------------------------------------
          +---***  WT_DEMO.SIMPLE_TEST_RUNNER  ***-----------------------------------------
          + PASS 6.17ms Ad-Hoc Test. EQ - Expected "1" and got "1"
           
          -

          This shows the latest test result summary with test results details. A detail level of 30 shows summary and detailed test results for a test runner package. In this case, the summary and the detailed results of the EQ assertion are shown. These detail levels are explained in the Reference Page.

          -

          The detailed results shown are the same as the ad-hoc result, with a "56ms" added. The 56 in the detailed results shows the elapsed time between assertions, or elapsed time from test runner package startup to the first assertion.

          +

          This shows the latest test result summary with test results details. A detail level of 30 shows summary and detailed test results for a Test Runner package. In this case, the summary and the detailed results of the EQ assertion are shown. These detail levels are explained in the Reference Page.

          Test Cases

          -

          For wtPLSQL, a test case is a collection of assertions. Assertion results can be grouped by test case. There can be zero or more test cases in a test runner package.

          +

          For wtPLSQL, a test case is a collection of assertions. Assertion results can be grouped by test case. There can be zero or more test cases in a Test Runner package.

          Run this:

          create or replace package body simple_test_runner
           as
          @@ -99,42 +102,45 @@ 

          Test Cases

          end simple_test_runner; /
          -

          Setting a value for WT_ASSERT.G_TESTCASE in the SIMPLE_TEST_RUNNER package sets a test case for all following assertions. This value can be set multiple times within a test runner package. The results summary will show the number of test cases. The test results details will group assertions by test case.

          +

          Setting a value for WT_ASSERT.G_TESTCASE in the SIMPLE_TEST_RUNNER package sets a test case for all following assertions. This value can be set multiple times within a Test Runner package. The results summary will show the number of test cases. The test results details will group assertions by test case.

          Run this:

          begin
              wtplsql.test_run('SIMPLE_TEST_RUNNER');
          -   wt_text_report.dbms_out(in_runner_name  => 'SIMPLE_TEST_RUNNER'
          -                          ,in_detail_level => 30);
          +   wtp.wt_persist_report.dbms_out(in_runner_owner => USER
          +                                 ,in_runner_name  => 'SIMPLE_TEST_RUNNER'
          +                                 ,in_detail_level => 30);
           end;
           /
           

          And get this:

          -
              wtPLSQL 1.1.0 - Run ID 43: 16-Jun-2018 07:43:50 AM
          -
          -  Test Results for WTP_DEMO.SIMPLE_TEST_RUNNER
          -       Total Test Cases:        2       Total Assertions:        4
          -  Minimum Interval msec:        0      Failed Assertions:        1
          -  Average Interval msec:        0       Error Assertions:        0
          -  Maximum Interval msec:        1             Test Yield:    75.00%
          -   Total Run Time (sec):      0.0
          +
            wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003
          +  Test Results for WT_DEMO.SIMPLE_TEST_RUNNER
          +  Run ID 40: 13-Apr-2024 06:13:21 PM
          +  --------------------------------------------------------------
          +  Minimum Elapsed msec:        0      Total Assertions:        4
          +  Average Elapsed msec:        0     Failed Assertions:        1
          +  Maximum Elapsed msec:        0       Total Testcases:        2
          +  Total Run Time (sec):      0.0      Failed Testcases:        1
          +                                        Testcase Yield:       50%
           
          - - WTP_DEMO.SIMPLE_TEST_RUNNER Test Result Details (Test Run ID 43)
          ------------------------------------------------------------
          - ---- Test Case: My Test Case A
          - PASS    1ms Ad-Hoc Test1. EQ - Expected "1" and got "1"
          - PASS    0ms Ad-Hoc Test2. EQ - Expected "2" and got "2"
          - ---- Test Case: My Test Case B
          -#FAIL#   0ms Ad-Hoc Test1. EQ - Expected " 4" and got "4"
          - PASS    0ms Ad-Hoc Test2. EQ - Expected "5" and got "5"
          -
          -

          The Test Results summary shows 2 test cases were found. The Test Results Details show the assertion results grouped by test case. The details also show a failed assertion. It also shows "Ad-Hoc Test2" in "My Test Case B" passed because the TO_NUMBER was used to remove the space character from " 5".

          + WT_DEMO.SIMPLE_TEST_RUNNER Test Result Details + Test Run ID: 40 + -------------------------------------------------------------- +---*** My Test Case A ***----------------------------------------------------- + PASS .38ms Ad-Hoc Test1. EQ - Expected "1" and got "1" + PASS .116ms Ad-Hoc Test2. EQ - Expected "2" and got "2" +---*** My Test Case B ***----------------------------------------------------- +#FAIL#.048ms Ad-Hoc Test1. EQ - Expected " 4" and got "4" + PASS .043ms Ad-Hoc Test2. EQ - Expected "5" and got "5" +
          +

          The Test Results summary shows 2 test cases were found. The Test Results Details show the assertion results grouped by test case. The details also show a failed assertion. It also shows "Ad-Hoc Test2" in "My Test Case B" passed because the TO_NUMBER was used to remove the space character from " 5".

          DBOUT Annotation

          The Database Object Under Test (DBOUT) annotation is used to determine which database object to profile. If this annotation identifies accessible source code for a DBOUT, the DBMS_PROFILER package is activated to check code coverage.

          Run this:

          create or replace package body simple_test_runner
           as
          -   --% WTPLSQL SET DBOUT "SIMPLE_TEST_RUNNER:PACKAGE BODY" %--
              procedure wtplsql_run is begin
          +      wtplsql.g_DBOUT := 'SIMPLE_TEST_RUNNER:PACKAGE BODY';
                 wt_assert.eq(msg_in          => 'Ad-Hoc Test'
                             ,check_this_in   =>  1
                             ,against_this_in => '1');
          @@ -142,36 +148,39 @@ 

          DBOUT Annotation

          end simple_test_runner; /
          -

          With the addition of the DBOUT annotation, the profiling information is available for the SIMPLE_TEST_RUNNER package. The DBOUT takes the form of "owner.object_name:object_type". "owner" will default to "USER". "object_name" is required. "object_type" is required if more than one object has that name. Package bodies will always require the ":PACKAGE BODY" because the package specification is always another database object with the same name.

          +

          With the addition of the DBOUT annotation, the profiling information is available for the SIMPLE_TEST_RUNNER package. The DBOUT takes the form of "owner.object_name:object_type". "owner" will default to "USER". "object_name" is required. "object_type" is required if more than one object has that name. Package bodies will always require the ":PACKAGE BODY" because the package specification is always another database object with the same name.

          Run this:

          begin
              wtplsql.test_run('SIMPLE_TEST_RUNNER');
          -   wt_text_report.dbms_out(USER,'SIMPLE_TEST_RUNNER');
          +   wtp.wt_persist_report.dbms_out(in_runner_owner => USER
          +                                 ,in_runner_name  => 'SIMPLE_TEST_RUNNER');
           end;
           /
           

          And get this:

          -
              wtPLSQL 1.1.0 - Run ID 38: 15-Jun-2018 11:03:52 PM
          +
            wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003
          +  Test Results for WT_DEMO.SIMPLE_TEST_RUNNER
          +  Run ID 42: 13-Apr-2024 06:19:53 PM
          +  --------------------------------------------------------------
          +  Minimum Elapsed msec:        0      Total Assertions:        1
          +  Average Elapsed msec:        0     Failed Assertions:        0
          +  Maximum Elapsed msec:        0       Total Testcases:        1
          +  Total Run Time (sec):      0.2      Failed Testcases:        0
          +                                        Testcase Yield:      100%
           
          -  Test Results for WTP_DEMO.SIMPLE_TEST_RUNNER
          -       Total Test Cases:        0       Total Assertions:        1
          -  Minimum Interval msec:      186      Failed Assertions:        0
          -  Average Interval msec:      186       Error Assertions:        0
          -  Maximum Interval msec:      186             Test Yield:   100.00%
          -   Total Run Time (sec):      0.2
          -
          -  Code Coverage for PACKAGE BODY WTP_DEMO.SIMPLE_TEST_RUNNER
          +  Code Coverage for PACKAGE BODY WT_DEMO.SIMPLE_TEST_RUNNER
          +  ----------------------------------------------------------------
                     Ignored Lines:        0   Total Profiled Lines:        4
                    Excluded Lines:        0   Total Executed Lines:        3
             Minimum LineExec usec:        1     Not Executed Lines:        0
          -  Average LineExec usec:        7          Unknown Lines:        1
          -  Maximum LineExec usec:       25          Code Coverage:   100.00%
          -  Trigger Source Offset:        0
          +  Average LineExec usec:        3          Unknown Lines:        1
          +  Maximum LineExec usec:        7          Code Coverage:    100.0%
          +  Trigger Source Offset:        0                                 
           
          -

          This shows the latest test result summary and code coverage summary for the SIMPLE_TEST_RUNNER test runner. DBMS_PROFILER found 4 lines of significance in the source code. 3 of those lines were executed. 1 line is unknown or undefined by DBMS_PROFILER. Unknown lines consume execution time, but were not executed.

          +

          This shows the latest test result summary and code coverage summary for the SIMPLE_TEST_RUNNER Test Runner. DBMS_PROFILER found 4 lines of significance in the source code. 3 of those lines were executed. 1 line is unknown or undefined by DBMS_PROFILER. Unknown lines consume execution time, but were not executed.

          Ignore Annotation

          -

          In the previous example, the SIMPLE_TEST_RUNNER package is both the test runner and the Database Object Under Test (DBOUT). In practice, this is a self testing package. Because DBMS_OUTPUT includes all the source lines, there is a need to segregate "testing" source lines from "tested" source lines. The ignore annotation is used to segregate these lines.

          -

          The function "add2" represents some code that needs to be tested. It is also a private function. Self testing packages can test the private functions in the package.

          +

          In the previous example, the SIMPLE_TEST_RUNNER package is both the Test Runner and the Database Object Under Test (DBOUT). In practice, this is a self testing package. Because DBMS_OUTPUT includes all the source lines, there is a need to segregate "testing" source lines from "tested" source lines. The ignore annotation is used to segregate these lines.

          +

          The function "add2" represents some code that needs to be tested. It is also a private function. Self testing packages can test the private functions in the package.

          Run this:

          create or replace package body simple_test_runner
           as
          @@ -192,57 +201,65 @@ 

          Ignore Annotation

          /

          The DBOUT annotation has been moved for convenience. It can be placed anywhere in the source.

          -

          The "begin_ignore" and "end_ignore" annotations have been added to the SIMPLE_TEST_RUNNER package. The intent of these annotations is to ignore the source lines for the WTPLSQL_RUN procedure for code coverage calculations.

          +

          The "begin_ignore" and "end_ignore" annotations have been added to the SIMPLE_TEST_RUNNER package. The intent of these annotations is to ignore the source lines for the WTPLSQL_RUN procedure for code coverage calculations.

          Run this:

          begin
              wtplsql.test_run('SIMPLE_TEST_RUNNER');
          -   wt_text_report.dbms_out(USER,'SIMPLE_TEST_RUNNER',30);
          +   wtp.wt_persist_report.dbms_out(in_runner_owner => USER
          +                                 ,in_runner_name  => 'SIMPLE_TEST_RUNNER'
          +                                 ,in_detail_level => 30);
           end;
           /
           

          And get this:

          -
              wtPLSQL 1.1.0 - Run ID 40: 16-Jun-2018 12:38:49 AM
          -
          -  Test Results for WTP_DEMO.SIMPLE_TEST_RUNNER
          -       Total Test Cases:        1       Total Assertions:        1
          -  Minimum Interval msec:      111      Failed Assertions:        0
          -  Average Interval msec:      111       Error Assertions:        0
          -  Maximum Interval msec:      111             Test Yield:   100.00%
          -   Total Run Time (sec):      0.1
          +
            wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003
          +  Test Results for WT_DEMO.SIMPLE_TEST_RUNNER
          +  Run ID 43: 13-Apr-2024 06:21:38 PM
          +  --------------------------------------------------------------
          +  Minimum Elapsed msec:        0      Total Assertions:        1
          +  Average Elapsed msec:        0     Failed Assertions:        0
          +  Maximum Elapsed msec:        0       Total Testcases:        1
          +  Total Run Time (sec):      0.2      Failed Testcases:        0
          +                                        Testcase Yield:      100%
           
          -  Code Coverage for PACKAGE BODY WTP_DEMO.SIMPLE_TEST_RUNNER
          -          Ignored Lines:        4   Total Profiled Lines:        8
          -         Excluded Lines:        1   Total Executed Lines:        3
          +  Code Coverage for PACKAGE BODY WT_DEMO.SIMPLE_TEST_RUNNER
          +  ----------------------------------------------------------------
          +          Ignored Lines:        5   Total Profiled Lines:        9
          +         Excluded Lines:        0   Total Executed Lines:        3
             Minimum LineExec usec:        0     Not Executed Lines:        0
          -  Average LineExec usec:        1          Unknown Lines:        0
          -  Maximum LineExec usec:        2          Code Coverage:   100.00%
          -  Trigger Source Offset:        0
          +  Average LineExec usec:        1          Unknown Lines:        1
          +  Maximum LineExec usec:        1          Code Coverage:    100.0%
          +  Trigger Source Offset:        0                                 
           
          - - WTP_DEMO.SIMPLE_TEST_RUNNER Test Result Details (Test Run ID 40)
          ------------------------------------------------------------
          - ---- Test Case: My Test Case
          - PASS  111ms Ad-Hoc Test. EQ - Expected "5" and got "5"
          +  WT_DEMO.SIMPLE_TEST_RUNNER Test Result Details
          +  Test Run ID: 43
          +  --------------------------------------------------------------
          +---***  My Test Case  ***-------------------------------------------------------
          + PASS .436ms Ad-Hoc Test. EQ - Expected "5" and got "5"
           
          - - WTP_DEMO.SIMPLE_TEST_RUNNER PACKAGE BODY Code Coverage Details (Test Run ID 40)
          +  WT_DEMO.SIMPLE_TEST_RUNNER PACKAGE BODY Code Coverage Details
          +  Test Run ID: 43
          +  ----------------------------------------------------------------
           Source               TotTime MinTime   MaxTime     
             Line Stat Occurs    (usec)  (usec)    (usec) Text
           ------ ---- ------ --------- ------- --------- ------------
          -     4 EXCL      0         0       0         0    function add2 (in_val1 number, in_val2 number) return number is
          -     7 EXEC      1         2       2         2       l_result := in_val1 + in_val2;
          -     8 EXEC      1         0       0         0       return l_result;
          -     9 EXEC      1         1       1         1    end add2;
          -    10 IGNR      0         2       2         2    procedure wtplsql_run is begin --%WTPLSQL_begin_ignore_lines%--
          -    11 IGNR      2        30       1        29       wt_assert.g_testcase := 'My Test Case';
          -    12 IGNR      1        11      11        11       wt_assert.eq(msg_in          => 'Ad-Hoc Test'
          -    15 IGNR      1         0       0         0    end wtplsql_run;    --%WTPLSQL_end_ignore_lines%--
          -
          -

          This is a very large report from the WT_TEXT_REPORT package. The detail level of 30 displays the full detail of the test runner execution with code coverage.

          -

          Close to the middle of the output, is the "Code Coverage Details" title for the final section. This section contains results from DBMS_PROFILER. Each line of source code is matched with that output. Some interesting points.

          + 3 UNKN 0 1 1 1 function add2 (in_val1 number, in_val2 number) return number is + 6 EXEC 1 1 1 1 l_result := in_val1 + in_val2; + 7 EXEC 1 0 0 0 return l_result; + 8 EXEC 1 1 1 1 end add2; + 9 IGNR 0 1 1 1 procedure wtplsql_run is begin --%WTPLSQL_begin_ignore_lines%-- + 10 IGNR 2 27 0 26 wtplsql.g_DBOUT := 'SIMPLE_TEST_RUNNER:PACKAGE BODY'; + 11 IGNR 2 15 0 14 wt_assert.g_testcase := 'My Test Case'; + 12 IGNR 1 8 0 8 wt_assert.eq(msg_in => 'Ad-Hoc Test' + 15 IGNR 1 1 1 1 end wtplsql_run; --%WTPLSQL_end_ignore_lines%-- +
          +

          This is a very large report from the WT_PERSIST_REPORT package. The detail level of 30 displays the full detail of the Test Runner execution with code coverage.

          +

          Close to the middle of the output, is the "Code Coverage Details" title for the final section. This section contains results from DBMS_PROFILER. Each line of source code is matched with that output. Some interesting points.

            -
          • Line 4, is excluded by wtPLSQL because it is not executable
          • -
          • Lines 7, 8, and 9 were executed, according to DBMS_OUTPUT.
          • -
          • Lines 10, 11, 12, and 15 were ignored as per the annotation.
          • -
          • Several other lines are not included because DBMS_OUPUT did not collect any data on them.
          • +
          • Line 3, is excluded by wtPLSQL because it is not executable (Unknown)
          • +
          • Lines 6, 7, and 8 were executed, according to DBMS_PROFILER.
          • +
          • Lines 9, 10, 11, 12, and 15 were ignored as per the annotation.
          • +
          • Several other lines are not included because DBMS_PROFILER did not collect any data on them.

          Demos and Examples

          diff --git a/docs/demo/Test-Runner.md b/docs/demo/Test-Runner.md index a3b1b28..f181eeb 100644 --- a/docs/demo/Test-Runner.md +++ b/docs/demo/Test-Runner.md @@ -3,7 +3,7 @@ # Create a Simple Test Runner Package --- -Most all wtPLSQL tests are executed by a test runner package. Test runner packages are written by the tester. Below are examples of very simple test runner packages. +Most all wtPLSQL tests are executed by a Test Runner package. Test runner packages are written by the tester. Below are examples of very simple Test Runner packages. Run this: @@ -29,28 +29,29 @@ end simple_test_runner; / ``` -SIMPLE_TEST_RUNNER is a minimal test runner. It is a package that contains the (public) WTPLSQL_RUN procedure and 1 assertion. It does the same assertion as the ad-hoc assertion in the [Demos and Examples](README.md) page. +SIMPLE_TEST_RUNNER is a minimal Test Runner. It is a package that contains the (public) WTPLSQL_RUN procedure and 1 assertion. It does the same assertion as the ad-hoc assertion in the [Demos and Examples](README.md) page. + +The Persist add-on should be installed. ## Execute and Display -To execute the test runner package, run this: +Run this to setup HOOKS: ``` begin - wtplsql.test_run('SIMPLE_TEST_RUNNER'); + wtp.junit_core_report.delete_hooks; + wtp.wt_core_report.delete_hooks; + wtp.wt_test_run.insert_hooks; end; / ``` -There are no test results because the test results were not sent to DBMS_OUTPUT. The test results were saved in the wtPLSQL tables. - -To view the results, run this: +To execute the Test Runner package, run this: ``` -set serveroutput on size unlimited format word_wrapped - begin - wt_text_report.dbms_out(USER,'SIMPLE_TEST_RUNNER'); + wtplsql.test_run('SIMPLE_TEST_RUNNER'); + wtp.wt_persist_report.dbms_out(in_runner_name => 'SIMPLE_TEST_RUNNER'); end; / ``` @@ -58,30 +59,30 @@ end; And get this: ``` - wtPLSQL 1.1.0 - Run ID 12: 15-Jun-2018 01:45:16 PM - - Test Results for WTP_DEMO.SIMPLE_TEST_RUNNER - Total Test Cases: 0 Total Assertions: 1 - Minimum Interval msec: 56 Failed Assertions: 0 - Average Interval msec: 56 Error Assertions: 0 - Maximum Interval msec: 56 Test Yield: 100.00% - Total Run Time (sec): 0.2 + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003 + Test Results for WT_DEMO.SIMPLE_TEST_RUNNER + Run ID 39: 13-Apr-2024 06:07:21 PM + -------------------------------------------------------------- + Minimum Elapsed msec: 6 Total Assertions: 1 + Average Elapsed msec: 6 Failed Assertions: 0 + Maximum Elapsed msec: 6 Total Testcases: 1 + Total Run Time (sec): 0.0 Failed Testcases: 0 + Testcase Yield: 100% ``` -This is the test result summary from the last execution of the SIMPLE_TEST_RUNNER package. The interval time shown here is the elapsed time from starting the test runner package until the first assertion was executed. The total run time is the elapsed time from start to finish for the test runner package. The report confirms that one assertion was executed for SIMPLE_TEST_RUNNER and it passed. All tests passed, so the test yield is 100%. +This is the test result summary from the last execution of the SIMPLE_TEST_RUNNER package. The Total Run Time is the elapsed time from start to finish for the Test Runner package. The report confirms that one assertion was executed for SIMPLE_TEST_RUNNER and it passed. All tests passed, so the test yield is 100%. -## WT_TEXT_REPORT Display Levels +## WT_PERSIST_REPORT Display Levels This example shows all result details for the SIMPLE_TEST_RUNNER only. Run this: ``` -set serveroutput on size unlimited format word_wrapped - begin - wt_text_report.dbms_out(in_runner_name => 'SIMPLE_TEST_RUNNER' - ,in_detail_level => 30); + wtp.wt_persist_report.dbms_out(in_runner_owner => USER + ,in_runner_name => 'SIMPLE_TEST_RUNNER' + ,in_detail_level => 30); end; / ``` @@ -89,27 +90,28 @@ end; And get this: ``` - wtPLSQL 1.1.0 - Run ID 12: 15-Jun-2018 01:45:16 PM - - Test Results for WTP_DEMO.SIMPLE_TEST_RUNNER - Total Test Cases: 0 Total Assertions: 1 - Minimum Interval msec: 56 Failed Assertions: 0 - Average Interval msec: 56 Error Assertions: 0 - Maximum Interval msec: 56 Test Yield: 100.00% - Total Run Time (sec): 0.2 + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003 + Test Results for WT_DEMO.SIMPLE_TEST_RUNNER + Run ID 39: 13-Apr-2024 06:07:21 PM + -------------------------------------------------------------- + Minimum Elapsed msec: 6 Total Assertions: 1 + Average Elapsed msec: 6 Failed Assertions: 0 + Maximum Elapsed msec: 6 Total Testcases: 1 + Total Run Time (sec): 0.0 Failed Testcases: 0 + Testcase Yield: 100% - - WTP_DEMO.SIMPLE_TEST_RUNNER Test Result Details (Test Run ID 12) ------------------------------------------------------------ - PASS 56ms Ad-Hoc Test. EQ - Expected "1" and got "1" + WT_DEMO.SIMPLE_TEST_RUNNER Test Result Details + Test Run ID: 39 + -------------------------------------------------------------- +---*** WT_DEMO.SIMPLE_TEST_RUNNER ***----------------------------------------- + PASS 6.17ms Ad-Hoc Test. EQ - Expected "1" and got "1" ``` -This shows the latest test result summary with test results details. A detail level of 30 shows summary and detailed test results for a test runner package. In this case, the summary and the detailed results of the EQ assertion are shown. These detail levels are explained in the [Reference Page](../Reference.md#wt_text_report-detail-levels). - -The detailed results shown are the same as the ad-hoc result, with a "56ms" added. The 56 in the detailed results shows the elapsed time between assertions, or elapsed time from test runner package startup to the first assertion. +This shows the latest test result summary with test results details. A detail level of 30 shows summary and detailed test results for a Test Runner package. In this case, the summary and the detailed results of the EQ assertion are shown. These detail levels are explained in the [Reference Page](../Reference.md#wt_persist_report-detail-levels). ## Test Cases -For wtPLSQL, a test case is a collection of assertions. Assertion results can be grouped by test case. There can be zero or more test cases in a test runner package. +For wtPLSQL, a test case is a collection of assertions. Assertion results can be grouped by test case. There can be zero or more test cases in a Test Runner package. Run this: @@ -136,15 +138,16 @@ end simple_test_runner; / ``` -Setting a value for WT_ASSERT.G_TESTCASE in the SIMPLE_TEST_RUNNER package sets a test case for all following assertions. This value can be set multiple times within a test runner package. The results summary will show the number of test cases. The test results details will group assertions by test case. +Setting a value for WT_ASSERT.G_TESTCASE in the SIMPLE_TEST_RUNNER package sets a test case for all following assertions. This value can be set multiple times within a Test Runner package. The results summary will show the number of test cases. The test results details will group assertions by test case. Run this: ``` begin wtplsql.test_run('SIMPLE_TEST_RUNNER'); - wt_text_report.dbms_out(in_runner_name => 'SIMPLE_TEST_RUNNER' - ,in_detail_level => 30); + wtp.wt_persist_report.dbms_out(in_runner_owner => USER + ,in_runner_name => 'SIMPLE_TEST_RUNNER' + ,in_detail_level => 30); end; / ``` @@ -152,23 +155,25 @@ end; And get this: ``` - wtPLSQL 1.1.0 - Run ID 43: 16-Jun-2018 07:43:50 AM - - Test Results for WTP_DEMO.SIMPLE_TEST_RUNNER - Total Test Cases: 2 Total Assertions: 4 - Minimum Interval msec: 0 Failed Assertions: 1 - Average Interval msec: 0 Error Assertions: 0 - Maximum Interval msec: 1 Test Yield: 75.00% - Total Run Time (sec): 0.0 + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003 + Test Results for WT_DEMO.SIMPLE_TEST_RUNNER + Run ID 40: 13-Apr-2024 06:13:21 PM + -------------------------------------------------------------- + Minimum Elapsed msec: 0 Total Assertions: 4 + Average Elapsed msec: 0 Failed Assertions: 1 + Maximum Elapsed msec: 0 Total Testcases: 2 + Total Run Time (sec): 0.0 Failed Testcases: 1 + Testcase Yield: 50% - - WTP_DEMO.SIMPLE_TEST_RUNNER Test Result Details (Test Run ID 43) ------------------------------------------------------------ - ---- Test Case: My Test Case A - PASS 1ms Ad-Hoc Test1. EQ - Expected "1" and got "1" - PASS 0ms Ad-Hoc Test2. EQ - Expected "2" and got "2" - ---- Test Case: My Test Case B -#FAIL# 0ms Ad-Hoc Test1. EQ - Expected " 4" and got "4" - PASS 0ms Ad-Hoc Test2. EQ - Expected "5" and got "5" + WT_DEMO.SIMPLE_TEST_RUNNER Test Result Details + Test Run ID: 40 + -------------------------------------------------------------- +---*** My Test Case A ***----------------------------------------------------- + PASS .38ms Ad-Hoc Test1. EQ - Expected "1" and got "1" + PASS .116ms Ad-Hoc Test2. EQ - Expected "2" and got "2" +---*** My Test Case B ***----------------------------------------------------- +#FAIL#.048ms Ad-Hoc Test1. EQ - Expected " 4" and got "4" + PASS .043ms Ad-Hoc Test2. EQ - Expected "5" and got "5" ``` The Test Results summary shows 2 test cases were found. The Test Results Details show the assertion results grouped by test case. The details also show a failed assertion. It also shows "Ad-Hoc Test2" in "My Test Case B" passed because the TO_NUMBER was used to remove the space character from " 5". @@ -182,8 +187,8 @@ Run this: ``` create or replace package body simple_test_runner as - --% WTPLSQL SET DBOUT "SIMPLE_TEST_RUNNER:PACKAGE BODY" %-- procedure wtplsql_run is begin + wtplsql.g_DBOUT := 'SIMPLE_TEST_RUNNER:PACKAGE BODY'; wt_assert.eq(msg_in => 'Ad-Hoc Test' ,check_this_in => 1 ,against_this_in => '1'); @@ -199,7 +204,8 @@ Run this: ``` begin wtplsql.test_run('SIMPLE_TEST_RUNNER'); - wt_text_report.dbms_out(USER,'SIMPLE_TEST_RUNNER'); + wtp.wt_persist_report.dbms_out(in_runner_owner => USER + ,in_runner_name => 'SIMPLE_TEST_RUNNER'); end; / ``` @@ -207,29 +213,31 @@ end; And get this: ``` - wtPLSQL 1.1.0 - Run ID 38: 15-Jun-2018 11:03:52 PM - - Test Results for WTP_DEMO.SIMPLE_TEST_RUNNER - Total Test Cases: 0 Total Assertions: 1 - Minimum Interval msec: 186 Failed Assertions: 0 - Average Interval msec: 186 Error Assertions: 0 - Maximum Interval msec: 186 Test Yield: 100.00% - Total Run Time (sec): 0.2 + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003 + Test Results for WT_DEMO.SIMPLE_TEST_RUNNER + Run ID 42: 13-Apr-2024 06:19:53 PM + -------------------------------------------------------------- + Minimum Elapsed msec: 0 Total Assertions: 1 + Average Elapsed msec: 0 Failed Assertions: 0 + Maximum Elapsed msec: 0 Total Testcases: 1 + Total Run Time (sec): 0.2 Failed Testcases: 0 + Testcase Yield: 100% - Code Coverage for PACKAGE BODY WTP_DEMO.SIMPLE_TEST_RUNNER + Code Coverage for PACKAGE BODY WT_DEMO.SIMPLE_TEST_RUNNER + ---------------------------------------------------------------- Ignored Lines: 0 Total Profiled Lines: 4 Excluded Lines: 0 Total Executed Lines: 3 Minimum LineExec usec: 1 Not Executed Lines: 0 - Average LineExec usec: 7 Unknown Lines: 1 - Maximum LineExec usec: 25 Code Coverage: 100.00% - Trigger Source Offset: 0 + Average LineExec usec: 3 Unknown Lines: 1 + Maximum LineExec usec: 7 Code Coverage: 100.0% + Trigger Source Offset: 0 ``` -This shows the latest test result summary and code coverage summary for the SIMPLE_TEST_RUNNER test runner. DBMS_PROFILER found 4 lines of significance in the source code. 3 of those lines were executed. 1 line is unknown or undefined by DBMS_PROFILER. Unknown lines consume execution time, but were not executed. +This shows the latest test result summary and code coverage summary for the SIMPLE_TEST_RUNNER Test Runner. DBMS_PROFILER found 4 lines of significance in the source code. 3 of those lines were executed. 1 line is unknown or undefined by DBMS_PROFILER. Unknown lines consume execution time, but were not executed. ## Ignore Annotation -In the previous example, the SIMPLE_TEST_RUNNER package is both the test runner and the Database Object Under Test (DBOUT). In practice, this is a self testing package. Because DBMS_OUTPUT includes all the source lines, there is a need to segregate "testing" source lines from "tested" source lines. The ignore annotation is used to segregate these lines. +In the previous example, the SIMPLE_TEST_RUNNER package is both the Test Runner and the Database Object Under Test (DBOUT). In practice, this is a self testing package. Because DBMS_OUTPUT includes all the source lines, there is a need to segregate "testing" source lines from "tested" source lines. The ignore annotation is used to segregate these lines. The function "add2" represents some code that needs to be tested. It is also a private function. Self testing packages can test the private functions in the package. @@ -264,7 +272,9 @@ Run this: ``` begin wtplsql.test_run('SIMPLE_TEST_RUNNER'); - wt_text_report.dbms_out(USER,'SIMPLE_TEST_RUNNER',30); + wtp.wt_persist_report.dbms_out(in_runner_owner => USER + ,in_runner_name => 'SIMPLE_TEST_RUNNER' + ,in_detail_level => 30); end; / ``` @@ -272,50 +282,56 @@ end; And get this: ``` - wtPLSQL 1.1.0 - Run ID 40: 16-Jun-2018 12:38:49 AM + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003 + Test Results for WT_DEMO.SIMPLE_TEST_RUNNER + Run ID 43: 13-Apr-2024 06:21:38 PM + -------------------------------------------------------------- + Minimum Elapsed msec: 0 Total Assertions: 1 + Average Elapsed msec: 0 Failed Assertions: 0 + Maximum Elapsed msec: 0 Total Testcases: 1 + Total Run Time (sec): 0.2 Failed Testcases: 0 + Testcase Yield: 100% - Test Results for WTP_DEMO.SIMPLE_TEST_RUNNER - Total Test Cases: 1 Total Assertions: 1 - Minimum Interval msec: 111 Failed Assertions: 0 - Average Interval msec: 111 Error Assertions: 0 - Maximum Interval msec: 111 Test Yield: 100.00% - Total Run Time (sec): 0.1 - - Code Coverage for PACKAGE BODY WTP_DEMO.SIMPLE_TEST_RUNNER - Ignored Lines: 4 Total Profiled Lines: 8 - Excluded Lines: 1 Total Executed Lines: 3 + Code Coverage for PACKAGE BODY WT_DEMO.SIMPLE_TEST_RUNNER + ---------------------------------------------------------------- + Ignored Lines: 5 Total Profiled Lines: 9 + Excluded Lines: 0 Total Executed Lines: 3 Minimum LineExec usec: 0 Not Executed Lines: 0 - Average LineExec usec: 1 Unknown Lines: 0 - Maximum LineExec usec: 2 Code Coverage: 100.00% - Trigger Source Offset: 0 - - - WTP_DEMO.SIMPLE_TEST_RUNNER Test Result Details (Test Run ID 40) ------------------------------------------------------------ - ---- Test Case: My Test Case - PASS 111ms Ad-Hoc Test. EQ - Expected "5" and got "5" - - - WTP_DEMO.SIMPLE_TEST_RUNNER PACKAGE BODY Code Coverage Details (Test Run ID 40) + Average LineExec usec: 1 Unknown Lines: 1 + Maximum LineExec usec: 1 Code Coverage: 100.0% + Trigger Source Offset: 0 + + WT_DEMO.SIMPLE_TEST_RUNNER Test Result Details + Test Run ID: 43 + -------------------------------------------------------------- +---*** My Test Case ***------------------------------------------------------- + PASS .436ms Ad-Hoc Test. EQ - Expected "5" and got "5" + + WT_DEMO.SIMPLE_TEST_RUNNER PACKAGE BODY Code Coverage Details + Test Run ID: 43 + ---------------------------------------------------------------- Source TotTime MinTime MaxTime Line Stat Occurs (usec) (usec) (usec) Text ------ ---- ------ --------- ------- --------- ------------ - 4 EXCL 0 0 0 0 function add2 (in_val1 number, in_val2 number) return number is - 7 EXEC 1 2 2 2 l_result := in_val1 + in_val2; - 8 EXEC 1 0 0 0 return l_result; - 9 EXEC 1 1 1 1 end add2; - 10 IGNR 0 2 2 2 procedure wtplsql_run is begin --%WTPLSQL_begin_ignore_lines%-- - 11 IGNR 2 30 1 29 wt_assert.g_testcase := 'My Test Case'; - 12 IGNR 1 11 11 11 wt_assert.eq(msg_in => 'Ad-Hoc Test' - 15 IGNR 1 0 0 0 end wtplsql_run; --%WTPLSQL_end_ignore_lines%-- + 3 UNKN 0 1 1 1 function add2 (in_val1 number, in_val2 number) return number is + 6 EXEC 1 1 1 1 l_result := in_val1 + in_val2; + 7 EXEC 1 0 0 0 return l_result; + 8 EXEC 1 1 1 1 end add2; + 9 IGNR 0 1 1 1 procedure wtplsql_run is begin --%WTPLSQL_begin_ignore_lines%-- + 10 IGNR 2 27 0 26 wtplsql.g_DBOUT := 'SIMPLE_TEST_RUNNER:PACKAGE BODY'; + 11 IGNR 2 15 0 14 wt_assert.g_testcase := 'My Test Case'; + 12 IGNR 1 8 0 8 wt_assert.eq(msg_in => 'Ad-Hoc Test' + 15 IGNR 1 1 1 1 end wtplsql_run; --%WTPLSQL_end_ignore_lines%-- ``` -This is a very large report from the WT_TEXT_REPORT package. The detail level of 30 displays the full detail of the test runner execution with code coverage. +This is a very large report from the WT_PERSIST_REPORT package. The detail level of 30 displays the full detail of the Test Runner execution with code coverage. Close to the middle of the output, is the "Code Coverage Details" title for the final section. This section contains results from DBMS_PROFILER. Each line of source code is matched with that output. Some interesting points. -* Line 4, is excluded by wtPLSQL because it is not executable -* Lines 7, 8, and 9 were executed, according to DBMS_OUTPUT. -* Lines 10, 11, 12, and 15 were ignored as per the annotation. -* Several other lines are not included because DBMS_OUPUT did not collect any data on them. +* Line 3, is excluded by wtPLSQL because it is not executable (Unknown) +* Lines 6, 7, and 8 were executed, according to DBMS_PROFILER. +* Lines 9, 10, 11, 12, and 15 were ignored as per the annotation. +* Several other lines are not included because DBMS_PROFILER did not collect any data on them. --- [Demos and Examples](README.md) diff --git a/docs/demo/Trigger-Test.htm b/docs/demo/Trigger-Test.htm index f2d77a6..a36c882 100644 --- a/docs/demo/Trigger-Test.htm +++ b/docs/demo/Trigger-Test.htm @@ -3,7 +3,7 @@

          Test a Trigger


          Triggers

          There are many kinds of triggers. All of them use PL/SQL to define actions taken when the trigger is activated.

          -

          The "Database PL/SQL Language Reference" (11.2) groups triggers this way:

          +

          The "Database PL/SQL Language Reference" (11.2) groups triggers this way:

          • Simple DML Trigger
          • Compound DML Trigger
          • @@ -196,7 +196,7 @@

            Triggers

            -

            For brevity, an example is provided for only one of these triggers. Db Role Change

            +

            For brevity, an example is provided for only one of these triggers. DB Role Change

            Table with Insert Trigger

            Before a trigger an be created, a table must be created. The table will have a surrogate key, a natural key, and audit data.

            Run this:

            @@ -229,7 +229,7 @@

            Table with Insert Trigger

            /

          Create a Simple Test Runner

          -

          All test runners are written as a PL/SQL package. A simple package is created first. A DBOUT is also identified.

          +

          All Test Runners are written as a PL/SQL package. A simple package is created first. A DBOUT is also identified.

          Run this:

          create or replace package trigger_test_pkg authid definer
           as
          @@ -273,51 +273,67 @@ 

          Create a Simple Test Runner

          /

          Check the results

          +

          The Persist add-on must be installed.

          +

          Run this to setup HOOKS:

          +
          begin
          +   wtp.junit_core_report.delete_hooks;
          +   wtp.wt_core_report.delete_hooks;
          +   wtp.wt_test_run.insert_hooks;
          +end;
          +/
          +

          Run this:

          -
          set serveroutput on size unlimited format word_wrapped
          +
          set serveroutput on size unlimited format truncated
           
           begin
              wtplsql.test_run('TRIGGER_TEST_PKG');
          -   wt_text_report.dbms_out(USER,'TRIGGER_TEST_PKG',30);
          +   wtp.wt_persist_report.dbms_out(in_runner_owner => 'WT_DEMO'
          +                                 ,in_runner_name  => 'TRIGGER_TEST_PKG'
          +                                 ,in_detail_level => 30);
           end;
           /
           

          And Get This:

          -
              wtPLSQL 1.1.0 - Run ID 58: 23-Jun-2018 12:04:20 PM
          -
          -  Test Results for WTP_DEMO.TRIGGER_TEST_PKG
          -       Total Test Cases:        1       Total Assertions:        3
          -  Minimum Interval msec:        0      Failed Assertions:        0
          -  Average Interval msec:       76       Error Assertions:        0
          -  Maximum Interval msec:      228             Test Yield:   100.00%
          -   Total Run Time (sec):      0.2
          +
            wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003
          +  Test Results for WT_DEMO.TRIGGER_TEST_PKG
          +  Run ID 20: 13-Apr-2024 04:35:58 PM
          +  --------------------------------------------------------------
          +  Minimum Elapsed msec:        0      Total Assertions:        3
          +  Average Elapsed msec:        1     Failed Assertions:        0
          +  Maximum Elapsed msec:        2       Total Testcases:        1
          +  Total Run Time (sec):      0.3      Failed Testcases:        0
          +                                        Testcase Yield:      100%
           
          -  Code Coverage for TRIGGER WTP_DEMO.TRIGGER_TEST_BIR
          +  Code Coverage for TRIGGER WT_DEMO.TRIGGER_TEST_BIR
          +  ----------------------------------------------------------------
                     Ignored Lines:        0   Total Profiled Lines:        5
                    Excluded Lines:        0   Total Executed Lines:        4
             Minimum LineExec usec:        1     Not Executed Lines:        0
          -  Average LineExec usec:      137          Unknown Lines:        1
          -  Maximum LineExec usec:      326          Code Coverage:   100.00%
          -  Trigger Source Offset:        3
          +  Average LineExec usec:       52          Unknown Lines:        1
          +  Maximum LineExec usec:      197          Code Coverage:    100.0%
          +  Trigger Source Offset:        3                                 
           
          - - WTP_DEMO.TRIGGER_TEST_PKG Test Result Details (Test Run ID 58)
          ------------------------------------------------------------
          - ---- Test Case: Constructor Happy Path 1
          - PASS  228ms l_rec.id. ISNOTNULL - Expected NOT NULL and got "15"
          - PASS    0ms l_rec.name. EQ - Expected "Test1" and got "Test1"
          - PASS    0ms l_rec.created_dtm. ISNOTNULL - Expected NOT NULL and got "23-JUN-2018 12:04:20"
          +  WT_DEMO.TRIGGER_TEST_PKG Test Result Details
          +  Test Run ID: 20
          +  --------------------------------------------------------------
          +---***  Constructor Happy Path 1  ***-------------------------------------------
          + PASS 2.20ms l_rec.id. ISNOTNULL - Expected NOT NULL and got "14"
          + PASS .318ms l_rec.name. EQ - Expected "Test1" and got "Test1"
          + PASS .083ms l_rec.created_dtm. ISNOTNULL - Expected NOT NULL and got "13-APR-2024 21:35:58"
           
          - - WTP_DEMO.TRIGGER_TEST_BIR TRIGGER Code Coverage Details (Test Run ID 58)
          +  WT_DEMO.TRIGGER_TEST_BIR TRIGGER Code Coverage Details
          +  Test Run ID: 20
          +  ----------------------------------------------------------------
           Source               TotTime MinTime   MaxTime     
             Line Stat Occurs    (usec)  (usec)    (usec) Text
           ------ ---- ------ --------- ------- --------- ------------
          -     4 UNKN      0        11      11        11 begin
          -     5 EXEC      1       216     216       216   if :new.id is null
          -     7 EXEC      1       326     326       326      :new.id := trigger_test_seq.nextval;
          +     4 UNKN      0         1       1         1 begin
          +     5 EXEC      1         3       3         3   if :new.id is null
          +     7 EXEC      1       197     197       197      :new.id := trigger_test_seq.nextval;
                9 EXEC      1         4       1         3   :new.created_dtm := sysdate;
               10 EXEC      1         2       2         2 end;
           
          -

          This is report level 30, the most detailed level of reporting. Starting from the top, we find the test runner executed 1 test case and 3 assertions. All tests passed for a 100% yield. The code coverage for the trigger shows 5 profiles, 4 executed, and a code coverage of 100%. Notice the trigger offset of 3 which aligns the source code with the profiled lines.

          +

          This is report level 30, the most detailed level of reporting. Starting from the top, we find the Test Runner executed 1 test case and 3 assertions. All tests passed for a 100% yield. The code coverage for the trigger shows 5 profiles, 4 executed, and a code coverage of 100%. Notice the trigger offset of 3 which aligns the source code with the profiled lines.

          This is not a complete test. More test cases are needed to confirm various values are handled correctly when inserted.


          Demos and Examples

          diff --git a/docs/demo/Trigger-Test.md b/docs/demo/Trigger-Test.md index bd482fe..e34b770 100644 --- a/docs/demo/Trigger-Test.md +++ b/docs/demo/Trigger-Test.md @@ -64,7 +64,7 @@ The "Database PL/SQL Language Reference" (11.2) [groups triggers](https://docs.o . | . | DB Role Change For brevity, an example is provided for only one of these triggers. -Db Role Change +DB Role Change ## Table with Insert Trigger Before a trigger an be created, a table must be created. The table will have a surrogate key, a natural key, and audit data. @@ -105,7 +105,7 @@ end; ## Create a Simple Test Runner -All test runners are written as a PL/SQL package. A simple package is created first. A DBOUT is also identified. +All Test Runners are written as a PL/SQL package. A simple package is created first. A DBOUT is also identified. Run this: @@ -159,14 +159,29 @@ end trigger_test_pkg; ## Check the results +The Persist add-on must be installed. + +Run this to setup HOOKS: + +``` +begin + wtp.junit_core_report.delete_hooks; + wtp.wt_core_report.delete_hooks; + wtp.wt_test_run.insert_hooks; +end; +/ +``` + Run this: ``` -set serveroutput on size unlimited format word_wrapped +set serveroutput on size unlimited format truncated begin wtplsql.test_run('TRIGGER_TEST_PKG'); - wt_text_report.dbms_out(USER,'TRIGGER_TEST_PKG',30); + wtp.wt_persist_report.dbms_out(in_runner_owner => 'WT_DEMO' + ,in_runner_name => 'TRIGGER_TEST_PKG' + ,in_detail_level => 30); end; / ``` @@ -174,42 +189,47 @@ end; And Get This: ``` - wtPLSQL 1.1.0 - Run ID 58: 23-Jun-2018 12:04:20 PM - - Test Results for WTP_DEMO.TRIGGER_TEST_PKG - Total Test Cases: 1 Total Assertions: 3 - Minimum Interval msec: 0 Failed Assertions: 0 - Average Interval msec: 76 Error Assertions: 0 - Maximum Interval msec: 228 Test Yield: 100.00% - Total Run Time (sec): 0.2 - - Code Coverage for TRIGGER WTP_DEMO.TRIGGER_TEST_BIR + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003 + Test Results for WT_DEMO.TRIGGER_TEST_PKG + Run ID 20: 13-Apr-2024 04:35:58 PM + -------------------------------------------------------------- + Minimum Elapsed msec: 0 Total Assertions: 3 + Average Elapsed msec: 1 Failed Assertions: 0 + Maximum Elapsed msec: 2 Total Testcases: 1 + Total Run Time (sec): 0.3 Failed Testcases: 0 + Testcase Yield: 100% + + Code Coverage for TRIGGER WT_DEMO.TRIGGER_TEST_BIR + ---------------------------------------------------------------- Ignored Lines: 0 Total Profiled Lines: 5 Excluded Lines: 0 Total Executed Lines: 4 Minimum LineExec usec: 1 Not Executed Lines: 0 - Average LineExec usec: 137 Unknown Lines: 1 - Maximum LineExec usec: 326 Code Coverage: 100.00% - Trigger Source Offset: 3 - - - WTP_DEMO.TRIGGER_TEST_PKG Test Result Details (Test Run ID 58) ------------------------------------------------------------ - ---- Test Case: Constructor Happy Path 1 - PASS 228ms l_rec.id. ISNOTNULL - Expected NOT NULL and got "15" - PASS 0ms l_rec.name. EQ - Expected "Test1" and got "Test1" - PASS 0ms l_rec.created_dtm. ISNOTNULL - Expected NOT NULL and got "23-JUN-2018 12:04:20" - - - WTP_DEMO.TRIGGER_TEST_BIR TRIGGER Code Coverage Details (Test Run ID 58) + Average LineExec usec: 52 Unknown Lines: 1 + Maximum LineExec usec: 197 Code Coverage: 100.0% + Trigger Source Offset: 3 + + WT_DEMO.TRIGGER_TEST_PKG Test Result Details + Test Run ID: 20 + -------------------------------------------------------------- +---*** Constructor Happy Path 1 ***------------------------------------------- + PASS 2.20ms l_rec.id. ISNOTNULL - Expected NOT NULL and got "14" + PASS .318ms l_rec.name. EQ - Expected "Test1" and got "Test1" + PASS .083ms l_rec.created_dtm. ISNOTNULL - Expected NOT NULL and got "13-APR-2024 21:35:58" + + WT_DEMO.TRIGGER_TEST_BIR TRIGGER Code Coverage Details + Test Run ID: 20 + ---------------------------------------------------------------- Source TotTime MinTime MaxTime Line Stat Occurs (usec) (usec) (usec) Text ------ ---- ------ --------- ------- --------- ------------ - 4 UNKN 0 11 11 11 begin - 5 EXEC 1 216 216 216 if :new.id is null - 7 EXEC 1 326 326 326 :new.id := trigger_test_seq.nextval; + 4 UNKN 0 1 1 1 begin + 5 EXEC 1 3 3 3 if :new.id is null + 7 EXEC 1 197 197 197 :new.id := trigger_test_seq.nextval; 9 EXEC 1 4 1 3 :new.created_dtm := sysdate; 10 EXEC 1 2 2 2 end; ``` -This is report level 30, the most detailed level of reporting. Starting from the top, we find the test runner executed 1 test case and 3 assertions. All tests passed for a 100% yield. The code coverage for the trigger shows 5 profiles, 4 executed, and a code coverage of 100%. Notice the trigger offset of 3 which aligns the source code with the profiled lines. +This is report level 30, the most detailed level of reporting. Starting from the top, we find the Test Runner executed 1 test case and 3 assertions. All tests passed for a 100% yield. The code coverage for the trigger shows 5 profiles, 4 executed, and a code coverage of 100%. Notice the trigger offset of 3 which aligns the source code with the profiled lines. This is not a complete test. More test cases are needed to confirm various values are handled correctly when inserted. diff --git a/docs/demo/Type-Test.htm b/docs/demo/Type-Test.htm index 8f19f25..c5eb6c2 100644 --- a/docs/demo/Type-Test.htm +++ b/docs/demo/Type-Test.htm @@ -56,7 +56,7 @@

          Test a PL/SQL Object Type

          /

          Create a Simple Test Runner

          -

          All test runners are written as a PL/SQL package. A simple package is created first. A DBOUT is also identified.

          +

          All Test Runners are written as a PL/SQL package. A simple package is created first. A DBOUT is also identified.

          Run this:

          create or replace package test_simple_object authid definer
           as
          @@ -94,44 +94,58 @@ 

          Create a Simple Test Runner

          /

          Check the Results

          +

          The Persist add-on must be installed.

          +

          Run this to setup HOOKS:

          +
          begin
          +   wtp.junit_core_report.delete_hooks;
          +   wtp.wt_core_report.delete_hooks;
          +   wtp.wt_test_run.insert_hooks;
          +end;
          +/
          +

          Run this:

          -
          set serveroutput on size unlimited format word_wrapped
          -
          -begin
          +
          begin
              wtplsql.test_run('TEST_SIMPLE_OBJECT');
          -   wt_text_report.dbms_out(USER,'TEST_SIMPLE_OBJECT',30);
          +   wtp.wt_persist_report.dbms_out(in_runner_owner => USER
          +                                 ,in_runner_name  => 'TEST_SIMPLE_OBJECT'
          +                                 ,in_detail_level => 30);
           end;
           /
           

          And Get This:

          -
              wtPLSQL 1.1.0 - Run ID 56: 18-Jun-2018 10:04:32 PM
          -
          -  Test Results for WTP.TEST_SIMPLE_OBJECT
          -       Total Test Cases:        1       Total Assertions:        2
          -  Minimum Interval msec:        8      Failed Assertions:        0
          -  Average Interval msec:       74       Error Assertions:        0
          -  Maximum Interval msec:      139             Test Yield:   100.00%
          -   Total Run Time (sec):      0.1
          +
            wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003
          +  Test Results for WT_DEMO.TEST_SIMPLE_OBJECT
          +  Run ID 22: 13-Apr-2024 04:50:11 PM
          +  --------------------------------------------------------------
          +  Minimum Elapsed msec:        0      Total Assertions:        2
          +  Average Elapsed msec:        2     Failed Assertions:        0
          +  Maximum Elapsed msec:        3       Total Testcases:        1
          +  Total Run Time (sec):      0.2      Failed Testcases:        0
          +                                        Testcase Yield:      100%
           
          -  Code Coverage for TYPE BODY WTP.SIMPLE_TEST_OBJ_TYPE
          +  Code Coverage for TYPE BODY WT_DEMO.SIMPLE_TEST_OBJ_TYPE
          +  ----------------------------------------------------------------
                     Ignored Lines:        0   Total Profiled Lines:       10
                    Excluded Lines:        1   Total Executed Lines:        4
             Minimum LineExec usec:        0     Not Executed Lines:        4
             Average LineExec usec:        1          Unknown Lines:        1
          -  Maximum LineExec usec:        2          Code Coverage:    50.00%
          -  Trigger Source Offset:        0
          +  Maximum LineExec usec:        2          Code Coverage:     50.0%
          +  Trigger Source Offset:        0                                 
           
          - - WTP.TEST_SIMPLE_OBJECT Test Result Details (Test Run ID 56)
          ------------------------------------------------------------
          - ---- Test Case: Constructor Happy Path 1
          - PASS  139ms Object MINIMUM_VALUE. ISNULL - Expected NULL and got ""
          - PASS    8ms Object OBSERVATIONS. EQ - Expected "0" and got "0"
          +  WT_DEMO.TEST_SIMPLE_OBJECT Test Result Details
          +  Test Run ID: 22
          +  --------------------------------------------------------------
          +---***  Constructor Happy Path 1  ***-------------------------------------------
          + PASS 2.83ms Object MINIMUM_VALUE. ISNULL - Expected NULL and got ""
          + PASS .118ms Object OBSERVATIONS. EQ - Expected "0" and got "0"
           
          - - WTP.SIMPLE_TEST_OBJ_TYPE TYPE BODY Code Coverage Details (Test Run ID 56)
          +  WT_DEMO.SIMPLE_TEST_OBJ_TYPE TYPE BODY Code Coverage Details
          +  Test Run ID: 22
          +  ----------------------------------------------------------------
           Source               TotTime MinTime   MaxTime     
             Line Stat Occurs    (usec)  (usec)    (usec) Text
           ------ ---- ------ --------- ------- --------- ------------
          -     2 UNKN      0         2       2         2     CONSTRUCTOR FUNCTION simple_test_obj_type
          +     2 UNKN      0         1       1         1     CONSTRUCTOR FUNCTION simple_test_obj_type
                7 EXEC      1         1       1         1        minimum_value  := null;
                8 EXEC      1         0       0         0        observations   := 0;
                9 EXEC      1         2       2         2        return;
          @@ -142,7 +156,7 @@ 

          Check the Results

          19#NOTX# 0 0 0 0 observations := observations + 1; 20 EXCL 0 0 0 0 end add_observation;
          -

          This is report level 30, the most detailed level of reporting. Starting from the top, we find the test runner executed 1 test case, 2 assertions, and no failed assertions, which resulted in 100% yield (all tests passed). The next section shows the type body tested had 10 lines profiled, 4 were executed, and 4 were not executed, which resulted in a code coverage of 50%. Additional testing is required to achieve 100% code coverage. For brevity, this additional testing will not be included.

          +

          This is report level 30, the most detailed level of reporting. Starting from the top, we find the Test Runner executed 1 test case, 2 assertions, and no failed assertions, which resulted in 100% yield (all tests passed). The next section shows the type body tested had 10 lines profiled, 4 were executed, and 4 were not executed, which resulted in a code coverage of 50%. Additional testing is required to achieve 100% code coverage. For brevity, this additional testing will not be included.

          Testing Private Object Methods and Self-Testing

          An Oracle object type can have private methods. These methods are not available outside the object. They are inherited from a super-type.

          Private Object Methods on StackOverFlow

          diff --git a/docs/demo/Type-Test.md b/docs/demo/Type-Test.md index 610d934..b411460 100644 --- a/docs/demo/Type-Test.md +++ b/docs/demo/Type-Test.md @@ -67,7 +67,7 @@ end; ## Create a Simple Test Runner -All test runners are written as a PL/SQL package. A simple package is created first. A DBOUT is also identified. +All Test Runners are written as a PL/SQL package. A simple package is created first. A DBOUT is also identified. Run this: @@ -112,14 +112,27 @@ end test_simple_object; ## Check the Results -Run this: +The Persist add-on must be installed. + +Run this to setup HOOKS: ``` -set serveroutput on size unlimited format word_wrapped +begin + wtp.junit_core_report.delete_hooks; + wtp.wt_core_report.delete_hooks; + wtp.wt_test_run.insert_hooks; +end; +/ +``` +Run this: + +``` begin wtplsql.test_run('TEST_SIMPLE_OBJECT'); - wt_text_report.dbms_out(USER,'TEST_SIMPLE_OBJECT',30); + wtp.wt_persist_report.dbms_out(in_runner_owner => USER + ,in_runner_name => 'TEST_SIMPLE_OBJECT' + ,in_detail_level => 30); end; / ``` @@ -127,34 +140,39 @@ end; And Get This: ``` - wtPLSQL 1.1.0 - Run ID 56: 18-Jun-2018 10:04:32 PM - - Test Results for WTP.TEST_SIMPLE_OBJECT - Total Test Cases: 1 Total Assertions: 2 - Minimum Interval msec: 8 Failed Assertions: 0 - Average Interval msec: 74 Error Assertions: 0 - Maximum Interval msec: 139 Test Yield: 100.00% - Total Run Time (sec): 0.1 - - Code Coverage for TYPE BODY WTP.SIMPLE_TEST_OBJ_TYPE + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003 + Test Results for WT_DEMO.TEST_SIMPLE_OBJECT + Run ID 22: 13-Apr-2024 04:50:11 PM + -------------------------------------------------------------- + Minimum Elapsed msec: 0 Total Assertions: 2 + Average Elapsed msec: 2 Failed Assertions: 0 + Maximum Elapsed msec: 3 Total Testcases: 1 + Total Run Time (sec): 0.2 Failed Testcases: 0 + Testcase Yield: 100% + + Code Coverage for TYPE BODY WT_DEMO.SIMPLE_TEST_OBJ_TYPE + ---------------------------------------------------------------- Ignored Lines: 0 Total Profiled Lines: 10 Excluded Lines: 1 Total Executed Lines: 4 Minimum LineExec usec: 0 Not Executed Lines: 4 Average LineExec usec: 1 Unknown Lines: 1 - Maximum LineExec usec: 2 Code Coverage: 50.00% - Trigger Source Offset: 0 - - - WTP.TEST_SIMPLE_OBJECT Test Result Details (Test Run ID 56) ------------------------------------------------------------ - ---- Test Case: Constructor Happy Path 1 - PASS 139ms Object MINIMUM_VALUE. ISNULL - Expected NULL and got "" - PASS 8ms Object OBSERVATIONS. EQ - Expected "0" and got "0" - - - WTP.SIMPLE_TEST_OBJ_TYPE TYPE BODY Code Coverage Details (Test Run ID 56) + Maximum LineExec usec: 2 Code Coverage: 50.0% + Trigger Source Offset: 0 + + WT_DEMO.TEST_SIMPLE_OBJECT Test Result Details + Test Run ID: 22 + -------------------------------------------------------------- +---*** Constructor Happy Path 1 ***------------------------------------------- + PASS 2.83ms Object MINIMUM_VALUE. ISNULL - Expected NULL and got "" + PASS .118ms Object OBSERVATIONS. EQ - Expected "0" and got "0" + + WT_DEMO.SIMPLE_TEST_OBJ_TYPE TYPE BODY Code Coverage Details + Test Run ID: 22 + ---------------------------------------------------------------- Source TotTime MinTime MaxTime Line Stat Occurs (usec) (usec) (usec) Text ------ ---- ------ --------- ------- --------- ------------ - 2 UNKN 0 2 2 2 CONSTRUCTOR FUNCTION simple_test_obj_type + 2 UNKN 0 1 1 1 CONSTRUCTOR FUNCTION simple_test_obj_type 7 EXEC 1 1 1 1 minimum_value := null; 8 EXEC 1 0 0 0 observations := 0; 9 EXEC 1 2 2 2 return; @@ -166,7 +184,7 @@ Source TotTime MinTime MaxTime 20 EXCL 0 0 0 0 end add_observation; ``` -This is report level 30, the most detailed level of reporting. Starting from the top, we find the test runner executed 1 test case, 2 assertions, and no failed assertions, which resulted in 100% yield (all tests passed). The next section shows the type body tested had 10 lines profiled, 4 were executed, and 4 were not executed, which resulted in a code coverage of 50%. Additional testing is required to achieve 100% code coverage. For brevity, this additional testing will not be included. +This is report level 30, the most detailed level of reporting. Starting from the top, we find the Test Runner executed 1 test case, 2 assertions, and no failed assertions, which resulted in 100% yield (all tests passed). The next section shows the type body tested had 10 lines profiled, 4 were executed, and 4 were not executed, which resulted in a code coverage of 50%. Additional testing is required to achieve 100% code coverage. For brevity, this additional testing will not be included. ## Testing Private Object Methods and Self-Testing diff --git a/docs/demo/md-to-htm.lua b/docs/demo/md-to-htm.lua index dbaa04e..cf11419 100644 --- a/docs/demo/md-to-htm.lua +++ b/docs/demo/md-to-htm.lua @@ -1,4 +1,4 @@ -# md-to-htm.lua +-- md-to-htm.lua -- Adapted from answer by JW https://stackoverflow.com/users/4321/jw -- at https://stackoverflow.com/questions/40993488 function Link(el) diff --git a/docs/demo/md-to-htm.sh b/docs/demo/md-to-htm.sh new file mode 100644 index 0000000..40809cb --- /dev/null +++ b/docs/demo/md-to-htm.sh @@ -0,0 +1,10 @@ + +# pandoc -f gfm -t html --lua-filter=md-to-htm.lua -o %1.htm %1.md + +ls *.md | while read FILE +do + # /%md - Match pattern at end of expansion + # /htm - Replace match with "htm" + #echo "${FILE/%md/htm}" "${FILE}" + pandoc -f gfm -t html --lua-filter=md-to-htm.lua -o "${FILE/%md/htm}" "${FILE}" +done diff --git a/docs/demo/ut_betwnstr.htm b/docs/demo/ut_betwnstr.htm index 9cab479..d3ffc2a 100644 --- a/docs/demo/ut_betwnstr.htm +++ b/docs/demo/ut_betwnstr.htm @@ -2,9 +2,9 @@

          utPLSQL 2.3 ut_betwnstr Example


          Original Example

          -

          The original "ut_betwnstr" example is in the utPLSQL documentation. The PL/SQL source for the function that will be tested is in Step 2. The PL/SQL source for the package specification and body of the utPLSQL test package are in Step 3.

          +

          The original "ut_betwnstr" example is in the utPLSQL documentation. The PL/SQL source for the function that will be tested is in Step 2. The PL/SQL source for the package specification and body of the utPLSQL test package are in Step 3.

          Test Package Conversion

          -

          Conversion of this test package into a test runner package requires the addition of the "wtPLSQL_run" procedure in the package specification.

          +

          Conversion of this test package into a Test Runner package requires the addition of the "wtPLSQL_run" procedure in the package specification.

          Run this:

          CREATE OR REPLACE PACKAGE ut_betwnstr
           IS
          @@ -93,41 +93,65 @@ 

          Test Package Conversion

          END ut_betwnstr; /
          -

          It is not necessary to keep the ut_setup and ut_teardown procedures. These were kept to indicate how to incorporate those procedures into a test runner package. The SET DBOUT annotation was also added to gather code coverage data.

          +

          It is not necessary to keep the ut_setup and ut_teardown procedures. These were kept to indicate how to incorporate those procedures into a Test Runner package. The SET DBOUT annotation was also added to gather code coverage data.

          Check the Results

          +

          The Persist add-on must be installed.

          +

          Run this to setup HOOKS:

          +
          begin
          +   wtp.junit_core_report.delete_hooks;
          +   wtp.wt_core_report.delete_hooks;
          +   wtp.wt_test_run.insert_hooks;
          +end;
          +/
          +

          Run this:

          -
          set serveroutput on size unlimited format word_wrapped
          -
          -begin
          +
          begin
              wtplsql.test_run('UT_BETWNSTR');
          -   wt_text_report.dbms_out(USER,'UT_BETWNSTR',30);
          +   wtp.wt_persist_report.dbms_out(in_runner_owner => USER
          +                                 ,in_runner_name  => 'UT_BETWNSTR'
          +                                 ,in_detail_level => 30);
           end;
           /
           

          And Get This:

          -
            Code Coverage for FUNCTION WTP_DEMO.BETWNSTR
          +
            wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003
          +  Test Results for WT_DEMO.UT_BETWNSTR
          +  Run ID 45: 13-Apr-2024 06:39:29 PM
          +  --------------------------------------------------------------
          +  Minimum Elapsed msec:        0      Total Assertions:        5
          +  Average Elapsed msec:        0     Failed Assertions:        0
          +  Maximum Elapsed msec:        1       Total Testcases:        1
          +  Total Run Time (sec):      0.2      Failed Testcases:        0
          +                                        Testcase Yield:      100%
          +
          +  Code Coverage for FUNCTION WT_DEMO.BETWNSTR
          +  ----------------------------------------------------------------
                     Ignored Lines:        0   Total Profiled Lines:        3
                    Excluded Lines:        0   Total Executed Lines:        2
             Minimum LineExec usec:        0     Not Executed Lines:        0
             Average LineExec usec:        2          Unknown Lines:        1
          -  Maximum LineExec usec:       12          Code Coverage:   100.00%
          -  Trigger Source Offset:        0
          +  Maximum LineExec usec:       12          Code Coverage:    100.0%
          +  Trigger Source Offset:        0                                 
           
          - - WTP_DEMO.UT_BETWNSTR Test Result Details (Test Run ID 78)
          ------------------------------------------------------------
          - PASS  155ms Typical valid usage. EQ - Expected "cde" and got "cde"
          - PASS    0ms NULL start. ISNULL - Expected NULL and got ""
          - PASS    0ms NULL end. ISNULL - Expected NULL and got ""
          - PASS    0ms End smaller than start. ISNULL - Expected NULL and got ""
          - PASS    0ms End larger than string length. EQ - Expected "cdefg" and got "cdefg"
          +  WT_DEMO.UT_BETWNSTR Test Result Details
          +  Test Run ID: 45
          +  --------------------------------------------------------------
          +---***  WT_DEMO.UT_BETWNSTR  ***------------------------------------------------
          + PASS .749ms Typical valid usage. EQ - Expected "cde" and got "cde"
          + PASS  .19ms NULL start. ISNULL - Expected NULL and got ""
          + PASS .061ms NULL end. ISNULL - Expected NULL and got ""
          + PASS .049ms End smaller than start. ISNULL - Expected NULL and got ""
          + PASS .045ms End larger than string length. EQ - Expected "cdefg" and got "cdefg"
           
          - - WTP_DEMO.BETWNSTR FUNCTION Code Coverage Details (Test Run ID 78)
          +  WT_DEMO.BETWNSTR FUNCTION Code Coverage Details
          +  Test Run ID: 45
          +  ----------------------------------------------------------------
           Source               TotTime MinTime   MaxTime     
             Line Stat Occurs    (usec)  (usec)    (usec) Text
           ------ ---- ------ --------- ------- --------- ------------
          -     1 UNKN      0         5       1         2 function betwnstr
          -     8 EXEC      5        19       1        12    return (
          -    15 EXEC      5         1       0         1 end;
          +     1 UNKN      0         3       0         1 FUNCTION betwnStr (
          +     9 EXEC      5        19       1        12    RETURN (
          +    16 EXEC      5         1       0         0 END;
           

          Demos and Examples

          diff --git a/docs/demo/ut_betwnstr.md b/docs/demo/ut_betwnstr.md index d02db89..e2b0d5e 100644 --- a/docs/demo/ut_betwnstr.md +++ b/docs/demo/ut_betwnstr.md @@ -10,7 +10,7 @@ The [original "ut_betwnstr" example](https://utplsql.org/utPLSQL/v2.3.1/fourstep ## Test Package Conversion -Conversion of this test package into a test runner package requires the addition of the "wtPLSQL_run" procedure in the package specification. +Conversion of this test package into a Test Runner package requires the addition of the "wtPLSQL_run" procedure in the package specification. Run this: @@ -107,19 +107,32 @@ END ut_betwnstr; / ``` -It is not necessary to keep the ut_setup and ut_teardown procedures. These were kept to indicate how to incorporate those procedures into a test runner package. The SET DBOUT annotation was also added to gather code coverage data. +It is not necessary to keep the ut_setup and ut_teardown procedures. These were kept to indicate how to incorporate those procedures into a Test Runner package. The SET DBOUT annotation was also added to gather code coverage data. ## Check the Results -Run this: +The Persist add-on must be installed. + +Run this to setup HOOKS: ``` -set serveroutput on size unlimited format word_wrapped +begin + wtp.junit_core_report.delete_hooks; + wtp.wt_core_report.delete_hooks; + wtp.wt_test_run.insert_hooks; +end; +/ +``` + +Run this: +``` begin wtplsql.test_run('UT_BETWNSTR'); - wt_text_report.dbms_out(USER,'UT_BETWNSTR',30); + wtp.wt_persist_report.dbms_out(in_runner_owner => USER + ,in_runner_name => 'UT_BETWNSTR' + ,in_detail_level => 30); end; / ``` @@ -127,29 +140,44 @@ end; And Get This: ``` - Code Coverage for FUNCTION WTP_DEMO.BETWNSTR + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003 + Test Results for WT_DEMO.UT_BETWNSTR + Run ID 45: 13-Apr-2024 06:39:29 PM + -------------------------------------------------------------- + Minimum Elapsed msec: 0 Total Assertions: 5 + Average Elapsed msec: 0 Failed Assertions: 0 + Maximum Elapsed msec: 1 Total Testcases: 1 + Total Run Time (sec): 0.2 Failed Testcases: 0 + Testcase Yield: 100% + + Code Coverage for FUNCTION WT_DEMO.BETWNSTR + ---------------------------------------------------------------- Ignored Lines: 0 Total Profiled Lines: 3 Excluded Lines: 0 Total Executed Lines: 2 Minimum LineExec usec: 0 Not Executed Lines: 0 Average LineExec usec: 2 Unknown Lines: 1 - Maximum LineExec usec: 12 Code Coverage: 100.00% - Trigger Source Offset: 0 - - - WTP_DEMO.UT_BETWNSTR Test Result Details (Test Run ID 78) ------------------------------------------------------------ - PASS 155ms Typical valid usage. EQ - Expected "cde" and got "cde" - PASS 0ms NULL start. ISNULL - Expected NULL and got "" - PASS 0ms NULL end. ISNULL - Expected NULL and got "" - PASS 0ms End smaller than start. ISNULL - Expected NULL and got "" - PASS 0ms End larger than string length. EQ - Expected "cdefg" and got "cdefg" - - - WTP_DEMO.BETWNSTR FUNCTION Code Coverage Details (Test Run ID 78) + Maximum LineExec usec: 12 Code Coverage: 100.0% + Trigger Source Offset: 0 + + WT_DEMO.UT_BETWNSTR Test Result Details + Test Run ID: 45 + -------------------------------------------------------------- +---*** WT_DEMO.UT_BETWNSTR ***------------------------------------------------ + PASS .749ms Typical valid usage. EQ - Expected "cde" and got "cde" + PASS .19ms NULL start. ISNULL - Expected NULL and got "" + PASS .061ms NULL end. ISNULL - Expected NULL and got "" + PASS .049ms End smaller than start. ISNULL - Expected NULL and got "" + PASS .045ms End larger than string length. EQ - Expected "cdefg" and got "cdefg" + + WT_DEMO.BETWNSTR FUNCTION Code Coverage Details + Test Run ID: 45 + ---------------------------------------------------------------- Source TotTime MinTime MaxTime Line Stat Occurs (usec) (usec) (usec) Text ------ ---- ------ --------- ------- --------- ------------ - 1 UNKN 0 5 1 2 function betwnstr - 8 EXEC 5 19 1 12 return ( - 15 EXEC 5 1 0 1 end; + 1 UNKN 0 3 0 1 FUNCTION betwnStr ( + 9 EXEC 5 19 1 12 RETURN ( + 16 EXEC 5 1 0 0 END; ``` --- diff --git a/docs/demo/ut_calc_secs_between.htm b/docs/demo/ut_calc_secs_between.htm index f2b3e61..644a8cf 100644 --- a/docs/demo/ut_calc_secs_between.htm +++ b/docs/demo/ut_calc_secs_between.htm @@ -2,9 +2,9 @@

          utPLSQL 2.3 ut_ut_calc_secs_between Example


          Original Example

          -

          The original "ut_ut_calc_secs_between" example is in the utPLSQL documentation. The PL/SQL source for the procedure that will be tested is under the section "Test Success Through Parameters". The PL/SQL source for the package specification and body of the utPLSQL test package are in the same section.

          +

          The original "ut_ut_calc_secs_between" example is in the utPLSQL documentation. The PL/SQL source for the procedure that will be tested is under the section "Test Success Through Parameters". The PL/SQL source for the package specification and body of the utPLSQL test package are in the same section.

          Test Package Conversion

          -

          Conversion of this test package into a test runner package requires the addition of the "wtPLSQL_run" procedure in the package specification.

          +

          Conversion of this test package into a Test Runner package requires the addition of the "wtPLSQL_run" procedure in the package specification.

          Run this:

          CREATE OR REPLACE PACKAGE ut_calc_secs_between
           IS
          @@ -79,39 +79,62 @@ 

          Test Package Conversion

          END ut_calc_secs_between; /
          -

          It is not necessary to keep the ut_setup and ut_teardown procedures. These were kept to indicate how to incorporate those procedures into a test runner package. The SET DBOUT annotation was also added to gather code coverage data.

          +

          It is not necessary to keep the ut_setup and ut_teardown procedures. These were kept to indicate how to incorporate those procedures into a Test Runner package. The SET DBOUT annotation was also added to gather code coverage data.

          Check the Results

          +

          The Persist add-on must be installed.

          +

          Run this to setup HOOKS:

          +
          begin
          +   wtp.junit_core_report.delete_hooks;
          +   wtp.wt_core_report.delete_hooks;
          +   wtp.wt_test_run.insert_hooks;
          +end;
          +/
          +

          Run this:

          -
          set serveroutput on size unlimited format word_wrapped
          -
          -begin
          +
          begin
              wtplsql.test_run('UT_CALC_SECS_BETWEEN');
          -   wt_text_report.dbms_out(in_runner_name  => 'UT_CALC_SECS_BETWEEN'
          -                          ,in_detail_level => 30);
          +   wtp.wt_persist_report.dbms_out(in_runner_owner => USER
          +                                 ,in_runner_name  => 'UT_CALC_SECS_BETWEEN'
          +                                 ,in_detail_level => 30);
           end;
           /
           

          And Get This:

          -
            Code Coverage for PROCEDURE WTP_DEMO.CALC_SECS_BETWEEN
          +
            wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003
          +  Test Results for WT_DEMO.UT_CALC_SECS_BETWEEN
          +  Run ID 48: 13-Apr-2024 06:44:27 PM
          +  --------------------------------------------------------------
          +  Minimum Elapsed msec:        0      Total Assertions:        2
          +  Average Elapsed msec:        1     Failed Assertions:        0
          +  Maximum Elapsed msec:        0       Total Testcases:        1
          +  Total Run Time (sec):      0.2      Failed Testcases:        0
          +                                        Testcase Yield:      100%
          +
          +  Code Coverage for PROCEDURE WT_DEMO.CALC_SECS_BETWEEN
          +  ----------------------------------------------------------------
                     Ignored Lines:        0   Total Profiled Lines:        3
                    Excluded Lines:        0   Total Executed Lines:        2
          -  Minimum LineExec usec:        1     Not Executed Lines:        0
          +  Minimum LineExec usec:        0     Not Executed Lines:        0
             Average LineExec usec:        2          Unknown Lines:        1
          -  Maximum LineExec usec:        8          Code Coverage:   100.00%
          -  Trigger Source Offset:        0
          +  Maximum LineExec usec:        6          Code Coverage:    100.0%
          +  Trigger Source Offset:        0                                 
           
          - - WTP_DEMO.UT_CALC_SECS_BETWEEN Test Result Details (Test Run ID 80)
          ------------------------------------------------------------
          - PASS  103ms Same dates. EQ - Expected "0" and got "0"
          - PASS    0ms Exactly one day. EQ - Expected "86400" and got "86400"
          +  WT_DEMO.UT_CALC_SECS_BETWEEN Test Result Details
          +  Test Run ID: 48
          +  --------------------------------------------------------------
          +---***  WT_DEMO.UT_CALC_SECS_BETWEEN  ***---------------------------------------
          + PASS .499ms Same dates. EQ - Expected "0" and got "0"
          + PASS .095ms Exactly one day. EQ - Expected "86400" and got "86400"
           
          - - WTP_DEMO.CALC_SECS_BETWEEN PROCEDURE Code Coverage Details (Test Run ID 80)
          +  WT_DEMO.CALC_SECS_BETWEEN PROCEDURE Code Coverage Details
          +  Test Run ID: 48
          +  ----------------------------------------------------------------
           Source               TotTime MinTime   MaxTime     
             Line Stat Occurs    (usec)  (usec)    (usec) Text
           ------ ---- ------ --------- ------- --------- ------------
          -     1 UNKN      0         2       0         2 PROCEDURE calc_secs_between (
          -    10 EXEC      2         9       1         8    secs := (date2 - date1) * 24 * 60 * 60;
          -    11 EXEC      2         1       1         1 END;
          +     1 UNKN      0         1       0         1 PROCEDURE calc_secs_between (
          +    10 EXEC      2         8       1         6    secs := (date2 - date1) * 24 * 60 * 60;
          +    11 EXEC      2         0       0         0 END;
           

          Demos and Examples

          diff --git a/docs/demo/ut_calc_secs_between.md b/docs/demo/ut_calc_secs_between.md index ac1f708..d4f8fe7 100644 --- a/docs/demo/ut_calc_secs_between.md +++ b/docs/demo/ut_calc_secs_between.md @@ -10,7 +10,7 @@ The [original "ut_ut_calc_secs_between" example](https://utplsql.org/utPLSQL/v2. ## Test Package Conversion -Conversion of this test package into a test runner package requires the addition of the "wtPLSQL_run" procedure in the package specification. +Conversion of this test package into a Test Runner package requires the addition of the "wtPLSQL_run" procedure in the package specification. Run this: @@ -93,20 +93,32 @@ END ut_calc_secs_between; / ``` -It is not necessary to keep the ut_setup and ut_teardown procedures. These were kept to indicate how to incorporate those procedures into a test runner package. The SET DBOUT annotation was also added to gather code coverage data. +It is not necessary to keep the ut_setup and ut_teardown procedures. These were kept to indicate how to incorporate those procedures into a Test Runner package. The SET DBOUT annotation was also added to gather code coverage data. ## Check the Results -Run this: +The Persist add-on must be installed. + +Run this to setup HOOKS: ``` -set serveroutput on size unlimited format word_wrapped +begin + wtp.junit_core_report.delete_hooks; + wtp.wt_core_report.delete_hooks; + wtp.wt_test_run.insert_hooks; +end; +/ +``` +Run this: + +``` begin wtplsql.test_run('UT_CALC_SECS_BETWEEN'); - wt_text_report.dbms_out(in_runner_name => 'UT_CALC_SECS_BETWEEN' - ,in_detail_level => 30); + wtp.wt_persist_report.dbms_out(in_runner_owner => USER + ,in_runner_name => 'UT_CALC_SECS_BETWEEN' + ,in_detail_level => 30); end; / ``` @@ -114,26 +126,41 @@ end; And Get This: ``` - Code Coverage for PROCEDURE WTP_DEMO.CALC_SECS_BETWEEN + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003 + Test Results for WT_DEMO.UT_CALC_SECS_BETWEEN + Run ID 48: 13-Apr-2024 06:44:27 PM + -------------------------------------------------------------- + Minimum Elapsed msec: 0 Total Assertions: 2 + Average Elapsed msec: 1 Failed Assertions: 0 + Maximum Elapsed msec: 0 Total Testcases: 1 + Total Run Time (sec): 0.2 Failed Testcases: 0 + Testcase Yield: 100% + + Code Coverage for PROCEDURE WT_DEMO.CALC_SECS_BETWEEN + ---------------------------------------------------------------- Ignored Lines: 0 Total Profiled Lines: 3 Excluded Lines: 0 Total Executed Lines: 2 - Minimum LineExec usec: 1 Not Executed Lines: 0 + Minimum LineExec usec: 0 Not Executed Lines: 0 Average LineExec usec: 2 Unknown Lines: 1 - Maximum LineExec usec: 8 Code Coverage: 100.00% - Trigger Source Offset: 0 - - - WTP_DEMO.UT_CALC_SECS_BETWEEN Test Result Details (Test Run ID 80) ------------------------------------------------------------ - PASS 103ms Same dates. EQ - Expected "0" and got "0" - PASS 0ms Exactly one day. EQ - Expected "86400" and got "86400" - - - WTP_DEMO.CALC_SECS_BETWEEN PROCEDURE Code Coverage Details (Test Run ID 80) + Maximum LineExec usec: 6 Code Coverage: 100.0% + Trigger Source Offset: 0 + + WT_DEMO.UT_CALC_SECS_BETWEEN Test Result Details + Test Run ID: 48 + -------------------------------------------------------------- +---*** WT_DEMO.UT_CALC_SECS_BETWEEN ***--------------------------------------- + PASS .499ms Same dates. EQ - Expected "0" and got "0" + PASS .095ms Exactly one day. EQ - Expected "86400" and got "86400" + + WT_DEMO.CALC_SECS_BETWEEN PROCEDURE Code Coverage Details + Test Run ID: 48 + ---------------------------------------------------------------- Source TotTime MinTime MaxTime Line Stat Occurs (usec) (usec) (usec) Text ------ ---- ------ --------- ------- --------- ------------ - 1 UNKN 0 2 0 2 PROCEDURE calc_secs_between ( - 10 EXEC 2 9 1 8 secs := (date2 - date1) * 24 * 60 * 60; - 11 EXEC 2 1 1 1 END; + 1 UNKN 0 1 0 1 PROCEDURE calc_secs_between ( + 10 EXEC 2 8 1 6 secs := (date2 - date1) * 24 * 60 * 60; + 11 EXEC 2 0 0 0 END; ``` --- diff --git a/docs/demo/ut_str.htm b/docs/demo/ut_str.htm index c017cc6..987733d 100644 --- a/docs/demo/ut_str.htm +++ b/docs/demo/ut_str.htm @@ -2,9 +2,9 @@

          utPLSQL 2.3 ut_str Example


          Original Example

          -

          The original "ut_str" example is in the utPLSQL documentation. The PL/SQL source for the package to be tested is somewhat elusive. It is not on the website, but in the "examples" source in a files called "str.pks" and "str.pkb". This example is the unique case of a self-testing package in utPLSQL, which is also discussed in the Put Test Code in Same Package web page. Since it is a self-testing package, all the source is included in this web page.

          +

          The original "ut_str" example is in the utPLSQL documentation. The PL/SQL source for the package to be tested is somewhat elusive. It is not on the website, but in the "examples" source in a files called "str.pks" and "str.pkb". This example is the unique case of a self-testing package in utPLSQL, which is also discussed in the Put Test Code in Same Package web page. Since it is a self-testing package, all the source is included in this web page.

          Test Package Conversion

          -

          Conversion of this test package into a test runner package requires the addition of the "wtPLSQL_run" procedure in the package specification.

          +

          Conversion of this test package into a Test Runner package requires the addition of the "wtPLSQL_run" procedure in the package specification.

          Run this:

          /* Formatted on 2001/11/19 15:11 (Formatter Plus v4.5.2) */
           CREATE OR REPLACE PACKAGE str
          @@ -122,9 +122,9 @@ 

          Test Package Conversion

          ); END; - --% WTPLSQL SET DBOUT "STR:PACKAGE BODY" %-- PROCEDURE wtplsql_run IS BEGIN + wtplsql.g_DBOUT := 'STR:PACKAGE BODY'; ut_setup; ut_betwn; ut_teardown; @@ -133,74 +133,89 @@

          Test Package Conversion

          END str; /
          -

          Mid-way down the package body is the annotation "WTPLSQL_begin_ignore_lines". This annotation defines the source lines that will not be included in the code coverage metrics. The SET DBOUT annotation was also added to gather code coverage data.

          +

          Mid-way down the package body is the annotation "WTPLSQL_begin_ignore_lines". This annotation defines the source lines that will not be included in the code coverage metrics. The SET DBOUT annotation was also added to gather code coverage data.

          Check the Results

          +

          The Persist add-on must be installed.

          +

          Run this to setup HOOKS:

          +
          begin
          +   wtp.junit_core_report.delete_hooks;
          +   wtp.wt_core_report.delete_hooks;
          +   wtp.wt_test_run.insert_hooks;
          +end;
          +/
          +

          Run this:

          -
          set serveroutput on size unlimited format word_wrapped
          -
          -begin
          +
          begin
              wtplsql.test_run('STR');
          -   wt_text_report.dbms_out(in_runner_name  => 'STR'
          -                          ,in_detail_level => 30);
          +   wtp.wt_persist_report.dbms_out(in_runner_owner => USER
          +                                 ,in_runner_name  => 'STR'
          +                                 ,in_detail_level => 30);
           end;
           /
           

          And Get This:

          -
              wtPLSQL 1.1.0 - Run ID 82: 25-Jun-2018 10:08:46 PM
          -
          -  Test Results for WTP_DEMO.STR
          -       Total Test Cases:        0       Total Assertions:        3
          -  Minimum Interval msec:        0      Failed Assertions:        0
          -  Average Interval msec:       30       Error Assertions:        0
          -  Maximum Interval msec:       89             Test Yield:   100.00%
          -   Total Run Time (sec):      0.1
          -
          -  Code Coverage for PACKAGE BODY WTP_DEMO.STR
          -          Ignored Lines:       14   Total Profiled Lines:       25
          -         Excluded Lines:        1   Total Executed Lines:        4
          -  Minimum LineExec usec:        0     Not Executed Lines:        5
          -  Average LineExec usec:        0          Unknown Lines:        1
          -  Maximum LineExec usec:        5          Code Coverage:    44.40%
          -  Trigger Source Offset:        0
          -
          - - WTP_DEMO.STR Test Result Details (Test Run ID 82)
          ------------------------------------------------------------
          - PASS   89ms Typical Valid Usage. EQ - Expected "is is" and got "is is"
          - PASS    0ms Test Negative Start. EQ - Expected "ing" and got "ing"
          - PASS    0ms Start bigger than end. ISNULL - Expected NULL and got ""
          -
          - - WTP_DEMO.STR PACKAGE BODY Code Coverage Details (Test Run ID 82)
          +
            wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003
          +  Test Results for WT_DEMO.STR
          +  Run ID 50: 13-Apr-2024 06:52:06 PM
          +  --------------------------------------------------------------
          +  Minimum Elapsed msec:        0      Total Assertions:        3
          +  Average Elapsed msec:        1     Failed Assertions:        0
          +  Maximum Elapsed msec:        2       Total Testcases:        1
          +  Total Run Time (sec):      0.2      Failed Testcases:        0
          +                                        Testcase Yield:      100%
          +
          +  Code Coverage for PACKAGE BODY WT_DEMO.STR
          +  ----------------------------------------------------------------
          +          Ignored Lines:       15   Total Profiled Lines:       26
          +         Excluded Lines:        2   Total Executed Lines:        4
          +  Minimum LineExec usec:        0     Not Executed Lines:        4
          +  Average LineExec usec:        1          Unknown Lines:        1
          +  Maximum LineExec usec:        5          Code Coverage:     50.0%
          +  Trigger Source Offset:        0                                 
          +
          +  WT_DEMO.STR Test Result Details
          +  Test Run ID: 50
          +  --------------------------------------------------------------
          +---***  WT_DEMO.STR  ***--------------------------------------------------------
          + PASS 2.18ms Typical Valid Usage. EQ - Expected "is is" and got "is is"
          + PASS .091ms Test Negative Start. EQ - Expected "ing" and got "ing"
          + PASS .044ms Start bigger than end. ISNULL - Expected NULL and got ""
          +
          +  WT_DEMO.STR PACKAGE BODY Code Coverage Details
          +  Test Run ID: 50
          +  ----------------------------------------------------------------
           Source               TotTime MinTime   MaxTime     
             Line Stat Occurs    (usec)  (usec)    (usec) Text
           ------ ---- ------ --------- ------- --------- ------------
          -     3 UNKN      0         2       1         1    FUNCTION betwn (
          -    10 EXEC      3         1       0         1       l_start   PLS_INTEGER := start_in;
          +     3 UNKN      0         1       0         1    FUNCTION betwn (
          +    10 EXEC      3         0       0         0       l_start   PLS_INTEGER := start_in;
               12 EXEC      3         1       0         1       IF l_start = 0
               14#NOTX#     0         0       0         0          l_start := 1;
          -    17 EXEC      3         7       0         5       RETURN (SUBSTR (
          -    25 EXEC      3         1       1         1    END;
          +    17 EXEC      3         6       0         5       RETURN (SUBSTR (
          +    25 EXEC      3         1       0         0    END;
               27 EXCL      0         0       0         0    FUNCTION betwn2 (
               36#NOTX#     0         0       0         0       IF end_in < 0
               38#NOTX#     0         0       0         0          RETURN betwn (string_in, start_in, end_in);
               40#NOTX#     0         0       0         0          RETURN (SUBSTR (
          -    51#NOTX#     0         0       0         0    END;
          +    51 EXCL      0         0       0         0    END;
               55 IGNR      0         0       0         0    PROCEDURE ut_setup
               58 IGNR      1         1       1         1       NULL;
               61 IGNR      0         0       0         0    PROCEDURE ut_teardown
               64 IGNR      1         0       0         0       NULL;
               68 IGNR      0         3       3         3    PROCEDURE ut_betwn
          -    71 IGNR      1        18      18        18       utassert.eq (
          -    76 IGNR      1         1       1         1       utassert.eq (
          -    81 IGNR      1         1       1         1       utassert.isnull (
          +    71 IGNR      1        23       0        23       utassert.eq (
          +    76 IGNR      1         1       0         1       utassert.eq (
          +    81 IGNR      1         1       0         1       utassert.isnull (
               85 IGNR      1         0       0         0    END;
          -    88 IGNR      0         1       1         1    PROCEDURE wtplsql_run IS
          +    87 IGNR      0         1       1         1    PROCEDURE wtplsql_run IS
          +    89 IGNR      2        29       1        27       wtplsql.g_DBOUT := 'STR:PACKAGE BODY';
               90 IGNR      1         0       0         0       ut_setup;
               91 IGNR      1         0       0         0       ut_betwn;
          -    92 IGNR      1         0       0         0       ut_teardown;
           Source               TotTime MinTime   MaxTime     
             Line Stat Occurs    (usec)  (usec)    (usec) Text
           ------ ---- ------ --------- ------- --------- ------------
          -    93 IGNR      1         0       0         0    END wtplsql_run;
          +    92 IGNR      1         0       0         0       ut_teardown;
          +    93 IGNR      1         1       1         1    END wtplsql_run;
           

          Demos and Examples

          diff --git a/docs/demo/ut_str.md b/docs/demo/ut_str.md index 87de66b..939b1b5 100644 --- a/docs/demo/ut_str.md +++ b/docs/demo/ut_str.md @@ -10,7 +10,7 @@ The [original "ut_str" example](https://utplsql.org/utPLSQL/v2.3.1/testfunc.html ## Test Package Conversion -Conversion of this test package into a test runner package requires the addition of the "wtPLSQL_run" procedure in the package specification. +Conversion of this test package into a Test Runner package requires the addition of the "wtPLSQL_run" procedure in the package specification. Run this: @@ -135,9 +135,9 @@ IS ); END; - --% WTPLSQL SET DBOUT "STR:PACKAGE BODY" %-- PROCEDURE wtplsql_run IS BEGIN + wtplsql.g_DBOUT := 'STR:PACKAGE BODY'; ut_setup; ut_betwn; ut_teardown; @@ -152,15 +152,27 @@ Mid-way down the package body is the annotation "WTPLSQL_begin_ignore_lines". T ## Check the Results -Run this: +The Persist add-on must be installed. + +Run this to setup HOOKS: ``` -set serveroutput on size unlimited format word_wrapped +begin + wtp.junit_core_report.delete_hooks; + wtp.wt_core_report.delete_hooks; + wtp.wt_test_run.insert_hooks; +end; +/ +``` +Run this: + +``` begin wtplsql.test_run('STR'); - wt_text_report.dbms_out(in_runner_name => 'STR' - ,in_detail_level => 30); + wtp.wt_persist_report.dbms_out(in_runner_owner => USER + ,in_runner_name => 'STR' + ,in_detail_level => 30); end; / ``` @@ -168,61 +180,68 @@ end; And Get This: ``` - wtPLSQL 1.1.0 - Run ID 82: 25-Jun-2018 10:08:46 PM - - Test Results for WTP_DEMO.STR - Total Test Cases: 0 Total Assertions: 3 - Minimum Interval msec: 0 Failed Assertions: 0 - Average Interval msec: 30 Error Assertions: 0 - Maximum Interval msec: 89 Test Yield: 100.00% - Total Run Time (sec): 0.1 - - Code Coverage for PACKAGE BODY WTP_DEMO.STR - Ignored Lines: 14 Total Profiled Lines: 25 - Excluded Lines: 1 Total Executed Lines: 4 - Minimum LineExec usec: 0 Not Executed Lines: 5 - Average LineExec usec: 0 Unknown Lines: 1 - Maximum LineExec usec: 5 Code Coverage: 44.40% - Trigger Source Offset: 0 - - - WTP_DEMO.STR Test Result Details (Test Run ID 82) ------------------------------------------------------------ - PASS 89ms Typical Valid Usage. EQ - Expected "is is" and got "is is" - PASS 0ms Test Negative Start. EQ - Expected "ing" and got "ing" - PASS 0ms Start bigger than end. ISNULL - Expected NULL and got "" - - - WTP_DEMO.STR PACKAGE BODY Code Coverage Details (Test Run ID 82) + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003 + Test Results for WT_DEMO.STR + Run ID 50: 13-Apr-2024 06:52:06 PM + -------------------------------------------------------------- + Minimum Elapsed msec: 0 Total Assertions: 3 + Average Elapsed msec: 1 Failed Assertions: 0 + Maximum Elapsed msec: 2 Total Testcases: 1 + Total Run Time (sec): 0.2 Failed Testcases: 0 + Testcase Yield: 100% + + Code Coverage for PACKAGE BODY WT_DEMO.STR + ---------------------------------------------------------------- + Ignored Lines: 15 Total Profiled Lines: 26 + Excluded Lines: 2 Total Executed Lines: 4 + Minimum LineExec usec: 0 Not Executed Lines: 4 + Average LineExec usec: 1 Unknown Lines: 1 + Maximum LineExec usec: 5 Code Coverage: 50.0% + Trigger Source Offset: 0 + + WT_DEMO.STR Test Result Details + Test Run ID: 50 + -------------------------------------------------------------- +---*** WT_DEMO.STR ***-------------------------------------------------------- + PASS 2.18ms Typical Valid Usage. EQ - Expected "is is" and got "is is" + PASS .091ms Test Negative Start. EQ - Expected "ing" and got "ing" + PASS .044ms Start bigger than end. ISNULL - Expected NULL and got "" + + WT_DEMO.STR PACKAGE BODY Code Coverage Details + Test Run ID: 50 + ---------------------------------------------------------------- Source TotTime MinTime MaxTime Line Stat Occurs (usec) (usec) (usec) Text ------ ---- ------ --------- ------- --------- ------------ - 3 UNKN 0 2 1 1 FUNCTION betwn ( - 10 EXEC 3 1 0 1 l_start PLS_INTEGER := start_in; + 3 UNKN 0 1 0 1 FUNCTION betwn ( + 10 EXEC 3 0 0 0 l_start PLS_INTEGER := start_in; 12 EXEC 3 1 0 1 IF l_start = 0 14#NOTX# 0 0 0 0 l_start := 1; - 17 EXEC 3 7 0 5 RETURN (SUBSTR ( - 25 EXEC 3 1 1 1 END; + 17 EXEC 3 6 0 5 RETURN (SUBSTR ( + 25 EXEC 3 1 0 0 END; 27 EXCL 0 0 0 0 FUNCTION betwn2 ( 36#NOTX# 0 0 0 0 IF end_in < 0 38#NOTX# 0 0 0 0 RETURN betwn (string_in, start_in, end_in); 40#NOTX# 0 0 0 0 RETURN (SUBSTR ( - 51#NOTX# 0 0 0 0 END; + 51 EXCL 0 0 0 0 END; 55 IGNR 0 0 0 0 PROCEDURE ut_setup 58 IGNR 1 1 1 1 NULL; 61 IGNR 0 0 0 0 PROCEDURE ut_teardown 64 IGNR 1 0 0 0 NULL; 68 IGNR 0 3 3 3 PROCEDURE ut_betwn - 71 IGNR 1 18 18 18 utassert.eq ( - 76 IGNR 1 1 1 1 utassert.eq ( - 81 IGNR 1 1 1 1 utassert.isnull ( + 71 IGNR 1 23 0 23 utassert.eq ( + 76 IGNR 1 1 0 1 utassert.eq ( + 81 IGNR 1 1 0 1 utassert.isnull ( 85 IGNR 1 0 0 0 END; - 88 IGNR 0 1 1 1 PROCEDURE wtplsql_run IS + 87 IGNR 0 1 1 1 PROCEDURE wtplsql_run IS + 89 IGNR 2 29 1 27 wtplsql.g_DBOUT := 'STR:PACKAGE BODY'; 90 IGNR 1 0 0 0 ut_setup; 91 IGNR 1 0 0 0 ut_betwn; - 92 IGNR 1 0 0 0 ut_teardown; Source TotTime MinTime MaxTime Line Stat Occurs (usec) (usec) (usec) Text ------ ---- ------ --------- ------- --------- ------------ - 93 IGNR 1 0 0 0 END wtplsql_run; + 92 IGNR 1 0 0 0 ut_teardown; + 93 IGNR 1 1 1 1 END wtplsql_run; ``` --- diff --git a/docs/demo/ut_truncit.htm b/docs/demo/ut_truncit.htm index dd70942..f56d400 100644 --- a/docs/demo/ut_truncit.htm +++ b/docs/demo/ut_truncit.htm @@ -2,9 +2,9 @@

          utPLSQL 2.3 ut_truncit Example


          Original Example

          -

          The original "ut_truncit" example is in the utPLSQL documentation. The PL/SQL source for the function that will be tested is in the "Test Success by Analyzing Impact" section. There is an additional function "tabcount" that is also needed. The PL/SQL source for the package specification and body of the utPLSQL test package are in the same section.

          +

          The original "ut_truncit" example is in the utPLSQL documentation. The PL/SQL source for the function that will be tested is in the "Test Success by Analyzing Impact" section. There is an additional function "tabcount" that is also needed. The PL/SQL source for the package specification and body of the utPLSQL test package are in the same section.

          Test Package Conversion

          -

          Conversion of this test package into a test runner package requires the addition of the "wtPLSQL_run" procedure in the package specification.

          +

          Conversion of this test package into a test runner package requires the addition of the "wtPLSQL_run" procedure in the package specification.

          Run this:

          CREATE OR REPLACE PACKAGE ut_truncit
           IS
          @@ -52,10 +52,9 @@ 

          Test Package Conversion

          ); END ut_TRUNCIT; - --% WTPLSQL SET DBOUT "TRUNCIT:PROCEDURE" %-- - PROCEDURE wtplsql_run IS BEGIN + wtplsql.g_DBOUT := 'TRUNCIT:PROCEDURE'; ut_setup; ut_TRUNCIT; ut_teardown; @@ -65,44 +64,58 @@

          Test Package Conversion

          The SET DBOUT annotation was also added to gather code coverage data.

          Check the Results

          +

          The Persist add-on must be installed.

          +

          Run this to setup HOOKS:

          +
          begin
          +   wtp.junit_core_report.delete_hooks;
          +   wtp.wt_core_report.delete_hooks;
          +   wtp.wt_test_run.insert_hooks;
          +end;
          +/
          +

          Run this:

          -
          set serveroutput on size unlimited format word_wrapped
          -
          -begin
          +
          begin
              wtplsql.test_run('UT_TRUNCIT');
          -   wt_text_report.dbms_out(in_runner_name  => 'UT_TRUNCIT'
          -                          ,in_detail_level => 30);
          +   wtp.wt_persist_report.dbms_out(in_runner_owner => USER
          +                                 ,in_runner_name  => 'UT_TRUNCIT'
          +                                 ,in_detail_level => 30);
           end;
           /
           

          And Get This:

          -
              wtPLSQL 1.1.0 - Run ID 81: 25-Jun-2018 09:48:39 PM
          -
          -  Test Results for WTP_DEMO.UT_TRUNCIT
          -       Total Test Cases:        0       Total Assertions:        1
          -  Minimum Interval msec:      331      Failed Assertions:        0
          -  Average Interval msec:      331       Error Assertions:        0
          -  Maximum Interval msec:      331             Test Yield:   100.00%
          -   Total Run Time (sec):      0.4
          +
            wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003
          +  Test Results for WT_DEMO.UT_TRUNCIT
          +  Run ID 49: 13-Apr-2024 06:48:15 PM
          +  --------------------------------------------------------------
          +  Minimum Elapsed msec:      559      Total Assertions:        1
          +  Average Elapsed msec:      559     Failed Assertions:        0
          +  Maximum Elapsed msec:      559       Total Testcases:        1
          +  Total Run Time (sec):      1.0      Failed Testcases:        0
          +                                        Testcase Yield:      100%
           
          -  Code Coverage for PROCEDURE WTP_DEMO.TRUNCIT
          +  Code Coverage for PROCEDURE WT_DEMO.TRUNCIT
          +  ----------------------------------------------------------------
                     Ignored Lines:        0   Total Profiled Lines:        3
                    Excluded Lines:        0   Total Executed Lines:        2
             Minimum LineExec usec:        2     Not Executed Lines:        0
          -  Average LineExec usec:    15714          Unknown Lines:        1
          -  Maximum LineExec usec:    31423          Code Coverage:   100.00%
          -  Trigger Source Offset:        0
          +  Average LineExec usec:    16393          Unknown Lines:        1
          +  Maximum LineExec usec:    32778          Code Coverage:    100.0%
          +  Trigger Source Offset:        0                                 
           
          - - WTP_DEMO.UT_TRUNCIT Test Result Details (Test Run ID 81)
          ------------------------------------------------------------
          - PASS  331ms Test of TRUNCIT. EQ - Expected "0" and got "0"
          +  WT_DEMO.UT_TRUNCIT Test Result Details
          +  Test Run ID: 49
          +  --------------------------------------------------------------
          +---***  WT_DEMO.UT_TRUNCIT  ***-------------------------------------------------
          + PASS 559.ms Test of TRUNCIT. EQ - Expected "0" and got "0"
           
          - - WTP_DEMO.TRUNCIT PROCEDURE Code Coverage Details (Test Run ID 81)
          +  WT_DEMO.TRUNCIT PROCEDURE Code Coverage Details
          +  Test Run ID: 49
          +  ----------------------------------------------------------------
           Source               TotTime MinTime   MaxTime     
             Line Stat Occurs    (usec)  (usec)    (usec) Text
           ------ ---- ------ --------- ------- --------- ------------
          -     1 UNKN      0         3       3         3 PROCEDURE truncit (
          -     7 EXEC      1     31426       3     31423    EXECUTE IMMEDIATE 'truncate table ' || NVL (sch, USER) || '.' || tab;
          +     1 UNKN      0         1       1         1 PROCEDURE truncit (
          +     7 EXEC      1     32784       6     32778    EXECUTE IMMEDIATE 'truncate table ' || NVL (sch, USER) || '.' || tab;
                8 EXEC      1         2       2         2 END;
           

          diff --git a/docs/demo/ut_truncit.md b/docs/demo/ut_truncit.md index e4a0d35..638a7b0 100644 --- a/docs/demo/ut_truncit.md +++ b/docs/demo/ut_truncit.md @@ -65,10 +65,9 @@ IS ); END ut_TRUNCIT; - --% WTPLSQL SET DBOUT "TRUNCIT:PROCEDURE" %-- - PROCEDURE wtplsql_run IS BEGIN + wtplsql.g_DBOUT := 'TRUNCIT:PROCEDURE'; ut_setup; ut_TRUNCIT; ut_teardown; @@ -82,15 +81,27 @@ The SET DBOUT annotation was also added to gather code coverage data. ## Check the Results -Run this: +The Persist add-on must be installed. +Run this to setup HOOKS: + +``` +begin + wtp.junit_core_report.delete_hooks; + wtp.wt_core_report.delete_hooks; + wtp.wt_test_run.insert_hooks; +end; +/ ``` -set serveroutput on size unlimited format word_wrapped +Run this: + +``` begin wtplsql.test_run('UT_TRUNCIT'); - wt_text_report.dbms_out(in_runner_name => 'UT_TRUNCIT' - ,in_detail_level => 30); + wtp.wt_persist_report.dbms_out(in_runner_owner => USER + ,in_runner_name => 'UT_TRUNCIT' + ,in_detail_level => 30); end; / ``` @@ -98,33 +109,39 @@ end; And Get This: ``` - wtPLSQL 1.1.0 - Run ID 81: 25-Jun-2018 09:48:39 PM - - Test Results for WTP_DEMO.UT_TRUNCIT - Total Test Cases: 0 Total Assertions: 1 - Minimum Interval msec: 331 Failed Assertions: 0 - Average Interval msec: 331 Error Assertions: 0 - Maximum Interval msec: 331 Test Yield: 100.00% - Total Run Time (sec): 0.4 - - Code Coverage for PROCEDURE WTP_DEMO.TRUNCIT + wtPLSQL wtpsrc 1.003, wtptst 1.003, wtpsav 1.003, wtpgrb 1.003 + Test Results for WT_DEMO.UT_TRUNCIT + Run ID 49: 13-Apr-2024 06:48:15 PM + -------------------------------------------------------------- + Minimum Elapsed msec: 559 Total Assertions: 1 + Average Elapsed msec: 559 Failed Assertions: 0 + Maximum Elapsed msec: 559 Total Testcases: 1 + Total Run Time (sec): 1.0 Failed Testcases: 0 + Testcase Yield: 100% + + Code Coverage for PROCEDURE WT_DEMO.TRUNCIT + ---------------------------------------------------------------- Ignored Lines: 0 Total Profiled Lines: 3 Excluded Lines: 0 Total Executed Lines: 2 Minimum LineExec usec: 2 Not Executed Lines: 0 - Average LineExec usec: 15714 Unknown Lines: 1 - Maximum LineExec usec: 31423 Code Coverage: 100.00% - Trigger Source Offset: 0 - - - WTP_DEMO.UT_TRUNCIT Test Result Details (Test Run ID 81) ------------------------------------------------------------ - PASS 331ms Test of TRUNCIT. EQ - Expected "0" and got "0" - - - WTP_DEMO.TRUNCIT PROCEDURE Code Coverage Details (Test Run ID 81) + Average LineExec usec: 16393 Unknown Lines: 1 + Maximum LineExec usec: 32778 Code Coverage: 100.0% + Trigger Source Offset: 0 + + WT_DEMO.UT_TRUNCIT Test Result Details + Test Run ID: 49 + -------------------------------------------------------------- +---*** WT_DEMO.UT_TRUNCIT ***------------------------------------------------- + PASS 559.ms Test of TRUNCIT. EQ - Expected "0" and got "0" + + WT_DEMO.TRUNCIT PROCEDURE Code Coverage Details + Test Run ID: 49 + ---------------------------------------------------------------- Source TotTime MinTime MaxTime Line Stat Occurs (usec) (usec) (usec) Text ------ ---- ------ --------- ------- --------- ------------ - 1 UNKN 0 3 3 3 PROCEDURE truncit ( - 7 EXEC 1 31426 3 31423 EXECUTE IMMEDIATE 'truncate table ' || NVL (sch, USER) || '.' || tab; + 1 UNKN 0 1 1 1 PROCEDURE truncit ( + 7 EXEC 1 32784 6 32778 EXECUTE IMMEDIATE 'truncate table ' || NVL (sch, USER) || '.' || tab; 8 EXEC 1 2 2 2 END; ``` diff --git a/docs/design/.gitignore b/docs/design/.gitignore new file mode 100644 index 0000000..e60e2d0 --- /dev/null +++ b/docs/design/.gitignore @@ -0,0 +1,37 @@ +**/*.localz +**/*.local +**/*.git +**/*.DS_Store +**/.DS_Store +**/.do_pool/** +**/.do_pool +**/*#JDEVADF_* +**/*~ +**/*.scc +**/*.mv.* +**/*.unmkelem.* +**/*.sync.* +**/*.rename.* +**/*.unbranch.* +**/*.unco.* +**/*.saved.* +**/*.client_contrib +**/.svn/** +**/.data/** +**/*.cdi +**/*.bak +**/*.generated.java +**/*.ignore +**/*.labellog.emd +**/.*.cs +**/.fullsource_nt +**/.fullsource +**/.depprod_nt +**/.depprod +**/.ade_path +**/.ade_path/** +**/*.contrib* +**/*.keep +**/*.rvi +**/.#* +**/CVS/** diff --git a/docs/design/Core_Call_Tree_Diagrams.odg b/docs/design/Core_Call_Tree_Diagrams.odg new file mode 100644 index 0000000..63962bc Binary files /dev/null and b/docs/design/Core_Call_Tree_Diagrams.odg differ diff --git a/docs/design/Core_Call_Tree_Diagrams.pdf b/docs/design/Core_Call_Tree_Diagrams.pdf new file mode 100644 index 0000000..e3797b3 Binary files /dev/null and b/docs/design/Core_Call_Tree_Diagrams.pdf differ diff --git a/docs/design/Core_ER_Diagrams.pdf b/docs/design/Core_ER_Diagrams.pdf new file mode 100644 index 0000000..f832ce6 Binary files /dev/null and b/docs/design/Core_ER_Diagrams.pdf differ diff --git a/docs/design/Main.dmd b/docs/design/Main.dmd new file mode 100644 index 0000000..f96b399 --- /dev/null +++ b/docs/design/Main.dmd @@ -0,0 +1,8 @@ + + +duane +2024-04-10 19:07:12 UTC +Main +false +1A482270-CB2D-848A-4777-3E87E273D611 + diff --git a/docs/design/Main/businessinfo/Business Information.xml b/docs/design/Main/businessinfo/Business Information.xml new file mode 100644 index 0000000..a94888d --- /dev/null +++ b/docs/design/Main/businessinfo/Business Information.xml @@ -0,0 +1,7 @@ + + +duane +2024-04-10 19:07:13 UTC +Main +false + diff --git a/docs/design/Main/datatypes/DataTypes.xml b/docs/design/Main/datatypes/DataTypes.xml new file mode 100644 index 0000000..76eb9ca --- /dev/null +++ b/docs/design/Main/datatypes/DataTypes.xml @@ -0,0 +1,15 @@ + + +duane +2024-04-10 19:07:13 UTC +Main +false +array_ref_ +array_ +10 +ARRAY +_Array +inst_ +ref_ +true + diff --git a/docs/design/Main/datatypes/structuredtype/seg_0/47E390DE-0671-C4B1-8428-0F45CBEE18F8.xml b/docs/design/Main/datatypes/structuredtype/seg_0/47E390DE-0671-C4B1-8428-0F45CBEE18F8.xml new file mode 100644 index 0000000..456c1f1 --- /dev/null +++ b/docs/design/Main/datatypes/structuredtype/seg_0/47E390DE-0671-C4B1-8428-0F45CBEE18F8.xml @@ -0,0 +1,10 @@ + + +duane +2024-04-10 19:07:13 UTC +Main +false +true +false +true + diff --git a/docs/design/Main/datatypes/structuredtype/seg_0/F72C39E0-D1CA-8821-2AD7-A1E95A37D3D1.xml b/docs/design/Main/datatypes/structuredtype/seg_0/F72C39E0-D1CA-8821-2AD7-A1E95A37D3D1.xml new file mode 100644 index 0000000..673ceec --- /dev/null +++ b/docs/design/Main/datatypes/structuredtype/seg_0/F72C39E0-D1CA-8821-2AD7-A1E95A37D3D1.xml @@ -0,0 +1,10 @@ + + +duane +2024-04-10 19:07:13 UTC +Main +false +true +false +true + diff --git a/docs/design/Main/datatypes/subviews/B34C9F55-09DA-A48A-CB4D-0F616681557E.xml b/docs/design/Main/datatypes/subviews/B34C9F55-09DA-A48A-CB4D-0F616681557E.xml new file mode 100644 index 0000000..8b46680 --- /dev/null +++ b/docs/design/Main/datatypes/subviews/B34C9F55-09DA-A48A-CB4D-0F616681557E.xml @@ -0,0 +1,26 @@ + + +duane +duane +2024-04-10 19:07:13 UTC +false +true +false +true +false +false +false +-1 +false +1 + + +false + + + +false + + + + diff --git a/docs/design/Main/dl_settings.xml b/docs/design/Main/dl_settings.xml new file mode 100644 index 0000000..b73a92f --- /dev/null +++ b/docs/design/Main/dl_settings.xml @@ -0,0 +1,466 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + +
          + + + + + + + + + + + + + + + + + + + + + + + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          diff --git a/docs/design/Main/logical/Logical.xml b/docs/design/Main/logical/Logical.xml new file mode 100644 index 0000000..1ba97f8 --- /dev/null +++ b/docs/design/Main/logical/Logical.xml @@ -0,0 +1,7 @@ + + +duane +2024-04-10 19:07:13 UTC +Main +false + diff --git a/docs/design/Main/logical/subviews/C2C82868-4699-F91B-EE4D-2F5B8F7B9637.xml b/docs/design/Main/logical/subviews/C2C82868-4699-F91B-EE4D-2F5B8F7B9637.xml new file mode 100644 index 0000000..d88e32e --- /dev/null +++ b/docs/design/Main/logical/subviews/C2C82868-4699-F91B-EE4D-2F5B8F7B9637.xml @@ -0,0 +1,16 @@ + + +duane +duane +2024-04-10 19:19:58 UTC +false +true +false +false +false +false +false +-1 +false +1 + diff --git a/docs/design/Main/mapping/DeletedMap_RMA1ED17DA-3950-8B0F-4711-FD6A141ADE1D.xml b/docs/design/Main/mapping/DeletedMap_RMA1ED17DA-3950-8B0F-4711-FD6A141ADE1D.xml new file mode 100644 index 0000000..dfe3074 --- /dev/null +++ b/docs/design/Main/mapping/DeletedMap_RMA1ED17DA-3950-8B0F-4711-FD6A141ADE1D.xml @@ -0,0 +1,3 @@ + + + diff --git a/docs/design/Main/mapping/ExtendedMap.xml b/docs/design/Main/mapping/ExtendedMap.xml new file mode 100644 index 0000000..6efc9ae --- /dev/null +++ b/docs/design/Main/mapping/ExtendedMap.xml @@ -0,0 +1,3 @@ + + + diff --git a/docs/design/Main/mapping/ExtendedMap_RMA1ED17DA-3950-8B0F-4711-FD6A141ADE1D.xml b/docs/design/Main/mapping/ExtendedMap_RMA1ED17DA-3950-8B0F-4711-FD6A141ADE1D.xml new file mode 100644 index 0000000..856e51f --- /dev/null +++ b/docs/design/Main/mapping/ExtendedMap_RMA1ED17DA-3950-8B0F-4711-FD6A141ADE1D.xml @@ -0,0 +1,3 @@ + + + diff --git a/docs/design/Main/pm/Process Model.xml b/docs/design/Main/pm/Process Model.xml new file mode 100644 index 0000000..539be98 --- /dev/null +++ b/docs/design/Main/pm/Process Model.xml @@ -0,0 +1,7 @@ + + +duane +2024-04-10 19:07:13 UTC +Main +false + diff --git a/docs/design/Main/rdbms/Main_RDBMSSites.xml b/docs/design/Main/rdbms/Main_RDBMSSites.xml new file mode 100644 index 0000000..75d8ebd --- /dev/null +++ b/docs/design/Main/rdbms/Main_RDBMSSites.xml @@ -0,0 +1,3 @@ + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D.xml new file mode 100644 index 0000000..5e9a7de --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D.xml @@ -0,0 +1,15 @@ + + +duane +2024-04-10 19:07:51 UTC +Main +false +01F6E6D1-21D0-CFBD-ABDD-3988D1813575 + + +wtp@DEVPDB_localhost +wtp +1 + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/062A2B52-09F4-207B-850E-2E04AA065FE2.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/062A2B52-09F4-207B-850E-2E04AA065FE2.xml new file mode 100644 index 0000000..469ccbe --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/062A2B52-09F4-207B-850E-2E04AA065FE2.xml @@ -0,0 +1,19 @@ + + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUNS_FK2 +duane +2024-04-10 19:09:26 UTC +Main +WTP.WT_TEST_RUNNERS +NO ACTION +C619958B-4EFE-7A79-1530-39139BD2978B +D7E1D9CC-76E4-D542-2C43-D56913973E95 +D7E1D9CC-76E4-D542-2C43-D56913973E95 +true +ID +true +false +true + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/344E365C-34FA-ABD1-6F89-4E7A3DB91B28.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/344E365C-34FA-ABD1-6F89-4E7A3DB91B28.xml new file mode 100644 index 0000000..037da21 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/344E365C-34FA-ABD1-6F89-4E7A3DB91B28.xml @@ -0,0 +1,19 @@ + + +wtp@DEVPDB_localhost +WTP +WT_RESULTS_FK1 +duane +2024-04-10 19:09:26 UTC +Main +WTP.WT_TEST_RUNS +NO ACTION +9636F0E1-B48A-756B-7277-A09DA3C8A191 +134E95C8-D278-1B3C-D6F9-16362A405CBF +134E95C8-D278-1B3C-D6F9-16362A405CBF +true +ID +true +false +true + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/45A573B2-CD43-F1F9-77A0-8B668F99BA02.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/45A573B2-CD43-F1F9-77A0-8B668F99BA02.xml new file mode 100644 index 0000000..53e66e6 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/45A573B2-CD43-F1F9-77A0-8B668F99BA02.xml @@ -0,0 +1,19 @@ + + +wtp@DEVPDB_localhost +WTP +PLSQL_PROFILER_UNITS_FK1 +duane +2024-04-10 19:09:26 UTC +Main +WTP.PLSQL_PROFILER_RUNS +NO ACTION +AD852798-2151-9B8D-72B3-69C9049EC985 +5A049952-A879-06D7-F379-105EAD71A713 +5A049952-A879-06D7-F379-105EAD71A713 +true +RUNID +true +false +true + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/4656750F-5BBB-BB3F-2A88-EC3E120DC0C9.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/4656750F-5BBB-BB3F-2A88-EC3E120DC0C9.xml new file mode 100644 index 0000000..e93888a --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/4656750F-5BBB-BB3F-2A88-EC3E120DC0C9.xml @@ -0,0 +1,19 @@ + + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUNS_FK1 +duane +2024-04-10 19:09:26 UTC +Main +WTP.WT_DBOUTS +NO ACTION +DA7F3AD5-D951-192B-23AE-A1549FB69116 +EEFF3F3D-7BFE-D1B4-82CE-FAD11C3F8E40 +EEFF3F3D-7BFE-D1B4-82CE-FAD11C3F8E40 +false +ID +true +false +true + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/8CBEA3FE-045F-4598-E7EC-F8E6810F56A7.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/8CBEA3FE-045F-4598-E7EC-F8E6810F56A7.xml new file mode 100644 index 0000000..07749df --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/8CBEA3FE-045F-4598-E7EC-F8E6810F56A7.xml @@ -0,0 +1,19 @@ + + +wtp@DEVPDB_localhost +WTP +WT_PROFILES_FK1 +duane +2024-04-10 19:09:26 UTC +Main +WTP.WT_TEST_RUNS +NO ACTION +9636F0E1-B48A-756B-7277-A09DA3C8A191 +134E95C8-D278-1B3C-D6F9-16362A405CBF +134E95C8-D278-1B3C-D6F9-16362A405CBF +true +ID +true +false +true + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/A82B8171-DCB9-A30B-1B7E-CD8971A17F0E.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/A82B8171-DCB9-A30B-1B7E-CD8971A17F0E.xml new file mode 100644 index 0000000..69f6f8a --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/A82B8171-DCB9-A30B-1B7E-CD8971A17F0E.xml @@ -0,0 +1,19 @@ + + +wtp@DEVPDB_localhost +WTP +WT_DBOUT_RUNS_FK1 +duane +2024-04-10 19:09:26 UTC +Main +WTP.WT_TEST_RUNS +NO ACTION +9636F0E1-B48A-756B-7277-A09DA3C8A191 +134E95C8-D278-1B3C-D6F9-16362A405CBF +134E95C8-D278-1B3C-D6F9-16362A405CBF +true +ID +true +false +true + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/B2E2CA36-09C3-2527-1A40-542A657E6BB9.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/B2E2CA36-09C3-2527-1A40-542A657E6BB9.xml new file mode 100644 index 0000000..fb3c874 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/B2E2CA36-09C3-2527-1A40-542A657E6BB9.xml @@ -0,0 +1,19 @@ + + +wtp@DEVPDB_localhost +WTP +WT_TESTCASE_RUNS_FK2 +duane +2024-04-10 19:09:26 UTC +Main +WTP.WT_TESTCASES +NO ACTION +75C40BBC-950A-B117-05CF-FF327E9C0952 +77F4B4E9-7DA5-C427-B6CB-B8503E836FBB +77F4B4E9-7DA5-C427-B6CB-B8503E836FBB +true +ID +true +false +true + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/D6679904-5DCC-D682-B6CD-9D2C8772FCEC.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/D6679904-5DCC-D682-B6CD-9D2C8772FCEC.xml new file mode 100644 index 0000000..7c8b5e1 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/D6679904-5DCC-D682-B6CD-9D2C8772FCEC.xml @@ -0,0 +1,19 @@ + + +wtp@DEVPDB_localhost +WTP +PLSQL_PROFILER_DATA_FK1 +duane +2024-04-10 19:09:26 UTC +Main +WTP.PLSQL_PROFILER_UNITS +NO ACTION +1DEC1727-6653-3CF8-958B-90000528613A +0EFE6D0A-CD65-AFA0-6C17-06DEE85092BC +0EFE6D0A-CD65-AFA0-6C17-06DEE85092BC +true +RUNID,UNIT_NUMBER +true +false +true + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/DC4188A2-3A69-F618-2B93-07D1466CF0CB.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/DC4188A2-3A69-F618-2B93-07D1466CF0CB.xml new file mode 100644 index 0000000..c227bf1 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/DC4188A2-3A69-F618-2B93-07D1466CF0CB.xml @@ -0,0 +1,19 @@ + + +wtp@DEVPDB_localhost +WTP +WT_TESTCASE_RUNS_FK1 +duane +2024-04-10 19:09:26 UTC +Main +WTP.WT_TEST_RUNS +NO ACTION +9636F0E1-B48A-756B-7277-A09DA3C8A191 +134E95C8-D278-1B3C-D6F9-16362A405CBF +134E95C8-D278-1B3C-D6F9-16362A405CBF +true +ID +true +false +true + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/EE8549AC-49EC-FBF1-CC57-656F46EF48B0.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/EE8549AC-49EC-FBF1-CC57-656F46EF48B0.xml new file mode 100644 index 0000000..e125807 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/foreignkey/seg_0/EE8549AC-49EC-FBF1-CC57-656F46EF48B0.xml @@ -0,0 +1,19 @@ + + +wtp@DEVPDB_localhost +WTP +WT_RESULTS_FK2 +duane +2024-04-10 19:09:26 UTC +Main +WTP.WT_TESTCASES +NO ACTION +75C40BBC-950A-B117-05CF-FF327E9C0952 +77F4B4E9-7DA5-C427-B6CB-B8503E836FBB +77F4B4E9-7DA5-C427-B6CB-B8503E836FBB +false +ID +true +false +true + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/01F6E6D1-3988D1813575.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/01F6E6D1-3988D1813575.xml new file mode 100644 index 0000000..bb7734d --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/01F6E6D1-3988D1813575.xml @@ -0,0 +1,6 @@ + + +duane +2024-04-10 19:08:09 UTC +Main + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/0608C335-E0E6-0D10-0FA3-562FF256376C.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/0608C335-E0E6-0D10-0FA3-562FF256376C.xml new file mode 100644 index 0000000..c2d3358 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/0608C335-E0E6-0D10-0FA3-562FF256376C.xml @@ -0,0 +1,271 @@ + + +wtp@DEVPDB_localhost +WTP +WT_TESTCASE +duane +2024-04-10 19:09:30 UTC +Main + +CREATE OR REPLACE PACKAGE WTP.WT_TESTCASE + authid definer +as + + -- Return a Testcase Surrogate Key. + -- Return NULL if the Testcase does not exist. + function get_id + (in_testcase in varchar2) + return number; + + -- Return a Testcase Surrogate Key. + -- Add the Testcase if it does not exist. + function dim_id + (in_testcase in varchar2) + return number; + + -- Delete all records with no child records + procedure delete_records; + + -- WtPLSQL Self Test Procedures + -- + -- alter system set PLSQL_CCFLAGS = + -- 'WTPLSQL_SELFTEST:TRUE' + -- scope=BOTH; + -- + $IF $$WTPLSQL_SELFTEST + $THEN + procedure WTPLSQL_RUN; + $END + +end wt_testcase; + +wtp@DEVPDB_localhost +WTP +WT_TESTCASE +duane +2024-04-10 19:09:30 UTC +Main + +CREATE OR REPLACE PACKAGE BODY WTP.WT_TESTCASE +as + + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + C_TESTCASE CONSTANT varchar2(50) := 'WT_TESTCASE_FOR_TESTING_1234ABCD'; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--------------------- +-- Public Procedures +--------------------- + + +------------------------------------------------------------ +function get_id + (in_testcase in varchar2) + return number +is + l_id number; +begin + select id into l_id + from wt_testcases + where testcase = in_testcase; + return l_id; +exception when NO_DATA_FOUND +then + return NULL; +end get_id; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_get_id + is + l_id number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Setup'; + delete from wt_testcases + where testcase = C_TESTCASE; + wt_assert.isnotnull + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 0' + ,check_query_in => 'select count(*) from wt_testcases' || + ' where testcase = ''' || C_TESTCASE || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Happy Path 1'; + wt_assert.isnull + (msg_in => 'Check for Null return' + ,check_this_in => get_id(C_TESTCASE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Happy Path 2'; + insert into wt_testcases (id, testcase) + values (wt_testcases_seq.nextval, C_TESTCASE) + returning id into l_id; + wt_assert.eq + (msg_in => 'Check ID return' + ,check_this_in => get_id(C_TESTCASE) + ,against_this_in => l_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Teardown'; + delete from wt_testcases + where testcase = C_TESTCASE; + wt_assert.eq + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT + ,against_this_in => 1); + commit; + end t_get_id; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function dim_id + (in_testcase in varchar2) + return number +is + pragma AUTONOMOUS_TRANSACTION; + rec wt_testcases%ROWTYPE; +begin + if in_testcase is NULL + then + return NULL; + end if; + rec.id := get_id (in_testcase); + if rec.id is null + then + rec.id := wt_testcases_seq.nextval; + rec.testcase := in_testcase; + insert into wt_testcases values rec; + end if; + commit; + return rec.id; +end dim_id; + + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_dim_id + is + l_id number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Setup'; + delete from wt_testcases + where testcase = C_TESTCASE; + wt_assert.isnotnull + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 0' + ,check_query_in => 'select count(*) from wt_testcases' || + ' where testcase = ''' || C_TESTCASE || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Happy Path 1'; + l_id := dim_id(C_TESTCASE); + wt_assert.isnotnull + (msg_in => 'Check ID return 1' + ,check_this_in => l_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Happy Path 2'; + wt_assert.eq + (msg_in => 'Check ID return 2' + ,check_this_in => dim_id(C_TESTCASE) + ,against_this_in => l_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Sad Path 1'; + wt_assert.isnull + (msg_in => 'Check NULL return' + ,check_this_in => dim_id(NULL)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Teardown'; + delete from wt_testcases + where testcase = C_TESTCASE; + wt_assert.eq + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT + ,against_this_in => 1); + commit; + end t_dim_id; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure delete_records +is +begin + delete from wt_testcases + where id in ( + select id from wt_testcases + MINUS + select distinct testcase_id ID from wt_results + MINUS + select distinct testcase_id ID from wt_testcase_runs); +end delete_records; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_delete_records + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Setup'; + delete from wt_testcases + where testcase = C_TESTCASE; + wt_assert.isnotnull + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + insert into wt_testcases (id, testcase) + values (wt_testcases_seq.nextval, C_TESTCASE); + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 1' + ,check_query_in => 'select count(*) from wt_testcases' || + ' where testcase = ''' || C_TESTCASE || '''' + ,against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Happy Path 1'; + delete_records; + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 0' + ,check_query_in => 'select count(*) from wt_testcases' || + ' where testcase = ''' || C_TESTCASE || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Happy Path 2'; + delete_records; + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should still be 0' + ,check_query_in => 'select count(*) from wt_testcases' || + ' where testcase = ''' || C_TESTCASE || '''' + ,against_value_in => 0); + commit; + end t_delete_records; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure WTPLSQL_RUN + is + begin + -------------------------------------- WTPLSQL Testing -- + wtplsql.g_DBOUT := 'WT_TESTCASE:PACKAGE BODY'; + t_get_id; + t_dim_id; + t_delete_records; + end; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +end wt_testcase; + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/0BE8DADB-1C62-A689-AFC7-E019ACC9401C.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/0BE8DADB-1C62-A689-AFC7-E019ACC9401C.xml new file mode 100644 index 0000000..53853cb --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/0BE8DADB-1C62-A689-AFC7-E019ACC9401C.xml @@ -0,0 +1,710 @@ + + +wtp@DEVPDB_localhost +WTP +WTPLSQL +duane +2024-04-10 19:09:28 UTC +Main + +CREATE OR REPLACE PACKAGE WTP.WTPLSQL + authid definer +as + + C_RUNNER_ENTRY_POINT constant varchar2(30) := 'WTPLSQL_RUN'; + + function get_runner_entry_point + return varchar2 deterministic; + + function show_version + return varchar2; + + -- Database Object Under Test. + -- Modify as required + g_DBOUT varchar2(128); + + -- Run a single test runner in the current schema + -- Returns after test runner is complete + procedure test_run + (in_package_name in varchar2); + + -- Run all test runners in the current schema + -- Returns after all test runners are complete + procedure test_all; + + -- WtPLSQL Self Test Procedures + -- + -- alter system set PLSQL_CCFLAGS = + -- 'WTPLSQL_ENABLE:TRUE, WTPLSQL_SELFTEST:TRUE' + -- scope=BOTH; + -- + -- begin + -- dbms_utility.compile_schema('WTP',TRUE,FALSE); + -- end; + -- / + -- + $IF $$WTPLSQL_SELFTEST + $THEN + procedure WTPLSQL_RUN; + $END + +end wtplsql; + +wtp@DEVPDB_localhost +WTP +WTPLSQL +duane +2024-04-10 19:09:28 UTC +Main + +CREATE OR REPLACE PACKAGE BODY WTP.WTPLSQL +as + + $IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ + $THEN + TYPE test_all_aa_type is table of varchar2(400) index by varchar2(400); + test_all_aa test_all_aa_type; + wtplsql_skip_test boolean := FALSE; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +---------------------- +-- Private Procedures +---------------------- + + +------------------------------------------------------------ +-- This procedure is separated for internal WTPLSQL testing +procedure check_runner +is + l_package_check number; +begin + -- These RAISEs can be captured because the Test Runs Record is set. + -- Check for NULL Runner Name + if core_data.g_run_rec.test_runner_name is null + then + raise_application_error (-20001, 'TEST_RUNNER_NAME is null'); + end if; + -- Check for Valid Runner Name + select count(*) into l_package_check + from wt_qual_test_runners_vw + where owner = core_data.g_run_rec.test_runner_owner + and package_name = core_data.g_run_rec.test_runner_name; + if l_package_check = 0 + then + raise_application_error (-20002, 'TEST_RUNNER_NAME Procedure "' || + core_data.g_run_rec.test_runner_name || + '.' || C_RUNNER_ENTRY_POINT || + '" is not valid' ); + end if; +end check_runner; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_check_runner + is + l_run_recSAVE core_data.run_rec_type; + l_msg_in varchar2(4000); + l_err_in varchar2(4000); + -------------------------------------- WTPLSQL Testing -- + procedure l_test_sqlerrm is begin + -- Restore the core_data.g_run_rec + core_data.g_run_rec := l_run_recSAVE; + wt_assert.eq + (msg_in => l_msg_in + ,check_this_in => SQLERRM + ,against_this_in => l_err_in); + end l_test_sqlerrm; + begin + -- Save CORE_DATA data + l_run_recSAVE := core_data.g_run_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'CHECK_RUNNER Happy Path 1'; + wt_assert.eq + (msg_in => 'Confirm TEST_RUNNER_OWNER' + ,check_this_in => core_data.g_run_rec.test_runner_owner + ,against_this_in => USER); + core_data.g_run_rec.test_runner_name := 'WTPLSQL'; + l_msg_in := 'Valid TEST_RUNNER_NAME'; + l_err_in := 'ORA-0000: normal, successful completion'; + begin + check_runner; + l_test_sqlerrm; + exception when others then + l_test_sqlerrm; + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'CHECK_RUNNER Sad Path 1'; + core_data.g_run_rec.test_runner_name := ''; + l_msg_in := 'Null TEST_RUNNER_NAME'; + l_err_in := 'ORA-20001: TEST_RUNNER_NAME is null'; + begin + check_runner; + l_test_sqlerrm; + exception when others then + -- This test is expected to throw an error + l_test_sqlerrm; + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'CHECK_RUNNER Sad Path 2'; + core_data.g_run_rec.test_runner_name := 'BOGUS'; + l_msg_in := 'Invalid TEST_RUNNER_NAME'; + l_err_in := 'ORA-20002: TEST_RUNNER_NAME Procedure "BOGUS.' || + C_RUNNER_ENTRY_POINT || '" is not valid'; + begin + check_runner; + l_test_sqlerrm; + exception when others then + l_test_sqlerrm; + end; + end t_check_runner; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure check_dbout +is + -- + -- https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements008.htm#SQLRF51129 + -- Within a namespace, no two objects can have the same name. The following + -- schema objects share one namespace: + -- -) Packages + -- -) Private synonyms + -- -) Sequences + -- -) Stand-alone procedures + -- -) Stand-alone stored functions + -- -) User-defined operators + -- -) User-defined types + -- -) Tables + -- -) Views + -- Each of the following schema objects has its own namespace: + -- -) Clusters + -- -) Constraints + -- -) Database triggers + -- -) Dimensions + -- -) Indexes + -- -) Materialized views (When you create a materialized view, the database + -- creates an internal table of the same name. This table has the same + -- namespace as the other tables in the schema. Therefore, a schema + -- cannot contain a table and a materialized view of the same name.) + -- -) Private database links + -- Because tables and sequences are in the same namespace, a table and a + -- sequence in the same schema cannot have the same name. However, tables + -- and indexes are in different namespaces. Therefore, a table and an index + -- in the same schema can have the same name. + -- Each schema in the database has its own namespaces for the objects it + -- contains. This means, for example, that two tables in different schemas + -- are in different namespaces and can have the same name. + -- Results are unknown if a Database Object Under Test has the same name in + -- different namespaces. + -- + l_dot_pos number; + l_cln_pos number; +begin + if g_DBOUT is null + then + return; + end if; + l_dot_pos := instr(g_DBOUT,'.'); + l_cln_pos := instr(g_DBOUT,':'); + begin + with q_main as ( + select obj.owner + ,obj.object_name + ,obj.object_type + from dba_objects obj + where obj.owner = core_data.g_run_rec.test_runner_owner + and ( ( -- No separators were given, assume USER is the owner. + -- No object type was given. This could throw TOO_MANY_ROWS. + l_dot_pos = 0 + and l_cln_pos = 0 + and obj.object_name = g_DBOUT ) + OR ( -- No object owner was given, assume USER is the owner. + l_dot_pos = 0 + and l_cln_pos != 0 + and obj.object_name = substr(g_DBOUT, 1, l_cln_pos-1) + and obj.object_type = substr(g_DBOUT, l_cln_pos+1, 512) ) ) + UNION ALL + select obj.owner + ,obj.object_name + ,obj.object_type + from dba_objects obj + where ( -- No object type was given. This could throw TOO_MANY_ROWS. + l_dot_pos != 0 + and l_cln_pos = 0 + and obj.owner = substr(g_DBOUT, 1, l_dot_pos-1) + and obj.object_name = substr(g_DBOUT, l_dot_pos+1, 512) ) + OR ( -- All separators were given + l_dot_pos != 0 + and l_cln_pos != 0 + and obj.owner = substr(g_DBOUT, 1, l_dot_pos-1) + and obj.object_name = substr(g_DBOUT, l_dot_pos+1, l_cln_pos-l_dot_pos-1) + and obj.object_type = substr(g_DBOUT, l_cln_pos+1, 512) ) + ) + select owner + ,object_name + ,object_type + into core_data.g_run_rec.dbout_owner + ,core_data.g_run_rec.dbout_name + ,core_data.g_run_rec.dbout_type + from q_main; + exception + when NO_DATA_FOUND + then + core_data.run_error('Unable to find database object "' || + g_DBOUT || '".' ); + return; + when TOO_MANY_ROWS + then + -- The SELECT INTO will load some values into these variables + -- when TOO_MANY_ROWS are selected. + core_data.g_run_rec.dbout_owner := ''; + core_data.g_run_rec.dbout_name := ''; + core_data.g_run_rec.dbout_type := ''; + core_data.run_error('Found too many database objects "' || + g_DBOUT || '".' ); + return; + when OTHERS + then + core_data.g_run_rec.dbout_owner := ''; + core_data.g_run_rec.dbout_name := ''; + core_data.g_run_rec.dbout_type := ''; + core_data.run_error('Error finding database object: ' || SQLERRM); + return; + end; + -- +end check_dbout; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_check_dbout + is + l_run_recSAVE core_data.run_rec_type; + l_run_recTEST core_data.run_rec_type; + procedure clear_run_rec is begin + core_data.g_run_rec.dbout_owner := ''; + core_data.g_run_rec.dbout_name := ''; + core_data.g_run_rec.dbout_type := ''; + core_data.g_run_rec.error_message := ''; + end clear_run_rec; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Find DBOUT Happy Path 1'; + l_run_recSAVE := core_data.g_run_rec; + clear_run_rec; + g_DBOUT := ''; + check_dbout; + l_run_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_run_recSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull( + msg_in => 'l_run_recTEST.dbout_owner', + check_this_in => l_run_recTEST.dbout_owner); + wt_assert.isnull( + msg_in => 'l_run_recTEST.dbout_name', + check_this_in => l_run_recTEST.dbout_name); + wt_assert.isnull( + msg_in => 'l_run_recTEST.dbout_type', + check_this_in => l_run_recTEST.dbout_type); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Find DBOUT Happy Path 2'; + l_run_recSAVE := core_data.g_run_rec; + clear_run_rec; + g_DBOUT := 'SYS.DUAL'; + check_dbout; + l_run_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_run_recSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq( + msg_in => 'l_run_recTEST.dbout_owner', + check_this_in => l_run_recTEST.dbout_owner, + against_this_in => 'SYS'); + wt_assert.eq( + msg_in => 'l_run_recTEST.dbout_name', + check_this_in => l_run_recTEST.dbout_name, + against_this_in => 'DUAL'); + wt_assert.eq( + msg_in => 'l_run_recTEST.dbout_type', + check_this_in => l_run_recTEST.dbout_type, + against_this_in => 'TABLE'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Find DBOUT Happy Path 3'; + l_run_recSAVE := core_data.g_run_rec; + clear_run_rec; + g_DBOUT := 'WTPLSQL:PACKAGE BODY'; + check_dbout; + l_run_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_run_recSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq( + msg_in => 'l_run_recTEST.dbout_owner', + check_this_in => l_run_recTEST.dbout_owner, + against_this_in => USER); + wt_assert.eq( + msg_in => 'l_run_recTEST.dbout_name', + check_this_in => l_run_recTEST.dbout_name, + against_this_in => 'WTPLSQL'); + wt_assert.eq( + msg_in => 'l_run_recTEST.dbout_type', + check_this_in => l_run_recTEST.dbout_type, + against_this_in => 'PACKAGE BODY'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Find DBOUT Happy Path 4'; + l_run_recSAVE := core_data.g_run_rec; + clear_run_rec; + g_DBOUT := 'WT_EXECUTE_TEST_RUNNER'; + check_dbout; + l_run_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_run_recSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq( + msg_in => 'l_run_recTEST.dbout_owner', + check_this_in => l_run_recTEST.dbout_owner, + against_this_in => USER); + wt_assert.eq( + msg_in => 'l_run_recTEST.dbout_name', + check_this_in => l_run_recTEST.dbout_name, + against_this_in => 'WT_EXECUTE_TEST_RUNNER'); + wt_assert.eq( + msg_in => 'l_run_recTEST.dbout_type', + check_this_in => l_run_recTEST.dbout_type, + against_this_in => 'PROCEDURE'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Find DBOUT Sad Path 1'; + l_run_recSAVE := core_data.g_run_rec; + clear_run_rec; + g_DBOUT := 'someone.bogus:thingy'; + check_dbout; + l_run_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_run_recSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull( + msg_in => 'l_run_recTEST.dbout_owner', + check_this_in => l_run_recTEST.dbout_owner); + wt_assert.isnull( + msg_in => 'l_run_recTEST.dbout_name', + check_this_in => l_run_recTEST.dbout_name); + wt_assert.isnull( + msg_in => 'l_run_recTEST.dbout_type', + check_this_in => l_run_recTEST.dbout_type); + wt_assert.isnotnull( + msg_in => 'l_run_recTEST.error_message', + check_this_in => l_run_recTEST.error_message); + wt_assert.eqqueryvalue ( + msg_in => 'l_run_recTEST.error_message', + check_query_in => 'select 1 from dual where ''' || + l_run_recTEST.error_message || + ''' like ''%Unable to find database object "' || + g_DBOUT || '".%''', + against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Find DBOUT Sad Path 2'; + l_run_recSAVE := core_data.g_run_rec; + clear_run_rec; + g_DBOUT := 'WTPLSQL'; + check_dbout; + g_DBOUT := ''; + l_run_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_run_recSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull( + msg_in => 'l_run_recTEST.dbout_owner', + check_this_in => l_run_recTEST.dbout_owner); + wt_assert.isnull( + msg_in => 'l_run_recTEST.dbout_name', + check_this_in => l_run_recTEST.dbout_name); + wt_assert.isnull( + msg_in => 'l_run_recTEST.dbout_type', + check_this_in => l_run_recTEST.dbout_type); + wt_assert.eqqueryvalue ( + msg_in => 'l_run_recTEST.error_message', + check_query_in => 'select 1 from dual where ''' || + l_run_recTEST.error_message || + ''' like ''%Found too many database objects "WTPLSQL".%''', + against_value_in => 1); + end t_check_dbout; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--------------------- +-- Public Procedures +--------------------- + + +------------------------------------------------------------ +function get_runner_entry_point + return varchar2 +is +begin + return C_RUNNER_ENTRY_POINT; +end get_runner_entry_point; + +------------------------------------------------------------ +function show_version + return varchar2 +is + ret_str varchar2(4000); +begin + for buff in ( + select component, version + from wt_version t1 + where (component, install_tstmp) in ( + select t2.component, max(t2.install_tstmp) + from wt_version t2 + group by t2.component) + and action != 'REMOVE' + order by install_tstmp ) + loop + ret_str := ret_str || buff.component || ' ' || + trim(to_char(buff.version,'9999.099')) || ', '; + end loop; + return substr(ret_str, 1, length(ret_str)-2); +exception when NO_DATA_FOUND +then + return ''; +end show_version; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_show_version + is + existing_version varchar2(4000); + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Show Version Setup'; + existing_version := show_version; + wt_assert.isnotnull ( + msg_in => 'Saved Original Version', + check_this_in => existing_version); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Show Version Happy Path 1'; + insert into wt_version (component, version, action) + values ('TESTING', 1.01, 'INSTALL'); + wt_assert.isnotnull ( + msg_in => 'Show New Version', + check_this_in => show_version); + wt_assert.this ( + msg_in => 'Test New Version', + check_this_in => regexp_like(show_version, 'TESTING 1[.]010')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Show Version Happy Path 2'; + insert into wt_version (component, version, action) + values ('TESTING', 1.02, 'UPDATE'); + wt_assert.isnotnull ( + msg_in => 'Show New Version', + check_this_in => show_version); + wt_assert.this ( + msg_in => 'Test New Version', + check_this_in => regexp_like(show_version, 'TESTING 1[.]020')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Show Version Happy Path 3'; + insert into wt_version (component, version, action) + values ('TESTING', 1.02, 'REMOVE'); + wt_assert.isnotnull ( + msg_in => 'Show New Version', + check_this_in => show_version); + wt_assert.this ( + msg_in => 'Test New Version', + check_this_in => not regexp_like(show_version, 'TESTING')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Show Version Teardown'; + rollback; + delete from wt_version where component = 'TESTING'; + wt_assert.eq ( + msg_in => 'Records Deleted', + check_this_in => SQL%ROWCOUNT, + against_this_in => 0); + commit; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'Return to Existing Version', + check_this_in => show_version, + against_this_in => existing_version); + end t_show_version; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure test_run + (in_package_name in varchar2) +is +begin + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + if wtplsql_skip_test then + test_all_aa(in_package_name) := 'X'; + return; -- Avoid running the TEST_RUN procedure for some self-tests + end if; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + -- Primary Initialize + core_data.init1(in_package_name); + g_DBOUT := ''; + wt_assert.reset_globals; + -- Reset the Test Runs Record before checking anything + check_runner; + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + -- This will avoid running the hook for some self-tests + if NOT wtplsql_skip_test then + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + hook.run('before_test_run'); + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + end if; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + -- Secondary Initialize + core_data.init2; + g_DBOUT := ''; + -- + hook.run('execute_test_runner'); + -- + -- Primary Finalize + wt_assert.g_testcase := ''; + check_dbout; + core_data.final1; + g_DBOUT := ''; + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + -- This will avoid running the hook for some self-tests + if NOT wtplsql_skip_test then + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + hook.run('after_test_run'); + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + end if; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- +end test_run; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_test_run + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Test Run Testing'; + wt_assert.isnotnull ( + msg_in => 'Not Testing Test Run', + check_this_in => 'Too complicated because testing occurs while the this procedure is actively running.'); + end t_test_run; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure test_all +is + TYPE runners_nt_type is table of varchar2(128); + l_runners_nt runners_nt_type; +begin + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + -- This will avoid running the hook for some self-tests + if NOT wtplsql_skip_test then + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + hook.run('before_test_all'); + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + end if; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + select object_name + bulk collect into l_runners_nt + from user_procedures t1 + where procedure_name = C_RUNNER_ENTRY_POINT + and object_type = 'PACKAGE' + group by object_name + order by object_name; + for i in 1 .. l_runners_nt.COUNT + loop + test_run(l_runners_nt(i)); + end loop; + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + -- This will avoid running the hook for some self-tests + if NOT wtplsql_skip_test then + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + hook.run('after_test_all'); + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + end if; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- +end test_all; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_test_all + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'TEST_ALL Happy Path'; + test_all_aa.DELETE; + wtplsql_skip_test := TRUE; + -- TEST_ALL will populate the test_all_aa array + wtplsql.test_all; + wtplsql_skip_test := FALSE; + -- This package should be in the test_all_aa array + -------------------------------------- WTPLSQL Testing -- + wt_assert.this ( + msg_in => 'test_all_aa.EXISTS(''WTPLSQL'')', + check_this_in => test_all_aa.EXISTS( 'WTPLSQL' )); + end t_test_all; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure WTPLSQL_RUN + is + begin + -------------------------------------- WTPLSQL Testing -- + -- Can't set wtplsql.g_DBOUT because it is used for Unit Testing + --wtplsql.g_DBOUT := 'WTPLSQL:PACKAGE BODY'; + t_check_runner; + t_check_dbout; + t_show_version; + t_test_run; + t_test_all; + end; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +end wtplsql; + + + +wtp@DEVPDB_localhost +PUBLIC +WT_WTPLSQL +duane +2024-04-10 19:09:28 UTC +Main +WTPLSQL +0B8CEE14-5EF4-002A-AC5B-E55C89A47256 +YES +PUBLIC +0BE8DADB-1C62-A689-AFC7-E019ACC9401C + + +wtp@DEVPDB_localhost +PUBLIC +WTPLSQL +duane +2024-04-10 19:09:28 UTC +Main +WTPLSQL +0B8CEE14-5EF4-002A-AC5B-E55C89A47256 +YES +PUBLIC +0BE8DADB-1C62-A689-AFC7-E019ACC9401C + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/2C1448A2-A5F9-8AC2-F875-8DCAE7C46665.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/2C1448A2-A5F9-8AC2-F875-8DCAE7C46665.xml new file mode 100644 index 0000000..5f52271 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/2C1448A2-A5F9-8AC2-F875-8DCAE7C46665.xml @@ -0,0 +1,569 @@ + + +wtp@DEVPDB_localhost +WTP +WT_JOB +duane +2024-04-10 19:09:29 UTC +Main + +CREATE OR REPLACE PACKAGE WTP.WT_JOB + authid definer +as + + -- Database Links are Required to + -- Run Jobs as Different Owners + procedure create_db_link + (in_schema_name in varchar2 + ,in_password in varchar2); + procedure drop_db_link + (in_schema_name in varchar2); + + -- Waits for all test runners to complete + procedure wait_for_all_tests + (in_timeout_seconds in number default 3600 + ,in_check_interval_seconds in number default 60); + + -- Run a test runner in a different schema + -- Returns before the test runner is complete + procedure test_run + (in_schema_name in varchar2 + ,in_runner_name in varchar2); + + -- Run all test runners in a different schema + -- Returns before all test runners are complete + procedure test_all + (in_schema_name in varchar2); + + -- Run all test runners in all schema in sequence + -- Returns before all test runners are complete + procedure test_all_sequential; + + -- Run all test runners in all schema in parallel + -- Returns before all test runners are complete + procedure test_all_parallel; + + $IF $$WTPLSQL_SELFTEST + $THEN + procedure WTPLSQL_RUN; + $END + +end wt_job; + +wtp@DEVPDB_localhost +WTP +WT_JOB +duane +2024-04-10 19:09:29 UTC +Main + +CREATE OR REPLACE PACKAGE BODY WTP.WT_JOB +as + + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + g_current_user varchar2(30); + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + +---------------------- +-- Private Procedures +---------------------- + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + + procedure tl_compile_db_object + (in_ptype in varchar2 + ,in_pname in varchar2 + ,in_source in varchar2) + is + l_sql_txt varchar2(4000); + l_errtxt varchar2(32000) := ''; + begin + -------------------------------------- WTPLSQL Testing -- + -- Wrap in_source to complete the DDL statement + l_sql_txt := 'create ' || in_ptype || + ' ' || in_pname || + ' as ' || in_source ; + wt_assert.raises + (msg_in => 'Compile ' || in_ptype || ' ' || in_pname + ,check_call_in => l_sql_txt + ,against_exc_in => ''); + -------------------------------------- WTPLSQL Testing -- + for buff in (select * from user_errors + where attribute = 'ERROR' + and name = in_pname + and type = in_ptype + order by sequence) + loop + l_errtxt := l_errtxt || buff.line || ', ' || + buff.position || ': ' || buff.text || CHR(10); + end loop; + wt_assert.isnull + (msg_in => 'Compile ' || in_ptype || ' ' || in_pname || + ' Error' + ,check_this_in => l_errtxt); + -------------------------------------- WTPLSQL Testing -- + wt_assert.objexists ( + msg_in => in_pname || ' ' || in_ptype, + obj_owner_in => g_current_user, + obj_name_in => upper(in_pname), + obj_type_in => upper(in_ptype)); + end tl_compile_db_object; +--==============================================================-- + -------------------------------------- WTPLSQL Testing -- + procedure tl_drop_db_object + (in_ptype in varchar2, + in_pname in varchar2) + is + l_sql_txt varchar2(4000); + begin + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'drop ' || in_ptype || ' ' || in_pname; + wt_assert.raises + (msg_in => 'drop ' || in_ptype || ' ' || in_pname + ,check_call_in => l_sql_txt + ,against_exc_in => ''); + wt_assert.objnotexists ( + msg_in => in_pname || ' ' || in_ptype, + obj_owner_in => g_current_user, + obj_name_in => upper(in_pname), + obj_type_in => upper(in_ptype)); + end tl_drop_db_object; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +--------------------- +-- Public Procedures +--------------------- + + +------------------------------------------------------------ +procedure create_db_link + (in_schema_name in varchar2 + ,in_password in varchar2) +is + connect_string varchar2(2000); +begin + select '//' || 'localhost' || + ':' || 1521 || + '/' || global_name + into connect_string + from global_name; + execute immediate + 'create database link ' || in_schema_name || + ' connect to ' || in_schema_name || + ' identified by ' || in_password || + ' using ''' || connect_string || ''''; +end create_db_link; + + +------------------------------------------------------------ +procedure drop_db_link + (in_schema_name in varchar2) +is +begin + execute immediate + 'drop database link ' || in_schema_name; +exception when OTHERS then + if SQLERRM != 'ORA-02024: database link not found' + then + ------%WTPLSQL_begin_ignore_lines%------ + -- Can't Test This + raise; + -------%WTPLSQL_end_ignore_lines%------- + end if; +end drop_db_link; + + +------------------------------------------------------------ +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_create_drop_db_link + is + num_rows number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Create and Drop DB Link'; + wt_assert.eqqueryvalue ( + msg_in => 'Number of DB Links before testing', + check_query_in => 'select count(*) from user_db_links', + against_value_in => 0); + wt_assert.raises ( + msg_in => 'Create the Database Link', + check_call_in => 'begin wt_job.create_db_link(''' || + g_current_user || ''',''' || + upper(g_current_user) || '''); end;', + against_exc_in => ''); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Number of DB Links during testing', + check_query_in => 'select count(*) from user_db_links', + against_value_in => 1); + select count(*) + into num_rows + from wt_self_test; + wt_assert.eqqueryvalue ( + msg_in => 'Number of Rows from WT_SELF_TEST@' || g_current_user, + check_query_in => 'select count(*) from WT_SELF_TEST@' || g_current_user, + against_value_in => num_rows); + -------------------------------------- WTPLSQL Testing -- + rollback; + wt_assert.raises ( + msg_in => 'Close the Database Link', + check_call_in => 'alter session close database link ' || + g_current_user, + against_exc_in => ''); + wt_assert.raises ( + msg_in => 'Drop the Database Link', + check_call_in => 'begin wt_job.drop_db_link(''' || + g_current_user || '''); end;', + against_exc_in => ''); + -------------------------------------- WTPLSQL Testing -- + wt_assert.objnotexists ( + msg_in => g_current_user || ' Database Link', + obj_owner_in => g_current_user, + obj_name_in => g_current_user, + obj_type_in => 'DATABASE LINK'); + wt_assert.eqqueryvalue ( + msg_in => 'Number of DB Links after testing', + check_query_in => 'select count(*) from user_db_links', + against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Drop Nonexistent DB Link'; + wt_assert.raises ( + msg_in => 'Drop BOGUS Database Link', + check_call_in => 'begin wt_job.drop_db_link(''BOGUS''); end;', + against_exc_in => ''); + end t_create_drop_db_link; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Waits for all test runners to complete +procedure wait_for_all_tests + (in_timeout_seconds in number default 3600 + ,in_check_interval_seconds in number default 60) +is + num_jobs number := 0; + max_intervals pls_integer; +begin + max_intervals := nvl(in_timeout_seconds,3600) / + nvl(in_check_interval_seconds,60); + for i in 1 .. max_intervals + loop + select count(*) into num_jobs + from user_scheduler_running_jobs; + exit when num_jobs = 0; + dbms_lock.sleep(in_check_interval_seconds); + end loop; + if num_jobs > 0 + then + raise_application_error(-20000, 'WAIT_FOR_ALL_TESTS timeout, ' || + num_jobs || ' jobs still running'); + end if; +end wait_for_all_tests; + + +------------------------------------------------------------ +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_wait_for_all_tests + is + procedure launch_job (in_timeout in number) is + plsql_block varchar2(32000); + begin + plsql_block := + 'declare' || CHR(10) || + ' l_msg varchar2(2000);' || CHR(10) || + ' l_stat integer;' || CHR(10) || + 'begin' || CHR(10) || + ' dbms_alert.register' || CHR(10) || + ' (name => ''WT_JOB_WAIT_UT_ALRT' || + in_timeout || '''' || CHR(10) || + ' ,cleanup => TRUE);' || CHR(10) || + ' dbms_alert.waitone' || CHR(10) || + ' (name => ''WT_JOB_WAIT_UT_ALRT' || + in_timeout || '''' || CHR(10) || + ' ,message => l_msg' || CHR(10) || + ' ,status => l_stat' || CHR(10) || + ' ,timeout => ' || in_timeout || ');' || CHR(10) || + ' dbms_alert.remove' || CHR(10) || + ' (name => ''WT_JOB_WAIT_UT_ALRT' || + in_timeout || ''');' || CHR(10) || + 'end;'; + dbms_scheduler.create_job + (job_name => 'WT_JOB_WAIT_UT_' || in_timeout + ,job_type => 'PLSQL_BLOCK' + ,job_action => plsql_block + ,enabled => TRUE); + dbms_lock.sleep(1); -- Must give job a chance to startup + exception when others then + wt_assert.isnotnull ( + msg_in => 't_wait_for_all_tests: "launch_job" Error', + check_this_in => SQLERRM); + end launch_job; + procedure stop_jobs is + begin + for buff in (select name from sys.DBMS_ALERT_INFO) + loop + dbms_alert.signal(name => buff.name + ,message => 'STOP'); + end loop; + dbms_lock.sleep(1); -- Must give job a chance to process signal + dbms_alert.removeall; -- Not sure why this is necessary + for buff in (select job_name from user_scheduler_running_jobs) + loop + dbms_scheduler.stop_job(job_name => buff.job_name + ,force => TRUE + ,commit_semantics => 'STOP_ON_FIRST_ERROR'); + end loop; + exception when others then + wt_assert.isnotnull ( + msg_in => 't_wait_for_all_tests: "launch_job" Error', + check_this_in => SQLERRM); + end stop_jobs; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Wait for All Tests Happy Path'; + launch_job(1); + wt_assert.eqqueryvalue ( + msg_in => 'Number of Test Runs After', + check_query_in => 'select count(*) from user_scheduler_running_jobs', + against_value_in => 1); + wt_assert.raises(msg_in => 'Wait for All Tests Expected Exception' + ,check_call_in => 'begin wt_job.wait_for_all_tests(in_timeout_seconds => 1' || + ', in_check_interval_seconds => 0.5); end;' + ,against_exc_in => cast (NULL as number)); + stop_jobs; + wt_assert.eqqueryvalue ( + msg_in => 'Number of Test Runs After', + check_query_in => 'select count(*) from user_scheduler_running_jobs', + against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Wait for All Tests Timeout'; + launch_job(10); + wt_assert.eqqueryvalue ( + msg_in => 'Number of Test Runs After', + check_query_in => 'select count(*) from user_scheduler_running_jobs', + against_value_in => 1); + wt_assert.raises(msg_in => 'Wait for All Tests Expected Exception' + ,check_call_in => 'begin wt_job.wait_for_all_tests(in_timeout_seconds => 1' || + ', in_check_interval_seconds => 0.5); end;' + ,against_exc_in => -20000); + stop_jobs; + wt_assert.eqqueryvalue ( + msg_in => 'Number of Test Runs After', + check_query_in => 'select count(*) from user_scheduler_running_jobs', + against_value_in => 0); + end t_wait_for_all_tests; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Run a test runner in a different schema +-- Returns before the test runner is complete +procedure test_run + (in_schema_name in varchar2 + ,in_runner_name in varchar2) +is + plsql_block varchar2(32000); +begin + plsql_block := + 'begin' || CHR(10) || + ' wtplsql.test_run@' || in_schema_name || + '(' || in_runner_name || ');' || CHR(10) || + 'end;'; + dbms_scheduler.create_job + (job_name => substr('WT_TEST_RUN$' || in_schema_name || + '$' || in_runner_name + ,1,30) + ,job_type => 'PLSQL_BLOCK' + ,job_action => plsql_block + ,enabled => TRUE); +end test_run; + + +------------------------------------------------------------ +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_run_and_wait_for_job + is + num_rows number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Run and Wait for Job'; + tl_compile_db_object ('PACKAGE', 'WT_RUN_AND_WAIT_TEST',' + procedure wtplsql_run; + end WT_RUN_AND_WAIT_TEST;'); + tl_compile_db_object ('PACKAGE BODY', 'WT_RUN_AND_WAIT_TEST',' + procedure wtplsql_run is + begin + wt_assert.isnotnull ( + msg_in => ''Test1'', + check_this_in => ''Test1''); + end wtplsql_run; + end WT_RUN_AND_WAIT_TEST;'); + select count(*) into num_rows + from wt_test_runs_vw + where test_runner_owner = g_current_user + and test_runner_name = 'WT_RUN_AND_WAIT_TEST'; + wt_assert.isnotnull ( + msg_in => 'Number of Test Runs Before', + check_this_in => num_rows); + wt_assert.raises + (msg_in => 'wt_job.test_run' + ,check_call_in => 'begin wt_job.test_run(''' || g_current_user || + ''', ''WT_RUN_AND_WAIT_TEST''); end;' + ,against_exc_in => ''); + + wt_assert.raises + (msg_in => 'wait_for_all_tests' + ,check_call_in => 'begin wt_job.wait_for_all_tests(2,0.5); end;' + ,against_exc_in => ''); + wt_assert.eqqueryvalue ( + msg_in => 'Number of Test Runs After', + check_query_in => 'select count(*) from wt_test_runs_vw + where test_runner_id = wt_test_runner.get_id(''' || + g_current_user || + ''', ''WT_RUN_AND_WAIT_TEST'')', + against_value_in => num_rows); + tl_drop_db_object('PACKAGE', 'WT_RUN_AND_WAIT_TEST'); + end t_run_and_wait_for_job; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Run all test runners in a different schema +-- Returns before all test runners are complete +-- NOTE: Unit Testing requires full repeat testing of WTP +-- OR or highly modified testing. Skipping Unit Test +procedure test_all ------%WTPLSQL_begin_ignore_lines%------ + (in_schema_name in varchar2) +is + plsql_block varchar2(32000); +begin + if in_schema_name is null + then + raise_application_error(-20000, 'in_schema_name must not be null'); + end if; + plsql_block := + 'begin' || CHR(10) || + ' wtplsql.test_all@' || in_schema_name || ';' || CHR(10) || + 'end;'; + dbms_scheduler.create_job + (job_name => substr('WT_TEST_ALL$' || in_schema_name + ,1,128) + ,job_type => 'PLSQL_BLOCK' + ,job_action => plsql_block); +end test_all; ----------------%WTPLSQL_end_ignore_lines%---------------- + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_test_all + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Test All Testing'; + wt_assert.isnotnull ( + msg_in => 'Not Testing Test All', + check_this_in => 'Requires full repeat testing of WTP or highly modified testing'); + end t_test_all; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Run all test runners in all schema in sequence +-- Returns before all test runners are complete +-- NOTE: Unit Testing requires full repeat testing of WTP +-- OR or highly modified testing. Skipping Unit Test +procedure test_all_sequential ------%WTPLSQL_begin_ignore_lines%------ +is + plsql_block varchar2(32000); +begin + plsql_block := 'begin' || CHR(10); + for buff in ( + select owner + from wt_qual_test_runners_vw + group by owner) + loop + plsql_block := plsql_block || + ' wtplsql.test_all@' || buff.owner || ';' || CHR(10); + end loop; + plsql_block := plsql_block || + 'end;'; + dbms_scheduler.create_job + (job_name => 'WT_TEST_ALL_SEQUENTIAL' + ,job_type => 'PLSQL_BLOCK' + ,job_action => plsql_block); +end test_all_sequential; ----------------%WTPLSQL_end_ignore_lines%---------------- + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_test_all_sequential + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Test All Sequential Testing'; + wt_assert.isnotnull ( + msg_in => 'Not Testing Test All Sequential', + check_this_in => 'Requires full repeat testing of WTP or highly modified testing'); + end t_test_all_sequential; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Run all test runners in all schema in parallel +-- Returns before all test runners are complete +-- NOTE: Unit Testing requires full repeat testing of WTP +-- or highly modified testing. Skipping Unit Test +procedure test_all_parallel ------%WTPLSQL_begin_ignore_lines%------ +is +begin + for buff in ( + select owner + from wt_qual_test_runners_vw + group by owner) + loop + test_all(buff.owner); + end loop; +end test_all_parallel; ----------------%WTPLSQL_end_ignore_lines%---------------- + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_test_all_parallel + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Test All Parallel Testing'; + wt_assert.isnotnull ( + msg_in => 'Not Testing Test All Parallel', + check_this_in => 'Requires full repeat testing of WTP or highly modified testing'); + end t_test_all_parallel; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure WTPLSQL_RUN + is + begin + wtplsql.g_DBOUT := 'WT_JOB:PACKAGE BODY'; + select username into g_current_user from user_users; + -------------------------------------- WTPLSQL Testing -- + t_create_drop_db_link; + t_wait_for_all_tests; + t_run_and_wait_for_job; + t_test_all; + t_test_all_sequential; + t_test_all_parallel; + end WTPLSQL_RUN; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +end wt_job; + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/4E67ABAA-5705-70EF-C5BD-1EB1A0556FEB.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/4E67ABAA-5705-70EF-C5BD-1EB1A0556FEB.xml new file mode 100644 index 0000000..b144607 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/4E67ABAA-5705-70EF-C5BD-1EB1A0556FEB.xml @@ -0,0 +1,375 @@ + + +wtp@DEVPDB_localhost +WTP +WT_PERSIST_REPORT +duane +2024-04-10 19:09:29 UTC +Main + +CREATE OR REPLACE PACKAGE WTP.WT_PERSIST_REPORT authid definer +as + + -- To report a Test Runner result details: + -- begin + -- wt_persist_report.dbms_out('RUNNER_OWNER', 'RUNNER', 30); + -- end; + -- / + +-- "in_detail_level" settings for DBMS_OUT procedure: +-- * Less than 10 (including null) - No Detail +-- * Assertion results summary. +-- * Profiled lines summary. +-- * 10 to 19 - Minimal Detail +-- * Assertion results summary. +-- * Profiled lines summary. +-- * Failed assertion result details. +-- * Profiled source lines that were "not executed". +-- * 20 to 29 - Partial Full Detail +-- * Assertion results summary. +-- * Profiled lines summary. +-- * All assertion result details. +-- * Profiled source lines that were "not executed". +-- * 30 or more - Full Detail +-- * Assertion results summary. +-- * Profiled lines summary. +-- * All assertion result details. +-- * All profiled source lines. + + procedure dbms_out + (in_runner_owner in varchar2 default USER + ,in_runner_name in varchar2 default null + ,in_detail_level in number default 0 + ,in_summary_last in boolean default FALSE); + +end wt_persist_report; + +wtp@DEVPDB_localhost +WTP +WT_PERSIST_REPORT +duane +2024-04-10 19:09:30 UTC +Main + +CREATE OR REPLACE PACKAGE BODY WTP.WT_PERSIST_REPORT +as + + g_test_runs_rec wt_test_runs_vw%ROWTYPE; + g_dbout_runs_rec wt_dbout_runs_vw%ROWTYPE; + + +---------------------- +-- Private Procedures +---------------------- + +------------------------------------------------------------ +procedure p + (in_text in varchar2) +is +begin + dbms_output.put_line(in_text); +end p; + +------------------------------------------------------------ +procedure summary_out +is + asrt_cnt number; + asrt_fail number; + runner_sec number; + tc_cnt number; + tc_fail number; + tc_yield_pct number; + asrt_min_msec number; + asrt_max_msec number; + asrt_tot_msec number; + asrt_avg_msec number; + -- + ignored_lines number; + profiled_lines number; + excluded_lines number; + executed_lines number; + notexec_lines number; + unknown_lines number; + coverage_pct number; + trigger_offset number; + exec_min_usec number; + exec_avg_usec number; + exec_max_usec number; +begin + p(''); + p(' wtPLSQL ' || wtplsql.show_version); + p(' Test Results for ' || g_test_runs_rec.test_runner_owner || + '.' || g_test_runs_rec.test_runner_name ); + p(' Run ID ' || g_test_runs_rec.test_run_id || + ': ' || to_char(g_test_runs_rec.start_dtm + ,wt_core_report.g_date_format)); + p(' --------------------------------------------------------------'); + -- + asrt_cnt := nvl(g_test_runs_rec.asrt_cnt ,0); + asrt_fail := nvl(g_test_runs_rec.asrt_fail ,0); + runner_sec := nvl(g_test_runs_rec.runner_sec ,0); + tc_cnt := nvl(g_test_runs_rec.tc_cnt ,0); + tc_fail := nvl(g_test_runs_rec.tc_fail ,0); + tc_yield_pct := nvl(g_test_runs_rec.tc_yield_pct ,0); + asrt_min_msec := nvl(g_test_runs_rec.asrt_min_msec,0); + asrt_max_msec := nvl(g_test_runs_rec.asrt_max_msec,0); + asrt_tot_msec := nvl(g_test_runs_rec.asrt_tot_msec,0); + asrt_avg_msec := nvl(g_test_runs_rec.asrt_avg_msec,0); + -- + p(' Minimum Elapsed msec: ' || to_char(asrt_min_msec,'9999999') || + ' Total Assertions: ' || to_char(asrt_cnt ,'9999999') ); + p(' Average Elapsed msec: ' || to_char(asrt_avg_msec,'9999999') || + ' Failed Assertions: ' || to_char(asrt_fail ,'9999999') ); + p(' Maximum Elapsed msec: ' || to_char(asrt_max_msec,'9999999') || + ' Total Testcases: ' || to_char(tc_cnt ,'9999999') ); + p(' Total Run Time (sec): ' || to_char(runner_sec ,'99990.9') || + ' Failed Testcases: ' || to_char(tc_fail ,'9999999') ); + p(' ' || ' ' || + ' Testcase Yield: ' || to_char(tc_yield_pct ,'9999999') || '%'); + -- + if g_dbout_runs_rec.dbout_name is not null + AND g_dbout_runs_rec.profiler_runid is null + then + p(''); + p(' Note: ' || g_dbout_runs_rec.dbout_type || ' ' || + g_dbout_runs_rec.dbout_owner || '.' || + g_dbout_runs_rec.dbout_name || ' was not profiled.'); + end if; + -- + if g_test_runs_rec.error_message is not null + then + p(''); + p(' *** Test Runner Error ***'); + p(g_test_runs_rec.error_message); + end if; + ---------------------------------------- + if g_dbout_runs_rec.profiler_runid is null + then + return; + end if; + p(''); + p(' Code Coverage for ' || g_dbout_runs_rec.dbout_type || + ' ' || g_dbout_runs_rec.dbout_owner || + '.' || g_dbout_runs_rec.dbout_name ); + p(' ----------------------------------------------------------------'); + -- + ignored_lines := nvl(g_dbout_runs_rec.ignored_lines, 0); + profiled_lines := nvl(g_dbout_runs_rec.profiled_lines, 0); + excluded_lines := nvl(g_dbout_runs_rec.excluded_lines, 0); + executed_lines := nvl(g_dbout_runs_rec.executed_lines, 0); + notexec_lines := nvl(g_dbout_runs_rec.notexec_lines, 0); + unknown_lines := nvl(g_dbout_runs_rec.unknown_lines, 0); + coverage_pct := nvl(g_dbout_runs_rec.coverage_pct, 0); + trigger_offset := nvl(g_dbout_runs_rec.trigger_offset, 0); + exec_min_usec := nvl(g_dbout_runs_rec.exec_min_usec, 0); + exec_avg_usec := nvl(g_dbout_runs_rec.exec_avg_usec, 0); + exec_max_usec := nvl(g_dbout_runs_rec.exec_max_usec, 0); + -- + p(' Ignored Lines: ' || to_char(ignored_lines, '9999999') || + ' Total Profiled Lines: ' || to_char(profiled_lines, '9999999') ); + p(' Excluded Lines: ' || to_char(excluded_lines, '9999999') || + ' Total Executed Lines: ' || to_char(executed_lines, '9999999') ); + p(' Minimum LineExec usec: ' || to_char(exec_min_usec, '9999999') || + ' Not Executed Lines: ' || to_char(notexec_lines, '9999999') ); + p(' Average LineExec usec: ' || to_char(exec_avg_usec, '9999999') || + ' Unknown Lines: ' || to_char(unknown_lines, '9999999') ); + p(' Maximum LineExec usec: ' || to_char(exec_max_usec, '9999999') || + ' Code Coverage: ' || to_char(coverage_pct, '99990.9') || '%'); + p(' Trigger Source Offset: ' || to_char(trigger_offset, '9999999') || + ' ' || ' ' ); +end summary_out; + +------------------------------------------------------------ +procedure results_out + (in_show_pass in boolean) +is + l_rec core_data.results_rec_type; + l_show_pass_txt varchar2(1); + old_testcase core_data.long_name; + show_header boolean := TRUE; +begin + if in_show_pass + then + l_show_pass_txt := 'Y'; + else + l_show_pass_txt := 'N'; + end if; + for buff in ( + select * from wt_results_vw + where test_run_id = g_test_runs_rec.test_run_id + and ( l_show_pass_txt = 'Y' + or status != 'PASS') + order by result_seq ) + loop + -- Load l_rec + l_rec.assertion := buff.assertion; + l_rec.pass := (buff.status = 'PASS'); + l_rec.details := buff.details; + l_rec.testcase := buff.testcase; + l_rec.message := buff.message; + l_rec.interval_msec := buff.interval_msec; + -- Remove Consecutive Testcases + if l_rec.testcase = old_testcase + then + l_rec.testcase := ''; + else + old_testcase := l_rec.testcase; + end if; + -- Display header if needed + if show_header + then + p(''); + p(' ' || g_test_runs_rec.test_runner_owner || + '.' || g_test_runs_rec.test_runner_name || + ' Test Result Details' ); + p(' Test Run ID: ' || + g_test_runs_rec.test_run_id ); + p(' --------------------------------------------------------------'); + show_header := FALSE; + end if; + -- Display the result + p(wt_core_report.format_test_result(l_rec)); + end loop; +end results_out; + +------------------------------------------------------------ +procedure profile_out + (in_show_aux in boolean) +is + l_header_txt CONSTANT varchar2(2000) := + 'Source TotTime MinTime MaxTime ' || chr(10) || + ' Line Stat Occurs (usec) (usec) (usec) Text' || chr(10) || + '------ ---- ------ --------- ------- --------- ------------'; + l_show_aux_txt varchar2(1); + header_shown boolean; + procedure l_show_header is begin + p(''); + p(' ' || g_dbout_runs_rec.dbout_owner || + '.' || g_dbout_runs_rec.dbout_name || + ' ' || g_dbout_runs_rec.dbout_type || + ' Code Coverage Details' ); + p(' Test Run ID: ' || + g_test_runs_rec.test_run_id ); + p(' ----------------------------------------------------------------'); + end l_show_header; +begin + if g_dbout_runs_rec.profiler_runid is null + then + return; + end if; + if in_show_aux + then + l_show_aux_txt := 'Y'; + else + l_show_aux_txt := 'N'; + end if; + header_shown := FALSE; + for buff in ( + select line + ,status + ,exec_cnt + ,exec_tot_usec + ,exec_min_usec + ,exec_max_usec + ,text + ,rownum + from wt_profiles + where test_run_id = g_dbout_runs_rec.test_run_id + and ( l_show_aux_txt = 'Y' + or status not in ('EXEC','IGNR','UNKN','EXCL')) + order by line ) + loop + if not header_shown + then + l_show_header; + p(l_header_txt); + header_shown := TRUE; + end if; + if mod(buff.rownum,25) = 0 + then + p(l_header_txt); + end if; + p(to_char(buff.line,'99999') || + case buff.status when 'NOTX' then '#NOTX#' + else ' ' || rpad(buff.status,4) || ' ' + end || + to_char(buff.exec_cnt,'99999') || ' ' || + to_char(buff.exec_tot_usec,'99999999') || ' ' || + to_char(buff.exec_min_usec,'999999') || ' ' || + to_char(buff.exec_max_usec,'99999999') || ' ' || + replace(buff.text,CHR(10),'') ); + end loop; +end profile_out; + + +--------------------- +-- Public Procedures +--------------------- + +------------------------------------------------------------ +procedure dbms_out + (in_runner_owner in varchar2 default USER + ,in_runner_name in varchar2 default null + ,in_detail_level in number default 0 + ,in_summary_last in boolean default FALSE) +is + + g_dbout_runs_recNULL wt_dbout_runs_vw%ROWTYPE; + +begin + + for buff in ( + -- MAX(t2.start_dtm) is a fail-safe if IS_LAST_RUN is not set. + select * from wt_test_runs_vw + where ( test_runner_name, start_dtm) in + (select t2.test_runner_name, max(t2.start_dtm) + from wt_test_runs_vw t2 + where ( ( in_runner_name is not null + and in_runner_name = t2.test_runner_name) + OR in_runner_name is null ) + and t2.test_runner_owner = in_runner_owner + group by t2.test_runner_name ) + order by start_dtm, test_runner_name ) + loop + + -- Load Test Run Record + g_test_runs_rec := buff; + + -- Load the DBOUT Record + begin + select * into g_dbout_runs_rec + from wt_dbout_runs_vw + where test_run_id = buff.test_run_id; + exception when NO_DATA_FOUND + then + g_dbout_runs_rec := g_dbout_runs_recNULL; + end; + + -- Setup Display Order + if in_summary_last + then + if in_detail_level >= 10 + then + profile_out(in_detail_level >= 30); + results_out(in_detail_level >= 20); + end if; + summary_out; + else + summary_out; + if in_detail_level >= 10 + then + results_out(in_detail_level >= 20); + profile_out(in_detail_level >= 30); + end if; + end if; + + p(''); + + end loop; + +end dbms_out; + + +end wt_persist_report; + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/584DC665-5066-BA52-661B-86F3D5791A47.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/584DC665-5066-BA52-661B-86F3D5791A47.xml new file mode 100644 index 0000000..896b7f3 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/584DC665-5066-BA52-661B-86F3D5791A47.xml @@ -0,0 +1,1101 @@ + + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUN +duane +2024-04-10 19:09:30 UTC +Main + +CREATE OR REPLACE PACKAGE WTP.WT_TEST_RUN + authid definer +as + + C_LAST_RUN_FLAG constant varchar2(1) := 'Y'; + + function get_last_run_flag + return varchar2 deterministic; + + function set_last_run + (in_test_runner_id in number) + return number; + procedure set_last_run + (in_test_runner_id in number); + + g_keep_num_recs number := 20; + + procedure initialize; + + procedure finalize1; + + function finalize2 + return number; + procedure finalize2; + + function delete_run_id + (in_test_run_id in number) + return number; + + procedure insert_hooks; + + procedure delete_hooks; + + -- WtPLSQL Self Test Procedures + -- + -- alter system set PLSQL_CCFLAGS = + -- 'WTPLSQL_SELFTEST:TRUE' + -- scope=BOTH; + -- + $IF $$WTPLSQL_SELFTEST + $THEN + procedure WTPLSQL_RUN; + $END + +end wt_test_run; + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUN +duane +2024-04-10 19:09:30 UTC +Main + +CREATE OR REPLACE PACKAGE BODY WTP.WT_TEST_RUN +as + + g_test_runs_rec wt_test_runs%ROWTYPE; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + C_OWNER CONSTANT varchar2(50) := 'WT_TEST_RUNNER_OWNER_FOR_TESTING_1234ABCD'; + C_NAME CONSTANT varchar2(50) := 'WT_TEST_RUNNER_NAME_FOR_TESTING_1234ABCD'; +--==============================================================-- + -------------------------------------- WTPLSQL Testing -- + procedure tl_insert_test_runs + (in_test_run_id in NUMBER + ,in_runner_name in varchar2) + is + l_sql_txt varchar2(4000); + begin + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'insert into wt_test_runs' || + ' (id, start_dtm, test_runner_id)' || + ' values (' || in_test_run_id || ', sysdate, ' || + wt_test_runner.dim_id(C_OWNER + ,C_NAME) || ')'; + wt_assert.raises ( + msg_in => 'Insert wt_test_runs (' || in_test_run_id || ')', + check_call_in => l_sql_txt, + against_exc_in => ''); + wt_assert.eqqueryvalue ( + msg_in => 'wt_test_runs (' || in_test_run_id || ') Count', + check_query_in => 'select count(*) from wt_test_runs' || + ' where id = ' || in_test_run_id, + against_value_in => 1); + commit; + end tl_insert_test_runs; +--==============================================================-- + -------------------------------------- WTPLSQL Testing -- + procedure tl_delete_test_runs + (in_test_run_id in NUMBER) + is + l_sql_txt varchar2(4000); + begin + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'delete from wt_test_runs where id = ' || in_test_run_id; + wt_assert.raises ( + msg_in => 'Delete wt_test_runs (' || in_test_run_id || ')', + check_call_in => l_sql_txt, + against_exc_in => ''); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'wt_test_runs rows deleted', + check_this_in => SQL%ROWCOUNT); + wt_assert.eqqueryvalue ( + msg_in => 'wt_test_runs (' || in_test_run_id || ') Count', + check_query_in => 'select count(*) from wt_test_runs' || + ' where id = ' || in_test_run_id, + against_value_in => 0); + commit; + end tl_delete_test_runs; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure set_g_test_runs_rec +is + g_test_runs_recNULL wt_test_runs%ROWTYPE; +begin + g_test_runs_rec := g_test_runs_recNULL; + g_test_runs_rec.id := wt_test_runs_seq.nextval; + g_test_runs_rec.test_runner_id := wt_test_runner.dim_id + (core_data.g_run_rec.test_runner_owner + ,core_data.g_run_rec.test_runner_name); + g_test_runs_rec.start_dtm := core_data.g_run_rec.start_dtm; + g_test_runs_rec.end_dtm := core_data.g_run_rec.end_dtm; + g_test_runs_rec.runner_sec := core_data.g_run_rec.runner_sec; + g_test_runs_rec.error_message := core_data.g_run_rec.error_message; + g_test_runs_rec.tc_cnt := core_data.g_run_rec.tc_cnt; + g_test_runs_rec.tc_fail := core_data.g_run_rec.tc_fail; + if g_test_runs_rec.tc_cnt != 0 + then + g_test_runs_rec.tc_yield_pct := round( 100 * + ( g_test_runs_rec.tc_cnt - + g_test_runs_rec.tc_fail ) / + g_test_runs_rec.tc_cnt , 2); + end if; + g_test_runs_rec.asrt_fst_dtm := core_data.g_run_rec.asrt_fst_dtm; + g_test_runs_rec.asrt_lst_dtm := core_data.g_run_rec.asrt_lst_dtm; + g_test_runs_rec.asrt_cnt := core_data.g_run_rec.asrt_cnt; + g_test_runs_rec.asrt_fail := core_data.g_run_rec.asrt_fail; + g_test_runs_rec.asrt_min_msec := core_data.g_run_rec.asrt_min_msec; + g_test_runs_rec.asrt_max_msec := core_data.g_run_rec.asrt_max_msec; + g_test_runs_rec.asrt_tot_msec := core_data.g_run_rec.asrt_tot_msec; + g_test_runs_rec.dbout_id := wt_dbout.dim_id + (core_data.g_run_rec.dbout_owner + ,core_data.g_run_rec.dbout_name + ,core_data.g_run_rec.dbout_type); + if nvl(g_test_runs_rec.asrt_cnt,0) != 0 + then + g_test_runs_rec.asrt_yield_pct := round(100 * ( g_test_runs_rec.asrt_cnt - + g_test_runs_rec.asrt_fail ) / + g_test_runs_rec.asrt_cnt , 2); + g_test_runs_rec.asrt_avg_msec := round(g_test_runs_rec.asrt_tot_msec / + g_test_runs_rec.asrt_cnt , 2); + end if; +end set_g_test_runs_rec; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_set_g_test_runs_rec + is + l_cdr_recSAVE core_data.run_rec_type; + l_cdr_recTEST core_data.run_rec_type; + l_tr_recSAVE wt_test_runs%ROWTYPE; + l_tr_recTEST wt_test_runs%ROWTYPE; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Set g_test_run_rec Happy Path 1'; + l_cdr_recSAVE := core_data.g_run_rec; + l_tr_recSAVE := g_test_runs_rec; + -------------------------------------- WTPLSQL Testing -- + core_data.g_run_rec.test_runner_owner := C_OWNER; + core_data.g_run_rec.test_runner_name := C_NAME; + core_data.g_run_rec.tc_cnt := 2; + core_data.g_run_rec.tc_fail := 1; + core_data.g_run_rec.dbout_owner := C_OWNER; + core_data.g_run_rec.dbout_name := C_NAME; + core_data.g_run_rec.dbout_type := 'TYPE'; + core_data.g_run_rec.asrt_cnt := 10; + core_data.g_run_rec.asrt_fail := 5; + core_data.g_run_rec.asrt_tot_msec := 100; + -------------------------------------- WTPLSQL Testing -- + set_g_test_runs_rec; + l_cdr_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_cdr_recSAVE; + l_tr_recTEST := g_test_runs_rec; + g_test_runs_rec := l_tr_recSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'l_tr_recTEST.id', + check_this_in => l_tr_recTEST.id); + wt_assert.isnotnull ( + msg_in => 'l_tr_recTEST.test_runner_id', + check_this_in => l_tr_recTEST.test_runner_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'l_tr_recTEST.dbout_id', + check_this_in => l_tr_recTEST.dbout_id); + wt_assert.eq ( + msg_in => 'l_tr_recTEST.tc_cnt', + check_this_in => l_tr_recTEST.tc_cnt, + against_this_in => 2); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_tr_recTEST.tc_fail', + check_this_in => l_tr_recTEST.tc_fail, + against_this_in => 1); + wt_assert.eq ( + msg_in => 'l_tr_recTEST.asrt_cnt', + check_this_in => l_tr_recTEST.asrt_cnt, + against_this_in => 10); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_tr_recTEST.asrt_fail', + check_this_in => l_tr_recTEST.asrt_fail, + against_this_in => 5); + wt_assert.eq ( + msg_in => 'l_tr_recTEST.asrt_tot_msec', + check_this_in => l_tr_recTEST.asrt_tot_msec, + against_this_in => 100); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_tr_recTEST.tc_yield_pct', + check_this_in => l_tr_recTEST.tc_yield_pct, + against_this_in => 50); + wt_assert.eq ( + msg_in => 'l_tr_recTEST.tc_fail', + check_this_in => l_tr_recTEST.tc_fail, + against_this_in => 1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_tr_recTEST.asrt_yield_pct', + check_this_in => l_tr_recTEST.asrt_yield_pct, + against_this_in => 50); + wt_assert.eq ( + msg_in => 'l_tr_recTEST.asrt_avg_msec', + check_this_in => l_tr_recTEST.asrt_avg_msec, + against_this_in => 10); + end t_set_g_test_runs_rec; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Use the CLEAR_LAST_RUN procedure to clear the LAST_RUN_FLAG +-- flag before running this procedure. +function clear_last_run + (in_test_runner_id in number) + return number +as +begin + update wt_test_runs + set is_last_run = NULL + where test_runner_id = in_test_runner_id + and is_last_run = C_LAST_RUN_FLAG; + return SQL%ROWCOUNT; +end clear_last_run; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_clear_last_run + is + l_sql_txt varchar2(4000); + l_sqlerrm varchar2(32000); + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Clear Last Run Happy Path 1'; + tl_insert_test_runs(-1, 'Clear Last Run Testing'); + l_sql_txt := 'update wt_test_runs' || + ' set is_last_run = ''' || C_LAST_RUN_FLAG || + ''' where id = -1'; + wt_assert.raises ( + msg_in => 'Update wt_test_runs (-1)', + check_call_in => l_sql_txt, + against_exc_in => ''); + wt_assert.eqqueryvalue ( + msg_in => 'wt_test_runs (-1) Count', + check_query_in => 'select count(*) from wt_test_runs' || + ' where id = -1' || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'clear_last_run(get_id(C_OWNER,C_NAME))', + check_this_in => clear_last_run(wt_test_runner.get_id(C_OWNER,C_NAME)), + against_this_in => 1); + exception when others then + wt_assert.isnull ( + msg_in => 'clear_last_run(get_id(C_OWNER,C_NAME) Exception)', + check_this_in => SQLERRM); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'clear_last_run(get_id(C_OWNER,C_NAME)) Count', + check_query_in => 'select count(*) from wt_test_runs' || + ' where id = -1' || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 0); + tl_delete_test_runs(-1); + end t_clear_last_run; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + +------------------------------------------------------------ +procedure insert_test_run +is + junk number; +begin + if g_test_runs_rec.id is null + then + return; + end if; + junk := clear_last_run(in_test_runner_id => g_test_runs_rec.test_runner_id); + g_test_runs_rec.is_last_run := C_LAST_RUN_FLAG; + insert into wt_test_runs values g_test_runs_rec; + commit; +end insert_test_run; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_insert_test_run + is + -------------------------------------- WTPLSQL Testing -- + TYPE l_dbmsout_buff_type is table of varchar2(32767); + l_dbmsout_buff l_dbmsout_buff_type; + l_test_runs_rec wt_test_runs%ROWTYPE; + l_dbmsout_line varchar2(32767); + l_dbmsout_stat number; + l_num_recs number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'INSERT_TEST_RUN Happy Path 1'; + wt_assert.eqqueryvalue ( + msg_in => 'Records Before Insert', + check_query_in => 'select count(*) from wt_test_runs' || + ' where id = -2', + against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + l_test_runs_rec := g_test_runs_rec; + g_test_runs_rec.id := -2; + g_test_runs_rec.test_runner_id := wt_test_runner.dim_id(C_OWNER, C_NAME); + g_test_runs_rec.start_dtm := systimestamp; + insert_test_run; + g_test_runs_rec := l_test_runs_rec; + wt_assert.eqqueryvalue ( + msg_in => 'Number of Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where id = -2', + against_value_in => 1); + tl_delete_test_runs(-2); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'INSERT_TEST_RUN Happy Path 2'; + select count(*) into l_num_recs from wt_test_runs; + l_test_runs_rec := g_test_runs_rec; + g_test_runs_rec.id := null; + insert_test_run; + g_test_runs_rec := l_test_runs_rec; + wt_assert.eqqueryvalue ( + msg_in => 'Before and After Record Count', + check_query_in => 'select count(*) from wt_test_runs', + against_value_in => l_num_recs); + end t_insert_test_run; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function delete_runs + (in_test_runner_id in number) + return number +is + num_recs number := 0; +begin + for buff in ( + with q1 as (select start_dtm, id from wt_test_runs + where test_runner_id = in_test_runner_id + order by start_dtm desc, id desc) + ,q2 as (select rownum rnum, start_dtm, id from q1) + select start_dtm, id from q2 + where rnum > g_keep_num_recs) + loop + num_recs := num_recs + wt_profile.delete_run_id(buff.id); + num_recs := num_recs + wt_result.delete_run_id(buff.id); + num_recs := num_recs + delete_run_id(buff.id); + end loop; + return num_recs; +end delete_runs; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_delete_runs + is + l_tr_id number := wt_test_runner.dim_id(C_OWNER, C_NAME); + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'DELETE_RUNS Setup'; + -- DELETE_RECORDS has already run when we arrive here. + -- Cleanup from previous test + delete from wt_test_runs where test_runner_id = l_tr_id; + wt_assert.isnotnull ( + msg_in => 'Clear any previous records (ROWCOUNT)', + check_this_in => SQL%ROWCOUNT); + COMMIT; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'DELETE_RUNS Happy Path 1'; + for i in 1 .. g_keep_num_recs + 1 + loop + insert into wt_test_runs + (id, start_dtm, test_runner_id) + values + (0-i, sysdate-100-i, l_tr_id); + end loop; + commit; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Check Added ' || g_keep_num_recs || ' records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id, + against_value_in => g_keep_num_recs + 1); + begin + wt_assert.eq ( + msg_in => 'Run delete_runs(' || l_tr_id || ')', + check_this_in => delete_runs(l_tr_id), + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_runs(' || l_tr_id || ') Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Check number of records reduced', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id, + against_value_in => g_keep_num_recs); + delete from wt_test_runs + where id between 0-g_keep_num_recs and 0-1; + commit; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'DELETE_RUNS Sad Path 1'; + begin + wt_assert.eq ( + msg_in => 'Run delete_runs(-9995)', + check_this_in => delete_runs(-9995), + against_this_in => 0); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_runs(-9995) Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + end t_delete_runs; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--------------------- +-- Public Procedures +--------------------- + + +------------------------------------------------------------ +-- Setting "g_test_runs_rec" to NULL is trivial. +-- Other initializers already tested. NOT UNIT TESTING! +procedure initialize +is + l_test_runs_recNULL wt_test_runs%ROWTYPE; +begin ------%WTPLSQL_begin_ignore_lines%------ + g_test_runs_rec := l_test_runs_recNULL; + wt_result.initialize; + wt_profile.initialize; -- Clear, Check, and Set Profiler Runid +end initialize; ----------------%WTPLSQL_end_ignore_lines%---------------- + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_initialize + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Initialization Testing'; + wt_assert.isnotnull ( + msg_in => 'Not Testing Initialization', + check_this_in => 'Setting "g_test_runs_rec" to NULL is trivial. Other initializers already tested'); + end t_initialize; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Not Testing Finalization +-- All components already tested +procedure finalize1 +is + junk number; +begin ------%WTPLSQL_begin_ignore_lines%------ + set_g_test_runs_rec; + junk := delete_runs(g_test_runs_rec.test_runner_id); + insert_test_run; -- With COMMIT + wt_result.finalize(g_test_runs_rec.id); -- With COMMIT + wt_profile.finalize(g_test_runs_rec.id); -- With COMMIT +end finalize1; ----------------%WTPLSQL_end_ignore_lines%---------------- + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_finalize1 + is + -- To Unit Test, need to save/set/restore these variables/structures/tables + -- For set_g_test_runs_rec + -- -) core_data.g_run_rec; + -- -) g_test_runs_rec + -- For delete_runs: wt_test_runs Table + -- For insert_test_run: g_test_runs_rec + -- For wt_result.finalize + -- -) core_data.results_rec_type + -- -) core_data.g_results_nt + -- -) wt_results Table + -- -) wt_testcase_runs Table + -- -) wt_test_runs Table + -- For wt_profile.finalize + -- -) core_data.g_run_rec + -- -) wt_profile.g_rec + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Finalization1 Testing'; + wt_assert.isnotnull ( + msg_in => 'Not Testing Finalization1', + check_this_in => 'All components already tested'); + end t_finalize1; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function finalize2 + return number +is + ret_num number; +begin + -- Update any additional errors + -- This will cause a chained row in WT_TEST_RUNS + update wt_test_runs + set error_message = g_test_runs_rec.error_message + where id = g_test_runs_rec.id + and ( ( error_message is null + and g_test_runs_rec.error_message is not null ) + or (error_message != g_test_runs_rec.error_message) ); + ret_num := SQL%ROWCOUNT; + commit; + return ret_num; +end finalize2; + +procedure finalize2 +is + -- Procedure Overload for finalize2 + junk number; +begin + junk := finalize2; +end finalize2; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_finalize2 + is + runner_id wt_test_runners.id%TYPE := -99; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Finalization2 Testing'; + wt_assert.isnull ( + msg_in => 'Confirm g_test_runs_rec.error_message NULL', + check_this_in => g_test_runs_rec.error_message); + wt_assert.isnull ( + msg_in => 'Confirm g_test_runs_rec.id is NULL', + check_this_in => g_test_runs_rec.id); + g_test_runs_rec.id := -99; + -------------------------------------- WTPLSQL Testing -- + begin + insert into wt_test_runners (ID, OWNER, NAME) + values (runner_id, 'Finalization2 Testing', 'Finalization2 Testing'); + wt_assert.eq ( + msg_in => 'Setup WT_TEST_RUNNERS Record for finalize2 Test', + check_this_in => SQL%ROWCOUNT, + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Setup WT_TEST_RUNNERS Record for finalize2 Test Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + begin + insert into wt_test_runs (ID, TEST_RUNNER_ID, START_DTM) + values (g_test_runs_rec.id, runner_id, sysdate); + wt_assert.eq ( + msg_in => 'Setup WT_TEST_RUNS Record for finalize2 Test', + check_this_in => SQL%ROWCOUNT, + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Setup WT_TEST_RUNS Record for finalize2 Test Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + g_test_runs_rec.error_message := 'This is Test Message 1 for Finalization2 Testing'; + begin + wt_assert.eq ( + msg_in => 'Run finalize2', + check_this_in => finalize2, + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Run finalize2 Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Confirm wt_test_runs.error_message updated', + check_query_in => 'select error_message from wt_test_runs' || + ' where id = ' || g_test_runs_rec.id, + against_value_in => g_test_runs_rec.error_message); + -------------------------------------- WTPLSQL Testing -- + g_test_runs_rec.error_message := 'This is Test Message 2 for Finalization2 Testing'; + wt_assert.raises ( + msg_in => 'Run wt_test_runs.error_message to clear message', + check_call_in => 'begin wt_test_run.finalize2; end;', + against_exc_in => cast (NULL as number)); + wt_assert.eqqueryvalue ( + msg_in => 'Confirm wt_test_runs.error_message cleared', + check_query_in => 'select error_message from wt_test_runs' || + ' where id = ' || g_test_runs_rec.id, + against_value_in => g_test_runs_rec.error_message); + -------------------------------------- WTPLSQL Testing -- + begin + delete from wt_test_runs where ID = g_test_runs_rec.id; + wt_assert.eq ( + msg_in => 'Delete WT_TEST_RUNS Record for finalize2 Test', + check_this_in => SQL%ROWCOUNT, + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Delete WT_TEST_RUNS Record for finalize2 Test Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + begin + delete from wt_test_runners where ID = runner_id; + wt_assert.eq ( + msg_in => 'Delete WT_TEST_RUNNERS Record for finalize2 Test', + check_this_in => SQL%ROWCOUNT, + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Delete WT_TEST_RUNNERS Record for finalize2 Test Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + commit; + g_test_runs_rec.id := NULL; + end t_finalize2; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function get_last_run_flag + return varchar2 +is +begin + return C_LAST_RUN_FLAG; +end get_last_run_flag; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_get_last_run_flag + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Get Last Run Flag Testing'; + wt_assert.eq ( + msg_in => 'Test 01', + check_this_in => get_last_run_flag, + against_this_in => C_LAST_RUN_FLAG); + end t_get_last_run_flag; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Use the SET_LAST_RUN procedure to set the LAST_RUN flag +-- after running this procedure. +function set_last_run + (in_test_runner_id in number) + return number +as + num_rows number; + num_clear number; +begin + if in_test_runner_id is null + then + return 0; + end if; + select count(is_last_run) + into num_rows + from wt_test_runs + where test_runner_id = in_test_runner_id + and is_last_run = C_LAST_RUN_FLAG; + if num_rows = 1 + then + -- Abort if a LAST_RUN_FLAG is already set + return -1; + end if; + if num_rows > 1 + then + -- Clear out previous Flags + num_clear := clear_last_run(in_test_runner_id); + end if; + --Update the latest as the LAST_RUN + update wt_test_runs + set is_last_run = C_LAST_RUN_FLAG + where test_runner_id = in_test_runner_id + and start_dtm = ( + select max(tr.start_dtm) + from wt_test_runs tr + where tr.test_runner_id = in_test_runner_id); + return SQL%ROWCOUNT; +end set_last_run; + +------------------------------------------------------------ +-- Procedure Overload +procedure set_last_run + (in_test_runner_id in number) +as + junk number; +begin + junk := set_last_run(in_test_runner_id); +end set_last_run; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_set_last_run + is + l_tr_id number := wt_test_runner.dim_id(C_OWNER, C_NAME); + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'SET_LAST_RUN Setup'; + delete from wt_test_runs where test_runner_id = l_tr_id; + wt_assert.isnotnull ( + msg_in => 'Clear any previous records (ROWCOUNT)', + check_this_in => SQL%ROWCOUNT); + insert into wt_test_runs (id, test_runner_id, is_last_run, start_dtm) + values (-11, l_tr_id, C_LAST_RUN_FLAG, sysdate); + insert into wt_test_runs (id, test_runner_id, is_last_run, start_dtm) + values (-12, l_tr_id, C_LAST_RUN_FLAG, sysdate-1); + COMMIT; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Number of Test Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id, + against_value_in => 2); + wt_assert.eqqueryvalue ( + msg_in => 'Number of Last Run Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 2); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Sad Path: Too Many C_LAST_RUN_FLAG Set'; + begin + wt_assert.eq ( + msg_in => 'Too many C_LAST_RUN_FLAG is set for ' || l_tr_id || ')', + check_this_in => set_last_run(l_tr_id), + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Run set_last_run(' || l_tr_id || ') Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + wt_assert.eqqueryvalue ( + msg_in => 'Number of Last Run Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'Run set_last_run(' || l_tr_id || ')', + check_this_in => set_last_run(l_tr_id), + against_this_in => -1); + exception when others then + wt_assert.isnull( + msg_in => 'Run set_last_run(' || l_tr_id || ') Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Number of Last Run Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 1); + wt_assert.eqqueryvalue ( + msg_in => 'Test Run ID of Last Run', + check_query_in => 'select id from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => -11); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'SET_LAST_RUN Happy Path 1'; + delete from wt_test_runs where id = -11; + COMMIT; + wt_assert.eqqueryvalue ( + msg_in => 'Number of Test Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id, + against_value_in => 1); + wt_assert.eqqueryvalue ( + msg_in => 'Number of Last Run Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.raises ( + msg_in => 'Run set_last_run(' || l_tr_id || ')', + check_call_in => 'begin wt_test_run.set_last_run(' || l_tr_id || '); end;', + against_exc_in => cast(NULL as number)); + wt_assert.eqqueryvalue ( + msg_in => 'Number of Last Run Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 1); + wt_assert.eqqueryvalue ( + msg_in => 'Test Run ID of Last Run', + check_query_in => 'select id from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => -12); + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'C_LAST_RUN_FLAG is already set for ' || l_tr_id || ')', + check_this_in => set_last_run(l_tr_id), + against_this_in => -1); + exception when others then + wt_assert.isnull( + msg_in => 'Run set_last_run(' || l_tr_id || ') Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'SET_LAST_RUN Happy Path 2'; + delete from wt_test_runs where id = -12; + COMMIT; + wt_assert.eqqueryvalue ( + msg_in => 'Number of Test Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id, + against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'Run set_last_run(' || l_tr_id || ')', + check_this_in => set_last_run(l_tr_id), + against_this_in => 0); + exception when others then + wt_assert.isnull( + msg_in => 'Run set_last_run(' || l_tr_id || ') Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Number of Last Run Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'Run set_last_run(NULL)', + check_this_in => set_last_run(NULL), + against_this_in => 0); + exception when others then + wt_assert.isnull( + msg_in => 'Run set_last_run(NULL) Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'Run set_last_run(-99)', + check_this_in => set_last_run(-99), + against_this_in => 0); + exception when others then + wt_assert.isnull( + msg_in => 'Run set_last_run(-99) Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + end t_set_last_run; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function delete_run_id + (in_test_run_id in number) + return number +is + l_test_runner_id number; + ret_num number; +begin + begin + select test_runner_id + into l_test_runner_id + from wt_test_runs + where id = in_test_run_id; + exception when NO_DATA_FOUND then + return 0; + end; + delete from wt_test_runs where id = in_test_run_id; + ret_num := SQL%ROWCOUNT; + set_last_run(l_test_runner_id); + return ret_num; +end delete_run_id; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_delete_run_id + is + l_tr_id number := wt_test_runner.dim_id(C_OWNER, C_NAME); + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'DELETE_RUN_ID Setup'; + delete from wt_test_runs where test_runner_id = l_tr_id; + wt_assert.isnotnull ( + msg_in => 'Clear any previous records (ROWCOUNT)', + check_this_in => SQL%ROWCOUNT); + COMMIT; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'DELETE_RUN_ID Happy Path 1'; + insert into wt_test_runs (id, test_runner_id, is_last_run, start_dtm) + values (-9, l_tr_id, '', sysdate-3); + insert into wt_test_runs (id, test_runner_id, is_last_run, start_dtm) + values (-10, l_tr_id, '', sysdate-2); + insert into wt_test_runs (id, test_runner_id, is_last_run, start_dtm) + values (-11, l_tr_id, C_LAST_RUN_FLAG, sysdate-1); + COMMIT; + wt_assert.eqqueryvalue ( + msg_in => 'Number of Records After Insert', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id, + against_value_in => 3); + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'Run delete_run_id(-11)', + check_this_in => delete_run_id(-11), + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_run_id(-11) Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Number of Records After Delete', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id, + against_value_in => 2); + wt_assert.eqqueryvalue ( + msg_in => 'Number of Last Run Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'Run delete_run_id(-10)', + check_this_in => delete_run_id(-10), + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_run_id(-10) Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Number of Records After 2nd Delete', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id, + against_value_in => 1); + wt_assert.eqqueryvalue ( + msg_in => 'Number of Last Run Records, 2nd Delete', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'Run delete_run_id(-9)', + check_this_in => delete_run_id(-9), + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_run_id(-9) Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Number of Records After 3rd Delete', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id, + against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'DELETE_RUN_ID Sad Path 1'; + -- Should run without error + wt_assert.raises( + msg_in => 'Delete Run ID(-9995)', + check_call_in => 'declare junk number; begin junk := wt_test_run.delete_run_id(-9995); end;', + against_exc_in => ''); + end t_delete_run_id; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Hooks are active during Unit Testing +-- Unable to Unit Test this +procedure insert_hooks +is +begin ------%WTPLSQL_begin_ignore_lines%------ + delete_hooks; + insert into hooks (hook_name, seq, run_string) + values ('before_test_run', 30, 'begin wt_test_run.initialize; end;'); + insert into hooks (hook_name, seq, run_string) + values ('after_test_run', 30, 'begin wt_test_run.finalize1; end;'); + insert into hooks (hook_name, seq, run_string) + values ('after_test_run', 70, 'begin wt_test_run.finalize2; end;'); + commit; + hook.init; +end insert_hooks; ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Hooks are active during Unit Testing +-- Unable to Unit Test this +procedure delete_hooks +is +begin ------%WTPLSQL_begin_ignore_lines%------ + delete from hooks where run_string like '% wt_test_run.%'; + dbms_output.put_line(SQL%ROWCOUNT || ' "wt_test_run" rows deleted from HOOKS table.'); + hook.init; + commit; +end delete_hooks; ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure WTPLSQL_RUN + is + begin + -------------------------------------- WTPLSQL Testing -- + wtplsql.g_DBOUT := 'WT_TEST_RUN:PACKAGE BODY'; + t_set_g_test_runs_rec; + t_clear_last_run; + t_insert_test_run; + t_delete_runs; + t_initialize; + t_finalize1; + t_finalize2; + t_get_last_run_flag; + t_set_last_run; + t_delete_run_id; + end; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +end wt_test_run; + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/678B0BFB-EF32-C534-B075-F0B5F2416CA1.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/678B0BFB-EF32-C534-B075-F0B5F2416CA1.xml new file mode 100644 index 0000000..286b4f6 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/678B0BFB-EF32-C534-B075-F0B5F2416CA1.xml @@ -0,0 +1,336 @@ + + +wtp@DEVPDB_localhost +WTP +WT_CORE_REPORT +duane +2024-04-10 19:09:29 UTC +Main + +CREATE OR REPLACE PACKAGE WTP.WT_CORE_REPORT + authid definer +as + + -- To report the latest Test Runner results: + -- begin + -- wt_core_report.dbms_out(30, TRUE); + -- end; + -- / + + -- Turn this off to allow output across multiple lines of text + g_single_line_output boolean := TRUE; + + -- DATE data type format for Report Header + g_date_format varchar2(100) := 'DD-Mon-YYYY HH:MI:SS PM'; + + -- True While Processing a TEST_ALL + g_in_process boolean := FALSE; + TYPE vc_aa_type is table of varchar2(4000) index by pls_integer; + vc_aa vc_aa_type; + + procedure dbms_out + (in_detail_level in number default 0 + ,in_summary_last in boolean default FALSE); + -- "in_detail_level" settings for DBMS_OUT procedure: + -- * Less than 10 (including null) - No Detail + -- * Assertion results summary. + -- * 10 to 19 - Minimal Detail + -- * Assertion results summary. + -- * Failed assertion result details. + -- * 20 or more - Full Detail + -- * Assertion results summary. + -- * All assertion result details. + + procedure before_test_all; + procedure after_test_all; + + function format_test_result + (in_rec in core_data.results_rec_type) + return varchar2; + + procedure insert_hooks; + + procedure delete_hooks; + +end wt_core_report; + +wtp@DEVPDB_localhost +WTP +WT_CORE_REPORT +duane +2024-04-10 19:09:29 UTC +Main + +CREATE OR REPLACE PACKAGE BODY WTP.WT_CORE_REPORT +as + + +---------------------- +-- Private Procedures +---------------------- + + +------------------------------------------------------------ +procedure p + (in_text in varchar2) +is +begin + if g_in_process + then + vc_aa(vc_aa.COUNT + 1) := in_text; + else + dbms_output.put_line(in_text); + end if; +end p; + +------------------------------------------------------------ +procedure summary_out +is + asrt_cnt number; + asrt_fail number; + run_sec number; + tc_cnt number; + tc_fail number; + tc_yield number; + min_msec number; + max_msec number; + tot_msec number; + avg_msec number; +begin + p(''); + -- + p(' wtPLSQL ' || wtplsql.show_version); + p(' Start Date/Time: ' || + to_char(core_data.g_run_rec.start_dtm, g_date_format)); + p(' Test Results for ' || core_data.g_run_rec.test_runner_owner || + '.' || core_data.g_run_rec.test_runner_name ); + ---------------------------------------- + if core_data.g_run_rec.dbout_name is not null + then + p(' Database Object Under Test is ' || core_data.g_run_rec.dbout_type || + ' ' || core_data.g_run_rec.dbout_owner || + '.' || core_data.g_run_rec.dbout_name ); + end if; + p(' ------------------------------------------------------------------'); + -- + asrt_cnt := nvl(core_data.g_run_rec.asrt_cnt ,0); + asrt_fail := nvl(core_data.g_run_rec.asrt_fail ,0); + run_sec := nvl(core_data.g_run_rec.runner_sec ,0); + tc_cnt := nvl(core_data.g_run_rec.tc_cnt ,0); + tc_fail := nvl(core_data.g_run_rec.tc_fail ,0); + min_msec := nvl(core_data.g_run_rec.asrt_min_msec,0); + max_msec := nvl(core_data.g_run_rec.asrt_max_msec,0); + tot_msec := nvl(core_data.g_run_rec.asrt_tot_msec,0); + case nvl(asrt_cnt,0) + when 0 then avg_msec := 0; + else avg_msec := nvl(tot_msec/asrt_cnt,0); + end case; + case nvl(tc_cnt,0) + when 0 then tc_yield := 0; + else tc_yield := nvl(100*(1-(tc_fail/tc_cnt)),0); + end case; + -- + p(' Minimum Elapsed msec: ' || to_char(min_msec ,'999999999') || + ' Total Assertions: ' || to_char(asrt_cnt ,'999999999') ); + p(' Average Elapsed msec: ' || to_char(avg_msec ,'999999999') || + ' Failed Assertions: ' || to_char(asrt_fail,'999999999') ); + p(' Maximum Elapsed msec: ' || to_char(max_msec ,'999999999') || + ' Total Testcases: ' || to_char(tc_cnt ,'999999999') ); + p(' Total Run Time (sec): ' || to_char(run_sec ,'9999990.9') || + ' Failed Testcases: ' || to_char(tc_fail ,'999999999') ); + p(' ' || ' ' || + ' Testcase Yield: ' || to_char(tc_yield ,'999999999') || '%'); + -- + if core_data.g_run_rec.error_message is not null + then + p(''); + p(' *** Test Runner Error ***'); + p(core_data.g_run_rec.error_message); + end if; + -- +end summary_out; + +------------------------------------------------------------ +procedure results_out + (in_show_pass in boolean) +is + l_rec core_data.results_rec_type; + old_testcase core_data.long_name; + show_header boolean := TRUE; +begin + -- Check Test Results Array + if NOT core_data.g_results_nt.EXISTS(1) + then + p(' * NOTE: No Data in Test Results Array "core_data.g_results_nt"'); + return; + end if; + -- Loop through all results + for i in 1 .. core_data.g_results_nt.COUNT + loop + -- Determine if this should be displayed + if core_data.g_results_nt.EXISTS(i) + AND ( in_show_pass + OR NOT core_data.g_results_nt(i).pass) + then + l_rec := core_data.g_results_nt(i); + -- Remove Consecutive Testcases + if l_rec.testcase = old_testcase + then + l_rec.testcase := ''; + else + old_testcase := l_rec.testcase; + end if; + -- Display header if needed + if show_header + then + p(''); + p(' ' || core_data.g_run_rec.test_runner_owner || + '.' || core_data.g_run_rec.test_runner_name || + ' Test Runner Details' ); + p(' --------------------------------------------------------------'); + show_header := FALSE; + end if; + -- Display the result + p(format_test_result(l_rec)); + end if; + end loop; + -- +end results_out; + + +--------------------- +-- Public Procedures +--------------------- + + +------------------------------------------------------------ +procedure dbms_out + (in_detail_level in number default 0 + ,in_summary_last in boolean default FALSE) +is +begin + -- Setup Display Order + if in_summary_last + then + if in_detail_level >= 10 + then + results_out(in_detail_level >= 20); + end if; + summary_out; + else + summary_out; + if in_detail_level >= 10 + then + results_out(in_detail_level >= 20); + end if; + end if; + p(''); +end dbms_out; + + +------------------------------------------------------------ +procedure before_test_all +is +begin + vc_aa.DELETE; + g_in_process := TRUE; +end before_test_all; + + +------------------------------------------------------------ +procedure after_test_all +is +begin + for i in 1 .. vc_aa.COUNT + loop + dbms_output.put_line(vc_aa(i)); + end loop; + g_in_process := FALSE; +end after_test_all; + + +------------------------------------------------------------ +function format_test_result + (in_rec in core_data.results_rec_type) + return varchar2 +is + l_out_str varchar2(32000) := ''; +begin + if in_rec.testcase is not null + then + l_out_str := rpad('---*** ' || in_rec.testcase || + ' ***---' + ,80,'-') || CHR(10); + end if; + if in_rec.pass + then + l_out_str := l_out_str || ' PASS '; + else + l_out_str := l_out_str || '#FAIL#'; + end if; + if in_rec.interval_msec is not null + then + l_out_str := l_out_str || lpad(in_rec.interval_msec,4) || 'ms '; + end if; + if in_rec.message is not null + then + l_out_str := l_out_str || in_rec.message || '. '; + end if; + l_out_str := l_out_str || in_rec.assertion || ' - '; + if g_single_line_output + then + l_out_str := l_out_str || replace(replace(in_rec.details + ,CHR(13),'\r') + ,CHR(10),'\n'); + else + l_out_str := l_out_str || in_rec.details; + end if; + return l_out_str; +end format_test_result; + + +------------------------------------------------------------ +procedure insert_hooks +is +begin + delete_hooks; + insert into hooks (hook_name, seq, run_string) + values ('before_test_all', 20, 'begin wt_core_report.before_test_all; end;'); + insert into hooks (hook_name, seq, run_string) + values ('after_test_run', 20, 'begin wt_core_report.dbms_out(in_detail_level => 10); end;'); + insert into hooks (hook_name, seq, run_string) + values ('after_test_all', 20, 'begin wt_core_report.after_test_all; end;'); + commit; + hook.init; +end insert_hooks; + + +------------------------------------------------------------ +procedure delete_hooks +is +begin + delete from hooks where run_string like '% wt_core_report.%'; + dbms_output.put_line(SQL%ROWCOUNT || ' "wt_core_report" rows deleted from HOOKS table.'); + hook.init; + commit; +end delete_hooks; + + +end wt_core_report; + + + +wtp@DEVPDB_localhost +PUBLIC +WT_CORE_REPORT +duane +2024-04-10 19:09:28 UTC +Main +WT_CORE_REPORT +0B8CEE14-5EF4-002A-AC5B-E55C89A47256 +YES +PUBLIC +678B0BFB-EF32-C534-B075-F0B5F2416CA1 + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/6BF93178-7AA9-E959-B170-BBAC0E3D6E98.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/6BF93178-7AA9-E959-B170-BBAC0E3D6E98.xml new file mode 100644 index 0000000..8915828 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/6BF93178-7AA9-E959-B170-BBAC0E3D6E98.xml @@ -0,0 +1,377 @@ + + +wtp@DEVPDB_localhost +WTP +WT_RESULT +duane +2024-04-10 19:09:30 UTC +Main + +CREATE OR REPLACE PACKAGE WTP.WT_RESULT + authid definer +as + + procedure initialize; + + procedure finalize + (in_test_run_id in number); + + function delete_run_id + (in_test_run_id in number) + return number; + + -- WtPLSQL Self Test Procedures + -- + -- alter system set PLSQL_CCFLAGS = + -- 'WTPLSQL_SELFTEST:TRUE' + -- scope=BOTH; + -- + $IF $$WTPLSQL_SELFTEST + $THEN + procedure WTPLSQL_RUN; + $END + +end wt_result; + +wtp@DEVPDB_localhost +WTP +WT_RESULT +duane +2024-04-10 19:09:30 UTC +Main + +CREATE OR REPLACE PACKAGE BODY WTP.WT_RESULT +as + +---------------------- +-- Private Procedures +---------------------- + + +--------------------- +-- Public Procedures +--------------------- + +------------------------------------------------------------ +procedure initialize +is +begin + return; +end initialize; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_initialize + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Initialize Happy Path'; + wt_assert.raises ( + msg_in => 'Empty Execution, nothing to do', + check_call_in => 'begin wt_result.initialize; end;', + against_exc_in => ''); + end t_initialize; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Because this procedure is called to cleanup after errors, +-- it must be able to run multiple times without causing damage. +procedure finalize + (in_test_run_id in number) +is + l_results_rec wt_results%ROWTYPE; + l_results_recNULL wt_results%ROWTYPE; + l_testcase_runs_recNULL wt_testcase_runs%ROWTYPE; + l_testcase_runs_rec wt_testcase_runs%ROWTYPE; + testcase core_data.long_name; +begin + if in_test_run_id IS NULL + then + return; + end if; + for i in 1 .. core_data.g_results_nt.COUNT + loop + l_results_rec := l_results_recNULL; + l_results_rec.TEST_RUN_ID := in_test_run_id; + l_results_rec.RESULT_SEQ := i; + l_results_rec.TESTCASE_ID := wt_testcase.dim_id + (core_data.g_results_nt(i).TESTCASE); + l_results_rec.EXECUTED_DTM := core_data.g_results_nt(i).EXECUTED_DTM; + l_results_rec.INTERVAL_MSEC := core_data.g_results_nt(i).INTERVAL_MSEC; + l_results_rec.ASSERTION := core_data.g_results_nt(i).ASSERTION; + if core_data.g_results_nt(i).PASS + then + l_results_rec.STATUS := 'PASS'; + else + l_results_rec.STATUS := 'FAIL'; + end if; + l_results_rec.MESSAGE := core_data.g_results_nt(i).MESSAGE; + l_results_rec.DETAILS := core_data.g_results_nt(i).DETAILS; + insert into wt_results values l_results_rec; + end loop; + commit; + -- Testcases + if core_data.g_tcases_aa.COUNT > 0 + then + testcase := core_data.g_tcases_aa.FIRST; + loop + l_testcase_runs_rec := l_testcase_runs_recNULL; + l_testcase_runs_rec.test_run_id := in_test_run_id; + l_testcase_runs_rec.testcase_id := wt_testcase.dim_id(testcase); + l_testcase_runs_rec.asrt_cnt := core_data.g_tcases_aa(testcase).asrt_cnt; + l_testcase_runs_rec.asrt_fail := core_data.g_tcases_aa(testcase).asrt_fail; + l_testcase_runs_rec.asrt_min_msec := core_data.g_tcases_aa(testcase).asrt_min_msec; + l_testcase_runs_rec.asrt_max_msec := core_data.g_tcases_aa(testcase).asrt_max_msec; + l_testcase_runs_rec.asrt_tot_msec := core_data.g_tcases_aa(testcase).asrt_tot_msec; + -- + l_testcase_runs_rec.asrt_pass := l_testcase_runs_rec.asrt_cnt - + l_testcase_runs_rec.asrt_fail; + if l_testcase_runs_rec.asrt_cnt > 0 then + l_testcase_runs_rec.asrt_yield_pct := l_testcase_runs_rec.asrt_pass / + l_testcase_runs_rec.asrt_cnt; + l_testcase_runs_rec.asrt_avg_msec := l_testcase_runs_rec.asrt_tot_msec / + l_testcase_runs_rec.asrt_cnt; + end if; + -- + insert into wt_testcase_runs values l_testcase_runs_rec; + exit when testcase = core_data.g_tcases_aa.LAST; + testcase := core_data.g_tcases_aa.NEXT(testcase); + end loop; + commit; + end if; +end finalize; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_finalize + is + -------------------------------------- WTPLSQL Testing -- + type num_recs_aa_type is table of number index by varchar2(50); + num_recs_aa num_recs_aa_type; + del_res_aa num_recs_aa_type; + del_tc_aa num_recs_aa_type; + l_results_ntSAVE core_data.results_nt_type; + l_results_ntTEST core_data.results_nt_type; + l_results_rec1 core_data.results_rec_type; + l_results_rec2 core_data.results_rec_type; + l_test_runs_rec wt_test_runs%ROWTYPE; + -------------------------------------- WTPLSQL Testing -- + procedure run_test (in_test_run_id in number + ,in_test_name in varchar2) is + begin + finalize(in_test_run_id); + select count(*) + into num_recs_aa(in_test_name) + from wt_results + where test_run_id = in_test_run_id; + -------------------------------------- WTPLSQL Testing -- + delete from wt_results where test_run_id = in_test_run_id; + del_res_aa(in_test_name) := SQL%ROWCOUNT; + delete from wt_testcase_runs where test_run_id = in_test_run_id; + del_tc_aa(in_test_name) := SQL%ROWCOUNT; + end run_test; + begin + wt_assert.g_testcase := 'Finalize Happy Path'; + -------------------------------------- WTPLSQL Testing -- + l_results_rec1.testcase := 'TESTCASE TEST'; + l_results_rec1.executed_dtm := systimestamp; + l_results_rec1.interval_msec := 99; + l_results_rec1.assertion := 'FINALTEST'; + l_results_rec1.pass := TRUE; + l_results_rec1.details := 'This is a Passing WT_RESULT.FINALIZE Test'; + -------------------------------------- WTPLSQL Testing -- + l_results_rec2.testcase := 'TESTCASE TEST'; + l_results_rec2.executed_dtm := systimestamp; + l_results_rec2.interval_msec := 99; + l_results_rec2.assertion := 'FINALTEST'; + l_results_rec2.pass := FALSE; + l_results_rec2.details := 'This is a Failing WT_RESULT.FINALIZE Test'; + -------------------------------------- WTPLSQL Testing -- + delete from wt_results where test_run_id = -99; + wt_assert.isnotnull ( + msg_in => 'Clear Previous Test Results', + check_this_in => SQL%ROWCOUNT); + delete from wt_testcase_runs where test_run_id = -99; + wt_assert.isnotnull ( + msg_in => 'Clear Previous Testcase Runs', + check_this_in => SQL%ROWCOUNT); + delete from wt_test_runs where id = -99; + wt_assert.isnotnull ( + msg_in => 'Clear Previous Test Runs', + check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + -- Setup the FK Record + l_test_runs_rec.id := -99; + l_test_runs_rec.start_dtm := sysdate; + l_test_runs_rec.test_runner_id := wt_test_runner.dim_id('WT_RESULT_TEST','WT_RESULT_TEST'); + insert into wt_test_runs values l_test_runs_rec; + wt_assert.eq ( + msg_in => 'Create Test Results Run', + check_this_in => SQL%ROWCOUNT, + against_this_in => 1); + -------------------------------------- WTPLSQL Testing -- + -- Capture Original Values + l_results_ntSAVE := core_data.g_results_nt; + select count(*) + into num_recs_aa('Initial Record Count') + from wt_results + where test_run_id = -99; + -------------------------------------- WTPLSQL Testing -- + -- No Assertion Testing in Here + core_data.g_results_nt := core_data.results_nt_type(l_results_rec1, l_results_rec2); + run_test(-99, 'Record Count Test'); + core_data.g_results_nt := core_data.results_nt_type(NULL); + run_test(-99, 'NULL Record Count'); + core_data.g_results_nt := core_data.results_nt_type(l_results_rec1); + run_test(NULL, 'NULL Test Run ID Test'); + -------------------------------------- WTPLSQL Testing -- + -- Restore values so we can test + core_data.g_results_nt := l_results_ntSAVE; + wt_assert.eq ( + msg_in => 'Initial Record Count', + check_this_in => num_recs_aa('Initial Record Count'), + against_this_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'Record Count Test', + check_this_in => num_recs_aa('Record Count Test'), + against_this_in => 2); + wt_assert.eq ( + msg_in => 'Delete Record Count Test Results', + check_this_in => del_res_aa('Record Count Test'), + against_this_in => 2); + wt_assert.isnotnull ( + msg_in => 'Delete Record Count Test Testcase Runs', + check_this_in => del_tc_aa('Record Count Test')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'NULL Record Count', + check_this_in => num_recs_aa('NULL Record Count'), + against_this_in => 1); + wt_assert.eq ( + msg_in => 'Delete NULL Record Count Results', + check_this_in => del_res_aa('NULL Record Count'), + against_this_in => 1); + wt_assert.isnotnull ( + msg_in => 'Delete NULL Record Count Testcase Runs', + check_this_in => del_tc_aa('NULL Record Count')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'NULL Test Run ID Test', + check_this_in => num_recs_aa('NULL Test Run ID Test'), + against_this_in => 0); + wt_assert.eq ( + msg_in => 'Delete NULL Record Count Results', + check_this_in => del_res_aa('NULL Test Run ID Test'), + against_this_in => 0); + wt_assert.isnotnull ( + msg_in => 'Delete NULL Record Count Testcase Runs', + check_this_in => del_tc_aa('NULL Test Run ID Test')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.raises ( + msg_in => 'Clear Test Results Run', + check_call_in => 'delete from wt_test_runs where id = -99', + against_exc_in => ''); + commit; + end t_finalize; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function delete_run_id + (in_test_run_id in number) + return number +is + ret_num number; +begin + delete from wt_testcase_runs where test_run_id = in_test_run_id; + ret_num := SQL%ROWCOUNT; + delete from wt_results where test_run_id = in_test_run_id; + ret_num := ret_num + SQL%ROWCOUNT; + return ret_num; +end delete_run_id; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_delete_run_id + is + -------------------------------------- WTPLSQL Testing -- + l_test_runs_rec wt_test_runs%ROWTYPE; + l_results_rec wt_results%ROWTYPE; + l_num_recs number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Delete Records Happy Path'; + select count(*) into l_num_recs + from wt_results + where test_run_id = -99; + wt_assert.isnotnull ( + msg_in => 'Before Insert Count', + check_this_in => l_num_recs); + -------------------------------------- WTPLSQL Testing -- + l_test_runs_rec.id := -99; + l_test_runs_rec.start_dtm := sysdate; + l_test_runs_rec.test_runner_id := wt_test_runner.dim_id('WT_RESULT_TEST','WT_RESULT_TEST'); + insert into wt_test_runs values l_test_runs_rec; + l_results_rec.test_run_id := -99; + -------------------------------------- WTPLSQL Testing -- + l_results_rec.result_seq := 1; + l_results_rec.executed_dtm := sysdate; + l_results_rec.interval_msec := 99; + l_results_rec.assertion := 'DELRECTEST'; + l_results_rec.status := 'PASS'; + l_results_rec.details := 'This is a WT_RESULT.DELETE_RECORDS Test'; + insert into wt_results values l_results_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'After Insert Count', + check_query_in => 'select count(*) from wt_results' || + ' where test_run_id = -99', + against_value_in => l_num_recs + 1); + begin + wt_assert.eq ( + msg_in => 'Run delete_run_id(-99)', + check_this_in => delete_run_id(-99), + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_run_id(-99) Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'After Test Count', + check_query_in => 'select count(*) from wt_results' || + ' where test_run_id = -99', + against_value_in => l_num_recs); + rollback; + wt_assert.eqqueryvalue ( + msg_in => 'After ROLLBACK Count', + check_query_in => 'select count(*) from wt_results' || + ' where test_run_id = -99', + against_value_in => l_num_recs); + end t_delete_run_id; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure WTPLSQL_RUN + is + begin + -------------------------------------- WTPLSQL Testing -- + wtplsql.g_DBOUT := 'WT_RESULT:PACKAGE BODY'; + t_initialize; + t_finalize; + t_delete_run_id; + end WTPLSQL_RUN; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +end wt_result; + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/79927809-19FF-B070-129B-34DF9FBACA9E.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/79927809-19FF-B070-129B-34DF9FBACA9E.xml new file mode 100644 index 0000000..1491635 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/79927809-19FF-B070-129B-34DF9FBACA9E.xml @@ -0,0 +1,775 @@ + + +wtp@DEVPDB_localhost +WTP +CORE_DATA +duane +2024-04-10 19:09:28 UTC +Main + +CREATE OR REPLACE PACKAGE WTP.CORE_DATA + authid definer +is + + SUBTYPE long_name is varchar2(128); + + TYPE run_rec_type is record + (test_runner_owner long_name -- Owner of the Test Runner + ,test_runner_name long_name -- Name of the Test Runner + ,start_dtm timestamp(3) with local time zone -- Test Runner Start Date/Time + ,end_dtm timestamp(3) with local time zone -- Test Runner End Date/Time + ,runner_sec number(6,1) default 0 -- Total Runtime for Test Runner in Seconds + ,error_message varchar2(4000) -- Error Message + ,tc_cnt number(7) default 0 -- Number of Test Cases + ,tc_fail number(7) default 0 -- Number of Failed Test Cases + ,asrt_fst_dtm timestamp(3) with local time zone -- Date/Time of First Assertion + ,asrt_lst_dtm timestamp(3) with local time zone -- Date/Time of Last Assertion + ,asrt_cnt number(7) default 0 -- Number of Assertions across all Test Cases + ,asrt_fail number(7) default 0 -- Number of Assertion Failures across all Test Cases + ,asrt_min_msec number(10,3) -- Minumum Assertion Interval in Milliseconds across all Test Cases + ,asrt_max_msec number(10,3) -- Maximum Assertion Interval in Milliseconds across all Test Cases + ,asrt_tot_msec number(10,3) default 0 -- Total Assertion Intervals in Milliseconds across all Test Cases + ,dbout_owner long_name -- Owner of the Database Object Under Test + ,dbout_name long_name -- Name of the Database Object Under Test + ,dbout_type varchar2(20) -- Type of the Database Object Under Test + ); + g_run_rec run_rec_type; + + TYPE tcases_rec_type is record + (asrt_cnt number(7) default 0 -- Number of Assertions in this Test Case + ,asrt_fail number(7) default 0 -- Number of Failed Assertsion in this Test Case + ,asrt_min_msec number(10,3) -- Minumum Assertion Interval in Milliseconds in this Test Cases + ,asrt_max_msec number(10,3) -- Maximum Assertion Interval in Milliseconds in this Test Cases + ,asrt_tot_msec number(10,3) default 0 -- Total Assertion Interval in Milliseconds in this Test Cases + ); + TYPE tcases_aa_type is table of tcases_rec_type index by long_name; + g_tcases_aa tcases_aa_type; + + TYPE results_rec_type is record + (testcase long_name -- Test Case Name of the Assertion + ,executed_dtm timestamp(6) with local time zone -- Execution Date/Time of the Assertion + ,interval_msec number(10,3) default 0 -- Interval from Previous Assertion in Milliseconds + ,assertion varchar2(15) -- Name of the Assertion + ,pass boolean -- Did the Assertion Pass? (TRUE/FALSE) + ,message varchar2(200) -- Identification Message of the Assertion + ,details varchar2(4000) -- Test Details of the Assertion + ); + TYPE results_nt_type is table of results_rec_type; + g_results_nt results_nt_type; + + procedure init1 + (in_package_name in varchar2); + + procedure init2; + + procedure add + (in_testcase in varchar2 + ,in_assertion in varchar2 + ,in_pass in boolean + ,in_details in varchar2 + ,in_message in varchar2); + + procedure final1; + + procedure run_error + (in_error_message in varchar2); + + -- WtPLSQL Self Test Procedures + -- + -- alter system set PLSQL_CCFLAGS = + -- 'WTPLSQL_SELFTEST:TRUE' + -- scope=BOTH; + -- + $IF $$WTPLSQL_SELFTEST + $THEN + procedure WTPLSQL_RUN; + $END + +end core_data; + +wtp@DEVPDB_localhost +WTP +CORE_DATA +duane +2024-04-10 19:09:28 UTC +Main + +CREATE OR REPLACE PACKAGE BODY WTP.CORE_DATA +is + + g_first_executed_dtm timestamp(6) with local time zone; + +--------------------- +-- Public Procedures +--------------------- + +------------------------------------------------------------ +function get_testcase + return long_name +is +begin + return nvl(wt_assert.g_testcase + ,substr(core_data.g_run_rec.test_runner_owner || '.' || + core_data.g_run_rec.test_runner_name, 1, 128)); +end get_testcase; + +------------------------------------------------------------ +procedure init1 + (in_package_name in varchar2) +is + l_run_recNULL run_rec_type; + l_testcase long_name; +begin + -- Initialize Test Run Record + g_run_rec := l_run_recNULL; + g_run_rec.start_dtm := systimestamp; + g_run_rec.test_runner_name := in_package_name; + -- These don't always work: + -- g_run_rec.test_runner_owner := USER; + -- g_run_rec.test_runner_owner := sys_context('userenv', 'current_schema'); + select username into g_run_rec.test_runner_owner from user_users; + -- Initialize Test Cases Array + l_testcase := g_tcases_aa.LAST; + while l_testcase is not null + loop + g_tcases_aa.DELETE(l_testcase); + l_testcase := g_tcases_aa.PRIOR(l_testcase); + end loop; + -- Initialize Test Results Array + g_results_nt := null; +end init1; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_init1 + is + l_run_recSAVE run_rec_type; + l_tcases_aaSAVE tcases_aa_type; + l_results_ntSAVE results_nt_type; + l_run_recTEST run_rec_type; + l_tcases_aaTEST tcases_aa_type; + l_results_ntTEST results_nt_type; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'INIT "One" Happy Path 1'; + l_run_recSAVE := g_run_rec; + l_tcases_aaSAVE := g_tcases_aa; + l_results_ntSAVE := g_results_nt; + g_tcases_aa('INIT Happy 1 Test 1') := NULL; + g_tcases_aa('INIT Happy 1 Test 2') := NULL; + init1 ('WTPLSQL'); + l_run_recTEST := g_run_rec; + l_tcases_aaTEST := g_tcases_aa; + l_results_ntTEST := g_results_nt; + g_run_rec := l_run_recSAVE; + g_tcases_aa := l_tcases_aaSAVE; + g_results_nt := l_results_ntSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'l_run_recTEST.test_runner_owner' + ,check_this_in => l_run_recTEST.test_runner_owner + ,against_this_in => USER); + wt_assert.eq + (msg_in => 'l_run_recTEST.test_runner_name' + ,check_this_in => l_run_recTEST.test_runner_name + ,against_this_in => 'WTPLSQL'); + wt_assert.isnotnull + (msg_in => 'l_run_recTEST.start_dtm' + ,check_this_in => l_run_recTEST.start_dtm); + wt_assert.this + (msg_in => 'l_run_recTEST.start_dtm > l_run_recSAVE.start_dtm' + ,check_this_in => l_run_recTEST.start_dtm > l_run_recSAVE.start_dtm); + wt_assert.isnull + (msg_in => 'l_run_recTEST.end_dtm' + ,check_this_in => l_run_recTEST.end_dtm); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'l_run_recTEST.runner_sec' + ,check_this_in => l_run_recTEST.runner_sec + ,against_this_in => 0); + wt_assert.eq + (msg_in => 'l_run_recTEST.runner_sec' + ,check_this_in => l_run_recTEST.runner_sec + ,against_this_in => 0); + wt_assert.eq + (msg_in => 'l_run_recTEST.tc_cnt' + ,check_this_in => l_run_recTEST.tc_cnt + ,against_this_in => 0); + wt_assert.eq + (msg_in => 'l_run_recTEST.tc_fail' + ,check_this_in => l_run_recTEST.tc_fail + ,against_this_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_cnt' + ,check_this_in => l_run_recTEST.asrt_cnt + ,against_this_in => 0); + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_fail' + ,check_this_in => l_run_recTEST.asrt_fail + ,against_this_in => 0); + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_tot_msec' + ,check_this_in => l_run_recTEST.asrt_tot_msec + ,against_this_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull + (msg_in => 'l_tcases_aaTEST.FIRST' + ,check_this_in => l_tcases_aaTEST.FIRST); + wt_assert.this + (msg_in => 'l_results_ntTEST is null' + ,check_this_in => (l_results_ntTEST is NULL) ); + end t_init1; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure init2 +is +begin + g_first_executed_dtm := systimestamp; +end init2; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_init2 + is + l_run_recSAVE run_rec_type; + l_tcases_aaSAVE tcases_aa_type; + l_results_ntSAVE results_nt_type; + l_run_recTEST run_rec_type; + l_tcases_aaTEST tcases_aa_type; + l_results_ntTEST results_nt_type; + lt PLS_INTEGER; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'INIT "Two" Happy Path 1'; + l_run_recSAVE := g_run_rec; + l_tcases_aaSAVE := g_tcases_aa; + l_results_ntSAVE := g_results_nt; + -- lt points to the NULL record in g_results_nt + lt := g_results_nt.COUNT; + g_results_nt(lt).executed_dtm := null; + init2; + l_run_recTEST := g_run_rec; + l_tcases_aaTEST := g_tcases_aa; + l_results_ntTEST := g_results_nt; + g_run_rec := l_run_recSAVE; + g_tcases_aa := l_tcases_aaSAVE; + g_results_nt := l_results_ntSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull + (msg_in => 'l_results_ntTEST(1).executed_dtm' + ,check_this_in => l_results_ntTEST(1).executed_dtm); + wt_assert.this + (msg_in => 'l_results_ntTEST(1).executed_dtm >= l_run_recTEST.start_dtm' + ,check_this_in => l_results_ntTEST(1).executed_dtm >= l_run_recTEST.start_dtm); + end t_init2; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure add + (in_testcase in varchar2 + ,in_assertion in varchar2 + ,in_pass in boolean + ,in_details in varchar2 + ,in_message in varchar2) +is + l_results_rec results_rec_type; + l_results_recNULL results_rec_type; + l_tcases_rec tcases_rec_type; + l_current_tstamp timestamp(6) with local time zone := systimestamp; + l_interval_buff interval day(9) to second(6); +begin + ------------------------------------------------------------ + -- Set and Update "l_results_rec" + if g_results_nt is null + then + l_results_rec := l_results_recNULL; + else + l_results_rec := g_results_nt(g_results_nt.COUNT); + end if; + l_results_rec.testcase := nvl(in_testcase + ,substr(g_run_rec.test_runner_owner || '.' || + g_run_rec.test_runner_name, 1, 128)); + l_results_rec.assertion := in_assertion; + l_results_rec.pass := nvl(in_pass,FALSE); + l_results_rec.details := in_details; + l_results_rec.message := in_message; + l_interval_buff := l_current_tstamp - + nvl(l_results_rec.executed_dtm + ,g_first_executed_dtm); + l_results_rec.interval_msec := 1000*( extract(second from l_interval_buff) + + 60*( extract(minute from l_interval_buff) + + 60*( extract(hour from l_interval_buff) + + 24*extract(day from l_interval_buff) + ) ) ); + l_results_rec.executed_dtm := l_current_tstamp; + ------------------------------------------------------------ + -- Add New Element + if g_results_nt is null + then + -- Initialize the "g_results_nt" Array + g_results_nt := results_nt_type(l_results_rec); + else + -- Add New Element to "g_results_nt" Array + g_results_nt.extend; + g_results_nt(g_results_nt.COUNT) := l_results_rec; + end if; + ----------------------------------------------- + -- Update "g_run_rec" based on "l_results_rec" + g_run_rec.asrt_cnt := g_run_rec.asrt_cnt + 1; + if NOT l_results_rec.pass + then + g_run_rec.asrt_fail := g_run_rec.asrt_fail + 1; + end if; + g_run_rec.asrt_tot_msec := g_run_rec.asrt_tot_msec + + l_results_rec.interval_msec; + if l_results_rec.interval_msec < nvl(g_run_rec.asrt_min_msec,9999999) + then + g_run_rec.asrt_min_msec := l_results_rec.interval_msec; + end if; + if l_results_rec.interval_msec > nvl(g_run_rec.asrt_max_msec,-1) + then + g_run_rec.asrt_max_msec := l_results_rec.interval_msec; + end if; + ----------------------------------------------------------------------- + -- Set "l_tcases_rec" and update the appropriate "g_tcases_aa" element + -- + if g_tcases_aa.EXISTS(l_results_rec.testcase) + then + l_tcases_rec := g_tcases_aa(l_results_rec.testcase); + end if; + l_tcases_rec.asrt_cnt := l_tcases_rec.asrt_cnt + 1; + if NOT l_results_rec.pass + then + l_tcases_rec.asrt_fail := l_tcases_rec.asrt_fail + 1; + end if; + l_tcases_rec.asrt_tot_msec := l_tcases_rec.asrt_tot_msec + + l_results_rec.interval_msec; + if l_results_rec.interval_msec < nvl(l_tcases_rec.asrt_min_msec,9999999) + then + l_tcases_rec.asrt_min_msec := l_results_rec.interval_msec; + end if; + if l_results_rec.interval_msec > nvl(l_tcases_rec.asrt_max_msec,-1) + then + l_tcases_rec.asrt_max_msec := l_results_rec.interval_msec; + end if; + g_tcases_aa(l_results_rec.testcase) := l_tcases_rec; + -- +end add; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_add + is + l_run_recSAVE run_rec_type; + l_tcases_aaSAVE tcases_aa_type; + l_results_ntSAVE results_nt_type; + l_run_recTEST run_rec_type; + l_tcases_aaTEST tcases_aa_type; + l_results_ntTEST results_nt_type; + lt PLS_INTEGER; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Add Procedure Happy Path 1'; + l_run_recSAVE := g_run_rec; + l_tcases_aaSAVE := g_tcases_aa; + l_results_ntSAVE := g_results_nt; + add(in_testcase => 'The Testcase' + ,in_assertion => 'The Assert' + ,in_pass => TRUE + ,in_details => 'The Details' + ,in_message => 'The Message'); + -------------------------------------- WTPLSQL Testing -- + l_run_recTEST := g_run_rec; + l_tcases_aaTEST := g_tcases_aa; + l_results_ntTEST := g_results_nt; + g_run_rec := l_run_recSAVE; + g_tcases_aa := l_tcases_aaSAVE; + g_results_nt := l_results_ntSAVE; + lt := l_results_ntTEST.COUNT; + wt_assert.isnotnull + (msg_in => 'The last element in l_resultsTEST_nt' + ,check_this_in => lt); + -------------------------------------- WTPLSQL Testing -- + -- l_results_nt Testing + ----------------------- + wt_assert.eq + (msg_in => 'l_results_ntTEST.COUNT = ' || + 'l_results_ntSAVE.COUNT + 1' + ,check_this_in => l_results_ntTEST.COUNT + ,against_this_in => l_results_ntSAVE.COUNT + 1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull + (msg_in => 'l_results_ntTEST(lt).interval_msec' + ,check_this_in => l_results_ntTEST(lt).interval_msec); + wt_assert.this + (msg_in => 'l_results_ntTEST(lt).interval_msec >= 0' + ,check_this_in => l_results_ntTEST(lt).interval_msec >= 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull + (msg_in => 'l_results_ntTEST(lt).executed_dtm' + ,check_this_in => l_results_ntTEST(lt).executed_dtm); + wt_assert.this + (msg_in => 'l_results_ntTEST(lt).executed_dtm >= ' || + 'l_results_ntTEST(lt-1).executed_dtm' + ,check_this_in => l_results_ntTEST(lt).executed_dtm >= + l_results_ntTEST(lt-1).executed_dtm); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'l_results_ntTEST(lt).testcase' + ,check_this_in => l_results_ntTEST(lt).testcase + ,against_this_in => 'The Testcase'); + wt_assert.eq + (msg_in => 'l_results_ntTEST(lt).assertion' + ,check_this_in => l_results_ntTEST(lt).assertion + ,against_this_in => 'The Assert'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'l_results_ntTEST(lt).pass' + ,check_this_in => l_results_ntTEST(lt).pass + ,against_this_in => TRUE); + wt_assert.eq + (msg_in => 'l_results_ntTEST(lt).details' + ,check_this_in => l_results_ntTEST(lt).details + ,against_this_in => 'The Details'); + wt_assert.eq + (msg_in => 'l_results_ntTEST(lt).message' + ,check_this_in => l_results_ntTEST(lt).message + ,against_this_in => 'The Message'); + -------------------------------------- WTPLSQL Testing -- + -- l_run_rec Testing + -------------------- + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_cnt = ' || + 'l_run_recSAVE.asrt_cnt + 1' + ,check_this_in => l_run_recTEST.asrt_cnt + ,against_this_in => l_run_recSAVE.asrt_cnt + 1); + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_fail = ' || + 'l_run_recSAVE.asrt_fail' + ,check_this_in => l_run_recTEST.asrt_fail + ,against_this_in => l_run_recSAVE.asrt_fail); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_tot_msec = ' || + 'l_run_recSAVE.asrt_tot_msec + ' || + 'l_results_ntTEST(lt).interval_msec' + ,check_this_in => l_run_recTEST.asrt_tot_msec + ,against_this_in => l_run_recSAVE.asrt_tot_msec + + l_results_ntTEST(lt).interval_msec); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull + (msg_in => 'l_run_recTEST.asrt_min_msec' + ,check_this_in => l_run_recTEST.asrt_min_msec); + wt_assert.this + (msg_in => 'l_run_recTEST.asrt_min_msec <= ' || + 'l_run_recSAVE.asrt_min_msec' + ,check_this_in => l_run_recTEST.asrt_min_msec <= + l_run_recSAVE.asrt_min_msec); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull + (msg_in => 'l_run_recTEST.asrt_max_msec' + ,check_this_in => l_run_recTEST.asrt_max_msec); + wt_assert.this + (msg_in => 'l_run_recTEST.asrt_max_msec >= ' || + 'l_run_recSAVE.asrt_max_msec' + ,check_this_in => l_run_recTEST.asrt_max_msec >= + l_run_recSAVE.asrt_max_msec); + -------------------------------------- WTPLSQL Testing -- + -- l_tcases_aa Testing + ---------------------- + wt_assert.eq + (msg_in => 'l_tcases_aaTEST(''The Testcase'').asrt_cnt' + ,check_this_in => l_tcases_aaTEST('The Testcase').asrt_cnt + ,against_this_in => 1); + wt_assert.eq + (msg_in => 'l_tcases_aaTEST(''The Testcase'').asrt_fail' + ,check_this_in => l_tcases_aaTEST('The Testcase').asrt_fail + ,against_this_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull + (msg_in => 'l_tcases_aaTEST(''The Testcase'').asrt_fail' + ,check_this_in => l_tcases_aaTEST('The Testcase').asrt_fail); + wt_assert.isnotnull + (msg_in => 'l_tcases_aaTEST(''The Testcase'').asrt_tot_msec' + ,check_this_in => l_tcases_aaTEST('The Testcase').asrt_tot_msec); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull + (msg_in => 'l_tcases_aaTEST(''The Testcase'').asrt_min_msec' + ,check_this_in => l_tcases_aaTEST('The Testcase').asrt_min_msec); + wt_assert.isnotnull + (msg_in => 'l_tcases_aaTEST(''The Testcase'').asrt_max_msec' + ,check_this_in => l_tcases_aaTEST('The Testcase').asrt_max_msec); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Add Procedure Happy Path 2'; + l_run_recSAVE := g_run_rec; + l_tcases_aaSAVE := g_tcases_aa; + l_results_ntSAVE := g_results_nt; + add(in_testcase => 'The Testcase' + ,in_assertion => 'The Assert' + ,in_pass => FALSE + ,in_details => 'The Details' + ,in_message => 'The Message'); + -------------------------------------- WTPLSQL Testing -- + l_run_recTEST := g_run_rec; + l_tcases_aaTEST := g_tcases_aa; + l_results_ntTEST := g_results_nt; + g_run_rec := l_run_recSAVE; + g_tcases_aa := l_tcases_aaSAVE; + g_results_nt := l_results_ntSAVE; + lt := l_results_ntTEST.COUNT; + wt_assert.isnotnull + (msg_in => 'The last element in l_resultsTEST_nt' + ,check_this_in => lt); + -------------------------------------- WTPLSQL Testing -- + -- l_results_nt Testing + -------------------- + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_cnt = ' || + 'l_run_recSAVE.asrt_cnt + 1' + ,check_this_in => l_run_recTEST.asrt_cnt + ,against_this_in => l_run_recSAVE.asrt_cnt + 1); + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_fail = ' || + 'l_run_recSAVE.asrt_fail + 1' + ,check_this_in => l_run_recTEST.asrt_fail + ,against_this_in => l_run_recSAVE.asrt_fail + 1); + -------------------------------------- WTPLSQL Testing -- + -- l_run_rec Testing + -------------------- + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_cnt = ' || + 'l_run_recSAVE.asrt_cnt + 1' + ,check_this_in => l_run_recTEST.asrt_cnt + ,against_this_in => l_run_recSAVE.asrt_cnt + 1); + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_fail = ' || + 'l_run_recSAVE.asrt_fail + 1' + ,check_this_in => l_run_recTEST.asrt_fail + ,against_this_in => l_run_recSAVE.asrt_fail + 1); + -------------------------------------- WTPLSQL Testing -- + -- l_tcases_aa Testing + ---------------------- + wt_assert.eq + (msg_in => 'l_tcases_aaTEST(''The Testcase'').asrt_cnt' + ,check_this_in => l_tcases_aaTEST('The Testcase').asrt_cnt + ,against_this_in => 1); + wt_assert.eq + (msg_in => 'l_tcases_aaTEST(''The Testcase'').asrt_fail' + ,check_this_in => l_tcases_aaTEST('The Testcase').asrt_fail + ,against_this_in => 1); + end t_add; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure final1 +is + l_testcase long_name; + l_interval_buff interval day(9) to second(6); +begin + -- Update Test Case Data + g_run_rec.tc_cnt := g_tcases_aa.COUNT; + g_run_rec.tc_fail := 0; + if g_tcases_aa.COUNT > 0 + then + l_testcase := g_tcases_aa.FIRST; + loop + if g_tcases_aa(l_testcase).asrt_fail > 0 + then + g_run_rec.tc_fail := g_run_rec.tc_fail + 1; + end if; + exit when l_testcase = g_tcases_aa.LAST; + l_testcase := g_tcases_aa.NEXT(l_testcase); + end loop; + end if; + -- + if g_results_nt.EXISTS(1) + then + g_run_rec.asrt_fst_dtm := g_results_nt(1).executed_dtm; + g_run_rec.asrt_lst_dtm := g_results_nt(g_results_nt.COUNT).executed_dtm; + end if; + -- Update Test Run Data + g_run_rec.end_dtm := systimestamp; + l_interval_buff := g_run_rec.end_dtm - g_run_rec.start_dtm; + g_run_rec.runner_sec := (extract(second from l_interval_buff) + + 60 * ( extract(minute from l_interval_buff) + + 60 * ( extract(hour from l_interval_buff) + + 24 * ( extract(day from l_interval_buff) + ) ) ) ); +end final1; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_final1 + is + l_run_recSAVE run_rec_type; + l_tcases_aaSAVE tcases_aa_type; + l_results_ntSAVE results_nt_type; + l_run_recTEST run_rec_type; + l_tcases_aaTEST tcases_aa_type; + l_results_ntTEST results_nt_type; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'FINAL "One" Happy Path'; + l_run_recSAVE := g_run_rec; + l_tcases_aaSAVE := g_tcases_aa; + l_results_ntSAVE := g_results_nt; + g_tcases_aa('TC1').asrt_fail := 2; + final1; + l_run_recTEST := g_run_rec; + l_tcases_aaTEST := g_tcases_aa; + l_results_ntTEST := g_results_nt; + g_run_rec := l_run_recSAVE; + g_tcases_aa := l_tcases_aaSAVE; + g_results_nt := l_results_ntSAVE; + -------------------------------------- WTPLSQL Testing -- + -- Update Test Case Data + wt_assert.isnotnull + (msg_in => 'l_run_recTEST.tc_cnt' + ,check_this_in => l_run_recTEST.tc_cnt); + wt_assert.this + (msg_in => 'l_run_recTEST.tc_cnt > 0' + ,check_this_in => l_run_recTEST.tc_cnt > 0); + wt_assert.isnotnull + (msg_in => 'l_run_recTEST.tc_fail' + ,check_this_in => l_run_recTEST.tc_fail); + wt_assert.this + (msg_in => 'l_run_recTEST.tc_fail >= 0' + ,check_this_in => l_run_recTEST.tc_fail >= 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull + (msg_in => 'l_run_recSAVE.asrt_fst_dtm' + ,check_this_in => l_run_recSAVE.asrt_fst_dtm); + wt_assert.isnotnull + (msg_in => 'l_run_recTEST.asrt_fst_dtm' + ,check_this_in => l_run_recTEST.asrt_fst_dtm); + wt_assert.isnull + (msg_in => 'l_run_recSAVE.asrt_lst_dtm' + ,check_this_in => l_run_recSAVE.asrt_lst_dtm); + wt_assert.isnotnull + (msg_in => 'l_run_recTEST.asrt_lst_dtm' + ,check_this_in => l_run_recTEST.asrt_lst_dtm); + -------------------------------------- WTPLSQL Testing -- + -- Update Test Run Data + wt_assert.isnull + (msg_in => 'l_run_recSAVE.end_dtm' + ,check_this_in => l_run_recSAVE.end_dtm); + wt_assert.isnotnull + (msg_in => 'l_run_recTEST.end_dtm' + ,check_this_in => l_run_recTEST.end_dtm); + wt_assert.isnotnull + (msg_in => 'l_run_recTEST.runner_sec' + ,check_this_in => l_run_recTEST.runner_sec); + wt_assert.this + (msg_in => 'l_run_recTEST.runner_sec >= l_run_recSAVE.runner_sec' + ,check_this_in => l_run_recTEST.runner_sec >= l_run_recSAVE.runner_sec); + end t_final1; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure run_error + (in_error_message in varchar2) +is +begin + if g_run_rec.error_message is null + then + g_run_rec.error_message := substr(in_error_message,1,4000); + else + g_run_rec.error_message := substr(g_run_rec.error_message || CHR(10) || + in_error_message,1,4000); + end if; +end run_error; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_run_error + is + l_run_recSAVE run_rec_type; + l_run_recTEST run_rec_type; + test_message varchar2(32767); + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'RUN_ERROR Happy Path 1'; + l_run_recSAVE := g_run_rec; + g_run_rec.error_message := ''; + run_error('Simlple Message'); + l_run_recTEST := g_run_rec; + g_run_rec := l_run_recSAVE; + wt_assert.eq + (msg_in => 'l_run_recTEST.error_message' + ,check_this_in => l_run_recTEST.error_message + ,against_this_in => 'Simlple Message'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'RUN_ERROR Happy Path 2'; + l_run_recSAVE := g_run_rec; + g_run_rec.error_message := ''; + run_error('Message 1'); + run_error('Message 2'); + l_run_recTEST := g_run_rec; + g_run_rec := l_run_recSAVE; + wt_assert.eq + (msg_in => 'l_run_recTEST.error_message' + ,check_this_in => l_run_recTEST.error_message + ,against_this_in => 'Message 1' || CHR(10) || 'Message 2'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'RUN_ERROR Happy Path 3'; + for i in 1 .. 399 + loop + test_message := test_message || '1234567890'; + end loop; + l_run_recSAVE := g_run_rec; + g_run_rec.error_message := ''; + run_error(test_message); + run_error('Longer than 10 characters.'); + l_run_recTEST := g_run_rec; + g_run_rec := l_run_recSAVE; + wt_assert.isnotnull + (msg_in => 'substr(l_run_recTEST.error_message,3000)' + ,check_this_in => substr(l_run_recTEST.error_message,3000)); + wt_assert.this + (msg_in => 'l_run_recTEST.error_message like ''%Longer th''' + ,check_this_in => l_run_recTEST.error_message like '%Longer th'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'RUN_ERROR Happy Path 4'; + l_run_recSAVE := g_run_rec; + g_run_rec.error_message := ''; + run_error(''); + run_error('Message'); + run_error(''); + l_run_recTEST := g_run_rec; + g_run_rec := l_run_recSAVE; + wt_assert.eq + (msg_in => 'l_run_recTEST.error_message' + ,check_this_in => l_run_recTEST.error_message + ,against_this_in => 'Message' || CHR(10)); + end t_run_error; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure WTPLSQL_RUN + is + begin + wtplsql.g_DBOUT := 'CORE_DATA:PACKAGE BODY'; + -------------------------------------- WTPLSQL Testing -- + t_init1; + t_init2; + t_add; + t_final1; + --t_final2; + t_run_error; + end; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +end core_data; + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/822BA676-C543-90A8-87A9-325B2468DD0A.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/822BA676-C543-90A8-87A9-325B2468DD0A.xml new file mode 100644 index 0000000..e6edaf5 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/822BA676-C543-90A8-87A9-325B2468DD0A.xml @@ -0,0 +1,440 @@ + + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUNNER +duane +2024-04-10 19:09:30 UTC +Main + +CREATE OR REPLACE PACKAGE WTP.WT_TEST_RUNNER + authid definer +as + + -- Return a Test Runner Surrogate Key. + -- Return NULL if the Test Runner does not exist. + function get_id + (in_owner in varchar2 + ,in_name in varchar2) + return number; + + -- Return a Test Runner Surrogate Key. + -- Add the Test Runner if it does not exist. + function dim_id + (in_owner in varchar2 + ,in_name in varchar2) + return number; + + -- Delete all records for a test runner + function delete_records + (in_test_runner_id in number) + return number; + + -- Delete all records with no child records + function cleanup_records + return number; + + -- WtPLSQL Self Test Procedures + -- + -- alter system set PLSQL_CCFLAGS = + -- 'WTPLSQL_SELFTEST:TRUE' + -- scope=BOTH; + -- + $IF $$WTPLSQL_SELFTEST + $THEN + procedure WTPLSQL_RUN; + $END + +end wt_test_runner; + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUNNER +duane +2024-04-10 19:09:30 UTC +Main + +CREATE OR REPLACE PACKAGE BODY WTP.WT_TEST_RUNNER +as + + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + C_OWNER CONSTANT varchar2(50) := 'WT_TEST_RUNNER_OWNER_FOR_TESTING_1234ABCD'; + C_NAME CONSTANT varchar2(50) := 'WT_TEST_RUNNER_NAME_FOR_TESTING_1234ABCD'; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--------------------- +-- Public Procedures +--------------------- + + +------------------------------------------------------------ +function get_id + (in_owner in varchar2 + ,in_name in varchar2) + return number +is + l_id number; +begin + select id into l_id + from wt_test_runners + where owner = in_owner + and name = in_name; + return l_id; +exception when NO_DATA_FOUND +then + return NULL; +end get_id; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_get_id + is + l_id number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Setup'; + delete from wt_test_runners + where owner = C_OWNER + and name = C_NAME; + wt_assert.isnotnull + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 0' + ,check_query_in => 'select count(*) from wt_test_runners' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Happy Path 1'; + wt_assert.isnull + (msg_in => 'Check for Null return' + ,check_this_in => get_id(C_OWNER, C_NAME)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Happy Path 2'; + insert into wt_test_runners (id, owner, name) + values (wt_test_runners_seq.nextval, C_OWNER, C_NAME) + returning id into l_id; + wt_assert.eq + (msg_in => 'Check ID return' + ,check_this_in => get_id(C_OWNER, C_NAME) + ,against_this_in => l_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Teardown'; + delete from wt_test_runners + where owner = C_OWNER + and name = C_NAME; + wt_assert.eq + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT + ,against_this_in => 1); + commit; + end t_get_id; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function dim_id + (in_owner in varchar2 + ,in_name in varchar2) + return number +is + pragma AUTONOMOUS_TRANSACTION; + rec wt_test_runners%ROWTYPE; +begin + if in_owner is NULL + OR in_name is NULL + then + return NULL; + end if; + rec.id := get_id (in_owner, in_name); + if rec.id is null + then + rec.id := wt_test_runners_seq.nextval; + rec.owner := in_owner; + rec.name := in_name; + insert into wt_test_runners values rec; + end if; + commit; + return rec.id; +end dim_id; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_dim_id + is + l_id number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Setup'; + delete from wt_test_runners + where owner = C_OWNER + and name = C_NAME; + wt_assert.isnotnull + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 0' + ,check_query_in => 'select count(*) from wt_test_runners' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Happy Path 1'; + l_id := dim_id(C_OWNER, C_NAME); + wt_assert.isnotnull + (msg_in => 'Check ID return 1' + ,check_this_in => l_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Happy Path 2'; + wt_assert.eq + (msg_in => 'Check ID return 2' + ,check_this_in => dim_id(C_OWNER, C_NAME) + ,against_this_in => l_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Sad Path 1'; + wt_assert.isnull + (msg_in => 'Check NULL return' + ,check_this_in => dim_id(NULL, NULL)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Teardown'; + delete from wt_test_runners + where owner = C_OWNER + and name = C_NAME; + wt_assert.eq + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT + ,against_this_in => 1); + commit; + end t_dim_id; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Delete all records for a test runner +function delete_records + (in_test_runner_id in number) + return number +is + ret_num number := 0; +begin + for buff in ( + select id from wt_test_runs + where test_runner_id = in_test_runner_id ) + loop + ret_num := ret_num + wt_profile.delete_run_id(buff.id); + ret_num := ret_num + wt_result.delete_run_id(buff.id); + ret_num := ret_num + wt_test_run.delete_run_id(buff.id); + end loop; + delete from wt_test_runners where id = in_test_runner_id; + ret_num := ret_num + SQL%ROWCOUNT; + return ret_num; +end delete_records; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_delete_records + is + l_runner_id number := -99; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Setup'; + delete from wt_test_runners + where owner = C_OWNER + and name = C_NAME; + wt_assert.isnotnull + (msg_in => 'Number of wt_test_runners Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + delete from wt_test_runs + where id = l_runner_id + and test_runner_id = l_runner_id; + wt_assert.isnotnull + (msg_in => 'Number of wt_test_runs Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + insert into wt_test_runners (id, owner, name) + values (l_runner_id, C_OWNER, C_NAME); + wt_assert.eqqueryvalue + (msg_in => 'Number of wt_test_runners Rows should be 1' + ,check_query_in => 'select count(*) from wt_test_runners' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || '''' + ,against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + insert into wt_test_runs (id, test_runner_id, start_dtm) + values (l_runner_id, l_runner_id, sysdate); + wt_assert.eqqueryvalue + (msg_in => 'Number of wt_test_runs Rows should be 1' + ,check_query_in => 'select count(*) from wt_test_runs' || + ' where id = ' || l_runner_id || + ' and test_runner_id = ' || l_runner_id + ,against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Happy Path 1'; + begin + wt_assert.eq ( + msg_in => 'Run delete_records(' || l_runner_id || ')', + check_this_in => delete_records(l_runner_id), + against_this_in => 2); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_records(' || l_runner_id || ') Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'delete_records(' || l_runner_id || ') Number of wt_test_runners Rows should be 0' + ,check_query_in => 'select count(*) from wt_test_runners' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Happy Path 2'; + begin + wt_assert.eq ( + msg_in => 'Run delete_records(NULL)', + check_this_in => delete_records(NULL), + against_this_in => 0); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_records(NULL) Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'delete_records(NULL) Number of wt_test_runners Rows should be 0' + ,check_query_in => 'select count(*) from wt_test_runners' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Happy Path 3'; + begin + wt_assert.eq ( + msg_in => 'Run delete_records(-9999)', + check_this_in => delete_records(-9999), + against_this_in => 0); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_records(-9999) Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'delete_records(-9999) Number of wt_test_runners Rows should be 0' + ,check_query_in => 'select count(*) from wt_test_runners' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || '''' + ,against_value_in => 0); + commit; + end t_delete_records; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function cleanup_records + return number +is +begin + delete from wt_test_runners + where id in ( + select id from wt_test_runners + MINUS + select distinct test_runner_id ID from wt_test_runs); + return SQL%ROWCOUNT; +end cleanup_records; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_cleanup_records + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_cleanup_records Setup'; + delete from wt_test_runners + where owner = C_OWNER + and name = C_NAME; + wt_assert.isnotnull + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + insert into wt_test_runners (id, owner, name) + values (wt_test_runners_seq.nextval, C_OWNER, C_NAME); + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 1' + ,check_query_in => 'select count(*) from wt_test_runners' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || '''' + ,against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_cleanup_records Happy Path 1'; + begin + wt_assert.isnotnull ( + msg_in => 'Run cleanup_records 1', + check_this_in => cleanup_records); + exception when others then + wt_assert.isnull( + msg_in => 'Run cleanup_records 1 Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 0' + ,check_query_in => 'select count(*) from wt_test_runners' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_cleanup_records Happy Path 2'; + begin + wt_assert.eq ( + msg_in => 'Run cleanup_records 2', + check_this_in => cleanup_records, + against_this_in => 0); + exception when others then + wt_assert.isnull( + msg_in => 'Run cleanup_records 2 Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should still be 0' + ,check_query_in => 'select count(*) from wt_test_runners' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || '''' + ,against_value_in => 0); + commit; + end t_cleanup_records; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure WTPLSQL_RUN + is + begin + -------------------------------------- WTPLSQL Testing -- + wtplsql.g_DBOUT := 'WT_TEST_RUNNER:PACKAGE BODY'; + t_get_id; + t_dim_id; + t_delete_records; + t_cleanup_records; + end; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +end wt_test_runner; + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/8A8CB50C-C6B4-CD40-C3D6-9D3C8669988D.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/8A8CB50C-C6B4-CD40-C3D6-9D3C8669988D.xml new file mode 100644 index 0000000..01bb89d --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/8A8CB50C-C6B4-CD40-C3D6-9D3C8669988D.xml @@ -0,0 +1,280 @@ + + +wtp@DEVPDB_localhost +WTP +JUNIT_CORE_REPORT +duane +2024-04-10 19:09:28 UTC +Main + +CREATE OR REPLACE PACKAGE WTP.JUNIT_CORE_REPORT + authid definer +as + + g_in_process boolean := FALSE; + + TYPE vc_aa_type is table of varchar2(4000) index by pls_integer; + vc_aa vc_aa_type; + + procedure xml_header; + + procedure xml_body; + + procedure xml_trailer; + + procedure before_test_all; + + procedure show_current; + + procedure after_test_all; + + procedure insert_hooks; + + procedure delete_hooks; + +end junit_core_report; + +wtp@DEVPDB_localhost +WTP +JUNIT_CORE_REPORT +duane +2024-04-10 19:09:28 UTC +Main + +CREATE OR REPLACE PACKAGE BODY WTP.JUNIT_CORE_REPORT +as + + +---------------------- +-- PRivate Procedures +---------------------- + + +------------------------------------------------------------ +-- Print to DBMS_OUTPUT +procedure p + (in_line in varchar2) +is +begin + if g_in_process + then + vc_aa(vc_aa.COUNT + 1) := in_line; + else + dbms_output.put_line(in_line); + end if; +end p; + + +------------------------------------------------------------ +-- XML Escape +function xe + (in_txt in varchar2) + return varchar2 +is +begin + return replace + (replace + (replace + (replace + (replace + (in_txt + ,'<','&amp;lt;') -- Less Than + ,'>','&amp;gt;') -- Greater Than + ,'&','&amp;') -- Ampersand + ,'''','&apos;') -- Apostrophe + ,'"','&amp;quot;'); -- Quotation Mark +end xe; + + +--------------------- +-- Public Procedures +--------------------- + + +------------------------------------------------------------ +procedure xml_header +is +begin + p('<?xml version="1.0" encoding="UTF-8"?>'); + p('<!-- https://stackoverflow.com/questions/4922867/what-is-the-junit-xml-format-specification-that-hudson-supports -->'); + p('<!-- http://nelsonwells.net/2012/09/how-jenkins-ci-parses-and-displays-junit-output -->'); + p('<!-- Jenkins identifies the failed tests as {package}.{class}.{testcase}. -->'); + p('<testsuites>'); +end xml_header; + + +------------------------------------------------------------ +procedure xml_body +is + l_rec core_data.results_rec_type; + l_testcase core_data.long_name; + l_classname varchar2(4000); + single_line_save boolean; +begin + single_line_save := wt_core_report.g_single_line_output; + wt_core_report.g_single_line_output := TRUE; + if core_data.g_run_rec.dbout_name is not null + then + l_classname := xe(core_data.g_run_rec.dbout_owner) || + '.' || xe(core_data.g_run_rec.dbout_name) || + ':' || xe(replace(core_data.g_run_rec.dbout_type,' ','_')); + end if; + if core_data.g_tcases_aa.COUNT > 0 + then + --------------------- + -- Test Suite Header + p(' <testsuite name="' || xe(core_data.g_run_rec.test_runner_owner) || + '.' || xe(core_data.g_run_rec.test_runner_name) || + '" classname="' || l_classname || + '" tests="' || core_data.g_run_rec.tc_cnt || + '" failures="' || core_data.g_run_rec.tc_fail || + '" time="' || core_data.g_run_rec.runner_sec || + '" timestamp="' || to_char(core_data.g_run_rec.start_dtm,'YYYY-MM-DD"T"HH24:MI:SS') || + '">' ); + l_testcase := core_data.g_tcases_aa.FIRST; + loop + -------------------- + -- Test Case Header + p(' <testcase name="' || xe(l_testcase) || + '" classname="' || l_classname || + '" time="' || core_data.g_tcases_aa(l_testcase).asrt_tot_msec || + '">' ); + if core_data.g_tcases_aa(l_testcase).asrt_fail > 0 + or ( core_data.g_run_rec.error_message is not null + and l_testcase = core_data.g_results_nt(core_data.g_results_nt.COUNT).testcase) + then + ----------------------- + -- Short Error Message + if core_data.g_run_rec.error_message is not null + and l_testcase = core_data.g_results_nt(core_data.g_results_nt.COUNT).testcase + then + p(' <error message="' || xe(replace + (replace + (substr(core_data.g_run_rec.error_message + ,1,60) + ,CHR(10),' ') + ,CHR(13),'')) || + '">' ); + else + p(' <error message="' || core_data.g_tcases_aa(l_testcase).asrt_fail || + ' assertion failures.">' ); + end if; + p(' <![CDATA['); + --------------------- + -- Print all results + for i in 1 .. core_data.g_results_nt.COUNT + loop + if core_data.g_results_nt(i).testcase = l_testcase + then + l_rec := core_data.g_results_nt(i); + l_rec.testcase := ''; + p(wt_core_report.format_test_result(l_rec)); + end if; + end loop; + ---------------------- + -- Long Error Message + if core_data.g_run_rec.error_message is not null + and l_testcase = core_data.g_results_nt(core_data.g_results_nt.COUNT).testcase + then + p(' ----'); + p(core_data.g_run_rec.error_message); + end if; + ---------------------- + p(' ]]>'); + p(' </error>'); + ----------------------- + end if; + p(' </testcase>'); + -------------------- + exit when l_testcase = core_data.g_tcases_aa.LAST; + l_testcase := core_data.g_tcases_aa.NEXT(l_testcase); + end loop; + p(' </testsuite>'); + --------------------- + end if; + wt_core_report.g_single_line_output := single_line_save; +end xml_body; + + +------------------------------------------------------------ +procedure xml_trailer +is +begin + p('</testsuites>'); +end xml_trailer; + + +------------------------------------------------------------ +-- This can be used as an +procedure show_current +is +begin + -- + if not g_in_process + then + xml_header; + end if; + -- + xml_body; + -- + if not g_in_process + then + xml_trailer; + end if; + -- +end show_current; + + +------------------------------------------------------------ +procedure before_test_all +is +begin + vc_aa.DELETE; + g_in_process := TRUE; + xml_header; +end before_test_all; + + +------------------------------------------------------------ +procedure after_test_all +is +begin + xml_trailer; + for i in 1 .. vc_aa.COUNT + loop + dbms_output.put_line(vc_aa(i)); + end loop; + g_in_process := FALSE; +end after_test_all; + + +------------------------------------------------------------ +procedure insert_hooks +is +begin + delete_hooks; + insert into hooks (hook_name, seq, run_string) + values ('before_test_all', 20, 'begin junit_core_report.before_test_all; end;'); + insert into hooks (hook_name, seq, run_string) + values ('after_test_run', 20, 'begin junit_core_report.show_current; end;'); + insert into hooks (hook_name, seq, run_string) + values ('after_test_all', 20, 'begin junit_core_report.after_test_all; end;'); + commit; + hook.init; +end insert_hooks; + + +------------------------------------------------------------ +procedure delete_hooks +is +begin + delete from hooks where run_string like '% junit_core_report.%'; + dbms_output.put_line(SQL%ROWCOUNT || ' "junit_core_report" rows deleted from HOOKS table.'); + hook.init; + commit; +end delete_hooks; + + +end junit_core_report; + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/AFAA168D-2B04-671A-C28D-06C54ECE5A52.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/AFAA168D-2B04-671A-C28D-06C54ECE5A52.xml new file mode 100644 index 0000000..cc5730f --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/AFAA168D-2B04-671A-C28D-06C54ECE5A52.xml @@ -0,0 +1,2105 @@ + + +wtp@DEVPDB_localhost +WTP +WT_PROFILE +duane +2024-04-10 19:09:30 UTC +Main + +CREATE OR REPLACE PACKAGE WTP.WT_PROFILE + authid definer +as + + g_rec wt_dbout_runs%ROWTYPE; + + function is_profilable + (in_dbout_owner in varchar2 + ,in_dbout_name in varchar2 + ,in_dbout_type in varchar2) + return boolean; + + function trigger_offset + (dbout_owner_in in varchar2 + ,dbout_name_in in varchar2 + ,dbout_type_in in varchar2) + return number; + + function calc_pct_coverage + (in_test_run_id in number) + return number; + + procedure initialize; + + procedure finalize + (in_test_run_id in number); + + function delete_run_id + (in_test_run_id in number) + return number; + + -- WtPLSQL Self Test Procedures + -- + -- alter system set PLSQL_CCFLAGS = + -- 'WTPLSQL_SELFTEST:TRUE' + -- scope=BOTH; + -- + $IF $$WTPLSQL_SELFTEST + $THEN + procedure WTPLSQL_RUN; + $END + +end wt_profile; + +wtp@DEVPDB_localhost +WTP +WT_PROFILE +duane +2024-04-10 19:09:30 UTC +Main + +CREATE OR REPLACE PACKAGE BODY WTP.WT_PROFILE +as + + TYPE ignr_aa_type is table + of varchar2(1) + index by PLS_INTEGER; + + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + g_current_user varchar2(30); + wtplsql_skip_test boolean := FALSE; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + +---------------------- +-- Private Procedures +---------------------- + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + + procedure tl_compile_db_object + (in_ptype in varchar2 + ,in_pname in varchar2 + ,in_source in varchar2) + is + l_sql_txt varchar2(4000); + l_errtxt varchar2(32000) := ''; + begin + -------------------------------------- WTPLSQL Testing -- + -- Wrap in_source to complete the DDL statement + l_sql_txt := 'create or replace ' || + in_ptype || ' ' || + in_pname || ' is' || CHR(10) || + in_source || ';' ; + wt_assert.raises + (msg_in => 'Compile ' || in_ptype || ' ' || in_pname + ,check_call_in => l_sql_txt + ,against_exc_in => ''); + -------------------------------------- WTPLSQL Testing -- + for buff in (select * from user_errors + where attribute = 'ERROR' + and name = in_pname + and type = in_ptype + order by sequence) + loop + l_errtxt := l_errtxt || buff.line || ', ' || + buff.position || ': ' || buff.text || CHR(10); + end loop; + wt_assert.isnull + (msg_in => 'Compile ' || in_ptype || ' ' || in_pname || + ' Error' + ,check_this_in => l_errtxt); + -------------------------------------- WTPLSQL Testing -- + wt_assert.objexists ( + msg_in => in_pname || ' ' || in_ptype, + obj_owner_in => g_current_user, + obj_name_in => upper(in_pname), + obj_type_in => upper(in_ptype)); + end tl_compile_db_object; +--==============================================================-- + -------------------------------------- WTPLSQL Testing -- + procedure tl_drop_db_object + (in_pname in varchar2, + in_ptype in varchar2) + is + l_sql_txt varchar2(4000); + begin + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'drop ' || in_ptype || ' ' || in_pname; + wt_assert.raises + (msg_in => 'drop ' || in_ptype || ' ' || in_pname + ,check_call_in => l_sql_txt + ,against_exc_in => ''); + wt_assert.objnotexists ( + msg_in => in_pname || ' ' || in_ptype, + obj_owner_in => g_current_user, + obj_name_in => upper(in_pname), + obj_type_in => upper(in_ptype)); + end tl_drop_db_object; +--==============================================================-- + -------------------------------------- WTPLSQL Testing -- + procedure tl_count_plsql_profiler_recs + (in_test_run_id in number + ,in_expected_count in number) + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Number of plsql_profiler_runs (' || in_test_run_id || ')' + ,check_query_in => 'select count(*) from plsql_profiler_runs' || + ' where runid = ' || in_test_run_id + ,against_value_in => in_expected_count); + wt_assert.eqqueryvalue + (msg_in => 'Number of plsql_profiler_units (' || in_test_run_id || ')' + ,check_query_in => 'select count(*) from plsql_profiler_units' || + ' where runid = ' || in_test_run_id + ,against_value_in => in_expected_count); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Number of plsql_profiler_data (' || in_test_run_id || ')' + ,check_query_in => 'select count(*) from plsql_profiler_data' || + ' where runid = ' || in_test_run_id + ,against_value_in => in_expected_count); + end tl_count_plsql_profiler_recs; +--==============================================================-- + -------------------------------------- WTPLSQL Testing -- + procedure tl_insert_plsql_profiler_recs + (in_test_run_id in number + ,in_run_date_offset in number default 0) + is + l_sql_txt varchar2(4000); + begin + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'insert into plsql_profiler_runs (runid, run_date)' || + ' values (' || in_test_run_id || + ', sysdate + ' || in_run_date_offset || ')'; + wt_assert.raises ( + msg_in => 'insert plsql_profiler_runs (' || in_test_run_id || ')', + check_call_in => l_sql_txt, + against_exc_in => ''); + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'insert into plsql_profiler_units (runid, unit_number, total_time)' || + ' values (' || in_test_run_id || ', ' || in_test_run_id || ', 0)'; + wt_assert.raises ( + msg_in => 'insert plsql_profiler_units (' || in_test_run_id || ')', + check_call_in => l_sql_txt, + against_exc_in => ''); + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'insert into plsql_profiler_data (runid, unit_number, line#)' || + ' values (' || in_test_run_id || ', ' || in_test_run_id || ', 0)'; + wt_assert.raises ( + msg_in => 'insert plsql_profiler_data (RUNID: ' || in_test_run_id || ')', + check_call_in => l_sql_txt, + against_exc_in => ''); + commit; + end tl_insert_plsql_profiler_recs; +--==============================================================-- + -------------------------------------- WTPLSQL Testing -- + procedure tl_delete_plsql_profiler_recs + (in_test_run_id in number) + is + l_sql_txt varchar2(4000); + begin + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'delete from plsql_profiler_data' || + ' where runid = ' || in_test_run_id; + wt_assert.raises ( + msg_in => 'delete plsql_profiler_data (' || in_test_run_id || ')', + check_call_in => l_sql_txt, + against_exc_in => ''); + wt_assert.isnotnull ( + msg_in => 'plsql_profiler_data rows deleted', + check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'delete from plsql_profiler_units' || + ' where runid = ' || in_test_run_id; + wt_assert.raises ( + msg_in => 'delete plsql_profiler_units (' || in_test_run_id || ')', + check_call_in => l_sql_txt, + against_exc_in => ''); + wt_assert.isnotnull ( + msg_in => 'plsql_profiler_units rows deleted', + check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'delete from plsql_profiler_runs' || + ' where runid = ' || in_test_run_id; + wt_assert.raises ( + msg_in => 'delete plsql_profiler_runs (' || in_test_run_id || ')', + check_call_in => l_sql_txt, + against_exc_in => ''); + wt_assert.isnotnull ( + msg_in => 'plsql_profiler_runs rows deleted', + check_this_in => SQL%ROWCOUNT); + commit; + end tl_delete_plsql_profiler_recs; +--==============================================================-- + -------------------------------------- WTPLSQL Testing -- + procedure tl_insert_test_runs + (in_test_run_id in NUMBER + ,in_runner_name in varchar2) + is + l_sql_txt varchar2(4000); + begin + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'insert into wt_test_runs' || + ' (id, start_dtm, test_runner_id)' || + ' values (' || in_test_run_id || ', sysdate, ' || + wt_test_runner.dim_id(g_current_user + ,in_runner_name) || ')'; + wt_assert.raises ( + msg_in => 'Insert wt_test_runs (' || in_test_run_id || ')', + check_call_in => l_sql_txt, + against_exc_in => ''); + wt_assert.eqqueryvalue ( + msg_in => 'wt_test_runs (' || in_test_run_id || ') Count', + check_query_in => 'select count(*) from wt_test_runs' || + ' where id = ' || in_test_run_id, + against_value_in => 1); + commit; + end tl_insert_test_runs; +--==============================================================-- + -------------------------------------- WTPLSQL Testing -- + procedure tl_delete_test_runs + (in_test_run_id in NUMBER) + is + l_sql_txt varchar2(4000); + begin + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'delete from wt_test_runs where id = ' || in_test_run_id; + wt_assert.raises ( + msg_in => 'Delete wt_test_runs (' || in_test_run_id || ')', + check_call_in => l_sql_txt, + against_exc_in => ''); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'wt_test_runs rows deleted', + check_this_in => SQL%ROWCOUNT); + wt_assert.eqqueryvalue ( + msg_in => 'wt_test_runs (' || in_test_run_id || ') Count', + check_query_in => 'select count(*) from wt_test_runs' || + ' where id = ' || in_test_run_id, + against_value_in => 0); + commit; + end tl_delete_test_runs; +--==============================================================-- + -------------------------------------- WTPLSQL Testing -- + procedure tl_insert_wt_profiles + (in_rec in wt_profiles%ROWTYPE) + is + l_sqlerrm varchar2(4000); + begin + -------------------------------------- WTPLSQL Testing -- + begin + insert into wt_profiles values in_rec; + l_sqlerrm := SQLERRM; + commit; + exception when others then + l_sqlerrm := SQLERRM; + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'Insert wt_profiles (' || in_rec.test_run_id || + ',' || in_rec.line || ')', + check_this_in => l_sqlerrm, + against_this_in => 'ORA-0000: normal, successful completion'); + wt_assert.eqqueryvalue ( + msg_in => 'wt_profiles (' || in_rec.test_run_id || + ',' || in_rec.line || ') Count', + check_query_in => 'select count(*) from wt_profiles' || + ' where test_run_id = ' || in_rec.test_run_id || + ' and line = ' || in_rec.line, + against_value_in => 1); + end tl_insert_wt_profiles; +--==============================================================-- + -------------------------------------- WTPLSQL Testing -- + procedure tl_delete_wt_profiles + (in_test_run_id in NUMBER) + is + l_sql_txt varchar2(4000); + begin + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'delete from wt_profiles where test_run_id = ' || + in_test_run_id; + wt_assert.raises ( + msg_in => 'Delete wt_profiles (' || in_test_run_id || ')', + check_call_in => l_sql_txt, + against_exc_in => ''); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'wt_profiles rows deleted', + check_this_in => SQL%ROWCOUNT); + wt_assert.eqqueryvalue ( + msg_in => 'wt_profiles (' || in_test_run_id || ') Count', + check_query_in => 'select count(*) from wt_profiles' || + ' where test_run_id = ' || in_test_run_id, + against_value_in => 0); + commit; + end tl_delete_wt_profiles; +--==============================================================-- + -------------------------------------- WTPLSQL Testing -- + procedure tl_insert_dbout_runs + (in_test_run_id in NUMBER) + is + l_sql_txt varchar2(4000); + begin + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'insert into wt_dbout_runs' || + ' (test_run_id, profiler_runid)' || + ' values (' || in_test_run_id || + ', ' || in_test_run_id || ')'; + wt_assert.raises ( + msg_in => 'Insert wt_dbout_runs (' || in_test_run_id || ')', + check_call_in => l_sql_txt, + against_exc_in => ''); + wt_assert.eqqueryvalue ( + msg_in => 'wt_dbout_runs (' || in_test_run_id || ') Count', + check_query_in => 'select count(*) from wt_dbout_runs' || + ' where test_run_id = ' || in_test_run_id, + against_value_in => 1); + commit; + end tl_insert_dbout_runs; +--==============================================================-- + -------------------------------------- WTPLSQL Testing -- + procedure tl_delete_dbout_runs + (in_test_run_id in NUMBER) + is + l_sql_txt varchar2(4000); + begin + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'delete from wt_dbout_runs where test_run_id = ' || + in_test_run_id; + wt_assert.raises ( + msg_in => 'Delete wt_dbout_runs (' || in_test_run_id || ')', + check_call_in => l_sql_txt, + against_exc_in => ''); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'wt_dbout_runs rows deleted', + check_this_in => SQL%ROWCOUNT); + wt_assert.eqqueryvalue ( + msg_in => 'wt_dbout_runs (' || in_test_run_id || ') Count', + check_query_in => 'select count(*) from wt_dbout_runs' || + ' where test_run_id = ' || in_test_run_id, + against_value_in => 0); + commit; + end tl_delete_dbout_runs; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +------------------------------------------------------------ +-- Return DBMS_PROFILER specific error messages +function get_error_msg + (retnum_in in binary_integer) + return varchar2 +is + l_msg_prefix varchar2(50) := 'DBMS_PROFILER Error: '; +begin + case retnum_in + when dbms_profiler.error_param then return l_msg_prefix || + 'A subprogram was called with an incorrect parameter.'; + when dbms_profiler.error_io then return l_msg_prefix || + 'Data flush operation failed.' || + ' Check whether the profiler tables have been created,' || + ' are accessible, and that there is adequate space.'; + when dbms_profiler.error_version then return l_msg_prefix || + 'There is a mismatch between package and database implementation.' || + ' Oracle returns this error if an incorrect version of the' || + ' DBMS_PROFILER package is installed, and if the version of the' || + ' profiler package cannot work with this database version.'; + else return l_msg_prefix || + 'Unknown error number ' || retnum_in; + end case; +end get_error_msg; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_get_error_msg + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Get Error Messages'; + wt_assert.isnotnull ( + msg_in => 'ERROR_PARAM Test 1', + check_this_in => get_error_msg(dbms_profiler.error_param)); + wt_assert.this ( + msg_in => 'ERROR_PARAM Test 2', + check_this_in => regexp_like(get_error_msg(dbms_profiler.error_param) + ,'incorrect parameter','i')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'ERROR_IO Test 1', + check_this_in => get_error_msg(dbms_profiler.error_io)); + wt_assert.this ( + msg_in => 'ERROR_IO Test 2', + check_this_in => regexp_like(get_error_msg(dbms_profiler.error_io) + ,'Data flush operation','i')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'ERROR_VERSION Test 1', + check_this_in => get_error_msg(dbms_profiler.error_version)); + wt_assert.this ( + msg_in => 'ERROR_VERSION Test 2', + check_this_in => regexp_like(get_error_msg(dbms_profiler.error_version) + ,'incorrect version','i')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'Unknown Error Test 1', + check_this_in => get_error_msg(-9999)); + wt_assert.this ( + msg_in => 'Unknown Error Test 2', + check_this_in => regexp_like(get_error_msg(-9999) + ,'Unknown error','i')); + end t_get_error_msg; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function clear_plsql_profiler_recs + (in_test_run_id in number default NULL) + return number +is + num_recs number := 0; +begin + for buff in ( + select runid + from plsql_profiler_runs + where ( in_test_run_id is null + and run_date < sysdate -1 ) + or runid in ( + select profiler_runid from wt_dbout_runs + where test_run_id = in_test_run_id ) ) + loop + delete from plsql_profiler_data where runid = buff.runid; + num_recs := num_recs + SQL%ROWCOUNT; + delete from plsql_profiler_units where runid = buff.runid; + num_recs := num_recs + SQL%ROWCOUNT; + delete from plsql_profiler_runs where runid = buff.runid; + num_recs := num_recs + SQL%ROWCOUNT; + end loop; + return num_recs; +end clear_plsql_profiler_recs; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_clear_plsql_profiler_recs + is + c_test_run_id constant number := -99; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Delete PL/SQL Profiler Records Happy Path 1'; + begin + wt_assert.eq ( + msg_in => 'Run clear_plsql_profiler_recs', + check_this_in => clear_plsql_profiler_recs, + against_this_in => 0); + exception when others then + wt_assert.isnull( + msg_in => 'Run clear_plsql_profiler_recs Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Delete PL/SQL Profiler Records Happy Path 2'; + tl_insert_test_runs(c_test_run_id, 'Delete Profiler Test 2'); + tl_insert_dbout_runs(c_test_run_id); + tl_insert_plsql_profiler_recs(c_test_run_id); + tl_count_plsql_profiler_recs(c_test_run_id, 1); + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'Run clear_plsql_profiler_recs(' || c_test_run_id || ')', + check_this_in => clear_plsql_profiler_recs(c_test_run_id), + against_this_in => 3); + exception when others then + wt_assert.isnull( + msg_in => 'Run clear_plsql_profiler_recs(' || c_test_run_id || ') Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + tl_count_plsql_profiler_recs(c_test_run_id, 0); + tl_delete_dbout_runs(c_test_run_id); + tl_delete_test_runs(c_test_run_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Delete PL/SQL Profiler Records Happy Path 3'; + tl_insert_test_runs(c_test_run_id, 'Delete Profiler Test 3'); + tl_insert_dbout_runs(c_test_run_id); + tl_insert_plsql_profiler_recs(c_test_run_id, -2); + tl_count_plsql_profiler_recs(c_test_run_id, 1); + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'Run clear_plsql_profiler_recs', + check_this_in => clear_plsql_profiler_recs, + against_this_in => 3); + exception when others then + wt_assert.isnull( + msg_in => 'Run clear_plsql_profiler_recs Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + tl_count_plsql_profiler_recs(c_test_run_id, 0); + tl_delete_dbout_runs(c_test_run_id); + tl_delete_test_runs(c_test_run_id); + end t_clear_plsql_profiler_recs; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function load_ignr_aa + (in_dbout_owner in varchar2 + ,in_dbout_name in varchar2 + ,in_dbout_type in varchar2 + ,in_trigger_offset in number) + return ignr_aa_type +is + l_ignr_aa ignr_aa_type; + cursor c_find_begin is + select line + ,instr(text,'--%WTPLSQL_begin_ignore_lines%--') col + from dba_source + where owner = in_dbout_owner + and name = in_dbout_name + and type = in_dbout_type + and text like '%--\%WTPLSQL_begin_ignore_lines\%--%' escape '\' + order by line; + buff_find_begin c_find_begin%ROWTYPE; + cursor c_find_end (in_line in number, in_col in number) is + with q1 as ( + select line + ,instr(text,'--%WTPLSQL_end_ignore_lines%--') col + from dba_source + where owner = in_dbout_owner + and name = in_dbout_name + and type = in_dbout_type + and line >= in_line + and text like '%--\%WTPLSQL_end_ignore_lines\%--%' escape '\' + ) + select line + ,col + from q1 + where line > in_line + or ( line = in_line + and col > in_col) + order by line + ,col; + buff_find_end c_find_end%ROWTYPE; +begin + open c_find_begin; + loop + fetch c_find_begin into buff_find_begin; + exit when c_find_begin%NOTFOUND; + open c_find_end (buff_find_begin.line, buff_find_begin.col); + fetch c_find_end into buff_find_end; + if c_find_end%NOTFOUND + then + select max(line) + into buff_find_end.line + from dba_source + where owner = in_dbout_owner + and name = in_dbout_name + and type = in_dbout_type; + end if; + close c_find_end; + for i in buff_find_begin.line + in_trigger_offset .. + buff_find_end.line + in_trigger_offset + loop + l_ignr_aa(i) := 'X'; + end loop; + end loop; + close c_find_begin; + return l_ignr_aa; +end load_ignr_aa; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_load_ignr_aa + is + l_ignr_aa ignr_aa_type; + l_recSAVE wt_dbout_runs%ROWTYPE; + l_pname varchar2(128) := 'WT_PROFILE_LOAD_IGNR'; + -------------------------------------- WTPLSQL Testing -- + procedure run_load_ignr is begin + l_recSAVE := g_rec; + l_ignr_aa := load_ignr_aa(g_current_user + ,l_pname + ,'PACKAGE BODY' + ,0); + g_rec := l_recSAVE; + end run_load_ignr; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Load Ignr Setup'; + tl_compile_db_object + (in_ptype => 'package' + ,in_pname => l_pname + ,in_source => ' l_junk number; end ' || l_pname); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Load Ignr Happy Path 1'; + tl_compile_db_object + (in_ptype => 'package body' + ,in_pname => l_pname + ,in_source => 'begin' || CHR(10) || + ' l_junk := 1; end ' || l_pname ); + run_load_ignr; + wt_assert.eq + (msg_in => 'l_ignr_aa.COUNT' + ,check_this_in => l_ignr_aa.COUNT + ,against_this_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Load Ignr Happy Path 2'; + tl_compile_db_object + (in_ptype => 'package body' + ,in_pname => l_pname + ,in_source => + 'begin' || CHR(10) || -- Line 2 + ' --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) || -- Line 3 + ' l_junk := 1;' || CHR(10) || -- Line 4 + 'end ' || l_pname ); -- Line 5 + run_load_ignr; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'l_ignr_aa.COUNT' + ,check_this_in => l_ignr_aa.COUNT + ,against_this_in => 3); + for i in 3 .. 5 + loop + wt_assert.eq + (msg_in => 'l_ignr_aa.exists(' || i || ')' + ,check_this_in => l_ignr_aa.exists(i) + ,against_this_in => TRUE); + end loop; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Load Ignr Happy Path 3'; + tl_compile_db_object + (in_ptype => 'package body' + ,in_pname => l_pname + ,in_source => + 'begin' || CHR(10) || -- Line 2 + ' l_junk := 1;' || CHR(10) || -- Line 3 + ' --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) || -- Line 4 + ' l_junk := 2;' || CHR(10) || -- Line 5 + ' --%WTPLSQL_end_' || 'ignore_lines%--' || CHR(10) || -- Line 6 + ' l_junk := 3;' || CHR(10) || -- Line 7 + 'end ' || l_pname ); -- Line 8 + run_load_ignr; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'l_ignr_aa.COUNT' + ,check_this_in => l_ignr_aa.COUNT + ,against_this_in => 3); + for i in 4 .. 6 + loop + wt_assert.eq + (msg_in => 'l_ignr_aa.exists(' || i || ')' + ,check_this_in => l_ignr_aa.exists(i) + ,against_this_in => TRUE); + end loop; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Load Ignr Happy Path 4'; + tl_compile_db_object + (in_ptype => 'package body' + ,in_pname => l_pname + ,in_source => + 'begin' || CHR(10) || -- Line 2 + ' l_junk := 1;' || CHR(10) || -- Line 3 + ' --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) || -- Line 4 + ' l_junk := 2;' || CHR(10) || -- Line 5 + ' --%WTPLSQL_end_' || 'ignore_lines%--' || CHR(10) || -- Line 6 + ' l_junk := 3;' || CHR(10) || -- Line 7 + ' --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) || -- Line 8 + ' l_junk := 4;' || CHR(10) || -- Line 9 + 'end ' || l_pname ); -- Line 10 + run_load_ignr; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'l_ignr_aa.COUNT' + ,check_this_in => l_ignr_aa.COUNT + ,against_this_in => 6); + for i in 4 .. 6 + loop + wt_assert.eq + (msg_in => 'l_ignr_aa.exists(' || i || ')' + ,check_this_in => l_ignr_aa.exists(i) + ,against_this_in => TRUE); + end loop; + -------------------------------------- WTPLSQL Testing -- + for i in 8 .. 10 + loop + wt_assert.eq + (msg_in => 'l_ignr_aa.exists(' || i || ')' + ,check_this_in => l_ignr_aa.exists(i) + ,against_this_in => TRUE); + end loop; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Load Ignr Sad Path 1'; + tl_compile_db_object + (in_ptype => 'package body' + ,in_pname => l_pname + ,in_source => + 'begin' || CHR(10) || -- Line 2 + ' --%WTPLSQL_end_' || 'ignore_lines%--' || CHR(10) || -- Line 3 + ' l_junk := 4;' || CHR(10) || -- Line 4 + 'end ' || l_pname ); -- Line 5 + run_load_ignr; + wt_assert.eq + (msg_in => 'l_ignr_aa.COUNT' + ,check_this_in => l_ignr_aa.COUNT + ,against_this_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Load Ignr Sad Path 2'; + tl_compile_db_object + (in_ptype => 'package body' + ,in_pname => l_pname + ,in_source => + 'begin' || CHR(10) || -- Line 2 + ' l_junk := 1;' || CHR(10) || -- Line 3 + ' --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) || -- Line 4 + ' l_junk := 2;' || CHR(10) || -- Line 5 + ' --%WTPLSQL_end_' || 'ignore_lines%--' || CHR(10) || -- Line 6 + ' l_junk := 3;' || CHR(10) || -- Line 7 + ' --%WTPLSQL_end_' || 'ignore_lines%--' || CHR(10) || -- Line 8 + ' l_junk := 4;' || CHR(10) || -- Line 9 + 'end ' || l_pname ); -- Line 10 + run_load_ignr; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'l_ignr_aa.COUNT' + ,check_this_in => l_ignr_aa.COUNT + ,against_this_in => 3); + for i in 4 .. 6 + loop + wt_assert.eq + (msg_in => 'l_ignr_aa.exists(' || i || ')' + ,check_this_in => l_ignr_aa.exists(i) + ,against_this_in => TRUE); + end loop; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Load Ignr Sad Path 3'; + tl_compile_db_object + (in_ptype => 'package body' + ,in_pname => l_pname + ,in_source => + 'begin' || CHR(10) || -- Line 2 + ' l_junk := 1;' || CHR(10) || -- Line 3 + ' --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) || -- Line 4 + ' l_junk := 2;' || CHR(10) || -- Line 5 + ' --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) || -- Line 6 + ' l_junk := 3;' || CHR(10) || -- Line 7 + ' --%WTPLSQL_end_' || 'ignore_lines%--' || CHR(10) || -- Line 8 + ' l_junk := 4;' || CHR(10) || -- Line 9 + 'end ' || l_pname ); -- Line 10 + run_load_ignr; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'l_ignr_aa.COUNT' + ,check_this_in => l_ignr_aa.COUNT + ,against_this_in => 5); + for i in 4 .. 8 + loop + wt_assert.eq + (msg_in => 'l_ignr_aa.exists(' || i || ')' + ,check_this_in => l_ignr_aa.exists(i) + ,against_this_in => TRUE); + end loop; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Load Ignr Teardown'; + tl_drop_db_object(l_pname, 'package'); + end t_load_ignr_aa; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure add_dbout_run + (in_profiles_rec in wt_profiles%ROWTYPE) +is +begin + -- If this raises an exception, it must be done before any other values + -- are set because they will not be rolled-back after the "raise". + case in_profiles_rec.status + when 'EXEC' then + g_rec.executed_lines := nvl(g_rec.executed_lines,0) + 1; + -- Only count the executed time. + g_rec.exec_min_usec := least(nvl(g_rec.exec_min_usec,999999999) + ,in_profiles_rec.exec_min_usec); + g_rec.exec_max_usec := greatest(nvl(g_rec.exec_max_usec,0) + ,in_profiles_rec.exec_max_usec); + g_rec.exec_tot_usec := nvl(g_rec.exec_tot_usec,0) + + ( in_profiles_rec.exec_tot_usec / + in_profiles_rec.exec_cnt ); + when 'IGNR' then + g_rec.ignored_lines := nvl(g_rec.ignored_lines,0) + 1; + when 'EXCL' then + g_rec.excluded_lines := nvl(g_rec.excluded_lines,0) + 1; + when 'NOTX' then + g_rec.notexec_lines := nvl(g_rec.notexec_lines,0) + 1; + when 'UNKN' then + g_rec.unknown_lines := nvl(g_rec.unknown_lines,0) + 1; + else + raise_application_error(-20011, 'Unknown Profile status "' || + in_profiles_rec.status || '"'); + end case; + g_rec.profiled_lines := nvl(g_rec.profiled_lines,0) + 1; +end add_dbout_run; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_add_dbout_run + is + l_recSAVE wt_dbout_runs%ROWTYPE; + l_recTEST wt_dbout_runs%ROWTYPE; + l_profileTEST wt_profiles%ROWTYPE; + l_sqlerrm varchar2(4000); + begin + wt_assert.g_testcase := 'Add Profile Testing'; + -------------------------------------- WTPLSQL Testing -- + -- Overview: + -- 1) Save results in temporary variables + -- 2) Clear add_dbout_run variables + -- 3) Call add_dbout_run several times with test data. + -- 4) Capture test results + -- 5) Restore saved results + -- 6) Confirm the test results using WT_ASSERT. + -------------------------------------- WTPLSQL Testing -- + l_recSAVE := g_rec; + g_rec := l_recTEST; + l_profileTEST.test_run_id := -20; + l_profileTEST.exec_min_usec := 10; + l_profileTEST.exec_max_usec := 20; + l_profileTEST.exec_tot_usec := 30; + l_profileTEST.exec_cnt := 1; + -------------------------------------- WTPLSQL Testing -- + l_profileTEST.status := 'EXEC'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'EXEC'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'EXEC'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'EXEC'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'EXEC'; + add_dbout_run(l_profileTEST); + -------------------------------------- WTPLSQL Testing -- + l_profileTEST.status := 'IGNR'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'IGNR'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'IGNR'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'IGNR'; + add_dbout_run(l_profileTEST); + -------------------------------------- WTPLSQL Testing -- + l_profileTEST.status := 'NOTX'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'NOTX'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'NOTX'; + add_dbout_run(l_profileTEST); + -------------------------------------- WTPLSQL Testing -- + l_profileTEST.status := 'EXCL'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'EXCL'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'UNKN'; + add_dbout_run(l_profileTEST); + -------------------------------------- WTPLSQL Testing -- + l_profileTEST.status := 'ABC'; + begin + add_dbout_run(l_profileTEST); + l_sqlerrm := SQLERRM; + exception when others then + l_sqlerrm := SQLERRM; + end; + l_recTEST := g_rec; + g_rec := l_recSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_recTEST.profiled_lines', + check_this_in => l_recTEST.profiled_lines, + against_this_in => 15); + wt_assert.eq ( + msg_in => 'l_recTEST.exec_min_usec', + check_this_in => l_recTEST.exec_min_usec, + against_this_in => 10); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_recTEST.exec_max_usec', + check_this_in => l_recTEST.exec_max_usec, + against_this_in => 20); + wt_assert.eq ( + msg_in => 'l_recTEST.exec_tot_usec', + check_this_in => l_recTEST.exec_tot_usec, + against_this_in => 150); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_recTEST.executed_lines', + check_this_in => l_recTEST.executed_lines, + against_this_in => 5); + wt_assert.eq ( + msg_in => 'l_recTEST.ignored_lines', + check_this_in => l_recTEST.ignored_lines, + against_this_in => 4); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_recTEST.notexec_lines', + check_this_in => l_recTEST.notexec_lines, + against_this_in => 3); + wt_assert.eq ( + msg_in => 'l_recTEST.excluded_lines', + check_this_in => l_recTEST.excluded_lines, + against_this_in => 2); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_recTEST.unknown_lines', + check_this_in => l_recTEST.unknown_lines, + against_this_in => 1); + wt_assert.eq ( + msg_in => 'Add Result Sad Path 1', + check_this_in => 'ORA-20011: Unknown Profile status "ABC"', + against_this_in => l_sqlerrm); + end t_add_dbout_run; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + +------------------------------------------------------------ +function set_prof_status + (in_prof_rec wt_profiles%ROWTYPE + ,in_max_line number) + return varchar2 +is +begin + if in_prof_rec.exec_cnt > 0 + then + -- Found Executed Statement + return 'EXEC'; + end if; + if in_prof_rec.exec_cnt = 0 + and in_prof_rec.exec_tot_usec = 0 + then + -- Check for declaration if Not Executed + if regexp_like(in_prof_rec.text, '^[[:space:]]*' || + '(FUNCTION|PROCEDURE|PACKAGE|TYPE|TRIGGER)' || + '[[:space:]]', 'i') + then + -- Exclude declarations if Not Executed + return 'EXCL'; + elsif in_prof_rec.line = in_max_line + AND regexp_like(in_prof_rec.text, 'END', 'i') + then + return 'EXCL'; + -- ^ - Anchored to start of line + -- [[:space:]]* - Zero or more spaces + -- [Ee][Nn][Dd] - casefolded "end" + -- ( [[:space:]]* - Zero or more spaces + -- | - OR + -- [[:space:]]+ - One or more spaces followed by + -- [A-Za-z0-9_$#]{1,128}) - String of 1 to 128 characters + -- ) + -- [[:space:]]* - Zero or more spaces + -- [;] - Semicolon character + -- $ - Anchored to end of line + elsif regexp_like(in_prof_rec.text, '^[[:space:]]*[Ee][Nn][Dd]([[:space:]]*|[[:space:]]+[A-Za-z0-9_$#]{1,128})[[:space:]]*[;]$') + then + return 'EXCL'; + else + -- Found Not Executed Statement + return 'NOTX'; + end if; + end if; + -- Everything else is unknown + return 'UNKN'; +end set_prof_status; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_set_prof_status + is + l_prof_rec wt_profiles%ROWTYPE; + begin + wt_assert.g_testcase := 'Set Prof Status Happy Path'; + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := 1; + l_prof_rec.exec_tot_usec := 1; + l_prof_rec.text := ' function set_prof_status_testing'; + l_prof_rec.line := 3; + wt_assert.eq( + msg_in => 'Executable Status 1', + check_this_in => set_prof_status(l_prof_rec, 10), + against_this_in => 'EXEC'); + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := 1; + l_prof_rec.exec_tot_usec := 1; + l_prof_rec.text := ' end set_prof_status_testing;'; + l_prof_rec.line := 3; + wt_assert.eq( + msg_in => 'Executable Status 2', + check_this_in => set_prof_status(l_prof_rec, 10), + against_this_in => 'EXEC'); + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := 0; + l_prof_rec.exec_tot_usec := 0; + l_prof_rec.text := ' function set_prof_status_testing'; + l_prof_rec.line := 3; + wt_assert.eq( + msg_in => 'Excluded Status 1', + check_this_in => set_prof_status(l_prof_rec, 10), + against_this_in => 'EXCL'); + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := 0; + l_prof_rec.exec_tot_usec := 0; + l_prof_rec.text := ' end set_prof_status_testing;'; + l_prof_rec.line := 10; + wt_assert.eq( + msg_in => 'Excluded Status 2', + check_this_in => set_prof_status(l_prof_rec, 10), + against_this_in => 'EXCL'); + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := 0; + l_prof_rec.exec_tot_usec := 0; + l_prof_rec.text := ' set_prof_status_testing;'; + l_prof_rec.line := 3; + wt_assert.eq( + msg_in => 'Not Executed Status 1', + check_this_in => set_prof_status(l_prof_rec, 10), + against_this_in => 'NOTX'); + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := 0; + l_prof_rec.exec_tot_usec := 0; + l_prof_rec.text := ' end set_prof_status_testing;'; + l_prof_rec.line := 3; + wt_assert.eq( + msg_in => 'Excluded Status 2', + check_this_in => set_prof_status(l_prof_rec, 10), + against_this_in => 'EXCL'); + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := 0; + l_prof_rec.exec_tot_usec := 1; + l_prof_rec.text := ' function set_prof_status_testing'; + l_prof_rec.line := 4; + wt_assert.eq( + msg_in => 'Unknown Status 1', + check_this_in => set_prof_status(l_prof_rec, 10), + against_this_in => 'UNKN'); + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := 0; + l_prof_rec.exec_tot_usec := 1; + l_prof_rec.text := ' end set_prof_status_testing;'; + l_prof_rec.line := 4; + wt_assert.eq( + msg_in => 'Unknown Status 2', + check_this_in => set_prof_status(l_prof_rec, 10), + against_this_in => 'UNKN'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Set Prof Status Sad Path'; + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := NULL; + l_prof_rec.exec_tot_usec := NULL; + l_prof_rec.text := NULL; + l_prof_rec.line := NULL; + wt_assert.eq( + msg_in => 'NULL Profiler Record', + check_this_in => set_prof_status(l_prof_rec, 10), + against_this_in => 'UNKN'); + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := 1; + l_prof_rec.exec_tot_usec := 1; + l_prof_rec.text := ' function set_prof_status_testing'; + l_prof_rec.line := 3; + wt_assert.eq( + msg_in => 'NULL Max Lines', + check_this_in => set_prof_status(l_prof_rec, NULL), + against_this_in => 'EXEC'); + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := NULL; + l_prof_rec.exec_tot_usec := NULL; + l_prof_rec.text := NULL; + l_prof_rec.line := NULL; + wt_assert.eq( + msg_in => 'All inputs NULL', + check_this_in => set_prof_status(l_prof_rec, NULL), + against_this_in => 'UNKN'); + end t_set_prof_status; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure insert_wt_profile + (in_dbout_owner in varchar2 + ,in_dbout_name in varchar2 + ,in_dbout_type in varchar2) +is + l_ignr_aa ignr_aa_type; + l_prof_rec wt_profiles%ROWTYPE; + l_max_line number; +begin + l_prof_rec.test_run_id := g_rec.test_run_id; + -- Capture load_ignr_aa array + l_ignr_aa := load_ignr_aa(in_dbout_owner + ,in_dbout_name + ,in_dbout_type + ,g_rec.trigger_offset); + -- This will not RAISE NO_DATA_FOUND because it uses a GROUP FUNCTION. + select max(ppd.line#) into l_max_line + from plsql_profiler_units ppu + join plsql_profiler_data ppd + on ppd.unit_number = ppu.unit_number + and ppd.runid = g_rec.profiler_runid + where ppu.unit_owner = in_dbout_owner + and ppu.unit_name = in_dbout_name + and ppu.unit_type = in_dbout_type + and ppu.runid = g_rec.profiler_runid; + for buf1 in ( + select src.line + ,ppd.total_occur + ,ppd.total_time + ,ppd.min_time + ,ppd.max_time + ,src.text + from plsql_profiler_units ppu + join plsql_profiler_data ppd + on ppd.unit_number = ppu.unit_number + and ppd.runid = g_rec.profiler_runid + join dba_source src + on src.line = ppd.line# + g_rec.trigger_offset + and src.owner = in_dbout_owner + and src.name = in_dbout_name + and src.type = in_dbout_type + where ppu.unit_owner = in_dbout_owner + and ppu.unit_name = in_dbout_name + and ppu.unit_type = in_dbout_type + and ppu.runid = g_rec.profiler_runid ) + loop + l_prof_rec.line := buf1.line; + l_prof_rec.exec_cnt := buf1.total_occur; + l_prof_rec.exec_tot_usec := buf1.total_time/1000; + l_prof_rec.exec_min_usec := buf1.min_time/1000; + l_prof_rec.exec_max_usec := buf1.max_time/1000; + l_prof_rec.text := buf1.text; + if l_ignr_aa.EXISTS(l_prof_rec.line) + then + -- Found Statement to Ignore + l_prof_rec.status := 'IGNR'; + else + l_prof_rec.status := set_prof_status(l_prof_rec, l_max_line); + end if; + add_dbout_run(l_prof_rec); -- Updates g_rec + insert into wt_profiles values l_prof_rec; + end loop; + -- Update Aggregates in g_rec + g_rec.coverage_pct := calc_pct_coverage(g_rec.test_run_id); + if nvl(g_rec.executed_lines,0) != 0 + then + g_rec.exec_avg_usec := round(g_rec.exec_tot_usec / g_rec.executed_lines, 2); + end if; +end insert_wt_profile; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_insert_wt_profile + is + units_rec plsql_profiler_units%ROWTYPE; + data_rec plsql_profiler_data%ROWTYPE; + l_recSAVE wt_dbout_runs%ROWTYPE; + l_recTEST wt_dbout_runs%ROWTYPE; + l_recNULL wt_dbout_runs%ROWTYPE; + c_test_run_id constant number := -97; + l_pname varchar2(128) := 'WT_PROFILE_INSERT_DBOUT'; + l_sqlerrm varchar2(4000); + l_err_stack varchar2(32000); + -------------------------------------- WTPLSQL Testing -- + procedure insert_plsql_profiler_data + (in_line# in number + ,in_total_occur in number + ,in_total_time in number) + is + begin + data_rec.line# := in_line#; + data_rec.total_occur := in_total_occur; + data_rec.total_time := in_total_time; + -------------------------------------- WTPLSQL Testing -- + begin + insert into plsql_profiler_data values data_rec; + commit; + l_sqlerrm := SQLERRM; + exception when others then + l_sqlerrm := SQLERRM; + end; + wt_assert.eq ( + msg_in => 'insert plsql_profiler_data (LINE#: ' || data_rec.line#|| ')', + check_this_in => l_sqlerrm, + against_this_in => 'ORA-0000: normal, successful completion'); + end insert_plsql_profiler_data; + -------------------------------------- WTPLSQL Testing -- + procedure test_dbout_profiler + (in_line# in number + ,in_col_name in varchar2 + ,in_value in varchar2) + is + begin + wt_assert.eqqueryvalue + (msg_in => 'wt_profiles line ' || in_line# || + ', column ' || in_col_name + ,check_query_in => 'select ' || in_col_name || + ' from wt_profiles' || + ' where test_run_id = ' || c_test_run_id || + ' and line = ' || in_line# + ,against_value_in => in_value); + end test_dbout_profiler; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Insert DBOUT Profile Setup'; + tl_compile_db_object + (in_ptype => 'package' + ,in_pname => l_pname + ,in_source => ' l_junk number; end ' || l_pname ); + -------------------------------------- WTPLSQL Testing -- + tl_compile_db_object + (in_ptype => 'package body' + ,in_pname => l_pname + ,in_source => + 'begin' || CHR(10) || -- Line 2 + ' l_junk := 1;' || CHR(10) || -- Line 3 + ' --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) || -- Line 4 + ' l_junk := 2;' || CHR(10) || -- Line 5 + ' --%WTPLSQL_end_' || 'ignore_lines%--' || CHR(10) || -- Line 6 + ' if 0 = 1 then' || CHR(10) || -- Line 7 + ' l_junk := 3;' || CHR(10) || -- Line 8 + ' end if;' || CHR(10) || -- Line 9 + 'end ' || l_pname ); -- Line 10 + tl_insert_plsql_profiler_recs(c_test_run_id); + tl_count_plsql_profiler_recs(c_test_run_id, 1); + tl_insert_test_runs(c_test_run_id, 'Insert DBOUT Test'); + -------------------------------------- WTPLSQL Testing -- + units_rec.runid := c_test_run_id; + units_rec.unit_number := 1; + units_rec.unit_owner := g_current_user; + units_rec.unit_name := l_pname; + units_rec.unit_type := 'PACKAGE BODY'; + units_rec.total_time := 0; + -------------------------------------- WTPLSQL Testing -- + begin + insert into plsql_profiler_units values units_rec; + commit; + l_err_stack := dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace ; + exception when others then + l_err_stack := dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace ; + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull ( + msg_in => 'insert UNIT 1 into plsql_profiler_units', + check_this_in => l_err_stack); + wt_assert.eqqueryvalue + (msg_in => 'Number of UNIT 1 plsql_profiler_units' + ,check_query_in => 'select count(*) from plsql_profiler_units' || + ' where runid = ' || c_test_run_id || + ' and unit_number = 1' + ,against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + data_rec.runid := c_test_run_id; + data_rec.unit_number := 1; + data_rec.min_time := 0; + data_rec.max_time := 1; + insert_plsql_profiler_data(1, 0, 0); + insert_plsql_profiler_data(2, 0, 1); + insert_plsql_profiler_data(3, 1, 1); + insert_plsql_profiler_data(5, 1, 1); + insert_plsql_profiler_data(7, 1, 1); + insert_plsql_profiler_data(8, 0, 0); + insert_plsql_profiler_data(9, 1, 1); + insert_plsql_profiler_data(10, 0, 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Number of UNIT 1 plsql_profiler_data' + ,check_query_in => 'select count(*) from plsql_profiler_data' || + ' where runid = ' || c_test_run_id || + ' and unit_number = 1' + ,against_value_in => 8); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Insert DBOUT Profile Happy Path'; + l_recSAVE := g_rec; + g_rec.test_run_id := c_test_run_id; + g_rec.profiler_runid := c_test_run_id; + g_rec.trigger_offset := 0; + -------------------------------------- WTPLSQL Testing -- + begin + insert_wt_profile(g_current_user + ,l_pname + ,'PACKAGE BODY'); + l_err_stack := dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace ; + exception when others then + l_err_stack := dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace ; + end; + l_recTEST := g_rec; + g_rec := l_recSAVE; + wt_assert.isnull ( + msg_in => 'insert_wt_profile SQLERRM', + check_this_in => l_err_stack); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'Check Coverage Percent', + check_this_in => l_recTEST.coverage_pct, + against_this_in => 75); + wt_assert.isnotnull ( + msg_in => 'Check Line Execution Average Microseconds', + check_this_in => l_recTEST.exec_avg_usec); + -------------------------------------- WTPLSQL Testing -- + test_dbout_profiler(1, 'STATUS', 'EXCL'); + test_dbout_profiler(1, 'TEXT', 'package body WT_PROFILE_INSERT_DBOUT is' || CHR(10)); + test_dbout_profiler(2, 'STATUS', 'UNKN'); + test_dbout_profiler(2, 'TEXT', 'begin' || CHR(10)); + test_dbout_profiler(3, 'STATUS', 'EXEC'); + test_dbout_profiler(3, 'TEXT', ' l_junk := 1;' || CHR(10)); + test_dbout_profiler(5, 'STATUS', 'IGNR'); + test_dbout_profiler(5, 'TEXT', ' l_junk := 2;' || CHR(10)); + test_dbout_profiler(7, 'STATUS', 'EXEC'); + test_dbout_profiler(7, 'TEXT', ' if 0 = 1 then' || CHR(10)); + test_dbout_profiler(8, 'STATUS', 'NOTX'); + test_dbout_profiler(8, 'TEXT', ' l_junk := 3;' || CHR(10)); + test_dbout_profiler(9, 'STATUS', 'EXEC'); + test_dbout_profiler(9, 'TEXT', ' end if;' || CHR(10)); + test_dbout_profiler(10, 'STATUS', 'EXCL'); + test_dbout_profiler(10, 'TEXT', 'end WT_PROFILE_INSERT_DBOUT;'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Insert DBOUT Profile Teardown'; + tl_delete_wt_profiles(c_test_run_id); + tl_delete_test_runs(c_test_run_id); + tl_delete_plsql_profiler_recs(c_test_run_id); + tl_count_plsql_profiler_recs(c_test_run_id, 0); + tl_drop_db_object(l_pname, 'package'); + end t_insert_wt_profile; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--------------------- +-- Public Procedures +--------------------- + + +------------------------------------------------------------ +function is_profilable -- find_dbout + (in_dbout_owner in varchar2 + ,in_dbout_name in varchar2 + ,in_dbout_type in varchar2) + return boolean +is + cursor c_readable + is + select src.name + from dba_source src + where src.owner = in_dbout_owner + and src.name = in_dbout_name + and src.type = in_dbout_type; + b_readable c_readable%ROWTYPE; + ret_bool boolean; +begin + -- Find the first occurance of any PL/SQL source + open c_readable; + fetch c_readable into b_readable; + ret_bool := c_readable%FOUND; + close c_readable; + return ret_bool; +end is_profilable; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_is_profilable + is + l_pname varchar2(128) := 'WT_PROFILE_FIND_DBOUT'; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_is_profilable Happy Path 1'; + tl_compile_db_object + (in_ptype => 'package' + ,in_pname => l_pname + ,in_source => ' l_junk number;' || CHR(10) || + 'end ' || l_pname ); + tl_compile_db_object + (in_ptype => 'package body' + ,in_pname => l_pname + ,in_source => 'begin' || CHR(10) || + 'l_junk := 1;' || CHR(10) || + 'end ' || l_pname ); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'Check Package' + ,check_this_in => is_profilable(g_current_user, l_pname, 'PACKAGE') + ,against_this_in => TRUE); + wt_assert.eq + (msg_in => 'Check Package Body' + ,check_this_in => is_profilable(g_current_user, l_pname, 'PACKAGE BODY') + ,against_this_in => TRUE); + tl_drop_db_object(l_pname, 'package'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_is_profilable Happy Path 2'; + tl_compile_db_object + (in_ptype => 'procedure' + ,in_pname => l_pname + ,in_source => ' l_junk number;' || CHR(10) || + 'begin' || CHR(10) || + ' l_junk := 1;' || CHR(10) || + 'end ' || l_pname ); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'Check Procedure' + ,check_this_in => is_profilable(g_current_user, l_pname, 'PROCEDURE') + ,against_this_in => TRUE); + tl_drop_db_object(l_pname, 'procedure'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_is_profilable Happy Path 3'; + tl_compile_db_object + (in_ptype => 'type' + ,in_pname => l_pname + ,in_source => ' object(l_junk number' || CHR(10) || + ' ,member procedure test1' || CHR(10) || + ' )' ); + -------------------------------------- WTPLSQL Testing -- + tl_compile_db_object + (in_ptype => 'type body' + ,in_pname => l_pname + ,in_source => 'member procedure test1' || CHR(10) || + 'is' || CHR(10) || + 'begin' || CHR(10) || + ' l_junk := 1;' || CHR(10) || + 'end;' || CHR(10) || + 'end' ); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'Check Type' + ,check_this_in => is_profilable(g_current_user, l_pname, 'TYPE') + ,against_this_in => TRUE); + wt_assert.eq + (msg_in => 'Check Type Body' + ,check_this_in => is_profilable(g_current_user, l_pname, 'TYPE BODY') + ,against_this_in => TRUE); + tl_drop_db_object(l_pname, 'type'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_is_profilable Happy Path 4'; + wt_assert.eq + (msg_in => 'Check Missing Function' + ,check_this_in => is_profilable(g_current_user, 'BOGUS_FUNCTION_123', 'FUNCTION') + ,against_this_in => FALSE); + wt_assert.eq + (msg_in => 'Check Table' + ,check_this_in => is_profilable(g_current_user, 'WT_PROFILES', 'TABLE') + ,against_this_in => FALSE); + end t_is_profilable; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Find begining of PL/SQL Block in a Trigger +function trigger_offset + (dbout_owner_in in varchar2 + ,dbout_name_in in varchar2 + ,dbout_type_in in varchar2) + return number +is +begin + if dbout_type_in != 'TRIGGER' + then + return 0; + end if; + for buff in ( + select line, text from dba_source + where owner = dbout_owner_in + and name = dbout_name_in + and type = 'TRIGGER' + order by line ) + loop + if regexp_instr(buff.text, + '(^declare$' || + '|^declare[[:space:]]' || + '|[[:space:]]declare$' || + '|[[:space:]]declare[[:space:]])', 1, 1, 0, 'i') <> 0 + OR + regexp_instr(buff.text, + '(^begin$' || + '|^begin[[:space:]]' || + '|[[:space:]]begin$' || + '|[[:space:]]begin[[:space:]])', 1, 1, 0, 'i') <> 0 + then + return buff.line - 1; + end if; + end loop; + return 0; +end trigger_offset; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_trigger_offset + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Trigger Offset Happy Path'; + wt_assert.eq ( + msg_in => 'Trigger Test', + check_this_in => trigger_offset (dbout_owner_in => g_current_user + ,dbout_name_in => 'WT_SELF_TEST$TEST' + ,dbout_type_in => 'TRIGGER'), + against_this_in => 3); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'Package Test', + check_this_in => trigger_offset (dbout_owner_in => g_current_user + ,dbout_name_in => 'WT_PROFILER' + ,dbout_type_in => 'PACKAGE BODY'), + against_this_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Trigger Offset Sad Path'; + wt_assert.eq ( + msg_in => 'Non Existent Object', + check_this_in => trigger_offset (dbout_owner_in => 'BOGUS456' + ,dbout_name_in => 'BOGUS123' + ,dbout_type_in => 'TRIGGER'), + against_this_in => 0); + end t_trigger_offset; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function calc_pct_coverage + (in_test_run_id in number) + return number +IS + cursor main is + select sum(case status when 'EXEC' then 1 else 0 end) HITS + ,sum(case status when 'NOTX' then 1 else 0 end) MISSES + from wt_profiles p + where test_run_id = in_test_run_id; + buff main%ROWTYPE; +BEGIN + open main; + fetch main into buff; + close main; + if nvl(buff.hits + buff.misses, 0) != 0 + then + return round(100 * buff.hits / (buff.hits + buff.misses),2); + end if; + return null; +END calc_pct_coverage; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_calc_pct_coverage + is + c_test_run_id constant number := -95; + l_profile wt_profiles%ROWTYPE; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Calculate Percent Coverage Setup'; + tl_insert_test_runs(c_test_run_id, 'Calculate Offset Test'); + l_profile.test_run_id := c_test_run_id; + l_profile.exec_cnt := 1; + l_profile.exec_tot_usec := 1; + l_profile.exec_min_usec := 1; + l_profile.exec_max_usec := 1; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Calculate Percent Coverage Happy Path 1'; + l_profile.line := 1; + l_profile.status := 'EXEC'; + l_profile.text := 'Testing ' || l_profile.line; + tl_insert_wt_profiles(l_profile); + -------------------------------------- WTPLSQL Testing -- + l_profile.line := 2; + l_profile.status := 'NOTX'; + l_profile.text := 'Testing ' || l_profile.line; + tl_insert_wt_profiles(l_profile); + -------------------------------------- WTPLSQL Testing -- + l_profile.line := 3; + l_profile.status := 'EXEC'; + l_profile.text := 'Testing ' || l_profile.line; + tl_insert_wt_profiles(l_profile); + wt_assert.eq ( + msg_in => 'Main Test', + check_this_in => calc_pct_coverage(c_test_run_id), + against_this_in => 66.67); + tl_delete_wt_profiles(c_test_run_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Calculate Percent Coverage Happy Path 2'; + l_profile.line := 1; + l_profile.status := 'EXCL'; + l_profile.text := 'Testing ' || l_profile.line; + tl_insert_wt_profiles(l_profile); + -------------------------------------- WTPLSQL Testing -- + l_profile.line := 2; + l_profile.status := 'UNKN'; + l_profile.text := 'Testing ' || l_profile.line; + tl_insert_wt_profiles(l_profile); + -------------------------------------- WTPLSQL Testing -- + l_profile.line := 3; + l_profile.status := 'EXCL'; + l_profile.text := 'Testing ' || l_profile.line; + tl_insert_wt_profiles(l_profile); + wt_assert.isnull ( + msg_in => 'Main Test', + check_this_in => calc_pct_coverage(c_test_run_id)); + tl_delete_wt_profiles(c_test_run_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Calculate Percent Coverage Sad Path'; + wt_assert.isnull ( + msg_in => 'Missing Test Run ID', + check_this_in => calc_pct_coverage(-99990)); + wt_assert.isnull ( + msg_in => 'NULL Test Run ID', + check_this_in => calc_pct_coverage(null)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Calculate Percent Coverage Teardown'; + tl_delete_test_runs(c_test_run_id); + end t_calc_pct_coverage; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure initialize +is + l_recNULL wt_dbout_runs%ROWTYPE; + l_retnum binary_integer; + junk number; +begin + -- Clear g_rec + g_rec := l_recNULL; + -- Clear PLSQL Profiler Results Older than 1 Day + junk := clear_plsql_profiler_recs; + -- Check Versions + l_retnum := dbms_profiler.INTERNAL_VERSION_CHECK; + if l_retnum <> 0 then + ------%WTPLSQL_begin_ignore_lines%------ Can't test this + --dbms_profiler.get_version(major_version, minor_version); + raise_application_error(-20005, + 'dbms_profiler.INTERNAL_VERSION_CHECK returned: ' || get_error_msg(l_retnum)); + ----------------%WTPLSQL_end_ignore_lines%---------------- + end if; + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + if not wtplsql_skip_test + then + $END + -- + -- This starts the PROFILER Running!!! + --dbms_output.put_line('running start_profiler in ' || wt_assert.g_testcase); + l_retnum := dbms_profiler.START_PROFILER(run_number => g_rec.profiler_runid); + if l_retnum <> 0 then + raise_application_error(-20006, + 'dbms_profiler.START_PROFILER returned: ' || get_error_msg(l_retnum)); + end if; + -- + $IF $$WTPLSQL_SELFTEST $THEN + else + g_rec.profiler_runid := 0; + end if; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- +end initialize; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_initialize + is + l_pname varchar2(128) := 'WT_PROFILE_INITIALIZE'; + l_cdr_recSAVE core_data.run_rec_type; + l_cdr_recTEST core_data.run_rec_type; + l_recSAVE wt_dbout_runs%ROWTYPE; + l_recTEST wt_dbout_runs%ROWTYPE; + l_sqlerrm varchar2(4000); + begin + wt_assert.g_testcase := 'Initialize Happy Path 1'; + -------------------------------------- WTPLSQL Testing -- + l_cdr_recSAVE := core_data.g_run_rec; + l_recSAVE := g_rec; + wtplsql_skip_test := TRUE; + initialize; + wtplsql_skip_test := FALSE; + l_cdr_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_cdr_recSAVE; + l_recTEST := g_rec; + g_rec := l_recSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull ( + msg_in => 'l_recTEST.test_run_id', + check_this_in => l_recTEST.test_run_id); + wt_assert.isnotnull ( + msg_in => 'l_recTEST.profiler_runid', + check_this_in => l_recTEST.profiler_runid); + end t_initialize; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Because this procedure is called to cleanup after erorrs, +-- it must be able to run multiple times without causing damage. +procedure finalize + (in_test_run_id in number) +is + junk number; +begin + -- Return if not profiling + if g_rec.profiler_runid is null + then + return; + end if; + -- Abort if there is no Test Run ID + if in_test_run_id is null + then + raise_application_error (-20004, 'i_test_run_id is null'); + end if; + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + if not wtplsql_skip_test + then + $END + -- + -- DBMS_PROFILER.FLUSH_DATA is included with DBMS_PROFILER.STOP_PROFILER + --dbms_output.put_line('running stop_profiler in ' || wt_assert.g_testcase); + dbms_profiler.STOP_PROFILER; + -- + $IF $$WTPLSQL_SELFTEST $THEN + end if; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + if is_profilable(core_data.g_run_rec.dbout_owner + ,core_data.g_run_rec.dbout_name + ,core_data.g_run_rec.dbout_type) + then + -- Set g_rec values + g_rec.test_run_id := in_test_run_id; + g_rec.trigger_offset := trigger_offset(core_data.g_run_rec.dbout_owner + ,core_data.g_run_rec.dbout_name + ,core_data.g_run_rec.dbout_type); + -- Save PLSQL Profiler Results (Also updates g_rec) + insert_wt_profile(core_data.g_run_rec.dbout_owner + ,core_data.g_run_rec.dbout_name + ,core_data.g_run_rec.dbout_type); + -- Save g_rec + insert into wt_dbout_runs values g_rec; + commit; + end if; + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + if not wtplsql_skip_test + then + $END + -- + -- Clear PLSQL Profiler Results for this Run + junk := clear_plsql_profiler_recs(g_rec.test_run_id); + -- + $IF $$WTPLSQL_SELFTEST $THEN + end if; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- +end finalize; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_finalize + is + l_cdr_recSAVE core_data.run_rec_type; + l_cdr_recTEST core_data.run_rec_type; + l_recSAVE wt_dbout_runs%ROWTYPE; + l_recTEST wt_dbout_runs%ROWTYPE; + l_sqlerrm varchar2(4000); + l_err_stack varchar2(32000); + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Finalize Happy Path 1'; + l_cdr_recSAVE := core_data.g_run_rec; + l_recSAVE := g_rec; + core_data.g_run_rec.error_message := NULL; + g_rec.profiler_runid := NULL; + -------------------------------------- WTPLSQL Testing -- + wtplsql_skip_test := TRUE; + begin + finalize(-1); + l_err_stack := dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace ; + exception when others then + l_err_stack := dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace ; + end; + wtplsql_skip_test := FALSE; + -------------------------------------- WTPLSQL Testing -- + l_cdr_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_cdr_recSAVE; + l_recTEST := g_rec; + g_rec := l_recSAVE; + tl_delete_dbout_runs(-1); + tl_delete_wt_profiles(-1); + tl_delete_test_runs(-1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull ( + msg_in => 'finalize(-1) SQLERRM', + check_this_in => l_err_stack); + wt_assert.isnull ( + msg_in => 'l_cdr_recTEST.error_message', + check_this_in => l_cdr_recTEST.error_message); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull ( + msg_in => 'l_recTEST.test_run_id', + check_this_in => l_recTEST.test_run_id); + wt_assert.isnull ( + msg_in => 'l_recTEST.trigger_offset', + check_this_in => l_recTEST.trigger_offset); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Finalize Happy Path 2'; + l_cdr_recSAVE := core_data.g_run_rec; + l_recSAVE := g_rec; + core_data.g_run_rec.dbout_owner := 'TEST OWNER'; + core_data.g_run_rec.dbout_name := 'TEST NAME'; + core_data.g_run_rec.dbout_type := 'TEST TYPE'; + core_data.g_run_rec.error_message := NULL; + -------------------------------------- WTPLSQL Testing -- + wtplsql_skip_test := TRUE; + begin + finalize(-2); + l_err_stack := dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace ; + exception when others then + l_err_stack := dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace ; + end; + wtplsql_skip_test := FALSE; + -------------------------------------- WTPLSQL Testing -- + l_cdr_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_cdr_recSAVE; + l_recTEST := g_rec; + g_rec := l_recSAVE; + tl_delete_dbout_runs(-2); + tl_delete_wt_profiles(-2); + tl_delete_test_runs(-2); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull ( + msg_in => 'finalize(-2) SQLERRM', + check_this_in => l_err_stack); + wt_assert.isnull ( + msg_in => 'l_cdr_recTEST.error_message', + check_this_in => l_cdr_recTEST.error_message); + wt_assert.isnotnull ( + msg_in => 'l_recTEST.profiler_runid', + check_this_in => l_recTEST.profiler_runid); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull ( + msg_in => 'l_recTEST.test_run_id', + check_this_in => l_recTEST.test_run_id); + wt_assert.isnull ( + msg_in => 'l_recTEST.trigger_offset', + check_this_in => l_recTEST.trigger_offset); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Finalize Happy Path 3'; + tl_insert_test_runs(-3, 'Finalize Happy Path 3'); + l_cdr_recSAVE := core_data.g_run_rec; + l_recSAVE := g_rec; + core_data.g_run_rec.dbout_owner := g_current_user; + core_data.g_run_rec.dbout_name := 'WT_PROFILE'; + core_data.g_run_rec.dbout_type := 'PACKAGE BODY'; + core_data.g_run_rec.error_message := NULL; + g_rec.profiler_runid := -33; + g_rec.trigger_offset := -33; + -------------------------------------- WTPLSQL Testing -- + wtplsql_skip_test := TRUE; + begin + finalize(-3); + l_err_stack := dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace ; + exception when others then + l_err_stack := dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace ; + end; + wtplsql_skip_test := FALSE; + -------------------------------------- WTPLSQL Testing -- + l_cdr_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_cdr_recSAVE; + l_recTEST := g_rec; + g_rec := l_recSAVE; + tl_delete_dbout_runs(-3); + tl_delete_wt_profiles(-3); + tl_delete_test_runs(-3); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull ( + msg_in => 'finalize(-3) SQLERRM', + check_this_in => l_err_stack); + wt_assert.isnull ( + msg_in => 'l_cdr_recTEST.error_message', + check_this_in => l_cdr_recTEST.error_message); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_recTEST.test_run_id', + check_this_in => l_recTEST.test_run_id, + against_this_in => -3); + wt_assert.eq ( + msg_in => 'l_recTEST.trigger_offset', + check_this_in => l_recTEST.trigger_offset, + against_this_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Finalize Sad Path 1'; + l_cdr_recSAVE := core_data.g_run_rec; + l_recSAVE := g_rec; + g_rec.profiler_runid := -4; + wtplsql_skip_test := TRUE; + begin + finalize(null); + l_sqlerrm := SQLERRM; + -------------------------------------- WTPLSQL Testing -- + exception when others then + l_sqlerrm := SQLERRM; + end; + wtplsql_skip_test := FALSE; + l_cdr_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_cdr_recSAVE; + l_recTEST := g_rec; + g_rec := l_recSAVE; + wt_assert.eq ( + msg_in => 'finalize(null) SQLERRM', + check_this_in => l_sqlerrm, + against_this_in => 'ORA-20004: i_test_run_id is null'); + end t_finalize; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function delete_run_id + (in_test_run_id in number) + return number +is + num_recs number; +begin + delete from wt_profiles where test_run_id = in_test_run_id; + num_recs := SQL%ROWCOUNT; + delete from wt_dbout_runs where test_run_id = in_test_run_id; + num_recs := num_recs + SQL%ROWCOUNT; + if in_test_run_id is not null + then + num_recs := num_recs + clear_plsql_profiler_recs(in_test_run_id); + end if; + return num_recs; +end delete_run_id; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_delete_run_id + is + c_test_run_id constant number := -98; + l_run wt_dbout_runs%ROWTYPE; + l_profile wt_profiles%ROWTYPE; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Delete Records Setup'; + wt_assert.eqqueryvalue ( + msg_in => 'wt_test_runs Count 0', + check_query_in => 'select count(*) from wt_test_runs' || + ' where id = ' || c_test_run_id, + against_value_in => 0); + wt_assert.eqqueryvalue ( + msg_in => 'wt_profiles Count 0', + check_query_in => 'select count(*) from wt_profiles' || + ' where test_run_id = ' || c_test_run_id, + against_value_in => 0); + tl_insert_test_runs(c_test_run_id, 'Delete Records Test'); + -------------------------------------- WTPLSQL Testing -- + l_profile.test_run_id := c_test_run_id; + l_profile.line := 1; + l_profile.status := 'EXEC'; + l_profile.exec_cnt := 1; + l_profile.exec_tot_usec := 1; + l_profile.exec_min_usec := 1; + l_profile.exec_max_usec := 1; + l_profile.text := 'Testing'; + tl_insert_wt_profiles(l_profile); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Delete Records Happy Path 1'; + begin + wt_assert.eq ( + msg_in => 'Run delete_run_id(' || c_test_run_id || ')', + check_this_in => delete_run_id(c_test_run_id), + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_run_id(' || c_test_run_id || ') Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'wt_profiles Count 2', + check_query_in => 'select count(*) from wt_profiles' || + ' where test_run_id = ' || c_test_run_id, + against_value_in => 0); + tl_delete_test_runs(c_test_run_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Delete Records Sad Path 1'; + begin + wt_assert.eq ( + msg_in => 'Run delete_run_id(-9876)', + check_this_in => delete_run_id(-9876), + against_this_in => 0); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_run_id(-9876) Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'wt_profiles Count 2', + check_query_in => 'select count(*) from wt_profiles' || + ' where test_run_id = ' || c_test_run_id, + against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Delete Records Sad Path 2'; + begin + wt_assert.eq ( + msg_in => 'Run delete_run_id(NULL)', + check_this_in => delete_run_id(NULL), + against_this_in => 0); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_run_id(NULL) Exception', + check_this_in => dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'wt_profiles Count 2', + check_query_in => 'select count(*) from wt_profiles' || + ' where test_run_id = ' || c_test_run_id, + against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Delete Records Teardown'; + end t_delete_run_id; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure WTPLSQL_RUN + is + begin + wtplsql.g_DBOUT := 'WT_PROFILE:PACKAGE BODY'; + select username into g_current_user from user_users; + -------------------------------------- WTPLSQL Testing -- + t_get_error_msg; + t_clear_plsql_profiler_recs; + t_load_ignr_aa; + t_add_dbout_run; + t_set_prof_status; + t_insert_wt_profile; + t_is_profilable; + t_trigger_offset; + t_calc_pct_coverage; + t_initialize; + t_finalize; + t_delete_run_id; + end WTPLSQL_RUN; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +end wt_profile; + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/BCE56906-48A0-A455-E12D-D44C6F5A1204.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/BCE56906-48A0-A455-E12D-D44C6F5A1204.xml new file mode 100644 index 0000000..4281f9e --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/BCE56906-48A0-A455-E12D-D44C6F5A1204.xml @@ -0,0 +1,303 @@ + + +wtp@DEVPDB_localhost +WTP +WT_DBOUT +duane +2024-04-10 19:09:29 UTC +Main + +CREATE OR REPLACE PACKAGE WTP.WT_DBOUT + authid definer +as + + -- Return a DBOUT Surrogate Key. + -- Return NULL if the DBOUT does not exist. + function get_id + (in_owner in varchar2 + ,in_name in varchar2 + ,in_type in varchar2) + return number; + + -- Return a DBOUT Surrogate Key. + -- Add the DBOUT if it does not exist. + function dim_id + (in_owner in varchar2 + ,in_name in varchar2 + ,in_type in varchar2) + return number; + + -- Delete all records with no child records + procedure delete_records; + + -- WtPLSQL Self Test Procedures + -- + -- alter system set PLSQL_CCFLAGS = + -- 'WTPLSQL_SELFTEST:TRUE' + -- scope=BOTH; + -- + $IF $$WTPLSQL_SELFTEST + $THEN + procedure WTPLSQL_RUN; + $END + +end wt_dbout; + +wtp@DEVPDB_localhost +WTP +WT_DBOUT +duane +2024-04-10 19:09:29 UTC +Main + +CREATE OR REPLACE PACKAGE BODY WTP.WT_DBOUT +as + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + C_OWNER CONSTANT varchar2(50) := 'WT_DBOUT_OWNER_FOR_TESTING_1234ABCD'; + C_NAME CONSTANT varchar2(50) := 'WT_DBOUT_NAME_FOR_TESTING_1234ABCD'; + C_TYPE CONSTANT varchar2(50) := 'DBOUT_TYPE_1234ABCD'; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--------------------- +-- Public Procedures +--------------------- + + +------------------------------------------------------------ +function get_id + (in_owner in varchar2 + ,in_name in varchar2 + ,in_type in varchar2) + return number +is + l_id number; +begin + select id into l_id from wt_dbouts + where owner = in_owner + and name = in_name + and type = in_type; + return l_id; +exception + when NO_DATA_FOUND + then + return NULL; +end get_id; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_get_id + is + l_id number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Setup'; + delete from wt_dbouts + where owner = C_OWNER + and name = C_NAME + and type = C_TYPE; + wt_assert.isnotnull + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 0' + ,check_query_in => 'select count(*) from wt_dbouts' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || + ''' and type = ''' || C_TYPE || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Happy Path 1'; + wt_assert.isnull + (msg_in => 'Check for Null return' + ,check_this_in => get_id(C_OWNER, C_NAME, C_TYPE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Happy Path 2'; + insert into wt_dbouts (id, owner, name, type) + values (wt_dbouts_seq.nextval, C_OWNER, C_NAME, C_TYPE) + returning id into l_id; + wt_assert.eq + (msg_in => 'Check ID return' + ,check_this_in => get_id(C_OWNER, C_NAME, C_TYPE) + ,against_this_in => l_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Teardown'; + delete from wt_dbouts + where owner = C_OWNER + and name = C_NAME + and type = C_TYPE; + wt_assert.eq + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT + ,against_this_in => 1); + commit; + end t_get_id; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function dim_id + (in_owner in varchar2 + ,in_name in varchar2 + ,in_type in varchar2) + return number +is + PRAGMA AUTONOMOUS_TRANSACTION; + rec wt_dbouts%ROWTYPE; +begin + if in_owner is NULL + OR in_name is NULL + OR in_type is NULL + then + return null; + end if; + rec.id := get_id (in_owner, in_name, in_type); + if rec.id is null + then + rec.id := wt_dbouts_seq.nextval; + rec.owner := in_owner; + rec.name := in_name; + rec.type := in_type; + insert into wt_dbouts values rec; + end if; + commit; + return rec.id; +end dim_id; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_dim_id + is + l_id number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Setup'; + delete from wt_dbouts + where owner = C_OWNER + and name = C_NAME + and type = C_TYPE; + wt_assert.isnotnull + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 0' + ,check_query_in => 'select count(*) from wt_dbouts' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || + ''' and type = ''' || C_TYPE || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Happy Path 1'; + l_id := dim_id(C_OWNER, C_NAME, C_TYPE); + wt_assert.isnotnull + (msg_in => 'Check ID return 1' + ,check_this_in => l_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Happy Path 2'; + wt_assert.eq + (msg_in => 'Check ID return 2' + ,check_this_in => dim_id(C_OWNER, C_NAME, C_TYPE) + ,against_this_in => l_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Sad Path 1'; + wt_assert.isnull + (msg_in => 'Check NULL return' + ,check_this_in => dim_id(NULL, NULL, NULL)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Teardown'; + delete from wt_dbouts + where owner = C_OWNER + and name = C_NAME + and type = C_TYPE; + wt_assert.eq + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT + ,against_this_in => 1); + commit; + end t_dim_id; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure delete_records +is +begin + delete from wt_dbouts + where id in ( + select id from wt_dbouts + MINUS + select distinct dbout_id ID from wt_test_runs); +end delete_records; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_delete_records + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Setup'; + delete from wt_dbouts + where owner = C_OWNER + and name = C_NAME + and type = C_TYPE; + wt_assert.isnotnull + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + insert into wt_dbouts (id, owner, name, type) + values (wt_dbouts_seq.nextval, C_OWNER, C_NAME, C_TYPE); + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 1' + ,check_query_in => 'select count(*) from wt_dbouts' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || + ''' and type = ''' || C_TYPE || '''' + ,against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Happy Path 1'; + delete_records; + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 0' + ,check_query_in => 'select count(*) from wt_dbouts' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || + ''' and type = ''' || C_TYPE || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Happy Path 2'; + delete_records; + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should still be 0' + ,check_query_in => 'select count(*) from wt_dbouts' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || + ''' and type = ''' || C_TYPE || '''' + ,against_value_in => 0); + commit; + end t_delete_records; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure WTPLSQL_RUN + is + begin + -------------------------------------- WTPLSQL Testing -- + wtplsql.g_DBOUT := 'WT_DBOUT:PACKAGE BODY'; + t_get_id; + t_dim_id; + t_delete_records; + end; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +end wt_dbout; + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/E540BEB4-86FF-0BEC-4B75-E54681F8A22B.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/E540BEB4-86FF-0BEC-4B75-E54681F8A22B.xml new file mode 100644 index 0000000..7e47303 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/E540BEB4-86FF-0BEC-4B75-E54681F8A22B.xml @@ -0,0 +1,4314 @@ + + +wtp@DEVPDB_localhost +WTP +WT_ASSERT +duane +2024-04-10 19:09:29 UTC +Main + +CREATE OR REPLACE PACKAGE WTP.WT_ASSERT + authid current_user +is + -- AUTHID CURRENT_USER is required for dynamic PL/SQL execution. + + ASSERT_FAILURE_EXCEPTION exception; + PRAGMA EXCEPTION_INIT(ASSERT_FAILURE_EXCEPTION, -20004); + + -- See RESET_GLOBALS procedure for default global values + + -- Testcase name for a series of assertions. + -- Modify as required + g_testcase core_data.long_name; + + -- See RESET_GLOBALS procedure for default global values + TYPE g_rec_type is record + (last_pass boolean + ,raise_exception boolean + ,last_assert varchar2(15) + ,last_msg varchar2(200) + ,last_details varchar2(4000)); + g_rec g_rec_type; + + function last_pass + return boolean; + + function last_assert + return varchar2; + + function last_msg + return varchar2; + + function last_details + return varchar2; + + procedure reset_globals; + + -- Date/Time Formats are configured at the Session Level + function get_NLS_DATE_FORMAT + return varchar2; + procedure set_NLS_DATE_FORMAT + (in_format in varchar2 default 'DD-MON-YYYY HH24:MI:SS'); + function get_NLS_TIMESTAMP_FORMAT + return varchar2; + procedure set_NLS_TIMESTAMP_FORMAT + (in_format in varchar2 default 'DD-MON-YYYY HH24:MI:SS.FF6'); + function get_NLS_TIMESTAMP_TZ_FORMAT + return varchar2; + procedure set_NLS_TIMESTAMP_TZ_FORMAT + (in_format in varchar2 default 'DD-MON-YYYY HH24:MI:SS.FF6 TZH:TZM'); + + ------------------------ + -- Datatypes Supported + -- Oracle Data Type Families + -- https://docs.oracle.com/cd/E11882_01/appdev.112/e25519/predefined.htm#LNPLS2047 + -- + -- VARCHAR2 - Includes ROWID, LONG*, RAW, LONG RAW*, and NVARCHAR2 + -- DATE** - Includes TIMESTAMP and INTERVAL + -- NUMBER** - Includes PLS_INTEGER + -- BOOLEAN + -- XMLTYPE + -- CLOB - Includes NCLOB + -- BLOB + -- + -- *LONG and LONG RAW data length is limited to VARCHAR2 length in PL/SQL (32K). + -- **VARCHAR2 includes DATE and NUMBER using Implicit Data Conversions: + -- https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements002.htm#i163326 + -- + + procedure this ( + msg_in in varchar2, + check_this_in in boolean, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false); + + -- + procedure eq ( + msg_in in varchar2, + check_this_in in varchar2, + against_this_in in varchar2, + null_ok_in in boolean := false, + raise_exc_in in boolean := false); + + procedure eq ( + msg_in in varchar2, + check_this_in in boolean, + against_this_in in boolean, + null_ok_in in boolean := false, + raise_exc_in in boolean := false); + + procedure eq ( + msg_in in varchar2, + check_this_in in XMLTYPE, + against_this_in in XMLTYPE, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false); + + procedure eq ( + msg_in in varchar2, + check_this_in in CLOB, + against_this_in in CLOB, + null_ok_in in boolean := false, + raise_exc_in in boolean := false); + + procedure eq ( + msg_in in varchar2, + check_this_in in BLOB, + against_this_in in BLOB, + null_ok_in in boolean := false, + raise_exc_in in boolean := false); + + -- + procedure isnotnull ( + msg_in in varchar2, + check_this_in in varchar2, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false); + + procedure isnotnull ( + msg_in in varchar2, + check_this_in in boolean, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false); + + procedure isnotnull ( + msg_in in varchar2, + check_this_in in CLOB, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false); + + procedure isnotnull ( + msg_in in varchar2, + check_this_in in BLOB, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false); + + -- + procedure isnull ( + msg_in in varchar2, + check_this_in in varchar2, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false); + + procedure isnull ( + msg_in in varchar2, + check_this_in in boolean, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false); + + procedure isnull ( + msg_in in varchar2, + check_this_in in CLOB, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false); + + procedure isnull ( + msg_in in varchar2, + check_this_in in BLOB, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false); + + -- + procedure raises ( + msg_in varchar2, + check_call_in in varchar2, + against_exc_in in varchar2); + + procedure raises ( + msg_in varchar2, + check_call_in in varchar2, + against_exc_in in number); + + procedure throws ( + msg_in varchar2, + check_call_in in varchar2, + against_exc_in in varchar2); + + procedure throws ( + msg_in varchar2, + check_call_in in varchar2, + against_exc_in in number); + + -- + procedure eqqueryvalue ( + msg_in in varchar2, + check_query_in in varchar2, + against_value_in in varchar2, + null_ok_in in boolean := false, + raise_exc_in in boolean := false); + + procedure eqqueryvalue ( + msg_in in varchar2, + check_query_in in varchar2, + against_value_in in XMLTYPE, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false); + + procedure eqqueryvalue ( + msg_in in varchar2, + check_query_in in varchar2, + against_value_in in CLOB, + null_ok_in in boolean := false, + raise_exc_in in boolean := false); + + procedure eqqueryvalue ( + msg_in in varchar2, + check_query_in in varchar2, + against_value_in in BLOB, + null_ok_in in boolean := false, + raise_exc_in in boolean := false); + + -- + procedure eqquery ( + msg_in in varchar2, + check_query_in in varchar2, + against_query_in in varchar2, + raise_exc_in in boolean := false); + + -- + procedure eqtable ( + msg_in in varchar2, + check_this_in in varchar2, + against_this_in in varchar2, + check_where_in in varchar2 := null, + against_where_in in varchar2 := null, + raise_exc_in in boolean := false); + + -- + procedure eqtabcount ( + msg_in in varchar2, + check_this_in in varchar2, + against_this_in in varchar2, + check_where_in in varchar2 := null, + against_where_in in varchar2 := null, + raise_exc_in in boolean := false); + + -- + procedure objexists ( + msg_in in varchar2, + obj_owner_in in varchar2, + obj_name_in in varchar2, + obj_type_in in varchar2 default null, + raise_exc_in in boolean := false); + + procedure objexists ( + msg_in in varchar2, + check_this_in in varchar2, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false); + + -- + procedure objnotexists ( + msg_in in varchar2, + obj_owner_in in varchar2, + obj_name_in in varchar2, + obj_type_in in varchar2 default null, + raise_exc_in in boolean := false); + + procedure objnotexists ( + msg_in in varchar2, + check_this_in in varchar2, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false); + + -- WtPLSQL Self Test Procedures + -- + -- alter system set PLSQL_CCFLAGS = + -- 'WTPLSQL_SELFTEST:TRUE' + -- scope=BOTH; + -- + $IF $$WTPLSQL_SELFTEST + $THEN + procedure WTPLSQL_RUN; + $END + +end wt_assert; + +wtp@DEVPDB_localhost +WTP +WT_ASSERT +duane +2024-04-10 19:09:29 UTC +Main + +CREATE OR REPLACE PACKAGE BODY WTP.WT_ASSERT is + + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + temp_rowid1 CONSTANT rowid := chartorowid('AAAFd1AAFAAAABSAA/'); + temp_rowid2 CONSTANT rowid := chartorowid('AAAFd1AAFAAAABSAB/'); + temp_long1 CONSTANT long := hextoraw('0123456789ABCDEF0123456789ABCDEF'); + temp_long2 CONSTANT long := hextoraw('FEDCBA9876543210FEDCBA9876543210'); + temp_raw1 CONSTANT raw(2) := hextoraw('2345'); + temp_raw2 CONSTANT raw(2) := hextoraw('6789'); + temp_lraw1 CONSTANT long raw := hextoraw('0123456789ABCDEF0123456789ABCDEF'); + temp_lraw2 CONSTANT long raw := hextoraw('FEDCBA9876543210FEDCBA9876543210'); + temp_blob1 BLOB; + temp_blob2 CONSTANT BLOB := hextoraw('FEDCBA9876543210FEDCBA9876543210'); + -------------------------------------- WTPLSQL Testing -- + temp_nc1 CONSTANT NVARCHAR2(12) := 'NCHAR1'; + temp_nc2 CONSTANT NVARCHAR2(12) := 'NCHAR2'; + temp_bool CONSTANT boolean := NULL; + temp_clob1 CLOB; + temp_clob2 CONSTANT CLOB := 'This is another clob.'; + temp_nclob1 NCLOB; + temp_nclob2 CONSTANT NCLOB := 'This is another clob.'; + temp_xml1 XMLTYPE; + temp_xml2 CONSTANT XMLTYPE := xmltype('<?xml version="1.0" encoding="UTF-8"?><note>2</note>'); + -------------------------------------- WTPLSQL Testing -- + temp_pint1 CONSTANT pls_integer := 2; + temp_pint2 CONSTANT pls_integer := 3; + temp_date CONSTANT date := sysdate; + temp_tstmp CONSTANT timestamp := systimestamp; + temp_tstlzn CONSTANT timestamp with local time zone := systimestamp; + temp_tstzn CONSTANT timestamp with time zone := systimestamp; + temp_intds1 CONSTANT interval day to second := interval '+01 01:01:01.001' day to second; + temp_intds2 CONSTANT interval day to second := interval '+02 02:02:02.002' day to second; + temp_intym1 CONSTANT interval year to month := interval '+01-01' year to month; + temp_intym2 CONSTANT interval year to month := interval '+02-02' year to month; + -------------------------------------- WTPLSQL Testing -- + temp_rec g_rec_type; + temp_testcase VARCHAR2(4000); + wtplsql_skip_save boolean := FALSE; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + +---------------------- +-- Private Procedures +---------------------- + +------------------------------------------------------------ +function boolean_to_status + (in_boolean in boolean) + return varchar2 +is +begin + if in_boolean is null + then + return ''; + elsif in_boolean + then + return 'TRUE'; + end if; + return 'FALSE'; +end boolean_to_status; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_boolean_to_status + is + begin + wt_assert.g_testcase := 'BOOLEAN_TO_STATUS'; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'Test for "TRUE" conversion' + ,check_this_in => boolean_to_status(TRUE) + ,against_this_in => 'TRUE'); + wt_assert.eq + (msg_in => 'Test for "FALSE" conversion' + ,check_this_in => boolean_to_status(FALSE) + ,against_this_in => 'FALSE'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull + (msg_in => 'Test for NULL' + ,check_this_in => boolean_to_status(temp_bool)); + end t_boolean_to_status; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure process_assertion +is +begin + if core_data.g_run_rec.test_runner_name is null + then + hook.run('ad_hoc_report'); + return; + end if; + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + if not wtplsql_skip_save then + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + core_data.add + (in_testcase => g_testcase + ,in_assertion => g_rec.last_assert + ,in_pass => g_rec.last_pass + ,in_details => g_rec.last_details + ,in_message => g_rec.last_msg); + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + end if; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + hook.run('after_assertion'); + if g_rec.raise_exception + and not g_rec.last_pass + then + raise_application_error(-20004, g_rec.last_msg || CHR(10) || + ' Assertion ' || g_rec.last_assert || ' Failed.' || CHR(10) || + ' Testcase: ' || g_testcase || CHR(10) || + ' ' || g_rec.last_details ); + end if; +end process_assertion; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_process_assertion + is + l_test_runner_nameSAVE core_data.g_run_rec.test_runner_name%TYPE; + l_msg varchar2(100) := 'Check Exception Processing'; + l_line varchar2(32767); + l_status pls_integer; + begin + -------------------------------------- WTPLSQL Testing -- + loop + dbms_output.get_line(l_line, l_status); + exit when l_status = 1; + wt_assert.isnull + (msg_in => 'Clear DBMS_OUTPUT Buffer' + ,check_this_in => l_line); + end loop; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Ad Hoc Report Happy Path'; + g_rec.last_assert := 'THIS'; + g_rec.last_pass := TRUE; + g_rec.last_details := 'Expected "PASS" and got "PASS"'; + g_rec.last_msg := 'Ad Hoc Report Happy Path'; + g_rec.raise_exception := FALSE; + l_test_runner_nameSAVE := core_data.g_run_rec.test_runner_name; + core_data.g_run_rec.test_runner_name := ''; + begin + -------------------------------------- WTPLSQL Testing -- + process_assertion; -- Should not throw exception + core_data.g_run_rec.test_runner_name := l_test_runner_nameSAVE; + wt_assert.isnotnull + (msg_in => l_msg + ,check_this_in => 'Ad Hoc Report Exception Success'); + exception + -------------------------------------- WTPLSQL Testing -- + when OTHERS then + core_data.g_run_rec.test_runner_name := l_test_runner_nameSAVE; + wt_assert.isnull + (msg_in => l_msg + ,check_this_in => 'Ad Hoc Report Exception Failed'); + end; + -------------------------------------- WTPLSQL Testing -- + dbms_output.get_line(l_line, l_status); + wt_assert.eq + (msg_in => 'Ad Hoc Line 1 Status' + ,check_this_in => l_status + ,against_this_in => 0); + wt_assert.eq + (msg_in => 'Ad Hoc Line 1 Line' + ,check_this_in => l_line + ,against_this_in => 'Ad Hoc Report Happy Path'); + -------------------------------------- WTPLSQL Testing -- + dbms_output.get_line(l_line, l_status); + wt_assert.eq + (msg_in => 'Ad Hoc Line 2 Status' + ,check_this_in => l_status + ,against_this_in => 0); + wt_assert.eq + (msg_in => 'Ad Hoc Line 2 Line' + ,check_this_in => l_line + ,against_this_in => ' Assertion THIS PASSED.'); + -------------------------------------- WTPLSQL Testing -- + dbms_output.get_line(l_line, l_status); + wt_assert.eq + (msg_in => 'Ad Hoc Line 3 Status' + ,check_this_in => l_status + ,against_this_in => 0); + wt_assert.eq + (msg_in => 'Ad Hoc Line 3 Line' + ,check_this_in => l_line + ,against_this_in => ' Testcase: Ad Hoc Report Happy Path'); + -------------------------------------- WTPLSQL Testing -- + dbms_output.get_line(l_line, l_status); + wt_assert.eq + (msg_in => 'Ad Hoc Line 4 Status' + ,check_this_in => l_status + ,against_this_in => 0); + wt_assert.eq + (msg_in => 'Ad Hoc Line 4 Line' + ,check_this_in => l_line + ,against_this_in => ' Expected "PASS" and got "PASS"'); + -------------------------------------- WTPLSQL Testing -- + g_testcase := 'PROCESS_ASSERTION'; + g_rec.last_assert := 'THIS'; + g_rec.last_pass := FALSE; + g_rec.last_details := 'Expected "PASS" and got "FAIL"'; + g_rec.last_msg := 'Process Assertion Forced Failure'; + g_rec.raise_exception := TRUE; + begin + -------------------------------------- WTPLSQL Testing -- + wtplsql_skip_save := TRUE; + process_assertion; -- Should throw exception + wtplsql_skip_save := FALSE; + wt_assert.g_testcase := 'Test Process Assertion'; + wt_assert.isnull + (msg_in => l_msg + ,check_this_in => 'Exception missing, should not have arrived here'); + exception + -------------------------------------- WTPLSQL Testing -- + when ASSERT_FAILURE_EXCEPTION then + wtplsql_skip_save := FALSE; + wt_assert.g_testcase := 'Test Process Assertion'; + wt_assert.eq + (msg_in => l_msg + ,check_this_in => SQLERRM + ,against_this_in => 'ORA-20004: Process Assertion Forced Failure' || CHR(10) || + ' Assertion THIS Failed.' || CHR(10) || + ' Testcase: PROCESS_ASSERTION' || CHR(10) || + ' Expected "PASS" and got "FAIL"'); + -------------------------------------- WTPLSQL Testing -- + when OTHERS then + wtplsql_skip_save := FALSE; + wt_assert.g_testcase := 'Test Process Assertion'; + wt_assert.isnull + (msg_in => l_msg + ,check_this_in => 'Incorrect Exception Thrown: ' || + substr(dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace + ,1,3950) ); + end; + end t_process_assertion; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure compare_queries ( + check_query_in in varchar2, + against_query_in in varchar2) +is + l_ret_txt varchar2(10); + l_qry_txt varchar2(32000); + l_exec_txt varchar2(32767); +begin + -- Define Query for the Comparison + l_qry_txt := 'with check_query as (' || check_query_in || + '), against_query as (' || against_query_in || + '), q1 as (select * from check_query' || + ' MINUS select * from against_query' || + '), q2 as (select * from against_query' || + ' MINUS select * from check_query' || + ') select * from q1 UNION select * from q2' ; + ---------------------------------------- + -- Define EXECUTE IMMEDIATE text + l_exec_txt := +'declare + cursor cur is ' || l_qry_txt || '; + rec cur%rowtype; +begin + open cur; + fetch cur into rec; + :ret_txt := case cur%FOUND when TRUE then ''FOUND'' + else ''NOTFOUND'' end; + close cur; +end;'; + ---------------------------------------- + -- Run the Comparison + execute immediate l_exec_txt using out l_ret_txt; + if l_ret_txt = 'FOUND' + then + g_rec.last_pass := FALSE; -- Some Difference Found + else + g_rec.last_pass := TRUE; -- Nothing found, queries match + end if; + -- No Exceptions Raised + g_rec.last_details := 'Comparison Query: ' || l_qry_txt; +exception + when OTHERS + then + g_rec.last_details := SQLERRM || CHR(10) || + 'FAILURE of Compare Query: ' || l_qry_txt || ';'; + g_rec.last_pass := FALSE; +end compare_queries; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_compare_queries + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'COMPARE_QUERIES Bad Query Test 1'; + compare_queries ( + check_query_in => 'select bogus123 from bogus456', + against_query_in => 'select bogus987 from bogus654'); + temp_rec := g_rec; + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this( + msg_in => 'temp_rec.last_details', + check_this_in => (temp_rec.last_details like + '%PL/SQL: ORA-00942: table or view does not exist%')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'COMPARE_QUERIES Bad Query Test 2'; + compare_queries ( + check_query_in => 'select table_name from user_tables', + against_query_in => 'select tablespace_name from user_tables'); + temp_rec := g_rec; + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details like + '%Comparison Query: with check_query as' || + ' (select table_name from user_tables%'); + end t_compare_queries; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--------------------- +-- Public Procedures +--------------------- + +------------------------------------------------------------ +function last_pass + return boolean +is +begin + return g_rec.last_pass; +end last_pass; + +function last_assert + return varchar2 +is +begin + return g_rec.last_assert; +end last_assert; + +function last_msg + return varchar2 +is +begin + return g_rec.last_msg; +end last_msg; + +function last_details + return varchar2 +is +begin + return g_rec.last_details; +end last_details; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_last_values + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Last Values Tests'; + wt_assert.eq ( + msg_in => 'Last Pass', + check_this_in => last_pass, + against_this_in => g_rec.last_pass, + null_ok_in => TRUE); + wt_assert.eq ( + msg_in => 'Last Assert', + check_this_in => last_assert, + against_this_in => g_rec.last_assert, + null_ok_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + temp_rec := g_rec; + wt_assert.eq ( + msg_in => 'Last MSG', + check_this_in => last_msg, + against_this_in => temp_rec.last_msg, + null_ok_in => TRUE); + wt_assert.eq ( + msg_in => 'Last Details', + check_this_in => last_details, + against_this_in => g_rec.last_details, + null_ok_in => TRUE); + end t_last_values; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure reset_globals +is +begin + g_testcase := ''; + g_rec.last_pass := NULL; + g_rec.raise_exception := FALSE; + g_rec.last_assert := ''; + g_rec.last_msg := ''; + g_rec.last_details := ''; +end reset_globals; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_reset_globals + is + begin + reset_globals; -- Resets g_testcase + temp_rec := g_rec; + temp_testcase := g_testcase; + -------------------------------------- WTPLSQL Testing -- + g_testcase := 'RESET_GLOBALS'; + wt_assert.isnull( + msg_in => 'temp_testcase', + check_this_in => temp_testcase); + wt_assert.isnull + (msg_in => 'temp_rec.last_pass' + ,check_this_in => temp_rec.last_pass); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq( + msg_in => 'temp_rec.raise_exception', + check_this_in => temp_rec.raise_exception, + against_this_in => FALSE); + wt_assert.isnull + (msg_in => 'temp_rec.last_assert' + ,check_this_in => temp_rec.last_assert); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull + (msg_in => 'temp_rec.last_msg' + ,check_this_in => temp_rec.last_msg); + wt_assert.isnull + (msg_in => 'temp_rec.last_details' + ,check_this_in => temp_rec.last_details); + end t_reset_globals; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function get_NLS_DATE_FORMAT + return varchar2 +is + l_format varchar2(50); +begin + select value into l_format + from nls_session_parameters + where parameter in 'NLS_DATE_FORMAT'; + return l_format; +end get_NLS_DATE_FORMAT; + +procedure set_NLS_DATE_FORMAT + (in_format in varchar2 default 'DD-MON-YYYY HH24:MI:SS') +is +begin + execute immediate 'alter session set NLS_DATE_FORMAT = ''' || + in_format || ''''; +end set_NLS_DATE_FORMAT; + +function get_NLS_TIMESTAMP_FORMAT + return varchar2 +is + l_format varchar2(50); +begin + select value into l_format + from nls_session_parameters + where parameter in 'NLS_TIMESTAMP_FORMAT'; + return l_format; +end get_NLS_TIMESTAMP_FORMAT; + +procedure set_NLS_TIMESTAMP_FORMAT + (in_format in varchar2 default 'DD-MON-YYYY HH24:MI:SS.FF6') +is +begin + execute immediate 'alter session set NLS_TIMESTAMP_FORMAT = ''' || + in_format || ''''; +end set_NLS_TIMESTAMP_FORMAT; + +function get_NLS_TIMESTAMP_TZ_FORMAT + return varchar2 +is + l_format varchar2(50); +begin + select value into l_format + from nls_session_parameters + where parameter in 'NLS_TIMESTAMP_TZ_FORMAT'; + return l_format; +end get_NLS_TIMESTAMP_TZ_FORMAT; + +procedure set_NLS_TIMESTAMP_TZ_FORMAT + (in_format in varchar2 default 'DD-MON-YYYY HH24:MI:SS.FF6 TZH:TZM') +is +begin + execute immediate 'alter session set NLS_TIMESTAMP_TZ_FORMAT = ''' || + in_format || ''''; +end set_NLS_TIMESTAMP_TZ_FORMAT; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_nls_settings + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'NLS Settings'; + set_NLS_DATE_FORMAT('DD-MON-YYYY'); + wt_assert.eq + (msg_in => 'get_NLS_DATE_FORMAT 1' + ,check_this_in => get_NLS_DATE_FORMAT + ,against_this_in => 'DD-MON-YYYY'); + set_NLS_DATE_FORMAT; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'get_NLS_DATE_FORMAT 2' + ,check_this_in => get_NLS_DATE_FORMAT + ,against_this_in => 'DD-MON-YYYY HH24:MI:SS'); + set_NLS_TIMESTAMP_FORMAT('DD-MON-YYYY'); + wt_assert.eq + (msg_in => 'get_NLS_TIMESTAMP_FORMAT 2' + ,check_this_in => get_NLS_TIMESTAMP_FORMAT + ,against_this_in => 'DD-MON-YYYY'); + set_NLS_TIMESTAMP_FORMAT; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'get_NLS_TIMESTAMP_FORMAT 2' + ,check_this_in => get_NLS_TIMESTAMP_FORMAT + ,against_this_in => 'DD-MON-YYYY HH24:MI:SS.FF6'); + set_NLS_TIMESTAMP_TZ_FORMAT('DD-MON-YYYY'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'get_NLS_TIMESTAMP_TZ_FORMAT 2' + ,check_this_in => get_NLS_TIMESTAMP_TZ_FORMAT + ,against_this_in => 'DD-MON-YYYY'); + set_NLS_TIMESTAMP_TZ_FORMAT; + wt_assert.eq + (msg_in => 'get_NLS_TIMESTAMP_TZ_FORMAT 2' + ,check_this_in => get_NLS_TIMESTAMP_TZ_FORMAT + ,against_this_in => 'DD-MON-YYYY HH24:MI:SS.FF6 TZH:TZM'); + end t_nls_settings; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------ +-- Assertion Procedures +------------------------ + +------------------------------------------------------------ +procedure this ( + msg_in in varchar2, + check_this_in in boolean, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false) +is +begin + g_rec.last_assert := 'THIS'; + g_rec.last_msg := substr(msg_in,1,200); + g_rec.last_pass := nvl(check_this_in, FALSE); + g_rec.last_details := 'Expected "TRUE" and got "' || + boolean_to_status(check_this_in) || '"'; + g_rec.raise_exception := raise_exc_in; + process_assertion; +end this; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_this + is + l_found_exception BOOLEAN; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'This Happy Path'; + wt_assert.this ( + msg_in => 'Run Test', + check_this_in => TRUE); + temp_rec := g_rec; + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_assert', + check_this_in => temp_rec.last_assert, + against_this_in => 'THIS'); + wt_assert.eq ( + msg_in => 'temp_rec.last_msg', + check_this_in => temp_rec.last_msg, + against_this_in => 'Run Test'); + wt_assert.eq ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details, + against_this_in => 'Expected "TRUE" and got "TRUE"'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'This Sad Path 1'; + wtplsql_skip_save := TRUE; + this ( + msg_in => 'Not Used', + check_this_in => FALSE); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'This Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + this ( + msg_in => 'Not Used', + check_this_in => FALSE, + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + -------------------------------------- WTPLSQL Testing -- + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'This Sad Path 3'; + wtplsql_skip_save := TRUE; + this ( + msg_in => 'Not Used', + check_this_in => NULL); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + end t_this; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- EQ: string overload +procedure eq ( + msg_in in varchar2, + check_this_in in varchar2, + against_this_in in varchar2, + null_ok_in in boolean := false, + raise_exc_in in boolean := false) +is +begin + g_rec.last_assert := 'EQ'; + g_rec.last_msg := msg_in; + g_rec.last_pass := ( nvl(check_this_in = against_this_in, false) + or ( check_this_in is null + and against_this_in is null + and null_ok_in ) + ); + g_rec.last_details := 'Expected "' || substr(against_this_in,1,1000) || + '" and got "' || substr(check_this_in ,1,1000) || + '"'; + g_rec.raise_exception := raise_exc_in; + process_assertion; +end eq; + +-- EQ: boolean overload +procedure eq ( + msg_in in varchar2, + check_this_in in boolean, + against_this_in in boolean, + null_ok_in in boolean := false, + raise_exc_in in boolean := false) +is +begin + eq (msg_in => msg_in + ,check_this_in => boolean_to_status(check_this_in) + ,against_this_in => boolean_to_status(against_this_in) + ,null_ok_in => null_ok_in + ,raise_exc_in => raise_exc_in); +end eq; + +-- EQ: XMLTYPE +procedure eq ( + msg_in in varchar2, + check_this_in in XMLTYPE, + against_this_in in XMLTYPE, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false) +is +begin + g_rec.last_assert := 'EQ'; + g_rec.last_msg := msg_in; + g_rec.last_pass := nvl(xmltype.getclobval(check_this_in) = + xmltype.getclobval(against_this_in), FALSE); + g_rec.last_details := 'Expected "' || substr(xmltype.getclobval(against_this_in),1,1000) || + '" and got "' || substr(xmltype.getclobval(check_this_in) ,1,1000) || + '"'; + g_rec.raise_exception := raise_exc_in; + process_assertion; +end eq; + +-- EQ: CLOB +procedure eq ( + msg_in in varchar2, + check_this_in in CLOB, + against_this_in in CLOB, + null_ok_in in boolean := false, + raise_exc_in in boolean := false) +is +begin + g_rec.last_assert := 'EQ'; + g_rec.last_msg := msg_in; + g_rec.last_pass := ( nvl(check_this_in = against_this_in, false) + or ( check_this_in is null + and against_this_in is null + and null_ok_in ) + ); + g_rec.last_details := 'Expected "' || substr(against_this_in,1,1000) || + '" and got "' || substr(check_this_in ,1,1000) || + '"'; + g_rec.raise_exception := raise_exc_in; + process_assertion; +end eq; + +-- EQ: BLOB +procedure eq ( + msg_in in varchar2, + check_this_in in BLOB, + against_this_in in BLOB, + null_ok_in in boolean := false, + raise_exc_in in boolean := false) +is + compare_results number; +begin + g_rec.last_assert := 'EQ'; + g_rec.last_msg := msg_in; + compare_results := nvl(DBMS_LOB.COMPARE(check_this_in, against_this_in),-1); + g_rec.last_pass := ( (compare_results = 0) + or ( check_this_in is null + and against_this_in is null + and null_ok_in ) + ); + g_rec.last_details := 'DBMS_LOB.COMPARE on BLOBs, compare_results: ' || compare_results; + g_rec.raise_exception := raise_exc_in; + process_assertion; +end eq; + +------------------------------------------------------------------------- +-- This is the start of a MASSIVE Unit Test on the "EQ" assertion --- +------------------------------------------------------------------------- + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_eq + is + l_found_exception BOOLEAN; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ VARCHAR2 Happy Path 1'; + eq ( + msg_in => 'Run Test', + check_this_in => 'X', + against_this_in => 'X'); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_pass value', + check_this_in => temp_rec.last_pass); + wt_assert.this ( + msg_in => 'temp_rec.last_pass', + check_this_in => (temp_rec.last_pass = TRUE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_assert value', + check_this_in => temp_rec.last_assert); + wt_assert.this ( + msg_in => 'temp_rec.last_assert', + check_this_in => (temp_rec.last_assert = 'EQ')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_msg value', + check_this_in => temp_rec.last_msg); + wt_assert.this ( + msg_in => 'temp_rec.last_msg', + check_this_in => (temp_rec.last_msg = 'Run Test')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details', + check_this_in => (temp_rec.last_details = 'Expected "X" and got "X"')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ VARCHAR2 Happy Path 2'; + eq ( + msg_in => 'Run Test', + check_this_in => 'X', + against_this_in => 'X', + null_ok_in => TRUE); + wt_assert.g_testcase := 'EQ VARCHAR2 Happy Path 3'; + eq ( + msg_in => 'Run Test', + check_this_in => '', + against_this_in => '', + null_ok_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ VARCHAR2 Sad Path 1'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => 'X', + against_this_in => 'Y'); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => 'X'); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => 'Y'); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ VARCHAR2 Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + eq ( + msg_in => 'Not Used', + check_this_in => 'X', + against_this_in => 'Y', + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + -------------------------------------- WTPLSQL Testing -- + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ VARCHAR2 Sad Path 3'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => '', + against_this_in => 'Y'); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull ( + msg_in => 'check_this_in value', + check_this_in => ''); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => 'Y'); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ VARCHAR2 Sad Path 4'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => '', + against_this_in => ''); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull ( + msg_in => 'check_this_in value', + check_this_in => ''); + wt_assert.isnull ( + msg_in => 'against_this_in value', + check_this_in => ''); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ VARCHAR2 Sad Path 5'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => 'X', + against_this_in => 'Y', + null_ok_in => TRUE); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => 'X'); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => 'Y'); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ VARCHAR2 Sad Path 6'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => '', + against_this_in => 'Y', + null_ok_in => TRUE); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull ( + msg_in => 'check_this_in value', + check_this_in => ''); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => 'Y'); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + -- VARCHAR2 includes Includes ROWID + wt_assert.g_testcase := 'EQ ROWID Happy Path 1'; + eq ( + msg_in => 'Run Test', + check_this_in => temp_rowid1, + against_this_in => temp_rowid1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ ROWID Sad Path 1'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_rowid1, + against_this_in => temp_rowid2); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_rowid1); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => temp_rowid2); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + -- VARCHAR2 includes Includes LONG + wt_assert.g_testcase := 'EQ LONG Happy Path 1'; + eq ( + msg_in => 'Run Test', + check_this_in => temp_long1, + against_this_in => temp_long1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ LONG Sad Path 1'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_long1, + against_this_in => temp_long2); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_long1); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => temp_long2); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + -- VARCHAR2 includes Includes RAW + wt_assert.g_testcase := 'EQ RAW Happy Path 1'; + eq ( + msg_in => 'Run Test', + check_this_in => temp_raw1, + against_this_in => temp_raw1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ RAW Sad Path 1'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_raw1, + against_this_in => temp_raw2); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_raw1); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => temp_raw2); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + -- VARCHAR2 includes Includes LONG RAW + wt_assert.g_testcase := 'EQ LONG RAW Happy Path 1'; + eq ( + msg_in => 'Run Test', + check_this_in => temp_lraw1, + against_this_in => temp_lraw1); + -------------------------------------- WTPLSQL Testing -- + -- VARCHAR2 includes Includes LONG RAW + wt_assert.g_testcase := 'EQ LONG RAW Happy Path 1'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_lraw1, + against_this_in => temp_lraw2); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ LONG RAW Sad Path 1'; + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_lraw1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => temp_lraw2); + wt_assert.this ( + msg_in => 'Sad Path 1', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + -- VARCHAR2 includes Includes NVARCHAR2 + wt_assert.g_testcase := 'EQ NVARCHAR2 Happy Path 1'; + eq ( + msg_in => 'Run Test', + check_this_in => temp_nc1, + against_this_in => temp_nc1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ NVARCHAR2 Sad Path 1'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_nc1, + against_this_in => temp_nc2); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_nc1); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => temp_nc2); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ BOOLEAN Happy Path 1'; + eq ( + msg_in => 'Run Test', + check_this_in => FALSE, + against_this_in => FALSE); + wt_assert.g_testcase := 'EQ BOOLEAN Happy Path 2'; + eq ( + msg_in => 'Run Test', + check_this_in => FALSE, + against_this_in => FALSE, + null_ok_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ BOOLEAN Happy Path 3'; + eq ( + msg_in => 'Run Test', + check_this_in => temp_bool, + against_this_in => temp_bool, + null_ok_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ BOOLEAN Happy Sad 1'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => FALSE, + against_this_in => TRUE); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => FALSE); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => TRUE); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ BOOLEAN Happy Sad 2'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => FALSE, + against_this_in => temp_bool); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => FALSE); + wt_assert.isnull ( + msg_in => 'against_this_in value', + check_this_in => temp_bool); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ BOOLEAN Happy Sad 3'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => FALSE, + against_this_in => TRUE, + null_ok_in => TRUE); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => FALSE); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => TRUE); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ BOOLEAN Happy Sad 4'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => FALSE, + against_this_in => temp_bool, + null_ok_in => TRUE); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => FALSE); + wt_assert.isnull ( + msg_in => 'against_this_in value', + check_this_in => temp_bool); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ NUMBER Happy Path 1'; + eq ( + msg_in => 'Run Test', + check_this_in => 4, + against_this_in => 4); + wt_assert.g_testcase := 'EQ NUMBER Happy Path 2'; + eq ( + msg_in => 'Run Test', + check_this_in => 9876543210987654321098765432109876543210, + against_this_in => 9876543210987654321098765432109876543210); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ NUMBER Happy Path 1'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => 4, + against_this_in => 5); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => 4); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => 5); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + -- EQ: NUMBER implicit conversion includes PLS_INTEGER + wt_assert.g_testcase := 'EQ PLS_INTEGER Happy Path 1'; + eq ( + msg_in => 'Run Test', + check_this_in => temp_pint1, + against_this_in => temp_pint1); + wtplsql_skip_save := TRUE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ PLS_INTEGER Sad Path 1'; + eq ( + msg_in => 'Not Used', + check_this_in => temp_pint1, + against_this_in => temp_pint2); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_pint1); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => temp_pint2); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ DATE Happy Path 1'; + eq ( + msg_in => 'Run Test', + check_this_in => temp_date, + against_this_in => temp_date); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ DATE Sad Path 1'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_date, + against_this_in => temp_date + 1/24); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_date); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => temp_date + 1/24); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + -- EQ: DATE implicit conversion includes TIMESTAMP + wt_assert.g_testcase := 'EQ TIMSETAMP Happy Path 1'; + eq ( + msg_in => 'EQ TIMSETAMP Happy Path 1', + check_this_in => temp_tstmp, + against_this_in => temp_tstmp); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ TIMSETAMP Sad Path 1'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_tstmp, + against_this_in => temp_tstmp + 1/24); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_tstmp); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => temp_tstmp + 1/24); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + -- EQ: DATE implicit conversion includes TIMESTAMP + wt_assert.g_testcase := 'EQ TIMSETAMP WITH LOCAL TIME ZONE Happy Path 1'; + eq ( + msg_in => 'Run Test', + check_this_in => temp_tstzn, + against_this_in => temp_tstzn); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ TIMSETAMP WITH LOCAL TIME ZONE Sad Path 1'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_tstlzn, + against_this_in => temp_tstlzn + 1/24); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_tstlzn); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => temp_tstlzn + 1/24); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + -- EQ: DATE implicit conversion includes TIMESTAMP + wt_assert.g_testcase := 'EQ TIMSETAMP WITH TIME ZONE Happy Path 1'; + eq ( + msg_in => 'Run Test', + check_this_in => temp_tstzn, + against_this_in => temp_tstzn); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ TIMSETAMP WITH TIME ZONE Sad Path 1'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_tstzn, + against_this_in => temp_tstzn + 1/24); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_tstzn); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => temp_tstzn + 1/24); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + -- EQ: DATE implicit conversion includes INTERVAL + wt_assert.g_testcase := 'EQ INTERVAL DAY TO SECOND Happy Path 1'; + eq ( + msg_in => 'Run Test', + check_this_in => temp_intds1, + against_this_in => temp_intds1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ INTERVAL DAY TO SECOND Sad Path 1'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_intds1, + against_this_in => temp_intds2); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_intds1); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => temp_intds2); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + -- EQ: DATE implicit conversion includes INTERVAL + wt_assert.g_testcase := 'EQ INTERVAL YEAR TO MONTH Happy Path 1'; + eq ( + msg_in => 'Run Test', + check_this_in => temp_intym1, + against_this_in => temp_intym1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ INTERVAL YEAR TO MONTH Sad Path 1'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_intym1, + against_this_in => temp_intym2); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_intym1); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => temp_intym2); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ XMLTYPE Happy Path 1'; + eq ( + msg_in => 'Run Test', + check_this_in => temp_xml1, + against_this_in => temp_xml1); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_pass value', + check_this_in => temp_rec.last_pass); + wt_assert.this ( + msg_in => 'temp_rec.last_pass', + check_this_in => (temp_rec.last_pass = TRUE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => ' g_rec.last_assert value', + check_this_in => temp_rec.last_assert); + wt_assert.this ( + msg_in => 'temp_rec.last_assert', + check_this_in => (temp_rec.last_assert = 'EQ')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_msg value', + check_this_in => temp_rec.last_msg); + wt_assert.this ( + msg_in => 'temp_rec.last_msg', + check_this_in => (temp_rec.last_msg = 'Run Test')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details', + check_this_in => (temp_rec.last_details like + 'Expected "<?xml version="1.0" encoding="UTF-8"?>%')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ XMLTYPE Sad Path 1'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_xml1, + against_this_in => temp_xml2); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => xmltype.getclobval(temp_xml1)); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => xmltype.getclobval(temp_xml2)); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ XMLTYPE Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + eq ( + msg_in => 'Not Used', + check_this_in => temp_xml1, + against_this_in => temp_xml2, + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + -------------------------------------- WTPLSQL Testing -- + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ CLOB Happy Path 1'; + eq ( + msg_in => 'Run Test', + check_this_in => temp_clob1, + against_this_in => temp_clob1); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_pass value', + check_this_in => temp_rec.last_pass); + wt_assert.this ( + msg_in => 'temp_rec.last_pass', + check_this_in => (temp_rec.last_pass = TRUE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_assert value', + check_this_in => temp_rec.last_assert); + wt_assert.this ( + msg_in => 'temp_rec.last_assert', + check_this_in => (temp_rec.last_assert = 'EQ')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_msg value', + check_this_in => temp_rec.last_msg); + wt_assert.this ( + msg_in => 'temp_rec.last_msg', + check_this_in => (temp_rec.last_msg = 'Run Test')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details', + check_this_in => (temp_rec.last_details like + 'Expected "<?xml version="1.0" encoding="UTF-8"?>%')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ CLOB Happy Path 2'; + eq ( + msg_in => 'Run Test', + check_this_in => temp_clob1, + against_this_in => temp_clob1, + null_ok_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ CLOB Happy Path 3'; + eq ( + msg_in => 'Run Test', + check_this_in => cast (NULL as CLOB), + against_this_in => cast (NULL as CLOB), + null_ok_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ CLOB Sad Path 1'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_clob1, + against_this_in => temp_clob2); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_clob1); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => temp_clob2); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ CLOB Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + eq ( + msg_in => 'Not Used', + check_this_in => temp_clob1, + against_this_in => temp_clob2, + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + -------------------------------------- WTPLSQL Testing -- + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ CLOB Sad Path 3'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_clob1, + against_this_in => cast (NULL as CLOB)); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_clob1); + wt_assert.isnull ( + msg_in => 'against_this_in value', + check_this_in => cast (NULL as CLOB)); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ CLOB Sad Path 4'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_clob1, + against_this_in => cast (NULL as CLOB), + null_ok_in => TRUE); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_clob1); + wt_assert.isnull ( + msg_in => 'against_this_in value', + check_this_in => cast (NULL as CLOB)); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ NCLOB Happy Path 1'; + eq ( + msg_in => 'Run Test', + check_this_in => temp_nclob1, + against_this_in => temp_nclob1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ NCLOB Happy Path 2'; + eq ( + msg_in => 'Run Test', + check_this_in => temp_nclob1, + against_this_in => temp_nclob1, + null_ok_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ NCLOB Happy Path 3'; + eq ( + msg_in => 'Run Test', + check_this_in => cast (NULL as NCLOB), + against_this_in => cast (NULL as NCLOB), + null_ok_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ NCLOB Sad Path 1'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_nclob1, + against_this_in => temp_nclob2); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_nclob1); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => temp_nclob2); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ NCLOB Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + eq ( + msg_in => 'Not Used', + check_this_in => temp_nclob1, + against_this_in => temp_nclob2, + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + -------------------------------------- WTPLSQL Testing -- + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ NCLOB Sad Path 3'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_nclob1, + against_this_in => cast (NULL as NCLOB)); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_nclob1); + wt_assert.isnull ( + msg_in => 'against_this_in value', + check_this_in => cast (NULL as NCLOB)); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ NCLOB Sad Path 4'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_nclob1, + against_this_in => cast (NULL as NCLOB), + null_ok_in => TRUE); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_nclob1); + wt_assert.isnull ( + msg_in => 'against_this_in value', + check_this_in => cast (NULL as NCLOB)); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ BLOB Happy Path 1'; + eq ( + msg_in => 'Run Test', + check_this_in => temp_blob1, + against_this_in => temp_blob1); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_pass value', + check_this_in => temp_rec.last_pass); + wt_assert.this ( + msg_in => 'temp_rec.last_pass', + check_this_in => (temp_rec.last_pass = TRUE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_assert value', + check_this_in => temp_rec.last_assert); + wt_assert.this ( + msg_in => 'temp_rec.last_assert', + check_this_in => (temp_rec.last_assert = 'EQ')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_msg value', + check_this_in => temp_rec.last_msg); + wt_assert.this ( + msg_in => 'temp_rec.last_msg', + check_this_in => (temp_rec.last_msg = 'Run Test')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details', + check_this_in => (temp_rec.last_details = + 'DBMS_LOB.COMPARE on BLOBs, compare_results: 0')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ BLOB Happy Path 2'; + eq ( + msg_in => 'Run Test', + check_this_in => temp_blob1, + against_this_in => temp_blob1, + null_ok_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ BLOB Happy Path 3'; + eq ( + msg_in => 'Run Test', + check_this_in => cast (NULL as BLOB), + against_this_in => cast (NULL as BLOB), + null_ok_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ BLOB Sad Path 1'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_blob1, + against_this_in => temp_blob2); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_blob1); + wt_assert.isnotnull ( + msg_in => 'against_this_in value', + check_this_in => temp_blob2); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ BLOB Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + eq ( + msg_in => 'Not Used', + check_this_in => temp_blob1, + against_this_in => temp_blob2, + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + -------------------------------------- WTPLSQL Testing -- + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ BLOB Sad Path 3'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_blob1, + against_this_in => cast (NULL as BLOB)); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_blob1); + wt_assert.isnull ( + msg_in => 'against_this_in value', + check_this_in => cast (NULL as BLOB)); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQ BLOB Sad Path 4'; + wtplsql_skip_save := TRUE; + eq ( + msg_in => 'Not Used', + check_this_in => temp_blob1, + against_this_in => cast (NULL as BLOB), + null_ok_in => TRUE); + wtplsql_skip_save := FALSE; + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'check_this_in value', + check_this_in => temp_blob1); + wt_assert.isnull ( + msg_in => 'against_this_in value', + check_this_in => cast (NULL as BLOB)); + wt_assert.this ( + msg_in => 'last_pass = FALSE', + check_this_in => (temp_rec.last_pass = FALSE)); + end t_eq; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + +----------------------------------------------------------------------- +-- This is the end of a MASSIVE Unit Test on the "EQ" assertion --- +----------------------------------------------------------------------- + + +------------------------------------------------------------ +-- ISNOTNULL string overload +procedure isnotnull ( + msg_in in varchar2, + check_this_in in varchar2, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false) +is +begin + g_rec.last_assert := 'ISNOTNULL'; + g_rec.last_msg := msg_in; + g_rec.last_pass := (check_this_in is not null); + g_rec.last_details := 'Expected NOT NULL and got "' || + substr(check_this_in,1,2000) || '"'; + g_rec.raise_exception := raise_exc_in; + process_assertion; +end isnotnull; + +-- ISNOTNULL boolean overload +procedure isnotnull ( + msg_in in varchar2, + check_this_in in boolean, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false) +is +begin + isnotnull (msg_in => msg_in + ,check_this_in => boolean_to_status(check_this_in) + ,null_ok_in => null_ok_in + ,raise_exc_in => raise_exc_in); +end isnotnull; + +-- ISNOTNULL CLOB overload +procedure isnotnull ( + msg_in in varchar2, + check_this_in in CLOB, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false) +is +begin + g_rec.last_assert := 'ISNOTNULL'; + g_rec.last_msg := msg_in; + g_rec.last_pass := (check_this_in is not null); + g_rec.last_details := 'Expected NOT NULL and got "' || + substr(check_this_in,1,2000) || '"'; + g_rec.raise_exception := raise_exc_in; + process_assertion; +end isnotnull; + +-- ISNOTNULL BLOB overload +procedure isnotnull ( + msg_in in varchar2, + check_this_in in BLOB, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false) +is +begin + g_rec.last_assert := 'ISNOTNULL'; + g_rec.last_msg := msg_in; + g_rec.last_pass := (check_this_in is not null); + if g_rec.last_pass + then + g_rec.last_details := 'BLOB is NOT NULL'; + else + g_rec.last_details := 'BLOB is NULL'; + end if; + g_rec.raise_exception := raise_exc_in; + process_assertion; +end isnotnull; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_isnotnull + is + l_found_exception BOOLEAN; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNOTNULL VARCHAR2 Happy Path 1'; + isnotnull ( + msg_in => 'Run Test', + check_this_in => 'X'); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => TRUE); + wt_assert.eq ( + msg_in => 'temp_rec.last_assert', + check_this_in => temp_rec.last_assert, + against_this_in => 'ISNOTNULL'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_msg', + check_this_in => temp_rec.last_msg, + against_this_in => 'Run Test'); + wt_assert.eq ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details, + against_this_in => 'Expected NOT NULL and got "X"'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNOTNULL VARCHAR2 Sad Path 1'; + wtplsql_skip_save := TRUE; + isnotnull ( + msg_in => 'Not Used', + check_this_in => ''); + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'g_rec.last_pass', + check_this_in => g_rec.last_pass, + against_this_in => FALSE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNOTNULL VARCHAR2 Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + isnotnull ( + msg_in => 'Not Used', + check_this_in => '', + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + -------------------------------------- WTPLSQL Testing -- + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'g_rec.last_pass', + check_this_in => g_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNOTNULL BOOLEAN Happy Path 1'; + isnotnull ( + msg_in => 'Run Test', + check_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNOTNULL BOOLEAN Sad Path 1'; + wtplsql_skip_save := TRUE; + isnotnull ( + msg_in => 'Not Used', + check_this_in => temp_bool); + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'g_rec.last_pass', + check_this_in => g_rec.last_pass, + against_this_in => FALSE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNOTNULL BOOLEAN Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + isnotnull ( + msg_in => 'Not Used', + check_this_in => temp_bool, + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + -------------------------------------- WTPLSQL Testing -- + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'g_rec.last_pass', + check_this_in => g_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNOTNULL CLOB Happy Path 1'; + isnotnull ( + msg_in => 'Run Test', + check_this_in => temp_clob1); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => TRUE); + wt_assert.eq ( + msg_in => 'temp_rec.last_assert', + check_this_in => temp_rec.last_assert, + against_this_in => 'ISNOTNULL'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_msg', + check_this_in => temp_rec.last_msg, + against_this_in => 'Run Test'); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details', + check_this_in => (temp_rec.last_details like + 'Expected NOT NULL and got "<?xml version="1.0" encoding="UTF-8"?>%')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNOTNULL CLOB Sad Path 1'; + wtplsql_skip_save := TRUE; + isnotnull ( + msg_in => 'Not Used', + check_this_in => cast (null as CLOB)); + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'g_rec.last_pass', + check_this_in => g_rec.last_pass, + against_this_in => FALSE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNOTNULL CLOB Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + isnotnull ( + msg_in => 'Not Used', + check_this_in => cast (null as CLOB), + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + -------------------------------------- WTPLSQL Testing -- + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'g_rec.last_pass', + check_this_in => g_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNOTNULL BLOB Happy Path 1'; + isnotnull ( + msg_in => 'Run Test', + check_this_in => temp_blob1); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => TRUE); + wt_assert.eq ( + msg_in => 'temp_rec.last_assert', + check_this_in => temp_rec.last_assert, + against_this_in => 'ISNOTNULL'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_msg', + check_this_in => temp_rec.last_msg, + against_this_in => 'Run Test'); + wt_assert.eq ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details, + against_this_in => 'BLOB is NOT NULL'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNOTNULL BLOB Sad Path 1'; + wtplsql_skip_save := TRUE; + isnotnull ( + msg_in => 'Not Used', + check_this_in => cast (null as BLOB)); + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'g_rec.last_pass', + check_this_in => g_rec.last_pass, + against_this_in => FALSE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNOTNULL BLOB Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + isnotnull ( + msg_in => 'Not Used', + check_this_in => cast (null as BLOB), + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + -------------------------------------- WTPLSQL Testing -- + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'g_rec.last_pass', + check_this_in => g_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + end t_isnotnull; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- ISNULL string overload +procedure isnull ( + msg_in in varchar2, + check_this_in in varchar2, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false) +is +begin + g_rec.last_assert := 'ISNULL'; + g_rec.last_msg := msg_in; + g_rec.last_pass := (check_this_in is null); + g_rec.last_details := 'Expected NULL and got "' || + substr(check_this_in,1,2000) || '"'; + g_rec.raise_exception := raise_exc_in; + process_assertion; +end isnull; + +-- ISNULL boolean overload +procedure isnull ( + msg_in in varchar2, + check_this_in in boolean, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false) +is +begin + isnull (msg_in => msg_in + ,check_this_in => boolean_to_status(check_this_in) + ,null_ok_in => null_ok_in + ,raise_exc_in => raise_exc_in); +end isnull; + +-- ISNULL CLOB overload +procedure isnull ( + msg_in in varchar2, + check_this_in in CLOB, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false) +is +begin + g_rec.last_assert := 'ISNULL'; + g_rec.last_msg := msg_in; + g_rec.last_pass := (check_this_in is null); + g_rec.last_details := 'Expected NULL and got "' || + substr(check_this_in,1,2000) || '"'; + g_rec.raise_exception := raise_exc_in; + process_assertion; +end isnull; + +-- ISNULL BLOB overload +procedure isnull ( + msg_in in varchar2, + check_this_in in BLOB, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false) +is +begin + g_rec.last_assert := 'ISNULL'; + g_rec.last_msg := msg_in; + g_rec.last_pass := (check_this_in is null); + if g_rec.last_pass + then + g_rec.last_details := 'BLOB is NULL'; + else + g_rec.last_details := 'BLOB is NOT NULL'; + end if; + g_rec.raise_exception := raise_exc_in; + process_assertion; +end isnull; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_isnull + is + l_found_exception BOOLEAN; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNULL VARCHAR2 Happy Path 1'; + isnull ( + msg_in => 'Run Test', + check_this_in => ''); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => TRUE); + wt_assert.eq ( + msg_in => 'temp_rec.last_assert', + check_this_in => temp_rec.last_assert, + against_this_in => 'ISNULL'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_msg', + check_this_in => temp_rec.last_msg, + against_this_in => 'Run Test'); + wt_assert.eq ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details, + against_this_in => 'Expected NULL and got ""'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNULL VARCHAR2 Sad Path 1'; + wtplsql_skip_save := TRUE; + isnull ( + msg_in => 'Not Used', + check_this_in => 'X'); + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'g_rec.last_pass', + check_this_in => g_rec.last_pass, + against_this_in => FALSE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNULL VARCHAR2 Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + isnull ( + msg_in => 'Not Used', + check_this_in => 'X', + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'g_rec.last_pass', + check_this_in => g_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNULL BOOLEAN Happy Path 1'; + isnull ( + msg_in => 'Run Test', + check_this_in => temp_bool); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNULL BOOLEAN Sad Path 1'; + wtplsql_skip_save := TRUE; + isnull ( + msg_in => 'Not Used', + check_this_in => FALSE); + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'g_rec.last_pass', + check_this_in => g_rec.last_pass, + against_this_in => FALSE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNULL BOOLEAN Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + isnull ( + msg_in => 'Not Used', + check_this_in => FALSE, + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'g_rec.last_pass', + check_this_in => g_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNULL CLOB Happy Path 1'; + isnull ( + msg_in => 'Run Test', + check_this_in => cast (null as CLOB)); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => TRUE); + wt_assert.eq ( + msg_in => 'temp_rec.last_assert', + check_this_in => temp_rec.last_assert, + against_this_in => 'ISNULL'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_msg', + check_this_in => temp_rec.last_msg, + against_this_in => 'Run Test'); + wt_assert.eq ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details, + against_this_in => 'Expected NULL and got ""'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNULL CLOB Sad Path 1'; + wtplsql_skip_save := TRUE; + isnull ( + msg_in => 'Not Used', + check_this_in => temp_clob1); + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'g_rec.last_pass', + check_this_in => g_rec.last_pass, + against_this_in => FALSE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNULL CLOB Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + isnull ( + msg_in => 'Not Used', + check_this_in => temp_clob1, + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + -------------------------------------- WTPLSQL Testing -- + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'g_rec.last_pass', + check_this_in => g_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNULL BLOB Happy Path 1'; + isnull ( + msg_in => 'Run Test', + check_this_in => cast (null as BLOB)); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => TRUE); + wt_assert.eq ( + msg_in => 'temp_rec.last_assert', + check_this_in => temp_rec.last_assert, + against_this_in => 'ISNULL'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_msg', + check_this_in => temp_rec.last_msg, + against_this_in => 'Run Test'); + wt_assert.eq ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details, + against_this_in => 'BLOB is NULL'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNULL BLOB Sad Path 1'; + wtplsql_skip_save := TRUE; + isnull ( + msg_in => 'Not Used', + check_this_in => temp_blob1); + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'g_rec.last_pass', + check_this_in => g_rec.last_pass, + against_this_in => FALSE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'ISNULL BLOB Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + isnull ( + msg_in => 'Not Used', + check_this_in => temp_blob1, + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + -------------------------------------- WTPLSQL Testing -- + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'g_rec.last_pass', + check_this_in => g_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + end t_isnull; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Check a given call raises an exception +procedure raises ( + msg_in varchar2, + check_call_in in varchar2, + against_exc_in in varchar2) +is + l_sqlerrm varchar2(4000); + l_errstack varchar2(4000); +begin + begin + execute immediate check_call_in; + exception when OTHERS then + l_sqlerrm := SQLERRM; + l_errstack := substr(dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace + ,1,4000); + end; + -- + g_rec.last_assert := 'RAISES/THROWS'; + g_rec.last_msg := msg_in; + if against_exc_in is null AND l_sqlerrm is null + then + -- Both are Null + g_rec.last_pass := TRUE; + elsif l_sqlerrm is null OR against_exc_in is null + then + -- If both were Null, it would have been caught above. + -- So, only one can be Null + g_rec.last_pass := FALSE; + else + -- If either was Null, it would have been caught above. + g_rec.last_pass := nvl(l_sqlerrm like '%' || against_exc_in || '%', FALSE); + end if; + if against_exc_in is null + then + g_rec.last_details := 'No exception was expected' || + '. Exception raised was "' || l_sqlerrm || + '". Exception raised by: "' || check_call_in || '".'; + elsif l_sqlerrm is null + then + g_rec.last_details := 'Expected exception "%' || against_exc_in || + '%". No exception was raised by: "' || check_call_in || '".'; + else + g_rec.last_details := 'Expected exception "%' || against_exc_in || + '%". Actual exception raised was "' || l_sqlerrm || + '". Exception raised by: "' || check_call_in || '".'; + end if; + if not g_rec.last_pass + then + g_rec.last_details := + substr(g_rec.last_details || ' Error Stack: ' || l_errstack, 1, 4000); + end if; + process_assertion; +end raises; + +procedure raises ( + msg_in varchar2, + check_call_in in varchar2, + against_exc_in in number) +is +begin + if against_exc_in is null + then + raises ( + msg_in => msg_in, + check_call_in => check_call_in, + against_exc_in => ''); + else + raises ( + msg_in => msg_in, + check_call_in => check_call_in, + against_exc_in => '-' || lpad(abs(against_exc_in),5,'0')); + end if; +end raises; + +procedure throws ( + msg_in varchar2, + check_call_in in varchar2, + against_exc_in in varchar2) +is +begin + raises ( + msg_in => msg_in, + check_call_in => check_call_in, + against_exc_in => against_exc_in); +end throws; + +procedure throws ( + msg_in varchar2, + check_call_in in varchar2, + against_exc_in in number) +is +begin + raises ( + msg_in => msg_in, + check_call_in => check_call_in, + against_exc_in => against_exc_in); +end throws; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_raises + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Raises Tests Happy Path 1'; + raises ( + msg_in => 'RAISES Varchar2 Test', + check_call_in => 'begin wt_assert.bogus; end;', + against_exc_in => 'PLS-00302: component ''BOGUS'' must be declared'); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => TRUE); + wt_assert.eq ( + msg_in => 'temp_rec.last_assert', + check_this_in => temp_rec.last_assert, + against_this_in => 'RAISES/THROWS'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_msg', + check_this_in => temp_rec.last_msg, + against_this_in => 'RAISES Varchar2 Test'); + wt_assert.eq ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details, + against_this_in => 'Expected exception "%PLS-00302: component ''BOGUS'' must be declared%". ' || + 'Actual exception raised was "ORA-06550: line 1, column 17:' || CHR(10) || + 'PLS-00302: component ''BOGUS'' must be declared". ' || + 'Exception raised by: "begin wt_assert.bogus; end;".' ); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Raises Tests Happy Path 2'; + raises ( + msg_in => 'RAISES Number Test', + check_call_in => 'begin wt_assert.bogus; end;', + against_exc_in => 302); + temp_rec := g_rec; + wt_assert.eq ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details, + against_this_in => 'Expected exception "%-00302%". ' || + 'Actual exception raised was "ORA-06550: line 1, column 17:' || CHR(10) || + 'PLS-00302: component ''BOGUS'' must be declared". ' || + 'Exception raised by: "begin wt_assert.bogus; end;".' ); + -------------------------------------- WTPLSQL Testing -- + throws ( + msg_in => 'THROWS Varchar2 Test', + check_call_in => 'begin wt_assert.bogus; end;', + against_exc_in => 'PLS-00302: component ''BOGUS'' must be declared'); + temp_rec := g_rec; + wt_assert.eq ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details, + against_this_in => 'Expected exception "%PLS-00302: component ''BOGUS'' must be declared%". ' || + 'Actual exception raised was "ORA-06550: line 1, column 17:' || CHR(10) || + 'PLS-00302: component ''BOGUS'' must be declared". ' || + 'Exception raised by: "begin wt_assert.bogus; end;".' ); + -------------------------------------- WTPLSQL Testing -- + throws ( + msg_in => 'THROWS Number Test', + check_call_in => 'begin wt_assert.bogus; end;', + against_exc_in => 302); + temp_rec := g_rec; + wt_assert.eq ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details, + against_this_in => 'Expected exception "%-00302%". ' || + 'Actual exception raised was "ORA-06550: line 1, column 17:' || CHR(10) || + 'PLS-00302: component ''BOGUS'' must be declared". ' || + 'Exception raised by: "begin wt_assert.bogus; end;".' ); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Raises Tests Happy Path 3'; + raises ( + msg_in => 'RAISES Varchar2 No Error', + check_call_in => 'begin wt_assert.set_NLS_DATE_FORMAT(wt_assert.get_NLS_DATE_FORMAT); end;', + against_exc_in => ''); + temp_rec := g_rec; + wt_assert.eq ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details, + against_this_in => 'No exception was expected. ' || + 'Exception raised was "". ' || + 'Exception raised by: "begin wt_assert.set_NLS_DATE_FORMAT(wt_assert.get_NLS_DATE_FORMAT); end;".'); + -------------------------------------- WTPLSQL Testing -- + raises ( + msg_in => 'RAISES Number No Error', + check_call_in => 'begin wt_assert.set_NLS_DATE_FORMAT(wt_assert.get_NLS_DATE_FORMAT); end;', + against_exc_in => cast (null as number)); + temp_rec := g_rec; + wt_assert.eq ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details, + against_this_in => 'No exception was expected. ' || + 'Exception raised was "". ' || + 'Exception raised by: "begin wt_assert.set_NLS_DATE_FORMAT(wt_assert.get_NLS_DATE_FORMAT); end;".'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Raises Tests Sad Path 1'; + wtplsql_skip_save := TRUE; + raises ( + msg_in => 'Not Used', + check_call_in => 'begin wt_assert.bogus; end;', + against_exc_in => 'Incorrect Exception'); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details', + check_this_in => (temp_rec.last_details like + 'Expected exception "%Incorrect Exception%". ' || + 'Actual exception raised was "ORA-%')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Raises Tests Sad Path 2'; + wtplsql_skip_save := TRUE; + raises ( + msg_in => 'Not Used', + check_call_in => 'begin wt_assert.set_NLS_DATE_FORMAT; end;', + against_exc_in => 'Incorrect Exception'); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details, + against_this_in => 'Expected exception "%Incorrect Exception%". ' || + 'No exception was raised by: "begin wt_assert.set_NLS_DATE_FORMAT; end;". ' || + 'Error Stack: '); + end t_raises; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- EQQUERYVALUE +procedure eqqueryvalue ( + msg_in in varchar2, + check_query_in in varchar2, + against_value_in in varchar2, + null_ok_in in boolean := false, + raise_exc_in in boolean := false) +is + type rc_type is ref cursor; + l_rc rc_type; + l_rc_buff varchar2(32000); + l_errstack varchar2(4000); +begin + g_rec.last_assert := 'EQQUERYVALUE'; + g_rec.last_msg := msg_in; + open l_rc for check_query_in; + fetch l_rc into l_rc_buff; + close l_rc; + g_rec.last_pass := ( nvl(l_rc_buff = against_value_in, FALSE) + or ( l_rc_buff is null + and against_value_in is null + and null_ok_in ) ); + g_rec.last_details := 'Expected "' || substr(against_value_in,1,1000) || + '" and got "' || substr(l_rc_buff ,1,1000) || + '" for Query: ' || substr(check_query_in ,1,1000) ; + g_rec.raise_exception := raise_exc_in; + process_assertion; +exception when others then + l_errstack := substr(dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace,1,2900); + g_rec.last_details := 'Exception raised for Query: ' || + substr(check_query_in ,1,1000) || + CHR(10) || l_errstack; + g_rec.last_pass := FALSE; + g_rec.raise_exception := raise_exc_in; + process_assertion; +end eqqueryvalue; + +-- EQQUERYVALUE XMLTYPE Overload +procedure eqqueryvalue ( + msg_in in varchar2, + check_query_in in varchar2, + against_value_in in XMLTYPE, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false) +is + type rc_type is ref cursor; + l_rc rc_type; + l_rc_buff XMLTYPE; + l_errstack varchar2(4000); +begin + g_rec.last_assert := 'EQQUERYVALUE'; + g_rec.last_msg := msg_in; + open l_rc for check_query_in; + fetch l_rc into l_rc_buff; + close l_rc; + g_rec.last_pass := nvl(xmltype.getclobval(l_rc_buff) = + xmltype.getclobval(against_value_in), FALSE); + g_rec.last_details := 'Expected "' || substr(xmltype.getclobval(against_value_in),1,1000) || + '" and got "' || substr(xmltype.getclobval(l_rc_buff ),1,1000) || + '" for Query: ' || substr( check_query_in ,1,1000) ; + g_rec.raise_exception := raise_exc_in; + process_assertion; +exception when others then + l_errstack := substr(dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace,1,2900); + g_rec.last_details := 'Exception raised for Query: ' || + substr(check_query_in ,1,1000) || + CHR(10) || l_errstack; + g_rec.last_pass := FALSE; + g_rec.raise_exception := raise_exc_in; + process_assertion; +end eqqueryvalue; + +-- EQQUERYVALUE CLOB Overload +procedure eqqueryvalue ( + msg_in in varchar2, + check_query_in in varchar2, + against_value_in in CLOB, + null_ok_in in boolean := false, + raise_exc_in in boolean := false) +is + type rc_type is ref cursor; + l_rc rc_type; + l_rc_buff CLOB; + l_errstack varchar2(4000); +begin + g_rec.last_assert := 'EQQUERYVALUE'; + g_rec.last_msg := msg_in; + open l_rc for check_query_in; + fetch l_rc into l_rc_buff; + close l_rc; + g_rec.last_pass := ( nvl(l_rc_buff = against_value_in, FALSE) + or ( l_rc_buff is null + and against_value_in is null + and null_ok_in ) ); + g_rec.last_details := 'Expected "' || substr(against_value_in,1,1000) || + '" and got "' || substr(l_rc_buff ,1,1000) || + '" for Query: ' || substr(check_query_in ,1,1000) ; + g_rec.raise_exception := raise_exc_in; + process_assertion; +exception when others then + l_errstack := substr(dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace,1,2900); + g_rec.last_details := 'Exception raised for Query: ' || + substr(check_query_in ,1,1000) || + CHR(10) || l_errstack; + g_rec.last_pass := FALSE; + g_rec.raise_exception := raise_exc_in; + process_assertion; +end eqqueryvalue; + +-- EQQUERYVALUE BLOB Overload +procedure eqqueryvalue ( + msg_in in varchar2, + check_query_in in varchar2, + against_value_in in BLOB, + null_ok_in in boolean := false, + raise_exc_in in boolean := false) +is + type rc_type is ref cursor; + l_rc rc_type; + l_rc_buff BLOB; + compare_results number; + l_errstack varchar2(4000); +begin + g_rec.last_assert := 'EQQUERYVALUE'; + g_rec.last_msg := msg_in; + open l_rc for check_query_in; + fetch l_rc into l_rc_buff; + close l_rc; + compare_results := nvl(DBMS_LOB.COMPARE(l_rc_buff, against_value_in),-1); + g_rec.last_pass := ( nvl(compare_results = 0, FALSE) + or ( l_rc_buff is null + and against_value_in is null + and null_ok_in ) ); + g_rec.last_details := 'DBMS_LOB.COMPARE between BLOB and Query: ' || + substr(check_query_in ,1,2000) || + ', compare_results: ' || compare_results; + g_rec.raise_exception := raise_exc_in; + process_assertion; +exception when others then + l_errstack := substr(dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace,1,2900); + g_rec.last_details := 'Exception raised for Query: ' || + substr(check_query_in ,1,1000) || + CHR(10) || l_errstack; + g_rec.last_pass := FALSE; + g_rec.raise_exception := raise_exc_in; + process_assertion; +end eqqueryvalue; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_eqqueryvalue + is + l_found_exception BOOLEAN; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERYVALUE VARCHAR2 Happy Path 1'; + eqqueryvalue ( + msg_in => 'Run Test', + check_query_in => 'select dummy from DUAL', + against_value_in => 'X', + null_ok_in => false); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => TRUE); + wt_assert.eq ( + msg_in => 'temp_rec.last_assert', + check_this_in => temp_rec.last_assert, + against_this_in => 'EQQUERYVALUE'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_msg', + check_this_in => temp_rec.last_msg, + against_this_in => 'Run Test'); + wt_assert.eq ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details, + against_this_in => 'Expected "X" and got "X" for Query: select dummy from DUAL'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERYVALUE VARCHAR2 Happy Path 2'; + eqqueryvalue ( + msg_in => 'Run Test', + check_query_in => 'select max(dummy) from DUAL where 0 = 1', + against_value_in => '', + null_ok_in => true); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERYVALUE VARCHAR2 Sad Path 1'; + wtplsql_skip_save := TRUE; + eqqueryvalue ( + msg_in => 'Not Used', + check_query_in => 'select dummy from DUAL', + against_value_in => 'Y'); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERYVALUE VARCHAR2 Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + eqqueryvalue ( + msg_in => 'Not Used', + check_query_in => 'select dummy from DUAL', + against_value_in => 'Y', + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + -------------------------------------- WTPLSQL Testing -- + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERYVALUE VARCHAR2 Sad Path 3'; + wtplsql_skip_save := TRUE; + eqqueryvalue ( + msg_in => 'Not Used', + check_query_in => 'Garbage query that won''t work', + against_value_in => 'Y'); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details like + 'Exception raised for Query: Garbage query that won''t work' || + CHR(10) || 'ORA-00900: invalid SQL statement%'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERYVALUE XMLTYPE Happy Path 1'; + eqqueryvalue ( + msg_in => 'Run Test', + check_query_in => 'select temp_xml from wt_self_test where id = 1', + against_value_in => temp_xml1); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => TRUE); + wt_assert.eq ( + msg_in => 'temp_rec.last_assert', + check_this_in => temp_rec.last_assert, + against_this_in => 'EQQUERYVALUE'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_msg', + check_this_in => temp_rec.last_msg, + against_this_in => 'Run Test'); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details', + check_this_in => (temp_rec.last_details like + 'Expected "<?xml version="1.0" encoding="UTF-8"?>%')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERYVALUE XMLTYPE Sad Path 1'; + wtplsql_skip_save := TRUE; + eqqueryvalue ( + msg_in => 'Not Used', + check_query_in => 'select temp_xml from wt_self_test where id = 1', + against_value_in => temp_xml2); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details', + check_this_in => (temp_rec.last_details like + 'Expected "<?xml version="1.0" encoding="UTF-8"?>' || + '<note>2</note>" and got "<?xml version="1.0" encoding="UTF-8"?>%')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERYVALUE XMLTYPE Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + eqqueryvalue ( + msg_in => 'Not Used', + check_query_in => 'select temp_xml from wt_self_test where id = 1', + against_value_in => temp_xml2, + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + -------------------------------------- WTPLSQL Testing -- + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERYVALUE XMLTYPE Sad Path 3'; + wtplsql_skip_save := TRUE; + eqqueryvalue ( + msg_in => 'Not Used', + check_query_in => 'Garbage query that won''t work', + against_value_in => temp_xml2); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details like + 'Exception raised for Query: Garbage query that won''t work' || + CHR(10) || 'ORA-00900: invalid SQL statement%'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERYVALUE CLOB Happy Path 1'; + eqqueryvalue ( + msg_in => 'Run Test', + check_query_in => 'select temp_clob from wt_self_test where id = 1', + against_value_in => temp_clob1, + null_ok_in => false); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => TRUE); + wt_assert.eq ( + msg_in => 'temp_rec.last_assert', + check_this_in => temp_rec.last_assert, + against_this_in => 'EQQUERYVALUE'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_msg', + check_this_in => temp_rec.last_msg, + against_this_in => 'Run Test'); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details', + check_this_in => (temp_rec.last_details like + 'Expected "<?xml version="1.0" encoding="UTF-8"?>%')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERYVALUE CLOB Happy Path 2'; + eqqueryvalue ( + msg_in => 'Run Test', + check_query_in => 'select temp_clob from wt_self_test where 0 = 1', + against_value_in => '', + null_ok_in => true); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERYVALUE CLOB Sad Path 1'; + wtplsql_skip_save := TRUE; + eqqueryvalue ( + msg_in => 'Not Used', + check_query_in => 'select temp_clob from wt_self_test where id = 1', + against_value_in => temp_clob2); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details', + check_this_in => (temp_rec.last_details like + 'Expected "This is another clob." and got "' || + '<?xml version="1.0" encoding="UTF-8"?>%')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERYVALUE CLOB Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + eqqueryvalue ( + msg_in => 'Not Used', + check_query_in => 'select temp_clob from wt_self_test where id = 1', + against_value_in => temp_clob2, + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + -------------------------------------- WTPLSQL Testing -- + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERYVALUE CLOB Sad Path 3'; + wtplsql_skip_save := TRUE; + eqqueryvalue ( + msg_in => 'Not Used', + check_query_in => 'Garbage query that won''t work', + against_value_in => temp_clob2); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details like + 'Exception raised for Query: Garbage query that won''t work' || + CHR(10) || 'ORA-00900: invalid SQL statement%'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERYVALUE BLOB Happy Path 1'; + eqqueryvalue ( + msg_in => 'Run Test', + check_query_in => 'select temp_blob from wt_self_test where id = 1', + against_value_in => temp_blob1, + null_ok_in => false); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => TRUE); + wt_assert.eq ( + msg_in => 'temp_rec.last_assert', + check_this_in => temp_rec.last_assert, + against_this_in => 'EQQUERYVALUE'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_msg', + check_this_in => temp_rec.last_msg, + against_this_in => 'Run Test'); + wt_assert.eq ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details, + against_this_in => 'DBMS_LOB.COMPARE between BLOB and Query:' || + ' select temp_blob from wt_self_test where id = 1, compare_results: 0'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERYVALUE BLOB Happy Path 2'; + eqqueryvalue ( + msg_in => 'Run Test', + check_query_in => 'select temp_blob from wt_self_test where 0 = 1', + against_value_in => cast (null as BLOB), + null_ok_in => true); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERYVALUE BLOB Sad Path 1'; + wtplsql_skip_save := TRUE; + eqqueryvalue ( + msg_in => 'Not Used', + check_query_in => 'select temp_blob from wt_self_test where id = 1', + against_value_in => temp_blob2); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details, + against_this_in => 'DBMS_LOB.COMPARE between BLOB and Query: ' || + 'select temp_blob from wt_self_test where id = 1, compare_results: -1'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERYVALUE BLOB Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + eqqueryvalue ( + msg_in => 'Not Used', + check_query_in => 'select temp_blob from wt_self_test where id = 1', + against_value_in => temp_blob2, + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + -------------------------------------- WTPLSQL Testing -- + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERYVALUE BLOB Sad Path 3'; + wtplsql_skip_save := TRUE; + eqqueryvalue ( + msg_in => 'Not Used', + check_query_in => 'Garbage query that won''t work', + against_value_in => temp_blob2); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details like + 'Exception raised for Query: Garbage query that won''t work' || + CHR(10) || 'ORA-00900: invalid SQL statement%'); + end t_eqqueryvalue; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure eqquery ( + msg_in in varchar2, + check_query_in in varchar2, + against_query_in in varchar2, + raise_exc_in in boolean := false) +is +begin + g_rec.last_assert := 'EQQUERY'; + g_rec.last_msg := msg_in; + compare_queries(check_query_in, against_query_in); + g_rec.raise_exception := raise_exc_in; + process_assertion; +end eqquery; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_eqquery + is + l_found_exception BOOLEAN; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERY Tests Happy Path 1'; + wt_assert.eqquery ( + msg_in => 'Run Test', + check_query_in => 'select * from USER_TABLES', + against_query_in => 'select * from USER_TABLES'); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => TRUE); + wt_assert.eq ( + msg_in => 'temp_rec.last_assert', + check_this_in => temp_rec.last_assert, + against_this_in => 'EQQUERY'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_msg', + check_this_in => temp_rec.last_msg, + against_this_in => 'Run Test'); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'EQQUERY Tests Happy Path 1b g_rec.last_details', + check_this_in => (temp_rec.last_details like + 'Comparison Query: %')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERY Tests Sad Path 1'; + wtplsql_skip_save := TRUE; + eqquery ( + msg_in => 'Not Used', + check_query_in => 'select * from USER_TABLES', + against_query_in => 'select * from USER_TABLES where 0 = 1'); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details', + check_this_in => (temp_rec.last_details like + 'Comparison Query: %')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERY Tests Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + eqquery ( + msg_in => 'Not Used', + check_query_in => 'select * from USER_TABLES', + against_query_in => 'select * from USER_TABLES where 0 = 1', + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQQUERY Tests Sad Path 3'; + wtplsql_skip_save := TRUE; + eqquery ( + msg_in => 'Not Used', + check_query_in => 'select * from USER_TABLES', + against_query_in => 'select * from ALL_TABLES'); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details', + check_this_in => (temp_rec.last_details like + '%PL/SQL: ORA-01789: query block has incorrect number of result columns%')); + end t_eqquery; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure eqtable ( + msg_in in varchar2, + check_this_in in varchar2, + against_this_in in varchar2, + check_where_in in varchar2 := null, + against_where_in in varchar2 := null, + raise_exc_in in boolean := false) +is + l_check_query varchar2(16000) := 'select * from ' || check_this_in; + l_against_query varchar2(16000) := 'select * from ' || against_this_in; +begin + g_rec.last_assert := 'EQTABLE'; + g_rec.last_msg := msg_in; + if check_where_in is not null + then + l_check_query := l_check_query || ' where ' || check_where_in; + end if; + if against_where_in is not null + then + l_against_query := l_against_query || ' where ' || against_where_in; + end if; + compare_queries(l_check_query, l_against_query); + g_rec.raise_exception := raise_exc_in; + process_assertion; +end eqtable; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_eqtable + is + l_found_exception BOOLEAN; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQTABLE Tests Happy Path 1'; + wt_assert.eqtable ( + msg_in => 'Run Test', + check_this_in => 'USER_TABLES', + against_this_in => 'USER_TABLES', + check_where_in => '', + against_where_in => ''); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => TRUE); + wt_assert.eq ( + msg_in => 'temp_rec.last_assert', + check_this_in => temp_rec.last_assert, + against_this_in => 'EQTABLE'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_msg', + check_this_in => temp_rec.last_msg, + against_this_in => 'Run Test'); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details', + check_this_in => (temp_rec.last_details like + 'Comparison Query: %')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQTABLE Tests Happy Path 2'; + eqtable ( + msg_in => 'Run Test', + check_this_in => 'ALL_TABLES', + against_this_in => 'ALL_TABLES', + check_where_in => 'owner = ''' || USER || '''', + against_where_in => 'owner = ''' || USER || ''''); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQTABLE Sad Path 1'; + wtplsql_skip_save := TRUE; + eqtable ( + msg_in => 'Not Used', + check_this_in => 'ALL_TABLES', + against_this_in => 'ALL_TABLES', + check_where_in => 'owner = ''' || USER || '''', + against_where_in => '0 = 1'); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details', + check_this_in => (temp_rec.last_details like + 'Comparison Query: %')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQTABLE Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + eqtable ( + msg_in => 'Not Used', + check_this_in => 'ALL_TABLES', + against_this_in => 'ALL_TABLES', + check_where_in => 'owner = ''' || USER || '''', + against_where_in => '0 = 1', + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + -------------------------------------- WTPLSQL Testing -- + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQTABLE Sad Path 3'; + wtplsql_skip_save := TRUE; + eqtable ( + msg_in => 'Not Used', + check_this_in => 'USER_TABLES', + against_this_in => 'ALL_TABLES'); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details like + '%PL/SQL: ORA-01789: query block has incorrect number of result columns%'); + end t_eqtable; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure eqtabcount ( + msg_in in varchar2, + check_this_in in varchar2, + against_this_in in varchar2, + check_where_in in varchar2 := null, + against_where_in in varchar2 := null, + raise_exc_in in boolean := false) +is + l_query varchar2(16000) := 'select count(*) from ' || check_this_in; + l_cnt number; + l_success boolean; + l_check_cnt number; + procedure l_run_query is + type rc_type is ref cursor; + l_rc rc_type; + begin + open l_rc for l_query; + fetch l_rc into l_cnt; + close l_rc; + l_success := TRUE; + exception + when OTHERS + then + g_rec.last_details := SQLERRM || CHR(10) || + 'FAILURE of Compare Query: ' || l_query || ';'; + g_rec.last_pass := FALSE; + l_success := FALSE; + g_rec.raise_exception := raise_exc_in; + process_assertion; + end l_run_query; +begin + g_rec.last_assert := 'EQTABCOUNT'; + g_rec.last_msg := msg_in; + -- + l_query := 'select count(*) from ' || check_this_in; + if check_where_in is not null + then + l_query := l_query || ' where ' || check_where_in; + end if; + l_run_query; + if NOT l_success then return; end if; + l_check_cnt := l_cnt; + -- + l_query := 'select count(*) from ' || against_this_in; + if against_where_in is not null + then + l_query := l_query || ' where ' || against_where_in; + end if; + l_run_query; + if NOT l_success then return; end if; + g_rec.last_pass := nvl(l_check_cnt = l_cnt, FALSE); + -- + g_rec.last_details := 'Expected ' || l_cnt || ' rows from "' || against_this_in || + '" and got ' || l_check_cnt || ' rows from "' || check_this_in || + '"'; + g_rec.raise_exception := raise_exc_in; + process_assertion; +end eqtabcount; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_eqtabcount + is + l_found_exception BOOLEAN; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQTABCOUNT Tests Happy Path 1'; + eqtabcount ( + msg_in => 'Run Test', + check_this_in => 'ALL_TABLES', + against_this_in => 'ALL_TABLES', + check_where_in => 'owner = ''' || USER || '''', + against_where_in => 'owner = ''' || USER || ''''); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => TRUE); + wt_assert.eq ( + msg_in => 'temp_rec.last_assert', + check_this_in => temp_rec.last_assert, + against_this_in => 'EQTABCOUNT'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_msg', + check_this_in => temp_rec.last_msg, + against_this_in => 'Run Test'); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details', + check_this_in => (temp_rec.last_details like + 'Expected % rows from "ALL_TABLES"' || + ' and got % rows from "ALL_TABLES"')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQTABCOUNT Tests Happy Path 2'; + eqtabcount ( + msg_in => 'Run Test', + check_this_in => 'ALL_TABLES', + against_this_in => 'USER_TABLES', + check_where_in => 'owner = ''' || USER || '''', + against_where_in => ''); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQTABCOUNT Sad Path 1'; + wtplsql_skip_save := TRUE; + eqtabcount ( + msg_in => 'Not Used', + check_this_in => 'ALL_TABLES', + against_this_in => 'ALL_TABLES', + check_where_in => 'owner = ''JOHN DOE''', + against_where_in => 'owner = ''' || USER || ''''); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details', + check_this_in => (temp_rec.last_details like + 'Expected % rows from "ALL_TABLES" and ' || + 'got % rows from "ALL_TABLES"')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQTABCOUNT Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + eqtabcount ( + msg_in => 'Not Used', + check_this_in => 'ALL_TABLES', + against_this_in => 'ALL_TABLES', + check_where_in => 'owner = ''JOHN DOE''', + against_where_in => 'owner = ''' || USER || '''', + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + -------------------------------------- WTPLSQL Testing -- + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQTABCOUNT Sad Path 3'; + wtplsql_skip_save := TRUE; + eqtabcount ( + msg_in => 'Not Used', + check_this_in => 'USER_TABLES', + against_this_in => 'USER_TAB_COLUMNS'); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + wt_assert.this ( + msg_in => 'temp_rec.last_details', + check_this_in => (temp_rec.last_details like + 'Expected % rows from "USER_TAB_COLUMNS" and got % rows from "USER_TABLES"')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'EQTABCOUNT Sad Path 4'; + wtplsql_skip_save := TRUE; + eqtabcount ( + msg_in => 'Not Used', + check_this_in => 'BOGUS1', + against_this_in => 'BOGUS2'); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.isnotnull ( + msg_in => 'temp_rec.last_details value', + check_this_in => temp_rec.last_details); + -------------------------------------- WTPLSQL Testing -- + wt_assert.this ( + msg_in => 'temp_rec.last_details', + check_this_in => (temp_rec.last_details like + '%table or view does not exist%')); + wt_assert.this ( + msg_in => 'temp_rec.last_details 2', + check_this_in => (temp_rec.last_details like + '%FAILURE of Compare Query%')); + end t_eqtabcount; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure objexists ( + msg_in in varchar2, + obj_owner_in in varchar2, + obj_name_in in varchar2, + obj_type_in in varchar2 default null, + raise_exc_in in boolean := false) +is + l_num_objects number; +begin + g_rec.last_assert := 'OBJEXISTS'; + g_rec.last_msg := msg_in; + select count(*) into l_num_objects + from all_objects + where object_name = obj_name_in + and ( obj_owner_in is null + or obj_owner_in = owner) + and ( obj_type_in is null + or obj_type_in = object_type); + g_rec.last_pass := case l_num_objects when 0 then FALSE else TRUE end; + g_rec.last_details := 'Number of objects found for "' || + case when obj_owner_in is null then '' + else obj_owner_in || '.' end || + obj_name_in || '"' || + case when obj_type_in is null then '' + else '(' || obj_type_in || ')' end || + ' is ' || l_num_objects; + g_rec.raise_exception := raise_exc_in; + process_assertion; +end objexists; + +-- Concatenated SCHEMA_NAME.OBJECT_NAME +procedure objexists ( + msg_in in varchar2, + check_this_in in varchar2, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false) +is + l_pos number := instr(check_this_in, '.'); +begin + objexists(msg_in => msg_in + ,obj_owner_in => substr(check_this_in, 1, l_pos-1) + ,obj_name_in => substr(check_this_in, l_pos+1, length(check_this_in))); +end objexists; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_object_exists + is + l_found_exception BOOLEAN; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'OBJEXISTS Happy Path 1'; + objexists ( + msg_in => 'Run Test', + obj_owner_in => 'SYS', + obj_name_in => 'DUAL'); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => TRUE); + wt_assert.eq ( + msg_in => 'temp_rec.last_assert', + check_this_in => temp_rec.last_assert, + against_this_in => 'OBJEXISTS'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_msg', + check_this_in => temp_rec.last_msg, + against_this_in => 'Run Test'); + wt_assert.eq ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details, + against_this_in => 'Number of objects found for "SYS.DUAL" is 1'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'OBJEXISTS Happy Path 2'; + objexists ( + msg_in => 'Run Test', + obj_owner_in => 'SYS', + obj_name_in => 'DUAL', + obj_type_in => 'TABLE'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'OBJEXISTS Happy Path 3'; + objexists ( + msg_in => 'Run Test', + check_this_in => 'SYS.DUAL'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'OBJEXISTS Happy Path 4'; + objexists ( + msg_in => 'Run Test', + check_this_in => 'DUAL'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'OBJEXISTS Sad Path 1'; + wtplsql_skip_save := TRUE; + objexists ( + msg_in => 'Not Used', + obj_owner_in => 'JOE SMITH', + obj_name_in => 'BOGUS'); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details, + against_this_in => 'Number of objects found for "JOE SMITH.BOGUS" is 0'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'OBJEXISTS Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + objexists ( + msg_in => 'Not Used', + obj_owner_in => 'JOE SMITH', + obj_name_in => 'BOGUS', + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + end t_object_exists; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure objnotexists ( + msg_in in varchar2, + obj_owner_in in varchar2, + obj_name_in in varchar2, + obj_type_in in varchar2 default null, + raise_exc_in in boolean := false) +is + l_num_objects number; +begin + g_rec.last_assert := 'OBJNOTEXISTS'; + g_rec.last_msg := msg_in; + select count(*) into l_num_objects + from all_objects + where object_name = obj_name_in + and ( obj_owner_in is null + or obj_owner_in = owner) + and ( obj_type_in is null + or obj_type_in = object_type); + g_rec.last_pass := case l_num_objects when 0 then TRUE else FALSE end; + g_rec.last_details := 'Number of objects found for "' || + case when obj_owner_in is null then '' + else obj_owner_in || '.' end || + obj_name_in || '"' || + case when obj_type_in is null then '' + else '(' || obj_type_in || ')' end || + ' is ' || l_num_objects; + g_rec.raise_exception := raise_exc_in; + process_assertion; +end objnotexists; + +-- Concatenated SCHEMA_NAME.OBJECT_NAME +procedure objnotexists ( + msg_in in varchar2, + check_this_in in varchar2, + null_ok_in in boolean := false, -- Not Used, utPLSQL V1 API + raise_exc_in in boolean := false) +is + l_pos number := instr(check_this_in, '.'); +begin + objnotexists(msg_in => msg_in + ,obj_owner_in => substr(check_this_in, 1, l_pos-1) + ,obj_name_in => substr(check_this_in, l_pos+1, length(check_this_in))); +end objnotexists; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_object_not_exists + is + l_found_exception BOOLEAN; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'OBJNOTEXISTS Happy Path 1'; + objnotexists ( + msg_in => 'Run Test', + obj_owner_in => 'BOGUS', + obj_name_in => 'THING123'); + temp_rec := g_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => TRUE); + wt_assert.eq ( + msg_in => 'temp_rec.last_assert', + check_this_in => temp_rec.last_assert, + against_this_in => 'OBJNOTEXISTS'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_msg', + check_this_in => temp_rec.last_msg, + against_this_in => 'Run Test'); + wt_assert.eq ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details, + against_this_in => 'Number of objects found for "BOGUS.THING123" is 0'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'OBJNOTEXISTS Happy Path 2'; + objnotexists ( + msg_in => 'Run Test', + obj_owner_in => 'BOGUS', + obj_name_in => 'THING123', + obj_type_in => 'PACKAGE'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'OBJNOTEXISTS Happy Path 3'; + objnotexists ( + msg_in => 'Run Test', + check_this_in => 'BOGUS.THING123'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'OBJNOTEXISTS Sad Path 1'; + wtplsql_skip_save := TRUE; + objnotexists ( + msg_in => 'Not Used', + obj_owner_in => 'SYS', + obj_name_in => 'DUAL'); + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'temp_rec.last_details', + check_this_in => temp_rec.last_details, + against_this_in => 'Number of objects found for "SYS.DUAL" is 1'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'OBJNOTEXISTS Sad Path 2'; + wtplsql_skip_save := TRUE; + begin + objnotexists ( + msg_in => 'Not Used', + obj_owner_in => 'SYS', + obj_name_in => 'DUAL', + raise_exc_in => TRUE); + l_found_exception := FALSE; + exception when ASSERT_FAILURE_EXCEPTION then + l_found_exception := TRUE; + end; + -------------------------------------- WTPLSQL Testing -- + temp_rec := g_rec; + wtplsql_skip_save := FALSE; + wt_assert.eq ( + msg_in => 'temp_rec.last_pass', + check_this_in => temp_rec.last_pass, + against_this_in => FALSE); + wt_assert.eq ( + msg_in => 'RAISE_EXC_IN Test, Exception Raised?', + check_this_in => l_found_exception, + against_this_in => TRUE); + end t_object_not_exists; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + -- Can't profile this package because all the "assert" tests + -- pause profiling before they execute. + procedure WTPLSQL_RUN + is + begin + wtplsql.g_DBOUT := 'WT_ASSERT:PACKAGE BODY'; + hook.g_run_assert_hook := FALSE; + select temp_clob, temp_nclob, temp_xml, temp_blob + into temp_clob1, temp_nclob1, temp_xml1, temp_blob1 + from wt_self_test where id = 1; + -------------------------------------- WTPLSQL Testing -- + t_boolean_to_status; + t_process_assertion; + t_compare_queries; + t_nls_settings; + t_last_values; + t_reset_globals; + t_this; + t_eq; + -------------------------------------- WTPLSQL Testing -- + t_isnotnull; + t_isnull; + t_raises; + t_eqqueryvalue; + t_eqquery; + t_eqtable; + t_eqtabcount; + t_object_exists; + t_object_not_exists; + -------------------------------------- WTPLSQL Testing -- + hook.g_run_assert_hook := TRUE; + end WTPLSQL_RUN; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +end wt_assert; + + + +wtp@DEVPDB_localhost +PUBLIC +UTASSERT +duane +2024-04-10 19:09:28 UTC +Main +WT_ASSERT +0B8CEE14-5EF4-002A-AC5B-E55C89A47256 +YES +PUBLIC +E540BEB4-86FF-0BEC-4B75-E54681F8A22B + + +wtp@DEVPDB_localhost +PUBLIC +WT_ASSERT +duane +2024-04-10 19:09:28 UTC +Main +WT_ASSERT +0B8CEE14-5EF4-002A-AC5B-E55C89A47256 +YES +PUBLIC +E540BEB4-86FF-0BEC-4B75-E54681F8A22B + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/E5574115-D3BA-C77B-8636-9843AEC95537.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/E5574115-D3BA-C77B-8636-9843AEC95537.xml new file mode 100644 index 0000000..4b75b5a --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Package/seg_0/E5574115-D3BA-C77B-8636-9843AEC95537.xml @@ -0,0 +1,268 @@ + + +wtp@DEVPDB_localhost +WTP +HOOK +duane +2024-04-10 19:09:28 UTC +Main + +CREATE OR REPLACE PACKAGE WTP.HOOK + authid definer +as + + procedure run + (in_hook_name in varchar2); + + procedure init; + + -- WtPLSQL Self Test Procedures + -- + -- alter system set PLSQL_CCFLAGS = + -- 'WTPLSQL_SELFTEST:TRUE' + -- scope=BOTH; + -- + $IF $$WTPLSQL_SELFTEST + $THEN + g_run_assert_hook boolean := TRUE; + g_test_hook_msg varchar2(4000); + -- + procedure test_hook + (in_msg in varchar2); + procedure WTPLSQL_RUN; + $END + +end hook; + +wtp@DEVPDB_localhost +WTP +HOOK +duane +2024-04-10 19:09:28 UTC +Main + +CREATE OR REPLACE PACKAGE BODY WTP.HOOK +as + + TYPE run_nt_type is table + of hooks%ROWTYPE; + TYPE run_aa_type is table + of run_nt_type + index by varchar2(20); + g_run_aa run_aa_type; + +---------------------- +-- Private Procedures +---------------------- + +--------------------- +-- Public Procedures +--------------------- + +------------------------------------------------------------ +procedure run + (in_hook_name in varchar2) +is + l_error_stack varchar2(32000); +begin + $IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ + $THEN + if NOT g_run_assert_hook + AND in_hook_name = 'after_assertion' + then + return; + end if; + $END ------%WTPLSQL_end_ignore_lines%------ + if NOT g_run_aa.EXISTS(in_hook_name) + then + --dbms_output.put_line('No hook for ' || in_hook_name); + return; + end if; + for i in 1 .. g_run_aa(in_hook_name).COUNT + loop + begin + execute immediate g_run_aa(in_hook_name)(i).run_string; + exception when OTHERS then + l_error_stack := 'Hook Error in "' || in_hook_name || + '", SEQ ' || g_run_aa(in_hook_name)(i).seq || + '.' || CHR(10) || + dbms_utility.format_error_stack || + dbms_utility.format_error_backtrace; + core_data.run_error(l_error_stack); + end; + end loop; +end run; + +------------------------------------------------------------ +procedure init +is + l_run_nt run_nt_type; +begin + g_run_aa.DELETE; + for buff in ( + select hook_name + from hooks + group by hook_name ) + loop + select * bulk collect into l_run_nt + from hooks + where hook_name = buff.hook_name + order by hooks.seq; + if SQL%FOUND + then + g_run_aa(buff.hook_name) := l_run_nt; + end if; + end loop; +end init; + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + -------------------------------------- WTPLSQL Testing -- + procedure test_hook + (in_msg in varchar2) + is + begin + g_test_hook_msg := in_msg; + end test_hook; + -------------------------------------- WTPLSQL Testing -- + procedure WTPLSQL_RUN + is + TYPE hooks_nt_type is table of hooks%ROWTYPE; + l_hooks_ntSAVE hooks_nt_type; + TYPE hname_nt_type is table of hooks.hook_name%TYPE; + l_hname_nt hname_nt_type; + l_hooks_rec hooks%ROWTYPE; + l_err_msgSAVE core_data.g_run_rec.error_message%TYPE; + l_err_msgTEST core_data.g_run_rec.error_message%TYPE; + num_recs number; + begin + wtplsql.g_DBOUT := 'HOOK:PACKAGE BODY'; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Setup'; + g_run_assert_hook := FALSE; + select count(*) into num_recs from hooks; + wt_assert.isnotnull + (msg_in => 'Number of records before setup' + ,check_this_in => num_recs); + -------------------------------------- WTPLSQL Testing -- + l_hname_nt := hname_nt_type('before_test_all' + ,'before_test_run' + ,'execute_test_runner' + ,'after_assertion' + ,'after_test_run' + ,'after_test_all' + ,'ad_hoc_report'); + select * bulk collect into l_hooks_ntSAVE from hooks; + delete from hooks; + -------------------------------------- WTPLSQL Testing -- + l_hooks_rec.seq := 1; + l_hooks_rec.description := 'WTPLSQL Self Test'; + for i in 1 .. l_hname_nt.COUNT + loop + l_hooks_rec.hook_name := l_hname_nt(i); + l_hooks_rec.run_string := 'begin hook.test_hook(''' || + l_hname_nt(i) || '''); end;'; + insert into hooks values l_hooks_rec; + end loop; + commit; + -------------------------------------- WTPLSQL Testing -- + init; + wt_assert.eqqueryvalue + (msg_in => 'Confirm number of test records' + ,check_query_in => 'select count(*) from hooks' + ,against_value_in => l_hname_nt.COUNT); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'All Hooks On'; + for i in 1 .. l_hname_nt.COUNT + loop + g_test_hook_msg := ''; + g_run_assert_hook := TRUE; + hook.run(l_hname_nt(i)); + g_run_assert_hook := FALSE; + wt_assert.eq + (msg_in => l_hname_nt(i) || ' is active' + ,check_this_in => g_test_hook_msg + ,against_this_in => l_hname_nt(i)); + end loop; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'All Hooks Off'; + delete from hooks; + commit; + init; + wt_assert.eqqueryvalue + (msg_in => 'Confirm number of test records 2' + ,check_query_in => 'select count(*) from hooks' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + for i in 1 .. l_hname_nt.COUNT + loop + g_test_hook_msg := ''; + hook.run(l_hname_nt(i)); + wt_assert.isnull + (msg_in => l_hname_nt(i) || ' is not active' + ,check_this_in => g_test_hook_msg); + end loop; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Hooks Sad Path 1'; + l_hooks_rec.seq := 1; + l_hooks_rec.description := 'WTPLSQL Self Test'; + l_hooks_rec.hook_name := 'ad_hoc_report'; + l_hooks_rec.run_string := 'declare n1 number; begin n1:=1/0; end;'; + insert into hooks values l_hooks_rec; + commit; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Confirm number of test records' + ,check_query_in => 'select count(*) from hooks' + ,against_value_in => 1); + init; + wt_assert.isnull + (msg_in => 'core_data.g_run_rec.error_message' + ,check_this_in => core_data.g_run_rec.error_message); + -------------------------------------- WTPLSQL Testing -- + l_err_msgSAVE := core_data.g_run_rec.error_message; + core_data.g_run_rec.error_message := ''; + wt_assert.raises + (msg_in => 'Test Exception Handler' + ,check_call_in => 'begin hook.run(''ad_hoc_report''); end;' + ,against_exc_in => ''); + l_err_msgTEST := core_data.g_run_rec.error_message; + core_data.g_run_rec.error_message := l_err_msgSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull + (msg_in => 'Confirm core_data.run_error' + ,check_this_in => l_err_msgTEST); + wt_assert.this + (msg_in => 'l_err_msgTEST like ''Hook Error in "ad_hoc_report", SEQ 1.' || '\n' || + 'ORA-01476: divisor is equal to zero' || '\n' || + 'ORA-06512: at line 1%''' + ,check_this_in => l_err_msgTEST like 'Hook Error in "ad_hoc_report", SEQ 1.' || CHR(10) || + 'ORA-01476: divisor is equal to zero' || CHR(10) || + 'ORA-06512: at line 1%'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Teardown'; + delete from hooks; + forall i in 1 .. l_hooks_ntSAVE.COUNT + insert into hooks values l_hooks_ntSAVE(i); + commit; + init; + wt_assert.eqqueryvalue + (msg_in => 'Number of records after teardown' + ,check_query_in => 'select count(*) from hooks' + ,against_value_in => num_recs); + g_run_assert_hook := TRUE; + end WTPLSQL_RUN; + +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +------------------------------------------------------------ +------%WTPLSQL_begin_ignore_lines%------ Can't Test This +begin + init; +end hook; + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/SType/seg_0/47E390DE-0671-C4B1-8428-0F45CBEE18F8.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/SType/seg_0/47E390DE-0671-C4B1-8428-0F45CBEE18F8.xml new file mode 100644 index 0000000..dbf1b54 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/SType/seg_0/47E390DE-0671-C4B1-8428-0F45CBEE18F8.xml @@ -0,0 +1,7 @@ + + +duane +2024-04-10 19:08:09 UTC +Main +MDSYS + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/SType/seg_0/F72C39E0-D1CA-8821-2AD7-A1E95A37D3D1.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/SType/seg_0/F72C39E0-D1CA-8821-2AD7-A1E95A37D3D1.xml new file mode 100644 index 0000000..5678519 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/SType/seg_0/F72C39E0-D1CA-8821-2AD7-A1E95A37D3D1.xml @@ -0,0 +1,6 @@ + + +duane +2024-04-10 19:08:09 UTC +Main + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Segment/seg_0/9ABA10BC-E32C-519C-DEC0-04F084280A2E.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Segment/seg_0/9ABA10BC-E32C-519C-DEC0-04F084280A2E.xml new file mode 100644 index 0000000..4133f4c --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Segment/seg_0/9ABA10BC-E32C-519C-DEC0-04F084280A2E.xml @@ -0,0 +1,10 @@ + + +duane +2024-04-10 19:09:16 UTC +Main +255 +65536 +2147483645 +1048576 + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Segment/seg_0/CB5DC202-4437-7272-A4FF-0AA23BAB0E6F.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Segment/seg_0/CB5DC202-4437-7272-A4FF-0AA23BAB0E6F.xml new file mode 100644 index 0000000..0e84a58 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Segment/seg_0/CB5DC202-4437-7272-A4FF-0AA23BAB0E6F.xml @@ -0,0 +1,11 @@ + + +duane +2024-04-10 19:09:21 UTC +Main +2 +255 +65536 +2147483645 +1048576 + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Sequence/seg_0/34ED7000-05C9-7E39-BA89-0D9F3EE57147.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Sequence/seg_0/34ED7000-05C9-7E39-BA89-0D9F3EE57147.xml new file mode 100644 index 0000000..e57ecd8 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Sequence/seg_0/34ED7000-05C9-7E39-BA89-0D9F3EE57147.xml @@ -0,0 +1,14 @@ + + +wtp@DEVPDB_localhost +WTP +WT_TESTCASES_SEQ +duane +2024-04-10 19:09:11 UTC +Main +20 +1 +9999999999999999999999999999 +1 +0B8CEE14-5EF4-002A-AC5B-E55C89A47256 + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Sequence/seg_0/76C4919A-C6EC-E9CB-295E-FC5F7A9D6CBB.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Sequence/seg_0/76C4919A-C6EC-E9CB-295E-FC5F7A9D6CBB.xml new file mode 100644 index 0000000..e030886 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Sequence/seg_0/76C4919A-C6EC-E9CB-295E-FC5F7A9D6CBB.xml @@ -0,0 +1,14 @@ + + +wtp@DEVPDB_localhost +WTP +WT_DBOUTS_SEQ +duane +2024-04-10 19:09:11 UTC +Main +20 +1 +9999999999999999999999999999 +1 +0B8CEE14-5EF4-002A-AC5B-E55C89A47256 + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Sequence/seg_0/C9725AFA-3D17-2B47-2FC4-82A3C54A04E7.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Sequence/seg_0/C9725AFA-3D17-2B47-2FC4-82A3C54A04E7.xml new file mode 100644 index 0000000..94dbe93 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Sequence/seg_0/C9725AFA-3D17-2B47-2FC4-82A3C54A04E7.xml @@ -0,0 +1,14 @@ + + +wtp@DEVPDB_localhost +WTP +PLSQL_PROFILER_RUNNUMBER +duane +2024-04-10 19:09:11 UTC +Main +1 +9999999999999999999999999999 +1 +YES +0B8CEE14-5EF4-002A-AC5B-E55C89A47256 + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Sequence/seg_0/D21D0B42-D3AB-93D4-7A95-C16EB182CCFE.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Sequence/seg_0/D21D0B42-D3AB-93D4-7A95-C16EB182CCFE.xml new file mode 100644 index 0000000..58ea05b --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Sequence/seg_0/D21D0B42-D3AB-93D4-7A95-C16EB182CCFE.xml @@ -0,0 +1,15 @@ + + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUNS_SEQ +duane +2024-04-10 19:09:11 UTC +Main +20 +1 +9999999999999999999999999999 +1 +YES +0B8CEE14-5EF4-002A-AC5B-E55C89A47256 + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Sequence/seg_0/F71B0A5C-BFA1-1D6A-A12C-8EED7B7B0785.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Sequence/seg_0/F71B0A5C-BFA1-1D6A-A12C-8EED7B7B0785.xml new file mode 100644 index 0000000..53c279d --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Sequence/seg_0/F71B0A5C-BFA1-1D6A-A12C-8EED7B7B0785.xml @@ -0,0 +1,15 @@ + + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUNNERS_SEQ +duane +2024-04-10 19:09:11 UTC +Main +20 +1 +9999999999999999999999999999 +1 +YES +0B8CEE14-5EF4-002A-AC5B-E55C89A47256 + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/StProc/seg_0/52B10B9D-540A-14A5-4425-5F33BEF76415.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/StProc/seg_0/52B10B9D-540A-14A5-4425-5F33BEF76415.xml new file mode 100644 index 0000000..f7b7cd6 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/StProc/seg_0/52B10B9D-540A-14A5-4425-5F33BEF76415.xml @@ -0,0 +1,43 @@ + + +wtp@DEVPDB_localhost +WTP +WT_AD_HOC_REPORT +duane +2024-04-10 19:09:28 UTC +Main + +CREATE OR REPLACE PROCEDURE WTP.WT_AD_HOC_REPORT + authid current_user + -- AUTHID CURRENT_USER is required for assertions with + -- dynamic PL/SQL execution. +is +begin + dbms_output.put_line(wt_assert.g_rec.last_msg); + dbms_output.put_line(' Assertion ' || wt_assert.g_rec.last_assert || + case wt_assert.last_pass + when TRUE then ' PASSED.' + else ' FAILED.' + end); + if wt_assert.g_testcase is not null + then + dbms_output.put_line(' Testcase: ' || wt_assert.g_testcase); + end if; + dbms_output.put_line( ' ' || wt_assert.g_rec.last_details); +end wt_ad_hoc_report; + + +wtp@DEVPDB_localhost +PUBLIC +WT_AD_HOC_REPORT +duane +2024-04-10 19:09:28 UTC +Main +WT_AD_HOC_REPORT +0B8CEE14-5EF4-002A-AC5B-E55C89A47256 +YES +PUBLIC +52B10B9D-540A-14A5-4425-5F33BEF76415 + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/StProc/seg_0/81A99C6A-CD5F-82BB-64DD-096AB242711A.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/StProc/seg_0/81A99C6A-CD5F-82BB-64DD-096AB242711A.xml new file mode 100644 index 0000000..a3343dd --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/StProc/seg_0/81A99C6A-CD5F-82BB-64DD-096AB242711A.xml @@ -0,0 +1,113 @@ + + +wtp@DEVPDB_localhost +WTP +JUNIT_XML_PERSIST_ALL +duane +2024-04-10 19:09:28 UTC +Main + +CREATE OR REPLACE PROCEDURE WTP.JUNIT_XML_PERSIST_ALL +is + procedure p (in_line in varchar2) is + begin + DBMS_OUTPUT.PUT_LINE(in_line); + end p; +begin + p('<?xml version="1.0" encoding="UTF-8"?>'); + p('<!-- http://dmdiet.com - Adapted to SQLDeveloper Unit Test Utility -->'); + p('<!-- http://nelsonwells.net/2012/09/how-jenkins-ci-parses-and-displays-junit-output/ -->'); + p('<!-- Jenkins identifies the failed tests as {package}.{class}.{test}. -->'); + p('<testsuites>'); + for suites in ( + select run.start_dtm + ,run.end_dtm + ,run.id + ,tr.owner || '.' || tr.name SUITE_NAME + ,nvl(db.owner, tr.owner) PACKAGE_NAME + ,case when db.name || db.type is null + then 'TEST_RUNNER' + else db.name || ':' || db.type + end CLASS_NAME + ,run.tc_cnt + ,run.tc_fail + ,extract(day from (run.end_dtm - + run.start_dtm) * 86400000) + TOT_INTERVAL_MSEC + ,run.error_message + from wt_test_runs run + join wt_test_runners tr + on tr.id = run.test_runner_id + left join wt_dbouts db + on db.id = run.dbout_id + where run.is_last_run = wt_test_run.get_last_run_flag + order by run.start_dtm, run.id ) + loop + p(' <testsuite name="' || suites.suite_name || + '" tests="' || suites.tc_cnt || + '" failures="' || suites.tc_fail || + '" time="' || suites.tot_interval_msec || + '" timestamp="' || to_char(suites.start_dtm,'YYYY-MM-DD"T"HH24:MI:SS') || + '">' ); + for cases in ( + select run.id + ,tc.testcase + ,tcr.testcase_id + ,tcr.asrt_cnt ASSERTS + ,tcr.asrt_fail FAILURES + ,nvl(tcr.asrt_tot_msec + ,suites.tot_interval_msec) TOT_INTERVAL_MSEC + from wt_test_runs run + left join wt_testcase_runs tcr + on tcr.test_run_id = run.id + left join wt_testcases tc + on tc.id = tcr.testcase_id + where run.id = suites.id + order by testcase ) + loop + if nvl(cases.failures,1) = 0 + and suites.error_message is null + then + p(' <testcase name="' || nvl(cases.testcase,'NULL') || + '" classname="' || suites.suite_name || + '" time="' || cases.tot_interval_msec || '"/>'); + else + p(' <testcase name="' || nvl(cases.testcase,'NULL') || + '" classname="' || suites.package_name || '.' || suites.class_name || + '" time="' || cases.tot_interval_msec || '">'); + p(' <error message="' || nvl(to_char(cases.failures),'No') || ' assertion failures. ' || + suites.error_message || '">'); + -- Print each of the non-passing results + for asrts in ( + select wtr.result_seq + ,wtr.status + ,wtr.interval_msec + ,wtr.message + ,wtr.assertion + ,wtr.details + from wt_results wtr + where wtr.test_run_id = suites.id + and ( ( cases.testcase_id is null + and wtr.testcase_id is null) + or wtr.testcase_id = cases.testcase_id) + and wtr.status != 'PASS' + order by wtr.result_seq ) + loop + p(lpad(asrts.result_seq,4) || ': ' || + rpad(asrts.status,4) || ' ' || + lpad(asrts.interval_msec,4) || 'ms ' || + asrts.message || '. ' || + asrts.assertion || ' - ' || + replace(replace(asrts.details + ,CHR(13),'\r') + ,CHR(10),'\n') || '.' ); + end loop; + p(' </error>'); + p(' </testcase>'); + end if; + end loop; + end loop; + p(' </testsuite>'); + p('</testsuites>'); +end junit_xml_persist_all; + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/StProc/seg_0/C4884317-FB22-4CE6-0CA7-1154121979D9.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/StProc/seg_0/C4884317-FB22-4CE6-0CA7-1154121979D9.xml new file mode 100644 index 0000000..6d947e7 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/StProc/seg_0/C4884317-FB22-4CE6-0CA7-1154121979D9.xml @@ -0,0 +1,37 @@ + + +wtp@DEVPDB_localhost +WTP +WT_EXECUTE_TEST_RUNNER +duane +2024-04-10 19:09:28 UTC +Main + +CREATE OR REPLACE PROCEDURE WTP.WT_EXECUTE_TEST_RUNNER + authid current_user + -- AUTHID CURRENT_USER is required for assertions with + -- dynamic PL/SQL execution. +is + sql_txt varchar2(4000); +begin + sql_txt := 'begin "' || core_data.g_run_rec.test_runner_name || + '".' || wtplsql.C_RUNNER_ENTRY_POINT || '; end;'; + --dbms_output.put_line(sql_txt); + execute immediate sql_txt; +end wt_execute_test_runner; + + +wtp@DEVPDB_localhost +PUBLIC +WT_EXECUTE_TEST_RUNNER +duane +2024-04-10 19:09:28 UTC +Main +WT_EXECUTE_TEST_RUNNER +0B8CEE14-5EF4-002A-AC5B-E55C89A47256 +YES +PUBLIC +C4884317-FB22-4CE6-0CA7-1154121979D9 + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/TSpace/seg_0/D5F08164-B74B-C1FD-B26F-24B803D8279B.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/TSpace/seg_0/D5F08164-B74B-C1FD-B26F-24B803D8279B.xml new file mode 100644 index 0000000..a9a6fcd --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/TSpace/seg_0/D5F08164-B74B-C1FD-B26F-24B803D8279B.xml @@ -0,0 +1,17 @@ + + +wtp@DEVPDB_localhost +USERS +duane +2024-04-10 19:09:11 UTC +Main +65536 +2147483645 +0 +LOCAL +65536 +NOCOMPRESS +NO +SMALLFILE +NO + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/1DEC1727-6653-3CF8-958B-90000528613A.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/1DEC1727-6653-3CF8-958B-90000528613A.xml new file mode 100644 index 0000000..aabdab5 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/1DEC1727-6653-3CF8-958B-90000528613A.xml @@ -0,0 +1,83 @@ + + +duane +2024-04-10 19:09:16 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +YES +DISABLE +9ABA10BC-E32C-519C-DEC0-04F084280A2E +D5F08164-B74B-C1FD-B26F-24B803D8279B +false +oracle_loader + +NO + + +duane +2024-04-10 19:09:17 UTC +Main +0 + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + + + +duane +2024-04-10 19:09:26 UTC +Main + + + + +duane +2024-04-10 19:09:23 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +SORTED +BY INDEX NAME + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/47D50FCD-FE02-67DD-23DD-EFF91FD5D711.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/47D50FCD-FE02-67DD-23DD-EFF91FD5D711.xml new file mode 100644 index 0000000..dd83a16 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/47D50FCD-FE02-67DD-23DD-EFF91FD5D711.xml @@ -0,0 +1,109 @@ + + +duane +2024-04-10 19:09:16 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +YES +DISABLE +9ABA10BC-E32C-519C-DEC0-04F084280A2E +D5F08164-B74B-C1FD-B26F-24B803D8279B +false +oracle_loader + +NO + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main +NOCACHE +NO +YES + + +duane +2024-04-10 19:09:17 UTC +Main + + + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + + + +duane +2024-04-10 19:09:26 UTC +Main +NOCACHE +8192 +TEMP_CLOB +NO +KEEP_DUPLICATES +YES +D5F08164-B74B-C1FD-B26F-24B803D8279B +SECUREFILE + + +duane +2024-04-10 19:09:26 UTC +Main +NOCACHE +8192 +TEMP_NCLOB +NO +KEEP_DUPLICATES +YES +D5F08164-B74B-C1FD-B26F-24B803D8279B +SECUREFILE + + +duane +2024-04-10 19:09:26 UTC +Main +NOCACHE +8192 +TEMP_BLOB +NO +KEEP_DUPLICATES +YES +D5F08164-B74B-C1FD-B26F-24B803D8279B +SECUREFILE + + + + +duane +2024-04-10 19:09:23 UTC +Main +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B +CC6EA31D-8C6D-43CA-48AD-647942BF5D40 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +SORTED +BY INDEX NAME + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/5EC59CF5-A3B7-D15B-B334-0DEBC25C7FB1.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/5EC59CF5-A3B7-D15B-B334-0DEBC25C7FB1.xml new file mode 100644 index 0000000..c29f13b --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/5EC59CF5-A3B7-D15B-B334-0DEBC25C7FB1.xml @@ -0,0 +1,110 @@ + + +duane +2024-04-10 19:09:16 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +YES +DISABLE +9ABA10BC-E32C-519C-DEC0-04F084280A2E +D5F08164-B74B-C1FD-B26F-24B803D8279B +false +oracle_loader + +NO + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + + + +duane +2024-04-10 19:09:26 UTC +Main + + +duane +2024-04-10 19:09:26 UTC +Main + + + + +duane +2024-04-10 19:09:23 UTC +Main +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B +3BC086E6-141B-F03D-5CC3-72D78263FAFD +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +SORTED +BY INDEX NAME + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/758A13CE-831B-0FF3-AF1D-6EFCB98A56C9.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/758A13CE-831B-0FF3-AF1D-6EFCB98A56C9.xml new file mode 100644 index 0000000..d5af127 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/758A13CE-831B-0FF3-AF1D-6EFCB98A56C9.xml @@ -0,0 +1,87 @@ + + +duane +2024-04-10 19:09:16 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +YES +DISABLE +9ABA10BC-E32C-519C-DEC0-04F084280A2E +D5F08164-B74B-C1FD-B26F-24B803D8279B +false +oracle_loader + +NO + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + + + +duane +2024-04-10 19:09:26 UTC +Main + + + + +duane +2024-04-10 19:09:23 UTC +Main +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B +DB57788D-3B52-806E-A715-3DD110D30DC7 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +SORTED +BY INDEX NAME + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/75C40BBC-950A-B117-05CF-FF327E9C0952.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/75C40BBC-950A-B117-05CF-FF327E9C0952.xml new file mode 100644 index 0000000..290d6ad --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/75C40BBC-950A-B117-05CF-FF327E9C0952.xml @@ -0,0 +1,71 @@ + + +duane +2024-04-10 19:09:16 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +YES +DISABLE +9ABA10BC-E32C-519C-DEC0-04F084280A2E +D5F08164-B74B-C1FD-B26F-24B803D8279B +false +oracle_loader + +NO + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + + + +duane +2024-04-10 19:09:23 UTC +Main +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B +57364B35-063C-7D55-AB08-72AA47779E52 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +SORTED +BY INDEX NAME + + + + +duane +2024-04-10 19:09:23 UTC +Main +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B +D60F8FA2-B8FA-3E87-0E6C-E1AB31EEDFF3 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +SORTED +BY INDEX NAME + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/7BDB22F5-B7AD-B5AE-A800-A707BAF1DB1E.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/7BDB22F5-B7AD-B5AE-A800-A707BAF1DB1E.xml new file mode 100644 index 0000000..1891337 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/7BDB22F5-B7AD-B5AE-A800-A707BAF1DB1E.xml @@ -0,0 +1,81 @@ + + +duane +2024-04-10 19:09:16 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +YES +DISABLE +9ABA10BC-E32C-519C-DEC0-04F084280A2E +D5F08164-B74B-C1FD-B26F-24B803D8279B +false +oracle_loader + +NO + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main +systimestamp + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + + + +wtp@DEVPDB_localhost +PUBLIC +WT_VERSION +duane +2024-04-10 19:09:28 UTC +Main +WT_VERSIONS +0B8CEE14-5EF4-002A-AC5B-E55C89A47256 +YES +PUBLIC +7BDB22F5-B7AD-B5AE-A800-A707BAF1DB1E + + + + +duane +2024-04-10 19:09:23 UTC +Main +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B +29A8968B-73C4-A947-E56A-CB653A6D0182 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +SORTED +BY INDEX NAME + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/8B85014B-3DC9-977A-759E-DFE1810940A6.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/8B85014B-3DC9-977A-759E-DFE1810940A6.xml new file mode 100644 index 0000000..0e0530e --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/8B85014B-3DC9-977A-759E-DFE1810940A6.xml @@ -0,0 +1,138 @@ + + +duane +2024-04-10 19:09:16 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +YES +DISABLE +9ABA10BC-E32C-519C-DEC0-04F084280A2E +D5F08164-B74B-C1FD-B26F-24B803D8279B +false +oracle_loader + +NO + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + + + +duane +2024-04-10 19:09:26 UTC +Main + + + + +duane +2024-04-10 19:09:23 UTC +Main +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B +279A4402-57A7-30E7-A5C2-9FA6CE0E5B86 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +SORTED +BY INDEX NAME + + + + +duane +2024-04-10 19:09:23 UTC +Main +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B +5854E86D-CA12-D05E-5A4F-703318A938A3 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +SORTED +BY INDEX NAME + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/9636F0E1-B48A-756B-7277-A09DA3C8A191.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/9636F0E1-B48A-756B-7277-A09DA3C8A191.xml new file mode 100644 index 0000000..f3f13ef --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/9636F0E1-B48A-756B-7277-A09DA3C8A191.xml @@ -0,0 +1,189 @@ + + +duane +2024-04-10 19:09:16 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +YES +DISABLE +9ABA10BC-E32C-519C-DEC0-04F084280A2E +D5F08164-B74B-C1FD-B26F-24B803D8279B +false +oracle_loader + +NO + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + + + +duane +2024-04-10 19:09:26 UTC +Main + + +duane +2024-04-10 19:09:26 UTC +Main + + + + +duane +2024-04-10 19:09:23 UTC +Main +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B +B507F811-AF7E-FE87-42B9-7D0724206D16 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +SORTED +BY INDEX NAME + + + + +duane +2024-04-10 19:09:23 UTC +Main +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B +85ABE586-CE1F-F626-A3E3-FFEA98E00E26 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +SORTED +BY INDEX NAME + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/9DDC7252-C57D-1FBB-D73B-1B2B31CF0854.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/9DDC7252-C57D-1FBB-D73B-1B2B31CF0854.xml new file mode 100644 index 0000000..ac5bca8 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/9DDC7252-C57D-1FBB-D73B-1B2B31CF0854.xml @@ -0,0 +1,105 @@ + + +duane +2024-04-10 19:09:16 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +YES +DISABLE +9ABA10BC-E32C-519C-DEC0-04F084280A2E +D5F08164-B74B-C1FD-B26F-24B803D8279B +false +oracle_loader + +NO + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + + + +duane +2024-04-10 19:09:26 UTC +Main + + +duane +2024-04-10 19:09:26 UTC +Main + + + + +duane +2024-04-10 19:09:23 UTC +Main +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B +6AF8B7A9-46A4-BE5E-A760-85F2174DD48A +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +SORTED +BY INDEX NAME + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/9E263B07-E38C-E935-0A24-90CB87282FB8.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/9E263B07-E38C-E935-0A24-90CB87282FB8.xml new file mode 100644 index 0000000..cfc5beb --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/9E263B07-E38C-E935-0A24-90CB87282FB8.xml @@ -0,0 +1,92 @@ + + +duane +2024-04-10 19:09:16 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +YES +DISABLE +9ABA10BC-E32C-519C-DEC0-04F084280A2E +D5F08164-B74B-C1FD-B26F-24B803D8279B +false +oracle_loader + +NO + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + + + +duane +2024-04-10 19:09:26 UTC +Main + + + + +duane +2024-04-10 19:09:23 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +SORTED +BY INDEX NAME + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/AD852798-2151-9B8D-72B3-69C9049EC985.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/AD852798-2151-9B8D-72B3-69C9049EC985.xml new file mode 100644 index 0000000..b3edf1f --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/AD852798-2151-9B8D-72B3-69C9049EC985.xml @@ -0,0 +1,85 @@ + + +duane +2024-04-10 19:09:16 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +YES +DISABLE +9ABA10BC-E32C-519C-DEC0-04F084280A2E +D5F08164-B74B-C1FD-B26F-24B803D8279B +false +oracle_loader + +NO + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + + + +duane +2024-04-10 19:09:23 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +SORTED +BY INDEX NAME + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/C5FD4ACF-3E8D-0C48-7FDC-820373D68467.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/C5FD4ACF-3E8D-0C48-7FDC-820373D68467.xml new file mode 100644 index 0000000..bda7d6b --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/C5FD4ACF-3E8D-0C48-7FDC-820373D68467.xml @@ -0,0 +1,60 @@ + + +duane +2024-04-10 19:09:16 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +YES +DISABLE +9ABA10BC-E32C-519C-DEC0-04F084280A2E +D5F08164-B74B-C1FD-B26F-24B803D8279B +false +oracle_loader + +NO + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + + + +duane +2024-04-10 19:09:23 UTC +Main +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B +93AA493D-C723-42F3-1B2F-B9D20027DF7F +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +SORTED +BY INDEX NAME + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/C619958B-4EFE-7A79-1530-39139BD2978B.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/C619958B-4EFE-7A79-1530-39139BD2978B.xml new file mode 100644 index 0000000..da81f65 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/C619958B-4EFE-7A79-1530-39139BD2978B.xml @@ -0,0 +1,76 @@ + + +duane +2024-04-10 19:09:16 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +YES +DISABLE +9ABA10BC-E32C-519C-DEC0-04F084280A2E +D5F08164-B74B-C1FD-B26F-24B803D8279B +false +oracle_loader + +NO + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + + + +duane +2024-04-10 19:09:23 UTC +Main +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B +AC6B7B7D-E083-B836-BC78-86E1476C5BF0 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +SORTED +BY INDEX NAME + + + + +duane +2024-04-10 19:09:23 UTC +Main +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B +F270B202-046E-38BE-3A39-3285F13DBBCA +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +SORTED +BY INDEX NAME + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/DA7F3AD5-D951-192B-23AE-A1549FB69116.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/DA7F3AD5-D951-192B-23AE-A1549FB69116.xml new file mode 100644 index 0000000..d6b2bee --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Table/seg_0/DA7F3AD5-D951-192B-23AE-A1549FB69116.xml @@ -0,0 +1,89 @@ + + +duane +2024-04-10 19:09:16 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +YES +DISABLE +9ABA10BC-E32C-519C-DEC0-04F084280A2E +D5F08164-B74B-C1FD-B26F-24B803D8279B +false +oracle_loader + +NO + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + +duane +2024-04-10 19:09:17 UTC +Main + + + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + +duane +2024-04-10 19:09:21 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B + + + + +duane +2024-04-10 19:09:23 UTC +Main +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B +2C2E601F-2BF6-032F-AD32-F023AFB88417 +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +SORTED +BY INDEX NAME + + + + +duane +2024-04-10 19:09:23 UTC +Main +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +D5F08164-B74B-C1FD-B26F-24B803D8279B +2A8838C5-C51F-648F-3E04-0142CD1D810B +CB5DC202-4437-7272-A4FF-0AA23BAB0E6F +SORTED +BY INDEX NAME + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Trigger/seg_0/606CC829-B100-400E-EE10-15915642CD1D.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Trigger/seg_0/606CC829-B100-400E-EE10-15915642CD1D.xml new file mode 100644 index 0000000..4b43762 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/Trigger/seg_0/606CC829-B100-400E-EE10-15915642CD1D.xml @@ -0,0 +1,19 @@ + + +wtp@DEVPDB_localhost +WTP +WT_SELF_TEST$TEST +duane +2024-04-10 19:09:26 UTC +Main +INSERT + +BEFORE +0B8CEE14-5EF4-002A-AC5B-E55C89A47256 +47D50FCD-FE02-67DD-23DD-EFF91FD5D711
          +
          diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/User/seg_0/0B8CEE14-5EF4-002A-AC5B-E55C89A47256.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/User/seg_0/0B8CEE14-5EF4-002A-AC5B-E55C89A47256.xml new file mode 100644 index 0000000..e6138c1 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/User/seg_0/0B8CEE14-5EF4-002A-AC5B-E55C89A47256.xml @@ -0,0 +1,20 @@ + + +wtp@DEVPDB_localhost +WTP +duane +2024-04-10 19:09:11 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 +D5F08164-B74B-C1FD-B26F-24B803D8279B +CREATE JOB, CREATE TYPE, CREATE TRIGGER, CREATE PROCEDURE, CREATE DATABASE LINK, CREATE SEQUENCE, CREATE VIEW, CREATE PUBLIC SYNONYM, CREATE TABLE, CREATE SESSION + + +duane +2024-04-10 19:09:11 UTC +Main +536870912 +D5F08164-B74B-C1FD-B26F-24B803D8279B + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/User/seg_0/MDSYS.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/User/seg_0/MDSYS.xml new file mode 100644 index 0000000..ab50a69 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/User/seg_0/MDSYS.xml @@ -0,0 +1,8 @@ + + +duane +2024-04-10 19:08:09 UTC +Main +true +true + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/User/seg_0/PUBLIC.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/User/seg_0/PUBLIC.xml new file mode 100644 index 0000000..fff60f4 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/User/seg_0/PUBLIC.xml @@ -0,0 +1,157 @@ + + +duane +2024-04-10 19:08:09 UTC +Main +true +true + + +duane +2024-04-10 19:09:31 UTC +Main +SELECT +D21D0B42-D3AB-93D4-7A95-C16EB182CCFE + + +duane +2024-04-10 19:09:33 UTC +Main +DELETE, SELECT +758A13CE-831B-0FF3-AF1D-6EFCB98A56C9
          +
          + +duane +2024-04-10 19:09:33 UTC +Main +DELETE, SELECT +9DDC7252-C57D-1FBB-D73B-1B2B31CF0854
          +
          + +duane +2024-04-10 19:09:33 UTC +Main +DELETE, SELECT +75C40BBC-950A-B117-05CF-FF327E9C0952
          +
          + +duane +2024-04-10 19:09:33 UTC +Main +DELETE, SELECT +5EC59CF5-A3B7-D15B-B334-0DEBC25C7FB1
          +
          + +duane +2024-04-10 19:09:33 UTC +Main +DELETE, SELECT +C619958B-4EFE-7A79-1530-39139BD2978B
          +
          + +duane +2024-04-10 19:09:33 UTC +Main +DELETE, INSERT, SELECT +9636F0E1-B48A-756B-7277-A09DA3C8A191
          +
          + +duane +2024-04-10 19:09:33 UTC +Main +SELECT +7BDB22F5-B7AD-B5AE-A800-A707BAF1DB1E
          +
          + +duane +2024-04-10 19:09:34 UTC +Main +EXECUTE +52B10B9D-540A-14A5-4425-5F33BEF76415 + + +duane +2024-04-10 19:09:34 UTC +Main +EXECUTE +C4884317-FB22-4CE6-0CA7-1154121979D9 + + +duane +2024-04-10 19:09:35 UTC +Main +0BE8DADB-1C62-A689-AFC7-E019ACC9401C +EXECUTE + + +duane +2024-04-10 19:09:32 UTC +Main +SELECT +0D3F7B3A-0C1A-E082-30AF-94CC2F8DA150 + + +duane +2024-04-10 19:09:35 UTC +Main +E540BEB4-86FF-0BEC-4B75-E54681F8A22B +EXECUTE + + +duane +2024-04-10 19:09:35 UTC +Main +678B0BFB-EF32-C534-B075-F0B5F2416CA1 +EXECUTE + + +duane +2024-04-10 19:09:32 UTC +Main +SELECT +A729999D-C3F8-5C34-5F9E-8616ED91107F + + +duane +2024-04-10 19:09:32 UTC +Main +SELECT +97E53EBE-3CA8-2E65-0D8F-7B66E933E2D7 + + +duane +2024-04-10 19:09:32 UTC +Main +SELECT +B1B78CE3-596A-EE16-4161-D349F1B06CF5 + + +duane +2024-04-10 19:09:32 UTC +Main +SELECT +CF8C8B20-F299-4674-1B96-161EB7C5E9A0 + + +duane +2024-04-10 19:09:32 UTC +Main +SELECT +EE143981-963F-4366-4DDB-29FA08800B6F + + +duane +2024-04-10 19:09:33 UTC +Main +DELETE, SELECT +DA7F3AD5-D951-192B-23AE-A1549FB69116
          +
          + +duane +2024-04-10 19:09:33 UTC +Main +DELETE, INSERT, SELECT +8B85014B-3DC9-977A-759E-DFE1810940A6
          +
          +
          +
          diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/0D3F7B3A-0C1A-E082-30AF-94CC2F8DA150.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/0D3F7B3A-0C1A-E082-30AF-94CC2F8DA150.xml new file mode 100644 index 0000000..71ca238 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/0D3F7B3A-0C1A-E082-30AF-94CC2F8DA150.xml @@ -0,0 +1,7 @@ + + +duane +2024-04-10 19:09:12 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/6ED7D361-B23F-43AA-FDAB-BAAFCF1EFECE.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/6ED7D361-B23F-43AA-FDAB-BAAFCF1EFECE.xml new file mode 100644 index 0000000..bf39236 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/6ED7D361-B23F-43AA-FDAB-BAAFCF1EFECE.xml @@ -0,0 +1,7 @@ + + +duane +2024-04-10 19:09:12 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/97E53EBE-3CA8-2E65-0D8F-7B66E933E2D7.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/97E53EBE-3CA8-2E65-0D8F-7B66E933E2D7.xml new file mode 100644 index 0000000..055d905 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/97E53EBE-3CA8-2E65-0D8F-7B66E933E2D7.xml @@ -0,0 +1,7 @@ + + +duane +2024-04-10 19:09:12 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/A729999D-C3F8-5C34-5F9E-8616ED91107F.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/A729999D-C3F8-5C34-5F9E-8616ED91107F.xml new file mode 100644 index 0000000..0e4ba1d --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/A729999D-C3F8-5C34-5F9E-8616ED91107F.xml @@ -0,0 +1,7 @@ + + +duane +2024-04-10 19:09:12 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/B1B78CE3-596A-EE16-4161-D349F1B06CF5.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/B1B78CE3-596A-EE16-4161-D349F1B06CF5.xml new file mode 100644 index 0000000..d8a17f9 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/B1B78CE3-596A-EE16-4161-D349F1B06CF5.xml @@ -0,0 +1,7 @@ + + +duane +2024-04-10 19:09:12 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/CF8C8B20-F299-4674-1B96-161EB7C5E9A0.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/CF8C8B20-F299-4674-1B96-161EB7C5E9A0.xml new file mode 100644 index 0000000..b3f6ac7 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/CF8C8B20-F299-4674-1B96-161EB7C5E9A0.xml @@ -0,0 +1,7 @@ + + +duane +2024-04-10 19:09:12 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/EE143981-963F-4366-4DDB-29FA08800B6F.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/EE143981-963F-4366-4DDB-29FA08800B6F.xml new file mode 100644 index 0000000..f0af2aa --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/phys/01F6E6D1-3988D1813575/View/seg_0/EE143981-963F-4366-4DDB-29FA08800B6F.xml @@ -0,0 +1,7 @@ + + +duane +2024-04-10 19:09:12 UTC +Main +F3F68D51-50F9-4B34-B38E-4A24C8F25A04 + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/schema/seg_0/F3F68D51-50F9-4B34-B38E-4A24C8F25A04.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/schema/seg_0/F3F68D51-50F9-4B34-B38E-4A24C8F25A04.xml new file mode 100644 index 0000000..82f93ab --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/schema/seg_0/F3F68D51-50F9-4B34-B38E-4A24C8F25A04.xml @@ -0,0 +1,6 @@ + + +duane +2024-04-10 19:09:12 UTC +Main + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/subviews/BE494CF6-1875-7125-7D99-7559C7F01672.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/subviews/BE494CF6-1875-7125-7D99-7559C7F01672.xml new file mode 100644 index 0000000..5466490 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/subviews/BE494CF6-1875-7125-7D99-7559C7F01672.xml @@ -0,0 +1,194 @@ + + +duane +duane +2024-04-10 19:09:11 UTC +false +true +false +false +false +false +false +-1 +false +1 + + +false + + + +false + + + +false + + + +false + + + +false + + + +false + + + +false + + + +false + + + +false + + + +false + + + +false + + + +false + + + +false + + + +false + + + +false + + + +false + + + +false + + + +false + + + +false + + + +false + + + +false + + + + + +false +-16777216 +1 + + + + + + +false +-16777216 +1 + + + + + + +false +-16777216 +1 + + + + + + +false +-16777216 +1 + + + + + + +false +-16777216 +1 + + + + + + +false +-16777216 +1 + + + + + + +false +-16777216 +1 + + + + + + +false +-16777216 +1 + + + + + + +false +-16777216 +1 + + + + + + +false +-16777216 +1 + + + + + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/1DEC1727-6653-3CF8-958B-90000528613A.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/1DEC1727-6653-3CF8-958B-90000528613A.xml new file mode 100644 index 0000000..e2f0cac --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/1DEC1727-6653-3CF8-958B-90000528613A.xml @@ -0,0 +1,182 @@ + + +wtp@DEVPDB_localhost +WTP +PLSQL_PROFILER_UNITS +duane +2024-04-10 19:09:16 UTC + +Main +false +true +true + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_UNITS +RUNID +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +,, +false + + + + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_UNITS +UNIT_NUMBER +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_UNITS +UNIT_TYPE +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT024 +32 BYTE +32 BYTE,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_UNITS +UNIT_OWNER +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT024 +32 BYTE +32 BYTE,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_UNITS +UNIT_NAME +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT024 +32 BYTE +32 BYTE,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_UNITS +UNIT_TIMESTAMP +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT007 +7 +7,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_UNITS +TOTAL_TIME +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +0 +,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_UNITS +SPARE1 +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_UNITS +SPARE2 +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +,, +false + + + + +wtp@DEVPDB_localhost +WTP +SYS_C008236 +duane +2024-04-10 19:09:21 UTC +Main +true +Primary Constraint +false + + + + + + +duane +2024-04-10 19:09:26 UTC +Main +Foreign Key +false + + + + + +
          diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/47D50FCD-FE02-67DD-23DD-EFF91FD5D711.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/47D50FCD-FE02-67DD-23DD-EFF91FD5D711.xml new file mode 100644 index 0000000..38c5337 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/47D50FCD-FE02-67DD-23DD-EFF91FD5D711.xml @@ -0,0 +1,121 @@ + + +wtp@DEVPDB_localhost +WTP +WT_SELF_TEST +duane +2024-04-10 19:09:16 UTC + +Main +false +true +true + + +wtp@DEVPDB_localhost +WT_SELF_TEST +ID +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +,, +false + + +wtp@DEVPDB_localhost +WT_SELF_TEST +TEMP_CLOB +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT028 +4000 +4000,, +false + + +wtp@DEVPDB_localhost +WT_SELF_TEST +TEMP_NCLOB +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LogDes-7DD553FD-11E8-61FA-399D-2E531FB621D0@LOGDT10035 +4000 +4000,, +false + + +wtp@DEVPDB_localhost +WT_SELF_TEST +TEMP_XML +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT050 +,, +false + + +wtp@DEVPDB_localhost +WT_SELF_TEST +TEMP_BLOB +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT029 +4000 +4000,, +false + + + + +wtp@DEVPDB_localhost +WTP +WT_SELF_TEST_PK +duane +2024-04-10 19:09:23 UTC +Main +true +Primary Constraint +false + + + + + +wtp@DEVPDB_localhost +WTP +WT_SELF_TEST_PK +duane +2024-04-10 19:09:21 UTC +Main +Unique Plain Index +false + + + + + +
          diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/5EC59CF5-A3B7-D15B-B334-0DEBC25C7FB1.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/5EC59CF5-A3B7-D15B-B334-0DEBC25C7FB1.xml new file mode 100644 index 0000000..0e9754c --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/5EC59CF5-A3B7-D15B-B334-0DEBC25C7FB1.xml @@ -0,0 +1,254 @@ + + +wtp@DEVPDB_localhost +WTP +WT_TESTCASE_RUNS +duane +2024-04-10 19:09:16 UTC + +Main +false +true +true + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS +TEST_RUN_ID +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +38 +0 +,38,0 +false +WT_TESTCASE_RUNS_NN1 + + + + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS +TESTCASE_ID +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +38 +0 +,38,0 +false +WT_TESTCASE_RUNS_NN2 + + + + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS +ASRT_YIELD_PCT +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +3 +0 +,3,0 +false + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS +ASRT_CNT +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +7 +0 +,7,0 +false + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS +ASRT_FAIL +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +7 +0 +,7,0 +false + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS +ASRT_PASS +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +7 +0 +,7,0 +false + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS +ASRT_MIN_MSEC +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +10 +0 +,10,0 +false + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS +ASRT_AVG_MSEC +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +10 +0 +,10,0 +false + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS +ASRT_MAX_MSEC +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +10 +0 +,10,0 +false + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS +ASRT_TOT_MSEC +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +10 +0 +,10,0 +false + + + + +wtp@DEVPDB_localhost +WTP +WT_TESTCASE_RUNS_PK +duane +2024-04-10 19:09:23 UTC +Main +true +Primary Constraint +false + + + + + + +wtp@DEVPDB_localhost +WTP +WT_TESTCASE_RUNS_IX1 +duane +2024-04-10 19:09:21 UTC +Main +false + + + + + +wtp@DEVPDB_localhost +WTP +WT_TESTCASE_RUNS_PK +duane +2024-04-10 19:09:21 UTC +Main +Unique Plain Index +false + + + + + + +duane +2024-04-10 19:09:26 UTC +Main +Foreign Key +false + + + + + +duane +2024-04-10 19:09:26 UTC +Main +Foreign Key +false + + + + + +
          diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/758A13CE-831B-0FF3-AF1D-6EFCB98A56C9.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/758A13CE-831B-0FF3-AF1D-6EFCB98A56C9.xml new file mode 100644 index 0000000..3c24e1e --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/758A13CE-831B-0FF3-AF1D-6EFCB98A56C9.xml @@ -0,0 +1,187 @@ + + +wtp@DEVPDB_localhost +WTP +WT_PROFILES +duane +2024-04-10 19:09:16 UTC + +Main +false +true +true + + +wtp@DEVPDB_localhost +WT_PROFILES +TEST_RUN_ID +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +38 +0 +,38,0 +false +WT_PROFILES_NN1 + + + + + +wtp@DEVPDB_localhost +WT_PROFILES +LINE +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +6 +0 +,6,0 +false +WT_PROFILES_NN2 + + +wtp@DEVPDB_localhost +WT_PROFILES +STATUS +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT024 +4 BYTE +4 BYTE,, +false + + +wtp@DEVPDB_localhost +WT_PROFILES +EXEC_CNT +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +9 +0 +,9,0 +false + + +wtp@DEVPDB_localhost +WT_PROFILES +EXEC_TOT_USEC +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +,, +false + + +wtp@DEVPDB_localhost +WT_PROFILES +EXEC_MIN_USEC +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +,, +false + + +wtp@DEVPDB_localhost +WT_PROFILES +EXEC_MAX_USEC +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +,, +false + + +wtp@DEVPDB_localhost +WT_PROFILES +TEXT +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT024 +4000 BYTE +4000 BYTE,, +false + + + + +wtp@DEVPDB_localhost +WTP +WT_PROFILES_PK +duane +2024-04-10 19:09:23 UTC +Main +true +Primary Constraint +false + + + + + + +wtp@DEVPDB_localhost +WTP +WT_PROFILES_PK +duane +2024-04-10 19:09:21 UTC +Main +Unique Plain Index +false + + + + + + +duane +2024-04-10 19:09:26 UTC +Main +Foreign Key +false + + + + + +
          diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/75C40BBC-950A-B117-05CF-FF327E9C0952.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/75C40BBC-950A-B117-05CF-FF327E9C0952.xml new file mode 100644 index 0000000..bb92b65 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/75C40BBC-950A-B117-05CF-FF327E9C0952.xml @@ -0,0 +1,102 @@ + + +wtp@DEVPDB_localhost +WTP +WT_TESTCASES +duane +2024-04-10 19:09:16 UTC + +Main +false +true +true + + +wtp@DEVPDB_localhost +WT_TESTCASES +ID +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +38 +0 +,38,0 +false + + +wtp@DEVPDB_localhost +WT_TESTCASES +TESTCASE +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT024 +128 BYTE +128 BYTE,, +false +WT_TESTCASES_NN1 + + + + +wtp@DEVPDB_localhost +WTP +WT_TESTCASES_PK +duane +2024-04-10 19:09:23 UTC +Main +true +Primary Constraint +false + + + + + +wtp@DEVPDB_localhost +WTP +WT_TESTCASES_NK1 +duane +2024-04-10 19:09:23 UTC +Main +Unique Constraint +false + + + + + +wtp@DEVPDB_localhost +WTP +WT_TESTCASES_NK1 +duane +2024-04-10 19:09:21 UTC +Main +Unique Plain Index +false + + + + + +wtp@DEVPDB_localhost +WTP +WT_TESTCASES_PK +duane +2024-04-10 19:09:21 UTC +Main +Unique Plain Index +false + + + + + +
          diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/7BDB22F5-B7AD-B5AE-A800-A707BAF1DB1E.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/7BDB22F5-B7AD-B5AE-A800-A707BAF1DB1E.xml new file mode 100644 index 0000000..417fdfa --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/7BDB22F5-B7AD-B5AE-A800-A707BAF1DB1E.xml @@ -0,0 +1,129 @@ + + +wtp@DEVPDB_localhost +WTP +WT_VERSIONS +duane +2024-04-10 19:09:16 UTC + +Main +false +true +true + + +wtp@DEVPDB_localhost +WT_VERSIONS +INSTALL_TSTMP +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT047 +6 +systimestamp +,6, +false + + +wtp@DEVPDB_localhost +WT_VERSIONS +COMPONENT +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT024 +15 BYTE +15 BYTE,, +false +WT_VESIONS_NN1 + + +wtp@DEVPDB_localhost +WT_VERSIONS +VERSION +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +,, +false +WT_VESIONS_NN2 + + +wtp@DEVPDB_localhost +WT_VERSIONS +ACTION +duane +2024-04-10 19:09:17 UTC + +Main +WT_VERSIONS_CK1 +false +1 +LOGDT024 +15 BYTE + + + + + +15 BYTE,, +false +WT_VESIONS_NN3 + + +wtp@DEVPDB_localhost +WT_VERSIONS +NOTES +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT024 +4000 BYTE +4000 BYTE,, +false + + + + +wtp@DEVPDB_localhost +WTP +WT_VERSIONS_PK +duane +2024-04-10 19:09:23 UTC +Main +true +Primary Constraint +false + + + + + +wtp@DEVPDB_localhost +WTP +WT_VERSIONS_PK +duane +2024-04-10 19:09:21 UTC +Main +Unique Plain Index +false + + + + + +
          diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/8B85014B-3DC9-977A-759E-DFE1810940A6.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/8B85014B-3DC9-977A-759E-DFE1810940A6.xml new file mode 100644 index 0000000..b54a6c4 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/8B85014B-3DC9-977A-759E-DFE1810940A6.xml @@ -0,0 +1,321 @@ + + +wtp@DEVPDB_localhost +WTP +WT_DBOUT_RUNS +duane +2024-04-10 19:09:16 UTC + +Main +false +true +true + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS +TEST_RUN_ID +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +38 +0 +,38,0 +false +WT_DBOUT_RUNS_NN1 + + + + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS +PROFILER_RUNID +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +38 +0 +,38,0 +false +WT_DBOUT_RUNS_NN2 + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS +TRIGGER_OFFSET +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +6 +0 +,6,0 +false + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS +COVERAGE_PCT +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +4 +1 +,4,1 +false + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS +PROFILED_LINES +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +6 +0 +,6,0 +false + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS +EXECUTED_LINES +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +6 +0 +,6,0 +false + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS +IGNORED_LINES +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +6 +0 +,6,0 +false + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS +EXCLUDED_LINES +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +6 +0 +,6,0 +false + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS +NOTEXEC_LINES +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +6 +0 +,6,0 +false + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS +UNKNOWN_LINES +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +6 +0 +,6,0 +false + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS +EXEC_MIN_USEC +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +11 +0 +,11,0 +false + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS +EXEC_AVG_USEC +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +11 +0 +,11,0 +false + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS +EXEC_MAX_USEC +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +11 +0 +,11,0 +false + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS +EXEC_TOT_USEC +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +11 +0 +,11,0 +false + + + + +wtp@DEVPDB_localhost +WTP +WT_DBOUT_RUNS_PK +duane +2024-04-10 19:09:23 UTC +Main +true +Primary Constraint +false + + + + + +wtp@DEVPDB_localhost +WTP +WT_DBOUT_RUNS_NK1 +duane +2024-04-10 19:09:23 UTC +Main +Unique Constraint +false + + + + + +wtp@DEVPDB_localhost +WTP +WT_DBOUT_RUNS_NK1 +duane +2024-04-10 19:09:21 UTC +Main +Unique Plain Index +false + + + + + +wtp@DEVPDB_localhost +WTP +WT_DBOUT_RUNS_PK +duane +2024-04-10 19:09:21 UTC +Main +Unique Plain Index +false + + + + + +duane +2024-04-10 19:09:26 UTC +Main +Foreign Key +false + + + + + +
          diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/9636F0E1-B48A-756B-7277-A09DA3C8A191.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/9636F0E1-B48A-756B-7277-A09DA3C8A191.xml new file mode 100644 index 0000000..059b827 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/9636F0E1-B48A-756B-7277-A09DA3C8A191.xml @@ -0,0 +1,457 @@ + + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUNS +duane +2024-04-10 19:09:16 UTC + +Main +false +true +true + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +ID +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +38 +0 +,38,0 +false + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +TEST_RUNNER_ID +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +38 +0 +,38,0 +false +WT_TEST_RUNS_NN1 + + + + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +START_DTM +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT047 +3 +,3, +false +WT_TEST_RUNS_NN2 + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +END_DTM +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT047 +3 +,3, +false + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +DBOUT_ID +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +38 +0 +,38,0 +false + + + + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +RUNNER_SEC +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +6 +1 +,6,1 +false + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +IS_LAST_RUN +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT024 +1 BYTE +1 BYTE,, +false + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +ERROR_MESSAGE +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT024 +4000 BYTE +4000 BYTE,, +false + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +TC_CNT +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +7 +0 +,7,0 +false + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +TC_FAIL +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +7 +0 +,7,0 +false + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +TC_YIELD_PCT +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +4 +1 +,4,1 +false + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +ASRT_FST_DTM +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT047 +3 +,3, +false + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +ASRT_LST_DTM +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT047 +3 +,3, +false + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +ASRT_CNT +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +7 +0 +,7,0 +false + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +ASRT_FAIL +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +7 +0 +,7,0 +false + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +ASRT_YIELD_PCT +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +4 +1 +,4,1 +false + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +ASRT_MIN_MSEC +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +10 +0 +,10,0 +false + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +ASRT_AVG_MSEC +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +10 +0 +,10,0 +false + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +ASRT_MAX_MSEC +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +10 +0 +,10,0 +false + + +wtp@DEVPDB_localhost +WT_TEST_RUNS +ASRT_TOT_MSEC +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +10 +0 +,10,0 +false + + + + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUNS_PK +duane +2024-04-10 19:09:23 UTC +Main +true +Primary Constraint +false + + + + + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUNS_NK1 +duane +2024-04-10 19:09:23 UTC +Main +Unique Constraint +false + + + + + + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUNS_IX1 +duane +2024-04-10 19:09:21 UTC +Main +false + + + + + + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUNS_IX2 +duane +2024-04-10 19:09:21 UTC +Main +false + + + + + + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUNS_NK1 +duane +2024-04-10 19:09:21 UTC +Main +Unique Plain Index +false + + + + + + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUNS_PK +duane +2024-04-10 19:09:21 UTC +Main +Unique Plain Index +false + + + + + +duane +2024-04-10 19:09:26 UTC +Main +Foreign Key +false + + + + + +duane +2024-04-10 19:09:26 UTC +Main +Foreign Key +false + + + + + +
          diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/9DDC7252-C57D-1FBB-D73B-1B2B31CF0854.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/9DDC7252-C57D-1FBB-D73B-1B2B31CF0854.xml new file mode 100644 index 0000000..fdd0da4 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/9DDC7252-C57D-1FBB-D73B-1B2B31CF0854.xml @@ -0,0 +1,233 @@ + + +wtp@DEVPDB_localhost +WTP +WT_RESULTS +duane +2024-04-10 19:09:16 UTC + +Main +false +true +true + + +wtp@DEVPDB_localhost +WT_RESULTS +TEST_RUN_ID +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +38 +0 +,38,0 +false +WT_RESULTS_NN1 + + + + + +wtp@DEVPDB_localhost +WT_RESULTS +RESULT_SEQ +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +8 +0 +,8,0 +false +WT_RESULTS_NN2 + + +wtp@DEVPDB_localhost +WT_RESULTS +TESTCASE_ID +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +38 +0 +,38,0 +false + + + + + +wtp@DEVPDB_localhost +WT_RESULTS +EXECUTED_DTM +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT015 +6 +,6, +false + + +wtp@DEVPDB_localhost +WT_RESULTS +INTERVAL_MSEC +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +12 +3 +,12,3 +false + + +wtp@DEVPDB_localhost +WT_RESULTS +ASSERTION +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT024 +15 BYTE +15 BYTE,, +false + + +wtp@DEVPDB_localhost +WT_RESULTS +STATUS +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT024 +4 BYTE +4 BYTE,, +false + + +wtp@DEVPDB_localhost +WT_RESULTS +MESSAGE +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT024 +200 BYTE +200 BYTE,, +false + + +wtp@DEVPDB_localhost +WT_RESULTS +DETAILS +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT024 +4000 BYTE +4000 BYTE,, +false + + + + +wtp@DEVPDB_localhost +WTP +WT_RESULTS_PK +duane +2024-04-10 19:09:23 UTC +Main +true +Primary Constraint +false + + + + + + +wtp@DEVPDB_localhost +WTP +WT_RESULTS_IX1 +duane +2024-04-10 19:09:21 UTC +Main +false + + + + + + +wtp@DEVPDB_localhost +WTP +WT_RESULTS_PK +duane +2024-04-10 19:09:21 UTC +Main +Unique Plain Index +false + + + + + + +duane +2024-04-10 19:09:26 UTC +Main +Foreign Key +false + + + + + +duane +2024-04-10 19:09:26 UTC +Main +Foreign Key +false + + + + + +
          diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/9E263B07-E38C-E935-0A24-90CB87282FB8.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/9E263B07-E38C-E935-0A24-90CB87282FB8.xml new file mode 100644 index 0000000..32ba696 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/9E263B07-E38C-E935-0A24-90CB87282FB8.xml @@ -0,0 +1,212 @@ + + +wtp@DEVPDB_localhost +WTP +PLSQL_PROFILER_DATA +duane +2024-04-10 19:09:16 UTC + +Main +false +true +true + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_DATA +RUNID +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +,, +false + + + + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_DATA +UNIT_NUMBER +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +,, +false + + + + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_DATA +LINE# +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_DATA +TOTAL_OCCUR +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_DATA +TOTAL_TIME +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_DATA +MIN_TIME +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_DATA +MAX_TIME +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_DATA +SPARE1 +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_DATA +SPARE2 +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_DATA +SPARE3 +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_DATA +SPARE4 +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +,, +false + + + + +wtp@DEVPDB_localhost +WTP +SYS_C008233 +duane +2024-04-10 19:09:21 UTC +Main +true +Primary Constraint +false + + + + + + + +duane +2024-04-10 19:09:26 UTC +Main +Foreign Key +false + + + + + + +
          diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/AD852798-2151-9B8D-72B3-69C9049EC985.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/AD852798-2151-9B8D-72B3-69C9049EC985.xml new file mode 100644 index 0000000..d73d76b --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/AD852798-2151-9B8D-72B3-69C9049EC985.xml @@ -0,0 +1,183 @@ + + +wtp@DEVPDB_localhost +WTP +PLSQL_PROFILER_RUNS +duane +2024-04-10 19:09:16 UTC + +Main +false +true +true + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_RUNS +RUNID +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_RUNS +RELATED_RUN +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_RUNS +RUN_OWNER +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT024 +32 BYTE +32 BYTE,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_RUNS +RUN_DATE +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT007 +7 +7,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_RUNS +RUN_COMMENT +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT024 +2047 BYTE +2047 BYTE,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_RUNS +RUN_TOTAL_TIME +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT019 +,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_RUNS +RUN_SYSTEM_INFO +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT024 +2047 BYTE +2047 BYTE,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_RUNS +RUN_COMMENT1 +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT024 +2047 BYTE +2047 BYTE,, +false + + +wtp@DEVPDB_localhost +PLSQL_PROFILER_RUNS +SPARE1 +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT024 +256 BYTE +256 BYTE,, +false + + + + +wtp@DEVPDB_localhost +WTP +SYS_C008234 +duane +2024-04-10 19:09:21 UTC +Main +true +Primary Constraint +false + + + + + +wtp@DEVPDB_localhost +WTP +PLSQL_PROFILER_RUNS_IDX1 +duane +2024-04-10 19:09:21 UTC +Main +false + + + + + +
          diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/C5FD4ACF-3E8D-0C48-7FDC-820373D68467.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/C5FD4ACF-3E8D-0C48-7FDC-820373D68467.xml new file mode 100644 index 0000000..9ccfddf --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/C5FD4ACF-3E8D-0C48-7FDC-820373D68467.xml @@ -0,0 +1,126 @@ + + +wtp@DEVPDB_localhost +WTP +HOOKS +duane +2024-04-10 19:09:16 UTC + +Main +false +true +true + + +wtp@DEVPDB_localhost +HOOKS +HOOK_NAME +duane +2024-04-10 19:09:17 UTC + +Main +HOOKS_CK1 +false +1 +LOGDT024 +20 BYTE + + + + + + + + + +20 BYTE,, +false +WT_HOOKS_NN1 + + +wtp@DEVPDB_localhost +HOOKS +SEQ +duane +2024-04-10 19:09:17 UTC + +Main +HOOKS_CK2 +false +1 +LOGDT019 +2 +0 + + + + +,2,0 +false +WT_HOOKS_NN2 + + +wtp@DEVPDB_localhost +HOOKS +RUN_STRING +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT024 +4000 BYTE +4000 BYTE,, +false +WT_HOOKS_NN3 + + +wtp@DEVPDB_localhost +HOOKS +DESCRIPTION +duane +2024-04-10 19:09:17 UTC + +Main +true +false +1 +LOGDT024 +1000 BYTE +1000 BYTE,, +false + + + + +wtp@DEVPDB_localhost +WTP +HOOKS_PK +duane +2024-04-10 19:09:23 UTC +Main +true +Primary Constraint +false + + + + + + +wtp@DEVPDB_localhost +WTP +HOOKS_PK +duane +2024-04-10 19:09:21 UTC +Main +Unique Plain Index +false + + + + + + +
          diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/C619958B-4EFE-7A79-1530-39139BD2978B.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/C619958B-4EFE-7A79-1530-39139BD2978B.xml new file mode 100644 index 0000000..0e8b0bb --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/C619958B-4EFE-7A79-1530-39139BD2978B.xml @@ -0,0 +1,121 @@ + + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUNNERS +duane +2024-04-10 19:09:16 UTC + +Main +false +true +true + + +wtp@DEVPDB_localhost +WT_TEST_RUNNERS +ID +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +38 +0 +,38,0 +false +WT_TEST_RUNNERS_NN1 + + +wtp@DEVPDB_localhost +WT_TEST_RUNNERS +OWNER +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT024 +128 BYTE +128 BYTE,, +false +WT_TEST_RUNNERS_NN2 + + +wtp@DEVPDB_localhost +WT_TEST_RUNNERS +NAME +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT024 +128 BYTE +128 BYTE,, +false +WT_TEST_RUNNERS_NN3 + + + + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUNNERS_PK +duane +2024-04-10 19:09:23 UTC +Main +true +Primary Constraint +false + + + + + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUNNERS_NK1 +duane +2024-04-10 19:09:23 UTC +Main +Unique Constraint +false + + + + + + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUNNERS_NK1 +duane +2024-04-10 19:09:21 UTC +Main +Unique Plain Index +false + + + + + + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUNNERS_PK +duane +2024-04-10 19:09:21 UTC +Main +Unique Plain Index +false + + + + + +
          diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/DA7F3AD5-D951-192B-23AE-A1549FB69116.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/DA7F3AD5-D951-192B-23AE-A1549FB69116.xml new file mode 100644 index 0000000..f323db6 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/table/seg_0/DA7F3AD5-D951-192B-23AE-A1549FB69116.xml @@ -0,0 +1,152 @@ + + +wtp@DEVPDB_localhost +WTP +WT_DBOUTS +duane +2024-04-10 19:09:16 UTC + +Main +false +true +true + + +wtp@DEVPDB_localhost +WT_DBOUTS +ID +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT019 +38 +0 +,38,0 +false +WT_DBOUTS_NN1 + + +wtp@DEVPDB_localhost +WT_DBOUTS +OWNER +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT024 +128 BYTE +128 BYTE,, +false +WT_DBOUTS_NN2 + + +wtp@DEVPDB_localhost +WT_DBOUTS +NAME +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT024 +128 BYTE +128 BYTE,, +false +WT_DBOUTS_NN3 + + +wtp@DEVPDB_localhost +WT_DBOUTS +TYPE +duane +2024-04-10 19:09:17 UTC + +Main +false +1 +LOGDT024 +20 BYTE +20 BYTE,, +false +WT_DBOUTS_NN4 + + + + +wtp@DEVPDB_localhost +WTP +WT_DBOUTS_PK +duane +2024-04-10 19:09:23 UTC +Main +true +Primary Constraint +false + + + + + +wtp@DEVPDB_localhost +WTP +WT_DBOUTS_NK1 +duane +2024-04-10 19:09:23 UTC +Main +Unique Constraint +false + + + + + + + +wtp@DEVPDB_localhost +WTP +WT_DBOUTS_IX1 +duane +2024-04-10 19:09:21 UTC +Main +false + + + + + + +wtp@DEVPDB_localhost +WTP +WT_DBOUTS_NK1 +duane +2024-04-10 19:09:21 UTC +Main +Unique Plain Index +false + + + + + + + +wtp@DEVPDB_localhost +WTP +WT_DBOUTS_PK +duane +2024-04-10 19:09:21 UTC +Main +Unique Plain Index +false + + + + + +
          diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/0D3F7B3A-0C1A-E082-30AF-94CC2F8DA150.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/0D3F7B3A-0C1A-E082-30AF-94CC2F8DA150.xml new file mode 100644 index 0000000..9e4f065 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/0D3F7B3A-0C1A-E082-30AF-94CC2F8DA150.xml @@ -0,0 +1,605 @@ + + +wtp@DEVPDB_localhost +WTP +WT_DBOUT_RUNS_VW +duane +2024-04-10 19:09:12 UTC + +Main +true + +true + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +TEST_RUN_ID +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUN_ID +NUMBER (38) +TEST_RUN_ID +false +21D3050F-F203-BB95-67D1-C5928CC1A212 + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +DBOUT_ID +duane +2024-04-10 19:09:12 UTC + +Main +true +false +DBOUT_ID +NUMBER (38) +DBOUT_ID +false +7F636DE0-677F-1B19-1079-48C0D498AD7D + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +DBOUT_OWNER +duane +2024-04-10 19:09:12 UTC + +Main +true +false +DBOUT_OWNER +TIMESTAMP (3) WITH LOCAL TIME ZONE +DBOUT_OWNER +false +06E82655-F87C-C9C7-64B0-2D58D23E8F80 + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +DBOUT_NAME +duane +2024-04-10 19:09:12 UTC + +Main +true +false +DBOUT_NAME +TIMESTAMP (3) WITH LOCAL TIME ZONE +DBOUT_NAME +false +8B807635-368C-F677-724E-DA46FF4DC43A + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +DBOUT_TYPE +duane +2024-04-10 19:09:12 UTC + +Main +true +false +DBOUT_TYPE +VARCHAR2 (1 BYTE) +DBOUT_TYPE +false +2388280C-DB94-5809-CC50-3D28CC81ED50 + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +TEST_RUNNER_ID +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUNNER_ID +VARCHAR2 (4000 BYTE) +TEST_RUNNER_ID +false +14F097CA-2FC9-72CA-44AB-4C6405899B87 + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +TEST_RUNNER_OWNER +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUNNER_OWNER +NUMBER (38) +TEST_RUNNER_OWNER +false +F7E17E4F-72FB-2237-B81A-454CB77CF9AE + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +TEST_RUNNER_NAME +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUNNER_NAME +NUMBER (6) +TEST_RUNNER_NAME +false +FD80BDD1-F571-43E2-E44D-A9FD53AB7594 + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +START_DTM +duane +2024-04-10 19:09:12 UTC + +Main +true +false +START_DTM +NUMBER (4,1) +START_DTM +false +FD42894C-C7E7-35DC-77EB-D2DA314771C6 + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +END_DTM +duane +2024-04-10 19:09:12 UTC + +Main +true +false +END_DTM +NUMBER (6) +END_DTM +false +EA42B83F-7825-C69A-3199-23F2758A4F1E + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +IS_LAST_RUN +duane +2024-04-10 19:09:12 UTC + +Main +true +false +IS_LAST_RUN +NUMBER (6) +IS_LAST_RUN +false +3D3EAABA-89BF-2CDD-A7B8-B6FC127E1130 + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +ERROR_MESSAGE +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ERROR_MESSAGE +NUMBER (6) +ERROR_MESSAGE +false +814FF55F-DAEA-A4F8-2C0A-B2A69A2F9E69 + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +PROFILER_RUNID +duane +2024-04-10 19:09:12 UTC + +Main +true +false +PROFILER_RUNID +NUMBER (6) +PROFILER_RUNID +false +C5DFF22B-A984-C67B-A2F5-456CA679934C + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +TRIGGER_OFFSET +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TRIGGER_OFFSET +NUMBER (6) +TRIGGER_OFFSET +false +B3EC6BA3-EB9C-0367-8ED8-B6A1C43CF4CB + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +COVERAGE_PCT +duane +2024-04-10 19:09:12 UTC + +Main +true +false +COVERAGE_PCT +NUMBER (6) +COVERAGE_PCT +false +2650D4C2-6698-9AAC-F4AC-09325BEEA077 + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +PROFILED_LINES +duane +2024-04-10 19:09:12 UTC + +Main +true +false +PROFILED_LINES +NUMBER (11) +PROFILED_LINES +false +2359EF30-7E13-93F6-4E5D-B1C46A5302E4 + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +EXECUTED_LINES +duane +2024-04-10 19:09:12 UTC + +Main +true +false +EXECUTED_LINES +NUMBER (11) +EXECUTED_LINES +false +7CB8A6EA-5D09-A112-F9CF-BFD197514992 + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +IGNORED_LINES +duane +2024-04-10 19:09:12 UTC + +Main +true +false +IGNORED_LINES +NUMBER (11) +IGNORED_LINES +false +B3496CED-FABA-40B4-EE1E-34FCF625A1F2 + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +EXCLUDED_LINES +duane +2024-04-10 19:09:12 UTC + +Main +true +false +EXCLUDED_LINES +NUMBER (11) +EXCLUDED_LINES +false +51162AEE-1419-9012-1569-0840DE11E099 + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +NOTEXEC_LINES +duane +2024-04-10 19:09:12 UTC + +Main +true +false +NOTEXEC_LINES +NUMBER (6) +NOTEXEC_LINES +false + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +UNKNOWN_LINES +duane +2024-04-10 19:09:12 UTC + +Main +true +false +UNKNOWN_LINES +NUMBER (6) +UNKNOWN_LINES +false + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +EXEC_MIN_USEC +duane +2024-04-10 19:09:12 UTC + +Main +true +false +EXEC_MIN_USEC +NUMBER (11) +EXEC_MIN_USEC +false + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +EXEC_AVG_USEC +duane +2024-04-10 19:09:12 UTC + +Main +true +false +EXEC_AVG_USEC +NUMBER (11) +EXEC_AVG_USEC +false + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +EXEC_MAX_USEC +duane +2024-04-10 19:09:12 UTC + +Main +true +false +EXEC_MAX_USEC +NUMBER (11) +EXEC_MAX_USEC +false + + +wtp@DEVPDB_localhost +WT_DBOUT_RUNS_VW +EXEC_TOT_USEC +duane +2024-04-10 19:09:12 UTC + +Main +true +false +EXEC_TOT_USEC +NUMBER (11) +EXEC_TOT_USEC +false + + + + +true +WTP +WT_TEST_RUNS + + +true +WTP +WT_DBOUTS + + +true +WTP +WT_TEST_RUNNERS + + +true +WTP +WT_DBOUT_RUNS + + +DBOUT_ID +WTP +WT_TEST_RUNS + + +TEST_RUNNER_ID +WTP +WT_TEST_RUNS + + +START_DTM +WTP +WT_TEST_RUNS + + +END_DTM +WTP +WT_TEST_RUNS + + +IS_LAST_RUN +WTP +WT_TEST_RUNS + + +ERROR_MESSAGE +WTP +WT_TEST_RUNS + + +PROFILER_RUNID +WTP +WT_DBOUT_RUNS + + +TRIGGER_OFFSET +WTP +WT_DBOUT_RUNS + + +COVERAGE_PCT +WTP +WT_DBOUT_RUNS + + +PROFILED_LINES +WTP +WT_DBOUT_RUNS + + +EXECUTED_LINES +WTP +WT_DBOUT_RUNS + + +IGNORED_LINES +WTP +WT_DBOUT_RUNS + + +EXCLUDED_LINES +WTP +WT_DBOUT_RUNS + + +NOTEXEC_LINES +WTP +WT_DBOUT_RUNS + + +UNKNOWN_LINES +WTP +WT_DBOUT_RUNS + + +EXEC_MIN_USEC +WTP +WT_DBOUT_RUNS + + +EXEC_AVG_USEC +WTP +WT_DBOUT_RUNS + + +EXEC_MAX_USEC +WTP +WT_DBOUT_RUNS + + +EXEC_TOT_USEC +WTP +WT_DBOUT_RUNS + + +TEST_RUN_ID +WTP +WT_DBOUT_RUNS + + +OWNER +WTP +WT_TEST_RUNNERS + + +NAME +WTP +WT_DBOUTS + + +ID +WTP +WT_DBOUTS + + +OWNER +WTP +WT_DBOUTS + + +NAME +WTP +WT_TEST_RUNNERS + + +TYPE +WTP +WT_DBOUTS + + +ID +WTP +WT_TEST_RUNNERS + + +ID +WTP +WT_TEST_RUNS + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/6ED7D361-B23F-43AA-FDAB-BAAFCF1EFECE.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/6ED7D361-B23F-43AA-FDAB-BAAFCF1EFECE.xml new file mode 100644 index 0000000..69295fc --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/6ED7D361-B23F-43AA-FDAB-BAAFCF1EFECE.xml @@ -0,0 +1,172 @@ + + +wtp@DEVPDB_localhost +WTP +WT_SCHEDULER_JOBS_VW +duane +2024-04-10 19:09:12 UTC + +Main +true + +true + + +wtp@DEVPDB_localhost +WT_SCHEDULER_JOBS_VW +LOG_ID +duane +2024-04-10 19:09:12 UTC + +Main +true +false +LOG_ID +NUMBER +LOG_ID +false + + +wtp@DEVPDB_localhost +WT_SCHEDULER_JOBS_VW +START_DATE +duane +2024-04-10 19:09:12 UTC + +Main +true +false +START_DATE +TIMESTAMP(9) WITH TIME ZONE +START_DATE +false + + +wtp@DEVPDB_localhost +WT_SCHEDULER_JOBS_VW +JOB_NAME +duane +2024-04-10 19:09:12 UTC + +Main +true +false +JOB_NAME +VARCHAR2 (1044 BYTE) +JOB_NAME +false + + +wtp@DEVPDB_localhost +WT_SCHEDULER_JOBS_VW +STATUS +duane +2024-04-10 19:09:12 UTC + +Main +true +false +STATUS +VARCHAR2 (30 BYTE) +STATUS +false + + +wtp@DEVPDB_localhost +WT_SCHEDULER_JOBS_VW +INST +duane +2024-04-10 19:09:12 UTC + +Main +true +false +INST +NUMBER +INST +false + + +wtp@DEVPDB_localhost +WT_SCHEDULER_JOBS_VW +SESSION_ID +duane +2024-04-10 19:09:12 UTC + +Main +true +false +SESSION_ID +NUMBER +SESSION_ID +false + + +wtp@DEVPDB_localhost +WT_SCHEDULER_JOBS_VW +OS_PID +duane +2024-04-10 19:09:12 UTC + +Main +true +false +OS_PID +NUMBER +OS_PID +false + + +wtp@DEVPDB_localhost +WT_SCHEDULER_JOBS_VW +ERROR_NUM +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ERROR_NUM +NUMBER +ERROR_NUM +false + + +wtp@DEVPDB_localhost +WT_SCHEDULER_JOBS_VW +ADDITIONAL_INFO +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ADDITIONAL_INFO +VARCHAR2 (4000 BYTE) +ADDITIONAL_INFO +false + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/97E53EBE-3CA8-2E65-0D8F-7B66E933E2D7.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/97E53EBE-3CA8-2E65-0D8F-7B66E933E2D7.xml new file mode 100644 index 0000000..62f309e --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/97E53EBE-3CA8-2E65-0D8F-7B66E933E2D7.xml @@ -0,0 +1,51 @@ + + +wtp@DEVPDB_localhost +WTP +WT_QUAL_TEST_RUNNERS_VW +duane +2024-04-10 19:09:12 UTC + +Main +true + +true + + +wtp@DEVPDB_localhost +WT_QUAL_TEST_RUNNERS_VW +OWNER +duane +2024-04-10 19:09:12 UTC + +Main +true +false +OWNER +VARCHAR2 (128 BYTE) +OWNER +false + + +wtp@DEVPDB_localhost +WT_QUAL_TEST_RUNNERS_VW +PACKAGE_NAME +duane +2024-04-10 19:09:12 UTC + +Main +true +false +PACKAGE_NAME +VARCHAR2 (128 BYTE) +PACKAGE_NAME +false + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/A729999D-C3F8-5C34-5F9E-8616ED91107F.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/A729999D-C3F8-5C34-5F9E-8616ED91107F.xml new file mode 100644 index 0000000..cbc15fb --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/A729999D-C3F8-5C34-5F9E-8616ED91107F.xml @@ -0,0 +1,468 @@ + + +wtp@DEVPDB_localhost +WTP +WT_PROFILES_VW +duane +2024-04-10 19:09:12 UTC + +Main +true + +true + + +wtp@DEVPDB_localhost +WT_PROFILES_VW +TEST_RUN_ID +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUN_ID +NUMBER (38) +TEST_RUN_ID +false +21D3050F-F203-BB95-67D1-C5928CC1A212 + + +wtp@DEVPDB_localhost +WT_PROFILES_VW +DBOUT_ID +duane +2024-04-10 19:09:12 UTC + +Main +true +false +DBOUT_ID +NUMBER (38) +DBOUT_ID +false +7F636DE0-677F-1B19-1079-48C0D498AD7D + + +wtp@DEVPDB_localhost +WT_PROFILES_VW +DBOUT_OWNER +duane +2024-04-10 19:09:12 UTC + +Main +true +false +DBOUT_OWNER +TIMESTAMP (3) WITH LOCAL TIME ZONE +DBOUT_OWNER +false +06E82655-F87C-C9C7-64B0-2D58D23E8F80 + + +wtp@DEVPDB_localhost +WT_PROFILES_VW +DBOUT_NAME +duane +2024-04-10 19:09:12 UTC + +Main +true +false +DBOUT_NAME +TIMESTAMP (3) WITH LOCAL TIME ZONE +DBOUT_NAME +false +8B807635-368C-F677-724E-DA46FF4DC43A + + +wtp@DEVPDB_localhost +WT_PROFILES_VW +DBOUT_TYPE +duane +2024-04-10 19:09:12 UTC + +Main +true +false +DBOUT_TYPE +VARCHAR2 (1 BYTE) +DBOUT_TYPE +false +2388280C-DB94-5809-CC50-3D28CC81ED50 + + +wtp@DEVPDB_localhost +WT_PROFILES_VW +TEST_RUNNER_ID +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUNNER_ID +VARCHAR2 (4000 BYTE) +TEST_RUNNER_ID +false +14F097CA-2FC9-72CA-44AB-4C6405899B87 + + +wtp@DEVPDB_localhost +WT_PROFILES_VW +TEST_RUNNER_OWNER +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUNNER_OWNER +NUMBER (6) +TEST_RUNNER_OWNER +false +884B2B12-D77B-8588-BA5F-B4C490C13F42 + + +wtp@DEVPDB_localhost +WT_PROFILES_VW +TEST_RUNNER_NAME +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUNNER_NAME +VARCHAR2 (4 BYTE) +TEST_RUNNER_NAME +false +EC7C07AC-1657-1B4B-D18C-258D1BB6F66D + + +wtp@DEVPDB_localhost +WT_PROFILES_VW +START_DTM +duane +2024-04-10 19:09:12 UTC +Main +true +false +START_DTM +NUMBER (9) +START_DTM +false +3734B96A-DE31-456A-0323-BBA1702870BE + + +wtp@DEVPDB_localhost +WT_PROFILES_VW +END_DTM +duane +2024-04-10 19:09:12 UTC +Main +true +false +END_DTM +NUMBER +END_DTM +false +7D001A71-7FEB-9F08-7608-46FE6B96404D + + +wtp@DEVPDB_localhost +WT_PROFILES_VW +IS_LAST_RUN +duane +2024-04-10 19:09:12 UTC +Main +true +false +IS_LAST_RUN +NUMBER +IS_LAST_RUN +false +20B5B5E4-6E5E-A189-0264-ED60FED9F0ED + + +wtp@DEVPDB_localhost +WT_PROFILES_VW +ERROR_MESSAGE +duane +2024-04-10 19:09:12 UTC +Main +true +false +ERROR_MESSAGE +NUMBER +ERROR_MESSAGE +false +9736387F-262C-D108-E534-ECE3AF554846 + + +wtp@DEVPDB_localhost +WT_PROFILES_VW +LINE +duane +2024-04-10 19:09:12 UTC + +Main +true +false +LINE +VARCHAR2 (4000 BYTE) +LINE +false +1A522A73-09A9-DADE-B9C7-033795B2BB73 + + +wtp@DEVPDB_localhost +WT_PROFILES_VW +STATUS +duane +2024-04-10 19:09:12 UTC + +Main +true +false +STATUS +VARCHAR2 (4 BYTE) +STATUS +false + + +wtp@DEVPDB_localhost +WT_PROFILES_VW +EXEC_CNT +duane +2024-04-10 19:09:12 UTC + +Main +true +false +EXEC_CNT +NUMBER (9) +EXEC_CNT +false + + +wtp@DEVPDB_localhost +WT_PROFILES_VW +EXEC_TOT_USEC +duane +2024-04-10 19:09:12 UTC + +Main +true +false +EXEC_TOT_USEC +NUMBER +EXEC_TOT_USEC +false + + +wtp@DEVPDB_localhost +WT_PROFILES_VW +EXEC_MIN_USEC +duane +2024-04-10 19:09:12 UTC + +Main +true +false +EXEC_MIN_USEC +NUMBER +EXEC_MIN_USEC +false + + +wtp@DEVPDB_localhost +WT_PROFILES_VW +EXEC_MAX_USEC +duane +2024-04-10 19:09:12 UTC + +Main +true +false +EXEC_MAX_USEC +NUMBER +EXEC_MAX_USEC +false + + +wtp@DEVPDB_localhost +WT_PROFILES_VW +TEXT +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEXT +VARCHAR2 (4000 BYTE) +TEXT +false + + + + +true +WTP +WT_TEST_RUNS + + +true +WTP +WT_DBOUTS + + +true +WTP +WT_TEST_RUNNERS + + +true +WTP +WT_PROFILES + + +DBOUT_ID +WTP +WT_TEST_RUNS + + +TEST_RUNNER_ID +WTP +WT_TEST_RUNS + + +START_DTM +WTP +WT_TEST_RUNS + + +END_DTM +WTP +WT_TEST_RUNS + + +IS_LAST_RUN +WTP +WT_TEST_RUNS + + +ERROR_MESSAGE +WTP +WT_TEST_RUNS + + +LINE +WTP +WT_PROFILES + + +STATUS +WTP +WT_PROFILES + + +EXEC_CNT +WTP +WT_PROFILES + + +EXEC_TOT_USEC +WTP +WT_PROFILES + + +EXEC_MIN_USEC +WTP +WT_PROFILES + + +EXEC_MAX_USEC +WTP +WT_PROFILES + + +TEXT +WTP +WT_PROFILES + + +OWNER +WTP +WT_DBOUTS + + +NAME +WTP +WT_TEST_RUNNERS + + +TYPE +WTP +WT_DBOUTS + + +OWNER +WTP +WT_TEST_RUNNERS + + +ID +WTP +WT_TEST_RUNNERS + + +ID +WTP +WT_TEST_RUNS + + +NAME +WTP +WT_DBOUTS + + +TEST_RUN_ID +WTP +WT_PROFILES + + +ID +WTP +WT_DBOUTS + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/B1B78CE3-596A-EE16-4161-D349F1B06CF5.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/B1B78CE3-596A-EE16-4161-D349F1B06CF5.xml new file mode 100644 index 0000000..0836911 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/B1B78CE3-596A-EE16-4161-D349F1B06CF5.xml @@ -0,0 +1,431 @@ + + +wtp@DEVPDB_localhost +WTP +WT_RESULTS_VW +duane +2024-04-10 19:09:12 UTC + +Main +true + +true + + +wtp@DEVPDB_localhost +WT_RESULTS_VW +TEST_RUN_ID +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUN_ID +NUMBER (38) +TEST_RUN_ID +false +7F636DE0-677F-1B19-1079-48C0D498AD7D + + +wtp@DEVPDB_localhost +WT_RESULTS_VW +TEST_RUNNER_ID +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUNNER_ID +TIMESTAMP (3) WITH LOCAL TIME ZONE +TEST_RUNNER_ID +false +06E82655-F87C-C9C7-64B0-2D58D23E8F80 + + +wtp@DEVPDB_localhost +WT_RESULTS_VW +TEST_RUNNER_OWNER +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUNNER_OWNER +TIMESTAMP (3) WITH LOCAL TIME ZONE +TEST_RUNNER_OWNER +false +8B807635-368C-F677-724E-DA46FF4DC43A + + +wtp@DEVPDB_localhost +WT_RESULTS_VW +TEST_RUNNER_NAME +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUNNER_NAME +VARCHAR2 (1 BYTE) +TEST_RUNNER_NAME +false +2388280C-DB94-5809-CC50-3D28CC81ED50 + + +wtp@DEVPDB_localhost +WT_RESULTS_VW +START_DTM +duane +2024-04-10 19:09:12 UTC + +Main +true +false +START_DTM +VARCHAR2 (4000 BYTE) +START_DTM +false +14F097CA-2FC9-72CA-44AB-4C6405899B87 + + +wtp@DEVPDB_localhost +WT_RESULTS_VW +END_DTM +duane +2024-04-10 19:09:12 UTC + +Main +true +false +END_DTM +NUMBER (8) +END_DTM +false +F09577B1-5488-FDF0-6C04-A17041D4C3E5 + + +wtp@DEVPDB_localhost +WT_RESULTS_VW +IS_LAST_RUN +duane +2024-04-10 19:09:12 UTC + +Main +true +false +IS_LAST_RUN +NUMBER (38) +IS_LAST_RUN +false +AE50B8BB-70DA-3595-258F-F8F47A8A25B3 + + +wtp@DEVPDB_localhost +WT_RESULTS_VW +ERROR_MESSAGE +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ERROR_MESSAGE +VARCHAR2 (128 BYTE) +ERROR_MESSAGE +false +4638A115-B74D-2A1B-C113-F8116DF5F2C9 + + +wtp@DEVPDB_localhost +WT_RESULTS_VW +RESULT_SEQ +duane +2024-04-10 19:09:12 UTC + +Main +true +false +RESULT_SEQ +TIMESTAMP +RESULT_SEQ +false +9773D5F2-EA7D-6F19-139E-313C84DE7204 + + +wtp@DEVPDB_localhost +WT_RESULTS_VW +TESTCASE_ID +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TESTCASE_ID +NUMBER (12,3) +TESTCASE_ID +false +BEE5EB59-2962-C94F-DF33-48E0E7BC7A76 + + +wtp@DEVPDB_localhost +WT_RESULTS_VW +TESTCASE +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TESTCASE +VARCHAR2 (15 BYTE) +TESTCASE +false +E7810FCB-8D8B-B8B0-C2AA-AF2CDCA2BF7E + + +wtp@DEVPDB_localhost +WT_RESULTS_VW +EXECUTED_DTM +duane +2024-04-10 19:09:12 UTC + +Main +true +false +EXECUTED_DTM +VARCHAR2 (4 BYTE) +EXECUTED_DTM +false +44EB5585-77F9-08CD-BE79-CEEEDB61BE32 + + +wtp@DEVPDB_localhost +WT_RESULTS_VW +INTERVAL_MSEC +duane +2024-04-10 19:09:12 UTC + +Main +true +false +INTERVAL_MSEC +VARCHAR2 (200 BYTE) +INTERVAL_MSEC +false +F8D51E92-AC6D-8A48-246B-C1FDF3FE7CBA + + +wtp@DEVPDB_localhost +WT_RESULTS_VW +ASSERTION +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ASSERTION +VARCHAR2 (4000 BYTE) +ASSERTION +false +77033B55-FF0A-7D0D-6F92-1941DAD3329B + + +wtp@DEVPDB_localhost +WT_RESULTS_VW +STATUS +duane +2024-04-10 19:09:12 UTC + +Main +true +false +STATUS +VARCHAR2 (4 BYTE) +STATUS +false + + +wtp@DEVPDB_localhost +WT_RESULTS_VW +MESSAGE +duane +2024-04-10 19:09:12 UTC + +Main +true +false +MESSAGE +VARCHAR2 (200 BYTE) +MESSAGE +false + + +wtp@DEVPDB_localhost +WT_RESULTS_VW +DETAILS +duane +2024-04-10 19:09:12 UTC + +Main +true +false +DETAILS +VARCHAR2 (4000 BYTE) +DETAILS +false + + + + +true +WTP +WT_TEST_RUNS + + +true +WTP +WT_TEST_RUNNERS + + +true +WTP +WT_RESULTS + + +true +WTP +WT_TESTCASES + + +TEST_RUNNER_ID +WTP +WT_TEST_RUNS + + +START_DTM +WTP +WT_TEST_RUNS + + +END_DTM +WTP +WT_TEST_RUNS + + +IS_LAST_RUN +WTP +WT_TEST_RUNS + + +ERROR_MESSAGE +WTP +WT_TEST_RUNS + + +RESULT_SEQ +WTP +WT_RESULTS + + +TESTCASE_ID +WTP +WT_RESULTS + + +TESTCASE +WTP +WT_TESTCASES + + +EXECUTED_DTM +WTP +WT_RESULTS + + +INTERVAL_MSEC +WTP +WT_RESULTS + + +ASSERTION +WTP +WT_RESULTS + + +STATUS +WTP +WT_RESULTS + + +MESSAGE +WTP +WT_RESULTS + + +DETAILS +WTP +WT_RESULTS + + +NAME +WTP +WT_TEST_RUNNERS + + +OWNER +WTP +WT_TEST_RUNNERS + + +ID +WTP +WT_TEST_RUNNERS + + +ID +WTP +WT_TEST_RUNS + + +TEST_RUN_ID +WTP +WT_RESULTS + + +ID +WTP +WT_TESTCASES + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/CF8C8B20-F299-4674-1B96-161EB7C5E9A0.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/CF8C8B20-F299-4674-1B96-161EB7C5E9A0.xml new file mode 100644 index 0000000..8262bbf --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/CF8C8B20-F299-4674-1B96-161EB7C5E9A0.xml @@ -0,0 +1,410 @@ + + +wtp@DEVPDB_localhost +WTP +WT_TESTCASE_RUNS_VW +duane +2024-04-10 19:09:12 UTC + +Main +true + +true + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS_VW +TEST_RUN_ID +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUN_ID +NUMBER (38) +TEST_RUN_ID +false +56E444F2-E134-E369-242C-027796EDD9D8 + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS_VW +TESTCASE_ID +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TESTCASE_ID +NUMBER (38) +TESTCASE_ID +false +86C08030-DA4E-772E-88A8-13EB703339AC + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS_VW +TESTCASE +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TESTCASE +VARCHAR2 (128 BYTE) +TESTCASE +false +4638A115-B74D-2A1B-C113-F8116DF5F2C9 + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS_VW +TEST_RUNNER_ID +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUNNER_ID +NUMBER (38) +TEST_RUNNER_ID +false +7F636DE0-677F-1B19-1079-48C0D498AD7D + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS_VW +TEST_RUNNER_OWNER +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUNNER_OWNER +VARCHAR2 (1 BYTE) +TEST_RUNNER_OWNER +false +2388280C-DB94-5809-CC50-3D28CC81ED50 + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS_VW +TEST_RUNNER_NAME +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUNNER_NAME +VARCHAR2 (4000 BYTE) +TEST_RUNNER_NAME +false +14F097CA-2FC9-72CA-44AB-4C6405899B87 + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS_VW +IS_LAST_RUN +duane +2024-04-10 19:09:12 UTC + +Main +true +false +IS_LAST_RUN +NUMBER (3) +IS_LAST_RUN +false +785E9A33-BFB2-9A04-F467-02225F041330 + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS_VW +ERROR_MESSAGE +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ERROR_MESSAGE +NUMBER (7) +ERROR_MESSAGE +false +A3E3D619-85BD-3862-2393-A7803E9CAA5E + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS_VW +ASRT_YIELD_PCT +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ASRT_YIELD_PCT +NUMBER (7) +ASRT_YIELD_PCT +false +09945C69-5818-0DCF-AF02-C460B6C213D4 + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS_VW +ASRT_CNT +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ASRT_CNT +NUMBER (7) +ASRT_CNT +false +D9FA8939-98AA-5CFA-BB8D-5DE3E36748D9 + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS_VW +ASRT_FAIL +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ASRT_FAIL +NUMBER (10) +ASRT_FAIL +false +87CBD83F-AE2D-3B16-6590-4724E552B6A2 + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS_VW +ASRT_PASS +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ASRT_PASS +NUMBER (10) +ASRT_PASS +false +F1931CFF-1796-6D94-C335-2194F623F7D8 + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS_VW +ASRT_MIN_MSEC +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ASRT_MIN_MSEC +NUMBER (10) +ASRT_MIN_MSEC +false +4FFF72CB-9634-B8C0-F6A2-4FF0D364EEA0 + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS_VW +ASRT_AVG_MSEC +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ASRT_AVG_MSEC +NUMBER (10) +ASRT_AVG_MSEC +false +88F9BA4A-EEE8-FF50-34BD-75C3EE390D17 + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS_VW +ASRT_MAX_MSEC +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ASRT_MAX_MSEC +NUMBER (10) +ASRT_MAX_MSEC +false + + +wtp@DEVPDB_localhost +WT_TESTCASE_RUNS_VW +ASRT_TOT_MSEC +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ASRT_TOT_MSEC +NUMBER (10) +ASRT_TOT_MSEC +false + + + + +true +WTP +WT_TESTCASE_RUNS + + +true +WTP +WT_TESTCASES + + +true +WTP +WT_TEST_RUNS + + +true +WTP +WT_TEST_RUNNERS + + +TEST_RUN_ID +WTP +WT_TESTCASE_RUNS + + +TESTCASE_ID +WTP +WT_TESTCASE_RUNS + + +TESTCASE +WTP +WT_TESTCASES + + +TEST_RUNNER_ID +WTP +WT_TEST_RUNS + + +IS_LAST_RUN +WTP +WT_TEST_RUNS + + +ERROR_MESSAGE +WTP +WT_TEST_RUNS + + +ASRT_YIELD_PCT +WTP +WT_TESTCASE_RUNS + + +ASRT_CNT +WTP +WT_TESTCASE_RUNS + + +ASRT_FAIL +WTP +WT_TESTCASE_RUNS + + +ASRT_PASS +WTP +WT_TESTCASE_RUNS + + +ASRT_MIN_MSEC +WTP +WT_TESTCASE_RUNS + + +ASRT_AVG_MSEC +WTP +WT_TESTCASE_RUNS + + +ASRT_MAX_MSEC +WTP +WT_TESTCASE_RUNS + + +ASRT_TOT_MSEC +WTP +WT_TESTCASE_RUNS + + +NAME +WTP +WT_TEST_RUNNERS + + +OWNER +WTP +WT_TEST_RUNNERS + + +ID +WTP +WT_TEST_RUNNERS + + +ID +WTP +WT_TEST_RUNS + + +ID +WTP +WT_TESTCASES + + + diff --git a/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/EE143981-963F-4366-4DDB-29FA08800B6F.xml b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/EE143981-963F-4366-4DDB-29FA08800B6F.xml new file mode 100644 index 0000000..c6edc29 --- /dev/null +++ b/docs/design/Main/rel/A1ED17DA-FD6A141ADE1D/view/seg_0/EE143981-963F-4366-4DDB-29FA08800B6F.xml @@ -0,0 +1,495 @@ + + +wtp@DEVPDB_localhost +WTP +WT_TEST_RUNS_VW +duane +2024-04-10 19:09:12 UTC + +Main +true + +true + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +TEST_RUN_ID +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUN_ID +NUMBER (38) +TEST_RUN_ID +false +7F636DE0-677F-1B19-1079-48C0D498AD7D + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +TEST_RUNNER_ID +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUNNER_ID +TIMESTAMP (3) WITH LOCAL TIME ZONE +TEST_RUNNER_ID +false +06E82655-F87C-C9C7-64B0-2D58D23E8F80 + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +TEST_RUNNER_OWNER +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUNNER_OWNER +TIMESTAMP (3) WITH LOCAL TIME ZONE +TEST_RUNNER_OWNER +false +8B807635-368C-F677-724E-DA46FF4DC43A + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +TEST_RUNNER_NAME +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TEST_RUNNER_NAME +NUMBER (6,1) +TEST_RUNNER_NAME +false +DE47BDD7-CA5C-AD25-4400-41F836A77276 + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +START_DTM +duane +2024-04-10 19:09:12 UTC + +Main +true +false +START_DTM +VARCHAR2 (1 BYTE) +START_DTM +false +2388280C-DB94-5809-CC50-3D28CC81ED50 + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +END_DTM +duane +2024-04-10 19:09:12 UTC + +Main +true +false +END_DTM +VARCHAR2 (4000 BYTE) +END_DTM +false +14F097CA-2FC9-72CA-44AB-4C6405899B87 + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +RUNNER_SEC +duane +2024-04-10 19:09:12 UTC + +Main +true +false +RUNNER_SEC +NUMBER (7) +RUNNER_SEC +false +9844421F-2EA0-03A4-7F95-401414E59693 + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +IS_LAST_RUN +duane +2024-04-10 19:09:12 UTC + +Main +true +false +IS_LAST_RUN +NUMBER (7) +IS_LAST_RUN +false +BF959A81-53A3-0A6E-1EBA-CEC53B9DFA2B + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +ERROR_MESSAGE +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ERROR_MESSAGE +NUMBER (4,1) +ERROR_MESSAGE +false +EF31F39F-6B76-0EE1-FC15-D9C8CFEBBCF7 + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +TC_CNT +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TC_CNT +TIMESTAMP (3) WITH LOCAL TIME ZONE +TC_CNT +false +C958FE2A-C541-3988-1D37-DA8793C76B17 + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +TC_FAIL +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TC_FAIL +TIMESTAMP (3) WITH LOCAL TIME ZONE +TC_FAIL +false +64DFF1A1-1CEC-8750-3DA8-014AA4CADF81 + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +TC_YIELD_PCT +duane +2024-04-10 19:09:12 UTC + +Main +true +false +TC_YIELD_PCT +NUMBER (7) +TC_YIELD_PCT +false +69643D58-A7AF-3575-7785-40708E6E0BEA + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +ASRT_FST_DTM +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ASRT_FST_DTM +NUMBER (7) +ASRT_FST_DTM +false +DF54ADB3-7D87-99BF-A174-C837C3612109 + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +ASRT_LST_DTM +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ASRT_LST_DTM +NUMBER (4,1) +ASRT_LST_DTM +false +513FE627-D229-8A70-3F6E-5E945B859135 + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +ASRT_CNT +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ASRT_CNT +NUMBER (10) +ASRT_CNT +false +F211C557-545E-F492-8277-AF1E06162B54 + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +ASRT_FAIL +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ASRT_FAIL +NUMBER (10) +ASRT_FAIL +false +970B1C8F-6CC0-BE58-15A9-35F363011C52 + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +ASRT_YIELD_PCT +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ASRT_YIELD_PCT +NUMBER (10) +ASRT_YIELD_PCT +false +41F0E99A-89C6-4044-22B7-CD435D5B764E + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +ASRT_MIN_MSEC +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ASRT_MIN_MSEC +NUMBER (10) +ASRT_MIN_MSEC +false +712EECEC-B5ED-D2F6-E366-14646B9D972A + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +ASRT_AVG_MSEC +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ASRT_AVG_MSEC +NUMBER (10) +ASRT_AVG_MSEC +false + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +ASRT_MAX_MSEC +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ASRT_MAX_MSEC +NUMBER (10) +ASRT_MAX_MSEC +false + + +wtp@DEVPDB_localhost +WT_TEST_RUNS_VW +ASRT_TOT_MSEC +duane +2024-04-10 19:09:12 UTC + +Main +true +false +ASRT_TOT_MSEC +NUMBER (10) +ASRT_TOT_MSEC +false + + + + +true +WTP +WT_TEST_RUNS + + +true +WTP +WT_TEST_RUNNERS + + +TEST_RUNNER_ID +WTP +WT_TEST_RUNS + + +START_DTM +WTP +WT_TEST_RUNS + + +END_DTM +WTP +WT_TEST_RUNS + + +RUNNER_SEC +WTP +WT_TEST_RUNS + + +IS_LAST_RUN +WTP +WT_TEST_RUNS + + +ERROR_MESSAGE +WTP +WT_TEST_RUNS + + +TC_CNT +WTP +WT_TEST_RUNS + + +TC_FAIL +WTP +WT_TEST_RUNS + + +TC_YIELD_PCT +WTP +WT_TEST_RUNS + + +ASRT_FST_DTM +WTP +WT_TEST_RUNS + + +ASRT_LST_DTM +WTP +WT_TEST_RUNS + + +ASRT_CNT +WTP +WT_TEST_RUNS + + +ASRT_FAIL +WTP +WT_TEST_RUNS + + +ASRT_YIELD_PCT +WTP +WT_TEST_RUNS + + +ASRT_MIN_MSEC +WTP +WT_TEST_RUNS + + +ASRT_AVG_MSEC +WTP +WT_TEST_RUNS + + +ASRT_MAX_MSEC +WTP +WT_TEST_RUNS + + +ASRT_TOT_MSEC +WTP +WT_TEST_RUNS + + +NAME +WTP +WT_TEST_RUNNERS + + +OWNER +WTP +WT_TEST_RUNNERS + + +ID +WTP +WT_TEST_RUNNERS + + +ID +WTP +WT_TEST_RUNS + + + diff --git a/docs/design/README.md b/docs/design/README.md new file mode 100644 index 0000000..043db06 --- /dev/null +++ b/docs/design/README.md @@ -0,0 +1,8 @@ + +### Files and Directories + +File Name | Description +-------------------------------|------------ +Core_Call_Tree_Diagrams.odg | LibreOffice Draw File for Core Process Call Trees +Core_Call_Tree_Diagrams.pdf | Core Process Call Tree (Graph) Diagrams +Core_ER_Diagrams.pdf | Core Entity-Relationship Diagrams diff --git a/docs/images/Example wtPLSQL Test Results.PNG b/docs/images/Example wtPLSQL Test Results.PNG new file mode 100644 index 0000000..73348e1 Binary files /dev/null and b/docs/images/Example wtPLSQL Test Results.PNG differ diff --git a/docs/index_leap-day.htm b/docs/index_leap-day.htm new file mode 100644 index 0000000..ffe99a0 --- /dev/null +++ b/docs/index_leap-day.htm @@ -0,0 +1,127 @@ +
          +

          layout: default

          +

          Text can be bold, italic, or strikethrough.

          +

          Link to another page.

          +

          There should be whitespace between paragraphs.

          +

          There should be whitespace between paragraphs. We recommend including a README, or a file with information about your project.

          +

          Header 1

          +

          This is a normal paragraph following a header. GitHub is a code hosting platform for version control and collaboration. It lets you and others work together on projects from anywhere.

          +

          Header 2

          +
          +

          This is a blockquote following a header.

          +

          When something is important enough, you do it even if the odds are not in your favor.

          +
          +

          Header 3

          +
          // Javascript code with syntax highlighting.
          +var fun = function lang(l) {
          +  dateformat.i18n = require('./lang/' + l)
          +  return true;
          +}
          +
          # Ruby code with syntax highlighting
          +GitHubPages::Dependencies.gems.each do |gem, version|
          +  s.add_dependency(gem, "= #{version}")
          +end
          +

          Header 4

          +
            +
          • This is an unordered list following a header.
          • +
          • This is an unordered list following a header.
          • +
          • This is an unordered list following a header.
          • +
          +
          Header 5
          +
            +
          1. This is an ordered list following a header.
          2. +
          3. This is an ordered list following a header.
          4. +
          5. This is an ordered list following a header.
          6. +
          +
          Header 6
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          head1head twothree
          okgood swedish fishnice
          out of stockgood and plentynice
          okgood oreoshmm
          okgood zoute dropyumm
          +

          There's a horizontal rule below this.

          +
          +

          Here is an unordered list:

          +
            +
          • Item foo
          • +
          • Item bar
          • +
          • Item baz
          • +
          • Item zip
          • +
          +

          And an ordered list:

          +
            +
          1. Item one
          2. +
          3. Item two
          4. +
          5. Item three
          6. +
          7. Item four
          8. +
          +

          And a nested list:

          +
            +
          • level 1 item +
              +
            • level 2 item
            • +
            • level 2 item +
                +
              • level 3 item
              • +
              • level 3 item
              • +
            • +
          • +
          • level 1 item +
              +
            • level 2 item
            • +
            • level 2 item
            • +
            • level 2 item
            • +
          • +
          • level 1 item +
              +
            • level 2 item
            • +
            • level 2 item
            • +
          • +
          • level 1 item
          • +
          +

          Small image

          +

          Octocat

          +

          Large image

          +

          Branching

          +

          Definition lists can be used with HTML syntax.

          +
          +
          Name
          +
          Godzilla
          +
          Born
          +
          1952
          +
          Birthplace
          +
          Japan
          +
          Color
          +
          Green
          +
          + +
          Long, single-line code blocks should not wrap. They should horizontally scroll if they are too long. This line should be long enough to demonstrate this.
          +
          +
          The final element.
          +
          diff --git a/docs/md-to-htm.lua b/docs/md-to-htm.lua index dbaa04e..cf11419 100644 --- a/docs/md-to-htm.lua +++ b/docs/md-to-htm.lua @@ -1,4 +1,4 @@ -# md-to-htm.lua +-- md-to-htm.lua -- Adapted from answer by JW https://stackoverflow.com/users/4321/jw -- at https://stackoverflow.com/questions/40993488 function Link(el) diff --git a/docs/md-to-htm.sh b/docs/md-to-htm.sh new file mode 100644 index 0000000..40809cb --- /dev/null +++ b/docs/md-to-htm.sh @@ -0,0 +1,10 @@ + +# pandoc -f gfm -t html --lua-filter=md-to-htm.lua -o %1.htm %1.md + +ls *.md | while read FILE +do + # /%md - Match pattern at end of expansion + # /htm - Replace match with "htm" + #echo "${FILE/%md/htm}" "${FILE}" + pandoc -f gfm -t html --lua-filter=md-to-htm.lua -o "${FILE/%md/htm}" "${FILE}" +done diff --git a/docs/utPLSQL-V2-Comparison.htm b/docs/utPLSQL-V2-Comparison.htm index eea1d07..f585630 100644 --- a/docs/utPLSQL-V2-Comparison.htm +++ b/docs/utPLSQL-V2-Comparison.htm @@ -3,9 +3,9 @@

          utPLSQL V2 Comparison


          This comparison assumes a familiarity with utPLSQL V1/V2. The differences between wtPLSQL and utPLSQL V2 will be the focus.

          Test Transience

          -

          utPLSQL V2 included a focus on test transience by requiring "setup" and "tear down" procedures in a test package. wtPLSQL has no requirement. wtPLSQL also does not prevent any setup or tear down procedures from a test runner package.

          +

          utPLSQL V2 included a focus on test transience by requiring "setup" and "tear down" procedures in a test package. wtPLSQL has no requirement. wtPLSQL also does not prevent any setup or tear down procedures from a test runner package.

          Non-Sequenced Testing

          -

          utPLSQL V2 did not include any specific order of test procedures in a test package. By default, wtPLSQL orders the test procedures because these test procedures will be listed in sequence in the test runner package. (Everything in the test runner package must be called by the "WTPLSQL_RUN" procedure.)

          +

          utPLSQL V2 did not include any specific order of test procedures in a test package. By default, wtPLSQL orders the test procedures because these test procedures will be listed in sequence in the test runner package. (Everything in the test runner package must be called by the "WTPLSQL_RUN" procedure.)

          UTL_FILE Setup

          Much of the utPLSQL V2 functionality was centered on the UTL_FILE package. UTL_FILE was used to

            @@ -16,31 +16,85 @@

            UTL_FILE Setup

          The configuration of UTL_FILE was one of the difficult parts of installing utPLSQL V2. Removing UTL_FILE from wtPLSQL core allows for a much simpler installation. Also, much of the functionality performed by UTL_FILE can be done easier with modern reporting and development tools. Comparing Files

          Record Comparison

          -

          In utPLSQL V2, the "utRecEq" package is used to to generate functions to compare record types. This package has not been included in the wtPSQL core to avoid problems. Generating the functions needed to make the comparison require special database permissions. Separating this package into a separate installation allows these special database permissions to be addressed directly.

          +

          In utPLSQL V2, the "utRecEq" package is used to to generate functions to compare record types. To avoid problems, this functionality has not been included in the wtPSQL core. Generating the functions needed to make the comparison require special database permissions. Separating this package into a separate add-on allows these special database permissions to be addressed only if needed.

          Test Procedure Prefixes

          -

          From the utPLSQL V2 documentation: "The unit test prefix is very important in utPLSQL; the utility uses the prefix to associate source code to be tested with the test package. The prefix also allows utPLSQL to automatically identify the programs within a test package that are to be executed as unit tests." In wtPLSQL, these prefixes are not required. The lack of these prefixes greatly simplifies the setup of test runners. However, the prefixes can be used with wtPLSQL by building them into test runner packages.

          +

          From the utPLSQL V2 documentation: "The unit test prefix is very important in utPLSQL; the utility uses the prefix to associate source code to be tested with the test package. The prefix also allows utPLSQL to automatically identify the programs within a test package that are to be executed as unit tests."

          +

          In wtPLSQL, these prefixes are not required. The lack of these prefixes greatly simplifies the setup of test runners. However, the prefixes can be used with wtPLSQL by building them into test runner packages.

          utPLSQL Trace

          -

          utPLSQL V2 has a trace facility that could be turned on and off. Because the test runner in wtPLSQL is in control of testing and because the test runner is user written, any desired tracing can be added to the test runner as needed. Additionally, the simplicity of wtPLSQL execution eliminates the need for tracing.

          +

          utPLSQL V2 has a trace facility that can be turned on and off. Because the test runner in wtPLSQL is in control of testing and because the test runner is user written, any desired tracing can be added to the test runner.

          utConfig

          The utConfig package is no longer used in wtPLSQL. There are 29 settings in the utConfig package in utPLSQL V2. The only remaining settings are in the following packages.

          -
            -
          • WT_ASSERT Settings -
              -
            • g_testcase - Name of the current test case
            • -
            • set_NLS_DATE_FORMAT - Default format for date data type
            • -
            • set_NLS_TIMESTAMP_FORMAT - Default format for timestamp data type
            • -
            • set_NLS_TIMESTAMP_TZ_FORMAT - Default format for timestamp with time zone data type
            • -
          • -
          • WT_TEXT_REPORT Settings -
              -
            • g_single_line_output - Remove/replace new line characters in test result output.
            • -
            • g_date_format - Default format for date data type
            • -
          • -
          + + + + + + + + + + + + + + + + + + + + + + + + + +
          WT_ASSERT SettingDescription
          g_testcaseName of the current test case
          set_NLS_DATE_FORMATDefault format for date data type
          set_NLS_TIMESTAMP_FORMATDefault format for timestamp data type
          set_NLS_TIMESTAMP_TZ_FORMATDefault format for timestamp with time zone data type
          +
          + + + + + + + + + + + + + + + + + + +
          WT_CORE_REPORT SettingDescription
          g_single_line_outputRemove/replace new line characters in test result output
          g_date_formatDefault format for date data type
          +
          + + + + + + + + + + + + + + + + + + +
          WT_PERSIST_REPORT SettingDescription
          g_single_line_outputRemove/replace new line characters in test result output
          g_date_formatDefault format for date data type

          utOutput

          -

          utOutput in utPLSQL V2 has been replaced by WT_TEXT_REPORT in wtPLSQL. Unlike utOutput, WT_TEXT_REPORT is not called automatically, if assertions are executed as part of a test runner package. Alternatively, WT_TEST_RPEORT is used to automatically produce output for as-hoc assertions that are executed outside of a test runner package.

          +

          utOutput in utPLSQL V2 has been replaced by WT_CORE_REPORT and WT_PERSIST_REPORT in wtPLSQL. Like utPLSQL V2, wtPLSQL Core calls WT_CORE_REPORT (using a hook) after each Test Runner is complete. Unlike utPLSQL V2, neither WT_CORE_REPORT or WT_PERSIST_REPORT are called automatically after the Persist add-on is installed. However, the WT_CORE_REPORT hook can be recreated to restore this functionality.

          +

          WT_TEXT_REPORT is used to format the results of an ad-hoc assertion that is not part of a Test Runner call tree (call graph). The results of ad-hoc assertions are always sent to DBMS_OUTPUT.

          Custom Reporter

          -

          There is no custom reporter. The definition of the wtPLSQL tables is defined so reporting tools can be used to create custom reports.

          +

          wtPLSQL has no custom reporter. An alternative to the WT_CORE_REPORTer or the WT_PERSIST_REPORTer is a user written PL/SQL program. If the Persist add-on is installed, all test results are available in database tables. Reporting tools can be used to create custom reports from database tables.

          • utPLSQL V2.3.1 Website
          • diff --git a/docs/utPLSQL-V2-Comparison.md b/docs/utPLSQL-V2-Comparison.md index 2f368e7..1a3653f 100644 --- a/docs/utPLSQL-V2-Comparison.md +++ b/docs/utPLSQL-V2-Comparison.md @@ -21,30 +21,47 @@ Much of the utPLSQL V2 functionality was centered on the UTL_FILE package. UTL_F The configuration of UTL_FILE was one of the difficult parts of installing utPLSQL V2. Removing UTL_FILE from wtPLSQL core allows for a much simpler installation. Also, much of the functionality performed by UTL_FILE can be done easier with modern reporting and development tools. Comparing Files ### Record Comparison -In utPLSQL V2, the "utRecEq" package is used to to generate functions to compare record types. This package has not been included in the wtPSQL core to avoid problems. Generating the functions needed to make the comparison require special database permissions. Separating this package into a separate installation allows these special database permissions to be addressed directly. +In utPLSQL V2, the "utRecEq" package is used to to generate functions to compare record types. To avoid problems, this functionality has not been included in the wtPSQL core. Generating the functions needed to make the comparison require special database permissions. Separating this package into a separate add-on allows these special database permissions to be addressed only if needed. ### Test Procedure Prefixes -From the utPLSQL V2 documentation: "The unit test prefix is very important in utPLSQL; the utility uses the prefix to associate source code to be tested with the test package. The prefix also allows utPLSQL to automatically identify the programs within a test package that are to be executed as unit tests." In wtPLSQL, these prefixes are not required. The lack of these prefixes greatly simplifies the setup of test runners. However, the prefixes can be used with wtPLSQL by building them into test runner packages. +From the utPLSQL V2 documentation: "The unit test prefix is very important in utPLSQL; the utility uses the prefix to associate source code to be tested with the test package. The prefix also allows utPLSQL to automatically identify the programs within a test package that are to be executed as unit tests." + +In wtPLSQL, these prefixes are not required. The lack of these prefixes greatly simplifies the setup of test runners. However, the prefixes can be used with wtPLSQL by building them into test runner packages. ### utPLSQL Trace -utPLSQL V2 has a trace facility that could be turned on and off. Because the test runner in wtPLSQL is in control of testing and because the test runner is user written, any desired tracing can be added to the test runner as needed. Additionally, the simplicity of wtPLSQL execution eliminates the need for tracing. +utPLSQL V2 has a trace facility that can be turned on and off. Because the test runner in wtPLSQL is in control of testing and because the test runner is user written, any desired tracing can be added to the test runner. ### utConfig The utConfig package is no longer used in wtPLSQL. There are 29 settings in the utConfig package in utPLSQL V2. The only remaining settings are in the following packages. -* WT_ASSERT Settings - * g_testcase - Name of the current test case - * set_NLS_DATE_FORMAT - Default format for date data type - * set_NLS_TIMESTAMP_FORMAT - Default format for timestamp data type - * set_NLS_TIMESTAMP_TZ_FORMAT - Default format for timestamp with time zone data type -* WT_TEXT_REPORT Settings - * g_single_line_output - Remove/replace new line characters in test result output. - * g_date_format - Default format for date data type + +WT_ASSERT Setting | Description +----------------------------|------------ +g_testcase | Name of the current test case +set_NLS_DATE_FORMAT | Default format for date data type +set_NLS_TIMESTAMP_FORMAT | Default format for timestamp data type +set_NLS_TIMESTAMP_TZ_FORMAT | Default format for timestamp with time zone data type + +
            + +WT_CORE_REPORT Setting | Description +-----------------------|------------ +g_single_line_output | Remove/replace new line characters in test result output +g_date_format | Default format for date data type + +
            + +WT_PERSIST_REPORT Setting | Description +--------------------------|------------ +g_single_line_output | Remove/replace new line characters in test result output +g_date_format | Default format for date data type ### utOutput -utOutput in utPLSQL V2 has been replaced by WT_TEXT_REPORT in wtPLSQL. Unlike utOutput, WT_TEXT_REPORT is not called automatically, if assertions are executed as part of a test runner package. Alternatively, WT_TEST_RPEORT is used to automatically produce output for as-hoc assertions that are executed outside of a test runner package. +utOutput in utPLSQL V2 has been replaced by WT_CORE_REPORT and WT_PERSIST_REPORT in wtPLSQL. Like utPLSQL V2, wtPLSQL Core calls WT_CORE_REPORT (using a hook) after each Test Runner is complete. Unlike utPLSQL V2, neither WT_CORE_REPORT or WT_PERSIST_REPORT are called automatically after the Persist add-on is installed. However, the WT_CORE_REPORT hook can be recreated to restore this functionality. + +WT_TEXT_REPORT is used to format the results of an ad-hoc assertion that is not part of a Test Runner call tree (call graph). The results of ad-hoc assertions are always sent to DBMS_OUTPUT. ### Custom Reporter -There is no custom reporter. The definition of the wtPLSQL tables is defined so reporting tools can be used to create custom reports. +wtPLSQL has no custom reporter. An alternative to the WT_CORE_REPORTer or the WT_PERSIST_REPORTer is a user written PL/SQL program. If the Persist add-on is installed, all test results are available in database tables. Reporting tools can be used to create custom reports from database tables. ### Links * [utPLSQL V2.3.1 Website](https://utplsql.org/moving/2016/07/07/version-2-3-1-released.html) diff --git a/docs/utPLSQL-V3-Comparison.htm b/docs/utPLSQL-V3-Comparison.htm index 5380208..8451f23 100644 --- a/docs/utPLSQL-V3-Comparison.htm +++ b/docs/utPLSQL-V3-Comparison.htm @@ -1,26 +1,18 @@

            Website Home Page

            utPLSQL V3 Comparison


            -

            Under Construction

            -

            Abbreviations:

            -
              -
            • "ut3" - utPLSQL V3
            • -
            • "wt" - wtPLSQL
            • -
            -

            The Basics

            -

            "ut3" is a comprehensive project. Its capabilities are a large and diverse. It is supported by many people around the world. If your development environment includes a wide variety of platforms and technologies, this is the best project for you.

            -

            "wt" is an Oracle database focused project. It is built entirely with PL/SQL and Application Express. All testing and reporting is done in the database.

            -

            Goals

            -

            The "ut3" project "follows industry standards and best patterns of modern Unit Testing frameworks like JUnit and RSpec".

            -

            The "wt" project avoids "unit testing" by adopting practices for "white box testing".

            -

            Customization

            -

            The "ut3" project incorporates a wide variety of technologies and platforms. It also has a large and diverse set of capabilities that will reduce the need for customization.

            -

            The "wt" project is centered on one platform with a very simple implementation. It is easier to customize smaller, simpler systems.

            +

            utPLSQL V3 is an excellent choice for unit testing. It is well supported and includes extensive functionality. wtPLSQL has a different focus than utPLSQL V3.

            +

            utPLSQL V3

            +

            utPLSQL V3 is a comprehensive project. Its capabilities are large and diverse. It incorporates a wide variety of technologies and platforms. It also has a large and diverse set of capabilities that will reduce the need for customization. It is supported by many people around the world.

            +

            If your development environment includes a wide variety of platforms and technologies, you should consider using utPLSQL V3.

            +

            wtPLSQL

            +

            wtPLSQL is Oracle database focused. It is built entirely with PL/SQL and Application Express. All testing and reporting is done in the database. Because it is centered on the Oracle database, it is a very simple implementation. With hooks and add-ons, it easy to customize.

            +

            If your development environment is heavily invested in PL/SQL and the Oracle database, wtPLSQL is built for you.

            Testing Methodologies

            There is a longer discussion about unit testing methodologies in the About wtPSQL Page.

            Fundamentally, the Oracle database is a relational database. The relational database is based on transaction processing. Data is stored and shared in a precise manner between processes.

            JUnit testing is OO (Object Oriented programming) based. Encapsulation is a core part of OO. Data sharing is done through APIs (Application Programmatic Interfaces), i.e. no fundamental data persistence.

            -

            The principle of "store and share" is the opposite of data encapsulation. As a result, OO testing approaches are inappropriate for relational databases.

            +

            The principle of "store and share" is the opposite of data encapsulation. As a result, OO testing approaches are inappropriate for relational databases.

            Here are several differences in testing methodologies between relational databases and Object Oriented.

            Testing Persistence of Data

              @@ -29,7 +21,7 @@

              Testing Persistence of Data

            Isolation of Tests

              -
            • Object Oriented - Use fakes or mocks to avoid any "integration" testing.
            • +
            • Object Oriented - Use fakes or mocks to avoid any "integration" testing.
            • Relational Database - Isolating PL/SQL code from database CRUD (Create, Retrieve, Update, Delete) defeats the purpose of most PL/SQL testing.

            Test Transience

            @@ -43,9 +35,8 @@

            Non-Sequenced Testing

          • Relational Database - Testing with integrity constraints on complex persisted data and/or complex data operations can be simpler with test sequencing.

          Test Driven Development (TDD/RSpec)

          -

          In the fast-paced development cycle, defining how the software accomplishes the needs of the business is the typical focus. This is also called "happy path" functionality. Conversely, error handling and error recovery (sad path) requirements typically don't accomplish business needs. That is to say, sad path testing focuses on things going badly, not on things going well. Unfortunately, efforts to develop and define sad path requirements are typically avoided.

          -

          TDD places no value on 100% code coverage. TDD typically avoids testing sad path testing during development.

          -

          White box testing is centered on 100% code coverage. "Happy path" and "sad path" testing are typically required to achieve 100% code coverage.

          +

          In the fast-paced development cycle, defining how the software accomplishes the needs of the business is the typical focus. This is also called "happy path" functionality. Conversely, error handling and error recovery (sad path) requirements typically don't accomplish business needs. That is to say, sad path testing focuses on things going badly, not on things going well. Unfortunately, efforts to develop and define sad path requirements are typically avoided.

          +

          White box testing is centered on 100% code coverage. "Happy path" and "sad path" testing are typically required to achieve 100% code coverage.

          Here is more discussion on Test Driven Development

            diff --git a/docs/utPLSQL-V3-Comparison.md b/docs/utPLSQL-V3-Comparison.md index f637d2f..fc5043a 100644 --- a/docs/utPLSQL-V3-Comparison.md +++ b/docs/utPLSQL-V3-Comparison.md @@ -3,26 +3,20 @@ # utPLSQL V3 Comparison --- -Under Construction -Abbreviations: -* "ut3" - utPLSQL V3 -* "wt" - wtPLSQL +utPLSQL V3 is an excellent choice for unit testing. It is well supported and includes extensive functionality. wtPLSQL has a different focus than utPLSQL V3. -## The Basics -"ut3" is a comprehensive project. Its capabilities are a large and diverse. It is supported by many people around the world. If your development environment includes a wide variety of platforms and technologies, this is the best project for you. +## utPLSQL V3 -"wt" is an Oracle database focused project. It is built entirely with PL/SQL and Application Express. All testing and reporting is done in the database. +utPLSQL V3 is a comprehensive project. Its capabilities are large and diverse. It incorporates a wide variety of technologies and platforms. It also has a large and diverse set of capabilities that will reduce the need for customization. It is supported by many people around the world. -## Goals -The "ut3" project ["follows industry standards and best patterns of modern Unit Testing frameworks like JUnit and RSpec"](https://github.com/utPLSQL/utPLSQL). +If your development environment includes a wide variety of platforms and technologies, you should consider using utPLSQL V3. -The "wt" project avoids "unit testing" by adopting practices for ["white box testing"](https://github.com/DDieterich/wtPLSQL/wiki/About-wtPLSQL#white-box-testing). +## wtPLSQL -## Customization -The "ut3" project incorporates a wide variety of technologies and platforms. It also has a large and diverse set of capabilities that will reduce the need for customization. +wtPLSQL is Oracle database focused. It is built entirely with PL/SQL and Application Express. All testing and reporting is done in the database. Because it is centered on the Oracle database, it is a very simple implementation. With hooks and add-ons, it easy to customize. -The "wt" project is centered on one platform with a very simple implementation. It is easier to customize smaller, simpler systems. +If your development environment is heavily invested in PL/SQL and the Oracle database, wtPLSQL is built for you. ## Testing Methodologies There is a longer discussion about unit testing methodologies in the [About wtPSQL Page](https://github.com/DDieterich/wtPLSQL/wiki/About-wtPLSQL#unit-testing). diff --git a/grbsrc/ODBCAPTURE/AQ_SYSTEM_PRIVS_VW.vw b/grbsrc/ODBCAPTURE/AQ_SYSTEM_PRIVS_VW.vw new file mode 100644 index 0000000..39113ef --- /dev/null +++ b/grbsrc/ODBCAPTURE/AQ_SYSTEM_PRIVS_VW.vw @@ -0,0 +1,51 @@ + +-- +-- Create ODBCAPTURE.AQ_SYSTEM_PRIVS_VW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."AQ_SYSTEM_PRIVS_VW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.AQ_SYSTEM_PRIVS_VW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."AQ_SYSTEM_PRIVS_VW" ("GRANTEE", "PRIVILEGE", "DBMS_AQ_PRIV", "ADMIN_OPTION", "COMMON", "INHERITED") AS + select grantee + ,privilege + ,case privilege + when 'ENQUEUE ANY QUEUE' then 'ENQUEUE_ANY' + when 'DEQUEUE ANY QUEUE' then 'DEQUEUE_ANY' + when 'MANAGE ANY QUEUE' then 'MANAGE_ANY' + else 'ERROR: Unknown Privilege ' || privilege + end DBMS_AQ_PRIV + ,admin_option + ,common + ,inherited + from dba_sys_privs + where privilege like '% ANY QUEUE'; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.AQ_SYSTEM_PRIVS_VW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/COMMON_UTIL.pbody b/grbsrc/ODBCAPTURE/COMMON_UTIL.pbody new file mode 100644 index 0000000..26376df --- /dev/null +++ b/grbsrc/ODBCAPTURE/COMMON_UTIL.pbody @@ -0,0 +1,359 @@ + +-- +-- Create ODBCAPTURE.COMMON_UTIL Package Body +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.COMMON_UTIL + + CREATE OR REPLACE EDITIONABLE PACKAGE BODY "ODBCAPTURE"."COMMON_UTIL" +as + +------------------------------------------------------------ +-- Set DBMS_METADATA Transformation Parameters +procedure dbms_metadata_settings +is +begin + -- http://docs.oracle.com/database/121/ARPLS/d_metada.htm#ARPLS66910 + dbms_metadata.set_transform_param(dbms_metadata.session_transform,'TABLESPACE' ,false); + dbms_metadata.set_transform_param(dbms_metadata.session_transform,'STORAGE' ,false); + dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SEGMENT_ATTRIBUTES' ,false); + dbms_metadata.set_transform_param(dbms_metadata.session_transform,'PARTITIONING' ,false); + dbms_metadata.set_transform_param(dbms_metadata.session_transform,'LOB_STORAGE' ,'NO_CHANGE'); + dbms_metadata.set_transform_param(dbms_metadata.session_transform,'TABLE_COMPRESSION_CLAUSE','NONE'); + dbms_metadata.set_transform_param(dbms_metadata.session_transform,'CONSTRAINTS_AS_ALTER' ,true); + dbms_metadata.set_transform_param(dbms_metadata.session_transform,'CONSTRAINTS' ,true); + dbms_metadata.set_transform_param(dbms_metadata.session_transform,'REF_CONSTRAINTS' ,false); + dbms_metadata.set_transform_param(dbms_metadata.session_transform,'OID' ,true); + dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SIZE_BYTE_KEYWORD' ,true); + dbms_metadata.set_transform_param(dbms_metadata.session_transform,'FORCE' ,true); + dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SQLTERMINATOR' ,true); + dbms_metadata.set_transform_param(dbms_metadata.session_transform,'PRETTY' ,true); +end dbms_metadata_settings; + +------------------------------------------------------------ +-- RPAD changed to include truncate. +-- This function brings back the old functionality. +function old_rpad + (in_expr1 in varchar2 + ,in_n in number + ,in_expr2 in varchar2 default null) + return varchar2 +is +begin + if in_expr1 is null or length(in_expr1) >= in_n + then + return in_expr1; + end if; + return rpad(in_expr1, in_n, nvl(in_expr2,' ')); +end old_rpad; + +------------------------------------------------------------ +-- Return RECYCLE_BIN_NAME_MATCH for SQL Queries +function get_RECYCLE_BIN_NAME_MATCH + return varchar2 +is +begin + return RECYCLE_BIN_NAME_MATCH; +end get_RECYCLE_BIN_NAME_MATCH; + +------------------------------------------------------------ +-- Return a string that will split the metadata at the comma +-- in case the string is longer than MAX_SQL_LEN +function vw_split_str + (in_str IN CLOB) + return CLOB +is + olen number; -- Original Length of IN_STR + ptr number; -- Current Position in IN_STR + out_str CLOB; -- Output String + oset number; -- Line Cut-off at the comma closer to the "in_max_len" +begin + olen := length(in_str); + ptr := 1; + out_str := ''; + while olen - ptr + 1 > common_util.MAX_SQL_LEN + loop + oset := instr(substr(in_str, ptr, common_util.MAX_SQL_LEN), LF, -1); + if oset <= 0 + then + oset := instr(substr(in_str, ptr, common_util.MAX_SQL_LEN), ',', -1); + if oset <= 0 + then + raise_application_error(-20000 + ,substr('Unable to find "," in string: ' || + substr(in_str, ptr, common_util.MAX_SQL_LEN) + ,1,4000 ) ); + end if; + out_str := out_str || substr(substr(in_str, ptr, common_util.MAX_SQL_LEN), 1, oset) || LF; + else + out_str := out_str || substr(substr(in_str, ptr, common_util.MAX_SQL_LEN), 1, oset); + end if; + ptr := ptr + oset; + end loop; + return(out_str || substr(in_str, ptr, common_util.MAX_SQL_LEN)); +end vw_split_str; + +------------------------------------------------------------ +-- Return a string with the "@" and "^P" characters escaped +-- Must escape "@". Otherwise, SQL*Plus will attempt to run a script +-- CHR(16) is also called "^P", Control-P, and DLE +function escape_at_sign + (in_str IN CLOB) + return CLOB +is +begin + -- Must Escape the "^P" before escaping the other characters + RETURN REGEXP_replace + (in_str + , '('||LF||'[[:space:]]*)@' + ,'\1'||CHR(16)||'@' ); +end escape_at_sign; + +------------------------------------------------------------ +-- External function for CLOB Replacements +-- +-- ORA-03001 from SUBSTR on output from getclobval from a binary XML (Doc ID 2016996.1) +-- The LOB returned by getClobVal() is an abstract CSX LOB +-- +function clob_replace + (in_clob in clob + ,in_search_string in varchar2 + ,in_replacement_string in varchar2) + return clob +is + l_clob clob; +begin + -- This avoids a ORA-22275 "invalid LOB locator specified" + if nvl(DBMS_LOB.GETLENGTH(in_clob),0) <= 0 + then + return l_clob; + end if; + DBMS_LOB.CREATETEMPORARY(lob_loc => l_clob + ,cache => TRUE + ,dur => DBMS_LOB.CALL); + DBMS_LOB.COPY (dest_lob => l_clob + ,src_lob => in_clob + ,amount => 2147483647 -- 2Gb - 1 + ,dest_offset => 1 + ,src_offset => 1); + return replace(l_clob, in_search_string, in_replacement_string); +end clob_replace; + +------------------------------------------------------------ +-- External function for SQL Queries +-- +-- Function to get the object name filter result +-- +function get_object_filter_result + (in_fltr_str in varchar2 + ,in_object_name in varchar2) + return varchar2 +is + l_bool boolean; + fltr_str varchar2(32000):=null; +begin + fltr_str :=in_fltr_str; + if substr(fltr_str,1,2) = '\!' + then + -- Set the "NOT" and remove the "\!" + fltr_str := 'begin :1 := not regexp_like(:2, ''' || substr(fltr_str,3) || '''); end;'; + else + -- Use the fltr_str without changes + fltr_str := 'begin :1 := regexp_like(:2, ''' || fltr_str || '''); end;'; + end if; + -- Test the filter, Don't care about the default user + begin + execute immediate fltr_str using out l_bool, in in_object_name; + exception when others then + raise_application_error(-20000, 'Unable to process the following statement:' || CHR(10) || + fltr_str || CHR(10) || + 'in_object_name: ' || in_object_name || CHR(10) || + SQLERRM); + end; + if l_bool + then + -- Test result is approved! + return 'Y'; + end if; + -- Test result is not approved! + return 'N'; +end get_object_filter_result; + +------------------------------------------------------------ +-- Check potential filenames for invalid Windows characters +-- +--http://stackoverflow.com/questions/1976007/what-characters-are-forbidden-in-windows-and-linux-directory-names +-- < (less than) +-- > (greater than) +-- : (colon) +-- " (double quote) +-- / (forward slash) +-- \ (backslash) +-- | (vertical bar or pipe) +-- ? (question mark) +-- * (asterisk) +-- +procedure check_filenames + (in_install_type in varchar2) +is +begin + for buff in ( + select obj.object_owner || '.' || obj.object_name || '(' || obj.object_type || ')' oname + from dba_objects_tab obj + join otype_conf otl + on otl.name_check_otype = obj.object_type + where ( obj.object_type != 'TYPE' + or obj.object_name not like SYS_TYPE_SPEC_BODY_MATCH escape '\') + and regexp_like (obj.object_name, '[<>:"/\|?*]') + and obj.object_name not like RECYCLE_BIN_NAME_MATCH escape '\' + order by obj.object_owner, obj.object_name, obj.object_type) + loop + raise_application_error (-20000, + 'Found Forbidden Windows Filename Character in ' || buff.oname); + end loop; + -- Several Object Types have Sub-Object Types. + -- Also this is not necessary for Linux. It is only a problem for Windows + for buff in ( + select obj.object_owner + ,upper(obj.object_name) object_name + ,obj.object_type + ,count(*) num_names + from dba_objects_tab obj + where obj.object_owner_install_type = in_install_type + and obj.object_type in (select otl.name_check_otype from otype_conf otl) + and ( obj.object_type != 'TYPE' + or obj.object_name not like SYS_TYPE_SPEC_BODY_MATCH escape '\') + and obj.object_name not like RECYCLE_BIN_NAME_MATCH escape '\' + group by obj.object_owner, upper(obj.object_name), obj.object_type + having count(*) > 1 + order by obj.object_owner, upper(obj.object_name), obj.object_type) + loop + raise_application_error (-20000, + 'Schema ' || buff.object_owner || ' has ' || + buff.num_names || ' ' || + buff.object_type || 's with a name like ' || + buff.object_name ); + end loop; +end check_filenames; + +------------------------------------------- +-- (Public) Refresh Original Data Tables +------------------------------------------- +procedure refresh_data_tables +is + procedure do_it (in_text varchar2) is + dbi_beg_secs number := dbms_utility.get_time; + begin + execute immediate in_text; + dbms_output.put_line('SUCCESS(' || to_char(SQL%ROWCOUNT,'B9999') || + ' rows in ' || substr(to_char((dbms_utility.get_time - + dbi_beg_secs + )/100 + ,'B99.9') + ,2 -- Remove Leading space (sign is not needed) + ,100) || + ' sec): ' || in_text ); + exception when others then + raise_application_error (-20000, SQLERRM || CHR(10) || + 'FAILED: ' || in_text); + end do_it; + procedure update_install_type_timing is + dbi_beg_secs number := dbms_utility.get_time; + num_rows pls_integer := 0; + begin + for buff in (select install_type from type_conf) + loop + insert into install_type_timing (from_install_type, install_timing, to_install_type) + with qcur as ( + select buff.install_type INSTALL_GROUP + ,'CURRENT' HIERARCHY_DIRECTION + ,tc.install_type + from type_conf tc + connect by nocycle prior tc.install_type_parent = tc.install_type + start with tc.install_type = buff.install_type + ), qfut as ( + select buff.install_type INSTALL_GROUP + ,'FUTURE' HIERARCHY_DIRECTION + ,tc.install_type + from type_conf tc + connect by nocycle tc.install_type_parent = prior tc.install_type + start with tc.install_type = buff.install_type + ) + select install_group, hierarchy_direction, install_type from qcur + UNION + select install_group, hierarchy_direction, install_type from qfut + where install_type != buff.install_type + UNION + select buff.install_type INSTALL_GROUP + ,'CURRENT' HIERARCHY_DIRECTION + ,'sys' INSTALL_TYPE + from dual; + num_rows := num_rows + SQL%ROWCOUNT; + end loop; + dbms_output.put_line('SUCCESS(' || to_char(num_rows,'B9999') || + ' rows in ' || substr(to_char((dbms_utility.get_time - + dbi_beg_secs + )/100 + ,'B99.9') + ,2 -- Remove Leading space (sign is not needed) + ,100) || + ' sec): update_install_type_timing'); + exception when others then + raise_application_error (-20000, 'update_install_type_timing FAILED: ' || SQLERRM); + end update_install_type_timing; +begin + dbms_output.put_line('Running ' || $$PLSQL_UNIT || '.refresh_data_tables'); + do_it('truncate table zx_priv_all_tab'); + do_it('truncate table zx_obj_install_tab'); + do_it('truncate table obj_install_comments_tab'); + do_it('truncate table obj_install_trigger_tab'); + do_it('truncate table obj_install_synonym_tab'); + do_it('truncate table obj_install_data_load_tab'); + do_it('truncate table obj_install_index_tab'); + do_it('truncate table obj_install_fkey_tab'); + do_it('truncate table obj_install_context_tab'); + do_it('truncate table obj_install_object_tab'); + do_it('truncate table dba_dependencies_tab'); + do_it('truncate table dba_tab_privs_tab'); + do_it('truncate table dba_objects_tab'); + do_it('truncate table install_type_timing'); + do_it('purge dba_recyclebin'); + update_install_type_timing; + do_it('insert into dba_objects_tab select * from dba_objects_view'); + do_it('insert into dba_tab_privs_tab select * from dba_tab_privs_view'); + do_it('insert into dba_dependencies_tab select * from dba_dependencies_view'); + do_it('insert into obj_install_object_tab select * from obj_install_object_view'); + do_it('insert into obj_install_context_tab select * from obj_install_context_view'); + do_it('insert into obj_install_fkey_tab select * from obj_install_fkey_view'); + do_it('insert into obj_install_index_tab select * from obj_install_index_view'); + do_it('insert into obj_install_data_load_tab select * from obj_install_data_load_view'); + do_it('insert into obj_install_synonym_tab select * from obj_install_synonym_view'); + do_it('insert into obj_install_trigger_tab select * from obj_install_trigger_view'); + do_it('insert into obj_install_comments_tab select * from obj_install_comments_view'); + do_it('insert into zx_obj_install_tab select * from zx_obj_install_view'); + do_it('insert into zx_priv_all_tab select * from zx_priv_all_view'); + commit; + do_it('begin sys.dbms_stats.gather_table_stats(ownname => ''ODBCAPTURE'', tabname => ''DBA_OBJECTS_TAB'', cascade => TRUE); end;'); + do_it('begin sys.dbms_stats.gather_table_stats(ownname => ''ODBCAPTURE'', tabname => ''DBA_TAB_PRIVS_TAB'', cascade => TRUE); end;'); + do_it('begin sys.dbms_stats.gather_table_stats(ownname => ''ODBCAPTURE'', tabname => ''DBA_DEPENDENCIES_TAB'', cascade => TRUE); end;'); + do_it('begin sys.dbms_stats.gather_table_stats(ownname => ''ODBCAPTURE'', tabname => ''OBJ_INSTALL_OBJECT_TAB'', cascade => TRUE); end;'); + do_it('begin sys.dbms_stats.gather_table_stats(ownname => ''ODBCAPTURE'', tabname => ''OBJ_INSTALL_CONTEXT_TAB'', cascade => TRUE); end;'); + do_it('begin sys.dbms_stats.gather_table_stats(ownname => ''ODBCAPTURE'', tabname => ''OBJ_INSTALL_FKEY_TAB'', cascade => TRUE); end;'); + do_it('begin sys.dbms_stats.gather_table_stats(ownname => ''ODBCAPTURE'', tabname => ''OBJ_INSTALL_INDEX_TAB'', cascade => TRUE); end;'); + do_it('begin sys.dbms_stats.gather_table_stats(ownname => ''ODBCAPTURE'', tabname => ''OBJ_INSTALL_DATA_LOAD_TAB'', cascade => TRUE); end;'); + do_it('begin sys.dbms_stats.gather_table_stats(ownname => ''ODBCAPTURE'', tabname => ''OBJ_INSTALL_SYNONYM_TAB'', cascade => TRUE); end;'); + do_it('begin sys.dbms_stats.gather_table_stats(ownname => ''ODBCAPTURE'', tabname => ''OBJ_INSTALL_TRIGGER_TAB'', cascade => TRUE); end;'); + do_it('begin sys.dbms_stats.gather_table_stats(ownname => ''ODBCAPTURE'', tabname => ''OBJ_INSTALL_COMMENTS_TAB'', cascade => TRUE); end;'); + do_it('begin sys.dbms_stats.gather_table_stats(ownname => ''ODBCAPTURE'', tabname => ''ZX_OBJ_INSTALL_TAB'', cascade => TRUE); end;'); + do_it('begin sys.dbms_stats.gather_table_stats(ownname => ''ODBCAPTURE'', tabname => ''ZX_PRIV_ALL_TAB'', cascade => TRUE); end;'); + commit; +end refresh_data_tables; + + +end common_util; +/ + +set define on diff --git a/grbsrc/ODBCAPTURE/COMMON_UTIL.pspec b/grbsrc/ODBCAPTURE/COMMON_UTIL.pspec new file mode 100644 index 0000000..7ce87b7 --- /dev/null +++ b/grbsrc/ODBCAPTURE/COMMON_UTIL.pspec @@ -0,0 +1,98 @@ + +-- +-- Create ODBCAPTURE.COMMON_UTIL Package +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.COMMON_UTIL + + CREATE OR REPLACE EDITIONABLE PACKAGE "ODBCAPTURE"."COMMON_UTIL" AUTHID DEFINER +as + + -- Base64 Encoding Header + B64_ENCODE_HEADER CONSTANT varchar2(30) := '(Base64 with Linefeeds)'; + -- Maximum Line Length for SQL*Plus + MAX_SQL_LEN CONSTANT integer := 2499-2; -- Allow 2 EOL characters + -- Maximum Line Length for SQL*Loader Data File + MAX_LDR_LEN CONSTANT integer := 32767-2; -- Allow 2 EOL characters + -- Maximum Line Length for UNIX/Linux scripts + MAX_UNX_LEN CONSTANT integer := 32000-2; -- Allow 2 EOL characters + -- Maximum Line Length for Windows scripts + MAX_WIN_LEN CONSTANT integer := 8191-2; -- Allow 2 EOL characters + -- Part of TPS/TPB Name Filter + SYS_TYPE_SPEC_BODY_MATCH CONSTANT varchar2(10) := 'SYSTP%=='; + -- Recycle Bin Name Filter + RECYCLE_BIN_NAME_MATCH CONSTANT varchar2(10) := 'BIN$%'; + -- Materialized View Automatic Index Prefix + MVIEW_AUTO_INDEX_PREFIX CONSTANT varchar2(10) := 'I_SNAP$_'; + -- SYS_PLSQL Pipelined Type Objects: Created and granted with pipeline package/function + PIPELINE_TYPE_MATCH CONSTANT varchar2(20) := 'SYS\_PLSQL\_%'; + -- https://blogs.oracle.com/db/entry/oracle_support_master_note_for_troubleshooting_advanced_queuing_and_oracle_streams_propagation_issue + QUEUE_VIEW_TYPE_MATCH CONSTANT varchar2(20) := 'QT%\_BUFFER'; + -- Advanced Queue Table and View Name Regular Expression (Prefix and Suffix) + -- ^ - anchor to the start of the line + -- AQ[$][_]{0,1} - Matches 'AQ$' or 'AQ$_' + QUEUE_NAME_PREFIX_REGEXP CONSTANT varchar2(20) := '^AQ[$][_]{0,1}'; + -- ([_][FHIRST]){0,1} - Matches '', '_F', '_H', '_I', '_R', '_S', or '_T' + -- $ - anchor to the end of the line + QUEUE_NAME_SUFFIX_REGEXP CONSTANT varchar2(20) := '([_][A-Z]){0,1}$'; + -- Only for removal of storage clause from SQL + STORAGE_CLAUSE_MATCH CONSTANT varchar2(30) := ' storage_clause => %'; + + LF constant varchar2(1) := CHR(10); + CRTN constant varchar2(1) := CHR(13); + + c_dirname_prefix CONSTANT varchar2(100) := 'DEV_'; + c_dirname_suffix CONSTANT varchar2(100) := ''; + + c_install_prefix CONSTANT varchar2(100) := 'aaa_install_'; + c_install_suffix CONSTANT varchar2(100) := ''; + + procedure dbms_metadata_settings; + + function old_rpad + (in_expr1 in varchar2 + ,in_n in number + ,in_expr2 in varchar2 default null) + return varchar2; + + function get_RECYCLE_BIN_NAME_MATCH + return varchar2; + + function vw_split_str + (in_str IN CLOB) + return CLOB; + + function escape_at_sign + (in_str IN CLOB) + return CLOB; + + function clob_replace + (in_clob in clob + ,in_search_string in varchar2 + ,in_replacement_string in varchar2) + return clob; + + function get_object_filter_result + (in_fltr_str in varchar2 + ,in_object_name in varchar2) + return varchar2; + + procedure check_filenames + (in_install_type in varchar2); + + procedure refresh_data_tables; + +end common_util; +/ + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/DBA_DEPENDENCIES_TAB.tab b/grbsrc/ODBCAPTURE/DBA_DEPENDENCIES_TAB.tab new file mode 100644 index 0000000..e5c024e --- /dev/null +++ b/grbsrc/ODBCAPTURE/DBA_DEPENDENCIES_TAB.tab @@ -0,0 +1,39 @@ + +-- +-- Create ODBCAPTURE.DBA_DEPENDENCIES_TAB Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.DBA_DEPENDENCIES_TAB + + CREATE TABLE "ODBCAPTURE"."DBA_DEPENDENCIES_TAB" + ( "OBJECT_OWNER_INSTALL_TYPE" VARCHAR2(10 BYTE) NOT NULL ENABLE, + "OBJECT_OWNER" VARCHAR2(128 BYTE) NOT NULL ENABLE, + "OBJECT_NAME" VARCHAR2(128 BYTE) NOT NULL ENABLE, + "OBJECT_TYPE" VARCHAR2(19 BYTE), + "REFERENCED_OWNER" VARCHAR2(128 BYTE), + "REF_OWNER_INSTALL_TYPE" VARCHAR2(10 BYTE) NOT NULL ENABLE, + "REFERENCED_NAME" VARCHAR2(128 BYTE), + "REFERENCED_TYPE" VARCHAR2(19 BYTE), + "REFERENCED_LINK_NAME" VARCHAR2(128 BYTE), + "DEPENDENCY_TYPE" VARCHAR2(4 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.DBA_DEPENDENCIES_TAB + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/DBA_DEPENDENCIES_TAB.tabind b/grbsrc/ODBCAPTURE/DBA_DEPENDENCIES_TAB.tabind new file mode 100644 index 0000000..2f4820c --- /dev/null +++ b/grbsrc/ODBCAPTURE/DBA_DEPENDENCIES_TAB.tabind @@ -0,0 +1,23 @@ + +-- +-- Create Indexes for ODBCAPTURE.DBA_DEPENDENCIES_TAB TABLE +-- + +set define off + + +-- NOTE: This is a "INDEX" Index + +--DBMS_METADATA:ODBCAPTURE.DBA_DEPENDENCIES_TAB_IDX2 + + CREATE INDEX "ODBCAPTURE"."DBA_DEPENDENCIES_TAB_IDX2" ON "ODBCAPTURE"."DBA_DEPENDENCIES_TAB" ("REFERENCED_OWNER", "REFERENCED_NAME", "REFERENCED_TYPE") + ; + +-- NOTE: This is a "INDEX" Index + +--DBMS_METADATA:ODBCAPTURE.DBA_DEPENDENCIES_TAB_IX1 + + CREATE INDEX "ODBCAPTURE"."DBA_DEPENDENCIES_TAB_IX1" ON "ODBCAPTURE"."DBA_DEPENDENCIES_TAB" ("OBJECT_OWNER_INSTALL_TYPE", "OBJECT_OWNER", "OBJECT_NAME") + ; + +set define on diff --git a/grbsrc/ODBCAPTURE/DBA_DEPENDENCIES_VIEW.vw b/grbsrc/ODBCAPTURE/DBA_DEPENDENCIES_VIEW.vw new file mode 100644 index 0000000..d928451 --- /dev/null +++ b/grbsrc/ODBCAPTURE/DBA_DEPENDENCIES_VIEW.vw @@ -0,0 +1,55 @@ + +-- +-- Create ODBCAPTURE.DBA_DEPENDENCIES_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."DBA_DEPENDENCIES_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.DBA_DEPENDENCIES_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."DBA_DEPENDENCIES_VIEW" ("OBJECT_OWNER_INSTALL_TYPE", "OBJECT_OWNER", "OBJECT_NAME", "OBJECT_TYPE", "REFERENCED_OWNER", "REF_OWNER_INSTALL_TYPE", "REFERENCED_NAME", "REFERENCED_TYPE", "REFERENCED_LINK_NAME", "DEPENDENCY_TYPE") AS + select scd.install_type OBJECT_OWNER_INSTALL_TYPE + ,dep.owner OBJECT_OWNER + ,dep.name OBJECT_NAME + ,dep.type OBJECT_TYPE + ,dep.referenced_owner + ,scr.install_type REF_OWNER_INSTALL_TYPE + ,dep.referenced_name + ,dep.referenced_type + ,dep.referenced_link_name + ,dep.dependency_type + from schema_conf scd + join dba_dependencies dep + on dep.owner = scd.username + join schema_conf scr + on scr.username = dep.referenced_owner + -- Exclude 'sys' and 'pub' database objects + where scd.install_type not in ('sys','pub'); + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.DBA_DEPENDENCIES_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/DBA_OBJECTS_TAB.tab b/grbsrc/ODBCAPTURE/DBA_OBJECTS_TAB.tab new file mode 100644 index 0000000..542fc24 --- /dev/null +++ b/grbsrc/ODBCAPTURE/DBA_OBJECTS_TAB.tab @@ -0,0 +1,35 @@ + +-- +-- Create ODBCAPTURE.DBA_OBJECTS_TAB Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.DBA_OBJECTS_TAB + + CREATE TABLE "ODBCAPTURE"."DBA_OBJECTS_TAB" + ( "OBJECT_OWNER_INSTALL_TYPE" VARCHAR2(10 BYTE), + "OBJECT_OWNER" VARCHAR2(128 BYTE), + "OBJECT_NAME" VARCHAR2(128 BYTE), + "OBJECT_TYPE" VARCHAR2(23 BYTE), + "TABLE_FLAG" VARCHAR2(3 BYTE), + "SELTYPE" VARCHAR2(4 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.DBA_OBJECTS_TAB + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/DBA_OBJECTS_TAB.tabind b/grbsrc/ODBCAPTURE/DBA_OBJECTS_TAB.tabind new file mode 100644 index 0000000..1a886c7 --- /dev/null +++ b/grbsrc/ODBCAPTURE/DBA_OBJECTS_TAB.tabind @@ -0,0 +1,16 @@ + +-- +-- Create Indexes for ODBCAPTURE.DBA_OBJECTS_TAB TABLE +-- + +set define off + + +-- NOTE: This is a "INDEX" Index + +--DBMS_METADATA:ODBCAPTURE.DBA_OBJECTS_TAB_IX1 + + CREATE INDEX "ODBCAPTURE"."DBA_OBJECTS_TAB_IX1" ON "ODBCAPTURE"."DBA_OBJECTS_TAB" ("OBJECT_OWNER_INSTALL_TYPE", "OBJECT_OWNER", "OBJECT_NAME") + ; + +set define on diff --git a/grbsrc/ODBCAPTURE/DBA_OBJECTS_VIEW.vw b/grbsrc/ODBCAPTURE/DBA_OBJECTS_VIEW.vw new file mode 100644 index 0000000..14595a9 --- /dev/null +++ b/grbsrc/ODBCAPTURE/DBA_OBJECTS_VIEW.vw @@ -0,0 +1,126 @@ + +-- +-- Create ODBCAPTURE.DBA_OBJECTS_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."DBA_OBJECTS_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.DBA_OBJECTS_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."DBA_OBJECTS_VIEW" ("OBJECT_OWNER_INSTALL_TYPE", "OBJECT_OWNER", "OBJECT_NAME", "OBJECT_TYPE", "TABLE_FLAG", "SELTYPE") AS + select sc.install_type OBJECT_OWNER_INSTALL_TYPE + ,obj.owner OBJECT_OWNER + ,obj.object_name + ,obj.object_type + ,case when tab.table_name is not null then 'TAB' + when xml.table_name is not null then 'XML' + when nt.table_name is not null then 'NT' + else NULL + end TABLE_FLAG + ,'BASE' SELTYPE + from schema_conf sc + join dba_objects obj + on obj.owner = sc.username + left join dba_tables tab + on tab.owner = obj.owner + and tab.table_name = obj.object_name + and obj.object_type = 'TABLE' + left join dba_xml_tables xml + on xml.owner = obj.owner + and xml.table_name = obj.object_name + and obj.object_type = 'TABLE' + left join dba_nested_tables nt + on nt.owner = obj.owner + and nt.table_name = obj.object_name + and obj.object_type = 'TABLE' + where sc.install_type not in ('sys', 'pub') + group by obj.owner + ,sc.install_type + ,obj.object_name + ,obj.object_type + ,case when tab.table_name is not null then 'TAB' + when xml.table_name is not null then 'XML' + when nt.table_name is not null then 'NT' + else NULL + end +UNION ALL +select sco.install_type OBJECT_OWNER_INSTALL_TYPE + ,syn.owner OBJECT_OWNER + ,syn.synonym_name OBJECT_NAME + ,'SYNONYM' OBJECT_TYPE + ,NULL TABLE_FLAG + ,'PUB' SELTYPE + from schema_conf sco + join dba_synonyms syn + on syn.owner = sco.username + join schema_conf sct + on sct.username = syn.table_owner + and sct.install_type not in ('sys','pub') + where sco.install_type = 'pub' -- Public Synonyms +UNION ALL +select sco.install_type OBJECT_OWNER_INSTALL_TYPE + ,priv.owner OBJECT_OWNER + ,priv.table_name OBJECT_NAME + ,priv.type OBJECT_TYPE + ,case when tab.table_name is not null then 'TAB' + when xml.table_name is not null then 'XML' + when nt.table_name is not null then 'NT' + else NULL + end TABLE_FLAG + ,'SYS' SELTYPE + from schema_conf sco + join dba_tab_privs priv + on priv.owner = sco.username + join schema_conf sct + on sct.username = priv.grantee + and sct.install_type not in ('sys','pub') + left join dba_tables tab + on tab.owner = priv.owner + and tab.table_name = priv.table_name + and priv.type = 'TABLE' + left join dba_xml_tables xml + on xml.owner = priv.owner + and xml.table_name = priv.table_name + and priv.type = 'TABLE' + left join dba_nested_tables nt + on nt.owner = priv.owner + and nt.table_name = priv.table_name + and priv.type = 'TABLE' + where sco.install_type = 'sys' -- 'sys' priv.table owners + group by priv.owner + ,sco.install_type + ,priv.table_name + ,priv.type + ,case when tab.table_name is not null then 'TAB' + when xml.table_name is not null then 'XML' + when nt.table_name is not null then 'NT' + else NULL + end; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.DBA_OBJECTS_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/DBA_TAB_PRIVS_TAB.tab b/grbsrc/ODBCAPTURE/DBA_TAB_PRIVS_TAB.tab new file mode 100644 index 0000000..8496b50 --- /dev/null +++ b/grbsrc/ODBCAPTURE/DBA_TAB_PRIVS_TAB.tab @@ -0,0 +1,41 @@ + +-- +-- Create ODBCAPTURE.DBA_TAB_PRIVS_TAB Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.DBA_TAB_PRIVS_TAB + + CREATE TABLE "ODBCAPTURE"."DBA_TAB_PRIVS_TAB" + ( "OBJECT_OWNER_INSTALL_TYPE" VARCHAR2(10 BYTE), + "OBJECT_OWNER" VARCHAR2(128 BYTE), + "OBJECT_TYPE" VARCHAR2(24 BYTE), + "OBJECT_NAME" VARCHAR2(128 BYTE), + "PRIVILEGE" VARCHAR2(40 BYTE), + "GRANTEE" VARCHAR2(128 BYTE), + "GRANTEE_UOR_TYPE" CHAR(4 BYTE), + "GRANTEE_INSTALL_TYPE" VARCHAR2(10 BYTE), + "GRANTABLE" VARCHAR2(3 BYTE), + "HIERARCHY" VARCHAR2(3 BYTE), + "COMMON" VARCHAR2(3 BYTE), + "INHERITED" VARCHAR2(3 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.DBA_TAB_PRIVS_TAB + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/DBA_TAB_PRIVS_TAB.tabind b/grbsrc/ODBCAPTURE/DBA_TAB_PRIVS_TAB.tabind new file mode 100644 index 0000000..e071084 --- /dev/null +++ b/grbsrc/ODBCAPTURE/DBA_TAB_PRIVS_TAB.tabind @@ -0,0 +1,16 @@ + +-- +-- Create Indexes for ODBCAPTURE.DBA_TAB_PRIVS_TAB TABLE +-- + +set define off + + +-- NOTE: This is a "INDEX" Index + +--DBMS_METADATA:ODBCAPTURE.DBA_TAB_PRIVS_TAB_IX1 + + CREATE INDEX "ODBCAPTURE"."DBA_TAB_PRIVS_TAB_IX1" ON "ODBCAPTURE"."DBA_TAB_PRIVS_TAB" ("OBJECT_OWNER_INSTALL_TYPE", "OBJECT_OWNER", "OBJECT_NAME") + ; + +set define on diff --git a/grbsrc/ODBCAPTURE/DBA_TAB_PRIVS_VIEW.vw b/grbsrc/ODBCAPTURE/DBA_TAB_PRIVS_VIEW.vw new file mode 100644 index 0000000..4638729 --- /dev/null +++ b/grbsrc/ODBCAPTURE/DBA_TAB_PRIVS_VIEW.vw @@ -0,0 +1,62 @@ + +-- +-- Create ODBCAPTURE.DBA_TAB_PRIVS_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."DBA_TAB_PRIVS_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.DBA_TAB_PRIVS_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."DBA_TAB_PRIVS_VIEW" ("OBJECT_OWNER_INSTALL_TYPE", "OBJECT_OWNER", "OBJECT_TYPE", "OBJECT_NAME", "PRIVILEGE", "GRANTEE", "GRANTEE_UOR_TYPE", "GRANTEE_INSTALL_TYPE", "GRANTABLE", "HIERARCHY", "COMMON", "INHERITED") AS + select obj.object_owner_install_type + ,priv.owner OBJECT_OWNER + ,priv.type OBJECT_TYPE + ,priv.table_name OBJECT_NAME + ,priv.privilege + ,priv.grantee + ,gsl.uor_type GRANTEE_UOR_TYPE + ,gsl.install_type GRANTEE_INSTALL_TYPE + ,priv.grantable + ,priv.hierarchy + ,priv.common + ,priv.inherited + from dba_objects_tab obj + join dba_tab_privs priv + on priv.owner = obj.object_owner + and priv.table_name = obj.object_name + join uor_install_view gsl + on gsl.user_or_role = priv.grantee + where ( gsl.install_type not in ('sys','pub') -- No Grants to 'sys' or 'pub' grantees + OR ( gsl.install_type = 'pub' -- Grants to 'pub' + and obj.object_owner_install_type not in ('sys','pub') ) -- But not owned by 'sys' or 'pub' + OR ( gsl.install_type = 'pub' -- Grants to 'pub' + and priv.type = 'DIRECTORY') -- Directories are owned by 'SYS' + ); + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.DBA_TAB_PRIVS_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/DLOAD_CONF.cdl b/grbsrc/ODBCAPTURE/DLOAD_CONF.cdl new file mode 100644 index 0000000..3430689 --- /dev/null +++ b/grbsrc/ODBCAPTURE/DLOAD_CONF.cdl @@ -0,0 +1,59 @@ + +-- +-- Consolidated Data Load script for ODBCAPTURE.DLOAD_CONF data +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +prompt +prompt Disable Triggers and Foreign Keys +declare + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql || ';'); + execute immediate in_sql; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end run_sql; +begin + for buff in (select owner, trigger_name + from dba_triggers + where table_owner = 'ODBCAPTURE' + and table_name = 'DLOAD_CONF' + order by owner, trigger_name) + loop + run_sql('alter trigger "' || buff.owner || '"' || + '."' || buff.trigger_name || '" DISABLE'); + end loop; + for buff in (select constraint_name + from dba_constraints + where constraint_type = 'R' + and owner = 'ODBCAPTURE' + and table_name = 'DLOAD_CONF' + order by owner, constraint_name) + loop + run_sql('alter table "ODBCAPTURE"."DLOAD_CONF"' || + ' DISABLE constraint "' || buff.constraint_name || '"'); + end loop; +end; +/ + +-- NOTE: Additional file extensions for SQL*Loader include +-- .bad - Bad Records +-- .dsc - Discard Records +-- .log - Log File + +prompt +prompt sqlldr_control=ODBCAPTURE/DLOAD_CONF.ctl +host sqlldr '&1.' control=ODBCAPTURE/DLOAD_CONF.ctl data=ODBCAPTURE/DLOAD_CONF.csv log=ODBCAPTURE/DLOAD_CONF.log silent=HEADER,FEEDBACK + +begin + if '&_RC.' != '0' then + raise_application_error(-20000, 'Control file "ODBCAPTURE/DLOAD_CONF.ctl" returned error: &_RC.'); + end if; +end; +/ + diff --git a/grbsrc/ODBCAPTURE/DLOAD_CONF.csv b/grbsrc/ODBCAPTURE/DLOAD_CONF.csv new file mode 100644 index 0000000..04918eb --- /dev/null +++ b/grbsrc/ODBCAPTURE/DLOAD_CONF.csv @@ -0,0 +1,7 @@ +"USERNAME","TABLE_NAME","INSTALL_TYPE","BEFORE_SELECT_SQL","WHERE_CLAUSE","ORDER_BY_COLUMNS","AFTER_ORDER_BY_SQL","NOTES" +"ODBCAPTURE","DLOAD_CONF","grbsrc",,"install_type in ('sys','pub','grbsrc')","USERNAME, TABLE_NAME, INSTALL_TYPE",, +"ODBCAPTURE","OBJECT_CONF","grbsrc",,"install_type in ('sys','pub','grbsrc')","USERNAME, INSTALL_OTYPE, INSTALL_TYPE",, +"ODBCAPTURE","OTYPE_CONF","grbsrc",,,"INSTALL_OTYPE",, +"ODBCAPTURE","ROLE_CONF","grbsrc",,"install_type in ('sys','pub','grbsrc')","ROLENAME, INSTALL_TYPE",, +"ODBCAPTURE","SCHEMA_CONF","grbsrc",,"install_type in ('sys','pub','grbsrc')","USERNAME",, +"ODBCAPTURE","TYPE_CONF","grbsrc",,"install_type in ('sys','pub','grbsrc')","INSTALL_TYPE",, diff --git a/grbsrc/ODBCAPTURE/DLOAD_CONF.ctl b/grbsrc/ODBCAPTURE/DLOAD_CONF.ctl new file mode 100644 index 0000000..89a6ffb --- /dev/null +++ b/grbsrc/ODBCAPTURE/DLOAD_CONF.ctl @@ -0,0 +1,14 @@ +OPTIONS (SKIP=1) +LOAD DATA +APPEND INTO TABLE "ODBCAPTURE"."DLOAD_CONF" +FIELDS CSV WITH EMBEDDED +TRAILING NULLCOLS + (USERNAME CHAR(128) + ,TABLE_NAME CHAR(128) + ,INSTALL_TYPE CHAR(10) + ,BEFORE_SELECT_SQL CHAR(4000) + ,WHERE_CLAUSE CHAR(4000) + ,ORDER_BY_COLUMNS CHAR(4000) + ,AFTER_ORDER_BY_SQL CHAR(4000) + ,NOTES CHAR(1024) + ) diff --git a/grbsrc/ODBCAPTURE/DLOAD_CONF.tab b/grbsrc/ODBCAPTURE/DLOAD_CONF.tab new file mode 100644 index 0000000..9a7ead3 --- /dev/null +++ b/grbsrc/ODBCAPTURE/DLOAD_CONF.tab @@ -0,0 +1,49 @@ + +-- +-- Create ODBCAPTURE.DLOAD_CONF Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.DLOAD_CONF + + CREATE TABLE "ODBCAPTURE"."DLOAD_CONF" + ( "USERNAME" VARCHAR2(128 BYTE) NOT NULL ENABLE, + "TABLE_NAME" VARCHAR2(128 BYTE) NOT NULL ENABLE, + "INSTALL_TYPE" VARCHAR2(10 BYTE) NOT NULL ENABLE, + "BEFORE_SELECT_SQL" VARCHAR2(4000 BYTE), + "WHERE_CLAUSE" VARCHAR2(4000 BYTE), + "ORDER_BY_COLUMNS" VARCHAR2(4000 BYTE) NOT NULL ENABLE, + "AFTER_ORDER_BY_SQL" VARCHAR2(4000 BYTE), + "NOTES" VARCHAR2(1024 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "ODBCAPTURE"."DLOAD_CONF" ADD CONSTRAINT "DLOAD_CONF_PK" PRIMARY KEY ("USERNAME", "TABLE_NAME", "INSTALL_TYPE") + USING INDEX ENABLE; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.DLOAD_CONF + + COMMENT ON COLUMN "ODBCAPTURE"."DLOAD_CONF"."USERNAME" IS 'Name of the database schema (Primary Key Column 1). Value must be in SCHEMA_CONF table.'; + COMMENT ON COLUMN "ODBCAPTURE"."DLOAD_CONF"."TABLE_NAME" IS 'Name of the database table/view (Primary Key Column 2).'; + COMMENT ON COLUMN "ODBCAPTURE"."DLOAD_CONF"."INSTALL_TYPE" IS 'Name of the database schema (Primary Key Column 3). Value must be in TYPE_CONF table.'; + COMMENT ON COLUMN "ODBCAPTURE"."DLOAD_CONF"."BEFORE_SELECT_SQL" IS 'Any SQL before " select * from owner.table " for the selected data load to capture (Optional).'; + COMMENT ON COLUMN "ODBCAPTURE"."DLOAD_CONF"."WHERE_CLAUSE" IS 'WHERE clause for the selected data load to capture (Optional). Do not add the WHERE keyword'; + COMMENT ON COLUMN "ODBCAPTURE"."DLOAD_CONF"."ORDER_BY_COLUMNS" IS 'ORDER BY columns for the selected data load to capture. List the column names as they would appear in an ORDER BY clause.'; + COMMENT ON COLUMN "ODBCAPTURE"."DLOAD_CONF"."AFTER_ORDER_BY_SQL" IS 'Any SQL after the ORDER BY clause for the selected data load to capture (Optional). Do not add ";" at the end.'; + COMMENT ON COLUMN "ODBCAPTURE"."DLOAD_CONF"."NOTES" IS 'Free text field (Optional)'; + COMMENT ON TABLE "ODBCAPTURE"."DLOAD_CONF" IS 'DATA LOAD filter for each table/view in a schema for an install type.'; + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/DLOAD_CONF.tabfk b/grbsrc/ODBCAPTURE/DLOAD_CONF.tabfk new file mode 100644 index 0000000..b6718cb --- /dev/null +++ b/grbsrc/ODBCAPTURE/DLOAD_CONF.tabfk @@ -0,0 +1,23 @@ + +-- +-- Create Foreign Keys for ODBCAPTURE.DLOAD_CONF TABLE +-- + +set define off + + +-- NOTE: This is a "BASE TABLE" Foreign Key + +--DBMS_METADATA:ODBCAPTURE.DLOAD_CONF_FK1 + + ALTER TABLE "ODBCAPTURE"."DLOAD_CONF" ADD CONSTRAINT "DLOAD_CONF_FK1" FOREIGN KEY ("USERNAME") + REFERENCES "ODBCAPTURE"."SCHEMA_CONF" ("USERNAME") ENABLE; + +-- NOTE: This is a "BASE TABLE" Foreign Key + +--DBMS_METADATA:ODBCAPTURE.DLOAD_CONF_FK2 + + ALTER TABLE "ODBCAPTURE"."DLOAD_CONF" ADD CONSTRAINT "DLOAD_CONF_FK2" FOREIGN KEY ("INSTALL_TYPE") + REFERENCES "ODBCAPTURE"."TYPE_CONF" ("INSTALL_TYPE") ENABLE; + +set define on diff --git a/grbsrc/ODBCAPTURE/GRAB_SCRIPTS.pbody b/grbsrc/ODBCAPTURE/GRAB_SCRIPTS.pbody new file mode 100644 index 0000000..1c4176e --- /dev/null +++ b/grbsrc/ODBCAPTURE/GRAB_SCRIPTS.pbody @@ -0,0 +1,4406 @@ + +-- +-- Create ODBCAPTURE.GRAB_SCRIPTS Package Body +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.GRAB_SCRIPTS + + CREATE OR REPLACE EDITIONABLE PACKAGE BODY "ODBCAPTURE"."GRAB_SCRIPTS" +as + + g_install_type type_conf.install_type%TYPE; + g_schema_name varchar2(128); + +-- +-- Table of Functions/Procedures +-- +-- Script Handling Utilities +-- -) function script_is_open +-- -) PROCEDURE script_close_all +-- -) function script_open +-- -) procedure script_put +-- -) procedure script_put_line +-- -) PROCEDURE script_new_line +-- -) PROCEDURE script_close +-- -) procedure big_put_line +-- -) procedure rem_qt_storage +-- Script Generating Procedures +-- -) procedure get_object_grants - Create Object Based Grant +-- -) procedure get_synonyms - Create Object Based Synonym +-- -) procedure cr_acl - Create XDB ACL +-- -) procedure cr_aq - Create Advanced Queue +-- -) procedure cr_aqt - Create Advanced Queue Table +-- -) procedure cr_common +-- -) Create FUNCTION +-- -) Create PACKAGE_BODY +-- -) Create PACKAGE_SPEC +-- -) Create PROCEDURE +-- -) Create SCHEDULER_JOB +-- -) Create SCHEDULER_PROGRAM +-- -) Create SCHEDULER_SCHEDULE +-- -) Create SEQUENCE +-- -) Create TYPE_BODY +-- -) Create TYPE_SPEC +-- -) procedure cr_cdl - Create Consolidated Data Load +-- -) PROCEDURE cr_ctx - Create Context +-- -) procedure cr_dbtrg - Create Database Trigger +-- -) procedure cr_dblnk - Create Database Link +-- -) procedure cr_dir - Create Directory +-- -) procedure cr_fk - Create Foreign Key +-- -) procedure cr_grnt - Create "Delayed" Grant +-- -) procedure cr_ind - Create Index +-- -) procedure cr_install_master - Create Master Call Script +-- -) procedure cr_install_schemas - Create Schema/Owner Call Script +-- -) procedure cr_install_sys - Create SYS Call Script +-- -) procedure cr_install_system - Create SYSTEM Call Script +-- -) procedure cr_mvw - Create Materialized View +-- -) procedure cr_pjava - Create Java Source +-- -) procedure cr_rol - Create Role +-- -) procedure cr_schtrg - Create Schema Trigger +-- -) procedure cr_syn - Create "Delayed" Synonym +-- -) procedure cr_tab - Create Table +-- -) procedure cr_trg - Create Table/View Trigger +-- -) procedure cr_usr - Create User +-- -) procedure cr_vw - Create View +-- Setup and Main Control +-- -) procedure initialize +-- -) procedure set_schema_name +-- -) procedure gen_installs +-- -) procedure gen_schemas +-- PUBLIC API +-- -) procedure all_scripts +-- -) procedure write_scripts +-- -) procedure clear_buffers +-- -) function get_version +-- + + +------------------------------------------------------------ +--- Script Handling Utilities --- +------------------------------------------------------------ + + +----------------------------------------------------- +-- Check if a Script File is Open +function script_is_open + (file in sf_ptr_type) + return boolean +is +begin + return sf_aa.exists(file.inst_type) + and sf_aa(file.inst_type).exists(file.inst_ord) + and sf_aa(file.inst_type)(file.inst_ord).exists(file.file_id) + and sf_aa(file.inst_type)(file.inst_ord)(file.file_id).is_open = 'Y'; +end script_is_open; + +----------------------------------------------------- +-- Close all Script Files +PROCEDURE script_close_all +is + inst_ord pls_integer; + file_id pls_integer; +begin + if NOT sf_aa.EXISTS(g_install_type) + then + return; + end if; + -- Install Order Loop + inst_ord := sf_aa(g_install_type).FIRST; + <> + loop + -- File ID + file_id := sf_aa(g_install_type)(inst_ord).FIRST; + <> + loop + -- + if sf_aa(g_install_type)(inst_ord)(file_id).is_open = 'Y' + then + sf_aa(g_install_type)(inst_ord)(file_id).is_open := 'N'; + dbms_output.put_line('SCRIPT_CLOSE_ALL: inst_type: ' || g_install_type || + ', inst_ord: ' || inst_ord || + ', file_id: ' || file_id || + ' was open.' ); + end if; + -- + exit FILE_LOOP when file_id = sf_aa(g_install_type)(inst_ord).LAST; + file_id := sf_aa(g_install_type)(inst_ord).NEXT(file_id); + end loop; --FILE_LOOP + -- + exit DIR_LOOP when inst_ord = sf_aa(g_install_type).LAST; + inst_ord := sf_aa(g_install_type).NEXT(inst_ord); + end loop; --DIR_LOOP +end script_close_all; + +----------------------------------------------------- +-- Open a Script File +function script_open + (in_filename in varchar2 + ,in_otype in varchar2 + ,in_max_linesize in binary_integer default 1024) + return sf_ptr_type +is + sf_ptr sf_ptr_type; + schema_name varchar2(128); + filename varchar2(500); + init_sf_aa boolean; + ---------------------------------------- + -- Find the Install Order for the in_otype + procedure get_install_order is + begin + sf_ptr.inst_ord := null; + if in_otype = 'INSTALL_SCRIPT' + then + sf_ptr.inst_ord := -999; + return; + end if; + select install_order into sf_ptr.inst_ord + from otype_conf + where install_otype = in_otype; + exception when OTHERS + then + script_close_all; + raise_application_error(-20000, 'in_otype "' || in_otype || + '" not found in OTYPE_CONF in script_open function' || LF || + SQLERRM); + end get_install_order; + ---------------------------------------- + -- Find the File ID for the sf_ptr.inst_ord, and filename + procedure get_file_id is + file_id pls_integer; + begin + -- Find Filename in Script File Array + file_id := sf_aa(g_install_type)(sf_ptr.inst_ord).FIRST; + loop + if ( sf_aa(g_install_type)(sf_ptr.inst_ord)(file_id).schema_name = schema_name + OR ( sf_aa(g_install_type)(sf_ptr.inst_ord)(file_id).schema_name is null + AND schema_name is null) ) + AND sf_aa(g_install_type)(sf_ptr.inst_ord)(file_id).filename = filename + then + sf_ptr.file_id := file_id; + if script_is_open(sf_ptr) + then + raise_application_error(-20000, 'Script Name: "' || g_install_type || + '/' || schema_name || + '/' || filename || + '" (OTYPE: ' || in_otype || + ') is already open.'); + end if; + exit; + end if; + -- + exit when file_id = sf_aa(g_install_type)(sf_ptr.inst_ord).LAST; + file_id := sf_aa(g_install_type)(sf_ptr.inst_ord).NEXT(file_id); + end loop; + end get_file_id; +begin + sf_ptr.inst_type := g_install_type; + -- Set the Schema Name + schema_name := case when g_schema_name is null then NULL + when g_schema_name = 'PUBLIC' then 'SYSTEM' + else g_schema_name + end; + -- Get the Install Order to sf_ptr + get_install_order; + -- Starting from Oracle Database release 19c, version 19.3, file names + -- with the $ character will no longer run on Windows. + if instr(in_filename,'$') != 0 + then + dbms_output.put_line(' Warning: Changed "$" to "_" in filename: ' || in_filename); + end if; + -- Windows also has trouble with "%" in a script name + -- https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/Database-Object-Names-and-Qualifiers.html + -- Quoted identifiers can contain any characters and punctuations marks as well as spaces + if instr(in_filename,'%') != 0 + then + dbms_output.put_line(' Warning: Changed "%" to "_" in filename: ' || in_filename); + end if; + -- Set Filename + filename := replace(replace(in_filename,'$','_'),'%','_'); + dbms_output.put_line('Script Open: ' || g_install_type || + '/' || schema_name || + '/' || filename ); + -- Find File ID + sf_ptr.file_id := null; + if sf_aa.EXISTS(g_install_type) + AND sf_aa(g_install_type).EXISTS(sf_ptr.inst_ord) + then + -- Get the File ID for sf_ptr + get_file_id; + if sf_ptr.file_id is not null + then + sf_ptr.num_lines := sf_aa(sf_ptr.inst_type)(sf_ptr.inst_ord)(sf_ptr.file_id).num_buffers; + init_sf_aa := FALSE; + sf_aa(sf_ptr.inst_type)(sf_ptr.inst_ord)(sf_ptr.file_id).is_open := 'Y'; + else + sf_ptr.file_id := sf_aa(sf_ptr.inst_type)(sf_ptr.inst_ord).COUNT + 1; + sf_ptr.num_lines := 1; + init_sf_aa := TRUE; + end if; + else + sf_ptr.file_id := 1; + sf_ptr.num_lines := 1; + init_sf_aa := TRUE; + end if; + if init_sf_aa + then + sf_aa(sf_ptr.inst_type)(sf_ptr.inst_ord)(sf_ptr.file_id).max_linesize := in_max_linesize; + sf_aa(sf_ptr.inst_type)(sf_ptr.inst_ord)(sf_ptr.file_id).total_bytes := 0; + sf_aa(sf_ptr.inst_type)(sf_ptr.inst_ord)(sf_ptr.file_id).num_buffers := 1; + sf_aa(sf_ptr.inst_type)(sf_ptr.inst_ord)(sf_ptr.file_id).is_open := 'Y'; + sf_aa(sf_ptr.inst_type)(sf_ptr.inst_ord)(sf_ptr.file_id).schema_name := schema_name; + sf_aa(sf_ptr.inst_type)(sf_ptr.inst_ord)(sf_ptr.file_id).filename := filename; + sf_aa(sf_ptr.inst_type)(sf_ptr.inst_ord)(sf_ptr.file_id).buffer_aa(1).len := 0; + end if; + return sf_ptr; +end script_open; + +----------------------------------------------------- +-- Add Characters to a Script File +procedure script_put + (file IN OUT NOCOPY sf_ptr_type + ,buffer IN VARCHAR2) +is + SEARCH_STRING CONSTANT varchar2(30) := '[^' || chr(1) || '-' || chr(127) || ']'; + len number(5); + ascii_buffer varchar2(32767); +begin + -- + if nvl(lengthb(buffer),0) <= 0 + then + return; + end if; + ascii_buffer := regexp_replace(buffer, SEARCH_STRING, '?'); + len := length(ascii_buffer); + --dbms_output.put_line('/'||file.inst_ord||'/'||file.file_id||'('||file.num_lines||')len='||len|| + -- '('||sf_aa(file.inst_ord)(file.file_id).buffer_aa(file.num_lines).len||')'); + -- + if sf_aa(file.inst_type)(file.inst_ord)(file.file_id).max_linesize > + sf_aa(file.inst_type)(file.inst_ord)(file.file_id).buffer_aa(file.num_lines).len + len + then + -- + sf_aa(file.inst_type)(file.inst_ord)(file.file_id).buffer_aa(file.num_lines).buffer := + sf_aa(file.inst_type)(file.inst_ord)(file.file_id).buffer_aa(file.num_lines).buffer || ascii_buffer; + -- + sf_aa(file.inst_type)(file.inst_ord)(file.file_id).buffer_aa(file.num_lines).len := + sf_aa(file.inst_type)(file.inst_ord)(file.file_id).buffer_aa(file.num_lines).len + len; + -- + else + -- + file.num_lines := file.num_lines + 1; + sf_aa(file.inst_type)(file.inst_ord)(file.file_id).num_buffers := file.num_lines; + -- + sf_aa(file.inst_type)(file.inst_ord)(file.file_id).buffer_aa(file.num_lines).buffer := ascii_buffer; + sf_aa(file.inst_type)(file.inst_ord)(file.file_id).buffer_aa(file.num_lines).len := len; + -- + end if; + -- + sf_aa(file.inst_type)(file.inst_ord)(file.file_id).total_bytes := + sf_aa(file.inst_type)(file.inst_ord)(file.file_id).total_bytes + len; + -- +exception when others then + raise_application_error(-20000, + substr('script_put error: len = ' || len || LF || + ' sf_aa('||file.inst_type||')('||file.inst_ord||')('||file.file_id||').buffer_aa('||file.num_lines||').len = ' || + sf_aa( file.inst_type )( file.inst_ord )( file.file_id ).buffer_aa( file.num_lines ).len || LF || + ' sf_aa('||file.inst_type||')('||file.inst_ord||')('||file.file_id||').max_linesize = ' || + sf_aa( file.inst_type )( file.inst_ord )( file.file_id ).max_linesize || LF || + SQLERRM || LF || dbms_utility.format_error_backtrace || dbms_utility.format_call_stack || + '|' || ascii_buffer || '|' + ,1,2000)); +end script_put; + +----------------------------------------------------- +-- Add a Line to a Script File +procedure script_put_line + (file IN OUT NOCOPY sf_ptr_type + ,buffer IN VARCHAR2) +is +begin + script_put(file, buffer || LF); +end script_put_line; + +----------------------------------------------------- +-- Add a Line to a Script File +PROCEDURE script_new_line + (file IN OUT NOCOPY sf_ptr_type + ,lines IN NATURAL default 1) +is + buff varchar2(4000); +begin + for i in 1 .. lines + loop + buff := buff || LF; + end loop; + script_put(file, buff); +end script_new_line; + +----------------------------------------------------- +-- Close a Script File +PROCEDURE script_close + (file IN OUT NOCOPY sf_ptr_type) +is +begin + sf_aa(file.inst_type)(file.inst_ord)(file.file_id).is_open := 'N'; +end script_close; + +------------------------------------------------------------ +-- Big Put Line, because UTL_FILE can't +-- +-- Line Cut Test +-- +-- To reset the test: +-- 1) Delete the "previous line was cut-off" line. +-- 2) Rejoin the "the rest of the line" line to the +-- "This line is longer than" line. +-- 3) The next run of GRAB_SCRIPTS.schemas('gen','ODBCAPTURE') +-- should separate these lines at 2499 characters +-- again, and add the "previous line was cut-off" line. +-- +-- This line is longer than 2499 characters. "The previous line was cut-off at NNNN chracters." should appear below ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +---------- The previous line was cut-off at 2497 chracters. ---------- +------------ This is the rest of the line that is longer than 2499 characters ---------- +-- +procedure big_put_line + (in_fh in out NOCOPY sf_ptr_type + ,in_loc in varchar2 + ,in_txt in CLOB + ,in_max_len in number) +is + orig_len number; -- Original Length of IN_TXT + ptr number; -- Current Position in IN_TXT + ptr_len number; -- Length of IN_TXT from PTR, including PTR + oset number; -- Candidate Offset from PTR + oset_len number; -- Length of IN_TXT from PTR to OSET, + -- including PTR but excluding OSET +begin + orig_len := DBMS_LOB.GETLENGTH(in_txt); + oset := 0; + loop + -- Update PTR + ptr := oset + 1; + ptr_len := orig_len - ptr + 1; + -- Find a linefeed. + oset := instr(in_txt, LF, ptr); + -- Exit if there are no more LF and the remaining line is small enough. + -- Need to process all LF. So, don't exit loop until here. + exit when oset = 0 and ptr_len <= in_max_len; + -- oset_len does not include LF + oset_len := oset - ptr; + -- Allow for empty line + if oset_len between 0 and in_max_len + then + -- This line is small enough. Write it and go to next iteration. + if substr(in_txt, oset-1, 1) = CRTN + then + -- Remove the CRTN and the LF. + script_put_line(in_fh, substr(in_txt, ptr, oset_len-1)); + else + script_put_line(in_fh, substr(in_txt, ptr, oset_len)); + end if; + else + -- This line is not small enough. + -- Cut the line at "in_max_len" characters + oset := in_max_len + ptr - 1; + script_put_line(in_fh, substr(in_txt, ptr, in_max_len)); + -- Add a comment about the cut + script_put_line(in_fh, '---------- The previous line was cut-off at ' || + in_max_len || ' characters. ----------' ); + -- Raise an exception + --raise_application_error + -- (-20000, substr('Line too long, exceeds ' || + -- in_max_len || ' characters at location "' || + -- substr(in_loc, 1, 150) || '"' || LF || + -- substr(in_txt, ptr) + -- ,1,2000) ); + end if; + end loop; + -- The remaining IN_TXT is shorter then IN_MAX_LEN + script_put_line(in_fh, substr(in_txt, ptr)); +end big_put_line; + +------------------------------------------------------------ +-- Remove Storage Parameter from DBMS_AQADM.create_queue_table +procedure rem_qt_storage + (in_fh in out NOCOPY sf_ptr_type + ,in_loc in varchar2 + ,in_txt in CLOB + ,in_max_len in number) +is + len number := length(in_txt); + ptr number := 1; -- Current Position in IN_TXT + oset number; -- Offset from PTR to next LF +begin + while ptr <= len + loop + oset := instr(substr(in_txt, ptr),LF); + if oset = 0 + then + big_put_line(in_fh, in_loc, substr(in_txt, ptr), in_max_len); + ptr := len + 1; + else + if substr(in_txt, ptr, oset-1) not like common_util.STORAGE_CLAUSE_MATCH escape '\' + then + big_put_line(in_fh, in_loc, substr(in_txt, ptr, oset-1), in_max_len); + end if; + end if; + ptr := ptr + oset; + end loop; +end rem_qt_storage; + + +------------------------------------------------------------ +--- Script Generating Procedures --- +------------------------------------------------------------ + + +------------------------------------------------------------ +-- Get Object Grants for CURRENT, FUTURE is handled in cr_grnt +procedure get_object_grants + (in_fh in out NOCOPY sf_ptr_type + ,in_object_name in varchar2 + ,in_object_type in varchar2) +is + -- + -- Oracle Database 12c Release 1 Database SQL Language Reference + -- "on_object_clause" + -- Users, directory schema objects, editions, data mining models, Java + -- source and resource schema objects, and SQL translation profiles + -- are identified separately because they reside in separate namespaces. + -- + -- See Also: http://docs.oracle.com/database/121/SQLRF/sql_elements008.htm#SQLRF51129 + -- + -- An in_object_type of "USER" is not yet implemented. + -- + sql_txt varchar2(32767); +begin + script_put_line(in_fh, ''); + script_put_line(in_fh, '-- Grants'); +-- Performance: DBMS_METADATA.get_dependent_dll('OBJECT_GRANT') is VERY SLOW +-- script_put_line(in_fh, '--DBMS_METADATA:' || g_schema_name || +-- '.' || in_object_name ); +-- big_put_line(in_fh, dbms_metadata.get_dependent_ddl(object_type => 'OBJECT_GRANT' +-- ,base_object_name => in_object_name +-- ,base_object_schema => g_schema_name) ); +-- Note: EXECPTION BLOCK BELOW + for buff in (select grantee + ,privilege + ,object_type + ,max(grantable) GRANTABLE + from priv_obj_install_vw + where install_type = g_install_type + and install_type_selector = 'OBJECT' -- Grantee installed before this Object + and object_owner = g_schema_name + and object_name = in_object_name + and object_type = in_object_type + group by grantee + ,privilege + ,object_type + order by grantee + ,privilege + ,object_type) + loop + -- Directories are handled by "cr_dir"" + --when 'DIRECTORY' then 'DIRECTORY ' + -- The following grants are not implemented in OTYPE_CONF + -- https://docs.oracle.com/database/121/SQLRF/statements_9014.htm#SQLRF01603 + --when '(Data Mining) MODEL' then 'MINING MODEL ' + --when 'SQL TRANSLATION PROFILE' then 'SQL TRANSLATION PROFILE ' + sql_txt := 'grant ' || buff.privilege || -- This list taken from SQL definition of DBA_TAB_PRIVS + ' on ' || case buff.object_type when 'JAVA CLASS' then 'JAVA SOURCE "' || g_schema_name || '"."' + when 'JAVA SOURCE' then 'JAVA SOURCE "' || g_schema_name || '"."' + when 'JAVA RESOURCE' then 'JAVA RESOURCE "' || g_schema_name || '"."' + when 'EDITION' then 'EDITION "' + when 'USER' then 'USER "' + else '"' || g_schema_name || '"."' + end || in_object_name || + '" to "' || buff.grantee || '"'; + -- "with hierarchy option" has not yet been implemented + if buff.grantable = 'YES' + then + sql_txt := sql_txt || ' with grant option'; + end if; + script_put_line(in_fh, sql_txt || ';'); + end loop; + script_put_line(in_fh, ''); +--exception +-- when DBMS_METADATA.object_not_found2 +-- then +-- script_put_line(in_fh, ''); +end get_object_grants; + +------------------------------------------------------------ +-- Get CURRENT synonyms. FUTURE synonyms are handled in cr_syn +procedure get_synonyms + (in_fh in out NOCOPY sf_ptr_type + ,in_object_name in varchar2 + ,in_object_type in varchar2 + ,in_max_len in number) +is +begin + script_put_line(in_fh, ''); + script_put_line(in_fh, '-- Synonyms'); + for buff in (select synonym_owner, synonym_name + from obj_install_synonym_tab + where install_type = g_install_type + and install_type_selector = 'SYNONYM' -- Target installed before this Synonym + and target_owner = g_schema_name + and target_name = in_object_name + and target_type = in_object_type + order by synonym_owner, synonym_name) + loop + script_put_line(in_fh, ''); + script_put_line(in_fh, '--DBMS_METADATA:' || buff.synonym_owner || + '.' || buff.synonym_name ); + -- Includes DB_LINK in Synonym + big_put_line(in_fh, buff.synonym_owner || '.' || buff.synonym_name || ' Synonym' + ,dbms_metadata.get_ddl(object_type => 'SYNONYM' + ,name => buff.synonym_name + ,schema => buff.synonym_owner) + ,in_max_len); + end loop; + script_put_line(in_fh, ''); +end get_synonyms; + +------------------------------------------------------------ +-- Create XDB Access Control Lists +procedure cr_acl +is + -- + -- Note about ACLs + -- + -- These are RAS ACLs: + -- -) DBA_XS_ACLS + -- -) DBA_XS_ACES + -- These are XDB ACLs: + -- -) DBA_HOST_ACLS + -- -) DBA_HOST_ACES + -- The DBA_ACL_NAME_MAP table maps XDB ACLs to RAS ACLs. + -- + -- DBMS_METADATA.GET_DDL will not work with "XS_ACL" + -- DBMS_METADATA.FETCH_CLOB is missing host names. + -- The DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE calls must be produced + -- without using DBMS_METADATA. + --DECLARE + -- l_DDL_handle NUMBER; + -- l_XForm_handle NUMBER; + -- l_clob CLOB; + --BEGIN + -- l_DDL_handle := DBMS_METADATA.OPEN(object_type => 'XS_ACL'); + -- DBMS_METADATA.SET_COUNT(handle => l_DDL_handle + -- ,value => 10); + -- DBMS_METADATA.SET_FILTER(handle => l_DDL_handle + -- ,name => 'SCHEMA' + -- ,value => 'SYS'); + -- DBMS_METADATA.SET_FILTER(handle => l_DDL_handle + -- ,name => 'NAME' + -- ,value => 'NETWORK_ACL_3CA7D022F7DCA526E054A0369FA25254'); + -- l_XForm_handle := DBMS_METADATA.ADD_TRANSFORM (handle => l_DDL_handle + -- ,name => 'DDL'); + -- DBMS_METADATA.SET_TRANSFORM_PARAM(l_XForm_handle, 'SQLTERMINATOR', TRUE); + -- l_clob := DBMS_METADATA.FETCH_CLOB(handle => l_DDL_handle + -- ,cache_lob => TRUE); + -- DBMS_OUTPUT.PUT_LINE('length: ' || length(l_clob)); + -- DBMS_OUTPUT.PUT_LINE(l_clob); + -- DBMS_METADATA.CLOSE(handle => l_DDL_handle); + --END; + --/ + -- + -- Execution of the above DBMS_METADATA produces this DBMS_OUTPUT: + --DECLARE + -- ace_list XS$ACE_LIST; + --BEGIN + -- ace_list := XS$ACE_LIST( + -- XS$ACE_TYPE( + -- privilege_list => XS$NAME_LIST('"CONNECT"'), + -- principal_name=>'"TXN_CUST"', + -- principal_type=>XS_ACL.PTYPE_DB, + -- start_date => to_timestamp_tz('16-SEP-16 09.42.47.423377 PM', + -- 'DD-MON-YY HH.MI.SS.FF PM TZH:TZM')), + -- XS$ACE_TYPE( + -- privilege_list => XS$NAME_LIST('"CONNECT"'), + -- principal_name=>'"TXN_CUST"', + -- principal_type=>XS_ACL.PTYPE_DB)); + -- + -- xs_acl.create_acl( + -- name=>'"SYS"."NETWORK_ACL_3CA7D022F7DCA526E054A0369FA25254"', + -- ace_list=>ace_list, + -- sec_class=>'"SYS"."NETWORK_SC"', + -- description=>'ACL for BOS File Ready'); + --END; + --/ + -- + -- + -- Oracle Database Security Guide 12c Release 1 (12.1) + -- E48135-15, September 2016 + -- Chapter 6 Managing Fine-Grained Access in PL/SQL Packages and Types + -- Upgraded Applications That Depend on Packages That Use External Network Services + -- http://docs.oracle.com/database/121/DBSEG/fine_grained_access.htm#DBSEG99984 + -- + -- GRANT_TYPE: 'GRANT' + -- PRIVILEGE: 'CONNECT','RESOLVE' + -- resolve: Resolves a network host name or IP address through the UTL_INADDR package + -- connect: Grants the user permission to connect to a network service at a host through + -- the UTL_TCP, UTL_SMTP, UTL_MAIL, UTL_HTTP, and DBMS_LDAP packages, or the HttpUriType type + -- INVERTED_PRINCIPAL: 'NO' + -- + -- Regular Expression: ^(.*[/][/][^/]+)[/].*$ + -- .*[/][/][^/]+ - Zero or more chacters followed by 2 slashes + -- followed by one or more non-slash characters + -- (.*[/][/][^/]+) - Capture above match for replacement as "\1" + -- ^(.*[/][/][^/]+) - Above match must start and begining of line + -- [/].*$ - A slash character followed by zero or more characters + -- ending at the end of line + -- If there is no match, p.value is returned unchanged. + -- It there is a match, only "\1" is returned. + -- This essentially removes any path string from a URL. + -- + -- ACE HOST mask conversion to Regular Expressions + -- replace(STRING,'.','[.]') - Replaces all dots with a bracketed dot + -- replace(STRING,'*','.*') - Replaces all stars with "dot star" + -- + -- Regular Expression: ^.*[:]([0-9]+).*$ + -- ^.*[:] - Zero or more characters from begining of line + -- to the first single colon character + -- [0-9]+ - A number with one or more digits + -- ([0-9]+) - Capture the number for replacement as "\1" + -- .*$ - Zero or more characters ending at the end of line + -- If there is no match, p.value is returned unchanged. + -- If there is a match, only "\1" is returned. + -- This essentially returns the port number from the URL. + -- + OTYPE CONSTANT varchar2(100) := 'XDB_ACL'; + fh sf_ptr_type; -- object script file handle + old_file varchar2(1000) := 'This is not a real file name !@#$%^'; + old_range varchar2(1000) := 'This is not a host port range !@#$%^'; + change_flag boolean := TRUE; + ---------------------------------------- +begin + dbms_output.put_line('OTYPE: ' || OTYPE || ', g_install_type: ' || g_install_type || + ', g_schema_name: ' || g_schema_name || ', xs_acl.ptype_db: ' || xs_acl.ptype_db); + for buff in (select replace(xdbacl_host,'*','_') || '.' || ext FILE_NAME + ,xdbacl_host ACL_HOST + ,lower_port + ,upper_port + ,xdbacl_host || ' from port ' || lower_port || ' to ' || upper_port + HOST_PORT_RANGE + ,grantee PRINCIPAL + ,privilege + ,install_type_selector + from priv_obj_xdbacl_view + where install_type = g_install_type + group by replace(xdbacl_host,'*','_') || '.' || ext + ,xdbacl_host + ,lower_port + ,upper_port + ,grantee + ,privilege + ,install_type_selector + order by replace(xdbacl_host,'*','_') || '.' || ext + ,xdbacl_host + ,lower_port + ,upper_port + ,grantee + ,privilege + ,install_type_selector) + loop + if old_file != buff.file_name + then + old_file := buff.file_name; + change_flag := TRUE; + if script_is_open(fh) + then + script_put_line(fh, 'set define on'); + script_close(fh); + end if; + fh := script_open(in_filename => buff.file_name + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create XDB ACL/ACE'); + script_put_line(fh, '--'); + script_put_line(fh, '-- Only XDB ACLs with the following are included:'); + script_put_line(fh, '-- PRINCIPAL_TYPE = ''DATABASE'' (xs_acl.ptype_db)'); + script_put_line(fh, '-- GRANT_TYPE = ''GRANT'''); + script_put_line(fh, '-- INVERTED_PRINICIPAL = ''NO'''); + script_put_line(fh, '-- PRIVILEGE is not null'); + script_put_line(fh, '-- Start Dates and End Dates are ignored (set to NULL).'); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + script_put_line(fh, ''); + script_put_line(fh, '-- NOTE: This is a "' || buff.install_type_selector || '" XDB ACL'); + end if; + if old_range != buff.host_port_range + then + old_range := buff.host_port_range; + change_flag := TRUE; + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create XDB ACL/ACE for ' || buff.host_port_range || ' '); + script_put_line(fh, '--'); + script_put_line(fh, ''); + end if; + if change_flag + then + change_flag := FALSE; + for buf2 in (select xdbacl_host ACL_HOST + ,lower_port + ,upper_port + ,grantee PRINCIPAL + ,privilege + from priv_obj_xdbacl_view + where install_type = 'pub' + and xdbacl_host = buff.acl_host + and ( lower_port = buff.lower_port + OR (buff.lower_port is null + AND lower_port is null ) ) + and ( upper_port = buff.upper_port + OR (buff.upper_port is null + AND upper_port is null ) ) + group by xdbacl_host + ,lower_port + ,upper_port + ,grantee + ,privilege + order by xdbacl_host + ,lower_port + ,upper_port + ,grantee + ,privilege) + loop + script_put_line(fh, 'begin'); + script_put_line(fh, ' DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE'); + script_put_line(fh, ' (host => ''' || buf2.acl_host || ''''); + if upper(buf2.privilege) != 'RESOLVE' + then + -- Oracle 12c Release 1 Database PL/SQL Packages and Types Reference + -- 101 DBMS_NETWORK_ACL_ADMIN + -- An ACE with a "resolve" privilege can be appended only to a host''s ACL without a port range. + script_put_line(fh, ' ,lower_port => ' || nvl(to_char(buf2.lower_port),'NULL')); + script_put_line(fh, ' ,upper_port => ' || nvl(to_char(buf2.upper_port),'NULL')); + end if; + script_put_line(fh, ' ,ace => xs$ace_type'); + script_put_line(fh, ' (privilege_list => xs$name_list(''' || buf2.privilege || ''')'); + script_put_line(fh, ' ,granted => TRUE'); + script_put_line(fh, ' ,inverted => FALSE'); + script_put_line(fh, ' ,principal_name => ''' || buf2.principal || ''''); + script_put_line(fh, ' ,principal_type => xs_acl.ptype_db'); + script_put_line(fh, ' ,start_date => NULL'); + script_put_line(fh, ' ,end_date => NULL));'); + script_put_line(fh, 'end;'); + script_put_line(fh, '/'); + script_put_line(fh, ''); + end loop; + end if; + script_put_line(fh, 'begin'); + script_put_line(fh, ' DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE'); + script_put_line(fh, ' (host => ''' || buff.acl_host || ''''); + if upper(buff.privilege) != 'RESOLVE' + then + -- Oracle 12c Release 1 Database PL/SQL Packages and Types Reference + -- 101 DBMS_NETWORK_ACL_ADMIN + -- An ACE with a "resolve" privilege can be appended only to a host''s ACL without a port range. + script_put_line(fh, ' ,lower_port => ' || nvl(to_char(buff.lower_port),'NULL')); + script_put_line(fh, ' ,upper_port => ' || nvl(to_char(buff.upper_port),'NULL')); + end if; + script_put_line(fh, ' ,ace => xs$ace_type'); + script_put_line(fh, ' (privilege_list => xs$name_list(''' || buff.privilege || ''')'); + script_put_line(fh, ' ,granted => TRUE'); + script_put_line(fh, ' ,inverted => FALSE'); + script_put_line(fh, ' ,principal_name => ''' || buff.principal || ''''); + script_put_line(fh, ' ,principal_type => xs_acl.ptype_db'); + script_put_line(fh, ' ,start_date => NULL'); + script_put_line(fh, ' ,end_date => NULL));'); + script_put_line(fh, 'end;'); + script_put_line(fh, '/'); + script_put_line(fh, ''); + end loop; + if script_is_open(fh) + then + script_put_line(fh, 'set define on'); + script_close(fh); + end if; +end cr_acl; + +------------------------------------------------------------ +-- Create Advanced Queues +procedure cr_aq +is + -- + -- The following comments are applicable for AQ Notifications (Subscribers) + -- + --TYPE aq$_agent AS OBJECT + --( name varchar2(30), -- M_IDEN, name of a message producer or consumer + -- address varchar2(1024), -- address where message must be sent + -- protocol number) -- protocol for communication, must be 0 + -- + --TYPE aq$_reg_info AS OBJECT ( + -- name VARCHAR2(128), -- name of the subscription + -- namespace NUMBER, -- namespace of the subscription + -- callback VARCHAR2(4000), -- callback function + -- context RAW(2000), -- context for the callback func. + -- *** anyctx *** SYS.ANYDATA, -- anydata ctx for callback func + -- ctxtype NUMBER, -- raw/anydata context + -- qosflags NUMBER, -- QOS flags + -- payloadcbk VARCHAR2(4000), -- payload callback + -- timeout NUMBER, -- registration expiration + -- ntfn_grouping_class NUMBER, -- ntfn grouping class + -- ntfn_grouping_value NUMBER, -- ntfn grouping value + -- ntfn_grouping_type NUMBER, -- ntfn grouping type + -- ntfn_grouping_start_time TIMESTAMP WITH TIME ZONE, -- grp start time + -- ntfn_grouping_repeat_count NUMBER) -- ntfn grp repeat count + -- + -- Not Implementing "anyctx" + -- "anyctx" is for Streams Only: + --https://docs.oracle.com/database/121/REFRN/GUID-0976B325-BCA0-4205-9E3A-0E9D88BA1FDD.htm#REFRN23657 + -- Streams is Deprecated: + --https://docs.oracle.com/database/121/UPGRD/deprecated.htm#UPGRD60159 + -- ' ,anyctx => ''' || case sys.ANYDATA.gettypename(any_context) + -- when null + -- then 'NULL' + -- when 'NUMBER' + -- then 'ConvertNumber(num => to_number(''' || + -- to_char(sys.ANYDATA.AccessNumber(any_context)) || '''))' + -- when 'DATE' + -- then 'ConvertDate(dat => to_date(''' || + -- to_char(sys.ANYDATA.AccessDate(any_context) + -- ,'DD-MON-YYYY HH24:MI:SS') || + -- ''',''DD-MON-YYYY HH24:MI:SS''))' + -- when 'CHAR' + -- then 'ConvertChar(c => CAST(''' || + -- sys.ANYDATA.AccessChar(any_context) || ''' as CHAR))' + -- when 'VARCHAR' + -- then 'ConvertVarchar(c => CAST(''' || + -- sys.ANYDATA.AccessVarchar(any_context) || ''' as VARCHAR))' + -- when 'VARCHAR2' + -- then 'ConvertVarchar2(c => CAST(''' || + -- sys.ANYDATA.AccessVarchar2(any_context) || ''' as VARCHAR2))' + -- when 'RAW' + -- then 'ConvertRaw(r => hextoraw(''' || + -- rawtohex(sys.ANYDATA.AccessRaw(any_context)) || '''))' + -- when 'BLOB' + -- then 'ConvertBlob(b => to_blob(hextoraw(''' || + -- dbms_lob.substr(sys.ANYDATA.AccessBlob(any_context) + -- ,32767,1) || ''')))' + -- when 'CLOB' + -- then 'ConvertClob(c => to_clob(''' || + -- dbms_lob.substr(sys.ANYDATA.AccessClob(any_context) + -- ,32767,1) || '''))' + -- when 'TIMESTAMP' + -- then 'ConvertTimestamp(ts => to_timestamp(''' || + -- to_char(sys.ANYDATA.AccessTimestamp(any_context) + -- ,'DD-MON-YYYY HH24:MI:SS.FF9') || + -- ''',''DD-MON-YYYY HH24:MI:SS.FF9''))' + -- when 'TIMESTAMP WITH TIME ZONE' + -- then 'ConvertTimestampTZ(ts => to_timestamp_tz(''' || + -- to_char(sys.ANYDATA.AccessTimestampTZ(any_context) + -- ,'DD-MON-YYYY HH24:MI:SS.FF9 TH:TM') || + -- ''',''DD-MON-YYYY HH24:MI:SS.FF9 TH:TM''))' + -- when 'TIMESTAMP WITH LOCAL TIME ZONE' + -- then 'ConvertTimestampLTZ(ts => CAST(to_timestamp_tz(''' || + -- to_timestamp_tz(sys.ANYDATA.AccessTimestampLTZ(any_context) + -- ,'DD-MON-YYYY HH24:MI:SS.FF9 TH:TM') || + -- ''',''DD-MON-YYYY HH24:MI:SS.FF9 TH:TM'')' || + -- ' as timestamp with local time zone))' + -- when 'INTERVAL YEAR TO MONTH' + -- then 'ConvertIntervalYM(inv => INTERVAL ''' || + -- to_char(sys.ANYDATA.AccessIntervalYM(any_context)) || + -- ' YEAR TO MONTH)' + -- when 'INTERVAL DAY TO SECOND' + -- then 'ConvertIntervalDS(inv => INTERVAL ''' || + -- to_char(sys.ANYDATA.AccessIntervalDS(any_context) + -- ,'DD HH24:MI:SS.FF') || + -- ' DAY TO SECOND)' + -- when 'BINARY_FLOAT' + -- then 'ConvertBFloat(fl => CAST(to_number(''' || + -- sys.ANYDATA.AccessBFloat(any_context) || ''') as BINARY_FLOAT))' + -- when 'BINARY_DOUBLE' + -- then 'ConvertBFloat(dbl => CAST(to_number(''' || + -- sys.ANYDATA.AccessBDouble(any_context) || ''') as BINARY_DOUBLE))' + -- when 'ROWID' + -- then 'ConvertURowid(rid => CHARTOROWID(''' || + -- ROWIDTOCHAR(sys.ANYDATA.AccessURowid(any_context)) || '''))' + -- -- BFILE Conversion not Implemented + -- --when 'BFILE' + -- --then 'ConvertBfile(b => BFILENAME ''' || + -- -- sys.ANYDATA.AccessBfile(any_context) || ''')' + -- -- Not Implemented, Characters should be stored in HEX + -- --when 'NCHAR' + -- --then 'ConvertNchar(nc => to_nchar(''' || + -- -- sys.ANYDATA.AccessNchar(any_context) || '''))' + -- -- Not Implemented, Characters should be stored in HEX + -- --when 'NVARCHAR2' + -- --then 'ConvertNVarchar2(nc => to_nchar(''' || + -- -- sys.ANYDATA.AccessNVarchar2(any_context) || '''))' + -- -- Not Implemented, Characters should be stored in HEX + -- --when 'NCLOB' + -- --then 'ConvertNClob(nc => to_nclob(''' || + -- -- sys.ANYDATA.AccessNClob(any_context) || '''))' + -- -- Also Not Implemented: + -- --ConvertObject(obj => "") + -- --ConvertObject(obj => "") + -- --ConvertRef(rf => REF "") + -- --ConvertCollection(col => "") + -- else 'ERROR: Unknown Datatype "' || context_type || '"' + -- end || LF || + -- + OTYPE CONSTANT varchar2(100) := 'QUEUE'; + fh sf_ptr_type; -- object script file handle +begin + for buf1 in (select obj.object_name QUEUE_NAME + ,obj.object_name || '.' || obj.ext FILE_NAME + ,obj.install_timing + from obj_install_object_tab obj + join dba_queues aq + on aq.owner = obj.object_owner + and aq.name = obj.object_name + and ( aq.queue_type is null + or aq.queue_type != 'EXCEPTION_QUEUE') + where obj.install_type = g_install_type + and obj.object_owner = g_schema_name + and obj.object_type = OTYPE + order by obj.object_name + ,obj.ext + ,obj.install_timing) + loop + fh := script_open(in_filename => buf1.file_name + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create ' || g_schema_name || '.' || buf1.queue_name || ' Queue'); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + if buf1.install_timing != 'CURRENT' + then + script_put_line(fh, ''); + script_put_line(fh, '-- NOTE: This is a "' || buf1.install_timing || '" Queue'); + end if; + script_put_line(fh, ''); + script_put_line(fh, '--DBMS_METADATA:' || g_schema_name || + '.' || buf1.queue_name ); + big_put_line(fh, g_schema_name || '.' || buf1.queue_name || ' Queue' + ,dbms_metadata.get_ddl(object_type => 'AQ_QUEUE' + ,name => buf1.queue_name + ,schema => g_schema_name) + ,common_util.MAX_SQL_LEN); + script_put_line(fh, '/'); + script_put_line(fh, ''); + script_put_line(fh, '-- Grants'); + -- Grant syntax does not support Advanced Queues + --get_object_grants(fh, buf1.queue_name, 'QUEUE'); + script_put_line(fh, ''); + for buf2 in (select grantee GRANTEE + ,privilege + ,max(grantable) GRANTABLE + from priv_obj_queue_view + where install_type = g_install_type + and install_type_selector = 'QUEUE' -- Grantee is installed before Queue + and queue_owner = g_schema_name + and queue_name = buf1.queue_name + group by grantee + ,privilege + order by grantee + ,privilege) + loop + script_put_line(fh, 'begin'); + script_put_line(fh, ' dbms_aqadm.grant_queue_privilege'); + script_put_line(fh, ' (privilege => ''' || buf2.privilege || '''' ); + script_put_line(fh, ' ,queue_name => ''"' || g_schema_name || '"."' || + buf1.queue_name || '"''' ); + script_put_line(fh, ' ,grantee => ''' || buf2.grantee || '''' ); + if buf2.grantable = 'YES' + then + script_put_line(fh, ' ,grant_option => TRUE);'); + else + script_put_line(fh, ' ,grant_option => FALSE);'); + end if; + script_put_line(fh, 'end;'); + script_put_line(fh, '/'); + end loop; + get_synonyms(fh, buf1.queue_name, 'QUEUE', common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '-- Subscribe'); + script_put_line(fh, ''); + for buf3 in ( + select queue_owner -- Owner of the queue + ,queue_name -- Name of the queue + ,consumer_name -- Name of the subscriber + ,address -- Address of the subscriber + ,protocol -- Protocol of the subscriber + ,rule -- Rule condition for the subscriber + ,transformation -- Transformation for the subscriber + ,queue_to_queue -- Is subscriber is a queue-to-queue subscriber? + ,delivery_mode -- Message delivery mode: PERSISTENT, BUFFERED, or PERSISTENT_OR_BUFFERED + ,install_type_selector + from priv_queue_subscribe_view + where install_type = g_install_type + and install_type_selector = 'QUEUE' + and queue_owner = g_schema_name + and queue_name = buf1.queue_name + order by queue_owner + ,queue_name + ,consumer_name) + loop + script_put_line(fh, '-- This is a "' || buf3.install_type_selector || '" Queue Subscription'); + script_put_line(fh, 'begin'); + script_put_line(fh, ' dbms_aqadm.add_subscriber'); + script_put_line(fh, ' (queue_name => ''' || buf3.queue_owner || + '.' || buf3.queue_name || ''''); + script_put_line(fh, ' ,subscriber => sys.aq$_agent'); + script_put_line(fh, ' (name => ''' || buf3.consumer_name || ''''); + script_put_line(fh, ' ,address => ''' || buf3.address || ''''); + script_put_line(fh, ' ,protocol => ' || buf3.protocol || ')'); + script_put_line(fh, ' ,rule => ''' || buf3.rule || ''''); + script_put_line(fh, ' ,transformation => ''' || buf3.transformation || ''''); + script_put_line(fh, ' ,queue_to_queue => ' || buf3.queue_to_queue ); + script_put_line(fh, ' ,delivery_mode => DBMS_AQADM.' || buf3.delivery_mode || ');'); + script_put_line(fh, 'end;'); + script_put_line(fh, '/'); + script_put_line(fh, ''); + end loop; + script_put_line(fh, ''); + script_put_line(fh, '-- Register'); + script_put_line(fh, ''); + -- https://docs.oracle.com/database/121/REFRN/GUID-0976B325-BCA0-4205-9E3A-0E9D88BA1FDD.htm#REFRN23657 + for buf4 in ( + select subscription_name -- Name of the subscription registration of the form schema.queue:consumer_name + ,namespace -- Namespace of the subscription registration: ANONYMOUS, AQ, or DBCHANGE + ,location_name -- Location endpoint of the registration + ,user_context -- Context the user provided during registration of PL/SQL registrations + ,qosflags -- Quality of service of the registration: RELIABLE, PAYLOAD, or PURGE_ON_NTFN + ,timeout -- Registration timeout + ,ntfn_grouping_class -- Notification grouping class + ,ntfn_grouping_value -- Notification grouping value + ,ntfn_grouping_type -- Notification grouping type: SUMMARY or LAST + ,ntfn_grouping_start_time -- Notification grouping start time + ,ntfn_grouping_repeat_count -- Notification grouping repeat count, or FOREVER + ,context_size -- Size of the context + from priv_queue_register_view -- grant SELECT on "SYS"."DBA_SUBSCR_REGISTRATIONS" to "ODBCAPTURE"; + where queue_install_type = g_install_type + and regexp_like (subscription_name, '^["]{0,1}' || -- Zero or One Double Quotes at the begining + g_schema_name || + '["]{0,1}[.]["]{0,1}' || -- Zero or One Double Quotes, a Period, and Zero or One Double Quotes + buf1.queue_name ) + order by subscription_name + ,namespace) + loop + -- Advanced Queue Registrations are "QUEUE" only. + script_put_line(fh, 'begin'); + script_put_line(fh, ' dbms_aq.register'); + script_put_line(fh, ' (reg_list => sys.aq$_reg_info_list'); + script_put_line(fh, ' (sys.aq$_reg_info'); + script_put_line(fh, ' (name => ''' || buf4.subscription_name || ''''); + script_put_line(fh, ' ,namespace => DBMS_AQ.NAMESPACE_' || to_char(buf4.namespace)); + script_put_line(fh, ' ,callback => ''' || buf4.location_name || ''''); + script_put_line(fh, ' ,context => hextoraw(''' || rawtohex(buf4.user_context) || ''')'); + if buf4.qosflags is not null + AND buf4.timeout is not null + then + script_put_line(fh, ' ,qosflags => ' || to_char(buf4.qosflags)); + script_put_line(fh, ' ,timeout => ' || to_char(buf4.timeout)); + if buf4.ntfn_grouping_class is not null + AND buf4.ntfn_grouping_value is not null + AND buf4.ntfn_grouping_type is not null + AND buf4.ntfn_grouping_start_time is not null + AND buf4.ntfn_grouping_repeat_count is not null + then + script_put_line(fh, ' ,ntfn_grouping_class => ' || to_char(buf4.ntfn_grouping_class)); + script_put_line(fh, ' ,ntfn_grouping_value => ' || to_char(buf4.ntfn_grouping_value)); + script_put_line(fh, ' ,ntfn_grouping_type => ' || to_char(buf4.ntfn_grouping_type)); + script_put_line(fh, ' ,ntfn_grouping_start_time => ' || 'to_timstamp_tz(' || + to_char(buf4.ntfn_grouping_start_time + ,'DD-MON-YYYY HH24:MI:SS.FF9 TH:TM') || + ',''DD-MON-YYYY HH24:MI:SS.FF9 TH:TM'')' || ' )'); + script_put_line(fh, ' ,ntfn_grouping_repeat_count => ' || to_char(buf4.ntfn_grouping_repeat_count)); + end if; + end if; + script_put_line(fh, ' ) )'); + script_put_line(fh, ' ,reg_count => ' || nvl(to_char(buf4.context_size),'NULL') || ' );'); + script_put_line(fh, 'end;'); + script_put_line(fh, '/'); + script_put_line(fh, ''); + end loop; + script_put_line(fh, ''); + script_put_line(fh, '-- Schedule'); + script_put_line(fh, ''); + -- https://docs.oracle.com/database/121/REFRN/GUID-65C3B9EB-BFD5-4BAB-A810-D0B705E92DCA.htm + for buf5 in ( + select schema -- Source queue owner + ,qname -- Source queue name + ,destination -- Destination name, currently limited to be a DBLINK name + ,start_date -- Date at which to start propagation + ,propagation_window -- Duration for the propagation window (in seconds) + ,next_time -- Function to compute the start of the next propagation window + ,latency -- Maximum wait time to propagate a message during the propagation window + from dba_queue_schedules + where schema = g_schema_name + and qname = buf1.queue_name + order by schema + ,qname) + loop + script_put_line(fh, 'begin'); + script_put_line(fh, ' dbms_aqadm.schedule_propagation'); + script_put_line(fh, ' (queue_name => ''"' || buf5.schema || '"."' || + buf5.qname || '"''' ); + script_put_line(fh, ' ,destination => ''' || buf5.destination || '''' ); + script_put_line(fh, ' ,start_time => to_date(''' || to_char(buf5.start_date + ,'DD-MON-YYYY HH24:MI:SS') || + ''', ''DD-MON-YYYY HH24:MI:SS'')'); + script_put_line(fh, ' ,duration => ' || buf5.propagation_window ); + script_put_line(fh, ' ,next_time => ''' || buf5.next_time || '''' ); + script_put_line(fh, ' ,latency => ' || buf5.latency); + script_put_line(fh, ' ,destination_queue => NULL);'); + script_put_line(fh, 'end;'); + script_put_line(fh, '/'); + script_put_line(fh, ''); + end loop; + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + end loop; +end cr_aq; + +------------------------------------------------------------ +-- Create Advanced Queue Tables +procedure cr_aqt +is + OTYPE CONSTANT varchar2(100) := 'QUEUE_TABLE'; + fh sf_ptr_type; -- object script file handle + gsm_save varchar2(128); +begin + for buff in (select aqt.queue_table + ,aqt.queue_table || '.' || otyp.ext FILE_NAME + ,obj.object_name + ,obj.object_type + ,obj.install_timing + from dba_queue_tables aqt + join otype_conf otyp + on otyp.install_otype = OTYPE + join obj_install_object_tab obj + on obj.install_type = g_install_type + and obj.object_owner = aqt.owner + and obj.object_name = aqt.queue_table + and obj.object_type in ('TABLE','VIEW') + where aqt.owner = g_schema_name + order by aqt.queue_table) + loop + fh := script_open(in_filename => buff.file_name + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create ' || g_schema_name || '.' || buff.queue_table ||' Queue Table'); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + if buff.install_timing != 'CURRENT' + then + script_put_line(fh, ''); + script_put_line(fh, '-- NOTE: This is a "' || buff.install_timing || '" Queue Table'); + end if; + script_put_line(fh, ''); + script_put_line(fh, '--DBMS_METADATA:' || g_schema_name || + '.' || buff.queue_table); + -- DBMS_METADATA throws an error when LOB_STORAGE is set to DEFAULT or BASICFILE for AQ_QUEUE_TABLE + rem_qt_storage(fh, g_schema_name || '.' || buff.queue_table || ' Table' + ,dbms_metadata.get_ddl(object_type => 'AQ_QUEUE_TABLE' + ,name => buff.queue_table + ,schema => g_schema_name) + ,common_util.MAX_SQL_LEN); + script_put_line(fh, '/'); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- The queue table owner must be granted EXECUTE privileges on the'); + script_put_line(fh, '-- DBMS_AQADM package. Otherwise, the Oracle Database snapshot'); + script_put_line(fh, '-- processes do not propagate, but generates trace files with the'); + script_put_line(fh, '-- error identifier SYS.DBMS_AQADM not defined'); + script_put_line(fh, '--'); + get_object_grants(fh, buff.queue_table, buff.object_type); + get_synonyms(fh, buff.queue_table, buff.object_type, common_util.MAX_SQL_LEN); + for buf2 in ( + select obj.object_name, + obj.object_type + from dba_objects_tab obj + where obj.object_owner = g_schema_name + and obj.object_type in ('TABLE','VIEW') + -- MUST be more discriminating than "obj.object_name like 'AQ$%' || buf1.queue_table || '%'" + and regexp_like(obj.object_name, common_util.QUEUE_NAME_PREFIX_REGEXP || buff.queue_table || common_util.QUEUE_NAME_SUFFIX_REGEXP) + order by obj.object_name, + obj.object_type) + loop + script_put_line(fh, ''); + script_put_line(fh, ' -- ' || buf2.object_name || ' ' || buf2.object_type); + script_put_line(fh, ''); + get_object_grants(fh, buf2.object_name, buf2.object_type); + get_synonyms(fh, buf2.object_name, buf2.object_type, common_util.MAX_SQL_LEN); + end loop; + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + end loop; +end cr_aqt; + +------------------------------------------------------------ +-- Common Create Procedure. Only used for: +-- -) FUNCTION +-- -) PACKAGE_BODY +-- -) PACKAGE_SPEC +-- -) PROCEDURE +-- -) SCHEDULER_JOB +-- -) SCHEDULER_PROGRAM +-- -) SCHEDULER_SCHEDULE +-- -) SEQUENCE +-- -) TYPE_BODY +-- -) TYPE_SPEC +procedure cr_common + (in_OTYPE in varchar2 + ,in_type_name in varchar2) +is + fh sf_ptr_type; -- object script file handle +begin + for buff in (select obj.object_name OBJECT_NAME + ,obj.object_name || '.' || obj.ext FILE_NAME + ,obj.install_timing + ,obj.object_type + from obj_install_object_tab obj + where obj.install_type = g_install_type + and obj.object_owner = g_schema_name + and obj.install_otype = in_OTYPE + and ( obj.install_otype != 'SCHEDULER_JOB' + -- MV Scheduler Jobs: Skip here and recreate with Materialized Views + or ( obj.object_name not like 'MV\_RF$J\_%' escape '\' + AND obj.object_name not like 'DBMS\_JOB$\_%' escape '\' ) ) + and ( obj.install_otype != 'SEQUENCE' + or ( -- Queue Sequences: Skip here and recreate with Advanced Queues + not exists (select 'x' from dba_queue_tables qt + where qt.owner = g_schema_name + and regexp_like(obj.object_name,common_util.QUEUE_NAME_PREFIX_REGEXP || + qt.queue_table || + common_util.QUEUE_NAME_SUFFIX_REGEXP ) ) + -- Identity Sequences: Auto-created with Tables + and obj.object_name not in (select dti.sequence_name from dba_tab_identity_cols dti + where dti.owner = obj.object_owner) ) ) + and ( obj.install_otype not in ('TYPE_BODY', 'TYPE_SPEC') + or ( -- Pipelined Type Objects: Skip here and recreate with pipelined package/function + obj.object_name not like common_util.PIPELINE_TYPE_MATCH escape '\' + -- Unknown type specifications, table of numbers, no dependencies + and obj.object_name not like common_util.SYS_TYPE_SPEC_BODY_MATCH escape '\') ) + order by object_name) + loop + fh := script_open(in_filename => buff.file_name + ,in_otype => in_OTYPE + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create ' || g_schema_name || '.' || buff.OBJECT_NAME ||' ' || in_type_name); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + if buff.install_timing != 'CURRENT' + then + script_put_line(fh, ''); + script_put_line(fh, '-- Note: This is a "' || buff.install_timing || '" ' || buff.object_type); + end if; + script_put_line(fh, ''); + script_put_line(fh, '--DBMS_METADATA:' || g_schema_name || + '.' || buff.OBJECT_NAME); + big_put_line(fh, g_schema_name || '.' || buff.OBJECT_NAME || ' ' || in_type_name + ,COMMON_UTIL.escape_at_sign + (dbms_metadata.get_ddl + (object_type => case in_OTYPE + -- https://logbuffer.wordpress.com/2014/03/13/oracle-getting-the-ddl-for-scheduler-jobs + when 'SCHEDULER_JOB' then 'PROCOBJ' + when 'SCHEDULER_PROGRAM' then 'PROCOBJ' + when 'SCHEDULER_SCHEDULE' then 'PROCOBJ' + else in_OTYPE + end + ,name => buff.OBJECT_NAME + ,schema => g_schema_name) ) + ,common_util.MAX_SQL_LEN); + if buff.object_type not in ('PACKAGE BODY', 'TYPE BODY') + then + script_put_line(fh, ''); + get_object_grants(fh, buff.OBJECT_NAME, buff.object_type); + get_synonyms(fh, buff.OBJECT_NAME, buff.object_type, common_util.MAX_SQL_LEN); + end if; + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + end loop; +end cr_common; + +------------------------------------------------------------ +-- Create Consolidated Data Load +procedure cr_cdl +is + OTYPE CONSTANT varchar2(100) := 'DATA_LOAD'; + F_DATE CONSTANT varchar2(100) := 'DD-MON-YYYY HH24:MI:SS'; + F_TSTTZ CONSTANT varchar2(100) := 'DD-MON-YYYY HH24:MI:SS.FF TZH:TZM'; + F_TST CONSTANT varchar2(100) := 'DD-MON-YYYY HH24:MI:SS.FF'; + F_IDTOS CONSTANT varchar2(100) := 'DD HH24:MI:SS.FF'; + fh sf_ptr_type; -- object script file handle + lc varchar2(100); -- Lead characters for column list + sql_txt varchar2(32767); + desc_tab dbms_sql.desc_tab3; + dyn_curs integer; + dyn_stat integer; + num_cols number := 0; + col_err number; + col_len integer; + junk integer; + -- + -- From SYS.DBMS_SQL Package Specification, Named Datatype CONSTANTS + -- + -- User_Defined_Type is Data Type ID 109. Requires col_type_name + -- and col_type_name_len from DBMS_SQL.DESC_REC3 Record Type + -- + -- Ref_Type is Data Type ID 111. Requires a declared "object type". + -- + vc2_buff varchar2(32767); -- Data Type ID 1 + char_buff char(32767); -- Data Type ID 96 + -- + num_buff number; -- Data Type ID 2 + --bfloat_buff binary_double; -- Data Type ID 101 + --float_buff binary_float; -- Data Type ID 100 + -- + date_buff date; -- Data Type ID 12 + tstmp_buff timestamp(9); -- Data Type ID 180 + tstmptz_buff timestamp(9) with time zone; -- Data Type ID 181 + tstmpltz_buff timestamp(9) with local time zone; -- Data Type ID 231 + intvlds_buff interval day(9) to second(9); -- Data Type ID 183 + --intvlym_buff interval year to month; -- Data Type ID 182 + -- + clob_buff clob; -- Data Type ID 112 + xml_buff xmltype; -- Data Type ID 109, XMLTYPE + blob_buff blob; -- Data Type ID 113 + --bfile_buff bfile; -- Data Type ID 114 + --long_buff long; -- Data Type ID 8 + --lraw_buff long raw; -- Data Type ID 24 + -- + --mlslbl_buff mlslabel; -- Data Type ID 106 + raw_buff raw(32767); -- Data Type ID 23 + --rowid_buff rowid; -- Data Type ID 11 + --urowid_buff urowid; -- Data Type ID 208 + -- + procedure show_col_err + (in_table_name in varchar2 + ,in_col_type in varchar2 + ,in_i in number) + is + begin + -- 1405 is zero length value retrieved? + if nvl(col_err,0) not in (0, 1405) + then + dbms_output.put_line('COL_ERR is not 0 or 5 in' || + ' INSTALL_TYPE ' || g_install_type || + ', table ' || g_schema_name || + '.' || in_table_name || + ', ' || in_col_type || + ' column ' || desc_tab(in_i).col_name || + ', length ' || col_len || + ': ' || col_err ); + end if; + end show_col_err; + -- + procedure utf_put_clob + is + ptr integer := 1; + loc integer; + begin + loop + -- Find a linefeed in the CLOB_BUFF + loc := instr(clob_buff, LF, ptr); + exit when loc = 0; + if substr(clob_buff, loc-1, 1) = CRTN + then + script_put(fh, substr(clob_buff, ptr, loc-ptr)); + else + script_put(fh, substr(clob_buff, ptr, loc-ptr+1)); + end if; + ptr := loc+1; + end loop; + -- There should always be a Double Quote at the end of the clob_buff. + script_put(fh, substr(clob_buff, ptr)); + end utf_put_clob; + -- + function b64_encode + (in_blob in BLOB) + return CLOB + is + SPLIT_LEN constant pls_integer := 21843; -- Must be divisible by 3 + l_clob clob; + len_blob pls_integer; + ptr pls_integer; + begin + if in_blob is null then return null; end if; + len_blob := length(in_blob); + if len_blob = 0 then return empty_clob(); end if; + dbms_lob.createtemporary(l_clob, true); + dbms_lob.append(l_clob, common_util.B64_ENCODE_HEADER || chr(10)); + ptr := 1; + while ptr <= len_blob + loop + dbms_lob.append(l_clob + ,to_char(UTL_ENCODE.BASE64_ENCODE(dbms_lob.substr(in_blob + ,SPLIT_LEN + ,ptr + ) ) + ,nls_charset_id('US7ASCII') + ) ); + ptr := ptr + SPLIT_LEN; + end loop; + return l_clob || CHR(10); + end b64_encode; + -- +begin + for tabs in + (select table_name TABLE_NAME + ,table_name || '.' || ext FILE_NAME + ,table_name || '.' || ext2 CTL_FILE + ,table_name || '.' || ext3 DAT_FILE + ,table_name || '.log' LOG_FILE + ,before_select_sql + ,where_clause + ,order_by_columns + ,after_order_by_sql + ,install_timing + from obj_install_data_load_tab sdvw + where install_type = g_install_type + and table_owner = g_schema_name + and install_otype = OTYPE + order by table_name) + loop + -- + -- DBMS_SQL Open, Parse, Describe + if tabs.before_select_sql is not null + then + sql_txt := tabs.before_select_sql || LF; + else + sql_txt := ''; + end if; + -- + sql_txt := sql_txt || 'select * from "' || g_schema_name || '"' || + '."' || tabs.table_name || '"' ; + -- + if tabs.where_clause is not null + then + sql_txt := sql_txt || LF || 'where ' || tabs.where_clause; + end if; + -- ORDER_BY_COLUMNS is a required field + sql_txt := sql_txt || LF || 'order by ' || tabs.order_by_columns; + -- + if tabs.after_order_by_sql is not null + then + sql_txt := sql_txt || LF || tabs.after_order_by_sql; + end if; + -- + --dbms_output.put_line('--'); + --dbms_output.put_line(sql_txt || ';'); + dyn_curs := dbms_sql.open_cursor; + dbms_sql.parse(c => dyn_curs + ,statement => sql_txt + ,language_flag => dbms_sql.native ); + dbms_sql.describe_columns3(c => dyn_curs + ,col_cnt => num_cols + ,desc_t => desc_tab ); + -- + -- Control File Setup + fh := script_open(in_filename => tabs.ctl_file + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_LDR_LEN); + script_put_line(fh, 'OPTIONS (SKIP=1)'); + script_put_line(fh, 'LOAD DATA'); + script_put_line(fh, 'APPEND INTO TABLE "' || g_schema_name || '"."' || tabs.table_name || '"'); + script_put_line(fh, 'FIELDS CSV WITH EMBEDDED'); + script_put_line(fh, 'TRAILING NULLCOLS'); + -- + -- Add Column Specifications and Bind Variable to Dynamic Cursor + lc := ' ('; -- Lead characters on the first line + for i in 1 .. num_cols + loop + case + when desc_tab(i).col_type = DBMS_SQL.VARCHAR2_TYPE + then + script_put_line(fh, lc || common_util.old_rpad(desc_tab(i).col_name,30) || + ' CHAR(' || desc_tab(i).col_max_len || ')'); + dbms_sql.define_column(c => dyn_curs + ,position => i + ,column => vc2_buff + ,column_size => desc_tab(i).col_max_len); + -- + when desc_tab(i).col_type = DBMS_SQL.CHAR_TYPE + then + script_put_line(fh, lc || common_util.old_rpad(desc_tab(i).col_name,30) || + ' CHAR(' || desc_tab(i).col_max_len || ')'); + dbms_sql.define_column_char(c => dyn_curs + ,position => i + ,column => char_buff + ,column_size => desc_tab(i).col_max_len); + -- + when desc_tab(i).col_type = DBMS_SQL.NUMBER_TYPE + then + script_put_line(fh, lc || common_util.old_rpad(desc_tab(i).col_name,30) || + ' FLOAT EXTERNAL' ); + dbms_sql.define_column(c => dyn_curs + ,position => i + ,column => num_buff); + -- + when desc_tab(i).col_type = DBMS_SQL.DATE_TYPE + then + script_put_line(fh, lc || common_util.old_rpad(desc_tab(i).col_name,30) || + ' DATE ''' || F_DATE || ''''); + dbms_sql.define_column(c => dyn_curs + ,position => i + ,column => date_buff); + -- + when desc_tab(i).col_type = DBMS_SQL.TIMESTAMP_TYPE + then + script_put_line(fh, lc || common_util.old_rpad(desc_tab(i).col_name,30) || + ' TIMESTAMP ''' || F_TST || ''''); + dbms_sql.define_column(c => dyn_curs + ,position => i + ,column => tstmp_buff); + -- + when desc_tab(i).col_type = DBMS_SQL.TIMESTAMP_WITH_TZ_TYPE + then + script_put_line(fh, lc || common_util.old_rpad(desc_tab(i).col_name,30) || + ' TIMESTAMP WITH TIME ZONE ''' || F_TSTTZ || ''''); + dbms_sql.define_column(c => dyn_curs + ,position => i + ,column => tstmptz_buff); + -- + when desc_tab(i).col_type = DBMS_SQL.TIMESTAMP_WITH_LOCAL_TZ_TYPE + then + script_put_line(fh, lc || common_util.old_rpad(desc_tab(i).col_name,30) || +' TIMESTAMP WITH LOCAL TIME ZONE ''' || F_TST || ''''); + dbms_sql.define_column(c => dyn_curs + ,position => i + ,column => tstmpltz_buff); + -- + when desc_tab(i).col_type = DBMS_SQL.INTERVAL_DAY_TO_SECOND_TYPE + then + script_put_line (fh, lc || common_util.old_rpad(desc_tab(i).col_name,30) || + ' INTERVAL DAY TO SECOND' ); -- Don't use F_IDTOS + dbms_sql.define_column(c => dyn_curs + ,position => i + ,column => intvlds_buff); + -- + when desc_tab(i).col_type = DBMS_SQL.BLOB_TYPE + then + script_put_line(fh, ' -- BLOB data must be decoded from Base64 after loading'); + script_put_line(fh, lc || common_util.old_rpad(desc_tab(i).col_name,30) || + ' CHAR(1572864)' ); -- 1048576 * 1.5 + dbms_sql.define_column(c => dyn_curs + ,position => i + ,column => blob_buff); + -- + when desc_tab(i).col_type = DBMS_SQL.CLOB_TYPE + then + script_put_line(fh, lc || common_util.old_rpad(desc_tab(i).col_name,30) || + ' CHAR(1048576)' ); + dbms_sql.define_column(c => dyn_curs + ,position => i + ,column => clob_buff); + -- + when desc_tab(i).col_type = DBMS_SQL.USER_DEFINED_TYPE + and desc_tab(i).col_type_name = 'XMLTYPE' + then + script_put_line(fh, lc || common_util.old_rpad(desc_tab(i).col_name,30) || + ' CHAR(1048576)' ); + dbms_sql.define_column(c => dyn_curs + ,position => i + ,column =>xml_buff); + -- + when desc_tab(i).col_type = DBMS_SQL.RAW_TYPE + then + script_put_line(fh, lc || common_util.old_rpad(desc_tab(i).col_name,30) || + ' CHAR(32767)' ); + dbms_sql.define_column_raw(c => dyn_curs + ,position => i + ,column => raw_buff + ,column_size => desc_tab(i).col_max_len); + -- + else + raise_application_error(-20000, 'Unknown DBMS_SQL DESC_TAB3 col_type ' || desc_tab(i).col_type || + ', col_type_name ' || desc_tab(i).col_type_name || + ' for column ' || desc_tab(i).col_name || + ' in table ' || g_schema_name || '.' || tabs.table_name); + -- + end case; + lc := ' ,'; -- Lead characters after the first line + end loop; + -- + script_put_line(fh, ' )'); + script_close(fh); + -- + -- Setup the Data File + fh := script_open(in_filename => tabs.dat_file + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_LDR_LEN); + -- + -- Write the column header + lc := ''; -- No lead characters on the first column + for i in 1 .. num_cols + loop + -- Simply a comma delimited list of column names + script_put(fh, lc || '"' || desc_tab(i).col_name || '"'); + lc := ','; -- Add comma after the first column + end loop; + script_new_line(fh); + -- + -- Fetch the Records + -- The return from execute is undefined for queries + junk := dbms_sql.execute(dyn_curs); + while dbms_sql.fetch_rows(dyn_curs) > 0 + loop + -- + -- Add the data + lc := ''; -- No lead characters on the first column + for i in 1 .. num_cols + loop + case + when desc_tab(i).col_type = DBMS_SQL.VARCHAR2_TYPE + then + dbms_sql.column_value(c => dyn_curs + ,position => i + ,value => vc2_buff + ,column_error => col_err + ,actual_length => col_len); + -- VARCHAR2, CHAR, and CLOB use the same format + show_col_err(tabs.table_name, 'VARCHAR2', i); + script_put(fh, lc); + if vc2_buff is not null + then + clob_buff := '"' || replace(vc2_buff,'"','""') || '"'; + utf_put_clob; + end if; + -- + when desc_tab(i).col_type = DBMS_SQL.CHAR_TYPE + then + dbms_sql.column_value_char(c => dyn_curs + ,position => i + ,value => char_buff + ,column_error => col_err + ,actual_length => col_len); + -- VARCHAR2, CHAR, and CLOB use the same script_put format + show_col_err(tabs.table_name, 'CHAR', i); + script_put(fh, lc); + if char_buff is not null + then + clob_buff := '"' || replace(substr(char_buff, 1, col_len) + ,'"','""') || '"'; + utf_put_clob; + end if; + -- + when desc_tab(i).col_type = DBMS_SQL.CLOB_TYPE + then + dbms_sql.column_value(c => dyn_curs + ,position => i + ,value => clob_buff); + -- VARCHAR2, CHAR, and CLOB use the same script_put format + script_put(fh, lc); + if clob_buff is not null + then + clob_buff := '"' || replace(clob_buff,'"','""') || '"'; + utf_put_clob; + end if; + -- + when desc_tab(i).col_type = DBMS_SQL.NUMBER_TYPE + then + dbms_sql.column_value(c => dyn_curs + ,position => i + ,value => num_buff + ,column_error => col_err + ,actual_length => col_len); + show_col_err(tabs.table_name, 'NUMBER', i); + script_put(fh, lc || to_char(num_buff)); + -- + when desc_tab(i).col_type = DBMS_SQL.DATE_TYPE + then + dbms_sql.column_value(c => dyn_curs + ,position => i + ,value => date_buff + ,column_error => col_err + ,actual_length => col_len); + show_col_err(tabs.table_name, 'DATE', i); + script_put(fh, lc); + if date_buff is not null + then + script_put(fh, '"' || to_char(date_buff, F_DATE) || '"'); + end if; + -- + when desc_tab(i).col_type = DBMS_SQL.TIMESTAMP_TYPE + then + dbms_sql.column_value(c => dyn_curs + ,position => i + ,value => tstmp_buff); + script_put(fh, lc); + if tstmp_buff is not null + then + script_put(fh, '"' || to_char(tstmp_buff, F_TST) || '"'); + end if; + -- + when desc_tab(i).col_type = DBMS_SQL.TIMESTAMP_WITH_TZ_TYPE + then + dbms_sql.column_value(c => dyn_curs + ,position => i + ,value => tstmptz_buff); + script_put(fh, lc); + if tstmptz_buff is not null + then + script_put(fh, '"' || to_char(tstmptz_buff, F_TSTTZ) || '"'); + end if; + -- + when desc_tab(i).col_type = DBMS_SQL.TIMESTAMP_WITH_LOCAL_TZ_TYPE + then + dbms_sql.column_value(c => dyn_curs + ,position => i + ,value => tstmpltz_buff); + script_put(fh, lc); + if tstmpltz_buff is not null + then + script_put(fh, '"' || to_char(tstmpltz_buff, F_TST) || '"'); + end if; + -- + when desc_tab(i).col_type = DBMS_SQL.INTERVAL_DAY_TO_SECOND_TYPE + then + dbms_sql.column_value(c => dyn_curs + ,position => i + ,value => intvlds_buff); + script_put(fh, lc); + if intvlds_buff is not null + then + script_put(fh, '"' || to_char(intvlds_buff, F_IDTOS) || '"'); + end if; + -- + when desc_tab(i).col_type = DBMS_SQL.USER_DEFINED_TYPE + and desc_tab(i).col_type_name = 'XMLTYPE' + then + dbms_sql.column_value(c => dyn_curs + ,position => i + ,value => xml_buff); + script_put(fh, lc); + if xml_buff is not null + then + clob_buff := '"' || COMMON_UTIL.clob_replace + (xmltype.getClobVal(xml_buff) + ,'"','""') || '"'; + utf_put_clob; + end if; + -- + when desc_tab(i).col_type = DBMS_SQL.BLOB_TYPE + then + dbms_sql.column_value(c => dyn_curs + ,position => i + ,value => blob_buff); + script_put(fh, lc); + if blob_buff is not null + then + -- Note: b64_encode inserts Line Feeds in the data + clob_buff := '"' || b64_encode(blob_buff) || '"'; + utf_put_clob; + end if; + -- + when desc_tab(i).col_type = DBMS_SQL.RAW_TYPE + then + dbms_sql.column_value_raw(c => dyn_curs + ,position => i + ,value => raw_buff + ,column_error => col_err + ,actual_length => col_len); + show_col_err(tabs.table_name, 'RAW', i); + script_put(fh, lc); + if raw_buff is not null + then + -- Note: b64_encode inserts Line Feeds in the data + clob_buff := '"' || b64_encode(raw_buff) || '"'; + utf_put_clob; + end if; + -- + else + raise_application_error(-20000, 'Unknown DBMS_SQL DESC_TAB3 col_type ' || desc_tab(i).col_type || + ', col_type_name ' || desc_tab(i).col_type_name || + ' for column ' || desc_tab(i).col_name || + ' in table ' || g_schema_name || '.' || tabs.table_name); + -- + end case; + lc := ','; -- Add comma after the first column + end loop; + -- + script_new_line(fh); + -- + end loop; + -- + script_close(fh); + -- + -- SQL Script Setup + fh := script_open(in_filename => tabs.file_name + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line (fh, '-- Consolidated Data Load script for ' || g_schema_name || + '.' || tabs.table_name || ' data'); + script_put_line(fh, '--'); + script_put_line(fh, '-- Command Line Parameters:'); + script_put_line(fh, '-- 1 - SYSTEM/password@TNSALIAS'); + script_put_line(fh, '-- i.e. pass the username and password for the SYSTEM user'); + script_put_line(fh, '-- and the TNSALIAS for the connection to the database.'); + script_put_line(fh, '-- The Data Load installation requires this connection information.'); + script_put_line(fh, '--'); + if tabs.install_timing != 'CURRENT' + then + script_put_line(fh, ''); + script_put_line(fh, '-- Note: This is a "' || tabs.install_timing || '" Consolidated Data Load'); + end if; + script_put_line(fh, ''); + script_put_line(fh, 'prompt'); + script_put_line(fh, 'prompt Disable Triggers and Foreign Keys'); + script_put_line(fh, 'declare'); + script_put_line(fh, ' procedure run_sql (in_sql in varchar2) is begin'); + script_put_line(fh, ' dbms_output.put_line(in_sql || '';'');'); + script_put_line(fh, ' execute immediate in_sql;'); + script_put_line(fh, ' exception when others then'); + script_put_line(fh, ' dbms_output.put_line(''-- '' || SQLERRM || CHR(10));'); + script_put_line(fh, ' end run_sql;'); + script_put_line(fh, 'begin'); + script_put_line(fh, ' for buff in (select owner, trigger_name'); + script_put_line(fh, ' from dba_triggers'); + script_put_line(fh, ' where table_owner = ''' || g_schema_name || ''''); + script_put_line(fh, ' and table_name = ''' || tabs.table_name || ''''); + script_put_line(fh, ' order by owner, trigger_name)'); + script_put_line(fh, ' loop'); + script_put_line(fh, ' run_sql(''alter trigger "'' || buff.owner || ''"'' ||'); + script_put_line(fh, ' ''."'' || buff.trigger_name || ''" DISABLE'');'); + script_put_line(fh, ' end loop;'); + script_put_line(fh, ' for buff in (select constraint_name'); + script_put_line(fh, ' from dba_constraints'); + script_put_line(fh, ' where constraint_type = ''R'''); + script_put_line(fh, ' and owner = ''' || g_schema_name || ''''); + script_put_line(fh, ' and table_name = ''' || tabs.table_name || ''''); + script_put_line(fh, ' order by owner, constraint_name)'); + script_put_line(fh, ' loop'); + script_put_line(fh, ' run_sql(''alter table "' || g_schema_name || '"."' || tabs.table_name || '"'' ||'); + script_put_line(fh, ' '' DISABLE constraint "'' || buff.constraint_name || ''"'');'); + script_put_line(fh, ' end loop;'); + script_put_line(fh, 'end;'); + script_put_line(fh, '/'); + script_put_line(fh, ''); + script_put_line(fh, '-- NOTE: Additional file extensions for SQL*Loader include'); + script_put_line(fh, '-- .bad - Bad Records'); + script_put_line(fh, '-- .dsc - Discard Records'); + script_put_line(fh, '-- .log - Log File'); + script_put_line(fh, ''); + script_put_line(fh, 'prompt'); + script_put_line(fh, 'prompt sqlldr_control=' || g_schema_name || '/' || tabs.ctl_file); + script_put_line(fh, 'host sqlldr ''&1.'' control=' || g_schema_name || '/' || tabs.ctl_file || + ' data=' || g_schema_name || '/' || tabs.dat_file || + ' log=' || g_schema_name || '/' || tabs.log_file || + ' silent=HEADER,FEEDBACK' ); + script_put_line(fh, ''); + script_put_line(fh, 'begin'); + script_put_line(fh, ' if ''&_RC.'' != ''0'' then'); + script_put_line(fh, ' raise_application_error(-20000, ''Control file "' || g_schema_name || '/' || tabs.ctl_file || + '" returned error: &_RC.'');' ); + script_put_line(fh, ' end if;'); + script_put_line(fh, 'end;'); + script_put_line(fh, '/'); + script_put_line(fh, ''); + + for i in 1 .. num_cols + loop + if desc_tab(i).col_type in (DBMS_SQL.BLOB_TYPE, DBMS_SQL.RAW_TYPE) + then + script_put_line(fh, 'declare'); + script_put_line(fh, ' l_blob blob;'); + script_put_line(fh, ' the_blob blob;'); + script_put_line(fh, ' procedure b64_decode'); + script_put_line(fh, ' (in_blob in BLOB)'); + script_put_line(fh, ' is'); + script_put_line(fh, ' B64_ENCODE_HEADER constant varchar2(30) := ''' || common_util.B64_ENCODE_HEADER || ''';'); + script_put_line(fh, ' SPLIT_LEN constant pls_integer := 32764; -- Must be divisible by 4'); + script_put_line(fh, ' header_txt varchar2(128);'); + script_put_line(fh, ' len_blob pls_integer;'); + script_put_line(fh, ' ptr pls_integer;'); + script_put_line(fh, ' begin'); + script_put_line(fh, ' dbms_lob.trim(l_blob, 0);'); + script_put_line(fh, ' dbms_lob.trim(the_blob, 0);'); + script_put_line(fh, ' ----------------------------------------'); + script_put_line(fh, ' -- Check incoming BLOB sizes (and return if needed)'); + script_put_line(fh, ' if in_blob is null then return; end if;'); + script_put_line(fh, ' len_blob := length(in_blob);'); + script_put_line(fh, ' if len_blob = 0 then return; end if;'); + script_put_line(fh, ' ----------------------------------------'); + script_put_line(fh, ' -- Check for B64_ENCODE_HEADER in in_BLOB'); + script_put_line(fh, ' header_txt := to_char(dbms_lob.substr(in_blob'); + script_put_line(fh, ' ,length(B64_ENCODE_HEADER)'); + script_put_line(fh, ' ,1)'); + script_put_line(fh, ' ,nls_charset_id(''US7ASCII''));'); + script_put_line(fh, ' if header_txt != B64_ENCODE_HEADER'); + script_put_line(fh, ' then'); + script_put_line(fh, ' raise_application_error(-20000, ''B64_ENCODE_HEADER missing from data: '' || header_txt);'); + script_put_line(fh, ' end if;'); + script_put_line(fh, ' ----------------------------------------'); + script_put_line(fh, ' -- Create "L_BLOB" after removing B64_ENCODE_HEADER, Carriage Returns, and Line Feeds'); + script_put_line(fh, ' ptr := 1 + length(B64_ENCODE_HEADER); -- Skip over the header'); + script_put_line(fh, ' while ptr <= len_blob'); + script_put_line(fh, ' loop'); + script_put_line(fh, ' dbms_lob.append(l_blob'); + script_put_line(fh, ' ,utl_raw.translate(dbms_lob.substr(in_blob'); + script_put_line(fh, ' ,SPLIT_LEN'); + script_put_line(fh, ' ,ptr)'); + script_put_line(fh, ' ,hextoraw(''000D0A'') -- NULL, Carriage Return, Line Feed'); + script_put_line(fh, ' ,hextoraw(''00'') ) ); -- NULL'); + script_put_line(fh, ' ptr := ptr + SPLIT_LEN;'); + script_put_line(fh, ' end loop;'); + script_put_line(fh, ' len_blob := length(l_blob);'); + script_put_line(fh, ' ----------------------------------------'); + script_put_line(fh, ' -- Create "THE_BLOB" after Base64 Decoding'); + script_put_line(fh, ' ptr := 1;'); + script_put_line(fh, ' while ptr <= len_blob'); + script_put_line(fh, ' loop'); + script_put_line(fh, ' dbms_lob.append(the_blob'); + script_put_line(fh, ' ,UTL_ENCODE.BASE64_DECODE(dbms_lob.substr(l_blob'); + script_put_line(fh, ' ,SPLIT_LEN'); + script_put_line(fh, ' ,ptr) ) );'); + script_put_line(fh, ' ptr := ptr + SPLIT_LEN;'); + script_put_line(fh, ' end loop;'); + script_put_line(fh, ' end b64_decode;'); + script_put_line(fh, 'begin'); + script_put_line(fh, ' dbms_lob.createtemporary(l_blob, true);'); + script_put_line(fh, ' dbms_lob.createtemporary(the_blob, true);'); + script_put_line(fh, ' for buff in (select ROWID RID, "' || desc_tab(i).col_name || '"'); + script_put_line(fh, ' from "' || g_schema_name || '"."' || tabs.table_name || '"'); + script_put_line(fh, ' for update of "' || desc_tab(i).col_name || '")'); + script_put_line(fh, ' loop'); + script_put_line(fh, ' b64_decode(buff."' || desc_tab(i).col_name || '");'); + script_put_line(fh, ' -- This overwrites the Base64 Encoded String with the original binary data'); + script_put_line(fh, ' update "' || g_schema_name || '"."' || tabs.table_name || '"'); + script_put_line(fh, ' set "' || desc_tab(i).col_name || '" = the_blob'); + script_put_line(fh, ' where rowid = buff.rid;'); + script_put_line(fh, ' end loop;'); + script_put_line(fh, ' dbms_lob.freetemporary(l_blob);'); + script_put_line(fh, ' dbms_lob.freetemporary(the_blob);'); + script_put_line(fh, 'end;'); + script_put_line(fh, '/'); + script_put_line(fh, ''); + script_put_line(fh, 'commit;'); + script_put_line(fh, ''); + end if; + end loop; + script_close(fh); + -- + dbms_sql.close_cursor(dyn_curs); + -- + end loop; + -- +end cr_cdl; + +------------------------------------------------------------ +-- Create Context object script +PROCEDURE cr_ctx +IS + OTYPE CONSTANT varchar2(100) := 'CONTEXT'; + fh sf_ptr_type; -- object script file handle + sql_txt varchar2(32767); +begin + for buf1 in (select obj.context_owner + ,obj.context_name + ,obj.context_type + ,obj.context_name || '.' || obj.ext FILE_NAME + ,obj.package_owner + ,obj.package_name + ,obj.install_timing + from obj_install_context_tab obj + where obj.install_type = g_install_type + and obj.context_owner = g_schema_name + and obj.install_otype = OTYPE + order by obj.context_name + ,obj.context_owner + ,obj.package_name) + loop + fh := script_open(in_filename => buf1.file_name + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create ' || buf1.context_name ||' Context'); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + if buf1.install_timing != 'CURRENT' + then + script_put_line(fh, ''); + script_put_line(fh, '-- Note: This is a "' || buf1.install_timing || '" Context'); + end if; + script_put_line(fh, ''); + sql_txt := 'create or replace context "' || buf1.context_name || + '"."' || buf1.context_name || + '" using "' || buf1.package_owner || + '"."' || buf1.package_name || + '" ' || buf1.context_type ; + big_put_line(fh, buf1.package_owner || '.' || buf1.context_name || ' Context' + ,sql_txt || ';' + ,common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + END LOOP; +end cr_ctx; + +------------------------------------------------------------ +-- Create Database Trigger +procedure cr_dbtrg +is + OTYPE CONSTANT varchar2(100) := 'DATABASE_TRIGGER'; + fh sf_ptr_type; -- object script file handle +begin + for buff in (select object_name TRIGGER_NAME + ,ext + ,install_timing + from obj_install_object_view + where install_type = g_install_type + and object_owner = g_schema_name + and install_otype = OTYPE + order by trigger_name + ,ext + ,install_timing) + loop + if NOT script_is_open(fh) + then + fh := script_open(in_filename => g_schema_name || '.' || buff.ext + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create Database Triggers for ' || g_install_type); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + end if; + script_put_line(fh, ''); + script_put_line(fh, '-- NOTE: This is a "' || buff.install_timing || '" Trigger'); + script_put_line(fh, ''); + script_put_line(fh, '--DBMS_METADATA:' || g_schema_name || + '.' || buff.trigger_name ); + big_put_line(fh, g_schema_name || '.' || buff.trigger_name || ' Trigger' + ,COMMON_UTIL.escape_at_sign + (dbms_metadata.get_ddl + (object_type => 'TRIGGER' + ,name => buff.trigger_name + ,schema => g_schema_name) ) + ,common_util.MAX_SQL_LEN); + end loop; + if script_is_open(fh) + then + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + end if; +end cr_dbtrg; + +------------------------------------------------------------ +-- Create Database Link +procedure cr_dblnk +is + OTYPE CONSTANT varchar2(100) := 'DB_LINK'; + fh sf_ptr_type; -- object script file handle +begin + for buf1 in (select obj.object_name DB_LINK_NAME + ,obj.object_name || '.' || obj.ext FILE_NAME + ,obj.object_owner USERNAME + ,lnk.host + ,obj.install_timing + from obj_install_object_tab obj + join dba_db_links lnk + on lnk.owner = obj.object_owner + and lnk.db_link = obj.object_name + where obj.install_type = g_install_type + and obj.object_owner = g_schema_name + and obj.install_otype = OTYPE + order by obj.object_name) + loop + fh := script_open(in_filename => buf1.file_name + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create ' || g_schema_name || '.' || buf1.db_link_name ||' Database Link'); + script_put_line(fh, '--'); + script_put_line(fh, '-- Public Database Links can be captured with a row in OBJECT_CONF using'); + script_put_line(fh, '-- PUBLIC as the USERNAME and DB_LINK as the INSTALL_OTYPE. The scripts'); + script_put_line(fh, '-- will be created in the SYSTEM folder of the INSTALL_TYPE in the row.'); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + if buf1.install_timing != 'CURRENT' + then + script_put_line(fh, ''); + script_put_line(fh, '-- Note: This is a "' || buf1.install_timing || '" Database Link'); + end if; + script_put_line(fh, ''); + script_put_line(fh, 'begin'); + script_put_line(fh, ' for buff in (select db_link from dba_db_links'); + script_put_line(fh, ' where owner = ''' || g_schema_name || ''''); + script_put_line(fh, ' and db_link like ''' || buf1.db_link_name || '%'')'); + script_put_line(fh, ' loop'); + script_put_line(fh, ' execute immediate ''drop database link '' || buff.db_link;'); + script_put_line(fh, ' end loop;'); + script_put_line(fh, 'end;'); + script_put_line(fh, '/'); + script_put_line(fh, ''); + script_put_line(fh, '-- DBMS_METADATA will not create clear text passwords for the INDENITIED BY'); + --script_put_line(fh, '--DBMS_METADATA:' || g_schema_name || + -- '.' || buf1.db_link_name); + --big_put_line(fh, g_schema_name || '.' || buf1.db_link_name || ' DB Link' + -- ,dbms_metadata.get_ddl(object_type => 'DB_LINK' + -- ,name => buf1.db_link_name + -- ,schema => g_schema_name)); + script_put_line(fh, ''); + script_put_line(fh, '-- Using Custom SQL to set default password'); + if g_schema_name = 'PUBLIC' -- in (select username from schema_conf + -- where install_type = 'pub') + then + script_put_line(fh, 'create PUBLIC database link "' || buf1.db_link_name || '"'); + else + script_put_line(fh, 'create database link "' || g_schema_name || '"."' || buf1.db_link_name || '"'); + end if; + script_put_line(fh, ' connect to "' || buf1.username || '"'); + script_put_line(fh, ' identified by "' || buf1.username || '"'); + script_put_line(fh, ' using ''' || buf1.host || ''''); + script_put_line(fh, ';'); + script_put_line(fh, ''); + script_put_line(fh, '-- Database Links have no grants'); + script_put_line(fh, ''); + script_put_line(fh, '-- Synonyms'); + script_put_line(fh, '-- DBA_SYNONYMS does not display who owns the database link, so'); + script_put_line(fh, '-- any non-unique Database Link name will cause problems here.'); + for buf2 in (select target_owner OWNER + ,synonym_name + ,install_type_selector + from obj_install_synonym_tab + where install_type = g_install_type + and synonym_owner = g_schema_name + and db_link = buf1.db_link_name + and install_otype = 'SYNONYM' + order by target_owner + ,synonym_name) + loop + script_put_line(fh, ''); + dbms_output.put_line('-- ' || buf2.install_type_selector || ' found.' || LF || + '-- buf1.FILE_NAME = ' || buf1.file_name || LF || + '-- buf1.DB_LINK_NAME = ' || buf1.db_link_name || LF || + '-- buf2.SYNONYM_NAME = ' || buf2.synonym_name || LF || + '-- g_schema_name = ' || g_schema_name || LF || + '-- g_install_type = ' || g_install_type ); + script_put_line(fh, '--DBMS_METADATA:' || buf2.owner || + '.' || buf2.synonym_name); + big_put_line(fh, buf2.owner || '.' || buf2.synonym_name || ' Synonym' + ,dbms_metadata.get_ddl(object_type => 'SYNONYM' + ,name => buf2.synonym_name + ,schema => buf2.owner) + ,common_util.MAX_SQL_LEN); + end loop; + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + end loop; +end cr_dblnk; + +------------------------------------------------------------ +-- Create Database Directory +procedure cr_dir +is + TYPE dir_aa_type is table of varchar2(1) + index by dba_directories.directory_path%TYPE; + dir_aa dir_aa_type; + dbuff dba_directories.directory_path%TYPE; + -- "create directory" should only be run by SYSTEM + OTYPE CONSTANT varchar2(100) := 'DIRECTORY'; + fh sf_ptr_type; -- object script file handle + old_dir dba_directories.directory_name%TYPE; + sql_txt varchar2(32767); +begin + for buf1 in(select directory_name + ,grantee GRANTEE + ,privilege + ,max(grantable) GRANTABLE + ,directory_path + ,directory_name || '.' || ext FILE_NAME + --,directory_name || '.' || ext2 BASH_NAME + --,directory_name || '.' || ext3 BATCH_NAME + ,install_timing + from priv_obj_dir_view + where install_type = g_install_type + and directory_owner = 'SYS' + and install_otype = OTYPE + group by directory_name + ,grantee + ,privilege + ,directory_path + ,ext + --,ext2 + --,ext3 + ,install_timing + order by directory_name + ,grantee + ,privilege) + loop + if buf1.directory_name != nvl(old_dir,'###BOGUS###') + then + if old_dir is not null + then + script_put_line(fh, 'set define on'); + script_close(fh); + end if; + old_dir := buf1.directory_name; + fh := script_open(in_filename => buf1.file_name + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create ' || buf1.directory_name ||' Database Directory'); + script_put_line(fh, '--'); + script_put_line(fh, '-- Because directories are created based on permissions, granting'); + script_put_line(fh, '-- directory access to users/roles in different install types'); + script_put_line(fh, '-- will result in duplicate CREATE DIRECTORY scripts'); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + script_put_line(fh, ''); + -- If this is run by a DBA other than SYS, DBMS_METADATA + -- will only return directories granted with GRANT option + sql_txt := 'create or replace directory "' || buf1.directory_name || '"' || LF || + ' as ''' || buf1.directory_path || ''''; + big_put_line(fh, buf1.directory_name || ' Directory', sql_txt || ';', common_util.MAX_SQL_LEN); + dir_aa(buf1.directory_path) := 'X'; + script_put_line(fh, ''); + script_put_line(fh, ''); + script_put_line(fh, '-- Grants'); + script_put_line(fh, ''); + for buf2 in (select directory_name + ,grantee GRANTEE + ,privilege + from priv_obj_dir_view + where install_type = 'pub' + --and install_timing = 'CURRENT' All Public Directories are CURRENT + and directory_owner = 'SYS' + and install_otype = OTYPE + group by directory_name + ,grantee + ,privilege + order by directory_name + ,grantee + ,privilege) + loop + if buf2.directory_name = buf1.directory_name + then + script_put_line(fh, 'grant ' || buf2.privilege || + ' on directory "' || buf1.directory_name || + '" to "' || buf2.grantee || '";'); + end if; + end loop; + end if; + if buf1.install_timing != 'CURRENT' + then + script_put_line(fh, '-- Note: This is a "' || buf1.install_timing || '" Directory Grant'); + end if; + -- Oracle Database 12c Release 1 Database SQL Language Reference + -- "on_object_clause" + -- Users, directory schema objects, editions, data mining models, Java + -- source and resource schema objects, and SQL translation profiles + -- are identified separately because they reside in separate namespaces. + -- If this is run by a DBA other than SYS, DBMS_METADATA + -- will only return directories granted with GRANT option + sql_txt := 'grant ' || buf1.privilege || + ' on directory "' || buf1.directory_name || + '" to "' || buf1.grantee || '"'; + -- "with hierarchy option" has not yet been implemented + if buf1.grantable = 'YES' + then + sql_txt := sql_txt || ' with grant option'; + end if; + script_put_line(fh, sql_txt || ';'); + script_put_line(fh, ''); + end loop; + if old_dir is not null + then + script_put_line(fh, 'set define on'); + script_close(fh); + --dbms_output.put_line('buf1.bash_name = ' || buf1.bash_name); + fh := script_open(in_filename => 'create_directories.sh' + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_UNX_LEN); + script_put_line(fh, ''); + script_put_line(fh, '#'); + script_put_line(fh, '# Create Directories for Linux'); + script_put_line(fh, '#'); + script_put_line(fh, ''); + dbuff := dir_aa.FIRST; + loop + script_put_line(fh, 'mkdir -p ' || replace(dbuff,'\','/')); + exit when dbuff = dir_aa.LAST; + dbuff := dir_aa.NEXT(dbuff); + end loop; + script_put_line(fh, ''); + dbuff := dir_aa.FIRST; + loop + script_put_line(fh, 'chmod 777 ' || replace(dbuff,'\','/')); + exit when dbuff = dir_aa.LAST; + dbuff := dir_aa.NEXT(dbuff); + end loop; + script_put_line(fh, ''); + script_close(fh); + --dbms_output.put_line('buf1.bash_name = ' || buf1.batch_name); + fh := script_open(in_filename => 'create_directories.bat' + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_WIN_LEN); + script_put_line(fh, ''); + script_put_line(fh, 'REM'); + script_put_line(fh, 'REM Create Directories for Windows'); + script_put_line(fh, 'REM'); + script_put_line(fh, ''); + dbuff := dir_aa.FIRST; + loop + script_put_line(fh, 'md ' || replace(dbuff,'/','\')); + exit when dbuff = dir_aa.LAST; + dbuff := dir_aa.NEXT(dbuff); + end loop; + script_put_line(fh, ''); + script_put_line(fh, 'REM set db_owner=oracle'); + script_put_line(fh, ''); + dbuff := dir_aa.FIRST; + loop + script_put_line(fh, 'REM icacls '|| replace(dbuff,'/','\') || ' /grant %db_owner%:F /T'); + exit when dbuff = dir_aa.LAST; + dbuff := dir_aa.NEXT(dbuff); + end loop; + script_put_line(fh, ''); + script_close(fh); + end if; +end cr_dir; + +------------------------------------------------------------ +-- Create Table Foreign Keys +procedure cr_fk + (in_otype in varchar2) +is + fh sf_ptr_type; -- object script file handle + old_tab varchar2(1000); + fname varchar2(1000); +begin + old_tab := 'This is not a Table Name.'; + for buff in (select fk.base_table_name TABLE_NAME + ,fk.base_table_name || '.' || fk.ext FILE_NAME + ,fk.base_table_type + ,fk.foreign_key_name + ,fk.install_type_selector + from obj_install_fkey_tab fk + where fk.base_table_owner = g_schema_name --Doesn't work with Views + and fk.install_otype = in_otype + and fk.install_type = g_install_type + order by fk.base_table_name + ,fk.foreign_key_name ) + loop + if buff.table_name != old_tab + then + if script_is_open(fh) + then + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + end if; + old_tab := buff.table_name; + fh := script_open(in_filename => buff.file_name + ,in_otype => in_otype + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create Foreign Keys for ' || g_schema_name || + '.' || buff.table_name || + ' ' || buff.base_table_type); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + end if; + script_put_line(fh, ''); + script_put_line(fh, '-- NOTE: This is a "' || buff.install_type_selector || '" Foreign Key'); + script_put_line(fh, ''); + script_put_line(fh, '--DBMS_METADATA:' || g_schema_name || + '.' || buff.foreign_key_name ); + big_put_line(fh, g_schema_name || '.' || buff.table_name || ' Ref Constraint' + ,dbms_metadata.get_ddl(object_type => 'REF_CONSTRAINT' + ,name => buff.foreign_key_name + ,schema => g_schema_name) + ,common_util.MAX_SQL_LEN); + end loop; + if script_is_open(fh) + then + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + end if; +end cr_fk; + +------------------------------------------------------------ +-- Create FUTURE Grants +procedure cr_grnt +is + OTYPE CONSTANT varchar2(100) := 'GRANT'; + fh sf_ptr_type; -- object script file handle + sql_txt varchar2(32767); + default_install_type type_conf.install_type%TYPE; +begin + for gtee in (with q1 as ( + select grantee + ,grantee_uor_type + from priv_system_privileges_view + where install_type = g_install_type + -- and install_type_selector = 'GRANTEE' Everything is "GRANTEE" + UNION ALL + select grantee + ,grantee_uor_type + from priv_role_privileges_view + where install_type = g_install_type + and install_type_selector = 'GRANTEE' + UNION ALL + select grantee + ,grantee_uor_type + from priv_queue_sysprivs_view + where grantee_install_type = g_install_type + -- and install_type_selector = 'GRANTEE' Everything is "GRANTEE" + UNION ALL + select grantee + ,grantee_uor_type + from priv_obj_install_vw -- Includes PUBLIC SCHEMA_NAME + where install_type = g_install_type + and ( install_type_selector = 'GRANTEE' -- Grant delayed for this Grantee + OR ( install_type_selector = 'OBJECT' + and object_install_type = 'sys') ) + UNION ALL + select grantee + ,grantee_uor_type + from priv_obj_queue_view + where install_type = g_install_type + and install_type_selector = 'GRANTEE' -- Grant delayed for this Grantee + UNION ALL + select grantee + ,grantee_uor_type + from priv_obj_java_fg_view + where install_type = g_install_type + and install_type_selector = 'GRANTEE' -- Grant delayed for this Grantee + ) + select q1.grantee GRANTEE + ,q1.grantee || + case q1.grantee_uor_type when 'USER' then '_usr' + when 'ROLE' then '_rol' + else '_error' + end || '.' || + otyp.ext FILE_NAME + from q1 + join otype_conf otyp -- OTYPE_CONF has the file extension + on otyp.install_otype = OTYPE + group by q1.grantee + ,q1.grantee_uor_type + ,otyp.ext + order by q1.grantee + ,q1.grantee_uor_type + ,otyp.ext) + loop + fh := script_open(in_filename => gtee.file_name + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create ' || gtee.grantee || ' Grants'); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + script_put_line(fh, ''); + script_put_line(fh, '-- Database System Privileges'); + script_put_line(fh, ''); + script_put_line(fh, '--DBMS_METADATA:' || gtee.grantee); + BEGIN + big_put_line(fh, OTYPE || ' ' || gtee.grantee || ' FUTURE Grants' + ,dbms_metadata.get_granted_ddl(object_type => 'SYSTEM_GRANT' + ,grantee => gtee.grantee) + ,common_util.MAX_SQL_LEN); + EXCEPTION + WHEN DBMS_METADATA.object_not_found2 + THEN + null; + END; + script_put_line(fh, ''); + script_put_line(fh, '-- "sys" INSTALL_TYPE Role Grants'); + script_put_line(fh, '-- "GRANTEE" (delayed) Role Grants'); + script_put_line(fh, '-- Note: "OBJECT" Schema Object Grants are given during Role creation'); + script_put_line(fh, ''); + -- DBMS_METADATA will grant all roles... + --script_put_line(fh, '--DBMS_METADATA:' || gtee.grantee); + --big_put_line(fh, OTYPE || ' ' || gtee.grantee || ' FUTURE Grants' + -- ,dbms_metadata.get_granted_ddl(object_type => 'ROLE_GRANT' + -- ,grantee => gtee.grantee)); + for rol in (select rolename + ,delegate_option + ,admin_option + from priv_role_privileges_view + where install_type = g_install_type + and install_type_selector = 'GRANTEE' -- Grant delayed for this Grantee + and grantee = gtee.grantee + order by rolename) + loop + script_put_line(fh, 'grant "' || rol.rolename || '" to "' || gtee.grantee || '";'); + -- "with hierarchy option" has not yet been implemented + if rol.admin_option = 'YES' + then + script_put_line(fh, 'grant "' || rol.rolename || '" to "' || gtee.grantee || '" with admin option;'); + end if; + if rol.delegate_option = 'YES' + then + script_put_line(fh, 'grant "' || rol.rolename || '" to "' || gtee.grantee || '" with delegate option;'); + end if; + end loop; + script_put_line(fh, ''); + script_put_line(fh, ''); + script_put_line(fh, '-- "sys" INSTALL_TYPE Schema Object Grants, excluding SYS objects'); + script_put_line(fh, '-- "GRANTEE" (delayed) Schema Object Grants'); + script_put_line(fh, '-- Note: "OBJECT" Schema Object Grants are given during object creation'); + script_put_line(fh, ''); + for sobj in (select object_owner TABLE_OWNER + ,object_name TABLE_NAME + ,privilege + ,max(grantable) GRANTABLE + from priv_obj_install_vw + where object_install_type = g_install_type + and ( install_type_selector = 'GRANTEE' -- Grant delayed for this Grantee + OR ( install_type_selector = 'OBJECT' + and object_install_type = 'sys') ) + and grantee = gtee.grantee + and object_owner != 'SYS' + and privilege not in ('ENQUEUE','DEQUEUE') + group by object_owner + ,object_name + ,privilege + order by object_owner + ,object_name + ,privilege) + loop + -- Can't find an appropriate DBMS_METADATA for this, so manually create the SQL + sql_txt := 'grant ' || sobj.privilege || + ' on "' || sobj.table_owner || '"."' || sobj.table_name || '"' || + ' to "' || gtee.grantee || '"'; + -- "with hierarchy option" has not yet been implemented + if sobj.grantable = 'YES' + then + sql_txt := sql_txt || ' with grant option'; + end if; + script_put_line(fh, sql_txt || ';'); + end loop; + script_put_line(fh, ''); + script_put_line(fh, ''); + script_put_line(fh, '-- Advanced Queue System Privileges'); + script_put_line(fh, ''); + for buff in (select grant_name DBMS_AQ_PRIV + from priv_queue_sysprivs_view + where install_type = g_install_type + -- and install_type_selector = 'GRANTEE' Everything is "GRANTEE" + and grantee = gtee.grantee + order by dbms_aq_priv) + loop + script_put_line(fh, 'begin'); + script_put_line(fh, ' dbms_aqadm.grant_system_privilege('); + script_put_line(fh, ' privilege => ''' || buff.DBMS_AQ_PRIV || ''', '); + script_put_line(fh, ' grantee => ''' || gtee.grantee || ''', '); + script_put_line(fh, ' admin_option => FALSE);'); + script_put_line(fh, 'end;'); + script_put_line(fh, '/'); + end loop; + script_put_line(fh, ''); + script_put_line(fh, ''); + script_put_line(fh, '-- Advanced Queue Grants'); + script_put_line(fh, '-- "GRANTEE" (Delayed) Advanced Queue Grants'); + script_put_line(fh, '-- Note: "QUEUE" Advanced Queue Grants are given during object creation'); + for cque in (select queue_owner + ,queue_name + ,privilege + ,max(grantable) GRANTABLE + from priv_obj_queue_view + where install_type = g_install_type + and install_type_selector = 'GRANTEE' -- Grant delayed for this Grantee + and grantee = gtee.grantee + group by queue_owner + ,queue_name + ,privilege) + loop + script_put_line(fh, 'begin'); + script_put_line(fh, ' dbms_aqadm.grant_queue_privilege'); + script_put_line(fh, ' (privilege => ''' || cque.privilege || '''' ); + script_put_line(fh, ' ,queue_name => ''"' || cque.queue_owner || '"."' || + cque.queue_name || '"''' ); + script_put_line(fh, ' ,grantee => ''' || gtee.grantee || '''' ); + if cque.grantable = 'YES' + then + script_put_line(fh, ' ,grant_option => TRUE);'); + else + script_put_line(fh, ' ,grant_option => FALSE);'); + end if; + script_put_line(fh, 'end;'); + script_put_line(fh, '/'); + end loop; + script_put_line(fh, ''); + script_put_line(fh, '-- Advanced Queue Subscriptions'); + script_put_line(fh, '-- "GRANTEE" (Delayed) Advanced Queue Subscription'); + script_put_line(fh, '-- Note: "QUEUE" Advanced Queue Subscriptions are given during object creation'); + script_put_line(fh, ''); + for buf3 in ( + select queue_owner -- Owner of the queue + ,queue_name -- Name of the queue + ,consumer_name -- Name of the subscriber + ,address -- Address of the subscriber + ,protocol -- Protocol of the subscriber + ,rule -- Rule condition for the subscriber + ,transformation -- Transformation for the subscriber + ,queue_to_queue -- Is subscriber is a queue-to-queue subscriber? + ,delivery_mode -- Message delivery mode: PERSISTENT, BUFFERED, or PERSISTENT_OR_BUFFERED + from priv_queue_subscribe_view + where install_type = g_install_type + and install_type_selector = 'GRANTEE' + and consumer_name = gtee.grantee + order by queue_owner + ,queue_name + ,consumer_name) + loop + script_put_line(fh, 'begin'); + script_put_line(fh, ' dbms_aqadm.add_subscriber'); + script_put_line(fh, ' (queue_name => ''' || buf3.queue_owner || + '.' || buf3.queue_name || ''''); + script_put_line(fh, ' ,subscriber => sys.aq$_agent'); + script_put_line(fh, ' (name => ''' || buf3.consumer_name || ''''); + script_put_line(fh, ' ,address => ''' || buf3.address || ''''); + script_put_line(fh, ' ,protocol => ' || buf3.protocol || ')'); + script_put_line(fh, ' ,rule => ''' || buf3.rule || ''''); + script_put_line(fh, ' ,transformation => ''' || buf3.transformation || ''''); + script_put_line(fh, ' ,queue_to_queue => ' || buf3.queue_to_queue ); + script_put_line(fh, ' ,delivery_mode => DBMS_AQADM.' || buf3.delivery_mode || ');'); + script_put_line(fh, 'end;'); + script_put_line(fh, '/'); + script_put_line(fh, ''); + end loop; + script_put_line(fh, ''); + script_put_line(fh, ''); + -- Oracle Database 12c Release 1 (12.1) + -- Database Java Developer''s Guide + -- 10 Security for Oracle Database Java Applications + -- Setting Permissions + -- http://docs.oracle.com/database/121/JJDEV/chten.htm#JJDEV13326 + script_put_line(fh, '-- "GRANTEE" (Delayed) Fine-Grained Java Permissions'); + script_put_line(fh, '-- Note: "JAVA_CLASS" Fine-Grained Java Permissions are given during object creation'); + script_put_line(fh, '--'); + FOR jpol in + (select seq + ,kind + ,java_class_owner + ,java_class_grant + ,java_class_mask + ,java_class_permission + ,enabled + from priv_obj_java_fg_view + where install_type = g_install_type + and install_type_selector = 'GRANTEE' -- Grant delayed for this Grantee + and grantee = gtee.grantee + order by seq) + LOOP + script_put_line(fh, '-- SEQ:' || jpol.seq || ', ' || + jpol.kind || ' ' || + jpol.java_class_permission || ' on ' || + jpol.java_class_owner || ':' || + jpol.java_class_grant || ' - ' || + jpol.java_class_mask || ' to ' || + gtee.grantee || ' ' || + jpol.enabled ); + script_put_line(fh, 'BEGIN'); + script_put_line(fh, ' dbms_java.grant_permission' || '(''' || + gtee.grantee || ''', ''' || + jpol.java_class_owner || ':' || + jpol.java_class_grant || ''', ''' || + jpol.java_class_mask || ''', ''' || + jpol.java_class_permission || ''');' ); + script_put_line(fh, 'END;' ); + script_put_line(fh, '/' ); + END LOOP; + script_put_line(fh, ''); + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + END LOOP; +end cr_grnt; + +------------------------------------------------------------ +-- Create Index Scripts +procedure cr_ind + (in_otype in VARCHAR2) +is + fh sf_ptr_type; -- object script file handle + old_own varchar2(1000); + old_tab varchar2(1000); + fname varchar2(1000); +begin + old_own := 'This is not an Owner Name.'; + old_tab := 'This is not a Table name.'; + for buff in (select ind.table_owner + ,ind.table_name + ,ind.table_name || '.' || ext FILE_NAME + ,ind.table_type + ,ind.index_owner + ,ind.index_name + ,ind.install_type_selector + from obj_install_index_tab ind + where ind.install_type = g_install_type + and ind.index_owner = g_schema_name + and ind.install_otype = in_otype + and ind.index_type != 'LOB' -- LOB Indexes are auto-created + and (ind.table_owner, ind.table_name) not in ( + select xt.owner, xt.table_name + from dba_xml_tables xt) -- XMLTable Indexes are auto-created + and not exists ( + -- Primary Key and Unique Key Indexes are auto-created with the table + select 'x' from dba_constraints cons + where cons.constraint_type in ('P','U') + and cons.owner = ind.table_owner + and cons.table_name = ind.table_name + and cons.index_owner = ind.index_owner + and cons.index_name = ind.index_name) + and ind.index_name not like common_util.RECYCLE_BIN_NAME_MATCH escape '\' + and ind.index_name != common_util.MVIEW_AUTO_INDEX_PREFIX || ind.table_name + order by ind.table_owner + ,ind.table_name + ,ind.index_owner + ,ind.index_name) + loop + if buff.table_owner != old_own + or buff.table_name != old_tab + then + if script_is_open(fh) + then + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + end if; + old_own := buff.table_owner; + old_tab := buff.table_name; + if buff.table_owner = g_schema_name + then + fname := buff.file_name; + else + fname := buff.table_owner || '.' || buff.file_name; + end if; + fh := script_open(in_filename => fname --buff.file_name + ,in_otype => in_otype + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create Indexes for ' || buff.table_owner || + '.' || buff.table_name || + ' ' || buff.table_type ); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + end if; + script_put_line(fh, ''); + script_put_line(fh, '-- NOTE: This is a "' || buff.install_type_selector || '" Index'); + script_put_line(fh, ''); + script_put_line(fh, '--DBMS_METADATA:' || buff.index_owner || + '.' || buff.index_name); + big_put_line(fh, g_schema_name || '.' || buff.table_name || ' ' || buff.table_type + ,dbms_metadata.get_ddl(object_type => 'INDEX' + ,name => buff.index_name + ,schema => buff.index_owner) + ,common_util.MAX_SQL_LEN); + + end loop; + if script_is_open(fh) + then + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + end if; +end cr_ind; + +------------------------------------------------------------ +-- Create Master Installation Script +procedure cr_install_master +is + fh sf_ptr_type; -- object script file handle + fname varchar2(1000) := 'install.sql'; + l_loc varchar2(256) := 'cr_install_master'; +begin + -- + fh := script_open(in_filename => fname + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Master Installation Script'); + script_put_line(fh, '-- All scripts created by "https://ODBCapture.org", Version ' || get_version); + script_put_line(fh, '--'); + script_put_line(fh, '-- Must be run as SYS'); + script_put_line(fh, '--'); + script_put_line(fh, '-- Command Line Parameters:'); + script_put_line(fh, '-- 1 - TO_PDB_SYSTEM: SYSTEM/password@TNSALIAS'); + script_put_line(fh, '-- i.e. pass the username and password for the SYSTEM user'); + script_put_line(fh, '-- and the TNSALIAS for the connection to the pluggable database.'); + script_put_line(fh, '-- The Data Load installation requires this connection information.'); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, '-- NOTE: If running in a Linux based Docker Container from a Windows FileSystem Mount, run this first:'); + script_put_line(fh, '-- dos2unix -f -o ../install/*/*.csv ../install/*/*/*.csv'); + script_put_line(fh, ''); + script_put_line(fh, 'define TOP_PDB_SYSTEM="&1."'); + script_put_line(fh, 'execute DBMS_JAVA.SET_OUTPUT(1000000);'); + script_put_line(fh, 'set serveroutput on size unlimited format wrapped'); + script_put_line(fh, ''); + script_put_line(fh, '----------------------------------------'); + script_put_line(fh, 'prompt Identify this Module in V$SESSION'); + script_put_line(fh, 'set appinfo "' || g_install_type || ' Installation"'); + script_put_line(fh, ''); + script_put_line(fh, '----------------------------------------'); + script_put_line(fh, 'prompt Setup Abort on Error'); + script_put_line(fh, 'WHENEVER SQLERROR EXIT SQL.SQLCODE'); + script_put_line(fh, 'WHENEVER OSERROR EXIT'); + script_put_line(fh, ''); + script_put_line(fh, '----------------------------------------'); + script_put_line(fh, 'prompt'); + script_put_line(fh, 'prompt **************************'); + script_put_line(fh, 'prompt * Run SYS Installation *'); + script_put_line(fh, 'prompt **************************'); + script_put_line(fh, 'prompt'); + script_put_line(fh, '@install_sys.sql "" "" ""'); + script_put_line(fh, ''); + script_put_line(fh, '----------------------------------------'); + script_put_line(fh, 'prompt Setup Continue on Error'); + script_put_line(fh, 'WHENEVER SQLERROR CONTINUE'); + script_put_line(fh, 'WHENEVER OSERROR CONTINUE'); + script_put_line(fh, ''); + script_put_line(fh, '----------------------------------------'); + script_put_line(fh, 'prompt'); + script_put_line(fh, 'prompt *****************************'); + script_put_line(fh, 'prompt * Run SYSTEM Installation *'); + script_put_line(fh, 'prompt *****************************'); + script_put_line(fh, 'prompt'); + script_put_line(fh, 'connect &TOP_PDB_SYSTEM.'); + script_put_line(fh, 'execute DBMS_JAVA.SET_OUTPUT(1000000);'); + script_put_line(fh, 'set serveroutput on size unlimited format wrapped'); + script_put_line(fh, '@install_system.sql "" "" ""'); + script_put_line(fh, ''); + script_put_line(fh, '----------------------------------------'); + script_put_line(fh, 'prompt'); + script_put_line(fh, 'prompt *************************'); + script_put_line(fh, 'prompt * Install Application *'); + script_put_line(fh, 'prompt *************************'); + script_put_line(fh, 'prompt'); + script_put_line(fh, '@install_' || g_install_type || '.sql "&TOP_PDB_SYSTEM." "" ""'); + script_put_line(fh, ''); + script_put_line(fh, '----------------------------------------'); + script_put_line(fh, 'prompt'); + script_put_line(fh, 'prompt *****************'); + script_put_line(fh, 'prompt * Run Reports *'); + script_put_line(fh, 'prompt *****************'); + script_put_line(fh, 'prompt'); + script_put_line(fh, '@report_status.sql "&TOP_PDB_SYSTEM." "" ""'); + script_put_line(fh, ''); + script_put_line(fh, '----------------------------------------'); + script_put_line(fh, 'set appinfo "Null"'); + script_put_line(fh, 'set appinfo off'); + script_put_line(fh, 'prompt'); + script_put_line(fh, 'prompt "' || g_install_type || '" Installation is Done.'); + script_put_line(fh, ''); + script_close(fh); + -- + fh := script_open(in_filename => 'alter_foreign_keys.sql' + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + big_put_line(in_fh => fh + ,in_loc => l_loc + ,in_txt => root_scripts.alter_foreign_keys_sql(g_install_type) + ,in_max_len => common_util.MAX_SQL_LEN); + script_close(fh); + -- + fh := script_open(in_filename => 'alter_triggers.sql' + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + big_put_line(in_fh => fh + ,in_loc => l_loc + ,in_txt => root_scripts.alter_triggers_sql(g_install_type) + ,in_max_len => common_util.MAX_SQL_LEN); + script_close(fh); + -- + fh := script_open(in_filename => 'alter_queues.sql' + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + big_put_line(in_fh => fh + ,in_loc => l_loc + ,in_txt => root_scripts.alter_queues_sql(g_install_type) + ,in_max_len => common_util.MAX_SQL_LEN); + script_close(fh); + -- + fh := script_open(in_filename => 'alter_scheduler_jobs.sql' + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + big_put_line(in_fh => fh + ,in_loc => l_loc + ,in_txt => root_scripts.alter_scheduler_jobs_sql(g_install_type) + ,in_max_len => common_util.MAX_SQL_LEN); + script_close(fh); + -- + fh := script_open(in_filename => 'compile_all.sql' + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + big_put_line(in_fh => fh + ,in_loc => l_loc + ,in_txt => root_scripts.compile_all_sql(g_install_type) + ,in_max_len => common_util.MAX_SQL_LEN); + script_close(fh); + -- + fh := script_open(in_filename => 'db_build_junit_report.sql' + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + big_put_line(in_fh => fh + ,in_loc => l_loc + ,in_txt => root_scripts.db_build_junit_report_sql(g_install_type) + ,in_max_len => common_util.MAX_SQL_LEN); + script_close(fh); + -- + fh := script_open(in_filename => 'db_install.sql' + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + big_put_line(in_fh => fh + ,in_loc => l_loc + ,in_txt => root_scripts.db_install_sql(g_install_type) + ,in_max_len => common_util.MAX_SQL_LEN); + script_close(fh); + -- + fh := script_open(in_filename => 'fix_invalid_public_synonyms.sql' + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + big_put_line(in_fh => fh + ,in_loc => l_loc + ,in_txt => root_scripts.fix_invalid_public_synonyms_sql + ,in_max_len => common_util.MAX_SQL_LEN); + script_close(fh); + -- + fh := script_open(in_filename => 'installation_finalize.sql' + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + big_put_line(in_fh => fh + ,in_loc => l_loc + ,in_txt => root_scripts.installation_finalize_sql(g_install_type) + ,in_max_len => common_util.MAX_SQL_LEN); + script_close(fh); + -- + fh := script_open(in_filename => 'installation_prepare.sql' + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + big_put_line(in_fh => fh + ,in_loc => l_loc + ,in_txt => root_scripts.installation_prepare_sql(g_install_type) + ,in_max_len => common_util.MAX_SQL_LEN); + script_close(fh); + -- + fh := script_open(in_filename => 'list_invalids.sql' + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + big_put_line(in_fh => fh + ,in_loc => l_loc + ,in_txt => root_scripts.list_invalids_sql(g_install_type) + ,in_max_len => common_util.MAX_SQL_LEN); + script_close(fh); + -- + fh := script_open(in_filename => 'log_files_junit_report.sql' + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + big_put_line(in_fh => fh + ,in_loc => l_loc + ,in_txt => root_scripts.log_files_junit_report_sql(g_install_type) + ,in_max_len => common_util.MAX_SQL_LEN); + script_close(fh); + -- + fh := script_open(in_filename => 'odbcapture_installation_logs.cdl' + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + big_put_line(in_fh => fh + ,in_loc => l_loc + ,in_txt => root_scripts.odbcapture_installation_logs_cdl(g_install_type) + ,in_max_len => common_util.MAX_SQL_LEN); + script_close(fh); + -- + fh := script_open(in_filename => 'odbcapture_installation_logs.csv' + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + big_put_line(in_fh => fh + ,in_loc => l_loc + ,in_txt => root_scripts.odbcapture_installation_logs_csv(g_install_type) + ,in_max_len => common_util.MAX_SQL_LEN); + script_close(fh); + -- + fh := script_open(in_filename => 'odbcapture_installation_logs.ctl' + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + big_put_line(in_fh => fh + ,in_loc => l_loc + ,in_txt => root_scripts.odbcapture_installation_logs_ctl(g_install_type) + ,in_max_len => common_util.MAX_SQL_LEN); + script_close(fh); + -- + fh := script_open(in_filename => 'report_status.sql' + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + big_put_line(in_fh => fh + ,in_loc => l_loc + ,in_txt => root_scripts.report_status_sql(g_install_type) + ,in_max_len => common_util.MAX_SQL_LEN); + script_close(fh); + -- + fh := script_open(in_filename => 'update_id_sequences.sql' + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + big_put_line(in_fh => fh + ,in_loc => l_loc + ,in_txt => root_scripts.update_id_sequences_sql(g_install_type) + ,in_max_len => common_util.MAX_SQL_LEN); + script_close(fh); + -- +end cr_install_master; + +------------------------------------------------------------ +-- Create Schema (Non SYS/SYSTEM) Installation Script +procedure cr_install_schemas +is + fh sf_ptr_type; -- object script file handle + fname varchar2(1000) := 'install_' || g_install_type || '.sql'; + file_id pls_integer; +begin + fh := script_open(in_filename => fname + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + -- + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- ' || g_install_type || ' Installation Script'); + script_put_line(fh, '--'); + script_put_line(fh, '-- Must be run as a SYSTEM User (DBA)'); + script_put_line(fh, '--'); + script_put_line(fh, '-- Command Line Parameters:'); + script_put_line(fh, '-- 1 - INSTALL_SYSTEM_CONNECT: SYSTEM/password@TNSALIAS'); + script_put_line(fh, '-- i.e. pass the username and password for the SYSTEM user'); + script_put_line(fh, '-- and the TNSALIAS for the connection to the database.'); + script_put_line(fh, '-- The Data Load installation requires this connection information.'); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'spool install_' || g_install_type || '.log'); + script_put_line(fh, ''); + script_put_line(fh, 'define INSTALL_SYSTEM_CONNECT="&1."'); + script_put_line(fh, ''); + script_put_line(fh, '-- Must Set SQLPREFIX away from "#" Oracle Change Data Capture packages'); + script_put_line(fh, 'set sqlprefix "~"'); + script_put_line(fh, ''); + script_put_line(fh, '-- Using "^P", CHR(16), DLE as an escape character'); + script_put_line(fh, 'set escape OFF'); + script_put_line(fh, 'set escape "' || CHR(16) || '"'); + script_put_line(fh, ''); + script_put_line(fh, '----------------------------------------'); + script_put_line(fh, '-- Prepare for Install'); + script_put_line(fh, '@db_install.sql "./installation_prepare.sql" "" "&INSTALL_SYSTEM_CONNECT."'); + script_put_line(fh, ''); + -- + for buff in (select nvl(object_type, install_otype) OBJECT_TYPE + ,install_order, ext2, ext3 + from otype_conf + where install_order > 0 + order by install_order) + loop + if sf_aa(g_install_type).EXISTS(buff.install_order) + then + script_put_line(fh, '----------------------------------------'); + script_put_line(fh, '-- ' || buff.object_type || ' Install'); + script_put_line(fh, ''); + file_id := sf_aa(g_install_type)(buff.install_order).FIRST; + loop + -- RegExp: "([.]ctl|[.]csv)$" Any string ending with ".ctl" or ".csv" + if not regexp_like(sf_aa(g_install_type)(buff.install_order)(file_id).filename + , '([.]' || buff.ext2 || + '|[.]' || buff.ext3 || ')$', 'i') + then + script_put_line(fh, + '@db_install.sql "' || sf_aa(g_install_type)(buff.install_order)(file_id).schema_name || + '/' || sf_aa(g_install_type)(buff.install_order)(file_id).filename || + '" "' || sf_aa(g_install_type)(buff.install_order)(file_id).schema_name || + '" "&INSTALL_SYSTEM_CONNECT."' ); + end if; + exit when file_id = sf_aa(g_install_type)(buff.install_order).LAST; + file_id := sf_aa(g_install_type)(buff.install_order).NEXT(file_id); + end loop; + script_put_line(fh, ''); + end if; + end loop; + script_put_line(fh, '----------------------------------------'); + script_put_line(fh, '-- Finalize Installation'); + script_put_line(fh, '@db_install.sql "./installation_finalize.sql" "" "&INSTALL_SYSTEM_CONNECT."'); + script_put_line(fh, ''); + script_put_line(fh, 'spool off'); + script_put_line(fh, ''); + -- + script_close(fh); +end cr_install_schemas; + +------------------------------------------------------------ +-- Create SYS Installation Script +procedure cr_install_sys +is + fh sf_ptr_type; -- object script file handle + fname varchar2(1000) := 'install_sys.sql'; + file_id pls_integer; +begin + fh := script_open(in_filename => fname + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + -- + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- SYS Installation Script'); + script_put_line(fh, '--'); + script_put_line(fh, '-- Must be run as SYS'); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'spool install_sys.log'); + script_put_line(fh, ''); + script_put_line(fh, 'set blockterminator off'); + script_put_line(fh, 'set sqlblanklines on'); + script_put_line(fh, ''); + -- + for buff in (select nvl(object_type, install_otype) OBJECT_TYPE + ,install_order, ext2, ext3 + from otype_conf + where install_order between -199 and -100 + order by install_order) + loop + if sf_aa(g_install_type).EXISTS(buff.install_order) + then + script_put_line(fh, '----------------------------------------'); + script_put_line(fh, '-- ' || buff.object_type || ' Install'); + script_put_line(fh, ''); + file_id := sf_aa(g_install_type)(buff.install_order).FIRST; + loop + -- RegExp: "([.]ctl|[.]csv)$" Any string ending with ".ctl" or ".csv" + if not regexp_like(sf_aa(g_install_type)(buff.install_order)(file_id).filename + , '([.]' || buff.ext2 || + '|[.]' || buff.ext3 || ')$', 'i') + then + script_put_line(fh, + '@db_install.sql "' || sf_aa(g_install_type)(buff.install_order)(file_id).schema_name || + '/' || sf_aa(g_install_type)(buff.install_order)(file_id).filename || + '" "" ""' ); + end if; + exit when file_id = sf_aa(g_install_type)(buff.install_order).LAST; + file_id := sf_aa(g_install_type)(buff.install_order).NEXT(file_id); + end loop; + script_put_line(fh, ''); + end if; + end loop; + -- + script_put_line(fh, '----------------------------------------'); + script_put_line(fh, 'set sqlblanklines off'); + script_put_line(fh, 'set blockterminator on'); + script_put_line(fh, ''); + script_put_line(fh, 'spool off'); + script_put_line(fh, ''); + -- + script_close(fh); +end cr_install_sys; + +------------------------------------------------------------ +-- Create SYSTEM Installation Script +procedure cr_install_system +is + fh sf_ptr_type; -- object script file handle + fname varchar2(1000) := 'install_system.sql'; + file_id pls_integer; +begin + fh := script_open(in_filename => fname + ,in_otype => 'INSTALL_SCRIPT' + ,in_max_linesize => common_util.MAX_SQL_LEN); + -- + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- SYSTEM Installation Script'); + script_put_line(fh, '--'); + script_put_line(fh, '-- Must be run as SYSTEM'); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'spool install_system.log'); + script_put_line(fh, ''); + script_put_line(fh, 'set blockterminator off'); + script_put_line(fh, 'set sqlblanklines on'); + script_put_line(fh, ''); + -- + for buff in (select nvl(object_type, install_otype) OBJECT_TYPE + ,install_order, ext2, ext3 + from otype_conf + where install_order between -99 and 0 + order by install_order) + loop + if sf_aa(g_install_type).EXISTS(buff.install_order) + then + script_put_line(fh, '----------------------------------------'); + script_put_line(fh, '-- ' || buff.object_type || ' Install'); + script_put_line(fh, ''); + file_id := sf_aa(g_install_type)(buff.install_order).FIRST; + loop + -- RegExp: "([.]ctl|[.]csv)$" Any string ending with ".ctl" or ".csv" + if not regexp_like(sf_aa(g_install_type)(buff.install_order)(file_id).filename + , '([.]' || buff.ext2 || + '|[.]' || buff.ext3 || ')$', 'i') + then + script_put_line(fh, + '@db_install.sql "' || sf_aa(g_install_type)(buff.install_order)(file_id).schema_name || + '/' || sf_aa(g_install_type)(buff.install_order)(file_id).filename || + '" "" ""' ); + end if; + exit when file_id = sf_aa(g_install_type)(buff.install_order).LAST; + file_id := sf_aa(g_install_type)(buff.install_order).NEXT(file_id); + end loop; + script_put_line(fh, ''); + end if; + end loop; + -- + script_put_line(fh, '----------------------------------------'); + script_put_line(fh, 'set sqlblanklines off'); + script_put_line(fh, 'set blockterminator on'); + script_put_line(fh, ''); + script_put_line(fh, 'spool off'); + script_put_line(fh, ''); + -- + script_close(fh); +end cr_install_system; + +------------------------------------------------------------ +-- Create Materialized View Scripts +procedure cr_mvw +is + POTYPE varchar2(100) := ''; + OTYPE varchar2(100) := 'MVIEW'; + fh sf_ptr_type; -- object script file handle +begin + for buf1 in (with qmain as ( + select object_name MVIEW_NAME + ,object_name || '.' || ext FILE_NAME + ,install_timing + from obj_install_object_tab + where install_type = g_install_type + and object_owner = g_schema_name + and install_otype = OTYPE + order by object_name + ), qdep as ( -- Select only the interesting dependencies + select object_name + ,referenced_name + from dba_dependencies_tab + where object_owner = g_schema_name + and object_type = 'MATERIALIZED VIEW' + and referenced_owner = g_schema_name + and referenced_type = 'MATERIALIZED VIEW' + and dependency_type = 'REF' + ), qroot as ( -- Find the root nodes that have no dependencies + select 0 LVL + ,obj.object_name + from dba_objects_tab obj + where obj.object_owner = g_schema_name + and obj.object_type = 'MATERIALIZED VIEW' + and obj.object_name not in (select qdep.object_name from qdep) + ), qlvl as ( -- Find all hierarchial levels for all nodes from root nodes + select level LVL + ,qdep.object_name OBJECT_NAME + from qdep + connect by prior qdep.referenced_name = qdep.object_name + start with qdep.referenced_name in (select qroot.object_name from qroot) + ), q_all as ( -- Combine root nodes and dependent nodes + -- Also, make dependent nodes unique + select lvl, object_name from qroot + union all + select max(lvl) lvl, object_name from qlvl + group by object_name + ) -- Main query: Outer join in the hierarchy level and sort with it + select qmain.mview_name + ,ltrim(to_char(nvl(q_all.lvl,-1)+1,'09')) || '_' || qmain.file_name + FILE_NAME + ,qmain.install_timing + from qmain + left join q_all + on (q_all.object_name = qmain.mview_name) + order by 1, 2) + loop + fh := script_open(in_filename => buf1.file_name + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create ' || g_schema_name || '.' || buf1.mview_name || ' Materialized View'); + script_put_line(fh, '--'); + script_put_line(fh, '-- NOTE: Foreign keys are in a different script.'); + script_put_line(fh, '-- Indexes are in a different script.'); + script_put_line(fh, '-- Triggers are in a different script.'); + script_put_line(fh, '--'); + if buf1.install_timing != 'CURRENT' + then + script_put_line(fh, ''); + script_put_line(fh, '-- NOTE: This is a "' || buf1.install_timing || '" Materialized View'); + end if; + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + script_put_line(fh, ''); + script_put_line(fh, '--DBMS_METADATA:' || g_schema_name || + '.' || buf1.mview_name); + big_put_line(fh, g_schema_name || '.' || buf1.mview_name || ' Materialized View' + ,COMMON_UTIL.vw_split_str + (COMMON_UTIL.escape_at_sign + (dbms_metadata.get_ddl + (object_type => 'MATERIALIZED_VIEW' + ,name => buf1.mview_name + ,schema => g_schema_name) ) ) + ,common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '-- Comments'); + script_put_line(fh, ''); + script_put_line(fh, '--DBMS_METADATA:' || g_schema_name || + '.' || buf1.mview_name); + BEGIN + big_put_line(fh, g_schema_name || '.' || buf1.mview_name || ' Materialized View' + ,dbms_metadata.get_dependent_ddl(object_type => 'COMMENT' + ,base_object_name => buf1.mview_name + ,base_object_schema => g_schema_name) + ,common_util.MAX_SQL_LEN); + EXCEPTION + WHEN DBMS_METADATA.object_not_found2 + THEN + null; + END; + script_put_line(fh, ''); + -- DBA_TAB_PRIVS list Materialized Views as Tables + get_object_grants(fh, buf1.mview_name, 'TABLE'); + get_synonyms(fh, buf1.mview_name, 'MATERIALIZED VIEW', common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + end loop; +end cr_mvw; + +------------------------------------------------------------ +-- Create Java Source +procedure cr_pjava +is + OTYPE CONSTANT varchar2(100) := 'JAVA_SOURCE'; + fh sf_ptr_type; -- object script file handle +begin + for buf1 in (select object_name SOURCE_NAME + ,object_name || '.' || ext FILE_NAME + ,install_timing + from obj_install_object_tab pjava + where install_type = g_install_type + and object_owner = g_schema_name + and object_type = 'JAVA SOURCE' + and install_otype = OTYPE + order by object_name + ,object_type) + loop + fh := script_open(in_filename => buf1.file_name + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create ' || g_schema_name || '.' || buf1.source_name ||' Java'); + script_put_line(fh, '--'); + script_put_line(fh, '-- DBMS_METADATA does not include the "create or replace" in this source'); + script_put_line(fh, '-- "create or replace can be added, if needed.'); + if buf1.install_timing != 'CURRENT' + then + script_put_line(fh, ''); + script_put_line(fh, '-- NOTE: This is a " || buf1.install_timing || " Java Source'); + end if; + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + script_put_line(fh, ''); + script_put_line(fh, '--DBMS_METADATA:' || g_schema_name || '.' || buf1.source_name); + big_put_line(fh, g_schema_name || '.' || buf1.source_name || ' Java Source' + ,COMMON_UTIL.escape_at_sign + (dbms_metadata.get_ddl + (object_type => 'JAVA_SOURCE' + ,name => buf1.source_name + ,schema => g_schema_name) ) + ,common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + get_object_grants(fh, buf1.source_name, 'JAVA SOURCE'); + get_synonyms(fh, buf1.source_name, 'JAVA SOURCE', common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + for buf2 in ( + select name CLASS_NAME + from dba_java_classes + where owner = g_schema_name + and source = buf1.source_name + order by name) + loop + script_put_line(fh, '----------------------------------------'); + script_put_line(fh, '-- Class: ' || buf2.class_name); + script_put_line(fh, ''); + -- Oracle Database 12c Release 1 (12.1) + -- Database Java Developer''s Guide + -- 10 Security for Oracle Database Java Applications + -- Setting Permissions + -- http://docs.oracle.com/database/121/JJDEV/chten.htm#JJDEV13326 + script_put_line(fh, '-- "JAVA_CLASS" Fine-Grained Java Permissions'); + script_put_line(fh, '-- Note: "GRANTEE" Fine-Grained Java Permissions are given during User creation'); + script_put_line(fh, '--'); + FOR jpol in + (select seq + ,kind + ,java_class_owner + ,java_class_grant + ,java_class_mask + ,java_class_permission + ,grantee + ,enabled + from priv_obj_java_fg_view + where install_type = g_install_type + and install_type_selector = 'JAVA_CLASS' -- Grantee has already been created + and regexp_like(buf2.class_name, java_class_mask) + order by seq) + LOOP + script_put_line(fh, '-- SEQ:' || jpol.seq || ', ' || + jpol.kind || ' ' || + jpol.java_class_permission || ' on ' || + jpol.java_class_owner || ':' || + jpol.java_class_grant || ' - ' || + jpol.java_class_mask || ' to ' || + jpol.grantee || ' ' || + jpol.enabled ); + script_put_line(fh, 'BEGIN'); + script_put_line(fh, ' dbms_java.grant_permission' || '(''' || + jpol.grantee || ''', ''' || + jpol.java_class_owner || ':' || + jpol.java_class_grant || ''', ''' || + jpol.java_class_mask || ''', ''' || + jpol.java_class_permission || ''');' ); + script_put_line(fh, 'END;' ); + script_put_line(fh, '/' ); + END LOOP; + get_object_grants(fh, buf2.class_name, 'JAVA CLASS'); + get_synonyms(fh, buf2.class_name, 'JAVA CLASS', common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + end loop; + script_put_line(fh, 'set define on'); + script_close(fh); + end loop; +end cr_pjava; + +------------------------------------------------------------ +-- Create Roles and SYS Grants +procedure cr_rol +is + OTYPE CONSTANT varchar2(100) := 'ROLE'; + fh sf_ptr_type; -- object script file handle + sql_txt varchar2(32767); +begin + for buf1 in + (select user_or_role ROLENAME + ,user_or_role || '.' || ext FILE_NAME + from uor_install_view + where uor_type = 'ROLE' + and install_type = g_install_type + order by user_or_role) + loop + fh := script_open(in_filename => buf1.file_name + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_SQL_LEN); + dbms_output.put_line('buf1.file_name = ' || buf1.file_name); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create ' || buf1.rolename || ' Role'); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + script_put_line(fh, ''); + script_put_line(fh, 'create role ' || buf1.rolename || ';'); + script_put_line(fh, ''); + script_put_line(fh, ''); + script_put_line(fh, '-- Grant SYS Objects (but not directories)'); + script_put_line(fh, ''); + for buf2 in (select object_owner OWNER + ,object_name TABLE_NAME + ,privilege + ,max(grantable) GRANTABLE + from priv_sysobj_privileges_view + where grantee = buf1.rolename + -- All directories are owned by SYS, so skip them + and object_type != 'DIRECTORY' + -- LCR$ Logical Change Record: Keep because their definition doesn't change + -- AQ$ Queue Tables and Views: Keep because the name should not change between databases + -- SYS_PLSQL Pipelined Type Objects: Created and granted with pipeline package/function + and object_name not like common_util.PIPELINE_TYPE_MATCH escape '\' + -- QT*_BUFFER Queue Views: Skip here and grant with Advanced Queue + -- https://blogs.oracle.com/db/entry/oracle_support_master_note_for_troubleshooting_advanced_queuing_and_oracle_streams_propagation_issue + -- Note that when queue table is created, a view called QT_BUFFER is created in the SYS schema, and the queue table owner is given + -- SELECT privileges on it. The corresponds to the object_id of the associated queue table + and object_name not like common_util.QUEUE_VIEW_TYPE_MATCH escape '\' + group by object_owner + ,object_name + ,grantee + ,privilege + order by object_owner + ,object_name + ,grantee + ,privilege) + loop + -- Can't find an appropriate DBMS_METADATA for this, so manually create the SQL + sql_txt := 'grant ' || buf2.privilege || + ' on "' || buf2.owner || '"."' || buf2.table_name || '"' || + ' to "' || buf1.rolename || '"'; + -- "with hierarchy option" has not yet been implemented + -- Not applicable for ROLES + --if buf2.grantable = 'YES' + --then + -- sql_txt := sql_txt || ' with grant option'; + --end if; + big_put_line(fh, buf2.owner || '.' || buf2.table_name || + ' Grant', sql_txt || ';' + ,common_util.MAX_SQL_LEN); + END LOOP; + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + end loop; +end cr_rol; + +------------------------------------------------------------ +-- Create Database Trigger +procedure cr_schtrg +is + OTYPE CONSTANT varchar2(100) := 'SCHEMA_TRIGGER'; + fh sf_ptr_type; -- object script file handle +begin + for buff in (select object_name TRIGGER_NAME + ,ext + ,install_timing + from obj_install_object_view + where install_type = g_install_type + and object_owner = g_schema_name + and install_otype = OTYPE + order by trigger_name + ,ext + ,install_timing) + loop + if NOT script_is_open(fh) + then + fh := script_open(in_filename => g_schema_name || '.' || buff.ext + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create Schema Triggers for ' || g_install_type); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + end if; + script_put_line(fh, ''); + script_put_line(fh, '-- NOTE: This is a "' || buff.install_timing || '" Trigger'); + script_put_line(fh, ''); + script_put_line(fh, '--DBMS_METADATA:' || g_schema_name || + '.' || buff.trigger_name ); + big_put_line(fh, g_schema_name || '.' || buff.trigger_name || ' Trigger' + ,COMMON_UTIL.escape_at_sign + (dbms_metadata.get_ddl + (object_type => 'TRIGGER' + ,name => buff.trigger_name + ,schema => g_schema_name) ) + ,common_util.MAX_SQL_LEN); + end loop; + if script_is_open(fh) + then + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + end if; +end cr_schtrg; + +------------------------------------------------------------ +-- Create Synonym +procedure cr_syn +is + OTYPE CONSTANT varchar2(100) := 'SYNONYM'; + fh sf_ptr_type; -- object script file handle +begin + for buf1 in + (select synonym_name + ,ext + from obj_install_synonym_tab + where install_type = g_install_type + and install_type_selector = 'TARGET' -- Synonym install delayed for this Target + and synonym_owner = g_schema_name + group by synonym_name, ext + order by synonym_name ) + loop + if NOT script_is_open(fh) + then + fh := script_open(in_filename => g_schema_name || '.' || buf1.ext + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create ' || g_schema_name || ' Synonyms'); + script_put_line(fh, '--'); + script_put_line(fh, '-- Synonyms from objects owned by "sys" Install Type Schema'); + script_put_line(fh, '-- Also, synonyms delayed waiting for target installation.'); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + end if; + script_put_line(fh, ''); + script_put_line(fh, '--DBMS_METADATA:' || g_schema_name || + '.' || buf1.synonym_name); + -- Includes DB_LINK in Synonym + big_put_line(fh, g_schema_name || '.' || buf1.synonym_name || ' Synonym' + ,dbms_metadata.get_ddl(object_type => 'SYNONYM' + ,name => buf1.synonym_name + ,schema => g_schema_name) + ,common_util.MAX_SQL_LEN); + end loop; + if script_is_open(fh) + then + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + end if; +end cr_syn; + +------------------------------------------------------------ +-- Create Table Scripts +procedure cr_tab +is + POTYPE varchar2(100) := ''; + OTYPE varchar2(100) := 'TABLE'; + fh sf_ptr_type; -- object script file handle +begin + for buf1 in (select obj.object_name TABLE_NAME + ,obj.object_name || '.' || obj.ext FILE_NAME + ,obj.install_timing + ,xt.table_name XML_TABLE_NAME + from obj_install_object_tab obj + left join dba_xml_tables xt + on xt.owner = obj.object_owner + and xt.table_name = obj.object_name + where obj.install_type = g_install_type + and obj.object_owner = g_schema_name + and obj.install_otype = OTYPE + -- Ignore Indexed Organized Overflow Tables + -- Ignore Indexed Organized Mapping Tables + and not exists (select 'x' from dba_tables tab + where tab.owner = g_schema_name + and tab.table_name = obj.object_name + and tab.iot_type in ('IOT_OVERFLOW','IOT_MAPPING') ) + -- Materialized View Tables: Auto-created with Materialized View + and not exists (select 'x' from dba_mviews mv + where mv.owner = g_schema_name + and mv.mview_name = obj.object_name) + -- Queue Tables: Skip here and recreate with Advanced Queue + and not exists (select 'x' from dba_queue_tables qt + where qt.owner = g_schema_name + and ( obj.object_name = qt.queue_table + -- MUST be more discriminating than "tab.table_name like 'AQ$%' || qt.queue_table || '%'" + or regexp_like(obj.object_name,common_util.QUEUE_NAME_PREFIX_REGEXP || + qt.queue_table || + common_util.QUEUE_NAME_SUFFIX_REGEXP ) ) ) + order by obj.object_name ) + loop + fh := script_open(in_filename => buf1.file_name + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create ' || g_schema_name || '.' || buf1.table_name || ' Table'); + script_put_line(fh, '--'); + script_put_line(fh, '-- NOTE: Foreign keys are in a different script'); + script_put_line(fh, '-- Indexes are in a different script'); + script_put_line(fh, '-- Triggers are in a different script'); + script_put_line(fh, '--'); + if buf1.install_timing != 'CURRENT' + then + script_put_line(fh, ''); + script_put_line(fh, '-- NOTE: This is a "' || buf1.install_timing || '" Table'); + end if; + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + script_put_line(fh, ''); +-- if buf1.table_type = 'XMLTABLE' +-- then +-- -- DBMS_METADATA incorrectly creates XMLTables with the +-- -- "ALLOW NONSCHEMA DISALLOW ANYSCHEMA" clause, but without the +-- -- "XMLTYPE STORE AS BINARY XML" clause, resulting in an ORA-00922 +-- script_put_line(fh, 'CREATE TABLE "' || g_schema_name || +-- '"."' || buf1.table_name || '" OF XMLTYPE;'); +-- else + script_put_line(fh, '--DBMS_METADATA:' || g_schema_name || + '.' || buf1.table_name ); + big_put_line(fh, g_schema_name || '.' || buf1.table_name || ' Table' + ,dbms_metadata.get_ddl(object_type => 'TABLE' + ,name => buf1.table_name + ,schema => g_schema_name) + ,common_util.MAX_SQL_LEN); +-- end if; + script_put_line(fh, ''); + script_put_line(fh, '-- Comments'); + script_put_line(fh, ''); + script_put_line(fh, '--DBMS_METADATA:' || g_schema_name || + '.' || buf1.table_name); + BEGIN + big_put_line(fh, g_schema_name || '.' || buf1.table_name || ' Table' + ,dbms_metadata.get_dependent_ddl(object_type => 'COMMENT' + ,base_object_name => buf1.table_name + ,base_object_schema => g_schema_name) + ,common_util.MAX_SQL_LEN); + EXCEPTION + WHEN DBMS_METADATA.object_not_found2 + THEN + null; + END; + script_put_line(fh, ''); + get_object_grants(fh, buf1.table_name, 'TABLE'); + get_synonyms(fh, buf1.table_name, 'TABLE', common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + end loop; +end cr_tab; + +------------------------------------------------------------ +-- Create Trigger Scripts +procedure cr_trg + (in_otype in varchar2) +is + fh sf_ptr_type; -- object script file handle + old_own varchar2(1000); + old_tab varchar2(1000); + fname varchar2(1000); +begin + old_own := 'This is not an Owner Name.'; + old_tab := 'This is not a Table name.'; + for buff in (select target_name TABLE_NAME + ,target_owner TABLE_OWNER + ,target_name || '.' || ext FILE_NAME + ,target_type + ,trigger_name + ,install_type_selector + from obj_install_trigger_tab + where trigger_owner = g_schema_name + and install_otype = in_otype + and install_type = g_install_type + order by target_owner + ,target_name + ,trigger_name ) + loop + if buff.table_owner != old_own + or buff.table_name != old_tab + then + if script_is_open(fh) + then + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + end if; + old_own := buff.table_owner; + old_tab := buff.table_name; + if buff.table_owner = g_schema_name + then + fname := buff.file_name; + else + fname := buff.table_owner || '.' || buff.file_name; + end if; + fh := script_open(in_filename => fname -- buff.file_name + ,in_otype => in_otype + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create Triggers for ' || buff.table_owner || + '.' || buff.table_name || + ' ' || buff.target_type ); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + end if; + script_put_line(fh, ''); + script_put_line(fh, '-- NOTE: This is a "' || buff.install_type_selector || '" Trigger'); + script_put_line(fh, ''); + script_put_line(fh, '--DBMS_METADATA:' || g_schema_name || + '.' || buff.trigger_name ); + big_put_line(fh, g_schema_name || '.' || buff.trigger_name || ' Trigger' + ,COMMON_UTIL.escape_at_sign + (dbms_metadata.get_ddl + (object_type => 'TRIGGER' + ,name => buff.trigger_name + ,schema => g_schema_name) ) + ,common_util.MAX_SQL_LEN); + end loop; + if script_is_open(fh) + then + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + end if; +end cr_trg; + +------------------------------------------------------------ +-- Create Users and SYS Grants +procedure cr_usr +is + OTYPE CONSTANT varchar2(100) := 'USER'; + fh sf_ptr_type; -- object script file handle + sql_txt varchar2(32767); +begin + for buf1 in (select sc.username + ,sc.username || '.' || otc.ext FILE_NAME + ,sc.ts_size + ,sc.tablespace_name + from schema_conf sc + join otype_conf otc + on otc.install_otype = 'USER' + where sc.install_type = g_install_type + order by sc.username) + loop + fh := script_open(in_filename => buf1.file_name + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create ' || buf1.username || ' Schema'); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + script_put_line(fh, 'create user "' || buf1.username || '"'); + script_put_line(fh, ' identified by "' || buf1.username || '"'); + script_put_line(fh, ' default tablespace ' || buf1.tablespace_name); + script_put_line(fh, ' temporary tablespace TEMP'); + script_put_line(fh, ' profile DEFAULT'); + script_put_line(fh, ' quota ' || buf1.ts_size || ' on ' || buf1.tablespace_name); + script_put_line(fh, ';'); + script_put_line(fh, ''); + script_put_line(fh, '-- Grant SYS Objects (but not directories)'); + script_put_line(fh, ''); + for buf2 in (select object_owner + ,object_name + ,object_type + ,privilege + ,max(grantable) GRANTABLE + from priv_sysobj_privileges_view + where grantee = buf1.username + -- All directories are owned by SYS, so skip them + and object_type != 'DIRECTORY' + -- LCR$ Logical Change Record: Keep because their definition doesn't change + -- AQ$ Queue Tables and Views: Keep because the name should not change between databases + -- SYS_PLSQL Pipelined Type Objects: Created and granted with pipeline package/function + and object_name not like common_util.PIPELINE_TYPE_MATCH escape '\' + -- QT*_BUFFER Queue Views: Skip here and grant with Advanced Queue + -- https://blogs.oracle.com/db/entry/oracle_support_master_note_for_troubleshooting_advanced_queuing_and_oracle_streams_propagation_issue + -- Note that when queue table is created, a view called QT_BUFFER is created in the SYS schema, and the queue table owner is given + -- SELECT privileges on it. The corresponds to the object_id of the associated queue table + and object_name not like common_util.QUEUE_VIEW_TYPE_MATCH escape '\' + group by object_owner + ,object_name + ,object_type + ,privilege + order by object_owner + ,object_name + ,object_type + ,privilege) + loop + -- Can't find an appropriate DBMS_METADATA for this, so manually create the SQL + -- + -- These "types" don't require a grant quailifier: + -- -) FUNCTION + -- -) INDEXTYPE + -- -) LIBRARY + -- -) MATERIALIZED VIEW + -- -) OPERATOR + -- -) PACKAGE + -- -) PROCEDURE + -- -) SEQUENCE + -- -) TABLE + -- -) TYPE + -- -) VIEW + -- + -- Other forms (and "types") include: + -- -) ON DIRECTORY (DIRECTORY) - Handled in "cr_dir" + -- -) ON USER (USER) - Handled HERE and in "get_object_grants" + -- -) ON EDITION (EDITION) - Handled HERE and in "get_object_grants" + -- -) ON JAVA SOURCE (JAVA CLASS) - Handled HERE and in "get_object_grants" and "cr_pjava" + -- -) ON JAVA RESOURCE (JAVA RESOURCE) - Handled HERE and in "get_object_grants" + -- -) ON MINING MODEL (MLE LANGUAGE?) - Not Handled + -- -) ON SQL TRANSLATION PROFILE (???) - Not Handled + -- + sql_txt := 'grant ' || buf2.privilege || + ' on ' || case buf2.object_type when 'JAVA CLASS' then 'JAVA SOURCE "' || buf2.object_owner || '"."' + when 'JAVA SOURCE' then 'JAVA SOURCE "' || buf2.object_owner || '"."' + when 'JAVA RESOURCE' then 'JAVA RESOURCE "' || buf2.object_owner || '"."' + when 'EDITION' then 'EDITION "' + when 'USER' then 'USER "' + else '"' || buf2.object_owner || '"."' + end || buf2.object_name || + '" to "' || buf1.username || '"'; + -- "with hierarchy option" has not yet been implemented + if buf2.grantable = 'YES' + then + sql_txt := sql_txt || ' with grant option'; + end if; + big_put_line(fh, buf2.object_owner || '"."' || buf2.object_name || + ' Grant', sql_txt || ';' + ,common_util.MAX_SQL_LEN); + END LOOP; + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + end loop; +end cr_usr; + +------------------------------------------------------------ +-- Create View Scripts +procedure cr_vw +is + POTYPE varchar2(100) := ''; + OTYPE varchar2(100) := 'VIEW'; + fh sf_ptr_type; -- object script file handle +begin + for buf1 in (select obj.object_name VIEW_NAME + ,obj.object_name || '.' || obj.ext FILE_NAME + ,obj.install_timing + from obj_install_object_tab obj + left join dba_xml_tables xt + on xt.owner = obj.object_owner + and xt.table_name = obj.object_name + where obj.install_type = g_install_type + and obj.object_owner = g_schema_name + and obj.install_otype = OTYPE + -- Queue Table Views: Skip here and recreate with Advanced Queue + and not exists (select 'x' from dba_queue_tables qt + where qt.owner = g_schema_name + and ( obj.object_name = qt.queue_table + -- MUST be more discriminating than "tab.table_name like 'AQ$%' || qt.queue_table || '%'" + or regexp_like(obj.object_name,common_util.QUEUE_NAME_PREFIX_REGEXP || + qt.queue_table || + common_util.QUEUE_NAME_SUFFIX_REGEXP ) ) ) + order by obj.object_name ) + loop + fh := script_open(in_filename => buf1.file_name + ,in_otype => OTYPE + ,in_max_linesize => common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Create ' || g_schema_name || '.' || buf1.view_name || ' view'); + script_put_line(fh, '--'); + script_put_line(fh, '-- NOTE: Foreign keys are in a difference script'); + script_put_line(fh, '-- Triggers are in a difference script'); + script_put_line(fh, '--'); + script_put_line(fh, ''); + script_put_line(fh, 'set define off'); + script_put_line(fh, ''); + if buf1.install_timing != 'CURRENT' + then + script_put_line(fh, ''); + script_put_line(fh, '-- Note: This is a "' || buf1.install_timing || '" View'); + end if; + script_put_line(fh, ''); + script_put_line(fh, '--'); + script_put_line(fh, '-- Need to avoid errors granting permisions on a view that has errors'); + script_put_line(fh, '-- Found this technique on Ask Tom'); + script_put_line(fh, '-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987'); + script_put_line(fh, 'create view "' || g_schema_name || '"."' || buf1.view_name || '"'); + script_put_line(fh, ' as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE;'); + get_object_grants(fh, buf1.view_name, 'VIEW'); + script_put_line(fh, ''); + script_put_line(fh, ''); + script_put_line(fh, '--DBMS_METADATA:' || g_schema_name || + '.' || buf1.view_name); + big_put_line(fh, g_schema_name || '.' || buf1.view_name || ' View' + ,COMMON_UTIL.vw_split_str + (COMMON_UTIL.escape_at_sign + (dbms_metadata.get_ddl + (object_type => 'VIEW' + ,name => buf1.view_name + ,schema => g_schema_name) ) ) + ,common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, '-- Comments'); + script_put_line(fh, ''); + script_put_line(fh, '--DBMS_METADATA:' || g_schema_name || + '.' || buf1.view_name); + BEGIN + big_put_line(fh, g_schema_name || '.' || buf1.view_name || ' View' + ,dbms_metadata.get_dependent_ddl(object_type => 'COMMENT' + ,base_object_name => buf1.view_name + ,base_object_schema => g_schema_name) + ,common_util.MAX_SQL_LEN); + EXCEPTION + WHEN DBMS_METADATA.object_not_found2 + THEN + null; + END; + script_put_line(fh, ''); + get_object_grants(fh, buf1.view_name, 'VIEW'); + get_synonyms(fh, buf1.view_name, 'VIEW', common_util.MAX_SQL_LEN); + script_put_line(fh, ''); + script_put_line(fh, 'set define on'); + script_close(fh); + end loop; +end cr_vw; + + +------------------------------------------------------------ +--- Setup and Main Control --- +------------------------------------------------------------ + + +------------------------------------------------------------ +-- Initialize this Package +procedure initialize + (in_install_type in varchar2) +is + -- Set the Installation Type + procedure set_install_type + is + l_notes type_conf.notes%type; + begin + if in_install_type in ('sys','pub') + then + raise_application_error (-20000, 'Install Type of "sys" or "pub" is not allowed: ' || in_install_type); + end if; + begin + select notes + into l_notes + from TYPE_CONF + where install_type = in_install_type; + exception when NO_DATA_FOUND then + raise_application_error (-20000, 'Invalid Install Type: ' || in_install_type); + end; + g_install_type := in_install_type; + dbms_output.put_line('g_install_type = ' || g_install_type || ', ' || l_notes); + end set_install_type; + -- +begin + script_close_all; + -- Set Globals + g_install_type := null; + g_schema_name := null; + set_install_type; + if sf_aa.EXISTS(g_install_type) then sf_aa(g_install_type).DELETE; end if; + -- Checks and Settings + COMMON_UTIL.check_filenames(g_install_type); + COMMON_UTIL.dbms_metadata_settings; +end initialize; + +------------------------------------------------------------ +-- Set the Schema Name +procedure set_schema_name + (in_schema_name in varchar2) +is +begin + g_schema_name := in_schema_name; + dbms_output.put_line('g_schema_name = ' || g_schema_name); +end set_schema_name; + +------------------------------------------------------------ +-- Generate SYS/SYSTEM Installation Scripts +procedure gen_installs +is +begin + ------------------------------------------------------------ + set_schema_name('SYS'); + cr_acl; + cr_dbtrg; + cr_rol; + cr_usr; + ------------------------------------------------------------ + set_schema_name('SYSTEM'); + cr_dir; + cr_grnt; -- Includes "FUTURE" Grants + cr_schtrg; + ------------------------------------------------------------ + set_schema_name('PUBLIC'); + cr_dblnk; + cr_syn; + ------------------------------------------------------------ + set_schema_name(''); + cr_install_master; + cr_install_sys; + cr_install_system; +end gen_installs; + +------------------------------------------------------------ +-- Generate NON SYS/SYSTEM Installation Scripts +procedure gen_schemas +is + -- Loop through all scripts + procedure all_schema_scripts is + begin + cr_aq; + cr_aqt; + cr_cdl; + cr_common('FUNCTION' ,'Function' ); --cr_fnc; + cr_common('PACKAGE_BODY' ,'Package Body'); --cr_pkb; + cr_common('PACKAGE_SPEC' ,'Package' ); --cr_pks; + cr_common('PROCEDURE' ,'Procedure' ); --cr_prc; + cr_common('SCHEDULER_JOB' ,'Job' ); --cr_schdj; + cr_common('SCHEDULER_PROGRAM' ,'Program' ); --cr_schdp; + cr_common('SCHEDULER_SCHEDULE','Schedule' ); --cr_schds; + cr_common('SEQUENCE' ,'Sequence' ); --cr_seq; + cr_common('TYPE_BODY' ,'Type Body' ); --cr_tpb; + cr_common('TYPE_SPEC' ,'Type' ); --cr_tps; + cr_ctx; + cr_dblnk; + cr_fk('MVIEW_FOREIGN_KEY'); + cr_fk('TABLE_FOREIGN_KEY'); + cr_fk('VIEW_FOREIGN_KEY'); + cr_ind('MVIEW_INDEX'); + cr_ind('TABLE_INDEX'); + cr_mvw; + cr_pjava; + cr_syn; + cr_tab; + cr_trg('MVIEW_TRIGGER'); + cr_trg('TABLE_TRIGGER'); + cr_trg('VIEW_TRIGGER'); + cr_vw; + end all_schema_scripts; +begin + for sch in (select obj.object_owner + from schema_objects_vw obj + join schema_conf sl + on sl.username = obj.object_owner + where obj.install_type = g_install_type + and obj.object_owner != 'PUBLIC' + group by obj.object_owner + order by obj.object_owner) + loop + set_schema_name(sch.object_owner); + all_schema_scripts; + end loop; + set_schema_name(''); + cr_install_schemas; +end gen_schemas; + + +------------------------------------------------------------ +--- PUBLIC API --- +------------------------------------------------------------ + + +------------------------------------------------------------ +-- Generate All Installation Scripts into the sf_aa array +procedure all_scripts + (in_install_type in varchar2) +is +begin + dbms_output.put_line('Running ' || $$PLSQL_UNIT || '.all_scripts' || + '(in_install_type "' || in_install_type || '")' ); + initialize(in_install_type); + gen_installs; + gen_schemas; + script_close_all; +end all_scripts; + +------------------------------------------------------------ +-- Write Scripts +procedure write_scripts + (in_zip_file_name in varchar2 + ,in_folder_name in varchar2 default '') +is + FH_BUFFER_SIZE CONSTANT pls_integer := 32767; + fh UTL_FILE.FILE_TYPE; + fh_ptr pls_integer; + inst_type varchar2(10); + inst_ord pls_integer; + file_id pls_integer; + schema_name varchar2(128); + dir_path varchar2(256); + filename varchar2(500); + root_dir_name varchar2(128); + zip_file_size pls_integer; + sql_txt varchar2(4000); + root_dir_path varchar2(128); + buffer_blob BLOB; + zipped_blob BLOB; +begin + dbms_output.put_line('Running ' || $$PLSQL_UNIT || '.write_scripts' || + '(in_zip_file_name "' || in_zip_file_name || + '", in_folder_name "' || in_folder_name || '")' ); + if in_zip_file_name is null + then + raise_application_error(-20000, 'No Zip File Specified'); + end if; + if NOT sf_aa.COUNT > 0 + then + raise_application_error(-20000, 'No files to write from Buffers: ' || sf_aa.COUNT); + end if; + ---------------------------------------------- + -- Write Scripts from sf_aa to ZIP_FILES Table + -- Install Type Loop + inst_type := sf_aa.FIRST; + <> + loop + -- Install Order Loop + inst_ord := sf_aa(inst_type).FIRST; + <> + loop + -- + -- File ID Loop + file_id := sf_aa(inst_type)(inst_ord).FIRST; + <> + loop + -- + schema_name := sf_aa(inst_type)(inst_ord)(file_id).schema_name; + dir_path := inst_type; + if schema_name is not null + then + dir_path := dir_path || '/' || schema_name; + end if; + filename := sf_aa(inst_type)(inst_ord)(file_id).filename; + if sf_aa(inst_type)(inst_ord)(file_id).is_open != 'N' + then + DBMS_OUTPUT.PUT_LINE('WARNING: ' || dir_path || + '/' || filename || ' was not closed'); + end if; + -- + dbms_output.put(dir_path || '/' || filename || + ' total_bytes: ' || sf_aa(inst_type)(inst_ord)(file_id).total_bytes); + DBMS_LOB.CREATETEMPORARY(buffer_blob, FALSE); + -- + -- BUFFER_LOOP + for i in 1 .. sf_aa(inst_type)(inst_ord)(file_id).num_buffers + loop + DBMS_LOB.APPEND(buffer_blob + ,UTL_RAW.CAST_TO_RAW(sf_aa(inst_type)(inst_ord)(file_id).buffer_aa(i).buffer)); + dbms_output.put(', ' || i || ':' || sf_aa(inst_type)(inst_ord)(file_id).buffer_aa(i).len); + end loop; --BUFFER_LOOP + dbms_output.put_line('.'); + -- + -- There should not be any leading "/" in "dir_path" + -- ("inst_type" cannot be NULL because Associative Array Indexes cannot be NULL) + zip_util_pkg.add_file(zipped_blob + ,dir_path || '/' || filename + ,buffer_blob); + DBMS_LOB.TRIM(buffer_blob, 0); + -- + exit FILE_LOOP1 when file_id = sf_aa(inst_type)(inst_ord).LAST; + file_id := sf_aa(inst_type)(inst_ord).NEXT(file_id); + end loop; --FILE_LOOP1 + -- + exit ORD_LOOP1 when inst_ord = sf_aa(inst_type).LAST; + inst_ord := sf_aa(inst_type).NEXT(inst_ord); + end loop; --ORD_LOOP1 + -- + exit TYPE_LOOP1 when inst_type = sf_aa.LAST; + inst_type := sf_aa.NEXT(inst_type); + end loop; --TYPE_LOOP1 + -- + zip_util_pkg.finish_zip(zipped_blob); + insert into zip_files + (file_name + ,file_size + ,file_blob) + values + (in_zip_file_name + ,DBMS_LOB.GETLENGTH(zipped_blob) + ,zipped_blob); + commit; + if length(in_folder_name) > 0 + then + --------------------------------------- + -- Write Zip File to UTL_FILE + begin + select dir.directory_name, dir.directory_path, zf.file_size + into root_dir_name , root_dir_path , zip_file_size + from dba_directories dir + join zip_files zf + on zf.file_name = in_zip_file_name + where dir.directory_path = in_folder_name; + exception when others then + raise_application_error(-20000, + 'Unable to find unique Oracle Directory Object with DIRECTORY_PATH: ' || + in_folder_name || '. ' || SQLERRM); + DBMS_LOB.TRIM(zipped_blob, 0); + end; + dbms_output.put_line('Writing file "' || in_zip_file_name || + '" to folder "' || root_dir_path || '"'); + fh := utl_file.fopen(location => root_dir_name + ,filename => in_zip_file_name + ,open_mode => 'wb' + ,max_linesize => FH_BUFFER_SIZE); + fh_ptr := 1; + while fh_ptr <= zip_file_size + loop + utl_file.put_raw(fh, dbms_lob.substr(zipped_blob, FH_BUFFER_SIZE, fh_ptr), TRUE); + fh_ptr := fh_ptr + FH_BUFFER_SIZE; + end loop; + utl_file.fflush(fh); + utl_file.fclose(fh); + end if; + -- + DBMS_LOB.TRIM(zipped_blob, 0); +end write_scripts; + +------------------------------------------------------------ +-- Clear Buffers +procedure clear_buffers + (in_install_type in varchar2 default null) +is +begin + if in_install_type is null + then + sf_aa.DELETE; + else + sf_aa(in_install_type).DELETE; + end if; +end clear_buffers; + +------------------------------------------------------------ +-- Get Version +function get_version + return varchar2 +is +begin + return 'V2.1'; +end get_version; + + +end grab_scripts; +/ + +set define on diff --git a/grbsrc/ODBCAPTURE/GRAB_SCRIPTS.pspec b/grbsrc/ODBCAPTURE/GRAB_SCRIPTS.pspec new file mode 100644 index 0000000..3498c3c --- /dev/null +++ b/grbsrc/ODBCAPTURE/GRAB_SCRIPTS.pspec @@ -0,0 +1,214 @@ + +-- +-- Create ODBCAPTURE.GRAB_SCRIPTS Package +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.GRAB_SCRIPTS + + CREATE OR REPLACE EDITIONABLE PACKAGE "ODBCAPTURE"."GRAB_SCRIPTS" + authid current_user +as + + --Database Views: + ----------------- + + -- GRAB_SCRIPTS.cr_grnt + -- priv_system_privileges_view + -- priv_role_privileges_view + -- priv_queue_sysprivs_view + -- priv_obj_install_vw + -- priv_obj_queue_view + -- priv_obj_java_fg_view + + -- zx_priv_all_view (_tab) + -- priv_queue_register_view + -- obj_install_object_view (_tab) + -- priv_queue_subscribe_view + -- obj_install_object_view (_tab) + -- priv_queue_sysprivs_view + -- aq_system_privs_vw + -- priv_obj_queue_view + -- obj_install_object_view (_tab) + -- priv_obj_java_fg_view + -- uor_install_view + -- priv_obj_dir_view + -- priv_obj_dir_dflt_vw + -- priv_obj_dir_nondflt_vw + -- priv_obj_xdbacl_view + -- priv_obj_xdbacl_dflt_vw + -- priv_obj_xdbacl_nondflt_vw + -- priv_obj_install_vw + -- obj_install_object_view (_tab) + -- priv_role_privileges_view + -- uor_install_view + -- priv_system_privileges_view + -- uor_install_view + -- priv_sysobj_privileges_view + -- uor_install_view + + -- uor_install_view + + -- schema_objects_vw (GRAB_SCRIPTS.schemas) + -- zx_obj_install_view (_tab) + -- obj_install_context_view + -- obj_install_index_view + -- obj_install_fkey_view + -- obj_install_trigger_view + -- obj_install_synonym_view + -- obj_install_object_view + -- data_load_install_view + + -- obj_install_context_view + -- obj_install_context_dflt_vw + -- obj_install_object_view + -- dba_objects_view (_tab) + -- obj_install_context_nondflt_vw + -- obj_install_object_view + -- dba_objects_view (_tab) + + -- obj_install_comments_view (_tab) + -- obj_install_object_view + -- uor_install_view + + -- obj_install_index_view + -- obj_install_object_view + -- dba_objects_view (_tab) + + -- obj_install_fkey_view + -- obj_install_object_view + + -- obj_install_trigger_view + -- obj_install_object_view + + -- obj_install_synonym_view + -- obj_install_synonym_dflt_vw + -- dba_objects_view (_tab) + -- obj_install_synonym_nondflt_vw + -- dba_objects_view (_tab) + + -- obj_install_object_view + -- dba_dependencies_view (_tab) + -- obj_install_object_dflt_vw + -- dba_objects_view (_tab) + -- obj_install_object_nondflt_vw + -- dba_objects_view (_tab) + + -- dba_objects_view (_tab) + + -- + -- DBA OBJECT TYPES + -- (https://renenyffenegger.ch/notes/development/databases/Oracle/installed/data-dictionary/objects/index) + -- + -- CHAIN + -- CLUSTER + -- CONSUMER GROUP + -- CONTEXT + -- DATABASE LINK + -- DESTINATION + -- DIRECTORY + -- EDITION + -- EVALUATION CONTEXT + -- FUNCTION + -- INDEX + -- INDEX PARTITION + -- INDEX SUBPARTITION + -- INDEXTYPE + -- JOB + -- JOB CLASS + -- LIBRARY + -- LOB + -- LOB PARTITION + -- MATERIALIZED VIEW + -- OPERATOR + -- PACKAGE + -- PACKAGE BODY + -- PROCEDURE + -- PROGRAM + -- QUEUE + -- RESOURCE PLAN + -- RULE + -- RULE SET + -- SCHEDULE + -- SCHEDULER GROUP + -- SEQUENCE + -- SYNONYM + -- TABLE + -- TABLE PARTITION + -- TABLE SUBPARTITION + -- TRIGGER + -- TYPE + -- TYPE BODY + -- UNDEFINED + -- VIEW + -- WINDOW + -- XML SCHEMA + + -- Script File Pointer (similar to a file handle) + TYPE sf_ptr_type is record + (inst_type varchar2(10) + ,inst_ord pls_integer + ,file_id pls_integer + ,num_lines pls_integer); + + LF constant varchar2(1) := CHR(10); + CRTN constant varchar2(1) := CHR(13); + + -- Buffer Records: One Line of Text in a Script/File + TYPE buffer_rec_type is record + (len number(5) + ,buffer varchar2(32767)); + -- Associative Array of Script/File Lines + TYPE buffer_aa_type is table + of buffer_rec_type + index by pls_integer; -- Line Number + -- File Header Record + TYPE file_rec_type is record + (max_linesize number(5) + ,total_bytes number(14) + ,num_buffers number(9) + ,is_open varchar2(1) + ,schema_name varchar2(128) + ,filename varchar2(500) + ,buffer_aa buffer_aa_type); + -- Associative Array of Files + TYPE file_aa_type is table + of file_rec_type + index by pls_integer; -- File ID + -- Associative Array of Install Order + TYPE ord_aa_type is table + of file_aa_type + index by pls_integer; -- Install Order + -- Associative Array of Install Type + TYPE it_aa_type is table + of ord_aa_type + index by varchar2(10); -- Install Type + -- Associative Array of Script Files by Install Type, Install Order, File ID, and Buffers + sf_aa it_aa_type; + + procedure all_scripts + (in_install_type in varchar2); + + procedure write_scripts + (in_zip_file_name in varchar2 + ,in_folder_name in varchar2 default ''); + + procedure clear_buffers + (in_install_type in varchar2 default null); + + function get_version + return varchar2; + +end grab_scripts; +/ + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/INSTALL_TYPE_TIMING.tab b/grbsrc/ODBCAPTURE/INSTALL_TYPE_TIMING.tab new file mode 100644 index 0000000..039180a --- /dev/null +++ b/grbsrc/ODBCAPTURE/INSTALL_TYPE_TIMING.tab @@ -0,0 +1,32 @@ + +-- +-- Create ODBCAPTURE.INSTALL_TYPE_TIMING Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.INSTALL_TYPE_TIMING + + CREATE TABLE "ODBCAPTURE"."INSTALL_TYPE_TIMING" + ( "FROM_INSTALL_TYPE" VARCHAR2(10 BYTE), + "INSTALL_TIMING" CHAR(7 BYTE), + "TO_INSTALL_TYPE" VARCHAR2(10 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.INSTALL_TYPE_TIMING + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJECT_CONF.cdl b/grbsrc/ODBCAPTURE/OBJECT_CONF.cdl new file mode 100644 index 0000000..c5824e4 --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJECT_CONF.cdl @@ -0,0 +1,59 @@ + +-- +-- Consolidated Data Load script for ODBCAPTURE.OBJECT_CONF data +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +prompt +prompt Disable Triggers and Foreign Keys +declare + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql || ';'); + execute immediate in_sql; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end run_sql; +begin + for buff in (select owner, trigger_name + from dba_triggers + where table_owner = 'ODBCAPTURE' + and table_name = 'OBJECT_CONF' + order by owner, trigger_name) + loop + run_sql('alter trigger "' || buff.owner || '"' || + '."' || buff.trigger_name || '" DISABLE'); + end loop; + for buff in (select constraint_name + from dba_constraints + where constraint_type = 'R' + and owner = 'ODBCAPTURE' + and table_name = 'OBJECT_CONF' + order by owner, constraint_name) + loop + run_sql('alter table "ODBCAPTURE"."OBJECT_CONF"' || + ' DISABLE constraint "' || buff.constraint_name || '"'); + end loop; +end; +/ + +-- NOTE: Additional file extensions for SQL*Loader include +-- .bad - Bad Records +-- .dsc - Discard Records +-- .log - Log File + +prompt +prompt sqlldr_control=ODBCAPTURE/OBJECT_CONF.ctl +host sqlldr '&1.' control=ODBCAPTURE/OBJECT_CONF.ctl data=ODBCAPTURE/OBJECT_CONF.csv log=ODBCAPTURE/OBJECT_CONF.log silent=HEADER,FEEDBACK + +begin + if '&_RC.' != '0' then + raise_application_error(-20000, 'Control file "ODBCAPTURE/OBJECT_CONF.ctl" returned error: &_RC.'); + end if; +end; +/ + diff --git a/grbsrc/ODBCAPTURE/OBJECT_CONF.csv b/grbsrc/ODBCAPTURE/OBJECT_CONF.csv new file mode 100644 index 0000000..1bc51be --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJECT_CONF.csv @@ -0,0 +1 @@ +"USERNAME","INSTALL_OTYPE","INSTALL_TYPE","ONAME_FILTER","NOTES" diff --git a/grbsrc/ODBCAPTURE/OBJECT_CONF.ctl b/grbsrc/ODBCAPTURE/OBJECT_CONF.ctl new file mode 100644 index 0000000..de6f208 --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJECT_CONF.ctl @@ -0,0 +1,11 @@ +OPTIONS (SKIP=1) +LOAD DATA +APPEND INTO TABLE "ODBCAPTURE"."OBJECT_CONF" +FIELDS CSV WITH EMBEDDED +TRAILING NULLCOLS + (USERNAME CHAR(128) + ,INSTALL_OTYPE CHAR(20) + ,INSTALL_TYPE CHAR(10) + ,ONAME_FILTER CHAR(4000) + ,NOTES CHAR(1024) + ) diff --git a/grbsrc/ODBCAPTURE/OBJECT_CONF.tab b/grbsrc/ODBCAPTURE/OBJECT_CONF.tab new file mode 100644 index 0000000..a4bc44c --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJECT_CONF.tab @@ -0,0 +1,46 @@ + +-- +-- Create ODBCAPTURE.OBJECT_CONF Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.OBJECT_CONF + + CREATE TABLE "ODBCAPTURE"."OBJECT_CONF" + ( "USERNAME" VARCHAR2(128 BYTE) NOT NULL ENABLE, + "INSTALL_OTYPE" VARCHAR2(20 BYTE) NOT NULL ENABLE, + "INSTALL_TYPE" VARCHAR2(10 BYTE) NOT NULL ENABLE, + "ONAME_FILTER" VARCHAR2(4000 BYTE) NOT NULL ENABLE, + "NOTES" VARCHAR2(1024 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "ODBCAPTURE"."OBJECT_CONF" ADD CONSTRAINT "OBJECT_CONF_PK" PRIMARY KEY ("USERNAME", "INSTALL_OTYPE", "INSTALL_TYPE") + USING INDEX ENABLE; +ALTER TABLE "ODBCAPTURE"."OBJECT_CONF" ADD CONSTRAINT "OBJECT_CONF_CK1" CHECK ( + install_otype not in ('ROLE','USER','GRANT','QUEUE_TABLE','DATA_LOAD','TABLE_FOREIGN_KEY','VIEW_FOREIGN_KEY','MVIEW_FOREIGN_KEY') + ) ENABLE; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.OBJECT_CONF + + COMMENT ON COLUMN "ODBCAPTURE"."OBJECT_CONF"."USERNAME" IS 'Name of the database schema (Primary Key Column 1). Value must be in SCHEMA_CONF table.'; + COMMENT ON COLUMN "ODBCAPTURE"."OBJECT_CONF"."INSTALL_OTYPE" IS 'Name of the object type (Primary Key Column 2). Value must be in OTYPE_CONF table.'; + COMMENT ON COLUMN "ODBCAPTURE"."OBJECT_CONF"."INSTALL_TYPE" IS 'Name of the install type (Primary Key Column 3). Value must be in TYPE_CONF table.'; + COMMENT ON COLUMN "ODBCAPTURE"."OBJECT_CONF"."ONAME_FILTER" IS 'Where clause of the selected object type to capture (Required). $$ONAME$$ is replaced with the name of the databsae object.'; + COMMENT ON COLUMN "ODBCAPTURE"."OBJECT_CONF"."NOTES" IS 'Free text field (Optional)'; + COMMENT ON TABLE "ODBCAPTURE"."OBJECT_CONF" IS 'Object name filter for each object type in a schema for an install type.'; + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJECT_CONF.tabfk b/grbsrc/ODBCAPTURE/OBJECT_CONF.tabfk new file mode 100644 index 0000000..f4e5b2a --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJECT_CONF.tabfk @@ -0,0 +1,30 @@ + +-- +-- Create Foreign Keys for ODBCAPTURE.OBJECT_CONF TABLE +-- + +set define off + + +-- NOTE: This is a "BASE TABLE" Foreign Key + +--DBMS_METADATA:ODBCAPTURE.OBJECT_CONF_FK1 + + ALTER TABLE "ODBCAPTURE"."OBJECT_CONF" ADD CONSTRAINT "OBJECT_CONF_FK1" FOREIGN KEY ("USERNAME") + REFERENCES "ODBCAPTURE"."SCHEMA_CONF" ("USERNAME") ENABLE; + +-- NOTE: This is a "BASE TABLE" Foreign Key + +--DBMS_METADATA:ODBCAPTURE.OBJECT_CONF_FK2 + + ALTER TABLE "ODBCAPTURE"."OBJECT_CONF" ADD CONSTRAINT "OBJECT_CONF_FK2" FOREIGN KEY ("INSTALL_OTYPE") + REFERENCES "ODBCAPTURE"."OTYPE_CONF" ("INSTALL_OTYPE") ENABLE; + +-- NOTE: This is a "BASE TABLE" Foreign Key + +--DBMS_METADATA:ODBCAPTURE.OBJECT_CONF_FK3 + + ALTER TABLE "ODBCAPTURE"."OBJECT_CONF" ADD CONSTRAINT "OBJECT_CONF_FK3" FOREIGN KEY ("INSTALL_TYPE") + REFERENCES "ODBCAPTURE"."TYPE_CONF" ("INSTALL_TYPE") ENABLE; + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tab b/grbsrc/ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tab new file mode 100644 index 0000000..d97f0c3 --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tab @@ -0,0 +1,38 @@ + +-- +-- Create ODBCAPTURE.OBJ_INSTALL_COMMENTS_TAB Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_COMMENTS_TAB + + CREATE TABLE "ODBCAPTURE"."OBJ_INSTALL_COMMENTS_TAB" + ( "INSTALL_TYPE" VARCHAR2(10 BYTE), + "OBJECT_OWNER_INSTALL_TYPE" VARCHAR2(10 BYTE), + "TABLE_OWNER" VARCHAR2(128 BYTE), + "TABLE_INSTALL_TYPE" VARCHAR2(10 BYTE), + "TABLE_NAME" VARCHAR2(128 BYTE), + "TABLE_TYPE" VARCHAR2(23 BYTE), + "INSTALL_OTYPE" VARCHAR2(20 BYTE), + "COLUMN_NAME" VARCHAR2(128 BYTE), + "COMMENTS" VARCHAR2(4000 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_COMMENTS_TAB + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tabind b/grbsrc/ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tabind new file mode 100644 index 0000000..ba3bbbf --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tabind @@ -0,0 +1,16 @@ + +-- +-- Create Indexes for ODBCAPTURE.OBJ_INSTALL_COMMENTS_TAB TABLE +-- + +set define off + + +-- NOTE: This is a "INDEX" Index + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_COMMENTS_TAB_IX1 + + CREATE INDEX "ODBCAPTURE"."OBJ_INSTALL_COMMENTS_TAB_IX1" ON "ODBCAPTURE"."OBJ_INSTALL_COMMENTS_TAB" ("INSTALL_TYPE", "TABLE_OWNER", "TABLE_NAME") + ; + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_COMMENTS_VIEW.vw b/grbsrc/ODBCAPTURE/OBJ_INSTALL_COMMENTS_VIEW.vw new file mode 100644 index 0000000..ce93d84 --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_COMMENTS_VIEW.vw @@ -0,0 +1,73 @@ + +-- +-- Create ODBCAPTURE.OBJ_INSTALL_COMMENTS_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."OBJ_INSTALL_COMMENTS_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_COMMENTS_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."OBJ_INSTALL_COMMENTS_VIEW" ("INSTALL_TYPE", "OBJECT_OWNER_INSTALL_TYPE", "TABLE_OWNER", "TABLE_INSTALL_TYPE", "TABLE_NAME", "TABLE_TYPE", "INSTALL_OTYPE", "COLUMN_NAME", "COMMENTS") AS + select d.install_type + ,d.object_owner_install_type + ,c.owner TABLE_OWNER + ,d.object_install_type TABLE_INSTALL_TYPE + ,c.table_name + ,d.object_type TABLE_TYPE + ,d.install_otype + ,c.column_name + ,c.comments + from obj_install_object_view d + join dba_col_comments c + on c.owner = d.object_owner + and c.table_name = d.object_name + and c.comments is not null + where d.object_type in ('TABLE','VIEW','MATERIALIZED VIEW') + -- Don't need comments on sys or pub + and d.object_install_type not in ('sys','pub') +UNION ALL +select d.install_type + ,d.object_owner_install_type + ,c.owner TABLE_OWNER + ,d.object_install_type TABLE_INSTALL_TYPE + ,c.table_name + ,c.table_type + ,d.install_otype + ,NULL COLUMN_NAME + ,c.comments + from obj_install_object_view d + join dba_tab_comments c + on c.owner = d.object_owner + and c.table_name = d.object_name + and c.table_type = d.object_type + and c.comments is not null + -- Don't need comments on sys or pub + where d.object_install_type not in ('sys','pub'); + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_COMMENTS_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_CONTEXT_TAB.tab b/grbsrc/ODBCAPTURE/OBJ_INSTALL_CONTEXT_TAB.tab new file mode 100644 index 0000000..5c38793 --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_CONTEXT_TAB.tab @@ -0,0 +1,46 @@ + +-- +-- Create ODBCAPTURE.OBJ_INSTALL_CONTEXT_TAB Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_CONTEXT_TAB + + CREATE TABLE "ODBCAPTURE"."OBJ_INSTALL_CONTEXT_TAB" + ( "INSTALL_TYPE" VARCHAR2(10 BYTE), + "INSTALL_TIMING" CHAR(7 BYTE), + "CONTEXT_INSTALL_TYPE" VARCHAR2(10 BYTE), + "CONTEXT_ONAME_FILTER" VARCHAR2(4000 BYTE), + "CONTEXT_OWNER" VARCHAR2(128 BYTE), + "CONTEXT_NAME" VARCHAR2(128 BYTE), + "CONTEXT_TYPE" VARCHAR2(22 BYTE), + "TRACKING" VARCHAR2(3 BYTE), + "PACKAGE_INSTALL_TYPE" VARCHAR2(10 BYTE), + "PACKAGE_ONAME_FILTER" VARCHAR2(4000 BYTE), + "PACKAGE_OWNER" VARCHAR2(128 BYTE), + "PACKAGE_NAME" VARCHAR2(128 BYTE), + "PACKAGE_TYPE" VARCHAR2(23 BYTE), + "INSTALL_OTYPE" VARCHAR2(20 BYTE), + "EXT" VARCHAR2(6 BYTE), + "EXT2" VARCHAR2(6 BYTE), + "EXT3" VARCHAR2(6 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_CONTEXT_TAB + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_CONTEXT_TAB.tabind b/grbsrc/ODBCAPTURE/OBJ_INSTALL_CONTEXT_TAB.tabind new file mode 100644 index 0000000..709eb42 --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_CONTEXT_TAB.tabind @@ -0,0 +1,16 @@ + +-- +-- Create Indexes for ODBCAPTURE.OBJ_INSTALL_CONTEXT_TAB TABLE +-- + +set define off + + +-- NOTE: This is a "INDEX" Index + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_CONTEXT_TAB_IX1 + + CREATE INDEX "ODBCAPTURE"."OBJ_INSTALL_CONTEXT_TAB_IX1" ON "ODBCAPTURE"."OBJ_INSTALL_CONTEXT_TAB" ("INSTALL_TYPE", "CONTEXT_OWNER", "CONTEXT_NAME") + ; + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_CONTEXT_VIEW.vw b/grbsrc/ODBCAPTURE/OBJ_INSTALL_CONTEXT_VIEW.vw new file mode 100644 index 0000000..0351cda --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_CONTEXT_VIEW.vw @@ -0,0 +1,69 @@ + +-- +-- Create ODBCAPTURE.OBJ_INSTALL_CONTEXT_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."OBJ_INSTALL_CONTEXT_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_CONTEXT_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."OBJ_INSTALL_CONTEXT_VIEW" ("INSTALL_TYPE", "INSTALL_TIMING", "CONTEXT_INSTALL_TYPE", "CONTEXT_ONAME_FILTER", "CONTEXT_OWNER", "CONTEXT_NAME", "CONTEXT_TYPE", "TRACKING", "PACKAGE_INSTALL_TYPE", "PACKAGE_ONAME_FILTER", "PACKAGE_OWNER", "PACKAGE_NAME", "PACKAGE_TYPE", "INSTALL_OTYPE", "EXT", "EXT2", "EXT3") AS + select obj.install_type + ,t.install_timing + ,obj.install_type CONTEXT_INSTALL_TYPE + ,obj.oname_filter CONTEXT_ONAME_FILTER + ,obj.object_owner CONTEXT_OWNER + ,ctx.namespace CONTEXT_NAME + ,ctx.type CONTEXT_TYPE + ,ctx.tracking + ,pkg.install_type PACKAGE_INSTALL_TYPE + ,pkg.oname_filter PACKAGE_ONAME_FILTER + ,pkg.object_owner PACKAGE_OWNER + ,pkg.object_name PACKAGE_NAME + ,pkg.object_type PACKAGE_TYPE + ,obj.install_otype + ,obj.ext + ,obj.ext2 + ,obj.ext3 + from obj_install_object_tab obj + join dba_context ctx + on ctx.namespace = obj.object_name + join obj_install_object_tab pkg + on pkg.object_owner = ctx.schema + and pkg.object_name = ctx.package + and pkg.object_type = 'PACKAGE' + join install_type_timing t + -- Ensure the package is installed before this Context + on t.from_install_type = obj.install_type + and t.to_install_type = pkg.install_type + where obj.object_owner = 'SYS' + and obj.object_type = 'CONTEXT' + and ctx.namespace not like common_util.get_RECYCLE_BIN_NAME_MATCH escape '\'; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_CONTEXT_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_TAB.tab b/grbsrc/ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_TAB.tab new file mode 100644 index 0000000..a3362ef --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_TAB.tab @@ -0,0 +1,45 @@ + +-- +-- Create ODBCAPTURE.OBJ_INSTALL_DATA_LOAD_TAB Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_DATA_LOAD_TAB + + CREATE TABLE "ODBCAPTURE"."OBJ_INSTALL_DATA_LOAD_TAB" + ( "INSTALL_TYPE" VARCHAR2(10 BYTE) NOT NULL ENABLE, + "INSTALL_TIMING" CHAR(7 BYTE), + "TABLE_INSTALL_TYPE" VARCHAR2(10 BYTE), + "TABLE_INSTALL_TIMING" CHAR(7 BYTE), + "TABLE_OWNER" VARCHAR2(128 BYTE), + "TABLE_NAME" VARCHAR2(128 BYTE), + "TABLE_TYPE" VARCHAR2(23 BYTE), + "BEFORE_SELECT_SQL" VARCHAR2(4000 BYTE), + "WHERE_CLAUSE" VARCHAR2(4000 BYTE), + "ORDER_BY_COLUMNS" VARCHAR2(4000 BYTE) NOT NULL ENABLE, + "AFTER_ORDER_BY_SQL" VARCHAR2(4000 BYTE), + "NOTES" VARCHAR2(1024 BYTE), + "INSTALL_OTYPE" VARCHAR2(20 BYTE) NOT NULL ENABLE, + "EXT" VARCHAR2(6 BYTE) NOT NULL ENABLE, + "EXT2" VARCHAR2(6 BYTE), + "EXT3" VARCHAR2(6 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_DATA_LOAD_TAB + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_TAB.tabind b/grbsrc/ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_TAB.tabind new file mode 100644 index 0000000..50c367d --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_TAB.tabind @@ -0,0 +1,16 @@ + +-- +-- Create Indexes for ODBCAPTURE.OBJ_INSTALL_DATA_LOAD_TAB TABLE +-- + +set define off + + +-- NOTE: This is a "INDEX" Index + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_DATA_LOAD_TAB_IX1 + + CREATE INDEX "ODBCAPTURE"."OBJ_INSTALL_DATA_LOAD_TAB_IX1" ON "ODBCAPTURE"."OBJ_INSTALL_DATA_LOAD_TAB" ("INSTALL_TYPE", "TABLE_OWNER", "TABLE_NAME") + ; + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_VIEW.vw b/grbsrc/ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_VIEW.vw new file mode 100644 index 0000000..263bb01 --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_VIEW.vw @@ -0,0 +1,66 @@ + +-- +-- Create ODBCAPTURE.OBJ_INSTALL_DATA_LOAD_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."OBJ_INSTALL_DATA_LOAD_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_DATA_LOAD_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."OBJ_INSTALL_DATA_LOAD_VIEW" ("INSTALL_TYPE", "INSTALL_TIMING", "TABLE_INSTALL_TYPE", "TABLE_INSTALL_TIMING", "TABLE_OWNER", "TABLE_NAME", "TABLE_TYPE", "BEFORE_SELECT_SQL", "WHERE_CLAUSE", "ORDER_BY_COLUMNS", "AFTER_ORDER_BY_SQL", "NOTES", "INSTALL_OTYPE", "EXT", "EXT2", "EXT3") AS + select dlc.install_type + ,t.install_timing + ,tab.install_type TABLE_INSTALL_TYPE + ,tab.install_timing TABLE_INSTALL_TIMING + ,tab.object_owner TABLE_OWNER + ,tab.object_name TABLE_NAME + ,tab.object_type TABLE_TYPE + ,dlc.before_select_sql + ,dlc.where_clause + ,dlc.order_by_columns + ,dlc.after_order_by_sql + ,dlc.notes + ,otc.install_otype + ,otc.ext + ,otc.ext2 + ,otc.ext3 + from obj_install_object_tab tab + join dload_conf dlc + on dlc.username = tab.object_owner + and dlc.table_name = tab.object_name + join otype_conf otc + on otc.install_otype = 'DATA_LOAD' + join install_type_timing t + -- Ensure the Table is installed before this Data Load + on t.from_install_type = dlc.install_type + and t.to_install_type = tab.install_type + -- Exclude 'sys' or 'pub' database objects + where tab.object_install_type not in ('sys','pub'); + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_DATA_LOAD_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_FKEY_TAB.tab b/grbsrc/ODBCAPTURE/OBJ_INSTALL_FKEY_TAB.tab new file mode 100644 index 0000000..90bde8e --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_FKEY_TAB.tab @@ -0,0 +1,48 @@ + +-- +-- Create ODBCAPTURE.OBJ_INSTALL_FKEY_TAB Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_FKEY_TAB + + CREATE TABLE "ODBCAPTURE"."OBJ_INSTALL_FKEY_TAB" + ( "INSTALL_TYPE" VARCHAR2(10 BYTE), + "INSTALL_TYPE_SELECTOR" VARCHAR2(20 BYTE), + "BASE_TABLE_INSTALL_TYPE" VARCHAR2(10 BYTE), + "BASE_TABLE_ONAME_FILTER" VARCHAR2(4000 BYTE), + "BASE_TABLE_OWNER" VARCHAR2(128 BYTE), + "BASE_TABLE_NAME" VARCHAR2(128 BYTE), + "BASE_TABLE_TYPE" VARCHAR2(23 BYTE), + "FOREIGN_KEY_NAME" VARCHAR2(128 BYTE), + "UNIQUE_KEY_NAME" VARCHAR2(128 BYTE), + "UNIQUE_KEY_TYPE" VARCHAR2(1 BYTE), + "REF_TABLE_INSTALL_TYPE" VARCHAR2(10 BYTE), + "REF_TABLE_ONAME_FILTER" VARCHAR2(4000 BYTE), + "REF_TABLE_OWNER" VARCHAR2(128 BYTE), + "REF_TABLE_NAME" VARCHAR2(128 BYTE), + "REF_TABLE_TYPE" VARCHAR2(23 BYTE), + "INSTALL_OTYPE" VARCHAR2(20 BYTE) NOT NULL ENABLE, + "EXT" VARCHAR2(6 BYTE) NOT NULL ENABLE, + "EXT2" VARCHAR2(6 BYTE), + "EXT3" VARCHAR2(6 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_FKEY_TAB + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_FKEY_TAB.tabind b/grbsrc/ODBCAPTURE/OBJ_INSTALL_FKEY_TAB.tabind new file mode 100644 index 0000000..b26643a --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_FKEY_TAB.tabind @@ -0,0 +1,16 @@ + +-- +-- Create Indexes for ODBCAPTURE.OBJ_INSTALL_FKEY_TAB TABLE +-- + +set define off + + +-- NOTE: This is a "INDEX" Index + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_FKEY_TAB_IX1 + + CREATE INDEX "ODBCAPTURE"."OBJ_INSTALL_FKEY_TAB_IX1" ON "ODBCAPTURE"."OBJ_INSTALL_FKEY_TAB" ("INSTALL_TYPE", "BASE_TABLE_OWNER", "FOREIGN_KEY_NAME") + ; + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_FKEY_VIEW.vw b/grbsrc/ODBCAPTURE/OBJ_INSTALL_FKEY_VIEW.vw new file mode 100644 index 0000000..1f39ebf --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_FKEY_VIEW.vw @@ -0,0 +1,90 @@ + +-- +-- Create ODBCAPTURE.OBJ_INSTALL_FKEY_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."OBJ_INSTALL_FKEY_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_FKEY_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."OBJ_INSTALL_FKEY_VIEW" ("INSTALL_TYPE", "INSTALL_TYPE_SELECTOR", "BASE_TABLE_INSTALL_TYPE", "BASE_TABLE_ONAME_FILTER", "BASE_TABLE_OWNER", "BASE_TABLE_NAME", "BASE_TABLE_TYPE", "FOREIGN_KEY_NAME", "UNIQUE_KEY_NAME", "UNIQUE_KEY_TYPE", "REF_TABLE_INSTALL_TYPE", "REF_TABLE_ONAME_FILTER", "REF_TABLE_OWNER", "REF_TABLE_NAME", "REF_TABLE_TYPE", "INSTALL_OTYPE", "EXT", "EXT2", "EXT3") AS + select case t.install_timing + when 'CURRENT' + then base_t.install_type + else ref_t.install_type + end INSTALL_TYPE + ,case t.install_timing + when 'CURRENT' + then 'BASE TABLE' + else 'REF TABLE' + end INSTALL_TYPE_SELECTOR + ,base_t.install_type BASE_TABLE_INSTALL_TYPE + ,base_t.oname_filter BASE_TABLE_ONAME_FILTER + ,base_t.object_owner BASE_TABLE_OWNER + ,base_t.object_name BASE_TABLE_NAME + ,base_t.object_type BASE_TABLE_TYPE + ,fk.constraint_name FOREIGN_KEY_NAME + ,pk.constraint_name UNIQUE_KEY_NAME + ,pk.constraint_type UNIQUE_KEY_TYPE + ,ref_t.install_type REF_TABLE_INSTALL_TYPE + ,ref_t.oname_filter REF_TABLE_ONAME_FILTER + ,ref_t.object_owner REF_TABLE_OWNER + ,ref_t.object_name REF_TABLE_NAME + ,ref_t.object_type REF_TABLE_TYPE + ,otc.install_otype + ,otc.ext + ,otc.ext2 + ,otc.ext3 + from obj_install_object_tab base_t + join otype_conf otc + on otc.install_otype = case when base_t.object_type = 'MATERIALIZED VIEW' + then 'MVIEW_FOREIGN_KEY' + else base_t.object_type || '_FOREIGN_KEY' + end + join dba_constraints fk + on fk.owner = base_t.object_owner + and fk.table_name = base_t.object_name + and fk.constraint_type = 'R' + join dba_constraints pk + on pk.owner = fk.r_owner + and pk.constraint_name = fk.r_constraint_name + and pk.constraint_type in ('P','U') + join obj_install_object_tab ref_t + on ref_t.object_owner = pk.owner + and ref_t.object_name = pk.table_name + and ref_t.object_type in ('MATERIALIZED VIEW', 'TABLE', 'VIEW') + join install_type_timing t + -- Ensure the Ref Table is installed before this Foreign Key + on t.from_install_type = base_t.install_type + and t.to_install_type = ref_t.install_type + where base_t.object_type in ('MATERIALIZED VIEW', 'TABLE', 'VIEW') + and base_t.object_install_type not in ('sys','pub') -- Exclude 'sys' or 'pub' database objects + and fk.constraint_name not like common_util.get_RECYCLE_BIN_NAME_MATCH escape '\'; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_FKEY_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_INDEX_TAB.tab b/grbsrc/ODBCAPTURE/OBJ_INSTALL_INDEX_TAB.tab new file mode 100644 index 0000000..9eac117 --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_INDEX_TAB.tab @@ -0,0 +1,47 @@ + +-- +-- Create ODBCAPTURE.OBJ_INSTALL_INDEX_TAB Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_INDEX_TAB + + CREATE TABLE "ODBCAPTURE"."OBJ_INSTALL_INDEX_TAB" + ( "INSTALL_TYPE" VARCHAR2(10 BYTE), + "INSTALL_TYPE_SELECTOR" VARCHAR2(20 BYTE), + "INDEX_INSTALL_TYPE" VARCHAR2(10 BYTE), + "INDEX_ONAME_FILTER" VARCHAR2(4000 BYTE), + "INDEX_OWNER" VARCHAR2(128 BYTE), + "INDEX_NAME" VARCHAR2(128 BYTE), + "OBJECT_TYPE" VARCHAR2(23 BYTE), + "INDEX_TYPE" VARCHAR2(27 BYTE), + "UNIQUENESS" VARCHAR2(9 BYTE), + "TABLE_INSTALL_TYPE" VARCHAR2(10 BYTE), + "TARGET_ONAME_FILTER" VARCHAR2(4000 BYTE), + "TABLE_OWNER" VARCHAR2(128 BYTE), + "TABLE_NAME" VARCHAR2(128 BYTE), + "TABLE_TYPE" VARCHAR2(23 BYTE), + "INSTALL_OTYPE" VARCHAR2(20 BYTE), + "EXT" VARCHAR2(6 BYTE), + "EXT2" VARCHAR2(6 BYTE), + "EXT3" VARCHAR2(6 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_INDEX_TAB + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_INDEX_TAB.tabind b/grbsrc/ODBCAPTURE/OBJ_INSTALL_INDEX_TAB.tabind new file mode 100644 index 0000000..f0a72fa --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_INDEX_TAB.tabind @@ -0,0 +1,16 @@ + +-- +-- Create Indexes for ODBCAPTURE.OBJ_INSTALL_INDEX_TAB TABLE +-- + +set define off + + +-- NOTE: This is a "INDEX" Index + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_INDEX_TAB_IX1 + + CREATE INDEX "ODBCAPTURE"."OBJ_INSTALL_INDEX_TAB_IX1" ON "ODBCAPTURE"."OBJ_INSTALL_INDEX_TAB" ("INSTALL_TYPE", "TABLE_OWNER", "TABLE_NAME") + ; + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_INDEX_VIEW.vw b/grbsrc/ODBCAPTURE/OBJ_INSTALL_INDEX_VIEW.vw new file mode 100644 index 0000000..d491a73 --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_INDEX_VIEW.vw @@ -0,0 +1,79 @@ + +-- +-- Create ODBCAPTURE.OBJ_INSTALL_INDEX_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."OBJ_INSTALL_INDEX_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_INDEX_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."OBJ_INSTALL_INDEX_VIEW" ("INSTALL_TYPE", "INSTALL_TYPE_SELECTOR", "INDEX_INSTALL_TYPE", "INDEX_ONAME_FILTER", "INDEX_OWNER", "INDEX_NAME", "OBJECT_TYPE", "INDEX_TYPE", "UNIQUENESS", "TABLE_INSTALL_TYPE", "TARGET_ONAME_FILTER", "TABLE_OWNER", "TABLE_NAME", "TABLE_TYPE", "INSTALL_OTYPE", "EXT", "EXT2", "EXT3") AS + select case t.install_timing + when 'CURRENT' + then obj.install_type + else tgt.install_type + end INSTALL_TYPE + ,case t.install_timing + when 'CURRENT' + then 'INDEX' + else 'TARGET' + end INSTALL_TYPE_SELECTOR + ,obj.install_type INDEX_INSTALL_TYPE + ,obj.oname_filter INDEX_ONAME_FILTER + ,obj.object_owner INDEX_OWNER + ,obj.object_name INDEX_NAME + ,obj.object_type + ,ind.index_type + ,ind.uniqueness + ,tgt.install_type TABLE_INSTALL_TYPE + ,tgt.oname_filter TARGET_ONAME_FILTER + ,tgt.object_owner TABLE_OWNER + ,tgt.object_name TABLE_NAME + ,tgt.object_type TABLE_TYPE + ,obj.install_otype + ,obj.ext + ,obj.ext2 + ,obj.ext3 + from obj_install_object_tab obj + join dba_indexes ind + on ind.owner = obj.object_owner + and ind.index_name = obj.object_name + join obj_install_object_tab tgt + on tgt.object_owner = ind.table_owner + and tgt.object_name = ind.table_name + and tgt.object_type = ind.table_type + join install_type_timing t + -- Ensure Target Table is installed before this Index + on t.from_install_type = obj.install_type + and t.to_install_type = tgt.install_type + where obj.object_type = 'INDEX' + and obj.object_install_type not in ('sys','pub') -- Exclude 'sys' and 'pub' Index Schemas + and ind.index_name not like common_util.get_RECYCLE_BIN_NAME_MATCH escape '\'; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_INDEX_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_OBJECT_TAB.tab b/grbsrc/ODBCAPTURE/OBJ_INSTALL_OBJECT_TAB.tab new file mode 100644 index 0000000..af49dfd --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_OBJECT_TAB.tab @@ -0,0 +1,41 @@ + +-- +-- Create ODBCAPTURE.OBJ_INSTALL_OBJECT_TAB Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_OBJECT_TAB + + CREATE TABLE "ODBCAPTURE"."OBJ_INSTALL_OBJECT_TAB" + ( "INSTALL_TYPE" VARCHAR2(10 BYTE), + "INSTALL_TIMING" CHAR(7 BYTE), + "ONAME_FILTER" VARCHAR2(4000 BYTE), + "OBJECT_OWNER_INSTALL_TYPE" VARCHAR2(10 BYTE), + "OBJECT_OWNER" VARCHAR2(128 BYTE), + "OBJECT_INSTALL_TYPE" VARCHAR2(10 BYTE), + "OBJECT_NAME" VARCHAR2(128 BYTE), + "OBJECT_TYPE" VARCHAR2(23 BYTE), + "INSTALL_OTYPE" VARCHAR2(20 BYTE), + "EXT" VARCHAR2(6 BYTE), + "EXT2" VARCHAR2(6 BYTE), + "EXT3" VARCHAR2(6 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_OBJECT_TAB + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_OBJECT_TAB.tabind b/grbsrc/ODBCAPTURE/OBJ_INSTALL_OBJECT_TAB.tabind new file mode 100644 index 0000000..fb92844 --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_OBJECT_TAB.tabind @@ -0,0 +1,16 @@ + +-- +-- Create Indexes for ODBCAPTURE.OBJ_INSTALL_OBJECT_TAB TABLE +-- + +set define off + + +-- NOTE: This is a "INDEX" Index + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_OBJECT_TAB_IX1 + + CREATE INDEX "ODBCAPTURE"."OBJ_INSTALL_OBJECT_TAB_IX1" ON "ODBCAPTURE"."OBJ_INSTALL_OBJECT_TAB" ("INSTALL_TYPE", "OBJECT_OWNER", "OBJECT_NAME") + ; + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_OBJECT_VIEW.vw b/grbsrc/ODBCAPTURE/OBJ_INSTALL_OBJECT_VIEW.vw new file mode 100644 index 0000000..a319efd --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_OBJECT_VIEW.vw @@ -0,0 +1,149 @@ + +-- +-- Create ODBCAPTURE.OBJ_INSTALL_OBJECT_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."OBJ_INSTALL_OBJECT_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_OBJECT_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."OBJ_INSTALL_OBJECT_VIEW" ("INSTALL_TYPE", "INSTALL_TIMING", "ONAME_FILTER", "OBJECT_OWNER_INSTALL_TYPE", "OBJECT_OWNER", "OBJECT_INSTALL_TYPE", "OBJECT_NAME", "OBJECT_TYPE", "INSTALL_OTYPE", "EXT", "EXT2", "EXT3") AS + with q_nondflt as ( + select oc.install_type + ,t.install_timing + ,oc.oname_filter + ,obj.object_owner_install_type + ,obj.object_owner + ,oc.install_type OBJECT_INSTALL_TYPE + ,obj.object_name + ,obj.object_type + ,otc.install_otype + ,otc.ext + ,otc.ext2 + ,otc.ext3 + from dba_objects_tab obj + join otype_conf otc + on otc.object_type = obj.object_type + and ( otc.object_type != 'INDEX' + or otc.install_otype = (select case ind.table_type + when 'MATERIALIZED VIEW' then 'MVIEW' + else ind.table_type + end || '_INDEX' + from dba_indexes ind + where ind.owner = obj.object_owner + and ind.index_name = obj.object_name) ) + and ( otc.object_type != 'TRIGGER' + or otc.install_otype = (select case trg.base_object_type + when 'MATERIALIZED VIEW' then 'MVIEW' + else trg.base_object_type + end || '_TRIGGER' + from dba_triggers trg + where trg.owner = obj.object_owner + and trg.trigger_name = obj.object_name) ) + join object_conf oc + on oc.username = obj.object_owner + and oc.install_type != obj.object_owner_install_type + and oc.install_otype = otc.install_otype + and regexp_like(obj.object_name, oc.oname_filter) + join install_type_timing t + -- Ensure the owner is installed before this object + on t.from_install_type = oc.install_type + and t.to_install_type = obj.object_owner_install_type + where ( obj.table_flag != 'NT' -- Nested Tables masquarade as tables in DBA_OBJECTS + OR obj.table_flag is NULL) + and obj.object_name not like common_util.get_RECYCLE_BIN_NAME_MATCH escape '\' +), q_dflt as ( + select obj.object_owner_install_type INSTALL_TYPE + ,'CURRENT' INSTALL_TIMING + ,NULL ONAME_FILTER + ,obj.object_owner_install_type + ,obj.object_owner + ,obj.object_owner_install_type OBJECT_INSTALL_TYPE + ,obj.object_name + ,obj.object_type + ,otc.install_otype + ,otc.ext + ,otc.ext2 + ,otc.ext3 + from dba_objects_tab obj + join otype_conf otc + on otc.object_type = obj.object_type + and ( otc.object_type != 'INDEX' + or otc.install_otype = (select case ind.table_type + when 'MATERIALIZED VIEW' then 'MVIEW' + else ind.table_type + end || '_INDEX' + from dba_indexes ind + where ind.owner = obj.object_owner + and ind.index_name = obj.object_name) ) + and ( otc.object_type != 'TRIGGER' + or otc.install_otype = (select case trg.base_object_type + when 'MATERIALIZED VIEW' then 'MVIEW' + else trg.base_object_type + end || '_TRIGGER' + from dba_triggers trg + where trg.owner = obj.object_owner + and trg.trigger_name = obj.object_name) ) + where ( obj.table_flag != 'NT' -- Nested Tables masquarade as tables in DBA_OBJECTS + OR obj.table_flag is NULL) + and (obj.object_owner, obj.object_type, obj.object_name) not in ( + select q_nondflt.object_owner, q_nondflt.object_type, q_nondflt.object_name from q_nondflt) + and obj.object_name not like common_util.get_RECYCLE_BIN_NAME_MATCH escape '\' +), q_sys as ( + select oc.install_type + ,'CURRENT' INSTALL_TIMING + ,oc.oname_filter + ,oc.install_type OBJECT_OWNER_INSTALL_TYPE + ,obj.object_owner + ,oc.install_type OBJECT_INSTALL_TYPE + ,obj.object_name + ,obj.object_type + ,otc.install_otype + ,otc.ext + ,otc.ext2 + ,otc.ext3 + from dba_objects_tab obj + join otype_conf otc + on otc.object_type = obj.object_type + join object_conf oc + on oc.username = obj.object_owner + and oc.install_type != obj.object_owner_install_type + and oc.install_otype = otc.install_otype + and regexp_like(obj.object_name, oc.oname_filter) + where obj.object_name not like common_util.get_RECYCLE_BIN_NAME_MATCH escape '\' + and obj.object_owner = 'SYS' + and obj.object_type in ('CONTEXT', 'DIRECTORY') +) +select "INSTALL_TYPE","INSTALL_TIMING","ONAME_FILTER","OBJECT_OWNER_INSTALL_TYPE","OBJECT_OWNER","OBJECT_INSTALL_TYPE","OBJECT_NAME","OBJECT_TYPE","INSTALL_OTYPE","EXT","EXT2","EXT3" from q_nondflt +UNION ALL +select "INSTALL_TYPE","INSTALL_TIMING","ONAME_FILTER","OBJECT_OWNER_INSTALL_TYPE","OBJECT_OWNER","OBJECT_INSTALL_TYPE","OBJECT_NAME","OBJECT_TYPE","INSTALL_OTYPE","EXT","EXT2","EXT3" from q_dflt +UNION ALL +select "INSTALL_TYPE","INSTALL_TIMING","ONAME_FILTER","OBJECT_OWNER_INSTALL_TYPE","OBJECT_OWNER","OBJECT_INSTALL_TYPE","OBJECT_NAME","OBJECT_TYPE","INSTALL_OTYPE","EXT","EXT2","EXT3" from q_sys; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_OBJECT_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_SYNONYM_TAB.tab b/grbsrc/ODBCAPTURE/OBJ_INSTALL_SYNONYM_TAB.tab new file mode 100644 index 0000000..43c0c93 --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_SYNONYM_TAB.tab @@ -0,0 +1,46 @@ + +-- +-- Create ODBCAPTURE.OBJ_INSTALL_SYNONYM_TAB Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_SYNONYM_TAB + + CREATE TABLE "ODBCAPTURE"."OBJ_INSTALL_SYNONYM_TAB" + ( "INSTALL_TYPE" VARCHAR2(10 BYTE), + "INSTALL_TYPE_SELECTOR" VARCHAR2(20 BYTE), + "SYNONYM_INSTALL_TYPE" VARCHAR2(10 BYTE), + "SYNONYM_ONAME_FILTER" VARCHAR2(4000 BYTE), + "SYNONYM_OWNER" VARCHAR2(128 BYTE), + "SYNONYM_NAME" VARCHAR2(128 BYTE), + "OBJECT_TYPE" CHAR(7 BYTE), + "DB_LINK" VARCHAR2(128 BYTE), + "TARGET_INSTALL_TYPE" VARCHAR2(10 BYTE), + "TARGET_ONAME_FILTER" VARCHAR2(4000 BYTE), + "TARGET_OWNER" VARCHAR2(128 BYTE), + "TARGET_NAME" VARCHAR2(128 BYTE), + "TARGET_TYPE" VARCHAR2(23 BYTE), + "INSTALL_OTYPE" VARCHAR2(20 BYTE), + "EXT" VARCHAR2(6 BYTE), + "EXT2" VARCHAR2(6 BYTE), + "EXT3" VARCHAR2(6 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_SYNONYM_TAB + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_SYNONYM_TAB.tabind b/grbsrc/ODBCAPTURE/OBJ_INSTALL_SYNONYM_TAB.tabind new file mode 100644 index 0000000..71567ad --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_SYNONYM_TAB.tabind @@ -0,0 +1,23 @@ + +-- +-- Create Indexes for ODBCAPTURE.OBJ_INSTALL_SYNONYM_TAB TABLE +-- + +set define off + + +-- NOTE: This is a "INDEX" Index + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_SYNONYM_TAB_IX1 + + CREATE INDEX "ODBCAPTURE"."OBJ_INSTALL_SYNONYM_TAB_IX1" ON "ODBCAPTURE"."OBJ_INSTALL_SYNONYM_TAB" ("INSTALL_TYPE", "SYNONYM_OWNER", "SYNONYM_NAME") + ; + +-- NOTE: This is a "INDEX" Index + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_SYNONYM_TAB_IX2 + + CREATE INDEX "ODBCAPTURE"."OBJ_INSTALL_SYNONYM_TAB_IX2" ON "ODBCAPTURE"."OBJ_INSTALL_SYNONYM_TAB" ("INSTALL_TYPE", "TARGET_OWNER", "TARGET_NAME") + ; + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_SYNONYM_VIEW.vw b/grbsrc/ODBCAPTURE/OBJ_INSTALL_SYNONYM_VIEW.vw new file mode 100644 index 0000000..8898e1c --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_SYNONYM_VIEW.vw @@ -0,0 +1,80 @@ + +-- +-- Create ODBCAPTURE.OBJ_INSTALL_SYNONYM_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."OBJ_INSTALL_SYNONYM_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_SYNONYM_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."OBJ_INSTALL_SYNONYM_VIEW" ("INSTALL_TYPE", "INSTALL_TYPE_SELECTOR", "SYNONYM_INSTALL_TYPE", "SYNONYM_ONAME_FILTER", "SYNONYM_OWNER", "SYNONYM_NAME", "OBJECT_TYPE", "DB_LINK", "TARGET_INSTALL_TYPE", "TARGET_ONAME_FILTER", "TARGET_OWNER", "TARGET_NAME", "TARGET_TYPE", "INSTALL_OTYPE", "EXT", "EXT2", "EXT3") AS + select case t.install_timing + when 'CURRENT' + then tgt.install_type + else obj.install_type + end INSTALL_TYPE + ,case t.install_timing + when 'CURRENT' + then 'SYNONYM' + else 'TARGET' + end INSTALL_TYPE_SELECTOR + ,obj.install_type SYNONYM_INSTALL_TYPE + ,obj.oname_filter SYNONYM_ONAME_FILTER + ,obj.object_owner SYNONYM_OWNER + ,obj.object_name SYNONYM_NAME + ,'SYNONYM' OBJECT_TYPE + ,syn.db_link + ,tgt.install_type TARGET_INSTALL_TYPE + ,tgt.oname_filter TARGET_ONAME_FILTER + ,tgt.object_owner TARGET_OWNER + ,tgt.object_name TARGET_NAME + ,tgt.object_type TARGET_TYPE + ,obj.install_otype + ,obj.ext + ,obj.ext2 + ,obj.ext3 + from obj_install_object_tab obj + join sys.dba_synonyms syn + on syn.owner = obj.object_owner + and syn.synonym_name = obj.object_name + join obj_install_object_tab tgt + on tgt.object_owner = syn.table_owner + and tgt.object_name = syn.table_name + and tgt.object_type in ('FUNCTION', 'OPERATOR', 'PACKAGE', 'PROCEDURE', + 'SEQUENCE', 'SYNONYM', 'TABLE', 'TYPE', 'VIEW', + 'MATERIALIZED VIEW', 'JAVA SOURCE', 'QUEUE') + join install_type_timing t + -- Ensure the Target is installed before this Synonym + on t.from_install_type = tgt.install_type + and t.to_install_type = obj.install_type + where obj.object_type = 'SYNONYM' + and obj.object_owner_install_type not in ('sys') -- Exclude 'sys' Synonyms + and syn.synonym_name not like common_util.get_RECYCLE_BIN_NAME_MATCH escape '\'; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_SYNONYM_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_TRIGGER_TAB.tab b/grbsrc/ODBCAPTURE/OBJ_INSTALL_TRIGGER_TAB.tab new file mode 100644 index 0000000..7d24e76 --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_TRIGGER_TAB.tab @@ -0,0 +1,45 @@ + +-- +-- Create ODBCAPTURE.OBJ_INSTALL_TRIGGER_TAB Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_TRIGGER_TAB + + CREATE TABLE "ODBCAPTURE"."OBJ_INSTALL_TRIGGER_TAB" + ( "INSTALL_TYPE" VARCHAR2(10 BYTE), + "INSTALL_TYPE_SELECTOR" VARCHAR2(20 BYTE), + "TRIGGER_INSTALL_TYPE" VARCHAR2(10 BYTE), + "TRIGGER_ONAME_FILTER" VARCHAR2(4000 BYTE), + "TRIGGER_OWNER" VARCHAR2(128 BYTE), + "TRIGGER_NAME" VARCHAR2(128 BYTE), + "OBJECT_TYPE" VARCHAR2(23 BYTE), + "TARGET_INSTALL_TYPE" VARCHAR2(10 BYTE), + "TARGET_ONAME_FILTER" VARCHAR2(4000 BYTE), + "TARGET_OWNER" VARCHAR2(128 BYTE), + "TARGET_NAME" VARCHAR2(128 BYTE), + "TARGET_TYPE" VARCHAR2(23 BYTE), + "INSTALL_OTYPE" VARCHAR2(20 BYTE), + "EXT" VARCHAR2(6 BYTE), + "EXT2" VARCHAR2(6 BYTE), + "EXT3" VARCHAR2(6 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_TRIGGER_TAB + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_TRIGGER_TAB.tabind b/grbsrc/ODBCAPTURE/OBJ_INSTALL_TRIGGER_TAB.tabind new file mode 100644 index 0000000..9697933 --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_TRIGGER_TAB.tabind @@ -0,0 +1,23 @@ + +-- +-- Create Indexes for ODBCAPTURE.OBJ_INSTALL_TRIGGER_TAB TABLE +-- + +set define off + + +-- NOTE: This is a "INDEX" Index + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_TRIGGER_TAB_IX1 + + CREATE INDEX "ODBCAPTURE"."OBJ_INSTALL_TRIGGER_TAB_IX1" ON "ODBCAPTURE"."OBJ_INSTALL_TRIGGER_TAB" ("INSTALL_TYPE", "TRIGGER_OWNER", "TRIGGER_NAME") + ; + +-- NOTE: This is a "INDEX" Index + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_TRIGGER_TAB_IX2 + + CREATE INDEX "ODBCAPTURE"."OBJ_INSTALL_TRIGGER_TAB_IX2" ON "ODBCAPTURE"."OBJ_INSTALL_TRIGGER_TAB" ("INSTALL_TYPE", "TARGET_OWNER", "TARGET_NAME") + ; + +set define on diff --git a/grbsrc/ODBCAPTURE/OBJ_INSTALL_TRIGGER_VIEW.vw b/grbsrc/ODBCAPTURE/OBJ_INSTALL_TRIGGER_VIEW.vw new file mode 100644 index 0000000..0d0a637 --- /dev/null +++ b/grbsrc/ODBCAPTURE/OBJ_INSTALL_TRIGGER_VIEW.vw @@ -0,0 +1,81 @@ + +-- +-- Create ODBCAPTURE.OBJ_INSTALL_TRIGGER_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."OBJ_INSTALL_TRIGGER_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_TRIGGER_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."OBJ_INSTALL_TRIGGER_VIEW" ("INSTALL_TYPE", "INSTALL_TYPE_SELECTOR", "TRIGGER_INSTALL_TYPE", "TRIGGER_ONAME_FILTER", "TRIGGER_OWNER", "TRIGGER_NAME", "OBJECT_TYPE", "TARGET_INSTALL_TYPE", "TARGET_ONAME_FILTER", "TARGET_OWNER", "TARGET_NAME", "TARGET_TYPE", "INSTALL_OTYPE", "EXT", "EXT2", "EXT3") AS + select case t.install_timing + when 'CURRENT' + then obj.install_type + else tab.install_type + end INSTALL_TYPE + ,case t.install_timing + when 'CURRENT' + then 'TRIGGER' + else 'TARGET' + end INSTALL_TYPE_SELECTOR + ,obj.install_type TRIGGER_INSTALL_TYPE + ,obj.oname_filter TRIGGER_ONAME_FILTER + ,obj.object_owner TRIGGER_OWNER + ,obj.object_name TRIGGER_NAME + ,obj.object_type + ,tab.install_type TARGET_INSTALL_TYPE + ,tab.oname_filter TARGET_ONAME_FILTER + ,tab.object_owner TARGET_OWNER + ,tab.object_name TARGET_NAME + ,tab.object_type TARGET_TYPE + ,obj.install_otype + ,obj.ext + ,obj.ext2 + ,obj.ext3 + from obj_install_object_tab obj + join dba_triggers trig + on trig.owner = obj.object_owner + and trig.trigger_name = obj.object_name + join obj_install_object_tab tab + on tab.object_owner = trig.table_owner + and tab.object_name = trig.table_name + and tab.object_type = trig.base_object_type -- Eliminates SYSTEM Triggers + and tab.install_type not in ('sys','pub') -- Exclude 'sys' or 'pub' base tables + join install_type_timing t + -- Ensure the Table is installed before this Trigger + on t.from_install_type = obj.install_type + and t.to_install_type = tab.install_type + where obj.object_type = 'TRIGGER' + and obj.install_otype = case when trig.base_object_type = 'MATERIALIZED VIEW' then 'MVIEW_TRIGGER' + else trig.base_object_type || '_TRIGGER' + end + and obj.object_install_type not in ('sys','pub') -- Exclude 'sys' or 'pub' database objects + and obj.object_name not like common_util.get_RECYCLE_BIN_NAME_MATCH escape '\'; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.OBJ_INSTALL_TRIGGER_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/OTYPE_CONF.cdl b/grbsrc/ODBCAPTURE/OTYPE_CONF.cdl new file mode 100644 index 0000000..f3ca199 --- /dev/null +++ b/grbsrc/ODBCAPTURE/OTYPE_CONF.cdl @@ -0,0 +1,58 @@ + +-- +-- Consolidated Data Load script for ODBCAPTURE.OTYPE_CONF data +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +prompt +prompt Disable Triggers and Foreign Keys +declare + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql || ';'); + execute immediate in_sql; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end run_sql; +begin + for buff in (select owner, trigger_name + from dba_triggers + where table_owner = 'ODBCAPTURE' + and table_name = 'OTYPE_CONF' + order by owner, trigger_name) + loop + run_sql('alter trigger "' || buff.owner || '"' || + '."' || buff.trigger_name || '" DISABLE'); + end loop; + for buff in (select constraint_name + from dba_constraints + where constraint_type = 'R' + and owner = 'ODBCAPTURE' + and table_name = 'OTYPE_CONF' + order by owner, constraint_name) + loop + run_sql('alter table "ODBCAPTURE"."OTYPE_CONF"' || + ' DISABLE constraint "' || buff.constraint_name || '"'); + end loop; +end; +/ + +-- NOTE: Additional file extensions for SQL*Loader include +-- .bad - Bad Records +-- .dsc - Discard Records +-- .log - Log File + +prompt +prompt sqlldr_control=ODBCAPTURE/OTYPE_CONF.ctl +host sqlldr '&1.' control=ODBCAPTURE/OTYPE_CONF.ctl data=ODBCAPTURE/OTYPE_CONF.csv log=ODBCAPTURE/OTYPE_CONF.log silent=HEADER,FEEDBACK + +begin + if '&_RC.' != '0' then + raise_application_error(-20000, 'Control file "ODBCAPTURE/OTYPE_CONF.ctl" returned error: &_RC.'); + end if; +end; +/ diff --git a/grbsrc/ODBCAPTURE/OTYPE_CONF.csv b/grbsrc/ODBCAPTURE/OTYPE_CONF.csv new file mode 100644 index 0000000..d19552b --- /dev/null +++ b/grbsrc/ODBCAPTURE/OTYPE_CONF.csv @@ -0,0 +1,36 @@ +"INSTALL_OTYPE","INSTALL_ORDER","EXT","EXT2","EXT3","NAME_CHECK_OTYPE","NOTES","OBJECT_TYPE" +"CONTEXT",710,"ctx",,,"CONTEXT","SYSTEM Only (Don't match OBJECT_TYPE)","CONTEXT" +"DATABASE_TRIGGER",-110,"dbtrg",,,,"System Triggers ""ON DATABASE""","TRIGGER" +"DATA_LOAD",320,"cdl","ctl","csv","TABLE","DATA_LOAD references are not allowed in OBJECT_CONF. Also disables Foreign Keys and Triggers", +"DB_LINK",30,"dblnk",,,"DATABASE LINK",,"DATABASE LINK" +"DIRECTORY",-20,"dir","sh","bat","DIRECTORY","SYSTEM Only (Don't match OBJECT_TYPE)","DIRECTORY" +"FUNCTION",130,"func",,,"FUNCTION",,"FUNCTION" +"GRANT",-10,"grnt",,,,"SYSTEM Only, FUTURE Grants. CURRENT Grants are included with user and object creation", +"JAVA_SOURCE",120,"pjava",,,"JAVA SOURCE",,"JAVA SOURCE" +"MVIEW",370,"mvw",,,"MATERIALIZED VIEW",,"MATERIALIZED VIEW" +"MVIEW_FOREIGN_KEY",530,"mvwfk",,,"MATERIALIZED VIEW",, +"MVIEW_INDEX",350,"mvwind",,,,,"INDEX" +"MVIEW_TRIGGER",560,"mvwtrg",,,"MATERIALIZED VIEW",,"TRIGGER" +"PACKAGE_BODY",420,"pbody",,,"PACKAGE",,"PACKAGE BODY" +"PACKAGE_SPEC",150,"pspec",,,"PACKAGE",,"PACKAGE" +"PROCEDURE",140,"proc",,,"PROCEDURE",,"PROCEDURE" +"QUEUE",220,"aq",,,"QUEUE",,"QUEUE" +"QUEUE_TABLE",210,"aqt",,,"TABLE",, +"ROLE",-140,"rol",,,,"SYS Only, Includes SYS Grants", +"SCHEDULER_JOB",630,"schdj",,,"JOB",,"JOB" +"SCHEDULER_PROGRAM",620,"schdp",,,"PROGRAM",,"PROGRAM" +"SCHEDULER_SCHEDULE",610,"schds",,,"SCHEDULE",,"SCHEDULE" +"SCHEMA_TRIGGER",570,"schtrg",,,,"System Triggers ""ON SCHEMA""","TRIGGER" +"SEQUENCE",40,"seq",,,"SEQUENCE",,"SEQUENCE" +"SYNONYM",10,"syn",,,,"FUTURE Synonyms. CURRENT Synonyms are included wth object creation","SYNONYM" +"TABLE",310,"tab",,,"TABLE",,"TABLE" +"TABLE_FOREIGN_KEY",510,"tabfk",,,"TABLE",, +"TABLE_INDEX",330,"tabind",,,,"FUTURE Indexes. CURRENT Indexes are included with object creation","INDEX" +"TABLE_TRIGGER",540,"tabtrg",,,"TABLE",,"TRIGGER" +"TYPE_BODY",410,"tbody",,,"TYPE",,"TYPE BODY" +"TYPE_SPEC",110,"tspec",,,"TYPE",,"TYPE" +"USER",-130,"usr",,,,"SYS Only, Includes SYS Grants", +"VIEW",360,"vw",,,"VIEW",,"VIEW" +"VIEW_FOREIGN_KEY",520,"vwfk",,,"VIEW",, +"VIEW_TRIGGER",550,"vwtrg",,,"VIEW",,"TRIGGER" +"XDB_ACL",-120,"acl",,,,"SYS Only", diff --git a/grbsrc/ODBCAPTURE/OTYPE_CONF.ctl b/grbsrc/ODBCAPTURE/OTYPE_CONF.ctl new file mode 100644 index 0000000..f79b791 --- /dev/null +++ b/grbsrc/ODBCAPTURE/OTYPE_CONF.ctl @@ -0,0 +1,14 @@ +OPTIONS (SKIP=1) +LOAD DATA +APPEND INTO TABLE "ODBCAPTURE"."OTYPE_CONF" +FIELDS CSV WITH EMBEDDED +TRAILING NULLCOLS + (INSTALL_OTYPE CHAR(20) + ,INSTALL_ORDER FLOAT EXTERNAL + ,EXT CHAR(6) + ,EXT2 CHAR(6) + ,EXT3 CHAR(6) + ,NAME_CHECK_OTYPE CHAR(30) + ,NOTES CHAR(1024) + ,OBJECT_TYPE CHAR(30) + ) diff --git a/grbsrc/ODBCAPTURE/OTYPE_CONF.tab b/grbsrc/ODBCAPTURE/OTYPE_CONF.tab new file mode 100644 index 0000000..be7b4ce --- /dev/null +++ b/grbsrc/ODBCAPTURE/OTYPE_CONF.tab @@ -0,0 +1,51 @@ + +-- +-- Create ODBCAPTURE.OTYPE_CONF Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.OTYPE_CONF + + CREATE TABLE "ODBCAPTURE"."OTYPE_CONF" + ( "INSTALL_OTYPE" VARCHAR2(20 BYTE) NOT NULL ENABLE, + "INSTALL_ORDER" NUMBER(5,0) NOT NULL ENABLE, + "EXT" VARCHAR2(6 BYTE) NOT NULL ENABLE, + "EXT2" VARCHAR2(6 BYTE), + "EXT3" VARCHAR2(6 BYTE), + "NAME_CHECK_OTYPE" VARCHAR2(30 BYTE), + "NOTES" VARCHAR2(1024 BYTE), + "OBJECT_TYPE" VARCHAR2(30 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "ODBCAPTURE"."OTYPE_CONF" ADD CONSTRAINT "OTYPE_CONF_PK" PRIMARY KEY ("INSTALL_OTYPE") + USING INDEX ENABLE; +ALTER TABLE "ODBCAPTURE"."OTYPE_CONF" ADD CONSTRAINT "OTYPE_CONF_UK1" UNIQUE ("INSTALL_ORDER") + USING INDEX ENABLE; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.OTYPE_CONF + + COMMENT ON COLUMN "ODBCAPTURE"."OTYPE_CONF"."INSTALL_OTYPE" IS 'Name of the object type (Primary Key)'; + COMMENT ON COLUMN "ODBCAPTURE"."OTYPE_CONF"."INSTALL_ORDER" IS 'Default installation order for this object type (Unique Key) (Required)'; + COMMENT ON COLUMN "ODBCAPTURE"."OTYPE_CONF"."EXT" IS 'Primary filename extension this object type (Required)'; + COMMENT ON COLUMN "ODBCAPTURE"."OTYPE_CONF"."EXT2" IS 'Secondary filename extension this object type (Optional)'; + COMMENT ON COLUMN "ODBCAPTURE"."OTYPE_CONF"."EXT3" IS 'Tertiary filename extension this object type (Optional)'; + COMMENT ON COLUMN "ODBCAPTURE"."OTYPE_CONF"."NAME_CHECK_OTYPE" IS 'DBA_OBJECTS Object Type used to create file names'; + COMMENT ON COLUMN "ODBCAPTURE"."OTYPE_CONF"."NOTES" IS 'Free text field (Optional)'; + COMMENT ON COLUMN "ODBCAPTURE"."OTYPE_CONF"."OBJECT_TYPE" IS 'Actual DBA_OBJECTS Object Type for this object type'; + COMMENT ON TABLE "ODBCAPTURE"."OTYPE_CONF" IS 'List of Object Types to install. Also defines the filename extensions that are used'; + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/PRIV_OBJ_DIR_VIEW.vw b/grbsrc/ODBCAPTURE/PRIV_OBJ_DIR_VIEW.vw new file mode 100644 index 0000000..5ee0432 --- /dev/null +++ b/grbsrc/ODBCAPTURE/PRIV_OBJ_DIR_VIEW.vw @@ -0,0 +1,117 @@ + +-- +-- Create ODBCAPTURE.PRIV_OBJ_DIR_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."PRIV_OBJ_DIR_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.PRIV_OBJ_DIR_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."PRIV_OBJ_DIR_VIEW" ("INSTALL_TYPE", "INSTALL_TIMING", "ONAME_FILTER", "DIRECTORY_INSTALL_TYPE", "DIRECTORY_OWNER", "DIRECTORY_NAME", "OBJECT_TYPE", "DIRECTORY_PATH", "GRANTEE_INSTALL_TYPE", "GRANTEE", "GRANTEE_UOR_TYPE", "PRIVILEGE", "GRANTABLE", "HIERARCHY", "COMMON", "INHERITED", "INSTALL_OTYPE", "EXT", "EXT2", "EXT3") AS + with q_nondflt as ( + select oc.install_type + ,t.install_timing + ,oc.oname_filter + ,oc.install_type DIRECTORY_INSTALL_TYPE + ,'SYS' DIRECTORY_OWNER + ,dir.directory_name + ,'DIRECTORY' OBJECT_TYPE + ,dir.directory_path DIRECTORY_PATH + ,uor.install_type GRANTEE_INSTALL_TYPE + ,uor.user_or_role GRANTEE + ,uor.uor_type GRANTEE_UOR_TYPE + ,priv.privilege + ,priv.grantable + ,priv.hierarchy + ,priv.common + ,priv.inherited + ,otc.install_otype + ,otc.ext + ,otc.ext2 + ,otc.ext3 + from uor_install_view uor + join dba_tab_privs_tab priv + on priv.grantee = uor.user_or_role + and priv.object_owner = 'SYS' + and priv.object_type = 'DIRECTORY' + join dba_directories dir + on dir.directory_name = priv.object_name + join otype_conf otc + on otc.install_otype = priv.object_type + join object_conf oc + -- OBJECT_CONF is configured based on Grantee, not Owner + on oc.username = uor.user_or_role + and oc.install_type != uor.install_type + and oc.install_otype = priv.object_type + and regexp_like(dir.directory_name, oc.oname_filter) + join install_type_timing t + -- Ensure Grantee is available when Directory is installed + on t.from_install_type = oc.install_type + and t.to_install_type = uor.install_type + where uor.install_type not in ('sys','pub') -- Exclude 'sys' Grantees + and dir.directory_name not like common_util.get_RECYCLE_BIN_NAME_MATCH escape '\' +), q_dflt as ( +select uor.install_type + ,'CURRENT' INSTALL_TIMING + ,NULL ONAME_FILTER + ,'sys' DIRECTORY_INSTALL_TYPE + ,'SYS' DIRECTORY_OWNER + ,dir.directory_name + ,'DIRECTORY' OBJECT_TYPE + ,dir.directory_path DIRECTORY_PATH + ,uor.install_type GRANTEE_INSTALL_TYPE + ,uor.user_or_role GRANTEE + ,uor.uor_type GRANTEE_UOR_TYPE + ,priv.privilege + ,priv.grantable + ,priv.hierarchy + ,priv.common + ,priv.inherited + ,otc.install_otype + ,otc.ext + ,otc.ext2 + ,otc.ext3 + from uor_install_view uor + join dba_tab_privs_tab priv + on priv.grantee = uor.user_or_role + and priv.object_owner = 'SYS' + and priv.object_type = 'DIRECTORY' + join dba_directories dir + on dir.directory_name = priv.object_name + join otype_conf otc + on otc.install_otype = priv.object_type + where (priv.grantee, dir.directory_name) not in (select q_nondflt.grantee, q_nondflt.directory_name from q_nondflt) + and uor.install_type not in ('sys','pub') -- Exclude 'sys' Grantees + and dir.directory_name not like common_util.get_RECYCLE_BIN_NAME_MATCH escape '\' +) +select "INSTALL_TYPE","INSTALL_TIMING","ONAME_FILTER","DIRECTORY_INSTALL_TYPE","DIRECTORY_OWNER","DIRECTORY_NAME","OBJECT_TYPE","DIRECTORY_PATH","GRANTEE_INSTALL_TYPE","GRANTEE","GRANTEE_UOR_TYPE","PRIVILEGE","GRANTABLE","HIERARCHY","COMMON","INHERITED","INSTALL_OTYPE","EXT","EXT2","EXT3" from q_nondflt +UNION ALL +select "INSTALL_TYPE","INSTALL_TIMING","ONAME_FILTER","DIRECTORY_INSTALL_TYPE","DIRECTORY_OWNER","DIRECTORY_NAME","OBJECT_TYPE","DIRECTORY_PATH","GRANTEE_INSTALL_TYPE","GRANTEE","GRANTEE_UOR_TYPE","PRIVILEGE","GRANTABLE","HIERARCHY","COMMON","INHERITED","INSTALL_OTYPE","EXT","EXT2","EXT3" from q_dflt; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.PRIV_OBJ_DIR_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/PRIV_OBJ_INSTALL_VW.vw b/grbsrc/ODBCAPTURE/PRIV_OBJ_INSTALL_VW.vw new file mode 100644 index 0000000..d7ce5eb --- /dev/null +++ b/grbsrc/ODBCAPTURE/PRIV_OBJ_INSTALL_VW.vw @@ -0,0 +1,82 @@ + +-- +-- Create ODBCAPTURE.PRIV_OBJ_INSTALL_VW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."PRIV_OBJ_INSTALL_VW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.PRIV_OBJ_INSTALL_VW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."PRIV_OBJ_INSTALL_VW" ("INSTALL_TYPE", "INSTALL_TYPE_SELECTOR", "OBJECT_INSTALL_TYPE", "OBJECT_OWNER", "OBJECT_NAME", "OBJECT_TYPE", "GRANTEE_INSTALL_TYPE", "GRANTEE", "GRANTEE_UOR_TYPE", "PRIVILEGE", "GRANTABLE", "HIERARCHY", "COMMON", "INHERITED", "INSTALL_OTYPE", "EXT", "EXT2", "EXT3") AS + select case t.install_timing + when 'CURRENT' + then obj.install_type + else uor.install_type + end INSTALL_TYPE + ,case t.install_timing + when 'CURRENT' + then 'OBJECT' + else 'GRANTEE' + end INSTALL_TYPE_SELECTOR + ,obj.install_type OBJECT_INSTALL_TYPE + ,obj.object_owner + ,obj.object_name + ,obj.object_type + ,uor.install_type GRANTEE_INSTALL_TYPE + ,uor.user_or_role GRANTEE + ,uor.uor_type GRANTEE_UOR_TYPE + ,priv.privilege + ,priv.grantable + ,priv.hierarchy + ,priv.common + ,priv.inherited + ,otc.install_otype + ,otc.ext + ,otc.ext2 + ,otc.ext3 + from uor_install_view uor + join dba_tab_privs_tab priv + on priv.grantee = uor.user_or_role + join obj_install_object_tab obj + on obj.object_owner = priv.object_owner + and obj.object_name = priv.object_name + and obj.object_type = priv.object_type + join otype_conf otc + on otc.install_otype = 'GRANT' + join install_type_timing t + -- Ensure Grantee is available after installation of object + on from_install_type = obj.object_install_type + and to_install_type = uor.install_type + where priv.object_owner != 'SYS' -- Exclude database objects owned by SYS + and ( uor.install_type not in ('sys','pub') -- Exclude 'sys' and 'pub' Grantees + OR ( uor.install_type = 'pub' -- Include 'pub' Grantees + AND obj.object_owner_install_type not in ('sys','pub') ) -- Only if owner not sys or pub + ); + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.PRIV_OBJ_INSTALL_VW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/PRIV_OBJ_JAVA_FG_VIEW.vw b/grbsrc/ODBCAPTURE/PRIV_OBJ_JAVA_FG_VIEW.vw new file mode 100644 index 0000000..eaec4ea --- /dev/null +++ b/grbsrc/ODBCAPTURE/PRIV_OBJ_JAVA_FG_VIEW.vw @@ -0,0 +1,70 @@ + +-- +-- Create ODBCAPTURE.PRIV_OBJ_JAVA_FG_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."PRIV_OBJ_JAVA_FG_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.PRIV_OBJ_JAVA_FG_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."PRIV_OBJ_JAVA_FG_VIEW" ("INSTALL_TYPE", "INSTALL_TYPE_SELECTOR", "JAVA_CLASS_INSTALL_TYPE", "JAVA_CLASS_OWNER", "JAVA_CLASS_MASK", "GRANTEE_INSTALL_TYPE", "GRANTEE", "GRANTEE_UOR_TYPE", "JAVA_CLASS_GRANT", "JAVA_CLASS_PERMISSION", "KIND", "SEQ", "ENABLED") AS + select case t.install_timing + when 'CURRENT' + then own.install_type + else uor.install_type + end INSTALL_TYPE + ,case t.install_timing + when 'CURRENT' + then 'JAVA_CLASS' + else 'GRANTEE' + end INSTALL_TYPE_SELECTOR + ,own.install_type JAVA_CLASS_INSTALL_TYPE + ,djp.type_schema JAVA_CLASS_OWNER + ,substr(djp.name, 1, 256) JAVA_CLASS_MASK + ,uor.install_type GRANTEE_INSTALL_TYPE + ,uor.user_or_role GRANTEE + ,uor.uor_type GRANTEE_UOR_TYPE + ,substr(djp.type_name, 1, 256) JAVA_CLASS_GRANT + ,substr(djp.action, 1, 256) JAVA_CLASS_PERMISSION + ,djp.kind + ,djp.seq + ,djp.enabled + from uor_install_view uor + join dba_java_policy djp + on djp.grantee = uor.user_or_role + join uor_install_view own + on own.user_or_role = djp.type_schema + join install_type_timing t + -- Ensure the Grantee is available when the Java Owner is installed + on t.from_install_type = own.install_type + and t.to_install_type = uor.install_type + -- Exclude 'sys' and 'pub' Grantees + where uor.install_type not in ('sys','pub'); + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.PRIV_OBJ_JAVA_FG_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/PRIV_OBJ_QUEUE_VIEW.vw b/grbsrc/ODBCAPTURE/PRIV_OBJ_QUEUE_VIEW.vw new file mode 100644 index 0000000..4693355 --- /dev/null +++ b/grbsrc/ODBCAPTURE/PRIV_OBJ_QUEUE_VIEW.vw @@ -0,0 +1,88 @@ + +-- +-- Create ODBCAPTURE.PRIV_OBJ_QUEUE_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."PRIV_OBJ_QUEUE_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.PRIV_OBJ_QUEUE_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."PRIV_OBJ_QUEUE_VIEW" ("INSTALL_TYPE", "INSTALL_TYPE_SELECTOR", "QUEUE_INSTALL_TYPE", "QUEUE_OWNER", "QUEUE_NAME", "OBJECT_TYPE", "GRANTEE_INSTALL_TYPE", "GRANTEE", "GRANTEE_UOR_TYPE", "PRIVILEGE", "GRANTABLE", "HIERARCHY", "COMMON", "INHERITED", "INSTALL_OTYPE", "EXT", "EXT2", "EXT3") AS + select case t.install_timing + when 'CURRENT' + then obj.install_type + else uor.install_type + end INSTALL_TYPE + ,case t.install_timing + when 'CURRENT' + then 'QUEUE' + else 'GRANTEE' + end INSTALL_TYPE_SELECTOR + ,obj.install_type QUEUE_INSTALL_TYPE + ,obj.object_owner QUEUE_OWNER + ,obj.object_name QUEUE_NAME + ,'QUEUE' OBJECT_TYPE + ,uor.install_type GRANTEE_INSTALL_TYPE + ,uor.user_or_role GRANTEE + ,uor.uor_type GRANTEE_UOR_TYPE + ,tp.privilege + ,tp.grantable + ,tp.hierarchy + ,tp.common + ,tp.inherited + ,otc.install_otype + ,otc.ext + ,otc.ext2 + ,otc.ext3 + from uor_install_view uor + join dba_tab_privs_tab tp + on tp.grantee = uor.user_or_role + and tp.object_type = 'QUEUE' + join dba_queues aq + on aq.owner = tp.object_owner + and aq.name = tp.object_name + join obj_install_object_tab obj + on obj.object_owner = tp.object_owner + and obj.object_name = tp.object_name + and obj.object_type = 'QUEUE' + join otype_conf otc + on otc.install_otype = 'GRANT' + join install_type_timing t + -- Ensure the Grantee is available when the Queue is installed + on t.from_install_type = obj.install_type + and t.to_install_type = uor.install_type + where ( aq.queue_type is null + or aq.queue_type != 'EXCEPTION_QUEUE') + and aq.name not like common_util.get_RECYCLE_BIN_NAME_MATCH escape '\' + and ( uor.install_type not in ('sys','pub') -- Exclude 'sys' and 'pub' Grantees + OR ( uor.install_type = 'pub' -- Include 'pub' Grantess + AND obj.object_install_type not in ('sys','pub') ) -- Only if owner not sys or pub + ); + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.PRIV_OBJ_QUEUE_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/PRIV_OBJ_XDBACL_VIEW.vw b/grbsrc/ODBCAPTURE/PRIV_OBJ_XDBACL_VIEW.vw new file mode 100644 index 0000000..2e76ac2 --- /dev/null +++ b/grbsrc/ODBCAPTURE/PRIV_OBJ_XDBACL_VIEW.vw @@ -0,0 +1,139 @@ + +-- +-- Create ODBCAPTURE.PRIV_OBJ_XDBACL_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."PRIV_OBJ_XDBACL_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.PRIV_OBJ_XDBACL_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."PRIV_OBJ_XDBACL_VIEW" ("INSTALL_TYPE", "INSTALL_TYPE_SELECTOR", "ONAME_FILTER", "XDBACL_INSTALL_TYPE", "XDBACL_NAME", "XDBACL_TYPE", "GRANTEE_INSTALL_TYPE", "GRANTEE", "GRANTEE_UOR_TYPE", "PRIVILEGE", "XDBACL_HOST", "LOWER_PORT", "UPPER_PORT", "ACE_ORDER", "START_DATE", "END_DATE", "INVERTED_PRINCIPAL", "PRINCIPAL_TYPE", "INSTALL_OTYPE", "EXT", "EXT2", "EXT3") AS + with q_nondflt as ( + select case t.install_timing + when 'CURRENT' + then ol.install_type + else uor.install_type + end INSTALL_TYPE + ,case t.install_timing + when 'CURRENT' + then 'ONAME_FILTER' + else 'GRANTEE' + end INSTALL_TYPE_SELECTOR + ,ol.oname_filter + ,ol.install_type XDBACL_INSTALL_TYPE + ,a.host || ',' || a.lower_port || '-' || a.upper_port + XDBACL_NAME -- Defined Length Concatenations Don't Need a CAST + ,'XDB ACL (Host Aces)' XDBACL_TYPE + ,uor.install_type GRANTEE_INSTALL_TYPE + ,uor.user_or_role GRANTEE + ,uor.uor_type GRANTEE_UOR_TYPE + ,a.privilege + ,a.host XDBACL_HOST + ,nvl(to_char(a.lower_port),'NULL') + LOWER_PORT + ,nvl(to_char(a.upper_port),'NULL') + UPPER_PORT + ,a.ace_order + ,nvl(to_char(a.start_date,'YYYYMMDDHH24MISS.FF'), 'NULL') + START_DATE + ,nvl(to_char(a.end_date,'YYYYMMDDHH24MISS.FF'), 'NULL') + END_DATE + ,a.inverted_principal + ,a.principal_type + ,otc.install_otype + ,otc.ext + ,otc.ext2 + ,otc.ext3 + from uor_install_view uor + join dba_host_aces a + on a.principal_type = 'DATABASE' -- xs_acl.ptype_db + and a.grant_type = 'GRANT' + and a.inverted_principal = 'NO' + and a.privilege is not null + and a.principal = uor.user_or_role + join otype_conf otc + on otc.install_otype = 'XDB_ACL' + join object_conf ol + on ol.username = uor.user_or_role + and ol.install_type != uor.install_type + and ol.install_otype = otc.install_otype + and regexp_like(a.host || ',' || a.lower_port || '-' || a.upper_port, ol.oname_filter) + join install_type_timing t + -- Ensure the Grantee is available when the XDBACL is installed + on t.from_install_type = ol.install_type + and t.to_install_type = uor.install_type + -- Exclude 'sys' Grantees + where uor.install_type not in ('sys','pub') +), q_dflt as ( + select uor.install_type + ,'GRANTEE' INSTALL_TYPE_SELECTOR + ,NULL ONAME_FILTER + ,'sys' XDBACL_INSTALL_TYPE -- Use the INSTALL_TYPE of the Grantee + ,a.host || ',' || a.lower_port || '-' || a.upper_port + XDBACL_NAME -- Defined Length Concatenations Don't Need a CAST + ,'XDB ACL (Host Aces)' XDBACL_TYPE + ,uor.install_type GRANTEE_INSTALL_TYPE + ,uor.user_or_role GRANTEE + ,uor.uor_type GRANTEE_UOR_TYPE + ,a.privilege + ,a.host XDBACL_HOST + ,nvl(to_char(a.lower_port),'NULL') + LOWER_PORT + ,nvl(to_char(a.upper_port),'NULL') + UPPER_PORT + ,a.ace_order + ,nvl(to_char(a.start_date,'YYYYMMDDHH24MISS.FF'), 'NULL') + START_DATE + ,nvl(to_char(a.end_date,'YYYYMMDDHH24MISS.FF'), 'NULL') + END_DATE + ,a.inverted_principal + ,a.principal_type + ,otc.install_otype + ,otc.ext + ,otc.ext2 + ,otc.ext3 + from uor_install_view uor + join dba_host_aces a + on a.principal_type = 'DATABASE' -- xs_acl.ptype_db + and a.grant_type = 'GRANT' + and a.inverted_principal = 'NO' + and a.privilege is not null + and a.principal = uor.user_or_role + join otype_conf otc + on otc.install_otype = 'XDB_ACL' + where (a.principal, a.host || ',' || a.lower_port || '-' || a.upper_port) not in + (select q_nondflt.grantee, q_nondflt.xdbacl_name from q_nondflt q_nondflt) + -- Exclude 'sys' Grantees + and uor.install_type not in ('sys','pub') +) +select "INSTALL_TYPE","INSTALL_TYPE_SELECTOR","ONAME_FILTER","XDBACL_INSTALL_TYPE","XDBACL_NAME","XDBACL_TYPE","GRANTEE_INSTALL_TYPE","GRANTEE","GRANTEE_UOR_TYPE","PRIVILEGE","XDBACL_HOST","LOWER_PORT","UPPER_PORT","ACE_ORDER","START_DATE","END_DATE","INVERTED_PRINCIPAL","PRINCIPAL_TYPE","INSTALL_OTYPE","EXT","EXT2","EXT3" from q_nondflt +UNION ALL +select "INSTALL_TYPE","INSTALL_TYPE_SELECTOR","ONAME_FILTER","XDBACL_INSTALL_TYPE","XDBACL_NAME","XDBACL_TYPE","GRANTEE_INSTALL_TYPE","GRANTEE","GRANTEE_UOR_TYPE","PRIVILEGE","XDBACL_HOST","LOWER_PORT","UPPER_PORT","ACE_ORDER","START_DATE","END_DATE","INVERTED_PRINCIPAL","PRINCIPAL_TYPE","INSTALL_OTYPE","EXT","EXT2","EXT3" from q_dflt; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.PRIV_OBJ_XDBACL_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/PRIV_QUEUE_REGISTER_VIEW.vw b/grbsrc/ODBCAPTURE/PRIV_QUEUE_REGISTER_VIEW.vw new file mode 100644 index 0000000..707306b --- /dev/null +++ b/grbsrc/ODBCAPTURE/PRIV_QUEUE_REGISTER_VIEW.vw @@ -0,0 +1,87 @@ + +-- +-- Create ODBCAPTURE.PRIV_QUEUE_REGISTER_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."PRIV_QUEUE_REGISTER_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.PRIV_QUEUE_REGISTER_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."PRIV_QUEUE_REGISTER_VIEW" ("INSTALL_TYPE", "INSTALL_TYPE_SELECTOR", "QUEUE_INSTALL_TYPE", "QUEUE_OWNER", "QUEUE_NAME", "OBJECT_TYPE", "CONSUMER_INSTALL_TYPE", "CONSUMER_NAME", "CONSUMER_UOR_TYPE", "SUBSCRIPTION_NAME", "NAMESPACE", "LOCATION_NAME", "USER_CONTEXT", "QOSFLAGS", "TIMEOUT", "NTFN_GROUPING_CLASS", "NTFN_GROUPING_VALUE", "NTFN_GROUPING_TYPE", "NTFN_GROUPING_START_TIME", "NTFN_GROUPING_REPEAT_COUNT", "CONTEXT_SIZE") AS + select case t.install_timing + when 'CURRENT' + then aq.install_type + else uor.install_type + end INSTALL_TYPE + ,case t.install_timing + when 'CURRENT' + then 'QUEUE' + else 'CONSUMER' + end INSTALL_TYPE_SELECTOR + ,aq.install_type QUEUE_INSTALL_TYPE + ,aq.object_owner QUEUE_OWNER + ,aq.object_name QUEUE_NAME + ,'QUEUE' OBJECT_TYPE + ,uor.install_type CONSUMER_INSTALL_TYPE + ,uor.user_or_role CONSUMER_NAME + ,uor.uor_type CONSUMER_UOR_TYPE + ,aqreg.subscription_name -- "subscription_name" defines the datatype + ,aqreg.namespace + ,aqreg.location_name + ,aqreg.user_context + ,aqreg.qosflags + ,aqreg.timeout + ,aqreg.ntfn_grouping_class + ,aqreg.ntfn_grouping_value + ,aqreg.ntfn_grouping_type + ,aqreg.ntfn_grouping_start_time + ,aqreg.ntfn_grouping_repeat_count + ,aqreg.context_size + from uor_install_view uor + join dba_subscr_registrations aqreg + on substr(aqreg.subscription_name + ,instr(aqreg.subscription_name,':') + 1 + ,4000) = uor.user_or_role + join obj_install_object_tab aq + on aq.object_owner = substr(aqreg.subscription_name + ,1 + ,instr(aqreg.subscription_name,'.') - 1) + and aq.object_name = substr(aqreg.subscription_name + ,instr(aqreg.subscription_name,'.') + 1 + ,instr(aqreg.subscription_name,':') - + instr(aqreg.subscription_name,'.') - 1) + join install_type_timing t + -- Ensure the Consumer is avaialable when this Queue is installed + on t.from_install_type = aq.install_type + and t.to_install_type = uor.install_type + where aq.object_type = 'QUEUE' + -- Exclude 'sys' or 'pub' queues + and aq.object_owner_install_type in ('sys','pub'); + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.PRIV_QUEUE_REGISTER_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/PRIV_QUEUE_SUBSCRIBE_VIEW.vw b/grbsrc/ODBCAPTURE/PRIV_QUEUE_SUBSCRIBE_VIEW.vw new file mode 100644 index 0000000..65c1ec7 --- /dev/null +++ b/grbsrc/ODBCAPTURE/PRIV_QUEUE_SUBSCRIBE_VIEW.vw @@ -0,0 +1,74 @@ + +-- +-- Create ODBCAPTURE.PRIV_QUEUE_SUBSCRIBE_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."PRIV_QUEUE_SUBSCRIBE_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.PRIV_QUEUE_SUBSCRIBE_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."PRIV_QUEUE_SUBSCRIBE_VIEW" ("INSTALL_TYPE", "INSTALL_TYPE_SELECTOR", "QUEUE_INSTALL_TYPE", "QUEUE_OWNER", "QUEUE_NAME", "OBJECT_TYPE", "CONSUMER_INSTALL_TYPE", "CONSUMER_NAME", "CONSUMER_UOR_TYPE", "ADDRESS", "PROTOCOL", "RULE", "TRANSFORMATION", "QUEUE_TO_QUEUE", "DELIVERY_MODE") AS + select case t.install_timing + when 'CURRENT' + then aq.install_type + else uor.install_type + end INSTALL_TYPE + ,case t.install_timing + when 'CURRENT' + then 'QUEUE' + else 'CONSUMER' + end INSTALL_TYPE_SELECTOR + ,aq.install_type QUEUE_INSTALL_TYPE + ,aq.object_owner QUEUE_OWNER + ,aq.object_name QUEUE_NAME + ,'QUEUE' OBJECT_TYPE + ,uor.install_type CONSUMER_INSTALL_TYPE + ,uor.user_or_role CONSUMER_NAME + ,uor.uor_type CONSUMER_UOR_TYPE + ,aqsub.address + ,aqsub.protocol + ,aqsub.rule + ,aqsub.transformation + ,aqsub.queue_to_queue + ,aqsub.delivery_mode + from uor_install_view uor + join dba_queue_subscribers aqsub + on aqsub.consumer_name = uor.user_or_role + join obj_install_object_tab aq + on aq.object_owner = aqsub.owner + and aq.object_name = aqsub.queue_name + -- Ensure Consumer is available when Queue is installed + join install_type_timing t + on t.from_install_type = aq.install_type + and t.to_install_type = uor.install_type + where aq.object_type = 'QUEUE' + -- Exclude 'sys' or 'pub' queues + and aq.object_owner_install_type not in ('sys','pub'); + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.PRIV_QUEUE_SUBSCRIBE_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/PRIV_QUEUE_SYSPRIVS_VIEW.vw b/grbsrc/ODBCAPTURE/PRIV_QUEUE_SYSPRIVS_VIEW.vw new file mode 100644 index 0000000..f7bdb51 --- /dev/null +++ b/grbsrc/ODBCAPTURE/PRIV_QUEUE_SYSPRIVS_VIEW.vw @@ -0,0 +1,60 @@ + +-- +-- Create ODBCAPTURE.PRIV_QUEUE_SYSPRIVS_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."PRIV_QUEUE_SYSPRIVS_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.PRIV_QUEUE_SYSPRIVS_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."PRIV_QUEUE_SYSPRIVS_VIEW" ("INSTALL_TYPE", "INSTALL_TYPE_SELECTOR", "GRANT_INSTALL_TYPE", "GRANT_OWNER", "GRANT_NAME", "GRANTEE_INSTALL_TYPE", "GRANTEE", "GRANTEE_UOR_TYPE", "ADMIN_OPTION", "COMMON", "INHERITED", "INSTALL_OTYPE", "EXT", "EXT2", "EXT3") AS + select uor.install_type + ,'GRANTEE' INSTALL_TYPE_SELECTOR + ,'sys' GRANT_INSTALL_TYPE + ,'SYS' GRANT_OWNER + ,aqsp.dbms_aq_priv GRANT_NAME + ,uor.install_type GRANTEE_INSTALL_TYPE + ,uor.user_or_role GRANTEE + ,uor.uor_type GRANTEE_UOR_TYPE + ,aqsp.admin_option + ,aqsp.common + ,aqsp.inherited + ,'GRANT' INSTALL_OTYPE + ,otc.ext + ,otc.ext2 + ,otc.ext3 + from uor_install_view uor + join aq_system_privs_vw aqsp + on aqsp.grantee = uor.user_or_role + join otype_conf otc + on otc.install_otype = 'GRANT' + -- Exclude 'sys' and 'pub' Grantees + where uor.install_type not in ('sys','pub'); + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.PRIV_QUEUE_SYSPRIVS_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/PRIV_ROLE_PRIVILEGES_VIEW.vw b/grbsrc/ODBCAPTURE/PRIV_ROLE_PRIVILEGES_VIEW.vw new file mode 100644 index 0000000..cf19d58 --- /dev/null +++ b/grbsrc/ODBCAPTURE/PRIV_ROLE_PRIVILEGES_VIEW.vw @@ -0,0 +1,69 @@ + +-- +-- Create ODBCAPTURE.PRIV_ROLE_PRIVILEGES_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."PRIV_ROLE_PRIVILEGES_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.PRIV_ROLE_PRIVILEGES_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."PRIV_ROLE_PRIVILEGES_VIEW" ("INSTALL_TYPE", "INSTALL_TYPE_SELECTOR", "ROLE_INSTALL_TYPE", "ROLENAME", "GRANTEE_INSTALL_TYPE", "GRANTEE", "GRANTEE_UOR_TYPE", "DEFAULT_ROLE", "ADMIN_OPTION", "DELEGATE_OPTION", "COMMON", "INHERITED") AS + select case t.install_timing + when 'CURRENT' + then trc.install_type + else uor.install_type + end INSTALL_TYPE + ,case t.install_timing + when 'CURRENT' + then 'ROLE' + else 'GRANTEE' + end INSTALL_TYPE_SELECTOR + ,trc.install_type ROLE_INSTALL_TYPE + ,trc.rolename + ,uor.install_type GRANTEE_INSTALL_TYPE + ,uor.user_or_role GRANTEE + ,uor.uor_type GRANTEE_UOR_TYPE + ,priv.default_role + ,priv.admin_option + ,priv.delegate_option + ,priv.common + ,priv.inherited + from uor_install_view uor + join dba_role_privs priv + on priv.grantee = uor.user_or_role + join role_conf trc + on trc.rolename = priv.granted_role + -- Ensure the Grantee is available after installation of the Role + join install_type_timing t + on t.from_install_type = trc.install_type + and t.to_install_type = uor.install_type + -- Exclude 'sys' and 'pub' Grantees + where uor.install_type not in ('sys','pub'); + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.PRIV_ROLE_PRIVILEGES_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/PRIV_SYSOBJ_PRIVILEGES_VIEW.vw b/grbsrc/ODBCAPTURE/PRIV_SYSOBJ_PRIVILEGES_VIEW.vw new file mode 100644 index 0000000..8c6201d --- /dev/null +++ b/grbsrc/ODBCAPTURE/PRIV_SYSOBJ_PRIVILEGES_VIEW.vw @@ -0,0 +1,57 @@ + +-- +-- Create ODBCAPTURE.PRIV_SYSOBJ_PRIVILEGES_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."PRIV_SYSOBJ_PRIVILEGES_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.PRIV_SYSOBJ_PRIVILEGES_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."PRIV_SYSOBJ_PRIVILEGES_VIEW" ("INSTALL_TYPE", "INSTALL_TYPE_SELECTOR", "OBJECT_OWNER_INSTALL_TYPE", "OBJECT_OWNER", "OBJECT_NAME", "OBJECT_TYPE", "GRANTEE_INSTALL_TYPE", "GRANTEE", "GRANTEE_UOR_TYPE", "PRIVILEGE", "GRANTABLE", "HIERARCHY", "COMMON", "INHERITED") AS + select priv.grantee_install_type INSTALL_TYPE + ,'GRANTEE' INSTALL_TYPE_SELECTOR + ,priv.object_owner_install_type + ,priv.object_owner + ,priv.object_name + ,priv.object_type + ,priv.grantee_install_type + ,priv.grantee + ,priv.grantee_uor_type + ,priv.privilege + ,priv.grantable + ,priv.hierarchy + ,priv.common + ,priv.inherited + from dba_tab_privs_tab priv + -- Include only 'sys' Objects + where priv.object_owner_install_type = 'sys' + -- Exclude 'sys' and 'pub' Grantees + and priv.grantee_install_type not in ('sys','pub'); + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.PRIV_SYSOBJ_PRIVILEGES_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/PRIV_SYSTEM_PRIVILEGES_VIEW.vw b/grbsrc/ODBCAPTURE/PRIV_SYSTEM_PRIVILEGES_VIEW.vw new file mode 100644 index 0000000..6b1e96b --- /dev/null +++ b/grbsrc/ODBCAPTURE/PRIV_SYSTEM_PRIVILEGES_VIEW.vw @@ -0,0 +1,53 @@ + +-- +-- Create ODBCAPTURE.PRIV_SYSTEM_PRIVILEGES_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."PRIV_SYSTEM_PRIVILEGES_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.PRIV_SYSTEM_PRIVILEGES_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."PRIV_SYSTEM_PRIVILEGES_VIEW" ("INSTALL_TYPE", "INSTALL_TYPE_SELECTOR", "GRANTEE_INSTALL_TYPE", "GRANTEE_UOR_TYPE", "GRANTEE", "SYSTEM_PRIVILEGE_NAME", "ADMIN_OPTION", "COMMON", "INHERITED") AS + select uor.install_type + ,'GRANTEE' INSTALL_TYPE_SELECTOR + ,uor.install_type GRANTEE_INSTALL_TYPE + ,uor.uor_type GRANTEE_UOR_TYPE + ,priv.grantee + ,priv.privilege SYSTEM_PRIVILEGE_NAME + ,priv.admin_option + ,priv.common + ,priv.inherited + from uor_install_view uor + join dba_sys_privs priv + on priv.grantee = uor.user_or_role + and priv.privilege not like '% ANY QUEUE' + -- Exclude 'sys' and 'pub' Grantees + where uor.install_type not in ('sys','pub'); + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.PRIV_SYSTEM_PRIVILEGES_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/ROLE_CONF.cdl b/grbsrc/ODBCAPTURE/ROLE_CONF.cdl new file mode 100644 index 0000000..95421c8 --- /dev/null +++ b/grbsrc/ODBCAPTURE/ROLE_CONF.cdl @@ -0,0 +1,58 @@ + +-- +-- Consolidated Data Load script for ODBCAPTURE.ROLE_CONF data +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +prompt +prompt Disable Triggers and Foreign Keys +declare + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql || ';'); + execute immediate in_sql; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end run_sql; +begin + for buff in (select owner, trigger_name + from dba_triggers + where table_owner = 'ODBCAPTURE' + and table_name = 'ROLE_CONF' + order by owner, trigger_name) + loop + run_sql('alter trigger "' || buff.owner || '"' || + '."' || buff.trigger_name || '" DISABLE'); + end loop; + for buff in (select constraint_name + from dba_constraints + where constraint_type = 'R' + and owner = 'ODBCAPTURE' + and table_name = 'ROLE_CONF' + order by owner, constraint_name) + loop + run_sql('alter table "ODBCAPTURE"."ROLE_CONF"' || + ' DISABLE constraint "' || buff.constraint_name || '"'); + end loop; +end; +/ + +-- NOTE: Additional file extensions for SQL*Loader include +-- .bad - Bad Records +-- .dsc - Discard Records +-- .log - Log File + +prompt +prompt sqlldr_control=ODBCAPTURE/ROLE_CONF.ctl +host sqlldr '&1.' control=ODBCAPTURE/ROLE_CONF.ctl data=ODBCAPTURE/ROLE_CONF.csv log=ODBCAPTURE/ROLE_CONF.log silent=HEADER,FEEDBACK + +begin + if '&_RC.' != '0' then + raise_application_error(-20000, 'Control file "ODBCAPTURE/ROLE_CONF.ctl" returned error: &_RC.'); + end if; +end; +/ diff --git a/grbsrc/ODBCAPTURE/ROLE_CONF.csv b/grbsrc/ODBCAPTURE/ROLE_CONF.csv new file mode 100644 index 0000000..cb20ba9 --- /dev/null +++ b/grbsrc/ODBCAPTURE/ROLE_CONF.csv @@ -0,0 +1,106 @@ +"ROLENAME","INSTALL_TYPE","NOTES" +"ACCHK_READ","sys","Allows users with no administrative privileges to query the DBA_ACCHK_STATISTICS view" +"ADM_PARALLEL_EXECUTE_TASK","sys","Perform administrative routines (qualified by the prefix ADM_ in DBMS_PARALLEL_EXECUTE) and access the DBA_PARALLEL_EXECUTE_CHUNKS and DBA_PARALLEL_EXECUTE_TASKS views" +"APEX_ADMINISTRATOR_ROLE","sys","APEX/REST/ORDS Role" +"APEX_GRANTS_FOR_NEW_USERS_ROLE","sys","APEX/REST/ORDS Role" +"APPLICATION_TRACE_VIEWER","sys", +"AQ_ADMINISTRATOR_ROLE","sys","Privilege to administer Advanced Queuing." +"AQ_USER_ROLE","sys","De-supported but maintained for backward compatibility to version 8.0." +"AUDIT_ADMIN","sys","Provides privileges to create unified and fine-grained audit policies, use the AUDIT and NOAUDIT SQL statements, view audit data, and manage the audit trail administration." +"AUDIT_VIEWER","sys","Provides privileges to view and analyze audit data." +"AUTHENTICATEDUSER","sys","Used by the XDB protocols to define any user who has logged in to the system." +"AVTUNE_PKG_ROLE","sys","Utility functions for Analytic View auto cache auto tune." +"BDSQL_ADMIN","sys","Big Data SQL Admin Role." +"BDSQL_USER","sys","Big Data SQL User Role." +"CAPTURE_ADMIN","sys","Provides the privileges necessary to create and manage privilege analysis policies." +"CDB_DBA","sys","Provides the privileges required for administering a CDB, such as SET CONTAINER, SELECT ON PDB_PLUG_IN_VIOLATIONS, and SELECT ON CDB_LOCAL_ADMIN_PRIVS. If your site requires additional privileges, then you can create a role (either common or local) to cover these privileges, and then grant this role to the CDB_DBA role." +"CONNECT","sys","Contains the CREATE SESSION and SET CONTAINER system privileges." +"CSW_USR_ROLE","sys","Provides user privileges to manage the Catalog Services for the Web (CSW) component of Oracle Spatial." +"CTXAPP","sys","Enables developers create Oracle Text indexes and index preferences, and to use PL/SQL packages." +"DATAPATCH_ROLE","sys","Access to DBMS_QOPATCH package which will give details of Oracle Patches applied on the database." +"DATAPUMP_EXP_FULL_DATABASE","sys","Granted EXP_FULL_DATABASE role." +"DATAPUMP_IMP_FULL_DATABASE","sys","Granted EXP_FULL_DATABASE and IMP_FULL_DATABASE roles." +"DBA","sys","Example Database Administrator role." +"DBFS_ROLE","sys","Provides access to the DBFS (the Database Filesystem) packages and objects." +"DBJAVASCRIPT","sys","Needed for running JavaScript code, using the Nashorn engine of 12.2 Oracle JVM in your sessions. This role includes the permissions that are required to run Nashorn in the database." +"DBMS_MDX_INTERNAL","sys", +"DELETE_CATALOG_ROLE","sys","Grant this role to allow users to delete records from the system audit tables SYS.AUD$ and SYS.FGA_LOG$." +"DV_ACCTMGR","sys","Use the DV_ACCTMGR role to create and maintain database accounts and database profiles. In this manual, the example DV_ACCTMGR role is assigned to a user named amalcolm_dvacctmgr." +"DV_ADMIN","sys","The DV_ADMIN role controls the Oracle Database Vault PL/SQL packages." +"DV_AUDIT_CLEANUP","sys","Grant to any user who is responsible for purging the Database Vault auit trail in a non-unified auditing environment." +"DV_DATAPUMP_NETWORK_LINK","sys","Needed by any user who is responsible for conducting the NETWORK_LINK transportable Data Pump import operation in an Oracle Database Vault environment. Enables the management of the Oracle Data Pump NETWORK_LINK transportable import processes to be tightly controlled by Database Vault, but does not change or restrict the way you would normally conduct Oracle Data Pump operations." +"DV_GOLDENGATE_ADMIN","sys","Intended for any user with responsibility for GoldenGate configuration by default it contains no privileges." +"DV_GOLDENGATE_REDO_ACCESS","sys","For any user who is responsible for using the Oracle GoldenGate TRANLOGOPTIONS DBLOGREADER method to access redo logs in an Oracle Database Vault environment." +"DV_MONITOR","sys","Enables the Oracle Enterprise Manager Grid Control agent to monitor Oracle Database Vault for attempted violations and configuration issues with realm or command rule definitions. This enables Grid Control to read and propagate realm definitions and command rule definitions between databases." +"DV_OWNER","sys","The DV_OWNER role has the administrative capabilities that the DV_ADMIN role provides, and the reporting capabilities the DV_SECANALYST role provides." +"DV_PATCH_ADMIN","sys","Temporarily grant the DV_PATCH_ADMIN role to any database administrator who is responsible for performing database patching or adding languages to Database Vault. After the patch operation or language addition is complete, you should immediately revoke this role. The role does not provide access to any secured data." +"DV_POLICY_OWNER","sys","Enables database users to manage to a limited degree Oracle Database Vault policies." +"DV_PUBLIC","sys","Oracle Database Vault does not enable you to directly grant object privileges in the DVSYS schema to PUBLIC. You must grant the object privilege on the DVSYS schema object the DV_PUBLIC role, and then grant DV_PUBLIC to PUBLIC." +"DV_REALM_OWNER","sys","Use the DV_REALM_OWNER role to manage database objects in multiple schemas that define a realm. Grant this role to the database account owner who is responsible for managing one or more schema database accounts within a realm and the roles associated with the realm." +"DV_REALM_RESOURCE","sys","Use the DV_REALM_RESOURCE role for operations such as creating tables, views, triggers, synonyms, and other objects that a realm would typically use." +"DV_SECANALYST","sys","DV_SECANALYST can query DVSYS schema objects through Oracle Database Vault-supplied views only." +"DV_STREAMS_ADMIN","sys","Grant to a user who is responsible for configuring Streams replication in an Oracle Database Vault environment." +"DV_XSTREAM_ADMIN","sys","Grant to a user who is responsible for configuring XStreams replication in an Oracle Database Vault environment." +"EJBCLIENT","sys","Provides privileges to connect to EJBs from a Java stored procedure." +"EM_EXPRESS_ALL","sys","Enables users to connect to Oracle Enterprise Manager (EM) Express and use all the functionality provided by EM Express (read and write access to all EM Express features). The EM_EXPRESS_ALL role includes the EM_EXPRESS_BASIC role." +"EM_EXPRESS_BASIC","sys","Enables users to connect to EM Express and to view the pages in read-only mode. The EM_EXPRESS_BASIC role includes the SELECT_CATALOG_ROLE role." +"EXECUTE_CATALOG_ROLE","sys","Allow users EXECUTE privileges for packages and procedures in the data dictionary. Granted HS_ADMIN_EXECUTE_ROLE role." +"EXP_FULL_DATABASE","sys","Provides the privileges required to perform full and incremental database export. Granted EXECUTE_CATALOG_ROLE and SELECT_CATALOG_ROLE roles." +"GATHER_SYSTEM_STATISTICS","sys","To update the dictionary system statistics a user must have DBA privileges or the GATHER_SYSTEM_STATISTICS role." +"GDS_CATALOG_SELECT","sys","Provides access to 10 objects owned by GSMADMIN_INTERNAL." +"GGSYS_ROLE","sys","Golden Gate Administrator Privileges." +"GLOBAL_AQ_USER_ROLE","sys","Required to register through LDAP using JDBC connection parameters as this requires the ability to write access to the connection factory entries in the LDAP server (which requires the LDAP user to be either the database itself or be granted GLOBAL_AQ_USER_ROLE)." +"GSMADMIN_ROLE","sys","Granted AQ_ADMINISTRATOR_ROLE and CONNECT roles: Inlcudes EXECUTE on DBMS_GSM_UTILITY and related resources." +"GSMROOTUSER_ROLE","sys","GSMROOTUSER is a database account specific to Oracle Sharding that is only used when pluggable database (PDB) shards are present. The account is used by GDSCTL and global service managers to connect to the root container of container databases (CDBs) to perform administrative tasks." +"GSMUSER_ROLE","sys","Granted CONNECT role: Includes EXECUTE on DBMS_GSM_DBADMIN." +"GSM_POOLADMIN_ROLE","sys","Granted CONNECT role: Inlcudes EXECUTE on DBMS_GSM_POOLADMIN." +"HS_ADMIN_EXECUTE_ROLE","sys","Provides the EXECUTE privilege for users who want to use the Heterogeneous Services (HS) PL/SQL packages." +"HS_ADMIN_ROLE","sys","Provides privileges for DBAs who need to use the DBA role using Oracle Database Heterogeneous Services to access appropriate tables in the data dictionary. Used to protect access to the Heterogeneous Services (HS) data dictionary tables (grants SELECT) and packages (grants EXECUTE). It is granted to SELECT_CATALOG_ROLE and EXECUTE_CATALOG_ROLE such that users with generic data dictionary access also can access the HS data dictionary." +"HS_ADMIN_SELECT_ROLE","sys","Provides privileges to query the Heterogeneous Services data dictionary views." +"IMP_FULL_DATABASE","sys","Provides the privileges required to perform full database imports. Includes an extensive list of system privileges (use view DBA_SYS_PRIVS to view privileges) and the following roles: EXECUTE_CATALOG_ROLE and SELECT_CATALOG_ROLE. This role is provided for convenience in using the export and import utilities." +"JAVADEBUGPRIV","sys","Grants permissions to run the Java debugger." +"JAVAIDPRIV","sys","Deprecated" +"JAVASYSPRIV","sys","Grants permissions for Java administrators including updating JVM-protected packages. Granted the JAVAUSERPRIV role." +"JAVAUSERPRIV","sys","Grants permissions for Java users such as examining properties." +"JAVA_ADMIN","sys","Java administration privileges including permission to modify PolicyTable." +"JAVA_DEPLOY","sys","Provides privileges to deploy ncomp DLLs into the javavm/admin directory using the ncomp and deployns utilities. With this role, the javavm/deploy and javavm/admin directories can be accessible." +"JMXSERVER","sys","Provides permissions to start and maintain a JMX agent in a session. The procedure dbms_java.start_jmx_agent starts the agent in a specific session that generally remains active for the duration of the session." +"LBAC_DBA","sys","Provides permissions to use the SA_SYSDBA PL/SQL package." +"LOGSTDBY_ADMINISTRATOR","sys","A prototype role created by default with the RESOURCE role." +"MAINTPLAN_APP","sys","A maintenance plan can be queried in a PDB via the DB_NOTIFICATIONS view by a user that has the MAINTPLAN_APP system privilege." +"OEM_ADVISOR","sys","Provides privileges to create, drop, select (read), load (write), and delete a SQL tuning set through the DBMS_SQLTUNE PL/SQL package, and to access to the Advisor framework using the ADVISOR PL/SQL package." +"OEM_MONITOR","sys","Provides privileges needed by the Management Agent component of Oracle Enterprise Manager to monitor and manage a database." +"OLAP_DBA","sys","Provides privileges needed by the Management Agent component of Oracle Enterprise Manager to monitor and manage the database." +"OLAP_USER","sys","Provides application developers privileges to create dimensional objects in their own schemas for Oracle OLAP." +"OLAP_XS_ADMIN","sys","Administer OLAP data security. Granted the XS_RESOURCE role." +"OPTIMIZER_PROCESSING_RATE","sys","Provides privileges to execute the GATHER_PROCESSING_RATE, SET_PROCESSING_RATE, and DELETE_PROCESSING_RATE procedures in the DBMS_STATS package. These procedures manage the processing rate of a system for automatic degree of parallelism (Auto DOP). Auto DOP uses these processing rates to determine the optimal degree of parallelism for a SQL statement." +"ORDADMIN","sys","After installing Oracle Multimedia DICOM, the ORDADMIN role is created, with the database system privileges required for administration of the DICOM data model repository." +"ORDS_ADMINISTRATOR_ROLE","sys","APEX/REST/ORDS Role" +"ORDS_RUNTIME_ROLE","sys","APEX/REST/ORDS Role" +"PDB_DBA","sys","Granted automatically to the local user that is created when you create a new pluggable database (PDB) from the seed PDB. No privileges are provided with this role." +"PLUSTRACE","sys","Grants privlileges on V$ views required to use AUTOTRACE. Can be created in a PDB but not in the CDB." +"PPLB_ROLE","sys", +"PROVISIONER","sys","Provides privileges to register and update global callbacks for Oracle Database Real Application sessions and to provision principals." +"RDFCTX_ADMIN","sys","Privileges required to add a new extractor type in the schema RDFCTXU for Oracle Database Semantic Technologies." +"RECOVERY_CATALOG_OWNER","sys","Must be granted to the recovery catalog owner for RMAN." +"RECOVERY_CATALOG_OWNER_VPD","sys", +"RECOVERY_CATALOG_USER","sys","Prerequisite for Adding Data Collectors (Oracle Recovery Manager - RMAN)" +"RESOURCE","sys","Provides the following system privileges: CREATE CLUSTER, CREATE INDEXTYPE, CREATE OPERATOR, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER, CREATE TYPE. This role is provided for compatibility with previous releases of Oracle Database. You can determine the privileges encompassed by this role by querying the DBA_SYS_PRIVS data dictionary view." +"SCHEDULER_ADMIN","sys","Allows the grantee to execute the procedures of the DBMS_SCHEDULER package. It includes all of the job scheduler system privileges and is included in the DBA role." +"SELECT_CATALOG_ROLE","sys","Provides SELECT privilege on objects in the data dictionary. Granted the HS_ADMIN_SELECT_ROLE role." +"SODA_APP","sys","Simple Oracle Document Access (SODA) permissions in PL/SQL for a SODA User." +"SPATIAL_CSW_ADMIN","sys","Provides administrative privileges to manage the Catalog Services for the Web (CSW) component of Oracle Spatial." +"SPATIAL_WFS_ADMIN","sys","Provides administrative privileges to manage the Web Feature Service (WFS) component of Oracle Spatial." +"SYSUMF_ROLE","sys","Permission needed for Universal Message Format, UMF, which provides an interface for deploying Remote Management Framework (RMF) topology" +"WFS_USR_ROLE","sys","Provides user privileges for the Web Feature Service (WFS) component of Oracle Spatial." +"WM_ADMIN_ROLE","sys","Contains all Workspace Manager privileges with the grant option. By default, the database administrator (DBA role) is granted the WM_ADMIN_ROLE role." +"XDBADMIN","sys","Allows the grantee to register an XML schema globally, as opposed to registering it for use or access only by its owner. It also lets the grantee bypass access control list (ACL) checks when accessing Oracle XML DB Repository." +"XDB_SET_INVOKER","sys","Allows the grantee to define invoker's rights handlers and to create or update the resource configuration for XML repository triggers. By default, Oracle Database grants this role to the DBA role but not to the XDBADMIN role." +"XDB_WEBSERVICES","sys","Allows the grantee to access Oracle Database Web services over HTTPS. However, it does not provide the user access to objects in the database that are public. To allow public access, you need to grant the user the XDB_WEBSERVICES_WITH_PUBLIC role. For a user to use these Web services, SYS must enable the Web service servlets." +"XDB_WEBSERVICES_OVER_HTTP","sys","Allows the grantee to access Oracle Database Web services over HTTP. However, it does not provide the user access to objects in the database that are public. To allow public access, you need to grant the user the XDB_WEBSERVICES_WITH_PUBLIC role." +"XDB_WEBSERVICES_WITH_PUBLIC","sys","Allows the grantee access to public objects through Oracle Database Web services." +"XS_CACHE_ADMIN","sys","The mid-tier cache. It is required for caching the security policy at the mid-tier level for the checkAcl (authorization) method of the XSAccessController class. Grant this role to the application connection user or the Real Application Security dispatcher." +"XS_CONNECT","sys", +"XS_NAMESPACE_ADMIN","sys","In Oracle Database Real Application Security, enables the grantee to manage and manipulate the namespace and attribute for a session. Grant this role to the Real Application Security session user." +"XS_RESOURCE","sys", +"XS_SESSION_ADMIN","sys","In Oracle Database Real Application Security, enables the grantee to manage the life cycle of a session, including the ability to create, attach, detach, and destroy the session. Grant this role to the application connection user or Real Application Security dispatcher." diff --git a/grbsrc/ODBCAPTURE/ROLE_CONF.ctl b/grbsrc/ODBCAPTURE/ROLE_CONF.ctl new file mode 100644 index 0000000..a8308bb --- /dev/null +++ b/grbsrc/ODBCAPTURE/ROLE_CONF.ctl @@ -0,0 +1,9 @@ +OPTIONS (SKIP=1) +LOAD DATA +APPEND INTO TABLE "ODBCAPTURE"."ROLE_CONF" +FIELDS CSV WITH EMBEDDED +TRAILING NULLCOLS + (ROLENAME CHAR(128) + ,INSTALL_TYPE CHAR(10) + ,NOTES CHAR(1024) + ) diff --git a/grbsrc/ODBCAPTURE/ROLE_CONF.tab b/grbsrc/ODBCAPTURE/ROLE_CONF.tab new file mode 100644 index 0000000..a4d8028 --- /dev/null +++ b/grbsrc/ODBCAPTURE/ROLE_CONF.tab @@ -0,0 +1,39 @@ + +-- +-- Create ODBCAPTURE.ROLE_CONF Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.ROLE_CONF + + CREATE TABLE "ODBCAPTURE"."ROLE_CONF" + ( "ROLENAME" VARCHAR2(128 BYTE) NOT NULL ENABLE, + "INSTALL_TYPE" VARCHAR2(10 BYTE) NOT NULL ENABLE, + "NOTES" VARCHAR2(1024 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "ODBCAPTURE"."ROLE_CONF" ADD CONSTRAINT "ROLE_CONF_PK" PRIMARY KEY ("ROLENAME", "INSTALL_TYPE") + USING INDEX ENABLE; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.ROLE_CONF + + COMMENT ON COLUMN "ODBCAPTURE"."ROLE_CONF"."ROLENAME" IS 'Name of the database role (Primary Key Column 1)'; + COMMENT ON COLUMN "ODBCAPTURE"."ROLE_CONF"."INSTALL_TYPE" IS 'Install type for this database role (Primary Key Column 2). Value must exist in TYPE_CONF table.'; + COMMENT ON COLUMN "ODBCAPTURE"."ROLE_CONF"."NOTES" IS 'Free text field (Optional)'; + COMMENT ON TABLE "ODBCAPTURE"."ROLE_CONF" IS 'List of Roles to install in each Install Type.'; + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/ROLE_CONF.tabfk b/grbsrc/ODBCAPTURE/ROLE_CONF.tabfk new file mode 100644 index 0000000..0e11e58 --- /dev/null +++ b/grbsrc/ODBCAPTURE/ROLE_CONF.tabfk @@ -0,0 +1,16 @@ + +-- +-- Create Foreign Keys for ODBCAPTURE.ROLE_CONF TABLE +-- + +set define off + + +-- NOTE: This is a "BASE TABLE" Foreign Key + +--DBMS_METADATA:ODBCAPTURE.ROLE_CONF_FK1 + + ALTER TABLE "ODBCAPTURE"."ROLE_CONF" ADD CONSTRAINT "ROLE_CONF_FK1" FOREIGN KEY ("INSTALL_TYPE") + REFERENCES "ODBCAPTURE"."TYPE_CONF" ("INSTALL_TYPE") ENABLE; + +set define on diff --git a/grbsrc/ODBCAPTURE/ROOT_SCRIPTS.pbody b/grbsrc/ODBCAPTURE/ROOT_SCRIPTS.pbody new file mode 100644 index 0000000..1c140ba --- /dev/null +++ b/grbsrc/ODBCAPTURE/ROOT_SCRIPTS.pbody @@ -0,0 +1,1445 @@ + +-- +-- Create ODBCAPTURE.ROOT_SCRIPTS Package Body +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.ROOT_SCRIPTS + + CREATE OR REPLACE EDITIONABLE PACKAGE BODY "ODBCAPTURE"."ROOT_SCRIPTS" +as + + +-------------------------------------------------------------------------------- +-- Alter Foreign Keys Script +function alter_foreign_keys_sql + (in_install_type in varchar2) + return varchar2 +is + ret_txt varchar2(32767); +begin + ret_txt := q'{ +-- +-- Alter "}' || in_install_type || q'{" Install Type Foreign Keys +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure missing_parent_sql + (in_owner sys.dba_constraints.owner%TYPE + ,in_constraint sys.dba_constraints.constraint_name%TYPE) + is + TYPE fk_rec_type is record + (child_owner sys.dba_constraints.owner%TYPE + ,child_table sys.dba_constraints.table_name%TYPE + ,child_column sys.dba_cons_columns.column_name%TYPE + ,parent_owner sys.dba_constraints.owner%TYPE + ,parent_table sys.dba_constraints.table_name%TYPE + ,parent_column sys.dba_cons_columns.column_name%TYPE); + TYPE fk_nt_type is table of fk_rec_type; + fk_nt fk_nt_type; + sql_txt varchar2(1000); + begin + select ctab.owner child_owner, ctab.table_name child_table, ccol.column_name child_column, + ptab.owner parent_owner, ptab.table_name parent_table, pcol.column_name parent_column + bulk collect into fk_nt + from sys.dba_constraints ctab + join sys.dba_cons_columns ccol + on ccol.owner = ctab.owner and ccol.constraint_name = ctab.constraint_name + join sys.dba_constraints ptab + on ptab.owner = ctab.r_owner and ptab.constraint_name = ctab.r_constraint_name + join sys.dba_cons_columns pcol + on pcol.owner = ptab.owner and pcol.constraint_name = ptab.constraint_name + and pcol.position = ccol.position + where ctab.owner = in_owner and ctab.constraint_name = in_constraint + order by ccol.position; + if SQL%NOTFOUND then return; end if; + dbms_output.put_line('-- ORA-20000: Query to find missing parent keys:'); + -- ORA-20000: select "CHILD_KEY" from from "CHILD_OWNER"."CHILD_TABLE" group by "CHILD_KEY" + sql_txt := '-- ORA-20000: select "' || fk_nt(1).child_column; + for i in 2 .. fk_nt.LAST + loop + sql_txt := sql_txt || '", "' || fk_nt(i).child_column; + end loop; + sql_txt := sql_txt || '" from "' || fk_nt(1).child_owner || '"."' || fk_nt(1).child_table || + '" group by "' || fk_nt(1).child_column; + for i in 2 .. fk_nt.LAST + loop + sql_txt := sql_txt || '", "' || fk_nt(i).child_column; + end loop; + dbms_output.put_line (sql_txt || '"'); + -- ORA-20000: MINUS select "PARENT_KEY" from "PARENT_OWNER"."PARENT_TABLE"; + sql_txt := '-- ORA-20000: MINUS select "' || fk_nt(1).parent_column; + for i in 2 .. fk_nt.LAST + loop + sql_txt := sql_txt || '", "' || fk_nt(i).parent_column; + end loop; + sql_txt := sql_txt || '" from "' || fk_nt(1).parent_owner || '"."' || fk_nt(1).parent_table || '";'; + dbms_output.put_line (sql_txt); + end missing_parent_sql; + procedure do_it (in_schema in varchar2) + is + sql_txt varchar2(1000); + begin + for buff in (select owner, table_name, constraint_name from dba_constraints + where constraint_type = 'R' and owner = in_schema + order by owner, table_name, constraint_name) + loop + sql_txt := 'alter table "' || buff.owner || '"."' || buff.table_name || + '" &1. constraint "' || buff.constraint_name || '"'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- *'); + dbms_output.put_line('-- ERROR at line :'); + dbms_output.put_line('-- ' || SQLERRM); + missing_parent_sql(buff.owner,buff.constraint_name); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Foreign Keys is done.'); + end do_it; +begin +}'; + ret_txt := ret_txt || ' dbms_output.put_line(''Alter Foreign Keys for ' || + in_install_type || ' Install Type'');' || CHR(10); + for sch in (select obj.object_owner + from schema_objects_vw obj + join schema_conf sl + on sl.username = obj.object_owner + where obj.install_type = in_install_type + and obj.object_owner != 'PUBLIC' + group by obj.object_owner + order by obj.object_owner) + loop + ret_txt := ret_txt || ' do_it(''' || sch.object_owner || ''');' || CHR(10); + end loop; + ret_txt := ret_txt || 'end;' || CHR(10) || + '/'; + return ret_txt; +end alter_foreign_keys_sql; + + +-------------------------------------------------------------------------------- +-- Alter Queues Script +function alter_queues_sql + (in_install_type in varchar2) + return varchar2 +is + ret_txt varchar2(32767); +begin + ret_txt := q'{ +-- +-- Alter "}' || in_install_type || q'{" Install Type Queues +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select owner, name from dba_queues + where owner = in_schema and queue_type != 'EXCEPTION_QUEUE' + order by owner, name) + loop + sql_txt := 'begin DBMS_AQADM.' || + case '&1.' when 'ENABLE' then 'START_QUEUE' + else 'STOP_QUEUE' + end || + '(QUEUE_NAME => ''' || buff.owner || '.' || buff.name || + ''', ENQUEUE => TRUE, DEQUEUE => TRUE); end;'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Queues is done.'); + end do_it; +begin +}'; + ret_txt := ret_txt || ' dbms_output.put_line(''Alter Queues for ' || + in_install_type || ' Install Type'');' || CHR(10); + for sch in (select obj.object_owner + from schema_objects_vw obj + join schema_conf sl + on sl.username = obj.object_owner + where obj.install_type = in_install_type + and obj.object_owner != 'PUBLIC' + group by obj.object_owner + order by obj.object_owner) + loop + ret_txt := ret_txt || ' do_it(''' || sch.object_owner || ''');' || CHR(10); + end loop; + ret_txt := ret_txt || 'end;' || CHR(10) || + '/'; + return ret_txt; +end alter_queues_sql; + + +-------------------------------------------------------------------------------- +-- Alter Scheduler Jobs Script +function alter_scheduler_jobs_sql + (in_install_type in varchar2) + return varchar2 +is + ret_txt varchar2(32767); +begin + ret_txt := q'{ +-- +-- Alter "}' || in_install_type || q'{" Install Type Scheduler Jobs +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select owner, job_name from dba_scheduler_jobs + where owner = in_schema + order by owner, job_name) + loop + sql_txt := 'begin DBMS_SCHEDULER.&1.(NAME => ''' || + buff.owner || '.' || buff.job_name || '''); end;'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Scheduler Jobs is done.'); + end do_it; +begin +}'; + ret_txt := ret_txt || ' dbms_output.put_line(''Alter Scheduler Jobs for ' || + in_install_type || ' Install Type'');' || CHR(10); + for sch in (select obj.object_owner + from schema_objects_vw obj + join schema_conf sl + on sl.username = obj.object_owner + where obj.install_type = in_install_type + and obj.object_owner != 'PUBLIC' + group by obj.object_owner + order by obj.object_owner) + loop + ret_txt := ret_txt || ' do_it(''' || sch.object_owner || ''');' || CHR(10); + end loop; + ret_txt := ret_txt || 'end;' || CHR(10) || + '/'; + return ret_txt; +end alter_scheduler_jobs_sql; + + +-------------------------------------------------------------------------------- +-- Alter Triggers Script +function alter_triggers_sql + (in_install_type in varchar2) + return varchar2 +is + ret_txt varchar2(32767); +begin + ret_txt := q'{ +-- +-- Alter "}' || in_install_type || q'{" Install Type Triggers +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select owner, trigger_name from dba_triggers + where table_owner = in_schema + order by owner, trigger_name) + loop + sql_txt := 'alter trigger "' || buff.owner || '"."' || + buff.trigger_name || '" &1.'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Triggers is done.'); + end do_it; +begin +}'; + ret_txt := ret_txt || ' dbms_output.put_line(''Alter Triggers for ' || + in_install_type || ' Install Type'');' || CHR(10); + for sch in (select obj.object_owner + from schema_objects_vw obj + join schema_conf sl + on sl.username = obj.object_owner + where obj.install_type = in_install_type + and obj.object_owner != 'PUBLIC' + group by obj.object_owner + order by obj.object_owner) + loop + ret_txt := ret_txt || ' do_it(''' || sch.object_owner || ''');' || CHR(10); + end loop; + ret_txt := ret_txt || 'end;' || CHR(10) || + '/'; + return ret_txt; +end alter_triggers_sql; + + +-------------------------------------------------------------------------------- +-- Compile All Database Objects Script +function compile_all_sql + (in_install_type in varchar2) + return varchar2 +is + ret_txt varchar2(32767); +begin + ret_txt := q'{ +-- +-- Compile All "}' || in_install_type || q'{" Install Type Objects +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select object_name + from sys.dba_objects + where owner = in_schema + and object_type = 'JAVA SOURCE' + order by object_name ) + loop + sql_txt := 'alter java source "' || in_schema || '"."' || buff.object_name || '" compile'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + begin + DBMS_UTILITY.compile_schema(schema => in_schema, compile_all => FALSE); + dbms_output.put_line('-- ' || in_schema || ' Compile All is done.'); + exception when others then + dbms_output.put_line('Compiling Schema ' || in_schema || CHR(10) || SQLERRM); + dbms_output.put_line(''); + end; + end do_it; +begin +}'; + ret_txt := ret_txt || ' dbms_output.put_line(''Compile All for ' || + in_install_type || ' Install Type'');' || CHR(10); + for sch in (select obj.object_owner + from schema_objects_vw obj + join schema_conf sl + on sl.username = obj.object_owner + where obj.install_type = in_install_type + and obj.object_owner != 'PUBLIC' + group by obj.object_owner + order by obj.object_owner) + loop + ret_txt := ret_txt || ' do_it(''' || sch.object_owner || ''');' || CHR(10); + end loop; + ret_txt := ret_txt || 'end;' || CHR(10) || + '/'; + return ret_txt; +end compile_all_sql; + + +-------------------------------------------------------------------------------- +-- Database Build JUnit Report Script +function db_build_junit_report_sql + (in_install_type in varchar2) + return varchar2 +is + ret_txt varchar2(32767); +begin + ret_txt := q'{ +-- +-- Create JUnit XML Report of Database Build Status for "}' || in_install_type || q'{" Install Type +-- + +declare + -- + procedure ot (in_txt in varchar2) is begin + dbms_output.put_line(in_txt); + end ot; + -- + procedure do_it (in_schema in varchar2) is + begin + for tsuite in ( + with q1 as ( + select obj.owner + ,count(obj.owner) NUM_TESTS + ,sum(decode(obj.status, 'VALID', 0, 1)) NUM_FAILURES + ,min(obj.last_ddl_time) TSTAMP + -- Jenkins JUnit Plugin adds all these times together + -- round((max(obj.last_ddl_time) - min(obj.last_ddl_time))*24*60*60) + ,0 ELAPSED_SECS + from dba_objects obj + where obj.owner = in_schema + group by obj.owner + UNION + select syn.table_owner OWNER + ,count(syn.table_owner) NUM_TESTS + ,sum(decode(obj.status, 'VALID', 0, 1)) NUM_FAILURES + ,min(obj.last_ddl_time) TSTAMP + -- Jenkins JUnit Plugin adds all these times together + -- round((max(obj.last_ddl_time) - min(obj.last_ddl_time))*24*60*60) + ,0 ELAPSED_SECS + from dba_synonyms syn + join dba_objects obj + on obj.object_name = syn.synonym_name + and obj.owner = syn.owner + where syn.owner = 'PUBLIC' + and syn.table_owner = in_schema + group by syn.table_owner + ) + select owner -- TESTSUITE + ,sum(NUM_TESTS) NUM_TESTS + ,sum(NUM_FAILURES) NUM_FAILURES + ,max(TSTAMP) TSTAMP + ,sum(ELAPSED_SECS) ELAPSED_SECS + from q1 + group by owner + order by owner) + loop + ot(' '); + for tcase in ( + select obj.object_type -- TESTCASE + ,replace(obj.object_name,'.','_') OBJECT_NAME -- CLASS + ,obj.STATUS + ,0 ELAPSED_SECS + from dba_objects obj + where obj.owner = tsuite.owner + UNION ALL + select 'PUBLIC_SYNONYM' OBJECT_TYPE -- TESTCASE + ,replace(obj.object_name,'.','_') OBJECT_NAME -- CLASS + ,obj.STATUS + ,0 ELAPSED_SECS + from dba_synonyms syn + join dba_objects obj + on obj.object_name = syn.synonym_name + and obj.owner = syn.owner + where syn.owner = 'PUBLIC' + and syn.table_owner = tsuite.owner + order by 1,2 ) + loop + if tcase.status = 'VALID' + then + ot(' ' ); + else + ot(' ' ); + ot(' '); + ot('** Object Status is ' || tcase.status); + for terror in ( + select 'Line ' || line || + ', Col ' || position || + ': ' || UTL_I18N.ESCAPE_REFERENCE(text, 'us7ascii') ERROR_TXT + from dba_errors + where owner = tsuite.owner + and type = decode(tcase.object_type,'PUBLIC_SYNONYM','SYNONYM',tcase.object_type) + and name = tcase.object_name + order by sequence ) + loop + ot(terror.error_txt); + end loop; + ot(' '); + ot(' '); + end if; + end loop; + ot(' '); + end loop; + end do_it; +begin + ot(''); + ot(''); +}'; + for sch in (select obj.object_owner + from schema_objects_vw obj + join schema_conf sl + on sl.username = obj.object_owner + where obj.install_type = in_install_type + and obj.object_owner != 'PUBLIC' + group by obj.object_owner + order by obj.object_owner) + loop + ret_txt := ret_txt || ' do_it(''' || sch.object_owner || ''');' || CHR(10); + end loop; + ret_txt := ret_txt || ' ot('''');' || CHR(10) || + 'end;' || CHR(10) || + '/'; + return ret_txt; +end db_build_junit_report_sql; + + +-------------------------------------------------------------------------------- +-- Database Script Install Wrapper +function db_install_sql + (in_install_type in varchar2) + return varchar2 +is + ret_txt varchar2(32767); +begin + ret_txt := q'{ +-- Database Installation Assist +-- Wrapper for Database Installation Scripts +-- +-- Parameters +-- 1) Script Name +-- 2) Schema Name +-- 3) System Connect String + +prompt === DBI Started: &1. + +define DBI_SCRIPT_NAME="&1." +define DBI_SCHEMA_NAME="&2." +define DBI_SYSTEM_CONNECT="&3." + +variable dbi_beg_dtm varchar2(40) +variable dbi_beg_secs number + +set feedback off +begin + -- Initialize Timer + :dbi_beg_dtm := to_char(systimestamp,'YYYY-MM-DD') || 'T' || + to_char(systimestamp,'HH24:MI:SS'); + :dbi_beg_secs := dbms_utility.get_time; + -- Set Current Schema + if length('&DBI_SCHEMA_NAME.') > 0 + then + execute immediate 'alter session set current_schema = "&DBI_SCHEMA_NAME."'; + end if; +end; +}'; + -- Can't have string declaration with a "/" on a line by itself + ret_txt := ret_txt || '/' || CHR(10) || q'{ +set feedback on +set blockterminator off +set sqlblanklines on + +}'; + -- Can't start a line with an "@" + ret_txt := ret_txt || q'{@"&DBI_SCRIPT_NAME." "&DBI_SYSTEM_CONNECT." "" "" +set serveroutput on size unlimited format wrapped + +set sqlblanklines off +set blockterminator on +set feedback off +begin + -- Reset Current Schema + if length('&DBI_SCHEMA_NAME.') > 0 + then + execute immediate 'alter session set current_schema = "' || USER || '"'; + end if; + -- Show Timer Results + dbms_output.put_line('=== DBI Completed at ' || to_char(systimestamp,'YYYY-MM-DD') || 'T' || + to_char(systimestamp,'HH24:MI:SS') || + ' for a duration of ' || trim( (dbms_utility.get_time - :dbi_beg_secs) / 100 ) || + ' seconds (started at ' || :dbi_beg_dtm || ')'); +end; +}'; + -- Can't have string declaration with a "/" on a line by itself + ret_txt := ret_txt || '/' || CHR(10) || q'{ +set feedback on}'; + return ret_txt; +end db_install_sql; + + +-------------------------------------------------------------------------------- +-- Fix Invalid Public Synonyms Script +function fix_invalid_public_synonyms_sql + return varchar2 +is + ret_txt varchar2(32767); +begin + ret_txt := q'{ +-- +-- Re-create Invalid Public Synonyms +-- + +---------------------------------------- +prompt +prompt Re-create Invalid Public Synonyms +set serveroutput on size unlimited format wrapped +set linesize 2499 + +Declare + sql_txt varchar(2000); +Begin + for buff in (with q1 as ( + select owner, object_name, editionable + from dba_objects + where status != 'VALID' + ) + select syn.synonym_name, syn.table_owner, syn.table_name, + case q1.editionable when 'Y' then ' EDITIONABLE' + when NULL then '' + else ' NONEDITIONABLE' + end EDITIONABLE + from dba_synonyms syn + join q1 + on q1.owner = syn.owner + and q1.object_name = syn.synonym_name + join dba_users usr + on usr.username = syn.table_owner + and ( usr.oracle_maintained is null + OR usr.oracle_maintained != 'Y') + where syn.owner = 'PUBLIC' ) + loop + begin + sql_txt := 'CREATE OR REPLACE' || buff.EDITIONABLE || ' PUBLIC SYNONYM "' || + buff.synonym_name || '" for "' || buff.table_owner || '"."' || + buff.table_name ||'"'; + dbms_output.put_line(sql_txt); + execute immediate sql_txt; + exception + when others then + dbms_output.put_line('ERROR:' || CHR(10) || SQLERRM || CHR(10)); + dbms_output.put_line('----------------------------------------'); + end; + end loop; +end; +}'; + -- Can't have string declaration with a "/" on a line by itself + ret_txt := ret_txt || '/' || CHR(10); + return ret_txt; +end fix_invalid_public_synonyms_sql; + + +-------------------------------------------------------------------------------- +-- Installation Finalization Script +function installation_finalize_sql + (in_install_type in varchar2) + return varchar2 +is + ret_txt varchar2(32767); +begin + ret_txt := q'{ +-- +-- Finalize Installation +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +define FINAL_SYSTEM_CONNECT="&1." + +prompt +prompt Drop_Temp_Publicly_Updateable_Table_SQL +drop table SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE purge; + +prompt +prompt fix_invalid_public_synonyms +}'; + -- Can't start a line with an "@" + ret_txt := ret_txt || q'{@"fix_invalid_public_synonyms.sql" "" + +prompt +prompt compile_all +}'; + -- Can't start a line with an "@" + ret_txt := ret_txt || q'{@"compile_all.sql" "" + +prompt +prompt alter_foreign_keys_ENABLE +}'; + -- Can't start a line with an "@" + ret_txt := ret_txt || q'{@"alter_foreign_keys.sql" "ENABLE" + +prompt +prompt alter_triggers_ENABLE +}'; + -- Can't start a line with an "@" + ret_txt := ret_txt || q'{@"alter_triggers.sql" "ENABLE" + +prompt +prompt update_id_sequences +}'; + -- Can't start a line with an "@" + ret_txt := ret_txt || q'{@"update_id_sequences.sql" "" + +--prompt +--prompt alter_queues_ENABLE +}'; + -- Can't start a line with an "@" + ret_txt := ret_txt || q'{--@"alter_queues.sql" "ENABLE" + +--prompt +--prompt alter_scheduler_jobs_ENABLE +}'; + -- Can't start a line with an "@" + ret_txt := ret_txt || q'{--@"alter_scheduler_jobs.sql" "ENABLE" + +prompt +prompt Load Installation Files +}'; + -- Can't start a line with an "@" + ret_txt := ret_txt || q'{@"odbcapture_installation_logs.cdl" "&FINAL_SYSTEM_CONNECT."}'; + return ret_txt; +end installation_finalize_sql; + + +-------------------------------------------------------------------------------- +-- Installation Preparation Script +function installation_prepare_sql + (in_install_type in varchar2) + return varchar2 +is + ret_txt varchar2(32767); +begin + ret_txt := q'{ +-- +-- Prepare for View Install +-- + +prompt +prompt Create_Temp_Publicly_Updateable_Table_SQL +create table SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE (c1 number); +grant all on SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE to PUBLIC with grant option;}'; + return ret_txt; +end installation_prepare_sql; + + + +-------------------------------------------------------------------------------- +-- List Invalid Database Objects +function list_invalids_sql + (in_install_type in varchar2) + return varchar2 +is + ret_txt varchar2(32767); +begin + ret_txt := q'{ +-- +-- List Invalid Objects for "}' || in_install_type || q'{" Install Type +-- + +declare + procedure do_it (in_schema in varchar2) is + begin + for buff in ( + with q1 as ( + select owner + ,object_name + ,object_type + ,status + from dba_objects obj + where obj.owner = in_schema + and ( obj.object_type != 'TYPE' + or obj.object_name not like 'SYSTP%==') + and obj.status != 'VALID' + UNION ALL + select syn.table_owner + ,syn.synonym_name + ,'PUBLIC_SYNONYM' OBJECT_TYPE + ,obj.status + from dba_synonyms syn + join dba_objects obj + on obj.object_name = syn.synonym_name + and obj.owner = syn.owner + and obj.status != 'VALID' + where syn.owner = 'PUBLIC' + and syn.table_owner = in_schema + ) + select '"' || owner || '",' || + '"' || object_name || '",' || + '"' || object_type || '",' || + '"' || status || '"' RECORD_DATA + from q1 + order by RECORD_DATA) + loop + dbms_output.put_line(buff.RECORD_DATA); + end loop; + end do_it; +begin + dbms_output.put_line('"OWNER","OBJECT_NAME","OBJECT_TYPE","STATUS"'); +}'; + for sch in (select obj.object_owner + from schema_objects_vw obj + join schema_conf sl + on sl.username = obj.object_owner + where obj.install_type = in_install_type + and obj.object_owner != 'PUBLIC' + group by obj.object_owner + order by obj.object_owner) + loop + ret_txt := ret_txt || ' do_it(''' || sch.object_owner || ''');' || CHR(10); + end loop; + ret_txt := ret_txt || 'end;' || CHR(10) || + '/'; + return ret_txt; +end list_invalids_sql; + + +-------------------------------------------------------------------------------- +-- Log Files JUnit Report Script +function log_files_junit_report_sql + (in_install_type in varchar2) + return varchar2 +is + ret_txt varchar2(32767); +begin + ret_txt := q'{ +-- +-- Create JUnit XML Report of Database Log Files for "}' || in_install_type || q'{" Schema +-- + +--Element | Description +-------------|------------- +--TestSuite | install_SYS, install_SYSTEM, and install_}' || in_install_type || q'{ +--Hostname | Database Name +--Property | name="Source Version" value="https://github.com/DMSTEX/DMSTEX.git at f2c736d0cc6fd80d961414dcae37df2bed0d69e2 (Branch: main)" +--Testcase | Script Name +--Classname | "Schema Name"."Object Type" +--Assertions | Number of PL/SQL Statements +--Status | PASS/FAIL/ERROR/DISABLE +--Time | Testcase Duration +--Timestamp | Testcase Runtime (ISO 8601 format) +--Errors | Number of Test Errors + +declare + -- + -- Process CLOB Contents from odbcapture_installation_logs + line_txt varchar2(4000); + so_far pls_integer; + end_pos pls_integer; + -- + -- Varchar2 Associative Array + TYPE vc2_aa_type is table of varchar2(4000) + index by pls_integer; + -- + -- Testcases + TYPE tc_rec_type is record + (schema_name varchar2(128) + ,script_ext varchar2(10) -- Script Name Extension + ,num_statements number(3) -- Number of statements executed in a script + ,status varchar2(10) -- PASS/FAIL + ,duration_secs number(5) + ,t_timestamp varchar2(20) -- 2014-01-21T16:17:18 + ,error_message varchar2(4000) + ,tc_err_aa vc2_aa_type + ,tc_sys_out_aa vc2_aa_type + ); + TYPE tc_aa_type is table of tc_rec_type + index by varchar2(256); -- Testcase Name (Script Name with Path) + tc_aa tc_aa_type; + tc_name varchar2(256); -- Testcase Name (Script Name with Path) + prev_tc_name varchar2(256); -- Previous Testcase Name + -- + tc_buff_aa vc2_aa_type; -- Buffer Array for Testcases + sys_buff_aa vc2_aa_type; -- Buffer Array for System + sys_err boolean := FALSE; -- System Error Found + -- + total_tests number(4); + total_errors number(4); + total_duration number(6); + -- + procedure initialize_testcase (in_buff in varchar2) is begin + -- === DBI Started: "ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tab" + tc_name := replace(substr(in_buff, 18, 256),'"',''); + tc_aa(tc_name).schema_name := substr(tc_name, 1, instr(tc_name,'/',1)-1); + tc_aa(tc_name).script_ext := substr(tc_name, instr(tc_name,'.',-1)+1,10); + tc_aa(tc_name).status := 'PASS'; + end initialize_testcase; + -- + procedure finalize_testcase (in_buff in varchar2) is begin + if tc_name is null then return; end if; + tc_aa(tc_name).t_timestamp := substr(in_buff,22,19); + tc_aa(tc_name).duration_secs := substr(in_buff,60,length(in_buff)-60-40); + total_duration := total_duration + tc_aa(tc_name).duration_secs; + if regexp_like(tc_name, '[.]cdl$') + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := '### SQL*Loader Log File: ' || replace(tc_name,'.cdl','.log'); + begin + select substr(replace(contents,CHR(10)||CHR(10),CHR(10)),1,4000) + into tc_buff_aa(tc_buff_aa.COUNT + 1) + from odbcapture_installation_logs + where file_name = replace(tc_name,'.cdl','.log'); + exception when others then + tc_buff_aa(tc_buff_aa.COUNT + 1) := SQLERRM; + end; + end if; + if tc_aa(tc_name).status = 'FAIL' + then + tc_aa(tc_name).num_statements := 1; + total_errors := total_errors + 1; + if tc_buff_aa.COUNT > 0 + then + for i in tc_buff_aa.FIRST .. tc_buff_aa.LAST + loop + tc_aa(tc_name).tc_err_aa(i) := tc_buff_aa(i); + end loop; + end if; + else + tc_aa(tc_name).num_statements := tc_buff_aa.COUNT; + if tc_buff_aa.COUNT > 0 + then + for i in tc_buff_aa.FIRST .. tc_buff_aa.LAST + loop + tc_aa(tc_name).tc_sys_out_aa(i) := tc_buff_aa(i); + end loop; + end if; + end if; + total_tests := total_tests + 1; + prev_tc_name := tc_name; + tc_buff_aa.DELETE; + tc_name := ''; + end finalize_testcase; + -- + procedure process_contents_line (in_txt in varchar2) is + ldr_txt varchar2(4000); + begin + if in_txt is null then return; end if; + case + when regexp_like(in_txt, '^=== DBI Started: ') + then + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := 'Unexpected Testcase End: ' || in_txt; + finalize_testcase(''); + initialize_testcase(in_txt); + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + else + initialize_testcase(in_txt); + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + end if; + when regexp_like(in_txt, '^=== DBI Completed at ') + then + -- === DBI Completed at 2024-03-05T02:54:49 for a duration of 1.25 seconds (started at 2024-03-05T02:54:48) + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + finalize_testcase(in_txt); + else + sys_err := TRUE; + sys_buff_aa(sys_buff_aa.COUNT + 1) := 'Unexpected Testcase End: ' || in_txt; + end if; + when regexp_like(in_txt, '^(-- ){0,1}(PL[/]SQL:|(PLS|OCI|ORA|SP2|SQL|TNS)-[[:digit:]])') + then + -- (-- ){0,1}: "-- " may or may not be present + -- PL/SQL: PL/SQL Message + -- PLS-"digit" PL/SQL Errors + -- OCI-"digit" Oracle Call Interface + -- ORA-"digit" Oracle Database Errors + -- SP2-"digit" SQL*Plus Errors + -- SQL-"digit" SQL Errors + -- TNS-"digit" Transparent Network Substrate Errors + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + tc_aa(tc_name).status := 'FAIL'; + if tc_aa(tc_name).error_message is null + then + tc_aa(tc_name).error_message := in_txt; + end if; + else + sys_err := TRUE; + sys_buff_aa(sys_buff_aa.COUNT + 1) := '(' || prev_tc_name || ') ' || in_txt; + end if; + else + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + else + sys_buff_aa(sys_buff_aa.COUNT + 1) := '(' || prev_tc_name || ') ' || in_txt; + end if; + end case; + end process_contents_line; + -- + procedure p (in_txt in varchar2) is begin + dbms_output.put_line(in_txt); + end p; +begin + -- + prev_tc_name := 'Initializing'; + -- JUnit XML Format for Jenkins: "https://llg.cubic.org/docs/junit/" + p(''); + p(''); + for buf1 in (select rownum TS_ID + ,l.file_name + ,to_char(l.load_dtm,'YYYY-MM-DD') || 'T' || + to_char(l.load_dtm,'HH24:MI:SS') TSTAMP + ,db.db_unique_name + ,l.contents + from odbcapture_installation_logs l + cross join v$database db + where l.install_type = '}' || in_install_type || q'{' + and l.file_name like 'install%' + and l.load_dtm > trunc(sysdate,'DD') - 2 + order by l.file_name, l.load_dtm) + loop + -- Initialize + tc_aa.DELETE; + tc_buff_aa.DELETE; + sys_buff_aa.DELETE; + tc_name := ''; + total_tests := 0; + total_errors := 0; + total_duration := 0; + -- Fill the Testcase Array + so_far := 0; + loop + end_pos := instr(buf1.contents, chr(10), so_far + 1); + exit when end_pos = 0; + line_txt := substr(buf1.contents, so_far + 1, end_pos - so_far - 1); + process_contents_line(line_txt); + so_far := end_pos; + end loop; + line_txt := substr(buf1.contents, so_far + 1, 4000); + process_contents_line(line_txt); + -- testsuite can appear multiple times, if contained in a testsuites element. It can also be the root element. + p(' '); + tc_name := tc_aa.FIRST; + while tc_name is not null + loop + -- testcase can appear multiple times, see /testsuites/testsuite@tests + p(' '); + if tc_aa(tc_name).status = 'PASS' + then + if tc_aa(tc_name).tc_sys_out_aa.COUNT > 0 + then + -- Data that was written to standard out while the test was executed. optional + p(' '); + for i in tc_aa(tc_name).tc_sys_out_aa.FIRST .. tc_aa(tc_name).tc_sys_out_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(tc_aa(tc_name).tc_sys_out_aa(i))); + end loop; + p(' '); + end if; + else + -- Indicates that the test errored. An errored test is one that had an unanticipated problem. For example an unchecked throwable or a problem with the implementation of the test. Contains as a text node relevant data for the error, for example a stack trace. optional + p(' ' ); -- The error message. e.g., if a java exception is thrown, the return value of getMessage() + if tc_aa(tc_name).tc_err_aa.COUNT > 0 + then + for i in tc_aa(tc_name).tc_err_aa.FIRST .. tc_aa(tc_name).tc_err_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(tc_aa(tc_name).tc_err_aa(i))); + end loop; + end if; + p(' '); + end if; + p(' '); + exit when tc_name = tc_aa.LAST; + tc_name := tc_aa.NEXT(tc_name); + end loop; + if sys_buff_aa.COUNT > 0 + then + if sys_err + then + -- Data that was written to standard error while the test suite was executed. optional + p(' '); + for i in sys_buff_aa.FIRST .. sys_buff_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(sys_buff_aa(i))); + end loop; + p(' '); + else + -- Data that was written to standard out while the test suite was executed. optional + p(' '); + for i in sys_buff_aa.FIRST .. sys_buff_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(sys_buff_aa(i))); + end loop; + p(' '); + end if; + end if; + p(' '); + end loop; + p(''); +end; +}'; + -- Can't have string declaration with a "/" on a line by itself + ret_txt := ret_txt || '/'; + return ret_txt; +end log_files_junit_report_sql; + + +-------------------------------------------------------------------------------- +-- ODBCAPTURE Installation Logs Consolidated Data Load +function odbcapture_installation_logs_cdl + (in_install_type in varchar2) + return varchar2 +is + ret_txt varchar2(32767); +begin + ret_txt := q'{ +-- +-- Consolidated Data Load script for odbcapture_installation_logs data +-- +-- Must be run as SYSTEM +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +prompt +prompt Confirm/Create odbcapture_installation_logs Table +declare + jnk number := 0; + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql || ';'); + execute immediate in_sql; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end run_sql; +begin + begin + execute immediate 'insert into odbcapture_installation_logs(load_dtm, install_type, file_name)' || + ' values(sysdate, ''Test'', ''Test'')'; + rollback; + jnk := 1; + exception when others then + if SQLERRM != 'ORA-00942: table or view does not exist' + then + dbms_output.put_line('odbcapture_installation_logs table: ' || SQLERRM); + end if; + jnk := -1; + end; + if jnk = -1 + then + run_sql('create table odbcapture_installation_logs' || CHR(10) || + ' (load_dtm date' || CHR(10) || + ' ,install_type varchar2(10)' || CHR(10) || + ' ,file_name varchar2(512)' || CHR(10) || + ' ,contents clob)'); + run_sql('comment on column odbcapture_installation_logs.load_dtm is ''Date/Time the installation log file was loaded.'''); + run_sql('comment on column odbcapture_installation_logs.install_type is ''Type of installation (from TYPE_CONF).'''); + run_sql('comment on column odbcapture_installation_logs.file_name is ''Name of installation log file.'''); + run_sql('comment on column odbcapture_installation_logs.contents is ''Contents/Text of the installation log file.'''); + run_sql('comment on table odbcapture_installation_logs is ''ODBCAPTURE installation log files.'''); + run_sql('grant select on odbcapture_installation_logs to public'); + run_sql('create public synonym odbcapture_installation_logs for odbcapture_installation_logs'); + end if; +end; +}'; + -- Can't have string declaration with a "/" on a line by itself + ret_txt := ret_txt || '/' || CHR(10) || q'{ + +-- NOTE: Additional file extensions for SQL*Loader include +-- .bad - Bad Records +-- .dsc - Discard Records +-- .log - Log File + +prompt +prompt sqlldr_control=./odbcapture_installation_logs.ctl +host sqlldr '&1.' control=odbcapture_installation_logs.ctl data=odbcapture_installation_logs.csv log=odbcapture_installation_logs.log silent=HEADER,FEEDBACK + +begin + if '&_RC.' != '0' then + raise_application_error(-20000, 'Control file "odbcapture_installation_logs.ctl" returned error: &_RC.'); + end if; +end; +}'; + -- Can't have string declaration with a "/" on a line by itself + ret_txt := ret_txt || '/' || CHR(10); + return ret_txt; +end odbcapture_installation_logs_cdl; + + +-------------------------------------------------------------------------------- +-- ODBCAPTURE Installation Logs Comma Separated Values File +function odbcapture_installation_logs_csv + (in_install_type in varchar2) + return varchar2 +is + ret_txt varchar2(32767); +begin + ret_txt := '"' || in_install_type || '","install_sys.log"' || CHR(10) || + '"' || in_install_type || '","install_system.log"' || CHR(10) || + '"' || in_install_type || '","install_' || + in_install_type || '.log"'; + for buff in (select table_owner + ,table_name + from obj_install_data_load_tab + where install_otype = 'DATA_LOAD' + and install_type = in_install_type + order by table_owner + ,table_name) + loop + ret_txt := ret_txt || CHR(10) || '"' || in_install_type || + '","' || buff.table_owner || + '/' || buff.table_name || '.log"'; + end loop; + return ret_txt; +end odbcapture_installation_logs_csv; + + +-------------------------------------------------------------------------------- +-- ODBCAPTURE Installation Logs Control File +function odbcapture_installation_logs_ctl + (in_install_type in varchar2) + return varchar2 +is + ret_txt varchar2(32767); +begin + ret_txt := q'{LOAD DATA +APPEND INTO TABLE "ODBCAPTURE_INSTALLATION_LOGS" +FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' + (LOAD_DTM SYSDATE + ,INSTALL_TYPE char(10) + ,FILE_NAME char(512) + ,CONTENTS LOBFILE(FILE_NAME) TERMINATED BY EOF + )}'; + return ret_txt; +end odbcapture_installation_logs_ctl; + + +-------------------------------------------------------------------------------- +-- Report Status +function report_status_sql + (in_install_type in varchar2) + return varchar2 +is + ret_txt varchar2(32767); +begin + ret_txt := q'{ +-- +-- Report Status Script +-- +-- Must be run as SYSTEM User (DBA) +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- +-- Note: odbcapture_installation_logs table will be created +-- to load installation logs (if not already available). +-- + +---------------------------------------- +-- Setup for Reports +set linesize 2499 +set trimspool on +set echo off +set verify off +set termout on +set serveroutput on size unlimited format wrapped + +---------------------------------------- +prompt +prompt Reporting Summary of Install Type Log Errors +declare + TYPE err_aa_type is table of pls_integer index by varchar2(4000); + err_aa err_aa_type; + line_txt varchar2(4000); + so_far pls_integer; + end_pos pls_integer; + procedure add_line is + begin + if regexp_like(line_txt, '(ORA-|SQL-|SP2-|PLS-|PL2-|TNS-|(object|mmap) failed)') + then + begin + err_aa(line_txt) := err_aa(line_txt) + 1; + exception when NO_DATA_FOUND then + err_aa(line_txt) := 1; + end; + end if; + end add_line; +begin + for buff in (select file_name, load_dtm, contents + from odbcapture_installation_logs + where install_type = '}' || in_install_type || +q'{' + and load_dtm > trunc(sysdate,'DD') - 2 + order by file_name, load_dtm) + loop + dbms_output.put_line('Processing file ' || buff.file_name || + ' (' || to_char(buff.load_dtm,'YYYY-MM-DD HH24:MI:SS') || ')'); + err_aa.DELETE; + so_far := 0; + loop + end_pos := instr(buff.contents, chr(10), so_far + 1); + exit when end_pos = 0; + line_txt := substr(buff.contents, so_far + 1, end_pos - so_far - 1); + add_line; + so_far := end_pos; + end loop; + line_txt := substr(buff.contents, so_far + 1, 4000); + add_line; + if err_aa.COUNT = 0 then continue; end if; + line_txt := err_aa.FIRST; + loop + dbms_output.put_line(line_txt); + dbms_output.put_line(' ' || err_aa(line_txt) || ' lines: ' || line_txt); + exit when line_txt = err_aa.LAST; + line_txt := err_aa.NEXT(line_txt); + end loop; + end loop; +end; +}'; + -- Can't have string declaration with a "/" on a line by itself + ret_txt := ret_txt || '/' || CHR(10) || q'{ +---------------------------------------- +prompt +prompt Reporting Invalid Objects +set feedback off +set termout off +spool list_invalids.csv +}'; + -- Can't start a line with an "@" + ret_txt := ret_txt || q'{@"list_invalids.sql" "" +spool off +set termout on +set feedback on + +---------------------------------------- +prompt +prompt Reporting JUnit XML Database Build Status +set feedback off +set termout off +spool db_build_junit_report.xml +}'; + -- Can't start a line with an "@" + ret_txt := ret_txt || q'{@"db_build_junit_report.sql" "" +spool off +set termout on +set feedback on + +---------------------------------------- +prompt +prompt Reorting JUnit XML Installation Log +set feedback off +set termout off +spool log_files_junit_report.xml +}'; + -- Can't start a line with an "@" + ret_txt := ret_txt || q'{@"log_files_junit_report.sql" "" +spool off +set termout on +set feedback on + +---------------------------------------- +-- Done with Reports +set linesize 80 +set verify on}'; + return ret_txt; +end report_status_sql; + + +-------------------------------------------------------------------------------- +-- Update ID Sequences +function update_id_sequences_sql + (in_install_type in varchar2) + return varchar2 +is + ret_txt varchar2(32767); +begin + ret_txt := q'{ +-- +-- Update "}' || in_install_type || q'{" IDENTITY SEQUENCES +-- + +declare + UNDEFINED_SEQUENCE EXCEPTION; -- sequence not yet defined in this session + PRAGMA EXCEPTION_INIT (UNDEFINED_SEQUENCE, -8002); + l_last_seq number; + l_max_val number; + sql_txt varchar2(4000); + procedure do_it (in_schema_name in varchar2) is + begin + for buff in ( + select tic.owner + ,tic.table_name + ,tic.column_name + ,tic.sequence_name + from dba_tab_identity_cols tic + where tic.owner = in_schema_name) + loop + -- Find the Current Sequence Value + sql_txt := 'select ' || buff.owner || '.' || buff.sequence_name || + '.currval from dual'; + begin + execute immediate sql_txt into l_last_seq; + exception when UNDEFINED_SEQUENCE + then + -- Find the Last Number for the Sequence + select ds.last_number into l_last_seq + from dba_sequences ds + where ds.sequence_owner = buff.owner + and ds.sequence_name = buff.sequence_name; + end; + -- Find the maximum IDENTITY column value + sql_txt := 'select max(' || buff.column_name || ')' || + ' from ' || buff.owner || '.' || buff.table_name; + execute immediate sql_txt into l_max_val; + -- Display values found + dbms_output.put_line(buff.owner || '.' || buff.sequence_name || ' Last Sequence: ' || l_last_seq || + ', ' || buff.owner || '.' || buff.table_name || ' max(' || buff.column_name || ') = ' || l_max_val); + if l_last_seq < l_max_val + then + -- Increment the sequence as necessary + sql_txt := 'begin' || + ' while ' || buff.owner || '.' || buff.sequence_name || '.nextval < ' || l_max_val || + ' loop null; end loop;' || + 'end;'; + dbms_output.put_line(sql_txt); + execute immediate sql_txt;-- using l_last_seq; + end if; + end loop; + dbms_output.put_line('-- ' || in_schema_name || ' Identity Sequence Updates is done.'); + end do_it; +begin +}'; + ret_txt := ret_txt || ' dbms_output.put_line(''Update ID Sequences for ' || + in_install_type || ' Install Type'');' || CHR(10); + for sch in (select obj.object_owner + from schema_objects_vw obj + join schema_conf sl + on sl.username = obj.object_owner + where obj.install_type = in_install_type + and obj.object_owner != 'PUBLIC' + group by obj.object_owner + order by obj.object_owner) + loop + ret_txt := ret_txt || ' do_it(''' || sch.object_owner || ''');' || CHR(10); + end loop; + ret_txt := ret_txt || 'end;' || CHR(10) || + '/'; + return ret_txt; +end update_id_sequences_sql; + + +end root_scripts; +/ + +set define on diff --git a/grbsrc/ODBCAPTURE/ROOT_SCRIPTS.pspec b/grbsrc/ODBCAPTURE/ROOT_SCRIPTS.pspec new file mode 100644 index 0000000..08255fb --- /dev/null +++ b/grbsrc/ODBCAPTURE/ROOT_SCRIPTS.pspec @@ -0,0 +1,92 @@ + +-- +-- Create ODBCAPTURE.ROOT_SCRIPTS Package +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.ROOT_SCRIPTS + + CREATE OR REPLACE EDITIONABLE PACKAGE "ODBCAPTURE"."ROOT_SCRIPTS" + authid current_user +as + + function alter_foreign_keys_sql + (in_install_type in varchar2) + return varchar2; + + function alter_queues_sql + (in_install_type in varchar2) + return varchar2; + + function alter_scheduler_jobs_sql + (in_install_type in varchar2) + return varchar2; + + function alter_triggers_sql + (in_install_type in varchar2) + return varchar2; + + function compile_all_sql + (in_install_type in varchar2) + return varchar2; + + function db_build_junit_report_sql + (in_install_type in varchar2) + return varchar2; + + function db_install_sql + (in_install_type in varchar2) + return varchar2; + + function fix_invalid_public_synonyms_sql + return varchar2; + + function installation_finalize_sql + (in_install_type in varchar2) + return varchar2; + + function installation_prepare_sql + (in_install_type in varchar2) + return varchar2; + + function list_invalids_sql + (in_install_type in varchar2) + return varchar2; + + function log_files_junit_report_sql + (in_install_type in varchar2) + return varchar2; + + function odbcapture_installation_logs_cdl + (in_install_type in varchar2) + return varchar2; + + function odbcapture_installation_logs_csv + (in_install_type in varchar2) + return varchar2; + + function odbcapture_installation_logs_ctl + (in_install_type in varchar2) + return varchar2; + + function report_status_sql + (in_install_type in varchar2) + return varchar2; + + function update_id_sequences_sql + (in_install_type in varchar2) + return varchar2; + +end root_scripts; +/ + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/SCHEMA_CONF.cdl b/grbsrc/ODBCAPTURE/SCHEMA_CONF.cdl new file mode 100644 index 0000000..d612565 --- /dev/null +++ b/grbsrc/ODBCAPTURE/SCHEMA_CONF.cdl @@ -0,0 +1,58 @@ + +-- +-- Consolidated Data Load script for ODBCAPTURE.SCHEMA_CONF data +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +prompt +prompt Disable Triggers and Foreign Keys +declare + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql || ';'); + execute immediate in_sql; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end run_sql; +begin + for buff in (select owner, trigger_name + from dba_triggers + where table_owner = 'ODBCAPTURE' + and table_name = 'SCHEMA_CONF' + order by owner, trigger_name) + loop + run_sql('alter trigger "' || buff.owner || '"' || + '."' || buff.trigger_name || '" DISABLE'); + end loop; + for buff in (select constraint_name + from dba_constraints + where constraint_type = 'R' + and owner = 'ODBCAPTURE' + and table_name = 'SCHEMA_CONF' + order by owner, constraint_name) + loop + run_sql('alter table "ODBCAPTURE"."SCHEMA_CONF"' || + ' DISABLE constraint "' || buff.constraint_name || '"'); + end loop; +end; +/ + +-- NOTE: Additional file extensions for SQL*Loader include +-- .bad - Bad Records +-- .dsc - Discard Records +-- .log - Log File + +prompt +prompt sqlldr_control=ODBCAPTURE/SCHEMA_CONF.ctl +host sqlldr '&1.' control=ODBCAPTURE/SCHEMA_CONF.ctl data=ODBCAPTURE/SCHEMA_CONF.csv log=ODBCAPTURE/SCHEMA_CONF.log silent=HEADER,FEEDBACK + +begin + if '&_RC.' != '0' then + raise_application_error(-20000, 'Control file "ODBCAPTURE/SCHEMA_CONF.ctl" returned error: &_RC.'); + end if; +end; +/ diff --git a/grbsrc/ODBCAPTURE/SCHEMA_CONF.csv b/grbsrc/ODBCAPTURE/SCHEMA_CONF.csv new file mode 100644 index 0000000..dc1210b --- /dev/null +++ b/grbsrc/ODBCAPTURE/SCHEMA_CONF.csv @@ -0,0 +1,10 @@ +"USERNAME","INSTALL_TYPE","TS_SIZE","NOTES","TABLESPACE_NAME" +"APPQOSSYS","sys","0K","Preinstalled Schema","SYSTEM" +"CTXSYS","sys","0K","Preinstalled Schema","SYSTEM" +"DIP","sys","0K","Preinstalled Schema","SYSTEM" +"ODBCAPTURE","grbsrc","512M","Oracle Database Source Code Capture Application","USERS" +"OUTLN","sys","0K","Preinstalled Schema","SYSTEM" +"PUBLIC","pub","0K","Public Grants and Synonyms","SYSTEM" +"SYS","sys","0K","Preinstalled Schema","SYSTEM" +"SYSTEM","sys","0K","Preinstalled Schema","SYSTEM" +"XDB","sys","0K","Preinstalled Schema","SYSTEM" diff --git a/grbsrc/ODBCAPTURE/SCHEMA_CONF.ctl b/grbsrc/ODBCAPTURE/SCHEMA_CONF.ctl new file mode 100644 index 0000000..c6953ee --- /dev/null +++ b/grbsrc/ODBCAPTURE/SCHEMA_CONF.ctl @@ -0,0 +1,11 @@ +OPTIONS (SKIP=1) +LOAD DATA +APPEND INTO TABLE "ODBCAPTURE"."SCHEMA_CONF" +FIELDS CSV WITH EMBEDDED +TRAILING NULLCOLS + (USERNAME CHAR(128) + ,INSTALL_TYPE CHAR(10) + ,TS_SIZE CHAR(10) + ,NOTES CHAR(1024) + ,TABLESPACE_NAME CHAR(30) + ) diff --git a/grbsrc/ODBCAPTURE/SCHEMA_CONF.tab b/grbsrc/ODBCAPTURE/SCHEMA_CONF.tab new file mode 100644 index 0000000..46ccfe6 --- /dev/null +++ b/grbsrc/ODBCAPTURE/SCHEMA_CONF.tab @@ -0,0 +1,45 @@ + +-- +-- Create ODBCAPTURE.SCHEMA_CONF Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.SCHEMA_CONF + + CREATE TABLE "ODBCAPTURE"."SCHEMA_CONF" + ( "USERNAME" VARCHAR2(128 BYTE) NOT NULL ENABLE, + "INSTALL_TYPE" VARCHAR2(10 BYTE) NOT NULL ENABLE, + "TS_SIZE" VARCHAR2(10 BYTE) NOT NULL ENABLE, + "NOTES" VARCHAR2(1024 BYTE), + "TABLESPACE_NAME" VARCHAR2(30 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "ODBCAPTURE"."SCHEMA_CONF" ADD CONSTRAINT "SCHEMA_CONF_CK1" CHECK (regexp_like(ts_size, '^UNLIMITED$|^[0-9]+[KMG]$')) ENABLE; +ALTER TABLE "ODBCAPTURE"."SCHEMA_CONF" ADD CONSTRAINT "SCHEMA_CONF_PK" PRIMARY KEY ("USERNAME") + USING INDEX ENABLE; +ALTER TABLE "ODBCAPTURE"."SCHEMA_CONF" ADD CONSTRAINT "SCHEMA_CONF_NN4" CHECK (tablespace_name is not null) ENABLE; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.SCHEMA_CONF + + COMMENT ON COLUMN "ODBCAPTURE"."SCHEMA_CONF"."USERNAME" IS 'Name of the database schema (Primary Key)'; + COMMENT ON COLUMN "ODBCAPTURE"."SCHEMA_CONF"."INSTALL_TYPE" IS 'Install type for this database schema (Required). All objects for this schema are generated for this install type unless filtered by OBJECT_CONF. Value must be in TYPE_CONF table.'; + COMMENT ON COLUMN "ODBCAPTURE"."SCHEMA_CONF"."TS_SIZE" IS 'Tablespace quota for this schema (Required). UNLIMITED is allowed'; + COMMENT ON COLUMN "ODBCAPTURE"."SCHEMA_CONF"."NOTES" IS 'Free text field (Optional)'; + COMMENT ON COLUMN "ODBCAPTURE"."SCHEMA_CONF"."TABLESPACE_NAME" IS 'Default Tablespace Name for this Schema'; + COMMENT ON TABLE "ODBCAPTURE"."SCHEMA_CONF" IS 'List of Schema to install in each Install Type.'; + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/SCHEMA_CONF.tabfk b/grbsrc/ODBCAPTURE/SCHEMA_CONF.tabfk new file mode 100644 index 0000000..70a6dfd --- /dev/null +++ b/grbsrc/ODBCAPTURE/SCHEMA_CONF.tabfk @@ -0,0 +1,16 @@ + +-- +-- Create Foreign Keys for ODBCAPTURE.SCHEMA_CONF TABLE +-- + +set define off + + +-- NOTE: This is a "BASE TABLE" Foreign Key + +--DBMS_METADATA:ODBCAPTURE.SCHEMA_CONF_FK1 + + ALTER TABLE "ODBCAPTURE"."SCHEMA_CONF" ADD CONSTRAINT "SCHEMA_CONF_FK1" FOREIGN KEY ("INSTALL_TYPE") + REFERENCES "ODBCAPTURE"."TYPE_CONF" ("INSTALL_TYPE") ENABLE; + +set define on diff --git a/grbsrc/ODBCAPTURE/SCHEMA_OBJECTS_VW.vw b/grbsrc/ODBCAPTURE/SCHEMA_OBJECTS_VW.vw new file mode 100644 index 0000000..11aca8c --- /dev/null +++ b/grbsrc/ODBCAPTURE/SCHEMA_OBJECTS_VW.vw @@ -0,0 +1,53 @@ + +-- +-- Create ODBCAPTURE.SCHEMA_OBJECTS_VW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."SCHEMA_OBJECTS_VW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.SCHEMA_OBJECTS_VW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."SCHEMA_OBJECTS_VW" ("OBJECT_OWNER", "INSTALL_TYPE", "INSTALL_OTYPE", "OBJECT_TYPE") AS + select object_owner + ,install_type + ,install_otype + ,object_type + from zx_obj_install_tab + group by object_owner + ,install_type + ,install_otype + ,object_type; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.SCHEMA_OBJECTS_VW + + COMMENT ON COLUMN "ODBCAPTURE"."SCHEMA_OBJECTS_VW"."OBJECT_OWNER" IS 'Schema name.'; + COMMENT ON COLUMN "ODBCAPTURE"."SCHEMA_OBJECTS_VW"."INSTALL_TYPE" IS 'Installation Type.'; + COMMENT ON COLUMN "ODBCAPTURE"."SCHEMA_OBJECTS_VW"."INSTALL_OTYPE" IS 'Installation Object Type.'; + COMMENT ON COLUMN "ODBCAPTURE"."SCHEMA_OBJECTS_VW"."OBJECT_TYPE" IS 'Oracle Name for Installation Object Type.'; + COMMENT ON TABLE "ODBCAPTURE"."SCHEMA_OBJECTS_VW" IS 'All Installation Object Types in each Non-System Schema for all Installation Types.'; + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/TYPE_CONF.cdl b/grbsrc/ODBCAPTURE/TYPE_CONF.cdl new file mode 100644 index 0000000..2201f54 --- /dev/null +++ b/grbsrc/ODBCAPTURE/TYPE_CONF.cdl @@ -0,0 +1,58 @@ + +-- +-- Consolidated Data Load script for ODBCAPTURE.TYPE_CONF data +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +prompt +prompt Disable Triggers and Foreign Keys +declare + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql || ';'); + execute immediate in_sql; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end run_sql; +begin + for buff in (select owner, trigger_name + from dba_triggers + where table_owner = 'ODBCAPTURE' + and table_name = 'TYPE_CONF' + order by owner, trigger_name) + loop + run_sql('alter trigger "' || buff.owner || '"' || + '."' || buff.trigger_name || '" DISABLE'); + end loop; + for buff in (select constraint_name + from dba_constraints + where constraint_type = 'R' + and owner = 'ODBCAPTURE' + and table_name = 'TYPE_CONF' + order by owner, constraint_name) + loop + run_sql('alter table "ODBCAPTURE"."TYPE_CONF"' || + ' DISABLE constraint "' || buff.constraint_name || '"'); + end loop; +end; +/ + +-- NOTE: Additional file extensions for SQL*Loader include +-- .bad - Bad Records +-- .dsc - Discard Records +-- .log - Log File + +prompt +prompt sqlldr_control=ODBCAPTURE/TYPE_CONF.ctl +host sqlldr '&1.' control=ODBCAPTURE/TYPE_CONF.ctl data=ODBCAPTURE/TYPE_CONF.csv log=ODBCAPTURE/TYPE_CONF.log silent=HEADER,FEEDBACK + +begin + if '&_RC.' != '0' then + raise_application_error(-20000, 'Control file "ODBCAPTURE/TYPE_CONF.ctl" returned error: &_RC.'); + end if; +end; +/ diff --git a/grbsrc/ODBCAPTURE/TYPE_CONF.csv b/grbsrc/ODBCAPTURE/TYPE_CONF.csv new file mode 100644 index 0000000..cb3dd16 --- /dev/null +++ b/grbsrc/ODBCAPTURE/TYPE_CONF.csv @@ -0,0 +1,4 @@ +"INSTALL_TYPE","NOTES","INSTALL_TYPE_PARENT" +"grbsrc","Source Code Script Generation","pub" +"pub","N/A PUBLIC. (Not Installed, Always available for Grants and Synonyms)","sys" +"sys","N/A System Users. (Not Installed, Always available for Grants and Synonyms)","sys" diff --git a/grbsrc/ODBCAPTURE/TYPE_CONF.ctl b/grbsrc/ODBCAPTURE/TYPE_CONF.ctl new file mode 100644 index 0000000..564839b --- /dev/null +++ b/grbsrc/ODBCAPTURE/TYPE_CONF.ctl @@ -0,0 +1,9 @@ +OPTIONS (SKIP=1) +LOAD DATA +APPEND INTO TABLE "ODBCAPTURE"."TYPE_CONF" +FIELDS CSV WITH EMBEDDED +TRAILING NULLCOLS + (INSTALL_TYPE CHAR(10) + ,NOTES CHAR(1024) + ,INSTALL_TYPE_PARENT CHAR(10) + ) diff --git a/grbsrc/ODBCAPTURE/TYPE_CONF.tab b/grbsrc/ODBCAPTURE/TYPE_CONF.tab new file mode 100644 index 0000000..d6a80dc --- /dev/null +++ b/grbsrc/ODBCAPTURE/TYPE_CONF.tab @@ -0,0 +1,39 @@ + +-- +-- Create ODBCAPTURE.TYPE_CONF Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.TYPE_CONF + + CREATE TABLE "ODBCAPTURE"."TYPE_CONF" + ( "INSTALL_TYPE" VARCHAR2(10 BYTE), + "NOTES" VARCHAR2(1024 BYTE), + "INSTALL_TYPE_PARENT" VARCHAR2(10 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "ODBCAPTURE"."TYPE_CONF" ADD CONSTRAINT "TYPE_CONF_PK" PRIMARY KEY ("INSTALL_TYPE") + USING INDEX ENABLE; +ALTER TABLE "ODBCAPTURE"."TYPE_CONF" ADD CONSTRAINT "TYPE_CONF_NN2" CHECK (INSTALL_TYPE_PARENT is not null) ENABLE; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.TYPE_CONF + + COMMENT ON COLUMN "ODBCAPTURE"."TYPE_CONF"."INSTALL_TYPE" IS 'Name of the install type (Primary Key)'; + COMMENT ON COLUMN "ODBCAPTURE"."TYPE_CONF"."NOTES" IS 'Free text field (Optional)'; + COMMENT ON TABLE "ODBCAPTURE"."TYPE_CONF" IS 'List of Install Types. Also defines the names of the top level directories'; + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/TYPE_CONF.tabfk b/grbsrc/ODBCAPTURE/TYPE_CONF.tabfk new file mode 100644 index 0000000..caeb771 --- /dev/null +++ b/grbsrc/ODBCAPTURE/TYPE_CONF.tabfk @@ -0,0 +1,16 @@ + +-- +-- Create Foreign Keys for ODBCAPTURE.TYPE_CONF TABLE +-- + +set define off + + +-- NOTE: This is a "BASE TABLE" Foreign Key + +--DBMS_METADATA:ODBCAPTURE.TYPE_CONF_FK1 + + ALTER TABLE "ODBCAPTURE"."TYPE_CONF" ADD CONSTRAINT "TYPE_CONF_FK1" FOREIGN KEY ("INSTALL_TYPE_PARENT") + REFERENCES "ODBCAPTURE"."TYPE_CONF" ("INSTALL_TYPE") ENABLE; + +set define on diff --git a/grbsrc/ODBCAPTURE/UOR_INSTALL_VIEW.vw b/grbsrc/ODBCAPTURE/UOR_INSTALL_VIEW.vw new file mode 100644 index 0000000..7b8adaf --- /dev/null +++ b/grbsrc/ODBCAPTURE/UOR_INSTALL_VIEW.vw @@ -0,0 +1,55 @@ + +-- +-- Create ODBCAPTURE.UOR_INSTALL_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."UOR_INSTALL_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.UOR_INSTALL_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."UOR_INSTALL_VIEW" ("INSTALL_TYPE", "USER_OR_ROLE", "UOR_TYPE", "EXT", "NOTES") AS + select sc.install_type + ,sc.username USER_OR_ROLE + ,'USER' UOR_TYPE + ,otc.ext + ,sc.notes + from schema_conf sc + join otype_conf otc + on otc.install_otype = 'USER' +UNION ALL +select rl.install_type + ,rl.rolename USER_OR_ROLE + ,'ROLE' UOR_TYPE + ,otc.ext + ,rl.notes + from role_conf rl + join otype_conf otc + on otc.install_otype = 'ROLE'; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.UOR_INSTALL_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/ZIP_FILES.tab b/grbsrc/ODBCAPTURE/ZIP_FILES.tab new file mode 100644 index 0000000..39b3f14 --- /dev/null +++ b/grbsrc/ODBCAPTURE/ZIP_FILES.tab @@ -0,0 +1,35 @@ + +-- +-- Create ODBCAPTURE.ZIP_FILES Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.ZIP_FILES + + CREATE TABLE "ODBCAPTURE"."ZIP_FILES" + ( "FILE_NAME" VARCHAR2(1000 BYTE), + "DATE_CREATED" DATE DEFAULT sysdate, + "FILE_SIZE" NUMBER(38,0) DEFAULT 0, + "FILE_BLOB" BLOB + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "ODBCAPTURE"."ZIP_FILES" ADD CONSTRAINT "ZIP_FILES_PK" PRIMARY KEY ("FILE_NAME") + USING INDEX ENABLE; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.ZIP_FILES + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/ZIP_UTIL_PKG.pbody b/grbsrc/ODBCAPTURE/ZIP_UTIL_PKG.pbody new file mode 100644 index 0000000..7625d90 --- /dev/null +++ b/grbsrc/ODBCAPTURE/ZIP_UTIL_PKG.pbody @@ -0,0 +1,539 @@ + +-- +-- Create ODBCAPTURE.ZIP_UTIL_PKG Package Body +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.ZIP_UTIL_PKG + + CREATE OR REPLACE EDITIONABLE PACKAGE BODY "ODBCAPTURE"."ZIP_UTIL_PKG" +is + + /* + + Purpose: Package handles zipping and unzipping of files + + Remarks: by Anton Scheffer, see http://forums.oracle.com/forums/thread.jspa?messageID=9289744#9289744 + + for unzipping, see http://technology.amis.nl/blog/8090/parsing-a-microsoft-word-docx-and-unzip-zipfiles-with-plsql + for zipping, see http://forums.oracle.com/forums/thread.jspa?threadID=1115748&tstart=0 + + Who Date Description + ------ ---------- -------------------------------- + MBR 09.01.2011 Created + MBR 21.05.2012 Fixed a bug related to use of dbms_lob.substr in get_file (use dbms_lob.copy instead) + + */ + + function raw2num( + p_value in raw + ) + return number + is + begin -- note: FFFFFFFF => -1 + return utl_raw.cast_to_binary_integer( p_value + , utl_raw.little_endian + ); + end; +-- + function file2blob( + p_dir in varchar2 + , p_file_name in varchar2 + ) + return blob + is + file_lob bfile; + file_blob blob; + begin + file_lob := bfilename( p_dir + , p_file_name + ); + dbms_lob.open( file_lob + , dbms_lob.file_readonly + ); + dbms_lob.createtemporary( file_blob + , true + ); + dbms_lob.loadfromfile( file_blob + , file_lob + , dbms_lob.lobmaxsize + ); + dbms_lob.close( file_lob ); + return file_blob; + exception + when others + then + if dbms_lob.isopen( file_lob ) = 1 + then + dbms_lob.close( file_lob ); + end if; + if dbms_lob.istemporary( file_blob ) = 1 + then + dbms_lob.freetemporary( file_blob ); + end if; + raise; + end; +-- + function raw2varchar2( + p_raw in raw + , p_encoding in varchar2 + ) + return varchar2 + is + begin + return nvl + ( utl_i18n.raw_to_char( p_raw + , p_encoding + ) + , utl_i18n.raw_to_char + ( p_raw + , utl_i18n.map_charset( p_encoding + , utl_i18n.generic_context + , utl_i18n.iana_to_oracle + ) + ) + ); + end; + function get_file_list( + p_dir in varchar2 + , p_zip_file in varchar2 + , p_encoding in varchar2 := null + ) + return t_file_list + is + begin + return get_file_list( file2blob( p_dir + , p_zip_file + ) + , p_encoding + ); + end; +-- + function get_file_list( + p_zipped_blob in blob + , p_encoding in varchar2 := null + ) + return t_file_list + is + t_ind integer; + t_hd_ind integer; + t_rv t_file_list; + begin + t_ind := dbms_lob.getlength( p_zipped_blob ) - 21; + loop + exit when dbms_lob.substr( p_zipped_blob + , 4 + , t_ind + ) = hextoraw( '504B0506' ) + or t_ind < 1; + t_ind := t_ind - 1; + end loop; +-- + if t_ind <= 0 + then + return null; + end if; +-- + t_hd_ind := raw2num( dbms_lob.substr( p_zipped_blob + , 4 + , t_ind + 16 + ) ) + 1; + t_rv := t_file_list( ); + t_rv.extend( raw2num( dbms_lob.substr( p_zipped_blob + , 2 + , t_ind + 10 + ) ) ); + for i in 1 .. raw2num( dbms_lob.substr( p_zipped_blob + , 2 + , t_ind + 8 + ) ) + loop + t_rv( i ) := + raw2varchar2 + ( dbms_lob.substr( p_zipped_blob + , raw2num( dbms_lob.substr( p_zipped_blob + , 2 + , t_hd_ind + 28 + ) ) + , t_hd_ind + 46 + ) + , p_encoding + ); + t_hd_ind := + t_hd_ind + + 46 + + raw2num( dbms_lob.substr( p_zipped_blob + , 2 + , t_hd_ind + 28 + ) ) + + raw2num( dbms_lob.substr( p_zipped_blob + , 2 + , t_hd_ind + 30 + ) ) + + raw2num( dbms_lob.substr( p_zipped_blob + , 2 + , t_hd_ind + 32 + ) ); + end loop; +-- + return t_rv; + end; +-- + function get_file( + p_dir in varchar2 + , p_zip_file in varchar2 + , p_file_name in varchar2 + , p_encoding in varchar2 := null + ) + return blob + is + begin + return get_file( file2blob( p_dir + , p_zip_file + ) + , p_file_name + , p_encoding + ); + end; +-- + function get_file( + p_zipped_blob in blob + , p_file_name in varchar2 + , p_encoding in varchar2 := null + ) + return blob + is + t_tmp blob; + t_ind integer; + t_hd_ind integer; + t_fl_ind integer; + begin + t_ind := dbms_lob.getlength( p_zipped_blob ) - 21; + loop + exit when dbms_lob.substr( p_zipped_blob + , 4 + , t_ind + ) = hextoraw( '504B0506' ) + or t_ind < 1; + t_ind := t_ind - 1; + end loop; +-- + if t_ind <= 0 + then + return null; + end if; +-- + t_hd_ind := raw2num( dbms_lob.substr( p_zipped_blob + , 4 + , t_ind + 16 + ) ) + 1; + for i in 1 .. raw2num( dbms_lob.substr( p_zipped_blob + , 2 + , t_ind + 8 + ) ) + loop + if p_file_name = + raw2varchar2 + ( dbms_lob.substr( p_zipped_blob + , raw2num( dbms_lob.substr( p_zipped_blob + , 2 + , t_hd_ind + 28 + ) ) + , t_hd_ind + 46 + ) + , p_encoding + ) + then + if dbms_lob.substr( p_zipped_blob + , 2 + , t_hd_ind + 10 + ) = hextoraw( '0800' ) -- deflate + then + t_fl_ind := + raw2num( dbms_lob.substr( p_zipped_blob + , 4 + , t_hd_ind + 42 + ) ); + t_tmp := hextoraw( '1F8B0800000000000003' ); -- gzip header + dbms_lob.copy( t_tmp + , p_zipped_blob + , raw2num( dbms_lob.substr( p_zipped_blob + , 4 + , t_fl_ind + 19 + ) ) + , 11 + , t_fl_ind + + 31 + + raw2num( dbms_lob.substr( p_zipped_blob + , 2 + , t_fl_ind + 27 + ) ) + + raw2num( dbms_lob.substr( p_zipped_blob + , 2 + , t_fl_ind + 29 + ) ) + ); + dbms_lob.append( t_tmp + , dbms_lob.substr( p_zipped_blob + , 4 + , t_fl_ind + 15 + ) + ); + dbms_lob.append( t_tmp + , dbms_lob.substr( p_zipped_blob, 4, t_fl_ind + 23 ) + ); + return utl_compress.lz_uncompress( t_tmp ); + end if; +-- + if dbms_lob.substr( p_zipped_blob + , 2 + , t_hd_ind + 10 + ) = + hextoraw( '0000' ) + -- The file is stored (no compression) + then + t_fl_ind := + raw2num( dbms_lob.substr( p_zipped_blob + , 4 + , t_hd_ind + 42 + ) ); + + dbms_lob.createtemporary(t_tmp, cache => true); + + dbms_lob.copy(dest_lob => t_tmp, + src_lob => p_zipped_blob, + amount => raw2num( dbms_lob.substr( p_zipped_blob, 4, t_fl_ind + 19)), + dest_offset => 1, + src_offset => t_fl_ind + 31 + raw2num(dbms_lob.substr(p_zipped_blob, 2, t_fl_ind + 27)) + raw2num(dbms_lob.substr( p_zipped_blob, 2, t_fl_ind + 29)) + ); + + return t_tmp; + + end if; + + end if; + t_hd_ind := + t_hd_ind + + 46 + + raw2num( dbms_lob.substr( p_zipped_blob + , 2 + , t_hd_ind + 28 + ) ) + + raw2num( dbms_lob.substr( p_zipped_blob + , 2 + , t_hd_ind + 30 + ) ) + + raw2num( dbms_lob.substr( p_zipped_blob + , 2 + , t_hd_ind + 32 + ) ); + end loop; +-- + return null; + end; +-- + function little_endian( + p_big in number + , p_bytes in pls_integer := 4 + ) + return raw + is + begin + return utl_raw.substr + ( utl_raw.cast_from_binary_integer( p_big + , utl_raw.little_endian + ) + , 1 + , p_bytes + ); + end; +-- + procedure add_file( + p_zipped_blob in out nocopy blob + , p_name in varchar2 + , p_content in blob + ) + is + t_now date; + t_blob blob; + t_clen integer; + begin + t_now := sysdate; + t_blob := utl_compress.lz_compress( p_content ); + t_clen := dbms_lob.getlength( t_blob ); + if p_zipped_blob is null + then + dbms_lob.createtemporary( p_zipped_blob + , true + ); + end if; + dbms_lob.append + ( p_zipped_blob + , utl_raw.concat + ( hextoraw( '504B0304' ) -- Local file header signature + , hextoraw( '1400' ) -- version 2.0 + , hextoraw( '0000' ) -- no General purpose bits + , hextoraw( '0800' ) -- deflate + , little_endian + ( to_number( to_char( t_now + , 'ss' + ) ) / 2 + + to_number( to_char( t_now + , 'mi' + ) ) * 32 + + to_number( to_char( t_now + , 'hh24' + ) ) * 2048 + , 2 + ) -- File last modification time + , little_endian + ( to_number( to_char( t_now + , 'dd' + ) ) + + to_number( to_char( t_now + , 'mm' + ) ) * 32 + + ( to_number( to_char( t_now + , 'yyyy' + ) ) - 1980 ) * 512 + , 2 + ) -- File last modification date + , dbms_lob.substr( t_blob + , 4 + , t_clen - 7 + ) -- CRC-32 + , little_endian( t_clen - 18 ) -- compressed size + , little_endian( dbms_lob.getlength( p_content ) ) + -- uncompressed size + , little_endian( length( p_name ) + , 2 + ) -- File name length + , hextoraw( '0000' ) -- Extra field length + , utl_raw.cast_to_raw( p_name ) -- File name + ) + ); + dbms_lob.copy( p_zipped_blob + , t_blob + , t_clen - 18 + , dbms_lob.getlength( p_zipped_blob ) + 1 + , 11 + ); -- compressed content + dbms_lob.freetemporary( t_blob ); + end; +-- + procedure finish_zip( + p_zipped_blob in out nocopy blob + ) + is + t_cnt pls_integer := 0; + t_offs integer; + t_offs_dir_header integer; + t_offs_end_header integer; + t_comment raw( 32767 ) + := utl_raw.cast_to_raw( 'Implementation by Anton Scheffer' ); + begin + t_offs_dir_header := dbms_lob.getlength( p_zipped_blob ); + t_offs := dbms_lob.instr( p_zipped_blob + , hextoraw( '504B0304' ) + , 1 + ); + while t_offs > 0 + loop + t_cnt := t_cnt + 1; + dbms_lob.append + ( p_zipped_blob + , utl_raw.concat + ( hextoraw( '504B0102' ) + -- Central directory file header signature + , hextoraw( '1400' ) -- version 2.0 + , dbms_lob.substr( p_zipped_blob + , 26 + , t_offs + 4 + ) + , hextoraw( '0000' ) -- File comment length + , hextoraw( '0000' ) -- Disk number where file starts + , hextoraw( '0100' ) -- Internal file attributes + , hextoraw( '2000B681' ) -- External file attributes + , little_endian( t_offs - 1 ) + -- Relative offset of local file header + , dbms_lob.substr + ( p_zipped_blob + , utl_raw.cast_to_binary_integer + ( dbms_lob.substr( p_zipped_blob + , 2 + , t_offs + 26 + ) + , utl_raw.little_endian + ) + , t_offs + 30 + ) -- File name + ) + ); + t_offs := + dbms_lob.instr( p_zipped_blob + , hextoraw( '504B0304' ) + , t_offs + 32 + ); + end loop; + t_offs_end_header := dbms_lob.getlength( p_zipped_blob ); + dbms_lob.append + ( p_zipped_blob + , utl_raw.concat + ( hextoraw( '504B0506' ) -- End of central directory signature + , hextoraw( '0000' ) -- Number of this disk + , hextoraw( '0000' ) -- Disk where central directory starts + , little_endian + ( t_cnt + , 2 + ) -- Number of central directory records on this disk + , little_endian( t_cnt + , 2 + ) -- Total number of central directory records + , little_endian( t_offs_end_header - t_offs_dir_header ) + -- Size of central directory + , little_endian + ( t_offs_dir_header ) + -- Relative offset of local file header + , little_endian + ( nvl( utl_raw.length( t_comment ) + , 0 + ) + , 2 + ) -- ZIP file comment length + , t_comment + ) + ); + end; +-- + procedure save_zip( + p_zipped_blob in blob + , p_dir in varchar2 + , p_filename in varchar2 + ) + is + t_fh utl_file.file_type; + t_len pls_integer := 32767; + begin + t_fh := utl_file.fopen( p_dir + , p_filename + , 'wb' + ); + for i in 0 .. trunc( ( dbms_lob.getlength( p_zipped_blob ) - 1 ) / t_len ) + loop + utl_file.put_raw( t_fh + , dbms_lob.substr( p_zipped_blob + , t_len + , i * t_len + 1 + ) + ); + end loop; + utl_file.fclose( t_fh ); + end; +-- + +end zip_util_pkg; +/ + +set define on diff --git a/grbsrc/ODBCAPTURE/ZIP_UTIL_PKG.pspec b/grbsrc/ODBCAPTURE/ZIP_UTIL_PKG.pspec new file mode 100644 index 0000000..04740bc --- /dev/null +++ b/grbsrc/ODBCAPTURE/ZIP_UTIL_PKG.pspec @@ -0,0 +1,85 @@ + +-- +-- Create ODBCAPTURE.ZIP_UTIL_PKG Package +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.ZIP_UTIL_PKG + + CREATE OR REPLACE EDITIONABLE PACKAGE "ODBCAPTURE"."ZIP_UTIL_PKG" authid definer +is + + /* + + Purpose: Package handles zipping and unzipping of files + + Remarks: by Anton Scheffer, see http://forums.oracle.com/forums/thread.jspa?messageID=9289744#9289744 + + for unzipping, see http://technology.amis.nl/blog/8090/parsing-a-microsoft-word-docx-and-unzip-zipfiles-with-plsql + for zipping, see http://forums.oracle.com/forums/thread.jspa?threadID=1115748&tstart=0 + + Who Date Description + ------ ---------- -------------------------------- + MBR 09.01.2011 Created + + */ + + type t_file_list is table of clob; +-- + function get_file_list( + p_dir in varchar2 + , p_zip_file in varchar2 + , p_encoding in varchar2 := null + ) + return t_file_list; +-- + function get_file_list( + p_zipped_blob in blob + , p_encoding in varchar2 := null /* Use CP850 for zip files created with a German Winzip to see umlauts, etc */ + ) + return t_file_list; +-- + function get_file( + p_dir in varchar2 + , p_zip_file in varchar2 + , p_file_name in varchar2 + , p_encoding in varchar2 := null + ) + return blob; +-- + function get_file( + p_zipped_blob in blob + , p_file_name in varchar2 + , p_encoding in varchar2 := null + ) + return blob; +-- + procedure add_file( + p_zipped_blob in out nocopy blob + , p_name in varchar2 + , p_content in blob + ); +-- + procedure finish_zip( + p_zipped_blob in out nocopy blob + ); +-- + procedure save_zip( + p_zipped_blob in blob + , p_dir in varchar2 + , p_filename in varchar2 + ); + +end zip_util_pkg; +/ + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/ZX_OBJ_INSTALL_TAB.tab b/grbsrc/ODBCAPTURE/ZX_OBJ_INSTALL_TAB.tab new file mode 100644 index 0000000..b698f3e --- /dev/null +++ b/grbsrc/ODBCAPTURE/ZX_OBJ_INSTALL_TAB.tab @@ -0,0 +1,36 @@ + +-- +-- Create ODBCAPTURE.ZX_OBJ_INSTALL_TAB Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.ZX_OBJ_INSTALL_TAB + + CREATE TABLE "ODBCAPTURE"."ZX_OBJ_INSTALL_TAB" + ( "INSTALL_TYPE" VARCHAR2(10 BYTE), + "OBJECT_OWNER" VARCHAR2(128 BYTE), + "OBJECT_NAME" VARCHAR2(128 BYTE), + "OBJECT_TYPE" VARCHAR2(23 BYTE), + "INSTALL_OTYPE" VARCHAR2(20 BYTE), + "FILTER_SELECTOR" VARCHAR2(4000 BYTE), + "SOURCE_VIEW" VARCHAR2(25 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.ZX_OBJ_INSTALL_TAB + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/ZX_OBJ_INSTALL_TAB.tabind b/grbsrc/ODBCAPTURE/ZX_OBJ_INSTALL_TAB.tabind new file mode 100644 index 0000000..a86a5c4 --- /dev/null +++ b/grbsrc/ODBCAPTURE/ZX_OBJ_INSTALL_TAB.tabind @@ -0,0 +1,16 @@ + +-- +-- Create Indexes for ODBCAPTURE.ZX_OBJ_INSTALL_TAB TABLE +-- + +set define off + + +-- NOTE: This is a "INDEX" Index + +--DBMS_METADATA:ODBCAPTURE.ZX_OBJ_INSTALL_TAB_IX1 + + CREATE INDEX "ODBCAPTURE"."ZX_OBJ_INSTALL_TAB_IX1" ON "ODBCAPTURE"."ZX_OBJ_INSTALL_TAB" ("INSTALL_TYPE", "OBJECT_OWNER", "INSTALL_OTYPE") + ; + +set define on diff --git a/grbsrc/ODBCAPTURE/ZX_OBJ_INSTALL_VIEW.vw b/grbsrc/ODBCAPTURE/ZX_OBJ_INSTALL_VIEW.vw new file mode 100644 index 0000000..e56281d --- /dev/null +++ b/grbsrc/ODBCAPTURE/ZX_OBJ_INSTALL_VIEW.vw @@ -0,0 +1,108 @@ + +-- +-- Create ODBCAPTURE.ZX_OBJ_INSTALL_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."ZX_OBJ_INSTALL_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.ZX_OBJ_INSTALL_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."ZX_OBJ_INSTALL_VIEW" ("INSTALL_TYPE", "OBJECT_OWNER", "OBJECT_NAME", "OBJECT_TYPE", "INSTALL_OTYPE", "FILTER_SELECTOR", "SOURCE_VIEW") AS + select install_type + ,base_table_owner OBJECT_OWNER + ,foreign_key_name OBJECT_NAME + ,NULL OBJECT_TYPE + ,install_otype + ,nvl2(install_type_selector, 'SEL:' || install_type_selector, NULL) + FILTER_SELECTOR + ,'OBJ_INSTALL_FKEY_TAB' SOURCE_VIEW + from obj_install_fkey_tab +UNION ALL +select install_type + ,trigger_owner OBJECT_OWNER + ,trigger_name OBJECT_NAME + ,object_type + ,install_otype + ,nvl2(install_type_selector, 'SEL:' || install_type_selector, NULL) + FILTER_SELECTOR + ,'OBJ_INSTALL_TRIGGER_TAB' SOURCE_VIEW + from obj_install_trigger_tab +UNION ALL +select install_type + ,object_owner + ,object_name + ,object_type + ,install_otype + ,nvl2(oname_filter, 'FLTR:' || oname_filter, NULL) + FILTER_SELECTOR + ,'OBJ_INSTALL_OBJECT_TAB' SOURCE_VIEW + from obj_install_object_tab + where object_type not in ('INDEX', 'SYNONYM', 'TRIGGER') + and object_install_type not in ('sys','pub') -- Exclude 'sys' or 'pub' database objects +UNION ALL +select install_type + ,synonym_owner OBJECT_OWNER + ,synonym_name OBJECT_NAME + ,object_type + ,install_otype + ,nvl2(install_type_selector, 'SEL:' || install_type_selector, NULL) + FILTER_SELECTOR + ,'OBJ_INSTALL_SYNONYM_TAB' SOURCE_VIEW + from obj_install_synonym_TAB +UNION ALL +select install_type + ,index_owner OBJECT_OWNER + ,index_name OBJECT_NAME + ,object_type + ,install_otype + ,nvl2(install_type_selector, 'SEL:' || install_type_selector, NULL) + FILTER_SELECTOR + ,'OBJ_INSTALL_INDEX_TAB' SOURCE_VIEW + from obj_install_index_tab +UNION ALL +select install_type + ,context_owner OBJECT_OWNER + ,context_name OBJECT_NAME + ,context_type OBJECT_TYPE + ,install_otype + ,NULL FILTER_SELECTOR + ,'OBJ_INSTALL_CONTEXT_TAB' SOURCE_VIEW + from obj_install_context_tab +UNION ALL +select install_type + ,table_owner OBJECT_OWNER + ,table_name OBJECT_NAME + ,NULL OBJECT_TYPE + ,install_otype + ,nvl2(where_clause, 'FLTR:' || where_clause, NULL) + FILTER_SELECTOR + ,'OBJ_INSTALL_DATA_LOAD_TAB' SOURCE_VIEW + from obj_install_data_load_tab; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.ZX_OBJ_INSTALL_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/ZX_PRIV_ALL_TAB.tab b/grbsrc/ODBCAPTURE/ZX_PRIV_ALL_TAB.tab new file mode 100644 index 0000000..abd6bbc --- /dev/null +++ b/grbsrc/ODBCAPTURE/ZX_PRIV_ALL_TAB.tab @@ -0,0 +1,38 @@ + +-- +-- Create ODBCAPTURE.ZX_PRIV_ALL_TAB Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:ODBCAPTURE.ZX_PRIV_ALL_TAB + + CREATE TABLE "ODBCAPTURE"."ZX_PRIV_ALL_TAB" + ( "INSTALL_TYPE" VARCHAR2(10 BYTE), + "INSTALL_TYPE_SELECTOR" VARCHAR2(8 BYTE), + "OBJECT_OWNER" VARCHAR2(128 BYTE), + "OBJECT_NAME" VARCHAR2(128 BYTE), + "OBJECT_TYPE" VARCHAR2(24 BYTE), + "GRANTEE" VARCHAR2(128 BYTE), + "GRANTEE_UOR_TYPE" CHAR(4 BYTE), + "INSTALL_OTYPE" VARCHAR2(20 BYTE), + "SOURCE_VIEW" VARCHAR2(27 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.ZX_PRIV_ALL_TAB + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/ODBCAPTURE/ZX_PRIV_ALL_TAB.tabind b/grbsrc/ODBCAPTURE/ZX_PRIV_ALL_TAB.tabind new file mode 100644 index 0000000..aeedc5e --- /dev/null +++ b/grbsrc/ODBCAPTURE/ZX_PRIV_ALL_TAB.tabind @@ -0,0 +1,16 @@ + +-- +-- Create Indexes for ODBCAPTURE.ZX_PRIV_ALL_TAB TABLE +-- + +set define off + + +-- NOTE: This is a "INDEX" Index + +--DBMS_METADATA:ODBCAPTURE.ZX_PRIV_ALL_TAB_IX1 + + CREATE INDEX "ODBCAPTURE"."ZX_PRIV_ALL_TAB_IX1" ON "ODBCAPTURE"."ZX_PRIV_ALL_TAB" ("INSTALL_TYPE", "OBJECT_OWNER", "INSTALL_OTYPE") + ; + +set define on diff --git a/grbsrc/ODBCAPTURE/ZX_PRIV_ALL_VIEW.vw b/grbsrc/ODBCAPTURE/ZX_PRIV_ALL_VIEW.vw new file mode 100644 index 0000000..6732d03 --- /dev/null +++ b/grbsrc/ODBCAPTURE/ZX_PRIV_ALL_VIEW.vw @@ -0,0 +1,104 @@ + +-- +-- Create ODBCAPTURE.ZX_PRIV_ALL_VIEW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "ODBCAPTURE"."ZX_PRIV_ALL_VIEW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:ODBCAPTURE.ZX_PRIV_ALL_VIEW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "ODBCAPTURE"."ZX_PRIV_ALL_VIEW" ("INSTALL_TYPE", "INSTALL_TYPE_SELECTOR", "OBJECT_OWNER", "OBJECT_NAME", "OBJECT_TYPE", "GRANTEE", "GRANTEE_UOR_TYPE", "INSTALL_OTYPE", "SOURCE_VIEW") AS + select install_type + ,install_type_selector + ,queue_owner OBJECT_OWNER + ,queue_name OBJECT_NAME + ,'QUEUE_REGISTER' OBJECT_TYPE + ,consumer_name GRANTEE + ,consumer_uor_type GRANTEE_UOR_TYPE + ,'QUEUE' INSTALL_OTYPE + ,'PRIV_QUEUE_REGISTER_VIEW' SOURCE_VIEW + from priv_queue_register_view +UNION ALL +select install_type + ,install_type_selector + ,queue_owner OBJECT_OWNER + ,queue_name OBJECT_NAME + ,'QUEUE_SUBSCRIBE' OBJECT_TYPE + ,consumer_name GRANTEE + ,consumer_uor_type GRANTEE_UOR_TYPE + ,'QUEUE' INSTALL_OTYPE + ,'PRIV_QUEUE_SUSCRIBE_VIEW' SOURCE_VIEW + from priv_queue_subscribe_view +UNION ALL +select install_type + ,install_type_selector + ,object_owner + ,object_name + ,object_type + ,grantee + ,grantee_uor_type + ,install_otype + ,'PRIV_OBJ_INSTALL_VW' SOURCE_VIEW + from priv_obj_install_vw + where object_type != 'QUEUE' +UNION ALL +select install_type + ,install_type_selector + ,'SYS' OBJECT_OWNER + ,rolename OBJECT_NAME + ,'ROLE' OBJECT_TYPE + ,grantee + ,grantee_uor_type + ,'ROLE' INSTALL_OTYPE + ,'PRIV_ROLE_PRIVILEGES_VIEW' SOURCE_VIEW + from priv_role_privileges_view +UNION ALL +select install_type + ,install_type_selector + ,'SYS' OBJECT_OWNER + ,system_privilege_name OBJECT_NAME + ,'SYSTEM_PRIVILEGE' OBJECT_TYPE + ,grantee + ,grantee_uor_type + ,'SYSTEM_PRIVILEGE' INSTALL_OTYPE + ,'PRIV_SYSTEM_PRIVILEGES_VIEW' SOURCE_VIEW + from priv_system_privileges_view +UNION ALL +select install_type + ,install_type_selector + ,object_owner + ,object_name + ,object_type + ,grantee + ,grantee_uor_type + ,'SYSOBJ_PRIVILEGES' INSTALL_OTYPE + ,'PRIV_SYSOBJ_PRIVILEGES_VIEW' SOURCE_VIEW + from priv_sysobj_privileges_view; + +-- Comments + +--DBMS_METADATA:ODBCAPTURE.ZX_PRIV_ALL_VIEW + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/grbsrc/SYS/ODBCAPTURE.usr b/grbsrc/SYS/ODBCAPTURE.usr new file mode 100644 index 0000000..3509141 --- /dev/null +++ b/grbsrc/SYS/ODBCAPTURE.usr @@ -0,0 +1,107 @@ + +-- +-- Create ODBCAPTURE Schema +-- + +set define off + +create user "ODBCAPTURE" + identified by "ODBCAPTURE" + default tablespace USERS + temporary tablespace TEMP + profile DEFAULT + quota 512M on USERS +; + +-- Grant SYS Objects (but not directories) + +grant SELECT on "SYS"."DBA_ALL_TABLES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_ASSOCIATIONS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_AUDIT_POLICIES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_AUDIT_TRAIL" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_CLUSTERS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_COL_COMMENTS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_CONSTRAINTS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_CONS_COLUMNS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_CONTEXT" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_CUBES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_CUBE_BUILD_PROCESSES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_CUBE_DIMENSIONS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_DB_LINKS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_DEPENDENCIES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_DIMENSIONS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_DIRECTORIES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_EDITIONS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_EDITION_COMMENTS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_EVALUATION_CONTEXTS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_HOST_ACES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_INDEXES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_INDEXTYPES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_INDEXTYPE_COMMENTS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_IND_COLUMNS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_IND_PARTITIONS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_IND_SUBPARTITIONS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_JAVA_CLASSES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_JAVA_POLICY" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_LIBRARIES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_LOBS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_LOB_PARTITIONS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_LOB_SUBPARTITIONS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_MEASURE_FOLDERS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_MINING_MODELS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_MVIEWS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_MVIEW_COMMENTS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_MVIEW_LOGS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_NESTED_TABLES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_OBJECTS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_OPERATORS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_OPERATOR_COMMENTS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_PDBS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_PDB_HISTORY" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_PROCEDURES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_PROFILES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_QUEUES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_QUEUE_SCHEDULES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_QUEUE_SUBSCRIBERS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_QUEUE_TABLES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_REWRITE_EQUIVALENCES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_ROLES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_ROLE_PRIVS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_RSRC_CONSUMER_GROUPS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_RSRC_PLANS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_RULES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_RULE_SETS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_SCHEDULER_CHAINS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_SCHEDULER_CREDENTIALS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_SCHEDULER_DESTS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_SCHEDULER_FILE_WATCHERS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_SCHEDULER_GROUPS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_SCHEDULER_JOBS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_SCHEDULER_JOB_CLASSES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_SCHEDULER_PROGRAMS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_SCHEDULER_PROGRAM_ARGS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_SCHEDULER_SCHEDULES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_SCHEDULER_WINDOWS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_SEQUENCES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_SOURCE" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_SUBSCR_REGISTRATIONS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_SYNONYMS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_SYS_PRIVS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_TABLES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_TAB_COLS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_TAB_COLUMNS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_TAB_COMMENTS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_TAB_IDENTITY_COLS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_TAB_PARTITIONS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_TAB_PRIVS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_TAB_SUBPARTITIONS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_TRIGGERS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_TS_QUOTAS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_TYPES" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_USERS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_VIEWS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_XML_SCHEMAS" to "ODBCAPTURE"; +grant SELECT on "SYS"."DBA_XML_TABLES" to "ODBCAPTURE"; +grant INHERIT PRIVILEGES on USER "SYS" to "ODBCAPTURE"; + +set define on diff --git a/grbsrc/SYSTEM/GRAB_SCRIPTS_DIR.dir b/grbsrc/SYSTEM/GRAB_SCRIPTS_DIR.dir new file mode 100644 index 0000000..abe9d25 --- /dev/null +++ b/grbsrc/SYSTEM/GRAB_SCRIPTS_DIR.dir @@ -0,0 +1,25 @@ + +-- +-- Create GRAB_SCRIPTS_DIR Database Directory +-- +-- Because directories are created based on permissions, granting +-- directory access to users/roles in different install types +-- will result in duplicate CREATE DIRECTORY scripts +-- + +set define off + + +create or replace directory "GRAB_SCRIPTS_DIR" + as '/opt/install_files'; + + +-- Grants + +grant EXECUTE on directory "GRAB_SCRIPTS_DIR" to "ODBCAPTURE" with grant option; + +grant READ on directory "GRAB_SCRIPTS_DIR" to "ODBCAPTURE" with grant option; + +grant WRITE on directory "GRAB_SCRIPTS_DIR" to "ODBCAPTURE" with grant option; + +set define on diff --git a/grbsrc/SYSTEM/ODBCAPTURE_usr.grnt b/grbsrc/SYSTEM/ODBCAPTURE_usr.grnt new file mode 100644 index 0000000..d30949a --- /dev/null +++ b/grbsrc/SYSTEM/ODBCAPTURE_usr.grnt @@ -0,0 +1,53 @@ + +-- +-- Create ODBCAPTURE Grants +-- + +set define off + + +-- Database System Privileges + +--DBMS_METADATA:ODBCAPTURE + + GRANT UNLIMITED TABLESPACE TO "ODBCAPTURE"; + GRANT PURGE DBA_RECYCLEBIN TO "ODBCAPTURE"; + +-- "sys" INSTALL_TYPE Role Grants +-- "GRANTEE" (delayed) Role Grants +-- Note: "OBJECT" Schema Object Grants are given during Role creation + +grant "CONNECT" to "ODBCAPTURE"; +grant "DBA" to "ODBCAPTURE"; +grant "EXP_FULL_DATABASE" to "ODBCAPTURE"; +grant "JAVASYSPRIV" to "ODBCAPTURE"; +grant "RESOURCE" to "ODBCAPTURE"; +grant "SELECT_CATALOG_ROLE" to "ODBCAPTURE"; + + +-- "sys" INSTALL_TYPE Schema Object Grants, excluding SYS objects +-- "GRANTEE" (delayed) Schema Object Grants +-- Note: "OBJECT" Schema Object Grants are given during object creation + + + +-- Advanced Queue System Privileges + + + +-- Advanced Queue Grants +-- "GRANTEE" (Delayed) Advanced Queue Grants +-- Note: "QUEUE" Advanced Queue Grants are given during object creation + +-- Advanced Queue Subscriptions +-- "GRANTEE" (Delayed) Advanced Queue Subscription +-- Note: "QUEUE" Advanced Queue Subscriptions are given during object creation + + + +-- "GRANTEE" (Delayed) Fine-Grained Java Permissions +-- Note: "JAVA_CLASS" Fine-Grained Java Permissions are given during object creation +-- + + +set define on diff --git a/grbsrc/SYSTEM/create_directories.bat b/grbsrc/SYSTEM/create_directories.bat new file mode 100644 index 0000000..8a8c65b --- /dev/null +++ b/grbsrc/SYSTEM/create_directories.bat @@ -0,0 +1,11 @@ + +REM +REM Create Directories for Windows +REM + +md \opt\install_files + +REM set db_owner=oracle + +REM icacls \opt\install_files /grant %db_owner%:F /T + diff --git a/grbsrc/SYSTEM/create_directories.sh b/grbsrc/SYSTEM/create_directories.sh new file mode 100644 index 0000000..062cef7 --- /dev/null +++ b/grbsrc/SYSTEM/create_directories.sh @@ -0,0 +1,9 @@ + +# +# Create Directories for Linux +# + +mkdir -p /opt/install_files + +chmod 777 /opt/install_files + diff --git a/grbsrc/alter_foreign_keys.sql b/grbsrc/alter_foreign_keys.sql new file mode 100644 index 0000000..3b2caca --- /dev/null +++ b/grbsrc/alter_foreign_keys.sql @@ -0,0 +1,88 @@ + +-- +-- Alter "grbsrc" Install Type Foreign Keys +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure missing_parent_sql + (in_owner sys.dba_constraints.owner%TYPE + ,in_constraint sys.dba_constraints.constraint_name%TYPE) + is + TYPE fk_rec_type is record + (child_owner sys.dba_constraints.owner%TYPE + ,child_table sys.dba_constraints.table_name%TYPE + ,child_column sys.dba_cons_columns.column_name%TYPE + ,parent_owner sys.dba_constraints.owner%TYPE + ,parent_table sys.dba_constraints.table_name%TYPE + ,parent_column sys.dba_cons_columns.column_name%TYPE); + TYPE fk_nt_type is table of fk_rec_type; + fk_nt fk_nt_type; + sql_txt varchar2(1000); + begin + select ctab.owner child_owner, ctab.table_name child_table, ccol.column_name child_column, + ptab.owner parent_owner, ptab.table_name parent_table, pcol.column_name parent_column + bulk collect into fk_nt + from sys.dba_constraints ctab + join sys.dba_cons_columns ccol + on ccol.owner = ctab.owner and ccol.constraint_name = ctab.constraint_name + join sys.dba_constraints ptab + on ptab.owner = ctab.r_owner and ptab.constraint_name = ctab.r_constraint_name + join sys.dba_cons_columns pcol + on pcol.owner = ptab.owner and pcol.constraint_name = ptab.constraint_name + and pcol.position = ccol.position + where ctab.owner = in_owner and ctab.constraint_name = in_constraint + order by ccol.position; + if SQL%NOTFOUND then return; end if; + dbms_output.put_line('-- ORA-20000: Query to find missing parent keys:'); + -- ORA-20000: select "CHILD_KEY" from from "CHILD_OWNER"."CHILD_TABLE" group by "CHILD_KEY" + sql_txt := '-- ORA-20000: select "' || fk_nt(1).child_column; + for i in 2 .. fk_nt.LAST + loop + sql_txt := sql_txt || '", "' || fk_nt(i).child_column; + end loop; + sql_txt := sql_txt || '" from "' || fk_nt(1).child_owner || '"."' || fk_nt(1).child_table || + '" group by "' || fk_nt(1).child_column; + for i in 2 .. fk_nt.LAST + loop + sql_txt := sql_txt || '", "' || fk_nt(i).child_column; + end loop; + dbms_output.put_line (sql_txt || '"'); + -- ORA-20000: MINUS select "PARENT_KEY" from "PARENT_OWNER"."PARENT_TABLE"; + sql_txt := '-- ORA-20000: MINUS select "' || fk_nt(1).parent_column; + for i in 2 .. fk_nt.LAST + loop + sql_txt := sql_txt || '", "' || fk_nt(i).parent_column; + end loop; + sql_txt := sql_txt || '" from "' || fk_nt(1).parent_owner || '"."' || fk_nt(1).parent_table || '";'; + dbms_output.put_line (sql_txt); + end missing_parent_sql; + procedure do_it (in_schema in varchar2) + is + sql_txt varchar2(1000); + begin + for buff in (select owner, table_name, constraint_name from dba_constraints + where constraint_type = 'R' and owner = in_schema + order by owner, table_name, constraint_name) + loop + sql_txt := 'alter table "' || buff.owner || '"."' || buff.table_name || + '" &1. constraint "' || buff.constraint_name || '"'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- *'); + dbms_output.put_line('-- ERROR at line :'); + dbms_output.put_line('-- ' || SQLERRM); + missing_parent_sql(buff.owner,buff.constraint_name); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Foreign Keys is done.'); + end do_it; +begin + dbms_output.put_line('Alter Foreign Keys for grbsrc Install Type'); + do_it('ODBCAPTURE'); +end; +/ diff --git a/grbsrc/alter_queues.sql b/grbsrc/alter_queues.sql new file mode 100644 index 0000000..a9c6f04 --- /dev/null +++ b/grbsrc/alter_queues.sql @@ -0,0 +1,36 @@ + +-- +-- Alter "grbsrc" Install Type Queues +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select owner, name from dba_queues + where owner = in_schema and queue_type != 'EXCEPTION_QUEUE' + order by owner, name) + loop + sql_txt := 'begin DBMS_AQADM.' || + case '&1.' when 'ENABLE' then 'START_QUEUE' + else 'STOP_QUEUE' + end || + '(QUEUE_NAME => ''' || buff.owner || '.' || buff.name || + ''', ENQUEUE => TRUE, DEQUEUE => TRUE); end;'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Queues is done.'); + end do_it; +begin + dbms_output.put_line('Alter Queues for grbsrc Install Type'); + do_it('ODBCAPTURE'); +end; +/ diff --git a/grbsrc/alter_scheduler_jobs.sql b/grbsrc/alter_scheduler_jobs.sql new file mode 100644 index 0000000..14e15d1 --- /dev/null +++ b/grbsrc/alter_scheduler_jobs.sql @@ -0,0 +1,32 @@ + +-- +-- Alter "grbsrc" Install Type Scheduler Jobs +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select owner, job_name from dba_scheduler_jobs + where owner = in_schema + order by owner, job_name) + loop + sql_txt := 'begin DBMS_SCHEDULER.&1.(NAME => ''' || + buff.owner || '.' || buff.job_name || '''); end;'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Scheduler Jobs is done.'); + end do_it; +begin + dbms_output.put_line('Alter Scheduler Jobs for grbsrc Install Type'); + do_it('ODBCAPTURE'); +end; +/ diff --git a/grbsrc/alter_triggers.sql b/grbsrc/alter_triggers.sql new file mode 100644 index 0000000..6dac58c --- /dev/null +++ b/grbsrc/alter_triggers.sql @@ -0,0 +1,32 @@ + +-- +-- Alter "grbsrc" Install Type Triggers +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select owner, trigger_name from dba_triggers + where table_owner = in_schema + order by owner, trigger_name) + loop + sql_txt := 'alter trigger "' || buff.owner || '"."' || + buff.trigger_name || '" &1.'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Triggers is done.'); + end do_it; +begin + dbms_output.put_line('Alter Triggers for grbsrc Install Type'); + do_it('ODBCAPTURE'); +end; +/ diff --git a/grbsrc/compile_all.sql b/grbsrc/compile_all.sql new file mode 100644 index 0000000..28b5597 --- /dev/null +++ b/grbsrc/compile_all.sql @@ -0,0 +1,36 @@ + +-- +-- Compile All "grbsrc" Install Type Objects +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select object_name + from sys.dba_objects + where owner = in_schema + and object_type = 'JAVA SOURCE' + order by object_name ) + loop + sql_txt := 'alter java source "' || in_schema || '"."' || buff.object_name || '" compile'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + begin + DBMS_UTILITY.compile_schema(schema => in_schema, compile_all => FALSE); + dbms_output.put_line('-- ' || in_schema || ' Compile All is done.'); + exception when others then + dbms_output.put_line('Compiling Schema ' || in_schema || CHR(10) || SQLERRM); + dbms_output.put_line(''); + end; + end do_it; +begin + dbms_output.put_line('Compile All for grbsrc Install Type'); + do_it('ODBCAPTURE'); +end; +/ diff --git a/grbsrc/db_build_junit_report.sql b/grbsrc/db_build_junit_report.sql new file mode 100644 index 0000000..bc48207 --- /dev/null +++ b/grbsrc/db_build_junit_report.sql @@ -0,0 +1,113 @@ + +-- +-- Create JUnit XML Report of Database Build Status for "grbsrc" Install Type +-- + +declare + -- + procedure ot (in_txt in varchar2) is begin + dbms_output.put_line(in_txt); + end ot; + -- + procedure do_it (in_schema in varchar2) is + begin + for tsuite in ( + with q1 as ( + select obj.owner + ,count(obj.owner) NUM_TESTS + ,sum(decode(obj.status, 'VALID', 0, 1)) NUM_FAILURES + ,min(obj.last_ddl_time) TSTAMP + -- Jenkins JUnit Plugin adds all these times together + -- round((max(obj.last_ddl_time) - min(obj.last_ddl_time))*24*60*60) + ,0 ELAPSED_SECS + from dba_objects obj + where obj.owner = in_schema + group by obj.owner + UNION + select syn.table_owner OWNER + ,count(syn.table_owner) NUM_TESTS + ,sum(decode(obj.status, 'VALID', 0, 1)) NUM_FAILURES + ,min(obj.last_ddl_time) TSTAMP + -- Jenkins JUnit Plugin adds all these times together + -- round((max(obj.last_ddl_time) - min(obj.last_ddl_time))*24*60*60) + ,0 ELAPSED_SECS + from dba_synonyms syn + join dba_objects obj + on obj.object_name = syn.synonym_name + and obj.owner = syn.owner + where syn.owner = 'PUBLIC' + and syn.table_owner = in_schema + group by syn.table_owner + ) + select owner -- TESTSUITE + ,sum(NUM_TESTS) NUM_TESTS + ,sum(NUM_FAILURES) NUM_FAILURES + ,max(TSTAMP) TSTAMP + ,sum(ELAPSED_SECS) ELAPSED_SECS + from q1 + group by owner + order by owner) + loop + ot(' '); + for tcase in ( + select obj.object_type -- TESTCASE + ,replace(obj.object_name,'.','_') OBJECT_NAME -- CLASS + ,obj.STATUS + ,0 ELAPSED_SECS + from dba_objects obj + where obj.owner = tsuite.owner + UNION ALL + select 'PUBLIC_SYNONYM' OBJECT_TYPE -- TESTCASE + ,replace(obj.object_name,'.','_') OBJECT_NAME -- CLASS + ,obj.STATUS + ,0 ELAPSED_SECS + from dba_synonyms syn + join dba_objects obj + on obj.object_name = syn.synonym_name + and obj.owner = syn.owner + where syn.owner = 'PUBLIC' + and syn.table_owner = tsuite.owner + order by 1,2 ) + loop + if tcase.status = 'VALID' + then + ot(' ' ); + else + ot(' ' ); + ot(' '); + ot('** Object Status is ' || tcase.status); + for terror in ( + select 'Line ' || line || + ', Col ' || position || + ': ' || UTL_I18N.ESCAPE_REFERENCE(text, 'us7ascii') ERROR_TXT + from dba_errors + where owner = tsuite.owner + and type = decode(tcase.object_type,'PUBLIC_SYNONYM','SYNONYM',tcase.object_type) + and name = tcase.object_name + order by sequence ) + loop + ot(terror.error_txt); + end loop; + ot(' '); + ot(' '); + end if; + end loop; + ot(' '); + end loop; + end do_it; +begin + ot(''); + ot(''); + do_it('ODBCAPTURE'); + ot(''); +end; +/ + diff --git a/grbsrc/db_install.sql b/grbsrc/db_install.sql new file mode 100644 index 0000000..7ec0dce --- /dev/null +++ b/grbsrc/db_install.sql @@ -0,0 +1,55 @@ + +-- Database Installation Assist +-- Wrapper for Database Installation Scripts +-- +-- Parameters +-- 1) Script Name +-- 2) Schema Name +-- 3) System Connect String + +prompt === DBI Started: &1. + +define DBI_SCRIPT_NAME="&1." +define DBI_SCHEMA_NAME="&2." +define DBI_SYSTEM_CONNECT="&3." + +variable dbi_beg_dtm varchar2(40) +variable dbi_beg_secs number + +set feedback off +begin + -- Initialize Timer + :dbi_beg_dtm := to_char(systimestamp,'YYYY-MM-DD') || 'T' || + to_char(systimestamp,'HH24:MI:SS'); + :dbi_beg_secs := dbms_utility.get_time; + -- Set Current Schema + if length('&DBI_SCHEMA_NAME.') > 0 + then + execute immediate 'alter session set current_schema = "&DBI_SCHEMA_NAME."'; + end if; +end; +/ +set feedback on +set blockterminator off +set sqlblanklines on + +@"&DBI_SCRIPT_NAME." "&DBI_SYSTEM_CONNECT." "" "" +set serveroutput on size unlimited format wrapped + +set sqlblanklines off +set blockterminator on +set feedback off +begin + -- Reset Current Schema + if length('&DBI_SCHEMA_NAME.') > 0 + then + execute immediate 'alter session set current_schema = "' || USER || '"'; + end if; + -- Show Timer Results + dbms_output.put_line('=== DBI Completed at ' || to_char(systimestamp,'YYYY-MM-DD') || 'T' || + to_char(systimestamp,'HH24:MI:SS') || + ' for a duration of ' || trim( (dbms_utility.get_time - :dbi_beg_secs) / 100 ) || + ' seconds (started at ' || :dbi_beg_dtm || ')'); +end; +/ +set feedback on diff --git a/grbsrc/fix_invalid_public_synonyms.sql b/grbsrc/fix_invalid_public_synonyms.sql new file mode 100644 index 0000000..ef70282 --- /dev/null +++ b/grbsrc/fix_invalid_public_synonyms.sql @@ -0,0 +1,49 @@ + +-- +-- Re-create Invalid Public Synonyms +-- + +---------------------------------------- +prompt +prompt Re-create Invalid Public Synonyms +set serveroutput on size unlimited format wrapped +set linesize 2499 + +Declare + sql_txt varchar(2000); +Begin + for buff in (with q1 as ( + select owner, object_name, editionable + from dba_objects + where status != 'VALID' + ) + select syn.synonym_name, syn.table_owner, syn.table_name, + case q1.editionable when 'Y' then ' EDITIONABLE' + when NULL then '' + else ' NONEDITIONABLE' + end EDITIONABLE + from dba_synonyms syn + join q1 + on q1.owner = syn.owner + and q1.object_name = syn.synonym_name + join dba_users usr + on usr.username = syn.table_owner + and ( usr.oracle_maintained is null + OR usr.oracle_maintained != 'Y') + where syn.owner = 'PUBLIC' ) + loop + begin + sql_txt := 'CREATE OR REPLACE' || buff.EDITIONABLE || ' PUBLIC SYNONYM "' || + buff.synonym_name || '" for "' || buff.table_owner || '"."' || + buff.table_name ||'"'; + dbms_output.put_line(sql_txt); + execute immediate sql_txt; + exception + when others then + dbms_output.put_line('ERROR:' || CHR(10) || SQLERRM || CHR(10)); + dbms_output.put_line('----------------------------------------'); + end; + end loop; +end; +/ + diff --git a/grbsrc/install.sql b/grbsrc/install.sql new file mode 100644 index 0000000..8a1fbb3 --- /dev/null +++ b/grbsrc/install.sql @@ -0,0 +1,75 @@ + +-- +-- Master Installation Script +-- All scripts created by "https://ODBCapture.org", Version V2.1 +-- +-- Must be run as SYS +-- +-- Command Line Parameters: +-- 1 - TO_PDB_SYSTEM: SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the pluggable database. +-- The Data Load installation requires this connection information. +-- + +-- NOTE: If running in a Linux based Docker Container from a Windows FileSystem Mount, run this first: +-- dos2unix -f -o ../install/*/*.csv ../install/*/*/*.csv + +define TOP_PDB_SYSTEM="&1." +execute DBMS_JAVA.SET_OUTPUT(1000000); +set serveroutput on size unlimited format wrapped + +---------------------------------------- +prompt Identify this Module in V$SESSION +set appinfo "grbsrc Installation" + +---------------------------------------- +prompt Setup Abort on Error +WHENEVER SQLERROR EXIT SQL.SQLCODE +WHENEVER OSERROR EXIT + +---------------------------------------- +prompt +prompt ************************** +prompt * Run SYS Installation * +prompt ************************** +prompt +@install_sys.sql "" "" "" + +---------------------------------------- +prompt Setup Continue on Error +WHENEVER SQLERROR CONTINUE +WHENEVER OSERROR CONTINUE + +---------------------------------------- +prompt +prompt ***************************** +prompt * Run SYSTEM Installation * +prompt ***************************** +prompt +connect &TOP_PDB_SYSTEM. +execute DBMS_JAVA.SET_OUTPUT(1000000); +set serveroutput on size unlimited format wrapped +@install_system.sql "" "" "" + +---------------------------------------- +prompt +prompt ************************* +prompt * Install Application * +prompt ************************* +prompt +@install_grbsrc.sql "&TOP_PDB_SYSTEM." "" "" + +---------------------------------------- +prompt +prompt ***************** +prompt * Run Reports * +prompt ***************** +prompt +@report_status.sql "&TOP_PDB_SYSTEM." "" "" + +---------------------------------------- +set appinfo "Null" +set appinfo off +prompt +prompt "grbsrc" Installation is Done. diff --git a/grbsrc/install_grbsrc.sql b/grbsrc/install_grbsrc.sql new file mode 100644 index 0000000..7920575 --- /dev/null +++ b/grbsrc/install_grbsrc.sql @@ -0,0 +1,142 @@ + +-- +-- grbsrc Installation Script +-- +-- Must be run as a SYSTEM User (DBA) +-- +-- Command Line Parameters: +-- 1 - INSTALL_SYSTEM_CONNECT: SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +spool install_grbsrc.log + +define INSTALL_SYSTEM_CONNECT="&1." + +-- Must Set SQLPREFIX away from "#" Oracle Change Data Capture packages +set sqlprefix "~" + +-- Using "^P", CHR(16), DLE as an escape character +set escape OFF +set escape "" + +---------------------------------------- +-- Prepare for Install +@db_install.sql "./installation_prepare.sql" "" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- PACKAGE Install + +@db_install.sql "ODBCAPTURE/COMMON_UTIL.pspec" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/GRAB_SCRIPTS.pspec" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/ROOT_SCRIPTS.pspec" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/ZIP_UTIL_PKG.pspec" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- TABLE Install + +@db_install.sql "ODBCAPTURE/DBA_DEPENDENCIES_TAB.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/DBA_OBJECTS_TAB.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/DBA_TAB_PRIVS_TAB.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/DLOAD_CONF.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/INSTALL_TYPE_TIMING.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJECT_CONF.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_CONTEXT_TAB.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_TAB.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_FKEY_TAB.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_INDEX_TAB.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_OBJECT_TAB.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_SYNONYM_TAB.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_TRIGGER_TAB.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OTYPE_CONF.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/ROLE_CONF.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/SCHEMA_CONF.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/TYPE_CONF.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/ZIP_FILES.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/ZX_OBJ_INSTALL_TAB.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/ZX_PRIV_ALL_TAB.tab" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- DATA_LOAD Install + +@db_install.sql "ODBCAPTURE/DLOAD_CONF.cdl" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJECT_CONF.cdl" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OTYPE_CONF.cdl" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/ROLE_CONF.cdl" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/SCHEMA_CONF.cdl" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/TYPE_CONF.cdl" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- INDEX Install + +@db_install.sql "ODBCAPTURE/DBA_DEPENDENCIES_TAB.tabind" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/DBA_OBJECTS_TAB.tabind" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/DBA_TAB_PRIVS_TAB.tabind" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tabind" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_CONTEXT_TAB.tabind" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_TAB.tabind" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_FKEY_TAB.tabind" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_INDEX_TAB.tabind" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_OBJECT_TAB.tabind" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_SYNONYM_TAB.tabind" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_TRIGGER_TAB.tabind" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/ZX_OBJ_INSTALL_TAB.tabind" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/ZX_PRIV_ALL_TAB.tabind" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- VIEW Install + +@db_install.sql "ODBCAPTURE/AQ_SYSTEM_PRIVS_VW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/DBA_DEPENDENCIES_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/DBA_OBJECTS_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/DBA_TAB_PRIVS_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_COMMENTS_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_CONTEXT_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_DATA_LOAD_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_FKEY_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_INDEX_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_OBJECT_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_SYNONYM_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJ_INSTALL_TRIGGER_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/PRIV_OBJ_DIR_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/PRIV_OBJ_INSTALL_VW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/PRIV_OBJ_JAVA_FG_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/PRIV_OBJ_QUEUE_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/PRIV_OBJ_XDBACL_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/PRIV_QUEUE_REGISTER_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/PRIV_QUEUE_SUBSCRIBE_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/PRIV_QUEUE_SYSPRIVS_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/PRIV_ROLE_PRIVILEGES_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/PRIV_SYSOBJ_PRIVILEGES_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/PRIV_SYSTEM_PRIVILEGES_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/SCHEMA_OBJECTS_VW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/UOR_INSTALL_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/ZX_OBJ_INSTALL_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/ZX_PRIV_ALL_VIEW.vw" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- PACKAGE BODY Install + +@db_install.sql "ODBCAPTURE/COMMON_UTIL.pbody" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/GRAB_SCRIPTS.pbody" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/ROOT_SCRIPTS.pbody" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/ZIP_UTIL_PKG.pbody" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- TABLE_FOREIGN_KEY Install + +@db_install.sql "ODBCAPTURE/DLOAD_CONF.tabfk" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJECT_CONF.tabfk" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/ROLE_CONF.tabfk" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/SCHEMA_CONF.tabfk" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/TYPE_CONF.tabfk" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- Finalize Installation +@db_install.sql "./installation_finalize.sql" "" "&INSTALL_SYSTEM_CONNECT." + +spool off + diff --git a/grbsrc/install_sys.sql b/grbsrc/install_sys.sql new file mode 100644 index 0000000..66baae8 --- /dev/null +++ b/grbsrc/install_sys.sql @@ -0,0 +1,23 @@ + +-- +-- SYS Installation Script +-- +-- Must be run as SYS +-- + +spool install_sys.log + +set blockterminator off +set sqlblanklines on + +---------------------------------------- +-- USER Install + +@db_install.sql "SYS/ODBCAPTURE.usr" "" "" + +---------------------------------------- +set sqlblanklines off +set blockterminator on + +spool off + diff --git a/grbsrc/install_system.sql b/grbsrc/install_system.sql new file mode 100644 index 0000000..6f02480 --- /dev/null +++ b/grbsrc/install_system.sql @@ -0,0 +1,28 @@ + +-- +-- SYSTEM Installation Script +-- +-- Must be run as SYSTEM +-- + +spool install_system.log + +set blockterminator off +set sqlblanklines on + +---------------------------------------- +-- DIRECTORY Install + +@db_install.sql "SYSTEM/GRAB_SCRIPTS_DIR.dir" "" "" + +---------------------------------------- +-- GRANT Install + +@db_install.sql "SYSTEM/ODBCAPTURE_usr.grnt" "" "" + +---------------------------------------- +set sqlblanklines off +set blockterminator on + +spool off + diff --git a/grbsrc/installation_finalize.sql b/grbsrc/installation_finalize.sql new file mode 100644 index 0000000..7660714 --- /dev/null +++ b/grbsrc/installation_finalize.sql @@ -0,0 +1,48 @@ + +-- +-- Finalize Installation +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +define FINAL_SYSTEM_CONNECT="&1." + +prompt +prompt Drop_Temp_Publicly_Updateable_Table_SQL +drop table SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE purge; + +prompt +prompt fix_invalid_public_synonyms +@"fix_invalid_public_synonyms.sql" "" + +prompt +prompt compile_all +@"compile_all.sql" "" + +prompt +prompt alter_foreign_keys_ENABLE +@"alter_foreign_keys.sql" "ENABLE" + +prompt +prompt alter_triggers_ENABLE +@"alter_triggers.sql" "ENABLE" + +prompt +prompt update_id_sequences +@"update_id_sequences.sql" "" + +--prompt +--prompt alter_queues_ENABLE +--@"alter_queues.sql" "ENABLE" + +--prompt +--prompt alter_scheduler_jobs_ENABLE +--@"alter_scheduler_jobs.sql" "ENABLE" + +prompt +prompt Load Installation Files +@"odbcapture_installation_logs.cdl" "&FINAL_SYSTEM_CONNECT." diff --git a/grbsrc/installation_prepare.sql b/grbsrc/installation_prepare.sql new file mode 100644 index 0000000..265eb55 --- /dev/null +++ b/grbsrc/installation_prepare.sql @@ -0,0 +1,9 @@ + +-- +-- Prepare for View Install +-- + +prompt +prompt Create_Temp_Publicly_Updateable_Table_SQL +create table SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE (c1 number); +grant all on SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE to PUBLIC with grant option; diff --git a/grbsrc/list_invalids.csv b/grbsrc/list_invalids.csv new file mode 100644 index 0000000..e2d4f25 --- /dev/null +++ b/grbsrc/list_invalids.csv @@ -0,0 +1 @@ +"OWNER","OBJECT_NAME","OBJECT_TYPE","STATUS" diff --git a/grbsrc/list_invalids.sql b/grbsrc/list_invalids.sql new file mode 100644 index 0000000..401147d --- /dev/null +++ b/grbsrc/list_invalids.sql @@ -0,0 +1,48 @@ + +-- +-- List Invalid Objects for "grbsrc" Install Type +-- + +declare + procedure do_it (in_schema in varchar2) is + begin + for buff in ( + with q1 as ( + select owner + ,object_name + ,object_type + ,status + from dba_objects obj + where obj.owner = in_schema + and ( obj.object_type != 'TYPE' + or obj.object_name not like 'SYSTP%==') + and obj.status != 'VALID' + UNION ALL + select syn.table_owner + ,syn.synonym_name + ,'PUBLIC_SYNONYM' OBJECT_TYPE + ,obj.status + from dba_synonyms syn + join dba_objects obj + on obj.object_name = syn.synonym_name + and obj.owner = syn.owner + and obj.status != 'VALID' + where syn.owner = 'PUBLIC' + and syn.table_owner = in_schema + ) + select '"' || owner || '",' || + '"' || object_name || '",' || + '"' || object_type || '",' || + '"' || status || '"' RECORD_DATA + from q1 + order by RECORD_DATA) + loop + dbms_output.put_line(buff.RECORD_DATA); + end loop; + end do_it; +begin + dbms_output.put_line('"OWNER","OBJECT_NAME","OBJECT_TYPE","STATUS"'); + do_it('ODBCAPTURE'); +end; +/ + diff --git a/grbsrc/log_files_junit_report.sql b/grbsrc/log_files_junit_report.sql new file mode 100644 index 0000000..0529656 --- /dev/null +++ b/grbsrc/log_files_junit_report.sql @@ -0,0 +1,283 @@ + +-- +-- Create JUnit XML Report of Database Log Files for "grbsrc" Schema +-- + +--Element | Description +-------------|------------- +--TestSuite | install_SYS, install_SYSTEM, and install_grbsrc +--Hostname | Database Name +--Property | name="Source Version" value="https://github.com/DMSTEX/DMSTEX.git at f2c736d0cc6fd80d961414dcae37df2bed0d69e2 (Branch: main)" +--Testcase | Script Name +--Classname | "Schema Name"."Object Type" +--Assertions | Number of PL/SQL Statements +--Status | PASS/FAIL/ERROR/DISABLE +--Time | Testcase Duration +--Timestamp | Testcase Runtime (ISO 8601 format) +--Errors | Number of Test Errors + +declare + -- + -- Process CLOB Contents from odbcapture_installation_logs + line_txt varchar2(4000); + so_far pls_integer; + end_pos pls_integer; + -- + -- Varchar2 Associative Array + TYPE vc2_aa_type is table of varchar2(4000) + index by pls_integer; + -- + -- Testcases + TYPE tc_rec_type is record + (schema_name varchar2(128) + ,script_ext varchar2(10) -- Script Name Extension + ,num_statements number(3) -- Number of statements executed in a script + ,status varchar2(10) -- PASS/FAIL + ,duration_secs number(5) + ,t_timestamp varchar2(20) -- 2014-01-21T16:17:18 + ,error_message varchar2(4000) + ,tc_err_aa vc2_aa_type + ,tc_sys_out_aa vc2_aa_type + ); + TYPE tc_aa_type is table of tc_rec_type + index by varchar2(256); -- Testcase Name (Script Name with Path) + tc_aa tc_aa_type; + tc_name varchar2(256); -- Testcase Name (Script Name with Path) + prev_tc_name varchar2(256); -- Previous Testcase Name + -- + tc_buff_aa vc2_aa_type; -- Buffer Array for Testcases + sys_buff_aa vc2_aa_type; -- Buffer Array for System + sys_err boolean := FALSE; -- System Error Found + -- + total_tests number(4); + total_errors number(4); + total_duration number(6); + -- + procedure initialize_testcase (in_buff in varchar2) is begin + -- === DBI Started: "ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tab" + tc_name := replace(substr(in_buff, 18, 256),'"',''); + tc_aa(tc_name).schema_name := substr(tc_name, 1, instr(tc_name,'/',1)-1); + tc_aa(tc_name).script_ext := substr(tc_name, instr(tc_name,'.',-1)+1,10); + tc_aa(tc_name).status := 'PASS'; + end initialize_testcase; + -- + procedure finalize_testcase (in_buff in varchar2) is begin + if tc_name is null then return; end if; + tc_aa(tc_name).t_timestamp := substr(in_buff,22,19); + tc_aa(tc_name).duration_secs := substr(in_buff,60,length(in_buff)-60-40); + total_duration := total_duration + tc_aa(tc_name).duration_secs; + if regexp_like(tc_name, '[.]cdl$') + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := '### SQL*Loader Log File: ' || replace(tc_name,'.cdl','.log'); + begin + select substr(replace(contents,CHR(10)||CHR(10),CHR(10)),1,4000) + into tc_buff_aa(tc_buff_aa.COUNT + 1) + from odbcapture_installation_logs + where file_name = replace(tc_name,'.cdl','.log'); + exception when others then + tc_buff_aa(tc_buff_aa.COUNT + 1) := SQLERRM; + end; + end if; + if tc_aa(tc_name).status = 'FAIL' + then + tc_aa(tc_name).num_statements := 1; + total_errors := total_errors + 1; + if tc_buff_aa.COUNT > 0 + then + for i in tc_buff_aa.FIRST .. tc_buff_aa.LAST + loop + tc_aa(tc_name).tc_err_aa(i) := tc_buff_aa(i); + end loop; + end if; + else + tc_aa(tc_name).num_statements := tc_buff_aa.COUNT; + if tc_buff_aa.COUNT > 0 + then + for i in tc_buff_aa.FIRST .. tc_buff_aa.LAST + loop + tc_aa(tc_name).tc_sys_out_aa(i) := tc_buff_aa(i); + end loop; + end if; + end if; + total_tests := total_tests + 1; + prev_tc_name := tc_name; + tc_buff_aa.DELETE; + tc_name := ''; + end finalize_testcase; + -- + procedure process_contents_line (in_txt in varchar2) is + ldr_txt varchar2(4000); + begin + if in_txt is null then return; end if; + case + when regexp_like(in_txt, '^=== DBI Started: ') + then + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := 'Unexpected Testcase End: ' || in_txt; + finalize_testcase(''); + initialize_testcase(in_txt); + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + else + initialize_testcase(in_txt); + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + end if; + when regexp_like(in_txt, '^=== DBI Completed at ') + then + -- === DBI Completed at 2024-03-05T02:54:49 for a duration of 1.25 seconds (started at 2024-03-05T02:54:48) + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + finalize_testcase(in_txt); + else + sys_err := TRUE; + sys_buff_aa(sys_buff_aa.COUNT + 1) := 'Unexpected Testcase End: ' || in_txt; + end if; + when regexp_like(in_txt, '^(-- ){0,1}(PL[/]SQL:|(PLS|OCI|ORA|SP2|SQL|TNS)-[[:digit:]])') + then + -- (-- ){0,1}: "-- " may or may not be present + -- PL/SQL: PL/SQL Message + -- PLS-"digit" PL/SQL Errors + -- OCI-"digit" Oracle Call Interface + -- ORA-"digit" Oracle Database Errors + -- SP2-"digit" SQL*Plus Errors + -- SQL-"digit" SQL Errors + -- TNS-"digit" Transparent Network Substrate Errors + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + tc_aa(tc_name).status := 'FAIL'; + if tc_aa(tc_name).error_message is null + then + tc_aa(tc_name).error_message := in_txt; + end if; + else + sys_err := TRUE; + sys_buff_aa(sys_buff_aa.COUNT + 1) := '(' || prev_tc_name || ') ' || in_txt; + end if; + else + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + else + sys_buff_aa(sys_buff_aa.COUNT + 1) := '(' || prev_tc_name || ') ' || in_txt; + end if; + end case; + end process_contents_line; + -- + procedure p (in_txt in varchar2) is begin + dbms_output.put_line(in_txt); + end p; +begin + -- + prev_tc_name := 'Initializing'; + -- JUnit XML Format for Jenkins: "https://llg.cubic.org/docs/junit/" + p(''); + p(''); + for buf1 in (select rownum TS_ID + ,l.file_name + ,to_char(l.load_dtm,'YYYY-MM-DD') || 'T' || + to_char(l.load_dtm,'HH24:MI:SS') TSTAMP + ,db.db_unique_name + ,l.contents + from odbcapture_installation_logs l + cross join v$database db + where l.install_type = 'grbsrc' + and l.file_name like 'install%' + and l.load_dtm > trunc(sysdate,'DD') - 2 + order by l.file_name, l.load_dtm) + loop + -- Initialize + tc_aa.DELETE; + tc_buff_aa.DELETE; + sys_buff_aa.DELETE; + tc_name := ''; + total_tests := 0; + total_errors := 0; + total_duration := 0; + -- Fill the Testcase Array + so_far := 0; + loop + end_pos := instr(buf1.contents, chr(10), so_far + 1); + exit when end_pos = 0; + line_txt := substr(buf1.contents, so_far + 1, end_pos - so_far - 1); + process_contents_line(line_txt); + so_far := end_pos; + end loop; + line_txt := substr(buf1.contents, so_far + 1, 4000); + process_contents_line(line_txt); + -- testsuite can appear multiple times, if contained in a testsuites element. It can also be the root element. + p(' '); + tc_name := tc_aa.FIRST; + while tc_name is not null + loop + -- testcase can appear multiple times, see /testsuites/testsuite@tests + p(' '); + if tc_aa(tc_name).status = 'PASS' + then + if tc_aa(tc_name).tc_sys_out_aa.COUNT > 0 + then + -- Data that was written to standard out while the test was executed. optional + p(' '); + for i in tc_aa(tc_name).tc_sys_out_aa.FIRST .. tc_aa(tc_name).tc_sys_out_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(tc_aa(tc_name).tc_sys_out_aa(i))); + end loop; + p(' '); + end if; + else + -- Indicates that the test errored. An errored test is one that had an unanticipated problem. For example an unchecked throwable or a problem with the implementation of the test. Contains as a text node relevant data for the error, for example a stack trace. optional + p(' ' ); -- The error message. e.g., if a java exception is thrown, the return value of getMessage() + if tc_aa(tc_name).tc_err_aa.COUNT > 0 + then + for i in tc_aa(tc_name).tc_err_aa.FIRST .. tc_aa(tc_name).tc_err_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(tc_aa(tc_name).tc_err_aa(i))); + end loop; + end if; + p(' '); + end if; + p(' '); + exit when tc_name = tc_aa.LAST; + tc_name := tc_aa.NEXT(tc_name); + end loop; + if sys_buff_aa.COUNT > 0 + then + if sys_err + then + -- Data that was written to standard error while the test suite was executed. optional + p(' '); + for i in sys_buff_aa.FIRST .. sys_buff_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(sys_buff_aa(i))); + end loop; + p(' '); + else + -- Data that was written to standard out while the test suite was executed. optional + p(' '); + for i in sys_buff_aa.FIRST .. sys_buff_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(sys_buff_aa(i))); + end loop; + p(' '); + end if; + end if; + p(' '); + end loop; + p(''); +end; +/ + diff --git a/grbsrc/odbcapture_installation_logs.cdl b/grbsrc/odbcapture_installation_logs.cdl new file mode 100644 index 0000000..efb09a6 --- /dev/null +++ b/grbsrc/odbcapture_installation_logs.cdl @@ -0,0 +1,71 @@ + +-- +-- Consolidated Data Load script for odbcapture_installation_logs data +-- +-- Must be run as SYSTEM +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +prompt +prompt Confirm/Create odbcapture_installation_logs Table +declare + jnk number := 0; + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql || ';'); + execute immediate in_sql; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end run_sql; +begin + begin + execute immediate 'insert into odbcapture_installation_logs(load_dtm, install_type, file_name)' || + ' values(sysdate, ''Test'', ''Test'')'; + rollback; + jnk := 1; + exception when others then + if SQLERRM != 'ORA-00942: table or view does not exist' + then + dbms_output.put_line('odbcapture_installation_logs table: ' || SQLERRM); + end if; + jnk := -1; + end; + if jnk = -1 + then + run_sql('create table odbcapture_installation_logs' || CHR(10) || + ' (load_dtm date' || CHR(10) || + ' ,install_type varchar2(10)' || CHR(10) || + ' ,file_name varchar2(512)' || CHR(10) || + ' ,contents clob)'); + run_sql('comment on column odbcapture_installation_logs.load_dtm is ''Date/Time the installation log file was loaded.'''); + run_sql('comment on column odbcapture_installation_logs.install_type is ''Type of installation (from TYPE_CONF).'''); + run_sql('comment on column odbcapture_installation_logs.file_name is ''Name of installation log file.'''); + run_sql('comment on column odbcapture_installation_logs.contents is ''Contents/Text of the installation log file.'''); + run_sql('comment on table odbcapture_installation_logs is ''ODBCAPTURE installation log files.'''); + run_sql('grant select on odbcapture_installation_logs to public'); + run_sql('create public synonym odbcapture_installation_logs for odbcapture_installation_logs'); + end if; +end; +/ + + +-- NOTE: Additional file extensions for SQL*Loader include +-- .bad - Bad Records +-- .dsc - Discard Records +-- .log - Log File + +prompt +prompt sqlldr_control=./odbcapture_installation_logs.ctl +host sqlldr '&1.' control=odbcapture_installation_logs.ctl data=odbcapture_installation_logs.csv log=odbcapture_installation_logs.log silent=HEADER,FEEDBACK + +begin + if '&_RC.' != '0' then + raise_application_error(-20000, 'Control file "odbcapture_installation_logs.ctl" returned error: &_RC.'); + end if; +end; +/ + diff --git a/grbsrc/odbcapture_installation_logs.csv b/grbsrc/odbcapture_installation_logs.csv new file mode 100644 index 0000000..09a99ae --- /dev/null +++ b/grbsrc/odbcapture_installation_logs.csv @@ -0,0 +1,9 @@ +"grbsrc","install_sys.log" +"grbsrc","install_system.log" +"grbsrc","install_grbsrc.log" +"grbsrc","ODBCAPTURE/DLOAD_CONF.log" +"grbsrc","ODBCAPTURE/OBJECT_CONF.log" +"grbsrc","ODBCAPTURE/OTYPE_CONF.log" +"grbsrc","ODBCAPTURE/ROLE_CONF.log" +"grbsrc","ODBCAPTURE/SCHEMA_CONF.log" +"grbsrc","ODBCAPTURE/TYPE_CONF.log" diff --git a/grbsrc/odbcapture_installation_logs.ctl b/grbsrc/odbcapture_installation_logs.ctl new file mode 100644 index 0000000..7688189 --- /dev/null +++ b/grbsrc/odbcapture_installation_logs.ctl @@ -0,0 +1,8 @@ +LOAD DATA +APPEND INTO TABLE "ODBCAPTURE_INSTALLATION_LOGS" +FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' + (LOAD_DTM SYSDATE + ,INSTALL_TYPE char(10) + ,FILE_NAME char(512) + ,CONTENTS LOBFILE(FILE_NAME) TERMINATED BY EOF + ) diff --git a/grbsrc/report_status.sql b/grbsrc/report_status.sql new file mode 100644 index 0000000..e42e6ca --- /dev/null +++ b/grbsrc/report_status.sql @@ -0,0 +1,115 @@ + +-- +-- Report Status Script +-- +-- Must be run as SYSTEM User (DBA) +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- +-- Note: odbcapture_installation_logs table will be created +-- to load installation logs (if not already available). +-- + +---------------------------------------- +-- Setup for Reports +set linesize 2499 +set trimspool on +set echo off +set verify off +set termout on +set serveroutput on size unlimited format wrapped + +---------------------------------------- +prompt +prompt Reporting Summary of Install Type Log Errors +declare + TYPE err_aa_type is table of pls_integer index by varchar2(4000); + err_aa err_aa_type; + line_txt varchar2(4000); + so_far pls_integer; + end_pos pls_integer; + procedure add_line is + begin + if regexp_like(line_txt, '(ORA-|SQL-|SP2-|PLS-|PL2-|TNS-|(object|mmap) failed)') + then + begin + err_aa(line_txt) := err_aa(line_txt) + 1; + exception when NO_DATA_FOUND then + err_aa(line_txt) := 1; + end; + end if; + end add_line; +begin + for buff in (select file_name, load_dtm, contents + from odbcapture_installation_logs + where install_type = 'grbsrc' + and load_dtm > trunc(sysdate,'DD') - 2 + order by file_name, load_dtm) + loop + dbms_output.put_line('Processing file ' || buff.file_name || + ' (' || to_char(buff.load_dtm,'YYYY-MM-DD HH24:MI:SS') || ')'); + err_aa.DELETE; + so_far := 0; + loop + end_pos := instr(buff.contents, chr(10), so_far + 1); + exit when end_pos = 0; + line_txt := substr(buff.contents, so_far + 1, end_pos - so_far - 1); + add_line; + so_far := end_pos; + end loop; + line_txt := substr(buff.contents, so_far + 1, 4000); + add_line; + if err_aa.COUNT = 0 then continue; end if; + line_txt := err_aa.FIRST; + loop + dbms_output.put_line(line_txt); + dbms_output.put_line(' ' || err_aa(line_txt) || ' lines: ' || line_txt); + exit when line_txt = err_aa.LAST; + line_txt := err_aa.NEXT(line_txt); + end loop; + end loop; +end; +/ + +---------------------------------------- +prompt +prompt Reporting Invalid Objects +set feedback off +set termout off +spool list_invalids.csv +@"list_invalids.sql" "" +spool off +set termout on +set feedback on + +---------------------------------------- +prompt +prompt Reporting JUnit XML Database Build Status +set feedback off +set termout off +spool db_build_junit_report.xml +@"db_build_junit_report.sql" "" +spool off +set termout on +set feedback on + +---------------------------------------- +prompt +prompt Reorting JUnit XML Installation Log +set feedback off +set termout off +spool log_files_junit_report.xml +@"log_files_junit_report.sql" "" +spool off +set termout on +set feedback on + +---------------------------------------- +-- Done with Reports +set linesize 80 +set verify on + diff --git a/grbsrc/update_id_sequences.sql b/grbsrc/update_id_sequences.sql new file mode 100644 index 0000000..0fb6ff6 --- /dev/null +++ b/grbsrc/update_id_sequences.sql @@ -0,0 +1,59 @@ + +-- +-- Update "grbsrc" IDENTITY SEQUENCES +-- + +declare + UNDEFINED_SEQUENCE EXCEPTION; -- sequence not yet defined in this session + PRAGMA EXCEPTION_INIT (UNDEFINED_SEQUENCE, -8002); + l_last_seq number; + l_max_val number; + sql_txt varchar2(4000); + procedure do_it (in_schema_name in varchar2) is + begin + for buff in ( + select tic.owner + ,tic.table_name + ,tic.column_name + ,tic.sequence_name + from dba_tab_identity_cols tic + where tic.owner = in_schema_name) + loop + -- Find the Current Sequence Value + sql_txt := 'select ' || buff.owner || '.' || buff.sequence_name || + '.currval from dual'; + begin + execute immediate sql_txt into l_last_seq; + exception when UNDEFINED_SEQUENCE + then + -- Find the Last Number for the Sequence + select ds.last_number into l_last_seq + from dba_sequences ds + where ds.sequence_owner = buff.owner + and ds.sequence_name = buff.sequence_name; + end; + -- Find the maximum IDENTITY column value + sql_txt := 'select max(' || buff.column_name || ')' || + ' from ' || buff.owner || '.' || buff.table_name; + execute immediate sql_txt into l_max_val; + -- Display values found + dbms_output.put_line(buff.owner || '.' || buff.sequence_name || ' Last Sequence: ' || l_last_seq || + ', ' || buff.owner || '.' || buff.table_name || ' max(' || buff.column_name || ') = ' || l_max_val); + if l_last_seq < l_max_val + then + -- Increment the sequence as necessary + sql_txt := 'begin' || + ' while ' || buff.owner || '.' || buff.sequence_name || '.nextval < ' || l_max_val || + ' loop null; end loop;' || + 'end;'; + dbms_output.put_line(sql_txt); + execute immediate sql_txt;-- using l_last_seq; + end if; + end loop; + dbms_output.put_line('-- ' || in_schema_name || ' Identity Sequence Updates is done.'); + end do_it; +begin + dbms_output.put_line('Update ID Sequences for grbsrc Install Type'); + do_it('ODBCAPTURE'); +end; +/ diff --git a/releases/wtplsql_core_install_1.0.0.zip b/releases/wtplsql_core_install_1.0.0.zip deleted file mode 100644 index f413d56..0000000 Binary files a/releases/wtplsql_core_install_1.0.0.zip and /dev/null differ diff --git a/src/core/README.txt b/src/core/README.txt deleted file mode 100644 index bb08fe8..0000000 --- a/src/core/README.txt +++ /dev/null @@ -1,54 +0,0 @@ - - White Box PL/SQL Testing - src/core/README.txt - -FILE DESCRIPTION ----------------------- ----------------------- -downgrades Folder of downgrade scripts for this release -upgrades Folder of upgrade scripts for this release -common_setup.sql Common setup script. Contains values for install/uninstall. -install.sql Install script. Run as SYSTEM. -installO.LST Example of a successfull install. -proftab.sql DBMS_PROFILER tables. Copied from ?/rdbms/admin/proftab.sql. -proftab_comments.sql Table/column comments on DBMS_PROFILER tables. -RELEASE_NOTES.txt Release Notes for this release -test_all.sql SQL script to execute all Test Runners. -test_allO.LST Example of successful results from all Test Runners. -uninstall.sql Uninstall script. Run as SYSTEM. -uninstallO.LST Example of a successfull uninstall. -wt_assert.pkb WT_ASSERT package body. -wt_assert.pks WT_ASSERT package specification. -wt_dbout_profiles.tab WT_DBOUT_PROFILES table. -wt_profiler.pkb WT_PROFILER package body. -wt_profiler.pks WT_PROFILER package specification. -wt_result.pkb WT_RESULT package body. -wt_result.pks WT_RESULT package specification. -wt_results.tab WT_RESULTS table. -wt_self_test.tab WT_SELF_TEST Table and Data. Used for self-test -wt_test_run_stat.pkb WT_TEST_RUN_STAT package body. -wt_test_run_stat.pks WT_TEST_RUN_STAT package specification. -wt_test_run_stats.tab WT_TEST_RUN_STATS table. -wt_test_runs.tab WT_TEST_RUNS table. -wt_testcase_stats.tab WT_TESTCASE_STATS table. -wt_text_report.pkb WT_TEXT_REPORT package body. -wt_text_report.pks WT_TEXT_REPORT package specification. -wt_version.tab WT_VERSION table. -wtplsql.pkb WTPLSQL package body. -wtplsql.pks WTPLSQL package specification. - - -NOTE: "install.sql" creates PUBLIC SYNONYMS. - - -Install Procedure: ------------------- -1) sqlplus SYS/password as SYSDBA @install -2) exit -3) Compare install.LST to installO.LST - - -UnInstall Procedure: --------------------- -1) sqlplus SYS/password as SYSDBA @uninstall -2) exit -3) Compare uninstall.LST to uninstallO.LST diff --git a/src/core/RELEASE_NOTES.txt b/src/core/RELEASE_NOTES.txt deleted file mode 100644 index c326ffd..0000000 --- a/src/core/RELEASE_NOTES.txt +++ /dev/null @@ -1,90 +0,0 @@ - -wtPLSQL 1.1.0 Release Notes: - -New Features: -------------- - -) Added THROWS assertion. - -) Fully implemented the utPLSQL V1 UT_ASSERT API for implemented assertions. - -) Exceptions from "query" assertions are now handled. - -) Streamlined WT_TEXT_REPORT output. - -) Added WT_TEST_RUN_STATS and WT_TESTCASE_STATS summary tables. - -) Added comments to DBMS_PROFILER tables. - -) Changed ANNO annotation to IGNR in WT_DBOUT_PROFILES table. - -) Added units to time columns in WT_DBOUT_PROFILES table. - -) Improved robustness of WT_PROFILER package. - -) Corrected problems with wtPLSQL non-owner testing. - -Detailed Changes: ------------------ -Permission Changes: - revoke connect, resource from &schema_owner.; - revoke select, insert, delete on plsql_profiler_runs from public; - revoke select, insert, delete on plsql_profiler_units from public; - revoke select, insert, delete on plsql_profiler_data from public; - revoke insert on wt_results from public; - revoke insert on wt_dbout_profiles from public; - revoke update on wt_dbout_profiles from public; - alter user &schema_owner. quota unlimited on USERS; - grant create session to &schema_owner.; - grant create type to &schema_owner.; - grant create sequence to &schema_owner.; - grant create table to &schema_owner.; - grant create trigger to &schema_owner.; - grant create view to &schema_owner.; - grant create procedure to &schema_owner.; - grant select on dba_source to &schema_owner.; - grant select on dba_objects to &schema_owner.; - grant select on wt_test_runs_seq to public; - grant execute on wtplsql to public; - grant execute on wt_assert to public; - grant execute on wt_text_report to public; -Public Synonym Changes: - drop public synonym wt_not_executable; - drop public synonym plsql_profiler_runs; - drop public synonym plsql_profiler_units; - drop public synonym plsql_profiler_data; - drop public synonym wt_profiler; - drop public synonym wt_result; - create or replace public synonym utassert for &schema_owner..wt_assert; - create or replace public synonym wt_version for &schema_owner..wt_version; - create or replace public synonym wt_test_runs_seq for &schema_owner..wt_test_runs_seq; - create or replace public synonym wt_test_run_stats for &schema_owner..wt_test_run_stats; - create or replace public synonym wt_testcase_stats for &schema_owner..wt_testcase_stats; - create or replace public synonym wt_self_test for &schema_owner..wt_self_test; - grant select on plsql_profiler_runnumber to public; -Add Profile Table Comments - @proftab_comments.sql -Table Changes: - drop table wt_test_data; - wt_version.tab - wt_testcase_stats.tab - wt_test_run_stats.tab - wt_self_test.tab - wt_test_runs.tab - @wt_results.tab - alter table wt_results rename column elapsed_msecs to interval_msecs; - comment on column wt_results.interval_msecs - alter table wt_dbout_profiles rename column total_time to total_usecs; - alter table wt_dbout_profiles rename column min_time to min_usecs; - alter table wt_dbout_profiles rename column max_time to max_usecs; - comment on column wt_dbout_profiles.status - comment on column wt_dbout_profiles.total_usecs - comment on column wt_dbout_profiles.min_usecs - comment on column wt_dbout_profiles.max_usecs - alter table wt_dbout_profiles drop constraint wt_dbout_profiles_ck1; - update wt_dbout_profiles set status = 'IGNR' where status = 'ANNO'; - alter table wt_dbout_profiles add constraint wt_dbout_profiles_ck1 check (status in ('EXEC','NOTX','EXCL','IGNR','UNKN')); - update_all_stats.sql -Packages: - wtplsql.pks - wtplsql.pkb - wt_result.pks - wt_result.pkb - wt_assert.pks - wt_assert.pkb - wt_profiler.pks - wt_profiler.pkb - wt_test_run_stat.pks - wt_test_run_stat.pkb - wt_text_report.pks - wt_text_report.pkb diff --git a/src/core/common_setup.sql b/src/core/common_setup.sql deleted file mode 100644 index ff9afb4..0000000 --- a/src/core/common_setup.sql +++ /dev/null @@ -1,11 +0,0 @@ - --- --- Core Installation --- - --- Enable SQL*Plus Variables -set define "&" -set concat "." - -accept schema_owner CHAR default 'wtp' - -prompt 'Enter Schema Name (WTP): ' diff --git a/src/core/install.sql b/src/core/install.sql deleted file mode 100644 index b2e32eb..0000000 --- a/src/core/install.sql +++ /dev/null @@ -1,183 +0,0 @@ - --- --- Core Installation --- --- Run as System --- - --- Capture output -spool install -set showmode off -set serveroutput on size unlimited format truncated - --- Shared Setup Script -@common_setup.sql - -WHENEVER SQLERROR exit SQL.SQLCODE - -begin - if USER not in ('SYS','SYSTEM') - then - raise_application_error (-20000, - 'Not logged in as SYS'); - end if; -end; -/ - -WHENEVER SQLERROR continue - --- Create the schema owner. - -create user &schema_owner. identified by &schema_owner. - default tablespace users - quota unlimited on users - temporary tablespace temp; - -grant create session to &schema_owner.; -grant create type to &schema_owner.; -grant create sequence to &schema_owner.; -grant create table to &schema_owner.; -grant create trigger to &schema_owner.; -grant create view to &schema_owner.; -grant create procedure to &schema_owner.; -grant select on dba_source to &schema_owner.; - --- This MUST be run by SYS. -grant select on dba_objects to &schema_owner.; - -begin - for buff in (select p.value PLSQL_CCFLAGS - from dual d - left join v$parameter p - on p.name in 'plsql_ccflags') - loop - dbms_output.put_line('PLSQL_CCFLAGS Before: ' || buff.PLSQL_CCFLAGS); - end loop; -end; -/ - --- This block is IDEMPOTENT. It can run more than once and give --- the same result. -declare - C_FLAG CONSTANT varchar2(100) := 'WTPLSQL_ENABLE:'; - parm_value v$parameter.value%TYPE; - procedure set_plsql_ccflags (in_value in varchar2) is begin - execute immediate 'alter system set PLSQL_CCFLAGS = ''' || - in_value || ''' scope=BOTH'; - end set_plsql_ccflags; -begin - select value into parm_value - from v$parameter - where name in 'plsql_ccflags'; - if nvl(length(parm_value),0) = 0 - then - -- No Flags have been set - set_plsql_ccflags(C_FLAG || 'TRUE'); - elsif instr(parm_value, C_FLAG) = 0 - then - -- C_FLAG is not already present - set_plsql_ccflags(C_FLAG || 'TRUE, ' || parm_value); - end if; -end; -/ - -begin - for buff in (select p.value PLSQL_CCFLAGS - from dual d - left join v$parameter p - on p.name in 'plsql_ccflags') - loop - dbms_output.put_line('PLSQL_CCFLAGS After: ' || buff.PLSQL_CCFLAGS); - end loop; -end; -/ - --- Public Synonyms - -create or replace public synonym wt_version for &schema_owner..wt_version; -create or replace public synonym wt_test_runs_seq for &schema_owner..wt_test_runs_seq; -create or replace public synonym wt_test_runs for &schema_owner..wt_test_runs; -create or replace public synonym wt_results for &schema_owner..wt_results; -create or replace public synonym wt_dbout_profiles for &schema_owner..wt_dbout_profiles; -create or replace public synonym wt_test_run_stats for &schema_owner..wt_test_run_stats; -create or replace public synonym wt_testcase_stats for &schema_owner..wt_testcase_stats; -create or replace public synonym wt_self_test for &schema_owner..wt_self_test; - -create or replace public synonym utassert for &schema_owner..wt_assert; -create or replace public synonym wt_assert for &schema_owner..wt_assert; -create or replace public synonym wt_text_report for &schema_owner..wt_text_report; -create or replace public synonym wt_wtplsql for &schema_owner..wtplsql; -create or replace public synonym wtplsql for &schema_owner..wtplsql; - - -WHENEVER SQLERROR exit SQL.SQLCODE - --- Connect as SCHEMA_OWNER -connect &schema_owner./&schema_owner. -set serveroutput on size unlimited format truncated - -begin - if USER != upper('&schema_owner') - then - raise_application_error (-20000, - 'Not logged in as &schema_owner'); - end if; -end; -/ - -WHENEVER SQLERROR continue - --- --- Run Oracle's Profiler Table Installation --- Note1: Tables converted to Global Temporary --- Note2: Includes "Drop Table" and "Drop Sequence" statements --- -@proftab.sql -@proftab_comments.sql --- -create index plsql_profiler_runs_idx1 - on plsql_profiler_runs (run_date); - --- Core Tables -@wt_version.tab -@wt_test_runs.tab -@wt_results.tab -@wt_dbout_profiles.tab -@wt_test_run_stats.tab -@wt_testcase_stats.tab -@wt_self_test.tab - --- Package Specifications -@wtplsql.pks -/ -@wt_result.pks -/ -@wt_assert.pks -/ -@wt_profiler.pks -/ -@wt_test_run_stat.pks -/ -@wt_text_report.pks -/ - -grant execute on wtplsql to public; -grant execute on wt_assert to public; -grant execute on wt_text_report to public; - --- Package Bodies -@wtplsql.pkb -/ -@wt_result.pkb -/ -@wt_assert.pkb -/ -@wt_profiler.pkb -/ -@wt_test_run_stat.pkb -/ -@wt_text_report.pkb -/ - -set showmode on -spool off diff --git a/src/core/installO.LST b/src/core/installO.LST deleted file mode 100644 index 184178c..0000000 --- a/src/core/installO.LST +++ /dev/null @@ -1,667 +0,0 @@ -old: showmode BOTH - -PL/SQL procedure successfully completed. - -old:create user &schema_owner. identified by &schema_owner. - default tablespace users - quota unlimited on users - temporary tablespace temp -new:create user wtp identified by wtp - default tablespace users - quota unlimited on users - temporary tablespace temp - -User WTP created. - -old:grant create session to &schema_owner. -new:grant create session to wtp - -Grant succeeded. - -old:grant create type to &schema_owner. -new:grant create type to wtp - -Grant succeeded. - -old:grant create sequence to &schema_owner. -new:grant create sequence to wtp - -Grant succeeded. - -old:grant create table to &schema_owner. -new:grant create table to wtp - -Grant succeeded. - -old:grant create trigger to &schema_owner. -new:grant create trigger to wtp - -Grant succeeded. - -old:grant create view to &schema_owner. -new:grant create view to wtp - -Grant succeeded. - -old:grant create procedure to &schema_owner. -new:grant create procedure to wtp - -Grant succeeded. - -old:grant select on dba_source to &schema_owner. -new:grant select on dba_source to wtp - -Grant succeeded. - -old:grant select on dba_objects to &schema_owner. -new:grant select on dba_objects to wtp - -Grant succeeded. - -PLSQL_CCFLAGS Before: WTPLSQL_ENABLE:TRUE, WTPLSQL_SELFTEST:TRUE - - -PL/SQL procedure successfully completed. - - -PL/SQL procedure successfully completed. - -PLSQL_CCFLAGS After: WTPLSQL_ENABLE:TRUE, WTPLSQL_SELFTEST:TRUE - - -PL/SQL procedure successfully completed. - -old:create or replace public synonym wt_version for &schema_owner..wt_version -new:create or replace public synonym wt_version for wtp.wt_version - -Synonym WT_VERSION created. - -old:create or replace public synonym wt_test_runs_seq for &schema_owner..wt_test_runs_seq -new:create or replace public synonym wt_test_runs_seq for wtp.wt_test_runs_seq - -Synonym WT_TEST_RUNS_SEQ created. - -old:create or replace public synonym wt_test_runs for &schema_owner..wt_test_runs -new:create or replace public synonym wt_test_runs for wtp.wt_test_runs - -Synonym WT_TEST_RUNS created. - -old:create or replace public synonym wt_results for &schema_owner..wt_results -new:create or replace public synonym wt_results for wtp.wt_results - -Synonym WT_RESULTS created. - -old:create or replace public synonym wt_dbout_profiles for &schema_owner..wt_dbout_profiles -new:create or replace public synonym wt_dbout_profiles for wtp.wt_dbout_profiles - -Synonym WT_DBOUT_PROFILES created. - -old:create or replace public synonym wt_test_run_stats for &schema_owner..wt_test_run_stats -new:create or replace public synonym wt_test_run_stats for wtp.wt_test_run_stats - -Synonym WT_TEST_RUN_STATS created. - -old:create or replace public synonym wt_testcase_stats for &schema_owner..wt_testcase_stats -new:create or replace public synonym wt_testcase_stats for wtp.wt_testcase_stats - -Synonym WT_TESTCASE_STATS created. - -old:create or replace public synonym wt_self_test for &schema_owner..wt_self_test -new:create or replace public synonym wt_self_test for wtp.wt_self_test - -Synonym WT_SELF_TEST created. - -old:create or replace public synonym utassert for &schema_owner..wt_assert -new:create or replace public synonym utassert for wtp.wt_assert - -Synonym UTASSERT created. - -old:create or replace public synonym wt_assert for &schema_owner..wt_assert -new:create or replace public synonym wt_assert for wtp.wt_assert - -Synonym WT_ASSERT created. - -old:create or replace public synonym wt_text_report for &schema_owner..wt_text_report -new:create or replace public synonym wt_text_report for wtp.wt_text_report - -Synonym WT_TEXT_REPORT created. - -old:create or replace public synonym wt_wtplsql for &schema_owner..wtplsql -new:create or replace public synonym wt_wtplsql for wtp.wtplsql - -Synonym WT_WTPLSQL created. - -old:create or replace public synonym wtplsql for &schema_owner..wtplsql -new:create or replace public synonym wtplsql for wtp.wtplsql - -Synonym WTPLSQL created. - -Connected. -old:begin - if USER != upper('&schema_owner') - then - raise_application_error (-20000, - 'Not logged in as &schema_owner'); - end if; -end; - -new:begin - if USER != upper('wtp') - then - raise_application_error (-20000, - 'Not logged in as wtp'); - end if; -end; - -PL/SQL procedure successfully completed. - - -Error starting at line : 46 File @ C:\Users\Duane\Documents\GitHub\wtPLSQL\src\core\proftab.sql -In command - -drop table plsql_profiler_data cascade constraints -Error report - -ORA-00942: table or view does not exist -00942. 00000 - "table or view does not exist" -*Cause: -*Action: - -Error starting at line : 47 File @ C:\Users\Duane\Documents\GitHub\wtPLSQL\src\core\proftab.sql -In command - -drop table plsql_profiler_units cascade constraints -Error report - -ORA-00942: table or view does not exist -00942. 00000 - "table or view does not exist" -*Cause: -*Action: - -Error starting at line : 48 File @ C:\Users\Duane\Documents\GitHub\wtPLSQL\src\core\proftab.sql -In command - -drop table plsql_profiler_runs cascade constraints -Error report - -ORA-00942: table or view does not exist -00942. 00000 - "table or view does not exist" -*Cause: -*Action: - -Error starting at line : 50 File @ C:\Users\Duane\Documents\GitHub\wtPLSQL\src\core\proftab.sql -In command - -drop sequence plsql_profiler_runnumber -Error report - -ORA-02289: sequence does not exist -02289. 00000 - "sequence does not exist" -*Cause: The specified sequence does not exist, or the user does - not have the required privilege to perform this operation. -*Action: Make sure the sequence name is correct, and that you have - the right to perform the desired operation on this sequence. - -Table PLSQL_PROFILER_RUNS created. - - -Comment created. - - -Table PLSQL_PROFILER_UNITS created. - - -Comment created. - - -Table PLSQL_PROFILER_DATA created. - - -Comment created. - - -Sequence PLSQL_PROFILER_RUNNUMBER created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Index PLSQL_PROFILER_RUNS_IDX1 created. - - -Table WT_VERSION created. - - -Comment created. - - -Comment created. - - -Comment created. - - -1 row inserted. - - -Commit complete. - - -Grant succeeded. - - -Sequence WT_TEST_RUNS_SEQ created. - - -Grant succeeded. - - -Table WT_TEST_RUNS created. - - -Index WT_TEST_RUNS_IDX1 created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Grant succeeded. - - -Grant succeeded. - - -Grant succeeded. - - -Table WT_RESULTS created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Grant succeeded. - - -Grant succeeded. - - -Table WT_DBOUT_PROFILES created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Grant succeeded. - - -Grant succeeded. - - -Table WT_TEST_RUN_STATS created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Grant succeeded. - - -Grant succeeded. - - -Table WT_TESTCASE_STATS created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Grant succeeded. - - -Grant succeeded. - - -Table WT_SELF_TEST created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Comment created. - - -Trigger WT_SELF_TEST$TEST compiled - - -PL/SQL procedure successfully completed. - - -Commit complete. - - -Package WTPLSQL compiled - - -Package WT_RESULT compiled - - -Package WT_ASSERT compiled - - -Package WT_PROFILER compiled - - -Package WT_TEST_RUN_STAT compiled - - -Package WT_TEXT_REPORT compiled - - -Grant succeeded. - - -Grant succeeded. - - -Grant succeeded. - - -Package Body WTPLSQL compiled - - -Package Body WT_RESULT compiled - - -Package Body WT_ASSERT compiled - - -Package Body WT_PROFILER compiled - - -Package Body WT_TEST_RUN_STAT compiled - - -Package Body WT_TEXT_REPORT compiled - -new: showmode BOTH diff --git a/src/core/proftab.sql b/src/core/proftab.sql deleted file mode 100644 index 1ccf0a0..0000000 --- a/src/core/proftab.sql +++ /dev/null @@ -1,112 +0,0 @@ -Rem -Rem $Header: proftab.sql 07-oct-99.11:04:02 jmuller Exp $ -Rem -Rem proftab.sql -Rem -Rem Copyright (c) Oracle Corporation 1998, 1999. All Rights Reserved. -Rem -Rem NAME -Rem proftab.sql -Rem -Rem DESCRIPTION -Rem Create tables for the PL/SQL profiler -Rem -Rem NOTES -Rem The following tables are required to collect data: -Rem plsql_profiler_runs - information on profiler runs -Rem plsql_profiler_units - information on each lu profiled -Rem plsql_profiler_data - profiler data for each lu profiled -Rem -Rem The plsql_profiler_runnumber sequence is used for generating unique -Rem run numbers. -Rem -Rem The tables and sequence can be created in the schema for each user -Rem who wants to gather profiler data. Alternately these tables can be -Rem created in a central schema. In the latter case the user creating -Rem these objects is responsible for granting appropriate privileges -Rem (insert,update on the tables and select on the sequence) to all -Rem users who want to store data in the tables. Appropriate synonyms -Rem must also be created so the tables are visible from other user -Rem schemas. -Rem -Rem The other tables are used for rolling up to line level; the views are -Rem used to roll up across multiple runs. These are not required to -Rem collect data, but help with analysis of the gathered data. -Rem -Rem THIS SCRIPT DELETES ALL EXISTING DATA! -Rem -Rem MODIFIED (MM/DD/YY) -Rem jmuller 10/07/99 - Fix bug 708690: TAB -> blank -Rem astocks 04/19/99 - Add owner,related_run field to runtab -Rem astocks 10/21/98 - Add another spare field -Rem ciyer 09/15/98 - Create tables for profiler -Rem ciyer 09/15/98 - Created -Rem - -drop table plsql_profiler_data cascade constraints; -drop table plsql_profiler_units cascade constraints; -drop table plsql_profiler_runs cascade constraints; - -drop sequence plsql_profiler_runnumber; - -create table plsql_profiler_runs -( - runid number primary key, -- unique run identifier, - -- from plsql_profiler_runnumber - related_run number, -- runid of related run (for client/ - -- server correlation) - run_owner varchar2(32), -- user who started run - run_date date, -- start time of run - run_comment varchar2(2047), -- user provided comment for this run - run_total_time number, -- elapsed time for this run - run_system_info varchar2(2047), -- currently unused - run_comment1 varchar2(2047), -- additional comment - spare1 varchar2(256) -- unused -); - -comment on table plsql_profiler_runs is - 'Run-specific information for the PL/SQL profiler'; - -create table plsql_profiler_units -( - runid number references plsql_profiler_runs, - unit_number number, -- internally generated library unit # - unit_type varchar2(32), -- library unit type - unit_owner varchar2(32), -- library unit owner name - unit_name varchar2(32), -- library unit name - -- timestamp on library unit, can be used to detect changes to - -- unit between runs - unit_timestamp date, - total_time number DEFAULT 0 NOT NULL, - spare1 number, -- unused - spare2 number, -- unused - -- - primary key (runid, unit_number) -); - -comment on table plsql_profiler_units is - 'Information about each library unit in a run'; - -create table plsql_profiler_data -( - runid number, -- unique (generated) run identifier - unit_number number, -- internally generated library unit # - line# number not null, -- line number in unit - total_occur number, -- number of times line was executed - total_time number, -- total time spent executing line - min_time number, -- minimum execution time for this line - max_time number, -- maximum execution time for this line - spare1 number, -- unused - spare2 number, -- unused - spare3 number, -- unused - spare4 number, -- unused - -- - primary key (runid, unit_number, line#), - foreign key (runid, unit_number) references plsql_profiler_units -); - -comment on table plsql_profiler_data is - 'Accumulated data from all profiler runs'; - -create sequence plsql_profiler_runnumber start with 1 nocache; - diff --git a/src/core/proftab_comments.sql b/src/core/proftab_comments.sql deleted file mode 100644 index 1294d2a..0000000 --- a/src/core/proftab_comments.sql +++ /dev/null @@ -1,42 +0,0 @@ - --- --- Comments taken from --- Oracle Database Online Documentation 11g Release 2 (11.2) --- Database PL/SQL Packages and Types Reference --- https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_profil.htm#ARPLS67461 --- - -comment on table PLSQL_PROFILER_RUNS is 'Table of profiler runs for DBMS_PROFILER'; -comment on column PLSQL_PROFILER_RUNS.runid is '(PRIMARY KEY) Unique run identifier from plsql_profiler_runnumber'; -comment on column PLSQL_PROFILER_RUNS.related_run is 'Runid of related run (for client/server correlation)'; -comment on column PLSQL_PROFILER_RUNS.run_owner is 'User who started run'; -comment on column PLSQL_PROFILER_RUNS.run_date is 'Start time of run'; -comment on column PLSQL_PROFILER_RUNS.run_comment is 'User provided comment for this run'; -comment on column PLSQL_PROFILER_RUNS.run_total_time is 'Elapsed time for this run in nanoseconds'; -comment on column PLSQL_PROFILER_RUNS.run_system_info is 'Currently unused'; -comment on column PLSQL_PROFILER_RUNS.run_comment1 is 'Additional comment'; -comment on column PLSQL_PROFILER_RUNS.spare1 is 'Unused'; - -comment on table PLSQL_PROFILER_UNITS is 'Table of program units for DBMS_PROFILER'; -comment on column PLSQL_PROFILER_UNITS.runid is '(Primary key) References plsql_profiler_runs'; -comment on column PLSQL_PROFILER_UNITS.unit_number is '(Primary key) Internally generated library unit #'; -comment on column PLSQL_PROFILER_UNITS.unit_type is 'Library unit type'; -comment on column PLSQL_PROFILER_UNITS.unit_owner is 'Library unit owner name'; -comment on column PLSQL_PROFILER_UNITS.unit_name is 'Library unit name timestamp on library unit'; -comment on column PLSQL_PROFILER_UNITS.unit_timestamp is 'In the future will be used to detect changes to unit between runs'; -comment on column PLSQL_PROFILER_UNITS.total_time is 'Total time spent in this unit in nanoseconds. The profiler does not set this field, but it is provided for the convenience of analysis tools'; -comment on column PLSQL_PROFILER_UNITS.spare1 is 'Unused'; -comment on column PLSQL_PROFILER_UNITS.spare2 is 'Unused'; - -comment on table PLSQL_PROFILER_DATA is 'Table of program units for DBMS_PROFILER'; -comment on column PLSQL_PROFILER_DATA.runid is 'Primary key, unique (generated) run identifier'; -comment on column PLSQL_PROFILER_DATA.unit_number is 'Primary key, internally generated library unit number'; -comment on column PLSQL_PROFILER_DATA.line# is 'Primary key, not null, line number in unit'; -comment on column PLSQL_PROFILER_DATA.total_occur is 'Number of times line was executed'; -comment on column PLSQL_PROFILER_DATA.total_time is 'Total time spent executing line in nanoseconds'; -comment on column PLSQL_PROFILER_DATA.min_time is 'Minimum execution time for this line in nanoseconds'; -comment on column PLSQL_PROFILER_DATA.max_time is 'Maximum execution time for this line in nanoseconds'; -comment on column PLSQL_PROFILER_DATA.spare1 is 'Unused'; -comment on column PLSQL_PROFILER_DATA.spare2 is 'Unused'; -comment on column PLSQL_PROFILER_DATA.spare3 is 'Unused'; -comment on column PLSQL_PROFILER_DATA.spare4 is 'Unused'; diff --git a/src/core/test_all.sql b/src/core/test_all.sql deleted file mode 100644 index f7b516f..0000000 --- a/src/core/test_all.sql +++ /dev/null @@ -1,36 +0,0 @@ - -spool test_all -set serveroutput on size unlimited format wrapped -set linesize 1000 -set trimspool on - -/* - -alter system - set PLSQL_CCFLAGS = 'WTPLSQL_ENABLE:TRUE, WTPLSQL_SELFTEST:TRUE' - --set PLSQL_CCFLAGS = 'WTPLSQL_ENABLE:TRUE' - scope=BOTH; - -select p.value PLSQL_CCFLAGS - from dual d - left join v$parameter p - on p.name in 'plsql_ccflags'; - -begin - $IF $$WTPLSQL_SELFTEST - $THEN - dbms_output.put_line('WTPLSQL_SELFTEST is TRUE'); - $END - dbms_output.put_line('Check WTPLSQL_SELFTEST is Done.'); -end; -/ - -*/ - -begin - wtplsql.test_all; - wt_text_report.dbms_out(in_detail_level => 30); -end; -/ - -spool off diff --git a/src/core/test_allO.LST b/src/core/test_allO.LST deleted file mode 100644 index d30fbbb..0000000 --- a/src/core/test_allO.LST +++ /dev/null @@ -1,4304 +0,0 @@ - - wtPLSQL 1.1.0 - Run ID 5: 29-Jun-2018 03:21:58 PM - - Test Results for WTP.WTPLSQL - Total Test Cases: 10 Total Assertions: 34 - Minimum Interval msec: 0 Failed Assertions: 0 - Average Interval msec: 3 Error Assertions: 0 - Maximum Interval msec: 39 Test Yield: 100.00% - Total Run Time (sec): 0.1 - - - WTP.WTPLSQL Test Result Details (Test Run ID 5) ------------------------------------------------------------ - ---- Test Case: Show Version Happy Path - PASS 39ms Test Existing Version. ISNOTNULL - Expected NOT NULL and got "1.1.0" - PASS 2ms Test New Version. EQ - Expected "TESTING" and got "TESTING" - PASS 0ms Return to Existing Version. EQ - Expected "1.1.0" and got "1.1.0" - ---- Test Case: CHECK_RUNNER Sad Path 1 - PASS 0ms Null RUNNER_NAME. EQ - Expected "ORA-20001: RUNNER_NAME is null" and got "ORA-20001: RUNNER_NAME is null" - ---- Test Case: CHECK_RUNNER Sad Path 2 - PASS 1ms Invalid RUNNER_NAME. EQ - Expected "ORA-20002: RUNNER_NAME "BOGUS.WTPLSQL_RUN" is not valid" and got "ORA-20002: RUNNER_NAME "BOGUS.WTPLSQL_RUN" is not valid" - ---- Test Case: INSERT_TEST_RUN Happy Path 1 - PASS 3ms Number of Records. EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from wt_test_runs where id = 5 - PASS 2ms Records After Delete. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from wt_test_runs where id = 5 - ---- Test Case: INSERT_TEST_RUN Sad Path 1 - PASS 0ms l_dbmsout_buff.COUNT - 1. ISNOTNULL - Expected NOT NULL and got "0" - PASS 3ms Number of Records should stay the same. EQQUERYVALUE - Expected "4" and got "4" for Query: select count(*) from wt_test_runs - PASS 0ms DBMS_OUTPUT Status. EQ - Expected "0" and got "0" - PASS 0ms DBMS_OUTPUT Line. ISNOTNULL - Expected NOT NULL and got "ORA-01400: cannot insert NULL into ("WTP"."WT_TEST_RUNS"."START_DTM")\nORA-06512: at "WTP.WTPLSQL", line 106\n" - PASS 0ms Confirm DBMS_OUTPUT Line text. THIS - Expected "TRUE" and got "TRUE" - PASS 0ms l_dbmsout_buff.COUNT - 1. ISNOTNULL - Expected NOT NULL and got "0" - ---- Test Case: TEST_ALL Happy Path - PASS 2ms test_all_aa.EXISTS('WTPLSQL'). THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: DELETE_RUNS Happy Path 1 - PASS 20ms Number of Records Before Insert. ISNOTNULL - Expected NOT NULL and got "1" - PASS 0ms Number of Records Before Insert <= 20. THIS - Expected "TRUE" and got "TRUE" - PASS 1ms Number of Records After Insert. EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from wt_test_runs where id = 5 - PASS 23ms Number of Records After Delete. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from wt_test_runs where id = 5 - ---- Test Case: DELETE_RUNS Happy Path 2 - PASS 3ms Confirm number of records. EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from wt_test_runs where runner_owner = 'WTP' and runner_name = 'WTPLSQL' - PASS 3ms Check Added 20 records. EQQUERYVALUE - Expected "21" and got "21" for Query: select count(*) from wt_test_runs where runner_owner = 'WTP' and runner_name = 'WTPLSQL' - PASS 8ms Check number of records reduced. EQQUERYVALUE - Expected "20" and got "20" for Query: select count(*) from wt_test_runs where runner_owner = 'WTP' and runner_name = 'WTPLSQL' - PASS 3ms Confirm original number of records. EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from wt_test_runs where runner_owner = 'WTP' and runner_name = 'WTPLSQL' - ---- Test Case: DELETE_RUNS Sad Path 1 - PASS 2ms Delete Runs(-9995). ISNULL - Expected NULL and got "" - ---- Test Case: TEST_RUNS_REC_AND_TABLE Happy Path - PASS 0ms g_test_runs_rec.id. ISNOTNULL - Expected NOT NULL and got "5" - PASS 0ms g_test_runs_rec.start_dtm. ISNOTNULL - Expected NOT NULL and got "29-JUN-2018 15:21:58.271000" - PASS 0ms g_test_runs_rec.runner_owner. ISNOTNULL - Expected NOT NULL and got "WTP" - PASS 0ms g_test_runs_rec.runner_name. EQ - Expected "WTPLSQL" and got "WTPLSQL" - PASS 0ms g_test_runs_rec.dbout_owner. ISNULL - Expected NULL and got "" - PASS 0ms g_test_runs_rec.dbout_name. ISNULL - Expected NULL and got "" - PASS 0ms g_test_runs_rec.dbout_type. ISNULL - Expected NULL and got "" - PASS 0ms g_test_runs_rec.profiler_runid. ISNULL - Expected NULL and got "" - PASS 0ms g_test_runs_rec.end_dtm. ISNULL - Expected NULL and got "" - PASS 0ms g_test_runs_rec.error_message. ISNULL - Expected NULL and got "" - PASS 2ms TEST_RUNS Record for this TEST_RUN. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from WT_TEST_RUNS where id = '5' - - - wtPLSQL 1.1.0 - Run ID 6: 29-Jun-2018 03:21:58 PM - - Test Results for WTP.WT_ASSERT - Total Test Cases: 150 Total Assertions: 404 - Minimum Interval msec: 0 Failed Assertions: 0 - Average Interval msec: 5 Error Assertions: 0 - Maximum Interval msec: 496 Test Yield: 100.00% - Total Run Time (sec): 2.0 - - Code Coverage for PACKAGE BODY WTP.WT_ASSERT - Ignored Lines: 1103 Total Profiled Lines: 1464 - Excluded Lines: 7 Total Executed Lines: 309 - Minimum LineExec usec: 0 Not Executed Lines: 1 - Average LineExec usec: 344 Unknown Lines: 44 - Maximum LineExec usec: 68989 Code Coverage: 99.70% - Trigger Source Offset: 0 - - - WTP.WT_ASSERT Test Result Details (Test Run ID 6) ------------------------------------------------------------ - ---- Test Case: BOOLEAN_TO_STATUS - PASS 172ms Test for "TRUE" conversion. EQ - Expected "TRUE" and got "TRUE" - PASS 1ms Test for "FALSE" conversion. EQ - Expected "FALSE" and got "FALSE" - PASS 0ms Test for NULL. ISNULL - Expected NULL and got "" - ---- Test Case: COMPARE_QUERIES Bad Query Test 1 - PASS 3ms temp_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - PASS 0ms temp_rec.last_details value. ISNOTNULL - Expected NOT NULL and got "ORA-06550: line 2, column 60:\nPL/SQL: ORA-00942: table or view does not exist\nORA-06550: line 2, column 18:\nPL/SQL: SQL Statement ignored\nORA-06550: line 2, column 11:\nPLS-00341: declaration of cursor 'CUR' is incomplete or malformed\nORA-06550: line 3, column 8:\nPL/SQL: Item ignored\nORA-06550: line 6, column 19:\nPLS-00320: the declaration of the type of this expression is incomplete or malformed\nORA-06550: line 6, column 4:\nPL/SQL: SQL Statement ignored\nFAILURE of Compare Query: with check_query as (select bogus123 from bogus456), against_query as (select bogus987 from bogus654), q1 as (select * from check_query MINUS select * from against_query), q2 as (select * from against_query MINUS select * from check_query) select * from q1 UNION select * from q2;" - PASS 1ms temp_rec.last_details. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: COMPARE_QUERIES Bad Query Test 2 - PASS 291ms temp_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - PASS 0ms temp_rec.last_details value. ISNOTNULL - Expected NOT NULL and got "Comparison Query: with check_query as (select table_name from user_tables), against_query as (select tablespace_name from user_tables), q1 as (select * from check_query MINUS select * from against_query), q2 as (select * from against_query MINUS select * from check_query) select * from q1 UNION select * from q2" - PASS 0ms temp_rec.last_details. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: NLS Settings - PASS 0ms get_NLS_DATE_FORMAT 1. EQ - Expected "DD-MON-YYYY" and got "DD-MON-YYYY" - PASS 0ms get_NLS_DATE_FORMAT 2. EQ - Expected "DD-MON-YYYY HH24:MI:SS" and got "DD-MON-YYYY HH24:MI:SS" - PASS 1ms get_NLS_TIMESTAMP_FORMAT 2. EQ - Expected "DD-MON-YYYY" and got "DD-MON-YYYY" - PASS 0ms get_NLS_TIMESTAMP_FORMAT 2. EQ - Expected "DD-MON-YYYY HH24:MI:SS.FF6" and got "DD-MON-YYYY HH24:MI:SS.FF6" - PASS 1ms get_NLS_TIMESTAMP_TZ_FORMAT 2. EQ - Expected "DD-MON-YYYY" and got "DD-MON-YYYY" - PASS 0ms get_NLS_TIMESTAMP_TZ_FORMAT 2. EQ - Expected "DD-MON-YYYY HH24:MI:SS.FF6 TZH:TZM" and got "DD-MON-YYYY HH24:MI:SS.FF6 TZH:TZM" - ---- Test Case: Last Values Tests - PASS 0ms Last Pass. EQ - Expected "TRUE" and got "TRUE" - PASS 0ms Last Assert. EQ - Expected "EQ" and got "EQ" - PASS 0ms Last MSG. EQ - Expected "Last Assert" and got "Last Assert" - PASS 0ms Last Details. EQ - Expected "Expected "Last Assert" and got "Last Assert"" and got "Expected "Last Assert" and got "Last Assert"" - ---- Test Case: RESET_GLOBALS - PASS 0ms temp_testcase. ISNULL - Expected NULL and got "" - PASS 0ms temp_rec.last_pass. ISNULL - Expected NULL and got "" - PASS 0ms temp_rec.raise_exception. EQ - Expected "FALSE" and got "FALSE" - PASS 0ms temp_rec.last_assert. ISNULL - Expected NULL and got "" - PASS 1ms temp_rec.last_msg. ISNULL - Expected NULL and got "" - PASS 0ms temp_rec.last_details. ISNULL - Expected NULL and got "" - ---- Test Case: This Happy Path - PASS 0ms Run Test. THIS - Expected "TRUE" and got "TRUE" - PASS 0ms temp_rec.last_pass. EQ - Expected "TRUE" and got "TRUE" - PASS 0ms temp_rec.last_assert. EQ - Expected "THIS" and got "THIS" - PASS 0ms temp_rec.last_msg. EQ - Expected "Run Test" and got "Run Test" - PASS 0ms temp_rec.last_details. EQ - Expected "Expected "TRUE" and got "TRUE"" and got "Expected "TRUE" and got "TRUE"" - ---- Test Case: This Sad Path 1 - PASS 0ms temp_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - ---- Test Case: This Sad Path 2 - PASS 0ms RAISE_EXC_IN Test, Exception Raised?. EQ - Expected "TRUE" and got "TRUE" - PASS 0ms temp_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - ---- Test Case: This Sad Path 3 - PASS 0ms temp_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - ---- Test Case: EQ VARCHAR2 Happy Path 1 - PASS 0ms Run Test. EQ - Expected "X" and got "X" - PASS 0ms temp_rec.last_pass value. ISNOTNULL - Expected NOT NULL and got "TRUE" - PASS 0ms temp_rec.last_pass. THIS - Expected "TRUE" and got "TRUE" - PASS 0ms temp_rec.last_assert value. ISNOTNULL - Expected NOT NULL and got "EQ" - PASS 1ms temp_rec.last_assert. THIS - Expected "TRUE" and got "TRUE" - PASS 0ms temp_rec.last_msg value. ISNOTNULL - Expected NOT NULL and got "Run Test" - PASS 0ms temp_rec.last_msg. THIS - Expected "TRUE" and got "TRUE" - PASS 0ms temp_rec.last_details value. ISNOTNULL - Expected NOT NULL and got "Expected "X" and got "X"" - PASS 0ms temp_rec.last_details. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ VARCHAR2 Happy Path 2 - PASS 0ms Run Test. EQ - Expected "X" and got "X" - ---- Test Case: EQ VARCHAR2 Happy Path 3 - PASS 0ms Run Test. EQ - Expected "" and got "" - ---- Test Case: EQ VARCHAR2 Sad Path 1 - PASS 0ms check_this_in value. ISNOTNULL - Expected NOT NULL and got "X" - PASS 0ms against_this_in value. ISNOTNULL - Expected NOT NULL and got "Y" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ VARCHAR2 Sad Path 2 - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - PASS 0ms RAISE_EXC_IN Test, Exception Raised?. EQ - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ VARCHAR2 Sad Path 3 - PASS 0ms check_this_in value. ISNULL - Expected NULL and got "" - PASS 0ms against_this_in value. ISNOTNULL - Expected NOT NULL and got "Y" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ VARCHAR2 Sad Path 4 - PASS 0ms check_this_in value. ISNULL - Expected NULL and got "" - PASS 0ms against_this_in value. ISNULL - Expected NULL and got "" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ VARCHAR2 Sad Path 5 - PASS 0ms check_this_in value. ISNOTNULL - Expected NOT NULL and got "X" - PASS 1ms against_this_in value. ISNOTNULL - Expected NOT NULL and got "Y" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ VARCHAR2 Sad Path 6 - PASS 0ms check_this_in value. ISNULL - Expected NULL and got "" - PASS 0ms against_this_in value. ISNOTNULL - Expected NOT NULL and got "Y" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ ROWID Happy Path 1 - PASS 0ms Run Test. EQ - Expected "AAAFd1AAFAAAABSAA/" and got "AAAFd1AAFAAAABSAA/" - ---- Test Case: EQ ROWID Sad Path 1 - PASS 0ms check_this_in value. ISNOTNULL - Expected NOT NULL and got "AAAFd1AAFAAAABSAA/" - PASS 0ms against_this_in value. ISNOTNULL - Expected NOT NULL and got "AAAFd1AAFAAAABSAB/" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ LONG Happy Path 1 - PASS 0ms Run Test. EQ - Expected "0123456789ABCDEF0123456789ABCDEF" and got "0123456789ABCDEF0123456789ABCDEF" - ---- Test Case: EQ LONG Sad Path 1 - PASS 0ms check_this_in value. ISNOTNULL - Expected NOT NULL and got "0123456789ABCDEF0123456789ABCDEF" - PASS 0ms against_this_in value. ISNOTNULL - Expected NOT NULL and got "FEDCBA9876543210FEDCBA9876543210" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ RAW Happy Path 1 - PASS 0ms Run Test. EQ - Expected "2345" and got "2345" - ---- Test Case: EQ RAW Sad Path 1 - PASS 0ms check_this_in value. ISNOTNULL - Expected NOT NULL and got "2345" - PASS 0ms against_this_in value. ISNOTNULL - Expected NOT NULL and got "6789" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ LANG RAW Happy Path 1 - PASS 0ms Run Test. EQ - Expected "0123456789ABCDEF0123456789ABCDEF" and got "0123456789ABCDEF0123456789ABCDEF" - ---- Test Case: EQ LONG RAW Sad Path 1 - PASS 0ms check_this_in value. ISNOTNULL - Expected NOT NULL and got "0123456789ABCDEF0123456789ABCDEF" - PASS 1ms against_this_in value. ISNOTNULL - Expected NOT NULL and got "FEDCBA9876543210FEDCBA9876543210" - PASS 0ms Sad Path 1. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ NVARCHAR2 Happy Path 1 - PASS 0ms Run Test. EQ - Expected "NCHAR1" and got "NCHAR1" - ---- Test Case: EQ NVARCHAR2 Sad Path 1 - PASS 0ms check_this_in value. ISNOTNULL - Expected NOT NULL and got "NCHAR1" - PASS 0ms against_this_in value. ISNOTNULL - Expected NOT NULL and got "NCHAR2" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ BOOLEAN Happy Path 1 - PASS 0ms Run Test. EQ - Expected "FALSE" and got "FALSE" - ---- Test Case: EQ BOOLEAN Happy Path 2 - PASS 0ms Run Test. EQ - Expected "FALSE" and got "FALSE" - ---- Test Case: EQ BOOLEAN Happy Path 3 - PASS 0ms Run Test. EQ - Expected "" and got "" - ---- Test Case: EQ BOOLEAN Happy Sad 1 - PASS 0ms check_this_in value. ISNOTNULL - Expected NOT NULL and got "FALSE" - PASS 0ms against_this_in value. ISNOTNULL - Expected NOT NULL and got "TRUE" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ BOOLEAN Happy Sad 2 - PASS 0ms check_this_in value. ISNOTNULL - Expected NOT NULL and got "FALSE" - PASS 0ms against_this_in value. ISNULL - Expected NULL and got "" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ BOOLEAN Happy Sad 3 - PASS 0ms check_this_in value. ISNOTNULL - Expected NOT NULL and got "FALSE" - PASS 1ms against_this_in value. ISNOTNULL - Expected NOT NULL and got "TRUE" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ BOOLEAN Happy Sad 4 - PASS 0ms check_this_in value. ISNOTNULL - Expected NOT NULL and got "FALSE" - PASS 0ms against_this_in value. ISNULL - Expected NULL and got "" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ NUMBER Happy Path 1 - PASS 0ms Run Test. EQ - Expected "4" and got "4" - ---- Test Case: EQ NUMBER Happy Path 2 - PASS 0ms Run Test. EQ - Expected "9876543210987654321098765432109876543210" and got "9876543210987654321098765432109876543210" - ---- Test Case: EQ NUMBER Happy Path 1 - PASS 0ms check_this_in value. ISNOTNULL - Expected NOT NULL and got "4" - PASS 0ms against_this_in value. ISNOTNULL - Expected NOT NULL and got "5" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ PLS_INTEGER Happy Path 1 - PASS 0ms Run Test. EQ - Expected "2" and got "2" - ---- Test Case: EQ PLS_INTEGER Sad Path 1 - PASS 0ms check_this_in value. ISNOTNULL - Expected NOT NULL and got "2" - PASS 0ms against_this_in value. ISNOTNULL - Expected NOT NULL and got "3" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ DATE Happy Path 1 - PASS 0ms Run Test. EQ - Expected "29-JUN-2018 15:21:58" and got "29-JUN-2018 15:21:58" - ---- Test Case: EQ DATE Sad Path 1 - PASS 0ms check_this_in value. ISNOTNULL - Expected NOT NULL and got "29-JUN-2018 15:21:58" - PASS 0ms against_this_in value. ISNOTNULL - Expected NOT NULL and got "29-JUN-2018 16:21:58" - PASS 2ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ TIMSETAMP Happy Path 1 - PASS 0ms EQ TIMSETAMP Happy Path 1. EQ - Expected "29-JUN-2018 15:21:58.278000" and got "29-JUN-2018 15:21:58.278000" - ---- Test Case: EQ TIMSETAMP Sad Path 1 - PASS 0ms check_this_in value. ISNOTNULL - Expected NOT NULL and got "29-JUN-2018 15:21:58.278000" - PASS 0ms against_this_in value. ISNOTNULL - Expected NOT NULL and got "29-JUN-2018 16:21:58" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ TIMSETAMP WITH LOCAL TIME ZONE Happy Path 1 - PASS 0ms Run Test. EQ - Expected "29-JUN-2018 15:21:58.278000 -05:00" and got "29-JUN-2018 15:21:58.278000 -05:00" - ---- Test Case: EQ TIMSETAMP WITH LOCAL TIME ZONE Sad Path 1 - PASS 0ms check_this_in value. ISNOTNULL - Expected NOT NULL and got "29-JUN-2018 15:21:58.278000" - PASS 0ms against_this_in value. ISNOTNULL - Expected NOT NULL and got "29-JUN-2018 16:21:58" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ TIMSETAMP WITH TIME ZONE Happy Path 1 - PASS 0ms Run Test. EQ - Expected "29-JUN-2018 15:21:58.278000 -05:00" and got "29-JUN-2018 15:21:58.278000 -05:00" - ---- Test Case: EQ TIMSETAMP WITH TIME ZONE Sad Path 1 - PASS 1ms check_this_in value. ISNOTNULL - Expected NOT NULL and got "29-JUN-2018 15:21:58.278000 -05:00" - PASS 0ms against_this_in value. ISNOTNULL - Expected NOT NULL and got "29-JUN-2018 16:21:58" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ INTERVAL DAY TO SECOND Happy Path 1 - PASS 0ms Run Test. EQ - Expected "+01 01:01:01.001000" and got "+01 01:01:01.001000" - ---- Test Case: EQ INTERVAL DAY TO SECOND Sad Path 1 - PASS 0ms check_this_in value. ISNOTNULL - Expected NOT NULL and got "+01 01:01:01.001000" - PASS 0ms against_this_in value. ISNOTNULL - Expected NOT NULL and got "+02 02:02:02.002000" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ INTERVAL YEAR TO MONTH Happy Path 1 - PASS 0ms Run Test. EQ - Expected "+01-01" and got "+01-01" - ---- Test Case: EQ INTERVAL YEAR TO MONTH Sad Path 1 - PASS 0ms check_this_in value. ISNOTNULL - Expected NOT NULL and got "+01-01" - PASS 0ms against_this_in value. ISNOTNULL - Expected NOT NULL and got "+02-02" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ XMLTYPE Happy Path 1 - PASS 58ms Run Test. EQ - Expected "\n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n " and got "\n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n " - PASS 1ms temp_rec.last_pass value. ISNOTNULL - Expected NOT NULL and got "TRUE" - PASS 0ms temp_rec.last_pass. THIS - Expected "TRUE" and got "TRUE" - PASS 0ms g_rec.last_assert value. ISNOTNULL - Expected NOT NULL and got "EQ" - PASS 0ms temp_rec.last_assert. THIS - Expected "TRUE" and got "TRUE" - PASS 0ms temp_rec.last_msg value. ISNOTNULL - Expected NOT NULL and got "Run Test" - PASS 0ms temp_rec.last_msg. THIS - Expected "TRUE" and got "TRUE" - PASS 0ms temp_rec.last_details value. ISNOTNULL - Expected NOT NULL and got "Expected "\n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n " and got "\n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n 2016-02-16 13:10:02\n \n \n \n \n 1625\n DOLF072J11595\n 0\n 0\n \n \n 4730\n GS35F4543G\n 0\n \n \n \n 2007-05-04 00:00:00\n 20 -07-04-15 00:00:00\n 2008-04-14 00:00:002" - PASS 0ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ XMLTYPE Sad Path 2 - PASS 21ms last_pass = FALSE. THIS - Expected "TRUE" and got "TRUE" - PASS 0ms RAISE_EXC_IN Test, Exception Raised?. EQ - Expected "TRUE" and got "TRUE" - ---- Test Case: EQ CLOB Happy Path 1 - PASS 3ms Run Test. EQ - Expected "\n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n 2016-02-16 13:10:02\n \n \n \n \n 1625\n DOLF072J11595\n 0\n 0\n \n 4730\n GS35F4543G\n 0\n \n 2007-05-04 00:00:00\n 2007-04-15 0 -0:00:00\n 2008-04-14 00:00:00\n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n 2016-02-16 13:10:02\n \n \n \n \n 1625\n DOLF072J11595\n 0\n 0\n \n 4730\n GS35F4543G\n 0\n \n 2007-05-04 00:00:00\n 2007-04-15 0 -0:00:00\n 2008-04-14 00:00:00\n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n 2016-02-16 13:10:02\n \n \n \n \n 1625\n DOLF072J11595\n 0\n 0\n \n 4730\n GS35F4543G\n 0\n \n 2007-05-04 00:00:00\n 2007-04-15 0 -0:00:00\n 2008-04-14 00:00:00\n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n 2016-02-16 13:10:02\n \n \n \n \n 1625\n DOLF072J11595\n 0\n 0\n \n 4730\n GS35F4543G\n 0\n \n 2007-05-04 00:00:00\n 2007-04-15 0 -0:00:00\n 2008-04-14 00:00:00\n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n 2016-02-16 13:10:02\n \n \n \n \n 1625\n DOLF072J11595\n 0\n 0\n \n 4730\n GS35F4543G\n 0\n \n 2007-05-04 00:00:00\n 2007-04-15 0 -0:00:00\n 2008-04-14 00:00:00\n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n 2016-02-16 13:10:02\n \n \n \n \n 1625\n DOLF072J11595\n 0\n 0\n \n 4730\n GS35F4543G\n 0\n \n 2007-05-04 00:00:00\n 2007-04-15 0 -0:00:00\n 2008-04-14 00:00:00\n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n 2016-02-16 13:10:02\n \n \n \n \n 1625\n DOLF072J11595\n 0\n 0\n \n 4730\n GS35F4543G\n 0\n \n 2007-05-04 00:00:00\n 2007-04-15 00:00:00\n 2008-04-14 00:00:00\n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n 2016-02-16 13:10:02\n \n \n \n \n 1625\n DOLF072J11595\n 0\n 0\n \n 4730\n GS35F4543G\n 0\n \n 2007-05-04 00:00:00\n - 2007-04-15 00:00:00\n 2008-04-1" - PASS 0ms temp_rec.last_details. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: ISNOTNULL CLOB Sad Path 1 - PASS 1ms g_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - ---- Test Case: ISNOTNULL CLOB Sad Path 2 - PASS 1ms g_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - PASS 0ms RAISE_EXC_IN Test, Exception Raised?. EQ - Expected "TRUE" and got "TRUE" - ---- Test Case: ISNOTNULL BLOB Happy Path 1 - PASS 0ms Run Test. ISNOTNULL - BLOB is NOT NULL - PASS 0ms temp_rec.last_pass. EQ - Expected "TRUE" and got "TRUE" - PASS 0ms temp_rec.last_assert. EQ - Expected "ISNOTNULL" and got "ISNOTNULL" - PASS 0ms temp_rec.last_msg. EQ - Expected "Run Test" and got "Run Test" - PASS 0ms temp_rec.last_details. EQ - Expected "BLOB is NOT NULL" and got "BLOB is NOT NULL" - ---- Test Case: ISNOTNULL BLOB Sad Path 1 - PASS 0ms g_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - ---- Test Case: ISNOTNULL BLOB Sad Path 2 - PASS 0ms g_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - PASS 0ms RAISE_EXC_IN Test, Exception Raised?. EQ - Expected "TRUE" and got "TRUE" - ---- Test Case: ISNULL VARCHAR2 Happy Path 1 - PASS 0ms Run Test. ISNULL - Expected NULL and got "" - PASS 0ms temp_rec.last_pass. EQ - Expected "TRUE" and got "TRUE" - PASS 0ms temp_rec.last_assert. EQ - Expected "ISNULL" and got "ISNULL" - PASS 0ms temp_rec.last_msg. EQ - Expected "Run Test" and got "Run Test" - PASS 0ms temp_rec.last_details. EQ - Expected "Expected NULL and got """ and got "Expected NULL and got """ - ---- Test Case: ISNULL VARCHAR2 Sad Path 1 - PASS 1ms g_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - ---- Test Case: ISNULL VARCHAR2 Sad Path 2 - PASS 0ms g_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - PASS 0ms RAISE_EXC_IN Test, Exception Raised?. EQ - Expected "TRUE" and got "TRUE" - ---- Test Case: ISNULL BOOLEAN Happy Path 1 - PASS 0ms Run Test. ISNULL - Expected NULL and got "" - ---- Test Case: ISNULL BOOLEAN Sad Path 1 - PASS 0ms g_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - ---- Test Case: ISNULL BOOLEAN Sad Path 2 - PASS 0ms g_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - PASS 0ms RAISE_EXC_IN Test, Exception Raised?. EQ - Expected "TRUE" and got "TRUE" - ---- Test Case: ISNULL CLOB Happy Path 1 - PASS 1ms Run Test. ISNULL - Expected NULL and got "" - PASS 0ms temp_rec.last_pass. EQ - Expected "TRUE" and got "TRUE" - PASS 0ms temp_rec.last_assert. EQ - Expected "ISNULL" and got "ISNULL" - PASS 0ms temp_rec.last_msg. EQ - Expected "Run Test" and got "Run Test" - PASS 0ms temp_rec.last_details. EQ - Expected "Expected NULL and got """ and got "Expected NULL and got """ - ---- Test Case: ISNULL CLOB Sad Path 1 - PASS 2ms g_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - ---- Test Case: ISNULL CLOB Sad Path 2 - PASS 2ms g_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - PASS 0ms RAISE_EXC_IN Test, Exception Raised?. EQ - Expected "TRUE" and got "TRUE" - ---- Test Case: ISNULL BLOB Happy Path 1 - PASS 0ms Run Test. ISNULL - BLOB is NULL - PASS 0ms temp_rec.last_pass. EQ - Expected "TRUE" and got "TRUE" - PASS 0ms temp_rec.last_assert. EQ - Expected "ISNULL" and got "ISNULL" - PASS 0ms temp_rec.last_msg. EQ - Expected "Run Test" and got "Run Test" - PASS 0ms temp_rec.last_details. EQ - Expected "BLOB is NULL" and got "BLOB is NULL" - ---- Test Case: ISNULL BLOB Sad Path 1 - PASS 0ms g_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - ---- Test Case: ISNULL BLOB Sad Path 2 - PASS 0ms g_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - PASS 0ms RAISE_EXC_IN Test, Exception Raised?. EQ - Expected "TRUE" and got "TRUE" - ---- Test Case: Raises Tests Happy Path 1 - PASS 2ms RAISES Varchar2 Test. RAISES/THROWS - Expected exception "%PLS-00302: component 'BOGUS' must be declared%". Actual exception raised was "ORA-06550: line 1, column 17:\nPLS-00302: component 'BOGUS' must be declared\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored". Exception raised by: "begin wt_assert.bogus; end;". - PASS 0ms temp_rec.last_pass. EQ - Expected "TRUE" and got "TRUE" - PASS 0ms temp_rec.last_assert. EQ - Expected "RAISES/THROWS" and got "RAISES/THROWS" - PASS 0ms temp_rec.last_msg. EQ - Expected "RAISES Varchar2 Test" and got "RAISES Varchar2 Test" - PASS 0ms temp_rec.last_details. EQ - Expected "Expected exception "%PLS-00302: component 'BOGUS' must be declared%". Actual exception raised was "ORA-06550: line 1, column 17:\nPLS-00302: component 'BOGUS' must be declared\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored". Exception raised by: "begin wt_assert.bogus; end;"." and got "Expected exception "%PLS-00302: component 'BOGUS' must be declared%". Actual exception raised was "ORA-06550: line 1, column 17:\nPLS-00302: component 'BOGUS' must be declared\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored". Exception raised by: "begin wt_assert.bogus; end;"." - ---- Test Case: Raises Tests Happy Path 2 - PASS 1ms RAISES Number Test. RAISES/THROWS - Expected exception "%-00302%". Actual exception raised was "ORA-06550: line 1, column 17:\nPLS-00302: component 'BOGUS' must be declared\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored". Exception raised by: "begin wt_assert.bogus; end;". - PASS 0ms temp_rec.last_details value. EQ - Expected "Expected exception "%-00302%". Actual exception raised was "ORA-06550: line 1, column 17:\nPLS-00302: component 'BOGUS' must be declared\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored". Exception raised by: "begin wt_assert.bogus; end;"." and got "Expected exception "%-00302%". Actual exception raised was "ORA-06550: line 1, column 17:\nPLS-00302: component 'BOGUS' must be declared\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored". Exception raised by: "begin wt_assert.bogus; end;"." - PASS 1ms THROWS Varchar2 Test. RAISES/THROWS - Expected exception "%PLS-00302: component 'BOGUS' must be declared%". Actual exception raised was "ORA-06550: line 1, column 17:\nPLS-00302: component 'BOGUS' must be declared\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored". Exception raised by: "begin wt_assert.bogus; end;". - PASS 0ms temp_rec.last_details value. EQ - Expected "Expected exception "%PLS-00302: component 'BOGUS' must be declared%". Actual exception raised was "ORA-06550: line 1, column 17:\nPLS-00302: component 'BOGUS' must be declared\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored". Exception raised by: "begin wt_assert.bogus; end;"." and got "Expected exception "%PLS-00302: component 'BOGUS' must be declared%". Actual exception raised was "ORA-06550: line 1, column 17:\nPLS-00302: component 'BOGUS' must be declared\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored". Exception raised by: "begin wt_assert.bogus; end;"." - PASS 1ms THROWS Number Test. RAISES/THROWS - Expected exception "%-00302%". Actual exception raised was "ORA-06550: line 1, column 17:\nPLS-00302: component 'BOGUS' must be declared\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored". Exception raised by: "begin wt_assert.bogus; end;". - PASS 0ms temp_rec.last_details value. EQ - Expected "Expected exception "%-00302%". Actual exception raised was "ORA-06550: line 1, column 17:\nPLS-00302: component 'BOGUS' must be declared\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored". Exception raised by: "begin wt_assert.bogus; end;"." and got "Expected exception "%-00302%". Actual exception raised was "ORA-06550: line 1, column 17:\nPLS-00302: component 'BOGUS' must be declared\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored". Exception raised by: "begin wt_assert.bogus; end;"." - ---- Test Case: Raises Tests Happy Path 3 - PASS 2ms RAISES Varchar2 No Error. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "begin wt_assert.set_NLS_DATE_FORMAT(wt_assert.get_NLS_DATE_FORMAT); end;". - PASS 0ms temp_rec.last_details value. EQ - Expected "No exception was expected. Exception raised was "". Exception raised by: "begin wt_assert.set_NLS_DATE_FORMAT(wt_assert.get_NLS_DATE_FORMAT); end;"." and got "No exception was expected. Exception raised was "". Exception raised by: "begin wt_assert.set_NLS_DATE_FORMAT(wt_assert.get_NLS_DATE_FORMAT); end;"." - PASS 0ms RAISES Number No Error. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "begin wt_assert.set_NLS_DATE_FORMAT(wt_assert.get_NLS_DATE_FORMAT); end;". - PASS 0ms temp_rec.last_details value. EQ - Expected "No exception was expected. Exception raised was "". Exception raised by: "begin wt_assert.set_NLS_DATE_FORMAT(wt_assert.get_NLS_DATE_FORMAT); end;"." and got "No exception was expected. Exception raised was "". Exception raised by: "begin wt_assert.set_NLS_DATE_FORMAT(wt_assert.get_NLS_DATE_FORMAT); end;"." - ---- Test Case: Raises Tests Sad Path 1 - PASS 2ms temp_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - PASS 0ms temp_rec.last_details value. ISNOTNULL - Expected NOT NULL and got "Expected exception "%Incorrect Exception%". Actual exception raised was "ORA-06550: line 1, column 17:\nPLS-00302: component 'BOGUS' must be declared\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored". Exception raised by: "begin wt_assert.bogus; end;". Error Stack: ORA-06550: line 1, column 17:\nPLS-00302: component 'BOGUS' must be declared\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored\nORA-06512: at "WTP.WT_ASSERT", line 2326\n" - PASS 0ms temp_rec.last_details. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: Raises Tests Sad Path 2 - PASS 1ms temp_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - PASS 0ms temp_rec.last_details. EQ - Expected "Expected exception "%Incorrect Exception%". No exception was raised by: "begin wt_assert.set_NLS_DATE_FORMAT; end;". Error Stack: " and got "Expected exception "%Incorrect Exception%". No exception was raised by: "begin wt_assert.set_NLS_DATE_FORMAT; end;". Error Stack: " - ---- Test Case: EQQUERYVALUE VARCHAR2 Happy Path 1 - PASS 0ms Run Test. EQQUERYVALUE - Expected "X" and got "X" for Query: select dummy from DUAL - PASS 1ms temp_rec.last_pass. EQ - Expected "TRUE" and got "TRUE" - PASS 0ms temp_rec.last_assert. EQ - Expected "EQQUERYVALUE" and got "EQQUERYVALUE" - PASS 0ms temp_rec.last_msg. EQ - Expected "Run Test" and got "Run Test" - PASS 0ms temp_rec.last_details. EQ - Expected "Expected "X" and got "X" for Query: select dummy from DUAL" and got "Expected "X" and got "X" for Query: select dummy from DUAL" - ---- Test Case: EQQUERYVALUE VARCHAR2 Happy Path 2 - PASS 0ms Run Test. EQQUERYVALUE - Expected "" and got "" for Query: select max(dummy) from DUAL where 0 = 1 - ---- Test Case: EQQUERYVALUE VARCHAR2 Sad Path 1 - PASS 0ms temp_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - ---- Test Case: EQQUERYVALUE VARCHAR2 Sad Path 2 - PASS 1ms temp_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - PASS 0ms RAISE_EXC_IN Test, Exception Raised?. EQ - Expected "TRUE" and got "TRUE" - ---- Test Case: EQQUERYVALUE VARCHAR2 Sad Path 3 - PASS 0ms temp_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - PASS 0ms temp_rec.last_details. ISNOTNULL - Expected NOT NULL and got "Exception raised for Query: Garbage query that won't work\nORA-00900: invalid SQL statement\nORA-06512: at "WTP.WT_ASSERT", line 2586\n" - PASS 0ms temp_rec.last_details value. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQQUERYVALUE XMLTYPE Happy Path 1 - PASS 67ms Run Test. EQQUERYVALUE - Expected "\n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n " and got "\n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n " for Query: select temp_xml from wt_self_test where id = 1 - PASS 1ms temp_rec.last_pass. EQ - Expected "TRUE" and got "TRUE" - PASS 0ms temp_rec.last_assert. EQ - Expected "EQQUERYVALUE" and got "EQQUERYVALUE" - PASS 0ms temp_rec.last_msg. EQ - Expected "Run Test" and got "Run Test" - PASS 0ms temp_rec.last_details value. ISNOTNULL - Expected NOT NULL and got "Expected "\n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n " and got "\n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n 2" and got "\n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n " for Query: select temp_xml from wt_self_test where id = 1" - PASS 0ms temp_rec.last_details. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQQUERYVALUE XMLTYPE Sad Path 2 - PASS 20ms temp_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - PASS 1ms RAISE_EXC_IN Test, Exception Raised?. EQ - Expected "TRUE" and got "TRUE" - ---- Test Case: EQQUERYVALUE XMLTYPE Sad Path 3 - PASS 0ms temp_rec.last_pass. EQ - Expected "FALSE" and got "FALSE" - PASS 0ms temp_rec.last_details. ISNOTNULL - Expected NOT NULL and got "Exception raised for Query: Garbage query that won't work\nORA-00900: invalid SQL statement\nORA-06512: at "WTP.WT_ASSERT", line 2624\n" - PASS 1ms temp_rec.last_details value. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: EQQUERYVALUE CLOB Happy Path 1 - PASS 13ms Run Test. EQQUERYVALUE - Expected "\n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n \n\n FPDS-NG search results for<![CDATA[: pl/sql]]>\n \n \n \n \n \n \n \n \n <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]>\n 2'); - 34 IGNR 0 0 0 0 temp_pint1 CONSTANT pls_integer := 2; - 35 IGNR 0 0 0 0 temp_pint2 CONSTANT pls_integer := 3; - 36 IGNR 0 0 0 0 temp_date CONSTANT date := sysdate; - 37 IGNR 0 0 0 0 temp_tstmp CONSTANT timestamp := systimestamp; - 38 IGNR 0 0 0 0 temp_tstlzn CONSTANT timestamp with local time zone := systimestamp; - 39 IGNR 0 0 0 0 temp_tstzn CONSTANT timestamp with time zone := systimestamp; - 40 IGNR 0 0 0 0 temp_intds1 CONSTANT interval day to second := interval '+01 01:01:01.001' day to second; - 41 IGNR 0 0 0 0 temp_intds2 CONSTANT interval day to second := interval '+02 02:02:02.002' day to second; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 42 IGNR 0 0 0 0 temp_intym1 CONSTANT interval year to month := interval '+01-01' year to month; - 43 IGNR 0 0 0 0 temp_intym2 CONSTANT interval year to month := interval '+02-02' year to month; - 47 IGNR 0 0 0 0 wtplsql_skip_save boolean := FALSE; - 55 UNKN 0 89 0 31 function boolean_to_status - 60 EXEC 298 42 0 4 if in_boolean is null - 62 EXEC 12 0 0 0 return ''; - 63 EXEC 286 47 0 1 elsif in_boolean - 65 EXEC 169 38 1 5 return 'TRUE'; - 67 EXEC 117 36 0 2 return 'FALSE'; - 68 EXEC 298 43 0 2 end boolean_to_status; - 72 IGNR 0 5 5 5 procedure t_boolean_to_status - 75 IGNR 1 2 2 2 wt_assert.g_testcase := 'BOOLEAN_TO_STATUS'; - 77 IGNR 1 0 0 0 wt_assert.eq - 81 IGNR 1 1 0 1 wt_assert.eq - 86 IGNR 1 1 1 1 wt_assert.isnull - 89 IGNR 1 0 0 0 end t_boolean_to_status; - 94 UNKN 0 465 1 7 procedure process_assertion - 99 IGNR 493 98 0 1 if not wtplsql_skip_save then - 101 EXEC 404 159 0 4 wt_result.save - 103 UNKN 0 499 1 6 ,in_status => case g_rec.last_pass - 104 UNKN 0 83 0 1 when TRUE then C_PASS - 114 EXEC 493 118 0 1 if g_rec.raise_exception and not g_rec.last_pass - 116 EXEC 28 1781 1 171 raise_application_error(-20003, wt_text_report.format_test_result - 124 UNKN 0 113 0 3 end process_assertion; - 128 IGNR 0 0 0 0 procedure t_process_assertion -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 132 IGNR 1 1 1 1 g_testcase := 'PROCESS_ASSERTION'; - 133 IGNR 1 0 0 0 g_rec.last_assert := 'THIS'; - 134 IGNR 1 0 0 0 g_rec.last_pass := FALSE; - 135 IGNR 1 1 1 1 g_rec.last_details := 'Expected "PASS" and got "FAIL"'; - 136 IGNR 1 0 0 0 g_rec.last_msg := 'Process Assertion Forced Failure'; - 137 IGNR 1 0 0 0 g_rec.raise_exception := TRUE; - 138 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 139 IGNR 1 0 0 0 process_assertion; -- Should throw exception - 140 IGNR 0 0 0 0 wtplsql_skip_save := FALSE; - 143 IGNR 1 0 0 0 when ASSERT_FAILURE_EXCEPTION then - 144 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 145 IGNR 1 1 0 1 end t_process_assertion; - 150 EXEC 11 18 0 2 procedure compare_queries ( - 159 EXEC 11 20 1 3 l_qry_txt := 'with check_query as (' || check_query_in || - 168 EXEC 11 14 1 3 l_exec_txt := - 181 EXEC 11 11514 69 3349 execute immediate l_exec_txt using out l_ret_txt; - 182 EXEC 8 12 1 3 if l_ret_txt = 'FOUND' - 184 EXEC 5 8 1 2 g_rec.last_pass := FALSE; -- Some Difference Found - 186 EXEC 3 6 2 2 g_rec.last_pass := TRUE; -- Nothing found, queries match - 189 EXEC 8 96 4 61 g_rec.last_details := 'Comparison Query: ' || l_qry_txt; - 191 EXEC 3 0 0 0 when OTHERS - 193 EXEC 3 198 53 84 g_rec.last_details := SQLERRM || CHR(10) || - 195 EXEC 3 3 1 1 g_rec.last_pass := FALSE; - 196 EXEC 11 19 3 3 end compare_queries; - 200 IGNR 0 1 1 1 procedure t_compare_queries -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 204 IGNR 1 0 0 0 wt_assert.g_testcase := 'COMPARE_QUERIES Bad Query Test 1'; - 205 IGNR 1 0 0 0 compare_queries ( - 208 IGNR 1 4 4 4 temp_rec := g_rec; - 209 IGNR 1 1 1 1 wt_assert.eq ( - 214 IGNR 1 1 1 1 wt_assert.isnotnull( - 217 IGNR 1 10 10 10 wt_assert.this( - 222 IGNR 1 0 0 0 wt_assert.g_testcase := 'COMPARE_QUERIES Bad Query Test 2'; - 223 IGNR 1 0 0 0 compare_queries ( - 226 IGNR 1 5 5 5 temp_rec := g_rec; - 227 IGNR 1 1 1 1 wt_assert.eq ( - 232 IGNR 1 1 1 1 wt_assert.isnotnull( - 235 IGNR 1 6 6 6 wt_assert.this( - 240 IGNR 1 1 1 1 end t_compare_queries; - 249 UNKN 0 1 1 1 function last_pass - 253 EXEC 1 0 0 0 return g_rec.last_pass; - 254 EXEC 1 0 0 0 end last_pass; - 256 EXCL 0 0 0 0 function last_assert - 260 EXEC 1 1 1 1 return g_rec.last_assert; - 261 EXEC 1 0 0 0 end last_assert; - 263 EXCL 0 0 0 0 function last_msg - 267 EXEC 1 0 0 0 return g_rec.last_msg; - 268 EXEC 1 1 1 1 end last_msg; - 270 EXCL 0 0 0 0 function last_details - 274 EXEC 1 0 0 0 return g_rec.last_details; - 275 EXEC 1 0 0 0 end last_details; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 279 IGNR 0 1 1 1 procedure t_last_values - 283 IGNR 1 0 0 0 wt_assert.g_testcase := 'Last Values Tests'; - 284 IGNR 1 0 0 0 wt_assert.eq ( - 289 IGNR 1 0 0 0 wt_assert.eq ( - 295 IGNR 1 0 0 0 temp_rec := g_rec; - 296 IGNR 1 0 0 0 wt_assert.eq ( - 301 IGNR 1 2 1 1 wt_assert.eq ( - 306 IGNR 1 0 0 0 end t_last_values; - 311 EXCL 0 0 0 0 procedure reset_globals - 314 EXEC 1 0 0 0 g_testcase := ''; - 315 EXEC 1 0 0 0 g_rec.last_pass := NULL; - 316 EXEC 1 1 1 1 g_rec.last_assert := ''; - 317 EXEC 1 0 0 0 g_rec.last_msg := ''; - 318 EXEC 1 0 0 0 g_rec.last_details := ''; - 319 EXEC 1 0 0 0 g_rec.raise_exception := FALSE; - 320 EXEC 1 0 0 0 end reset_globals; - 324 IGNR 0 1 1 1 procedure t_reset_globals - 327 IGNR 1 0 0 0 reset_globals; -- Resets g_testcase - 328 IGNR 1 0 0 0 temp_rec := g_rec; - 329 IGNR 1 0 0 0 temp_testcase := g_testcase; - 331 IGNR 1 0 0 0 g_testcase := 'RESET_GLOBALS'; - 332 IGNR 1 0 0 0 wt_assert.isnull( - 335 IGNR 1 1 1 1 wt_assert.isnull - 339 IGNR 1 0 0 0 wt_assert.eq( - 343 IGNR 1 1 1 1 wt_assert.isnull -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 347 IGNR 1 1 1 1 wt_assert.isnull - 350 IGNR 1 0 0 0 wt_assert.isnull - 353 IGNR 1 1 1 1 end t_reset_globals; - 358 UNKN 0 6 1 2 function get_NLS_DATE_FORMAT - 363 EXEC 4 538 71 258 select value into l_format - 366 EXEC 4 6 0 3 return l_format; - 367 EXEC 4 5 1 2 end get_NLS_DATE_FORMAT; - 369 UNKN 0 6 1 2 procedure set_NLS_DATE_FORMAT - 373 EXEC 5 677 84 198 execute immediate 'alter session set NLS_DATE_FORMAT = ''' || - 375 EXEC 5 6 1 2 end set_NLS_DATE_FORMAT; - 377 UNKN 0 3 1 2 function get_NLS_TIMESTAMP_FORMAT - 382 EXEC 2 214 70 144 select value into l_format - 385 EXEC 2 2 1 1 return l_format; - 386 EXEC 2 2 1 1 end get_NLS_TIMESTAMP_FORMAT; - 388 UNKN 0 2 1 1 procedure set_NLS_TIMESTAMP_FORMAT - 392 EXEC 2 319 141 178 execute immediate 'alter session set NLS_TIMESTAMP_FORMAT = ''' || - 394 EXEC 2 0 0 0 end set_NLS_TIMESTAMP_FORMAT; - 396 UNKN 0 2 1 1 function get_NLS_TIMESTAMP_TZ_FORMAT - 401 EXEC 2 277 69 208 select value into l_format - 404 EXEC 2 2 1 1 return l_format; - 405 EXEC 2 2 1 1 end get_NLS_TIMESTAMP_TZ_FORMAT; - 407 UNKN 0 2 1 1 procedure set_NLS_TIMESTAMP_TZ_FORMAT - 411 EXEC 2 277 126 151 execute immediate 'alter session set NLS_TIMESTAMP_TZ_FORMAT = ''' || - 413 EXEC 2 2 1 1 end set_NLS_TIMESTAMP_TZ_FORMAT; - 417 IGNR 0 3 3 3 procedure t_nls_settings -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 421 IGNR 1 1 1 1 wt_assert.g_testcase := 'NLS Settings'; - 422 IGNR 1 0 0 0 set_NLS_DATE_FORMAT('DD-MON-YYYY'); - 423 IGNR 1 2 1 1 wt_assert.eq - 427 IGNR 1 0 0 0 set_NLS_DATE_FORMAT; - 429 IGNR 1 1 0 1 wt_assert.eq - 433 IGNR 1 1 1 1 set_NLS_TIMESTAMP_FORMAT('DD-MON-YYYY'); - 434 IGNR 1 0 0 0 wt_assert.eq - 438 IGNR 1 0 0 0 set_NLS_TIMESTAMP_FORMAT; - 440 IGNR 1 1 1 1 wt_assert.eq - 444 IGNR 1 0 0 0 set_NLS_TIMESTAMP_TZ_FORMAT('DD-MON-YYYY'); - 446 IGNR 1 0 0 0 wt_assert.eq - 450 IGNR 1 0 0 0 set_NLS_TIMESTAMP_TZ_FORMAT; - 451 IGNR 1 2 1 1 wt_assert.eq - 455 IGNR 1 1 1 1 end t_nls_settings; - 464 UNKN 0 61 0 3 procedure this ( - 471 EXEC 80 60 1 26 g_rec.last_assert := 'THIS'; - 472 EXEC 80 37 0 1 g_rec.last_msg := msg_in; - 473 EXEC 80 19 1 1 g_rec.last_pass := nvl(check_this_in, FALSE); - 474 EXEC 80 91 0 3 g_rec.last_details := 'Expected "TRUE" and got "' || - 476 EXEC 80 17 0 2 g_rec.raise_exception := raise_exc_in; - 477 EXEC 80 5 0 1 process_assertion; - 478 EXEC 79 16 0 1 end this; - 482 IGNR 0 1 1 1 procedure t_this - 487 IGNR 1 0 0 0 wt_assert.g_testcase := 'This Happy Path'; - 488 IGNR 1 0 0 0 wt_assert.this ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 491 IGNR 1 0 0 0 temp_rec := g_rec; - 492 IGNR 1 0 0 0 wt_assert.eq ( - 497 IGNR 1 0 0 0 wt_assert.eq ( - 501 IGNR 1 1 1 1 wt_assert.eq ( - 505 IGNR 1 0 0 0 wt_assert.eq ( - 510 IGNR 1 0 0 0 wt_assert.g_testcase := 'This Sad Path 1'; - 511 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 512 IGNR 1 1 1 1 this ( - 515 IGNR 1 2 2 2 temp_rec := g_rec; - 516 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 517 IGNR 1 0 0 0 wt_assert.eq ( - 522 IGNR 1 0 0 0 wt_assert.g_testcase := 'This Sad Path 2'; - 523 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 525 IGNR 1 0 0 0 this ( - 529 IGNR 0 0 0 0 l_found_exception := FALSE; - 530 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 531 IGNR 1 0 0 0 l_found_exception := TRUE; - 532 IGNR 0 1 1 1 end; - 534 IGNR 1 1 1 1 temp_rec := g_rec; - 535 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 536 IGNR 1 0 0 0 wt_assert.eq ( - 540 IGNR 1 0 0 0 wt_assert.eq ( - 545 IGNR 1 0 0 0 wt_assert.g_testcase := 'This Sad Path 3'; - 546 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 547 IGNR 1 0 0 0 this ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 550 IGNR 1 1 1 1 temp_rec := g_rec; - 551 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 552 IGNR 1 0 0 0 wt_assert.eq ( - 556 IGNR 1 1 1 1 end t_this; - 562 UNKN 0 176 1 35 procedure eq ( - 570 EXEC 199 67 0 1 g_rec.last_assert := 'EQ'; - 571 EXEC 199 58 1 1 g_rec.last_msg := msg_in; - 572 EXEC 199 211 0 10 g_rec.last_pass := ( nvl(check_this_in = against_this_in, false) - 573 UNKN 0 14 0 2 or ( check_this_in is null - 577 EXEC 199 435 1 103 g_rec.last_details := 'Expected "' || substr(against_this_in,1,1000) || - 580 EXEC 199 27 1 1 g_rec.raise_exception := raise_exc_in; - 581 EXEC 199 29 0 1 process_assertion; - 582 EXEC 198 42 1 1 end eq; - 585 UNKN 0 80 1 4 procedure eq ( - 593 EXEC 98 69 0 1 eq (msg_in => msg_in - 598 EXEC 98 16 0 1 end eq; - 601 UNKN 0 28 6 12 procedure eq ( - 609 EXEC 3 1 1 1 g_rec.last_assert := 'EQ'; - 610 EXEC 3 1 1 1 g_rec.last_msg := msg_in; - 611 EXEC 3 52471 1 37004 g_rec.last_pass := (xmltype.getclobval(check_this_in) = - 613 EXEC 3 36668 4 11763 g_rec.last_details := 'Expected "' || substr(xmltype.getclobval(against_this_in),1,1000) || - 616 EXEC 3 4 1 2 g_rec.raise_exception := raise_exc_in; - 617 EXEC 3 4 1 2 process_assertion; - 618 EXEC 2 175 58 117 end eq; - 621 UNKN 0 362 5 157 procedure eq ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 629 EXEC 14 18 1 3 g_rec.last_assert := 'EQ'; - 630 EXEC 14 8 1 1 g_rec.last_msg := msg_in; - 631 EXEC 14 4133 0 1644 g_rec.last_pass := ( nvl(check_this_in = against_this_in, false) - 632 UNKN 0 20 1 3 or ( check_this_in is null - 636 EXEC 14 24392 601 3388 g_rec.last_details := 'Expected "' || substr(against_this_in,1,1000) || - 639 EXEC 14 12 2 2 g_rec.raise_exception := raise_exc_in; - 640 EXEC 14 9 1 2 process_assertion; - 641 EXEC 12 919 62 113 end eq; - 644 UNKN 0 6 1 2 procedure eq ( - 653 EXEC 7 42 0 39 g_rec.last_assert := 'EQ'; - 654 EXEC 7 1 0 1 g_rec.last_msg := msg_in; - 655 EXEC 7 74 0 64 compare_results := nvl(DBMS_LOB.COMPARE(check_this_in, against_this_in),-1); - 656 EXEC 7 38 1 32 g_rec.last_pass := ( (compare_results = 0) - 657 UNKN 0 5 0 2 or ( check_this_in is null - 661 EXEC 7 16 1 4 g_rec.last_details := 'DBMS_LOB.COMPARE on BLOBs, compare_results: ' || compare_results; - 662 EXEC 7 1 0 1 g_rec.raise_exception := raise_exc_in; - 663 EXEC 7 0 0 0 process_assertion; - 664 EXEC 6 0 0 0 end eq; - 672 IGNR 0 21 21 21 procedure t_eq - 677 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ VARCHAR2 Happy Path 1'; - 678 IGNR 1 1 1 1 eq ( - 682 IGNR 1 0 0 0 temp_rec := g_rec; - 684 IGNR 1 1 1 1 wt_assert.isnotnull ( - 687 IGNR 1 1 1 1 wt_assert.this ( - 691 IGNR 1 0 0 0 wt_assert.isnotnull ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 694 IGNR 1 0 0 0 wt_assert.this ( - 698 IGNR 1 0 0 0 wt_assert.isnotnull ( - 701 IGNR 1 0 0 0 wt_assert.this ( - 705 IGNR 1 1 1 1 wt_assert.isnotnull ( - 708 IGNR 1 1 1 1 wt_assert.this ( - 712 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ VARCHAR2 Happy Path 2'; - 713 IGNR 1 0 0 0 eq ( - 718 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ VARCHAR2 Happy Path 3'; - 719 IGNR 1 0 0 0 eq ( - 725 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ VARCHAR2 Sad Path 1'; - 726 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 727 IGNR 1 0 0 0 eq ( - 731 IGNR 1 1 1 1 wtplsql_skip_save := FALSE; - 732 IGNR 1 1 1 1 temp_rec := g_rec; - 734 IGNR 1 0 0 0 wt_assert.isnotnull ( - 737 IGNR 1 0 0 0 wt_assert.isnotnull ( - 740 IGNR 1 0 0 0 wt_assert.this ( - 744 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ VARCHAR2 Sad Path 2'; - 745 IGNR 1 1 1 1 wtplsql_skip_save := TRUE; - 747 IGNR 1 0 0 0 eq ( - 752 IGNR 0 0 0 0 l_found_exception := FALSE; - 753 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 754 IGNR 1 0 0 0 l_found_exception := TRUE; - 755 IGNR 0 1 1 1 end; - 757 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 758 IGNR 1 0 0 0 temp_rec := g_rec; - 759 IGNR 1 0 0 0 wt_assert.this ( - 762 IGNR 1 0 0 0 wt_assert.eq ( - 767 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ VARCHAR2 Sad Path 3'; - 768 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 769 IGNR 1 0 0 0 eq ( - 773 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 774 IGNR 1 1 1 1 temp_rec := g_rec; - 776 IGNR 1 0 0 0 wt_assert.isnull ( - 779 IGNR 1 0 0 0 wt_assert.isnotnull ( - 782 IGNR 1 0 0 0 wt_assert.this ( - 786 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ VARCHAR2 Sad Path 4'; - 787 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 788 IGNR 1 0 0 0 eq ( - 792 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 793 IGNR 1 1 1 1 temp_rec := g_rec; - 795 IGNR 1 0 0 0 wt_assert.isnull ( - 798 IGNR 1 0 0 0 wt_assert.isnull ( - 801 IGNR 1 0 0 0 wt_assert.this ( - 805 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ VARCHAR2 Sad Path 5'; - 806 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 807 IGNR 1 0 0 0 eq ( - 812 IGNR 1 1 1 1 wtplsql_skip_save := FALSE; - 813 IGNR 1 1 1 1 temp_rec := g_rec; - 815 IGNR 1 0 0 0 wt_assert.isnotnull ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 818 IGNR 1 0 0 0 wt_assert.isnotnull ( - 821 IGNR 1 0 0 0 wt_assert.this ( - 825 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ VARCHAR2 Sad Path 6'; - 826 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 827 IGNR 1 1 1 1 eq ( - 832 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 833 IGNR 1 1 1 1 temp_rec := g_rec; - 835 IGNR 1 0 0 0 wt_assert.isnull ( - 838 IGNR 1 0 0 0 wt_assert.isnotnull ( - 841 IGNR 1 1 1 1 wt_assert.this ( - 846 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ ROWID Happy Path 1'; - 847 IGNR 1 1 1 1 eq ( - 852 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ ROWID Sad Path 1'; - 853 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 854 IGNR 1 0 0 0 eq ( - 858 IGNR 1 1 1 1 wtplsql_skip_save := FALSE; - 859 IGNR 1 1 1 1 temp_rec := g_rec; - 861 IGNR 1 0 0 0 wt_assert.isnotnull ( - 864 IGNR 1 1 1 1 wt_assert.isnotnull ( - 867 IGNR 1 1 1 1 wt_assert.this ( - 872 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ LONG Happy Path 1'; - 873 IGNR 1 0 0 0 eq ( - 878 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ LONG Sad Path 1'; - 879 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 880 IGNR 1 0 0 0 eq ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 884 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 885 IGNR 1 1 1 1 temp_rec := g_rec; - 887 IGNR 1 0 0 0 wt_assert.isnotnull ( - 890 IGNR 1 0 0 0 wt_assert.isnotnull ( - 893 IGNR 1 1 1 1 wt_assert.this ( - 898 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ RAW Happy Path 1'; - 899 IGNR 1 1 1 1 eq ( - 904 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ RAW Sad Path 1'; - 905 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 906 IGNR 1 0 0 0 eq ( - 910 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 911 IGNR 1 1 1 1 temp_rec := g_rec; - 913 IGNR 1 1 1 1 wt_assert.isnotnull ( - 916 IGNR 1 0 0 0 wt_assert.isnotnull ( - 919 IGNR 1 1 1 1 wt_assert.this ( - 924 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ LANG RAW Happy Path 1'; - 925 IGNR 1 1 1 1 eq ( - 931 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ LANG RAW Happy Path 1'; - 932 IGNR 1 1 1 1 wtplsql_skip_save := TRUE; - 933 IGNR 1 1 1 1 eq ( - 938 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ LONG RAW Sad Path 1'; - 939 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 940 IGNR 1 0 0 0 temp_rec := g_rec; - 941 IGNR 1 0 0 0 wt_assert.isnotnull ( - 945 IGNR 1 7 7 7 wt_assert.isnotnull ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 948 IGNR 1 1 1 1 wt_assert.this ( - 953 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ NVARCHAR2 Happy Path 1'; - 954 IGNR 1 7 7 7 eq ( - 959 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ NVARCHAR2 Sad Path 1'; - 960 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 961 IGNR 1 3 3 3 eq ( - 965 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 966 IGNR 1 1 1 1 temp_rec := g_rec; - 968 IGNR 1 1 1 1 wt_assert.isnotnull ( - 971 IGNR 1 2 2 2 wt_assert.isnotnull ( - 974 IGNR 1 0 0 0 wt_assert.this ( - 978 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ BOOLEAN Happy Path 1'; - 979 IGNR 1 0 0 0 eq ( - 983 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ BOOLEAN Happy Path 2'; - 984 IGNR 1 0 0 0 eq ( - 990 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ BOOLEAN Happy Path 3'; - 991 IGNR 1 1 1 1 eq ( - 997 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ BOOLEAN Happy Sad 1'; - 998 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 999 IGNR 1 0 0 0 eq ( - 1003 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1004 IGNR 1 0 0 0 temp_rec := g_rec; - 1006 IGNR 1 0 0 0 wt_assert.isnotnull ( - 1009 IGNR 1 1 1 1 wt_assert.isnotnull ( - 1012 IGNR 1 1 1 1 wt_assert.this ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1016 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ BOOLEAN Happy Sad 2'; - 1017 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1018 IGNR 1 0 0 0 eq ( - 1022 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1023 IGNR 1 1 1 1 temp_rec := g_rec; - 1025 IGNR 1 0 0 0 wt_assert.isnotnull ( - 1028 IGNR 1 0 0 0 wt_assert.isnull ( - 1031 IGNR 1 1 1 1 wt_assert.this ( - 1035 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ BOOLEAN Happy Sad 3'; - 1036 IGNR 1 1 1 1 wtplsql_skip_save := TRUE; - 1037 IGNR 1 0 0 0 eq ( - 1042 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1043 IGNR 1 1 1 1 temp_rec := g_rec; - 1045 IGNR 1 0 0 0 wt_assert.isnotnull ( - 1048 IGNR 1 1 1 1 wt_assert.isnotnull ( - 1051 IGNR 1 0 0 0 wt_assert.this ( - 1055 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ BOOLEAN Happy Sad 4'; - 1056 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1057 IGNR 1 0 0 0 eq ( - 1062 IGNR 1 1 1 1 wtplsql_skip_save := FALSE; - 1063 IGNR 1 1 1 1 temp_rec := g_rec; - 1065 IGNR 1 1 1 1 wt_assert.isnotnull ( - 1068 IGNR 1 1 1 1 wt_assert.isnull ( - 1071 IGNR 1 0 0 0 wt_assert.this ( - 1075 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ NUMBER Happy Path 1'; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1076 IGNR 1 4 4 4 eq ( - 1080 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ NUMBER Happy Path 2'; - 1081 IGNR 1 2 2 2 eq ( - 1086 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ NUMBER Happy Path 1'; - 1087 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1088 IGNR 1 2 2 2 eq ( - 1092 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1093 IGNR 1 1 1 1 temp_rec := g_rec; - 1095 IGNR 1 1 1 1 wt_assert.isnotnull ( - 1098 IGNR 1 1 1 1 wt_assert.isnotnull ( - 1101 IGNR 1 0 0 0 wt_assert.this ( - 1106 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ PLS_INTEGER Happy Path 1'; - 1107 IGNR 1 2 2 2 eq ( - 1111 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1113 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ PLS_INTEGER Sad Path 1'; - 1114 IGNR 1 2 2 2 eq ( - 1118 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1119 IGNR 1 1 1 1 temp_rec := g_rec; - 1121 IGNR 1 0 0 0 wt_assert.isnotnull ( - 1124 IGNR 1 1 1 1 wt_assert.isnotnull ( - 1127 IGNR 1 0 0 0 wt_assert.this ( - 1131 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ DATE Happy Path 1'; - 1132 IGNR 1 12 12 12 eq ( - 1137 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ DATE Sad Path 1'; - 1138 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1139 IGNR 1 8 8 8 eq ( - 1143 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1144 IGNR 1 1 1 1 temp_rec := g_rec; - 1146 IGNR 1 1 1 1 wt_assert.isnotnull ( - 1149 IGNR 1 5 5 5 wt_assert.isnotnull ( - 1152 IGNR 1 2 2 2 wt_assert.this ( - 1157 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ TIMSETAMP Happy Path 1'; - 1158 IGNR 1 16 16 16 eq ( - 1163 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ TIMSETAMP Sad Path 1'; - 1164 IGNR 1 1 1 1 wtplsql_skip_save := TRUE; - 1165 IGNR 1 13 13 13 eq ( - 1169 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1170 IGNR 1 2 2 2 temp_rec := g_rec; - 1172 IGNR 1 2 2 2 wt_assert.isnotnull ( - 1175 IGNR 1 5 5 5 wt_assert.isnotnull ( - 1178 IGNR 1 1 1 1 wt_assert.this ( - 1183 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ TIMSETAMP WITH LOCAL TIME ZONE Happy Path 1'; - 1184 IGNR 1 5 5 5 eq ( - 1189 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ TIMSETAMP WITH LOCAL TIME ZONE Sad Path 1'; - 1190 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1191 IGNR 1 16 16 16 eq ( - 1195 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1196 IGNR 1 1 1 1 temp_rec := g_rec; - 1198 IGNR 1 4 4 4 wt_assert.isnotnull ( - 1201 IGNR 1 5 5 5 wt_assert.isnotnull ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1204 IGNR 1 1 1 1 wt_assert.this ( - 1209 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ TIMSETAMP WITH TIME ZONE Happy Path 1'; - 1210 IGNR 1 4 4 4 eq ( - 1215 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ TIMSETAMP WITH TIME ZONE Sad Path 1'; - 1216 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1217 IGNR 1 12 12 12 eq ( - 1221 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1222 IGNR 1 1 1 1 temp_rec := g_rec; - 1224 IGNR 1 2 2 2 wt_assert.isnotnull ( - 1227 IGNR 1 5 5 5 wt_assert.isnotnull ( - 1230 IGNR 1 1 1 1 wt_assert.this ( - 1235 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ INTERVAL DAY TO SECOND Happy Path 1'; - 1236 IGNR 1 4 4 4 eq ( - 1241 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ INTERVAL DAY TO SECOND Sad Path 1'; - 1242 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1243 IGNR 1 3 3 3 eq ( - 1247 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1248 IGNR 1 2 2 2 temp_rec := g_rec; - 1250 IGNR 1 2 2 2 wt_assert.isnotnull ( - 1253 IGNR 1 1 1 1 wt_assert.isnotnull ( - 1256 IGNR 1 1 1 1 wt_assert.this ( - 1261 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ INTERVAL YEAR TO MONTH Happy Path 1'; - 1262 IGNR 1 2 2 2 eq ( - 1267 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ INTERVAL YEAR TO MONTH Sad Path 1'; - 1268 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1269 IGNR 1 2 2 2 eq ( - 1273 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1274 IGNR 1 0 0 0 temp_rec := g_rec; - 1276 IGNR 1 1 1 1 wt_assert.isnotnull ( - 1279 IGNR 1 2 2 2 wt_assert.isnotnull ( - 1282 IGNR 1 0 0 0 wt_assert.this ( - 1286 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ XMLTYPE Happy Path 1'; - 1287 IGNR 1 1 1 1 eq ( - 1291 IGNR 1 5 5 5 temp_rec := g_rec; - 1293 IGNR 1 1 1 1 wt_assert.isnotnull ( - 1296 IGNR 1 1 1 1 wt_assert.this ( - 1300 IGNR 1 0 0 0 wt_assert.isnotnull ( - 1303 IGNR 1 1 1 1 wt_assert.this ( - 1307 IGNR 1 1 1 1 wt_assert.isnotnull ( - 1310 IGNR 1 1 1 1 wt_assert.this ( - 1314 IGNR 1 0 0 0 wt_assert.isnotnull ( - 1317 IGNR 1 17 17 17 wt_assert.this ( - 1322 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ XMLTYPE Sad Path 1'; - 1323 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1324 IGNR 1 0 0 0 eq ( - 1328 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1329 IGNR 1 4 4 4 temp_rec := g_rec; - 1331 IGNR 1 4 0 4 wt_assert.isnotnull ( - 1334 IGNR 1 5 0 5 wt_assert.isnotnull ( - 1337 IGNR 1 1 1 1 wt_assert.this ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1341 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ XMLTYPE Sad Path 2'; - 1342 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1343 IGNR 0 0 0 0 begin - 1344 IGNR 1 0 0 0 eq ( - 1349 IGNR 0 0 0 0 l_found_exception := FALSE; - 1350 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 1351 IGNR 1 0 0 0 l_found_exception := TRUE; - 1352 IGNR 0 2 2 2 end; - 1354 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1355 IGNR 1 5 5 5 temp_rec := g_rec; - 1356 IGNR 1 2 2 2 wt_assert.this ( - 1359 IGNR 1 0 0 0 wt_assert.eq ( - 1364 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ CLOB Happy Path 1'; - 1365 IGNR 1 0 0 0 eq ( - 1369 IGNR 1 3 3 3 temp_rec := g_rec; - 1371 IGNR 1 1 1 1 wt_assert.isnotnull ( - 1374 IGNR 1 1 1 1 wt_assert.this ( - 1378 IGNR 1 1 1 1 wt_assert.isnotnull ( - 1381 IGNR 1 1 1 1 wt_assert.this ( - 1385 IGNR 1 0 0 0 wt_assert.isnotnull ( - 1388 IGNR 1 0 0 0 wt_assert.this ( - 1392 IGNR 1 0 0 0 wt_assert.isnotnull ( - 1395 IGNR 1 17 17 17 wt_assert.this ( - 1400 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ CLOB Happy Path 2'; - 1401 IGNR 1 0 0 0 eq ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1407 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ CLOB Happy Path 3'; - 1408 IGNR 1 1 1 1 eq ( - 1414 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ CLOB Sad Path 1'; - 1415 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1416 IGNR 1 0 0 0 eq ( - 1420 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1421 IGNR 1 5 5 5 temp_rec := g_rec; - 1423 IGNR 1 1 1 1 wt_assert.isnotnull ( - 1426 IGNR 1 0 0 0 wt_assert.isnotnull ( - 1429 IGNR 1 1 1 1 wt_assert.this ( - 1433 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ CLOB Sad Path 2'; - 1434 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1436 IGNR 1 1 1 1 eq ( - 1441 IGNR 0 0 0 0 l_found_exception := FALSE; - 1442 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 1443 IGNR 1 1 1 1 l_found_exception := TRUE; - 1444 IGNR 0 2 2 2 end; - 1446 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1447 IGNR 1 1 1 1 temp_rec := g_rec; - 1448 IGNR 1 0 0 0 wt_assert.this ( - 1451 IGNR 1 1 1 1 wt_assert.eq ( - 1456 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ CLOB Sad Path 3'; - 1457 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1458 IGNR 1 0 0 0 eq ( - 1462 IGNR 1 1 1 1 wtplsql_skip_save := FALSE; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1463 IGNR 1 2 2 2 temp_rec := g_rec; - 1465 IGNR 1 1 1 1 wt_assert.isnotnull ( - 1468 IGNR 1 1 1 1 wt_assert.isnull ( - 1471 IGNR 1 1 1 1 wt_assert.this ( - 1475 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ CLOB Sad Path 4'; - 1476 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1477 IGNR 1 0 0 0 eq ( - 1482 IGNR 1 1 1 1 wtplsql_skip_save := FALSE; - 1483 IGNR 1 5 5 5 temp_rec := g_rec; - 1485 IGNR 1 1 1 1 wt_assert.isnotnull ( - 1488 IGNR 1 1 1 1 wt_assert.isnull ( - 1491 IGNR 1 1 1 1 wt_assert.this ( - 1495 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ NCLOB Happy Path 1'; - 1496 IGNR 1 9341 9341 9341 eq ( - 1501 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ NCLOB Happy Path 2'; - 1502 IGNR 1 10989 10989 10989 eq ( - 1508 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ NCLOB Happy Path 3'; - 1509 IGNR 1 3 3 3 eq ( - 1515 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ NCLOB Sad Path 1'; - 1516 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1517 IGNR 1 5318 5318 5318 eq ( - 1521 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1522 IGNR 1 6 6 6 temp_rec := g_rec; - 1524 IGNR 1 4845 4845 4845 wt_assert.isnotnull ( - 1527 IGNR 1 121 121 121 wt_assert.isnotnull ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1530 IGNR 1 1 1 1 wt_assert.this ( - 1534 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ NCLOB Sad Path 2'; - 1535 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1536 IGNR 0 0 0 0 begin - 1537 IGNR 1 5776 5776 5776 eq ( - 1542 IGNR 0 0 0 0 l_found_exception := FALSE; - 1543 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 1544 IGNR 1 1 1 1 l_found_exception := TRUE; - 1545 IGNR 0 3 3 3 end; - 1547 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1548 IGNR 1 5 5 5 temp_rec := g_rec; - 1549 IGNR 1 2 2 2 wt_assert.this ( - 1552 IGNR 1 1 1 1 wt_assert.eq ( - 1557 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ NCLOB Sad Path 3'; - 1558 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1559 IGNR 1 5180 5180 5180 eq ( - 1563 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1564 IGNR 1 4 4 4 temp_rec := g_rec; - 1566 IGNR 1 4615 4615 4615 wt_assert.isnotnull ( - 1569 IGNR 1 17 17 17 wt_assert.isnull ( - 1572 IGNR 1 1 1 1 wt_assert.this ( - 1576 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ NCLOB Sad Path 4'; - 1577 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1578 IGNR 1 10241 10241 10241 eq ( - 1583 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1584 IGNR 1 7 7 7 temp_rec := g_rec; - 1586 IGNR 1 10520 10520 10520 wt_assert.isnotnull ( - 1589 IGNR 1 442 442 442 wt_assert.isnull ( - 1592 IGNR 1 1 1 1 wt_assert.this ( - 1596 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ BLOB Happy Path 1'; - 1597 IGNR 1 1 1 1 eq ( - 1601 IGNR 1 1 1 1 temp_rec := g_rec; - 1603 IGNR 1 0 0 0 wt_assert.isnotnull ( - 1606 IGNR 1 0 0 0 wt_assert.this ( - 1610 IGNR 1 0 0 0 wt_assert.isnotnull ( - 1613 IGNR 1 0 0 0 wt_assert.this ( - 1617 IGNR 1 0 0 0 wt_assert.isnotnull ( - 1620 IGNR 1 0 0 0 wt_assert.this ( - 1624 IGNR 1 1 1 1 wt_assert.isnotnull ( - 1627 IGNR 1 0 0 0 wt_assert.this ( - 1632 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ BLOB Happy Path 2'; - 1633 IGNR 1 0 0 0 eq ( - 1639 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ BLOB Happy Path 3'; - 1640 IGNR 1 0 0 0 eq ( - 1646 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ BLOB Sad Path 1'; - 1647 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1648 IGNR 1 0 0 0 eq ( - 1652 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1653 IGNR 1 2 2 2 temp_rec := g_rec; - 1655 IGNR 1 0 0 0 wt_assert.isnotnull ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1658 IGNR 1 0 0 0 wt_assert.isnotnull ( - 1661 IGNR 1 0 0 0 wt_assert.this ( - 1665 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ BLOB Sad Path 2'; - 1666 IGNR 1 1 1 1 wtplsql_skip_save := TRUE; - 1668 IGNR 1 0 0 0 eq ( - 1673 IGNR 0 0 0 0 l_found_exception := FALSE; - 1674 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 1675 IGNR 1 0 0 0 l_found_exception := TRUE; - 1676 IGNR 0 1 1 1 end; - 1678 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1679 IGNR 1 1 1 1 temp_rec := g_rec; - 1680 IGNR 1 0 0 0 wt_assert.this ( - 1683 IGNR 1 1 1 1 wt_assert.eq ( - 1688 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQ BLOB Sad Path 3'; - 1689 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1690 IGNR 1 0 0 0 eq ( - 1694 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1695 IGNR 1 0 0 0 temp_rec := g_rec; - 1697 IGNR 1 0 0 0 wt_assert.isnotnull ( - 1700 IGNR 1 0 0 0 wt_assert.isnull ( - 1703 IGNR 1 1 1 1 wt_assert.this ( - 1707 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQ BLOB Sad Path 4'; - 1708 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1709 IGNR 1 0 0 0 eq ( - 1714 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1715 IGNR 1 0 0 0 temp_rec := g_rec; - 1717 IGNR 1 0 0 0 wt_assert.isnotnull ( - 1720 IGNR 1 1 1 1 wt_assert.isnull ( - 1723 IGNR 1 0 0 0 wt_assert.this ( - 1726 IGNR 1 1440 1440 1440 end t_eq; - 1736 UNKN 0 44 1 2 procedure isnotnull ( - 1743 EXEC 82 41 1 1 g_rec.last_assert := 'ISNOTNULL'; - 1744 EXEC 82 29 1 1 g_rec.last_msg := msg_in; - 1745 EXEC 82 16 0 1 g_rec.last_pass := (check_this_in is not null); - 1746 EXEC 82 221 1 34 g_rec.last_details := 'Expected NOT NULL and got "' || - 1748 EXEC 82 24 0 7 g_rec.raise_exception := raise_exc_in; - 1749 EXEC 82 14 0 1 process_assertion; - 1750 EXEC 80 22 0 1 end isnotnull; - 1753 UNKN 0 9 1 1 procedure isnotnull ( - 1760 EXEC 13 3 0 1 isnotnull (msg_in => msg_in - 1764 EXEC 12 2 0 1 end isnotnull; - 1767 UNKN 0 153 5 29 procedure isnotnull ( - 1774 EXEC 13 16 0 3 g_rec.last_assert := 'ISNOTNULL'; - 1775 EXEC 13 6 0 1 g_rec.last_msg := msg_in; - 1776 EXEC 13 5 0 1 g_rec.last_pass := (check_this_in is not null); - 1777 EXEC 13 19161 390 9579 g_rec.last_details := 'Expected NOT NULL and got "' || - 1779 EXEC 13 9 0 2 g_rec.raise_exception := raise_exc_in; - 1780 EXEC 13 6 0 2 process_assertion; - 1781 EXEC 12 736 48 127 end isnotnull; - 1784 UNKN 0 4 0 1 procedure isnotnull ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1791 EXEC 7 2 0 1 g_rec.last_assert := 'ISNOTNULL'; - 1792 EXEC 7 4 0 1 g_rec.last_msg := msg_in; - 1793 EXEC 7 1 0 1 g_rec.last_pass := (check_this_in is not null); - 1794 EXEC 7 0 0 0 if g_rec.last_pass - 1796 EXEC 5 2 0 1 g_rec.last_details := 'BLOB is NOT NULL'; - 1798 EXEC 2 1 1 1 g_rec.last_details := 'BLOB is NULL'; - 1800 EXEC 7 1 0 1 g_rec.raise_exception := raise_exc_in; - 1801 EXEC 7 1 1 1 process_assertion; - 1802 EXEC 6 0 0 0 end isnotnull; - 1806 IGNR 0 9 9 9 procedure t_isnotnull - 1811 IGNR 1 1 1 1 wt_assert.g_testcase := 'ISNOTNULL VARCHAR2 Happy Path 1'; - 1812 IGNR 1 0 0 0 isnotnull ( - 1815 IGNR 1 1 1 1 temp_rec := g_rec; - 1817 IGNR 1 1 1 1 wt_assert.eq ( - 1821 IGNR 1 0 0 0 wt_assert.eq ( - 1826 IGNR 1 1 1 1 wt_assert.eq ( - 1830 IGNR 1 0 0 0 wt_assert.eq ( - 1835 IGNR 1 0 0 0 wt_assert.g_testcase := 'ISNOTNULL VARCHAR2 Sad Path 1'; - 1836 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1837 IGNR 1 1 1 1 isnotnull ( - 1840 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1841 IGNR 1 0 0 0 wt_assert.eq ( - 1846 IGNR 1 1 1 1 wt_assert.g_testcase := 'ISNOTNULL VARCHAR2 Sad Path 2'; - 1847 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1849 IGNR 1 1 1 1 isnotnull ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1853 IGNR 0 0 0 0 l_found_exception := FALSE; - 1854 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 1855 IGNR 1 0 0 0 l_found_exception := TRUE; - 1856 IGNR 0 1 1 1 end; - 1858 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1859 IGNR 1 0 0 0 wt_assert.eq ( - 1863 IGNR 1 0 0 0 wt_assert.eq ( - 1868 IGNR 1 1 1 1 wt_assert.g_testcase := 'ISNOTNULL BOOLEAN Happy Path 1'; - 1869 IGNR 1 1 1 1 isnotnull ( - 1873 IGNR 1 0 0 0 wt_assert.g_testcase := 'ISNOTNULL BOOLEAN Sad Path 1'; - 1874 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1875 IGNR 1 1 1 1 isnotnull ( - 1878 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1879 IGNR 1 0 0 0 wt_assert.eq ( - 1884 IGNR 1 0 0 0 wt_assert.g_testcase := 'ISNOTNULL BOOLEAN Sad Path 2'; - 1885 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1887 IGNR 1 1 1 1 isnotnull ( - 1891 IGNR 0 0 0 0 l_found_exception := FALSE; - 1892 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 1893 IGNR 1 1 1 1 l_found_exception := TRUE; - 1894 IGNR 0 1 1 1 end; - 1896 IGNR 1 1 1 1 wtplsql_skip_save := FALSE; - 1897 IGNR 1 0 0 0 wt_assert.eq ( - 1901 IGNR 1 0 0 0 wt_assert.eq ( - 1906 IGNR 1 0 0 0 wt_assert.g_testcase := 'ISNOTNULL CLOB Happy Path 1'; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1907 IGNR 1 0 0 0 isnotnull ( - 1910 IGNR 1 2 2 2 temp_rec := g_rec; - 1912 IGNR 1 0 0 0 wt_assert.eq ( - 1916 IGNR 1 0 0 0 wt_assert.eq ( - 1921 IGNR 1 0 0 0 wt_assert.eq ( - 1925 IGNR 1 0 0 0 wt_assert.isnotnull ( - 1928 IGNR 1 16 16 16 wt_assert.this ( - 1933 IGNR 1 0 0 0 wt_assert.g_testcase := 'ISNOTNULL CLOB Sad Path 1'; - 1934 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1935 IGNR 1 0 0 0 isnotnull ( - 1938 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1939 IGNR 1 0 0 0 wt_assert.eq ( - 1944 IGNR 1 0 0 0 wt_assert.g_testcase := 'ISNOTNULL CLOB Sad Path 2'; - 1945 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1947 IGNR 1 1 1 1 isnotnull ( - 1951 IGNR 0 0 0 0 l_found_exception := FALSE; - 1952 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 1953 IGNR 1 0 0 0 l_found_exception := TRUE; - 1954 IGNR 0 2 2 2 end; - 1956 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1957 IGNR 1 0 0 0 wt_assert.eq ( - 1961 IGNR 1 0 0 0 wt_assert.eq ( - 1966 IGNR 1 1 1 1 wt_assert.g_testcase := 'ISNOTNULL BLOB Happy Path 1'; - 1967 IGNR 1 0 0 0 isnotnull ( - 1970 IGNR 1 1 1 1 temp_rec := g_rec; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1972 IGNR 1 0 0 0 wt_assert.eq ( - 1976 IGNR 1 0 0 0 wt_assert.eq ( - 1981 IGNR 1 0 0 0 wt_assert.eq ( - 1985 IGNR 1 1 1 1 wt_assert.eq ( - 1990 IGNR 1 1 1 1 wt_assert.g_testcase := 'ISNOTNULL BLOB Sad Path 1'; - 1991 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 1992 IGNR 1 0 0 0 isnotnull ( - 1995 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 1996 IGNR 1 0 0 0 wt_assert.eq ( - 2001 IGNR 1 0 0 0 wt_assert.g_testcase := 'ISNOTNULL BLOB Sad Path 2'; - 2002 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 2004 IGNR 1 0 0 0 isnotnull ( - 2008 IGNR 0 0 0 0 l_found_exception := FALSE; - 2009 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 2010 IGNR 1 0 0 0 l_found_exception := TRUE; - 2011 IGNR 0 1 1 1 end; - 2013 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 2014 IGNR 1 0 0 0 wt_assert.eq ( - 2018 IGNR 1 0 0 0 wt_assert.eq ( - 2022 IGNR 1 3 3 3 end t_isnotnull; - 2028 UNKN 0 10 0 1 procedure isnull ( - 2035 EXEC 18 5 0 1 g_rec.last_assert := 'ISNULL'; - 2036 EXEC 18 4 1 1 g_rec.last_msg := msg_in; - 2037 EXEC 18 6 0 1 g_rec.last_pass := (check_this_in is null); - 2038 EXEC 18 20 1 3 g_rec.last_details := 'Expected NULL and got "' || -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 2040 EXEC 18 9 0 7 g_rec.raise_exception := raise_exc_in; - 2041 EXEC 18 4 0 1 process_assertion; - 2042 EXEC 16 3 0 1 end isnull; - 2045 UNKN 0 4 1 1 procedure isnull ( - 2052 EXEC 6 4 0 1 isnull (msg_in => msg_in - 2056 EXEC 5 0 0 0 end isnull; - 2059 UNKN 0 53 6 12 procedure isnull ( - 2066 EXEC 7 5 0 2 g_rec.last_assert := 'ISNULL'; - 2067 EXEC 7 2 0 1 g_rec.last_msg := msg_in; - 2068 EXEC 7 3 1 1 g_rec.last_pass := (check_this_in is null); - 2069 EXEC 7 4758 327 1715 g_rec.last_details := 'Expected NULL and got "' || - 2071 EXEC 7 6 1 2 g_rec.raise_exception := raise_exc_in; - 2072 EXEC 7 3 1 1 process_assertion; - 2073 EXEC 6 323 52 60 end isnull; - 2076 UNKN 0 2 1 1 procedure isnull ( - 2083 EXEC 5 1 0 1 g_rec.last_assert := 'ISNULL'; - 2084 EXEC 5 2 1 1 g_rec.last_msg := msg_in; - 2085 EXEC 5 3 0 1 g_rec.last_pass := (check_this_in is null); - 2086 EXEC 5 1 0 1 if g_rec.last_pass - 2088 EXEC 3 0 0 0 g_rec.last_details := 'BLOB is NULL'; - 2090 EXEC 2 2 1 1 g_rec.last_details := 'BLOB is NOT NULL'; - 2092 EXEC 5 0 0 0 g_rec.raise_exception := raise_exc_in; - 2093 EXEC 5 1 0 1 process_assertion; - 2094 EXEC 4 0 0 0 end isnull; - 2098 IGNR 0 5 5 5 procedure t_isnull -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 2103 IGNR 1 0 0 0 wt_assert.g_testcase := 'ISNULL VARCHAR2 Happy Path 1'; - 2104 IGNR 1 0 0 0 isnull ( - 2107 IGNR 1 0 0 0 temp_rec := g_rec; - 2109 IGNR 1 0 0 0 wt_assert.eq ( - 2113 IGNR 1 0 0 0 wt_assert.eq ( - 2118 IGNR 1 1 1 1 wt_assert.eq ( - 2122 IGNR 1 1 1 1 wt_assert.eq ( - 2127 IGNR 1 1 1 1 wt_assert.g_testcase := 'ISNULL VARCHAR2 Sad Path 1'; - 2128 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 2129 IGNR 1 0 0 0 isnull ( - 2132 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 2133 IGNR 1 0 0 0 wt_assert.eq ( - 2138 IGNR 1 0 0 0 wt_assert.g_testcase := 'ISNULL VARCHAR2 Sad Path 2'; - 2139 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 2141 IGNR 1 0 0 0 isnull ( - 2145 IGNR 0 0 0 0 l_found_exception := FALSE; - 2146 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 2147 IGNR 1 0 0 0 l_found_exception := TRUE; - 2148 IGNR 0 0 0 0 end; - 2149 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 2151 IGNR 1 0 0 0 wt_assert.eq ( - 2155 IGNR 1 0 0 0 wt_assert.eq ( - 2160 IGNR 1 0 0 0 wt_assert.g_testcase := 'ISNULL BOOLEAN Happy Path 1'; - 2161 IGNR 1 0 0 0 isnull ( - 2165 IGNR 1 0 0 0 wt_assert.g_testcase := 'ISNULL BOOLEAN Sad Path 1'; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 2166 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 2167 IGNR 1 0 0 0 isnull ( - 2170 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 2171 IGNR 1 0 0 0 wt_assert.eq ( - 2176 IGNR 1 0 0 0 wt_assert.g_testcase := 'ISNULL BOOLEAN Sad Path 2'; - 2177 IGNR 1 1 1 1 wtplsql_skip_save := TRUE; - 2179 IGNR 1 0 0 0 isnull ( - 2183 IGNR 0 0 0 0 l_found_exception := FALSE; - 2184 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 2185 IGNR 1 0 0 0 l_found_exception := TRUE; - 2186 IGNR 0 1 1 1 end; - 2187 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 2189 IGNR 1 0 0 0 wt_assert.eq ( - 2193 IGNR 1 0 0 0 wt_assert.eq ( - 2198 IGNR 1 0 0 0 wt_assert.g_testcase := 'ISNULL CLOB Happy Path 1'; - 2199 IGNR 1 0 0 0 isnull ( - 2202 IGNR 1 1 1 1 temp_rec := g_rec; - 2204 IGNR 1 0 0 0 wt_assert.eq ( - 2208 IGNR 1 1 1 1 wt_assert.eq ( - 2213 IGNR 1 0 0 0 wt_assert.eq ( - 2217 IGNR 1 1 1 1 wt_assert.eq ( - 2222 IGNR 1 1 1 1 wt_assert.g_testcase := 'ISNULL CLOB Sad Path 1'; - 2223 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 2224 IGNR 1 0 0 0 isnull ( - 2227 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 2228 IGNR 1 1 1 1 wt_assert.eq ( - 2233 IGNR 1 1 1 1 wt_assert.g_testcase := 'ISNULL CLOB Sad Path 2'; - 2234 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 2236 IGNR 1 0 0 0 isnull ( - 2240 IGNR 0 0 0 0 l_found_exception := FALSE; - 2241 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 2242 IGNR 1 0 0 0 l_found_exception := TRUE; - 2243 IGNR 0 2 2 2 end; - 2245 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 2246 IGNR 1 1 1 1 wt_assert.eq ( - 2250 IGNR 1 1 1 1 wt_assert.eq ( - 2255 IGNR 1 0 0 0 wt_assert.g_testcase := 'ISNULL BLOB Happy Path 1'; - 2256 IGNR 1 1 1 1 isnull ( - 2259 IGNR 1 1 1 1 temp_rec := g_rec; - 2261 IGNR 1 0 0 0 wt_assert.eq ( - 2265 IGNR 1 1 1 1 wt_assert.eq ( - 2270 IGNR 1 0 0 0 wt_assert.eq ( - 2274 IGNR 1 1 1 1 wt_assert.eq ( - 2279 IGNR 1 0 0 0 wt_assert.g_testcase := 'ISNULL BLOB Sad Path 1'; - 2280 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 2281 IGNR 1 1 1 1 isnull ( - 2284 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 2285 IGNR 1 0 0 0 wt_assert.eq ( - 2290 IGNR 1 0 0 0 wt_assert.g_testcase := 'ISNULL BLOB Sad Path 2'; - 2291 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 2293 IGNR 1 1 1 1 isnull ( - 2297 IGNR 0 0 0 0 l_found_exception := FALSE; - 2298 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 2299 IGNR 1 0 0 0 l_found_exception := TRUE; - 2300 IGNR 0 1 1 1 end; - 2302 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 2303 IGNR 1 0 0 0 wt_assert.eq ( - 2307 IGNR 1 0 0 0 wt_assert.eq ( - 2311 IGNR 1 4 4 4 end t_isnull; - 2317 EXEC 8 17 0 4 procedure raises ( - 2326 EXEC 8 7213 0 1298 execute immediate check_call_in; - 2327 EXEC 5 0 0 0 exception when OTHERS then - 2328 EXEC 5 177 26 41 l_sqlerrm := SQLERRM; - 2329 EXEC 5 209 30 85 l_errstack := substr(dbms_utility.format_error_stack || - 2332 UNKN 0 4 1 1 end; - 2334 EXEC 8 7 1 1 g_rec.last_assert := 'RAISES/THROWS'; - 2335 EXEC 8 4 1 1 g_rec.last_msg := msg_in; - 2336 EXEC 8 3 0 1 if against_exc_in is null AND l_sqlerrm is null - 2339 EXEC 2 1 0 1 g_rec.last_pass := TRUE; - 2340#NOTX# 0 0 0 0 elsif against_exc_in is null OR l_sqlerrm is null - 2344 EXEC 1 1 1 1 g_rec.last_pass := FALSE; - 2347 EXEC 5 30 5 7 g_rec.last_pass := l_sqlerrm like '%' || against_exc_in || '%'; - 2349 EXEC 8 0 0 0 if against_exc_in is null - 2351 EXEC 2 4 2 2 g_rec.last_details := 'No exception was expected' || - 2354 EXEC 6 1 0 1 elsif l_sqlerrm is null -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 2356 EXEC 1 2 2 2 g_rec.last_details := 'Expected exception "%' || against_exc_in || - 2359 EXEC 5 6 1 2 g_rec.last_details := 'Expected exception "%' || against_exc_in || - 2363 EXEC 8 1 0 1 if not g_rec.last_pass - 2365 EXEC 2 8 3 5 g_rec.last_details := - 2368 EXEC 8 2 1 1 process_assertion; - 2369 EXEC 8 14 2 4 end raises; - 2371 UNKN 0 3 1 1 procedure raises ( - 2377 EXEC 3 1 0 1 if against_exc_in is null - 2379 EXEC 1 1 1 1 raises ( - 2384 EXEC 2 15 7 8 raises ( - 2389 EXEC 3 0 0 0 end raises; - 2391 UNKN 0 1 1 1 procedure throws ( - 2397 EXEC 1 0 0 0 raises ( - 2401 EXEC 1 1 1 1 end throws; - 2403 EXCL 0 0 0 0 procedure throws ( - 2409 EXEC 1 0 0 0 raises ( - 2413 EXEC 1 0 0 0 end throws; - 2417 IGNR 0 2 2 2 procedure t_raises - 2421 IGNR 1 0 0 0 wt_assert.g_testcase := 'Raises Tests Happy Path 1'; - 2422 IGNR 1 0 0 0 raises ( - 2426 IGNR 1 2 2 2 temp_rec := g_rec; - 2428 IGNR 1 1 1 1 wt_assert.eq ( - 2432 IGNR 1 1 1 1 wt_assert.eq ( - 2437 IGNR 1 0 0 0 wt_assert.eq ( - 2441 IGNR 1 5 5 5 wt_assert.eq ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 2451 IGNR 1 0 0 0 wt_assert.g_testcase := 'Raises Tests Happy Path 2'; - 2452 IGNR 1 0 0 0 raises ( - 2456 IGNR 1 1 1 1 temp_rec := g_rec; - 2457 IGNR 1 3 3 3 wt_assert.eq ( - 2468 IGNR 1 0 0 0 throws ( - 2472 IGNR 1 1 1 1 temp_rec := g_rec; - 2473 IGNR 1 3 3 3 wt_assert.eq ( - 2484 IGNR 1 0 0 0 throws ( - 2488 IGNR 1 2 2 2 temp_rec := g_rec; - 2489 IGNR 1 3 3 3 wt_assert.eq ( - 2500 IGNR 1 0 0 0 wt_assert.g_testcase := 'Raises Tests Happy Path 3'; - 2501 IGNR 1 0 0 0 raises ( - 2505 IGNR 1 1 1 1 temp_rec := g_rec; - 2506 IGNR 1 2 2 2 wt_assert.eq ( - 2513 IGNR 1 1 1 1 raises ( - 2517 IGNR 1 0 0 0 temp_rec := g_rec; - 2518 IGNR 1 1 1 1 wt_assert.eq ( - 2525 IGNR 1 0 0 0 wt_assert.g_testcase := 'Raises Tests Sad Path 1'; - 2526 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 2527 IGNR 1 1 1 1 raises ( - 2531 IGNR 1 11 11 11 temp_rec := g_rec; - 2532 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 2534 IGNR 1 0 0 0 wt_assert.eq ( - 2538 IGNR 1 0 0 0 wt_assert.isnotnull ( - 2541 IGNR 1 5 5 5 wt_assert.this ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 2547 IGNR 1 0 0 0 wt_assert.g_testcase := 'Raises Tests Sad Path 2'; - 2548 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 2549 IGNR 1 1 1 1 raises ( - 2553 IGNR 1 2 2 2 temp_rec := g_rec; - 2554 IGNR 1 1 1 1 wtplsql_skip_save := FALSE; - 2556 IGNR 1 0 0 0 wt_assert.eq ( - 2560 IGNR 1 2 2 2 wt_assert.eq ( - 2566 IGNR 1 0 0 0 end t_raises; - 2572 EXEC 6 11 0 2 procedure eqqueryvalue ( - 2584 EXEC 6 0 0 0 g_rec.last_assert := 'EQQUERYVALUE'; - 2585 EXEC 6 1 0 1 g_rec.last_msg := msg_in; - 2586 EXEC 6 3347 46 2815 open l_rc for check_query_in; - 2587 EXEC 5 313 31 91 fetch l_rc into l_rc_buff; - 2588 EXEC 5 71 10 19 close l_rc; - 2589 EXEC 5 10 0 2 g_rec.last_pass := ( l_rc_buff = against_value_in - 2590 UNKN 0 5 1 2 or ( l_rc_buff is null - 2593 EXEC 5 30 4 10 g_rec.last_details := 'Expected "' || substr(against_value_in,1,1000) || - 2596 EXEC 5 0 0 0 g_rec.raise_exception := raise_exc_in; - 2597 EXEC 5 3 1 1 process_assertion; - 2598 EXEC 2 0 0 0 exception when others then - 2599 EXEC 2 124 52 72 l_errstack := substr(dbms_utility.format_error_stack || - 2601 EXEC 2 4 2 2 g_rec.last_details := 'Exception raised for Query: ' || - 2604 EXEC 2 0 0 0 g_rec.last_pass := FALSE; - 2605 EXEC 2 0 0 0 g_rec.raise_exception := raise_exc_in; - 2606 EXEC 2 0 0 0 process_assertion; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 2607 EXEC 5 29 4 19 end eqqueryvalue; - 2610 EXEC 4 46 10 14 procedure eqqueryvalue ( - 2622 EXEC 4 1 0 1 g_rec.last_assert := 'EQQUERYVALUE'; - 2623 EXEC 4 1 0 1 g_rec.last_msg := msg_in; - 2624 EXEC 4 3847 358 2615 open l_rc for check_query_in; - 2625 EXEC 3 687 211 246 fetch l_rc into l_rc_buff; - 2626 EXEC 3 179 40 87 close l_rc; - 2627 EXEC 3 56609 2 38968 g_rec.last_pass := (xmltype.getclobval(l_rc_buff) = - 2629 EXEC 3 39064 4 9936 g_rec.last_details := 'Expected "' || substr(xmltype.getclobval(against_value_in),1,1000) || - 2632 EXEC 3 4 1 2 g_rec.raise_exception := raise_exc_in; - 2633 EXEC 3 3 1 1 process_assertion; - 2634 EXEC 2 0 0 0 exception when others then - 2635 EXEC 2 212 94 118 l_errstack := substr(dbms_utility.format_error_stack || - 2637 EXEC 2 7 3 4 g_rec.last_details := 'Exception raised for Query: ' || - 2640 EXEC 2 0 0 0 g_rec.last_pass := FALSE; - 2641 EXEC 2 0 0 0 g_rec.raise_exception := raise_exc_in; - 2642 EXEC 2 1 1 1 process_assertion; - 2643 EXEC 3 191 1 74 end eqqueryvalue; - 2646 EXEC 4 43 1 10 procedure eqqueryvalue ( - 2658 EXEC 4 2 1 1 g_rec.last_assert := 'EQQUERYVALUE'; - 2659 EXEC 4 2 1 1 g_rec.last_msg := msg_in; - 2660 EXEC 4 2128 156 1465 open l_rc for check_query_in; - 2661 EXEC 3 219 56 98 fetch l_rc into l_rc_buff; - 2662 EXEC 3 70 14 31 close l_rc; - 2663 EXEC 3 10777 0 9404 g_rec.last_pass := ( l_rc_buff = against_value_in -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 2664 UNKN 0 3 1 2 or ( l_rc_buff is null - 2667 EXEC 3 6496 2072 2351 g_rec.last_details := 'Expected "' || substr(against_value_in,1,1000) || - 2670 EXEC 3 2 1 1 g_rec.raise_exception := raise_exc_in; - 2671 EXEC 3 3 1 1 process_assertion; - 2672 EXEC 2 0 0 0 exception when others then - 2673 EXEC 2 226 43 183 l_errstack := substr(dbms_utility.format_error_stack || - 2675 EXEC 2 5 2 3 g_rec.last_details := 'Exception raised for Query: ' || - 2678 EXEC 2 1 1 1 g_rec.last_pass := FALSE; - 2679 EXEC 2 0 0 0 g_rec.raise_exception := raise_exc_in; - 2680 EXEC 2 1 1 1 process_assertion; - 2681 EXEC 3 140 25 59 end eqqueryvalue; - 2684 EXEC 5 30 1 6 procedure eqqueryvalue ( - 2697 EXEC 5 2 0 1 g_rec.last_assert := 'EQQUERYVALUE'; - 2698 EXEC 5 2 0 1 g_rec.last_msg := msg_in; - 2699 EXEC 5 3441 90 1669 open l_rc for check_query_in; - 2700 EXEC 4 225 37 83 fetch l_rc into l_rc_buff; - 2701 EXEC 4 78 14 27 close l_rc; - 2702 EXEC 4 18 0 6 compare_results := nvl(DBMS_LOB.COMPARE(l_rc_buff, against_value_in),-1); - 2703 EXEC 4 10 0 3 g_rec.last_pass := ( (compare_results = 0) - 2704 UNKN 0 4 1 2 or ( l_rc_buff is null - 2707 EXEC 4 25 4 8 g_rec.last_details := 'DBMS_LOB.COMPARE between BLOB and Query: ' || - 2710 EXEC 4 0 0 0 g_rec.raise_exception := raise_exc_in; - 2711 EXEC 4 3 1 1 process_assertion; - 2712 EXEC 2 0 0 0 exception when others then - 2713 EXEC 2 117 41 76 l_errstack := substr(dbms_utility.format_error_stack || -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 2715 EXEC 2 5 2 3 g_rec.last_details := 'Exception raised for Query: ' || - 2718 EXEC 2 0 0 0 g_rec.last_pass := FALSE; - 2719 EXEC 2 1 1 1 g_rec.raise_exception := raise_exc_in; - 2720 EXEC 2 0 0 0 process_assertion; - 2721 EXEC 4 30 1 19 end eqqueryvalue; - 2725 IGNR 0 6 6 6 procedure t_eqqueryvalue - 2730 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQQUERYVALUE VARCHAR2 Happy Path 1'; - 2731 IGNR 1 0 0 0 eqqueryvalue ( - 2736 IGNR 1 0 0 0 temp_rec := g_rec; - 2738 IGNR 1 0 0 0 wt_assert.eq ( - 2742 IGNR 1 1 1 1 wt_assert.eq ( - 2747 IGNR 1 1 1 1 wt_assert.eq ( - 2751 IGNR 1 0 0 0 wt_assert.eq ( - 2756 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQQUERYVALUE VARCHAR2 Happy Path 2'; - 2757 IGNR 1 0 0 0 eqqueryvalue ( - 2763 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQQUERYVALUE VARCHAR2 Sad Path 1'; - 2764 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 2765 IGNR 1 0 0 0 eqqueryvalue ( - 2769 IGNR 1 1 1 1 temp_rec := g_rec; - 2770 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 2771 IGNR 1 0 0 0 wt_assert.eq ( - 2776 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQQUERYVALUE VARCHAR2 Sad Path 2'; - 2777 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 2779 IGNR 1 0 0 0 eqqueryvalue ( - 2784 IGNR 0 0 0 0 l_found_exception := FALSE; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 2785 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 2786 IGNR 1 0 0 0 l_found_exception := TRUE; - 2787 IGNR 0 1 1 1 end; - 2789 IGNR 1 2 2 2 temp_rec := g_rec; - 2790 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 2791 IGNR 1 1 1 1 wt_assert.eq ( - 2795 IGNR 1 0 0 0 wt_assert.eq ( - 2800 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQQUERYVALUE VARCHAR2 Sad Path 3'; - 2801 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 2802 IGNR 1 0 0 0 eqqueryvalue ( - 2806 IGNR 1 2 2 2 temp_rec := g_rec; - 2807 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 2809 IGNR 1 0 0 0 wt_assert.eq ( - 2813 IGNR 1 0 0 0 wt_assert.isnotnull ( - 2816 IGNR 1 7 7 7 wt_assert.this ( - 2822 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQQUERYVALUE XMLTYPE Happy Path 1'; - 2823 IGNR 1 0 0 0 eqqueryvalue ( - 2827 IGNR 1 2 2 2 temp_rec := g_rec; - 2829 IGNR 1 1 1 1 wt_assert.eq ( - 2833 IGNR 1 1 1 1 wt_assert.eq ( - 2838 IGNR 1 0 0 0 wt_assert.eq ( - 2842 IGNR 1 0 0 0 wt_assert.isnotnull ( - 2845 IGNR 1 18 18 18 wt_assert.this ( - 2850 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQQUERYVALUE XMLTYPE Sad Path 1'; - 2851 IGNR 1 1 1 1 wtplsql_skip_save := TRUE; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 2852 IGNR 1 1 1 1 eqqueryvalue ( - 2856 IGNR 1 5 5 5 temp_rec := g_rec; - 2857 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 2859 IGNR 1 1 1 1 wt_assert.eq ( - 2863 IGNR 1 0 0 0 wt_assert.isnotnull ( - 2866 IGNR 1 14 14 14 wt_assert.this ( - 2872 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQQUERYVALUE XMLTYPE Sad Path 2'; - 2873 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 2875 IGNR 1 0 0 0 eqqueryvalue ( - 2880 IGNR 0 0 0 0 l_found_exception := FALSE; - 2881 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 2882 IGNR 1 0 0 0 l_found_exception := TRUE; - 2883 IGNR 0 3 3 3 end; - 2885 IGNR 1 5 5 5 temp_rec := g_rec; - 2886 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 2887 IGNR 1 1 1 1 wt_assert.eq ( - 2891 IGNR 1 0 0 0 wt_assert.eq ( - 2896 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQQUERYVALUE XMLTYPE Sad Path 3'; - 2897 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 2898 IGNR 1 0 0 0 eqqueryvalue ( - 2902 IGNR 1 3 3 3 temp_rec := g_rec; - 2903 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 2905 IGNR 1 1 1 1 wt_assert.eq ( - 2909 IGNR 1 1 1 1 wt_assert.isnotnull ( - 2912 IGNR 1 9 9 9 wt_assert.this ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 2918 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQQUERYVALUE CLOB Happy Path 1'; - 2919 IGNR 1 1 1 1 eqqueryvalue ( - 2924 IGNR 1 5 5 5 temp_rec := g_rec; - 2926 IGNR 1 0 0 0 wt_assert.eq ( - 2930 IGNR 1 1 1 1 wt_assert.eq ( - 2935 IGNR 1 0 0 0 wt_assert.eq ( - 2939 IGNR 1 1 1 1 wt_assert.isnotnull ( - 2942 IGNR 1 17 17 17 wt_assert.this ( - 2947 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQQUERYVALUE CLOB Happy Path 2'; - 2948 IGNR 1 0 0 0 eqqueryvalue ( - 2953 IGNR 1 1 1 1 temp_rec := g_rec; - 2955 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQQUERYVALUE CLOB Sad Path 1'; - 2956 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 2957 IGNR 1 0 0 0 eqqueryvalue ( - 2961 IGNR 1 4 4 4 temp_rec := g_rec; - 2962 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 2964 IGNR 1 0 0 0 wt_assert.eq ( - 2968 IGNR 1 1 1 1 wt_assert.isnotnull ( - 2971 IGNR 1 12 12 12 wt_assert.this ( - 2977 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQQUERYVALUE CLOB Sad Path 2'; - 2978 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 2980 IGNR 1 0 0 0 eqqueryvalue ( - 2985 IGNR 0 0 0 0 l_found_exception := FALSE; - 2986 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 2987 IGNR 1 0 0 0 l_found_exception := TRUE; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 2988 IGNR 0 1 1 1 end; - 2990 IGNR 1 4 4 4 temp_rec := g_rec; - 2991 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 2992 IGNR 1 0 0 0 wt_assert.eq ( - 2996 IGNR 1 0 0 0 wt_assert.eq ( - 3001 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQQUERYVALUE CLOB Sad Path 3'; - 3002 IGNR 1 1 1 1 wtplsql_skip_save := TRUE; - 3003 IGNR 1 1 1 1 eqqueryvalue ( - 3007 IGNR 1 1 1 1 temp_rec := g_rec; - 3008 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 3010 IGNR 1 0 0 0 wt_assert.eq ( - 3014 IGNR 1 0 0 0 wt_assert.isnotnull ( - 3017 IGNR 1 7 7 7 wt_assert.this ( - 3023 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQQUERYVALUE BLOB Happy Path 1'; - 3024 IGNR 1 0 0 0 eqqueryvalue ( - 3029 IGNR 1 1 1 1 temp_rec := g_rec; - 3031 IGNR 1 0 0 0 wt_assert.eq ( - 3035 IGNR 1 1 1 1 wt_assert.eq ( - 3040 IGNR 1 0 0 0 wt_assert.eq ( - 3044 IGNR 1 1 1 1 wt_assert.eq ( - 3050 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQQUERYVALUE BLOB Happy Path 2'; - 3051 IGNR 1 0 0 0 eqqueryvalue ( - 3057 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQQUERYVALUE BLOB Sad Path 1'; - 3058 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 3059 IGNR 1 1 1 1 eqqueryvalue ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 3063 IGNR 1 2 2 2 temp_rec := g_rec; - 3064 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 3066 IGNR 1 1 1 1 wt_assert.eq ( - 3070 IGNR 1 2 2 2 wt_assert.eq ( - 3076 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQQUERYVALUE BLOB Sad Path 2'; - 3077 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 3079 IGNR 1 0 0 0 eqqueryvalue ( - 3084 IGNR 0 0 0 0 l_found_exception := FALSE; - 3085 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 3086 IGNR 1 0 0 0 l_found_exception := TRUE; - 3087 IGNR 0 1 1 1 end; - 3089 IGNR 1 2 2 2 temp_rec := g_rec; - 3090 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 3091 IGNR 1 1 1 1 wt_assert.eq ( - 3095 IGNR 1 1 1 1 wt_assert.eq ( - 3100 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQQUERYVALUE BLOB Sad Path 3'; - 3101 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 3102 IGNR 1 0 0 0 eqqueryvalue ( - 3106 IGNR 1 1 1 1 temp_rec := g_rec; - 3107 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 3109 IGNR 1 0 0 0 wt_assert.eq ( - 3113 IGNR 1 0 0 0 wt_assert.isnotnull ( - 3116 IGNR 1 7 7 7 wt_assert.this ( - 3121 IGNR 1 2 2 2 end t_eqqueryvalue; - 3126 UNKN 0 2 1 1 procedure eqquery ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 3133 EXEC 4 3 1 1 g_rec.last_assert := 'EQQUERY'; - 3134 EXEC 4 3 1 1 g_rec.last_msg := msg_in; - 3135 EXEC 4 2 1 1 compare_queries(check_query_in, against_query_in); - 3136 EXEC 4 1 0 1 g_rec.raise_exception := raise_exc_in; - 3137 EXEC 4 4 1 1 process_assertion; - 3138 EXEC 3 2 0 1 end eqquery; - 3142 IGNR 0 3 3 3 procedure t_eqquery - 3147 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQQUERY Tests Happy Path 1'; - 3148 IGNR 1 0 0 0 wt_assert.eqquery ( - 3152 IGNR 1 2 2 2 temp_rec := g_rec; - 3154 IGNR 1 1 1 1 wt_assert.eq ( - 3158 IGNR 1 0 0 0 wt_assert.eq ( - 3163 IGNR 1 1 1 1 wt_assert.eq ( - 3167 IGNR 1 0 0 0 wt_assert.isnotnull ( - 3170 IGNR 1 3 3 3 wt_assert.this ( - 3175 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQQUERY Tests Sad Path 1'; - 3176 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 3177 IGNR 1 1 1 1 eqquery ( - 3181 IGNR 1 4 4 4 temp_rec := g_rec; - 3182 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 3184 IGNR 1 1 1 1 wt_assert.eq ( - 3188 IGNR 1 1 1 1 wt_assert.isnotnull ( - 3191 IGNR 1 3 3 3 wt_assert.this ( - 3196 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQQUERY Tests Sad Path 2'; - 3197 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 3199 IGNR 1 1 1 1 eqquery ( - 3204 IGNR 0 0 0 0 l_found_exception := FALSE; - 3205 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 3206 IGNR 1 0 0 0 l_found_exception := TRUE; - 3207 IGNR 0 1 1 1 end; - 3208 IGNR 1 4 4 4 temp_rec := g_rec; - 3209 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 3211 IGNR 1 1 1 1 wt_assert.eq ( - 3215 IGNR 1 1 1 1 wt_assert.eq ( - 3220 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQQUERY Tests Sad Path 3'; - 3221 IGNR 1 1 1 1 wtplsql_skip_save := TRUE; - 3222 IGNR 1 0 0 0 eqquery ( - 3226 IGNR 1 4 4 4 temp_rec := g_rec; - 3227 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 3229 IGNR 1 1 1 1 wt_assert.eq ( - 3233 IGNR 1 1 1 1 wt_assert.isnotnull ( - 3236 IGNR 1 10 10 10 wt_assert.this ( - 3240 IGNR 1 1 1 1 end t_eqquery; - 3245 UNKN 0 6 1 2 procedure eqtable ( - 3253 EXEC 5 5 1 1 l_check_query varchar2(16000) := 'select * from ' || check_this_in; - 3254 EXEC 5 2 1 1 l_against_query varchar2(16000) := 'select * from ' || against_this_in; - 3256 EXEC 5 4 1 1 g_rec.last_assert := 'EQTABLE'; - 3257 EXEC 5 3 0 1 g_rec.last_msg := msg_in; - 3258 EXEC 5 1 0 1 if check_where_in is not null - 3260 EXEC 3 2 0 1 l_check_query := l_check_query || ' where ' || check_where_in; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 3262 EXEC 3 0 0 0 if against_where_in is not null - 3264 EXEC 3 1 1 1 l_against_query := l_against_query || ' where ' || against_where_in; - 3266 EXEC 5 1 0 1 compare_queries(l_check_query, l_against_query); - 3267 EXEC 5 1 0 1 g_rec.raise_exception := raise_exc_in; - 3268 EXEC 5 5 1 2 process_assertion; - 3269 EXEC 4 3 1 1 end eqtable; - 3273 IGNR 0 4 4 4 procedure t_eqtable - 3278 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQTABLE Tests Happy Path 1'; - 3279 IGNR 1 0 0 0 wt_assert.eqtable ( - 3285 IGNR 1 1 1 1 temp_rec := g_rec; - 3287 IGNR 1 1 1 1 wt_assert.eq ( - 3291 IGNR 1 0 0 0 wt_assert.eq ( - 3296 IGNR 1 1 1 1 wt_assert.eq ( - 3300 IGNR 1 1 1 1 wt_assert.isnotnull ( - 3303 IGNR 1 4 4 4 wt_assert.this ( - 3308 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQTABLE Tests Happy Path 2'; - 3309 IGNR 1 9 1 5 eqtable ( - 3316 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQTABLE Sad Path 1'; - 3317 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 3318 IGNR 1 4 1 3 eqtable ( - 3324 IGNR 1 6 6 6 temp_rec := g_rec; - 3325 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 3327 IGNR 1 1 1 1 wt_assert.eq ( - 3331 IGNR 1 0 0 0 wt_assert.isnotnull ( - 3334 IGNR 1 7 7 7 wt_assert.this ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 3339 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQTABLE Sad Path 2'; - 3340 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 3342 IGNR 1 4 1 3 eqtable ( - 3349 IGNR 0 0 0 0 l_found_exception := FALSE; - 3350 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 3351 IGNR 1 1 1 1 l_found_exception := TRUE; - 3352 IGNR 0 2 2 2 end; - 3354 IGNR 1 4 4 4 temp_rec := g_rec; - 3355 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 3356 IGNR 1 1 1 1 wt_assert.eq ( - 3360 IGNR 1 0 0 0 wt_assert.eq ( - 3365 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQTABLE Sad Path 3'; - 3366 IGNR 1 1 1 1 wtplsql_skip_save := TRUE; - 3367 IGNR 1 0 0 0 eqtable ( - 3371 IGNR 1 6 6 6 temp_rec := g_rec; - 3372 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 3374 IGNR 1 1 1 1 wt_assert.eq ( - 3378 IGNR 1 1 1 1 wt_assert.isnotnull ( - 3381 IGNR 1 11 11 11 wt_assert.this ( - 3385 IGNR 1 2 2 2 end t_eqtable; - 3390 UNKN 0 10 1 2 procedure eqtabcount ( - 3398 EXEC 6 7 1 2 l_query varchar2(16000) := 'select count(*) from ' || check_this_in; - 3402 EXEC 11 27 1 5 procedure l_run_query is - 3406 EXEC 11 71425 112 68989 open l_rc for l_query; - 3407 EXEC 10 200334 1177 33514 fetch l_rc into l_cnt; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 3408 EXEC 10 666 41 154 close l_rc; - 3409 EXEC 10 18 1 2 l_success := TRUE; - 3411 EXEC 1 0 0 0 when OTHERS - 3413 EXEC 1 231 231 231 g_rec.last_details := SQLERRM || CHR(10) || - 3415 EXEC 1 1 1 1 g_rec.last_pass := FALSE; - 3416 EXEC 1 0 0 0 l_success := FALSE; - 3417 EXEC 1 1 1 1 g_rec.raise_exception := raise_exc_in; - 3418 EXEC 1 1 1 1 process_assertion; - 3419 EXEC 11 86 1 38 end l_run_query; - 3421 EXEC 6 2 0 1 g_rec.last_assert := 'EQTABCOUNT'; - 3422 EXEC 6 2 0 1 g_rec.last_msg := msg_in; - 3424 EXEC 6 1 0 1 l_query := 'select count(*) from ' || check_this_in; - 3425 EXEC 6 2 0 1 if check_where_in is not null - 3427 EXEC 4 3 1 1 l_query := l_query || ' where ' || check_where_in; - 3429 EXEC 6 1 0 1 l_run_query; - 3430 EXEC 7 5 1 1 if NOT l_success then return; end if; - 3431 EXEC 5 6 1 2 l_check_cnt := l_cnt; - 3433 EXEC 5 22 4 5 l_query := 'select count(*) from ' || against_this_in; - 3434 EXEC 5 1 0 1 if against_where_in is not null - 3436 EXEC 3 4 1 2 l_query := l_query || ' where ' || against_where_in; - 3438 EXEC 5 5 1 1 l_run_query; - 3439 EXEC 5 2 0 1 if NOT l_success then return; end if; - 3440 EXEC 5 11 2 3 g_rec.last_pass := (l_check_cnt = l_cnt); - 3442 EXEC 5 54 10 11 g_rec.last_details := 'Expected ' || l_cnt || ' rows from "' || against_this_in || - 3445 EXEC 5 0 0 0 g_rec.raise_exception := raise_exc_in; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 3446 EXEC 5 5 1 1 process_assertion; - 3447 EXEC 4 3 1 1 end eqtabcount; - 3451 IGNR 0 4 4 4 procedure t_eqtabcount - 3456 IGNR 1 1 1 1 wt_assert.g_testcase := 'EQTABCOUNT Tests Happy Path 1'; - 3457 IGNR 1 7 1 4 eqtabcount ( - 3463 IGNR 1 1 1 1 temp_rec := g_rec; - 3465 IGNR 1 0 0 0 wt_assert.eq ( - 3469 IGNR 1 1 1 1 wt_assert.eq ( - 3474 IGNR 1 1 1 1 wt_assert.eq ( - 3478 IGNR 1 1 1 1 wt_assert.isnotnull ( - 3481 IGNR 1 8 8 8 wt_assert.this ( - 3487 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQTABCOUNT Tests Happy Path 2'; - 3488 IGNR 1 4 1 3 eqtabcount ( - 3495 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQTABCOUNT Sad Path 1'; - 3496 IGNR 1 1 1 1 wtplsql_skip_save := TRUE; - 3497 IGNR 1 3 1 2 eqtabcount ( - 3503 IGNR 1 5 5 5 temp_rec := g_rec; - 3504 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 3506 IGNR 1 0 0 0 wt_assert.eq ( - 3510 IGNR 1 0 0 0 wt_assert.isnotnull ( - 3513 IGNR 1 8 8 8 wt_assert.this ( - 3519 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQTABCOUNT Sad Path 2'; - 3520 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 3522 IGNR 1 3 1 2 eqtabcount ( - 3529 IGNR 0 0 0 0 l_found_exception := FALSE; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 3530 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 3531 IGNR 1 1 1 1 l_found_exception := TRUE; - 3532 IGNR 0 1 1 1 end; - 3534 IGNR 1 4 4 4 temp_rec := g_rec; - 3535 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 3536 IGNR 1 0 0 0 wt_assert.eq ( - 3540 IGNR 1 0 0 0 wt_assert.eq ( - 3545 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQTABCOUNT Sad Path 3'; - 3546 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 3547 IGNR 1 1 1 1 eqtabcount ( - 3551 IGNR 1 6 6 6 temp_rec := g_rec; - 3552 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 3554 IGNR 1 0 0 0 wt_assert.eq ( - 3558 IGNR 1 0 0 0 wt_assert.isnotnull ( - 3561 IGNR 1 8 8 8 wt_assert.this ( - 3566 IGNR 1 0 0 0 wt_assert.g_testcase := 'EQTABCOUNT Sad Path 4'; - 3567 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 3568 IGNR 1 0 0 0 eqtabcount ( - 3572 IGNR 1 4 4 4 temp_rec := g_rec; - 3573 IGNR 1 1 1 1 wtplsql_skip_save := FALSE; - 3575 IGNR 1 1 1 1 wt_assert.eq ( - 3579 IGNR 1 0 0 0 wt_assert.isnotnull ( - 3583 IGNR 1 6 6 6 wt_assert.this ( - 3587 IGNR 1 2 2 2 wt_assert.this ( - 3591 IGNR 1 2 2 2 end t_eqtabcount; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 3596 EXEC 6 6 0 1 procedure objexists ( - 3605 EXEC 6 1 0 1 g_rec.last_assert := 'OBJEXISTS'; - 3606 EXEC 6 2 0 1 g_rec.last_msg := msg_in; - 3607 EXEC 6 4528 118 1586 select count(*) into l_num_objects - 3614 EXEC 6 15 0 3 g_rec.last_pass := case l_num_objects when 0 then FALSE else TRUE end; - 3615 EXEC 6 5 0 2 g_rec.last_details := 'Number of objects found for "' || - 3616 UNKN 0 20 0 6 case when obj_owner_in is null then '' - 3619 UNKN 0 31 1 6 case when obj_type_in is null then '' - 3622 EXEC 6 0 0 0 g_rec.raise_exception := raise_exc_in; - 3623 EXEC 6 4 1 1 process_assertion; - 3624 EXEC 5 5 1 1 end objexists; - 3627 UNKN 0 3 1 2 procedure objexists ( - 3633 EXEC 2 7 3 4 l_pos number := instr(check_this_in, '.'); - 3635 EXEC 2 7 3 4 objexists(msg_in => msg_in - 3638 EXEC 2 0 0 0 end objexists; - 3642 IGNR 0 2 2 2 procedure t_object_exists - 3647 IGNR 1 0 0 0 wt_assert.g_testcase := 'OBJEXISTS Happy Path 1'; - 3648 IGNR 1 0 0 0 objexists ( - 3652 IGNR 1 2 2 2 temp_rec := g_rec; - 3654 IGNR 1 1 1 1 wt_assert.eq ( - 3658 IGNR 1 0 0 0 wt_assert.eq ( - 3663 IGNR 1 0 0 0 wt_assert.eq ( - 3667 IGNR 1 0 0 0 wt_assert.eq ( - 3672 IGNR 1 1 1 1 wt_assert.g_testcase := 'OBJEXISTS Happy Path 2'; - 3673 IGNR 1 1 1 1 objexists ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 3679 IGNR 1 0 0 0 wt_assert.g_testcase := 'OBJEXISTS Happy Path 3'; - 3680 IGNR 1 0 0 0 objexists ( - 3684 IGNR 1 0 0 0 wt_assert.g_testcase := 'OBJEXISTS Happy Path 4'; - 3685 IGNR 1 1 1 1 objexists ( - 3689 IGNR 1 1 1 1 wt_assert.g_testcase := 'OBJEXISTS Sad Path 1'; - 3690 IGNR 1 1 1 1 wtplsql_skip_save := TRUE; - 3691 IGNR 1 1 1 1 objexists ( - 3695 IGNR 1 2 2 2 temp_rec := g_rec; - 3696 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 3698 IGNR 1 1 1 1 wt_assert.eq ( - 3702 IGNR 1 0 0 0 wt_assert.eq ( - 3707 IGNR 1 0 0 0 wt_assert.g_testcase := 'OBJEXISTS Sad Path 2'; - 3708 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 3710 IGNR 1 0 0 0 objexists ( - 3715 IGNR 0 0 0 0 l_found_exception := FALSE; - 3716 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 3717 IGNR 1 0 0 0 l_found_exception := TRUE; - 3718 IGNR 0 1 1 1 end; - 3719 IGNR 1 1 1 1 temp_rec := g_rec; - 3720 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 3722 IGNR 1 0 0 0 wt_assert.eq ( - 3726 IGNR 1 0 0 0 wt_assert.eq ( - 3730 IGNR 1 0 0 0 end t_object_exists; - 3735 EXEC 5 5 0 1 procedure objnotexists ( - 3744 EXEC 5 1 0 1 g_rec.last_assert := 'OBJNOTEXISTS'; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 3745 EXEC 5 0 0 0 g_rec.last_msg := msg_in; - 3746 EXEC 5 888 121 249 select count(*) into l_num_objects - 3753 EXEC 5 11 0 5 g_rec.last_pass := case l_num_objects when 0 then TRUE else FALSE end; - 3754 EXEC 5 1 1 1 g_rec.last_details := 'Number of objects found for "' || - 3755 UNKN 0 8 0 2 case when obj_owner_in is null then '' - 3758 UNKN 0 9 1 2 case when obj_type_in is null then '' - 3761 EXEC 5 1 0 1 g_rec.raise_exception := raise_exc_in; - 3762 EXEC 5 0 0 0 process_assertion; - 3763 EXEC 4 2 1 1 end objnotexists; - 3766 UNKN 0 2 2 2 procedure objnotexists ( - 3772 EXEC 1 2 2 2 l_pos number := instr(check_this_in, '.'); - 3774 EXEC 1 3 3 3 objnotexists(msg_in => msg_in - 3777 EXEC 1 0 0 0 end objnotexists; - 3781 IGNR 0 2 2 2 procedure t_object_not_exists - 3786 IGNR 1 0 0 0 wt_assert.g_testcase := 'OBJNOTEXISTS Happy Path 1'; - 3787 IGNR 1 0 0 0 objnotexists ( - 3791 IGNR 1 1 1 1 temp_rec := g_rec; - 3793 IGNR 1 1 1 1 wt_assert.eq ( - 3797 IGNR 1 0 0 0 wt_assert.eq ( - 3802 IGNR 1 1 1 1 wt_assert.eq ( - 3806 IGNR 1 1 1 1 wt_assert.eq ( - 3811 IGNR 1 0 0 0 wt_assert.g_testcase := 'OBJNOTEXISTS Happy Path 2'; - 3812 IGNR 1 0 0 0 objnotexists ( - 3818 IGNR 1 0 0 0 wt_assert.g_testcase := 'OBJNOTEXISTS Happy Path 3'; - 3819 IGNR 1 0 0 0 objnotexists ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 3823 IGNR 1 1 1 1 wt_assert.g_testcase := 'OBJNOTEXISTS Sad Path 1'; - 3824 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 3825 IGNR 1 0 0 0 objnotexists ( - 3829 IGNR 1 2 2 2 temp_rec := g_rec; - 3830 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 3832 IGNR 1 0 0 0 wt_assert.eq ( - 3836 IGNR 1 0 0 0 wt_assert.eq ( - 3841 IGNR 1 1 1 1 wt_assert.g_testcase := 'OBJNOTEXISTS Sad Path 2'; - 3842 IGNR 1 0 0 0 wtplsql_skip_save := TRUE; - 3844 IGNR 1 0 0 0 objnotexists ( - 3849 IGNR 0 0 0 0 l_found_exception := FALSE; - 3850 IGNR 1 0 0 0 exception when ASSERT_FAILURE_EXCEPTION then - 3851 IGNR 1 0 0 0 l_found_exception := TRUE; - 3852 IGNR 0 1 1 1 end; - 3854 IGNR 1 1 1 1 temp_rec := g_rec; - 3855 IGNR 1 0 0 0 wtplsql_skip_save := FALSE; - 3856 IGNR 1 0 0 0 wt_assert.eq ( - 3860 IGNR 1 0 0 0 wt_assert.eq ( - 3864 IGNR 1 1 1 1 end t_object_not_exists; - 3873 IGNR 0 5 5 5 procedure WTPLSQL_RUN --% WTPLSQL SET DBOUT "WT_ASSERT:PACKAGE BODY" %-- - 3876 IGNR 1 2874 2874 2874 select temp_clob, temp_nclob, temp_xml, temp_blob - 3880 IGNR 1 1 1 1 t_boolean_to_status; - 3881 IGNR 1 0 0 0 t_process_assertion; - 3882 IGNR 1 0 0 0 t_compare_queries; - 3883 IGNR 1 0 0 0 t_nls_settings; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 3884 IGNR 1 0 0 0 t_last_values; - 3885 IGNR 1 0 0 0 t_reset_globals; - 3886 IGNR 1 0 0 0 t_this; - 3887 IGNR 1 0 0 0 t_eq; - 3888 IGNR 1 0 0 0 t_isnotnull; - 3889 IGNR 1 0 0 0 t_isnull; - 3891 IGNR 1 0 0 0 t_raises; - 3892 IGNR 1 0 0 0 t_eqqueryvalue; - 3893 IGNR 1 1 1 1 t_eqquery; - 3894 IGNR 1 0 0 0 t_eqtable; - 3895 IGNR 1 1 1 1 t_eqtabcount; - 3896 IGNR 1 1 1 1 t_object_exists; - 3897 IGNR 1 0 0 0 t_object_not_exists; - 3898 IGNR 1 2 2 2 end WTPLSQL_RUN; - 3903 EXCL 0 0 0 0 end wt_assert; - - - wtPLSQL 1.1.0 - Run ID 7: 29-Jun-2018 03:22:00 PM - - Test Results for WTP.WT_PROFILER - Total Test Cases: 41 Total Assertions: 265 - Minimum Interval msec: 0 Failed Assertions: 1 - Average Interval msec: 5 Error Assertions: 0 - Maximum Interval msec: 129 Test Yield: 99.60% - Total Run Time (sec): 1.3 - - Code Coverage for PACKAGE BODY WTP.WT_PROFILER - Ignored Lines: 534 Total Profiled Lines: 696 - Excluded Lines: 2 Total Executed Lines: 143 - Minimum LineExec usec: 0 Not Executed Lines: 6 - Average LineExec usec: 672 Unknown Lines: 11 - Maximum LineExec usec: 86060 Code Coverage: 96.00% - Trigger Source Offset: 0 - - - WTP.WT_PROFILER Test Result Details (Test Run ID 7) ------------------------------------------------------------ - ---- Test Case: Get Error Messages - PASS 129ms ERROR_PARAM Test 1. ISNOTNULL - Expected NOT NULL and got "DBMS_PROFILER Error: A subprogram was called with an incorrect parameter." - PASS 1ms ERROR_PARAM Test 2. THIS - Expected "TRUE" and got "TRUE" - PASS 0ms ERROR_IO Test 1. ISNOTNULL - Expected NOT NULL and got "DBMS_PROFILER Error: Data flush operation failed. Check whether the profiler tables have been created, are accessible, and that there is adequate space." - PASS 0ms ERROR_IO Test 2. THIS - Expected "TRUE" and got "TRUE" - PASS 0ms ERROR_VERSION Test 1. ISNOTNULL - Expected NOT NULL and got "DBMS_PROFILER Error: There is a mismatch between package and database implementation. Oracle returns this error if an incorrect version of the DBMS_PROFILER package is installed, and if the version of the profiler package cannot work with this database version." - PASS 0ms ERROR_VERSION Test 2. THIS - Expected "TRUE" and got "TRUE" - PASS 0ms Unknown Error Test 1. ISNOTNULL - Expected NOT NULL and got "DBMS_PROFILER Error: Unknown error number -9999" - PASS 0ms Unknown Error Test 2. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: Delete PL/SQL Profiler Records Happy Path 1 - PASS 1ms delete_plsql_profiler_recs(-99) 1. ISNULL - Expected NULL and got "" - PASS 1ms Number of plsql_profiler_runs (-99). EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from plsql_profiler_runs where runid = -99 - PASS 5ms Number of plsql_profiler_units (-99). EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from plsql_profiler_units where runid = -99 - PASS 3ms Number of plsql_profiler_data (-99). EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from plsql_profiler_data where runid = -99 - ---- Test Case: Delete PL/SQL Profiler Records Happy Path 2 - PASS 4ms insert plsql_profiler_runs (-99). RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "insert into plsql_profiler_runs (runid) values (-99)". - PASS 6ms insert plsql_profiler_units (-99). RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "insert into plsql_profiler_units (runid, unit_number, total_time) values (-99, -99, 0)". - PASS 2ms insert plsql_profiler_data (RUNID: -99). RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "insert into plsql_profiler_data (runid, unit_number, line#) values (-99, -99, 0)". - PASS 1ms Number of plsql_profiler_runs (-99). EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from plsql_profiler_runs where runid = -99 - PASS 1ms Number of plsql_profiler_units (-99). EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from plsql_profiler_units where runid = -99 - PASS 0ms Number of plsql_profiler_data (-99). EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from plsql_profiler_data where runid = -99 - PASS 1ms delete_plsql_profiler_recs(-99) 2. ISNULL - Expected NULL and got "" - PASS 0ms Number of plsql_profiler_runs (-99). EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from plsql_profiler_runs where runid = -99 - PASS 0ms Number of plsql_profiler_units (-99). EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from plsql_profiler_units where runid = -99 - PASS 1ms Number of plsql_profiler_data (-99). EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from plsql_profiler_data where runid = -99 - ---- Test Case: Find DBOUT Setup - PASS 13ms Compile package WT_PROFILE_FIND_DBOUT. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package WT_PROFILE_FIND_DBOUT is\n l_junk number;\nend WT_PROFILE_FIND_DBOUT;". - PASS 0ms Compile package WT_PROFILE_FIND_DBOUT Error. ISNULL - Expected NULL and got "" - PASS 1ms WT_PROFILE_FIND_DBOUT package. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_FIND_DBOUT"(PACKAGE) is 1 - ---- Test Case: Find DBOUT Happy Path 1 - PASS 11ms Compile package body WT_PROFILE_FIND_DBOUT. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package body WT_PROFILE_FIND_DBOUT is\nbegin\n l_junk := 1;\nend WT_PROFILE_FIND_DBOUT;". - PASS 1ms Compile package body WT_PROFILE_FIND_DBOUT Error. ISNULL - Expected NULL and got "" - PASS 0ms WT_PROFILE_FIND_DBOUT package body. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_FIND_DBOUT"(PACKAGE BODY) is 1 - PASS 1ms l_recTEST.dbout_owner. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.dbout_name. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.dbout_type. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.error_message. ISNULL - Expected NULL and got "" - ---- Test Case: Find DBOUT Happy Path 2 - PASS 20ms Compile package body WT_PROFILE_FIND_DBOUT. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package body WT_PROFILE_FIND_DBOUT is\n --% WTPLSQL SET DBOUT "WT_PROFILE_FIND_DBOUT:PACKAGE BODY" %--\nbegin\n l_junk := 1;\nend WT_PROFILE_FIND_DBOUT;". - PASS 1ms Compile package body WT_PROFILE_FIND_DBOUT Error. ISNULL - Expected NULL and got "" - PASS 0ms WT_PROFILE_FIND_DBOUT package body. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_FIND_DBOUT"(PACKAGE BODY) is 1 - PASS 88ms l_recTEST.dbout_owner. EQ - Expected "WTP" and got "WTP" - PASS 1ms l_recTEST.dbout_name. EQ - Expected "WT_PROFILE_FIND_DBOUT" and got "WT_PROFILE_FIND_DBOUT" - PASS 0ms l_recTEST.dbout_type. EQ - Expected "PACKAGE BODY" and got "PACKAGE BODY" - PASS 0ms l_recTEST.error_message. ISNULL - Expected NULL and got "" - ---- Test Case: Find DBOUT Happy Path 3 - PASS 22ms Compile package body WT_PROFILE_FIND_DBOUT. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package body WT_PROFILE_FIND_DBOUT is\n --% WTPLSQL SET DBOUT "WTP.WT_PROFILE_FIND_DBOUT:PACKAGE BODY" %--\nbegin\n l_junk := 1;\nend WT_PROFILE_FIND_DBOUT;". - PASS 0ms Compile package body WT_PROFILE_FIND_DBOUT Error. ISNULL - Expected NULL and got "" - PASS 1ms WT_PROFILE_FIND_DBOUT package body. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_FIND_DBOUT"(PACKAGE BODY) is 1 - PASS 75ms l_recTEST.dbout_owner. EQ - Expected "WTP" and got "WTP" - PASS 0ms l_recTEST.dbout_name. EQ - Expected "WT_PROFILE_FIND_DBOUT" and got "WT_PROFILE_FIND_DBOUT" - PASS 0ms l_recTEST.dbout_type. EQ - Expected "PACKAGE BODY" and got "PACKAGE BODY" - PASS 0ms l_recTEST.error_message. ISNULL - Expected NULL and got "" - ---- Test Case: Find DBOUT Sad Path 1 - PASS 25ms Compile package body WT_PROFILE_FIND_DBOUT. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package body WT_PROFILE_FIND_DBOUT is\n --% WTPLSQL SET DBOUT "BOGUS1" %--\nbegin\n l_junk := 1;\nend WT_PROFILE_FIND_DBOUT;". - PASS 0ms Compile package body WT_PROFILE_FIND_DBOUT Error. ISNULL - Expected NULL and got "" - PASS 1ms WT_PROFILE_FIND_DBOUT package body. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_FIND_DBOUT"(PACKAGE BODY) is 1 - PASS 72ms l_recTEST.dbout_owner. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.dbout_name. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.dbout_type. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.error_message. EQ - Expected "Unable to find database object "BOGUS1"." and got "Unable to find database object "BOGUS1"." - ---- Test Case: Find DBOUT Sad Path 2 - PASS 21ms Compile package body WT_PROFILE_FIND_DBOUT. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package body WT_PROFILE_FIND_DBOUT is\n --% WTPLSQL SET DBOUT "WTP.WT_PROFILE_FIND_DBOUT" %--\nbegin\n l_junk := 1;\nend WT_PROFILE_FIND_DBOUT;". - PASS 2ms Compile package body WT_PROFILE_FIND_DBOUT Error. ISNULL - Expected NULL and got "" - PASS 2ms WT_PROFILE_FIND_DBOUT package body. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_FIND_DBOUT"(PACKAGE BODY) is 1 - PASS 69ms l_recTEST.dbout_owner. EQ - Expected "WTP" and got "WTP" - PASS 0ms l_recTEST.dbout_name. EQ - Expected "WT_PROFILE_FIND_DBOUT" and got "WT_PROFILE_FIND_DBOUT" - PASS 0ms l_recTEST.error_message. EQ - Expected "Found too many database objects "WTP.WT_PROFILE_FIND_DBOUT"." and got "Found too many database objects "WTP.WT_PROFILE_FIND_DBOUT"." - ---- Test Case: Find DBOUT Sad Path 3 - PASS 22ms Compile package body WT_PROFILE_FIND_DBOUT. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package body WT_PROFILE_FIND_DBOUT is\n --% WTPLSQL SET DBOUT "SYS.ALL_OBJECTS:VIEW" %--\nbegin\n l_junk := 1;\nend WT_PROFILE_FIND_DBOUT;". - PASS 1ms Compile package body WT_PROFILE_FIND_DBOUT Error. ISNULL - Expected NULL and got "" - PASS 0ms WT_PROFILE_FIND_DBOUT package body. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_FIND_DBOUT"(PACKAGE BODY) is 1 - PASS 78ms l_recTEST.dbout_owner. EQ - Expected "SYS" and got "SYS" - PASS 0ms l_recTEST.dbout_name. EQ - Expected "ALL_OBJECTS" and got "ALL_OBJECTS" - PASS 0ms l_recTEST.dbout_type. EQ - Expected "VIEW" and got "VIEW" - PASS 0ms l_recTEST.error_message. ISNULL - Expected NULL and got "" - ---- Test Case: Find DBOUT Teardown - PASS 23ms drop package WT_PROFILE_FIND_DBOUT. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "drop package WT_PROFILE_FIND_DBOUT". - PASS 0ms WT_PROFILE_FIND_DBOUT package. OBJNOTEXISTS - Number of objects found for "WTP.WT_PROFILE_FIND_DBOUT"(PACKAGE) is 0 - ---- Test Case: Load Ignr Setup - PASS 0ms Number of IGNR_AA elements. ISNOTNULL - Expected NOT NULL and got "0" - PASS 14ms Compile package WT_PROFILE_LOAD_IGNR. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package WT_PROFILE_LOAD_IGNR is\n l_junk number;\nend WT_PROFILE_LOAD_IGNR;". - PASS 0ms Compile package WT_PROFILE_LOAD_IGNR Error. ISNULL - Expected NULL and got "" - PASS 1ms WT_PROFILE_LOAD_IGNR package. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_LOAD_IGNR"(PACKAGE) is 1 - ---- Test Case: Load Ignr Happy Path 1 - PASS 10ms Compile package body WT_PROFILE_LOAD_IGNR. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package body WT_PROFILE_LOAD_IGNR is\nbegin\n l_junk := 1;\nend WT_PROFILE_LOAD_IGNR;". - PASS 1ms Compile package body WT_PROFILE_LOAD_IGNR Error. ISNULL - Expected NULL and got "" - PASS 0ms WT_PROFILE_LOAD_IGNR package body. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_LOAD_IGNR"(PACKAGE BODY) is 1 - PASS 1ms l_ignrTest.COUNT. EQ - Expected "0" and got "0" - ---- Test Case: Load Ignr Happy Path 2 - PASS 19ms Compile package body WT_PROFILE_LOAD_IGNR. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package body WT_PROFILE_LOAD_IGNR is\nbegin\n --%WTPLSQL_begin_ignore_lines%--\n l_junk := 1;\nend WT_PROFILE_LOAD_IGNR;". - PASS 1ms Compile package body WT_PROFILE_LOAD_IGNR Error. ISNULL - Expected NULL and got "" - PASS 1ms WT_PROFILE_LOAD_IGNR package body. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_LOAD_IGNR"(PACKAGE BODY) is 1 - PASS 44ms l_ignrTest.COUNT. EQ - Expected "3" and got "3" - PASS 0ms l_ignrTest.exists(3). EQ - Expected "TRUE" and got "TRUE" - PASS 0ms l_ignrTest.exists(4). EQ - Expected "TRUE" and got "TRUE" - PASS 0ms l_ignrTest.exists(5). EQ - Expected "TRUE" and got "TRUE" - ---- Test Case: Load Ignr Happy Path 3 - PASS 20ms Compile package body WT_PROFILE_LOAD_IGNR. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package body WT_PROFILE_LOAD_IGNR is\nbegin\n l_junk := 1;\n --%WTPLSQL_begin_ignore_lines%--\n l_junk := 2;\n --%WTPLSQL_end_ignore_lines%--\n l_junk := 3;\nend WT_PROFILE_LOAD_IGNR;". - PASS 0ms Compile package body WT_PROFILE_LOAD_IGNR Error. ISNULL - Expected NULL and got "" - PASS 1ms WT_PROFILE_LOAD_IGNR package body. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_LOAD_IGNR"(PACKAGE BODY) is 1 - PASS 1ms l_ignrTest.COUNT. EQ - Expected "3" and got "3" - PASS 0ms l_ignrTest.exists(4). EQ - Expected "TRUE" and got "TRUE" - PASS 0ms l_ignrTest.exists(5). EQ - Expected "TRUE" and got "TRUE" - PASS 0ms l_ignrTest.exists(6). EQ - Expected "TRUE" and got "TRUE" - ---- Test Case: Load Ignr Happy Path 4 - PASS 18ms Compile package body WT_PROFILE_LOAD_IGNR. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package body WT_PROFILE_LOAD_IGNR is\nbegin\n l_junk := 1;\n --%WTPLSQL_begin_ignore_lines%--\n l_junk := 2;\n --%WTPLSQL_end_ignore_lines%--\n l_junk := 3;\n --%WTPLSQL_begin_ignore_lines%--\n l_junk := 4;\nend WT_PROFILE_LOAD_IGNR;". - PASS 0ms Compile package body WT_PROFILE_LOAD_IGNR Error. ISNULL - Expected NULL and got "" - PASS 1ms WT_PROFILE_LOAD_IGNR package body. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_LOAD_IGNR"(PACKAGE BODY) is 1 - PASS 2ms l_ignrTest.COUNT. EQ - Expected "6" and got "6" - PASS 0ms l_ignrTest.exists(4). EQ - Expected "TRUE" and got "TRUE" - PASS 0ms l_ignrTest.exists(5). EQ - Expected "TRUE" and got "TRUE" - PASS 2ms l_ignrTest.exists(6). EQ - Expected "TRUE" and got "TRUE" - PASS 0ms l_ignrTest.exists(8). EQ - Expected "TRUE" and got "TRUE" - PASS 0ms l_ignrTest.exists(9). EQ - Expected "TRUE" and got "TRUE" - PASS 0ms l_ignrTest.exists(10). EQ - Expected "TRUE" and got "TRUE" - ---- Test Case: Load Ignr Sad Path 1 - PASS 25ms Compile package body WT_PROFILE_LOAD_IGNR. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package body WT_PROFILE_LOAD_IGNR is\nbegin\n --%WTPLSQL_end_ignore_lines%--\n l_junk := 4;\nend WT_PROFILE_LOAD_IGNR;". - PASS 0ms Compile package body WT_PROFILE_LOAD_IGNR Error. ISNULL - Expected NULL and got "" - PASS 1ms WT_PROFILE_LOAD_IGNR package body. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_LOAD_IGNR"(PACKAGE BODY) is 1 - PASS 0ms l_ignrTest.COUNT. EQ - Expected "0" and got "0" - ---- Test Case: Load Ignr Sad Path 2 - PASS 21ms Compile package body WT_PROFILE_LOAD_IGNR. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package body WT_PROFILE_LOAD_IGNR is\nbegin\n l_junk := 1;\n --%WTPLSQL_begin_ignore_lines%--\n l_junk := 2;\n --%WTPLSQL_end_ignore_lines%--\n l_junk := 3;\n --%WTPLSQL_end_ignore_lines%--\n l_junk := 4;\nend WT_PROFILE_LOAD_IGNR;". - PASS 0ms Compile package body WT_PROFILE_LOAD_IGNR Error. ISNULL - Expected NULL and got "" - PASS 4ms WT_PROFILE_LOAD_IGNR package body. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_LOAD_IGNR"(PACKAGE BODY) is 1 - PASS 2ms l_ignrTest.COUNT. EQ - Expected "3" and got "3" - PASS 0ms l_ignrTest.exists(4). EQ - Expected "TRUE" and got "TRUE" - PASS 0ms l_ignrTest.exists(5). EQ - Expected "TRUE" and got "TRUE" - PASS 0ms l_ignrTest.exists(6). EQ - Expected "TRUE" and got "TRUE" - ---- Test Case: Load Ignr Sad Path 3 - PASS 21ms Compile package body WT_PROFILE_LOAD_IGNR. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package body WT_PROFILE_LOAD_IGNR is\nbegin\n l_junk := 1;\n --%WTPLSQL_begin_ignore_lines%--\n l_junk := 2;\n --%WTPLSQL_begin_ignore_lines%--\n l_junk := 3;\n --%WTPLSQL_end_ignore_lines%--\n l_junk := 4;\nend WT_PROFILE_LOAD_IGNR;". - PASS 0ms Compile package body WT_PROFILE_LOAD_IGNR Error. ISNULL - Expected NULL and got "" - PASS 1ms WT_PROFILE_LOAD_IGNR package body. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_LOAD_IGNR"(PACKAGE BODY) is 1 - PASS 1ms l_ignrTest.COUNT. EQ - Expected "5" and got "5" - PASS 0ms l_ignrTest.exists(4). EQ - Expected "TRUE" and got "TRUE" - PASS 0ms l_ignrTest.exists(5). EQ - Expected "TRUE" and got "TRUE" - PASS 0ms l_ignrTest.exists(6). EQ - Expected "TRUE" and got "TRUE" - PASS 0ms l_ignrTest.exists(7). EQ - Expected "TRUE" and got "TRUE" - PASS 0ms l_ignrTest.exists(8). EQ - Expected "TRUE" and got "TRUE" - ---- Test Case: Load Ignr Teardown - PASS 25ms drop package WT_PROFILE_LOAD_IGNR. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "drop package WT_PROFILE_LOAD_IGNR". - PASS 1ms WT_PROFILE_LOAD_IGNR package. OBJNOTEXISTS - Number of objects found for "WTP.WT_PROFILE_LOAD_IGNR"(PACKAGE) is 0 - PASS 0ms Number of IGNR_AA elements. ISNOTNULL - Expected NOT NULL and got "0" - ---- Test Case: Insert DBOUT Profile Setup - PASS 15ms Compile package WT_PROFILE_INSERT_DBOUT. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package WT_PROFILE_INSERT_DBOUT is\n l_junk number;\nend WT_PROFILE_INSERT_DBOUT;". - PASS 0ms Compile package WT_PROFILE_INSERT_DBOUT Error. ISNULL - Expected NULL and got "" - PASS 1ms WT_PROFILE_INSERT_DBOUT package. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_INSERT_DBOUT"(PACKAGE) is 1 - PASS 9ms Compile package body WT_PROFILE_INSERT_DBOUT. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package body WT_PROFILE_INSERT_DBOUT is\nbegin\n l_junk := 1;\n --%WTPLSQL_begin_ignore_lines%--\n l_junk := 2;\n --%WTPLSQL_end_ignore_lines%--\n if 0 = 1 then\n l_junk := 3;\n end if;\nend WT_PROFILE_INSERT_DBOUT;". - PASS 1ms Compile package body WT_PROFILE_INSERT_DBOUT Error. ISNULL - Expected NULL and got "" - PASS 0ms WT_PROFILE_INSERT_DBOUT package body. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_INSERT_DBOUT"(PACKAGE BODY) is 1 - PASS 2ms insert plsql_profiler_runs (-97). RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "insert into plsql_profiler_runs (runid) values (-97)". - PASS 3ms insert plsql_profiler_units (-97). RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "insert into plsql_profiler_units (runid, unit_number, total_time) values (-97, -97, 0)". - PASS 3ms insert plsql_profiler_data (RUNID: -97). RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "insert into plsql_profiler_data (runid, unit_number, line#) values (-97, -97, 0)". - PASS 1ms Number of plsql_profiler_runs (-97). EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from plsql_profiler_runs where runid = -97 - PASS 2ms Number of plsql_profiler_units (-97). EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from plsql_profiler_units where runid = -97 - PASS 2ms Number of plsql_profiler_data (-97). EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from plsql_profiler_data where runid = -97 - PASS 1ms Insert wt_test_runs (-97). RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "insert into wt_test_runs (id, start_dtm, runner_owner, runner_name) values (-97, sysdate, USER, 'Insert DBOUT Test')". - PASS 1ms wt_test_runs (-97) Count. EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from wt_test_runs where id = -97 - PASS 2ms insert UNIT 1 into plsql_profiler_units. ISNULL - Expected NULL and got "" - PASS 1ms Number of UNIT 1 plsql_profiler_units. EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from plsql_profiler_units where runid = -97 and unit_number = 1 - PASS 4ms insert plsql_profiler_data (LINE#: 1). EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 1ms insert plsql_profiler_data (LINE#: 2). EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 0ms insert plsql_profiler_data (LINE#: 3). EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 0ms insert plsql_profiler_data (LINE#: 5). EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 1ms insert plsql_profiler_data (LINE#: 7). EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 0ms insert plsql_profiler_data (LINE#: 8). EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 1ms insert plsql_profiler_data (LINE#: 9). EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 1ms insert plsql_profiler_data (LINE#: 10). EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 5ms Number of UNIT 1 plsql_profiler_data. EQQUERYVALUE - Expected "8" and got "8" for Query: select count(*) from plsql_profiler_data where runid = -97 and unit_number = 1 - ---- Test Case: Insert DBOUT Profile Happy Path - PASS 4ms SQLERRM. ISNULL - Expected NULL and got "" - PASS 6ms wt_dbout_profiles line 1, column STATUS. EQQUERYVALUE - Expected "EXCL" and got "EXCL" for Query: select STATUS from wt_dbout_profiles where test_run_id = -97 and line = 1 - PASS 2ms wt_dbout_profiles line 1, column TEXT. EQQUERYVALUE - Expected "package body WT_PROFILE_INSERT_DBOUT is\n" and got "package body WT_PROFILE_INSERT_DBOUT is\n" for Query: select TEXT from wt_dbout_profiles where test_run_id = -97 and line = 1 -#FAIL# 2ms wt_dbout_profiles line 2, column STATUS. EQQUERYVALUE - Expected "UNKN" and got "NOTX" for Query: select STATUS from wt_dbout_profiles where test_run_id = -97 and line = 2 - PASS 1ms wt_dbout_profiles line 2, column TEXT. EQQUERYVALUE - Expected "begin\n" and got "begin\n" for Query: select TEXT from wt_dbout_profiles where test_run_id = -97 and line = 2 - PASS 1ms wt_dbout_profiles line 3, column STATUS. EQQUERYVALUE - Expected "EXEC" and got "EXEC" for Query: select STATUS from wt_dbout_profiles where test_run_id = -97 and line = 3 - PASS 1ms wt_dbout_profiles line 3, column TEXT. EQQUERYVALUE - Expected " l_junk := 1;\n" and got " l_junk := 1;\n" for Query: select TEXT from wt_dbout_profiles where test_run_id = -97 and line = 3 - PASS 1ms wt_dbout_profiles line 5, column STATUS. EQQUERYVALUE - Expected "IGNR" and got "IGNR" for Query: select STATUS from wt_dbout_profiles where test_run_id = -97 and line = 5 - PASS 1ms wt_dbout_profiles line 5, column TEXT. EQQUERYVALUE - Expected " l_junk := 2;\n" and got " l_junk := 2;\n" for Query: select TEXT from wt_dbout_profiles where test_run_id = -97 and line = 5 - PASS 2ms wt_dbout_profiles line 7, column STATUS. EQQUERYVALUE - Expected "EXEC" and got "EXEC" for Query: select STATUS from wt_dbout_profiles where test_run_id = -97 and line = 7 - PASS 2ms wt_dbout_profiles line 7, column TEXT. EQQUERYVALUE - Expected " if 0 = 1 then\n" and got " if 0 = 1 then\n" for Query: select TEXT from wt_dbout_profiles where test_run_id = -97 and line = 7 - PASS 2ms wt_dbout_profiles line 8, column STATUS. EQQUERYVALUE - Expected "NOTX" and got "NOTX" for Query: select STATUS from wt_dbout_profiles where test_run_id = -97 and line = 8 - PASS 1ms wt_dbout_profiles line 8, column TEXT. EQQUERYVALUE - Expected " l_junk := 3;\n" and got " l_junk := 3;\n" for Query: select TEXT from wt_dbout_profiles where test_run_id = -97 and line = 8 - PASS 2ms wt_dbout_profiles line 9, column STATUS. EQQUERYVALUE - Expected "EXEC" and got "EXEC" for Query: select STATUS from wt_dbout_profiles where test_run_id = -97 and line = 9 - PASS 1ms wt_dbout_profiles line 9, column TEXT. EQQUERYVALUE - Expected " end if;\n" and got " end if;\n" for Query: select TEXT from wt_dbout_profiles where test_run_id = -97 and line = 9 - PASS 2ms wt_dbout_profiles line 10, column STATUS. EQQUERYVALUE - Expected "EXCL" and got "EXCL" for Query: select STATUS from wt_dbout_profiles where test_run_id = -97 and line = 10 - PASS 1ms wt_dbout_profiles line 10, column TEXT. EQQUERYVALUE - Expected "end WT_PROFILE_INSERT_DBOUT;" and got "end WT_PROFILE_INSERT_DBOUT;" for Query: select TEXT from wt_dbout_profiles where test_run_id = -97 and line = 10 - ---- Test Case: Insert DBOUT Profile Teardown - PASS 4ms Delete wt_dbout_profiles (-97). RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "delete from wt_dbout_profiles where test_run_id = -97". - PASS 7ms wt_dbout_profiles (-97) Count. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from wt_dbout_profiles where test_run_id = -97 - PASS 3ms Delete wt_test_runs (-97). RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "delete from wt_test_runs where id = -97". - PASS 0ms wt_test_runs (-97) Count. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from wt_test_runs where id = -97 - PASS 3ms delete plsql_profiler_data (-97). RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "delete from plsql_profiler_data where runid = -97". - PASS 3ms delete plsql_profiler_units (-97). RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "delete from plsql_profiler_units where runid = -97". - PASS 1ms delete plsql_profiler_runs (-97). RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "delete from plsql_profiler_runs where runid = -97". - PASS 1ms Number of plsql_profiler_runs (-97). EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from plsql_profiler_runs where runid = -97 - PASS 0ms Number of plsql_profiler_units (-97). EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from plsql_profiler_units where runid = -97 - PASS 0ms Number of plsql_profiler_data (-97). EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from plsql_profiler_data where runid = -97 - PASS 24ms drop package WT_PROFILE_INSERT_DBOUT. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "drop package WT_PROFILE_INSERT_DBOUT". - PASS 1ms WT_PROFILE_INSERT_DBOUT package. OBJNOTEXISTS - Number of objects found for "WTP.WT_PROFILE_INSERT_DBOUT"(PACKAGE) is 0 - ---- Test Case: Insert DBOUT Profile Setup - PASS 22ms Compile package WT_PROFILE_INITIALIZE. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package WT_PROFILE_INITIALIZE is\n l_junk number;\nend WT_PROFILE_INITIALIZE;". - PASS 1ms Compile package WT_PROFILE_INITIALIZE Error. ISNULL - Expected NULL and got "" - PASS 0ms WT_PROFILE_INITIALIZE package. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_INITIALIZE"(PACKAGE) is 1 - ---- Test Case: Initialize Test HAPPY Path 1 - PASS 16ms Compile package body WT_PROFILE_INITIALIZE. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package body WT_PROFILE_INITIALIZE is\nbegin\n l_junk := 7;\nend WT_PROFILE_INITIALIZE;". - PASS 0ms Compile package body WT_PROFILE_INITIALIZE Error. ISNULL - Expected NULL and got "" - PASS 1ms WT_PROFILE_INITIALIZE package body. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_INITIALIZE"(PACKAGE BODY) is 1 - PASS 0ms OUT dbout_owner. ISNULL - Expected NULL and got "" - PASS 0ms OUT dbout_name. ISNULL - Expected NULL and got "" - PASS 0ms OUT dbout_type. ISNULL - Expected NULL and got "" - PASS 0ms OUT prof_runid. ISNULL - Expected NULL and got "" - PASS 1ms OUT trigger_offset. ISNULL - Expected NULL and got "" - PASS 0ms OUT error_message. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.dbout_owner. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.dbout_name. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.dbout_type. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.prof_runid. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.trigger_offset. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.error_message. ISNULL - Expected NULL and got "" - ---- Test Case: Initialize Test HAPPY Path 2 - PASS 17ms Compile package body WT_PROFILE_INITIALIZE. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "create or replace package body WT_PROFILE_INITIALIZE is\nbegin\n--% WTPLSQL SET DBOUT "WT_PROFILE_INITIALIZE:PACKAGE BODY" %--\n l_junk := 7;\nend WT_PROFILE_INITIALIZE;". - PASS 1ms Compile package body WT_PROFILE_INITIALIZE Error. ISNULL - Expected NULL and got "" - PASS 1ms WT_PROFILE_INITIALIZE package body. OBJEXISTS - Number of objects found for "WTP.WT_PROFILE_INITIALIZE"(PACKAGE BODY) is 1 - PASS 86ms OUT dbout_owner. EQ - Expected "WTP" and got "WTP" - PASS 0ms OUT dbout_name. EQ - Expected "WT_PROFILE_INITIALIZE" and got "WT_PROFILE_INITIALIZE" - PASS 0ms OUT dbout_type. EQ - Expected "PACKAGE BODY" and got "PACKAGE BODY" - PASS 0ms OUT prof_runid. ISNOTNULL - Expected NOT NULL and got "5" - PASS 1ms OUT trigger_offset. EQ - Expected "0" and got "0" - PASS 0ms OUT error_message. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.dbout_owner. EQ - Expected "WTP" and got "WTP" - PASS 0ms l_recTEST.dbout_name. EQ - Expected "WT_PROFILE_INITIALIZE" and got "WT_PROFILE_INITIALIZE" - PASS 0ms l_recTEST.dbout_type. EQ - Expected "PACKAGE BODY" and got "PACKAGE BODY" - PASS 0ms l_recTEST.prof_runid. ISNOTNULL - Expected NOT NULL and got "5" - PASS 0ms l_recTEST.trigger_offset. EQ - Expected "0" and got "0" - PASS 0ms l_recTEST.error_message. ISNULL - Expected NULL and got "" - ---- Test Case: Initialize Test Sad Path 1 - PASS 1ms SQLERRM. EQ - Expected "ORA-20004: i_test_run_id is null" and got "ORA-20004: i_test_run_id is null" - ---- Test Case: Insert DBOUT Profile Teardown - PASS 22ms drop package WT_PROFILE_INITIALIZE. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "drop package WT_PROFILE_INITIALIZE". - PASS 2ms WT_PROFILE_INITIALIZE package. OBJNOTEXISTS - Number of objects found for "WTP.WT_PROFILE_INITIALIZE"(PACKAGE) is 0 - ---- Test Case: Finalize Happy Path 1 - PASS 0ms g_rec.prof_runid. ISNULL - Expected NULL and got "" - PASS 0ms format_error_stack and format_error_backtrace. ISNULL - Expected NULL and got "" - ---- Test Case: Finalize Happy Path 2 - PASS 0ms SQLERRM. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.test_run_id. ISNULL - Expected NULL and got "" - PASS 1ms l_recTEST.dbout_owner. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.dbout_name. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.dbout_type. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.prof_runid. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.trigger_offset. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.error_message. ISNULL - Expected NULL and got "" - ---- Test Case: Finalize Sad Path 1 - PASS 0ms SQLERRM. EQ - Expected "ORA-20000: g_rec.test_run_id is null" and got "ORA-20000: g_rec.test_run_id is null" - ---- Test Case: Trigger Offset Happy Path - PASS 22ms Trigger Test. EQ - Expected "3" and got "3" - PASS 1ms Package Test. EQ - Expected "0" and got "0" - ---- Test Case: Trigger Offset Sad Path - PASS 0ms Non Existent Object. EQ - Expected "0" and got "0" - ---- Test Case: Calculate Percent Coverage Setup - PASS 1ms Insert wt_test_runs (-95). RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "insert into wt_test_runs (id, start_dtm, runner_owner, runner_name) values (-95, sysdate, USER, 'Calculate Offset Test')". - PASS 2ms wt_test_runs (-95) Count. EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from wt_test_runs where id = -95 - ---- Test Case: Calculate Percent Coverage Happy Path 1 - PASS 0ms Insert wt_dbout_profiles (-95,1). EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 2ms wt_dbout_profiles (-95,1) Count. EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from wt_dbout_profiles where test_run_id = -95 and line = 1 - PASS 0ms Insert wt_dbout_profiles (-95,2). EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 2ms wt_dbout_profiles (-95,2) Count. EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from wt_dbout_profiles where test_run_id = -95 and line = 2 - PASS 0ms Insert wt_dbout_profiles (-95,3). EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 2ms wt_dbout_profiles (-95,3) Count. EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from wt_dbout_profiles where test_run_id = -95 and line = 3 - PASS 4ms Main Test. EQ - Expected "66.67" and got "66.67" - PASS 5ms Delete wt_dbout_profiles (-95). RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "delete from wt_dbout_profiles where test_run_id = -95". - PASS 4ms wt_dbout_profiles (-95) Count. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from wt_dbout_profiles where test_run_id = -95 - ---- Test Case: Calculate Percent Coverage Happy Path 2 - PASS 2ms Insert wt_dbout_profiles (-95,1). EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 0ms wt_dbout_profiles (-95,1) Count. EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from wt_dbout_profiles where test_run_id = -95 and line = 1 - PASS 1ms Insert wt_dbout_profiles (-95,2). EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 1ms wt_dbout_profiles (-95,2) Count. EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from wt_dbout_profiles where test_run_id = -95 and line = 2 - PASS 0ms Insert wt_dbout_profiles (-95,3). EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 0ms wt_dbout_profiles (-95,3) Count. EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from wt_dbout_profiles where test_run_id = -95 and line = 3 - PASS 0ms Main Test. EQ - Expected "-1" and got "-1" - PASS 1ms Delete wt_dbout_profiles (-95). RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "delete from wt_dbout_profiles where test_run_id = -95". - PASS 0ms wt_dbout_profiles (-95) Count. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from wt_dbout_profiles where test_run_id = -95 - ---- Test Case: Calculate Percent Coverage Sad Path - PASS 0ms Missing Test Run ID. ISNULL - Expected NULL and got "" - PASS 0ms NULL Test Run ID. ISNULL - Expected NULL and got "" - ---- Test Case: Calculate Percent Coverage Teardown - PASS 2ms Delete wt_test_runs (-95). RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "delete from wt_test_runs where id = -95". - PASS 0ms wt_test_runs (-95) Count. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from wt_test_runs where id = -95 - ---- Test Case: Delete Records Setup - PASS 2ms wt_test_runs Count 0. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from wt_test_runs where id = -98 - PASS 6ms wt_dbout_profiles Count 0. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from wt_dbout_profiles where test_run_id = -98 - PASS 1ms Insert wt_test_runs (-98). RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "insert into wt_test_runs (id, start_dtm, runner_owner, runner_name) values (-98, sysdate, USER, 'Delete Records Test')". - PASS 0ms wt_test_runs (-98) Count. EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from wt_test_runs where id = -98 - PASS 1ms Insert wt_dbout_profiles (-98,1). EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 1ms wt_dbout_profiles (-98,1) Count. EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from wt_dbout_profiles where test_run_id = -98 and line = 1 - ---- Test Case: Delete Records Happy Path 1 - PASS 1ms SQLERRM. ISNULL - Expected NULL and got "" - PASS 0ms wt_dbout_profiles Count 2. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from wt_dbout_profiles where test_run_id = -98 - ---- Test Case: Delete Records Sad Path 1 - PASS 1ms SQLERRM. ISNULL - Expected NULL and got "" - PASS 0ms wt_dbout_profiles Count 2. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from wt_dbout_profiles where test_run_id = -98 - ---- Test Case: Delete Records Sad Path 2 - PASS 0ms SQLERRM. ISNULL - Expected NULL and got "" - PASS 0ms wt_dbout_profiles Count 2. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from wt_dbout_profiles where test_run_id = -98 - ---- Test Case: Delete Records Teardown - PASS 2ms Delete wt_test_runs (-98). RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "delete from wt_test_runs where id = -98". - PASS 0ms wt_test_runs (-98) Count. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from wt_test_runs where id = -98 - - - WTP.WT_PROFILER PACKAGE BODY Code Coverage Details (Test Run ID 7) -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1 EXCL 0 0 0 0 package body wt_profiler - 20 IGNR 0 0 0 0 g_skip_insert boolean := FALSE; - 21 IGNR 0 0 0 0 g_skip_add boolean := FALSE; - 33 IGNR 0 191 5 49 procedure tl_compile_db_object - 39 IGNR 20 10 0 1 l_errtxt varchar2(32000) := ''; - 43 IGNR 20 83 2 8 l_sql_txt := 'create or replace ' || in_ptype || ' ' || - 47 IGNR 20 41 1 5 wt_assert.raises - 52 IGNR 40 5932 20 1212 for buff in (select * from user_errors - 58 IGNR 0 0 0 0 l_errtxt := l_errtxt || buff.line || ', ' || - 61 IGNR 20 205 4 113 wt_assert.isnull - 66 IGNR 20 215 2 15 wt_assert.objexists ( - 71 IGNR 20 50 1 4 end tl_compile_db_object; - 74 IGNR 0 5 1 2 procedure tl_drop_db_object - 81 IGNR 4 4 1 1 l_sql_txt := 'drop ' || in_ptype || ' ' || in_pname; - 82 IGNR 4 5 1 2 wt_assert.raises - 86 IGNR 4 54 2 16 wt_assert.objnotexists ( - 91 IGNR 4 3 1 1 end tl_drop_db_object; - 94 IGNR 0 11 1 5 procedure tl_count_plsql_profiler_recs - 100 IGNR 5 43 5 16 wt_assert.eqqueryvalue - 105 IGNR 5 24 3 8 wt_assert.eqqueryvalue - 111 IGNR 5 25 3 8 wt_assert.eqqueryvalue - 116 IGNR 5 1 0 1 end tl_count_plsql_profiler_recs; - 119 IGNR 0 3 1 2 procedure tl_insert_plsql_profiler_recs - 125 IGNR 2 7 3 4 l_sql_txt := 'insert into plsql_profiler_runs (runid)' || -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 127 IGNR 2 5 2 3 wt_assert.raises ( - 132 IGNR 2 11 5 6 l_sql_txt := 'insert into plsql_profiler_units (runid, unit_number, total_time)' || - 134 IGNR 2 6 3 3 wt_assert.raises ( - 139 IGNR 2 12 6 6 l_sql_txt := 'insert into plsql_profiler_data (runid, unit_number, line#)' || - 141 IGNR 2 8 3 5 wt_assert.raises ( - 145 IGNR 2 1296 161 1136 commit; - 146 IGNR 2 4 1 3 end tl_insert_plsql_profiler_recs; - 149 IGNR 0 3 3 3 procedure tl_delete_plsql_profiler_recs - 155 IGNR 1 5 5 5 l_sql_txt := 'delete from plsql_profiler_data' || - 157 IGNR 1 3 3 3 wt_assert.raises ( - 162 IGNR 1 7 7 7 l_sql_txt := 'delete from plsql_profiler_units' || - 164 IGNR 1 3 3 3 wt_assert.raises ( - 169 IGNR 1 4 4 4 l_sql_txt := 'delete from plsql_profiler_runs' || - 171 IGNR 1 2 2 2 wt_assert.raises ( - 175 IGNR 1 85 85 85 commit; - 176 IGNR 1 1 1 1 end tl_delete_plsql_profiler_recs; - 179 IGNR 0 6 2 2 procedure tl_insert_test_runs - 186 IGNR 3 13 3 7 l_sql_txt := 'insert into wt_test_runs' || - 190 IGNR 3 3 1 1 wt_assert.raises ( - 194 IGNR 3 21 7 7 wt_assert.eqqueryvalue ( - 199 IGNR 3 439 134 159 commit; - 200 IGNR 3 3 1 1 end tl_insert_test_runs; - 203 IGNR 0 7 1 5 procedure tl_delete_test_runs - 209 IGNR 3 13 1 10 l_sql_txt := 'delete from wt_test_runs where id = ' || in_test_run_id; - 210 IGNR 3 8 1 5 wt_assert.raises ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 214 IGNR 3 23 6 10 wt_assert.eqqueryvalue ( - 219 IGNR 3 762 111 481 commit; - 220 IGNR 3 4 1 3 end tl_delete_test_runs; - 223 IGNR 0 17 1 7 procedure tl_insert_dbout_profiles - 230 IGNR 7 2324 159 713 insert into wt_dbout_profiles values in_rec; - 231 IGNR 7 15 1 4 l_sqlerrm := SQLERRM; - 232 IGNR 7 1212 78 531 commit; - 233 IGNR 0 0 0 0 exception when others then - 234 IGNR 0 0 0 0 l_sqlerrm := SQLERRM; - 235 IGNR 0 0 0 0 end; - 237 IGNR 7 53 5 16 wt_assert.eq ( - 242 IGNR 7 39 5 7 wt_assert.eqqueryvalue ( - 249 IGNR 7 6 1 1 end tl_insert_dbout_profiles; - 252 IGNR 0 5 1 2 procedure tl_delete_dbout_profiles - 258 IGNR 3 6 1 3 l_sql_txt := 'delete from wt_dbout_profiles where test_run_id = ' || - 260 IGNR 3 6 1 3 wt_assert.raises ( - 264 IGNR 3 23 4 10 wt_assert.eqqueryvalue ( - 269 IGNR 3 1292 81 643 commit; - 270 IGNR 3 8 1 4 end tl_delete_dbout_profiles; - 277 UNKN 0 7 1 1 function get_error_msg - 281 EXEC 8 1 0 1 l_msg_prefix varchar2(50) := 'DBMS_PROFILER Error: '; - 283 EXEC 8 0 0 0 case retnum_in - 284 EXEC 10 11 0 5 when dbms_profiler.error_param then return l_msg_prefix || - 286 EXEC 8 4 0 2 when dbms_profiler.error_io then return l_msg_prefix || - 290 EXEC 6 6 0 2 when dbms_profiler.error_version then return l_msg_prefix || -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 295 EXEC 2 6 1 5 else return l_msg_prefix || - 298 EXEC 8 3 0 1 end get_error_msg; - 302 IGNR 0 5 5 5 procedure t_get_error_msg - 306 IGNR 2 6 1 5 wt_assert.g_testcase := 'Get Error Messages'; - 307 IGNR 1 1 1 1 wt_assert.isnotnull ( - 310 IGNR 1 24 1 23 wt_assert.this ( - 315 IGNR 1 1 0 1 wt_assert.isnotnull ( - 318 IGNR 1 7 7 7 wt_assert.this ( - 323 IGNR 1 2 1 1 wt_assert.isnotnull ( - 326 IGNR 1 28 28 28 wt_assert.this ( - 331 IGNR 1 2 1 1 wt_assert.isnotnull ( - 334 IGNR 1 7 7 7 wt_assert.this ( - 338 IGNR 1 2 2 2 end t_get_error_msg; - 343 UNKN 0 3 1 1 procedure delete_plsql_profiler_recs - 347 EXEC 4 69 13 20 begin - 348 EXEC 4 972 112 395 delete from plsql_profiler_data - 350 EXEC 4 510 60 227 delete from plsql_profiler_units - 352 EXEC 4 355 46 134 delete from plsql_profiler_runs - 354 EXEC 4 325 54 105 COMMIT; - 355 EXEC 4 39 9 10 end delete_plsql_profiler_recs; - 359 IGNR 0 2 2 2 procedure t_delete_profiler_recs - 361 IGNR 1 1 1 1 c_test_run_id constant number := -99; - 365 IGNR 1 1 1 1 wt_assert.g_testcase := 'Delete PL/SQL Profiler Records Happy Path 1'; - 367 IGNR 1 0 0 0 delete_plsql_profiler_recs(c_test_run_id); -- Should run without error - 368 IGNR 1 47 47 47 l_err_stack := dbms_utility.format_error_stack || -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 370 IGNR 0 0 0 0 exception when others then - 371 IGNR 0 0 0 0 l_err_stack := dbms_utility.format_error_stack || - 373 IGNR 0 0 0 0 end; - 375 IGNR 1 8 8 8 wt_assert.isnull ( - 378 IGNR 1 0 0 0 tl_count_plsql_profiler_recs(c_test_run_id, 0); - 380 IGNR 1 0 0 0 wt_assert.g_testcase := 'Delete PL/SQL Profiler Records Happy Path 2'; - 381 IGNR 1 1 1 1 tl_insert_plsql_profiler_recs(c_test_run_id); - 382 IGNR 1 1 1 1 tl_count_plsql_profiler_recs(c_test_run_id, 1); - 384 IGNR 1 0 0 0 delete_plsql_profiler_recs(c_test_run_id); -- Should run without error - 385 IGNR 1 6 6 6 l_err_stack := dbms_utility.format_error_stack || - 387 IGNR 0 0 0 0 exception when others then - 388 IGNR 0 0 0 0 l_err_stack := dbms_utility.format_error_stack || - 390 IGNR 0 0 0 0 end; - 392 IGNR 1 5 5 5 wt_assert.isnull ( - 395 IGNR 1 0 0 0 tl_count_plsql_profiler_recs(c_test_run_id, 0); - 396 IGNR 1 2 2 2 end t_delete_profiler_recs; - 401 UNKN 0 33 3 5 procedure find_dbout - 445 EXEC 8 2 0 1 C_HEAD_RE CONSTANT varchar2(30) := '--% WTPLSQL SET DBOUT "'; - 446 EXEC 8 1 0 1 C_MAIN_RE CONSTANT varchar2(30) := '[[:alnum:] ._$#:]+'; - 447 EXEC 8 3 0 1 C_TAIL_RE CONSTANT varchar2(30) := '" %--'; - 449#NOTX# 0 0 0 0 cursor c_annotation is - 450 EXEC 8 1355 118 320 select regexp_substr(src.text, C_HEAD_RE||C_MAIN_RE||C_TAIL_RE) TEXT - 456 UNKN 0 7 1 1 order by src.line; - 459 UNKN 0 5 1 2 cursor c_readable is - 460 EXEC 4 903 179 352 select * -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 464 UNKN 0 8 2 2 and src.type = g_rec.dbout_type; - 471 EXEC 8 0 0 0 open c_annotation; - 472 EXEC 8 1861 200 277 fetch c_annotation into l_target; - 473 EXEC 8 11 1 2 if c_annotation%NOTFOUND - 476 EXEC 2 15 3 12 close c_annotation; - 477 EXEC 2 3 1 2 return; - 479 EXEC 6 190 29 37 close c_annotation; - 481 EXEC 6 197 26 58 l_target := regexp_replace(SRCSTR => l_target - 487 EXEC 6 72 10 14 l_target := regexp_replace(SRCSTR => l_target - 493 EXEC 6 25 4 5 l_dot_pos := instr(l_target,'.'); - 494 EXEC 6 6 1 2 l_cln_pos := instr(l_target,':'); - 496 EXEC 6 460474 68570 86060 select obj.owner - 528 EXEC 1 0 0 0 when NO_DATA_FOUND - 530 EXEC 1 10 10 10 g_rec.error_message := 'Unable to find database object "' || - 532 EXEC 1 1 1 1 return; - 533 EXEC 1 0 0 0 when TOO_MANY_ROWS - 535 EXEC 1 10 10 10 g_rec.error_message := 'Found too many database objects "' || - 537 EXEC 1 1 1 1 return; - 540 EXEC 4 4 1 1 open c_readable; - 541 EXEC 4 2085 125 1201 fetch c_readable into b_readable; - 542 EXEC 4 7 1 2 if c_readable%NOTFOUND - 544 EXEC 1 4 0 3 if g_rec.dbout_type in ('FUNCTION', 'PROCEDURE', 'PACKAGE BODY', - 549 IGNR 0 0 0 0 g_rec.error_message := 'Unable to read source for ' || g_rec.dbout_type || - 553 EXEC 1 1 1 1 g_rec.prof_runid := -1; -- Don't run profiler. - 554 EXEC 1 0 0 0 end if; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 556 EXEC 4 129 15 47 close c_readable; - 558 EXEC 6 46 6 9 end find_dbout; - 562 IGNR 1 4 4 4 procedure t_find_dbout - 567 IGNR 1 1 1 1 l_pname varchar2(128) := 'WT_PROFILE_FIND_DBOUT'; - 569 IGNR 0 3 0 1 procedure run_find_dbout is begin - 570 IGNR 6 10 1 2 l_recSAVE := g_rec; - 571 IGNR 6 5 1 1 g_rec := l_recNULL; - 572 IGNR 6 3 0 1 find_dbout(l_pname); - 573 IGNR 6 31 2 8 l_recTEST := g_rec; - 574 IGNR 6 4 1 1 g_rec := l_recSAVE; - 575 IGNR 6 0 0 0 end run_find_dbout; - 578 IGNR 1 1 1 1 wt_assert.g_testcase := 'Find DBOUT Setup'; - 579 IGNR 1 1 1 1 tl_compile_db_object - 584 IGNR 1 1 1 1 wt_assert.g_testcase := 'Find DBOUT Happy Path 1'; - 585 IGNR 1 6 6 6 tl_compile_db_object - 590 IGNR 1 0 0 0 run_find_dbout; - 592 IGNR 1 2 2 2 wt_assert.isnull - 595 IGNR 1 1 1 1 wt_assert.isnull - 599 IGNR 1 1 1 1 wt_assert.isnull - 602 IGNR 1 0 0 0 wt_assert.isnull - 606 IGNR 1 1 1 1 wt_assert.g_testcase := 'Find DBOUT Happy Path 2'; - 607 IGNR 1 6 6 6 tl_compile_db_object - 615 IGNR 1 0 0 0 run_find_dbout; - 617 IGNR 1 8 3 5 wt_assert.eq - 621 IGNR 1 1 1 1 wt_assert.eq -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 626 IGNR 1 1 1 1 wt_assert.eq - 630 IGNR 1 1 1 1 wt_assert.isnull - 634 IGNR 1 1 1 1 wt_assert.g_testcase := 'Find DBOUT Happy Path 3'; - 635 IGNR 1 13 2 11 tl_compile_db_object - 644 IGNR 1 1 1 1 run_find_dbout; - 646 IGNR 1 8 3 5 wt_assert.eq - 650 IGNR 1 0 0 0 wt_assert.eq - 655 IGNR 1 1 1 1 wt_assert.eq - 659 IGNR 1 1 1 1 wt_assert.isnull - 663 IGNR 1 1 1 1 wt_assert.g_testcase := 'Find DBOUT Sad Path 1'; - 664 IGNR 1 5 5 5 tl_compile_db_object - 672 IGNR 1 0 0 0 run_find_dbout; - 674 IGNR 1 5 5 5 wt_assert.isnull - 677 IGNR 1 0 0 0 wt_assert.isnull - 681 IGNR 1 0 0 0 wt_assert.isnull - 684 IGNR 1 0 0 0 wt_assert.eq - 689 IGNR 1 0 0 0 wt_assert.g_testcase := 'Find DBOUT Sad Path 2'; - 690 IGNR 1 7 1 6 tl_compile_db_object - 698 IGNR 1 0 0 0 run_find_dbout; - 700 IGNR 1 8 4 4 wt_assert.eq - 704 IGNR 1 1 1 1 wt_assert.eq - 708 IGNR 1 0 0 0 wt_assert.eq - 713 IGNR 1 0 0 0 wt_assert.g_testcase := 'Find DBOUT Sad Path 3'; - 714 IGNR 1 5 5 5 tl_compile_db_object - 722 IGNR 1 1 1 1 run_find_dbout; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 724 IGNR 1 4 4 4 wt_assert.eq - 728 IGNR 1 0 0 0 wt_assert.eq - 733 IGNR 1 0 0 0 wt_assert.eq - 737 IGNR 1 1 1 1 wt_assert.isnull - 741 IGNR 1 0 0 0 wt_assert.g_testcase := 'Find DBOUT Teardown'; - 742 IGNR 1 0 0 0 tl_drop_db_object(l_pname, 'package'); - 743 IGNR 1 4 4 4 end t_find_dbout; - 748 EXEC 8 40 4 6 procedure load_ignr_aa - 750 UNKN 0 6 1 1 cursor c_find_begin is - 751 EXEC 8 24214 111 23121 select line - 758 IGNR 0 8 1 2 order by line; - 760 IGNR 0 7 1 1 cursor c_find_end (in_line in number, in_col in number) is - 761 IGNR 8 909 43 253 with q1 as ( - 778 UNKN 0 5 1 1 ,col; - 781 EXEC 8 11 1 2 g_ignr_aa.delete; - 782 EXEC 8 6 1 1 open c_find_begin; - 783 EXEC 16 0 0 0 loop - 784 EXEC 16 2786 16 1002 fetch c_find_begin into buff_find_begin; - 785 EXEC 16 17 0 4 exit when c_find_begin%NOTFOUND; - 786 EXEC 8 3 0 1 open c_find_end (buff_find_begin.line, buff_find_begin.col); - 787 EXEC 8 830 76 130 fetch c_find_end into buff_find_end; - 788 EXEC 8 10 1 2 if c_find_end%NOTFOUND - 790 EXEC 2 20550 466 20084 select max(line) - 797 EXEC 8 283 11 105 close c_find_end; - 798 EXEC 34 45 1 7 for i in buff_find_begin.line + g_rec.trigger_offset .. -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 801 EXEC 26 52 0 8 g_ignr_aa(i) := 'X'; - 804 EXEC 8 129 11 37 close c_find_begin; - 805 EXEC 8 25 1 8 end load_ignr_aa; - 809 IGNR 1 8 8 8 procedure t_load_ignr_aa - 814 IGNR 1 0 0 0 l_pname varchar2(128) := 'WT_PROFILE_LOAD_IGNR'; - 816 IGNR 0 7 1 1 procedure run_load_ignr is begin - 817 IGNR 7 14 2 2 l_recSAVE := g_rec; - 818 IGNR 7 18 2 3 l_ignrSAVE := g_ignr_aa; - 819 IGNR 7 8 1 2 g_ignr_aa.delete; - 820 IGNR 7 3 0 3 g_rec.dbout_owner := USER; - 821 IGNR 7 3 0 1 g_rec.dbout_name := l_pname; - 822 IGNR 7 2 1 1 g_rec.dbout_type := 'PACKAGE BODY'; - 823 IGNR 7 1 0 1 g_rec.trigger_offset := 0; - 824 IGNR 7 4 1 1 load_ignr_aa; - 825 IGNR 7 43 1 10 l_ignrTEST := g_ignr_aa; - 826 IGNR 7 19 2 6 g_ignr_aa := l_ignrSAVE; - 827 IGNR 7 16 1 4 g_rec := l_recSAVE; - 828 IGNR 7 1 0 1 end run_load_ignr; - 831 IGNR 1 1 1 1 wt_assert.g_testcase := 'Load Ignr Setup'; - 832 IGNR 1 5 5 5 wt_assert.isnotnull - 835 IGNR 1 1 1 1 tl_compile_db_object - 840 IGNR 1 0 0 0 wt_assert.g_testcase := 'Load Ignr Happy Path 1'; - 841 IGNR 1 6 6 6 tl_compile_db_object - 846 IGNR 1 0 0 0 run_load_ignr; - 847 IGNR 1 7 7 7 wt_assert.eq -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 852 IGNR 1 1 1 1 wt_assert.g_testcase := 'Load Ignr Happy Path 2'; - 853 IGNR 1 6 6 6 tl_compile_db_object - 861 IGNR 1 0 0 0 run_load_ignr; - 863 IGNR 1 11 11 11 wt_assert.eq - 867 IGNR 4 0 0 0 for i in 3 .. 5 - 869 IGNR 3 10 2 5 wt_assert.eq - 875 IGNR 1 0 0 0 wt_assert.g_testcase := 'Load Ignr Happy Path 3'; - 876 IGNR 1 7 7 7 tl_compile_db_object - 886 IGNR 1 0 0 0 run_load_ignr; - 888 IGNR 1 5 5 5 wt_assert.eq - 892 IGNR 4 0 0 0 for i in 4 .. 6 - 894 IGNR 3 10 2 5 wt_assert.eq - 900 IGNR 1 1 1 1 wt_assert.g_testcase := 'Load Ignr Happy Path 4'; - 901 IGNR 1 7 7 7 tl_compile_db_object - 914 IGNR 1 0 0 0 run_load_ignr; - 916 IGNR 1 14 14 14 wt_assert.eq - 920 IGNR 4 1 0 1 for i in 4 .. 6 - 922 IGNR 3 38 2 30 wt_assert.eq - 928 IGNR 3 1 0 1 for i in 8 .. 10 - 930 IGNR 3 9 2 4 wt_assert.eq - 936 IGNR 1 1 1 1 wt_assert.g_testcase := 'Load Ignr Sad Path 1'; - 937 IGNR 1 4 4 4 tl_compile_db_object - 944 IGNR 1 0 0 0 run_load_ignr; - 945 IGNR 1 5 5 5 wt_assert.eq - 950 IGNR 1 1 1 1 wt_assert.g_testcase := 'Load Ignr Sad Path 2'; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 951 IGNR 1 6 6 6 tl_compile_db_object - 963 IGNR 1 1 1 1 run_load_ignr; - 965 IGNR 1 10 10 10 wt_assert.eq - 969 IGNR 4 2 0 1 for i in 4 .. 6 - 971 IGNR 3 12 2 7 wt_assert.eq - 977 IGNR 1 0 0 0 wt_assert.g_testcase := 'Load Ignr Sad Path 3'; - 978 IGNR 1 8 8 8 tl_compile_db_object - 990 IGNR 1 1 1 1 run_load_ignr; - 992 IGNR 1 6 6 6 wt_assert.eq - 996 IGNR 6 1 0 1 for i in 4 .. 8 - 998 IGNR 5 15 2 5 wt_assert.eq - 1004 IGNR 1 0 0 0 wt_assert.g_testcase := 'Load Ignr Teardown'; - 1005 IGNR 1 0 0 0 tl_drop_db_object(l_pname, 'package'); - 1006 IGNR 1 5 5 5 wt_assert.isnotnull - 1009 IGNR 1 122 122 122 end t_load_ignr_aa; - 1014 EXEC 1 11 1 10 procedure insert_dbout_profile - 1019 UNKN 0 21 2 6 procedure l_set_status is begin - 1020 EXEC 8 19 2 4 if g_ignr_aa.EXISTS(prof_rec.line) - 1023 EXEC 1 1 1 1 prof_rec.status := 'IGNR'; - 1024 EXEC 1 1 1 1 return; - 1026 EXEC 7 3 0 2 if prof_rec.total_occur > 0 - 1029 EXEC 3 1 0 1 prof_rec.status := 'EXEC'; - 1030 EXEC 3 2 1 1 return; - 1032 EXEC 4 2 0 1 if prof_rec.total_occur = 0 - 1036 EXEC 4 79 13 31 if regexp_like(prof_rec.text, '^[[:space:]]*' || -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1041 EXEC 2 1 1 1 prof_rec.status := 'EXCL'; - 1042 EXEC 3 3 2 2 elsif prof_rec.line = l_max_line - 1048 EXEC 2 0 0 0 prof_rec.status := 'NOTX'; - 1050 EXEC 4 10 2 4 return; - 1053#NOTX# 0 0 0 0 prof_rec.status := 'UNKN'; - 1054#NOTX# 0 0 0 0 end l_set_status; - 1055 EXEC 1 20 20 20 begin - 1057 EXEC 1 257 257 257 select max(ppd.line#) into l_max_line - 1066 EXEC 1 0 0 0 load_ignr_aa; - 1067 EXEC 1 1 1 1 prof_rec.test_run_id := g_rec.test_run_id; - 1068 EXEC 3 768 1 731 for buf1 in ( - 1069#NOTX# 0 0 0 0 select src.line - 1089 EXEC 8 8 1 3 prof_rec.line := buf1.line; - 1090 EXEC 8 3 1 1 prof_rec.total_occur := buf1.total_occur; - 1091 EXEC 8 8 0 2 prof_rec.total_usecs := buf1.total_time/1000; - 1092 EXEC 8 1 1 1 prof_rec.min_usecs := buf1.min_time/1000; - 1093 EXEC 8 5 1 1 prof_rec.max_usecs := buf1.max_time/1000; - 1094 EXEC 8 10 1 2 prof_rec.text := buf1.text; - 1095 EXEC 8 0 0 0 prof_rec.status := NULL; - 1096 EXEC 8 2 0 1 l_set_status; - 1097 EXEC 8 1086 81 408 insert into wt_dbout_profiles values prof_rec; - 1100 IGNR 8 0 0 0 if not g_skip_add then - 1102 IGNR 0 0 0 0 wt_test_run_stat.add_profile(prof_rec); - 1108 EXEC 1 109 109 109 COMMIT; - 1111 EXEC 1 5 5 5 g_ignr_aa.delete; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1112 EXEC 1 2 2 2 delete_plsql_profiler_recs(g_rec.prof_runid); - 1113 EXEC 1 6 6 6 end insert_dbout_profile; - 1117 IGNR 1 9 9 9 procedure t_insert_dbout_profile - 1123 IGNR 1 0 0 0 c_test_run_id constant number := -97; - 1124 IGNR 1 1 1 1 l_pname varchar2(128) := 'WT_PROFILE_INSERT_DBOUT'; - 1128 IGNR 0 8 1 2 procedure insert_plsql_profiler_data - 1134 IGNR 8 5 1 1 data_rec.line# := in_line#; - 1135 IGNR 8 1 0 1 data_rec.total_occur := in_total_occur; - 1136 IGNR 8 0 0 0 data_rec.total_time := in_total_time; - 1139 IGNR 8 2464 95 979 insert into plsql_profiler_data values data_rec; - 1140 IGNR 8 4392 77 2632 commit; - 1141 IGNR 8 31 2 7 l_sqlerrm := SQLERRM; - 1142 IGNR 0 0 0 0 exception when others then - 1143 IGNR 0 0 0 0 l_sqlerrm := SQLERRM; - 1144 IGNR 0 0 0 0 end; - 1145 IGNR 8 72 4 16 wt_assert.eq ( - 1149 IGNR 8 6 1 1 end insert_plsql_profiler_data; - 1151 IGNR 0 14 1 2 procedure test_dbout_profiler - 1157 IGNR 16 169 3 76 wt_assert.eqqueryvalue - 1165 IGNR 16 10 0 1 end test_dbout_profiler; - 1168 IGNR 1 1 1 1 wt_assert.g_testcase := 'Insert DBOUT Profile Setup'; - 1169 IGNR 1 0 0 0 tl_compile_db_object - 1174 IGNR 1 8 8 8 tl_compile_db_object - 1186 IGNR 1 1 1 1 tl_insert_plsql_profiler_recs(c_test_run_id); - 1187 IGNR 1 1 1 1 tl_count_plsql_profiler_recs(c_test_run_id, 1); -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1188 IGNR 1 1 1 1 tl_insert_test_runs(c_test_run_id, 'Insert DBOUT Test'); - 1190 IGNR 1 1 1 1 units_rec.runid := c_test_run_id; - 1191 IGNR 1 1 1 1 units_rec.unit_number := 1; - 1192 IGNR 1 2 0 2 units_rec.unit_owner := USER; - 1193 IGNR 1 0 0 0 units_rec.unit_name := l_pname; - 1194 IGNR 1 1 1 1 units_rec.unit_type := 'PACKAGE BODY'; - 1195 IGNR 1 0 0 0 units_rec.total_time := 0; - 1198 IGNR 1 1005 1005 1005 insert into plsql_profiler_units values units_rec; - 1199 IGNR 1 101 101 101 commit; - 1200 IGNR 1 7 7 7 l_err_stack := dbms_utility.format_error_stack || - 1202 IGNR 0 0 0 0 exception when others then - 1203 IGNR 0 0 0 0 l_err_stack := dbms_utility.format_error_stack || - 1205 IGNR 0 0 0 0 end; - 1207 IGNR 1 3 3 3 wt_assert.isnull ( - 1210 IGNR 1 9 9 9 wt_assert.eqqueryvalue - 1217 IGNR 1 0 0 0 data_rec.runid := c_test_run_id; - 1218 IGNR 1 0 0 0 data_rec.unit_number := 1; - 1219 IGNR 1 1 1 1 data_rec.min_time := 0; - 1220 IGNR 1 0 0 0 data_rec.max_time := 1; - 1221 IGNR 1 1 1 1 insert_plsql_profiler_data(1, 0, 0); - 1222 IGNR 1 1 1 1 insert_plsql_profiler_data(2, 0, 1); - 1223 IGNR 1 0 0 0 insert_plsql_profiler_data(3, 1, 1); - 1224 IGNR 1 1 1 1 insert_plsql_profiler_data(5, 1, 1); - 1225 IGNR 1 1 1 1 insert_plsql_profiler_data(7, 1, 1); - 1226 IGNR 1 0 0 0 insert_plsql_profiler_data(8, 0, 0); -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1227 IGNR 1 0 0 0 insert_plsql_profiler_data(9, 1, 1); - 1228 IGNR 1 1 1 1 insert_plsql_profiler_data(10, 0, 0); - 1230 IGNR 1 7 7 7 wt_assert.eqqueryvalue - 1237 IGNR 1 1 1 1 wt_assert.g_testcase := 'Insert DBOUT Profile Happy Path'; - 1238 IGNR 1 1 1 1 l_recSAVE := g_rec; - 1239 IGNR 1 1 1 1 g_rec.test_run_id := c_test_run_id; - 1240 IGNR 1 3 1 2 g_rec.dbout_owner := USER; - 1241 IGNR 1 1 1 1 g_rec.dbout_name := l_pname; - 1242 IGNR 1 0 0 0 g_rec.dbout_type := 'PACKAGE BODY'; - 1243 IGNR 1 1 1 1 g_rec.prof_runid := c_test_run_id; - 1244 IGNR 1 0 0 0 g_rec.trigger_offset := 0; - 1245 IGNR 1 0 0 0 g_rec.error_message := ''; - 1247 IGNR 1 0 0 0 g_skip_add := TRUE; - 1249 IGNR 1 1 1 1 insert_dbout_profile; - 1250 IGNR 1 7 7 7 l_err_stack := dbms_utility.format_error_stack || - 1252 IGNR 0 0 0 0 exception when others then - 1253 IGNR 0 0 0 0 l_err_stack := dbms_utility.format_error_stack || - 1255 IGNR 0 0 0 0 end; - 1256 IGNR 1 0 0 0 g_skip_add := FALSE; - 1257 IGNR 1 2 2 2 g_rec := l_recSAVE; - 1258 IGNR 1 4 4 4 wt_assert.isnull ( - 1262 IGNR 1 0 0 0 test_dbout_profiler(1, 'STATUS', 'EXCL'); - 1263 IGNR 1 8 8 8 test_dbout_profiler(1, 'TEXT', 'package body WT_PROFILE_INSERT_DBOUT is' || CHR(10)); - 1264 IGNR 1 1 1 1 test_dbout_profiler(2, 'STATUS', 'UNKN'); - 1265 IGNR 1 3 3 3 test_dbout_profiler(2, 'TEXT', 'begin' || CHR(10)); -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1266 IGNR 1 1 1 1 test_dbout_profiler(3, 'STATUS', 'EXEC'); - 1267 IGNR 1 2 2 2 test_dbout_profiler(3, 'TEXT', ' l_junk := 1;' || CHR(10)); - 1268 IGNR 1 1 1 1 test_dbout_profiler(5, 'STATUS', 'IGNR'); - 1269 IGNR 1 2 2 2 test_dbout_profiler(5, 'TEXT', ' l_junk := 2;' || CHR(10)); - 1270 IGNR 1 0 0 0 test_dbout_profiler(7, 'STATUS', 'EXEC'); - 1271 IGNR 1 2 2 2 test_dbout_profiler(7, 'TEXT', ' if 0 = 1 then' || CHR(10)); - 1272 IGNR 1 1 1 1 test_dbout_profiler(8, 'STATUS', 'NOTX'); - 1273 IGNR 1 3 3 3 test_dbout_profiler(8, 'TEXT', ' l_junk := 3;' || CHR(10)); - 1274 IGNR 1 0 0 0 test_dbout_profiler(9, 'STATUS', 'EXEC'); - 1275 IGNR 1 3 3 3 test_dbout_profiler(9, 'TEXT', ' end if;' || CHR(10)); - 1276 IGNR 1 0 0 0 test_dbout_profiler(10, 'STATUS', 'EXCL'); - 1277 IGNR 1 1 1 1 test_dbout_profiler(10, 'TEXT', 'end WT_PROFILE_INSERT_DBOUT;'); - 1279 IGNR 1 0 0 0 wt_assert.g_testcase := 'Insert DBOUT Profile Teardown'; - 1280 IGNR 1 0 0 0 tl_delete_dbout_profiles(c_test_run_id); - 1281 IGNR 1 1 1 1 tl_delete_test_runs(c_test_run_id); - 1282 IGNR 1 1 1 1 tl_delete_plsql_profiler_recs(c_test_run_id); - 1283 IGNR 1 2 2 2 tl_count_plsql_profiler_recs(c_test_run_id, 0); - 1284 IGNR 1 0 0 0 tl_drop_db_object(l_pname, 'package'); - 1285 IGNR 1 3 3 3 end t_insert_dbout_profile; - 1295 EXEC 3 8 2 3 procedure initialize - 1309 EXEC 3 2 0 1 out_dbout_owner := ''; - 1310 EXEC 3 0 0 0 out_dbout_name := ''; - 1311 EXEC 3 0 0 0 out_dbout_type := ''; - 1312 EXEC 3 0 0 0 out_trigger_offset := NULL; - 1313 EXEC 3 0 0 0 out_profiler_runid := NULL; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1314 EXEC 3 0 0 0 out_error_message := ''; - 1315 EXEC 3 0 0 0 g_rec := l_rec_NULL; - 1319 IGNR 3 2 1 1 g_skip_insert := FALSE; - 1320 IGNR 3 0 0 0 g_skip_add := FALSE; - 1323 EXEC 3 1 1 1 if in_test_run_id is null - 1325 EXEC 1 88 88 88 raise_application_error (-20004, 'i_test_run_id is null'); - 1327 EXEC 2 1 0 1 g_rec.test_run_id := in_test_run_id; - 1329 EXEC 2 1 0 1 find_dbout(in_pkg_name => in_runner_name); - 1330 EXEC 2 3 1 2 out_dbout_owner := g_rec.dbout_owner; - 1331 EXEC 2 1 1 1 out_dbout_name := g_rec.dbout_name; - 1332 EXEC 2 1 1 1 out_dbout_type := g_rec.dbout_type; - 1333 EXEC 2 0 0 0 out_error_message := g_rec.error_message; - 1335 EXEC 2 2 2 2 if g_rec.dbout_name is null -- No DBOUT notation - 1339 EXEC 1 0 0 0 g_rec.prof_runid := NULL; - 1340 EXEC 1 0 0 0 return; - 1343 EXEC 1 2 1 1 g_rec.trigger_offset := wt_profiler.trigger_offset - 1347 EXEC 1 1 1 1 out_trigger_offset := g_rec.trigger_offset; - 1349 EXEC 1 6 1 5 l_retnum := dbms_profiler.INTERNAL_VERSION_CHECK; - 1350 EXEC 1 1 1 1 if l_retnum <> 0 then - 1353 IGNR 0 0 0 0 raise_application_error(-20005, - 1359 EXEC 1 295 0 289 l_retnum := dbms_profiler.START_PROFILER(run_number => g_rec.prof_runid); - 1360 EXEC 2 1 0 1 if l_retnum <> 0 then - 1362 IGNR 0 0 0 0 raise_application_error(-20006, - 1367 EXEC 2 4 1 3 out_profiler_runid := g_rec.prof_runid; - 1369 EXEC 2 8 1 7 end initialize; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1373 IGNR 0 8 8 8 procedure t_initialize - 1375 IGNR 1 0 0 0 c_test_run_id constant number := -96; - 1376 IGNR 1 1 1 1 l_pname varchar2(128) := 'WT_PROFILE_INITIALIZE'; - 1383 IGNR 1 1 1 1 wt_assert.g_testcase := 'Insert DBOUT Profile Setup'; - 1384 IGNR 1 1 1 1 tl_compile_db_object - 1389 IGNR 1 1 1 1 wt_assert.g_testcase := 'Initialize Test HAPPY Path 1'; - 1390 IGNR 1 5 5 5 tl_compile_db_object - 1397 IGNR 1 1 1 1 l_recSAVE := g_rec; - 1398 IGNR 1 4 1 3 initialize - 1407 IGNR 1 1 1 1 l_recTEST := g_rec; - 1408 IGNR 1 0 0 0 g_rec := l_recSAVE; - 1410 IGNR 1 2 2 2 wt_assert.isnull ( - 1413 IGNR 1 1 1 1 wt_assert.isnull ( - 1417 IGNR 1 1 1 1 wt_assert.isnull ( - 1420 IGNR 1 1 1 1 wt_assert.isnull ( - 1424 IGNR 1 1 1 1 wt_assert.isnull ( - 1427 IGNR 1 1 1 1 wt_assert.isnull ( - 1431 IGNR 1 1 1 1 wt_assert.isnull ( - 1434 IGNR 1 1 1 1 wt_assert.isnull ( - 1438 IGNR 1 1 1 1 wt_assert.isnull ( - 1441 IGNR 1 1 1 1 wt_assert.isnull ( - 1445 IGNR 1 1 1 1 wt_assert.isnull ( - 1448 IGNR 1 1 1 1 wt_assert.isnull ( - 1452 IGNR 1 0 0 0 wt_assert.g_testcase := 'Initialize Test HAPPY Path 2'; - 1453 IGNR 1 4 4 4 tl_compile_db_object -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1462 IGNR 1 1 1 1 l_recSAVE := g_rec; - 1463 IGNR 1 5 2 3 initialize - 1472 IGNR 1 4 4 4 l_recTEST := g_rec; - 1473 IGNR 1 1 1 1 g_rec := l_recSAVE; - 1475 IGNR 1 4 1 3 wt_assert.eq ( - 1479 IGNR 1 1 1 1 wt_assert.eq ( - 1484 IGNR 1 0 0 0 wt_assert.eq ( - 1488 IGNR 1 5 5 5 wt_assert.isnotnull ( - 1492 IGNR 1 4 4 4 wt_assert.eq ( - 1496 IGNR 1 1 1 1 wt_assert.isnull ( - 1500 IGNR 1 2 1 1 wt_assert.eq ( - 1504 IGNR 1 0 0 0 wt_assert.eq ( - 1509 IGNR 1 0 0 0 wt_assert.eq ( - 1513 IGNR 1 4 4 4 wt_assert.isnotnull ( - 1517 IGNR 1 2 2 2 wt_assert.eq ( - 1521 IGNR 1 1 1 1 wt_assert.isnull ( - 1525 IGNR 1 1 1 1 wt_assert.g_testcase := 'Initialize Test Sad Path 1'; - 1526 IGNR 1 1 1 1 l_recSAVE := g_rec; - 1528 IGNR 1 1 1 1 initialize - 1537 IGNR 0 0 0 0 l_sqlerrm := SQLERRM; - 1539 IGNR 1 0 0 0 exception when others then - 1540 IGNR 1 87 87 87 l_sqlerrm := SQLERRM; - 1541 IGNR 0 3 3 3 end; - 1542 IGNR 1 1 1 1 l_recTEST := g_rec; - 1543 IGNR 1 1 1 1 g_rec := l_recSAVE; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1544 IGNR 1 1 1 1 wt_assert.eq ( - 1549 IGNR 1 0 0 0 wt_assert.g_testcase := 'Insert DBOUT Profile Teardown'; - 1550 IGNR 1 0 0 0 tl_drop_db_object - 1553 IGNR 1 2 2 2 end t_initialize; - 1560 EXEC 4 8 1 4 procedure finalize - 1564 EXEC 4 1 0 1 if g_rec.prof_runid is null - 1566 EXEC 1 0 0 0 return; - 1568 EXEC 3 0 0 0 if g_rec.test_run_id is null - 1570 EXEC 1 43 43 43 raise_application_error (-20000, 'g_rec.test_run_id is null'); - 1574 IGNR 0 0 0 0 if not g_skip_insert - 1580 IGNR 1 1 1 1 dbms_profiler.STOP_PROFILER; - 1581 IGNR 0 0 0 0 exception when others then - 1582 IGNR 0 0 0 0 g_rec := l_rec_NULL; - 1584 IGNR 0 0 0 0 raise; - 1586 IGNR 0 0 0 0 insert_dbout_profile; - 1591 EXEC 1 1 1 1 g_rec := l_rec_NULL; - 1592 EXEC 1 0 0 0 end finalize; - 1596 IGNR 1 6 1 5 procedure t_finalize - 1604 IGNR 1 1 1 1 wt_assert.g_testcase := 'Finalize Happy Path 1'; - 1605 IGNR 1 1 1 1 l_recSAVE := g_rec; - 1606 IGNR 1 1 1 1 g_rec.prof_runid := NULL; - 1607 IGNR 1 2 2 2 wt_assert.isnull ( - 1612 IGNR 1 1 1 1 finalize; - 1613 IGNR 1 7 7 7 l_err_stack := dbms_utility.format_error_stack || - 1615 IGNR 0 0 0 0 exception when others then -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1616 IGNR 0 0 0 0 l_err_stack := dbms_utility.format_error_stack || - 1618 IGNR 0 0 0 0 end; - 1619 IGNR 1 1 1 1 g_rec := l_recSAVE; - 1620 IGNR 1 1 1 1 wt_assert.isnull ( - 1624 IGNR 1 1 1 1 wt_assert.g_testcase := 'Finalize Happy Path 2'; - 1625 IGNR 1 0 0 0 l_recSAVE := g_rec; - 1626 IGNR 1 0 0 0 g_rec.test_run_id := -1; - 1627 IGNR 1 0 0 0 g_rec.dbout_owner := 'TEST OWNER'; - 1628 IGNR 1 0 0 0 g_rec.dbout_name := 'TEST NAME'; - 1629 IGNR 1 1 1 1 g_rec.dbout_type := 'TEST TYPE'; - 1630 IGNR 1 0 0 0 g_rec.prof_runid := -2; - 1631 IGNR 1 0 0 0 g_rec.trigger_offset := -3; - 1632 IGNR 1 1 1 1 g_rec.error_message := 'TEST MESSAGE'; - 1634 IGNR 1 1 1 1 g_skip_insert := TRUE; - 1636 IGNR 1 0 0 0 finalize; - 1637 IGNR 1 2 2 2 l_err_stack := dbms_utility.format_error_stack || - 1639 IGNR 0 0 0 0 exception when others then - 1640 IGNR 0 0 0 0 l_err_stack := dbms_utility.format_error_stack || - 1642 IGNR 0 0 0 0 end; - 1643 IGNR 1 0 0 0 g_skip_insert := FALSE; - 1645 IGNR 1 0 0 0 l_recTEST := g_rec; - 1646 IGNR 1 0 0 0 g_rec := l_recSAVE; - 1647 IGNR 1 0 0 0 wt_assert.isnull ( - 1651 IGNR 1 1 1 1 wt_assert.isnull ( - 1654 IGNR 1 0 0 0 wt_assert.isnull ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1658 IGNR 1 1 1 1 wt_assert.isnull ( - 1661 IGNR 1 0 0 0 wt_assert.isnull ( - 1665 IGNR 1 1 1 1 wt_assert.isnull ( - 1668 IGNR 1 1 1 1 wt_assert.isnull ( - 1671 IGNR 1 0 0 0 wt_assert.isnull ( - 1675 IGNR 1 0 0 0 wt_assert.g_testcase := 'Finalize Sad Path 1'; - 1676 IGNR 1 1 1 1 l_recSAVE := g_rec; - 1677 IGNR 1 0 0 0 g_rec.prof_runid := -1; - 1678 IGNR 1 0 0 0 g_rec.test_run_id := NULL; - 1680 IGNR 1 1 1 1 finalize; - 1681 IGNR 1 0 0 0 exception when others then - 1682 IGNR 1 42 42 42 l_sqlerrm := SQLERRM; - 1683 IGNR 0 1 1 1 end; - 1685 IGNR 1 1 1 1 g_rec := l_recSAVE; - 1686 IGNR 1 2 2 2 wt_assert.eq ( - 1690 IGNR 1 1 1 1 end t_finalize; - 1696 UNKN 0 37 3 18 function trigger_offset - 1703 EXEC 4 2 0 1 if dbout_type_in != 'TRIGGER' - 1705 EXEC 2 0 0 0 return 0; - 1707 EXEC 4 22048 3 21861 for buff in ( - 1708#NOTX# 0 0 0 0 select line, text from dba_source - 1714 EXEC 4 163 4 72 if regexp_instr(buff.text, - 1726 EXEC 1 41 2 39 return buff.line - 1; - 1729 EXEC 1 0 0 0 return 0; - 1730 EXEC 4 10 1 7 end trigger_offset; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1734 IGNR 0 2 2 2 procedure t_trigger_offset - 1738 IGNR 1 1 1 1 wt_assert.g_testcase := 'Trigger Offset Happy Path'; - 1739 IGNR 1 12 11 11 wt_assert.eq ( - 1746 IGNR 1 5 4 4 wt_assert.eq ( - 1753 IGNR 1 0 0 0 wt_assert.g_testcase := 'Trigger Offset Sad Path'; - 1754 IGNR 1 4 4 4 wt_assert.eq ( - 1760 IGNR 1 1 1 1 end t_trigger_offset; - 1765 UNKN 0 20 2 7 function calc_pct_coverage - 1770 EXEC 8 4265 2 3991 for buff in ( - 1776 EXEC 4 6 1 3 if buff.hits + buff.misses = 0 - 1778 EXEC 1 26 2 19 return -1; - 1780 EXEC 3 11 1 8 return round(100 * buff.hits / (buff.hits + buff.misses),2); - 1783#NOTX# 0 0 0 0 return null; - 1784 EXEC 4 11 2 5 END calc_pct_coverage; - 1788 IGNR 0 4 4 4 procedure t_calc_pct_coverage - 1790 IGNR 1 1 1 1 c_test_run_id constant number := -95; - 1794 IGNR 1 1 1 1 wt_assert.g_testcase := 'Calculate Percent Coverage Setup'; - 1795 IGNR 1 0 0 0 tl_insert_test_runs(c_test_run_id, 'Calculate Offset Test'); - 1796 IGNR 1 1 1 1 l_rec.test_run_id := c_test_run_id; - 1797 IGNR 1 0 0 0 l_rec.total_occur := 1; - 1798 IGNR 1 1 1 1 l_rec.total_usecs := 1; - 1799 IGNR 1 0 0 0 l_rec.min_usecs := 1; - 1800 IGNR 1 1 1 1 l_rec.max_usecs := 1; - 1802 IGNR 1 1 1 1 wt_assert.g_testcase := 'Calculate Percent Coverage Happy Path 1'; - 1803 IGNR 1 0 0 0 l_rec.line := 1; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1804 IGNR 1 1 1 1 l_rec.status := 'EXEC'; - 1805 IGNR 1 6 6 6 l_rec.text := 'Testing ' || l_rec.line; - 1806 IGNR 1 1 1 1 tl_insert_dbout_profiles(l_rec); - 1808 IGNR 1 0 0 0 l_rec.line := 2; - 1809 IGNR 1 0 0 0 l_rec.status := 'NOTX'; - 1810 IGNR 1 3 3 3 l_rec.text := 'Testing ' || l_rec.line; - 1811 IGNR 1 1 1 1 tl_insert_dbout_profiles(l_rec); - 1813 IGNR 1 0 0 0 l_rec.line := 3; - 1814 IGNR 1 1 1 1 l_rec.status := 'EXEC'; - 1815 IGNR 1 3 3 3 l_rec.text := 'Testing ' || l_rec.line; - 1816 IGNR 1 1 1 1 tl_insert_dbout_profiles(l_rec); - 1817 IGNR 1 10 10 10 wt_assert.eq ( - 1821 IGNR 1 0 0 0 tl_delete_dbout_profiles(c_test_run_id); - 1823 IGNR 1 3 3 3 wt_assert.g_testcase := 'Calculate Percent Coverage Happy Path 2'; - 1824 IGNR 1 1 1 1 l_rec.line := 1; - 1825 IGNR 1 1 1 1 l_rec.status := 'EXCL'; - 1826 IGNR 1 12 12 12 l_rec.text := 'Testing ' || l_rec.line; - 1827 IGNR 1 1 1 1 tl_insert_dbout_profiles(l_rec); - 1829 IGNR 1 1 1 1 l_rec.line := 2; - 1830 IGNR 1 0 0 0 l_rec.status := 'UNKN'; - 1831 IGNR 1 2 2 2 l_rec.text := 'Testing ' || l_rec.line; - 1832 IGNR 1 0 0 0 tl_insert_dbout_profiles(l_rec); - 1834 IGNR 1 1 1 1 l_rec.line := 3; - 1835 IGNR 1 0 0 0 l_rec.status := 'EXCL'; - 1836 IGNR 1 2 2 2 l_rec.text := 'Testing ' || l_rec.line; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1837 IGNR 1 1 1 1 tl_insert_dbout_profiles(l_rec); - 1838 IGNR 1 6 1 5 wt_assert.eq ( - 1842 IGNR 1 1 1 1 tl_delete_dbout_profiles(c_test_run_id); - 1844 IGNR 1 1 1 1 wt_assert.g_testcase := 'Calculate Percent Coverage Sad Path'; - 1845 IGNR 1 2 1 1 wt_assert.isnull ( - 1848 IGNR 1 2 2 2 wt_assert.isnull ( - 1852 IGNR 1 0 0 0 wt_assert.g_testcase := 'Calculate Percent Coverage Teardown'; - 1853 IGNR 1 0 0 0 tl_delete_test_runs(c_test_run_id); - 1854 IGNR 1 3 3 3 end t_calc_pct_coverage; - 1859 EXEC 3 5 0 1 procedure delete_records - 1864 EXEC 3 360 62 161 select profiler_runid into l_profiler_runid - 1866 EXEC 1 0 0 0 delete_plsql_profiler_recs(l_profiler_runid); - 1867 EXEC 1 283 283 283 delete from wt_dbout_profiles - 1870 EXEC 2 0 0 0 when NO_DATA_FOUND - 1872 EXEC 2 1 0 1 return; - 1873 EXEC 3 3 1 1 end delete_records; - 1877 IGNR 0 6 6 6 procedure t_delete_records - 1879 IGNR 1 0 0 0 c_test_run_id constant number := -98; - 1884 IGNR 1 1 1 1 wt_assert.g_testcase := 'Delete Records Setup'; - 1885 IGNR 1 7 7 7 wt_assert.eqqueryvalue ( - 1890 IGNR 1 12 12 12 wt_assert.eqqueryvalue ( - 1895 IGNR 1 1 1 1 tl_insert_test_runs(c_test_run_id, 'Delete Records Test'); - 1897 IGNR 1 1 1 1 l_rec.test_run_id := c_test_run_id; - 1898 IGNR 1 0 0 0 l_rec.line := 1; - 1899 IGNR 1 0 0 0 l_rec.status := 'EXEC'; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1900 IGNR 1 0 0 0 l_rec.total_occur := 1; - 1901 IGNR 1 0 0 0 l_rec.total_usecs := 1; - 1902 IGNR 1 0 0 0 l_rec.min_usecs := 1; - 1903 IGNR 1 0 0 0 l_rec.max_usecs := 1; - 1904 IGNR 1 2 2 2 l_rec.text := 'Testing'; - 1905 IGNR 1 1 1 1 tl_insert_dbout_profiles(l_rec); - 1907 IGNR 1 0 0 0 wt_assert.g_testcase := 'Delete Records Happy Path 1'; - 1908 IGNR 0 0 0 0 begin - 1909 IGNR 1 0 0 0 delete_records(c_test_run_id); - 1910 IGNR 1 6 6 6 l_err_stack := dbms_utility.format_error_stack || - 1912 IGNR 0 0 0 0 exception when others then - 1913 IGNR 0 0 0 0 l_err_stack := dbms_utility.format_error_stack || - 1915 IGNR 0 0 0 0 end; - 1917 IGNR 1 1 1 1 wt_assert.isnull ( - 1920 IGNR 1 6 6 6 wt_assert.eqqueryvalue ( - 1926 IGNR 1 0 0 0 wt_assert.g_testcase := 'Delete Records Sad Path 1'; - 1928 IGNR 1 0 0 0 delete_records(-9876); - 1929 IGNR 1 2 2 2 l_err_stack := dbms_utility.format_error_stack || - 1931 IGNR 0 0 0 0 exception when others then - 1932 IGNR 0 0 0 0 l_err_stack := dbms_utility.format_error_stack || - 1934 IGNR 0 0 0 0 end; - 1936 IGNR 1 1 1 1 wt_assert.isnull ( - 1939 IGNR 1 3 3 3 wt_assert.eqqueryvalue ( - 1945 IGNR 1 0 0 0 wt_assert.g_testcase := 'Delete Records Sad Path 2'; - 1947 IGNR 1 1 1 1 delete_records(NULL); -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1948 IGNR 1 3 3 3 l_err_stack := dbms_utility.format_error_stack || - 1950 IGNR 0 0 0 0 exception when others then - 1951 IGNR 0 0 0 0 l_err_stack := dbms_utility.format_error_stack || - 1953 IGNR 0 0 0 0 end; - 1955 IGNR 1 1 1 1 wt_assert.isnull ( - 1958 IGNR 1 3 3 3 wt_assert.eqqueryvalue ( - 1964 IGNR 1 0 0 0 wt_assert.g_testcase := 'Delete Records Teardown'; - 1965 IGNR 1 0 0 0 tl_delete_test_runs(c_test_run_id); - 1966 IGNR 1 3 3 3 end t_delete_records; - 1973 IGNR 0 1 1 1 procedure WTPLSQL_RUN --% WTPLSQL SET DBOUT "WT_PROFILER:PACKAGE BODY" %-- - 1976 IGNR 1 1 1 1 t_get_error_msg; - 1977 IGNR 1 1 1 1 t_delete_profiler_recs; - 1978 IGNR 1 0 0 0 t_find_dbout; - 1979 IGNR 1 0 0 0 t_load_ignr_aa; - 1980 IGNR 1 1 1 1 t_insert_dbout_profile; - 1981 IGNR 1 1 1 1 t_initialize; - 1982 IGNR 1 1 1 1 t_finalize; - 1983 IGNR 1 1 1 1 t_trigger_offset; - 1984 IGNR 1 1 1 1 t_calc_pct_coverage; - 1985 IGNR 1 1 1 1 t_delete_records; - 1986 IGNR 1 2 2 2 end WTPLSQL_RUN; - 1991 EXCL 0 0 0 0 end wt_profiler; - - - wtPLSQL 1.1.0 - Run ID 8: 29-Jun-2018 03:22:02 PM - - Test Results for WTP.WT_RESULT - Total Test Cases: 7 Total Assertions: 35 - Minimum Interval msec: 0 Failed Assertions: 0 - Average Interval msec: 3 Error Assertions: 0 - Maximum Interval msec: 87 Test Yield: 100.00% - Total Run Time (sec): 0.1 - - Code Coverage for PACKAGE BODY WTP.WT_RESULT - Ignored Lines: 144 Total Profiled Lines: 185 - Excluded Lines: 2 Total Executed Lines: 36 - Minimum LineExec usec: 0 Not Executed Lines: 1 - Average LineExec usec: 21 Unknown Lines: 2 - Maximum LineExec usec: 287 Code Coverage: 97.30% - Trigger Source Offset: 0 - - - WTP.WT_RESULT Test Result Details (Test Run ID 8) ------------------------------------------------------------ - ---- Test Case: Initialize Happy Path - PASS 87ms l_results_recTEST.test_run_id. EQ - Expected "-99" and got "-99" - PASS 0ms l_results_recTEST.result_seq. EQ - Expected "0" and got "0" - PASS 0ms l_results_recTEST.executed_dtm. ISNOTNULL - Expected NOT NULL and got "29-JUN-2018 15:22:02.761000" - PASS 0ms l_results_recTEST.interval_msecs. ISNULL - Expected NULL and got "" - PASS 0ms l_results_recTEST.assertion. ISNULL - Expected NULL and got "" - PASS 0ms l_results_recTEST.status. ISNULL - Expected NULL and got "" - PASS 1ms l_results_recTEST.details. ISNULL - Expected NULL and got "" - PASS 0ms l_results_recTEST.testcase. ISNULL - Expected NULL and got "" - PASS 0ms l_results_recTEST.message. ISNULL - Expected NULL and got "" - PASS 0ms l_results_ntTEST.COUNT. EQ - Expected "1" and got "1" - PASS 0ms l_results_ntTEST(1).test_run_id. ISNULL - Expected NULL and got "" - PASS 3ms Raises ORA-20009. RAISES/THROWS - Expected exception "%ORA-20009: "in_test_run_id" cannot be NULL%". Actual exception raised was "ORA-20009: "in_test_run_id" cannot be NULL". Exception raised by: "begin wt_result.initialize(NULL); end;". - ---- Test Case: Finalize Happy Path - PASS 8ms Before NULL Test Record Count. EQ - Expected "0" and got "0" - PASS 1ms After NULL Test Record Count. EQ - Expected "0" and got "0" - PASS 0ms l_results_recTEST.test_run_id. ISNULL - Expected NULL and got "" - PASS 0ms l_results_ntTEST.COUNT. EQ - Expected "1" and got "1" - PASS 0ms Record Count Test. EQ - Expected "1" and got "1" - ---- Test Case: Ad Hoc Save Happy Path Setup - PASS 0ms l_dbmsout_buff.COUNT - 1. ISNOTNULL - Expected NOT NULL and got "0" - ---- Test Case: Ad Hoc Save Testing Happy Path - PASS 0ms DBMS_OUTPUT Status. EQ - Expected "0" and got "0" - PASS 0ms DBMS_OUTPUT Line. ISNOTNULL - Expected NOT NULL and got " ---- Test Case: Ad Hoc Save Testing Happy Path\n PASS t_save_testing Message. SELFTEST1 - t_save_testing Details" - PASS 0ms Save Testing NULL Test DBMS_OUTPUT 3 Message. THIS - Expected "TRUE" and got "TRUE" - ---- Test Case: Ad Hoc Save Happy Path Teardown - PASS 0ms l_dbmsout_buff.COUNT - 1. ISNOTNULL - Expected NOT NULL and got "0" - ---- Test Case: Save Testing Happy Path - PASS 1ms t_save_testing Testing Message. SELFTEST2 - t_save_testing Testing Details - PASS 0ms g_results_nt.COUNT. EQ - Expected "24" and got "24" - PASS 0ms g_results_nt(23).assetion. EQ - Expected "SELFTEST2" and got "SELFTEST2" - PASS 0ms g_results_nt(23).status. EQ - Expected "PASS" and got "PASS" - PASS 0ms g_results_nt(23).details. EQ - Expected "t_save_testing Testing Details" and got "t_save_testing Testing Details" - PASS 0ms g_results_nt(23).testcase. EQ - Expected "Save Testing Happy Path" and got "Save Testing Happy Path" - PASS 0ms g_results_nt(23).message. EQ - Expected "t_save_testing Testing Message" and got "t_save_testing Testing Message" - PASS 0ms g_results_nt(23).interval_msecs. ISNOTNULL - Expected NOT NULL and got "1" - PASS 0ms g_results_nt(23).executed_dtm. ISNOTNULL - Expected NOT NULL and got "29-JUN-2018 15:22:02.777000" - PASS 0ms g_results_nt(23).result_seq. ISNOTNULL - Expected NOT NULL and got "23" - ---- Test Case: Delete Records Happy Path - PASS 1ms Before Insert Count. ISNOTNULL - Expected NOT NULL and got "0" - PASS 5ms After Insert Count. EQQUERYVALUE - Expected "1" and got "1" for Query: select count(*) from wt_results where test_run_id = -99 - PASS 1ms After Test Count. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from wt_results where test_run_id = -99 - PASS 0ms After ROLLBACK Count. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from wt_results where test_run_id = -99 - - - WTP.WT_RESULT PACKAGE BODY Code Coverage Details (Test Run ID 8) -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1 EXCL 0 0 0 0 package body wt_result - 9 IGNR 0 0 0 0 g_skip_add BOOLEAN := FALSE; - 22 EXEC 2 28 10 19 procedure initialize - 27 EXEC 2 1 1 1 if in_test_run_id is NULL - 29 EXEC 1 89 89 89 raise_application_error(-20009, '"in_test_run_id" cannot be NULL'); - 31 EXEC 1 0 0 0 g_results_rec := l_results_recNULL; - 32 EXEC 1 1 1 1 g_results_rec.test_run_id := in_test_run_id; - 33 EXEC 1 0 0 0 g_results_rec.result_seq := 0; - 34 EXEC 1 7 3 4 g_results_rec.executed_dtm := systimestamp; - 35 EXEC 1 2 2 2 g_results_nt := results_nt_type(null); - 37 IGNR 1 0 0 0 g_skip_add := FALSE; - 39 EXEC 1 2 2 2 end initialize; - 43 IGNR 1 16 16 16 procedure t_initialize - 52 IGNR 1 10 10 10 l_results_ntSAVE := g_results_nt; - 53 IGNR 1 1 1 1 l_results_recSAVE := g_results_rec; - 54 IGNR 1 0 0 0 g_results_rec := l_results_recNULL; - 55 IGNR 1 1 1 1 initialize(-99); - 56 IGNR 1 0 0 0 l_results_recTEST := g_results_rec; - 57 IGNR 1 0 0 0 g_results_rec := l_results_recSAVE; - 58 IGNR 1 2 2 2 l_results_ntTEST := g_results_nt; - 59 IGNR 1 1 1 1 g_results_nt := l_results_ntSAVE; - 61 IGNR 2 7 1 6 wt_assert.g_testcase := 'Initialize Happy Path'; - 62 IGNR 1 9 9 9 wt_assert.eq ( - 67 IGNR 1 5 5 5 wt_assert.eq ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 71 IGNR 1 18 18 18 wt_assert.isnotnull ( - 75 IGNR 1 2 2 2 wt_assert.isnull ( - 78 IGNR 1 1 1 1 wt_assert.isnull ( - 82 IGNR 1 0 0 0 wt_assert.isnull ( - 85 IGNR 1 3 3 3 wt_assert.isnull ( - 89 IGNR 1 1 1 1 wt_assert.isnull ( - 92 IGNR 1 0 0 0 wt_assert.isnull ( - 95 IGNR 1 5 5 5 wt_assert.eq ( - 100 IGNR 1 2 2 2 wt_assert.isnull ( - 103 IGNR 1 0 0 0 wt_assert.raises ( - 107 IGNR 1 4 4 4 end t_initialize; - 114 EXEC 2 35 12 24 procedure finalize - 118 EXEC 2 21 8 13 begin - 119 EXEC 2 1 0 1 if g_results_rec.test_run_id IS NULL - 121 EXEC 1 10 10 10 return; - 124 EXEC 1 185 185 185 forall i in 1 .. g_results_nt.COUNT - 1 - 125#NOTX# 0 0 0 0 insert into wt_results values g_results_nt(i); - 126 EXEC 1 78 78 78 COMMIT; - 127 EXEC 1 8 8 8 g_results_nt := results_nt_type(null); - 128 EXEC 1 0 0 0 g_results_rec := l_results_recNULL; - 129 EXEC 1 0 0 0 g_results_nt := results_nt_type(null); - 130 EXEC 1 12 12 12 end finalize; - 134 IGNR 1 13 13 13 procedure t_finalize - 148 IGNR 1 1 1 1 wt_assert.g_testcase := ' '; - 149 IGNR 1 17 17 17 l_results_ntSAVE := g_results_nt; -- Capture Original Values -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 150 IGNR 1 1 1 1 l_results_recSAVE := g_results_rec; -- Capture Original Values - 153 IGNR 1 0 0 0 g_results_rec := l_results_recNULL; - 154 IGNR 1 0 0 0 g_results_rec.test_run_id := -99; - 155 IGNR 1 0 0 0 g_results_rec.result_seq := 1; - 156 IGNR 1 2 1 1 g_results_rec.executed_dtm := systimestamp; - 157 IGNR 1 0 0 0 g_results_rec.interval_msecs := 99; - 159 IGNR 1 1 1 1 g_results_rec.assertion := 'FINALTEST'; - 160 IGNR 1 1 1 1 g_results_rec.status := wt_assert.C_PASS; - 161 IGNR 1 0 0 0 g_results_rec.details := 'This is a WT_RESULT.FINALIZE Test'; - 162 IGNR 1 9 9 9 g_results_nt := results_nt_type(null); - 163 IGNR 1 1 1 1 g_results_nt(1) := g_results_rec; - 164 IGNR 1 1 1 1 g_results_nt.extend; -- Finalize expects that last element to be NULL - 167 IGNR 1 1 1 1 g_results_rec.test_run_id := NULL; - 168 IGNR 1 3158 3158 3158 select count(*) - 172 IGNR 1 1 1 1 finalize; - 174 IGNR 1 188 188 188 select count(*) - 178 IGNR 1 45 45 45 rollback; -- UNDO all database changes - 179 IGNR 1 1 1 1 g_results_rec.test_run_id := -99; - 182 IGNR 1 0 0 0 l_test_runs_rec.id := -99; - 183 IGNR 1 6 2 4 l_test_runs_rec.start_dtm := systimestamp; - 184 IGNR 1 2 2 2 l_test_runs_rec.runner_name := 'Finalize Test'; - 185 IGNR 1 0 0 0 l_test_runs_rec.runner_owner := 'BOGUS'; - 186 IGNR 1 302 302 302 insert into wt_test_runs values l_test_runs_rec; - 187 IGNR 1 124 124 124 commit; -- Must commit because finalize is AUTONOMOUS TRANSACTION - 189 IGNR 1 1 1 1 finalize; -- g_results_nt is still loaded with one element -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 190 IGNR 1 4 4 4 l_results_ntTEST := g_results_nt; - 191 IGNR 1 0 0 0 l_results_recTEST := g_results_rec; - 192 IGNR 1 238 238 238 select count(*) - 196 IGNR 1 2420 2420 2420 delete from wt_results where test_run_id = -99; - 197 IGNR 1 1216 1216 1216 delete from wt_test_runs where id = -99; - 198 IGNR 1 131 131 131 commit; -- UNDO all database changes - 200 IGNR 1 2 2 2 wt_assert.g_testcase := 'Finalize Happy Path'; - 202 IGNR 1 5 5 5 g_results_rec := l_results_recSAVE; - 203 IGNR 1 21 21 21 g_results_nt := l_results_ntSAVE; - 205 IGNR 1 11 11 11 wt_assert.eq ( - 209 IGNR 1 4 4 4 wt_assert.eq ( - 214 IGNR 1 2 2 2 wt_assert.isnull ( - 217 IGNR 1 3 3 3 wt_assert.eq ( - 221 IGNR 1 2 2 2 wt_assert.eq ( - 225 IGNR 1 6 6 6 end t_finalize; - 230 UNKN 0 218 2 57 procedure save - 239 EXEC 37 9 0 2 if g_results_rec.test_run_id IS NULL - 241 EXEC 1 14 14 14 wt_text_report.ad_hoc_result - 247 EXEC 1 2 2 2 return; - 250 EXEC 36 61 1 4 l_current_tstamp := systimestamp; - 251 EXEC 36 313 5 28 g_results_rec.interval_msecs := extract(day from ( - 254 EXEC 36 7 1 1 g_results_rec.executed_dtm := l_current_tstamp; - 256 EXEC 36 13 0 1 g_results_rec.assertion := in_assertion; - 257 EXEC 36 11 1 1 g_results_rec.status := in_status; - 258 EXEC 36 45 1 3 g_results_rec.details := substr(in_details,1,4000); -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 259 EXEC 36 15 1 1 g_results_rec.testcase := substr(in_testcase,1,50); - 260 EXEC 36 12 1 1 g_results_rec.message := substr(in_message,1,200); - 262 EXEC 36 20 0 1 g_results_rec.result_seq := g_results_rec.result_seq + 1; - 263 EXEC 36 83 1 8 g_results_nt(g_results_nt.COUNT) := g_results_rec; - 264 EXEC 36 79 1 6 g_results_nt.extend; - 267 IGNR 36 3 0 1 if not g_skip_add then - 269 IGNR 35 34 1 3 wt_test_run_stat.add_result(g_results_rec); - 274 EXEC 35 62 1 10 end save; - 278 IGNR 0 10 10 10 procedure t_save_testing - 282 IGNR 1 4 4 4 l_dbmsout_buff l_dbmsout_buff_type := l_dbmsout_buff_type(1); - 289 IGNR 1 1 1 1 wt_assert.g_testcase := 'Ad Hoc Save Happy Path Setup'; - 291 IGNR 1 0 0 0 loop - 292 IGNR 1 41 41 41 DBMS_OUTPUT.GET_LINE ( - 295 IGNR 1 1 1 1 exit when l_dbmsout_stat != 0; - 296 IGNR 0 0 0 0 l_dbmsout_buff(l_dbmsout_buff.COUNT) := l_dbmsout_line; - 297 IGNR 0 0 0 0 l_dbmsout_buff.extend; - 299 IGNR 1 3 3 3 wt_assert.isnotnull ( - 303 IGNR 1 0 0 0 wt_assert.g_testcase := 'Ad Hoc Save Testing Happy Path'; - 304 IGNR 1 1 1 1 l_test_run_id := g_results_rec.test_run_id; - 305 IGNR 1 0 0 0 g_results_rec.test_run_id := NULL; - 306 IGNR 1 0 0 0 g_skip_add := TRUE; - 307 IGNR 1 1 1 1 wt_result.save ( - 313 IGNR 1 1 1 1 g_skip_add := FALSE; - 314 IGNR 1 1 1 1 g_results_rec.test_run_id := l_test_run_id; - 316 IGNR 1 1 0 1 DBMS_OUTPUT.GET_LINE ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 319 IGNR 1 2 2 2 wt_assert.eq ( - 324 IGNR 1 1 0 1 if wt_assert.last_pass - 326 IGNR 1 1 1 1 wt_assert.isnotnull ( - 329 IGNR 1 7 7 7 wt_assert.this ( - 334 IGNR 1 0 0 0 if not wt_assert.last_pass - 337 IGNR 0 0 0 0 DBMS_OUTPUT.PUT_LINE(l_dbmsout_line); - 338 IGNR 0 0 0 0 end if; - 341 IGNR 1 0 0 0 wt_assert.g_testcase := 'Ad Hoc Save Happy Path Teardown'; - 343 IGNR 1 0 0 0 for i in 1 .. l_dbmsout_buff.COUNT - 1 - 345 IGNR 0 0 0 0 DBMS_OUTPUT.PUT_LINE(l_dbmsout_buff(i)); - 347 IGNR 1 1 1 1 wt_assert.isnotnull ( - 351 IGNR 1 0 0 0 wt_assert.g_testcase := 'Save Testing Happy Path'; - 352 IGNR 1 1 1 1 l_nt_count := g_results_nt.COUNT; - 353 IGNR 1 0 0 0 g_skip_add := TRUE; - 354 IGNR 1 0 0 0 wt_result.save ( - 360 IGNR 1 1 1 1 g_skip_add := FALSE; - 362 IGNR 1 3 3 3 wt_assert.eq ( - 366 IGNR 1 0 0 0 if not wt_assert.last_pass - 368 IGNR 0 0 0 0 return; -- Something went wrong, end this now. - 371 IGNR 1 3 3 3 wt_assert.eq ( - 375 IGNR 1 2 2 2 wt_assert.eq ( - 380 IGNR 1 2 2 2 wt_assert.eq ( - 384 IGNR 1 2 2 2 wt_assert.eq ( - 389 IGNR 1 2 2 2 wt_assert.eq ( - 393 IGNR 1 2 2 2 wt_assert.isnotnull ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 397 IGNR 1 15 15 15 wt_assert.isnotnull ( - 400 IGNR 1 2 2 2 wt_assert.isnotnull ( - 406 IGNR 1 1 1 1 end t_save_testing; - 411 UNKN 0 1 1 1 procedure delete_records - 415 EXEC 1 287 287 287 delete from wt_results - 417 EXEC 1 2 2 2 end delete_records; - 421 IGNR 1 5 0 5 procedure t_delete_records - 429 IGNR 1 1 1 1 wt_assert.g_testcase := 'Delete Records Happy Path'; - 430 IGNR 1 232 232 232 select count(*) into l_num_recs - 433 IGNR 1 3 3 3 wt_assert.isnotnull ( - 437 IGNR 1 1 1 1 l_test_runs_rec.id := -99; - 438 IGNR 1 1 0 1 l_test_runs_rec.start_dtm := sysdate; - 439 IGNR 1 0 0 0 l_test_runs_rec.runner_name := 'Delete Records Test'; - 440 IGNR 1 0 0 0 l_test_runs_rec.runner_owner := 'BOGUS'; - 441 IGNR 1 318 318 318 insert into wt_test_runs values l_test_runs_rec; - 442 IGNR 1 0 0 0 l_results_rec.test_run_id := -99; - 444 IGNR 1 0 0 0 l_results_rec.result_seq := 1; - 445 IGNR 1 3 1 2 l_results_rec.executed_dtm := sysdate; - 446 IGNR 1 0 0 0 l_results_rec.interval_msecs := 99; - 447 IGNR 1 1 1 1 l_results_rec.assertion := 'DELRECTEST'; - 448 IGNR 1 1 1 1 l_results_rec.status := wt_assert.C_PASS; - 449 IGNR 1 3 3 3 l_results_rec.details := 'This is a WT_RESULT.DELETE_RECORDS Test'; - 450 IGNR 1 1265 1265 1265 insert into wt_results values l_results_rec; - 452 IGNR 1 9 9 9 wt_assert.eqqueryvalue ( - 457 IGNR 1 1 1 1 delete_records(-99); -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 459 IGNR 1 7 7 7 wt_assert.eqqueryvalue ( - 464 IGNR 1 291 291 291 rollback; - 465 IGNR 1 4 4 4 wt_assert.eqqueryvalue ( - 470 IGNR 1 2 2 2 end t_delete_records; - 477 IGNR 0 1 1 1 procedure WTPLSQL_RUN --% WTPLSQL SET DBOUT "WT_RESULT:PACKAGE BODY" %-- - 481 IGNR 1 1 1 1 t_initialize; - 482 IGNR 1 1 1 1 t_finalize; - 483 IGNR 1 0 0 0 t_save_testing; - 484 IGNR 1 0 0 0 t_delete_records; - 485 IGNR 1 1 1 1 end WTPLSQL_RUN; - 490 EXCL 0 0 0 0 end wt_result; - - - wtPLSQL 1.1.0 - Run ID 9: 29-Jun-2018 03:22:02 PM - - Test Results for WTP.WT_TEST_RUN_STAT - Total Test Cases: 12 Total Assertions: 108 - Minimum Interval msec: 0 Failed Assertions: 0 - Average Interval msec: 1 Error Assertions: 0 - Maximum Interval msec: 94 Test Yield: 100.00% - Total Run Time (sec): 0.1 - - Code Coverage for PACKAGE BODY WTP.WT_TEST_RUN_STAT - Ignored Lines: 302 Total Profiled Lines: 402 - Excluded Lines: 2 Total Executed Lines: 94 - Minimum LineExec usec: 0 Not Executed Lines: 0 - Average LineExec usec: 39 Unknown Lines: 4 - Maximum LineExec usec: 1966 Code Coverage: 100.00% - Trigger Source Offset: 0 - - - WTP.WT_TEST_RUN_STAT Test Result Details (Test Run ID 9) ------------------------------------------------------------ - ---- Test Case: Initialize Happy Path 1 Setup - PASS 94ms l_tc_aaTEST('TESTCASE1').test_run_id. EQ - Expected "-2" and got "-2" - PASS 0ms l_recTEST.test_run_id. EQ - Expected "-1" and got "-1" - ---- Test Case: Initialize Happy Path 1 - PASS 0ms l_tc_aaTEST.COUNT. EQ - Expected "0" and got "0" - PASS 0ms l_recTEST.test_run_id. ISNULL - Expected NULL and got "" - ---- Test Case: Add Result Testing - PASS 0ms Add Result Sad Path 1. EQ - Expected "ORA-20010: Unknown Result status "ABC"" and got "ORA-20010: Unknown Result status "ABC"" - PASS 0ms l_recTEST.test_run_id. EQ - Expected "-10" and got "-10" - PASS 0ms l_recTEST.asserts. EQ - Expected "3" and got "3" - PASS 1ms l_recTEST.passes. EQ - Expected "1" and got "1" - PASS 0ms l_recTEST.failures. EQ - Expected "1" and got "1" - PASS 0ms l_recTEST.errors. EQ - Expected "1" and got "1" - PASS 0ms l_recTEST.min_interval_msecs. EQ - Expected "10" and got "10" - PASS 0ms l_recTEST.max_interval_msecs. EQ - Expected "30" and got "30" - PASS 0ms l_recTEST.tot_interval_msecs. EQ - Expected "60" and got "60" - PASS 0ms l_tc_aaTEST('TESTCASE1').test_run_id. EQ - Expected "-10" and got "-10" - PASS 0ms l_tc_aaTEST('TESTCASE1').asserts. EQ - Expected "3" and got "3" - PASS 0ms l_tc_aaTEST('TESTCASE1').passes. EQ - Expected "1" and got "1" - PASS 0ms l_tc_aaTEST('TESTCASE1').failures. EQ - Expected "1" and got "1" - PASS 0ms l_tc_aaTEST('TESTCASE1').errors. EQ - Expected "1" and got "1" - PASS 0ms l_tc_aaTEST('TESTCASE1').min_interval_msecs. EQ - Expected "10" and got "10" - PASS 0ms l_tc_aaTEST('TESTCASE1').max_interval_msecs. EQ - Expected "30" and got "30" - PASS 0ms l_tc_aaTEST('TESTCASE1').tot_interval_msecs. EQ - Expected "60" and got "60" - ---- Test Case: Add Profile Testing - PASS 2ms l_recTEST.test_run_id. EQ - Expected "-20" and got "-20" - PASS 0ms l_recTEST.profiled_lines. EQ - Expected "15" and got "15" - PASS 1ms l_recTEST.min_executed_usecs. EQ - Expected "10" and got "10" - PASS 0ms l_recTEST.max_executed_usecs. EQ - Expected "20" and got "20" - PASS 0ms l_recTEST.tot_executed_usecs. EQ - Expected "150" and got "150" - PASS 0ms l_recTEST.executed_lines. EQ - Expected "5" and got "5" - PASS 0ms l_recTEST.ignored_lines. EQ - Expected "4" and got "4" - PASS 1ms l_recTEST.notexec_lines. EQ - Expected "3" and got "3" - PASS 0ms l_recTEST.excluded_lines. EQ - Expected "2" and got "2" - PASS 0ms l_recTEST.unknown_lines. EQ - Expected "1" and got "1" - PASS 0ms Add Result Sad Path 1. EQ - Expected "ORA-20011: Unknown Profile status "ABC"" and got "ORA-20011: Unknown Profile status "ABC"" - ---- Test Case: FINALIZE Happy Path Setup - PASS 3ms Insert WT_TEST_RUNS Record. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "insert into WT_TEST_RUNS (id, start_dtm, runner_owner, runner_name) values (-102, sysdate, USER, 'TESTRUNNER3')". - ---- Test Case: FINALIZE Happy Path 1 - PASS 1ms Run Finalize for Happy Path 1. EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 3ms Retieve WT_TEST_RUN_STATS record. EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 0ms l_recTEST.test_run_id. EQ - Expected "-102" and got "-102" - PASS 0ms l_recTEST.test_yield. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.asserts. EQ - Expected "0" and got "0" - PASS 0ms l_recTEST.passes. EQ - Expected "0" and got "0" - PASS 0ms l_recTEST.failures. EQ - Expected "0" and got "0" - PASS 0ms l_recTEST.errors. EQ - Expected "0" and got "0" - PASS 0ms l_recTEST.testcases. EQ - Expected "0" and got "0" - PASS 0ms l_recTEST.min_interval_msecs. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.avg_interval_msecs. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.max_interval_msecs. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.tot_interval_msecs. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.code_coverage. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.profiled_lines. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.executed_lines. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.ignored_lines. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.excluded_lines. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.notexec_lines. ISNULL - Expected NULL and got "" - PASS 1ms l_recTEST.unknown_lines. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.avg_executed_usecs. ISNULL - Expected NULL and got "" - PASS 2ms There should be no WT_TESTCASE_STATS records. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from WT_TESTCASE_STATS where test_run_id = -102 - PASS 2ms Delete WT_TEST_RUN_STATS Record. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "delete from WT_TEST_RUN_STATS where test_run_id = -102". - PASS 2ms There should be no WT_TEST_RUN_STATS records. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from WT_TEST_RUN_STATS where test_run_id = -102 - ---- Test Case: FINALIZE Happy Path 2 - PASS 3ms Run Finalize for Happy Path 2. EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 2ms Retieve WT_TESTCASE_STATS record. EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 0ms l_tstat_rec.test_run_id. EQ - Expected "-102" and got "-102" - PASS 1ms l_tstat_rec.testcase. EQ - Expected "TC2a" and got "TC2a" - PASS 0ms l_tstat_rec.asserts. EQ - Expected "3" and got "3" - PASS 0ms l_tstat_rec.passes. EQ - Expected "2" and got "2" - PASS 0ms l_tstat_rec.failures. EQ - Expected "1" and got "1" - PASS 0ms l_tstat_rec.errors. EQ - Expected "0" and got "0" - PASS 0ms l_tstat_rec.test_yield. EQ - Expected ".667" and got ".667" - PASS 0ms l_tstat_rec.avg_interval_msecs. EQ - Expected "100" and got "100" - PASS 1ms Retieve WT_TESTCASE_STATS record. EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 0ms l_tstat_rec.test_run_id. EQ - Expected "-102" and got "-102" - PASS 0ms l_tstat_rec.testcase. EQ - Expected "TC2b" and got "TC2b" - PASS 0ms l_tstat_rec.asserts. EQ - Expected "3" and got "3" - PASS 1ms l_tstat_rec.passes. EQ - Expected "2" and got "2" - PASS 0ms l_tstat_rec.failures. EQ - Expected "1" and got "1" - PASS 0ms l_tstat_rec.errors. EQ - Expected "0" and got "0" - PASS 0ms l_tstat_rec.test_yield. EQ - Expected ".667" and got ".667" - PASS 0ms l_tstat_rec.avg_interval_msecs. EQ - Expected "100" and got "100" - PASS 0ms Retieve WT_TEST_RUN_STATS record. EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 0ms l_recTEST.test_run_id. EQ - Expected "-102" and got "-102" - PASS 0ms l_recTEST.test_yield. EQ - Expected ".667" and got ".667" - PASS 0ms l_recTEST.asserts. EQ - Expected "6" and got "6" - PASS 0ms l_recTEST.passes. EQ - Expected "4" and got "4" - PASS 0ms l_recTEST.failures. EQ - Expected "2" and got "2" - PASS 0ms l_recTEST.errors. EQ - Expected "0" and got "0" - PASS 1ms l_recTEST.testcases. EQ - Expected "2" and got "2" - PASS 0ms l_recTEST.avg_interval_msecs. EQ - Expected "100" and got "100" - PASS 0ms l_recTEST.code_coverage. EQ - Expected ".8" and got ".8" - PASS 0ms l_recTEST.profiled_lines. EQ - Expected "20" and got "20" - PASS 0ms l_recTEST.executed_lines. EQ - Expected "8" and got "8" - PASS 0ms l_recTEST.ignored_lines. EQ - Expected "6" and got "6" - PASS 0ms l_recTEST.excluded_lines. EQ - Expected "4" and got "4" - PASS 0ms l_recTEST.notexec_lines. EQ - Expected "2" and got "2" - PASS 0ms l_recTEST.unknown_lines. EQ - Expected "0" and got "0" - PASS 0ms l_recTEST.avg_executed_usecs. EQ - Expected "200" and got "200" - PASS 2ms Delete WT_TESTCASE_STATS Record. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "delete from WT_TESTCASE_STATS where test_run_id = -102". - PASS 1ms There should be no WT_TESTCASE_STATS records. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from WT_TESTCASE_STATS where test_run_id = -102 - PASS 0ms Delete WT_TEST_RUN_STATS Record. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "delete from WT_TEST_RUN_STATS where test_run_id = -102". - PASS 1ms There should be no WT_TEST_RUN_STATS records. EQQUERYVALUE - Expected "0" and got "0" for Query: select count(*) from WT_TEST_RUN_STATS where test_run_id = -102 - ---- Test Case: FINALIZE Sad Path 1 - PASS 0ms Run Finalize for Sad Path 1. EQ - Expected "ORA-0000: normal, successful completion" and got "ORA-0000: normal, successful completion" - PASS 0ms l_recTEST.test_run_id. ISNULL - Expected NULL and got "" - PASS 0ms l_recTEST.asserts. ISNULL - Expected NULL and got "" - ---- Test Case: FINALIZE Happy Path Teardown - PASS 1ms Delete WT_TEST_RUNS Record. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "delete from WT_TEST_RUNS where id = -102". - ---- Test Case: Delete Records Happy Path Setup - PASS 2ms Insert WT_TEST_RUNS Record. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "insert into WT_TEST_RUNS (id, start_dtm, runner_owner, runner_name) values (-100, sysdate, USER, 'TESTRUNNER2')". - PASS 3ms Insert WT_TEST_RUN_STATS Record. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "insert into WT_TEST_RUN_STATS (test_run_id) values (-100)". - PASS 4ms Insert WT_TESTCASE_STATS Record. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "insert into WT_TESTCASE_STATS (test_run_id, testcase) values (-100, 'TESTCASE2')". - ---- Test Case: Delete Records Happy Path and Teardown - PASS 3ms Delete Records with NULL ID. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "begin wt_test_run_stat.delete_records(-100); end;". - PASS 3ms Delete WT_TEST_RUNS Record. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "delete from WT_TEST_RUNS where id = -100". - ---- Test Case: Delete Records Test Sad Paths - PASS 1ms Delete Records with NULL ID. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "begin wt_test_run_stat.delete_records(null); end;". - PASS 2ms Delete Records with Invalid ID. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "begin wt_test_run_stat.delete_records(-0.01); end;". - - - WTP.WT_TEST_RUN_STAT PACKAGE BODY Code Coverage Details (Test Run ID 9) -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1 EXCL 0 0 0 0 package body wt_test_run_stat - 22 EXEC 4 25 2 15 procedure initialize - 26 EXEC 4 4 0 3 g_rec := l_recNULL; - 27 EXEC 4 12 0 9 g_tc_aa.delete; - 28 EXEC 4 5 0 4 end initialize; - 32 IGNR 2 25 25 25 procedure t_initialize - 40 IGNR 2 10 2 8 wt_assert.g_testcase := 'Initialize Happy Path 1 Setup'; - 41 IGNR 1 9 9 9 l_tc_aaTEST('TESTCASE1').test_run_id := -2; - 42 IGNR 1 0 0 0 l_recTEST.test_run_id := -1; - 43 IGNR 1 9 9 9 wt_assert.eq ( - 47 IGNR 1 8 8 8 wt_assert.eq ( - 52 IGNR 1 9 9 9 l_tc_aaSAVE := g_tc_aa; - 53 IGNR 1 1 1 1 l_recSAVE := g_rec; - 54 IGNR 1 5 5 5 g_tc_aa := l_tc_aaTEST; - 55 IGNR 1 1 1 1 g_rec := l_recTEST; - 56 IGNR 1 0 0 0 initialize; - 57 IGNR 1 0 0 0 l_tc_aaTEST := g_tc_aa; - 58 IGNR 1 0 0 0 l_recTEST := g_rec; - 59 IGNR 1 1 1 1 g_tc_aa := l_tc_aaSAVE; - 60 IGNR 1 0 0 0 g_rec := l_recSAVE; - 62 IGNR 1 0 0 0 wt_assert.g_testcase := 'Initialize Happy Path 1'; - 63 IGNR 1 3 3 3 wt_assert.eq ( - 67 IGNR 1 1 1 1 wt_assert.isnull ( - 70 IGNR 1 3 3 3 end t_initialize; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 75 UNKN 0 135 1 7 procedure add_result - 82 EXEC 112 72 1 53 case in_results_rec.status - 83 EXEC 112 45 0 2 when 'PASS' then - 84 EXEC 109 69 1 3 g_rec.passes := nvl(g_rec.passes,0) + 1; - 85 EXEC 3 1 0 1 when 'FAIL' then - 86 EXEC 1 0 0 0 g_rec.failures := nvl(g_rec.failures,0) + 1; - 87 EXEC 2 1 0 1 when 'ERR' then - 88 EXEC 1 0 0 0 g_rec.errors := nvl(g_rec.errors,0) + 1; - 90 EXEC 1 105 105 105 raise_application_error(-20010, 'Unknown Result status "' || - 93 EXEC 111 35 0 1 g_rec.test_run_id := in_results_rec.test_run_id; - 94 EXEC 111 30 0 1 g_rec.asserts := nvl(g_rec.asserts,0) + 1; - 95 EXEC 111 68 1 2 g_rec.min_interval_msecs := least(nvl(g_rec.min_interval_msecs,999999999) - 97 EXEC 111 30 0 1 g_rec.max_interval_msecs := greatest(nvl(g_rec.max_interval_msecs,0) - 99 EXEC 111 38 0 1 g_rec.tot_interval_msecs := nvl(g_rec.tot_interval_msecs,0) + - 101 EXEC 111 71 1 44 if in_results_rec.testcase is not null - 103 EXEC 111 19 0 1 tc := in_results_rec.testcase; - 104 EXEC 111 311 1 66 g_tc_aa(tc).testcase := tc; - 105 EXEC 111 19 0 2 g_tc_aa(tc).test_run_id := in_results_rec.test_run_id; - 106 EXEC 111 49 0 1 g_tc_aa(tc).asserts := nvl(g_tc_aa(tc).asserts,0) + 1; - 107 EXEC 111 0 0 0 case in_results_rec.status - 108 EXEC 111 15 0 1 when 'PASS' then - 109 EXEC 109 214 0 174 g_tc_aa(tc).passes := nvl(g_tc_aa(tc).passes,0) + 1; - 110 EXEC 2 0 0 0 when 'FAIL' then - 111 EXEC 1 0 0 0 g_tc_aa(tc).failures := nvl(g_tc_aa(tc).failures,0) + 1; - 112 EXEC 1 0 0 0 when 'ERR' then -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 113 EXEC 1 0 0 0 g_tc_aa(tc).errors := nvl(g_tc_aa(tc).errors,0) + 1; - 116 EXEC 111 46 1 4 g_tc_aa(tc).min_interval_msecs := least(nvl(g_tc_aa(tc).min_interval_msecs,999999999) - 118 EXEC 111 32 0 1 g_tc_aa(tc).max_interval_msecs := greatest(nvl(g_tc_aa(tc).max_interval_msecs,0) - 120 EXEC 111 29 0 1 g_tc_aa(tc).tot_interval_msecs := nvl(g_tc_aa(tc).tot_interval_msecs,0) + - 123 EXEC 111 32 1 1 end add_result; - 127 IGNR 1 14 14 14 procedure t_add_result - 145 IGNR 1 2 2 2 l_tc_aaSAVE := g_tc_aa; - 146 IGNR 1 0 0 0 l_recSAVE := g_rec; - 147 IGNR 1 1 1 1 g_tc_aa := l_tc_aaTEST; - 148 IGNR 1 1 1 1 g_rec := l_recTEST; - 149 IGNR 1 0 0 0 l_resultTEST.test_run_id := -10; - 150 IGNR 1 0 0 0 l_resultTEST.interval_msecs := 10; - 151 IGNR 1 1 1 1 l_resultTEST.status := 'PASS'; - 152 IGNR 1 0 0 0 l_resultTEST.testcase := 'TESTCASE1'; - 153 IGNR 1 0 0 0 add_result(l_resultTEST); - 155 IGNR 1 0 0 0 l_resultTEST.interval_msecs := 20; - 156 IGNR 1 0 0 0 l_resultTEST.status := 'FAIL'; - 157 IGNR 1 0 0 0 l_resultTEST.testcase := 'TESTCASE1'; - 158 IGNR 1 0 0 0 add_result(l_resultTEST); - 159 IGNR 1 1 1 1 l_resultTEST.interval_msecs := 30; - 160 IGNR 1 0 0 0 l_resultTEST.status := 'ERR'; - 161 IGNR 1 0 0 0 l_resultTEST.testcase := 'TESTCASE1'; - 162 IGNR 1 0 0 0 add_result(l_resultTEST); - 164 IGNR 1 0 0 0 l_resultTEST.interval_msecs := 40; - 165 IGNR 1 1 1 1 l_resultTEST.status := 'ABC'; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 166 IGNR 1 0 0 0 l_resultTEST.testcase := 'TESTCASE1'; - 168 IGNR 1 0 0 0 add_result(l_resultTEST); - 169 IGNR 0 0 0 0 l_sqlerrm := SQLERRM; - 170 IGNR 1 0 0 0 exception when others then - 171 IGNR 1 123 123 123 l_sqlerrm := SQLERRM; - 172 IGNR 0 3 3 3 end; - 174 IGNR 1 6 6 6 l_tc_aaTEST := g_tc_aa; - 175 IGNR 1 1 1 1 l_recTEST := g_rec; - 176 IGNR 1 3 3 3 g_tc_aa := l_tc_aaSAVE; - 177 IGNR 1 1 1 1 g_rec := l_recSAVE; - 178 IGNR 1 0 0 0 wt_assert.g_testcase := 'Add Result Testing'; - 179 IGNR 1 2 2 2 wt_assert.eq ( - 184 IGNR 1 5 5 5 wt_assert.eq ( - 188 IGNR 1 2 2 2 wt_assert.eq ( - 193 IGNR 1 2 2 2 wt_assert.eq ( - 197 IGNR 1 2 2 2 wt_assert.eq ( - 202 IGNR 1 2 2 2 wt_assert.eq ( - 206 IGNR 1 3 3 3 wt_assert.eq ( - 211 IGNR 1 2 2 2 wt_assert.eq ( - 215 IGNR 1 2 2 2 wt_assert.eq ( - 220 IGNR 1 4 4 4 wt_assert.eq ( - 224 IGNR 1 3 3 3 wt_assert.eq ( - 229 IGNR 1 2 2 2 wt_assert.eq ( - 233 IGNR 1 2 2 2 wt_assert.eq ( - 238 IGNR 1 1 1 1 wt_assert.eq ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 242 IGNR 1 2 2 2 wt_assert.eq ( - 247 IGNR 1 2 2 2 wt_assert.eq ( - 251 IGNR 1 2 2 2 wt_assert.eq ( - 255 IGNR 1 4 4 4 end t_add_result; - 260 UNKN 0 5 0 1 procedure add_profile - 266 EXEC 16 2 0 1 case in_dbout_profiles_rec.status - 267 EXEC 16 6 0 1 when 'EXEC' then - 268 EXEC 5 0 0 0 g_rec.executed_lines := nvl(g_rec.executed_lines,0) + 1; - 270 EXEC 5 3 1 1 g_rec.min_executed_usecs := least(nvl(g_rec.min_executed_usecs,999999999) - 272 EXEC 5 1 0 1 g_rec.max_executed_usecs := greatest(nvl(g_rec.max_executed_usecs,0) - 274 EXEC 5 3 0 1 g_rec.tot_executed_usecs := nvl(g_rec.tot_executed_usecs,0) + - 277 EXEC 11 0 0 0 when 'IGNR' then - 278 EXEC 4 4 1 1 g_rec.ignored_lines := nvl(g_rec.ignored_lines,0) + 1; - 279 EXEC 7 2 1 1 when 'EXCL' then - 280 EXEC 2 1 1 1 g_rec.excluded_lines := nvl(g_rec.excluded_lines,0) + 1; - 281 EXEC 5 0 0 0 when 'NOTX' then - 282 EXEC 3 1 0 1 g_rec.notexec_lines := nvl(g_rec.notexec_lines,0) + 1; - 283 EXEC 2 0 0 0 when 'UNKN' then - 284 EXEC 1 1 1 1 g_rec.unknown_lines := nvl(g_rec.unknown_lines,0) + 1; - 286 EXEC 1 1527 1527 1527 raise_application_error(-20011, 'Unknown Profile status "' || - 289 EXEC 15 3 0 1 g_rec.test_run_id := in_dbout_profiles_rec.test_run_id; - 290 EXEC 15 1 0 1 g_rec.profiled_lines := nvl(g_rec.profiled_lines,0) + 1; - 291 EXEC 15 1 0 1 end add_profile; - 295 IGNR 1 60 60 60 procedure t_add_profile - 311 IGNR 1 1 1 1 l_recSAVE := g_rec; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 312 IGNR 1 1 1 1 g_rec := l_recTEST; - 313 IGNR 1 1 1 1 l_profileTEST.test_run_id := -20; - 314 IGNR 1 1 1 1 l_profileTEST.min_usecs := 10; - 315 IGNR 1 0 0 0 l_profileTEST.max_usecs := 20; - 316 IGNR 1 1 1 1 l_profileTEST.total_usecs := 30; - 317 IGNR 1 0 0 0 l_profileTEST.total_occur := 1; - 318 IGNR 1 1 1 1 l_profileTEST.status := 'EXEC'; - 319 IGNR 1 0 0 0 add_profile(l_profileTEST); - 320 IGNR 1 0 0 0 l_profileTEST.status := 'EXEC'; - 321 IGNR 1 0 0 0 add_profile(l_profileTEST); - 323 IGNR 1 0 0 0 l_profileTEST.status := 'EXEC'; - 324 IGNR 1 0 0 0 add_profile(l_profileTEST); - 325 IGNR 1 0 0 0 l_profileTEST.status := 'EXEC'; - 326 IGNR 1 0 0 0 add_profile(l_profileTEST); - 327 IGNR 1 0 0 0 l_profileTEST.status := 'EXEC'; - 328 IGNR 1 0 0 0 add_profile(l_profileTEST); - 329 IGNR 1 0 0 0 l_profileTEST.status := 'IGNR'; - 330 IGNR 1 0 0 0 add_profile(l_profileTEST); - 331 IGNR 1 0 0 0 l_profileTEST.status := 'IGNR'; - 332 IGNR 1 1 1 1 add_profile(l_profileTEST); - 334 IGNR 1 0 0 0 l_profileTEST.status := 'IGNR'; - 335 IGNR 1 0 0 0 add_profile(l_profileTEST); - 336 IGNR 1 0 0 0 l_profileTEST.status := 'IGNR'; - 337 IGNR 1 0 0 0 add_profile(l_profileTEST); - 338 IGNR 1 0 0 0 l_profileTEST.status := 'NOTX'; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 339 IGNR 1 0 0 0 add_profile(l_profileTEST); - 340 IGNR 1 0 0 0 l_profileTEST.status := 'NOTX'; - 341 IGNR 1 0 0 0 add_profile(l_profileTEST); - 342 IGNR 1 0 0 0 l_profileTEST.status := 'NOTX'; - 343 IGNR 1 1 1 1 add_profile(l_profileTEST); - 345 IGNR 1 0 0 0 l_profileTEST.status := 'EXCL'; - 346 IGNR 1 0 0 0 add_profile(l_profileTEST); - 347 IGNR 1 0 0 0 l_profileTEST.status := 'EXCL'; - 348 IGNR 1 0 0 0 add_profile(l_profileTEST); - 349 IGNR 1 0 0 0 l_profileTEST.status := 'UNKN'; - 350 IGNR 1 0 0 0 add_profile(l_profileTEST); - 352 IGNR 1 0 0 0 l_profileTEST.status := 'ABC'; - 354 IGNR 1 0 0 0 add_profile(l_profileTEST); - 355 IGNR 0 0 0 0 l_sqlerrm := SQLERRM; - 356 IGNR 1 0 0 0 exception when others then - 357 IGNR 1 131 131 131 l_sqlerrm := SQLERRM; - 358 IGNR 0 3 3 3 end; - 359 IGNR 1 5 5 5 l_recTEST := g_rec; - 360 IGNR 1 2 2 2 g_rec := l_recSAVE; - 362 IGNR 1 1 1 1 wt_assert.g_testcase := 'Add Profile Testing'; - 363 IGNR 1 17 17 17 wt_assert.eq ( - 367 IGNR 1 5 5 5 wt_assert.eq ( - 372 IGNR 1 295 295 295 wt_assert.eq ( - 376 IGNR 1 3 3 3 wt_assert.eq ( - 381 IGNR 1 2 2 2 wt_assert.eq ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 385 IGNR 1 2 2 2 wt_assert.eq ( - 390 IGNR 1 2 2 2 wt_assert.eq ( - 394 IGNR 1 4 4 4 wt_assert.eq ( - 399 IGNR 1 6 6 6 wt_assert.eq ( - 403 IGNR 1 4 4 4 wt_assert.eq ( - 408 IGNR 1 0 0 0 wt_assert.eq ( - 412 IGNR 1 3 3 3 end t_add_profile; - 417 UNKN 0 10 3 4 procedure finalize - 422 EXEC 3 48 15 17 begin - 423 EXEC 3 3 1 1 if g_rec.test_run_id is null - 425 EXEC 1 0 0 0 initialize; - 426 EXEC 1 6 6 6 return; - 428 EXEC 2 2 1 1 g_rec.testcases := g_tc_aa.COUNT; - 429 EXEC 2 0 0 0 g_rec.asserts := nvl(g_rec.asserts ,0); - 430 EXEC 2 1 0 1 g_rec.passes := nvl(g_rec.passes ,0); - 431 EXEC 2 0 0 0 g_rec.failures := nvl(g_rec.failures,0); - 432 EXEC 2 0 0 0 g_rec.errors := nvl(g_rec.errors ,0); - 433 EXEC 2 1 0 1 if g_rec.asserts != 0 - 435 EXEC 1 3 3 3 g_rec.test_yield := round(g_rec.passes/g_rec.asserts, 3); - 436 EXEC 1 1 1 1 g_rec.avg_interval_msecs := round(g_rec.tot_interval_msecs/g_rec.asserts, 3); - 438 EXEC 2 1 0 1 if g_rec.profiled_lines is not null - 440 EXEC 1 1 1 1 g_rec.executed_lines := nvl(g_rec.executed_lines ,0); - 441 EXEC 1 0 0 0 g_rec.ignored_lines := nvl(g_rec.ignored_lines,0); - 442 EXEC 1 0 0 0 g_rec.excluded_lines := nvl(g_rec.excluded_lines ,0); - 443 EXEC 1 0 0 0 g_rec.notexec_lines := nvl(g_rec.notexec_lines ,0); -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 444 EXEC 1 1 1 1 g_rec.unknown_lines := nvl(g_rec.unknown_lines ,0); - 445 EXEC 1 0 0 0 l_executable_lines := g_rec.executed_lines + g_rec.notexec_lines; - 446 EXEC 1 0 0 0 if l_executable_lines != 0 - 448 EXEC 1 1 1 1 g_rec.code_coverage := round(g_rec.executed_lines/l_executable_lines, 3); - 449 EXEC 1 1 1 1 g_rec.avg_executed_usecs := round(g_rec.tot_executed_usecs/l_executable_lines, 3); - 450 EXEC 1 0 0 0 end if; - 452 EXEC 2 421 171 250 insert into wt_test_run_stats values g_rec; - 453 EXEC 2 2 1 1 if g_rec.testcases > 0 - 455 EXEC 1 4 4 4 tc := g_tc_aa.FIRST; - 456 EXEC 2 0 0 0 loop - 457 EXEC 2 3 1 2 g_tc_aa(tc).asserts := nvl(g_tc_aa(tc).asserts ,0); - 458 EXEC 2 0 0 0 g_tc_aa(tc).passes := nvl(g_tc_aa(tc).passes ,0); - 459 EXEC 2 0 0 0 g_tc_aa(tc).failures := nvl(g_tc_aa(tc).failures,0); - 460 EXEC 2 0 0 0 g_tc_aa(tc).errors := nvl(g_tc_aa(tc).errors ,0); - 461 EXEC 2 0 0 0 if g_rec.asserts != 0 - 463 EXEC 2 4 2 2 g_tc_aa(tc).test_yield := round(g_tc_aa(tc).passes / - 465 EXEC 2 2 1 1 g_tc_aa(tc).avg_interval_msecs := round(g_tc_aa(tc).tot_interval_msecs / - 468 EXEC 2 439 79 360 insert into wt_testcase_stats values g_tc_aa(tc); - 469 EXEC 2 6 2 4 exit when tc = g_tc_aa.LAST; - 470 EXEC 1 2 2 2 tc := g_tc_aa.NEXT(tc); - 473 EXEC 2 2303 337 1966 COMMIT; - 474 EXEC 2 2 1 1 initialize; - 475 EXEC 2 34 11 23 end finalize; - 479 IGNR 1 23 23 23 procedure t_finalize - 487 IGNR 1 0 0 0 l_test_run_id number := -102; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 488 IGNR 1 1 1 1 l_tc varchar2(50) := 'TC2'; - 492 IGNR 0 4 1 2 procedure run_finalize (in_msg_txt in varchar2) is begin - 493 IGNR 3 47 14 18 l_tc_aaSAVE := g_tc_aa; - 494 IGNR 3 4 1 2 l_recSAVE := g_rec; - 495 IGNR 3 14 4 5 g_tc_aa := l_tc_aaTEST; - 496 IGNR 3 3 1 1 g_rec := l_recTEST; - 498 IGNR 3 2 1 1 finalize; - 499 IGNR 3 10 2 5 l_sqlerrm := SQLERRM; - 500 IGNR 0 0 0 0 exception when others then - 501 IGNR 0 0 0 0 l_sqlerrm := SQLERRM; - 502 IGNR 0 0 0 0 end; - 504 IGNR 3 7 1 5 l_tc_aaTEST := g_tc_aa; - 505 IGNR 3 3 1 2 l_recTEST := g_rec; - 506 IGNR 3 22 5 12 g_tc_aa := l_tc_aaSAVE; - 507 IGNR 3 1 0 1 g_rec := l_recSAVE; - 508 IGNR 3 8 1 5 wt_assert.eq ( - 512 IGNR 3 0 0 0 end run_finalize; - 515 IGNR 1 2 2 2 wt_assert.g_testcase := 'FINALIZE Happy Path Setup'; - 516 IGNR 1 3 3 3 l_sql_txt := 'insert into WT_TEST_RUNS' || - 519 IGNR 1 1 1 1 wt_assert.raises ( - 523 IGNR 1 167 167 167 commit; - 525 IGNR 1 1 1 1 wt_assert.g_testcase := 'FINALIZE Happy Path 1'; - 526 IGNR 1 3 3 3 l_tc_aaTEST.delete; - 527 IGNR 1 2 2 2 l_recTEST := l_recNULL; - 528 IGNR 1 1 1 1 l_recTEST.test_run_id := l_test_run_id; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 529 IGNR 1 1 1 1 run_finalize('Run Finalize for Happy Path 1'); -- AUTONOMOUS COMMIT - 532 IGNR 1 2866 2866 2866 select * into l_recTEST - 535 IGNR 1 6 6 6 l_sqlerrm := SQLERRM; - 536 IGNR 0 0 0 0 exception when others then - 537 IGNR 0 0 0 0 l_sqlerrm := SQLERRM; - 538 IGNR 0 0 0 0 end; - 540 IGNR 1 3 3 3 wt_assert.eq ( - 544 IGNR 1 5 5 5 wt_assert.eq ( - 549 IGNR 1 1 1 1 wt_assert.isnull ( - 552 IGNR 1 3 3 3 wt_assert.eq ( - 557 IGNR 1 2 2 2 wt_assert.eq ( - 561 IGNR 1 1 1 1 wt_assert.eq ( - 566 IGNR 1 2 2 2 wt_assert.eq ( - 570 IGNR 1 1 1 1 wt_assert.eq ( - 575 IGNR 1 0 0 0 wt_assert.isnull ( - 578 IGNR 1 1 1 1 wt_assert.isnull ( - 581 IGNR 1 1 1 1 wt_assert.isnull ( - 585 IGNR 1 1 1 1 wt_assert.isnull ( - 588 IGNR 1 1 1 1 wt_assert.isnull ( - 591 IGNR 1 0 0 0 wt_assert.isnull ( - 595 IGNR 1 1 1 1 wt_assert.isnull ( - 598 IGNR 1 1 1 1 wt_assert.isnull ( - 601 IGNR 1 0 0 0 wt_assert.isnull ( - 605 IGNR 1 1 1 1 wt_assert.isnull ( - 608 IGNR 1 0 0 0 wt_assert.isnull ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 611 IGNR 1 1 1 1 wt_assert.isnull ( - 615 IGNR 1 4 4 4 wt_assert.eqqueryvalue ( - 621 IGNR 1 6 6 6 wt_assert.raises ( - 626 IGNR 1 144 144 144 commit; - 627 IGNR 1 9 9 9 wt_assert.eqqueryvalue ( - 633 IGNR 1 0 0 0 wt_assert.g_testcase := 'FINALIZE Happy Path 2'; - 634 IGNR 1 2 2 2 l_tc_aaTEST.delete; - 635 IGNR 1 6 6 6 l_tc_aaTEST(l_tc||'a').test_run_id := l_test_run_id; - 636 IGNR 1 1 1 1 l_tc_aaTEST(l_tc||'a').testcase := l_tc||'a'; - 637 IGNR 1 1 1 1 l_tc_aaTEST(l_tc||'a').asserts := 3; - 638 IGNR 1 1 1 1 l_tc_aaTEST(l_tc||'a').passes := 2; - 639 IGNR 1 1 1 1 l_tc_aaTEST(l_tc||'a').failures := 1; - 641 IGNR 1 1 1 1 l_tc_aaTEST(l_tc||'a').tot_interval_msecs := 300; - 643 IGNR 1 2 2 2 l_tc_aaTEST(l_tc||'b').test_run_id := l_test_run_id; - 644 IGNR 1 1 1 1 l_tc_aaTEST(l_tc||'b').testcase := l_tc||'b'; - 645 IGNR 1 1 1 1 l_tc_aaTEST(l_tc||'b').asserts := 3; - 646 IGNR 1 1 1 1 l_tc_aaTEST(l_tc||'b').passes := 2; - 647 IGNR 1 1 1 1 l_tc_aaTEST(l_tc||'b').failures := 1; - 649 IGNR 1 1 1 1 l_tc_aaTEST(l_tc||'b').tot_interval_msecs := 300; - 651 IGNR 1 1 1 1 l_recTEST := l_recNULL; - 652 IGNR 1 0 0 0 l_recTEST.test_run_id := l_test_run_id; - 653 IGNR 1 1 1 1 l_recTEST.asserts := 6; - 654 IGNR 1 0 0 0 l_recTEST.passes := 4; - 655 IGNR 1 1 1 1 l_recTEST.failures := 2; - 657 IGNR 1 0 0 0 l_recTEST.tot_interval_msecs := 600; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 659 IGNR 1 0 0 0 l_recTEST.profiled_lines := 20; - 660 IGNR 1 0 0 0 l_recTEST.executed_lines := 8; - 661 IGNR 1 0 0 0 l_recTEST.ignored_lines := 6; - 662 IGNR 1 0 0 0 l_recTEST.excluded_lines := 4; - 663 IGNR 1 0 0 0 l_recTEST.notexec_lines := 2; - 665 IGNR 1 0 0 0 l_recTEST.tot_executed_usecs := 2000; - 666 IGNR 1 0 0 0 run_finalize('Run Finalize for Happy Path 2'); -- AUTONOMOUS COMMIT - 668 IGNR 0 0 0 0 begin - 669 IGNR 1 2288 2288 2288 select * into l_tstat_rec - 673 IGNR 1 4 4 4 l_sqlerrm := SQLERRM; - 674 IGNR 0 0 0 0 exception when others then - 675 IGNR 0 0 0 0 l_sqlerrm := SQLERRM; - 676 IGNR 0 0 0 0 end; - 678 IGNR 1 3 3 3 wt_assert.eq ( - 682 IGNR 1 5 5 5 wt_assert.eq ( - 687 IGNR 1 2 2 2 wt_assert.eq ( - 691 IGNR 1 4 4 4 wt_assert.eq ( - 696 IGNR 1 2 2 2 wt_assert.eq ( - 700 IGNR 1 2 2 2 wt_assert.eq ( - 705 IGNR 1 2 2 2 wt_assert.eq ( - 709 IGNR 1 3 3 3 wt_assert.eq ( - 713 IGNR 1 3 3 3 wt_assert.eq ( - 719 IGNR 1 1319 1319 1319 select * into l_tstat_rec - 723 IGNR 1 2 2 2 l_sqlerrm := SQLERRM; - 724 IGNR 0 0 0 0 exception when others then -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 725 IGNR 0 0 0 0 l_sqlerrm := SQLERRM; - 726 IGNR 0 0 0 0 end; - 728 IGNR 1 2 2 2 wt_assert.eq ( - 732 IGNR 1 3 3 3 wt_assert.eq ( - 737 IGNR 1 1 1 1 wt_assert.eq ( - 741 IGNR 1 3 3 3 wt_assert.eq ( - 746 IGNR 1 3 3 3 wt_assert.eq ( - 750 IGNR 1 1 1 1 wt_assert.eq ( - 755 IGNR 1 2 2 2 wt_assert.eq ( - 759 IGNR 1 1 1 1 wt_assert.eq ( - 763 IGNR 1 2 2 2 wt_assert.eq ( - 769 IGNR 1 207 207 207 select * into l_recTEST - 772 IGNR 1 2 2 2 l_sqlerrm := SQLERRM; - 773 IGNR 0 0 0 0 exception when others then - 774 IGNR 0 0 0 0 l_sqlerrm := SQLERRM; - 775 IGNR 0 0 0 0 end; - 777 IGNR 1 1 1 1 wt_assert.eq ( - 781 IGNR 1 2 2 2 wt_assert.eq ( - 786 IGNR 1 3 3 3 wt_assert.eq ( - 790 IGNR 1 2 2 2 wt_assert.eq ( - 795 IGNR 1 3 3 3 wt_assert.eq ( - 799 IGNR 1 1 1 1 wt_assert.eq ( - 804 IGNR 1 1 1 1 wt_assert.eq ( - 808 IGNR 1 1 1 1 wt_assert.eq ( - 813 IGNR 1 2 2 2 wt_assert.eq ( -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 817 IGNR 1 3 3 3 wt_assert.eq ( - 822 IGNR 1 2 2 2 wt_assert.eq ( - 826 IGNR 1 2 2 2 wt_assert.eq ( - 831 IGNR 1 2 2 2 wt_assert.eq ( - 835 IGNR 1 1 1 1 wt_assert.eq ( - 840 IGNR 1 2 2 2 wt_assert.eq ( - 844 IGNR 1 3 3 3 wt_assert.eq ( - 848 IGNR 1 3 3 3 wt_assert.eq ( - 853 IGNR 1 3 3 3 wt_assert.raises ( - 858 IGNR 1 147 147 147 commit; - 859 IGNR 1 10 10 10 wt_assert.eqqueryvalue ( - 865 IGNR 1 3 3 3 wt_assert.raises ( - 870 IGNR 1 86 86 86 commit; - 871 IGNR 1 5 5 5 wt_assert.eqqueryvalue ( - 877 IGNR 1 1 1 1 wt_assert.g_testcase := 'FINALIZE Sad Path 1'; - 878 IGNR 1 2 2 2 l_tc_aaTEST.delete; - 879 IGNR 1 1 1 1 l_recTEST := l_recNULL; - 880 IGNR 1 0 0 0 l_recTEST.asserts := 2; - 881 IGNR 1 1 1 1 run_finalize('Run Finalize for Sad Path 1'); -- AUTONOMOUS COMMIT - 882 IGNR 1 1 1 1 wt_assert.isnull ( - 885 IGNR 1 0 0 0 wt_assert.isnull ( - 889 IGNR 1 0 0 0 wt_assert.g_testcase := 'FINALIZE Happy Path Teardown'; - 890 IGNR 1 3 3 3 wt_assert.raises ( - 895 IGNR 1 128 128 128 commit; - 896 IGNR 1 7 7 7 end t_finalize; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 901 UNKN 0 8 2 4 procedure delete_records - 905 EXEC 3 672 81 489 delete from wt_testcase_stats - 907 EXEC 3 263 40 167 delete from wt_test_run_stats - 909 EXEC 3 6 1 3 end delete_records; - 913 IGNR 0 3 3 3 procedure t_delete_records - 915 IGNR 1 0 0 0 l_test_run_id number := -100; - 919 IGNR 1 1 1 1 wt_assert.g_testcase := 'Delete Records Happy Path Setup'; - 920 IGNR 1 5 5 5 l_sql_txt := 'insert into WT_TEST_RUNS' || - 923 IGNR 1 2 2 2 wt_assert.raises ( - 928 IGNR 1 4 4 4 l_sql_txt := 'insert into WT_TEST_RUN_STATS (test_run_id) values (' || - 930 IGNR 1 0 0 0 wt_assert.raises ( - 934 IGNR 1 5 5 5 l_sql_txt := 'insert into WT_TESTCASE_STATS (test_run_id, testcase)' || - 936 IGNR 1 1 1 1 wt_assert.raises ( - 941 IGNR 1 0 0 0 wt_assert.g_testcase := 'Delete Records Happy Path and Teardown'; - 942 IGNR 1 9 9 9 wt_assert.raises ( - 947 IGNR 1 8 8 8 wt_assert.raises ( - 952 IGNR 1 1 1 1 wt_assert.g_testcase := 'Delete Records Test Sad Paths'; - 953 IGNR 1 1 1 1 wt_assert.raises ( - 957 IGNR 1 2 2 2 wt_assert.raises ( - 961 IGNR 1 0 0 0 end t_delete_records; - 968 IGNR 0 1 1 1 procedure WTPLSQL_RUN --% WTPLSQL SET DBOUT "WT_TEST_RUN_STAT:PACKAGE BODY" %-- - 971 IGNR 1 1 1 1 t_initialize; - 972 IGNR 1 1 1 1 t_add_result; - 973 IGNR 1 0 0 0 t_add_profile; - 974 IGNR 1 1 1 1 t_finalize; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 975 IGNR 1 0 0 0 t_delete_records; - 976 IGNR 1 1 1 1 end WTPLSQL_RUN; - 981 EXCL 0 0 0 0 end wt_test_run_stat; - - - -PL/SQL procedure successfully completed. - diff --git a/src/core/uninstall.sql b/src/core/uninstall.sql deleted file mode 100644 index 95f0697..0000000 --- a/src/core/uninstall.sql +++ /dev/null @@ -1,46 +0,0 @@ - --- --- Core Un-Install --- --- Run as System --- - -spool uninstall -set showmode off -set serveroutput on size unlimited format truncated - -@common_setup.sql - -drop user &schema_owner. cascade; - --- Public Synonyms -declare - sql_txt varchar2(4000); -begin - for buff in (select synonym_name from dba_synonyms - where owner = 'PUBLIC' - and regexp_like(table_owner, '&schema_owner.', 'i') ) - loop - sql_txt := 'drop public synonym ' || buff.synonym_name; - dbms_output.put_line(sql_txt); - execute immediate sql_txt; - end loop; -end; -/ - -declare - parm_value v$parameter.value%TYPE; -begin - select value into parm_value - from v$parameter - where name in 'plsql_ccflags'; - if instr(parm_value, 'WTPLSQL_ENABLE:') <> 0 - then - DBMS_OUTPUT.PUT_LINE('Remove "WTPLSQL_ENABLE" from PLSQL_CCFLAGS'); - DBMS_OUTPUT.PUT_LINE(' *) "' || parm_value || '"'); - end if; -end; -/ - -set showmode on -spool off diff --git a/src/core/uninstallO.LST b/src/core/uninstallO.LST deleted file mode 100644 index 9e45782..0000000 --- a/src/core/uninstallO.LST +++ /dev/null @@ -1,55 +0,0 @@ -old: showmode BOTH -old:drop user &schema_owner. cascade -new:drop user wtp cascade - -User WTP dropped. - -old:declare - sql_txt varchar2(4000); -begin - for buff in (select synonym_name from dba_synonyms - where owner = 'PUBLIC' - and regexp_like(table_owner, '&schema_owner.', 'i') ) - loop - sql_txt := 'drop public synonym ' || buff.synonym_name; - dbms_output.put_line(sql_txt); - execute immediate sql_txt; - end loop; -end; - -new:declare - sql_txt varchar2(4000); -begin - for buff in (select synonym_name from dba_synonyms - where owner = 'PUBLIC' - and regexp_like(table_owner, 'wtp', 'i') ) - loop - sql_txt := 'drop public synonym ' || buff.synonym_name; - dbms_output.put_line(sql_txt); - execute immediate sql_txt; - end loop; -end; -drop public synonym WT_WTPLSQL -drop public synonym WT_VERSION -drop public synonym WT_TEXT_REPORT -drop public synonym WT_TEST_RUN_STATS -drop public synonym WT_TEST_RUNS_SEQ -drop public synonym WT_TEST_RUNS -drop public synonym WT_TESTCASE_STATS -drop public synonym WT_SELF_TEST -drop public synonym WT_RESULTS -drop public synonym WT_DBOUT_PROFILES -drop public synonym WT_ASSERT -drop public synonym WTPLSQL -drop public synonym UTASSERT - - -PL/SQL procedure successfully completed. - -Remove "WTPLSQL_ENABLE" from PLSQL_CCFLAGS - *) "WTPLSQL_ENABLE:TRUE, WTPLSQL_SELFTEST:TRUE" - - -PL/SQL procedure successfully completed. - -new: showmode BOTH diff --git a/src/core/upgrades/V1.0.0_to_Current/README.txt b/src/core/upgrades/V1.0.0_to_Current/README.txt deleted file mode 100644 index a319016..0000000 --- a/src/core/upgrades/V1.0.0_to_Current/README.txt +++ /dev/null @@ -1,16 +0,0 @@ - - White Box PL/SQL Testing - src/core/upgrades/V1.0.0_to_Current/README.txt - -FILE DESCRIPTION ----------------------- ----------------------- -update_all_stats.sql Populate the new STATS tables -upgrade.sql Main upgrade script -upgradeO.LST Example of successful results from Demo Installation - - -Install Procedure: ------------------- -1) sqlplus SYS/password as SYSDBA @upgrade -2) exit -3) Compare upgrade.LST to upgradeO.LST diff --git a/src/core/wt_dbout_profiles.tab b/src/core/wt_dbout_profiles.tab deleted file mode 100644 index 494857d..0000000 --- a/src/core/wt_dbout_profiles.tab +++ /dev/null @@ -1,32 +0,0 @@ - --- --- DBOUT Profiles Table Installation --- - -create table wt_dbout_profiles - (test_run_id number(38) constraint wt_dbout_profiles_nn1 not null - ,line number(6) constraint wt_dbout_profiles_nn2 not null - ,status varchar2(4) constraint wt_dbout_profiles_nn3 not null - ,total_occur number(9) constraint wt_dbout_profiles_nn4 not null - ,total_usecs number constraint wt_dbout_profiles_nn5 not null - ,min_usecs number constraint wt_dbout_profiles_nn6 not null - ,max_usecs number constraint wt_dbout_profiles_nn7 not null - ,text varchar2(4000) constraint wt_dbout_profiles_nn8 not null - ,constraint wt_dbout_profiles_pk primary key (test_run_id, line) - ,constraint wt_dbout_profiles_fk1 foreign key (test_run_id) - references wt_test_runs (id) - ,constraint wt_dbout_profiles_ck1 check (status in ('EXEC','NOTX','EXCL','IGNR','UNKN')) - ) pctfree 0; - -comment on table wt_dbout_profiles is 'PL/SQL Profiler data for Database Object Under Test (DBOUT).'; -comment on column wt_dbout_profiles.test_run_id is 'Foreign Key for the Test Run, Primary Key part 1.'; -comment on column wt_dbout_profiles.line is 'Source code line number, Primary Key part 2.'; -comment on column wt_dbout_profiles.status is 'Executed/NotExecuted/Excluded/Ignored/Unknown Status from the Profiler'; -comment on column wt_dbout_profiles.total_occur is 'Number of times this line was executed.'; -comment on column wt_dbout_profiles.total_usecs is 'Total time in microseconds spent executing this line.'; -comment on column wt_dbout_profiles.min_usecs is 'Minimum execution time in microseconds for this line.'; -comment on column wt_dbout_profiles.max_usecs is 'Maximum execution time in microseconds for this line.'; -comment on column wt_dbout_profiles.text is 'Source code text for this line number.'; - -grant select on wt_dbout_profiles to public; -grant delete on wt_dbout_profiles to public; diff --git a/src/core/wt_profiler.pks b/src/core/wt_profiler.pks deleted file mode 100644 index 4c6f83e..0000000 --- a/src/core/wt_profiler.pks +++ /dev/null @@ -1,40 +0,0 @@ -create or replace package wt_profiler authid definer --current_user -as - - procedure initialize - (in_test_run_id in number, - in_runner_name in varchar2, - out_dbout_owner out varchar2, - out_dbout_name out varchar2, - out_dbout_type out varchar2, - out_trigger_offset out number, - out_profiler_runid out number, - out_error_message out varchar2); - - procedure finalize; - - function trigger_offset - (dbout_owner_in in varchar2 - ,dbout_name_in in varchar2 - ,dbout_type_in in varchar2) - return number; - - function calc_pct_coverage - (in_test_run_id in number) - return number; - - procedure delete_records - (in_test_run_id in number); - - -- WtPLSQL Self Test Procedures - -- - -- alter system set PLSQL_CCFLAGS = - -- 'WTPLSQL_SELFTEST:TRUE' - -- scope=BOTH; - -- - $IF $$WTPLSQL_SELFTEST - $THEN - procedure WTPLSQL_RUN; - $END - -end wt_profiler; diff --git a/src/core/wt_result.pkb b/src/core/wt_result.pkb deleted file mode 100644 index 6b00d3f..0000000 --- a/src/core/wt_result.pkb +++ /dev/null @@ -1,490 +0,0 @@ -create or replace package body wt_result -as - - TYPE results_nt_type is table of wt_results%ROWTYPE; - g_results_nt results_nt_type; - g_results_rec wt_results%ROWTYPE; - - $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ - g_skip_add BOOLEAN := FALSE; - $END ----------------%WTPLSQL_end_ignore_lines%---------------- - ----------------------- --- Private Procedures ----------------------- - - ---------------------- --- Public Procedures ---------------------- - ------------------------------------------------------------- -procedure initialize - (in_test_run_id in wt_test_runs.id%TYPE) -is - l_results_recNULL wt_results%ROWTYPE; -begin - if in_test_run_id is NULL - then - raise_application_error(-20009, '"in_test_run_id" cannot be NULL'); - end if; - g_results_rec := l_results_recNULL; - g_results_rec.test_run_id := in_test_run_id; - g_results_rec.result_seq := 0; - g_results_rec.executed_dtm := systimestamp; - g_results_nt := results_nt_type(null); -$IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ - g_skip_add := FALSE; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- -end initialize; - -$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ -$THEN - procedure t_initialize - is - l_results_recNULL wt_results%ROWTYPE; - l_results_recSAVE wt_results%ROWTYPE; - l_results_recTEST wt_results%ROWTYPE; - l_results_ntSAVE results_nt_type; - l_results_ntTEST results_nt_type; - begin - -------------------------------------- WTPLSQL Testing -- - l_results_ntSAVE := g_results_nt; - l_results_recSAVE := g_results_rec; - g_results_rec := l_results_recNULL; - initialize(-99); - l_results_recTEST := g_results_rec; - g_results_rec := l_results_recSAVE; - l_results_ntTEST := g_results_nt; - g_results_nt := l_results_ntSAVE; - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Initialize Happy Path'; - wt_assert.eq ( - msg_in => 'l_results_recTEST.test_run_id', - check_this_in => l_results_recTEST.test_run_id, - against_this_in => -99); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_results_recTEST.result_seq', - check_this_in => l_results_recTEST.result_seq, - against_this_in => 0); - wt_assert.isnotnull ( - msg_in => 'l_results_recTEST.executed_dtm', - check_this_in => l_results_recTEST.executed_dtm); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'l_results_recTEST.interval_msecs', - check_this_in => l_results_recTEST.interval_msecs); - wt_assert.isnull ( - msg_in => 'l_results_recTEST.assertion', - check_this_in => l_results_recTEST.assertion); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'l_results_recTEST.status', - check_this_in => l_results_recTEST.status); - wt_assert.isnull ( - msg_in => 'l_results_recTEST.details', - check_this_in => l_results_recTEST.details); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'l_results_recTEST.testcase', - check_this_in => l_results_recTEST.testcase); - wt_assert.isnull ( - msg_in => 'l_results_recTEST.message', - check_this_in => l_results_recTEST.message); - wt_assert.eq ( - msg_in => 'l_results_ntTEST.COUNT', - check_this_in => l_results_ntTEST.COUNT, - against_this_in => 1); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'l_results_ntTEST(1).test_run_id', - check_this_in => l_results_ntTEST(1).test_run_id); - wt_assert.raises ( - msg_in => 'Raises ORA-20009', - check_call_in => 'begin wt_result.initialize(NULL); end;', - against_exc_in => 'ORA-20009: "in_test_run_id" cannot be NULL'); - end t_initialize; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- - - ------------------------------------------------------------- --- Because this procedure is called to cleanup after errors, --- it must be able to run multiple times without causing damage. -procedure finalize -is - PRAGMA AUTONOMOUS_TRANSACTION; - l_results_recNULL wt_results%ROWTYPE; -begin - if g_results_rec.test_run_id IS NULL - then - return; - end if; - -- There is always an extra NULL element in the g_results_nt array. - forall i in 1 .. g_results_nt.COUNT - 1 - insert into wt_results values g_results_nt(i); - COMMIT; - g_results_nt := results_nt_type(null); - g_results_rec := l_results_recNULL; - g_results_nt := results_nt_type(null); -end finalize; - -$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ -$THEN - procedure t_finalize - is - -------------------------------------- WTPLSQL Testing -- - type num_recs_aa_type is table of number index by varchar2(50); - num_recs_aa num_recs_aa_type; - l_test_runs_rec wt_test_runs%ROWTYPE; - l_results_recNULL wt_results%ROWTYPE; - l_results_recSAVE wt_results%ROWTYPE; - l_results_recTEST wt_results%ROWTYPE; - l_results_ntSAVE results_nt_type; - l_results_ntTEST results_nt_type; - l_num_recs number; - begin - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := ' '; - l_results_ntSAVE := g_results_nt; -- Capture Original Values - l_results_recSAVE := g_results_rec; -- Capture Original Values - -------------------------------------- WTPLSQL Testing -- - -- Can't Test in this block because g_results_rec has test data - g_results_rec := l_results_recNULL; - g_results_rec.test_run_id := -99; - g_results_rec.result_seq := 1; - g_results_rec.executed_dtm := systimestamp; - g_results_rec.interval_msecs := 99; - -------------------------------------- WTPLSQL Testing -- - g_results_rec.assertion := 'FINALTEST'; - g_results_rec.status := wt_assert.C_PASS; - g_results_rec.details := 'This is a WT_RESULT.FINALIZE Test'; - g_results_nt := results_nt_type(null); - g_results_nt(1) := g_results_rec; - g_results_nt.extend; -- Finalize expects that last element to be NULL - -------------------------------------- WTPLSQL Testing -- - -- Can't Test in this block because g_results_rec has test data - g_results_rec.test_run_id := NULL; - select count(*) - into num_recs_aa('Finalize Before NULL Test Record Count') - from wt_results - where test_run_id = -99; - finalize; - -------------------------------------- WTPLSQL Testing -- - select count(*) - into num_recs_aa('Finalize After NULL Test Record Count') - from wt_results - where test_run_id = -99; - rollback; -- UNDO all database changes - g_results_rec.test_run_id := -99; - -------------------------------------- WTPLSQL Testing -- - -- Can't Test in this block because g_results_rec has test data - l_test_runs_rec.id := -99; - l_test_runs_rec.start_dtm := systimestamp; - l_test_runs_rec.runner_name := 'Finalize Test'; - l_test_runs_rec.runner_owner := 'BOGUS'; - insert into wt_test_runs values l_test_runs_rec; - commit; -- Must commit because finalize is AUTONOMOUS TRANSACTION - -------------------------------------- WTPLSQL Testing -- - finalize; -- g_results_nt is still loaded with one element - l_results_ntTEST := g_results_nt; - l_results_recTEST := g_results_rec; - select count(*) - into num_recs_aa('Finalize Record Count Test') - from wt_results - where test_run_id = -99; - delete from wt_results where test_run_id = -99; - delete from wt_test_runs where id = -99; - commit; -- UNDO all database changes - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Finalize Happy Path'; - -- Restore values so we can test - g_results_rec := l_results_recSAVE; - g_results_nt := l_results_ntSAVE; - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'Before NULL Test Record Count', - check_this_in => num_recs_aa('Finalize Before NULL Test Record Count'), - against_this_in => 0); - wt_assert.eq ( - msg_in => 'After NULL Test Record Count', - check_this_in => num_recs_aa('Finalize After NULL Test Record Count'), - against_this_in => 0); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'l_results_recTEST.test_run_id', - check_this_in => l_results_recTEST.test_run_id); - wt_assert.eq ( - msg_in => 'l_results_ntTEST.COUNT', - check_this_in => l_results_ntTEST.COUNT, - against_this_in => 1); - wt_assert.eq ( - msg_in => 'Record Count Test', - check_this_in => num_recs_aa('Finalize Record Count Test'), - against_this_in => 1); - end t_finalize; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- - - ------------------------------------------------------------- -procedure save - (in_assertion in wt_results.assertion%TYPE - ,in_status in wt_results.status%TYPE - ,in_details in wt_results.details%TYPE - ,in_testcase in wt_results.testcase%TYPE - ,in_message in wt_results.message%TYPE) -is - l_current_tstamp timestamp; -begin - if g_results_rec.test_run_id IS NULL - then - wt_text_report.ad_hoc_result - (in_assertion - ,in_status - ,in_details - ,in_testcase - ,in_message); - return; - end if; - -- Set the time and interval - l_current_tstamp := systimestamp; - g_results_rec.interval_msecs := extract(day from ( - l_current_tstamp - g_results_rec.executed_dtm - ) * 86400 * 1000); - g_results_rec.executed_dtm := l_current_tstamp; - -- Set the IN variables - g_results_rec.assertion := in_assertion; - g_results_rec.status := in_status; - g_results_rec.details := substr(in_details,1,4000); - g_results_rec.testcase := substr(in_testcase,1,50); - g_results_rec.message := substr(in_message,1,200); - -- Increment, Extend, and Load - g_results_rec.result_seq := g_results_rec.result_seq + 1; - g_results_nt(g_results_nt.COUNT) := g_results_rec; - g_results_nt.extend; - -$IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ - if not g_skip_add then -$END - wt_test_run_stat.add_result(g_results_rec); -$IF $$WTPLSQL_SELFTEST $THEN - end if; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- - -end save; - -$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ -$THEN - procedure t_save_testing - is - -------------------------------------- WTPLSQL Testing -- - TYPE l_dbmsout_buff_type is table of varchar2(32767); - l_dbmsout_buff l_dbmsout_buff_type := l_dbmsout_buff_type(1); - l_test_run_id number; - l_dbmsout_line varchar2(32767); - l_dbmsout_stat number; - l_nt_count number; - begin - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Ad Hoc Save Happy Path Setup'; - -- Save/Clear the DBMS_OUPTUT Buffer - loop - DBMS_OUTPUT.GET_LINE ( - line => l_dbmsout_line, - status => l_dbmsout_stat); - exit when l_dbmsout_stat != 0; - l_dbmsout_buff(l_dbmsout_buff.COUNT) := l_dbmsout_line; - l_dbmsout_buff.extend; - end loop; - wt_assert.isnotnull ( - msg_in => 'l_dbmsout_buff.COUNT - 1', - check_this_in => l_dbmsout_buff.COUNT - 1); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Ad Hoc Save Testing Happy Path'; - l_test_run_id := g_results_rec.test_run_id; - g_results_rec.test_run_id := NULL; - g_skip_add := TRUE; - wt_result.save ( - in_assertion => 'SELFTEST1', - in_status => wt_assert.C_PASS, - in_details => 't_save_testing Details', - in_testcase => wt_assert.g_testcase, - in_message => 't_save_testing Message'); - g_skip_add := FALSE; - g_results_rec.test_run_id := l_test_run_id; - -------------------------------------- WTPLSQL Testing -- - DBMS_OUTPUT.GET_LINE ( - line => l_dbmsout_line, - status => l_dbmsout_stat); - wt_assert.eq ( - msg_in => 'DBMS_OUTPUT Status', - check_this_in => l_dbmsout_stat, - against_this_in => 0); - -------------------------------------- WTPLSQL Testing -- - if wt_assert.last_pass - then - wt_assert.isnotnull ( - msg_in => 'DBMS_OUTPUT Line', - check_this_in => l_dbmsout_line); - wt_assert.this ( - msg_in => 'Save Testing NULL Test DBMS_OUTPUT 3 Message', - check_this_in => (l_dbmsout_line like '%' || wt_assert.g_testcase || - '%t_save_testing %')); - -------------------------------------- WTPLSQL Testing -- - if not wt_assert.last_pass - then - -- No match, put the line back into DBMS_OUTPUT buffer and end this. - DBMS_OUTPUT.PUT_LINE(l_dbmsout_line); - end if; - end if; - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Ad Hoc Save Happy Path Teardown'; - -- Restore the DBMS_OUPTUT Buffer - for i in 1 .. l_dbmsout_buff.COUNT - 1 - loop - DBMS_OUTPUT.PUT_LINE(l_dbmsout_buff(i)); - end loop; - wt_assert.isnotnull ( - msg_in => 'l_dbmsout_buff.COUNT - 1', - check_this_in => l_dbmsout_buff.COUNT - 1); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Save Testing Happy Path'; - l_nt_count := g_results_nt.COUNT; - g_skip_add := TRUE; - wt_result.save ( - in_assertion => 'SELFTEST2', - in_status => wt_assert.C_PASS, - in_details => 't_save_testing Testing Details', - in_testcase => wt_assert.g_testcase, - in_message => 't_save_testing Testing Message'); - g_skip_add := FALSE; - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'g_results_nt.COUNT', - check_this_in => g_results_nt.COUNT, - against_this_in => l_nt_count + 1); - if not wt_assert.last_pass - then - return; -- Something went wrong, end this now. - end if; - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'g_results_nt(' || l_nt_count || ').assetion', - check_this_in => g_results_nt(l_nt_count).assertion, - against_this_in => 'SELFTEST2'); - wt_assert.eq ( - msg_in => 'g_results_nt(' || l_nt_count || ').status', - check_this_in => g_results_nt(l_nt_count).status, - against_this_in => wt_assert.C_PASS); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'g_results_nt(' || l_nt_count || ').details', - check_this_in => g_results_nt(l_nt_count).details, - against_this_in => 't_save_testing Testing Details'); - wt_assert.eq ( - msg_in => 'g_results_nt(' || l_nt_count || ').testcase', - check_this_in => g_results_nt(l_nt_count).testcase, - against_this_in => wt_assert.g_testcase); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'g_results_nt(' || l_nt_count || ').message', - check_this_in => g_results_nt(l_nt_count).message, - against_this_in => 't_save_testing Testing Message'); - wt_assert.isnotnull ( - msg_in => 'g_results_nt(' || l_nt_count || ').interval_msecs', - check_this_in => g_results_nt(l_nt_count).interval_msecs); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnotnull ( - msg_in => 'g_results_nt(' || l_nt_count || ').executed_dtm', - check_this_in => g_results_nt(l_nt_count).executed_dtm); - wt_assert.isnotnull ( - msg_in => 'g_results_nt(' || l_nt_count || ').result_seq', - check_this_in => g_results_nt(l_nt_count).result_seq); - -- Can't Delete Test Element. g_results_nt.COUNT is not reduced - -- because nested tables are not dense. - --g_results_nt.delete(l_nt_count + 1); - end t_save_testing; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- - - ------------------------------------------------------------- -procedure delete_records - (in_test_run_id in number) -is -begin - delete from wt_results - where test_run_id = in_test_run_id; -end delete_records; - -$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ -$THEN - procedure t_delete_records - is - -------------------------------------- WTPLSQL Testing -- - l_test_runs_rec wt_test_runs%ROWTYPE; - l_results_rec wt_results%ROWTYPE; - l_num_recs number; - begin - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Delete Records Happy Path'; - select count(*) into l_num_recs - from wt_results - where test_run_id = -99; - wt_assert.isnotnull ( - msg_in => 'Before Insert Count', - check_this_in => l_num_recs); - -------------------------------------- WTPLSQL Testing -- - l_test_runs_rec.id := -99; - l_test_runs_rec.start_dtm := sysdate; - l_test_runs_rec.runner_name := 'Delete Records Test'; - l_test_runs_rec.runner_owner := 'BOGUS'; - insert into wt_test_runs values l_test_runs_rec; - l_results_rec.test_run_id := -99; - -------------------------------------- WTPLSQL Testing -- - l_results_rec.result_seq := 1; - l_results_rec.executed_dtm := sysdate; - l_results_rec.interval_msecs := 99; - l_results_rec.assertion := 'DELRECTEST'; - l_results_rec.status := wt_assert.C_PASS; - l_results_rec.details := 'This is a WT_RESULT.DELETE_RECORDS Test'; - insert into wt_results values l_results_rec; - -------------------------------------- WTPLSQL Testing -- - wt_assert.eqqueryvalue ( - msg_in => 'After Insert Count', - check_query_in => 'select count(*) from wt_results' || - ' where test_run_id = -99', - against_value_in => l_num_recs + 1); - delete_records(-99); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eqqueryvalue ( - msg_in => 'After Test Count', - check_query_in => 'select count(*) from wt_results' || - ' where test_run_id = -99', - against_value_in => l_num_recs); - rollback; - wt_assert.eqqueryvalue ( - msg_in => 'After ROLLBACK Count', - check_query_in => 'select count(*) from wt_results' || - ' where test_run_id = -99', - against_value_in => l_num_recs); - end t_delete_records; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- - - ---==============================================================-- -$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ -$THEN - procedure WTPLSQL_RUN --% WTPLSQL SET DBOUT "WT_RESULT:PACKAGE BODY" %-- - is - begin - -------------------------------------- WTPLSQL Testing -- - t_initialize; - t_finalize; - t_save_testing; - t_delete_records; - end WTPLSQL_RUN; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- ---==============================================================-- - - -end wt_result; diff --git a/src/core/wt_result.pks b/src/core/wt_result.pks deleted file mode 100644 index 68c54d9..0000000 --- a/src/core/wt_result.pks +++ /dev/null @@ -1,30 +0,0 @@ -create or replace package wt_result authid definer -as - - procedure initialize - (in_test_run_id in wt_test_runs.id%TYPE); - - procedure finalize; - - procedure save - (in_assertion in wt_results.assertion%TYPE - ,in_status in wt_results.status%TYPE - ,in_details in wt_results.details%TYPE - ,in_testcase in wt_results.testcase%TYPE - ,in_message in wt_results.message%TYPE); - - procedure delete_records - (in_test_run_id in number); - - -- WtPLSQL Self Test Procedures - -- - -- alter system set PLSQL_CCFLAGS = - -- 'WTPLSQL_SELFTEST:TRUE' - -- scope=BOTH; - -- - $IF $$WTPLSQL_SELFTEST - $THEN - procedure WTPLSQL_RUN; - $END - -end wt_result; diff --git a/src/core/wt_results.tab b/src/core/wt_results.tab deleted file mode 100644 index 6421982..0000000 --- a/src/core/wt_results.tab +++ /dev/null @@ -1,34 +0,0 @@ - --- --- Results Table Installation --- - -create table wt_results - (test_run_id number(38) constraint wt_results_nn2 not null - ,result_seq number(8) constraint wt_results_nn3 not null - ,executed_dtm timestamp(6) constraint wt_results_nn4 not null - ,interval_msecs number(10,3) constraint wt_results_nn5 not null - ,assertion varchar2(15) constraint wt_results_nn6 not null - ,status varchar2(4) constraint wt_results_nn7 not null - ,details varchar2(4000) constraint wt_results_nn8 not null - ,testcase varchar2(50) - ,message varchar2(200) - ,constraint wt_results_pk primary key (test_run_id, result_seq) - ,constraint wt_results_fk1 foreign key (test_run_id) - references wt_test_runs (id) - ,constraint wt_results_ck1 check (status in ('PASS','FAIL')) - ) pctfree 0; - -comment on table wt_results is 'Results data from Test Runs.'; -comment on column wt_results.test_run_id is 'Foreign Key for the Test Run, Primary Key part 1.'; -comment on column wt_results.result_seq is 'Sequence number for this Result, Primary Key part 2.'; -comment on column wt_results.executed_dtm is 'Date/Time (with Fractional Seconds) this Result was captured'; -comment on column wt_results.interval_msecs is 'Interval time in milliseonds since the previous Result or start ot the Test Run.'; -comment on column wt_results.assertion is 'Name of the Assertion Test performed'; -comment on column wt_results.status is 'Passed/Failed Status from the Assertion'; -comment on column wt_results.details is 'Assertion Details, i.e. Expected Value and Actual Value'; -comment on column wt_results.testcase is 'Optional Test Case name.'; -comment on column wt_results.message is 'Optional test identifier that helps connect an Assertion to the Test Runner.'; - -grant select on wt_results to public; -grant delete on wt_results to public; diff --git a/src/core/wt_self_test.tab b/src/core/wt_self_test.tab deleted file mode 100644 index bd78946..0000000 --- a/src/core/wt_self_test.tab +++ /dev/null @@ -1,2375 +0,0 @@ - --- --- Test Runs Table Installation --- - -create table wt_self_test - (id number - ,temp_clob clob - ,temp_nclob nclob - ,temp_xml xmltype - ,temp_blob blob - ,constraint wt_self_test_pk primary key (id) - ); - -comment on table wt_self_test is 'Test Data for unit testing of WTPLSQL.'; -comment on column wt_self_test.id is 'Primary Key'; -comment on column wt_self_test.temp_clob is 'CLOB test data'; -comment on column wt_self_test.temp_nclob is 'NCLOB test data'; -comment on column wt_self_test.temp_xml is 'XML test data'; -comment on column wt_self_test.temp_blob is 'BLOB test data'; - -create or replace trigger wt_self_test$test - before insert on wt_self_test - for each row -declare - l_junk number; -begin - l_junk := 1; -end; -/ - -set define off - -declare - l_rec wt_self_test%ROWTYPE; - buff varchar2(32000); - t_blob blob; - l_dest_offset pls_integer := 1; - l_src_offset pls_integer := 1; - l_lang_context pls_integer := 0; -- Default - l_warning pls_integer; -begin - -- - buff := -' - - FPDS-NG search results for<![CDATA[: pl/sql]]> - - - - - - - -'; - l_rec.temp_clob := l_rec.temp_clob || buff; - -- - buff := -' - <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]> - - 2016-02-16 13:10:02 - - - - - 1625 - DOLF072J11595 - 0 - 0 - - 4730 - GS35F4543G - 0 - - 2007-05-04 00:00:00 - 2007-04-15 00:00:00 - 2008-04-14 00:00:00 - 2008-04-14 00:00:00 - - 12638.59 - 12638.59 - 12638.59 - - 0.00 - 0.00 - 0.00 - - 1625 - BLSNO - X - - 0.00 - - C - J - NONE - X - XPERT FOR ORACLE ADMINISTRATION, PL/SQL DEVELOPMENT, TUNING MODULE, QUEST SQL OPTIMIZER. - - N - X - N - X - N - N - 1 - - N - X - X - X - - X - - 7030 - D - 541519 - E - - - DLT SOLUTIONS INCORPORATED - - - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - false - false - false - false - false - - false - false - - false - false - false - false - - false - false - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - false - - false - false - false - - false - false - false - false - false - false - false - - false - false - false - - false - false - false - false - 173 - 26 - - false - false - false - false - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - - 13861 SUNRISE VALLEY DR STE 400 - HERNDON - VA - 201716126 - USA - 10 - 7864681990000PR - 201716126 - - 786468199 - DLT SOLUTIONS INCORPORATED - 786468199 - DLT SOLUTIONS LLC - - 2002-03-14 00:00:00 - 2008-11-16 00:00:00 - S - - - 50000 - DC - USA - 202120002 - 00 - - SP1 - NONE - NONE - 1 - A - N - false - N - X - - - REYNOLDS.VANESSA@BLS.GOV - 2007-04-10 16:40:29 - IDV_CORRECT - 2016-02-16 13:10:02 - F - - -'; - l_rec.temp_clob := l_rec.temp_clob || buff; - -- - buff := -' - <![CDATA[New DELIVERY ORDER EDCIO12O0009 awarded to DLT SOLUTIONS, LLC for the amount of $14,168.16]]> - - 2016-02-16 13:10:16 - - - - - 9100 - EDCIO12O0009 - 0 - 0 - - 4730 - GS35F4543G - 107 - - 2012-05-11 00:00:00 - 2012-05-11 00:00:00 - 2012-09-30 00:00:00 - 2013-06-30 00:00:00 - - 14168.16 - 14168.16 - 14168.16 - - 14168.16 - 14168.16 - 14168.16 - - 9100 - PO - 9100 - EI - X - - 0.00 - - C - J - NONE - TOAD SOFTWARE SUPPORT RENEWAL. TOAD IS USED BY THE DEPARTMENT OF EDUCATION AS A PRIMARY SQL AND PL/SQL DEVELOPMENT TOOL. IT IS ALSO USED FOR PRODUCTION SUPPORT AND MANAGING ORACLE DATABASES. - N - X - N - X - N - X - - - - 91 - 0202 - N - 1 - - N - X - X - X - - X - - 7030 - D - 541519 - C - E - USA - D - - - DLT SOLUTIONS, LLC - - - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - false - false - false - false - false - - false - false - - false - false - false - false - - false - false - false - false - false - false - false - false - false - false - - true - false - false - false - false - false - false - - false - false - false - false - false - false - false - false - - false - false - true - - false - false - false - false - false - false - false - - false - true - false - - true - false - false - false - VA - USA - CORPORATE NOT TAX EXEMPT - 245 - 775944576 - - false - false - false - false - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - - 13861 SUNRISE VALLEY DR STE 400 - HERNDON - VA - 201716126 - USA - 10 - - 786468199 - DLT SOLUTIONS, LLC - 786468199 - DLT SOLUTIONS LLC - - O - - - DC - USA - 202020001 - 00 - - A - MAFO - NONE - NONE - FAIR - 1 - A - N - N - X - N - - - KARL.L.FEHRMAN@ED.GOV - 2012-05-08 13:41:06 - IDV_CORRECT - 2016-02-16 13:10:16 - F - MICHAEL.HOLLOWAY@ED.GOV - 2012-05-11 10:13:31 - - -'; - l_rec.temp_clob := l_rec.temp_clob || buff; - -- - buff := -' - <![CDATA[PURCHASE ORDER DJF152600P0008877 (1) awarded to SKILLBUILDERS INC, was modified for the amount of $0]]> - - 2016-09-15 10:37:14 - - - - - 1549 - DJF152600P0008877 - 1 - 0 - - 2015-10-30 00:00:00 - 2015-10-30 00:00:00 - 2015-10-30 00:00:00 - 2015-10-30 00:00:00 - - 0.00 - 0.00 - 0.00 - - 15000.00 - 15000.00 - 15000.00 - - 1549 - PDS02 - 1549 - PDS02 - X - - 0.00 - - B - J - K - NONE - "IGF::CL::IGF" - - - - -THIS WILL BE AN ONLINE CLASS FOR 10 APPLICATION DEVELOPERS. EACH DEVELOPER WILL ACCESS THE TRAINING FROM EITHER A HOME COMPUTER OR ONE ON UNET. COURSE TOPICS INCLUDE SQL STATEMENT PROCESSING, PL/SQL TUNING, VIEWING THE EXECUTION PLAN, THE IMPORTANC - CL - N - X - N - N - X - - - - 15 - 0200 - 000 - Y - 1 - - N - N - N - N - - X - - U012 - D - 611420 - C - A - USA - C - - - SKILLBUILDERS INC - - - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - false - false - false - false - false - - false - false - - false - false - false - false - - false - false - false - false - false - false - false - false - false - false - - true - false - false - false - false - false - false - - false - false - false - false - false - false - false - false - - false - false - true - - false - false - false - false - false - false - false - - true - false - false - - true - false - false - false - RI - USA - CORPORATE NOT TAX EXEMPT - 3 - 800000 - - false - false - false - false - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - - 213 ROBINSON ST - WAKEFIELD - RI - 028793590 - USA - 4017836172 - 4017830405 - 02 - 960084242 - 02879 - - 960084242 - SKILLBUILDERS INC - 960084242 - SKILLBUILDERS INC - - 2001-10-22 00:00:00 - 2016-01-21 00:00:00 - O - - - DC - USA - 205350001 - 00 - - A - NP - NONE - NONE - 3 - D - N - N - N - N - - B - - VLBANKS - 2015-10-30 13:34:40 - VLBANKS - 2016-09-15 10:37:14 - F - VLBANKS - 2016-09-15 10:37:14 - VLBANKS - 2016-09-15 10:37:14 - Y - - -'; - l_rec.temp_clob := l_rec.temp_clob || buff; - -- - buff := -' - <![CDATA[New PURCHASE ORDER DOC40PAPT1511219 awarded to SHI INTERNATIONAL CORP. for the amount of $4,000]]> - - 2015-06-11 17:40:38 - - - - - 1344 - DOC40PAPT1511219 - 0 - 0 - - 2015-06-09 00:00:00 - 2015-06-09 00:00:00 - 2016-06-08 00:00:00 - 2016-06-08 00:00:00 - - 4000.00 - 4000.00 - 4000.00 - - 4000.00 - 4000.00 - 4000.00 - - 1344 - 000PA - 1344 - 000PA - X - - 0.00 - - B - J - NONE - LICENSE FOR SONARSOURCE PL/SQL - N - X - N - X - X - - - - 13 - 1006 - 000 - N - 1 - - Y - X - X - X - - X - - 7030 - D - 423430 - C - A - E - USA - D - - - SHI INTERNATIONAL CORP. - - - false - false - false - false - false - false - false - true - - true - false - true - false - false - false - false - false - false - false - false - false - - false - false - - false - false - false - false - - false - false - false - false - false - false - false - false - false - false - - true - false - false - false - false - false - false - - false - false - false - false - false - false - false - false - - false - false - true - - false - false - false - false - false - false - false - - false - false - false - - true - false - false - false - NJ - USA - CORPORATE NOT TAX EXEMPT - 2000 - 6500000000 - - false - false - false - false - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - - 290 DAVIDSON AVE STE 101 - SOMERSET - NJ - 088734179 - USA - 8476031132 - 12 - 611429481 - 08873 - - 611429481 - SHI INTERNATIONAL CORP. - 611429481 - SHI INTERNATIONAL CORP. - - 2001-12-05 00:00:00 - 2016-05-19 00:00:00 - O - - - VA - USA - 223131450 - 08 - - G - SP1 - NONE - NONE - SP2 - 1 - D - N - N - X - N - - B - - PTOTBF - 2015-06-11 17:09:54 - PTOTBF - 2015-06-11 17:40:38 - F - PTOTBF - 2015-06-11 17:40:38 - - -'; - l_rec.temp_clob := l_rec.temp_clob || buff; - -- - buff := -' - <![CDATA[New DELIVERY ORDER AG32SBD150147 awarded to APEXTECH LLC for the amount of $198,000]]> - - 2017-10-04 14:20:48 - - - - - 12H2 - AG32SBD150147 - 0 - 0 - - 4732 - GS06F0821Z - 0 - - 2015-06-03 00:00:00 - 2015-06-03 00:00:00 - 2019-07-05 00:00:00 - 2019-07-05 00:00:00 - - 198000.00 - 198000.00 - 833580.00 - - 614790.00 - 614790.00 - 833580.00 - - 12H2 - 32SB - 12H2 - 31PE - X - - 0.00 - - C - J - NONE - THE PURPOSE OF THIS DELIVERY ORDER IS TO PURCHASE ORACLE PL/SQL PROGRAMMER (DATABASE ANALYST/PROGRAMMER-SENIOR) SERVICES IN ACCORDANCE WITH ATTACHED STATEMENT OF WORK DATED 6/1/2015. - -THIS AWARD IS AN OPTION YEAR CONTRACT. IT INCLUDES A BASE YEAR PLUS, THREE (3) ONE YEAR OPTION PERIODS. BASE YEAR PERIOD OF PERFORMANCE IS 7/6/2015 THROUGH 7/5/2016. - -IGF::CT::IGF - CT - N - X - N - N - X - - - - 12 - 1400 - N - 1 - - Y - X - N - X - - X - - D308 - D - 541512 - C - A - E - USA - C - - - APEXTECH LLC - - - false - false - false - false - false - false - false - false - - true - false - false - false - true - false - false - false - false - false - false - false - - false - false - - false - false - false - false - - false - false - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - false - - true - false - false - - false - false - false - false - false - false - false - - false - true - false - - true - false - false - false - OTHER - 13 - 2000000 - - false - false - false - false - false - false - false - false - false - false - false - false - - true - false - true - true - false - false - false - - 2200 WILSON BLVD - ARLINGTON - VA - 222013397 - USA - 7032539722 - 7035222037 - 08 - 126242150 - 222013397 - - 126242150 - APEXTECH LLC - 126242150 - APEXTECH LLC - - 2003-01-15 00:00:00 - 2014-07-31 00:00:00 - S - - - MD - USA - 207051003 - 04 - - D - MAFO - 8A - NONE - OSA - A - N - N - Y - N - - B - - JESSICA.MASSEY@ARS.USDA.GOV - 2015-05-21 14:03:35 - IDV_CORRECT - 2017-10-04 14:20:48 - F - JESSICA.MASSEY@ARS.USDA.GOV - 2015-06-03 13:17:36 - N - - -'; - l_rec.temp_clob := l_rec.temp_clob || buff; - -- - buff := -' - <![CDATA[New PURCHASE ORDER M6738610P1027 awarded to DILTEX INC for the amount of $700]]> - - 2017-11-29 23:36:42 - - - - - 9700 - M6738610P1027 - 0 - 0 - - 2010-05-18 00:00:00 - 2010-05-18 00:00:00 - 2010-06-17 00:00:00 - 2010-06-17 00:00:00 - - 700.00 - 700.00 - 700.00 - - 700.00 - 700.00 - 700.00 - - 1700 - M67386 - 1700 - M67386 - X - - 0.00 - - B - J - NONE - PL/SQL SOFTWARE DEVELOPER - N - N - X - N - X - Z - N - 1 - - Y - N - N - N - - X - - 7030 - D - C9E - 423430 - C - A - 000 - A - A - USA - D - - - DILTEX INC - - - false - false - false - false - false - false - false - true - - true - true - false - false - false - false - false - false - false - false - false - false - - false - false - - false - false - false - false - - false - false - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - false - - true - false - false - - false - false - false - false - false - false - false - - true - false - false - - true - false - false - false - OTHER - 4 - 2000000 - - false - false - false - false - false - false - false - false - false - false - false - false - - false - true - false - false - false - false - false - - 14530 PACIFIC AVE - BALDWIN PARK - CA - 917065340 - USA - 6269601314 - 6269560615 - 32 - 969907914 - 917065340 - - 969907914 - DILTEX INC - 969907914 - DILTEX INC - - 2005-10-02 00:00:00 - 2011-01-12 00:00:00 - S - - - MO - USA - 641471208 - 05 - - D - NP - SBA - NONE - 2 - A - N - false - N - X - N - 0.00 - - B - - JUDY.RUPARD.M67386@USMC.MIL - 2010-05-18 08:59:07 - DOD_CLOSEOUT - 2017-11-29 23:36:42 - F - ANDREA.LEACH.M67386@USMC.MIL - 2010-05-18 10:04:12 - DOD_CLOSEOUT - 2017-11-29 23:36:42 - Y - - -'; - l_rec.temp_clob := l_rec.temp_clob || buff; - -- - buff := -' - <![CDATA[New PURCHASE ORDER AG64WCP140083 awarded to SOFTCHOICE CORPORATION for the amount of $216]]> - - 2014-06-29 12:37:57 - - - - - 1205 - AG64WCP140083 - 0 - 0 - - 2014-06-29 00:00:00 - 2014-06-27 00:00:00 - 2015-06-30 00:00:00 - 2015-06-30 00:00:00 - - 216.00 - 216.00 - 216.00 - - 216.00 - 216.00 - 216.00 - - 1205 - 64WC - 12A7 - 64WC - X - - 0.00 - - B - J - PL SQL DEVELOPER SFTW RENEWAL - NONE - IGF::OT::IGF - -PL/SQL DEVELOPER LICENSES ANNUAL SERVICE CONTRACT - 6 USERS E-DOWNLOAD, PART RV1555 #5266.6 - -WAIVER: FY14-RENEWAL R14318, CO-JADAMS, PURCHASE CARD, SOFTCHOICE - OT - N - X - N - N - X - - - - 12 - 4609 - Y - 1 - - N - N - N - N - - X - - D319 - D - 541519 - C - A - E - USA - C - - - SOFTCHOICE CORPORATION - - - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - false - false - false - false - false - - false - false - - false - false - false - false - - false - false - false - false - false - false - false - false - false - false - - true - false - false - false - false - false - false - - false - false - false - false - false - false - false - false - - false - false - true - - false - false - false - false - false - false - false - - false - false - false - - true - false - false - false - NY - USA - CORPORATE NOT TAX EXEMPT - 1200 - 1000000000 - - false - false - false - false - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - - 314 W SUPERIOR ST STE 301 - CHICAGO - IL - 606543538 - USA - 7034801969 - 7034801956 - 07 - 929022028 - 606543538 - - 929022028 - SOFTCHOICE CORPORATION - 248864415 - SOFTCHOICE CORPORATION - - 2003-02-06 00:00:00 - 2015-02-03 00:00:00 - O - - - MO - USA - 641143363 - 05 - - F - SP1 - NONE - NONE - 2 - A - N - N - N - N - - B - - JENNIFER.ADAMS@USDA.GOV - 2014-06-29 12:02:32 - JENNIFER.ADAMS@USDA.GOV - 2014-06-29 12:37:57 - F - JENNIFER.ADAMS@USDA.GOV - 2014-06-29 12:37:57 - - -'; - l_rec.temp_clob := l_rec.temp_clob || buff; - -- - buff := -' - <![CDATA[New DELIVERY ORDER AG32SBD170266 awarded to APEXTECH LLC for the amount of $211,860]]> - - 2017-10-04 14:20:48 - - - - - 12H2 - AG32SBD170266 - 0 - 0 - - 4732 - GS06F0821Z - PA0003ADDRESSCHG - - 2017-09-22 00:00:00 - 2017-09-22 00:00:00 - 2019-09-28 00:00:00 - 2019-09-28 00:00:00 - - 211860.00 - 211860.00 - 430650.00 - - 211860.00 - 211860.00 - 430650.00 - - 12H2 - 1232SB - 12H2 - 12344P - X - - 0.00 - - C - J - NONE - IGF::OT::IGF -ORACLE PL/SQL PROGRAMMERS - OT - N - X - D - N - X - - - - 12 - 1400 - N - 1 - - Y - X - N - X - - B - 40 U.S.C. 11302(E) - - D308 - H - 541512 - C - A - E - USA - C - - - APEXTECH LLC - - - false - false - false - false - false - false - false - false - - true - false - false - false - true - false - false - false - false - false - false - false - - false - false - - false - false - false - false - - false - false - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - false - - true - false - false - - false - false - false - false - false - false - false - - false - true - false - - true - false - false - false - OTHER - 13 - 2000000 - - false - false - false - false - false - false - false - false - false - false - false - false - - true - false - true - true - false - false - false - - 2200 WILSON BLVD STE 810 - ARLINGTON - VA - 222013361 - USA - 7032539722 - 7035222037 - 08 - 126242150 - 222013397 - - 126242150 - 3C7R1 - APEXTECH LLC - 126242150 - APEXTECH LLC - - 2003-01-15 00:00:00 - 2014-07-31 00:00:00 - S - - - MD - USA - 207051003 - 04 - - D - MAFO - 8A - NONE - OSA - A - N - N - Y - N - - - PAUL.MERRITT@ARS.USDA.GOV - 2017-09-19 10:19:11 - IDV_CORRECT - 2017-10-04 14:20:48 - F - PAUL.MERRITT@ARS.USDA.GOV - 2017-09-22 14:31:02 - N - - -'; - l_rec.temp_clob := l_rec.temp_clob || buff; - -- - buff := -' - <![CDATA[New DELIVERY ORDER HQ042307F0009 awarded to DLT SOLUTIONS INCORPORATED for the amount of $3,199]]> - - 2016-02-16 13:10:05 - - - - - 9700 - HQ042307F0009 - 0 - 0 - - 4730 - GS35F4543G - 0 - - 2006-10-01 00:00:00 - 2006-10-01 00:00:00 - 2007-09-30 00:00:00 - 2007-09-30 00:00:00 - - 3199.00 - 3199.00 - 3199.00 - - 3199.00 - 3199.00 - 3199.00 - - 97BZ - HQ0423 - 97BZ - HQ0422 - X - - 0.00 - - C - J - NONE - X - SQL NAVIGATOR FOR ORACLE SOFTWARE LICENSE MAINTENANCE RENEWAL; SQL NAVIGATOR FOR ORACLE XPERT TUNING MODULE SOFTWARE LICENSE MAINTENANCE RENEWAL; PL FORMAT OPTION FOR SQL NAVIGATOR SOFTWARE LICENSE MAINTENANCE RENEWAL; DEBUGGER OPTION FOR SQL NAVIGATOR SOFTWARE LICENSE MAINTENANCE RENEWAL; AND KNOWLEDGE XPERT FOR PL/SQL DEVELOPMENT SOFTWARE MAINTENANCE LICENSE RENEWAL - N - N - X - N - N - N - Z - N - 1 - - N - X - X - X - - X - - D301 - D - A7 - 541519 - 000 - A - E - USA - C - - - DLT SOLUTIONS INCORPORATED - - - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - false - false - false - false - false - - false - false - - false - false - false - false - - false - false - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - false - - false - false - false - - false - false - false - false - false - false - false - - false - false - false - - false - false - false - false - 173 - 26 - - false - false - false - false - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - - 13861 SUNRISE VALLEY DR STE 400 - HERNDON - VA - 201716126 - USA - 10 - 7864681990000PR - 201716126 - - 786468199 - DLT SOLUTIONS INCORPORATED - 786468199 - DLT SOLUTIONS LLC - - 2002-03-14 00:00:00 - 2008-11-16 00:00:00 - S - - - 16000 - OH - USA - 441992055 - 11 - - A - MAFO - NONE - NONE - FAIR - 1 - A - N - false - N - X - 0.00 - - B - - LINDA.BARVINCHAK.HQ0423@DFAS.MIL - 2007-01-14 17:35:05 - IDV_CORRECT - 2016-02-16 13:10:05 - F - - -'; - l_rec.temp_clob := l_rec.temp_clob || buff; - -- - buff := -' - <![CDATA[New DELIVERY ORDER DJDEAEP070051D awarded to DLT SOLUTIONS INCORPORATED for the amount of $544.2]]> - - 2016-02-16 13:10:02 - - - - - 1524 - DJDEAEP070051D - 0 - 0 - - 4730 - GS35F4543G - 0 - - 2007-04-25 00:00:00 - 2007-04-25 00:00:00 - 2007-09-30 00:00:00 - 2008-09-29 00:00:00 - - 544.20 - 544.20 - 544.20 - - 544.20 - 544.20 - 544.20 - - 1524 - DEAEP - X - - 0.00 - - C - J - NONE - X - RENEWAL OF SOFTWARE MAINTENANCE AND TECHNICAL SUPPORT FOR KNOWLEDGE XPERT FOR PL/SQL DEVELOPMENT. ESSENTIAL TO EIS SOFTWARE APPLICATION - N - X - N - N - N - N - 1 - - N - X - X - X - - X - - D310 - D - 541519 - E - - - DLT SOLUTIONS INCORPORATED - - - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - false - false - false - false - false - - false - false - - false - false - false - false - - false - false - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - false - - false - false - false - - false - false - false - false - false - false - false - - false - false - false - - false - false - false - false - 173 - 26 - - false - false - false - false - false - false - false - false - false - false - false - false - - false - false - false - false - false - false - false - - 13861 SUNRISE VALLEY DR STE 400 - HERNDON - VA - 201716126 - USA - 10 - 7864681990000PR - 201716126 - - 786468199 - DLT SOLUTIONS INCORPORATED - 786468199 - DLT SOLUTIONS LLC - - 2002-03-14 00:00:00 - 2008-11-16 00:00:00 - S - - - 24000 - TX - USA - 799088098 - 16 - - SP1 - NONE - NONE - 1 - A - N - false - N - X - - - ELENA.A.BESAW@USDOJ.GOV - 2007-05-03 15:21:39 - IDV_CORRECT - 2016-02-16 13:10:02 - F - - -'; - l_rec.temp_clob := l_rec.temp_clob || buff; - -- - l_rec.temp_nclob := l_rec.temp_clob; - l_rec.temp_xml := xmltype(l_rec.temp_clob); - dbms_lob.createtemporary ( - lob_loc => t_blob, - cache => TRUE, - dur => DBMS_LOB.CALL); - dbms_lob.converttoblob( - dest_lob => t_blob, - src_clob => l_rec.temp_clob, - amount => DBMS_LOB.LOBMAXSIZE, - dest_offset => l_dest_offset, - src_offset => l_src_offset, - blob_csid => nls_charset_id('UTF8'), - lang_context => l_lang_context, - warning => l_warning); - if l_warning != DBMS_LOB.NO_WARNING - then - raise_application_error(-20000, 'DBMS_LOB.CONVERTTOLOB returned WARNING: ' || - l_warning); - end if; - l_rec.temp_blob := t_blob; - -- - l_rec.id := 1; - insert into wt_self_test values l_rec; - -- - l_rec.temp_clob := NULL; - l_rec.temp_nclob := NULL; - l_rec.temp_xml := NULL; - l_rec.temp_blob := NULL; - l_rec.id := 2; - insert into wt_self_test values l_rec; -end; -/ - -commit; diff --git a/src/core/wt_test_run_stat.pkb b/src/core/wt_test_run_stat.pkb deleted file mode 100644 index 9f3cbe8..0000000 --- a/src/core/wt_test_run_stat.pkb +++ /dev/null @@ -1,981 +0,0 @@ -create or replace package body wt_test_run_stat -as - - TYPE tc_aa_type is - table of wt_testcase_stats%ROWTYPE - index by varchar2(50); - g_tc_aa tc_aa_type; - g_rec wt_test_run_stats%ROWTYPE; - - ----------------------- --- Private Procedures ----------------------- - - ---------------------- --- Public Procedures ---------------------- - - ------------------------------------------------------------- -procedure initialize -is - l_recNULL wt_test_run_stats%ROWTYPE; -begin - g_rec := l_recNULL; - g_tc_aa.delete; -end initialize; - -$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ -$THEN - procedure t_initialize - is - l_tc_aaSAVE tc_aa_type; - l_recSAVE wt_test_run_stats%ROWTYPE; - l_tc_aaTEST tc_aa_type; - l_recTEST wt_test_run_stats%ROWTYPE; - begin - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Initialize Happy Path 1 Setup'; - l_tc_aaTEST('TESTCASE1').test_run_id := -2; - l_recTEST.test_run_id := -1; - wt_assert.eq ( - msg_in => 'l_tc_aaTEST(''TESTCASE1'').test_run_id', - check_this_in => l_tc_aaTEST('TESTCASE1').test_run_id, - against_this_in => -2 ); - wt_assert.eq ( - msg_in => 'l_recTEST.test_run_id', - check_this_in => l_recTEST.test_run_id, - against_this_in => -1 ); - -------------------------------------- WTPLSQL Testing -- - l_tc_aaSAVE := g_tc_aa; - l_recSAVE := g_rec; - g_tc_aa := l_tc_aaTEST; - g_rec := l_recTEST; - initialize; - l_tc_aaTEST := g_tc_aa; - l_recTEST := g_rec; - g_tc_aa := l_tc_aaSAVE; - g_rec := l_recSAVE; - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Initialize Happy Path 1'; - wt_assert.eq ( - msg_in => 'l_tc_aaTEST.COUNT', - check_this_in => l_tc_aaTEST.COUNT, - against_this_in => 0 ); - wt_assert.isnull ( - msg_in => 'l_recTEST.test_run_id', - check_this_in => l_recTEST.test_run_id ); - end t_initialize; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- - - ------------------------------------------------------------- -procedure add_result - (in_results_rec in wt_results%ROWTYPE) -is - tc varchar2(50); -begin - -- If this raises an exception, it must be done before any other values - -- are set because they will not be rolled-back after the "raise". - case in_results_rec.status - when 'PASS' then - g_rec.passes := nvl(g_rec.passes,0) + 1; - when 'FAIL' then - g_rec.failures := nvl(g_rec.failures,0) + 1; - when 'ERR' then - g_rec.errors := nvl(g_rec.errors,0) + 1; - else - raise_application_error(-20010, 'Unknown Result status "' || - in_results_rec.status || '"'); - end case; - g_rec.test_run_id := in_results_rec.test_run_id; - g_rec.asserts := nvl(g_rec.asserts,0) + 1; - g_rec.min_interval_msecs := least(nvl(g_rec.min_interval_msecs,999999999) - ,in_results_rec.interval_msecs); - g_rec.max_interval_msecs := greatest(nvl(g_rec.max_interval_msecs,0) - ,in_results_rec.interval_msecs); - g_rec.tot_interval_msecs := nvl(g_rec.tot_interval_msecs,0) + - in_results_rec.interval_msecs; - if in_results_rec.testcase is not null - then - tc := in_results_rec.testcase; - g_tc_aa(tc).testcase := tc; - g_tc_aa(tc).test_run_id := in_results_rec.test_run_id; - g_tc_aa(tc).asserts := nvl(g_tc_aa(tc).asserts,0) + 1; - case in_results_rec.status - when 'PASS' then - g_tc_aa(tc).passes := nvl(g_tc_aa(tc).passes,0) + 1; - when 'FAIL' then - g_tc_aa(tc).failures := nvl(g_tc_aa(tc).failures,0) + 1; - when 'ERR' then - g_tc_aa(tc).errors := nvl(g_tc_aa(tc).errors,0) + 1; - -- No need to check "ELSE" because it would have been caught above - end case; - g_tc_aa(tc).min_interval_msecs := least(nvl(g_tc_aa(tc).min_interval_msecs,999999999) - ,in_results_rec.interval_msecs); - g_tc_aa(tc).max_interval_msecs := greatest(nvl(g_tc_aa(tc).max_interval_msecs,0) - ,in_results_rec.interval_msecs); - g_tc_aa(tc).tot_interval_msecs := nvl(g_tc_aa(tc).tot_interval_msecs,0) + - in_results_rec.interval_msecs; - end if; -end add_result; - -$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ -$THEN - procedure t_add_result - is - l_tc_aaSAVE tc_aa_type; - l_recSAVE wt_test_run_stats%ROWTYPE; - l_tc_aaTEST tc_aa_type; - l_recTEST wt_test_run_stats%ROWTYPE; - l_resultTEST wt_results%ROWTYPE; - l_sqlerrm varchar2(4000); - begin - -------------------------------------- WTPLSQL Testing -- - -- Overview: - -- 1) Save results in temporary variables - -- 2) Clear ADD_RESULT variables - -- 3) Call ADD_RESULT several times with test data. - -- 4) Capture test results - -- 5) Restore saved results - -- 6) Confirm the test results using WT_ASSERT. - -------------------------------------- WTPLSQL Testing -- - l_tc_aaSAVE := g_tc_aa; - l_recSAVE := g_rec; - g_tc_aa := l_tc_aaTEST; - g_rec := l_recTEST; - l_resultTEST.test_run_id := -10; - l_resultTEST.interval_msecs := 10; - l_resultTEST.status := 'PASS'; - l_resultTEST.testcase := 'TESTCASE1'; - add_result(l_resultTEST); - -------------------------------------- WTPLSQL Testing -- - l_resultTEST.interval_msecs := 20; - l_resultTEST.status := 'FAIL'; - l_resultTEST.testcase := 'TESTCASE1'; - add_result(l_resultTEST); - l_resultTEST.interval_msecs := 30; - l_resultTEST.status := 'ERR'; - l_resultTEST.testcase := 'TESTCASE1'; - add_result(l_resultTEST); - -------------------------------------- WTPLSQL Testing -- - l_resultTEST.interval_msecs := 40; - l_resultTEST.status := 'ABC'; - l_resultTEST.testcase := 'TESTCASE1'; - begin - add_result(l_resultTEST); - l_sqlerrm := SQLERRM; - exception when others then - l_sqlerrm := SQLERRM; - end; - -------------------------------------- WTPLSQL Testing -- - l_tc_aaTEST := g_tc_aa; - l_recTEST := g_rec; - g_tc_aa := l_tc_aaSAVE; - g_rec := l_recSAVE; - wt_assert.g_testcase := 'Add Result Testing'; - wt_assert.eq ( - msg_in => 'Add Result Sad Path 1', - check_this_in => 'ORA-20010: Unknown Result status "ABC"', - against_this_in => l_sqlerrm); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.test_run_id', - check_this_in => l_recTEST.test_run_id, - against_this_in => -10); - wt_assert.eq ( - msg_in => 'l_recTEST.asserts', - check_this_in => l_recTEST.asserts, - against_this_in => 3); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.passes', - check_this_in => l_recTEST.passes, - against_this_in => 1); - wt_assert.eq ( - msg_in => 'l_recTEST.failures', - check_this_in => l_recTEST.failures, - against_this_in => 1); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.errors', - check_this_in => l_recTEST.errors, - against_this_in => 1); - wt_assert.eq ( - msg_in => 'l_recTEST.min_interval_msecs', - check_this_in => l_recTEST.min_interval_msecs, - against_this_in => 10); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.max_interval_msecs', - check_this_in => l_recTEST.max_interval_msecs, - against_this_in => 30); - wt_assert.eq ( - msg_in => 'l_recTEST.tot_interval_msecs', - check_this_in => l_recTEST.tot_interval_msecs, - against_this_in => 60); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_tc_aaTEST(''TESTCASE1'').test_run_id', - check_this_in => l_tc_aaTEST('TESTCASE1').test_run_id, - against_this_in => -10); - wt_assert.eq ( - msg_in => 'l_tc_aaTEST(''TESTCASE1'').asserts', - check_this_in => l_tc_aaTEST('TESTCASE1').asserts, - against_this_in => 3); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_tc_aaTEST(''TESTCASE1'').passes', - check_this_in => l_tc_aaTEST('TESTCASE1').passes, - against_this_in => 1); - wt_assert.eq ( - msg_in => 'l_tc_aaTEST(''TESTCASE1'').failures', - check_this_in => l_tc_aaTEST('TESTCASE1').failures, - against_this_in => 1); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_tc_aaTEST(''TESTCASE1'').errors', - check_this_in => l_tc_aaTEST('TESTCASE1').errors, - against_this_in => 1); - wt_assert.eq ( - msg_in => 'l_tc_aaTEST(''TESTCASE1'').min_interval_msecs', - check_this_in => l_tc_aaTEST('TESTCASE1').min_interval_msecs, - against_this_in => 10); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_tc_aaTEST(''TESTCASE1'').max_interval_msecs', - check_this_in => l_tc_aaTEST('TESTCASE1').max_interval_msecs, - against_this_in => 30); - wt_assert.eq ( - msg_in => 'l_tc_aaTEST(''TESTCASE1'').tot_interval_msecs', - check_this_in => l_tc_aaTEST('TESTCASE1').tot_interval_msecs, - against_this_in => 60); - end t_add_result; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- - - ------------------------------------------------------------- -procedure add_profile - (in_dbout_profiles_rec in wt_dbout_profiles%ROWTYPE) -is -begin - -- If this raises an exception, it must be done before any other values - -- are set because they will not be rolled-back after the "raise". - case in_dbout_profiles_rec.status - when 'EXEC' then - g_rec.executed_lines := nvl(g_rec.executed_lines,0) + 1; - -- Only count the executed time. - g_rec.min_executed_usecs := least(nvl(g_rec.min_executed_usecs,999999999) - ,in_dbout_profiles_rec.min_usecs); - g_rec.max_executed_usecs := greatest(nvl(g_rec.max_executed_usecs,0) - ,in_dbout_profiles_rec.max_usecs); - g_rec.tot_executed_usecs := nvl(g_rec.tot_executed_usecs,0) + - ( in_dbout_profiles_rec.total_usecs / - in_dbout_profiles_rec.total_occur ); - when 'IGNR' then - g_rec.ignored_lines := nvl(g_rec.ignored_lines,0) + 1; - when 'EXCL' then - g_rec.excluded_lines := nvl(g_rec.excluded_lines,0) + 1; - when 'NOTX' then - g_rec.notexec_lines := nvl(g_rec.notexec_lines,0) + 1; - when 'UNKN' then - g_rec.unknown_lines := nvl(g_rec.unknown_lines,0) + 1; - else - raise_application_error(-20011, 'Unknown Profile status "' || - in_dbout_profiles_rec.status || '"'); - end case; - g_rec.test_run_id := in_dbout_profiles_rec.test_run_id; - g_rec.profiled_lines := nvl(g_rec.profiled_lines,0) + 1; -end add_profile; - -$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ -$THEN - procedure t_add_profile - is - l_recSAVE wt_test_run_stats%ROWTYPE; - l_recTEST wt_test_run_stats%ROWTYPE; - l_profileTEST wt_dbout_profiles%ROWTYPE; - l_sqlerrm varchar2(4000); - begin - -------------------------------------- WTPLSQL Testing -- - -- Overview: - -- 1) Save results in temporary variables - -- 2) Clear ADD_PROFILE variables - -- 3) Call ADD_PROFILE several times with test data. - -- 4) Capture test results - -- 5) Restore saved results - -- 6) Confirm the test results using WT_ASSERT. - -------------------------------------- WTPLSQL Testing -- - l_recSAVE := g_rec; - g_rec := l_recTEST; - l_profileTEST.test_run_id := -20; - l_profileTEST.min_usecs := 10; - l_profileTEST.max_usecs := 20; - l_profileTEST.total_usecs := 30; - l_profileTEST.total_occur := 1; - l_profileTEST.status := 'EXEC'; - add_profile(l_profileTEST); - l_profileTEST.status := 'EXEC'; - add_profile(l_profileTEST); - -------------------------------------- WTPLSQL Testing -- - l_profileTEST.status := 'EXEC'; - add_profile(l_profileTEST); - l_profileTEST.status := 'EXEC'; - add_profile(l_profileTEST); - l_profileTEST.status := 'EXEC'; - add_profile(l_profileTEST); - l_profileTEST.status := 'IGNR'; - add_profile(l_profileTEST); - l_profileTEST.status := 'IGNR'; - add_profile(l_profileTEST); - -------------------------------------- WTPLSQL Testing -- - l_profileTEST.status := 'IGNR'; - add_profile(l_profileTEST); - l_profileTEST.status := 'IGNR'; - add_profile(l_profileTEST); - l_profileTEST.status := 'NOTX'; - add_profile(l_profileTEST); - l_profileTEST.status := 'NOTX'; - add_profile(l_profileTEST); - l_profileTEST.status := 'NOTX'; - add_profile(l_profileTEST); - -------------------------------------- WTPLSQL Testing -- - l_profileTEST.status := 'EXCL'; - add_profile(l_profileTEST); - l_profileTEST.status := 'EXCL'; - add_profile(l_profileTEST); - l_profileTEST.status := 'UNKN'; - add_profile(l_profileTEST); - -------------------------------------- WTPLSQL Testing -- - l_profileTEST.status := 'ABC'; - begin - add_profile(l_profileTEST); - l_sqlerrm := SQLERRM; - exception when others then - l_sqlerrm := SQLERRM; - end; - l_recTEST := g_rec; - g_rec := l_recSAVE; - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Add Profile Testing'; - wt_assert.eq ( - msg_in => 'l_recTEST.test_run_id', - check_this_in => l_recTEST.test_run_id, - against_this_in => -20); - wt_assert.eq ( - msg_in => 'l_recTEST.profiled_lines', - check_this_in => l_recTEST.profiled_lines, - against_this_in => 15); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.min_executed_usecs', - check_this_in => l_recTEST.min_executed_usecs, - against_this_in => 10); - wt_assert.eq ( - msg_in => 'l_recTEST.max_executed_usecs', - check_this_in => l_recTEST.max_executed_usecs, - against_this_in => 20); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.tot_executed_usecs', - check_this_in => l_recTEST.tot_executed_usecs, - against_this_in => 150); - wt_assert.eq ( - msg_in => 'l_recTEST.executed_lines', - check_this_in => l_recTEST.executed_lines, - against_this_in => 5); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.ignored_lines', - check_this_in => l_recTEST.ignored_lines, - against_this_in => 4); - wt_assert.eq ( - msg_in => 'l_recTEST.notexec_lines', - check_this_in => l_recTEST.notexec_lines, - against_this_in => 3); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.excluded_lines', - check_this_in => l_recTEST.excluded_lines, - against_this_in => 2); - wt_assert.eq ( - msg_in => 'l_recTEST.unknown_lines', - check_this_in => l_recTEST.unknown_lines, - against_this_in => 1); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'Add Result Sad Path 1', - check_this_in => 'ORA-20011: Unknown Profile status "ABC"', - against_this_in => l_sqlerrm); - end t_add_profile; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- - - ------------------------------------------------------------- -procedure finalize -is - PRAGMA AUTONOMOUS_TRANSACTION; - l_executable_lines number; - tc varchar2(50); -begin - if g_rec.test_run_id is null - then - initialize; - return; - end if; - g_rec.testcases := g_tc_aa.COUNT; - g_rec.asserts := nvl(g_rec.asserts ,0); - g_rec.passes := nvl(g_rec.passes ,0); - g_rec.failures := nvl(g_rec.failures,0); - g_rec.errors := nvl(g_rec.errors ,0); - if g_rec.asserts != 0 - then - g_rec.test_yield := round(g_rec.passes/g_rec.asserts, 3); - g_rec.avg_interval_msecs := round(g_rec.tot_interval_msecs/g_rec.asserts, 3); - end if; - if g_rec.profiled_lines is not null - then - g_rec.executed_lines := nvl(g_rec.executed_lines ,0); - g_rec.ignored_lines := nvl(g_rec.ignored_lines,0); - g_rec.excluded_lines := nvl(g_rec.excluded_lines ,0); - g_rec.notexec_lines := nvl(g_rec.notexec_lines ,0); - g_rec.unknown_lines := nvl(g_rec.unknown_lines ,0); - l_executable_lines := g_rec.executed_lines + g_rec.notexec_lines; - if l_executable_lines != 0 - then - g_rec.code_coverage := round(g_rec.executed_lines/l_executable_lines, 3); - g_rec.avg_executed_usecs := round(g_rec.tot_executed_usecs/l_executable_lines, 3); - end if; - end if; - insert into wt_test_run_stats values g_rec; - if g_rec.testcases > 0 - then - tc := g_tc_aa.FIRST; - loop - g_tc_aa(tc).asserts := nvl(g_tc_aa(tc).asserts ,0); - g_tc_aa(tc).passes := nvl(g_tc_aa(tc).passes ,0); - g_tc_aa(tc).failures := nvl(g_tc_aa(tc).failures,0); - g_tc_aa(tc).errors := nvl(g_tc_aa(tc).errors ,0); - if g_rec.asserts != 0 - then - g_tc_aa(tc).test_yield := round(g_tc_aa(tc).passes / - g_tc_aa(tc).asserts, 3); - g_tc_aa(tc).avg_interval_msecs := round(g_tc_aa(tc).tot_interval_msecs / - g_tc_aa(tc).asserts, 3); - end if; - insert into wt_testcase_stats values g_tc_aa(tc); - exit when tc = g_tc_aa.LAST; - tc := g_tc_aa.NEXT(tc); - end loop; - end if; - COMMIT; - initialize; -end finalize; - -$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ -$THEN - procedure t_finalize - is - l_tc_aaSAVE tc_aa_type; - l_recSAVE wt_test_run_stats%ROWTYPE; - l_tc_aaTEST tc_aa_type; - l_recTEST wt_test_run_stats%ROWTYPE; - l_recNULL wt_test_run_stats%ROWTYPE; - l_tstat_rec wt_testcase_stats%ROWTYPE; - l_test_run_id number := -102; - l_tc varchar2(50) := 'TC2'; - l_sql_txt varchar2(4000); - l_sqlerrm varchar2(4000); - -------------------------------------- WTPLSQL Testing -- - procedure run_finalize (in_msg_txt in varchar2) is begin - l_tc_aaSAVE := g_tc_aa; - l_recSAVE := g_rec; - g_tc_aa := l_tc_aaTEST; - g_rec := l_recTEST; - begin - finalize; - l_sqlerrm := SQLERRM; - exception when others then - l_sqlerrm := SQLERRM; - end; - -------------------------------------- WTPLSQL Testing -- - l_tc_aaTEST := g_tc_aa; - l_recTEST := g_rec; - g_tc_aa := l_tc_aaSAVE; - g_rec := l_recSAVE; - wt_assert.eq ( - msg_in => in_msg_txt, - check_this_in => l_sqlerrm, - against_this_in => 'ORA-0000: normal, successful completion'); - end run_finalize; - begin - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'FINALIZE Happy Path Setup'; - l_sql_txt := 'insert into WT_TEST_RUNS' || - ' (id, start_dtm, runner_owner, runner_name)' || - ' values (' || l_test_run_id || ', sysdate, USER, ''TESTRUNNER3'')'; - wt_assert.raises ( - msg_in => 'Insert WT_TEST_RUNS Record', - check_call_in => l_sql_txt, - against_exc_in => ''); - commit; - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'FINALIZE Happy Path 1'; - l_tc_aaTEST.delete; - l_recTEST := l_recNULL; - l_recTEST.test_run_id := l_test_run_id; - run_finalize('Run Finalize for Happy Path 1'); -- AUTONOMOUS COMMIT - -------------------------------------- WTPLSQL Testing -- - begin - select * into l_recTEST - from WT_TEST_RUN_STATS - where test_run_id = l_test_run_id; - l_sqlerrm := SQLERRM; - exception when others then - l_sqlerrm := SQLERRM; - end; - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'Retieve WT_TEST_RUN_STATS record', - check_this_in => l_sqlerrm, - against_this_in => 'ORA-0000: normal, successful completion'); - wt_assert.eq ( - msg_in => 'l_recTEST.test_run_id', - check_this_in => l_recTEST.test_run_id, - against_this_in => l_test_run_id); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'l_recTEST.test_yield', - check_this_in => l_recTEST.test_yield); - wt_assert.eq ( - msg_in => 'l_recTEST.asserts', - check_this_in => l_recTEST.asserts, - against_this_in => 0); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.passes', - check_this_in => l_recTEST.passes, - against_this_in => 0); - wt_assert.eq ( - msg_in => 'l_recTEST.failures', - check_this_in => l_recTEST.failures, - against_this_in => 0); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.errors', - check_this_in => l_recTEST.errors, - against_this_in => 0); - wt_assert.eq ( - msg_in => 'l_recTEST.testcases', - check_this_in => l_recTEST.testcases, - against_this_in => 0); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'l_recTEST.min_interval_msecs', - check_this_in => l_recTEST.min_interval_msecs); - wt_assert.isnull ( - msg_in => 'l_recTEST.avg_interval_msecs', - check_this_in => l_recTEST.avg_interval_msecs); - wt_assert.isnull ( - msg_in => 'l_recTEST.max_interval_msecs', - check_this_in => l_recTEST.max_interval_msecs); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'l_recTEST.tot_interval_msecs', - check_this_in => l_recTEST.tot_interval_msecs); - wt_assert.isnull ( - msg_in => 'l_recTEST.code_coverage', - check_this_in => l_recTEST.code_coverage); - wt_assert.isnull ( - msg_in => 'l_recTEST.profiled_lines', - check_this_in => l_recTEST.profiled_lines); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'l_recTEST.executed_lines', - check_this_in => l_recTEST.executed_lines); - wt_assert.isnull ( - msg_in => 'l_recTEST.ignored_lines', - check_this_in => l_recTEST.ignored_lines); - wt_assert.isnull ( - msg_in => 'l_recTEST.excluded_lines', - check_this_in => l_recTEST.excluded_lines); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'l_recTEST.notexec_lines', - check_this_in => l_recTEST.notexec_lines); - wt_assert.isnull ( - msg_in => 'l_recTEST.unknown_lines', - check_this_in => l_recTEST.unknown_lines); - wt_assert.isnull ( - msg_in => 'l_recTEST.avg_executed_usecs', - check_this_in => l_recTEST.avg_executed_usecs); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eqqueryvalue ( - msg_in => 'There should be no WT_TESTCASE_STATS records', - check_query_in => 'select count(*) from WT_TESTCASE_STATS' || - ' where test_run_id = ' || l_test_run_id, - against_value_in => 0); - -------------------------------------- WTPLSQL Testing -- - wt_assert.raises ( - msg_in => 'Delete WT_TEST_RUN_STATS Record', - check_call_in => 'delete from WT_TEST_RUN_STATS where test_run_id = ' || - l_test_run_id, - against_exc_in => ''); - commit; - wt_assert.eqqueryvalue ( - msg_in => 'There should be no WT_TEST_RUN_STATS records', - check_query_in => 'select count(*) from WT_TEST_RUN_STATS' || - ' where test_run_id = ' || l_test_run_id, - against_value_in => 0); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'FINALIZE Happy Path 2'; - l_tc_aaTEST.delete; - l_tc_aaTEST(l_tc||'a').test_run_id := l_test_run_id; - l_tc_aaTEST(l_tc||'a').testcase := l_tc||'a'; - l_tc_aaTEST(l_tc||'a').asserts := 3; - l_tc_aaTEST(l_tc||'a').passes := 2; - l_tc_aaTEST(l_tc||'a').failures := 1; - --l_tc_aaTEST(l_tc||'a').errors := null; - l_tc_aaTEST(l_tc||'a').tot_interval_msecs := 300; - -------------------------------------- WTPLSQL Testing -- - l_tc_aaTEST(l_tc||'b').test_run_id := l_test_run_id; - l_tc_aaTEST(l_tc||'b').testcase := l_tc||'b'; - l_tc_aaTEST(l_tc||'b').asserts := 3; - l_tc_aaTEST(l_tc||'b').passes := 2; - l_tc_aaTEST(l_tc||'b').failures := 1; - --l_tc_aaTEST(l_tc||'b').errors := null; - l_tc_aaTEST(l_tc||'b').tot_interval_msecs := 300; - -------------------------------------- WTPLSQL Testing -- - l_recTEST := l_recNULL; - l_recTEST.test_run_id := l_test_run_id; - l_recTEST.asserts := 6; - l_recTEST.passes := 4; - l_recTEST.failures := 2; - --l_recTEST.errors := null; - l_recTEST.tot_interval_msecs := 600; - -------------------------------------- WTPLSQL Testing -- - l_recTEST.profiled_lines := 20; - l_recTEST.executed_lines := 8; - l_recTEST.ignored_lines := 6; - l_recTEST.excluded_lines := 4; - l_recTEST.notexec_lines := 2; - --l_recTEST.unknown_lines := null; - l_recTEST.tot_executed_usecs := 2000; - run_finalize('Run Finalize for Happy Path 2'); -- AUTONOMOUS COMMIT - -------------------------------------- WTPLSQL Testing -- - begin - select * into l_tstat_rec - from WT_TESTCASE_STATS - where test_run_id = l_test_run_id - and testcase = l_tc||'a'; - l_sqlerrm := SQLERRM; - exception when others then - l_sqlerrm := SQLERRM; - end; - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'Retieve WT_TESTCASE_STATS record', - check_this_in => l_sqlerrm, - against_this_in => 'ORA-0000: normal, successful completion'); - wt_assert.eq ( - msg_in => 'l_tstat_rec.test_run_id', - check_this_in => l_tstat_rec.test_run_id, - against_this_in => l_test_run_id); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_tstat_rec.testcase', - check_this_in => l_tstat_rec.testcase, - against_this_in => l_tc||'a'); - wt_assert.eq ( - msg_in => 'l_tstat_rec.asserts', - check_this_in => l_tstat_rec.asserts, - against_this_in => 3); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_tstat_rec.passes', - check_this_in => l_tstat_rec.passes, - against_this_in => 2); - wt_assert.eq ( - msg_in => 'l_tstat_rec.failures', - check_this_in => l_tstat_rec.failures, - against_this_in => 1); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_tstat_rec.errors', - check_this_in => l_tstat_rec.errors, - against_this_in => 0); - wt_assert.eq ( - msg_in => 'l_tstat_rec.test_yield', - check_this_in => l_tstat_rec.test_yield, - against_this_in => 0.667); - wt_assert.eq ( - msg_in => 'l_tstat_rec.avg_interval_msecs', - check_this_in => l_tstat_rec.avg_interval_msecs, - against_this_in => 100); - -------------------------------------- WTPLSQL Testing -- - begin - select * into l_tstat_rec - from WT_TESTCASE_STATS - where test_run_id = l_test_run_id - and testcase = l_tc||'b'; - l_sqlerrm := SQLERRM; - exception when others then - l_sqlerrm := SQLERRM; - end; - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'Retieve WT_TESTCASE_STATS record', - check_this_in => l_sqlerrm, - against_this_in => 'ORA-0000: normal, successful completion'); - wt_assert.eq ( - msg_in => 'l_tstat_rec.test_run_id', - check_this_in => l_tstat_rec.test_run_id, - against_this_in => l_test_run_id); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_tstat_rec.testcase', - check_this_in => l_tstat_rec.testcase, - against_this_in => l_tc||'b'); - wt_assert.eq ( - msg_in => 'l_tstat_rec.asserts', - check_this_in => l_tstat_rec.asserts, - against_this_in => 3); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_tstat_rec.passes', - check_this_in => l_tstat_rec.passes, - against_this_in => 2); - wt_assert.eq ( - msg_in => 'l_tstat_rec.failures', - check_this_in => l_tstat_rec.failures, - against_this_in => 1); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_tstat_rec.errors', - check_this_in => l_tstat_rec.errors, - against_this_in => 0); - wt_assert.eq ( - msg_in => 'l_tstat_rec.test_yield', - check_this_in => l_tstat_rec.test_yield, - against_this_in => 0.667); - wt_assert.eq ( - msg_in => 'l_tstat_rec.avg_interval_msecs', - check_this_in => l_tstat_rec.avg_interval_msecs, - against_this_in => 100); - -------------------------------------- WTPLSQL Testing -- - begin - select * into l_recTEST - from WT_TEST_RUN_STATS - where test_run_id = l_test_run_id; - l_sqlerrm := SQLERRM; - exception when others then - l_sqlerrm := SQLERRM; - end; - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'Retieve WT_TEST_RUN_STATS record', - check_this_in => l_sqlerrm, - against_this_in => 'ORA-0000: normal, successful completion'); - wt_assert.eq ( - msg_in => 'l_recTEST.test_run_id', - check_this_in => l_recTEST.test_run_id, - against_this_in => l_test_run_id); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.test_yield', - check_this_in => l_recTEST.test_yield, - against_this_in => 0.667); - wt_assert.eq ( - msg_in => 'l_recTEST.asserts', - check_this_in => l_recTEST.asserts, - against_this_in => 6); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.passes', - check_this_in => l_recTEST.passes, - against_this_in => 4); - wt_assert.eq ( - msg_in => 'l_recTEST.failures', - check_this_in => l_recTEST.failures, - against_this_in => 2); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.errors', - check_this_in => l_recTEST.errors, - against_this_in => 0); - wt_assert.eq ( - msg_in => 'l_recTEST.testcases', - check_this_in => l_recTEST.testcases, - against_this_in => 2); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.avg_interval_msecs', - check_this_in => l_recTEST.avg_interval_msecs, - against_this_in => 100); - wt_assert.eq ( - msg_in => 'l_recTEST.code_coverage', - check_this_in => l_recTEST.code_coverage, - against_this_in => 0.8); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.profiled_lines', - check_this_in => l_recTEST.profiled_lines, - against_this_in => 20); - wt_assert.eq ( - msg_in => 'l_recTEST.executed_lines', - check_this_in => l_recTEST.executed_lines, - against_this_in => 8); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.ignored_lines', - check_this_in => l_recTEST.ignored_lines, - against_this_in => 6); - wt_assert.eq ( - msg_in => 'l_recTEST.excluded_lines', - check_this_in => l_recTEST.excluded_lines, - against_this_in => 4); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.notexec_lines', - check_this_in => l_recTEST.notexec_lines, - against_this_in => 2); - wt_assert.eq ( - msg_in => 'l_recTEST.unknown_lines', - check_this_in => l_recTEST.unknown_lines, - against_this_in => 0); - wt_assert.eq ( - msg_in => 'l_recTEST.avg_executed_usecs', - check_this_in => l_recTEST.avg_executed_usecs, - against_this_in => 200); - -------------------------------------- WTPLSQL Testing -- - wt_assert.raises ( - msg_in => 'Delete WT_TESTCASE_STATS Record', - check_call_in => 'delete from WT_TESTCASE_STATS where test_run_id = ' || - l_test_run_id, - against_exc_in => ''); - commit; - wt_assert.eqqueryvalue ( - msg_in => 'There should be no WT_TESTCASE_STATS records', - check_query_in => 'select count(*) from WT_TESTCASE_STATS' || - ' where test_run_id = ' || l_test_run_id, - against_value_in => 0); - -------------------------------------- WTPLSQL Testing -- - wt_assert.raises ( - msg_in => 'Delete WT_TEST_RUN_STATS Record', - check_call_in => 'delete from WT_TEST_RUN_STATS where test_run_id = ' || - l_test_run_id, - against_exc_in => ''); - commit; - wt_assert.eqqueryvalue ( - msg_in => 'There should be no WT_TEST_RUN_STATS records', - check_query_in => 'select count(*) from WT_TEST_RUN_STATS' || - ' where test_run_id = ' || l_test_run_id, - against_value_in => 0); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'FINALIZE Sad Path 1'; - l_tc_aaTEST.delete; - l_recTEST := l_recNULL; - l_recTEST.asserts := 2; - run_finalize('Run Finalize for Sad Path 1'); -- AUTONOMOUS COMMIT - wt_assert.isnull ( - msg_in => 'l_recTEST.test_run_id', - check_this_in => l_recTEST.test_run_id); - wt_assert.isnull ( - msg_in => 'l_recTEST.asserts', - check_this_in => l_recTEST.asserts); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'FINALIZE Happy Path Teardown'; - wt_assert.raises ( - msg_in => 'Delete WT_TEST_RUNS Record', - check_call_in => 'delete from WT_TEST_RUNS where id = ' || - l_test_run_id, - against_exc_in => ''); - commit; - end t_finalize; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- - - ------------------------------------------------------------- -procedure delete_records - (in_test_run_id in number) -is -begin - delete from wt_testcase_stats - where test_run_id = in_test_run_id; - delete from wt_test_run_stats - where test_run_id = in_test_run_id; -end delete_records; - -$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ -$THEN - procedure t_delete_records - is - l_test_run_id number := -100; - l_sql_txt varchar2(4000); - begin - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Delete Records Happy Path Setup'; - l_sql_txt := 'insert into WT_TEST_RUNS' || - ' (id, start_dtm, runner_owner, runner_name)' || - ' values (' || l_test_run_id || ', sysdate, USER, ''TESTRUNNER2'')'; - wt_assert.raises ( - msg_in => 'Insert WT_TEST_RUNS Record', - check_call_in => l_sql_txt, - against_exc_in => ''); - -------------------------------------- WTPLSQL Testing -- - l_sql_txt := 'insert into WT_TEST_RUN_STATS (test_run_id) values (' || - l_test_run_id || ')'; - wt_assert.raises ( - msg_in => 'Insert WT_TEST_RUN_STATS Record', - check_call_in => l_sql_txt, - against_exc_in => ''); - l_sql_txt := 'insert into WT_TESTCASE_STATS (test_run_id, testcase)' || - ' values (' || l_test_run_id || ', ''TESTCASE2'')'; - wt_assert.raises ( - msg_in => 'Insert WT_TESTCASE_STATS Record', - check_call_in => l_sql_txt, - against_exc_in => ''); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Delete Records Happy Path and Teardown'; - wt_assert.raises ( - msg_in => 'Delete Records with NULL ID', - check_call_in => 'begin wt_test_run_stat.delete_records(' || - l_test_run_id || '); end;', - against_exc_in => ''); - wt_assert.raises ( - msg_in => 'Delete WT_TEST_RUNS Record', - check_call_in => 'delete from WT_TEST_RUNS where id = ' || l_test_run_id, - against_exc_in => ''); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Delete Records Test Sad Paths'; - wt_assert.raises ( - msg_in => 'Delete Records with NULL ID', - check_call_in => 'begin wt_test_run_stat.delete_records(null); end;', - against_exc_in => ''); - wt_assert.raises ( - msg_in => 'Delete Records with Invalid ID', - check_call_in => 'begin wt_test_run_stat.delete_records(-0.01); end;', - against_exc_in => ''); - end t_delete_records; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- - - ---==============================================================-- -$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ -$THEN - procedure WTPLSQL_RUN --% WTPLSQL SET DBOUT "WT_TEST_RUN_STAT:PACKAGE BODY" %-- - is - begin - t_initialize; - t_add_result; - t_add_profile; - t_finalize; - t_delete_records; - end WTPLSQL_RUN; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- ---==============================================================-- - - -end wt_test_run_stat; diff --git a/src/core/wt_test_run_stat.pks b/src/core/wt_test_run_stat.pks deleted file mode 100644 index 3538cde..0000000 --- a/src/core/wt_test_run_stat.pks +++ /dev/null @@ -1,28 +0,0 @@ -create or replace package wt_test_run_stat authid definer -as - - procedure initialize; - - procedure add_result - (in_results_rec in wt_results%ROWTYPE); - - procedure add_profile - (in_dbout_profiles_rec in wt_dbout_profiles%ROWTYPE); - - procedure finalize; - - procedure delete_records - (in_test_run_id in number); - - -- WtPLSQL Self Test Procedures - -- - -- alter system set PLSQL_CCFLAGS = - -- 'WTPLSQL_SELFTEST:TRUE' - -- scope=BOTH; - -- - $IF $$WTPLSQL_SELFTEST - $THEN - procedure WTPLSQL_RUN; - $END - -end wt_test_run_stat; diff --git a/src/core/wt_test_run_stats.tab b/src/core/wt_test_run_stats.tab deleted file mode 100644 index 988bc6b..0000000 --- a/src/core/wt_test_run_stats.tab +++ /dev/null @@ -1,59 +0,0 @@ - --- --- Test Runs Statistics Table Installation --- - -create table wt_test_run_stats - (test_run_id number(38) constraint wt_test_run_stats_nn1 not null - ,test_yield number - ,asserts number - ,passes number - ,failures number - ,errors number - ,testcases number - ,min_interval_msecs number - ,avg_interval_msecs number - ,max_interval_msecs number - ,tot_interval_msecs number - ,code_coverage number - ,profiled_lines number - ,executed_lines number - ,ignored_lines number - ,excluded_lines number - ,notexec_lines number - ,unknown_lines number - ,min_executed_usecs number - ,avg_executed_usecs number - ,max_executed_usecs number - ,tot_executed_usecs number - ,constraint wt_test_run_stats_pk primary key (test_run_id) - ,constraint wt_test_run_stats_fk1 foreign key (test_run_id) - references wt_test_runs (id) - ) pctfree 0; - -comment on table wt_test_run_stats is 'Test Run data statistics for each execution of the WTPLSQL_RUN procedure.'; -comment on column wt_test_run_stats.test_run_id is 'Primary (Surrogate) Key for each Test Run. Also the Test Runs foreign key.'; -comment on column wt_test_run_stats.test_yield is 'Ratio of successful assertions to total assertions.'; -comment on column wt_test_run_stats.asserts is 'Total number of assetions.'; -comment on column wt_test_run_stats.passes is 'Number of passed assertions.'; -comment on column wt_test_run_stats.failures is 'Number of failed assertions.'; -comment on column wt_test_run_stats.errors is 'Number of errored assertions.'; -comment on column wt_test_run_stats.testcases is 'Total number of test cases.'; -comment on column wt_test_run_stats.min_interval_msecs is 'Minimum interval time between assertions in milliseconds'; -comment on column wt_test_run_stats.avg_interval_msecs is 'Average interval time between assertions in milliseconds'; -comment on column wt_test_run_stats.max_interval_msecs is 'Maximum interval time between assertions in milliseconds'; -comment on column wt_test_run_stats.tot_interval_msecs is 'Total (Sum) of interval times between assertions in milliseconds'; -comment on column wt_test_run_stats.code_coverage is 'Ratio of execute source lines to valid executable source lines.'; -comment on column wt_test_run_stats.profiled_lines is 'Total number of source lines as counted by DBMS_PROFILER'; -comment on column wt_test_run_stats.executed_lines is 'Number of source lines executed'; -comment on column wt_test_run_stats.ignored_lines is 'Number of source lines ignored as uncountable'; -comment on column wt_test_run_stats.excluded_lines is 'Number of source lines excluded due to unexplained DBMS_PROFILER metrics'; -comment on column wt_test_run_stats.notexec_lines is 'Number of source lines not execute'; -comment on column wt_test_run_stats.unknown_lines is 'Number of source lines that have unexplained DBMS_PROFILER metrics'; -comment on column wt_test_run_stats.min_executed_usecs is 'Minumum execution time for a line of source in microseconds'; -comment on column wt_test_run_stats.avg_executed_usecs is 'Average execution time for a line of source in microseconds'; -comment on column wt_test_run_stats.max_executed_usecs is 'Maximum execution time for a line of source in microseconds'; -comment on column wt_test_run_stats.tot_executed_usecs is 'Total (Sum) of execution times for a line of source in microseconds'; - -grant select on wt_test_run_stats to public; -grant delete on wt_test_run_stats to public; diff --git a/src/core/wt_test_runs.tab b/src/core/wt_test_runs.tab deleted file mode 100644 index e2c7bfa..0000000 --- a/src/core/wt_test_runs.tab +++ /dev/null @@ -1,47 +0,0 @@ - --- --- Test Runs Table Installation --- - -create sequence wt_test_runs_seq; - -grant select on wt_test_runs_seq to public; - - -create table wt_test_runs - (id number(38) constraint wt_test_runs_nn1 not null - ,start_dtm timestamp constraint wt_test_runs_nn2 not null - ,runner_name varchar2(128) constraint wt_test_runs_nn3 not null - ,runner_owner varchar2(128) constraint wt_test_runs_nn4 not null - ,dbout_owner varchar2(128) - ,dbout_name varchar2(128) - ,dbout_type varchar2(20) - ,trigger_offset number - ,profiler_runid number - ,end_dtm timestamp - ,error_message varchar2(4000) - ,constraint wt_test_runs_pk primary key (id) - ,constraint wt_test_runs_nk1 unique (start_dtm, runner_name, runner_owner) - ,constraint wt_test_runs_fk1 foreign key (profiler_runid) - references plsql_profiler_runs (runid) disable - ) pctfree 0; - -create index wt_test_runs_idx1 - on wt_test_runs (start_dtm); - -comment on table wt_test_runs is 'Test Run data for each execution of the WTPLSQL_RUN procedure.'; -comment on column wt_test_runs.id is 'Primary (Surrogate) Key for each Test Run'; -comment on column wt_test_runs.start_dtm is 'Date/time (and fractional seconds) this Test Run started. Natural Key 1 part 1'; -comment on column wt_test_runs.runner_name is 'Name of the package with the WTPLSQL_RUN procedure. Natural Key 1 part 2'; -comment on column wt_test_runs.runner_owner is 'Owner of the package with the WTPLSQL_RUN procedure. Natural Key 2 part 3'; -comment on column wt_test_runs.end_dtm is 'Date/time (and fractional seconds) this Test Run ended.'; -comment on column wt_test_runs.dbout_owner is 'Optional Owner of the Database Object Under Test (DBOUT).'; -comment on column wt_test_runs.dbout_name is 'Optional Name of the Database Object Under Test (DBOUT).'; -comment on column wt_test_runs.dbout_type is 'Optional Type of the Database Object Under Test (DBOUT).'; -comment on column wt_test_runs.trigger_offset is 'Optional calculated offset from start of Trigger Source to start of Trigger PL/SQL Block.'; -comment on column wt_test_runs.profiler_runid is 'Optional DBMS_PROFILER unique run identifier from plsql_profiler_runnumber sequence'; -comment on column wt_test_runs.error_message is 'Optional Last error messages from this Test Run.'; - -grant select on wt_test_runs to public; -grant insert on wt_test_runs to public; -grant delete on wt_test_runs to public; diff --git a/src/core/wt_testcase_stats.tab b/src/core/wt_testcase_stats.tab deleted file mode 100644 index 8794541..0000000 --- a/src/core/wt_testcase_stats.tab +++ /dev/null @@ -1,37 +0,0 @@ - --- --- Test Runs Statistics Table Installation --- - -create table wt_testcase_stats - (test_run_id number(38) constraint wt_testcase_stats_nn1 not null - ,testcase varchar2(50) constraint wt_testcase_stats_nn2 not null - ,test_yield number - ,asserts number - ,passes number - ,failures number - ,errors number - ,min_interval_msecs number - ,avg_interval_msecs number - ,max_interval_msecs number - ,tot_interval_msecs number - ,constraint wt_testcase_stats_pk primary key (test_run_id, testcase) - ,constraint wt_testcase_stats_fk1 foreign key (test_run_id) - references wt_test_runs (id) - ) pctfree 0; - -comment on table wt_testcase_stats is 'Test Run data statistics for each testcase in the execution of the WTPLSQL_RUN procedure.'; -comment on column wt_testcase_stats.test_run_id is 'Primary (Surrogate) Key for each Test Run. Also the Test Runs Foreign Key.'; -comment on column wt_testcase_stats.testcase is 'Primary Key (part 2). The testcase name'; -comment on column wt_testcase_stats.test_yield is 'Ratio of successful assertions to total assertions.'; -comment on column wt_testcase_stats.asserts is 'Total number of assetions for the testcase.'; -comment on column wt_testcase_stats.passes is 'Number of passed assertions for the testcase.'; -comment on column wt_testcase_stats.failures is 'Number of failed assertions for the testcase.'; -comment on column wt_testcase_stats.errors is 'Number of errored assertions for the testcase.'; -comment on column wt_testcase_stats.min_interval_msecs is 'Minimum interval time between assertions in milliseconds for the testcase'; -comment on column wt_testcase_stats.avg_interval_msecs is 'Average interval time between assertions in milliseconds for the testcase'; -comment on column wt_testcase_stats.max_interval_msecs is 'Maximum interval time between assertions in milliseconds for the testcase'; -comment on column wt_testcase_stats.tot_interval_msecs is 'Total (sum) of interval times between assertions in milliseconds for the testcase'; - -grant select on wt_testcase_stats to public; -grant delete on wt_testcase_stats to public; diff --git a/src/core/wt_text_report.pkb b/src/core/wt_text_report.pkb deleted file mode 100644 index 24fc5b8..0000000 --- a/src/core/wt_text_report.pkb +++ /dev/null @@ -1,351 +0,0 @@ -create or replace package body wt_text_report -as - - g_test_runs_rec wt_test_runs%ROWTYPE; - g_test_run_stats_rec wt_test_run_stats%ROWTYPE; - - ----------------------- --- Private Procedures ----------------------- - ------------------------------------------------------------- -procedure p - (in_text in varchar2) -is -begin - dbms_output.put_line(in_text); -end p; - ------------------------------------------------------------- -procedure result_summary -is -begin - p(' Total Test Cases: ' || to_char(nvl(g_test_run_stats_rec.testcases ,0),'9999999') || - ' Total Assertions: ' || to_char(nvl(g_test_run_stats_rec.asserts ,0),'9999999') ); - p(' Minimum Interval msec: ' || to_char(nvl(g_test_run_stats_rec.min_interval_msecs,0),'9999999') || - ' Failed Assertions: ' || to_char(nvl(g_test_run_stats_rec.failures ,0),'9999999') ); - p(' Average Interval msec: ' || to_char(nvl(g_test_run_stats_rec.avg_interval_msecs,0),'9999999') || - ' Error Assertions: ' || to_char(nvl(g_test_run_stats_rec.errors ,0),'9999999') ); - p(' Maximum Interval msec: ' || to_char(nvl(g_test_run_stats_rec.max_interval_msecs,0),'9999999') || - ' Test Yield: ' || to_char( g_test_run_stats_rec.test_yield * 100 ,'9990.99') || - '%' ); - p(' Total Run Time (sec): ' || to_char(extract(day from (g_test_runs_rec.end_dtm - - g_test_runs_rec.start_dtm)*86400*100)/100 ,'99990.9') ); -end result_summary; - ------------------------------------------------------------- -procedure profile_summary -is -begin - p(' Ignored Lines: ' || to_char(nvl(g_test_run_stats_rec.ignored_lines ,0),'9999999') || - ' Total Profiled Lines: ' || to_char(nvl(g_test_run_stats_rec.profiled_lines ,0),'9999999') ); - p(' Excluded Lines: ' || to_char(nvl(g_test_run_stats_rec.excluded_lines ,0),'9999999') || - ' Total Executed Lines: ' || to_char(nvl(g_test_run_stats_rec.executed_lines ,0),'9999999') ); - p(' Minimum LineExec usec: ' || to_char(nvl(g_test_run_stats_rec.min_executed_usecs,0),'9999999') || - ' Not Executed Lines: ' || to_char(nvl(g_test_run_stats_rec.notexec_lines ,0),'9999999') ); - p(' Average LineExec usec: ' || to_char(nvl(g_test_run_stats_rec.avg_executed_usecs,0),'9999999') || - ' Unknown Lines: ' || to_char(nvl(g_test_run_stats_rec.unknown_lines ,0),'9999999') ); - p(' Maximum LineExec usec: ' || to_char(nvl(g_test_run_stats_rec.max_executed_usecs,0),'9999999') || - ' Code Coverage: ' || to_char( g_test_run_stats_rec.code_coverage * 100 ,'9990.99') || - '%' ); - p(' Trigger Source Offset: ' || to_char( g_test_runs_rec.trigger_offset ,'9999999') ); -end profile_summary; - ------------------------------------------------------------- -procedure summary_out -is -begin - p(''); - p(' wtPLSQL ' || wtplsql.show_version || - ' - Run ID ' || g_test_runs_rec.id || - ': ' || to_char(g_test_runs_rec.start_dtm, g_date_format) || - CHR(10) ); - p(' Test Results for ' || g_test_runs_rec.runner_owner || - '.' || g_test_runs_rec.runner_name ); - result_summary; - if g_test_runs_rec.dbout_name is not null - AND g_test_runs_rec.profiler_runid is null - then - p(''); - p(' Note: ' || g_test_runs_rec.dbout_type || ' ' || - g_test_runs_rec.dbout_owner || '.' || - g_test_runs_rec.dbout_name || ' was not profiled.'); - end if; - if g_test_runs_rec.error_message is not null - then - p(''); - p(' *** Test Runner Error ***'); - p(g_test_runs_rec.error_message); - end if; - ---------------------------------------- - if g_test_runs_rec.profiler_runid is null - then - return; - end if; - p(''); - p(' Code Coverage for ' || g_test_runs_rec.dbout_type || - ' ' || g_test_runs_rec.dbout_owner || - '.' || g_test_runs_rec.dbout_name ); - profile_summary; -end summary_out; - ------------------------------------------------------------- -procedure results_out - (in_show_pass in boolean) -is - l_last_testcase wt_results.testcase%TYPE; - l_show_pass_txt varchar2(1); - header_shown boolean; - procedure l_show_header is begin - p(''); - p(' - ' || g_test_runs_rec.runner_owner || - '.' || g_test_runs_rec.runner_name || - ' Test Result Details (Test Run ID ' || - g_test_runs_rec.id || - ')' ); - p('-----------------------------------------------------------'); - end l_show_header; -begin - if in_show_pass - then - l_show_pass_txt := 'Y'; - else - l_show_pass_txt := 'N'; - end if; - header_shown := FALSE; - for buff in ( - select status - ,interval_msecs - ,testcase - ,assertion - ,details - ,message - from wt_results - where test_run_id = g_test_runs_rec.id - and ( l_show_pass_txt = 'Y' - or status != 'PASS') - order by result_seq ) - loop - if not header_shown - then - l_show_header; - header_shown := TRUE; - end if; - if buff.testcase = l_last_testcase - OR ( buff.testcase is null - AND l_last_testcase is null ) - then - p(format_test_result - (in_assertion => buff.assertion - ,in_status => buff.status - ,in_details => buff.details - ,in_testcase => NULL - ,in_message => buff.message - ,in_interval_msecs => buff.interval_msecs) ); - else - p(format_test_result - (in_assertion => buff.assertion - ,in_status => buff.status - ,in_details => buff.details - ,in_testcase => buff.testcase - ,in_message => buff.message - ,in_interval_msecs => buff.interval_msecs) ); - l_last_testcase := buff.testcase; - end if; - end loop; -end results_out; - ------------------------------------------------------------- -procedure profile_out - (in_show_aux in boolean) -is - l_header_txt CONSTANT varchar2(2000) := - 'Source TotTime MinTime MaxTime ' || chr(10) || - ' Line Stat Occurs (usec) (usec) (usec) Text' || chr(10) || - '------ ---- ------ --------- ------- --------- ------------'; - l_show_aux_txt varchar2(1); - header_shown boolean; - procedure l_show_header is begin - p(''); - p(' - ' || g_test_runs_rec.dbout_owner || - '.' || g_test_runs_rec.dbout_name || - ' ' || g_test_runs_rec.dbout_type || - ' Code Coverage Details (Test Run ID ' || - g_test_runs_rec.id || - ')' ); - end l_show_header; -begin - if g_test_runs_rec.profiler_runid is null - then - return; - end if; - if in_show_aux - then - l_show_aux_txt := 'Y'; - else - l_show_aux_txt := 'N'; - end if; - header_shown := FALSE; - for buff in ( - select line - ,status - ,total_occur - ,total_usecs - ,min_usecs - ,max_usecs - ,text - ,rownum - from wt_dbout_profiles - where test_run_id = g_test_runs_rec.id - and ( l_show_aux_txt = 'Y' - or status not in ('EXEC','IGNR','UNKN','EXCL')) - order by line ) - loop - if not header_shown - then - l_show_header; - p(l_header_txt); - header_shown := TRUE; - end if; - if mod(buff.rownum,25) = 0 - then - p(l_header_txt); - end if; - p(to_char(buff.line,'99999') || - case buff.status when 'NOTX' then '#NOTX#' - else ' ' || rpad(buff.status,4) || ' ' - end || - to_char(buff.total_occur,'99999') || ' ' || - to_char(buff.total_usecs,'99999999') || ' ' || - to_char(buff.min_usecs,'999999') || ' ' || - to_char(buff.max_usecs,'99999999') || ' ' || - replace(buff.text,CHR(10),'') ); - end loop; -end profile_out; - - ---------------------- --- Public Procedures ---------------------- - ------------------------------------------------------------- -function format_test_result - (in_assertion in wt_results.assertion%TYPE - ,in_status in wt_results.status%TYPE - ,in_details in wt_results.details%TYPE - ,in_testcase in wt_results.testcase%TYPE - ,in_message in wt_results.message%TYPE - ,in_interval_msecs in wt_results.interval_msecs%TYPE DEFAULT NULL) - return varchar2 -is - l_out_str varchar2(32000) := ''; -begin - if in_testcase is not null - then - l_out_str := ' ---- Test Case: ' || in_testcase || CHR(10); - end if; - if in_status = wt_assert.C_PASS - then - l_out_str := l_out_str || ' ' || rpad(in_status,4) || ' '; - else - l_out_str := l_out_str || '#' || rpad(in_status,4) || '#'; - end if; - if in_interval_msecs is not null - then - l_out_str := l_out_str || lpad(in_interval_msecs,4) || 'ms '; - end if; - if in_message is not null - then - l_out_str := l_out_str || in_message || '. '; - end if; - l_out_str := l_out_str || in_assertion || ' - '; - if g_single_line_output - then - l_out_str := l_out_str || replace(replace(in_details,CHR(13),'\r'),CHR(10),'\n'); - else - l_out_str := l_out_str || in_details; - end if; - return l_out_str; -end format_test_result; - ------------------------------------------------------------- -procedure ad_hoc_result - (in_assertion in wt_results.assertion%TYPE - ,in_status in wt_results.status%TYPE - ,in_details in wt_results.details%TYPE - ,in_testcase in wt_results.testcase%TYPE - ,in_message in wt_results.message%TYPE) -is -begin - p(format_test_result - (in_assertion => in_assertion - ,in_status => in_status - ,in_details => in_details - ,in_testcase => in_testcase - ,in_message => in_message)); -end ad_hoc_result; - ------------------------------------------------------------- -procedure dbms_out - (in_runner_owner in wt_test_runs.runner_owner%TYPE default USER - ,in_runner_name in wt_test_runs.runner_name%TYPE default null - ,in_detail_level in number default 0 - ,in_summary_last in boolean default FALSE) -is - - cursor c_main(in_test_run_id in number) is - select * from wt_test_run_stats - where test_run_id = in_test_run_id; - g_test_run_statsNULL wt_test_run_stats%ROWTYPE; - -begin - - for buff in ( - select * from wt_test_runs - where ( runner_name, start_dtm) in - (select t2.runner_name, max(t2.start_dtm) - from wt_test_runs t2 - where ( ( in_runner_name is not null - and in_runner_name = t2.runner_name) - OR in_runner_name is null ) - and t2.runner_owner = in_runner_owner - group by t2.runner_name ) - order by start_dtm, runner_name ) - loop - - -- Load Test Run Record - g_test_runs_rec := buff; - - -- Load the Stats Record - g_test_run_stats_rec := g_test_run_statsNULL; - open c_main(buff.id); - fetch c_main into g_test_run_stats_rec; - close c_main; - - -- Setup Display Order - if in_summary_last - then - if in_detail_level >= 10 - then - profile_out(in_detail_level >= 30); - results_out(in_detail_level >= 20); - end if; - summary_out; - else - summary_out; - if in_detail_level >= 10 - then - results_out(in_detail_level >= 20); - profile_out(in_detail_level >= 30); - end if; - end if; - - p(''); - - end loop; - -end dbms_out; - - -end wt_text_report; diff --git a/src/core/wt_text_report.pks b/src/core/wt_text_report.pks deleted file mode 100644 index 289240f..0000000 --- a/src/core/wt_text_report.pks +++ /dev/null @@ -1,58 +0,0 @@ -create or replace package wt_text_report authid definer -as - - -- To report the latest result details for test runner: - -- begin - -- wt_text_report.dbms_out('TEST_RUNNER', FALSE, FALSE, TRUE, TRUE); - -- end; - -- / - - -- Turn this off to allow output across multiple lines of text - g_single_line_output boolean := TRUE; - - -- DATE data type format for Report Header - g_date_format varchar2(100) := 'DD-Mon-YYYY HH:MI:SS PM'; - - function format_test_result - (in_assertion in wt_results.assertion%TYPE - ,in_status in wt_results.status%TYPE - ,in_details in wt_results.details%TYPE - ,in_testcase in wt_results.testcase%TYPE - ,in_message in wt_results.message%TYPE - ,in_interval_msecs in wt_results.interval_msecs%TYPE DEFAULT NULL) - return varchar2; - - procedure ad_hoc_result - (in_assertion in wt_results.assertion%TYPE - ,in_status in wt_results.status%TYPE - ,in_details in wt_results.details%TYPE - ,in_testcase in wt_results.testcase%TYPE - ,in_message in wt_results.message%TYPE); - --- "in_detail_level" settings for DBMS_OUT procedure: --- * Less than 10 (including null) - No Detail --- * Assertion results summary. --- * Profiled lines summary. --- * 10 to 19 - Minimal Detail --- * Assertion results summary. --- * Profiled lines summary. --- * Failed assertion result details. --- * Profiled source lines that were "not executed". --- * 20 to 29 - Partial Full Detail --- * Assertion results summary. --- * Profiled lines summary. --- * All assertion result details. --- * Profiled source lines that were "not executed". --- * 30 or more - Full Detail --- * Assertion results summary. --- * Profiled lines summary. --- * All assertion result details. --- * All profiled source lines. - - procedure dbms_out - (in_runner_owner in wt_test_runs.runner_owner%TYPE default USER - ,in_runner_name in wt_test_runs.runner_name%TYPE default null - ,in_detail_level in number default 0 - ,in_summary_last in boolean default FALSE); - -end wt_text_report; diff --git a/src/core/wt_version.tab b/src/core/wt_version.tab deleted file mode 100644 index 9dd0493..0000000 --- a/src/core/wt_version.tab +++ /dev/null @@ -1,21 +0,0 @@ - --- --- Version Table Installation --- - -create table wt_version - (install_dtm date - ,action varchar2(15) - ,text varchar2(15) - ) pctfree 0; - -comment on table wt_version is 'Records the installed and upgraded versions.'; -comment on column wt_version.install_dtm is 'Date/Time the version that was installed/upgraded'; -comment on column wt_version.text is 'Name of the version that was installed/upgraded'; - -insert into wt_version (install_dtm, action, text) - values (sysdate, 'INSTALL', '1.1.0'); - -commit; - -grant select on wt_version to public; diff --git a/src/core/wtplsql.pkb b/src/core/wtplsql.pkb deleted file mode 100644 index 554bcce..0000000 --- a/src/core/wtplsql.pkb +++ /dev/null @@ -1,612 +0,0 @@ -create or replace package body wtplsql -as - - C_KEEP_NUM_RECS number := 20; - - g_test_runs_rec wt_test_runs%ROWTYPE; - - $IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ - $THEN - TYPE test_all_aa_type is table of varchar2(400) index by varchar2(400); - test_all_aa test_all_aa_type; - wtplsql_skip_test boolean := FALSE; - $END ----------------%WTPLSQL_end_ignore_lines%---------------- - - ----------------------- --- Private Procedures ----------------------- - - ------------------------------------------------------------- --- This procedure is separated for internal WTPLSQL testing -procedure check_runner -is - l_package_check number; -begin - -- These RAISEs can be captured because the Test Runs Record is set. - -- Check for NULL Runner Name - if g_test_runs_rec.runner_name is null - then - raise_application_error (-20001, 'RUNNER_NAME is null'); - end if; - -- Check for Valid Runner Name - select count(*) into l_package_check - from all_arguments - where owner = USER - and object_name = 'WTPLSQL_RUN' - and package_name = g_test_runs_rec.runner_name - and argument_name is null - and position = 1 - and sequence = 0; - if l_package_check != 1 - then - raise_application_error (-20002, 'RUNNER_NAME "' || - g_test_runs_rec.runner_name || - '.WTPLSQL_RUN" is not valid'); - end if; -end check_runner; - -$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ -$THEN - procedure t_check_runner - is - l_save_test_runs_rec wt_test_runs%ROWTYPE := g_test_runs_rec; - l_msg_in varchar2(4000); - l_err_in varchar2(4000); - -------------------------------------- WTPLSQL Testing -- - procedure l_test_sqlerrm is begin - -- Restore the G_TEST_RUNS_REC - g_test_runs_rec := l_save_test_runs_rec; - wt_assert.eq - (msg_in => l_msg_in - ,check_this_in => SQLERRM - ,against_this_in => l_err_in); - end l_test_sqlerrm; - begin - -------------------------------------- WTPLSQL Testing -- - -- This Test Case runs in the EXECUTE IMMEDAITE in the TEST_RUN - -- procedure in this package. - wt_assert.g_testcase := 'CHECK_RUNNER Sad Path 1'; - begin - g_test_runs_rec.runner_name := ''; - l_msg_in := 'Null RUNNER_NAME'; - l_err_in := 'ORA-20001: RUNNER_NAME is null'; - check_runner; - l_test_sqlerrm; - exception when others then - l_test_sqlerrm; - end; - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'CHECK_RUNNER Sad Path 2'; - begin - g_test_runs_rec.runner_name := 'BOGUS'; - l_msg_in := 'Invalid RUNNER_NAME'; - l_err_in := 'ORA-20002: RUNNER_NAME "BOGUS.WTPLSQL_RUN" is not valid'; - check_runner; - l_test_sqlerrm; - exception when others then - l_test_sqlerrm; - end; - end t_check_runner; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- - - ------------------------------------------------------------- -procedure insert_test_run -is - PRAGMA AUTONOMOUS_TRANSACTION; - l_wt_test_runs_recNULL wt_test_runs%ROWTYPE; -begin - if g_test_runs_rec.id is null - then - return; - end if; - g_test_runs_rec.end_dtm := systimestamp; - insert into wt_test_runs values g_test_runs_rec; - g_test_runs_rec := l_wt_test_runs_recNULL; - COMMIT; -exception - when OTHERS - then - DBMS_OUTPUT.PUT_LINE(dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace); -end insert_test_run; - -$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ -$THEN - procedure t_insert_test_run - is - -------------------------------------- WTPLSQL Testing -- - TYPE l_dbmsout_buff_type is table of varchar2(32767); - l_dbmsout_buff l_dbmsout_buff_type := l_dbmsout_buff_type(1); - l_test_runs_rec wt_test_runs%ROWTYPE; - l_dbmsout_line varchar2(32767); - l_dbmsout_stat number; - l_num_recs number; - begin - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'INSERT_TEST_RUN Happy Path 1'; - l_test_runs_rec := g_test_runs_rec; - insert_test_run; - g_test_runs_rec := l_test_runs_rec; - wt_assert.eqqueryvalue ( - msg_in => 'Number of Records', - check_query_in => 'select count(*) from wt_test_runs' || - ' where id = ' || l_test_runs_rec.id, - against_value_in => 1); - -------------------------------------- WTPLSQL Testing -- - delete from wt_test_runs - where id = l_test_runs_rec.id; - COMMIT; - wt_assert.eqqueryvalue ( - msg_in => 'Records After Delete', - check_query_in => 'select count(*) from wt_test_runs' || - ' where id = ' || l_test_runs_rec.id, - against_value_in => 0); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'INSERT_TEST_RUN Sad Path 1'; - -- Save/Clear the DBMS_OUPTUT Buffer - loop - DBMS_OUTPUT.GET_LINE ( - line => l_dbmsout_line, - status => l_dbmsout_stat); - exit when l_dbmsout_stat != 0; - l_dbmsout_buff(l_dbmsout_buff.COUNT) := l_dbmsout_line; - l_dbmsout_buff.extend; - end loop; - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnotnull ( - msg_in => 'l_dbmsout_buff.COUNT - 1', - check_this_in => l_dbmsout_buff.COUNT - 1); - -------------------------------------- WTPLSQL Testing -- - select count(*) into l_num_recs from wt_test_runs; - l_test_runs_rec := g_test_runs_rec; - g_test_runs_rec.start_dtm := null; - insert_test_run; - g_test_runs_rec := l_test_runs_rec; - wt_assert.eqqueryvalue ( - msg_in => 'Number of Records should stay the same', - check_query_in => 'select count(*) from wt_test_runs', - against_value_in => l_num_recs); - -------------------------------------- WTPLSQL Testing -- - DBMS_OUTPUT.GET_LINE ( - line => l_dbmsout_line, - status => l_dbmsout_stat); - wt_assert.eq ( - msg_in => 'DBMS_OUTPUT Status', - check_this_in => l_dbmsout_stat, - against_this_in => 0); - -------------------------------------- WTPLSQL Testing -- - if wt_assert.last_pass - then - wt_assert.isnotnull ( - msg_in => 'DBMS_OUTPUT Line', - check_this_in => l_dbmsout_line); - wt_assert.this ( - msg_in => 'Confirm DBMS_OUTPUT Line text', - check_this_in => (l_dbmsout_line like 'ORA-01400: cannot insert NULL into ("WTP"."WT_TEST_RUNS"."START_DTM")%')); - -------------------------------------- WTPLSQL Testing -- - if not wt_assert.last_pass - then - -- No match, put the line back into DBMS_OUTPUT buffer and end this. - DBMS_OUTPUT.PUT_LINE(l_dbmsout_line); - end if; - end if; - -------------------------------------- WTPLSQL Testing -- - -- Restore the DBMS_OUPTUT Buffer - for i in 1 .. l_dbmsout_buff.COUNT - 1 - loop - DBMS_OUTPUT.PUT_LINE(l_dbmsout_buff(i)); - end loop; - wt_assert.isnotnull ( - msg_in => 'l_dbmsout_buff.COUNT - 1', - check_this_in => l_dbmsout_buff.COUNT - 1); - end t_insert_test_run; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- - - ---------------------- --- Public Procedures ---------------------- - - ------------------------------------------------------------- -function show_version - return varchar2 -is - ret_str wt_version.text%TYPE; -begin - select max(t1.text) into ret_str - from wt_version t1 - where t1.install_dtm = (select max(t2.install_dtm) - from wt_version t2); - return ret_str; -exception when NO_DATA_FOUND -then - return ''; -end show_version; - -$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ -$THEN - procedure t_show_version - is - existing_version wt_version.text%TYPE; - begin - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Show Version Happy Path'; - existing_version := show_version; - wt_assert.isnotnull ( - msg_in => 'Test Existing Version', - check_this_in => existing_version); - -------------------------------------- WTPLSQL Testing -- - insert into wt_version (install_dtm, action, text) - values (to_date('31-DEC-4000','DD-MON-YYYY'), 'TESTING', 'TESTING'); - wt_assert.eq ( - msg_in => 'Test New Version', - check_this_in => show_version, - against_this_in => 'TESTING'); - -------------------------------------- WTPLSQL Testing -- - rollback; - wt_assert.eq ( - msg_in => 'Return to Existing Version', - check_this_in => show_version, - against_this_in => existing_version); - end t_show_version; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- - - ------------------------------------------------------------- -procedure test_run - (in_package_name in varchar2) -is - l_test_runs_rec_NULL wt_test_runs%ROWTYPE; - l_error_stack varchar2(32000); - procedure concat_err_message is begin - if g_test_runs_rec.error_message is not null - then - g_test_runs_rec.error_message := substr(l_error_stack || CHR(10)|| - g_test_runs_rec.error_message - ,1,4000); - else - g_test_runs_rec.error_message := l_error_stack; - end if; - end concat_err_message; -begin - $IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ - $THEN - -- This will avoid running the TEST_RUN procedure for some self-tests - if wtplsql_skip_test - then - test_all_aa(in_package_name) := 'X'; - return; - end if; - --DBMS_OUTPUT.PUT_LINE('DEBUG WTPLSQL selftest Enabled for Test Runner "' || in_package_name || '"'); - $END ----------------%WTPLSQL_end_ignore_lines%---------------- - -- Reset the Test Runs Record before checking anything - g_test_runs_rec := l_test_runs_rec_NULL; - g_test_runs_rec.id := wt_test_runs_seq.nextval; - g_test_runs_rec.start_dtm := systimestamp; - g_test_runs_rec.runner_owner := USER; - g_test_runs_rec.runner_name := in_package_name; - g_test_runs_rec.error_message := ''; - check_runner; - -- Initialize - delete_runs(in_runner_owner => g_test_runs_rec.runner_owner -- Autonomous Transaction COMMIT - ,in_runner_name => g_test_runs_rec.runner_name); - wt_assert.reset_globals; - wt_test_run_stat.initialize; - wt_result.initialize(g_test_runs_rec.id); - wt_profiler.initialize(in_test_run_id => g_test_runs_rec.id, - in_runner_name => g_test_runs_rec.runner_name, - out_dbout_owner => g_test_runs_rec.dbout_owner, - out_dbout_name => g_test_runs_rec.dbout_name, - out_dbout_type => g_test_runs_rec.dbout_type, - out_trigger_offset => g_test_runs_rec.trigger_offset, - out_profiler_runid => g_test_runs_rec.profiler_runid, - out_error_message => l_error_stack); - concat_err_message; - -- Call the Test Runner - begin - execute immediate 'BEGIN ' || in_package_name || '.WTPLSQL_RUN; END;'; - exception - when OTHERS - then - l_error_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; - concat_err_message; - end; - - -- Finalize - insert_test_run; -- Autonomous Transaction COMMIT - wt_profiler.finalize; -- Autonomous Transaction COMMIT - wt_result.finalize; -- Autonomous Transaction COMMIT - wt_test_run_stat.finalize; -- Autonomous Transaction COMMIT - -exception - when OTHERS - then - l_error_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; - if g_test_runs_rec.id is null - then - DBMS_OUTPUT.PUT_LINE(l_error_stack); - DBMS_OUTPUT.PUT_LINE('---------------------------'); - DBMS_OUTPUT.PUT_LINE(g_test_runs_rec.error_message); - else - concat_err_message; - insert_test_run; -- Autonomous Transaction COMMIT - end if; - wt_profiler.finalize; -- Autonomous Transaction COMMIT - wt_result.finalize; -- Autonomous Transaction COMMIT - wt_test_run_stat.finalize; -- Autonomous Transaction COMMIT - -end test_run; - ---==============================================================-- --- No Unit Test for TEST_RUN. --- Too complicated because testing occurs while the TEST_RUN --- procedure is executing. This also prevents 100% profiling. ---==============================================================-- - - ------------------------------------------------------------- -procedure test_all -is - TYPE runners_nt_type is table of varchar2(128); - l_runners_nt runners_nt_type; -begin - select package_name - bulk collect into l_runners_nt - from user_arguments t1 - where object_name = 'WTPLSQL_RUN' - and position = 1 - and sequence = 0 - and data_type is null - and not exists ( - select 'x' from user_arguments t2 - where t2.object_name = t1.object_name - and t2.position > t1.position - and t2.sequence > t1.sequence - and ( t2.overload is null - OR t2.overload = t1.overload) - ); - for i in 1 .. l_runners_nt.COUNT - loop - test_run(l_runners_nt(i)); - end loop; -end test_all; - -$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ -$THEN - procedure t_test_all - is - begin - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'TEST_ALL Happy Path'; - test_all_aa.DELETE; - wtplsql_skip_test := TRUE; - -- TEST_ALL will populate the test_all_aa array - wtplsql.test_all; - wtplsql_skip_test := FALSE; - -- This package should be in the test_all_aa array - -------------------------------------- WTPLSQL Testing -- - wt_assert.this ( - msg_in => 'test_all_aa.EXISTS(''WTPLSQL'')', - check_this_in => test_all_aa.EXISTS('WTPLSQL')); - end t_test_all; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- - - ------------------------------------------------------------- -procedure delete_runs - (in_test_run_id in number) -is - PRAGMA AUTONOMOUS_TRANSACTION; -begin - -- Profiler delete must be first because it contains a - -- PRAGMA AUTONOMOUS_TRANSACTION - wt_test_run_stat.delete_records(in_test_run_id); - wt_profiler.delete_records(in_test_run_id); - wt_result.delete_records(in_test_run_id); - delete from wt_test_runs where id = in_test_run_id; - COMMIT; -end delete_runs; - -procedure delete_runs - (in_runner_owner in varchar2 - ,in_runner_name in varchar2) -is - num_recs number; -begin - num_recs := 1; - for buf2 in (select id from wt_test_runs - where runner_owner = in_runner_owner - and runner_name = in_runner_name - order by start_dtm desc, id desc) - loop - -- Keep the last 20 rest runs for this USER - if num_recs > C_KEEP_NUM_RECS - then - -- Autonomous Transaction COMMIT - delete_runs(buf2.id); - end if; - num_recs := num_recs + 1; - end loop; -end delete_runs; - -$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ -$THEN - procedure t_delete_run_id - is - l_num_recs number; - l_err_stack varchar2(32000); - begin - -------------------------------------- WTPLSQL Testing -- - -- DELETE_RECORDS has already run when we arrive here. - -- Cleanup from previous test - delete from wt_test_runs - where id between 0-C_KEEP_NUM_RECS and 0-1; - commit; - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'DELETE_RUNS Happy Path 1'; - select count(*) - into l_num_recs - from wt_test_runs - where runner_owner = USER - and runner_name = g_test_runs_rec.runner_name; - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnotnull ( - msg_in => 'Number of Records Before Insert', - check_this_in => l_num_recs); - wt_assert.this ( - msg_in => 'Number of Records Before Insert <= ' || C_KEEP_NUM_RECS, - check_this_in => l_num_recs <= C_KEEP_NUM_RECS); - -------------------------------------- WTPLSQL Testing -- - insert into wt_test_runs values g_test_runs_rec; - COMMIT; - wt_assert.eqqueryvalue ( - msg_in => 'Number of Records After Insert', - check_query_in => 'select count(*) from wt_test_runs' || - ' where id = ' || g_test_runs_rec.id, - against_value_in => 1); - delete_runs(g_test_runs_rec.id); -- Autonomous Transaction - -------------------------------------- WTPLSQL Testing -- - wt_assert.eqqueryvalue ( - msg_in => 'Number of Records After Delete', - check_query_in => 'select count(*) from wt_test_runs' || - ' where id = ' || g_test_runs_rec.id, - against_value_in => 0); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'DELETE_RUNS Happy Path 2'; - wt_assert.eqqueryvalue ( - msg_in => 'Confirm number of records', - check_query_in => 'select count(*) from wt_test_runs' || - ' where runner_owner = ''' || USER || - ''' and runner_name = ''' || g_test_runs_rec.runner_name || - '''', - against_value_in => l_num_recs); - -------------------------------------- WTPLSQL Testing -- - for i in 1 .. C_KEEP_NUM_RECS - loop - insert into wt_test_runs - (id, start_dtm, runner_owner, runner_name) - values - (0-i, sysdate-7000-i, USER, g_test_runs_rec.runner_name); - end loop; - commit; - -------------------------------------- WTPLSQL Testing -- - wt_assert.eqqueryvalue ( - msg_in => 'Check Added ' || C_KEEP_NUM_RECS || ' records', - check_query_in => 'select count(*) from wt_test_runs' || - ' where runner_owner = ''' || USER || - ''' and runner_name = ''' || g_test_runs_rec.runner_name || - '''', - against_value_in => l_num_recs + C_KEEP_NUM_RECS); - delete_runs(USER, g_test_runs_rec.runner_name); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eqqueryvalue ( - msg_in => 'Check number of records reduced', - check_query_in => 'select count(*) from wt_test_runs' || - ' where runner_owner = ''' || USER || - ''' and runner_name = ''' || g_test_runs_rec.runner_name || - '''', - against_value_in => C_KEEP_NUM_RECS); - delete from wt_test_runs - where id between 0-C_KEEP_NUM_RECS and 0-1; - commit; - -------------------------------------- WTPLSQL Testing -- - wt_assert.eqqueryvalue ( - msg_in => 'Confirm original number of records', - check_query_in => 'select count(*) from wt_test_runs' || - ' where runner_owner = ''' || USER || - ''' and runner_name = ''' || g_test_runs_rec.runner_name || - '''', - against_value_in => l_num_recs); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'DELETE_RUNS Sad Path 1'; - begin - delete_runs(-9995); -- Should run without error - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; - exception when others then - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; - end; - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'Delete Runs(-9995)', - check_this_in => l_err_stack); - end t_delete_run_id; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- - - ---==============================================================-- -$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ -$THEN - procedure t_test_runs_rec_and_table - is - begin - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'TEST_RUNS_REC_AND_TABLE Happy Path'; - -- This Test Case runs in the EXECUTE IMMEDAITE in the TEST_RUN - -- procedure in this package. - wt_assert.isnotnull - (msg_in => 'g_test_runs_rec.id' - ,check_this_in => g_test_runs_rec.id); - wt_assert.isnotnull - (msg_in => 'g_test_runs_rec.start_dtm' - ,check_this_in => g_test_runs_rec.start_dtm); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnotnull - (msg_in => 'g_test_runs_rec.runner_owner' - ,check_this_in => g_test_runs_rec.runner_owner); - wt_assert.eq - (msg_in => 'g_test_runs_rec.runner_name' - ,check_this_in => g_test_runs_rec.runner_name - ,against_this_in => 'WTPLSQL'); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull - (msg_in => 'g_test_runs_rec.dbout_owner' - ,check_this_in => g_test_runs_rec.dbout_owner); - wt_assert.isnull - (msg_in => 'g_test_runs_rec.dbout_name' - ,check_this_in => g_test_runs_rec.dbout_name); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull - (msg_in => 'g_test_runs_rec.dbout_type' - ,check_this_in => g_test_runs_rec.dbout_type); - wt_assert.isnull - (msg_in => 'g_test_runs_rec.profiler_runid' - ,check_this_in => g_test_runs_rec.profiler_runid); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull - (msg_in => 'g_test_runs_rec.end_dtm' - ,check_this_in => g_test_runs_rec.end_dtm); - wt_assert.isnull - (msg_in => 'g_test_runs_rec.error_message' - ,check_this_in => g_test_runs_rec.error_message); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eqqueryvalue - (msg_in => 'TEST_RUNS Record for this TEST_RUN' - ,check_query_in => 'select count(*) from WT_TEST_RUNS' || - ' where id = ''' || g_test_runs_rec.id || '''' - ,against_value_in => 0); - end t_test_runs_rec_and_table; - ---------------------------------------- - procedure WTPLSQL_RUN - is - begin - -------------------------------------- WTPLSQL Testing -- - t_show_version; - t_check_runner; - t_insert_test_run; - t_test_all; - t_delete_run_id; - t_test_runs_rec_and_table; - end; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- ---==============================================================-- - - -end wtplsql; diff --git a/src/core/wtplsql.pks b/src/core/wtplsql.pks deleted file mode 100644 index 83e31cc..0000000 --- a/src/core/wtplsql.pks +++ /dev/null @@ -1,36 +0,0 @@ -create or replace package wtplsql authid current_user -as - -- AUTHID CURRENT_USER is required for dynamic PL/SQL execution. - - function show_version - return varchar2; - - procedure test_run - (in_package_name in varchar2); - - procedure test_all; - - procedure delete_runs - (in_test_run_id in number); - - procedure delete_runs - (in_runner_owner in varchar2 - ,in_runner_name in varchar2); - - -- WtPLSQL Self Test Procedures - -- - -- alter system set PLSQL_CCFLAGS = - -- 'WTPLSQL_ENABLE:TRUE, WTPLSQL_SELFTEST:TRUE' - -- scope=BOTH; - -- - -- begin - -- dbms_utility.compile_schema('WTP',TRUE,FALSE); - -- end; - -- / - -- - $IF $$WTPLSQL_SELFTEST - $THEN - procedure WTPLSQL_RUN; - $END - -end wtplsql; diff --git a/src/demo/README.txt b/src/demo/README.txt deleted file mode 100644 index e0742c5..0000000 --- a/src/demo/README.txt +++ /dev/null @@ -1,33 +0,0 @@ - - White Box PL/SQL Testing - src/demo/README.txt - -FILE DESCRIPTION ------------------------- ---------------------------- -common_setup.sql Common Installation Settings -install.sql Installation Script -installO.sql Sample Installation Log -Package-Test.sql Package Test Example -Table-Test.sql Table Test Example -Test-Runner.sql Test Runner Example -Trigger-Test.sql Trigger Test Example -Type-Test.sql Type Test Example -uninstall.sql Uninstall Script -ut_betwnstr.sql utPLSQL 2.3 ut_betwnstr Example -ut_calc_secs_between.sql utPLSQL 2.3 ut_calc_secs_between Example -ut_str.sql utPLSQL 2.3 ut_str Example -ut_truncit.sql utPLSQL 2.3 ut_truncit Example - - -Install Procedure: ------------------- -1) sqlplus SYS/password as SYSDBA @install -2) exit -3) Compare install.LST to installO.LST - - -UnInstall Procedure: --------------------- -1) sqlplus SYS/password as SYSDBA @uninstall -2) exit -3) Compare uninstall.LST to uninstallO.LST diff --git a/src/demo/common_setup.sql b/src/demo/common_setup.sql deleted file mode 100644 index d567441..0000000 --- a/src/demo/common_setup.sql +++ /dev/null @@ -1,11 +0,0 @@ - --- --- Core Installation --- - --- Enable SQL*Plus Variables -set define "&" -set concat "." - -accept schema_owner CHAR default 'wtp_demo' - -prompt 'Enter Schema Name (WTP_DEMO): ' diff --git a/src/demo/install.sql b/src/demo/install.sql deleted file mode 100644 index bd97e5d..0000000 --- a/src/demo/install.sql +++ /dev/null @@ -1,118 +0,0 @@ - --- --- Demo Installation --- - ----------------------------------------- --- Setup ----------------------------------------- - --- Capture output -spool install -set serveroutput on size unlimited format truncated - --- Shared Setup Script -@common_setup.sql - -WHENEVER SQLERROR exit SQL.SQLCODE - -begin - if USER not in ('SYS','SYSTEM') - then - raise_application_error (-20000, - 'Not logged in as SYS or SYSTEM'); - end if; -end; -/ - -WHENEVER SQLERROR continue - ----------------------------------------- --- Create the schema owner. ----------------------------------------- - -create user &schema_owner. identified by &schema_owner. - default tablespace users - quota 1M on users - temporary tablespace temp; - -grant create session to &schema_owner.; -grant create type to &schema_owner.; -grant create sequence to &schema_owner.; -grant create table to &schema_owner.; -grant create trigger to &schema_owner.; -grant create view to &schema_owner.; -grant create procedure to &schema_owner.; - -begin - $IF $$WTPLSQL_ENABLE - $THEN - dbms_output.put_line('WTPLSQL_ENABLE is TRUE'); - $END - dbms_output.put_line('Check WTPLSQL_ENABLE is Done.'); -end; -/ - -WHENEVER SQLERROR exit SQL.SQLCODE - ----------------------------------------- --- Connect as SCHEMA_OWNER ----------------------------------------- - -connect &schema_owner./&schema_owner. -set serveroutput on size unlimited format truncated - -begin - if USER != upper('&schema_owner') - then - raise_application_error (-20000, - 'Not logged in as &schema_owner'); - end if; -end; -/ - -WHENEVER SQLERROR continue - -set serveroutput on size unlimited format word_wrapped - -select wtplsql.show_version from dual; - -begin - wt_assert.eq(msg_in => 'Ad-Hoc Test' - ,check_this_in => 1 - ,against_this_in => '1'); -end; -/ - ----------------------------------------- --- Test Installation ----------------------------------------- - -prompt Install Package Test -@Package-Test.sql - -prompt Install Table Test -@Table-Test.sql - -prompt Install Test Runner -@Test-Runner.sql - -prompt Install Trigger Test -@Trigger-Test.sql - -prompt Install Type Test -@Type-Test.sql - -prompt utPLSQL 2.3 ut_betwnstr Example -@ut_betwnstr.sql - -prompt utPLSQL 2.3 ut_calc_secs_between Example -@ut_calc_secs_between.sql - -prompt utPLSQL 2.3 ut_str Example -@ut_str.sql - -prompt utPLSQL 2.3 ut_truncit Example -@ut_truncit.sql - -spool off diff --git a/src/demo/installO.LST b/src/demo/installO.LST deleted file mode 100644 index 459659e..0000000 --- a/src/demo/installO.LST +++ /dev/null @@ -1,687 +0,0 @@ - -PL/SQL procedure successfully completed. - -old:create user &schema_owner. identified by &schema_owner. - default tablespace users - quota 1M on users - temporary tablespace temp -new:create user wtp_demo identified by wtp_demo - default tablespace users - quota 1M on users - temporary tablespace temp - -User WTP_DEMO created. - -old:grant create session to &schema_owner. -new:grant create session to wtp_demo - -Grant succeeded. - -old:grant create type to &schema_owner. -new:grant create type to wtp_demo - -Grant succeeded. - -old:grant create sequence to &schema_owner. -new:grant create sequence to wtp_demo - -Grant succeeded. - -old:grant create table to &schema_owner. -new:grant create table to wtp_demo - -Grant succeeded. - -old:grant create trigger to &schema_owner. -new:grant create trigger to wtp_demo - -Grant succeeded. - -old:grant create view to &schema_owner. -new:grant create view to wtp_demo - -Grant succeeded. - -old:grant create procedure to &schema_owner. -new:grant create procedure to wtp_demo - -Grant succeeded. - -WTPLSQL_ENABLE is TRUE -Check WTPLSQL_ENABLE is Done. - - -PL/SQL procedure successfully completed. - -Connected. -old:begin - if USER != upper('&schema_owner') - then - raise_application_error (-20000, - 'Not logged in as &schema_owner'); - end if; -end; - -new:begin - if USER != upper('wtp_demo') - then - raise_application_error (-20000, - 'Not logged in as wtp_demo'); - end if; -end; - -PL/SQL procedure successfully completed. - - -SHOW_VERSION ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -1.1.0 - -PASS Ad-Hoc Test. EQ - Expected "1" and got "1" - - -PL/SQL procedure successfully completed. - -Install Package Test - -Package TEST_DBMS_OUTPUT compiled - - -Package Body TEST_DBMS_OUTPUT compiled - - -Package Body TEST_DBMS_OUTPUT compiled - - - wtPLSQL 1.1.0 - Run ID 29: 29-Jun-2018 01:04:14 PM - - Test Results for WTP_DEMO.TEST_DBMS_OUTPUT - Total Test Cases: 0 Total Assertions: 1 - Minimum Interval msec: 10 Failed Assertions: 0 - Average Interval msec: 10 Error Assertions: 0 - Maximum Interval msec: 10 Test Yield: 100.00% - Total Run Time (sec): 0.1 - - - WTP_DEMO.TEST_DBMS_OUTPUT Test Result Details (Test Run ID 29) ------------------------------------------------------------ - PASS 10ms Test 1. EQ - Expected "Test 1" and got "Test 1" - - - -PL/SQL procedure successfully completed. - - -Package Body TEST_DBMS_OUTPUT compiled - -Test 1 - - -PL/SQL procedure successfully completed. - - - wtPLSQL 1.1.0 - Run ID 30: 29-Jun-2018 01:04:15 PM - - Test Results for WTP_DEMO.TEST_DBMS_OUTPUT - Total Test Cases: 0 Total Assertions: 0 - Minimum Interval msec: 0 Failed Assertions: 0 - Average Interval msec: 0 Error Assertions: 0 - Maximum Interval msec: 0 Test Yield: % - Total Run Time (sec): 0.0 - - *** Test Runner Error *** -ORA-20000: Fault insertion exception -ORA-06512: at "WTP_DEMO.TEST_DBMS_OUTPUT", line 10 -ORA-06512: at "WTP_DEMO.TEST_DBMS_OUTPUT", line 18 -ORA-06512: at line 1 -ORA-06512: at "WTP.WTPLSQL", line 311 - - - - -PL/SQL procedure successfully completed. - - -Package Body TEST_DBMS_OUTPUT compiled - -This should be preserved. - - -PL/SQL procedure successfully completed. - - - wtPLSQL 1.1.0 - Run ID 31: 29-Jun-2018 01:04:15 PM - - Test Results for WTP_DEMO.TEST_DBMS_OUTPUT - Total Test Cases: 0 Total Assertions: 0 - Minimum Interval msec: 0 Failed Assertions: 0 - Average Interval msec: 0 Error Assertions: 0 - Maximum Interval msec: 0 Test Yield: % - Total Run Time (sec): 0.0 - - *** Test Runner Error *** -ORA-20000: ORA-20000: Fault insertion exception -ORA-06512: at "WTP_DEMO.TEST_DBMS_OUTPUT", line 21 -ORA-06512: at "WTP_DEMO.TEST_DBMS_OUTPUT", line 47 -ORA-06512: at "WTP_DEMO.TEST_DBMS_OUTPUT", line 53 -ORA-06512: at line 1 -ORA-06512: at "WTP.WTPLSQL", line 311 - - - - -PL/SQL procedure successfully completed. - -Install Table Test - -Error starting at line : 2 File @ C:\Users\Duane\Documents\GitHub\wtPLSQL\src\demo\Table-Test.sql -In command - -drop table table_test_tab -Error report - -ORA-00942: table or view does not exist -00942. 00000 - "table or view does not exist" -*Cause: -*Action: - -Table TABLE_TEST_TAB created. - - -Package TABLE_TEST_PKG compiled - - -Package Body TABLE_TEST_PKG compiled - - - wtPLSQL 1.1.0 - Run ID 32: 29-Jun-2018 01:04:15 PM - - Test Results for WTP_DEMO.TABLE_TEST_PKG - Total Test Cases: 1 Total Assertions: 2 - Minimum Interval msec: 2 Failed Assertions: 0 - Average Interval msec: 5 Error Assertions: 0 - Maximum Interval msec: 8 Test Yield: 100.00% - Total Run Time (sec): 0.0 - - - WTP_DEMO.TABLE_TEST_PKG Test Result Details (Test Run ID 32) ------------------------------------------------------------ - ---- Test Case: Happy Path 1 - PASS 8ms Successful Insert. RAISES/THROWS - No exception was expected. Exception raised was "". Exception raised by: "insert into table_test_tab (id, name) values (1, 'TEST1')". - PASS 2ms Confirm l_rec.name. EQ - Expected "TEST1" and got "TEST1" - - - -PL/SQL procedure successfully completed. - -Install Test Runner - -Package SIMPLE_TEST_RUNNER compiled - - -Package Body SIMPLE_TEST_RUNNER compiled - - -PL/SQL procedure successfully completed. - - - wtPLSQL 1.1.0 - Run ID 33: 29-Jun-2018 01:04:16 PM - - Test Results for WTP_DEMO.SIMPLE_TEST_RUNNER - Total Test Cases: 0 Total Assertions: 1 - Minimum Interval msec: 4 Failed Assertions: 0 - Average Interval msec: 4 Error Assertions: 0 - Maximum Interval msec: 4 Test Yield: 100.00% - Total Run Time (sec): 0.0 - - - -PL/SQL procedure successfully completed. - - - wtPLSQL 1.1.0 - Run ID 33: 29-Jun-2018 01:04:16 PM - - Test Results for WTP_DEMO.SIMPLE_TEST_RUNNER - Total Test Cases: 0 Total Assertions: 1 - Minimum Interval msec: 4 Failed Assertions: 0 - Average Interval msec: 4 Error Assertions: 0 - Maximum Interval msec: 4 Test Yield: 100.00% - Total Run Time (sec): 0.0 - - - WTP_DEMO.SIMPLE_TEST_RUNNER Test Result Details (Test Run ID 33) ------------------------------------------------------------ - PASS 4ms Ad-Hoc Test. EQ - Expected "1" and got "1" - - - -PL/SQL procedure successfully completed. - - -Package Body SIMPLE_TEST_RUNNER compiled - - - wtPLSQL 1.1.0 - Run ID 34: 29-Jun-2018 01:04:16 PM - - Test Results for WTP_DEMO.SIMPLE_TEST_RUNNER - Total Test Cases: 2 Total Assertions: 4 - Minimum Interval msec: 0 Failed Assertions: 1 - Average Interval msec: 0 Error Assertions: 0 - Maximum Interval msec: 1 Test Yield: 75.00% - Total Run Time (sec): 0.0 - - - WTP_DEMO.SIMPLE_TEST_RUNNER Test Result Details (Test Run ID 34) ------------------------------------------------------------ - ---- Test Case: My Test Case A - PASS 1ms Ad-Hoc Test1. EQ - Expected "1" and got "1" - PASS 0ms Ad-Hoc Test2. EQ - Expected "2" and got "2" - ---- Test Case: My Test Case B -#FAIL# 0ms Ad-Hoc Test1. EQ - Expected " 4" and got "4" - PASS 0ms Ad-Hoc Test2. EQ - Expected "5" and got "5" - - - -PL/SQL procedure successfully completed. - - -Package Body SIMPLE_TEST_RUNNER compiled - - - wtPLSQL 1.1.0 - Run ID 35: 29-Jun-2018 01:04:16 PM - - Test Results for WTP_DEMO.SIMPLE_TEST_RUNNER - Total Test Cases: 0 Total Assertions: 1 - Minimum Interval msec: 230 Failed Assertions: 0 - Average Interval msec: 230 Error Assertions: 0 - Maximum Interval msec: 230 Test Yield: 100.00% - Total Run Time (sec): 0.2 - - Code Coverage for PACKAGE BODY WTP_DEMO.SIMPLE_TEST_RUNNER - Ignored Lines: 0 Total Profiled Lines: 3 - Excluded Lines: 0 Total Executed Lines: 2 - Minimum LineExec usec: 0 Not Executed Lines: 0 - Average LineExec usec: 21 Unknown Lines: 1 - Maximum LineExec usec: 41 Code Coverage: 100.00% - Trigger Source Offset: 0 - - - -PL/SQL procedure successfully completed. - - -Package Body SIMPLE_TEST_RUNNER compiled - - - wtPLSQL 1.1.0 - Run ID 36: 29-Jun-2018 01:04:17 PM - - Test Results for WTP_DEMO.SIMPLE_TEST_RUNNER - Total Test Cases: 1 Total Assertions: 1 - Minimum Interval msec: 285 Failed Assertions: 0 - Average Interval msec: 285 Error Assertions: 0 - Maximum Interval msec: 285 Test Yield: 100.00% - Total Run Time (sec): 0.3 - - Code Coverage for PACKAGE BODY WTP_DEMO.SIMPLE_TEST_RUNNER - Ignored Lines: 4 Total Profiled Lines: 8 - Excluded Lines: 0 Total Executed Lines: 3 - Minimum LineExec usec: 0 Not Executed Lines: 0 - Average LineExec usec: 1 Unknown Lines: 1 - Maximum LineExec usec: 2 Code Coverage: 100.00% - Trigger Source Offset: 0 - - - WTP_DEMO.SIMPLE_TEST_RUNNER Test Result Details (Test Run ID 36) ------------------------------------------------------------ - ---- Test Case: My Test Case - PASS 285ms Ad-Hoc Test. EQ - Expected "5" and got "5" - - - WTP_DEMO.SIMPLE_TEST_RUNNER PACKAGE BODY Code Coverage Details (Test Run ID 36) -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 4 UNKN 0 1 1 1 function add2 (in_val1 number, in_val2 number) return number is - 7 EXEC 1 2 2 2 l_result := in_val1 + in_val2; - 8 EXEC 1 0 0 0 return l_result; - 9 EXEC 1 2 2 2 end add2; - 10 IGNR 0 3 3 3 procedure wtplsql_run is begin --%WTPLSQL_begin_ignore_lines%-- - 11 IGNR 2 45 2 43 wt_assert.g_testcase := 'My Test Case'; - 12 IGNR 1 105 1 104 wt_assert.eq(msg_in => 'Ad-Hoc Test' - 15 IGNR 1 1 1 1 end wtplsql_run; --%WTPLSQL_end_ignore_lines%-- - - - -PL/SQL procedure successfully completed. - -Install Trigger Test - -Error starting at line : 2 File @ C:\Users\Duane\Documents\GitHub\wtPLSQL\src\demo\Trigger-Test.sql -In command - -drop table trigger_test_tab -Error report - -ORA-00942: table or view does not exist -00942. 00000 - "table or view does not exist" -*Cause: -*Action: - -Error starting at line : 4 File @ C:\Users\Duane\Documents\GitHub\wtPLSQL\src\demo\Trigger-Test.sql -In command - -drop sequence trigger_test_seq -Error report - -ORA-02289: sequence does not exist -02289. 00000 - "sequence does not exist" -*Cause: The specified sequence does not exist, or the user does - not have the required privilege to perform this operation. -*Action: Make sure the sequence name is correct, and that you have - the right to perform the desired operation on this sequence. - -Sequence TRIGGER_TEST_SEQ created. - - -Table TRIGGER_TEST_TAB created. - - -Trigger TRIGGER_TEST_BIR compiled - - -Package TRIGGER_TEST_PKG compiled - - -Package Body TRIGGER_TEST_PKG compiled - - - wtPLSQL 1.1.0 - Run ID 37: 29-Jun-2018 01:04:18 PM - - Test Results for WTP_DEMO.TRIGGER_TEST_PKG - Total Test Cases: 1 Total Assertions: 3 - Minimum Interval msec: 0 Failed Assertions: 0 - Average Interval msec: 196 Error Assertions: 0 - Maximum Interval msec: 585 Test Yield: 100.00% - Total Run Time (sec): 0.6 - - Code Coverage for TRIGGER WTP_DEMO.TRIGGER_TEST_BIR - Ignored Lines: 0 Total Profiled Lines: 5 - Excluded Lines: 0 Total Executed Lines: 4 - Minimum LineExec usec: 2 Not Executed Lines: 0 - Average LineExec usec: 1355 Unknown Lines: 1 - Maximum LineExec usec: 5387 Code Coverage: 100.00% - Trigger Source Offset: 3 - - - WTP_DEMO.TRIGGER_TEST_PKG Test Result Details (Test Run ID 37) ------------------------------------------------------------ - ---- Test Case: Constructor Happy Path 1 - PASS 585ms l_rec.id. ISNOTNULL - Expected NOT NULL and got "1" - PASS 4ms l_rec.name. EQ - Expected "Test1" and got "Test1" - PASS 0ms l_rec.created_dtm. ISNOTNULL - Expected NOT NULL and got "29-JUN-18" - - - WTP_DEMO.TRIGGER_TEST_BIR TRIGGER Code Coverage Details (Test Run ID 37) -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 4 UNKN 0 5 5 5 begin - 5 EXEC 1 5 5 5 if :new.id is null - 7 EXEC 1 5387 5387 5387 :new.id := trigger_test_seq.nextval; - 9 EXEC 1 25 2 23 :new.created_dtm := sysdate; - 10 EXEC 1 3 3 3 end; - - - -PL/SQL procedure successfully completed. - -Install Type Test - -Type SIMPLE_TEST_OBJ_TYPE compiled - - -Type Body SIMPLE_TEST_OBJ_TYPE compiled - - -Package TEST_SIMPLE_OBJECT compiled - - -Package Body TEST_SIMPLE_OBJECT compiled - - - wtPLSQL 1.1.0 - Run ID 38: 29-Jun-2018 01:04:19 PM - - Test Results for WTP_DEMO.TEST_SIMPLE_OBJECT - Total Test Cases: 1 Total Assertions: 2 - Minimum Interval msec: 0 Failed Assertions: 0 - Average Interval msec: 202 Error Assertions: 0 - Maximum Interval msec: 404 Test Yield: 100.00% - Total Run Time (sec): 0.4 - - Code Coverage for TYPE BODY WTP_DEMO.SIMPLE_TEST_OBJ_TYPE - Ignored Lines: 0 Total Profiled Lines: 10 - Excluded Lines: 1 Total Executed Lines: 4 - Minimum LineExec usec: 1 Not Executed Lines: 4 - Average LineExec usec: 1 Unknown Lines: 1 - Maximum LineExec usec: 4 Code Coverage: 50.00% - Trigger Source Offset: 0 - - - WTP_DEMO.TEST_SIMPLE_OBJECT Test Result Details (Test Run ID 38) ------------------------------------------------------------ - ---- Test Case: Constructor Happy Path 1 - PASS 404ms Object MINIMUM_VALUE. ISNULL - Expected NULL and got "" - PASS 0ms Object OBSERVATIONS. EQ - Expected "0" and got "0" - - - WTP_DEMO.SIMPLE_TEST_OBJ_TYPE TYPE BODY Code Coverage Details (Test Run ID 38) -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 2 UNKN 0 3 3 3 CONSTRUCTOR FUNCTION simple_test_obj_type - 7 EXEC 1 1 1 1 minimum_value := null; - 8 EXEC 1 1 1 1 observations := 0; - 9 EXEC 1 3 3 3 return; - 10 EXEC 1 4 4 4 end simple_test_obj_type; - 11#NOTX# 0 0 0 0 member procedure add_observation - 16#NOTX# 0 0 0 0 If minimum_value is null then minimum_value := in_observation; - 17#NOTX# 0 0 0 0 else minimum_value := least(minimum_value, in_observation); - 19#NOTX# 0 0 0 0 observations := observations + 1; - 20 EXCL 0 0 0 0 end add_observation; - - - -PL/SQL procedure successfully completed. - -utPLSQL 2.3 ut_betwnstr Example - -Function BETWNSTR compiled - - -Package UT_BETWNSTR compiled - - -Package Body UT_BETWNSTR compiled - - - wtPLSQL 1.1.0 - Run ID 39: 29-Jun-2018 01:04:20 PM - - Test Results for WTP_DEMO.UT_BETWNSTR - Total Test Cases: 0 Total Assertions: 5 - Minimum Interval msec: 0 Failed Assertions: 0 - Average Interval msec: 54 Error Assertions: 0 - Maximum Interval msec: 272 Test Yield: 100.00% - Total Run Time (sec): 0.3 - - Code Coverage for FUNCTION WTP_DEMO.BETWNSTR - Ignored Lines: 0 Total Profiled Lines: 3 - Excluded Lines: 0 Total Executed Lines: 2 - Minimum LineExec usec: 1 Not Executed Lines: 0 - Average LineExec usec: 3 Unknown Lines: 1 - Maximum LineExec usec: 20 Code Coverage: 100.00% - Trigger Source Offset: 0 - - - WTP_DEMO.UT_BETWNSTR Test Result Details (Test Run ID 39) ------------------------------------------------------------ - PASS 272ms Typical valid usage. EQ - Expected "cde" and got "cde" - PASS 0ms NULL start. ISNULL - Expected NULL and got "" - PASS 0ms NULL end. ISNULL - Expected NULL and got "" - PASS 0ms End smaller than start. ISNULL - Expected NULL and got "" - PASS 0ms End larger than string length. EQ - Expected "cdefg" and got "cdefg" - - - WTP_DEMO.BETWNSTR FUNCTION Code Coverage Details (Test Run ID 39) -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1 UNKN 0 9 1 3 FUNCTION betwnStr ( - 9 EXEC 5 31 1 20 RETURN ( - 16 EXEC 5 1 1 1 END; - - - -PL/SQL procedure successfully completed. - -utPLSQL 2.3 ut_calc_secs_between Example - -Procedure CALC_SECS_BETWEEN compiled - - -Package UT_CALC_SECS_BETWEEN compiled - - -Package Body UT_CALC_SECS_BETWEEN compiled - - - wtPLSQL 1.1.0 - Run ID 40: 29-Jun-2018 01:04:20 PM - - Test Results for WTP_DEMO.UT_CALC_SECS_BETWEEN - Total Test Cases: 0 Total Assertions: 2 - Minimum Interval msec: 0 Failed Assertions: 0 - Average Interval msec: 137 Error Assertions: 0 - Maximum Interval msec: 274 Test Yield: 100.00% - Total Run Time (sec): 0.3 - - Code Coverage for PROCEDURE WTP_DEMO.CALC_SECS_BETWEEN - Ignored Lines: 0 Total Profiled Lines: 3 - Excluded Lines: 0 Total Executed Lines: 2 - Minimum LineExec usec: 0 Not Executed Lines: 0 - Average LineExec usec: 3 Unknown Lines: 1 - Maximum LineExec usec: 9 Code Coverage: 100.00% - Trigger Source Offset: 0 - - - WTP_DEMO.UT_CALC_SECS_BETWEEN Test Result Details (Test Run ID 40) ------------------------------------------------------------ - PASS 274ms Same dates. EQ - Expected "0" and got "0" - PASS 0ms Exactly one day. EQ - Expected "86400" and got "86400" - - - WTP_DEMO.CALC_SECS_BETWEEN PROCEDURE Code Coverage Details (Test Run ID 40) -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1 UNKN 0 3 1 2 PROCEDURE calc_secs_between ( - 10 EXEC 2 12 3 9 secs := (date2 - date1) * 24 * 60 * 60; - 11 EXEC 2 1 0 1 END; - - - -PL/SQL procedure successfully completed. - -utPLSQL 2.3 ut_str Example - -Package STR compiled - - -Package Body STR compiled - - - wtPLSQL 1.1.0 - Run ID 41: 29-Jun-2018 01:04:21 PM - - Test Results for WTP_DEMO.STR - Total Test Cases: 0 Total Assertions: 3 - Minimum Interval msec: 0 Failed Assertions: 0 - Average Interval msec: 102 Error Assertions: 0 - Maximum Interval msec: 305 Test Yield: 100.00% - Total Run Time (sec): 0.3 - - Code Coverage for PACKAGE BODY WTP_DEMO.STR - Ignored Lines: 14 Total Profiled Lines: 25 - Excluded Lines: 1 Total Executed Lines: 4 - Minimum LineExec usec: 0 Not Executed Lines: 5 - Average LineExec usec: 1 Unknown Lines: 1 - Maximum LineExec usec: 9 Code Coverage: 44.40% - Trigger Source Offset: 0 - - - WTP_DEMO.STR Test Result Details (Test Run ID 41) ------------------------------------------------------------ - PASS 305ms Typical Valid Usage. EQ - Expected "is is" and got "is is" - PASS 1ms Test Negative Start. EQ - Expected "ing" and got "ing" - PASS 0ms Start bigger than end. ISNULL - Expected NULL and got "" - - - WTP_DEMO.STR PACKAGE BODY Code Coverage Details (Test Run ID 41) -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 3 UNKN 0 4 1 2 FUNCTION betwn ( - 10 EXEC 3 2 0 1 l_start PLS_INTEGER := start_in; - 12 EXEC 3 1 0 1 IF l_start = 0 - 14#NOTX# 0 0 0 0 l_start := 1; - 17 EXEC 3 12 1 9 RETURN (SUBSTR ( - 25 EXEC 3 0 0 0 END; - 27 EXCL 0 0 0 0 FUNCTION betwn2 ( - 36#NOTX# 0 0 0 0 IF end_in < 0 - 38#NOTX# 0 0 0 0 RETURN betwn (string_in, start_in, end_in); - 40#NOTX# 0 0 0 0 RETURN (SUBSTR ( - 51#NOTX# 0 0 0 0 END; - 55 IGNR 0 1 1 1 PROCEDURE ut_setup - 58 IGNR 1 2 2 2 NULL; - 61 IGNR 0 0 0 0 PROCEDURE ut_teardown - 64 IGNR 1 0 0 0 NULL; - 68 IGNR 0 5 5 5 PROCEDURE ut_betwn - 71 IGNR 1 37 1 36 utassert.eq ( - 76 IGNR 1 2 1 1 utassert.eq ( - 81 IGNR 1 3 1 2 utassert.isnull ( - 85 IGNR 1 0 0 0 END; - 88 IGNR 0 2 2 2 PROCEDURE wtplsql_run IS - 90 IGNR 1 1 1 1 ut_setup; - 91 IGNR 1 1 1 1 ut_betwn; - 92 IGNR 1 0 0 0 ut_teardown; -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 93 IGNR 1 1 1 1 END wtplsql_run; - - - -PL/SQL procedure successfully completed. - -utPLSQL 2.3 ut_truncit Example - -Procedure TRUNCIT compiled - - -Function TABCOUNT compiled - - -Package UT_TRUNCIT compiled - - -Package Body UT_TRUNCIT compiled - - - wtPLSQL 1.1.0 - Run ID 42: 29-Jun-2018 01:04:22 PM - - Test Results for WTP_DEMO.UT_TRUNCIT - Total Test Cases: 0 Total Assertions: 1 - Minimum Interval msec: 363 Failed Assertions: 0 - Average Interval msec: 363 Error Assertions: 0 - Maximum Interval msec: 363 Test Yield: 100.00% - Total Run Time (sec): 0.4 - - Code Coverage for PROCEDURE WTP_DEMO.TRUNCIT - Ignored Lines: 0 Total Profiled Lines: 3 - Excluded Lines: 0 Total Executed Lines: 2 - Minimum LineExec usec: 3 Not Executed Lines: 0 - Average LineExec usec: 7432 Unknown Lines: 1 - Maximum LineExec usec: 14854 Code Coverage: 100.00% - Trigger Source Offset: 0 - - - WTP_DEMO.UT_TRUNCIT Test Result Details (Test Run ID 42) ------------------------------------------------------------ - PASS 363ms Test of TRUNCIT. EQ - Expected "0" and got "0" - - - WTP_DEMO.TRUNCIT PROCEDURE Code Coverage Details (Test Run ID 42) -Source TotTime MinTime MaxTime - Line Stat Occurs (usec) (usec) (usec) Text ------- ---- ------ --------- ------- --------- ------------ - 1 UNKN 0 5 5 5 PROCEDURE truncit ( - 7 EXEC 1 14861 7 14854 EXECUTE IMMEDIATE 'truncate table ' || NVL (sch, USER) || '.' || tab; - 8 EXEC 1 3 3 3 END; - - - -PL/SQL procedure successfully completed. - diff --git a/src/demo/uninstall.sql b/src/demo/uninstall.sql deleted file mode 100644 index 990938d..0000000 --- a/src/demo/uninstall.sql +++ /dev/null @@ -1,9 +0,0 @@ - -spool uninstall -set serveroutput on size unlimited format wrapped - -@common_setup.sql - -drop user &schema_owner. cascade; - -spool off diff --git a/src/demo/uninstallO.LST b/src/demo/uninstallO.LST deleted file mode 100644 index 52c0641..0000000 --- a/src/demo/uninstallO.LST +++ /dev/null @@ -1,5 +0,0 @@ -old:drop user &schema_owner. cascade -new:drop user wtp_demo cascade - -User WTP_DEMO dropped. - diff --git a/wtpgrb/ODBCAPTURE/DLOAD_CONF.cdl b/wtpgrb/ODBCAPTURE/DLOAD_CONF.cdl new file mode 100644 index 0000000..3430689 --- /dev/null +++ b/wtpgrb/ODBCAPTURE/DLOAD_CONF.cdl @@ -0,0 +1,59 @@ + +-- +-- Consolidated Data Load script for ODBCAPTURE.DLOAD_CONF data +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +prompt +prompt Disable Triggers and Foreign Keys +declare + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql || ';'); + execute immediate in_sql; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end run_sql; +begin + for buff in (select owner, trigger_name + from dba_triggers + where table_owner = 'ODBCAPTURE' + and table_name = 'DLOAD_CONF' + order by owner, trigger_name) + loop + run_sql('alter trigger "' || buff.owner || '"' || + '."' || buff.trigger_name || '" DISABLE'); + end loop; + for buff in (select constraint_name + from dba_constraints + where constraint_type = 'R' + and owner = 'ODBCAPTURE' + and table_name = 'DLOAD_CONF' + order by owner, constraint_name) + loop + run_sql('alter table "ODBCAPTURE"."DLOAD_CONF"' || + ' DISABLE constraint "' || buff.constraint_name || '"'); + end loop; +end; +/ + +-- NOTE: Additional file extensions for SQL*Loader include +-- .bad - Bad Records +-- .dsc - Discard Records +-- .log - Log File + +prompt +prompt sqlldr_control=ODBCAPTURE/DLOAD_CONF.ctl +host sqlldr '&1.' control=ODBCAPTURE/DLOAD_CONF.ctl data=ODBCAPTURE/DLOAD_CONF.csv log=ODBCAPTURE/DLOAD_CONF.log silent=HEADER,FEEDBACK + +begin + if '&_RC.' != '0' then + raise_application_error(-20000, 'Control file "ODBCAPTURE/DLOAD_CONF.ctl" returned error: &_RC.'); + end if; +end; +/ + diff --git a/wtpgrb/ODBCAPTURE/DLOAD_CONF.csv b/wtpgrb/ODBCAPTURE/DLOAD_CONF.csv new file mode 100644 index 0000000..a9b2da8 --- /dev/null +++ b/wtpgrb/ODBCAPTURE/DLOAD_CONF.csv @@ -0,0 +1,8 @@ +"USERNAME","TABLE_NAME","INSTALL_TYPE","BEFORE_SELECT_SQL","WHERE_CLAUSE","ORDER_BY_COLUMNS","AFTER_ORDER_BY_SQL","NOTES" +"ODBCAPTURE","DLOAD_CONF","wtpgrb",,"install_type in ('wtpsrc','wtptst','wtpgrb','wtpsav')","USERNAME, TABLE_NAME, INSTALL_TYPE",, +"ODBCAPTURE","OBJECT_CONF","wtpgrb",,"install_type in ('wtpsrc','wtptst','wtpgrb','wtpsav')","USERNAME, INSTALL_OTYPE, INSTALL_TYPE",, +"ODBCAPTURE","ROLE_CONF","wtpgrb",,"install_type in ('wtpsrc','wtptst','wtpgrb','wtpsav')","ROLENAME, INSTALL_TYPE",, +"ODBCAPTURE","SCHEMA_CONF","wtpgrb",,"install_type in ('wtpsrc','wtptst','wtpgrb','wtpsav')","USERNAME",, +"ODBCAPTURE","TYPE_CONF","wtpgrb",,"install_type in ('wtpsrc','wtptst','wtpgrb','wtpsav')","INSTALL_TYPE",, +"WTP","HOOKS","wtpsrc",,,"HOOK_NAME, SEQ",, +"WTP","WT_SELF_TEST","wtptst",,,"ID",, diff --git a/wtpgrb/ODBCAPTURE/DLOAD_CONF.ctl b/wtpgrb/ODBCAPTURE/DLOAD_CONF.ctl new file mode 100644 index 0000000..89a6ffb --- /dev/null +++ b/wtpgrb/ODBCAPTURE/DLOAD_CONF.ctl @@ -0,0 +1,14 @@ +OPTIONS (SKIP=1) +LOAD DATA +APPEND INTO TABLE "ODBCAPTURE"."DLOAD_CONF" +FIELDS CSV WITH EMBEDDED +TRAILING NULLCOLS + (USERNAME CHAR(128) + ,TABLE_NAME CHAR(128) + ,INSTALL_TYPE CHAR(10) + ,BEFORE_SELECT_SQL CHAR(4000) + ,WHERE_CLAUSE CHAR(4000) + ,ORDER_BY_COLUMNS CHAR(4000) + ,AFTER_ORDER_BY_SQL CHAR(4000) + ,NOTES CHAR(1024) + ) diff --git a/wtpgrb/ODBCAPTURE/OBJECT_CONF.cdl b/wtpgrb/ODBCAPTURE/OBJECT_CONF.cdl new file mode 100644 index 0000000..c5824e4 --- /dev/null +++ b/wtpgrb/ODBCAPTURE/OBJECT_CONF.cdl @@ -0,0 +1,59 @@ + +-- +-- Consolidated Data Load script for ODBCAPTURE.OBJECT_CONF data +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +prompt +prompt Disable Triggers and Foreign Keys +declare + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql || ';'); + execute immediate in_sql; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end run_sql; +begin + for buff in (select owner, trigger_name + from dba_triggers + where table_owner = 'ODBCAPTURE' + and table_name = 'OBJECT_CONF' + order by owner, trigger_name) + loop + run_sql('alter trigger "' || buff.owner || '"' || + '."' || buff.trigger_name || '" DISABLE'); + end loop; + for buff in (select constraint_name + from dba_constraints + where constraint_type = 'R' + and owner = 'ODBCAPTURE' + and table_name = 'OBJECT_CONF' + order by owner, constraint_name) + loop + run_sql('alter table "ODBCAPTURE"."OBJECT_CONF"' || + ' DISABLE constraint "' || buff.constraint_name || '"'); + end loop; +end; +/ + +-- NOTE: Additional file extensions for SQL*Loader include +-- .bad - Bad Records +-- .dsc - Discard Records +-- .log - Log File + +prompt +prompt sqlldr_control=ODBCAPTURE/OBJECT_CONF.ctl +host sqlldr '&1.' control=ODBCAPTURE/OBJECT_CONF.ctl data=ODBCAPTURE/OBJECT_CONF.csv log=ODBCAPTURE/OBJECT_CONF.log silent=HEADER,FEEDBACK + +begin + if '&_RC.' != '0' then + raise_application_error(-20000, 'Control file "ODBCAPTURE/OBJECT_CONF.ctl" returned error: &_RC.'); + end if; +end; +/ + diff --git a/wtpgrb/ODBCAPTURE/OBJECT_CONF.csv b/wtpgrb/ODBCAPTURE/OBJECT_CONF.csv new file mode 100644 index 0000000..07d7fea --- /dev/null +++ b/wtpgrb/ODBCAPTURE/OBJECT_CONF.csv @@ -0,0 +1,9 @@ +"USERNAME","INSTALL_OTYPE","INSTALL_TYPE","ONAME_FILTER","NOTES" +"WTP","PACKAGE_BODY","wtpsav","(WT_DBOUT|WT_JOB|WT_PERSIST_REPORT|WT_PROFILE|WT_RESULT|WT_TEST_RUN|WT_TEST_RUNNER|WT_TESTCASE)","Persist Packages" +"WTP","PACKAGE_SPEC","wtpsav","(WT_DBOUT|WT_JOB|WT_PERSIST_REPORT|WT_PROFILE|WT_RESULT|WT_TEST_RUN|WT_TEST_RUNNER|WT_TESTCASE)","Persist Packages" +"WTP","PROCEDURE","wtpsav","JUNIT_XML_PERSIST_ALL","JUnit Reporting from Persist" +"WTP","SEQUENCE","wtpsav","(PLSQL_PROFILER_RUNNUMBER|WT_DBOUTS_SEQ|WT_TEST_RUNNERS_SEQ|WT_TEST_RUNS_SEQ|WT_TESTCASES_SEQ)","Persist Sequences" +"WTP","TABLE","wtpsav","(PLSQL_PROFILER_DATA|PLSQL_PROFILER_RUNS|PLSQL_PROFILER_UNITS|WT_DBOUT_RUNS|WT_DBOUTS|WT_PROFILES|WT_RESULTS|WT_TEST_RUNNERS|WT_TEST_RUNS|WT_TESTCASE_RUNS|WT_TESTCASES)","Persist Tables" +"WTP","TABLE","wtptst","WT_SELF_TEST","Test Table" +"WTP","TABLE_TRIGGER","wtptst","WT_SELF_TEST$TEST","Test Trigger" +"WTP","VIEW","wtpsav","(WT_DBOUT_RUNS_VW|WT_PROFILES_VW|WT_RESULTS_VW|WT_SCHEDULER_JOBS_VW|WT_TEST_RUNS_VW|WT_TESTCASE_RUNS_VW)","Persist Views" diff --git a/wtpgrb/ODBCAPTURE/OBJECT_CONF.ctl b/wtpgrb/ODBCAPTURE/OBJECT_CONF.ctl new file mode 100644 index 0000000..de6f208 --- /dev/null +++ b/wtpgrb/ODBCAPTURE/OBJECT_CONF.ctl @@ -0,0 +1,11 @@ +OPTIONS (SKIP=1) +LOAD DATA +APPEND INTO TABLE "ODBCAPTURE"."OBJECT_CONF" +FIELDS CSV WITH EMBEDDED +TRAILING NULLCOLS + (USERNAME CHAR(128) + ,INSTALL_OTYPE CHAR(20) + ,INSTALL_TYPE CHAR(10) + ,ONAME_FILTER CHAR(4000) + ,NOTES CHAR(1024) + ) diff --git a/wtpgrb/ODBCAPTURE/ROLE_CONF.cdl b/wtpgrb/ODBCAPTURE/ROLE_CONF.cdl new file mode 100644 index 0000000..7690631 --- /dev/null +++ b/wtpgrb/ODBCAPTURE/ROLE_CONF.cdl @@ -0,0 +1,59 @@ + +-- +-- Consolidated Data Load script for ODBCAPTURE.ROLE_CONF data +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +prompt +prompt Disable Triggers and Foreign Keys +declare + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql || ';'); + execute immediate in_sql; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end run_sql; +begin + for buff in (select owner, trigger_name + from dba_triggers + where table_owner = 'ODBCAPTURE' + and table_name = 'ROLE_CONF' + order by owner, trigger_name) + loop + run_sql('alter trigger "' || buff.owner || '"' || + '."' || buff.trigger_name || '" DISABLE'); + end loop; + for buff in (select constraint_name + from dba_constraints + where constraint_type = 'R' + and owner = 'ODBCAPTURE' + and table_name = 'ROLE_CONF' + order by owner, constraint_name) + loop + run_sql('alter table "ODBCAPTURE"."ROLE_CONF"' || + ' DISABLE constraint "' || buff.constraint_name || '"'); + end loop; +end; +/ + +-- NOTE: Additional file extensions for SQL*Loader include +-- .bad - Bad Records +-- .dsc - Discard Records +-- .log - Log File + +prompt +prompt sqlldr_control=ODBCAPTURE/ROLE_CONF.ctl +host sqlldr '&1.' control=ODBCAPTURE/ROLE_CONF.ctl data=ODBCAPTURE/ROLE_CONF.csv log=ODBCAPTURE/ROLE_CONF.log silent=HEADER,FEEDBACK + +begin + if '&_RC.' != '0' then + raise_application_error(-20000, 'Control file "ODBCAPTURE/ROLE_CONF.ctl" returned error: &_RC.'); + end if; +end; +/ + diff --git a/wtpgrb/ODBCAPTURE/ROLE_CONF.csv b/wtpgrb/ODBCAPTURE/ROLE_CONF.csv new file mode 100644 index 0000000..14dfd1b --- /dev/null +++ b/wtpgrb/ODBCAPTURE/ROLE_CONF.csv @@ -0,0 +1 @@ +"ROLENAME","INSTALL_TYPE","NOTES" diff --git a/wtpgrb/ODBCAPTURE/ROLE_CONF.ctl b/wtpgrb/ODBCAPTURE/ROLE_CONF.ctl new file mode 100644 index 0000000..a8308bb --- /dev/null +++ b/wtpgrb/ODBCAPTURE/ROLE_CONF.ctl @@ -0,0 +1,9 @@ +OPTIONS (SKIP=1) +LOAD DATA +APPEND INTO TABLE "ODBCAPTURE"."ROLE_CONF" +FIELDS CSV WITH EMBEDDED +TRAILING NULLCOLS + (ROLENAME CHAR(128) + ,INSTALL_TYPE CHAR(10) + ,NOTES CHAR(1024) + ) diff --git a/wtpgrb/ODBCAPTURE/SCHEMA_CONF.cdl b/wtpgrb/ODBCAPTURE/SCHEMA_CONF.cdl new file mode 100644 index 0000000..3cd7b23 --- /dev/null +++ b/wtpgrb/ODBCAPTURE/SCHEMA_CONF.cdl @@ -0,0 +1,59 @@ + +-- +-- Consolidated Data Load script for ODBCAPTURE.SCHEMA_CONF data +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +prompt +prompt Disable Triggers and Foreign Keys +declare + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql || ';'); + execute immediate in_sql; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end run_sql; +begin + for buff in (select owner, trigger_name + from dba_triggers + where table_owner = 'ODBCAPTURE' + and table_name = 'SCHEMA_CONF' + order by owner, trigger_name) + loop + run_sql('alter trigger "' || buff.owner || '"' || + '."' || buff.trigger_name || '" DISABLE'); + end loop; + for buff in (select constraint_name + from dba_constraints + where constraint_type = 'R' + and owner = 'ODBCAPTURE' + and table_name = 'SCHEMA_CONF' + order by owner, constraint_name) + loop + run_sql('alter table "ODBCAPTURE"."SCHEMA_CONF"' || + ' DISABLE constraint "' || buff.constraint_name || '"'); + end loop; +end; +/ + +-- NOTE: Additional file extensions for SQL*Loader include +-- .bad - Bad Records +-- .dsc - Discard Records +-- .log - Log File + +prompt +prompt sqlldr_control=ODBCAPTURE/SCHEMA_CONF.ctl +host sqlldr '&1.' control=ODBCAPTURE/SCHEMA_CONF.ctl data=ODBCAPTURE/SCHEMA_CONF.csv log=ODBCAPTURE/SCHEMA_CONF.log silent=HEADER,FEEDBACK + +begin + if '&_RC.' != '0' then + raise_application_error(-20000, 'Control file "ODBCAPTURE/SCHEMA_CONF.ctl" returned error: &_RC.'); + end if; +end; +/ + diff --git a/wtpgrb/ODBCAPTURE/SCHEMA_CONF.csv b/wtpgrb/ODBCAPTURE/SCHEMA_CONF.csv new file mode 100644 index 0000000..9cb9078 --- /dev/null +++ b/wtpgrb/ODBCAPTURE/SCHEMA_CONF.csv @@ -0,0 +1,2 @@ +"USERNAME","INSTALL_TYPE","TS_SIZE","NOTES","TABLESPACE_NAME" +"WTP","wtpsrc","512M","PL/SQL Unit Testing with wtPLSQL","USERS" diff --git a/wtpgrb/ODBCAPTURE/SCHEMA_CONF.ctl b/wtpgrb/ODBCAPTURE/SCHEMA_CONF.ctl new file mode 100644 index 0000000..c6953ee --- /dev/null +++ b/wtpgrb/ODBCAPTURE/SCHEMA_CONF.ctl @@ -0,0 +1,11 @@ +OPTIONS (SKIP=1) +LOAD DATA +APPEND INTO TABLE "ODBCAPTURE"."SCHEMA_CONF" +FIELDS CSV WITH EMBEDDED +TRAILING NULLCOLS + (USERNAME CHAR(128) + ,INSTALL_TYPE CHAR(10) + ,TS_SIZE CHAR(10) + ,NOTES CHAR(1024) + ,TABLESPACE_NAME CHAR(30) + ) diff --git a/wtpgrb/ODBCAPTURE/TYPE_CONF.cdl b/wtpgrb/ODBCAPTURE/TYPE_CONF.cdl new file mode 100644 index 0000000..bdae382 --- /dev/null +++ b/wtpgrb/ODBCAPTURE/TYPE_CONF.cdl @@ -0,0 +1,59 @@ + +-- +-- Consolidated Data Load script for ODBCAPTURE.TYPE_CONF data +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +prompt +prompt Disable Triggers and Foreign Keys +declare + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql || ';'); + execute immediate in_sql; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end run_sql; +begin + for buff in (select owner, trigger_name + from dba_triggers + where table_owner = 'ODBCAPTURE' + and table_name = 'TYPE_CONF' + order by owner, trigger_name) + loop + run_sql('alter trigger "' || buff.owner || '"' || + '."' || buff.trigger_name || '" DISABLE'); + end loop; + for buff in (select constraint_name + from dba_constraints + where constraint_type = 'R' + and owner = 'ODBCAPTURE' + and table_name = 'TYPE_CONF' + order by owner, constraint_name) + loop + run_sql('alter table "ODBCAPTURE"."TYPE_CONF"' || + ' DISABLE constraint "' || buff.constraint_name || '"'); + end loop; +end; +/ + +-- NOTE: Additional file extensions for SQL*Loader include +-- .bad - Bad Records +-- .dsc - Discard Records +-- .log - Log File + +prompt +prompt sqlldr_control=ODBCAPTURE/TYPE_CONF.ctl +host sqlldr '&1.' control=ODBCAPTURE/TYPE_CONF.ctl data=ODBCAPTURE/TYPE_CONF.csv log=ODBCAPTURE/TYPE_CONF.log silent=HEADER,FEEDBACK + +begin + if '&_RC.' != '0' then + raise_application_error(-20000, 'Control file "ODBCAPTURE/TYPE_CONF.ctl" returned error: &_RC.'); + end if; +end; +/ + diff --git a/wtpgrb/ODBCAPTURE/TYPE_CONF.csv b/wtpgrb/ODBCAPTURE/TYPE_CONF.csv new file mode 100644 index 0000000..0e11e50 --- /dev/null +++ b/wtpgrb/ODBCAPTURE/TYPE_CONF.csv @@ -0,0 +1,5 @@ +"INSTALL_TYPE","NOTES","INSTALL_TYPE_PARENT" +"wtpgrb","ODBCapture Data for wtPLSQL","grbsrc" +"wtpsav","wtPLSQL Persisted Test Results","wtpsrc" +"wtpsrc","wtPLSQL Unit Testing Source Code (Core)","pub" +"wtptst","wtPLSQL Internal Unit Testing","wtpsrc" diff --git a/wtpgrb/ODBCAPTURE/TYPE_CONF.ctl b/wtpgrb/ODBCAPTURE/TYPE_CONF.ctl new file mode 100644 index 0000000..564839b --- /dev/null +++ b/wtpgrb/ODBCAPTURE/TYPE_CONF.ctl @@ -0,0 +1,9 @@ +OPTIONS (SKIP=1) +LOAD DATA +APPEND INTO TABLE "ODBCAPTURE"."TYPE_CONF" +FIELDS CSV WITH EMBEDDED +TRAILING NULLCOLS + (INSTALL_TYPE CHAR(10) + ,NOTES CHAR(1024) + ,INSTALL_TYPE_PARENT CHAR(10) + ) diff --git a/wtpgrb/alter_foreign_keys.sql b/wtpgrb/alter_foreign_keys.sql new file mode 100644 index 0000000..e3ba0cc --- /dev/null +++ b/wtpgrb/alter_foreign_keys.sql @@ -0,0 +1,88 @@ + +-- +-- Alter "wtpgrb" Install Type Foreign Keys +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure missing_parent_sql + (in_owner sys.dba_constraints.owner%TYPE + ,in_constraint sys.dba_constraints.constraint_name%TYPE) + is + TYPE fk_rec_type is record + (child_owner sys.dba_constraints.owner%TYPE + ,child_table sys.dba_constraints.table_name%TYPE + ,child_column sys.dba_cons_columns.column_name%TYPE + ,parent_owner sys.dba_constraints.owner%TYPE + ,parent_table sys.dba_constraints.table_name%TYPE + ,parent_column sys.dba_cons_columns.column_name%TYPE); + TYPE fk_nt_type is table of fk_rec_type; + fk_nt fk_nt_type; + sql_txt varchar2(1000); + begin + select ctab.owner child_owner, ctab.table_name child_table, ccol.column_name child_column, + ptab.owner parent_owner, ptab.table_name parent_table, pcol.column_name parent_column + bulk collect into fk_nt + from sys.dba_constraints ctab + join sys.dba_cons_columns ccol + on ccol.owner = ctab.owner and ccol.constraint_name = ctab.constraint_name + join sys.dba_constraints ptab + on ptab.owner = ctab.r_owner and ptab.constraint_name = ctab.r_constraint_name + join sys.dba_cons_columns pcol + on pcol.owner = ptab.owner and pcol.constraint_name = ptab.constraint_name + and pcol.position = ccol.position + where ctab.owner = in_owner and ctab.constraint_name = in_constraint + order by ccol.position; + if SQL%NOTFOUND then return; end if; + dbms_output.put_line('-- ORA-20000: Query to find missing parent keys:'); + -- ORA-20000: select "CHILD_KEY" from from "CHILD_OWNER"."CHILD_TABLE" group by "CHILD_KEY" + sql_txt := '-- ORA-20000: select "' || fk_nt(1).child_column; + for i in 2 .. fk_nt.LAST + loop + sql_txt := sql_txt || '", "' || fk_nt(i).child_column; + end loop; + sql_txt := sql_txt || '" from "' || fk_nt(1).child_owner || '"."' || fk_nt(1).child_table || + '" group by "' || fk_nt(1).child_column; + for i in 2 .. fk_nt.LAST + loop + sql_txt := sql_txt || '", "' || fk_nt(i).child_column; + end loop; + dbms_output.put_line (sql_txt || '"'); + -- ORA-20000: MINUS select "PARENT_KEY" from "PARENT_OWNER"."PARENT_TABLE"; + sql_txt := '-- ORA-20000: MINUS select "' || fk_nt(1).parent_column; + for i in 2 .. fk_nt.LAST + loop + sql_txt := sql_txt || '", "' || fk_nt(i).parent_column; + end loop; + sql_txt := sql_txt || '" from "' || fk_nt(1).parent_owner || '"."' || fk_nt(1).parent_table || '";'; + dbms_output.put_line (sql_txt); + end missing_parent_sql; + procedure do_it (in_schema in varchar2) + is + sql_txt varchar2(1000); + begin + for buff in (select owner, table_name, constraint_name from dba_constraints + where constraint_type = 'R' and owner = in_schema + order by owner, table_name, constraint_name) + loop + sql_txt := 'alter table "' || buff.owner || '"."' || buff.table_name || + '" &1. constraint "' || buff.constraint_name || '"'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- *'); + dbms_output.put_line('-- ERROR at line :'); + dbms_output.put_line('-- ' || SQLERRM); + missing_parent_sql(buff.owner,buff.constraint_name); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Foreign Keys is done.'); + end do_it; +begin + dbms_output.put_line('Alter Foreign Keys for wtpgrb Install Type'); + do_it('ODBCAPTURE'); +end; +/ diff --git a/wtpgrb/alter_queues.sql b/wtpgrb/alter_queues.sql new file mode 100644 index 0000000..3e2f20b --- /dev/null +++ b/wtpgrb/alter_queues.sql @@ -0,0 +1,36 @@ + +-- +-- Alter "wtpgrb" Install Type Queues +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select owner, name from dba_queues + where owner = in_schema and queue_type != 'EXCEPTION_QUEUE' + order by owner, name) + loop + sql_txt := 'begin DBMS_AQADM.' || + case '&1.' when 'ENABLE' then 'START_QUEUE' + else 'STOP_QUEUE' + end || + '(QUEUE_NAME => ''' || buff.owner || '.' || buff.name || + ''', ENQUEUE => TRUE, DEQUEUE => TRUE); end;'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Queues is done.'); + end do_it; +begin + dbms_output.put_line('Alter Queues for wtpgrb Install Type'); + do_it('ODBCAPTURE'); +end; +/ diff --git a/wtpgrb/alter_scheduler_jobs.sql b/wtpgrb/alter_scheduler_jobs.sql new file mode 100644 index 0000000..63fb36c --- /dev/null +++ b/wtpgrb/alter_scheduler_jobs.sql @@ -0,0 +1,32 @@ + +-- +-- Alter "wtpgrb" Install Type Scheduler Jobs +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select owner, job_name from dba_scheduler_jobs + where owner = in_schema + order by owner, job_name) + loop + sql_txt := 'begin DBMS_SCHEDULER.&1.(NAME => ''' || + buff.owner || '.' || buff.job_name || '''); end;'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Scheduler Jobs is done.'); + end do_it; +begin + dbms_output.put_line('Alter Scheduler Jobs for wtpgrb Install Type'); + do_it('ODBCAPTURE'); +end; +/ diff --git a/wtpgrb/alter_triggers.sql b/wtpgrb/alter_triggers.sql new file mode 100644 index 0000000..162bf0e --- /dev/null +++ b/wtpgrb/alter_triggers.sql @@ -0,0 +1,32 @@ + +-- +-- Alter "wtpgrb" Install Type Triggers +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select owner, trigger_name from dba_triggers + where table_owner = in_schema + order by owner, trigger_name) + loop + sql_txt := 'alter trigger "' || buff.owner || '"."' || + buff.trigger_name || '" &1.'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Triggers is done.'); + end do_it; +begin + dbms_output.put_line('Alter Triggers for wtpgrb Install Type'); + do_it('ODBCAPTURE'); +end; +/ diff --git a/wtpgrb/compile_all.sql b/wtpgrb/compile_all.sql new file mode 100644 index 0000000..2cb5c68 --- /dev/null +++ b/wtpgrb/compile_all.sql @@ -0,0 +1,36 @@ + +-- +-- Compile All "wtpgrb" Install Type Objects +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select object_name + from sys.dba_objects + where owner = in_schema + and object_type = 'JAVA SOURCE' + order by object_name ) + loop + sql_txt := 'alter java source "' || in_schema || '"."' || buff.object_name || '" compile'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + begin + DBMS_UTILITY.compile_schema(schema => in_schema, compile_all => FALSE); + dbms_output.put_line('-- ' || in_schema || ' Compile All is done.'); + exception when others then + dbms_output.put_line('Compiling Schema ' || in_schema || CHR(10) || SQLERRM); + dbms_output.put_line(''); + end; + end do_it; +begin + dbms_output.put_line('Compile All for wtpgrb Install Type'); + do_it('ODBCAPTURE'); +end; +/ diff --git a/wtpgrb/db_build_junit_report.sql b/wtpgrb/db_build_junit_report.sql new file mode 100644 index 0000000..d3b3fb5 --- /dev/null +++ b/wtpgrb/db_build_junit_report.sql @@ -0,0 +1,112 @@ + +-- +-- Create JUnit XML Report of Database Build Status for "wtpgrb" Install Type +-- + +declare + -- + procedure ot (in_txt in varchar2) is begin + dbms_output.put_line(in_txt); + end ot; + -- + procedure do_it (in_schema in varchar2) is + begin + for tsuite in ( + with q1 as ( + select obj.owner + ,count(obj.owner) NUM_TESTS + ,sum(decode(obj.status, 'VALID', 0, 1)) NUM_FAILURES + ,min(obj.last_ddl_time) TSTAMP + -- Jenkins JUnit Plugin adds all these times together + -- round((max(obj.last_ddl_time) - min(obj.last_ddl_time))*24*60*60) + ,0 ELAPSED_SECS + from dba_objects obj + where obj.owner = in_schema + group by obj.owner + UNION + select syn.table_owner OWNER + ,count(syn.table_owner) NUM_TESTS + ,sum(decode(obj.status, 'VALID', 0, 1)) NUM_FAILURES + ,min(obj.last_ddl_time) TSTAMP + -- Jenkins JUnit Plugin adds all these times together + -- round((max(obj.last_ddl_time) - min(obj.last_ddl_time))*24*60*60) + ,0 ELAPSED_SECS + from dba_synonyms syn + join dba_objects obj + on obj.object_name = syn.synonym_name + and obj.owner = syn.owner + where syn.owner = 'PUBLIC' + and syn.table_owner = in_schema + group by syn.table_owner + ) + select owner -- TESTSUITE + ,sum(NUM_TESTS) NUM_TESTS + ,sum(NUM_FAILURES) NUM_FAILURES + ,max(TSTAMP) TSTAMP + ,sum(ELAPSED_SECS) ELAPSED_SECS + from q1 + group by owner + order by owner) + loop + ot(' '); + for tcase in ( + select obj.object_type -- TESTCASE + ,replace(obj.object_name,'.','_') OBJECT_NAME -- CLASS + ,obj.STATUS + ,0 ELAPSED_SECS + from dba_objects obj + where obj.owner = tsuite.owner + UNION ALL + select 'PUBLIC_SYNONYM' OBJECT_TYPE -- TESTCASE + ,replace(obj.object_name,'.','_') OBJECT_NAME -- CLASS + ,obj.STATUS + ,0 ELAPSED_SECS + from dba_synonyms syn + join dba_objects obj + on obj.object_name = syn.synonym_name + and obj.owner = syn.owner + where syn.owner = 'PUBLIC' + and syn.table_owner = tsuite.owner + order by 1,2 ) + loop + if tcase.status = 'VALID' + then + ot(' ' ); + else + ot(' ' ); + ot(' '); + ot('** Object Status is ' || tcase.status); + for terror in ( + select 'Line ' || line || + ', Col ' || position || + ': ' || UTL_I18N.ESCAPE_REFERENCE(text, 'us7ascii') ERROR_TXT + from dba_errors + where owner = tsuite.owner + and type = decode(tcase.object_type,'PUBLIC_SYNONYM','SYNONYM',tcase.object_type) + and name = tcase.object_name + order by sequence ) + loop + ot(terror.error_txt); + end loop; + ot(' '); + ot(' '); + end if; + end loop; + ot(' '); + end loop; + end do_it; +begin + ot(''); + ot(''); + do_it('ODBCAPTURE'); + ot(''); +end; +/ diff --git a/wtpgrb/db_install.sql b/wtpgrb/db_install.sql new file mode 100644 index 0000000..8fab835 --- /dev/null +++ b/wtpgrb/db_install.sql @@ -0,0 +1,57 @@ + +-- Database Installation Assist +-- Wrapper for Database Installation Scripts +-- +-- Parameters +-- 1) Script Name +-- 2) Schema Name +-- 3) System Connect String + +prompt === DBI Started: &1. + +define DBI_SCRIPT_NAME="&1." +define DBI_SCHEMA_NAME="&2." +define DBI_SYSTEM_CONNECT="&3." + +variable dbi_beg_dtm varchar2(40) +variable dbi_beg_secs number + +set feedback off +begin + -- Initialize Timer + :dbi_beg_dtm := to_char(systimestamp,'YYYY-MM-DD') || 'T' || + to_char(systimestamp,'HH24:MI:SS'); + :dbi_beg_secs := dbms_utility.get_time; + -- Set Current Schema + if length('&DBI_SCHEMA_NAME.') > 0 + then + execute immediate 'alter session set current_schema = "&DBI_SCHEMA_NAME."'; + end if; +end; +/ + +set feedback on +set blockterminator off +set sqlblanklines on + +@"&DBI_SCRIPT_NAME." "&DBI_SYSTEM_CONNECT." "" "" +set serveroutput on size unlimited format wrapped + +set sqlblanklines off +set blockterminator on +set feedback off +begin + -- Reset Current Schema + if length('&DBI_SCHEMA_NAME.') > 0 + then + execute immediate 'alter session set current_schema = "' || USER || '"'; + end if; + -- Show Timer Results + dbms_output.put_line('=== DBI Completed at ' || to_char(systimestamp,'YYYY-MM-DD') || 'T' || + to_char(systimestamp,'HH24:MI:SS') || + ' for a duration of ' || trim( (dbms_utility.get_time - :dbi_beg_secs) / 100 ) || + ' seconds (started at ' || :dbi_beg_dtm || ')'); +end; +/ + +set feedback on diff --git a/wtpgrb/fix_invalid_public_synonyms.sql b/wtpgrb/fix_invalid_public_synonyms.sql new file mode 100644 index 0000000..ef70282 --- /dev/null +++ b/wtpgrb/fix_invalid_public_synonyms.sql @@ -0,0 +1,49 @@ + +-- +-- Re-create Invalid Public Synonyms +-- + +---------------------------------------- +prompt +prompt Re-create Invalid Public Synonyms +set serveroutput on size unlimited format wrapped +set linesize 2499 + +Declare + sql_txt varchar(2000); +Begin + for buff in (with q1 as ( + select owner, object_name, editionable + from dba_objects + where status != 'VALID' + ) + select syn.synonym_name, syn.table_owner, syn.table_name, + case q1.editionable when 'Y' then ' EDITIONABLE' + when NULL then '' + else ' NONEDITIONABLE' + end EDITIONABLE + from dba_synonyms syn + join q1 + on q1.owner = syn.owner + and q1.object_name = syn.synonym_name + join dba_users usr + on usr.username = syn.table_owner + and ( usr.oracle_maintained is null + OR usr.oracle_maintained != 'Y') + where syn.owner = 'PUBLIC' ) + loop + begin + sql_txt := 'CREATE OR REPLACE' || buff.EDITIONABLE || ' PUBLIC SYNONYM "' || + buff.synonym_name || '" for "' || buff.table_owner || '"."' || + buff.table_name ||'"'; + dbms_output.put_line(sql_txt); + execute immediate sql_txt; + exception + when others then + dbms_output.put_line('ERROR:' || CHR(10) || SQLERRM || CHR(10)); + dbms_output.put_line('----------------------------------------'); + end; + end loop; +end; +/ + diff --git a/wtpgrb/install.sql b/wtpgrb/install.sql new file mode 100644 index 0000000..b6323c5 --- /dev/null +++ b/wtpgrb/install.sql @@ -0,0 +1,76 @@ + +-- +-- Master Installation Script +-- All scripts created by "https://ODBCapture.org", Version V2.1 +-- +-- Must be run as SYS +-- +-- Command Line Parameters: +-- 1 - TO_PDB_SYSTEM: SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the pluggable database. +-- The Data Load installation requires this connection information. +-- + +-- NOTE: If running in a Linux based Docker Container from a Windows FileSystem Mount, run this first: +-- dos2unix -f -o ../install/*/*.csv ../install/*/*/*.csv + +define TOP_PDB_SYSTEM="&1." +execute DBMS_JAVA.SET_OUTPUT(1000000); +set serveroutput on size unlimited format wrapped + +---------------------------------------- +prompt Identify this Module in V$SESSION +set appinfo "wtpgrb Installation" + +---------------------------------------- +prompt Setup Abort on Error +WHENEVER SQLERROR EXIT SQL.SQLCODE +WHENEVER OSERROR EXIT + +---------------------------------------- +prompt +prompt ************************** +prompt * Run SYS Installation * +prompt ************************** +prompt +@install_sys.sql "" "" "" + +---------------------------------------- +prompt Setup Continue on Error +WHENEVER SQLERROR CONTINUE +WHENEVER OSERROR CONTINUE + +---------------------------------------- +prompt +prompt ***************************** +prompt * Run SYSTEM Installation * +prompt ***************************** +prompt +connect &TOP_PDB_SYSTEM. +execute DBMS_JAVA.SET_OUTPUT(1000000); +set serveroutput on size unlimited format wrapped +@install_system.sql "" "" "" + +---------------------------------------- +prompt +prompt ************************* +prompt * Install Application * +prompt ************************* +prompt +@install_wtpgrb.sql "&TOP_PDB_SYSTEM." "" "" + +---------------------------------------- +prompt +prompt ***************** +prompt * Run Reports * +prompt ***************** +prompt +@report_status.sql "&TOP_PDB_SYSTEM." "" "" + +---------------------------------------- +set appinfo "Null" +set appinfo off +prompt +prompt "wtpgrb" Installation is Done. + diff --git a/wtpgrb/install_sys.sql b/wtpgrb/install_sys.sql new file mode 100644 index 0000000..c53ba1c --- /dev/null +++ b/wtpgrb/install_sys.sql @@ -0,0 +1,18 @@ + +-- +-- SYS Installation Script +-- +-- Must be run as SYS +-- + +spool install_sys.log + +set blockterminator off +set sqlblanklines on + +---------------------------------------- +set sqlblanklines off +set blockterminator on + +spool off + diff --git a/wtpgrb/install_system.sql b/wtpgrb/install_system.sql new file mode 100644 index 0000000..dd64dd5 --- /dev/null +++ b/wtpgrb/install_system.sql @@ -0,0 +1,18 @@ + +-- +-- SYSTEM Installation Script +-- +-- Must be run as SYSTEM +-- + +spool install_system.log + +set blockterminator off +set sqlblanklines on + +---------------------------------------- +set sqlblanklines off +set blockterminator on + +spool off + diff --git a/wtpgrb/install_wtpgrb.sql b/wtpgrb/install_wtpgrb.sql new file mode 100644 index 0000000..d966577 --- /dev/null +++ b/wtpgrb/install_wtpgrb.sql @@ -0,0 +1,43 @@ + +-- +-- wtpgrb Installation Script +-- +-- Must be run as a SYSTEM User (DBA) +-- +-- Command Line Parameters: +-- 1 - INSTALL_SYSTEM_CONNECT: SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +spool install_wtpgrb.log + +define INSTALL_SYSTEM_CONNECT="&1." + +-- Must Set SQLPREFIX away from "#" Oracle Change Data Capture packages +set sqlprefix "~" + +-- Using "^P", CHR(16), DLE as an escape character +set escape OFF +set escape "" + +---------------------------------------- +-- Prepare for Install +@db_install.sql "./installation_prepare.sql" "" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- DATA_LOAD Install + +@db_install.sql "ODBCAPTURE/DLOAD_CONF.cdl" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/OBJECT_CONF.cdl" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/ROLE_CONF.cdl" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/SCHEMA_CONF.cdl" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "ODBCAPTURE/TYPE_CONF.cdl" "ODBCAPTURE" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- Finalize Installation +@db_install.sql "./installation_finalize.sql" "" "&INSTALL_SYSTEM_CONNECT." + +spool off + diff --git a/wtpgrb/installation_finalize.sql b/wtpgrb/installation_finalize.sql new file mode 100644 index 0000000..7660714 --- /dev/null +++ b/wtpgrb/installation_finalize.sql @@ -0,0 +1,48 @@ + +-- +-- Finalize Installation +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +define FINAL_SYSTEM_CONNECT="&1." + +prompt +prompt Drop_Temp_Publicly_Updateable_Table_SQL +drop table SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE purge; + +prompt +prompt fix_invalid_public_synonyms +@"fix_invalid_public_synonyms.sql" "" + +prompt +prompt compile_all +@"compile_all.sql" "" + +prompt +prompt alter_foreign_keys_ENABLE +@"alter_foreign_keys.sql" "ENABLE" + +prompt +prompt alter_triggers_ENABLE +@"alter_triggers.sql" "ENABLE" + +prompt +prompt update_id_sequences +@"update_id_sequences.sql" "" + +--prompt +--prompt alter_queues_ENABLE +--@"alter_queues.sql" "ENABLE" + +--prompt +--prompt alter_scheduler_jobs_ENABLE +--@"alter_scheduler_jobs.sql" "ENABLE" + +prompt +prompt Load Installation Files +@"odbcapture_installation_logs.cdl" "&FINAL_SYSTEM_CONNECT." diff --git a/wtpgrb/installation_prepare.sql b/wtpgrb/installation_prepare.sql new file mode 100644 index 0000000..265eb55 --- /dev/null +++ b/wtpgrb/installation_prepare.sql @@ -0,0 +1,9 @@ + +-- +-- Prepare for View Install +-- + +prompt +prompt Create_Temp_Publicly_Updateable_Table_SQL +create table SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE (c1 number); +grant all on SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE to PUBLIC with grant option; diff --git a/wtpgrb/list_invalids.csv b/wtpgrb/list_invalids.csv new file mode 100644 index 0000000..e2d4f25 --- /dev/null +++ b/wtpgrb/list_invalids.csv @@ -0,0 +1 @@ +"OWNER","OBJECT_NAME","OBJECT_TYPE","STATUS" diff --git a/wtpgrb/list_invalids.sql b/wtpgrb/list_invalids.sql new file mode 100644 index 0000000..7f7b49b --- /dev/null +++ b/wtpgrb/list_invalids.sql @@ -0,0 +1,47 @@ + +-- +-- List Invalid Objects for "wtpgrb" Install Type +-- + +declare + procedure do_it (in_schema in varchar2) is + begin + for buff in ( + with q1 as ( + select owner + ,object_name + ,object_type + ,status + from dba_objects obj + where obj.owner = in_schema + and ( obj.object_type != 'TYPE' + or obj.object_name not like 'SYSTP%==') + and obj.status != 'VALID' + UNION ALL + select syn.table_owner + ,syn.synonym_name + ,'PUBLIC_SYNONYM' OBJECT_TYPE + ,obj.status + from dba_synonyms syn + join dba_objects obj + on obj.object_name = syn.synonym_name + and obj.owner = syn.owner + and obj.status != 'VALID' + where syn.owner = 'PUBLIC' + and syn.table_owner = in_schema + ) + select '"' || owner || '",' || + '"' || object_name || '",' || + '"' || object_type || '",' || + '"' || status || '"' RECORD_DATA + from q1 + order by RECORD_DATA) + loop + dbms_output.put_line(buff.RECORD_DATA); + end loop; + end do_it; +begin + dbms_output.put_line('"OWNER","OBJECT_NAME","OBJECT_TYPE","STATUS"'); + do_it('ODBCAPTURE'); +end; +/ diff --git a/wtpgrb/log_files_junit_report.sql b/wtpgrb/log_files_junit_report.sql new file mode 100644 index 0000000..8208b33 --- /dev/null +++ b/wtpgrb/log_files_junit_report.sql @@ -0,0 +1,282 @@ + +-- +-- Create JUnit XML Report of Database Log Files for "wtpgrb" Schema +-- + +--Element | Description +-------------|------------- +--TestSuite | install_SYS, install_SYSTEM, and install_wtpgrb +--Hostname | Database Name +--Property | name="Source Version" value="https://github.com/DMSTEX/DMSTEX.git at f2c736d0cc6fd80d961414dcae37df2bed0d69e2 (Branch: main)" +--Testcase | Script Name +--Classname | "Schema Name"."Object Type" +--Assertions | Number of PL/SQL Statements +--Status | PASS/FAIL/ERROR/DISABLE +--Time | Testcase Duration +--Timestamp | Testcase Runtime (ISO 8601 format) +--Errors | Number of Test Errors + +declare + -- + -- Process CLOB Contents from odbcapture_installation_logs + line_txt varchar2(4000); + so_far pls_integer; + end_pos pls_integer; + -- + -- Varchar2 Associative Array + TYPE vc2_aa_type is table of varchar2(4000) + index by pls_integer; + -- + -- Testcases + TYPE tc_rec_type is record + (schema_name varchar2(128) + ,script_ext varchar2(10) -- Script Name Extension + ,num_statements number(3) -- Number of statements executed in a script + ,status varchar2(10) -- PASS/FAIL + ,duration_secs number(5) + ,t_timestamp varchar2(20) -- 2014-01-21T16:17:18 + ,error_message varchar2(4000) + ,tc_err_aa vc2_aa_type + ,tc_sys_out_aa vc2_aa_type + ); + TYPE tc_aa_type is table of tc_rec_type + index by varchar2(256); -- Testcase Name (Script Name with Path) + tc_aa tc_aa_type; + tc_name varchar2(256); -- Testcase Name (Script Name with Path) + prev_tc_name varchar2(256); -- Previous Testcase Name + -- + tc_buff_aa vc2_aa_type; -- Buffer Array for Testcases + sys_buff_aa vc2_aa_type; -- Buffer Array for System + sys_err boolean := FALSE; -- System Error Found + -- + total_tests number(4); + total_errors number(4); + total_duration number(6); + -- + procedure initialize_testcase (in_buff in varchar2) is begin + -- === DBI Started: "ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tab" + tc_name := replace(substr(in_buff, 18, 256),'"',''); + tc_aa(tc_name).schema_name := substr(tc_name, 1, instr(tc_name,'/',1)-1); + tc_aa(tc_name).script_ext := substr(tc_name, instr(tc_name,'.',-1)+1,10); + tc_aa(tc_name).status := 'PASS'; + end initialize_testcase; + -- + procedure finalize_testcase (in_buff in varchar2) is begin + if tc_name is null then return; end if; + tc_aa(tc_name).t_timestamp := substr(in_buff,22,19); + tc_aa(tc_name).duration_secs := substr(in_buff,60,length(in_buff)-60-40); + total_duration := total_duration + tc_aa(tc_name).duration_secs; + if regexp_like(tc_name, '[.]cdl$') + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := '### SQL*Loader Log File: ' || replace(tc_name,'.cdl','.log'); + begin + select substr(replace(contents,CHR(10)||CHR(10),CHR(10)),1,4000) + into tc_buff_aa(tc_buff_aa.COUNT + 1) + from odbcapture_installation_logs + where file_name = replace(tc_name,'.cdl','.log'); + exception when others then + tc_buff_aa(tc_buff_aa.COUNT + 1) := SQLERRM; + end; + end if; + if tc_aa(tc_name).status = 'FAIL' + then + tc_aa(tc_name).num_statements := 1; + total_errors := total_errors + 1; + if tc_buff_aa.COUNT > 0 + then + for i in tc_buff_aa.FIRST .. tc_buff_aa.LAST + loop + tc_aa(tc_name).tc_err_aa(i) := tc_buff_aa(i); + end loop; + end if; + else + tc_aa(tc_name).num_statements := tc_buff_aa.COUNT; + if tc_buff_aa.COUNT > 0 + then + for i in tc_buff_aa.FIRST .. tc_buff_aa.LAST + loop + tc_aa(tc_name).tc_sys_out_aa(i) := tc_buff_aa(i); + end loop; + end if; + end if; + total_tests := total_tests + 1; + prev_tc_name := tc_name; + tc_buff_aa.DELETE; + tc_name := ''; + end finalize_testcase; + -- + procedure process_contents_line (in_txt in varchar2) is + ldr_txt varchar2(4000); + begin + if in_txt is null then return; end if; + case + when regexp_like(in_txt, '^=== DBI Started: ') + then + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := 'Unexpected Testcase End: ' || in_txt; + finalize_testcase(''); + initialize_testcase(in_txt); + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + else + initialize_testcase(in_txt); + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + end if; + when regexp_like(in_txt, '^=== DBI Completed at ') + then + -- === DBI Completed at 2024-03-05T02:54:49 for a duration of 1.25 seconds (started at 2024-03-05T02:54:48) + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + finalize_testcase(in_txt); + else + sys_err := TRUE; + sys_buff_aa(sys_buff_aa.COUNT + 1) := 'Unexpected Testcase End: ' || in_txt; + end if; + when regexp_like(in_txt, '^(-- ){0,1}(PL[/]SQL:|(PLS|OCI|ORA|SP2|SQL|TNS)-[[:digit:]])') + then + -- (-- ){0,1}: "-- " may or may not be present + -- PL/SQL: PL/SQL Message + -- PLS-"digit" PL/SQL Errors + -- OCI-"digit" Oracle Call Interface + -- ORA-"digit" Oracle Database Errors + -- SP2-"digit" SQL*Plus Errors + -- SQL-"digit" SQL Errors + -- TNS-"digit" Transparent Network Substrate Errors + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + tc_aa(tc_name).status := 'FAIL'; + if tc_aa(tc_name).error_message is null + then + tc_aa(tc_name).error_message := in_txt; + end if; + else + sys_err := TRUE; + sys_buff_aa(sys_buff_aa.COUNT + 1) := '(' || prev_tc_name || ') ' || in_txt; + end if; + else + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + else + sys_buff_aa(sys_buff_aa.COUNT + 1) := '(' || prev_tc_name || ') ' || in_txt; + end if; + end case; + end process_contents_line; + -- + procedure p (in_txt in varchar2) is begin + dbms_output.put_line(in_txt); + end p; +begin + -- + prev_tc_name := 'Initializing'; + -- JUnit XML Format for Jenkins: "https://llg.cubic.org/docs/junit/" + p(''); + p(''); + for buf1 in (select rownum TS_ID + ,l.file_name + ,to_char(l.load_dtm,'YYYY-MM-DD') || 'T' || + to_char(l.load_dtm,'HH24:MI:SS') TSTAMP + ,db.db_unique_name + ,l.contents + from odbcapture_installation_logs l + cross join v$database db + where l.install_type = 'wtpgrb' + and l.file_name like 'install%' + and l.load_dtm > trunc(sysdate,'DD') - 2 + order by l.file_name, l.load_dtm) + loop + -- Initialize + tc_aa.DELETE; + tc_buff_aa.DELETE; + sys_buff_aa.DELETE; + tc_name := ''; + total_tests := 0; + total_errors := 0; + total_duration := 0; + -- Fill the Testcase Array + so_far := 0; + loop + end_pos := instr(buf1.contents, chr(10), so_far + 1); + exit when end_pos = 0; + line_txt := substr(buf1.contents, so_far + 1, end_pos - so_far - 1); + process_contents_line(line_txt); + so_far := end_pos; + end loop; + line_txt := substr(buf1.contents, so_far + 1, 4000); + process_contents_line(line_txt); + -- testsuite can appear multiple times, if contained in a testsuites element. It can also be the root element. + p(' '); + tc_name := tc_aa.FIRST; + while tc_name is not null + loop + -- testcase can appear multiple times, see /testsuites/testsuite@tests + p(' '); + if tc_aa(tc_name).status = 'PASS' + then + if tc_aa(tc_name).tc_sys_out_aa.COUNT > 0 + then + -- Data that was written to standard out while the test was executed. optional + p(' '); + for i in tc_aa(tc_name).tc_sys_out_aa.FIRST .. tc_aa(tc_name).tc_sys_out_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(tc_aa(tc_name).tc_sys_out_aa(i))); + end loop; + p(' '); + end if; + else + -- Indicates that the test errored. An errored test is one that had an unanticipated problem. For example an unchecked throwable or a problem with the implementation of the test. Contains as a text node relevant data for the error, for example a stack trace. optional + p(' ' ); -- The error message. e.g., if a java exception is thrown, the return value of getMessage() + if tc_aa(tc_name).tc_err_aa.COUNT > 0 + then + for i in tc_aa(tc_name).tc_err_aa.FIRST .. tc_aa(tc_name).tc_err_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(tc_aa(tc_name).tc_err_aa(i))); + end loop; + end if; + p(' '); + end if; + p(' '); + exit when tc_name = tc_aa.LAST; + tc_name := tc_aa.NEXT(tc_name); + end loop; + if sys_buff_aa.COUNT > 0 + then + if sys_err + then + -- Data that was written to standard error while the test suite was executed. optional + p(' '); + for i in sys_buff_aa.FIRST .. sys_buff_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(sys_buff_aa(i))); + end loop; + p(' '); + else + -- Data that was written to standard out while the test suite was executed. optional + p(' '); + for i in sys_buff_aa.FIRST .. sys_buff_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(sys_buff_aa(i))); + end loop; + p(' '); + end if; + end if; + p(' '); + end loop; + p(''); +end; +/ diff --git a/wtpgrb/odbcapture_installation_logs.cdl b/wtpgrb/odbcapture_installation_logs.cdl new file mode 100644 index 0000000..efb09a6 --- /dev/null +++ b/wtpgrb/odbcapture_installation_logs.cdl @@ -0,0 +1,71 @@ + +-- +-- Consolidated Data Load script for odbcapture_installation_logs data +-- +-- Must be run as SYSTEM +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +prompt +prompt Confirm/Create odbcapture_installation_logs Table +declare + jnk number := 0; + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql || ';'); + execute immediate in_sql; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end run_sql; +begin + begin + execute immediate 'insert into odbcapture_installation_logs(load_dtm, install_type, file_name)' || + ' values(sysdate, ''Test'', ''Test'')'; + rollback; + jnk := 1; + exception when others then + if SQLERRM != 'ORA-00942: table or view does not exist' + then + dbms_output.put_line('odbcapture_installation_logs table: ' || SQLERRM); + end if; + jnk := -1; + end; + if jnk = -1 + then + run_sql('create table odbcapture_installation_logs' || CHR(10) || + ' (load_dtm date' || CHR(10) || + ' ,install_type varchar2(10)' || CHR(10) || + ' ,file_name varchar2(512)' || CHR(10) || + ' ,contents clob)'); + run_sql('comment on column odbcapture_installation_logs.load_dtm is ''Date/Time the installation log file was loaded.'''); + run_sql('comment on column odbcapture_installation_logs.install_type is ''Type of installation (from TYPE_CONF).'''); + run_sql('comment on column odbcapture_installation_logs.file_name is ''Name of installation log file.'''); + run_sql('comment on column odbcapture_installation_logs.contents is ''Contents/Text of the installation log file.'''); + run_sql('comment on table odbcapture_installation_logs is ''ODBCAPTURE installation log files.'''); + run_sql('grant select on odbcapture_installation_logs to public'); + run_sql('create public synonym odbcapture_installation_logs for odbcapture_installation_logs'); + end if; +end; +/ + + +-- NOTE: Additional file extensions for SQL*Loader include +-- .bad - Bad Records +-- .dsc - Discard Records +-- .log - Log File + +prompt +prompt sqlldr_control=./odbcapture_installation_logs.ctl +host sqlldr '&1.' control=odbcapture_installation_logs.ctl data=odbcapture_installation_logs.csv log=odbcapture_installation_logs.log silent=HEADER,FEEDBACK + +begin + if '&_RC.' != '0' then + raise_application_error(-20000, 'Control file "odbcapture_installation_logs.ctl" returned error: &_RC.'); + end if; +end; +/ + diff --git a/wtpgrb/odbcapture_installation_logs.csv b/wtpgrb/odbcapture_installation_logs.csv new file mode 100644 index 0000000..6eb33b5 --- /dev/null +++ b/wtpgrb/odbcapture_installation_logs.csv @@ -0,0 +1,8 @@ +"wtpgrb","install_sys.log" +"wtpgrb","install_system.log" +"wtpgrb","install_wtpgrb.log" +"wtpgrb","ODBCAPTURE/DLOAD_CONF.log" +"wtpgrb","ODBCAPTURE/OBJECT_CONF.log" +"wtpgrb","ODBCAPTURE/ROLE_CONF.log" +"wtpgrb","ODBCAPTURE/SCHEMA_CONF.log" +"wtpgrb","ODBCAPTURE/TYPE_CONF.log" diff --git a/wtpgrb/odbcapture_installation_logs.ctl b/wtpgrb/odbcapture_installation_logs.ctl new file mode 100644 index 0000000..3a1cf46 --- /dev/null +++ b/wtpgrb/odbcapture_installation_logs.ctl @@ -0,0 +1,8 @@ +LOAD DATA +APPEND INTO TABLE "ODBCAPTURE_INSTALLATION_LOGS" +FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' + (LOAD_DTM SYSDATE + ,INSTALL_TYPE char(10) + ,FILE_NAME char(512) + ,CONTENTS LOBFILE(FILE_NAME) TERMINATED BY EOF + ) diff --git a/wtpgrb/report_status.sql b/wtpgrb/report_status.sql new file mode 100644 index 0000000..8bae62c --- /dev/null +++ b/wtpgrb/report_status.sql @@ -0,0 +1,114 @@ + +-- +-- Report Status Script +-- +-- Must be run as SYSTEM User (DBA) +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- +-- Note: odbcapture_installation_logs table will be created +-- to load installation logs (if not already available). +-- + +---------------------------------------- +-- Setup for Reports +set linesize 2499 +set trimspool on +set echo off +set verify off +set termout on +set serveroutput on size unlimited format wrapped + +---------------------------------------- +prompt +prompt Reporting Summary of Install Type Log Errors +declare + TYPE err_aa_type is table of pls_integer index by varchar2(4000); + err_aa err_aa_type; + line_txt varchar2(4000); + so_far pls_integer; + end_pos pls_integer; + procedure add_line is + begin + if regexp_like(line_txt, '(ORA-|SQL-|SP2-|PLS-|PL2-|TNS-|(object|mmap) failed)') + then + begin + err_aa(line_txt) := err_aa(line_txt) + 1; + exception when NO_DATA_FOUND then + err_aa(line_txt) := 1; + end; + end if; + end add_line; +begin + for buff in (select file_name, load_dtm, contents + from odbcapture_installation_logs + where install_type = 'wtpgrb' + and load_dtm > trunc(sysdate,'DD') - 2 + order by file_name, load_dtm) + loop + dbms_output.put_line('Processing file ' || buff.file_name || + ' (' || to_char(buff.load_dtm,'YYYY-MM-DD HH24:MI:SS') || ')'); + err_aa.DELETE; + so_far := 0; + loop + end_pos := instr(buff.contents, chr(10), so_far + 1); + exit when end_pos = 0; + line_txt := substr(buff.contents, so_far + 1, end_pos - so_far - 1); + add_line; + so_far := end_pos; + end loop; + line_txt := substr(buff.contents, so_far + 1, 4000); + add_line; + if err_aa.COUNT = 0 then continue; end if; + line_txt := err_aa.FIRST; + loop + dbms_output.put_line(line_txt); + dbms_output.put_line(' ' || err_aa(line_txt) || ' lines: ' || line_txt); + exit when line_txt = err_aa.LAST; + line_txt := err_aa.NEXT(line_txt); + end loop; + end loop; +end; +/ + +---------------------------------------- +prompt +prompt Reporting Invalid Objects +set feedback off +set termout off +spool list_invalids.csv +@"list_invalids.sql" "" +spool off +set termout on +set feedback on + +---------------------------------------- +prompt +prompt Reporting JUnit XML Database Build Status +set feedback off +set termout off +spool db_build_junit_report.xml +@"db_build_junit_report.sql" "" +spool off +set termout on +set feedback on + +---------------------------------------- +prompt +prompt Reorting JUnit XML Installation Log +set feedback off +set termout off +spool log_files_junit_report.xml +@"log_files_junit_report.sql" "" +spool off +set termout on +set feedback on + +---------------------------------------- +-- Done with Reports +set linesize 80 +set verify on diff --git a/wtpgrb/update_id_sequences.sql b/wtpgrb/update_id_sequences.sql new file mode 100644 index 0000000..9c1e85f --- /dev/null +++ b/wtpgrb/update_id_sequences.sql @@ -0,0 +1,59 @@ + +-- +-- Update "wtpgrb" IDENTITY SEQUENCES +-- + +declare + UNDEFINED_SEQUENCE EXCEPTION; -- sequence not yet defined in this session + PRAGMA EXCEPTION_INIT (UNDEFINED_SEQUENCE, -8002); + l_last_seq number; + l_max_val number; + sql_txt varchar2(4000); + procedure do_it (in_schema_name in varchar2) is + begin + for buff in ( + select tic.owner + ,tic.table_name + ,tic.column_name + ,tic.sequence_name + from dba_tab_identity_cols tic + where tic.owner = in_schema_name) + loop + -- Find the Current Sequence Value + sql_txt := 'select ' || buff.owner || '.' || buff.sequence_name || + '.currval from dual'; + begin + execute immediate sql_txt into l_last_seq; + exception when UNDEFINED_SEQUENCE + then + -- Find the Last Number for the Sequence + select ds.last_number into l_last_seq + from dba_sequences ds + where ds.sequence_owner = buff.owner + and ds.sequence_name = buff.sequence_name; + end; + -- Find the maximum IDENTITY column value + sql_txt := 'select max(' || buff.column_name || ')' || + ' from ' || buff.owner || '.' || buff.table_name; + execute immediate sql_txt into l_max_val; + -- Display values found + dbms_output.put_line(buff.owner || '.' || buff.sequence_name || ' Last Sequence: ' || l_last_seq || + ', ' || buff.owner || '.' || buff.table_name || ' max(' || buff.column_name || ') = ' || l_max_val); + if l_last_seq < l_max_val + then + -- Increment the sequence as necessary + sql_txt := 'begin' || + ' while ' || buff.owner || '.' || buff.sequence_name || '.nextval < ' || l_max_val || + ' loop null; end loop;' || + 'end;'; + dbms_output.put_line(sql_txt); + execute immediate sql_txt;-- using l_last_seq; + end if; + end loop; + dbms_output.put_line('-- ' || in_schema_name || ' Identity Sequence Updates is done.'); + end do_it; +begin + dbms_output.put_line('Update ID Sequences for wtpgrb Install Type'); + do_it('ODBCAPTURE'); +end; +/ diff --git a/wtpsav/WTP/JUNIT_XML_PERSIST_ALL.proc b/wtpsav/WTP/JUNIT_XML_PERSIST_ALL.proc new file mode 100644 index 0000000..965810a --- /dev/null +++ b/wtpsav/WTP/JUNIT_XML_PERSIST_ALL.proc @@ -0,0 +1,123 @@ + +-- +-- Create WTP.JUNIT_XML_PERSIST_ALL Procedure +-- + +set define off + + +--DBMS_METADATA:WTP.JUNIT_XML_PERSIST_ALL + + CREATE OR REPLACE EDITIONABLE PROCEDURE "WTP"."JUNIT_XML_PERSIST_ALL" +is + procedure p (in_line in varchar2) is + begin + DBMS_OUTPUT.PUT_LINE(in_line); + end p; +begin + p(''); + p(''); + p(''); + p(''); + p(''); + for suites in ( + select run.start_dtm + ,run.end_dtm + ,run.id + ,tr.owner || '.' || tr.name SUITE_NAME + ,nvl(db.owner, tr.owner) PACKAGE_NAME + ,case when db.name || db.type is null + then 'TEST_RUNNER' + else db.name || ':' || db.type + end CLASS_NAME + ,run.tc_cnt + ,run.tc_fail + ,extract(day from (run.end_dtm - + run.start_dtm) * 86400000) + TOT_INTERVAL_MSEC + ,run.error_message + from wt_test_runs run + join wt_test_runners tr + on tr.id = run.test_runner_id + left join wt_dbouts db + on db.id = run.dbout_id + where run.is_last_run = wt_test_run.get_last_run_flag + order by run.start_dtm, run.id ) + loop + p(' ' ); + for cases in ( + select run.id + ,tc.testcase + ,tcr.testcase_id + ,tcr.asrt_cnt ASSERTS + ,tcr.asrt_fail FAILURES + ,nvl(tcr.asrt_tot_msec + ,suites.tot_interval_msec) TOT_INTERVAL_MSEC + from wt_test_runs run + left join wt_testcase_runs tcr + on tcr.test_run_id = run.id + left join wt_testcases tc + on tc.id = tcr.testcase_id + where run.id = suites.id + order by testcase ) + loop + if nvl(cases.failures,1) = 0 + and suites.error_message is null + then + p(' '); + else + p(' '); + p(' '); + -- Print each of the non-passing results + for asrts in ( + select wtr.result_seq + ,wtr.status + ,wtr.interval_msec + ,wtr.message + ,wtr.assertion + ,wtr.details + from wt_results wtr + where wtr.test_run_id = suites.id + and ( ( cases.testcase_id is null + and wtr.testcase_id is null) + or wtr.testcase_id = cases.testcase_id) + and wtr.status != 'PASS' + order by wtr.result_seq ) + loop + p(lpad(asrts.result_seq,4) || ': ' || + rpad(asrts.status,4) || ' ' || + lpad(asrts.interval_msec,4) || 'ms ' || + asrts.message || '. ' || + asrts.assertion || ' - ' || + replace(replace(asrts.details + ,CHR(13),'\r') + ,CHR(10),'\n') || '.' ); + end loop; + p(' '); + p(' '); + end if; + end loop; + end loop; + p(' '); + p(''); +end junit_xml_persist_all; +/ + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/PLSQL_PROFILER_DATA.tab b/wtpsav/WTP/PLSQL_PROFILER_DATA.tab new file mode 100644 index 0000000..b48da63 --- /dev/null +++ b/wtpsav/WTP/PLSQL_PROFILER_DATA.tab @@ -0,0 +1,55 @@ + +-- +-- Create WTP.PLSQL_PROFILER_DATA Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:WTP.PLSQL_PROFILER_DATA + + CREATE TABLE "WTP"."PLSQL_PROFILER_DATA" + ( "RUNID" NUMBER, + "UNIT_NUMBER" NUMBER, + "LINE#" NUMBER NOT NULL ENABLE, + "TOTAL_OCCUR" NUMBER, + "TOTAL_TIME" NUMBER, + "MIN_TIME" NUMBER, + "MAX_TIME" NUMBER, + "SPARE1" NUMBER, + "SPARE2" NUMBER, + "SPARE3" NUMBER, + "SPARE4" NUMBER + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "WTP"."PLSQL_PROFILER_DATA" ADD PRIMARY KEY ("RUNID", "UNIT_NUMBER", "LINE#") + USING INDEX ENABLE; + +-- Comments + +--DBMS_METADATA:WTP.PLSQL_PROFILER_DATA + + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_DATA"."RUNID" IS 'Primary key, unique (generated) run identifier'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_DATA"."UNIT_NUMBER" IS 'Primary key, internally generated library unit number'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_DATA"."LINE#" IS 'Primary key, not null, line number in unit'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_DATA"."TOTAL_OCCUR" IS 'Number of times line was executed'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_DATA"."TOTAL_TIME" IS 'Total time spent executing line in nanoseconds'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_DATA"."MIN_TIME" IS 'Minimum execution time for this line in nanoseconds'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_DATA"."MAX_TIME" IS 'Maximum execution time for this line in nanoseconds'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_DATA"."SPARE1" IS 'Unused'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_DATA"."SPARE2" IS 'Unused'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_DATA"."SPARE3" IS 'Unused'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_DATA"."SPARE4" IS 'Unused'; + COMMENT ON TABLE "WTP"."PLSQL_PROFILER_DATA" IS 'Table of program units for DBMS_PROFILER'; + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/PLSQL_PROFILER_DATA.tabfk b/wtpsav/WTP/PLSQL_PROFILER_DATA.tabfk new file mode 100644 index 0000000..ae7b52d --- /dev/null +++ b/wtpsav/WTP/PLSQL_PROFILER_DATA.tabfk @@ -0,0 +1,16 @@ + +-- +-- Create Foreign Keys for WTP.PLSQL_PROFILER_DATA TABLE +-- + +set define off + + +-- NOTE: This is a "BASE TABLE" Foreign Key + +--DBMS_METADATA:WTP.PLSQL_PROFILER_DATA_FK1 + + ALTER TABLE "WTP"."PLSQL_PROFILER_DATA" ADD CONSTRAINT "PLSQL_PROFILER_DATA_FK1" FOREIGN KEY ("RUNID", "UNIT_NUMBER") + REFERENCES "WTP"."PLSQL_PROFILER_UNITS" ("RUNID", "UNIT_NUMBER") ENABLE; + +set define on diff --git a/wtpsav/WTP/PLSQL_PROFILER_RUNNUMBER.seq b/wtpsav/WTP/PLSQL_PROFILER_RUNNUMBER.seq new file mode 100644 index 0000000..ac5e6a8 --- /dev/null +++ b/wtpsav/WTP/PLSQL_PROFILER_RUNNUMBER.seq @@ -0,0 +1,20 @@ + +-- +-- Create WTP.PLSQL_PROFILER_RUNNUMBER Sequence +-- + +set define off + + +--DBMS_METADATA:WTP.PLSQL_PROFILER_RUNNUMBER + + CREATE SEQUENCE "WTP"."PLSQL_PROFILER_RUNNUMBER" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 NOCACHE NOORDER NOCYCLE NOKEEP NOSCALE GLOBAL ; + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/PLSQL_PROFILER_RUNS.tab b/wtpsav/WTP/PLSQL_PROFILER_RUNS.tab new file mode 100644 index 0000000..f6aba61 --- /dev/null +++ b/wtpsav/WTP/PLSQL_PROFILER_RUNS.tab @@ -0,0 +1,51 @@ + +-- +-- Create WTP.PLSQL_PROFILER_RUNS Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:WTP.PLSQL_PROFILER_RUNS + + CREATE TABLE "WTP"."PLSQL_PROFILER_RUNS" + ( "RUNID" NUMBER, + "RELATED_RUN" NUMBER, + "RUN_OWNER" VARCHAR2(32 BYTE), + "RUN_DATE" DATE, + "RUN_COMMENT" VARCHAR2(2047 BYTE), + "RUN_TOTAL_TIME" NUMBER, + "RUN_SYSTEM_INFO" VARCHAR2(2047 BYTE), + "RUN_COMMENT1" VARCHAR2(2047 BYTE), + "SPARE1" VARCHAR2(256 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "WTP"."PLSQL_PROFILER_RUNS" ADD PRIMARY KEY ("RUNID") + USING INDEX ENABLE; + +-- Comments + +--DBMS_METADATA:WTP.PLSQL_PROFILER_RUNS + + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_RUNS"."RUNID" IS '(PRIMARY KEY) Unique run identifier from plsql_profiler_runnumber'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_RUNS"."RELATED_RUN" IS 'Runid of related run (for client/server correlation)'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_RUNS"."RUN_OWNER" IS 'User who started run'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_RUNS"."RUN_DATE" IS 'Start time of run'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_RUNS"."RUN_COMMENT" IS 'User provided comment for this run'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_RUNS"."RUN_TOTAL_TIME" IS 'Elapsed time for this run in nanoseconds'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_RUNS"."RUN_SYSTEM_INFO" IS 'Currently unused'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_RUNS"."RUN_COMMENT1" IS 'Additional comment'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_RUNS"."SPARE1" IS 'Unused'; + COMMENT ON TABLE "WTP"."PLSQL_PROFILER_RUNS" IS 'Table of profiler runs for DBMS_PROFILER'; + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/PLSQL_PROFILER_RUNS.tabind b/wtpsav/WTP/PLSQL_PROFILER_RUNS.tabind new file mode 100644 index 0000000..27c416c --- /dev/null +++ b/wtpsav/WTP/PLSQL_PROFILER_RUNS.tabind @@ -0,0 +1,16 @@ + +-- +-- Create Indexes for WTP.PLSQL_PROFILER_RUNS TABLE +-- + +set define off + + +-- NOTE: This is a "TARGET" Index + +--DBMS_METADATA:WTP.PLSQL_PROFILER_RUNS_IDX1 + + CREATE INDEX "WTP"."PLSQL_PROFILER_RUNS_IDX1" ON "WTP"."PLSQL_PROFILER_RUNS" ("RUN_DATE") + ; + +set define on diff --git a/wtpsav/WTP/PLSQL_PROFILER_UNITS.tab b/wtpsav/WTP/PLSQL_PROFILER_UNITS.tab new file mode 100644 index 0000000..98a1c38 --- /dev/null +++ b/wtpsav/WTP/PLSQL_PROFILER_UNITS.tab @@ -0,0 +1,51 @@ + +-- +-- Create WTP.PLSQL_PROFILER_UNITS Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:WTP.PLSQL_PROFILER_UNITS + + CREATE TABLE "WTP"."PLSQL_PROFILER_UNITS" + ( "RUNID" NUMBER, + "UNIT_NUMBER" NUMBER, + "UNIT_TYPE" VARCHAR2(32 BYTE), + "UNIT_OWNER" VARCHAR2(32 BYTE), + "UNIT_NAME" VARCHAR2(32 BYTE), + "UNIT_TIMESTAMP" DATE, + "TOTAL_TIME" NUMBER DEFAULT 0 NOT NULL ENABLE, + "SPARE1" NUMBER, + "SPARE2" NUMBER + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "WTP"."PLSQL_PROFILER_UNITS" ADD PRIMARY KEY ("RUNID", "UNIT_NUMBER") + USING INDEX ENABLE; + +-- Comments + +--DBMS_METADATA:WTP.PLSQL_PROFILER_UNITS + + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_UNITS"."RUNID" IS '(Primary key) References plsql_profiler_runs'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_UNITS"."UNIT_NUMBER" IS '(Primary key) Internally generated library unit #'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_UNITS"."UNIT_TYPE" IS 'Library unit type'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_UNITS"."UNIT_OWNER" IS 'Library unit owner name'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_UNITS"."UNIT_NAME" IS 'Library unit name timestamp on library unit'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_UNITS"."UNIT_TIMESTAMP" IS 'In the future will be used to detect changes to unit between runs'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_UNITS"."TOTAL_TIME" IS 'Total time spent in this unit in nanoseconds. The profiler does not set this field, but it is provided for the convenience of analysis tools'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_UNITS"."SPARE1" IS 'Unused'; + COMMENT ON COLUMN "WTP"."PLSQL_PROFILER_UNITS"."SPARE2" IS 'Unused'; + COMMENT ON TABLE "WTP"."PLSQL_PROFILER_UNITS" IS 'Table of program units for DBMS_PROFILER'; + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/PLSQL_PROFILER_UNITS.tabfk b/wtpsav/WTP/PLSQL_PROFILER_UNITS.tabfk new file mode 100644 index 0000000..5a4e7b7 --- /dev/null +++ b/wtpsav/WTP/PLSQL_PROFILER_UNITS.tabfk @@ -0,0 +1,16 @@ + +-- +-- Create Foreign Keys for WTP.PLSQL_PROFILER_UNITS TABLE +-- + +set define off + + +-- NOTE: This is a "BASE TABLE" Foreign Key + +--DBMS_METADATA:WTP.PLSQL_PROFILER_UNITS_FK1 + + ALTER TABLE "WTP"."PLSQL_PROFILER_UNITS" ADD CONSTRAINT "PLSQL_PROFILER_UNITS_FK1" FOREIGN KEY ("RUNID") + REFERENCES "WTP"."PLSQL_PROFILER_RUNS" ("RUNID") ENABLE; + +set define on diff --git a/wtpsav/WTP/WT_DBOUT.pbody b/wtpsav/WTP/WT_DBOUT.pbody new file mode 100644 index 0000000..6192dc1 --- /dev/null +++ b/wtpsav/WTP/WT_DBOUT.pbody @@ -0,0 +1,262 @@ + +-- +-- Create WTP.WT_DBOUT Package Body +-- + +set define off + + +--DBMS_METADATA:WTP.WT_DBOUT + + CREATE OR REPLACE EDITIONABLE PACKAGE BODY "WTP"."WT_DBOUT" +as + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + C_OWNER CONSTANT varchar2(50) := 'WT_DBOUT_OWNER_FOR_TESTING_1234ABCD'; + C_NAME CONSTANT varchar2(50) := 'WT_DBOUT_NAME_FOR_TESTING_1234ABCD'; + C_TYPE CONSTANT varchar2(50) := 'DBOUT_TYPE_1234ABCD'; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--------------------- +-- Public Procedures +--------------------- + + +------------------------------------------------------------ +function get_id + (in_owner in varchar2 + ,in_name in varchar2 + ,in_type in varchar2) + return number +is + l_id number; +begin + select id into l_id from wt_dbouts + where owner = in_owner + and name = in_name + and type = in_type; + return l_id; +exception + when NO_DATA_FOUND + then + return NULL; +end get_id; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_get_id + is + l_id number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Setup'; + delete from wt_dbouts + where owner = C_OWNER + and name = C_NAME + and type = C_TYPE; + wt_assert.isnotnull + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 0' + ,check_query_in => 'select count(*) from wt_dbouts' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || + ''' and type = ''' || C_TYPE || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Happy Path 1'; + wt_assert.isnull + (msg_in => 'Check for Null return' + ,check_this_in => get_id(C_OWNER, C_NAME, C_TYPE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Happy Path 2'; + insert into wt_dbouts (id, owner, name, type) + values (wt_dbouts_seq.nextval, C_OWNER, C_NAME, C_TYPE) + returning id into l_id; + wt_assert.eq + (msg_in => 'Check ID return' + ,check_this_in => get_id(C_OWNER, C_NAME, C_TYPE) + ,against_this_in => l_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Teardown'; + delete from wt_dbouts + where owner = C_OWNER + and name = C_NAME + and type = C_TYPE; + wt_assert.eq + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT + ,against_this_in => 1); + commit; + end t_get_id; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function dim_id + (in_owner in varchar2 + ,in_name in varchar2 + ,in_type in varchar2) + return number +is + PRAGMA AUTONOMOUS_TRANSACTION; + rec wt_dbouts%ROWTYPE; +begin + if in_owner is NULL + OR in_name is NULL + OR in_type is NULL + then + return null; + end if; + rec.id := get_id (in_owner, in_name, in_type); + if rec.id is null + then + rec.id := wt_dbouts_seq.nextval; + rec.owner := in_owner; + rec.name := in_name; + rec.type := in_type; + insert into wt_dbouts values rec; + end if; + commit; + return rec.id; +end dim_id; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_dim_id + is + l_id number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Setup'; + delete from wt_dbouts + where owner = C_OWNER + and name = C_NAME + and type = C_TYPE; + wt_assert.isnotnull + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 0' + ,check_query_in => 'select count(*) from wt_dbouts' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || + ''' and type = ''' || C_TYPE || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Happy Path 1'; + l_id := dim_id(C_OWNER, C_NAME, C_TYPE); + wt_assert.isnotnull + (msg_in => 'Check ID return 1' + ,check_this_in => l_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Happy Path 2'; + wt_assert.eq + (msg_in => 'Check ID return 2' + ,check_this_in => dim_id(C_OWNER, C_NAME, C_TYPE) + ,against_this_in => l_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Sad Path 1'; + wt_assert.isnull + (msg_in => 'Check NULL return' + ,check_this_in => dim_id(NULL, NULL, NULL)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Teardown'; + delete from wt_dbouts + where owner = C_OWNER + and name = C_NAME + and type = C_TYPE; + wt_assert.eq + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT + ,against_this_in => 1); + commit; + end t_dim_id; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure delete_records +is +begin + delete from wt_dbouts + where id in ( + select id from wt_dbouts + MINUS + select distinct dbout_id ID from wt_test_runs); +end delete_records; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_delete_records + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Setup'; + delete from wt_dbouts + where owner = C_OWNER + and name = C_NAME + and type = C_TYPE; + wt_assert.isnotnull + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + insert into wt_dbouts (id, owner, name, type) + values (wt_dbouts_seq.nextval, C_OWNER, C_NAME, C_TYPE); + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 1' + ,check_query_in => 'select count(*) from wt_dbouts' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || + ''' and type = ''' || C_TYPE || '''' + ,against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Happy Path 1'; + delete_records; + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 0' + ,check_query_in => 'select count(*) from wt_dbouts' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || + ''' and type = ''' || C_TYPE || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Happy Path 2'; + delete_records; + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should still be 0' + ,check_query_in => 'select count(*) from wt_dbouts' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || + ''' and type = ''' || C_TYPE || '''' + ,against_value_in => 0); + commit; + end t_delete_records; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure WTPLSQL_RUN + is + begin + -------------------------------------- WTPLSQL Testing -- + wtplsql.g_DBOUT := 'WT_DBOUT:PACKAGE BODY'; + t_get_id; + t_dim_id; + t_delete_records; + end; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +end wt_dbout; +/ + +set define on diff --git a/wtpsav/WTP/WT_DBOUT.pspec b/wtpsav/WTP/WT_DBOUT.pspec new file mode 100644 index 0000000..3b4d8a5 --- /dev/null +++ b/wtpsav/WTP/WT_DBOUT.pspec @@ -0,0 +1,55 @@ + +-- +-- Create WTP.WT_DBOUT Package +-- + +set define off + + +--DBMS_METADATA:WTP.WT_DBOUT + + CREATE OR REPLACE EDITIONABLE PACKAGE "WTP"."WT_DBOUT" + authid definer +as + + -- Return a DBOUT Surrogate Key. + -- Return NULL if the DBOUT does not exist. + function get_id + (in_owner in varchar2 + ,in_name in varchar2 + ,in_type in varchar2) + return number; + + -- Return a DBOUT Surrogate Key. + -- Add the DBOUT if it does not exist. + function dim_id + (in_owner in varchar2 + ,in_name in varchar2 + ,in_type in varchar2) + return number; + + -- Delete all records with no child records + procedure delete_records; + + -- WtPLSQL Self Test Procedures + -- + -- alter system set PLSQL_CCFLAGS = + -- 'WTPLSQL_SELFTEST:TRUE' + -- scope=BOTH; + -- + $IF $$WTPLSQL_SELFTEST + $THEN + procedure WTPLSQL_RUN; + $END + +end wt_dbout; +/ + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_DBOUTS.tab b/wtpsav/WTP/WT_DBOUTS.tab new file mode 100644 index 0000000..855e65d --- /dev/null +++ b/wtpsav/WTP/WT_DBOUTS.tab @@ -0,0 +1,45 @@ + +-- +-- Create WTP.WT_DBOUTS Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:WTP.WT_DBOUTS + + CREATE TABLE "WTP"."WT_DBOUTS" + ( "ID" NUMBER(38,0) CONSTRAINT "WT_DBOUTS_NN1" NOT NULL ENABLE, + "OWNER" VARCHAR2(128 BYTE) CONSTRAINT "WT_DBOUTS_NN2" NOT NULL ENABLE, + "NAME" VARCHAR2(128 BYTE) CONSTRAINT "WT_DBOUTS_NN3" NOT NULL ENABLE, + "TYPE" VARCHAR2(20 BYTE) CONSTRAINT "WT_DBOUTS_NN4" NOT NULL ENABLE + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "WTP"."WT_DBOUTS" ADD CONSTRAINT "WT_DBOUTS_PK" PRIMARY KEY ("ID") + USING INDEX ENABLE; +ALTER TABLE "WTP"."WT_DBOUTS" ADD CONSTRAINT "WT_DBOUTS_NK1" UNIQUE ("OWNER", "NAME", "TYPE") + USING INDEX ENABLE; + +-- Comments + +--DBMS_METADATA:WTP.WT_DBOUTS + + COMMENT ON COLUMN "WTP"."WT_DBOUTS"."ID" IS 'Primary (Surrogate) Key for each Database Objects Under Test (DBOUT)'; + COMMENT ON COLUMN "WTP"."WT_DBOUTS"."OWNER" IS 'Owner of the Database Object Under Test (DBOUT).'; + COMMENT ON COLUMN "WTP"."WT_DBOUTS"."NAME" IS 'Name of the Database Object Under Test (DBOUT).'; + COMMENT ON COLUMN "WTP"."WT_DBOUTS"."TYPE" IS 'Type of the Database Object Under Test (DBOUT).'; + COMMENT ON TABLE "WTP"."WT_DBOUTS" IS 'List of Database Objects Under Test (DBOUT).'; + + +-- Grants +grant DELETE on "WTP"."WT_DBOUTS" to "PUBLIC"; +grant SELECT on "WTP"."WT_DBOUTS" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_DBOUTS.tabind b/wtpsav/WTP/WT_DBOUTS.tabind new file mode 100644 index 0000000..7e6fa80 --- /dev/null +++ b/wtpsav/WTP/WT_DBOUTS.tabind @@ -0,0 +1,16 @@ + +-- +-- Create Indexes for WTP.WT_DBOUTS TABLE +-- + +set define off + + +-- NOTE: This is a "TARGET" Index + +--DBMS_METADATA:WTP.WT_DBOUTS_IX1 + + CREATE INDEX "WTP"."WT_DBOUTS_IX1" ON "WTP"."WT_DBOUTS" ("TYPE", "OWNER") + ; + +set define on diff --git a/wtpsav/WTP/WT_DBOUTS_SEQ.seq b/wtpsav/WTP/WT_DBOUTS_SEQ.seq new file mode 100644 index 0000000..d67fea3 --- /dev/null +++ b/wtpsav/WTP/WT_DBOUTS_SEQ.seq @@ -0,0 +1,20 @@ + +-- +-- Create WTP.WT_DBOUTS_SEQ Sequence +-- + +set define off + + +--DBMS_METADATA:WTP.WT_DBOUTS_SEQ + + CREATE SEQUENCE "WTP"."WT_DBOUTS_SEQ" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE GLOBAL ; + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_DBOUT_RUNS.tab b/wtpsav/WTP/WT_DBOUT_RUNS.tab new file mode 100644 index 0000000..a08b48d --- /dev/null +++ b/wtpsav/WTP/WT_DBOUT_RUNS.tab @@ -0,0 +1,66 @@ + +-- +-- Create WTP.WT_DBOUT_RUNS Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:WTP.WT_DBOUT_RUNS + + CREATE TABLE "WTP"."WT_DBOUT_RUNS" + ( "TEST_RUN_ID" NUMBER(38,0) CONSTRAINT "WT_DBOUT_RUNS_NN1" NOT NULL ENABLE, + "PROFILER_RUNID" NUMBER(38,0) CONSTRAINT "WT_DBOUT_RUNS_NN2" NOT NULL ENABLE, + "TRIGGER_OFFSET" NUMBER(6,0), + "COVERAGE_PCT" NUMBER(4,1), + "PROFILED_LINES" NUMBER(6,0), + "EXECUTED_LINES" NUMBER(6,0), + "IGNORED_LINES" NUMBER(6,0), + "EXCLUDED_LINES" NUMBER(6,0), + "NOTEXEC_LINES" NUMBER(6,0), + "UNKNOWN_LINES" NUMBER(6,0), + "EXEC_MIN_USEC" NUMBER(11,0), + "EXEC_AVG_USEC" NUMBER(11,0), + "EXEC_MAX_USEC" NUMBER(11,0), + "EXEC_TOT_USEC" NUMBER(11,0) + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "WTP"."WT_DBOUT_RUNS" ADD CONSTRAINT "WT_DBOUT_RUNS_PK" PRIMARY KEY ("TEST_RUN_ID") + USING INDEX ENABLE; +ALTER TABLE "WTP"."WT_DBOUT_RUNS" ADD CONSTRAINT "WT_DBOUT_RUNS_NK1" UNIQUE ("PROFILER_RUNID") + USING INDEX ENABLE; + +-- Comments + +--DBMS_METADATA:WTP.WT_DBOUT_RUNS + + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS"."TEST_RUN_ID" IS 'Primary (Surrogate) Key of each Test Run'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS"."PROFILER_RUNID" IS '(Required) DBMS_PROFILER unique run identifier from plsql_profiler_runnumber sequence'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS"."TRIGGER_OFFSET" IS 'Calculated offset from start of Trigger Source to start of Trigger PL/SQL Block.'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS"."COVERAGE_PCT" IS 'Percentage of executed lines to non-ignored, non-excluded lines'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS"."PROFILED_LINES" IS 'Total number of source lines as counted by DBMS_PROFILER'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS"."EXECUTED_LINES" IS 'Number of source lines executed'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS"."IGNORED_LINES" IS 'Number of source lines ignored as uncountable'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS"."EXCLUDED_LINES" IS 'Number of declaration source lines (non-executable) excluded'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS"."NOTEXEC_LINES" IS 'Number of source lines not executed'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS"."UNKNOWN_LINES" IS 'Number of source lines with unknown DBMS_PROFILER metrics'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS"."EXEC_MIN_USEC" IS 'Minumum execution time for a line of source in microseconds'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS"."EXEC_AVG_USEC" IS 'Average execution time for a line of source in microseconds'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS"."EXEC_MAX_USEC" IS 'Maximum execution time for a line of source in microseconds'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS"."EXEC_TOT_USEC" IS 'Total (Sum) of execution times for a line of source in microseconds'; + COMMENT ON TABLE "WTP"."WT_DBOUT_RUNS" IS 'Database Object Under Test Run data for each Test Run.'; + + +-- Grants +grant DELETE on "WTP"."WT_DBOUT_RUNS" to "PUBLIC"; +grant INSERT on "WTP"."WT_DBOUT_RUNS" to "PUBLIC"; +grant SELECT on "WTP"."WT_DBOUT_RUNS" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_DBOUT_RUNS.tabfk b/wtpsav/WTP/WT_DBOUT_RUNS.tabfk new file mode 100644 index 0000000..e50bd65 --- /dev/null +++ b/wtpsav/WTP/WT_DBOUT_RUNS.tabfk @@ -0,0 +1,17 @@ + +-- +-- Create Foreign Keys for WTP.WT_DBOUT_RUNS TABLE +-- + +set define off + + +-- NOTE: This is a "BASE TABLE" Foreign Key + +--DBMS_METADATA:WTP.WT_DBOUT_RUNS_FK1 + + ALTER TABLE "WTP"."WT_DBOUT_RUNS" ADD CONSTRAINT "WT_DBOUT_RUNS_FK1" FOREIGN KEY ("TEST_RUN_ID") + REFERENCES "WTP"."WT_TEST_RUNS" ("ID") ENABLE; + + +set define on diff --git a/wtpsav/WTP/WT_DBOUT_RUNS_VW.vw b/wtpsav/WTP/WT_DBOUT_RUNS_VW.vw new file mode 100644 index 0000000..6c79002 --- /dev/null +++ b/wtpsav/WTP/WT_DBOUT_RUNS_VW.vw @@ -0,0 +1,100 @@ + +-- +-- Create WTP.WT_DBOUT_RUNS_VW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "WTP"."WT_DBOUT_RUNS_VW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants +grant SELECT on "WTP"."WT_DBOUT_RUNS_VW" to "PUBLIC"; + + + +--DBMS_METADATA:WTP.WT_DBOUT_RUNS_VW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "WTP"."WT_DBOUT_RUNS_VW" ("TEST_RUN_ID", "DBOUT_ID", "DBOUT_OWNER", "DBOUT_NAME", "DBOUT_TYPE", "TEST_RUNNER_ID", "TEST_RUNNER_OWNER", "TEST_RUNNER_NAME", "START_DTM", "END_DTM", "IS_LAST_RUN", "ERROR_MESSAGE", "PROFILER_RUNID", "TRIGGER_OFFSET", "COVERAGE_PCT", "PROFILED_LINES", "EXECUTED_LINES", "IGNORED_LINES", "EXCLUDED_LINES", "NOTEXEC_LINES", "UNKNOWN_LINES", "EXEC_MIN_USEC", "EXEC_AVG_USEC", "EXEC_MAX_USEC", "EXEC_TOT_USEC") AS + select run.id TEST_RUN_ID + ,run.dbout_id + ,db.owner DBOUT_OWNER + ,db.name DBOUT_NAME + ,db.type DBOUT_TYPE + ,run.test_runner_id + ,tr.owner TEST_RUNNER_OWNER + ,tr.name TEST_RUNNER_NAME + ,run.start_dtm + ,run.end_dtm + ,run.is_last_run + ,run.error_message + ,dbr.profiler_runid + ,dbr.trigger_offset + ,dbr.coverage_pct + ,dbr.profiled_lines + ,dbr.executed_lines + ,dbr.ignored_lines + ,dbr.excluded_lines + ,dbr.notexec_lines + ,dbr.unknown_lines + ,dbr.exec_min_usec + ,dbr.exec_avg_usec + ,dbr.exec_max_usec + ,dbr.exec_tot_usec + from wt_test_runs run + join wt_dbouts db + on db.id = run.dbout_id + join wt_test_runners tr + on tr.id = run.test_runner_id + left join wt_dbout_runs dbr + on run.id = dbr.test_run_id + where run.dbout_id is not null; + +-- Comments + +--DBMS_METADATA:WTP.WT_DBOUT_RUNS_VW + + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."TEST_RUN_ID" IS 'Primary (Surrogate) Key for each Test Run'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."DBOUT_ID" IS 'Surrogate Key to the Database Object Under Test (DBOUT).'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."DBOUT_OWNER" IS 'Owner of the Database Object Under Test (DBOUT).'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."DBOUT_NAME" IS 'Name of the Database Object Under Test (DBOUT).'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."DBOUT_TYPE" IS 'Type of the Database Object Under Test (DBOUT).'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."TEST_RUNNER_ID" IS 'Surrogate Key the Test Runner package.'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."TEST_RUNNER_OWNER" IS 'Owner of the Test Runner package.'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."TEST_RUNNER_NAME" IS 'Name of the Test Runner package.'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."START_DTM" IS 'Date/time (and fractional seconds) this Test Run started. Natural Key 1 part 2'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."END_DTM" IS 'Date/time (and fractional seconds) this Test Run ended.'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."IS_LAST_RUN" IS 'Optional Flag "Y" to indicate this is the most recent run for this package owner/name'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."ERROR_MESSAGE" IS 'Optional Error messages from this Test Run.'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."PROFILER_RUNID" IS 'DBMS_PROFILER unique run identifier from plsql_profiler_runnumber sequence'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."TRIGGER_OFFSET" IS 'Calculated offset from start of Trigger Source to start of Trigger PL/SQL Block.'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."COVERAGE_PCT" IS 'Percentage of executed source lines to valid executable source lines.'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."PROFILED_LINES" IS 'Total number of source lines as counted by DBMS_PROFILER'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."EXECUTED_LINES" IS 'Number of source lines executed'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."IGNORED_LINES" IS 'Number of source lines ignored as uncountable'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."EXCLUDED_LINES" IS 'Number of source lines excluded due to unexplained DBMS_PROFILER metrics'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."NOTEXEC_LINES" IS 'Number of source lines not executed'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."UNKNOWN_LINES" IS 'Number of source lines that have unexplained DBMS_PROFILER metrics'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."EXEC_MIN_USEC" IS 'Minumum execution time for a line of source in microseconds'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."EXEC_AVG_USEC" IS 'Average execution time for a line of source in microseconds'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."EXEC_MAX_USEC" IS 'Maximum execution time for a line of source in microseconds'; + COMMENT ON COLUMN "WTP"."WT_DBOUT_RUNS_VW"."EXEC_TOT_USEC" IS 'Total (Sum) of execution times for a line of source in microseconds'; + COMMENT ON TABLE "WTP"."WT_DBOUT_RUNS_VW" IS 'Test Run data for each execution of a Test Runner.'; + + +-- Grants +grant SELECT on "WTP"."WT_DBOUT_RUNS_VW" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_JOB.pbody b/wtpsav/WTP/WT_JOB.pbody new file mode 100644 index 0000000..070a0a3 --- /dev/null +++ b/wtpsav/WTP/WT_JOB.pbody @@ -0,0 +1,521 @@ + +-- +-- Create WTP.WT_JOB Package Body +-- + +set define off + + +--DBMS_METADATA:WTP.WT_JOB + + CREATE OR REPLACE EDITIONABLE PACKAGE BODY "WTP"."WT_JOB" +as + + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + g_current_user varchar2(30); + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + +---------------------- +-- Private Procedures +---------------------- + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + + procedure tl_compile_db_object + (in_ptype in varchar2 + ,in_pname in varchar2 + ,in_source in varchar2) + is + l_sql_txt varchar2(4000); + l_errtxt varchar2(32000) := ''; + begin + -------------------------------------- WTPLSQL Testing -- + -- Wrap in_source to complete the DDL statement + l_sql_txt := 'create ' || in_ptype || + ' ' || in_pname || + ' as ' || in_source ; + wt_assert.raises + (msg_in => 'Compile ' || in_ptype || ' ' || in_pname + ,check_call_in => l_sql_txt + ,against_exc_in => ''); + -------------------------------------- WTPLSQL Testing -- + for buff in (select * from user_errors + where attribute = 'ERROR' + and name = in_pname + and type = in_ptype + order by sequence) + loop + l_errtxt := l_errtxt || buff.line || ', ' || + buff.position || ': ' || buff.text || CHR(10); + end loop; + wt_assert.isnull + (msg_in => 'Compile ' || in_ptype || ' ' || in_pname || + ' Error' + ,check_this_in => l_errtxt); + -------------------------------------- WTPLSQL Testing -- + wt_assert.objexists ( + msg_in => in_pname || ' ' || in_ptype, + obj_owner_in => g_current_user, + obj_name_in => upper(in_pname), + obj_type_in => upper(in_ptype)); + end tl_compile_db_object; +--==============================================================-- + -------------------------------------- WTPLSQL Testing -- + procedure tl_drop_db_object + (in_ptype in varchar2, + in_pname in varchar2) + is + l_sql_txt varchar2(4000); + begin + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'drop ' || in_ptype || ' ' || in_pname; + wt_assert.raises + (msg_in => 'drop ' || in_ptype || ' ' || in_pname + ,check_call_in => l_sql_txt + ,against_exc_in => ''); + wt_assert.objnotexists ( + msg_in => in_pname || ' ' || in_ptype, + obj_owner_in => g_current_user, + obj_name_in => upper(in_pname), + obj_type_in => upper(in_ptype)); + end tl_drop_db_object; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +--------------------- +-- Public Procedures +--------------------- + + +------------------------------------------------------------ +procedure create_db_link + (in_schema_name in varchar2 + ,in_password in varchar2) +is + connect_string varchar2(2000); +begin + select '//' || 'localhost' || + ':' || 1521 || + '/' || global_name + into connect_string + from global_name; + execute immediate + 'create database link ' || in_schema_name || + ' connect to ' || in_schema_name || + ' identified by ' || in_password || + ' using ''' || connect_string || ''''; +end create_db_link; + + +------------------------------------------------------------ +procedure drop_db_link + (in_schema_name in varchar2) +is +begin + execute immediate + 'drop database link ' || in_schema_name; +exception when OTHERS then + if SQLERRM != 'ORA-02024: database link not found' + then + ------%WTPLSQL_begin_ignore_lines%------ + -- Can't Test This + raise; + -------%WTPLSQL_end_ignore_lines%------- + end if; +end drop_db_link; + + +------------------------------------------------------------ +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_create_drop_db_link + is + num_rows number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Create and Drop DB Link'; + wt_assert.eqqueryvalue ( + msg_in => 'Number of DB Links before testing', + check_query_in => 'select count(*) from user_db_links', + against_value_in => 0); + wt_assert.raises ( + msg_in => 'Create the Database Link', + check_call_in => 'begin wt_job.create_db_link(''' || + g_current_user || ''',''' || + upper(g_current_user) || '''); end;', + against_exc_in => ''); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Number of DB Links during testing', + check_query_in => 'select count(*) from user_db_links', + against_value_in => 1); + select count(*) + into num_rows + from wt_self_test; + wt_assert.eqqueryvalue ( + msg_in => 'Number of Rows from WT_SELF_TEST@' || g_current_user, + check_query_in => 'select count(*) from WT_SELF_TEST@' || g_current_user, + against_value_in => num_rows); + -------------------------------------- WTPLSQL Testing -- + rollback; + wt_assert.raises ( + msg_in => 'Close the Database Link', + check_call_in => 'alter session close database link ' || + g_current_user, + against_exc_in => ''); + wt_assert.raises ( + msg_in => 'Drop the Database Link', + check_call_in => 'begin wt_job.drop_db_link(''' || + g_current_user || '''); end;', + against_exc_in => ''); + -------------------------------------- WTPLSQL Testing -- + wt_assert.objnotexists ( + msg_in => g_current_user || ' Database Link', + obj_owner_in => g_current_user, + obj_name_in => g_current_user, + obj_type_in => 'DATABASE LINK'); + wt_assert.eqqueryvalue ( + msg_in => 'Number of DB Links after testing', + check_query_in => 'select count(*) from user_db_links', + against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Drop Nonexistent DB Link'; + wt_assert.raises ( + msg_in => 'Drop BOGUS Database Link', + check_call_in => 'begin wt_job.drop_db_link(''BOGUS''); end;', + against_exc_in => ''); + end t_create_drop_db_link; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Waits for all test runners to complete +procedure wait_for_all_tests + (in_timeout_seconds in number default 3600 + ,in_check_interval_seconds in number default 60) +is + num_jobs number := 0; + max_intervals pls_integer; +begin + max_intervals := nvl(in_timeout_seconds,3600) / + nvl(in_check_interval_seconds,60); + for i in 1 .. max_intervals + loop + select count(*) into num_jobs + from user_scheduler_running_jobs; + exit when num_jobs = 0; + dbms_lock.sleep(in_check_interval_seconds); + end loop; + if num_jobs > 0 + then + raise_application_error(-20000, 'WAIT_FOR_ALL_TESTS timeout, ' || + num_jobs || ' jobs still running'); + end if; +end wait_for_all_tests; + + +------------------------------------------------------------ +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_wait_for_all_tests + is + procedure launch_job (in_timeout in number) is + plsql_block varchar2(32000); + begin + plsql_block := + 'declare' || CHR(10) || + ' l_msg varchar2(2000);' || CHR(10) || + ' l_stat integer;' || CHR(10) || + 'begin' || CHR(10) || + ' dbms_alert.register' || CHR(10) || + ' (name => ''WT_JOB_WAIT_UT_ALRT' || + in_timeout || '''' || CHR(10) || + ' ,cleanup => TRUE);' || CHR(10) || + ' dbms_alert.waitone' || CHR(10) || + ' (name => ''WT_JOB_WAIT_UT_ALRT' || + in_timeout || '''' || CHR(10) || + ' ,message => l_msg' || CHR(10) || + ' ,status => l_stat' || CHR(10) || + ' ,timeout => ' || in_timeout || ');' || CHR(10) || + ' dbms_alert.remove' || CHR(10) || + ' (name => ''WT_JOB_WAIT_UT_ALRT' || + in_timeout || ''');' || CHR(10) || + 'end;'; + dbms_scheduler.create_job + (job_name => 'WT_JOB_WAIT_UT_' || in_timeout + ,job_type => 'PLSQL_BLOCK' + ,job_action => plsql_block + ,enabled => TRUE); + dbms_lock.sleep(1); -- Must give job a chance to startup + exception when others then + wt_assert.isnotnull ( + msg_in => 't_wait_for_all_tests: "launch_job" Error', + check_this_in => SQLERRM); + end launch_job; + procedure stop_jobs is + begin + for buff in (select name from sys.DBMS_ALERT_INFO) + loop + dbms_alert.signal(name => buff.name + ,message => 'STOP'); + end loop; + dbms_lock.sleep(1); -- Must give job a chance to process signal + dbms_alert.removeall; -- Not sure why this is necessary + for buff in (select job_name from user_scheduler_running_jobs) + loop + dbms_scheduler.stop_job(job_name => buff.job_name + ,force => TRUE + ,commit_semantics => 'STOP_ON_FIRST_ERROR'); + end loop; + exception when others then + wt_assert.isnotnull ( + msg_in => 't_wait_for_all_tests: "launch_job" Error', + check_this_in => SQLERRM); + end stop_jobs; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Wait for All Tests Happy Path'; + launch_job(1); + wt_assert.eqqueryvalue ( + msg_in => 'Number of Test Runs After', + check_query_in => 'select count(*) from user_scheduler_running_jobs', + against_value_in => 1); + wt_assert.raises(msg_in => 'Wait for All Tests Expected Exception' + ,check_call_in => 'begin wt_job.wait_for_all_tests(in_timeout_seconds => 1' || + ', in_check_interval_seconds => 0.5); end;' + ,against_exc_in => cast (NULL as number)); + stop_jobs; + wt_assert.eqqueryvalue ( + msg_in => 'Number of Test Runs After', + check_query_in => 'select count(*) from user_scheduler_running_jobs', + against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Wait for All Tests Timeout'; + launch_job(10); + wt_assert.eqqueryvalue ( + msg_in => 'Number of Test Runs After', + check_query_in => 'select count(*) from user_scheduler_running_jobs', + against_value_in => 1); + wt_assert.raises(msg_in => 'Wait for All Tests Expected Exception' + ,check_call_in => 'begin wt_job.wait_for_all_tests(in_timeout_seconds => 1' || + ', in_check_interval_seconds => 0.5); end;' + ,against_exc_in => -20000); + stop_jobs; + wt_assert.eqqueryvalue ( + msg_in => 'Number of Test Runs After', + check_query_in => 'select count(*) from user_scheduler_running_jobs', + against_value_in => 0); + end t_wait_for_all_tests; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Run a test runner in a different schema +-- Returns before the test runner is complete +procedure test_run + (in_schema_name in varchar2 + ,in_runner_name in varchar2) +is + plsql_block varchar2(32000); +begin + plsql_block := + 'begin' || CHR(10) || + ' wtplsql.test_run@' || in_schema_name || + '(' || in_runner_name || ');' || CHR(10) || + 'end;'; + dbms_scheduler.create_job + (job_name => substr('WT_TEST_RUN$' || in_schema_name || + '$' || in_runner_name + ,1,30) + ,job_type => 'PLSQL_BLOCK' + ,job_action => plsql_block + ,enabled => TRUE); +end test_run; + + +------------------------------------------------------------ +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_run_and_wait_for_job + is + num_rows number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Run and Wait for Job'; + tl_compile_db_object ('PACKAGE', 'WT_RUN_AND_WAIT_TEST',' + procedure wtplsql_run; + end WT_RUN_AND_WAIT_TEST;'); + tl_compile_db_object ('PACKAGE BODY', 'WT_RUN_AND_WAIT_TEST',' + procedure wtplsql_run is + begin + wt_assert.isnotnull ( + msg_in => ''Test1'', + check_this_in => ''Test1''); + end wtplsql_run; + end WT_RUN_AND_WAIT_TEST;'); + select count(*) into num_rows + from wt_test_runs_vw + where test_runner_owner = g_current_user + and test_runner_name = 'WT_RUN_AND_WAIT_TEST'; + wt_assert.isnotnull ( + msg_in => 'Number of Test Runs Before', + check_this_in => num_rows); + wt_assert.raises + (msg_in => 'wt_job.test_run' + ,check_call_in => 'begin wt_job.test_run(''' || g_current_user || + ''', ''WT_RUN_AND_WAIT_TEST''); end;' + ,against_exc_in => ''); + + wt_assert.raises + (msg_in => 'wait_for_all_tests' + ,check_call_in => 'begin wt_job.wait_for_all_tests(2,0.5); end;' + ,against_exc_in => ''); + wt_assert.eqqueryvalue ( + msg_in => 'Number of Test Runs After', + check_query_in => 'select count(*) from wt_test_runs_vw + where test_runner_id = wt_test_runner.get_id(''' || + g_current_user || + ''', ''WT_RUN_AND_WAIT_TEST'')', + against_value_in => num_rows); + tl_drop_db_object('PACKAGE', 'WT_RUN_AND_WAIT_TEST'); + end t_run_and_wait_for_job; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Run all test runners in a different schema +-- Returns before all test runners are complete +-- NOTE: Unit Testing requires full repeat testing of WTP +-- OR or highly modified testing. Skipping Unit Test +procedure test_all ------%WTPLSQL_begin_ignore_lines%------ + (in_schema_name in varchar2) +is + plsql_block varchar2(32000); +begin + if in_schema_name is null + then + raise_application_error(-20000, 'in_schema_name must not be null'); + end if; + plsql_block := + 'begin' || CHR(10) || + ' wtplsql.test_all@' || in_schema_name || ';' || CHR(10) || + 'end;'; + dbms_scheduler.create_job + (job_name => substr('WT_TEST_ALL$' || in_schema_name + ,1,128) + ,job_type => 'PLSQL_BLOCK' + ,job_action => plsql_block); +end test_all; ----------------%WTPLSQL_end_ignore_lines%---------------- + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_test_all + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Test All Testing'; + wt_assert.isnotnull ( + msg_in => 'Not Testing Test All', + check_this_in => 'Requires full repeat testing of WTP or highly modified testing'); + end t_test_all; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Run all test runners in all schema in sequence +-- Returns before all test runners are complete +-- NOTE: Unit Testing requires full repeat testing of WTP +-- OR or highly modified testing. Skipping Unit Test +procedure test_all_sequential ------%WTPLSQL_begin_ignore_lines%------ +is + plsql_block varchar2(32000); +begin + plsql_block := 'begin' || CHR(10); + for buff in ( + select owner + from wt_qual_test_runners_vw + group by owner) + loop + plsql_block := plsql_block || + ' wtplsql.test_all@' || buff.owner || ';' || CHR(10); + end loop; + plsql_block := plsql_block || + 'end;'; + dbms_scheduler.create_job + (job_name => 'WT_TEST_ALL_SEQUENTIAL' + ,job_type => 'PLSQL_BLOCK' + ,job_action => plsql_block); +end test_all_sequential; ----------------%WTPLSQL_end_ignore_lines%---------------- + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_test_all_sequential + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Test All Sequential Testing'; + wt_assert.isnotnull ( + msg_in => 'Not Testing Test All Sequential', + check_this_in => 'Requires full repeat testing of WTP or highly modified testing'); + end t_test_all_sequential; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Run all test runners in all schema in parallel +-- Returns before all test runners are complete +-- NOTE: Unit Testing requires full repeat testing of WTP +-- or highly modified testing. Skipping Unit Test +procedure test_all_parallel ------%WTPLSQL_begin_ignore_lines%------ +is +begin + for buff in ( + select owner + from wt_qual_test_runners_vw + group by owner) + loop + test_all(buff.owner); + end loop; +end test_all_parallel; ----------------%WTPLSQL_end_ignore_lines%---------------- + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_test_all_parallel + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Test All Parallel Testing'; + wt_assert.isnotnull ( + msg_in => 'Not Testing Test All Parallel', + check_this_in => 'Requires full repeat testing of WTP or highly modified testing'); + end t_test_all_parallel; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure WTPLSQL_RUN + is + begin + wtplsql.g_DBOUT := 'WT_JOB:PACKAGE BODY'; + select username into g_current_user from user_users; + -------------------------------------- WTPLSQL Testing -- + t_create_drop_db_link; + t_wait_for_all_tests; + t_run_and_wait_for_job; + t_test_all; + t_test_all_sequential; + t_test_all_parallel; + end WTPLSQL_RUN; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +end wt_job; +/ + +set define on diff --git a/wtpsav/WTP/WT_JOB.pspec b/wtpsav/WTP/WT_JOB.pspec new file mode 100644 index 0000000..48e72e5 --- /dev/null +++ b/wtpsav/WTP/WT_JOB.pspec @@ -0,0 +1,62 @@ + +-- +-- Create WTP.WT_JOB Package +-- + +set define off + + +--DBMS_METADATA:WTP.WT_JOB + + CREATE OR REPLACE EDITIONABLE PACKAGE "WTP"."WT_JOB" + authid definer +as + + -- Database Links are Required to + -- Run Jobs as Different Owners + procedure create_db_link + (in_schema_name in varchar2 + ,in_password in varchar2); + procedure drop_db_link + (in_schema_name in varchar2); + + -- Waits for all test runners to complete + procedure wait_for_all_tests + (in_timeout_seconds in number default 3600 + ,in_check_interval_seconds in number default 60); + + -- Run a test runner in a different schema + -- Returns before the test runner is complete + procedure test_run + (in_schema_name in varchar2 + ,in_runner_name in varchar2); + + -- Run all test runners in a different schema + -- Returns before all test runners are complete + procedure test_all + (in_schema_name in varchar2); + + -- Run all test runners in all schema in sequence + -- Returns before all test runners are complete + procedure test_all_sequential; + + -- Run all test runners in all schema in parallel + -- Returns before all test runners are complete + procedure test_all_parallel; + + $IF $$WTPLSQL_SELFTEST + $THEN + procedure WTPLSQL_RUN; + $END + +end wt_job; +/ + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_PERSIST_REPORT.pbody b/wtpsav/WTP/WT_PERSIST_REPORT.pbody new file mode 100644 index 0000000..73f86a9 --- /dev/null +++ b/wtpsav/WTP/WT_PERSIST_REPORT.pbody @@ -0,0 +1,333 @@ + +-- +-- Create WTP.WT_PERSIST_REPORT Package Body +-- + +set define off + + +--DBMS_METADATA:WTP.WT_PERSIST_REPORT + + CREATE OR REPLACE EDITIONABLE PACKAGE BODY "WTP"."WT_PERSIST_REPORT" +as + + g_test_runs_rec wt_test_runs_vw%ROWTYPE; + g_dbout_runs_rec wt_dbout_runs_vw%ROWTYPE; + + +---------------------- +-- Private Procedures +---------------------- + +------------------------------------------------------------ +procedure p + (in_text in varchar2) +is +begin + dbms_output.put_line(in_text); +end p; + +------------------------------------------------------------ +procedure summary_out +is + asrt_cnt number; + asrt_fail number; + runner_sec number; + tc_cnt number; + tc_fail number; + tc_yield_pct number; + asrt_min_msec number; + asrt_max_msec number; + asrt_tot_msec number; + asrt_avg_msec number; + -- + ignored_lines number; + profiled_lines number; + excluded_lines number; + executed_lines number; + notexec_lines number; + unknown_lines number; + coverage_pct number; + trigger_offset number; + exec_min_usec number; + exec_avg_usec number; + exec_max_usec number; +begin + p(''); + p(' wtPLSQL ' || wtplsql.show_version); + p(' Test Results for ' || g_test_runs_rec.test_runner_owner || + '.' || g_test_runs_rec.test_runner_name ); + p(' Run ID ' || g_test_runs_rec.test_run_id || + ': ' || to_char(g_test_runs_rec.start_dtm + ,wt_core_report.g_date_format)); + p(' --------------------------------------------------------------'); + -- + asrt_cnt := nvl(g_test_runs_rec.asrt_cnt ,0); + asrt_fail := nvl(g_test_runs_rec.asrt_fail ,0); + runner_sec := nvl(g_test_runs_rec.runner_sec ,0); + tc_cnt := nvl(g_test_runs_rec.tc_cnt ,0); + tc_fail := nvl(g_test_runs_rec.tc_fail ,0); + tc_yield_pct := nvl(g_test_runs_rec.tc_yield_pct ,0); + asrt_min_msec := nvl(g_test_runs_rec.asrt_min_msec,0); + asrt_max_msec := nvl(g_test_runs_rec.asrt_max_msec,0); + asrt_tot_msec := nvl(g_test_runs_rec.asrt_tot_msec,0); + asrt_avg_msec := nvl(g_test_runs_rec.asrt_avg_msec,0); + -- + p(' Minimum Elapsed msec: ' || to_char(asrt_min_msec,'9999999') || + ' Total Assertions: ' || to_char(asrt_cnt ,'9999999') ); + p(' Average Elapsed msec: ' || to_char(asrt_avg_msec,'9999999') || + ' Failed Assertions: ' || to_char(asrt_fail ,'9999999') ); + p(' Maximum Elapsed msec: ' || to_char(asrt_max_msec,'9999999') || + ' Total Testcases: ' || to_char(tc_cnt ,'9999999') ); + p(' Total Run Time (sec): ' || to_char(runner_sec ,'99990.9') || + ' Failed Testcases: ' || to_char(tc_fail ,'9999999') ); + p(' ' || ' ' || + ' Testcase Yield: ' || to_char(tc_yield_pct ,'9999999') || '%'); + -- + if g_dbout_runs_rec.dbout_name is not null + AND g_dbout_runs_rec.profiler_runid is null + then + p(''); + p(' Note: ' || g_dbout_runs_rec.dbout_type || ' ' || + g_dbout_runs_rec.dbout_owner || '.' || + g_dbout_runs_rec.dbout_name || ' was not profiled.'); + end if; + -- + if g_test_runs_rec.error_message is not null + then + p(''); + p(' *** Test Runner Error ***'); + p(g_test_runs_rec.error_message); + end if; + ---------------------------------------- + if g_dbout_runs_rec.profiler_runid is null + then + return; + end if; + p(''); + p(' Code Coverage for ' || g_dbout_runs_rec.dbout_type || + ' ' || g_dbout_runs_rec.dbout_owner || + '.' || g_dbout_runs_rec.dbout_name ); + p(' ----------------------------------------------------------------'); + -- + ignored_lines := nvl(g_dbout_runs_rec.ignored_lines, 0); + profiled_lines := nvl(g_dbout_runs_rec.profiled_lines, 0); + excluded_lines := nvl(g_dbout_runs_rec.excluded_lines, 0); + executed_lines := nvl(g_dbout_runs_rec.executed_lines, 0); + notexec_lines := nvl(g_dbout_runs_rec.notexec_lines, 0); + unknown_lines := nvl(g_dbout_runs_rec.unknown_lines, 0); + coverage_pct := nvl(g_dbout_runs_rec.coverage_pct, 0); + trigger_offset := nvl(g_dbout_runs_rec.trigger_offset, 0); + exec_min_usec := nvl(g_dbout_runs_rec.exec_min_usec, 0); + exec_avg_usec := nvl(g_dbout_runs_rec.exec_avg_usec, 0); + exec_max_usec := nvl(g_dbout_runs_rec.exec_max_usec, 0); + -- + p(' Ignored Lines: ' || to_char(ignored_lines, '9999999') || + ' Total Profiled Lines: ' || to_char(profiled_lines, '9999999') ); + p(' Excluded Lines: ' || to_char(excluded_lines, '9999999') || + ' Total Executed Lines: ' || to_char(executed_lines, '9999999') ); + p(' Minimum LineExec usec: ' || to_char(exec_min_usec, '9999999') || + ' Not Executed Lines: ' || to_char(notexec_lines, '9999999') ); + p(' Average LineExec usec: ' || to_char(exec_avg_usec, '9999999') || + ' Unknown Lines: ' || to_char(unknown_lines, '9999999') ); + p(' Maximum LineExec usec: ' || to_char(exec_max_usec, '9999999') || + ' Code Coverage: ' || to_char(coverage_pct, '99990.9') || '%'); + p(' Trigger Source Offset: ' || to_char(trigger_offset, '9999999') || + ' ' || ' ' ); +end summary_out; + +------------------------------------------------------------ +procedure results_out + (in_show_pass in boolean) +is + l_rec core_data.results_rec_type; + l_show_pass_txt varchar2(1); + old_testcase core_data.long_name; + show_header boolean := TRUE; +begin + if in_show_pass + then + l_show_pass_txt := 'Y'; + else + l_show_pass_txt := 'N'; + end if; + for buff in ( + select * from wt_results_vw + where test_run_id = g_test_runs_rec.test_run_id + and ( l_show_pass_txt = 'Y' + or status != 'PASS') + order by result_seq ) + loop + -- Load l_rec + l_rec.assertion := buff.assertion; + l_rec.pass := (buff.status = 'PASS'); + l_rec.details := buff.details; + l_rec.testcase := buff.testcase; + l_rec.message := buff.message; + l_rec.interval_msec := buff.interval_msec; + -- Remove Consecutive Testcases + if l_rec.testcase = old_testcase + then + l_rec.testcase := ''; + else + old_testcase := l_rec.testcase; + end if; + -- Display header if needed + if show_header + then + p(''); + p(' ' || g_test_runs_rec.test_runner_owner || + '.' || g_test_runs_rec.test_runner_name || + ' Test Result Details' ); + p(' Test Run ID: ' || + g_test_runs_rec.test_run_id ); + p(' --------------------------------------------------------------'); + show_header := FALSE; + end if; + -- Display the result + p(wt_core_report.format_test_result(l_rec)); + end loop; +end results_out; + +------------------------------------------------------------ +procedure profile_out + (in_show_aux in boolean) +is + l_header_txt CONSTANT varchar2(2000) := + 'Source TotTime MinTime MaxTime ' || chr(10) || + ' Line Stat Occurs (usec) (usec) (usec) Text' || chr(10) || + '------ ---- ------ --------- ------- --------- ------------'; + l_show_aux_txt varchar2(1); + header_shown boolean; + procedure l_show_header is begin + p(''); + p(' ' || g_dbout_runs_rec.dbout_owner || + '.' || g_dbout_runs_rec.dbout_name || + ' ' || g_dbout_runs_rec.dbout_type || + ' Code Coverage Details' ); + p(' Test Run ID: ' || + g_test_runs_rec.test_run_id ); + p(' ----------------------------------------------------------------'); + end l_show_header; +begin + if g_dbout_runs_rec.profiler_runid is null + then + return; + end if; + if in_show_aux + then + l_show_aux_txt := 'Y'; + else + l_show_aux_txt := 'N'; + end if; + header_shown := FALSE; + for buff in ( + select line + ,status + ,exec_cnt + ,exec_tot_usec + ,exec_min_usec + ,exec_max_usec + ,text + ,rownum + from wt_profiles + where test_run_id = g_dbout_runs_rec.test_run_id + and ( l_show_aux_txt = 'Y' + or status not in ('EXEC','IGNR','UNKN','EXCL')) + order by line ) + loop + if not header_shown + then + l_show_header; + p(l_header_txt); + header_shown := TRUE; + end if; + if mod(buff.rownum,25) = 0 + then + p(l_header_txt); + end if; + p(to_char(buff.line,'99999') || + case buff.status when 'NOTX' then '#NOTX#' + else ' ' || rpad(buff.status,4) || ' ' + end || + to_char(buff.exec_cnt,'99999') || ' ' || + to_char(buff.exec_tot_usec,'99999999') || ' ' || + to_char(buff.exec_min_usec,'999999') || ' ' || + to_char(buff.exec_max_usec,'99999999') || ' ' || + replace(buff.text,CHR(10),'') ); + end loop; +end profile_out; + + +--------------------- +-- Public Procedures +--------------------- + +------------------------------------------------------------ +procedure dbms_out + (in_runner_owner in varchar2 default USER + ,in_runner_name in varchar2 default null + ,in_detail_level in number default 0 + ,in_summary_last in boolean default FALSE) +is + + g_dbout_runs_recNULL wt_dbout_runs_vw%ROWTYPE; + +begin + + for buff in ( + -- MAX(t2.start_dtm) is a fail-safe if IS_LAST_RUN is not set. + select * from wt_test_runs_vw + where ( test_runner_name, start_dtm) in + (select t2.test_runner_name, max(t2.start_dtm) + from wt_test_runs_vw t2 + where ( ( in_runner_name is not null + and in_runner_name = t2.test_runner_name) + OR in_runner_name is null ) + and t2.test_runner_owner = in_runner_owner + group by t2.test_runner_name ) + order by start_dtm, test_runner_name ) + loop + + -- Load Test Run Record + g_test_runs_rec := buff; + + -- Load the DBOUT Record + begin + select * into g_dbout_runs_rec + from wt_dbout_runs_vw + where test_run_id = buff.test_run_id; + exception when NO_DATA_FOUND + then + g_dbout_runs_rec := g_dbout_runs_recNULL; + end; + + -- Setup Display Order + if in_summary_last + then + if in_detail_level >= 10 + then + profile_out(in_detail_level >= 30); + results_out(in_detail_level >= 20); + end if; + summary_out; + else + summary_out; + if in_detail_level >= 10 + then + results_out(in_detail_level >= 20); + profile_out(in_detail_level >= 30); + end if; + end if; + + p(''); + + end loop; + +end dbms_out; + + +end wt_persist_report; +/ + +set define on diff --git a/wtpsav/WTP/WT_PERSIST_REPORT.pspec b/wtpsav/WTP/WT_PERSIST_REPORT.pspec new file mode 100644 index 0000000..ff2491d --- /dev/null +++ b/wtpsav/WTP/WT_PERSIST_REPORT.pspec @@ -0,0 +1,58 @@ + +-- +-- Create WTP.WT_PERSIST_REPORT Package +-- + +set define off + + +--DBMS_METADATA:WTP.WT_PERSIST_REPORT + + CREATE OR REPLACE EDITIONABLE PACKAGE "WTP"."WT_PERSIST_REPORT" authid definer +as + + -- To report a Test Runner result details: + -- begin + -- wt_persist_report.dbms_out('RUNNER_OWNER', 'RUNNER', 30); + -- end; + -- / + +-- "in_detail_level" settings for DBMS_OUT procedure: +-- * Less than 10 (including null) - No Detail +-- * Assertion results summary. +-- * Profiled lines summary. +-- * 10 to 19 - Minimal Detail +-- * Assertion results summary. +-- * Profiled lines summary. +-- * Failed assertion result details. +-- * Profiled source lines that were "not executed". +-- * 20 to 29 - Partial Full Detail +-- * Assertion results summary. +-- * Profiled lines summary. +-- * All assertion result details. +-- * Profiled source lines that were "not executed". +-- * 30 or more - Full Detail +-- * Assertion results summary. +-- * Profiled lines summary. +-- * All assertion result details. +-- * All profiled source lines. + + procedure dbms_out + (in_runner_owner in varchar2 default USER + ,in_runner_name in varchar2 default null + ,in_detail_level in number default 0 + ,in_summary_last in boolean default FALSE); + +end wt_persist_report; +/ + + +-- Grants + +grant EXECUTE on "WTP"."WT_PERSIST_REPORT" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/src/core/wt_profiler.pkb b/wtpsav/WTP/WT_PROFILE.pbody similarity index 51% rename from src/core/wt_profiler.pkb rename to wtpsav/WTP/WT_PROFILE.pbody index ac5a429..6b94d3c 100644 --- a/src/core/wt_profiler.pkb +++ b/wtpsav/WTP/WT_PROFILE.pbody @@ -1,24 +1,23 @@ -create or replace package body wt_profiler + +-- +-- Create WTP.WT_PROFILE Package Body +-- + +set define off + + +--DBMS_METADATA:WTP.WT_PROFILE + + CREATE OR REPLACE EDITIONABLE PACKAGE BODY "WTP"."WT_PROFILE" as - TYPE rec_type is record - (test_run_id wt_test_runs.id%TYPE - ,dbout_owner wt_test_runs.dbout_owner%TYPE - ,dbout_name wt_test_runs.dbout_name%TYPE - ,dbout_type wt_test_runs.dbout_type%TYPE - ,prof_runid binary_integer - ,trigger_offset binary_integer - ,error_message varchar2(4000)); - g_rec rec_type; - TYPE ignr_aa_type is table of varchar2(1) index by PLS_INTEGER; - g_ignr_aa ignr_aa_type; $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ - g_skip_insert boolean := FALSE; - g_skip_add boolean := FALSE; + g_current_user varchar2(30); + wtplsql_skip_test boolean := FALSE; $END ----------------%WTPLSQL_end_ignore_lines%---------------- ---------------------- @@ -40,10 +39,10 @@ $THEN begin -------------------------------------- WTPLSQL Testing -- -- Wrap in_source to complete the DDL statement - l_sql_txt := 'create or replace ' || in_ptype || ' ' || - in_pname || ' is' || CHR(10) || - in_source || CHR(10) || - 'end ' || in_pname || ';'; + l_sql_txt := 'create or replace ' || + in_ptype || ' ' || + in_pname || ' is' || CHR(10) || + in_source || ';' ; wt_assert.raises (msg_in => 'Compile ' || in_ptype || ' ' || in_pname ,check_call_in => l_sql_txt @@ -65,7 +64,7 @@ $THEN -------------------------------------- WTPLSQL Testing -- wt_assert.objexists ( msg_in => in_pname || ' ' || in_ptype, - obj_owner_in => USER, + obj_owner_in => g_current_user, obj_name_in => upper(in_pname), obj_type_in => upper(in_ptype)); end tl_compile_db_object; @@ -85,7 +84,7 @@ $THEN ,against_exc_in => ''); wt_assert.objnotexists ( msg_in => in_pname || ' ' || in_ptype, - obj_owner_in => USER, + obj_owner_in => g_current_user, obj_name_in => upper(in_pname), obj_type_in => upper(in_ptype)); end tl_drop_db_object; @@ -117,13 +116,15 @@ $THEN --==============================================================-- -------------------------------------- WTPLSQL Testing -- procedure tl_insert_plsql_profiler_recs - (in_test_run_id in number) + (in_test_run_id in number + ,in_run_date_offset in number default 0) is l_sql_txt varchar2(4000); begin -------------------------------------- WTPLSQL Testing -- - l_sql_txt := 'insert into plsql_profiler_runs (runid)' || - ' values (' || in_test_run_id || ')'; + l_sql_txt := 'insert into plsql_profiler_runs (runid, run_date)' || + ' values (' || in_test_run_id || + ', sysdate + ' || in_run_date_offset || ')'; wt_assert.raises ( msg_in => 'insert plsql_profiler_runs (' || in_test_run_id || ')', check_call_in => l_sql_txt, @@ -158,6 +159,9 @@ $THEN msg_in => 'delete plsql_profiler_data (' || in_test_run_id || ')', check_call_in => l_sql_txt, against_exc_in => ''); + wt_assert.isnotnull ( + msg_in => 'plsql_profiler_data rows deleted', + check_this_in => SQL%ROWCOUNT); -------------------------------------- WTPLSQL Testing -- l_sql_txt := 'delete from plsql_profiler_units' || ' where runid = ' || in_test_run_id; @@ -165,6 +169,9 @@ $THEN msg_in => 'delete plsql_profiler_units (' || in_test_run_id || ')', check_call_in => l_sql_txt, against_exc_in => ''); + wt_assert.isnotnull ( + msg_in => 'plsql_profiler_units rows deleted', + check_this_in => SQL%ROWCOUNT); -------------------------------------- WTPLSQL Testing -- l_sql_txt := 'delete from plsql_profiler_runs' || ' where runid = ' || in_test_run_id; @@ -172,6 +179,9 @@ $THEN msg_in => 'delete plsql_profiler_runs (' || in_test_run_id || ')', check_call_in => l_sql_txt, against_exc_in => ''); + wt_assert.isnotnull ( + msg_in => 'plsql_profiler_runs rows deleted', + check_this_in => SQL%ROWCOUNT); commit; end tl_delete_plsql_profiler_recs; --==============================================================-- @@ -184,9 +194,10 @@ $THEN begin -------------------------------------- WTPLSQL Testing -- l_sql_txt := 'insert into wt_test_runs' || - ' (id, start_dtm, runner_owner, runner_name)' || - ' values (' || in_test_run_id || ', sysdate, USER, ''' || - in_runner_name || ''')'; + ' (id, start_dtm, test_runner_id)' || + ' values (' || in_test_run_id || ', sysdate, ' || + wt_test_runner.dim_id(g_current_user + ,in_runner_name) || ')'; wt_assert.raises ( msg_in => 'Insert wt_test_runs (' || in_test_run_id || ')', check_call_in => l_sql_txt, @@ -211,6 +222,10 @@ $THEN msg_in => 'Delete wt_test_runs (' || in_test_run_id || ')', check_call_in => l_sql_txt, against_exc_in => ''); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'wt_test_runs rows deleted', + check_this_in => SQL%ROWCOUNT); wt_assert.eqqueryvalue ( msg_in => 'wt_test_runs (' || in_test_run_id || ') Count', check_query_in => 'select count(*) from wt_test_runs' || @@ -220,14 +235,14 @@ $THEN end tl_delete_test_runs; --==============================================================-- -------------------------------------- WTPLSQL Testing -- - procedure tl_insert_dbout_profiles - (in_rec in wt_dbout_profiles%ROWTYPE) + procedure tl_insert_wt_profiles + (in_rec in wt_profiles%ROWTYPE) is l_sqlerrm varchar2(4000); begin -------------------------------------- WTPLSQL Testing -- begin - insert into wt_dbout_profiles values in_rec; + insert into wt_profiles values in_rec; l_sqlerrm := SQLERRM; commit; exception when others then @@ -235,39 +250,91 @@ $THEN end; -------------------------------------- WTPLSQL Testing -- wt_assert.eq ( - msg_in => 'Insert wt_dbout_profiles (' || in_rec.test_run_id || + msg_in => 'Insert wt_profiles (' || in_rec.test_run_id || ',' || in_rec.line || ')', check_this_in => l_sqlerrm, against_this_in => 'ORA-0000: normal, successful completion'); wt_assert.eqqueryvalue ( - msg_in => 'wt_dbout_profiles (' || in_rec.test_run_id || + msg_in => 'wt_profiles (' || in_rec.test_run_id || ',' || in_rec.line || ') Count', - check_query_in => 'select count(*) from wt_dbout_profiles' || + check_query_in => 'select count(*) from wt_profiles' || ' where test_run_id = ' || in_rec.test_run_id || ' and line = ' || in_rec.line, against_value_in => 1); - end tl_insert_dbout_profiles; + end tl_insert_wt_profiles; +--==============================================================-- + -------------------------------------- WTPLSQL Testing -- + procedure tl_delete_wt_profiles + (in_test_run_id in NUMBER) + is + l_sql_txt varchar2(4000); + begin + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'delete from wt_profiles where test_run_id = ' || + in_test_run_id; + wt_assert.raises ( + msg_in => 'Delete wt_profiles (' || in_test_run_id || ')', + check_call_in => l_sql_txt, + against_exc_in => ''); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'wt_profiles rows deleted', + check_this_in => SQL%ROWCOUNT); + wt_assert.eqqueryvalue ( + msg_in => 'wt_profiles (' || in_test_run_id || ') Count', + check_query_in => 'select count(*) from wt_profiles' || + ' where test_run_id = ' || in_test_run_id, + against_value_in => 0); + commit; + end tl_delete_wt_profiles; +--==============================================================-- + -------------------------------------- WTPLSQL Testing -- + procedure tl_insert_dbout_runs + (in_test_run_id in NUMBER) + is + l_sql_txt varchar2(4000); + begin + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'insert into wt_dbout_runs' || + ' (test_run_id, profiler_runid)' || + ' values (' || in_test_run_id || + ', ' || in_test_run_id || ')'; + wt_assert.raises ( + msg_in => 'Insert wt_dbout_runs (' || in_test_run_id || ')', + check_call_in => l_sql_txt, + against_exc_in => ''); + wt_assert.eqqueryvalue ( + msg_in => 'wt_dbout_runs (' || in_test_run_id || ') Count', + check_query_in => 'select count(*) from wt_dbout_runs' || + ' where test_run_id = ' || in_test_run_id, + against_value_in => 1); + commit; + end tl_insert_dbout_runs; --==============================================================-- -------------------------------------- WTPLSQL Testing -- - procedure tl_delete_dbout_profiles + procedure tl_delete_dbout_runs (in_test_run_id in NUMBER) is l_sql_txt varchar2(4000); begin -------------------------------------- WTPLSQL Testing -- - l_sql_txt := 'delete from wt_dbout_profiles where test_run_id = ' || + l_sql_txt := 'delete from wt_dbout_runs where test_run_id = ' || in_test_run_id; wt_assert.raises ( - msg_in => 'Delete wt_dbout_profiles (' || in_test_run_id || ')', + msg_in => 'Delete wt_dbout_runs (' || in_test_run_id || ')', check_call_in => l_sql_txt, against_exc_in => ''); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'wt_dbout_runs rows deleted', + check_this_in => SQL%ROWCOUNT); wt_assert.eqqueryvalue ( - msg_in => 'wt_dbout_profiles (' || in_test_run_id || ') Count', - check_query_in => 'select count(*) from wt_dbout_profiles' || + msg_in => 'wt_dbout_runs (' || in_test_run_id || ') Count', + check_query_in => 'select count(*) from wt_dbout_runs' || ' where test_run_id = ' || in_test_run_id, against_value_in => 0); commit; - end tl_delete_dbout_profiles; + end tl_delete_dbout_runs; $END ----------------%WTPLSQL_end_ignore_lines%---------------- --==============================================================-- @@ -340,420 +407,117 @@ $END ----------------%WTPLSQL_end_ignore_lines%---------------- ------------------------------------------------------------ -procedure delete_plsql_profiler_recs - (in_profiler_runid in number) +function clear_plsql_profiler_recs + (in_test_run_id in number default NULL) + return number is - PRAGMA AUTONOMOUS_TRANSACTION; + num_recs number := 0; begin - delete from plsql_profiler_data - where runid = in_profiler_runid; - delete from plsql_profiler_units - where runid = in_profiler_runid; - delete from plsql_profiler_runs - where runid = in_profiler_runid; - COMMIT; -end delete_plsql_profiler_recs; + for buff in ( + select runid + from plsql_profiler_runs + where ( in_test_run_id is null + and run_date < sysdate -1 ) + or runid in ( + select profiler_runid from wt_dbout_runs + where test_run_id = in_test_run_id ) ) + loop + delete from plsql_profiler_data where runid = buff.runid; + num_recs := num_recs + SQL%ROWCOUNT; + delete from plsql_profiler_units where runid = buff.runid; + num_recs := num_recs + SQL%ROWCOUNT; + delete from plsql_profiler_runs where runid = buff.runid; + num_recs := num_recs + SQL%ROWCOUNT; + end loop; + return num_recs; +end clear_plsql_profiler_recs; $IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ $THEN - procedure t_delete_profiler_recs + procedure t_clear_plsql_profiler_recs is c_test_run_id constant number := -99; - l_err_stack varchar2(32000); begin -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Delete PL/SQL Profiler Records Happy Path 1'; begin - delete_plsql_profiler_recs(c_test_run_id); -- Should run without error - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; + wt_assert.eq ( + msg_in => 'Run clear_plsql_profiler_recs', + check_this_in => clear_plsql_profiler_recs, + against_this_in => 0); exception when others then - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; + wt_assert.isnull( + msg_in => 'Run clear_plsql_profiler_recs Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); end; -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'delete_plsql_profiler_recs(' || c_test_run_id || ') 1', - check_this_in => l_err_stack); - tl_count_plsql_profiler_recs(c_test_run_id, 0); - -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Delete PL/SQL Profiler Records Happy Path 2'; + tl_insert_test_runs(c_test_run_id, 'Delete Profiler Test 2'); + tl_insert_dbout_runs(c_test_run_id); tl_insert_plsql_profiler_recs(c_test_run_id); tl_count_plsql_profiler_recs(c_test_run_id, 1); + -------------------------------------- WTPLSQL Testing -- begin - delete_plsql_profiler_recs(c_test_run_id); -- Should run without error - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; + wt_assert.eq ( + msg_in => 'Run clear_plsql_profiler_recs(' || c_test_run_id || ')', + check_this_in => clear_plsql_profiler_recs(c_test_run_id), + against_this_in => 3); exception when others then - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; + wt_assert.isnull( + msg_in => 'Run clear_plsql_profiler_recs(' || c_test_run_id || ') Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); end; -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'delete_plsql_profiler_recs(' || c_test_run_id || ') 2', - check_this_in => l_err_stack); tl_count_plsql_profiler_recs(c_test_run_id, 0); - end t_delete_profiler_recs; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- - - ------------------------------------------------------------- -procedure find_dbout - (in_pkg_name in varchar2) -is - -- - -- https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements008.htm#SQLRF51129 - -- Within a namespace, no two objects can have the same name. The following - -- schema objects share one namespace: - -- -) Packages - -- -) Private synonyms - -- -) Sequences - -- -) Stand-alone procedures - -- -) Stand-alone stored functions - -- -) User-defined operators - -- -) User-defined types - -- -) Tables - -- -) Views - -- Each of the following schema objects has its own namespace: - -- -) Clusters - -- -) Constraints - -- -) Database triggers - -- -) Dimensions - -- -) Indexes - -- -) Materialized views (When you create a materialized view, the database - -- creates an internal table of the same name. This table has the same - -- namespace as the other tables in the schema. Therefore, a schema - -- cannot contain a table and a materialized view of the same name.) - -- -) Private database links - -- Because tables and sequences are in the same namespace, a table and a - -- sequence in the same schema cannot have the same name. However, tables - -- and indexes are in different namespaces. Therefore, a table and an index - -- in the same schema can have the same name. - -- Each schema in the database has its own namespaces for the objects it - -- contains. This means, for example, that two tables in different schemas - -- are in different namespaces and can have the same name. - -- Results are unknown if a Database Object Under Test has the same name in - -- different namespaces. - -- - -- Head Regular Expression is - -- '--% WTPLSQL SET DBOUT "' - literal string - -- Main Regular Expression is - -- '[[:alnum:] ._$#:]' - Any alpha, numeric, " ", ".", "_", "$", "#", or ":" character - -- + - One or more of the previous characters - -- Tail Regular Expression is - -- '" %--' - literal string - C_HEAD_RE CONSTANT varchar2(30) := '--% WTPLSQL SET DBOUT "'; - C_MAIN_RE CONSTANT varchar2(30) := '[[:alnum:] ._$#:]+'; - C_TAIL_RE CONSTANT varchar2(30) := '" %--'; - -- This cursor is used to catch the first occurance of a DBOUT annotation - cursor c_annotation is - select regexp_substr(src.text, C_HEAD_RE||C_MAIN_RE||C_TAIL_RE) TEXT - from dba_source src - where src.owner = USER - and src.name = in_pkg_name - and src.type = 'PACKAGE BODY' - and regexp_like(src.text, C_HEAD_RE||C_MAIN_RE||C_TAIL_RE) - order by src.line; - l_target varchar2(32000); - -- This cursor is used to confirm the PL/SQL source is readable - cursor c_readable is - select * - from dba_source src - where src.owner = g_rec.dbout_owner - and src.name = g_rec.dbout_name - and src.type = g_rec.dbout_type; - b_readable c_readable%ROWTYPE; - -- These hold the positions of the separators dot (.) and colon (:) - l_dot_pos number; - l_cln_pos number; -begin - -- Find the first occurance of the DBOUT annotation - open c_annotation; - fetch c_annotation into l_target; - if c_annotation%NOTFOUND - then - -- No annotation was found, close and end - close c_annotation; - return; - end if; - close c_annotation; - -- Strip the Head Sub-String - l_target := regexp_replace(SRCSTR => l_target - ,PATTERN => '^' || C_HEAD_RE - ,REPLACESTR => '' - ,POSITION => 1 - ,OCCURRENCE => 1); - -- Strip the Tail Sub-String - l_target := regexp_replace(SRCSTR => l_target - ,PATTERN => C_TAIL_RE || '$' - ,REPLACESTR => '' - ,POSITION => 1 - ,OCCURRENCE => 1); - -- Locate the Owner/Name separator - l_dot_pos := instr(l_target,'.'); - l_cln_pos := instr(l_target,':'); - begin - select obj.owner - ,obj.object_name - ,obj.object_type - into g_rec.dbout_owner - ,g_rec.dbout_name - ,g_rec.dbout_type - from dba_objects obj - where ( ( -- No separators were given, assume USER is the owner. - -- No object type was given. This could throw TOO_MANY_ROWS. - l_dot_pos = 0 - and l_cln_pos = 0 - and obj.owner = USER - and obj.object_name = l_target ) - OR ( -- No object type was given. This could throw TOO_MANY_ROWS. - l_dot_pos != 0 - and l_cln_pos = 0 - and obj.owner = substr(l_target, 1, l_dot_pos-1) - and obj.object_name = substr(l_target, l_dot_pos+1, 512) ) - OR ( -- No object owner was given, assume USER is the owner. - l_dot_pos = 0 - and l_cln_pos != 0 - and obj.owner = USER - and obj.object_name = substr(l_target, 1, l_cln_pos-1) - and obj.object_type = substr(l_target, l_cln_pos+1, 512) ) - OR ( -- All separators were given - l_dot_pos != 0 - and l_cln_pos != 0 - and obj.owner = substr(l_target, 1, l_dot_pos-1) - and obj.object_name = substr(l_target, l_dot_pos+1, l_cln_pos-l_dot_pos-1) - and obj.object_type = substr(l_target, l_cln_pos+1, 512) ) - ); - exception - when NO_DATA_FOUND - then - g_rec.error_message := 'Unable to find database object "' || - l_target || '".'; - return; - when TOO_MANY_ROWS - then - g_rec.error_message := 'Found too many database objects "' || - l_target || '".'; - return; - end; - -- Find the first occurance of any PL/SQL source - open c_readable; - fetch c_readable into b_readable; - if c_readable%NOTFOUND - then - if g_rec.dbout_type in ('FUNCTION', 'PROCEDURE', 'PACKAGE BODY', - 'TYPE BODY', 'TRIGGER') - then - -- These object types should have PL/SQL source code available - --%WTPLSQL_begin_ignore_lines%-- Untestable: - g_rec.error_message := 'Unable to read source for ' || g_rec.dbout_type || - ' ' || g_rec.dbout_owner || '.' || g_rec.dbout_name ; - --%WTPLSQL_end_ignore_lines%-- - else - g_rec.prof_runid := -1; -- Don't run profiler. - end if; - end if; - close c_readable; - -- -end find_dbout; - -$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ -$THEN - procedure t_find_dbout - is - l_recSAVE rec_type; - l_recNULL rec_type; - l_recTEST rec_type; - l_pname varchar2(128) := 'WT_PROFILE_FIND_DBOUT'; - -------------------------------------- WTPLSQL Testing -- - procedure run_find_dbout is begin - l_recSAVE := g_rec; - g_rec := l_recNULL; - find_dbout(l_pname); - l_recTEST := g_rec; - g_rec := l_recSAVE; - end run_find_dbout; - begin - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Find DBOUT Setup'; - tl_compile_db_object - (in_ptype => 'package' - ,in_pname => l_pname - ,in_source => ' l_junk number;' ); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Find DBOUT Happy Path 1'; - tl_compile_db_object - (in_ptype => 'package body' - ,in_pname => l_pname - ,in_source => 'begin' || CHR(10) || - ' l_junk := 1;' ); - run_find_dbout; - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull - (msg_in => 'l_recTEST.dbout_owner' - ,check_this_in => l_recTEST.dbout_owner); - wt_assert.isnull - (msg_in => 'l_recTEST.dbout_name' - ,check_this_in => l_recTEST.dbout_name); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull - (msg_in => 'l_recTEST.dbout_type' - ,check_this_in => l_recTEST.dbout_type); - wt_assert.isnull - (msg_in => 'l_recTEST.error_message' - ,check_this_in => l_recTEST.error_message); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Find DBOUT Happy Path 2'; - tl_compile_db_object - (in_ptype => 'package body' - ,in_pname => l_pname - ,in_source => - ' --% WTPLSQL SET DBOUT "' || l_pname || - ':PACKAGE BODY" %--' || CHR(10) || - 'begin' || CHR(10) || - ' l_junk := 1;' ); - run_find_dbout; - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq - (msg_in => 'l_recTEST.dbout_owner' - ,check_this_in => l_recTEST.dbout_owner - ,against_this_in => USER); - wt_assert.eq - (msg_in => 'l_recTEST.dbout_name' - ,check_this_in => l_recTEST.dbout_name - ,against_this_in => l_pname); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq - (msg_in => 'l_recTEST.dbout_type' - ,check_this_in => l_recTEST.dbout_type - ,against_this_in => 'PACKAGE BODY'); - wt_assert.isnull - (msg_in => 'l_recTEST.error_message' - ,check_this_in => l_recTEST.error_message); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Find DBOUT Happy Path 3'; - tl_compile_db_object - (in_ptype => 'package body' - ,in_pname => l_pname - ,in_source => - ' --% WTPLSQL SET DBOUT "' || USER || - '.' || l_pname || - ':PACKAGE BODY" %--' || CHR(10) || - 'begin' || CHR(10) || - ' l_junk := 1;' ); - run_find_dbout; - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq - (msg_in => 'l_recTEST.dbout_owner' - ,check_this_in => l_recTEST.dbout_owner - ,against_this_in => USER); - wt_assert.eq - (msg_in => 'l_recTEST.dbout_name' - ,check_this_in => l_recTEST.dbout_name - ,against_this_in => l_pname); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq - (msg_in => 'l_recTEST.dbout_type' - ,check_this_in => l_recTEST.dbout_type - ,against_this_in => 'PACKAGE BODY'); - wt_assert.isnull - (msg_in => 'l_recTEST.error_message' - ,check_this_in => l_recTEST.error_message); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Find DBOUT Sad Path 1'; - tl_compile_db_object - (in_ptype => 'package body' - ,in_pname => l_pname - ,in_source => - -- Don't remove the "||", otherwise this will set the DBOUT - ' --% WTPLSQL SET DBOUT ' || '"BOGUS1" %--' || CHR(10) || - 'begin' || CHR(10) || - ' l_junk := 1;' ); - run_find_dbout; - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull - (msg_in => 'l_recTEST.dbout_owner' - ,check_this_in => l_recTEST.dbout_owner); - wt_assert.isnull - (msg_in => 'l_recTEST.dbout_name' - ,check_this_in => l_recTEST.dbout_name); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull - (msg_in => 'l_recTEST.dbout_type' - ,check_this_in => l_recTEST.dbout_type); - wt_assert.eq - (msg_in => 'l_recTEST.error_message' - ,check_this_in => l_recTEST.error_message - ,against_this_in => 'Unable to find database object "BOGUS1".'); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Find DBOUT Sad Path 2'; - tl_compile_db_object - (in_ptype => 'package body' - ,in_pname => l_pname - ,in_source => - ' --% WTPLSQL SET DBOUT "' || USER || - '.' || l_pname || '" %--' || CHR(10) || - 'begin' || CHR(10) || - ' l_junk := 1;' ); - run_find_dbout; - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq - (msg_in => 'l_recTEST.dbout_owner' - ,check_this_in => l_recTEST.dbout_owner - ,against_this_in => USER); - wt_assert.eq - (msg_in => 'l_recTEST.dbout_name' - ,check_this_in => l_recTEST.dbout_name - ,against_this_in => l_pname); - wt_assert.eq - (msg_in => 'l_recTEST.error_message' - ,check_this_in => l_recTEST.error_message - ,against_this_in => 'Found too many database objects "WTP.WT_PROFILE_FIND_DBOUT".'); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Find DBOUT Sad Path 3'; - tl_compile_db_object - (in_ptype => 'package body' - ,in_pname => l_pname - ,in_source => - -- Don't remove the "||", otherwise this will set the DBOUT - ' --% WTPLSQL SET DBOUT ' || '"SYS.ALL_OBJECTS:VIEW" %--' || CHR(10) || - 'begin' || CHR(10) || - ' l_junk := 1;' ); - run_find_dbout; + tl_delete_dbout_runs(c_test_run_id); + tl_delete_test_runs(c_test_run_id); -------------------------------------- WTPLSQL Testing -- - wt_assert.eq - (msg_in => 'l_recTEST.dbout_owner' - ,check_this_in => l_recTEST.dbout_owner - ,against_this_in => 'SYS'); - wt_assert.eq - (msg_in => 'l_recTEST.dbout_name' - ,check_this_in => l_recTEST.dbout_name - ,against_this_in => 'ALL_OBJECTS'); + wt_assert.g_testcase := 'Delete PL/SQL Profiler Records Happy Path 3'; + tl_insert_test_runs(c_test_run_id, 'Delete Profiler Test 3'); + tl_insert_dbout_runs(c_test_run_id); + tl_insert_plsql_profiler_recs(c_test_run_id, -2); + tl_count_plsql_profiler_recs(c_test_run_id, 1); -------------------------------------- WTPLSQL Testing -- - wt_assert.eq - (msg_in => 'l_recTEST.dbout_type' - ,check_this_in => l_recTEST.dbout_type - ,against_this_in => 'VIEW'); - wt_assert.isnull - (msg_in => 'l_recTEST.error_message' - ,check_this_in => l_recTEST.error_message); + begin + wt_assert.eq ( + msg_in => 'Run clear_plsql_profiler_recs', + check_this_in => clear_plsql_profiler_recs, + against_this_in => 3); + exception when others then + wt_assert.isnull( + msg_in => 'Run clear_plsql_profiler_recs Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Find DBOUT Teardown'; - tl_drop_db_object(l_pname, 'package'); - end t_find_dbout; + tl_count_plsql_profiler_recs(c_test_run_id, 0); + tl_delete_dbout_runs(c_test_run_id); + tl_delete_test_runs(c_test_run_id); + end t_clear_plsql_profiler_recs; $END ----------------%WTPLSQL_end_ignore_lines%---------------- ------------------------------------------------------------ -procedure load_ignr_aa +function load_ignr_aa + (in_dbout_owner in varchar2 + ,in_dbout_name in varchar2 + ,in_dbout_type in varchar2 + ,in_trigger_offset in number) + return ignr_aa_type is + l_ignr_aa ignr_aa_type; cursor c_find_begin is select line ,instr(text,'--%WTPLSQL_begin_ignore_lines%--') col from dba_source - where owner = g_rec.dbout_owner - and name = g_rec.dbout_name - and type = g_rec.dbout_type + where owner = in_dbout_owner + and name = in_dbout_name + and type = in_dbout_type and text like '%--\%WTPLSQL_begin_ignore_lines\%--%' escape '\' order by line; buff_find_begin c_find_begin%ROWTYPE; @@ -762,9 +526,9 @@ is select line ,instr(text,'--%WTPLSQL_end_ignore_lines%--') col from dba_source - where owner = g_rec.dbout_owner - and name = g_rec.dbout_name - and type = g_rec.dbout_type + where owner = in_dbout_owner + and name = in_dbout_name + and type = in_dbout_type and line >= in_line and text like '%--\%WTPLSQL_end_ignore_lines\%--%' escape '\' ) @@ -778,7 +542,6 @@ is ,col; buff_find_end c_find_end%ROWTYPE; begin - g_ignr_aa.delete; open c_find_begin; loop fetch c_find_begin into buff_find_begin; @@ -790,63 +553,55 @@ begin select max(line) into buff_find_end.line from dba_source - where owner = g_rec.dbout_owner - and name = g_rec.dbout_name - and type = g_rec.dbout_type; + where owner = in_dbout_owner + and name = in_dbout_name + and type = in_dbout_type; end if; close c_find_end; - for i in buff_find_begin.line + g_rec.trigger_offset .. - buff_find_end.line + g_rec.trigger_offset + for i in buff_find_begin.line + in_trigger_offset .. + buff_find_end.line + in_trigger_offset loop - g_ignr_aa(i) := 'X'; + l_ignr_aa(i) := 'X'; end loop; end loop; close c_find_begin; + return l_ignr_aa; end load_ignr_aa; $IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ $THEN procedure t_load_ignr_aa is - l_recSAVE rec_type; - l_ignrSAVE ignr_aa_type; - l_ignrTEST ignr_aa_type; - l_pname varchar2(128) := 'WT_PROFILE_LOAD_IGNR'; + l_ignr_aa ignr_aa_type; + l_recSAVE wt_dbout_runs%ROWTYPE; + l_pname varchar2(128) := 'WT_PROFILE_LOAD_IGNR'; -------------------------------------- WTPLSQL Testing -- procedure run_load_ignr is begin - l_recSAVE := g_rec; - l_ignrSAVE := g_ignr_aa; - g_ignr_aa.delete; - g_rec.dbout_owner := USER; - g_rec.dbout_name := l_pname; - g_rec.dbout_type := 'PACKAGE BODY'; - g_rec.trigger_offset := 0; - load_ignr_aa; - l_ignrTEST := g_ignr_aa; - g_ignr_aa := l_ignrSAVE; - g_rec := l_recSAVE; + l_recSAVE := g_rec; + l_ignr_aa := load_ignr_aa(g_current_user + ,l_pname + ,'PACKAGE BODY' + ,0); + g_rec := l_recSAVE; end run_load_ignr; begin -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Load Ignr Setup'; - wt_assert.isnotnull - (msg_in => 'Number of IGNR_AA elements' - ,check_this_in => g_ignr_aa.COUNT); tl_compile_db_object (in_ptype => 'package' ,in_pname => l_pname - ,in_source => ' l_junk number;' ); + ,in_source => ' l_junk number; end ' || l_pname); -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Load Ignr Happy Path 1'; tl_compile_db_object (in_ptype => 'package body' ,in_pname => l_pname ,in_source => 'begin' || CHR(10) || - ' l_junk := 1;' ); + ' l_junk := 1; end ' || l_pname ); run_load_ignr; wt_assert.eq - (msg_in => 'l_ignrTest.COUNT' - ,check_this_in => l_ignrTest.COUNT + (msg_in => 'l_ignr_aa.COUNT' + ,check_this_in => l_ignr_aa.COUNT ,against_this_in => 0); -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Load Ignr Happy Path 2'; @@ -856,19 +611,19 @@ $THEN ,in_source => 'begin' || CHR(10) || -- Line 2 ' --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) || -- Line 3 - ' l_junk := 1;' ); -- Line 4 - -- end -- Line 5 + ' l_junk := 1;' || CHR(10) || -- Line 4 + 'end ' || l_pname ); -- Line 5 run_load_ignr; -------------------------------------- WTPLSQL Testing -- wt_assert.eq - (msg_in => 'l_ignrTest.COUNT' - ,check_this_in => l_ignrTest.COUNT + (msg_in => 'l_ignr_aa.COUNT' + ,check_this_in => l_ignr_aa.COUNT ,against_this_in => 3); for i in 3 .. 5 loop wt_assert.eq - (msg_in => 'l_ignrTest.exists(' || i || ')' - ,check_this_in => l_ignrTest.exists(i) + (msg_in => 'l_ignr_aa.exists(' || i || ')' + ,check_this_in => l_ignr_aa.exists(i) ,against_this_in => TRUE); end loop; -------------------------------------- WTPLSQL Testing -- @@ -882,18 +637,19 @@ $THEN ' --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) || -- Line 4 ' l_junk := 2;' || CHR(10) || -- Line 5 ' --%WTPLSQL_end_' || 'ignore_lines%--' || CHR(10) || -- Line 6 - ' l_junk := 3;' ); -- Line 7 + ' l_junk := 3;' || CHR(10) || -- Line 7 + 'end ' || l_pname ); -- Line 8 run_load_ignr; -------------------------------------- WTPLSQL Testing -- wt_assert.eq - (msg_in => 'l_ignrTest.COUNT' - ,check_this_in => l_ignrTest.COUNT + (msg_in => 'l_ignr_aa.COUNT' + ,check_this_in => l_ignr_aa.COUNT ,against_this_in => 3); for i in 4 .. 6 loop wt_assert.eq - (msg_in => 'l_ignrTest.exists(' || i || ')' - ,check_this_in => l_ignrTest.exists(i) + (msg_in => 'l_ignr_aa.exists(' || i || ')' + ,check_this_in => l_ignr_aa.exists(i) ,against_this_in => TRUE); end loop; -------------------------------------- WTPLSQL Testing -- @@ -909,27 +665,27 @@ $THEN ' --%WTPLSQL_end_' || 'ignore_lines%--' || CHR(10) || -- Line 6 ' l_junk := 3;' || CHR(10) || -- Line 7 ' --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) || -- Line 8 - ' l_junk := 4;' ); -- Line 9 - -- end -- Line 10 + ' l_junk := 4;' || CHR(10) || -- Line 9 + 'end ' || l_pname ); -- Line 10 run_load_ignr; -------------------------------------- WTPLSQL Testing -- wt_assert.eq - (msg_in => 'l_ignrTest.COUNT' - ,check_this_in => l_ignrTest.COUNT + (msg_in => 'l_ignr_aa.COUNT' + ,check_this_in => l_ignr_aa.COUNT ,against_this_in => 6); for i in 4 .. 6 loop wt_assert.eq - (msg_in => 'l_ignrTest.exists(' || i || ')' - ,check_this_in => l_ignrTest.exists(i) + (msg_in => 'l_ignr_aa.exists(' || i || ')' + ,check_this_in => l_ignr_aa.exists(i) ,against_this_in => TRUE); end loop; -------------------------------------- WTPLSQL Testing -- for i in 8 .. 10 loop wt_assert.eq - (msg_in => 'l_ignrTest.exists(' || i || ')' - ,check_this_in => l_ignrTest.exists(i) + (msg_in => 'l_ignr_aa.exists(' || i || ')' + ,check_this_in => l_ignr_aa.exists(i) ,against_this_in => TRUE); end loop; -------------------------------------- WTPLSQL Testing -- @@ -940,11 +696,12 @@ $THEN ,in_source => 'begin' || CHR(10) || -- Line 2 ' --%WTPLSQL_end_' || 'ignore_lines%--' || CHR(10) || -- Line 3 - ' l_junk := 4;' ); -- Line 4 + ' l_junk := 4;' || CHR(10) || -- Line 4 + 'end ' || l_pname ); -- Line 5 run_load_ignr; wt_assert.eq - (msg_in => 'l_ignrTest.COUNT' - ,check_this_in => l_ignrTest.COUNT + (msg_in => 'l_ignr_aa.COUNT' + ,check_this_in => l_ignr_aa.COUNT ,against_this_in => 0); -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Load Ignr Sad Path 2'; @@ -959,18 +716,19 @@ $THEN ' --%WTPLSQL_end_' || 'ignore_lines%--' || CHR(10) || -- Line 6 ' l_junk := 3;' || CHR(10) || -- Line 7 ' --%WTPLSQL_end_' || 'ignore_lines%--' || CHR(10) || -- Line 8 - ' l_junk := 4;' ); -- Line 9 + ' l_junk := 4;' || CHR(10) || -- Line 9 + 'end ' || l_pname ); -- Line 10 run_load_ignr; -------------------------------------- WTPLSQL Testing -- wt_assert.eq - (msg_in => 'l_ignrTest.COUNT' - ,check_this_in => l_ignrTest.COUNT + (msg_in => 'l_ignr_aa.COUNT' + ,check_this_in => l_ignr_aa.COUNT ,against_this_in => 3); for i in 4 .. 6 loop wt_assert.eq - (msg_in => 'l_ignrTest.exists(' || i || ')' - ,check_this_in => l_ignrTest.exists(i) + (msg_in => 'l_ignr_aa.exists(' || i || ')' + ,check_this_in => l_ignr_aa.exists(i) ,against_this_in => TRUE); end loop; -------------------------------------- WTPLSQL Testing -- @@ -986,85 +744,366 @@ $THEN ' --%WTPLSQL_begin_' || 'ignore_lines%--' || CHR(10) || -- Line 6 ' l_junk := 3;' || CHR(10) || -- Line 7 ' --%WTPLSQL_end_' || 'ignore_lines%--' || CHR(10) || -- Line 8 - ' l_junk := 4;' ); -- Line 9 + ' l_junk := 4;' || CHR(10) || -- Line 9 + 'end ' || l_pname ); -- Line 10 run_load_ignr; -------------------------------------- WTPLSQL Testing -- wt_assert.eq - (msg_in => 'l_ignrTest.COUNT' - ,check_this_in => l_ignrTest.COUNT + (msg_in => 'l_ignr_aa.COUNT' + ,check_this_in => l_ignr_aa.COUNT ,against_this_in => 5); for i in 4 .. 8 loop wt_assert.eq - (msg_in => 'l_ignrTest.exists(' || i || ')' - ,check_this_in => l_ignrTest.exists(i) + (msg_in => 'l_ignr_aa.exists(' || i || ')' + ,check_this_in => l_ignr_aa.exists(i) ,against_this_in => TRUE); end loop; -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Load Ignr Teardown'; tl_drop_db_object(l_pname, 'package'); - wt_assert.isnotnull - (msg_in => 'Number of IGNR_AA elements' - ,check_this_in => g_ignr_aa.COUNT); end t_load_ignr_aa; $END ----------------%WTPLSQL_end_ignore_lines%---------------- ------------------------------------------------------------ -procedure insert_dbout_profile +procedure add_dbout_run + (in_profiles_rec in wt_profiles%ROWTYPE) is - PRAGMA AUTONOMOUS_TRANSACTION; - prof_rec wt_dbout_profiles%ROWTYPE; - l_max_line number; - procedure l_set_status is begin - if g_ignr_aa.EXISTS(prof_rec.line) +begin + -- If this raises an exception, it must be done before any other values + -- are set because they will not be rolled-back after the "raise". + case in_profiles_rec.status + when 'EXEC' then + g_rec.executed_lines := nvl(g_rec.executed_lines,0) + 1; + -- Only count the executed time. + g_rec.exec_min_usec := least(nvl(g_rec.exec_min_usec,999999999) + ,in_profiles_rec.exec_min_usec); + g_rec.exec_max_usec := greatest(nvl(g_rec.exec_max_usec,0) + ,in_profiles_rec.exec_max_usec); + g_rec.exec_tot_usec := nvl(g_rec.exec_tot_usec,0) + + ( in_profiles_rec.exec_tot_usec / + in_profiles_rec.exec_cnt ); + when 'IGNR' then + g_rec.ignored_lines := nvl(g_rec.ignored_lines,0) + 1; + when 'EXCL' then + g_rec.excluded_lines := nvl(g_rec.excluded_lines,0) + 1; + when 'NOTX' then + g_rec.notexec_lines := nvl(g_rec.notexec_lines,0) + 1; + when 'UNKN' then + g_rec.unknown_lines := nvl(g_rec.unknown_lines,0) + 1; + else + raise_application_error(-20011, 'Unknown Profile status "' || + in_profiles_rec.status || '"'); + end case; + g_rec.profiled_lines := nvl(g_rec.profiled_lines,0) + 1; +end add_dbout_run; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_add_dbout_run + is + l_recSAVE wt_dbout_runs%ROWTYPE; + l_recTEST wt_dbout_runs%ROWTYPE; + l_profileTEST wt_profiles%ROWTYPE; + l_sqlerrm varchar2(4000); + begin + wt_assert.g_testcase := 'Add Profile Testing'; + -------------------------------------- WTPLSQL Testing -- + -- Overview: + -- 1) Save results in temporary variables + -- 2) Clear add_dbout_run variables + -- 3) Call add_dbout_run several times with test data. + -- 4) Capture test results + -- 5) Restore saved results + -- 6) Confirm the test results using WT_ASSERT. + -------------------------------------- WTPLSQL Testing -- + l_recSAVE := g_rec; + g_rec := l_recTEST; + l_profileTEST.test_run_id := -20; + l_profileTEST.exec_min_usec := 10; + l_profileTEST.exec_max_usec := 20; + l_profileTEST.exec_tot_usec := 30; + l_profileTEST.exec_cnt := 1; + -------------------------------------- WTPLSQL Testing -- + l_profileTEST.status := 'EXEC'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'EXEC'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'EXEC'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'EXEC'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'EXEC'; + add_dbout_run(l_profileTEST); + -------------------------------------- WTPLSQL Testing -- + l_profileTEST.status := 'IGNR'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'IGNR'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'IGNR'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'IGNR'; + add_dbout_run(l_profileTEST); + -------------------------------------- WTPLSQL Testing -- + l_profileTEST.status := 'NOTX'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'NOTX'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'NOTX'; + add_dbout_run(l_profileTEST); + -------------------------------------- WTPLSQL Testing -- + l_profileTEST.status := 'EXCL'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'EXCL'; + add_dbout_run(l_profileTEST); + l_profileTEST.status := 'UNKN'; + add_dbout_run(l_profileTEST); + -------------------------------------- WTPLSQL Testing -- + l_profileTEST.status := 'ABC'; + begin + add_dbout_run(l_profileTEST); + l_sqlerrm := SQLERRM; + exception when others then + l_sqlerrm := SQLERRM; + end; + l_recTEST := g_rec; + g_rec := l_recSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_recTEST.profiled_lines', + check_this_in => l_recTEST.profiled_lines, + against_this_in => 15); + wt_assert.eq ( + msg_in => 'l_recTEST.exec_min_usec', + check_this_in => l_recTEST.exec_min_usec, + against_this_in => 10); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_recTEST.exec_max_usec', + check_this_in => l_recTEST.exec_max_usec, + against_this_in => 20); + wt_assert.eq ( + msg_in => 'l_recTEST.exec_tot_usec', + check_this_in => l_recTEST.exec_tot_usec, + against_this_in => 150); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_recTEST.executed_lines', + check_this_in => l_recTEST.executed_lines, + against_this_in => 5); + wt_assert.eq ( + msg_in => 'l_recTEST.ignored_lines', + check_this_in => l_recTEST.ignored_lines, + against_this_in => 4); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_recTEST.notexec_lines', + check_this_in => l_recTEST.notexec_lines, + against_this_in => 3); + wt_assert.eq ( + msg_in => 'l_recTEST.excluded_lines', + check_this_in => l_recTEST.excluded_lines, + against_this_in => 2); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_recTEST.unknown_lines', + check_this_in => l_recTEST.unknown_lines, + against_this_in => 1); + wt_assert.eq ( + msg_in => 'Add Result Sad Path 1', + check_this_in => 'ORA-20011: Unknown Profile status "ABC"', + against_this_in => l_sqlerrm); + end t_add_dbout_run; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + +------------------------------------------------------------ +function set_prof_status + (in_prof_rec wt_profiles%ROWTYPE + ,in_max_line number) + return varchar2 +is +begin + if in_prof_rec.exec_cnt > 0 + then + -- Found Executed Statement + return 'EXEC'; + end if; + if in_prof_rec.exec_cnt = 0 + and in_prof_rec.exec_tot_usec = 0 + then + -- Check for declaration if Not Executed + if regexp_like(in_prof_rec.text, '^[[:space:]]*' || + '(FUNCTION|PROCEDURE|PACKAGE|TYPE|TRIGGER)' || + '[[:space:]]', 'i') then - -- Found Statement to Ignore - prof_rec.status := 'IGNR'; - return; - end if; - if prof_rec.total_occur > 0 + -- Exclude declarations if Not Executed + return 'EXCL'; + elsif in_prof_rec.line = in_max_line + AND regexp_like(in_prof_rec.text, 'END', 'i') then - -- Found Executed Statement - prof_rec.status := 'EXEC'; - return; - end if; - if prof_rec.total_occur = 0 - and prof_rec.total_usecs = 0 + return 'EXCL'; + -- ^ - Anchored to start of line + -- [[:space:]]* - Zero or more spaces + -- [Ee][Nn][Dd] - casefolded "end" + -- ( [[:space:]]* - Zero or more spaces + -- | - OR + -- [[:space:]]+ - One or more spaces followed by + -- [A-Za-z0-9_$#]{1,128}) - String of 1 to 128 characters + -- ) + -- [[:space:]]* - Zero or more spaces + -- [;] - Semicolon character + -- $ - Anchored to end of line + elsif regexp_like(in_prof_rec.text, '^[[:space:]]*[Ee][Nn][Dd]([[:space:]]*|[[:space:]]+[A-Za-z0-9_$#]{1,128})[[:space:]]*[;]$') then - -- Check for declaration if Not Executed - if regexp_like(prof_rec.text, '^[[:space:]]*' || - '(FUNCTION|PROCEDURE|PACKAGE|TYPE|TRIGGER)' || - '[[:space:]]', 'i') - then - -- Exclude declarations if Not Executed - prof_rec.status := 'EXCL'; - elsif prof_rec.line = l_max_line - AND regexp_like(prof_rec.text, 'END', 'i') - then - prof_rec.status := 'EXCL'; - else - -- Found Not Executed Statement - prof_rec.status := 'NOTX'; - end if; - return; + return 'EXCL'; + else + -- Found Not Executed Statement + return 'NOTX'; end if; - -- Everything else is unknown - prof_rec.status := 'UNKN'; - end l_set_status; + end if; + -- Everything else is unknown + return 'UNKN'; +end set_prof_status; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_set_prof_status + is + l_prof_rec wt_profiles%ROWTYPE; + begin + wt_assert.g_testcase := 'Set Prof Status Happy Path'; + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := 1; + l_prof_rec.exec_tot_usec := 1; + l_prof_rec.text := ' function set_prof_status_testing'; + l_prof_rec.line := 3; + wt_assert.eq( + msg_in => 'Executable Status 1', + check_this_in => set_prof_status(l_prof_rec, 10), + against_this_in => 'EXEC'); + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := 1; + l_prof_rec.exec_tot_usec := 1; + l_prof_rec.text := ' end set_prof_status_testing;'; + l_prof_rec.line := 3; + wt_assert.eq( + msg_in => 'Executable Status 2', + check_this_in => set_prof_status(l_prof_rec, 10), + against_this_in => 'EXEC'); + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := 0; + l_prof_rec.exec_tot_usec := 0; + l_prof_rec.text := ' function set_prof_status_testing'; + l_prof_rec.line := 3; + wt_assert.eq( + msg_in => 'Excluded Status 1', + check_this_in => set_prof_status(l_prof_rec, 10), + against_this_in => 'EXCL'); + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := 0; + l_prof_rec.exec_tot_usec := 0; + l_prof_rec.text := ' end set_prof_status_testing;'; + l_prof_rec.line := 10; + wt_assert.eq( + msg_in => 'Excluded Status 2', + check_this_in => set_prof_status(l_prof_rec, 10), + against_this_in => 'EXCL'); + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := 0; + l_prof_rec.exec_tot_usec := 0; + l_prof_rec.text := ' set_prof_status_testing;'; + l_prof_rec.line := 3; + wt_assert.eq( + msg_in => 'Not Executed Status 1', + check_this_in => set_prof_status(l_prof_rec, 10), + against_this_in => 'NOTX'); + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := 0; + l_prof_rec.exec_tot_usec := 0; + l_prof_rec.text := ' end set_prof_status_testing;'; + l_prof_rec.line := 3; + wt_assert.eq( + msg_in => 'Excluded Status 2', + check_this_in => set_prof_status(l_prof_rec, 10), + against_this_in => 'EXCL'); + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := 0; + l_prof_rec.exec_tot_usec := 1; + l_prof_rec.text := ' function set_prof_status_testing'; + l_prof_rec.line := 4; + wt_assert.eq( + msg_in => 'Unknown Status 1', + check_this_in => set_prof_status(l_prof_rec, 10), + against_this_in => 'UNKN'); + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := 0; + l_prof_rec.exec_tot_usec := 1; + l_prof_rec.text := ' end set_prof_status_testing;'; + l_prof_rec.line := 4; + wt_assert.eq( + msg_in => 'Unknown Status 2', + check_this_in => set_prof_status(l_prof_rec, 10), + against_this_in => 'UNKN'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Set Prof Status Sad Path'; + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := NULL; + l_prof_rec.exec_tot_usec := NULL; + l_prof_rec.text := NULL; + l_prof_rec.line := NULL; + wt_assert.eq( + msg_in => 'NULL Profiler Record', + check_this_in => set_prof_status(l_prof_rec, 10), + against_this_in => 'UNKN'); + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := 1; + l_prof_rec.exec_tot_usec := 1; + l_prof_rec.text := ' function set_prof_status_testing'; + l_prof_rec.line := 3; + wt_assert.eq( + msg_in => 'NULL Max Lines', + check_this_in => set_prof_status(l_prof_rec, NULL), + against_this_in => 'EXEC'); + -------------------------------------- WTPLSQL Testing -- + l_prof_rec.exec_cnt := NULL; + l_prof_rec.exec_tot_usec := NULL; + l_prof_rec.text := NULL; + l_prof_rec.line := NULL; + wt_assert.eq( + msg_in => 'All inputs NULL', + check_this_in => set_prof_status(l_prof_rec, NULL), + against_this_in => 'UNKN'); + end t_set_prof_status; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure insert_wt_profile + (in_dbout_owner in varchar2 + ,in_dbout_name in varchar2 + ,in_dbout_type in varchar2) +is + l_ignr_aa ignr_aa_type; + l_prof_rec wt_profiles%ROWTYPE; + l_max_line number; begin + l_prof_rec.test_run_id := g_rec.test_run_id; + -- Capture load_ignr_aa array + l_ignr_aa := load_ignr_aa(in_dbout_owner + ,in_dbout_name + ,in_dbout_type + ,g_rec.trigger_offset); -- This will not RAISE NO_DATA_FOUND because it uses a GROUP FUNCTION. select max(ppd.line#) into l_max_line from plsql_profiler_units ppu join plsql_profiler_data ppd on ppd.unit_number = ppu.unit_number - and ppd.runid = g_rec.prof_runid - where ppu.unit_owner = g_rec.dbout_owner - and ppu.unit_name = g_rec.dbout_name - and ppu.unit_type = g_rec.dbout_type - and ppu.runid = g_rec.prof_runid; - load_ignr_aa; - prof_rec.test_run_id := g_rec.test_run_id; + and ppd.runid = g_rec.profiler_runid + where ppu.unit_owner = in_dbout_owner + and ppu.unit_name = in_dbout_name + and ppu.unit_type = in_dbout_type + and ppu.runid = g_rec.profiler_runid; for buf1 in ( select src.line ,ppd.total_occur @@ -1075,55 +1114,54 @@ begin from plsql_profiler_units ppu join plsql_profiler_data ppd on ppd.unit_number = ppu.unit_number - and ppd.runid = g_rec.prof_runid + and ppd.runid = g_rec.profiler_runid join dba_source src on src.line = ppd.line# + g_rec.trigger_offset - and src.owner = g_rec.dbout_owner - and src.name = g_rec.dbout_name - and src.type = g_rec.dbout_type - where ppu.unit_owner = g_rec.dbout_owner - and ppu.unit_name = g_rec.dbout_name - and ppu.unit_type = g_rec.dbout_type - and ppu.runid = g_rec.prof_runid ) + and src.owner = in_dbout_owner + and src.name = in_dbout_name + and src.type = in_dbout_type + where ppu.unit_owner = in_dbout_owner + and ppu.unit_name = in_dbout_name + and ppu.unit_type = in_dbout_type + and ppu.runid = g_rec.profiler_runid ) loop - prof_rec.line := buf1.line; - prof_rec.total_occur := buf1.total_occur; - prof_rec.total_usecs := buf1.total_time/1000; - prof_rec.min_usecs := buf1.min_time/1000; - prof_rec.max_usecs := buf1.max_time/1000; - prof_rec.text := buf1.text; - prof_rec.status := NULL; - l_set_status; - insert into wt_dbout_profiles values prof_rec; - - $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ - if not g_skip_add then - $END - wt_test_run_stat.add_profile(prof_rec); - $IF $$WTPLSQL_SELFTEST $THEN + l_prof_rec.line := buf1.line; + l_prof_rec.exec_cnt := buf1.total_occur; + l_prof_rec.exec_tot_usec := buf1.total_time/1000; + l_prof_rec.exec_min_usec := buf1.min_time/1000; + l_prof_rec.exec_max_usec := buf1.max_time/1000; + l_prof_rec.text := buf1.text; + if l_ignr_aa.EXISTS(l_prof_rec.line) + then + -- Found Statement to Ignore + l_prof_rec.status := 'IGNR'; + else + l_prof_rec.status := set_prof_status(l_prof_rec, l_max_line); end if; - $END ----------------%WTPLSQL_end_ignore_lines%---------------- - + add_dbout_run(l_prof_rec); -- Updates g_rec + insert into wt_profiles values l_prof_rec; end loop; - COMMIT; - -- Delete PLSQL Profiler has it's own - -- PRAGMA AUTONOMOUS_TRANSACTION and COMMIT; - g_ignr_aa.delete; - delete_plsql_profiler_recs(g_rec.prof_runid); -end insert_dbout_profile; + -- Update Aggregates in g_rec + g_rec.coverage_pct := calc_pct_coverage(g_rec.test_run_id); + if nvl(g_rec.executed_lines,0) != 0 + then + g_rec.exec_avg_usec := round(g_rec.exec_tot_usec / g_rec.executed_lines, 2); + end if; +end insert_wt_profile; $IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ $THEN - procedure t_insert_dbout_profile + procedure t_insert_wt_profile is - units_rec plsql_profiler_units%ROWTYPE; - data_rec plsql_profiler_data%ROWTYPE; - l_recSAVE rec_type; - l_recNULL rec_type; - c_test_run_id constant number := -97; - l_pname varchar2(128) := 'WT_PROFILE_INSERT_DBOUT'; - l_sqlerrm varchar2(4000); - l_err_stack varchar2(32000); + units_rec plsql_profiler_units%ROWTYPE; + data_rec plsql_profiler_data%ROWTYPE; + l_recSAVE wt_dbout_runs%ROWTYPE; + l_recTEST wt_dbout_runs%ROWTYPE; + l_recNULL wt_dbout_runs%ROWTYPE; + c_test_run_id constant number := -97; + l_pname varchar2(128) := 'WT_PROFILE_INSERT_DBOUT'; + l_sqlerrm varchar2(4000); + l_err_stack varchar2(32000); -------------------------------------- WTPLSQL Testing -- procedure insert_plsql_profiler_data (in_line# in number @@ -1144,7 +1182,7 @@ $THEN end; wt_assert.eq ( msg_in => 'insert plsql_profiler_data (LINE#: ' || data_rec.line#|| ')', - check_this_in => SQLERRM, + check_this_in => l_sqlerrm, against_this_in => 'ORA-0000: normal, successful completion'); end insert_plsql_profiler_data; -------------------------------------- WTPLSQL Testing -- @@ -1155,10 +1193,10 @@ $THEN is begin wt_assert.eqqueryvalue - (msg_in => 'wt_dbout_profiles line ' || in_line# || + (msg_in => 'wt_profiles line ' || in_line# || ', column ' || in_col_name ,check_query_in => 'select ' || in_col_name || - ' from wt_dbout_profiles' || + ' from wt_profiles' || ' where test_run_id = ' || c_test_run_id || ' and line = ' || in_line# ,against_value_in => in_value); @@ -1169,7 +1207,7 @@ $THEN tl_compile_db_object (in_ptype => 'package' ,in_pname => l_pname - ,in_source => ' l_junk number;' ); + ,in_source => ' l_junk number; end ' || l_pname ); -------------------------------------- WTPLSQL Testing -- tl_compile_db_object (in_ptype => 'package body' @@ -1182,14 +1220,15 @@ $THEN ' --%WTPLSQL_end_' || 'ignore_lines%--' || CHR(10) || -- Line 6 ' if 0 = 1 then' || CHR(10) || -- Line 7 ' l_junk := 3;' || CHR(10) || -- Line 8 - ' end if;' ); -- Line 9 + ' end if;' || CHR(10) || -- Line 9 + 'end ' || l_pname ); -- Line 10 tl_insert_plsql_profiler_recs(c_test_run_id); tl_count_plsql_profiler_recs(c_test_run_id, 1); tl_insert_test_runs(c_test_run_id, 'Insert DBOUT Test'); -------------------------------------- WTPLSQL Testing -- units_rec.runid := c_test_run_id; units_rec.unit_number := 1; - units_rec.unit_owner := USER; + units_rec.unit_owner := g_current_user; units_rec.unit_name := l_pname; units_rec.unit_type := 'PACKAGE BODY'; units_rec.total_time := 0; @@ -1197,16 +1236,19 @@ $THEN begin insert into plsql_profiler_units values units_rec; commit; - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; + l_err_stack := SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ; exception when others then - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; + l_err_stack := SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ; end; -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( + wt_assert.eq ( msg_in => 'insert UNIT 1 into plsql_profiler_units', - check_this_in => l_err_stack); + check_this_in => substr(l_err_stack,1,39), + against_this_in => 'ORA-0000: normal, successful completion'); wt_assert.eqqueryvalue (msg_in => 'Number of UNIT 1 plsql_profiler_units' ,check_query_in => 'select count(*) from plsql_profiler_units' || @@ -1235,29 +1277,37 @@ $THEN ,against_value_in => 8); -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Insert DBOUT Profile Happy Path'; - l_recSAVE := g_rec; - g_rec.test_run_id := c_test_run_id; - g_rec.dbout_owner := USER; - g_rec.dbout_name := l_pname; - g_rec.dbout_type := 'PACKAGE BODY'; - g_rec.prof_runid := c_test_run_id; - g_rec.trigger_offset := 0; - g_rec.error_message := ''; - -------------------------------------- WTPLSQL Testing -- - g_skip_add := TRUE; + l_recSAVE := g_rec; + g_rec.test_run_id := c_test_run_id; + g_rec.profiler_runid := c_test_run_id; + g_rec.trigger_offset := 0; + -------------------------------------- WTPLSQL Testing -- begin - insert_dbout_profile; - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; + insert_wt_profile(g_current_user + ,l_pname + ,'PACKAGE BODY'); + l_err_stack := SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ; exception when others then - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; + l_err_stack := SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ; end; - g_skip_add := FALSE; + l_recTEST := g_rec; g_rec := l_recSAVE; - wt_assert.isnull ( - msg_in => 'SQLERRM', - check_this_in => l_err_stack); + wt_assert.eq ( + msg_in => 'insert_wt_profile SQLERRM', + check_this_in => substr(l_err_stack,1,39), + against_this_in => 'ORA-0000: normal, successful completion'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'Check Coverage Percent', + check_this_in => l_recTEST.coverage_pct, + against_this_in => 75); + wt_assert.isnotnull ( + msg_in => 'Check Line Execution Average Microseconds', + check_this_in => l_recTEST.exec_avg_usec); -------------------------------------- WTPLSQL Testing -- test_dbout_profiler(1, 'STATUS', 'EXCL'); test_dbout_profiler(1, 'TEXT', 'package body WT_PROFILE_INSERT_DBOUT is' || CHR(10)); @@ -1277,12 +1327,12 @@ $THEN test_dbout_profiler(10, 'TEXT', 'end WT_PROFILE_INSERT_DBOUT;'); -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Insert DBOUT Profile Teardown'; - tl_delete_dbout_profiles(c_test_run_id); + tl_delete_wt_profiles(c_test_run_id); tl_delete_test_runs(c_test_run_id); tl_delete_plsql_profiler_recs(c_test_run_id); tl_count_plsql_profiler_recs(c_test_run_id, 0); tl_drop_db_object(l_pname, 'package'); - end t_insert_dbout_profile; + end t_insert_wt_profile; $END ----------------%WTPLSQL_end_ignore_lines%---------------- @@ -1292,402 +1342,113 @@ $END ----------------%WTPLSQL_end_ignore_lines%---------------- ------------------------------------------------------------ -procedure initialize - (in_test_run_id in number, - in_runner_name in varchar2, - out_dbout_owner out varchar2, - out_dbout_name out varchar2, - out_dbout_type out varchar2, - out_trigger_offset out number, - out_profiler_runid out number, - out_error_message out varchar2) +function is_profilable -- find_dbout + (in_dbout_owner in varchar2 + ,in_dbout_name in varchar2 + ,in_dbout_type in varchar2) + return boolean is - l_rec_NULL rec_type; - l_retnum binary_integer; + cursor c_readable + is + select src.name + from dba_source src + where src.owner = in_dbout_owner + and src.name = in_dbout_name + and src.type = in_dbout_type; + b_readable c_readable%ROWTYPE; + ret_bool boolean; begin - -- Reset variables - out_dbout_owner := ''; - out_dbout_name := ''; - out_dbout_type := ''; - out_trigger_offset := NULL; - out_profiler_runid := NULL; - out_error_message := ''; - g_rec := l_rec_NULL; - $IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ - $THEN - -- In case a test failed and left this set to TRUE - g_skip_insert := FALSE; - g_skip_add := FALSE; - $END ----------------%WTPLSQL_end_ignore_lines%---------------- - -- Abort if there is no Test Run ID - if in_test_run_id is null - then - raise_application_error (-20004, 'i_test_run_id is null'); - end if; - g_rec.test_run_id := in_test_run_id; - -- Find the Database Object Under Test - find_dbout(in_pkg_name => in_runner_name); - out_dbout_owner := g_rec.dbout_owner; - out_dbout_name := g_rec.dbout_name; - out_dbout_type := g_rec.dbout_type; - out_error_message := g_rec.error_message; - -- There muxt be a name and no error message - if g_rec.dbout_name is null -- No DBOUT notation - or g_rec.error_message is not null -- Error with DBOUT or Source - or g_rec.prof_runid = -1 -- Skip Profiling - then - g_rec.prof_runid := NULL; - return; - end if; - -- Calculate the trigger offset, if any. - g_rec.trigger_offset := wt_profiler.trigger_offset - (dbout_owner_in => g_rec.dbout_owner - ,dbout_name_in => g_rec.dbout_name - ,dbout_type_in => g_rec.dbout_type ); - out_trigger_offset := g_rec.trigger_offset; - -- Check Versions - l_retnum := dbms_profiler.INTERNAL_VERSION_CHECK; - if l_retnum <> 0 then - ------%WTPLSQL_begin_ignore_lines%------ Can't test this - --dbms_profiler.get_version(major_version, minor_version); - raise_application_error(-20005, - 'dbms_profiler.INTERNAL_VERSION_CHECK returned: ' || get_error_msg(l_retnum)); - ----------------%WTPLSQL_end_ignore_lines%---------------- - end if; - -- This starts the PROFILER Running!!! - --dbms_output.put_line('DEBUG1. g_rec.prof_runid = ' || g_rec.prof_runid); - l_retnum := dbms_profiler.START_PROFILER(run_number => g_rec.prof_runid); - if l_retnum <> 0 then - ------%WTPLSQL_begin_ignore_lines%------ Can't test this - raise_application_error(-20006, - 'dbms_profiler.START_PROFILER returned: ' || get_error_msg(l_retnum)); - ----------------%WTPLSQL_end_ignore_lines%---------------- - end if; - -- Everything is OK, set the Profiler Run ID - out_profiler_runid := g_rec.prof_runid; - --dbms_output.put_line('DEBUG2. g_rec.prof_runid = ' || g_rec.prof_runid); -end initialize; + -- Find the first occurance of any PL/SQL source + open c_readable; + fetch c_readable into b_readable; + ret_bool := c_readable%FOUND; + close c_readable; + return ret_bool; +end is_profilable; $IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ $THEN - procedure t_initialize + procedure t_is_profilable is - c_test_run_id constant number := -96; - l_pname varchar2(128) := 'WT_PROFILE_INITIALIZE'; - l_recSAVE rec_type; - l_recTEST rec_type; - l_recOUT rec_type; - l_sqlerrm varchar2(4000); + l_pname varchar2(128) := 'WT_PROFILE_FIND_DBOUT'; begin -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Insert DBOUT Profile Setup'; + wt_assert.g_testcase := 't_is_profilable Happy Path 1'; tl_compile_db_object (in_ptype => 'package' ,in_pname => l_pname - ,in_source => ' l_junk number;' ); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Initialize Test HAPPY Path 1'; + ,in_source => ' l_junk number;' || CHR(10) || + 'end ' || l_pname ); tl_compile_db_object (in_ptype => 'package body' ,in_pname => l_pname - ,in_source => - 'begin' || CHR(10) || -- Line 2 - ' l_junk := 7;' ); -- Line 3 + ,in_source => 'begin' || CHR(10) || + 'l_junk := 1;' || CHR(10) || + 'end ' || l_pname ); -------------------------------------- WTPLSQL Testing -- - l_recSAVE := g_rec; - initialize - (in_test_run_id => c_test_run_id, - in_runner_name => l_pname, - out_dbout_owner => l_recOUT.dbout_owner, - out_dbout_name => l_recOUT.dbout_name, - out_dbout_type => l_recOUT.dbout_type, - out_trigger_offset => l_recOUT.trigger_offset, - out_profiler_runid => l_recOUT.prof_runid, - out_error_message => l_recOUT.error_message); - l_recTEST := g_rec; - g_rec := l_recSAVE; - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'OUT dbout_owner', - check_this_in => l_recOUT.dbout_owner); - wt_assert.isnull ( - msg_in => 'OUT dbout_name', - check_this_in => l_recOUT.dbout_name); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'OUT dbout_type', - check_this_in => l_recOUT.dbout_type); - wt_assert.isnull ( - msg_in => 'OUT prof_runid', - check_this_in => l_recOUT.prof_runid); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'OUT trigger_offset', - check_this_in => l_recOUT.trigger_offset); - wt_assert.isnull ( - msg_in => 'OUT error_message', - check_this_in => l_recOUT.error_message); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'l_recTEST.dbout_owner', - check_this_in => l_recTEST.dbout_owner); - wt_assert.isnull ( - msg_in => 'l_recTEST.dbout_name', - check_this_in => l_recTEST.dbout_name); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'l_recTEST.dbout_type', - check_this_in => l_recTEST.dbout_type); - wt_assert.isnull ( - msg_in => 'l_recTEST.prof_runid', - check_this_in => l_recTEST.prof_runid); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'l_recTEST.trigger_offset', - check_this_in => l_recTEST.trigger_offset); - wt_assert.isnull ( - msg_in => 'l_recTEST.error_message', - check_this_in => l_recTEST.error_message); + wt_assert.eq + (msg_in => 'Check Package' + ,check_this_in => is_profilable(g_current_user, l_pname, 'PACKAGE') + ,against_this_in => TRUE); + wt_assert.eq + (msg_in => 'Check Package Body' + ,check_this_in => is_profilable(g_current_user, l_pname, 'PACKAGE BODY') + ,against_this_in => TRUE); + tl_drop_db_object(l_pname, 'package'); -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Initialize Test HAPPY Path 2'; + wt_assert.g_testcase := 't_is_profilable Happy Path 2'; tl_compile_db_object - (in_ptype => 'package body' + (in_ptype => 'procedure' ,in_pname => l_pname - ,in_source => - 'begin' || CHR(10) || -- Line 2 - '--% WTPLSQL SET DBOUT "' || l_pname || - ':PACKAGE BODY" %--' || CHR(10) || -- Line 3 - ' l_junk := 7;' ); -- Line 4 - -------------------------------------- WTPLSQL Testing -- - l_recSAVE := g_rec; - initialize - (in_test_run_id => c_test_run_id, - in_runner_name => l_pname, - out_dbout_owner => l_recOUT.dbout_owner, - out_dbout_name => l_recOUT.dbout_name, - out_dbout_type => l_recOUT.dbout_type, - out_trigger_offset => l_recOUT.trigger_offset, - out_profiler_runid => l_recOUT.prof_runid, - out_error_message => l_recOUT.error_message); - l_recTEST := g_rec; - g_rec := l_recSAVE; + ,in_source => ' l_junk number;' || CHR(10) || + 'begin' || CHR(10) || + ' l_junk := 1;' || CHR(10) || + 'end ' || l_pname ); -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'OUT dbout_owner', - check_this_in => l_recOUT.dbout_owner, - against_this_in => USER); - wt_assert.eq ( - msg_in => 'OUT dbout_name', - check_this_in => l_recOUT.dbout_name, - against_this_in => l_pname); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'OUT dbout_type', - check_this_in => l_recOUT.dbout_type, - against_this_in => 'PACKAGE BODY'); - wt_assert.isnotnull ( - msg_in => 'OUT prof_runid', - check_this_in => l_recOUT.prof_runid); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'OUT trigger_offset', - check_this_in => l_recOUT.trigger_offset, - against_this_in => 0); - wt_assert.isnull ( - msg_in => 'OUT error_message', - check_this_in => l_recOUT.error_message); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.dbout_owner', - check_this_in => l_recTEST.dbout_owner, - against_this_in => USER); - wt_assert.eq ( - msg_in => 'l_recTEST.dbout_name', - check_this_in => l_recTEST.dbout_name, - against_this_in => l_pname); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.dbout_type', - check_this_in => l_recTEST.dbout_type, - against_this_in => 'PACKAGE BODY'); - wt_assert.isnotnull ( - msg_in => 'l_recTEST.prof_runid', - check_this_in => l_recTEST.prof_runid); - -------------------------------------- WTPLSQL Testing -- - wt_assert.eq ( - msg_in => 'l_recTEST.trigger_offset', - check_this_in => l_recTEST.trigger_offset, - against_this_in => 0); - wt_assert.isnull ( - msg_in => 'l_recTEST.error_message', - check_this_in => l_recTEST.error_message); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Initialize Test Sad Path 1'; - l_recSAVE := g_rec; - begin - initialize - (in_test_run_id => null, - in_runner_name => 'Sad Path 1', - out_dbout_owner => l_recOUT.dbout_owner, - out_dbout_name => l_recOUT.dbout_name, - out_dbout_type => l_recOUT.dbout_type, - out_trigger_offset => l_recOUT.trigger_offset, - out_profiler_runid => l_recOUT.prof_runid, - out_error_message => l_recOUT.error_message); - l_sqlerrm := SQLERRM; - -------------------------------------- WTPLSQL Testing -- - exception when others then - l_sqlerrm := SQLERRM; - end; - l_recTEST := g_rec; - g_rec := l_recSAVE; - wt_assert.eq ( - msg_in => 'SQLERRM', - check_this_in => l_sqlerrm, - against_this_in => 'ORA-20004: i_test_run_id is null'); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Insert DBOUT Profile Teardown'; - tl_drop_db_object - (in_ptype => 'package' - ,in_pname => l_pname); - end t_initialize; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- - - ------------------------------------------------------------- --- Because this procedure is called to cleanup after erorrs, --- it must be able to run multiple times without causing damage. -procedure finalize -is - l_rec_NULL rec_type; -begin - if g_rec.prof_runid is null - then - return; - end if; - if g_rec.test_run_id is null - then - raise_application_error (-20000, 'g_rec.test_run_id is null'); - end if; - $IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ - $THEN - if not g_skip_insert - then - $END - begin - -- DBMS_PROFILER.FLUSH_DATA is included with DBMS_PROFILER.STOP_PROFILER - --dbms_output.put_line('DEBUG3. g_rec.prof_runid = ' || g_rec.prof_runid); - dbms_profiler.STOP_PROFILER; - exception when others then - g_rec := l_rec_NULL; - --dbms_output.put_line('DEBUG4. SQLERRM = ' || sqlerrm); - raise; - end; - insert_dbout_profile; - $IF $$WTPLSQL_SELFTEST - $THEN - end if; - $END ----------------%WTPLSQL_end_ignore_lines%---------------- - g_rec := l_rec_NULL; -end finalize; - -$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ -$THEN - procedure t_finalize - is - l_recSAVE rec_type; - l_recTEST rec_type; - l_sqlerrm varchar2(4000); - l_err_stack varchar2(32000); - begin - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Finalize Happy Path 1'; - l_recSAVE := g_rec; - g_rec.prof_runid := NULL; - wt_assert.isnull ( - msg_in => 'g_rec.prof_runid', - check_this_in => g_rec.prof_runid); - -------------------------------------- WTPLSQL Testing -- - begin - finalize; - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; - exception when others then - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; - end; - g_rec := l_recSAVE; - wt_assert.isnull ( - msg_in => 'format_error_stack and format_error_backtrace', - check_this_in => l_err_stack); - -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Finalize Happy Path 2'; - l_recSAVE := g_rec; - g_rec.test_run_id := -1; - g_rec.dbout_owner := 'TEST OWNER'; - g_rec.dbout_name := 'TEST NAME'; - g_rec.dbout_type := 'TEST TYPE'; - g_rec.prof_runid := -2; - g_rec.trigger_offset := -3; - g_rec.error_message := 'TEST MESSAGE'; - -------------------------------------- WTPLSQL Testing -- - g_skip_insert := TRUE; - begin - finalize; - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; - exception when others then - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; - end; - g_skip_insert := FALSE; - -------------------------------------- WTPLSQL Testing -- - l_recTEST := g_rec; - g_rec := l_recSAVE; - wt_assert.isnull ( - msg_in => 'SQLERRM', - check_this_in => l_err_stack); - -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'l_recTEST.test_run_id', - check_this_in => l_recTEST.test_run_id); - wt_assert.isnull ( - msg_in => 'l_recTEST.dbout_owner', - check_this_in => l_recTEST.dbout_owner); + wt_assert.eq + (msg_in => 'Check Procedure' + ,check_this_in => is_profilable(g_current_user, l_pname, 'PROCEDURE') + ,against_this_in => TRUE); + tl_drop_db_object(l_pname, 'procedure'); -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'l_recTEST.dbout_name', - check_this_in => l_recTEST.dbout_name); - wt_assert.isnull ( - msg_in => 'l_recTEST.dbout_type', - check_this_in => l_recTEST.dbout_type); + wt_assert.g_testcase := 't_is_profilable Happy Path 3'; + tl_compile_db_object + (in_ptype => 'type' + ,in_pname => l_pname + ,in_source => ' object(l_junk number' || CHR(10) || + ' ,member procedure test1' || CHR(10) || + ' )' ); -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'l_recTEST.prof_runid', - check_this_in => l_recTEST.prof_runid); - wt_assert.isnull ( - msg_in => 'l_recTEST.trigger_offset', - check_this_in => l_recTEST.trigger_offset); - wt_assert.isnull ( - msg_in => 'l_recTEST.error_message', - check_this_in => l_recTEST.error_message); + tl_compile_db_object + (in_ptype => 'type body' + ,in_pname => l_pname + ,in_source => 'member procedure test1' || CHR(10) || + 'is' || CHR(10) || + 'begin' || CHR(10) || + ' l_junk := 1;' || CHR(10) || + 'end;' || CHR(10) || + 'end' ); -------------------------------------- WTPLSQL Testing -- - wt_assert.g_testcase := 'Finalize Sad Path 1'; - l_recSAVE := g_rec; - g_rec.prof_runid := -1; - g_rec.test_run_id := NULL; - begin - finalize; - exception when others then - l_sqlerrm := SQLERRM; - end; + wt_assert.eq + (msg_in => 'Check Type' + ,check_this_in => is_profilable(g_current_user, l_pname, 'TYPE') + ,against_this_in => TRUE); + wt_assert.eq + (msg_in => 'Check Type Body' + ,check_this_in => is_profilable(g_current_user, l_pname, 'TYPE BODY') + ,against_this_in => TRUE); + tl_drop_db_object(l_pname, 'type'); -------------------------------------- WTPLSQL Testing -- - g_rec := l_recSAVE; - wt_assert.eq ( - msg_in => 'SQLERRM', - check_this_in => l_sqlerrm, - against_this_in => 'ORA-20000: g_rec.test_run_id is null'); - end t_finalize; + wt_assert.g_testcase := 't_is_profilable Happy Path 4'; + wt_assert.eq + (msg_in => 'Check Missing Function' + ,check_this_in => is_profilable(g_current_user, 'BOGUS_FUNCTION_123', 'FUNCTION') + ,against_this_in => FALSE); + wt_assert.eq + (msg_in => 'Check Table' + ,check_this_in => is_profilable(g_current_user, 'WT_PROFILES', 'TABLE') + ,against_this_in => FALSE); + end t_is_profilable; $END ----------------%WTPLSQL_end_ignore_lines%---------------- @@ -1738,14 +1499,14 @@ $THEN wt_assert.g_testcase := 'Trigger Offset Happy Path'; wt_assert.eq ( msg_in => 'Trigger Test', - check_this_in => trigger_offset (dbout_owner_in => USER + check_this_in => trigger_offset (dbout_owner_in => g_current_user ,dbout_name_in => 'WT_SELF_TEST$TEST' ,dbout_type_in => 'TRIGGER'), against_this_in => 3); -------------------------------------- WTPLSQL Testing -- wt_assert.eq ( msg_in => 'Package Test', - check_this_in => trigger_offset (dbout_owner_in => USER + check_this_in => trigger_offset (dbout_owner_in => g_current_user ,dbout_name_in => 'WT_PROFILER' ,dbout_type_in => 'PACKAGE BODY'), against_this_in => 0); @@ -1766,20 +1527,20 @@ function calc_pct_coverage (in_test_run_id in number) return number IS -BEGIN - for buff in ( + cursor main is select sum(case status when 'EXEC' then 1 else 0 end) HITS ,sum(case status when 'NOTX' then 1 else 0 end) MISSES - from wt_dbout_profiles p - where test_run_id = in_test_run_id ) - loop - if buff.hits + buff.misses = 0 - then - return -1; - else - return round(100 * buff.hits / (buff.hits + buff.misses),2); - end if; - end loop; + from wt_profiles p + where test_run_id = in_test_run_id; + buff main%ROWTYPE; +BEGIN + open main; + fetch main into buff; + close main; + if nvl(buff.hits + buff.misses, 0) != 0 + then + return round(100 * buff.hits / (buff.hits + buff.misses),2); + end if; return null; END calc_pct_coverage; @@ -1788,58 +1549,57 @@ $THEN procedure t_calc_pct_coverage is c_test_run_id constant number := -95; - l_rec wt_dbout_profiles%ROWTYPE; + l_profile wt_profiles%ROWTYPE; begin -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Calculate Percent Coverage Setup'; tl_insert_test_runs(c_test_run_id, 'Calculate Offset Test'); - l_rec.test_run_id := c_test_run_id; - l_rec.total_occur := 1; - l_rec.total_usecs := 1; - l_rec.min_usecs := 1; - l_rec.max_usecs := 1; + l_profile.test_run_id := c_test_run_id; + l_profile.exec_cnt := 1; + l_profile.exec_tot_usec := 1; + l_profile.exec_min_usec := 1; + l_profile.exec_max_usec := 1; -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Calculate Percent Coverage Happy Path 1'; - l_rec.line := 1; - l_rec.status := 'EXEC'; - l_rec.text := 'Testing ' || l_rec.line; - tl_insert_dbout_profiles(l_rec); - -------------------------------------- WTPLSQL Testing -- - l_rec.line := 2; - l_rec.status := 'NOTX'; - l_rec.text := 'Testing ' || l_rec.line; - tl_insert_dbout_profiles(l_rec); - -------------------------------------- WTPLSQL Testing -- - l_rec.line := 3; - l_rec.status := 'EXEC'; - l_rec.text := 'Testing ' || l_rec.line; - tl_insert_dbout_profiles(l_rec); + l_profile.line := 1; + l_profile.status := 'EXEC'; + l_profile.text := 'Testing ' || l_profile.line; + tl_insert_wt_profiles(l_profile); + -------------------------------------- WTPLSQL Testing -- + l_profile.line := 2; + l_profile.status := 'NOTX'; + l_profile.text := 'Testing ' || l_profile.line; + tl_insert_wt_profiles(l_profile); + -------------------------------------- WTPLSQL Testing -- + l_profile.line := 3; + l_profile.status := 'EXEC'; + l_profile.text := 'Testing ' || l_profile.line; + tl_insert_wt_profiles(l_profile); wt_assert.eq ( msg_in => 'Main Test', check_this_in => calc_pct_coverage(c_test_run_id), against_this_in => 66.67); - tl_delete_dbout_profiles(c_test_run_id); + tl_delete_wt_profiles(c_test_run_id); -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Calculate Percent Coverage Happy Path 2'; - l_rec.line := 1; - l_rec.status := 'EXCL'; - l_rec.text := 'Testing ' || l_rec.line; - tl_insert_dbout_profiles(l_rec); - -------------------------------------- WTPLSQL Testing -- - l_rec.line := 2; - l_rec.status := 'UNKN'; - l_rec.text := 'Testing ' || l_rec.line; - tl_insert_dbout_profiles(l_rec); - -------------------------------------- WTPLSQL Testing -- - l_rec.line := 3; - l_rec.status := 'EXCL'; - l_rec.text := 'Testing ' || l_rec.line; - tl_insert_dbout_profiles(l_rec); - wt_assert.eq ( + l_profile.line := 1; + l_profile.status := 'EXCL'; + l_profile.text := 'Testing ' || l_profile.line; + tl_insert_wt_profiles(l_profile); + -------------------------------------- WTPLSQL Testing -- + l_profile.line := 2; + l_profile.status := 'UNKN'; + l_profile.text := 'Testing ' || l_profile.line; + tl_insert_wt_profiles(l_profile); + -------------------------------------- WTPLSQL Testing -- + l_profile.line := 3; + l_profile.status := 'EXCL'; + l_profile.text := 'Testing ' || l_profile.line; + tl_insert_wt_profiles(l_profile); + wt_assert.isnull ( msg_in => 'Main Test', - check_this_in => calc_pct_coverage(c_test_run_id), - against_this_in => -1); - tl_delete_dbout_profiles(c_test_run_id); + check_this_in => calc_pct_coverage(c_test_run_id)); + tl_delete_wt_profiles(c_test_run_id); -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Calculate Percent Coverage Sad Path'; wt_assert.isnull ( @@ -1856,29 +1616,344 @@ $END ----------------%WTPLSQL_end_ignore_lines%---------------- ------------------------------------------------------------ -procedure delete_records - (in_test_run_id in number) +procedure initialize +is + l_recNULL wt_dbout_runs%ROWTYPE; + l_retnum binary_integer; + junk number; +begin + -- Clear g_rec + g_rec := l_recNULL; + -- Clear PLSQL Profiler Results Older than 1 Day + junk := clear_plsql_profiler_recs; + -- Check Versions + l_retnum := dbms_profiler.INTERNAL_VERSION_CHECK; + if l_retnum <> 0 then + ------%WTPLSQL_begin_ignore_lines%------ Can't test this + --dbms_profiler.get_version(major_version, minor_version); + raise_application_error(-20005, + 'dbms_profiler.INTERNAL_VERSION_CHECK returned: ' || get_error_msg(l_retnum)); + ----------------%WTPLSQL_end_ignore_lines%---------------- + end if; + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + if not wtplsql_skip_test + then + $END + -- + -- This starts the PROFILER Running!!! + --dbms_output.put_line('running start_profiler in ' || wt_assert.g_testcase); + l_retnum := dbms_profiler.START_PROFILER(run_number => g_rec.profiler_runid); + if l_retnum <> 0 then + raise_application_error(-20006, + 'dbms_profiler.START_PROFILER returned: ' || get_error_msg(l_retnum)); + end if; + -- + $IF $$WTPLSQL_SELFTEST $THEN + else + g_rec.profiler_runid := 0; + end if; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- +end initialize; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_initialize + is + l_pname varchar2(128) := 'WT_PROFILE_INITIALIZE'; + l_cdr_recSAVE core_data.run_rec_type; + l_cdr_recTEST core_data.run_rec_type; + l_recSAVE wt_dbout_runs%ROWTYPE; + l_recTEST wt_dbout_runs%ROWTYPE; + l_sqlerrm varchar2(4000); + begin + wt_assert.g_testcase := 'Initialize Happy Path 1'; + -------------------------------------- WTPLSQL Testing -- + l_cdr_recSAVE := core_data.g_run_rec; + l_recSAVE := g_rec; + wtplsql_skip_test := TRUE; + initialize; + wtplsql_skip_test := FALSE; + l_cdr_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_cdr_recSAVE; + l_recTEST := g_rec; + g_rec := l_recSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull ( + msg_in => 'l_recTEST.test_run_id', + check_this_in => l_recTEST.test_run_id); + wt_assert.isnotnull ( + msg_in => 'l_recTEST.profiler_runid', + check_this_in => l_recTEST.profiler_runid); + end t_initialize; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Because this procedure is called to cleanup after erorrs, +-- it must be able to run multiple times without causing damage. +procedure finalize + (in_test_run_id in number) is - l_profiler_runid number; + junk number; begin - select profiler_runid into l_profiler_runid - from wt_test_runs where id = in_test_run_id; - delete_plsql_profiler_recs(l_profiler_runid); - delete from wt_dbout_profiles - where test_run_id = in_test_run_id; -exception - when NO_DATA_FOUND + -- Return if not profiling + if g_rec.profiler_runid is null then return; -end delete_records; + end if; + -- Abort if there is no Test Run ID + if in_test_run_id is null + then + raise_application_error (-20004, 'i_test_run_id is null'); + end if; + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + if not wtplsql_skip_test + then + $END + -- + -- DBMS_PROFILER.FLUSH_DATA is included with DBMS_PROFILER.STOP_PROFILER + --dbms_output.put_line('running stop_profiler in ' || wt_assert.g_testcase); + dbms_profiler.STOP_PROFILER; + -- + $IF $$WTPLSQL_SELFTEST $THEN + end if; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + if is_profilable(core_data.g_run_rec.dbout_owner + ,core_data.g_run_rec.dbout_name + ,core_data.g_run_rec.dbout_type) + then + -- Set g_rec values + g_rec.test_run_id := in_test_run_id; + g_rec.trigger_offset := trigger_offset(core_data.g_run_rec.dbout_owner + ,core_data.g_run_rec.dbout_name + ,core_data.g_run_rec.dbout_type); + -- Save PLSQL Profiler Results (Also updates g_rec) + insert_wt_profile(core_data.g_run_rec.dbout_owner + ,core_data.g_run_rec.dbout_name + ,core_data.g_run_rec.dbout_type); + -- Save g_rec + insert into wt_dbout_runs values g_rec; + commit; + end if; + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + if not wtplsql_skip_test + then + $END + -- + -- Clear PLSQL Profiler Results for this Run + junk := clear_plsql_profiler_recs(g_rec.test_run_id); + -- + $IF $$WTPLSQL_SELFTEST $THEN + end if; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- +end finalize; $IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ $THEN - procedure t_delete_records + procedure t_finalize is - c_test_run_id constant number := -98; - l_rec wt_dbout_profiles%ROWTYPE; + l_cdr_recSAVE core_data.run_rec_type; + l_cdr_recTEST core_data.run_rec_type; + l_recSAVE wt_dbout_runs%ROWTYPE; + l_recTEST wt_dbout_runs%ROWTYPE; + l_sqlerrm varchar2(4000); l_err_stack varchar2(32000); + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Finalize Happy Path 1'; + l_cdr_recSAVE := core_data.g_run_rec; + l_recSAVE := g_rec; + core_data.g_run_rec.error_message := NULL; + g_rec.profiler_runid := NULL; + -------------------------------------- WTPLSQL Testing -- + wtplsql_skip_test := TRUE; + begin + finalize(-1); + l_err_stack := SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ; + exception when others then + l_err_stack := SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ; + end; + wtplsql_skip_test := FALSE; + -------------------------------------- WTPLSQL Testing -- + l_cdr_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_cdr_recSAVE; + l_recTEST := g_rec; + g_rec := l_recSAVE; + tl_delete_dbout_runs(-1); + tl_delete_wt_profiles(-1); + tl_delete_test_runs(-1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'finalize(-1) SQLERRM', + check_this_in => substr(l_err_stack,1,39), + against_this_in => 'ORA-0000: normal, successful completion'); + wt_assert.isnull ( + msg_in => 'l_cdr_recTEST.error_message', + check_this_in => l_cdr_recTEST.error_message); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull ( + msg_in => 'l_recTEST.test_run_id', + check_this_in => l_recTEST.test_run_id); + wt_assert.isnull ( + msg_in => 'l_recTEST.trigger_offset', + check_this_in => l_recTEST.trigger_offset); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Finalize Happy Path 2'; + l_cdr_recSAVE := core_data.g_run_rec; + l_recSAVE := g_rec; + core_data.g_run_rec.dbout_owner := 'TEST OWNER'; + core_data.g_run_rec.dbout_name := 'TEST NAME'; + core_data.g_run_rec.dbout_type := 'TEST TYPE'; + core_data.g_run_rec.error_message := NULL; + -------------------------------------- WTPLSQL Testing -- + wtplsql_skip_test := TRUE; + begin + finalize(-2); + l_err_stack := SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ; + exception when others then + l_err_stack := SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ; + end; + wtplsql_skip_test := FALSE; + -------------------------------------- WTPLSQL Testing -- + l_cdr_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_cdr_recSAVE; + l_recTEST := g_rec; + g_rec := l_recSAVE; + tl_delete_dbout_runs(-2); + tl_delete_wt_profiles(-2); + tl_delete_test_runs(-2); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'finalize(-2) SQLERRM', + check_this_in => substr(l_err_stack,1,39), + against_this_in => 'ORA-0000: normal, successful completion'); + wt_assert.isnull ( + msg_in => 'l_cdr_recTEST.error_message', + check_this_in => l_cdr_recTEST.error_message); + wt_assert.isnotnull ( + msg_in => 'l_recTEST.profiler_runid', + check_this_in => l_recTEST.profiler_runid); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull ( + msg_in => 'l_recTEST.test_run_id', + check_this_in => l_recTEST.test_run_id); + wt_assert.isnull ( + msg_in => 'l_recTEST.trigger_offset', + check_this_in => l_recTEST.trigger_offset); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Finalize Happy Path 3'; + tl_insert_test_runs(-3, 'Finalize Happy Path 3'); + l_cdr_recSAVE := core_data.g_run_rec; + l_recSAVE := g_rec; + core_data.g_run_rec.dbout_owner := g_current_user; + core_data.g_run_rec.dbout_name := 'WT_PROFILE'; + core_data.g_run_rec.dbout_type := 'PACKAGE BODY'; + core_data.g_run_rec.error_message := NULL; + g_rec.profiler_runid := -33; + g_rec.trigger_offset := -33; + -------------------------------------- WTPLSQL Testing -- + wtplsql_skip_test := TRUE; + begin + finalize(-3); + l_err_stack := SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ; + exception when others then + l_err_stack := SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ; + end; + wtplsql_skip_test := FALSE; + -------------------------------------- WTPLSQL Testing -- + l_cdr_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_cdr_recSAVE; + l_recTEST := g_rec; + g_rec := l_recSAVE; + tl_delete_dbout_runs(-3); + tl_delete_wt_profiles(-3); + tl_delete_test_runs(-3); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'finalize(-3) SQLERRM', + check_this_in => substr(l_err_stack,1,39), + against_this_in => 'ORA-0000: normal, successful completion'); + wt_assert.isnull ( + msg_in => 'l_cdr_recTEST.error_message', + check_this_in => l_cdr_recTEST.error_message); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_recTEST.test_run_id', + check_this_in => l_recTEST.test_run_id, + against_this_in => -3); + wt_assert.eq ( + msg_in => 'l_recTEST.trigger_offset', + check_this_in => l_recTEST.trigger_offset, + against_this_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Finalize Sad Path 1'; + l_cdr_recSAVE := core_data.g_run_rec; + l_recSAVE := g_rec; + g_rec.profiler_runid := -4; + wtplsql_skip_test := TRUE; + begin + finalize(null); + l_sqlerrm := SQLERRM; + -------------------------------------- WTPLSQL Testing -- + exception when others then + l_sqlerrm := SQLERRM; + end; + wtplsql_skip_test := FALSE; + l_cdr_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_cdr_recSAVE; + l_recTEST := g_rec; + g_rec := l_recSAVE; + wt_assert.eq ( + msg_in => 'finalize(null) SQLERRM', + check_this_in => l_sqlerrm, + against_this_in => 'ORA-20004: i_test_run_id is null'); + end t_finalize; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function delete_run_id + (in_test_run_id in number) + return number +is + num_recs number; +begin + delete from wt_profiles where test_run_id = in_test_run_id; + num_recs := SQL%ROWCOUNT; + delete from wt_dbout_runs where test_run_id = in_test_run_id; + num_recs := num_recs + SQL%ROWCOUNT; + if in_test_run_id is not null + then + num_recs := num_recs + clear_plsql_profiler_recs(in_test_run_id); + end if; + return num_recs; +end delete_run_id; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_delete_run_id + is + c_test_run_id constant number := -98; + l_run wt_dbout_runs%ROWTYPE; + l_profile wt_profiles%ROWTYPE; begin -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Delete Records Setup'; @@ -1888,104 +1963,115 @@ $THEN ' where id = ' || c_test_run_id, against_value_in => 0); wt_assert.eqqueryvalue ( - msg_in => 'wt_dbout_profiles Count 0', - check_query_in => 'select count(*) from wt_dbout_profiles' || + msg_in => 'wt_profiles Count 0', + check_query_in => 'select count(*) from wt_profiles' || ' where test_run_id = ' || c_test_run_id, against_value_in => 0); tl_insert_test_runs(c_test_run_id, 'Delete Records Test'); -------------------------------------- WTPLSQL Testing -- - l_rec.test_run_id := c_test_run_id; - l_rec.line := 1; - l_rec.status := 'EXEC'; - l_rec.total_occur := 1; - l_rec.total_usecs := 1; - l_rec.min_usecs := 1; - l_rec.max_usecs := 1; - l_rec.text := 'Testing'; - tl_insert_dbout_profiles(l_rec); + l_profile.test_run_id := c_test_run_id; + l_profile.line := 1; + l_profile.status := 'EXEC'; + l_profile.exec_cnt := 1; + l_profile.exec_tot_usec := 1; + l_profile.exec_min_usec := 1; + l_profile.exec_max_usec := 1; + l_profile.text := 'Testing'; + tl_insert_wt_profiles(l_profile); -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Delete Records Happy Path 1'; begin - delete_records(c_test_run_id); - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; + wt_assert.eq ( + msg_in => 'Run delete_run_id(' || c_test_run_id || ')', + check_this_in => delete_run_id(c_test_run_id), + against_this_in => 1); exception when others then - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; + wt_assert.isnull( + msg_in => 'Run delete_run_id(' || c_test_run_id || ') Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); end; -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'SQLERRM', - check_this_in => l_err_stack); wt_assert.eqqueryvalue ( - msg_in => 'wt_dbout_profiles Count 2', - check_query_in => 'select count(*) from wt_dbout_profiles' || + msg_in => 'wt_profiles Count 2', + check_query_in => 'select count(*) from wt_profiles' || ' where test_run_id = ' || c_test_run_id, against_value_in => 0); + tl_delete_test_runs(c_test_run_id); -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Delete Records Sad Path 1'; begin - delete_records(-9876); - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; + wt_assert.eq ( + msg_in => 'Run delete_run_id(-9876)', + check_this_in => delete_run_id(-9876), + against_this_in => 0); exception when others then - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; + wt_assert.isnull( + msg_in => 'Run delete_run_id(-9876) Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); end; -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'SQLERRM', - check_this_in => l_err_stack); wt_assert.eqqueryvalue ( - msg_in => 'wt_dbout_profiles Count 2', - check_query_in => 'select count(*) from wt_dbout_profiles' || + msg_in => 'wt_profiles Count 2', + check_query_in => 'select count(*) from wt_profiles' || ' where test_run_id = ' || c_test_run_id, against_value_in => 0); -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Delete Records Sad Path 2'; begin - delete_records(NULL); - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; + wt_assert.eq ( + msg_in => 'Run delete_run_id(NULL)', + check_this_in => delete_run_id(NULL), + against_this_in => 0); exception when others then - l_err_stack := dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace ; + wt_assert.isnull( + msg_in => 'Run delete_run_id(NULL) Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); end; -------------------------------------- WTPLSQL Testing -- - wt_assert.isnull ( - msg_in => 'SQLERRM', - check_this_in => l_err_stack); wt_assert.eqqueryvalue ( - msg_in => 'wt_dbout_profiles Count 2', - check_query_in => 'select count(*) from wt_dbout_profiles' || + msg_in => 'wt_profiles Count 2', + check_query_in => 'select count(*) from wt_profiles' || ' where test_run_id = ' || c_test_run_id, against_value_in => 0); -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Delete Records Teardown'; - tl_delete_test_runs(c_test_run_id); - end t_delete_records; + end t_delete_run_id; $END ----------------%WTPLSQL_end_ignore_lines%---------------- --==============================================================-- $IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ $THEN - procedure WTPLSQL_RUN --% WTPLSQL SET DBOUT "WT_PROFILER:PACKAGE BODY" %-- + procedure WTPLSQL_RUN is begin + wtplsql.g_DBOUT := 'WT_PROFILE:PACKAGE BODY'; + select username into g_current_user from user_users; + -------------------------------------- WTPLSQL Testing -- t_get_error_msg; - t_delete_profiler_recs; - t_find_dbout; + t_clear_plsql_profiler_recs; t_load_ignr_aa; - t_insert_dbout_profile; - t_initialize; - t_finalize; + t_add_dbout_run; + t_set_prof_status; + t_insert_wt_profile; + t_is_profilable; t_trigger_offset; t_calc_pct_coverage; - t_delete_records; + t_initialize; + t_finalize; + t_delete_run_id; end WTPLSQL_RUN; $END ----------------%WTPLSQL_end_ignore_lines%---------------- --==============================================================-- -end wt_profiler; +end wt_profile; +/ + +set define on diff --git a/wtpsav/WTP/WT_PROFILE.pspec b/wtpsav/WTP/WT_PROFILE.pspec new file mode 100644 index 0000000..7f0e446 --- /dev/null +++ b/wtpsav/WTP/WT_PROFILE.pspec @@ -0,0 +1,63 @@ + +-- +-- Create WTP.WT_PROFILE Package +-- + +set define off + + +--DBMS_METADATA:WTP.WT_PROFILE + + CREATE OR REPLACE EDITIONABLE PACKAGE "WTP"."WT_PROFILE" + authid definer +as + + g_rec wt_dbout_runs%ROWTYPE; + + function is_profilable + (in_dbout_owner in varchar2 + ,in_dbout_name in varchar2 + ,in_dbout_type in varchar2) + return boolean; + + function trigger_offset + (dbout_owner_in in varchar2 + ,dbout_name_in in varchar2 + ,dbout_type_in in varchar2) + return number; + + function calc_pct_coverage + (in_test_run_id in number) + return number; + + procedure initialize; + + procedure finalize + (in_test_run_id in number); + + function delete_run_id + (in_test_run_id in number) + return number; + + -- WtPLSQL Self Test Procedures + -- + -- alter system set PLSQL_CCFLAGS = + -- 'WTPLSQL_SELFTEST:TRUE' + -- scope=BOTH; + -- + $IF $$WTPLSQL_SELFTEST + $THEN + procedure WTPLSQL_RUN; + $END + +end wt_profile; +/ + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_PROFILES.tab b/wtpsav/WTP/WT_PROFILES.tab new file mode 100644 index 0000000..5ea2c0c --- /dev/null +++ b/wtpsav/WTP/WT_PROFILES.tab @@ -0,0 +1,51 @@ + +-- +-- Create WTP.WT_PROFILES Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:WTP.WT_PROFILES + + CREATE TABLE "WTP"."WT_PROFILES" + ( "TEST_RUN_ID" NUMBER(38,0) CONSTRAINT "WT_PROFILES_NN1" NOT NULL ENABLE, + "LINE" NUMBER(6,0) CONSTRAINT "WT_PROFILES_NN2" NOT NULL ENABLE, + "STATUS" VARCHAR2(4 BYTE), + "EXEC_CNT" NUMBER(9,0), + "EXEC_TOT_USEC" NUMBER, + "EXEC_MIN_USEC" NUMBER, + "EXEC_MAX_USEC" NUMBER, + "TEXT" VARCHAR2(4000 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "WTP"."WT_PROFILES" ADD CONSTRAINT "WT_PROFILES_PK" PRIMARY KEY ("TEST_RUN_ID", "LINE") + USING INDEX ENABLE; + +-- Comments + +--DBMS_METADATA:WTP.WT_PROFILES + + COMMENT ON COLUMN "WTP"."WT_PROFILES"."TEST_RUN_ID" IS 'Foreign Key for the Test Run, Primary Key part 1.'; + COMMENT ON COLUMN "WTP"."WT_PROFILES"."LINE" IS 'Source code line number, Primary Key part 2.'; + COMMENT ON COLUMN "WTP"."WT_PROFILES"."STATUS" IS 'EXEC/NOTX/EXCL/IGNR/UNKN Status from the Profiler'; + COMMENT ON COLUMN "WTP"."WT_PROFILES"."EXEC_CNT" IS 'Number of times this line was executed.'; + COMMENT ON COLUMN "WTP"."WT_PROFILES"."EXEC_TOT_USEC" IS 'Total time in microseconds spent executing this line.'; + COMMENT ON COLUMN "WTP"."WT_PROFILES"."EXEC_MIN_USEC" IS 'Minimum execution time in microseconds for this line.'; + COMMENT ON COLUMN "WTP"."WT_PROFILES"."EXEC_MAX_USEC" IS 'Maximum execution time in microseconds for this line.'; + COMMENT ON COLUMN "WTP"."WT_PROFILES"."TEXT" IS 'Source code text for this line number.'; + COMMENT ON TABLE "WTP"."WT_PROFILES" IS 'PL/SQL Profiler data for Database Object Under Test (DBOUT).'; + + +-- Grants +grant DELETE on "WTP"."WT_PROFILES" to "PUBLIC"; +grant SELECT on "WTP"."WT_PROFILES" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_PROFILES.tabfk b/wtpsav/WTP/WT_PROFILES.tabfk new file mode 100644 index 0000000..99b128d --- /dev/null +++ b/wtpsav/WTP/WT_PROFILES.tabfk @@ -0,0 +1,16 @@ + +-- +-- Create Foreign Keys for WTP.WT_PROFILES TABLE +-- + +set define off + + +-- NOTE: This is a "BASE TABLE" Foreign Key + +--DBMS_METADATA:WTP.WT_PROFILES_FK1 + + ALTER TABLE "WTP"."WT_PROFILES" ADD CONSTRAINT "WT_PROFILES_FK1" FOREIGN KEY ("TEST_RUN_ID") + REFERENCES "WTP"."WT_TEST_RUNS" ("ID") ENABLE; + +set define on diff --git a/wtpsav/WTP/WT_PROFILES_VW.vw b/wtpsav/WTP/WT_PROFILES_VW.vw new file mode 100644 index 0000000..8a3e785 --- /dev/null +++ b/wtpsav/WTP/WT_PROFILES_VW.vw @@ -0,0 +1,83 @@ + +-- +-- Create WTP.WT_PROFILES_VW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "WTP"."WT_PROFILES_VW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants +grant SELECT on "WTP"."WT_PROFILES_VW" to "PUBLIC"; + + + +--DBMS_METADATA:WTP.WT_PROFILES_VW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "WTP"."WT_PROFILES_VW" ("TEST_RUN_ID", "DBOUT_ID", "DBOUT_OWNER", "DBOUT_NAME", "DBOUT_TYPE", "TEST_RUNNER_ID", "TEST_RUNNER_OWNER", "TEST_RUNNER_NAME", "START_DTM", "END_DTM", "IS_LAST_RUN", "ERROR_MESSAGE", "LINE", "STATUS", "EXEC_CNT", "EXEC_TOT_USEC", "EXEC_MIN_USEC", "EXEC_MAX_USEC", "TEXT") AS + select run.id TEST_RUN_ID + ,run.dbout_id + ,db.owner DBOUT_OWNER + ,db.name DBOUT_NAME + ,db.type DBOUT_TYPE + ,run.test_runner_id + ,tr.owner TEST_RUNNER_OWNER + ,tr.name TEST_RUNNER_NAME + ,run.start_dtm + ,run.end_dtm + ,run.is_last_run + ,run.error_message + ,pf.line + ,pf.status + ,pf.exec_cnt + ,pf.exec_tot_usec + ,pf.exec_min_usec + ,pf.exec_max_usec + ,pf.text + from wt_test_runs run + join wt_dbouts db + on db.id = run.dbout_id + join wt_test_runners tr + on tr.id = run.test_runner_id + join wt_profiles pf + on pf.test_run_id = run.id; + +-- Comments + +--DBMS_METADATA:WTP.WT_PROFILES_VW + + COMMENT ON COLUMN "WTP"."WT_PROFILES_VW"."TEST_RUN_ID" IS 'Primary (Surrogate) Key for each Test Run'; + COMMENT ON COLUMN "WTP"."WT_PROFILES_VW"."DBOUT_ID" IS 'Primary (Surrogate) Key for each Database Objects Under Test (DBOUT)'; + COMMENT ON COLUMN "WTP"."WT_PROFILES_VW"."DBOUT_OWNER" IS 'Owner of the Database Object Under Test (DBOUT).'; + COMMENT ON COLUMN "WTP"."WT_PROFILES_VW"."DBOUT_NAME" IS 'Name of the Database Object Under Test (DBOUT).'; + COMMENT ON COLUMN "WTP"."WT_PROFILES_VW"."DBOUT_TYPE" IS 'Type of the Database Object Under Test (DBOUT).'; + COMMENT ON COLUMN "WTP"."WT_PROFILES_VW"."TEST_RUNNER_ID" IS 'Primary (Surrogate) Key for each Test Runner'; + COMMENT ON COLUMN "WTP"."WT_PROFILES_VW"."TEST_RUNNER_OWNER" IS 'Owner of the Test Runner package. Natural Key 1 part 1'; + COMMENT ON COLUMN "WTP"."WT_PROFILES_VW"."TEST_RUNNER_NAME" IS 'Name of the Test Runner package. Natural Key 1 part 2'; + COMMENT ON COLUMN "WTP"."WT_PROFILES_VW"."LINE" IS 'Source code line number, Primary Key part 2.'; + COMMENT ON COLUMN "WTP"."WT_PROFILES_VW"."STATUS" IS 'EXEC/NOTX/EXCL/IGNR/UNKN Status from the Profiler'; + COMMENT ON COLUMN "WTP"."WT_PROFILES_VW"."EXEC_CNT" IS 'Number of times this line was executed.'; + COMMENT ON COLUMN "WTP"."WT_PROFILES_VW"."EXEC_TOT_USEC" IS 'Total time in microseconds spent executing this line.'; + COMMENT ON COLUMN "WTP"."WT_PROFILES_VW"."EXEC_MIN_USEC" IS 'Minimum execution time in microseconds for this line.'; + COMMENT ON COLUMN "WTP"."WT_PROFILES_VW"."EXEC_MAX_USEC" IS 'Maximum execution time in microseconds for this line.'; + COMMENT ON COLUMN "WTP"."WT_PROFILES_VW"."TEXT" IS 'Source code text for this line number.'; + COMMENT ON TABLE "WTP"."WT_PROFILES_VW" IS 'Test Run profile statistics for each execution of a Test Runner.'; + + +-- Grants +grant SELECT on "WTP"."WT_PROFILES_VW" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_RESULT.pbody b/wtpsav/WTP/WT_RESULT.pbody new file mode 100644 index 0000000..cea6c0d --- /dev/null +++ b/wtpsav/WTP/WT_RESULT.pbody @@ -0,0 +1,347 @@ + +-- +-- Create WTP.WT_RESULT Package Body +-- + +set define off + + +--DBMS_METADATA:WTP.WT_RESULT + + CREATE OR REPLACE EDITIONABLE PACKAGE BODY "WTP"."WT_RESULT" +as + +---------------------- +-- Private Procedures +---------------------- + + +--------------------- +-- Public Procedures +--------------------- + +------------------------------------------------------------ +procedure initialize +is +begin + return; +end initialize; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_initialize + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Initialize Happy Path'; + wt_assert.raises ( + msg_in => 'Empty Execution, nothing to do', + check_call_in => 'begin wt_result.initialize; end;', + against_exc_in => ''); + end t_initialize; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Because this procedure is called to cleanup after errors, +-- it must be able to run multiple times without causing damage. +procedure finalize + (in_test_run_id in number) +is + l_results_rec wt_results%ROWTYPE; + l_results_recNULL wt_results%ROWTYPE; + l_testcase_runs_recNULL wt_testcase_runs%ROWTYPE; + l_testcase_runs_rec wt_testcase_runs%ROWTYPE; + testcase core_data.long_name; +begin + if in_test_run_id IS NULL + then + return; + end if; + for i in 1 .. core_data.g_results_nt.COUNT + loop + l_results_rec := l_results_recNULL; + l_results_rec.TEST_RUN_ID := in_test_run_id; + l_results_rec.RESULT_SEQ := i; + l_results_rec.TESTCASE_ID := wt_testcase.dim_id + (core_data.g_results_nt(i).TESTCASE); + l_results_rec.EXECUTED_DTM := core_data.g_results_nt(i).EXECUTED_DTM; + l_results_rec.INTERVAL_MSEC := core_data.g_results_nt(i).INTERVAL_MSEC; + l_results_rec.ASSERTION := core_data.g_results_nt(i).ASSERTION; + if core_data.g_results_nt(i).PASS + then + l_results_rec.STATUS := 'PASS'; + else + l_results_rec.STATUS := 'FAIL'; + end if; + l_results_rec.MESSAGE := core_data.g_results_nt(i).MESSAGE; + l_results_rec.DETAILS := core_data.g_results_nt(i).DETAILS; + insert into wt_results values l_results_rec; + end loop; + commit; + -- Testcases + if core_data.g_tcases_aa.COUNT > 0 + then + testcase := core_data.g_tcases_aa.FIRST; + loop + l_testcase_runs_rec := l_testcase_runs_recNULL; + l_testcase_runs_rec.test_run_id := in_test_run_id; + l_testcase_runs_rec.testcase_id := wt_testcase.dim_id(testcase); + l_testcase_runs_rec.asrt_cnt := core_data.g_tcases_aa(testcase).asrt_cnt; + l_testcase_runs_rec.asrt_fail := core_data.g_tcases_aa(testcase).asrt_fail; + l_testcase_runs_rec.asrt_min_msec := core_data.g_tcases_aa(testcase).asrt_min_msec; + l_testcase_runs_rec.asrt_max_msec := core_data.g_tcases_aa(testcase).asrt_max_msec; + l_testcase_runs_rec.asrt_tot_msec := core_data.g_tcases_aa(testcase).asrt_tot_msec; + -- + l_testcase_runs_rec.asrt_pass := l_testcase_runs_rec.asrt_cnt - + l_testcase_runs_rec.asrt_fail; + if l_testcase_runs_rec.asrt_cnt > 0 then + l_testcase_runs_rec.asrt_yield_pct := l_testcase_runs_rec.asrt_pass / + l_testcase_runs_rec.asrt_cnt; + l_testcase_runs_rec.asrt_avg_msec := l_testcase_runs_rec.asrt_tot_msec / + l_testcase_runs_rec.asrt_cnt; + end if; + -- + insert into wt_testcase_runs values l_testcase_runs_rec; + exit when testcase = core_data.g_tcases_aa.LAST; + testcase := core_data.g_tcases_aa.NEXT(testcase); + end loop; + commit; + end if; +end finalize; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_finalize + is + -------------------------------------- WTPLSQL Testing -- + type num_recs_aa_type is table of number index by varchar2(50); + num_recs_aa num_recs_aa_type; + del_res_aa num_recs_aa_type; + del_tc_aa num_recs_aa_type; + l_results_ntSAVE core_data.results_nt_type; + l_results_ntTEST core_data.results_nt_type; + l_results_rec1 core_data.results_rec_type; + l_results_rec2 core_data.results_rec_type; + l_test_runs_rec wt_test_runs%ROWTYPE; + -------------------------------------- WTPLSQL Testing -- + procedure run_test (in_test_run_id in number + ,in_test_name in varchar2) is + begin + finalize(in_test_run_id); + select count(*) + into num_recs_aa(in_test_name) + from wt_results + where test_run_id = in_test_run_id; + -------------------------------------- WTPLSQL Testing -- + delete from wt_results where test_run_id = in_test_run_id; + del_res_aa(in_test_name) := SQL%ROWCOUNT; + delete from wt_testcase_runs where test_run_id = in_test_run_id; + del_tc_aa(in_test_name) := SQL%ROWCOUNT; + end run_test; + begin + wt_assert.g_testcase := 'Finalize Happy Path'; + -------------------------------------- WTPLSQL Testing -- + l_results_rec1.testcase := 'TESTCASE TEST'; + l_results_rec1.executed_dtm := systimestamp; + l_results_rec1.interval_msec := 99; + l_results_rec1.assertion := 'FINALTEST'; + l_results_rec1.pass := TRUE; + l_results_rec1.details := 'This is a Passing WT_RESULT.FINALIZE Test'; + -------------------------------------- WTPLSQL Testing -- + l_results_rec2.testcase := 'TESTCASE TEST'; + l_results_rec2.executed_dtm := systimestamp; + l_results_rec2.interval_msec := 99; + l_results_rec2.assertion := 'FINALTEST'; + l_results_rec2.pass := FALSE; + l_results_rec2.details := 'This is a Failing WT_RESULT.FINALIZE Test'; + -------------------------------------- WTPLSQL Testing -- + delete from wt_results where test_run_id = -99; + wt_assert.isnotnull ( + msg_in => 'Clear Previous Test Results', + check_this_in => SQL%ROWCOUNT); + delete from wt_testcase_runs where test_run_id = -99; + wt_assert.isnotnull ( + msg_in => 'Clear Previous Testcase Runs', + check_this_in => SQL%ROWCOUNT); + delete from wt_test_runs where id = -99; + wt_assert.isnotnull ( + msg_in => 'Clear Previous Test Runs', + check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + -- Setup the FK Record + l_test_runs_rec.id := -99; + l_test_runs_rec.start_dtm := sysdate; + l_test_runs_rec.test_runner_id := wt_test_runner.dim_id('WT_RESULT_TEST','WT_RESULT_TEST'); + insert into wt_test_runs values l_test_runs_rec; + wt_assert.eq ( + msg_in => 'Create Test Results Run', + check_this_in => SQL%ROWCOUNT, + against_this_in => 1); + -------------------------------------- WTPLSQL Testing -- + -- Capture Original Values + l_results_ntSAVE := core_data.g_results_nt; + select count(*) + into num_recs_aa('Initial Record Count') + from wt_results + where test_run_id = -99; + -------------------------------------- WTPLSQL Testing -- + -- No Assertion Testing in Here + core_data.g_results_nt := core_data.results_nt_type(l_results_rec1, l_results_rec2); + run_test(-99, 'Record Count Test'); + core_data.g_results_nt := core_data.results_nt_type(NULL); + run_test(-99, 'NULL Record Count'); + core_data.g_results_nt := core_data.results_nt_type(l_results_rec1); + run_test(NULL, 'NULL Test Run ID Test'); + -------------------------------------- WTPLSQL Testing -- + -- Restore values so we can test + core_data.g_results_nt := l_results_ntSAVE; + wt_assert.eq ( + msg_in => 'Initial Record Count', + check_this_in => num_recs_aa('Initial Record Count'), + against_this_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'Record Count Test', + check_this_in => num_recs_aa('Record Count Test'), + against_this_in => 2); + wt_assert.eq ( + msg_in => 'Delete Record Count Test Results', + check_this_in => del_res_aa('Record Count Test'), + against_this_in => 2); + wt_assert.isnotnull ( + msg_in => 'Delete Record Count Test Testcase Runs', + check_this_in => del_tc_aa('Record Count Test')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'NULL Record Count', + check_this_in => num_recs_aa('NULL Record Count'), + against_this_in => 1); + wt_assert.eq ( + msg_in => 'Delete NULL Record Count Results', + check_this_in => del_res_aa('NULL Record Count'), + against_this_in => 1); + wt_assert.isnotnull ( + msg_in => 'Delete NULL Record Count Testcase Runs', + check_this_in => del_tc_aa('NULL Record Count')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'NULL Test Run ID Test', + check_this_in => num_recs_aa('NULL Test Run ID Test'), + against_this_in => 0); + wt_assert.eq ( + msg_in => 'Delete NULL Record Count Results', + check_this_in => del_res_aa('NULL Test Run ID Test'), + against_this_in => 0); + wt_assert.isnotnull ( + msg_in => 'Delete NULL Record Count Testcase Runs', + check_this_in => del_tc_aa('NULL Test Run ID Test')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.raises ( + msg_in => 'Clear Test Results Run', + check_call_in => 'delete from wt_test_runs where id = -99', + against_exc_in => ''); + commit; + end t_finalize; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function delete_run_id + (in_test_run_id in number) + return number +is + ret_num number; +begin + delete from wt_testcase_runs where test_run_id = in_test_run_id; + ret_num := SQL%ROWCOUNT; + delete from wt_results where test_run_id = in_test_run_id; + ret_num := ret_num + SQL%ROWCOUNT; + return ret_num; +end delete_run_id; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_delete_run_id + is + -------------------------------------- WTPLSQL Testing -- + l_test_runs_rec wt_test_runs%ROWTYPE; + l_results_rec wt_results%ROWTYPE; + l_num_recs number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Delete Records Happy Path'; + select count(*) into l_num_recs + from wt_results + where test_run_id = -99; + wt_assert.isnotnull ( + msg_in => 'Before Insert Count', + check_this_in => l_num_recs); + -------------------------------------- WTPLSQL Testing -- + l_test_runs_rec.id := -99; + l_test_runs_rec.start_dtm := sysdate; + l_test_runs_rec.test_runner_id := wt_test_runner.dim_id('WT_RESULT_TEST','WT_RESULT_TEST'); + insert into wt_test_runs values l_test_runs_rec; + l_results_rec.test_run_id := -99; + -------------------------------------- WTPLSQL Testing -- + l_results_rec.result_seq := 1; + l_results_rec.executed_dtm := sysdate; + l_results_rec.interval_msec := 99; + l_results_rec.assertion := 'DELRECTEST'; + l_results_rec.status := 'PASS'; + l_results_rec.details := 'This is a WT_RESULT.DELETE_RECORDS Test'; + insert into wt_results values l_results_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'After Insert Count', + check_query_in => 'select count(*) from wt_results' || + ' where test_run_id = -99', + against_value_in => l_num_recs + 1); + begin + wt_assert.eq ( + msg_in => 'Run delete_run_id(-99)', + check_this_in => delete_run_id(-99), + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_run_id(-99) Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'After Test Count', + check_query_in => 'select count(*) from wt_results' || + ' where test_run_id = -99', + against_value_in => l_num_recs); + rollback; + wt_assert.eqqueryvalue ( + msg_in => 'After ROLLBACK Count', + check_query_in => 'select count(*) from wt_results' || + ' where test_run_id = -99', + against_value_in => l_num_recs); + end t_delete_run_id; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure WTPLSQL_RUN + is + begin + -------------------------------------- WTPLSQL Testing -- + wtplsql.g_DBOUT := 'WT_RESULT:PACKAGE BODY'; + t_initialize; + t_finalize; + t_delete_run_id; + end WTPLSQL_RUN; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +end wt_result; +/ + +set define on diff --git a/wtpsav/WTP/WT_RESULT.pspec b/wtpsav/WTP/WT_RESULT.pspec new file mode 100644 index 0000000..576b5ec --- /dev/null +++ b/wtpsav/WTP/WT_RESULT.pspec @@ -0,0 +1,45 @@ + +-- +-- Create WTP.WT_RESULT Package +-- + +set define off + + +--DBMS_METADATA:WTP.WT_RESULT + + CREATE OR REPLACE EDITIONABLE PACKAGE "WTP"."WT_RESULT" + authid definer +as + + procedure initialize; + + procedure finalize + (in_test_run_id in number); + + function delete_run_id + (in_test_run_id in number) + return number; + + -- WtPLSQL Self Test Procedures + -- + -- alter system set PLSQL_CCFLAGS = + -- 'WTPLSQL_SELFTEST:TRUE' + -- scope=BOTH; + -- + $IF $$WTPLSQL_SELFTEST + $THEN + procedure WTPLSQL_RUN; + $END + +end wt_result; +/ + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_RESULTS.tab b/wtpsav/WTP/WT_RESULTS.tab new file mode 100644 index 0000000..6da8e8d --- /dev/null +++ b/wtpsav/WTP/WT_RESULTS.tab @@ -0,0 +1,53 @@ + +-- +-- Create WTP.WT_RESULTS Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:WTP.WT_RESULTS + + CREATE TABLE "WTP"."WT_RESULTS" + ( "TEST_RUN_ID" NUMBER(38,0) CONSTRAINT "WT_RESULTS_NN1" NOT NULL ENABLE, + "RESULT_SEQ" NUMBER(8,0) CONSTRAINT "WT_RESULTS_NN2" NOT NULL ENABLE, + "TESTCASE_ID" NUMBER(38,0), + "EXECUTED_DTM" TIMESTAMP (6), + "INTERVAL_MSEC" NUMBER(12,3), + "ASSERTION" VARCHAR2(15 BYTE), + "STATUS" VARCHAR2(4 BYTE), + "MESSAGE" VARCHAR2(200 BYTE), + "DETAILS" VARCHAR2(4000 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "WTP"."WT_RESULTS" ADD CONSTRAINT "WT_RESULTS_PK" PRIMARY KEY ("TEST_RUN_ID", "RESULT_SEQ") + USING INDEX ENABLE; + +-- Comments + +--DBMS_METADATA:WTP.WT_RESULTS + + COMMENT ON COLUMN "WTP"."WT_RESULTS"."TEST_RUN_ID" IS 'Foreign Key for the Test Run, Primary Key part 1.'; + COMMENT ON COLUMN "WTP"."WT_RESULTS"."RESULT_SEQ" IS 'Sequence number for this Result, Primary Key part 2.'; + COMMENT ON COLUMN "WTP"."WT_RESULTS"."TESTCASE_ID" IS 'Foreign Key for the Test Case.'; + COMMENT ON COLUMN "WTP"."WT_RESULTS"."EXECUTED_DTM" IS 'Date/Time (with Fractional Seconds) this Result was captured'; + COMMENT ON COLUMN "WTP"."WT_RESULTS"."INTERVAL_MSEC" IS 'Interval time in milliseconds since the previous Result or start of the Test Run.'; + COMMENT ON COLUMN "WTP"."WT_RESULTS"."ASSERTION" IS 'Name of the Assertion Test performed'; + COMMENT ON COLUMN "WTP"."WT_RESULTS"."STATUS" IS 'PASS/FAIL Status from the Assertion'; + COMMENT ON COLUMN "WTP"."WT_RESULTS"."MESSAGE" IS 'Optional test identifier that helps connect an Assertion to the Test Runner.'; + COMMENT ON COLUMN "WTP"."WT_RESULTS"."DETAILS" IS 'Assertion Details, i.e. Expected Value and Actual Value'; + COMMENT ON TABLE "WTP"."WT_RESULTS" IS 'Results data from Test Runs.'; + + +-- Grants +grant DELETE on "WTP"."WT_RESULTS" to "PUBLIC"; +grant SELECT on "WTP"."WT_RESULTS" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_RESULTS.tabfk b/wtpsav/WTP/WT_RESULTS.tabfk new file mode 100644 index 0000000..dd4c801 --- /dev/null +++ b/wtpsav/WTP/WT_RESULTS.tabfk @@ -0,0 +1,23 @@ + +-- +-- Create Foreign Keys for WTP.WT_RESULTS TABLE +-- + +set define off + + +-- NOTE: This is a "BASE TABLE" Foreign Key + +--DBMS_METADATA:WTP.WT_RESULTS_FK1 + + ALTER TABLE "WTP"."WT_RESULTS" ADD CONSTRAINT "WT_RESULTS_FK1" FOREIGN KEY ("TEST_RUN_ID") + REFERENCES "WTP"."WT_TEST_RUNS" ("ID") ENABLE; + +-- NOTE: This is a "BASE TABLE" Foreign Key + +--DBMS_METADATA:WTP.WT_RESULTS_FK2 + + ALTER TABLE "WTP"."WT_RESULTS" ADD CONSTRAINT "WT_RESULTS_FK2" FOREIGN KEY ("TESTCASE_ID") + REFERENCES "WTP"."WT_TESTCASES" ("ID") ENABLE; + +set define on diff --git a/wtpsav/WTP/WT_RESULTS.tabind b/wtpsav/WTP/WT_RESULTS.tabind new file mode 100644 index 0000000..2f64a8e --- /dev/null +++ b/wtpsav/WTP/WT_RESULTS.tabind @@ -0,0 +1,16 @@ + +-- +-- Create Indexes for WTP.WT_RESULTS TABLE +-- + +set define off + + +-- NOTE: This is a "TARGET" Index + +--DBMS_METADATA:WTP.WT_RESULTS_IX1 + + CREATE INDEX "WTP"."WT_RESULTS_IX1" ON "WTP"."WT_RESULTS" ("TESTCASE_ID", "TEST_RUN_ID") + ; + +set define on diff --git a/wtpsav/WTP/WT_RESULTS_VW.vw b/wtpsav/WTP/WT_RESULTS_VW.vw new file mode 100644 index 0000000..ef1b540 --- /dev/null +++ b/wtpsav/WTP/WT_RESULTS_VW.vw @@ -0,0 +1,83 @@ + +-- +-- Create WTP.WT_RESULTS_VW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "WTP"."WT_RESULTS_VW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants +grant SELECT on "WTP"."WT_RESULTS_VW" to "PUBLIC"; + + + +--DBMS_METADATA:WTP.WT_RESULTS_VW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "WTP"."WT_RESULTS_VW" ("TEST_RUN_ID", "TEST_RUNNER_ID", "TEST_RUNNER_OWNER", "TEST_RUNNER_NAME", "START_DTM", "END_DTM", "IS_LAST_RUN", "ERROR_MESSAGE", "RESULT_SEQ", "TESTCASE_ID", "TESTCASE", "EXECUTED_DTM", "INTERVAL_MSEC", "ASSERTION", "STATUS", "MESSAGE", "DETAILS") AS + select run.id TEST_RUN_ID + ,run.test_runner_id + ,tr.owner TEST_RUNNER_OWNER + ,tr.name TEST_RUNNER_NAME + ,run.start_dtm + ,run.end_dtm + ,run.is_last_run + ,run.error_message + ,res.result_seq + ,res.testcase_id + ,tc.testcase + ,res.executed_dtm + ,res.interval_msec + ,res.assertion + ,res.status + ,res.message + ,res.details + from wt_test_runs run + join wt_test_runners tr + on tr.id = run.test_runner_id + join wt_results res + on res.test_run_id = run.id + join wt_testcases tc + on tc.id = res.testcase_id; + +-- Comments + +--DBMS_METADATA:WTP.WT_RESULTS_VW + + COMMENT ON COLUMN "WTP"."WT_RESULTS_VW"."TEST_RUN_ID" IS 'Foreign Key for the Test Run'; + COMMENT ON COLUMN "WTP"."WT_RESULTS_VW"."TEST_RUNNER_ID" IS 'Surrogate Key the Test Runner package.'; + COMMENT ON COLUMN "WTP"."WT_RESULTS_VW"."TEST_RUNNER_OWNER" IS 'Owner of the Test Runner package.'; + COMMENT ON COLUMN "WTP"."WT_RESULTS_VW"."TEST_RUNNER_NAME" IS 'Name of the Test Runner package.'; + COMMENT ON COLUMN "WTP"."WT_RESULTS_VW"."START_DTM" IS 'Date/time (and fractional seconds) this Test Run started.'; + COMMENT ON COLUMN "WTP"."WT_RESULTS_VW"."END_DTM" IS 'Date/time (and fractional seconds) this Test Run ended.'; + COMMENT ON COLUMN "WTP"."WT_RESULTS_VW"."IS_LAST_RUN" IS 'Optional Flag "Y" to indicate this is the most recent run for this package owner/name'; + COMMENT ON COLUMN "WTP"."WT_RESULTS_VW"."ERROR_MESSAGE" IS 'Optional Error messages from this Test Run.'; + COMMENT ON COLUMN "WTP"."WT_RESULTS_VW"."RESULT_SEQ" IS 'Sequence number for this Result'; + COMMENT ON COLUMN "WTP"."WT_RESULTS_VW"."TESTCASE_ID" IS 'Foreign Key for the Test Case.'; + COMMENT ON COLUMN "WTP"."WT_RESULTS_VW"."TESTCASE" IS 'The Test Case name'; + COMMENT ON COLUMN "WTP"."WT_RESULTS_VW"."EXECUTED_DTM" IS 'Date/Time (with Fractional Seconds) this Result was captured'; + COMMENT ON COLUMN "WTP"."WT_RESULTS_VW"."INTERVAL_MSEC" IS 'Interval time in milliseconds since the previous Result or start ot the Test Run.'; + COMMENT ON COLUMN "WTP"."WT_RESULTS_VW"."ASSERTION" IS 'Name of the Assertion Test performed'; + COMMENT ON COLUMN "WTP"."WT_RESULTS_VW"."STATUS" IS 'PASS/FAIL Status from the Assertion'; + COMMENT ON COLUMN "WTP"."WT_RESULTS_VW"."MESSAGE" IS 'Optional test identifier that helps connect an Assertion to the Test Runner.'; + COMMENT ON COLUMN "WTP"."WT_RESULTS_VW"."DETAILS" IS 'Assertion Details, i.e. Expected Value and Actual Value'; + COMMENT ON TABLE "WTP"."WT_RESULTS_VW" IS 'Results data from Test Runs.'; + + +-- Grants +grant SELECT on "WTP"."WT_RESULTS_VW" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_SCHEDULER_JOBS_VW.vw b/wtpsav/WTP/WT_SCHEDULER_JOBS_VW.vw new file mode 100644 index 0000000..72d4e40 --- /dev/null +++ b/wtpsav/WTP/WT_SCHEDULER_JOBS_VW.vw @@ -0,0 +1,70 @@ + +-- +-- Create WTP.WT_SCHEDULER_JOBS_VW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "WTP"."WT_SCHEDULER_JOBS_VW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants + + + +--DBMS_METADATA:WTP.WT_SCHEDULER_JOBS_VW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "WTP"."WT_SCHEDULER_JOBS_VW" ("LOG_ID", "START_DATE", "JOB_NAME", "STATUS", "INST", "SESSION_ID", "OS_PID", "ERROR_NUM", "ADDITIONAL_INFO") AS + select round(log_id) LOG_ID + ,systimestamp - elapsed_time START_DATE + ,job_name + ,'RUNNING' STATUS + ,running_instance INST + ,session_id + ,slave_process_id OS_PID + ,NULL ERROR_NUM + ,NULL ADDITIONAL_INFO + from user_scheduler_running_jobs +union all +select log_id + ,actual_start_date START_DATE + ,job_name + ,status + ,instance_id INST + ,NULL SESSION_ID + ,NULL OS_PID + ,error# ERROR_NUM + ,additional_info + from user_scheduler_job_run_details; + +-- Comments + +--DBMS_METADATA:WTP.WT_SCHEDULER_JOBS_VW + + COMMENT ON COLUMN "WTP"."WT_SCHEDULER_JOBS_VW"."LOG_ID" IS 'Unique identifier of the log entry (foreign key of the *_SCHEDULER_JOB_LOG views)'; + COMMENT ON COLUMN "WTP"."WT_SCHEDULER_JOBS_VW"."START_DATE" IS 'Actual date on which the job was run'; + COMMENT ON COLUMN "WTP"."WT_SCHEDULER_JOBS_VW"."JOB_NAME" IS 'Name of the Scheduler job'; + COMMENT ON COLUMN "WTP"."WT_SCHEDULER_JOBS_VW"."STATUS" IS 'Status of the job run'; + COMMENT ON COLUMN "WTP"."WT_SCHEDULER_JOBS_VW"."INST" IS 'Identifier of the instance on which the job was run'; + COMMENT ON COLUMN "WTP"."WT_SCHEDULER_JOBS_VW"."SESSION_ID" IS 'Identifier of the session running the Scheduler job'; + COMMENT ON COLUMN "WTP"."WT_SCHEDULER_JOBS_VW"."OS_PID" IS 'Process number of the slave process running the Scheduler job'; + COMMENT ON COLUMN "WTP"."WT_SCHEDULER_JOBS_VW"."ERROR_NUM" IS 'Error number in the case of an error'; + COMMENT ON COLUMN "WTP"."WT_SCHEDULER_JOBS_VW"."ADDITIONAL_INFO" IS 'Additional information on the job run, if applicable'; + COMMENT ON TABLE "WTP"."WT_SCHEDULER_JOBS_VW" IS 'User Scheduler Jobs, including running and not running jobs.'; + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_TESTCASE.pbody b/wtpsav/WTP/WT_TESTCASE.pbody new file mode 100644 index 0000000..28e720b --- /dev/null +++ b/wtpsav/WTP/WT_TESTCASE.pbody @@ -0,0 +1,234 @@ + +-- +-- Create WTP.WT_TESTCASE Package Body +-- + +set define off + + +--DBMS_METADATA:WTP.WT_TESTCASE + + CREATE OR REPLACE EDITIONABLE PACKAGE BODY "WTP"."WT_TESTCASE" +as + + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + C_TESTCASE CONSTANT varchar2(50) := 'WT_TESTCASE_FOR_TESTING_1234ABCD'; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--------------------- +-- Public Procedures +--------------------- + + +------------------------------------------------------------ +function get_id + (in_testcase in varchar2) + return number +is + l_id number; +begin + select id into l_id + from wt_testcases + where testcase = in_testcase; + return l_id; +exception when NO_DATA_FOUND +then + return NULL; +end get_id; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_get_id + is + l_id number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Setup'; + delete from wt_testcases + where testcase = C_TESTCASE; + wt_assert.isnotnull + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 0' + ,check_query_in => 'select count(*) from wt_testcases' || + ' where testcase = ''' || C_TESTCASE || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Happy Path 1'; + wt_assert.isnull + (msg_in => 'Check for Null return' + ,check_this_in => get_id(C_TESTCASE)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Happy Path 2'; + insert into wt_testcases (id, testcase) + values (wt_testcases_seq.nextval, C_TESTCASE) + returning id into l_id; + wt_assert.eq + (msg_in => 'Check ID return' + ,check_this_in => get_id(C_TESTCASE) + ,against_this_in => l_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Teardown'; + delete from wt_testcases + where testcase = C_TESTCASE; + wt_assert.eq + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT + ,against_this_in => 1); + commit; + end t_get_id; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function dim_id + (in_testcase in varchar2) + return number +is + pragma AUTONOMOUS_TRANSACTION; + rec wt_testcases%ROWTYPE; +begin + if in_testcase is NULL + then + return NULL; + end if; + rec.id := get_id (in_testcase); + if rec.id is null + then + rec.id := wt_testcases_seq.nextval; + rec.testcase := in_testcase; + insert into wt_testcases values rec; + end if; + commit; + return rec.id; +end dim_id; + + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_dim_id + is + l_id number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Setup'; + delete from wt_testcases + where testcase = C_TESTCASE; + wt_assert.isnotnull + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 0' + ,check_query_in => 'select count(*) from wt_testcases' || + ' where testcase = ''' || C_TESTCASE || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Happy Path 1'; + l_id := dim_id(C_TESTCASE); + wt_assert.isnotnull + (msg_in => 'Check ID return 1' + ,check_this_in => l_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Happy Path 2'; + wt_assert.eq + (msg_in => 'Check ID return 2' + ,check_this_in => dim_id(C_TESTCASE) + ,against_this_in => l_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Sad Path 1'; + wt_assert.isnull + (msg_in => 'Check NULL return' + ,check_this_in => dim_id(NULL)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Teardown'; + delete from wt_testcases + where testcase = C_TESTCASE; + wt_assert.eq + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT + ,against_this_in => 1); + commit; + end t_dim_id; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure delete_records +is +begin + delete from wt_testcases + where id in ( + select id from wt_testcases + MINUS + select distinct testcase_id ID from wt_results + MINUS + select distinct testcase_id ID from wt_testcase_runs); +end delete_records; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_delete_records + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Setup'; + delete from wt_testcases + where testcase = C_TESTCASE; + wt_assert.isnotnull + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + insert into wt_testcases (id, testcase) + values (wt_testcases_seq.nextval, C_TESTCASE); + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 1' + ,check_query_in => 'select count(*) from wt_testcases' || + ' where testcase = ''' || C_TESTCASE || '''' + ,against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Happy Path 1'; + delete_records; + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 0' + ,check_query_in => 'select count(*) from wt_testcases' || + ' where testcase = ''' || C_TESTCASE || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Happy Path 2'; + delete_records; + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should still be 0' + ,check_query_in => 'select count(*) from wt_testcases' || + ' where testcase = ''' || C_TESTCASE || '''' + ,against_value_in => 0); + commit; + end t_delete_records; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure WTPLSQL_RUN + is + begin + -------------------------------------- WTPLSQL Testing -- + wtplsql.g_DBOUT := 'WT_TESTCASE:PACKAGE BODY'; + t_get_id; + t_dim_id; + t_delete_records; + end; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +end wt_testcase; +/ + +set define on diff --git a/wtpsav/WTP/WT_TESTCASE.pspec b/wtpsav/WTP/WT_TESTCASE.pspec new file mode 100644 index 0000000..a4e3fdd --- /dev/null +++ b/wtpsav/WTP/WT_TESTCASE.pspec @@ -0,0 +1,51 @@ + +-- +-- Create WTP.WT_TESTCASE Package +-- + +set define off + + +--DBMS_METADATA:WTP.WT_TESTCASE + + CREATE OR REPLACE EDITIONABLE PACKAGE "WTP"."WT_TESTCASE" + authid definer +as + + -- Return a Testcase Surrogate Key. + -- Return NULL if the Testcase does not exist. + function get_id + (in_testcase in varchar2) + return number; + + -- Return a Testcase Surrogate Key. + -- Add the Testcase if it does not exist. + function dim_id + (in_testcase in varchar2) + return number; + + -- Delete all records with no child records + procedure delete_records; + + -- WtPLSQL Self Test Procedures + -- + -- alter system set PLSQL_CCFLAGS = + -- 'WTPLSQL_SELFTEST:TRUE' + -- scope=BOTH; + -- + $IF $$WTPLSQL_SELFTEST + $THEN + procedure WTPLSQL_RUN; + $END + +end wt_testcase; +/ + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_TESTCASES.tab b/wtpsav/WTP/WT_TESTCASES.tab new file mode 100644 index 0000000..9878f42 --- /dev/null +++ b/wtpsav/WTP/WT_TESTCASES.tab @@ -0,0 +1,41 @@ + +-- +-- Create WTP.WT_TESTCASES Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:WTP.WT_TESTCASES + + CREATE TABLE "WTP"."WT_TESTCASES" + ( "ID" NUMBER(38,0), + "TESTCASE" VARCHAR2(128 BYTE) CONSTRAINT "WT_TESTCASES_NN1" NOT NULL ENABLE + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "WTP"."WT_TESTCASES" ADD CONSTRAINT "WT_TESTCASES_PK" PRIMARY KEY ("ID") + USING INDEX ENABLE; +ALTER TABLE "WTP"."WT_TESTCASES" ADD CONSTRAINT "WT_TESTCASES_NK1" UNIQUE ("TESTCASE") + USING INDEX ENABLE; + +-- Comments + +--DBMS_METADATA:WTP.WT_TESTCASES + + COMMENT ON COLUMN "WTP"."WT_TESTCASES"."ID" IS 'Primary (Surrogate) Key for each Test Case'; + COMMENT ON COLUMN "WTP"."WT_TESTCASES"."TESTCASE" IS '(Required) Natural Key. The Test Case name'; + COMMENT ON TABLE "WTP"."WT_TESTCASES" IS 'Test Cases Used by Test Runners.'; + + +-- Grants +grant DELETE on "WTP"."WT_TESTCASES" to "PUBLIC"; +grant SELECT on "WTP"."WT_TESTCASES" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_TESTCASES_SEQ.seq b/wtpsav/WTP/WT_TESTCASES_SEQ.seq new file mode 100644 index 0000000..744c7d7 --- /dev/null +++ b/wtpsav/WTP/WT_TESTCASES_SEQ.seq @@ -0,0 +1,20 @@ + +-- +-- Create WTP.WT_TESTCASES_SEQ Sequence +-- + +set define off + + +--DBMS_METADATA:WTP.WT_TESTCASES_SEQ + + CREATE SEQUENCE "WTP"."WT_TESTCASES_SEQ" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE GLOBAL ; + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_TESTCASE_RUNS.tab b/wtpsav/WTP/WT_TESTCASE_RUNS.tab new file mode 100644 index 0000000..e4652c2 --- /dev/null +++ b/wtpsav/WTP/WT_TESTCASE_RUNS.tab @@ -0,0 +1,55 @@ + +-- +-- Create WTP.WT_TESTCASE_RUNS Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:WTP.WT_TESTCASE_RUNS + + CREATE TABLE "WTP"."WT_TESTCASE_RUNS" + ( "TEST_RUN_ID" NUMBER(38,0) CONSTRAINT "WT_TESTCASE_RUNS_NN1" NOT NULL ENABLE, + "TESTCASE_ID" NUMBER(38,0) CONSTRAINT "WT_TESTCASE_RUNS_NN2" NOT NULL ENABLE, + "ASRT_YIELD_PCT" NUMBER(3,0), + "ASRT_CNT" NUMBER(7,0), + "ASRT_FAIL" NUMBER(7,0), + "ASRT_PASS" NUMBER(7,0), + "ASRT_MIN_MSEC" NUMBER(10,0), + "ASRT_AVG_MSEC" NUMBER(10,0), + "ASRT_MAX_MSEC" NUMBER(10,0), + "ASRT_TOT_MSEC" NUMBER(10,0) + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "WTP"."WT_TESTCASE_RUNS" ADD CONSTRAINT "WT_TESTCASE_RUNS_PK" PRIMARY KEY ("TEST_RUN_ID", "TESTCASE_ID") + USING INDEX ENABLE; + +-- Comments + +--DBMS_METADATA:WTP.WT_TESTCASE_RUNS + + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS"."TEST_RUN_ID" IS 'Primary Key for each Test Run. Also the Test Runs Foreign Key.'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS"."TESTCASE_ID" IS 'Primary Key (part 2) for each Test Case. Also the Test Cases Foreign Key.'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS"."ASRT_YIELD_PCT" IS 'Percentage of successful assertions to total assertions.'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS"."ASRT_CNT" IS 'Total number of assetions for the Test Case.'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS"."ASRT_FAIL" IS 'Number of failed assertions for the Test Case.'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS"."ASRT_PASS" IS 'Number of passed assertions for the Test Case.'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS"."ASRT_MIN_MSEC" IS 'Minimum interval time between assertions in milliseconds for the Test Case'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS"."ASRT_AVG_MSEC" IS 'Average interval time between assertions in milliseconds for the Test Case'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS"."ASRT_MAX_MSEC" IS 'Maximum interval time between assertions in milliseconds for the Test Case'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS"."ASRT_TOT_MSEC" IS 'Total (sum) of interval times between assertions in milliseconds for the Test Case'; + COMMENT ON TABLE "WTP"."WT_TESTCASE_RUNS" IS 'Test Run data statistics for each testcase in the execution of a Test Runner.'; + + +-- Grants +grant DELETE on "WTP"."WT_TESTCASE_RUNS" to "PUBLIC"; +grant SELECT on "WTP"."WT_TESTCASE_RUNS" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_TESTCASE_RUNS.tabfk b/wtpsav/WTP/WT_TESTCASE_RUNS.tabfk new file mode 100644 index 0000000..75bd7a0 --- /dev/null +++ b/wtpsav/WTP/WT_TESTCASE_RUNS.tabfk @@ -0,0 +1,23 @@ + +-- +-- Create Foreign Keys for WTP.WT_TESTCASE_RUNS TABLE +-- + +set define off + + +-- NOTE: This is a "BASE TABLE" Foreign Key + +--DBMS_METADATA:WTP.WT_TESTCASE_RUNS_FK1 + + ALTER TABLE "WTP"."WT_TESTCASE_RUNS" ADD CONSTRAINT "WT_TESTCASE_RUNS_FK1" FOREIGN KEY ("TEST_RUN_ID") + REFERENCES "WTP"."WT_TEST_RUNS" ("ID") ENABLE; + +-- NOTE: This is a "BASE TABLE" Foreign Key + +--DBMS_METADATA:WTP.WT_TESTCASE_RUNS_FK2 + + ALTER TABLE "WTP"."WT_TESTCASE_RUNS" ADD CONSTRAINT "WT_TESTCASE_RUNS_FK2" FOREIGN KEY ("TESTCASE_ID") + REFERENCES "WTP"."WT_TESTCASES" ("ID") ENABLE; + +set define on diff --git a/wtpsav/WTP/WT_TESTCASE_RUNS.tabind b/wtpsav/WTP/WT_TESTCASE_RUNS.tabind new file mode 100644 index 0000000..7c38f8a --- /dev/null +++ b/wtpsav/WTP/WT_TESTCASE_RUNS.tabind @@ -0,0 +1,16 @@ + +-- +-- Create Indexes for WTP.WT_TESTCASE_RUNS TABLE +-- + +set define off + + +-- NOTE: This is a "TARGET" Index + +--DBMS_METADATA:WTP.WT_TESTCASE_RUNS_IX1 + + CREATE INDEX "WTP"."WT_TESTCASE_RUNS_IX1" ON "WTP"."WT_TESTCASE_RUNS" ("TESTCASE_ID") + ; + +set define on diff --git a/wtpsav/WTP/WT_TESTCASE_RUNS_VW.vw b/wtpsav/WTP/WT_TESTCASE_RUNS_VW.vw new file mode 100644 index 0000000..a5fea11 --- /dev/null +++ b/wtpsav/WTP/WT_TESTCASE_RUNS_VW.vw @@ -0,0 +1,81 @@ + +-- +-- Create WTP.WT_TESTCASE_RUNS_VW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "WTP"."WT_TESTCASE_RUNS_VW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants +grant SELECT on "WTP"."WT_TESTCASE_RUNS_VW" to "PUBLIC"; + + + +--DBMS_METADATA:WTP.WT_TESTCASE_RUNS_VW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "WTP"."WT_TESTCASE_RUNS_VW" ("TEST_RUN_ID", "TESTCASE_ID", "TESTCASE", "TEST_RUNNER_ID", "TEST_RUNNER_OWNER", "TEST_RUNNER_NAME", "IS_LAST_RUN", "ERROR_MESSAGE", "ASRT_YIELD_PCT", "ASRT_CNT", "ASRT_FAIL", "ASRT_PASS", "ASRT_MIN_MSEC", "ASRT_AVG_MSEC", "ASRT_MAX_MSEC", "ASRT_TOT_MSEC") AS + select tcr.test_run_id + ,tcr.testcase_id + ,tc.testcase + ,run.test_runner_id + ,tr.owner TEST_RUNNER_OWNER + ,tr.name TEST_RUNNER_NAME + ,run.is_last_run + ,run.error_message + ,tcr.asrt_yield_pct + ,tcr.asrt_cnt + ,tcr.asrt_fail + ,tcr.asrt_pass + ,tcr.asrt_min_msec + ,tcr.asrt_avg_msec + ,tcr.asrt_max_msec + ,tcr.asrt_tot_msec + from wt_testcase_runs tcr + join wt_testcases tc + on tc.id = tcr.testcase_id + join wt_test_runs run + on run.id = tcr.test_run_id + join wt_test_runners tr + on tr.id = run.test_runner_id; + +-- Comments + +--DBMS_METADATA:WTP.WT_TESTCASE_RUNS_VW + + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS_VW"."TEST_RUN_ID" IS 'Primary (Surrogate) Key for each Test Run'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS_VW"."TESTCASE_ID" IS 'Primary (Surrogate) Key for each Test Case'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS_VW"."TESTCASE" IS 'The Test Case name'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS_VW"."TEST_RUNNER_ID" IS 'Primary (Surrogate) Key for each Test Runner'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS_VW"."TEST_RUNNER_OWNER" IS 'Owner of the Test Runner package. Natural Key 1 part 1'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS_VW"."TEST_RUNNER_NAME" IS 'Name of the Test Runner package. Natural Key 1 part 2'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS_VW"."IS_LAST_RUN" IS 'Optional Flag "Y" to indicate this is the most recent run for this package owner/name'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS_VW"."ERROR_MESSAGE" IS 'Optional Error messages from this Test Run.'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS_VW"."ASRT_YIELD_PCT" IS 'Percentage of successful assertions to total assertions.'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS_VW"."ASRT_CNT" IS 'Total number of assetions for the Test Case.'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS_VW"."ASRT_FAIL" IS 'Number of failed assertions for the Test Case.'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS_VW"."ASRT_PASS" IS 'Number of passed assertions for the Test Case.'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS_VW"."ASRT_MIN_MSEC" IS 'Minimum interval time between assertions in milliseconds for the Test Case'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS_VW"."ASRT_AVG_MSEC" IS 'Average interval time between assertions in milliseconds for the Test Case'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS_VW"."ASRT_MAX_MSEC" IS 'Maximum interval time between assertions in milliseconds for the Test Case'; + COMMENT ON COLUMN "WTP"."WT_TESTCASE_RUNS_VW"."ASRT_TOT_MSEC" IS 'Total (sum) of interval times between assertions in milliseconds for the Test Case'; + COMMENT ON TABLE "WTP"."WT_TESTCASE_RUNS_VW" IS 'Test Run data statistics for each testcase in the execution of a Test Runner.'; + + +-- Grants +grant SELECT on "WTP"."WT_TESTCASE_RUNS_VW" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_TEST_RUN.pbody b/wtpsav/WTP/WT_TEST_RUN.pbody new file mode 100644 index 0000000..dbe7442 --- /dev/null +++ b/wtpsav/WTP/WT_TEST_RUN.pbody @@ -0,0 +1,1066 @@ + +-- +-- Create WTP.WT_TEST_RUN Package Body +-- + +set define off + + +--DBMS_METADATA:WTP.WT_TEST_RUN + + CREATE OR REPLACE EDITIONABLE PACKAGE BODY "WTP"."WT_TEST_RUN" +as + + g_test_runs_rec wt_test_runs%ROWTYPE; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + C_OWNER CONSTANT varchar2(50) := 'WT_TEST_RUNNER_OWNER_FOR_TESTING_1234ABCD'; + C_NAME CONSTANT varchar2(50) := 'WT_TEST_RUNNER_NAME_FOR_TESTING_1234ABCD'; +--==============================================================-- + -------------------------------------- WTPLSQL Testing -- + procedure tl_insert_test_runs + (in_test_run_id in NUMBER + ,in_runner_name in varchar2) + is + l_sql_txt varchar2(4000); + begin + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'insert into wt_test_runs' || + ' (id, start_dtm, test_runner_id)' || + ' values (' || in_test_run_id || ', sysdate, ' || + wt_test_runner.dim_id(C_OWNER + ,C_NAME) || ')'; + wt_assert.raises ( + msg_in => 'Insert wt_test_runs (' || in_test_run_id || ')', + check_call_in => l_sql_txt, + against_exc_in => ''); + wt_assert.eqqueryvalue ( + msg_in => 'wt_test_runs (' || in_test_run_id || ') Count', + check_query_in => 'select count(*) from wt_test_runs' || + ' where id = ' || in_test_run_id, + against_value_in => 1); + commit; + end tl_insert_test_runs; +--==============================================================-- + -------------------------------------- WTPLSQL Testing -- + procedure tl_delete_test_runs + (in_test_run_id in NUMBER) + is + l_sql_txt varchar2(4000); + begin + -------------------------------------- WTPLSQL Testing -- + l_sql_txt := 'delete from wt_test_runs where id = ' || in_test_run_id; + wt_assert.raises ( + msg_in => 'Delete wt_test_runs (' || in_test_run_id || ')', + check_call_in => l_sql_txt, + against_exc_in => ''); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'wt_test_runs rows deleted', + check_this_in => SQL%ROWCOUNT); + wt_assert.eqqueryvalue ( + msg_in => 'wt_test_runs (' || in_test_run_id || ') Count', + check_query_in => 'select count(*) from wt_test_runs' || + ' where id = ' || in_test_run_id, + against_value_in => 0); + commit; + end tl_delete_test_runs; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure set_g_test_runs_rec +is + g_test_runs_recNULL wt_test_runs%ROWTYPE; +begin + g_test_runs_rec := g_test_runs_recNULL; + g_test_runs_rec.id := wt_test_runs_seq.nextval; + g_test_runs_rec.test_runner_id := wt_test_runner.dim_id + (core_data.g_run_rec.test_runner_owner + ,core_data.g_run_rec.test_runner_name); + g_test_runs_rec.start_dtm := core_data.g_run_rec.start_dtm; + g_test_runs_rec.end_dtm := core_data.g_run_rec.end_dtm; + g_test_runs_rec.runner_sec := core_data.g_run_rec.runner_sec; + g_test_runs_rec.error_message := core_data.g_run_rec.error_message; + g_test_runs_rec.tc_cnt := core_data.g_run_rec.tc_cnt; + g_test_runs_rec.tc_fail := core_data.g_run_rec.tc_fail; + if g_test_runs_rec.tc_cnt != 0 + then + g_test_runs_rec.tc_yield_pct := round( 100 * + ( g_test_runs_rec.tc_cnt - + g_test_runs_rec.tc_fail ) / + g_test_runs_rec.tc_cnt , 2); + end if; + g_test_runs_rec.asrt_fst_dtm := core_data.g_run_rec.asrt_fst_dtm; + g_test_runs_rec.asrt_lst_dtm := core_data.g_run_rec.asrt_lst_dtm; + g_test_runs_rec.asrt_cnt := core_data.g_run_rec.asrt_cnt; + g_test_runs_rec.asrt_fail := core_data.g_run_rec.asrt_fail; + g_test_runs_rec.asrt_min_msec := core_data.g_run_rec.asrt_min_msec; + g_test_runs_rec.asrt_max_msec := core_data.g_run_rec.asrt_max_msec; + g_test_runs_rec.asrt_tot_msec := core_data.g_run_rec.asrt_tot_msec; + g_test_runs_rec.dbout_id := wt_dbout.dim_id + (core_data.g_run_rec.dbout_owner + ,core_data.g_run_rec.dbout_name + ,core_data.g_run_rec.dbout_type); + if nvl(g_test_runs_rec.asrt_cnt,0) != 0 + then + g_test_runs_rec.asrt_yield_pct := round(100 * ( g_test_runs_rec.asrt_cnt - + g_test_runs_rec.asrt_fail ) / + g_test_runs_rec.asrt_cnt , 2); + g_test_runs_rec.asrt_avg_msec := round(g_test_runs_rec.asrt_tot_msec / + g_test_runs_rec.asrt_cnt , 2); + end if; +end set_g_test_runs_rec; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_set_g_test_runs_rec + is + l_cdr_recSAVE core_data.run_rec_type; + l_cdr_recTEST core_data.run_rec_type; + l_tr_recSAVE wt_test_runs%ROWTYPE; + l_tr_recTEST wt_test_runs%ROWTYPE; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Set g_test_run_rec Happy Path 1'; + l_cdr_recSAVE := core_data.g_run_rec; + l_tr_recSAVE := g_test_runs_rec; + -------------------------------------- WTPLSQL Testing -- + core_data.g_run_rec.test_runner_owner := C_OWNER; + core_data.g_run_rec.test_runner_name := C_NAME; + core_data.g_run_rec.tc_cnt := 2; + core_data.g_run_rec.tc_fail := 1; + core_data.g_run_rec.dbout_owner := C_OWNER; + core_data.g_run_rec.dbout_name := C_NAME; + core_data.g_run_rec.dbout_type := 'TYPE'; + core_data.g_run_rec.asrt_cnt := 10; + core_data.g_run_rec.asrt_fail := 5; + core_data.g_run_rec.asrt_tot_msec := 100; + -------------------------------------- WTPLSQL Testing -- + set_g_test_runs_rec; + l_cdr_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_cdr_recSAVE; + l_tr_recTEST := g_test_runs_rec; + g_test_runs_rec := l_tr_recSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'l_tr_recTEST.id', + check_this_in => l_tr_recTEST.id); + wt_assert.isnotnull ( + msg_in => 'l_tr_recTEST.test_runner_id', + check_this_in => l_tr_recTEST.test_runner_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull ( + msg_in => 'l_tr_recTEST.dbout_id', + check_this_in => l_tr_recTEST.dbout_id); + wt_assert.eq ( + msg_in => 'l_tr_recTEST.tc_cnt', + check_this_in => l_tr_recTEST.tc_cnt, + against_this_in => 2); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_tr_recTEST.tc_fail', + check_this_in => l_tr_recTEST.tc_fail, + against_this_in => 1); + wt_assert.eq ( + msg_in => 'l_tr_recTEST.asrt_cnt', + check_this_in => l_tr_recTEST.asrt_cnt, + against_this_in => 10); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_tr_recTEST.asrt_fail', + check_this_in => l_tr_recTEST.asrt_fail, + against_this_in => 5); + wt_assert.eq ( + msg_in => 'l_tr_recTEST.asrt_tot_msec', + check_this_in => l_tr_recTEST.asrt_tot_msec, + against_this_in => 100); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_tr_recTEST.tc_yield_pct', + check_this_in => l_tr_recTEST.tc_yield_pct, + against_this_in => 50); + wt_assert.eq ( + msg_in => 'l_tr_recTEST.tc_fail', + check_this_in => l_tr_recTEST.tc_fail, + against_this_in => 1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'l_tr_recTEST.asrt_yield_pct', + check_this_in => l_tr_recTEST.asrt_yield_pct, + against_this_in => 50); + wt_assert.eq ( + msg_in => 'l_tr_recTEST.asrt_avg_msec', + check_this_in => l_tr_recTEST.asrt_avg_msec, + against_this_in => 10); + end t_set_g_test_runs_rec; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Use the CLEAR_LAST_RUN procedure to clear the LAST_RUN_FLAG +-- flag before running this procedure. +function clear_last_run + (in_test_runner_id in number) + return number +as +begin + update wt_test_runs + set is_last_run = NULL + where test_runner_id = in_test_runner_id + and is_last_run = C_LAST_RUN_FLAG; + return SQL%ROWCOUNT; +end clear_last_run; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_clear_last_run + is + l_sql_txt varchar2(4000); + l_sqlerrm varchar2(32000); + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Clear Last Run Happy Path 1'; + tl_insert_test_runs(-1, 'Clear Last Run Testing'); + l_sql_txt := 'update wt_test_runs' || + ' set is_last_run = ''' || C_LAST_RUN_FLAG || + ''' where id = -1'; + wt_assert.raises ( + msg_in => 'Update wt_test_runs (-1)', + check_call_in => l_sql_txt, + against_exc_in => ''); + wt_assert.eqqueryvalue ( + msg_in => 'wt_test_runs (-1) Count', + check_query_in => 'select count(*) from wt_test_runs' || + ' where id = -1' || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'clear_last_run(get_id(C_OWNER,C_NAME))', + check_this_in => clear_last_run(wt_test_runner.get_id(C_OWNER,C_NAME)), + against_this_in => 1); + exception when others then + wt_assert.isnull ( + msg_in => 'clear_last_run(get_id(C_OWNER,C_NAME) Exception)', + check_this_in => SQLERRM); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'clear_last_run(get_id(C_OWNER,C_NAME)) Count', + check_query_in => 'select count(*) from wt_test_runs' || + ' where id = -1' || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 0); + tl_delete_test_runs(-1); + end t_clear_last_run; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + +------------------------------------------------------------ +procedure insert_test_run +is + junk number; +begin + if g_test_runs_rec.id is null + then + return; + end if; + junk := clear_last_run(in_test_runner_id => g_test_runs_rec.test_runner_id); + g_test_runs_rec.is_last_run := C_LAST_RUN_FLAG; + insert into wt_test_runs values g_test_runs_rec; + commit; +end insert_test_run; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_insert_test_run + is + -------------------------------------- WTPLSQL Testing -- + TYPE l_dbmsout_buff_type is table of varchar2(32767); + l_dbmsout_buff l_dbmsout_buff_type; + l_test_runs_rec wt_test_runs%ROWTYPE; + l_dbmsout_line varchar2(32767); + l_dbmsout_stat number; + l_num_recs number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'INSERT_TEST_RUN Happy Path 1'; + wt_assert.eqqueryvalue ( + msg_in => 'Records Before Insert', + check_query_in => 'select count(*) from wt_test_runs' || + ' where id = -2', + against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + l_test_runs_rec := g_test_runs_rec; + g_test_runs_rec.id := -2; + g_test_runs_rec.test_runner_id := wt_test_runner.dim_id(C_OWNER, C_NAME); + g_test_runs_rec.start_dtm := systimestamp; + insert_test_run; + g_test_runs_rec := l_test_runs_rec; + wt_assert.eqqueryvalue ( + msg_in => 'Number of Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where id = -2', + against_value_in => 1); + tl_delete_test_runs(-2); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'INSERT_TEST_RUN Happy Path 2'; + select count(*) into l_num_recs from wt_test_runs; + l_test_runs_rec := g_test_runs_rec; + g_test_runs_rec.id := null; + insert_test_run; + g_test_runs_rec := l_test_runs_rec; + wt_assert.eqqueryvalue ( + msg_in => 'Before and After Record Count', + check_query_in => 'select count(*) from wt_test_runs', + against_value_in => l_num_recs); + end t_insert_test_run; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function delete_runs + (in_test_runner_id in number) + return number +is + num_recs number := 0; +begin + for buff in ( + with q1 as (select start_dtm, id from wt_test_runs + where test_runner_id = in_test_runner_id + order by start_dtm desc, id desc) + ,q2 as (select rownum rnum, start_dtm, id from q1) + select start_dtm, id from q2 + where rnum > g_keep_num_recs) + loop + num_recs := num_recs + wt_profile.delete_run_id(buff.id); + num_recs := num_recs + wt_result.delete_run_id(buff.id); + num_recs := num_recs + delete_run_id(buff.id); + end loop; + return num_recs; +end delete_runs; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_delete_runs + is + l_tr_id number := wt_test_runner.dim_id(C_OWNER, C_NAME); + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'DELETE_RUNS Setup'; + -- DELETE_RECORDS has already run when we arrive here. + -- Cleanup from previous test + delete from wt_test_runs where test_runner_id = l_tr_id; + wt_assert.isnotnull ( + msg_in => 'Clear any previous records (ROWCOUNT)', + check_this_in => SQL%ROWCOUNT); + COMMIT; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'DELETE_RUNS Happy Path 1'; + for i in 1 .. g_keep_num_recs + 1 + loop + insert into wt_test_runs + (id, start_dtm, test_runner_id) + values + (0-i, sysdate-100-i, l_tr_id); + end loop; + commit; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Check Added ' || g_keep_num_recs || ' records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id, + against_value_in => g_keep_num_recs + 1); + begin + wt_assert.eq ( + msg_in => 'Run delete_runs(' || l_tr_id || ')', + check_this_in => delete_runs(l_tr_id), + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_runs(' || l_tr_id || ') Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Check number of records reduced', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id, + against_value_in => g_keep_num_recs); + delete from wt_test_runs + where id between 0-g_keep_num_recs and 0-1; + commit; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'DELETE_RUNS Sad Path 1'; + begin + wt_assert.eq ( + msg_in => 'Run delete_runs(-9995)', + check_this_in => delete_runs(-9995), + against_this_in => 0); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_runs(-9995) Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + end t_delete_runs; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--------------------- +-- Public Procedures +--------------------- + + +------------------------------------------------------------ +-- Setting "g_test_runs_rec" to NULL is trivial. +-- Other initializers already tested. NOT UNIT TESTING! +procedure initialize +is + l_test_runs_recNULL wt_test_runs%ROWTYPE; +begin ------%WTPLSQL_begin_ignore_lines%------ + g_test_runs_rec := l_test_runs_recNULL; + wt_result.initialize; + wt_profile.initialize; -- Clear, Check, and Set Profiler Runid +end initialize; ----------------%WTPLSQL_end_ignore_lines%---------------- + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_initialize + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Initialization Testing'; + wt_assert.isnotnull ( + msg_in => 'Not Testing Initialization', + check_this_in => 'Setting "g_test_runs_rec" to NULL is trivial. Other initializers already tested'); + end t_initialize; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Not Testing Finalization +-- All components already tested +procedure finalize1 +is + junk number; +begin ------%WTPLSQL_begin_ignore_lines%------ + set_g_test_runs_rec; + junk := delete_runs(g_test_runs_rec.test_runner_id); + insert_test_run; -- With COMMIT + wt_result.finalize(g_test_runs_rec.id); -- With COMMIT + wt_profile.finalize(g_test_runs_rec.id); -- With COMMIT +end finalize1; ----------------%WTPLSQL_end_ignore_lines%---------------- + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_finalize1 + is + -- To Unit Test, need to save/set/restore these variables/structures/tables + -- For set_g_test_runs_rec + -- -) core_data.g_run_rec; + -- -) g_test_runs_rec + -- For delete_runs: wt_test_runs Table + -- For insert_test_run: g_test_runs_rec + -- For wt_result.finalize + -- -) core_data.results_rec_type + -- -) core_data.g_results_nt + -- -) wt_results Table + -- -) wt_testcase_runs Table + -- -) wt_test_runs Table + -- For wt_profile.finalize + -- -) core_data.g_run_rec + -- -) wt_profile.g_rec + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Finalization1 Testing'; + wt_assert.isnotnull ( + msg_in => 'Not Testing Finalization1', + check_this_in => 'All components already tested'); + end t_finalize1; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function finalize2 + return number +is + ret_num number; +begin + -- Update any additional errors + -- This will cause a chained row in WT_TEST_RUNS + update wt_test_runs + set error_message = g_test_runs_rec.error_message + where id = g_test_runs_rec.id + and ( ( error_message is null + and g_test_runs_rec.error_message is not null ) + or (error_message != g_test_runs_rec.error_message) ); + ret_num := SQL%ROWCOUNT; + commit; + return ret_num; +end finalize2; + +procedure finalize2 +is + -- Procedure Overload for finalize2 + junk number; +begin + junk := finalize2; +end finalize2; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_finalize2 + is + runner_id wt_test_runners.id%TYPE := -99; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Finalization2 Testing'; + wt_assert.isnull ( + msg_in => 'Confirm g_test_runs_rec.error_message NULL', + check_this_in => g_test_runs_rec.error_message); + wt_assert.isnull ( + msg_in => 'Confirm g_test_runs_rec.id is NULL', + check_this_in => g_test_runs_rec.id); + g_test_runs_rec.id := -99; + -------------------------------------- WTPLSQL Testing -- + begin + insert into wt_test_runners (ID, OWNER, NAME) + values (runner_id, 'Finalization2 Testing', 'Finalization2 Testing'); + wt_assert.eq ( + msg_in => 'Setup WT_TEST_RUNNERS Record for finalize2 Test', + check_this_in => SQL%ROWCOUNT, + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Setup WT_TEST_RUNNERS Record for finalize2 Test Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + begin + insert into wt_test_runs (ID, TEST_RUNNER_ID, START_DTM) + values (g_test_runs_rec.id, runner_id, sysdate); + wt_assert.eq ( + msg_in => 'Setup WT_TEST_RUNS Record for finalize2 Test', + check_this_in => SQL%ROWCOUNT, + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Setup WT_TEST_RUNS Record for finalize2 Test Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + g_test_runs_rec.error_message := 'This is Test Message 1 for Finalization2 Testing'; + begin + wt_assert.eq ( + msg_in => 'Run finalize2', + check_this_in => finalize2, + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Run finalize2 Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Confirm wt_test_runs.error_message updated', + check_query_in => 'select error_message from wt_test_runs' || + ' where id = ' || g_test_runs_rec.id, + against_value_in => g_test_runs_rec.error_message); + -------------------------------------- WTPLSQL Testing -- + g_test_runs_rec.error_message := 'This is Test Message 2 for Finalization2 Testing'; + wt_assert.raises ( + msg_in => 'Run wt_test_runs.error_message to clear message', + check_call_in => 'begin wt_test_run.finalize2; end;', + against_exc_in => cast (NULL as number)); + wt_assert.eqqueryvalue ( + msg_in => 'Confirm wt_test_runs.error_message cleared', + check_query_in => 'select error_message from wt_test_runs' || + ' where id = ' || g_test_runs_rec.id, + against_value_in => g_test_runs_rec.error_message); + -------------------------------------- WTPLSQL Testing -- + begin + delete from wt_test_runs where ID = g_test_runs_rec.id; + wt_assert.eq ( + msg_in => 'Delete WT_TEST_RUNS Record for finalize2 Test', + check_this_in => SQL%ROWCOUNT, + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Delete WT_TEST_RUNS Record for finalize2 Test Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + begin + delete from wt_test_runners where ID = runner_id; + wt_assert.eq ( + msg_in => 'Delete WT_TEST_RUNNERS Record for finalize2 Test', + check_this_in => SQL%ROWCOUNT, + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Delete WT_TEST_RUNNERS Record for finalize2 Test Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + commit; + g_test_runs_rec.id := NULL; + end t_finalize2; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function get_last_run_flag + return varchar2 +is +begin + return C_LAST_RUN_FLAG; +end get_last_run_flag; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_get_last_run_flag + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Get Last Run Flag Testing'; + wt_assert.eq ( + msg_in => 'Test 01', + check_this_in => get_last_run_flag, + against_this_in => C_LAST_RUN_FLAG); + end t_get_last_run_flag; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Use the SET_LAST_RUN procedure to set the LAST_RUN flag +-- after running this procedure. +function set_last_run + (in_test_runner_id in number) + return number +as + num_rows number; + num_clear number; +begin + if in_test_runner_id is null + then + return 0; + end if; + select count(is_last_run) + into num_rows + from wt_test_runs + where test_runner_id = in_test_runner_id + and is_last_run = C_LAST_RUN_FLAG; + if num_rows = 1 + then + -- Abort if a LAST_RUN_FLAG is already set + return -1; + end if; + if num_rows > 1 + then + -- Clear out previous Flags + num_clear := clear_last_run(in_test_runner_id); + end if; + --Update the latest as the LAST_RUN + update wt_test_runs + set is_last_run = C_LAST_RUN_FLAG + where test_runner_id = in_test_runner_id + and start_dtm = ( + select max(tr.start_dtm) + from wt_test_runs tr + where tr.test_runner_id = in_test_runner_id); + return SQL%ROWCOUNT; +end set_last_run; + +------------------------------------------------------------ +-- Procedure Overload +procedure set_last_run + (in_test_runner_id in number) +as + junk number; +begin + junk := set_last_run(in_test_runner_id); +end set_last_run; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_set_last_run + is + l_tr_id number := wt_test_runner.dim_id(C_OWNER, C_NAME); + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'SET_LAST_RUN Setup'; + delete from wt_test_runs where test_runner_id = l_tr_id; + wt_assert.isnotnull ( + msg_in => 'Clear any previous records (ROWCOUNT)', + check_this_in => SQL%ROWCOUNT); + insert into wt_test_runs (id, test_runner_id, is_last_run, start_dtm) + values (-11, l_tr_id, C_LAST_RUN_FLAG, sysdate); + insert into wt_test_runs (id, test_runner_id, is_last_run, start_dtm) + values (-12, l_tr_id, C_LAST_RUN_FLAG, sysdate-1); + COMMIT; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Number of Test Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id, + against_value_in => 2); + wt_assert.eqqueryvalue ( + msg_in => 'Number of Last Run Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 2); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Sad Path: Too Many C_LAST_RUN_FLAG Set'; + begin + wt_assert.eq ( + msg_in => 'Too many C_LAST_RUN_FLAG is set for ' || l_tr_id || ')', + check_this_in => set_last_run(l_tr_id), + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Run set_last_run(' || l_tr_id || ') Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + wt_assert.eqqueryvalue ( + msg_in => 'Number of Last Run Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'Run set_last_run(' || l_tr_id || ')', + check_this_in => set_last_run(l_tr_id), + against_this_in => -1); + exception when others then + wt_assert.isnull( + msg_in => 'Run set_last_run(' || l_tr_id || ') Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Number of Last Run Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 1); + wt_assert.eqqueryvalue ( + msg_in => 'Test Run ID of Last Run', + check_query_in => 'select id from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => -11); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'SET_LAST_RUN Happy Path 1'; + delete from wt_test_runs where id = -11; + COMMIT; + wt_assert.eqqueryvalue ( + msg_in => 'Number of Test Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id, + against_value_in => 1); + wt_assert.eqqueryvalue ( + msg_in => 'Number of Last Run Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.raises ( + msg_in => 'Run set_last_run(' || l_tr_id || ')', + check_call_in => 'begin wt_test_run.set_last_run(' || l_tr_id || '); end;', + against_exc_in => cast(NULL as number)); + wt_assert.eqqueryvalue ( + msg_in => 'Number of Last Run Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 1); + wt_assert.eqqueryvalue ( + msg_in => 'Test Run ID of Last Run', + check_query_in => 'select id from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => -12); + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'C_LAST_RUN_FLAG is already set for ' || l_tr_id || ')', + check_this_in => set_last_run(l_tr_id), + against_this_in => -1); + exception when others then + wt_assert.isnull( + msg_in => 'Run set_last_run(' || l_tr_id || ') Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'SET_LAST_RUN Happy Path 2'; + delete from wt_test_runs where id = -12; + COMMIT; + wt_assert.eqqueryvalue ( + msg_in => 'Number of Test Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id, + against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'Run set_last_run(' || l_tr_id || ')', + check_this_in => set_last_run(l_tr_id), + against_this_in => 0); + exception when others then + wt_assert.isnull( + msg_in => 'Run set_last_run(' || l_tr_id || ') Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Number of Last Run Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'Run set_last_run(NULL)', + check_this_in => set_last_run(NULL), + against_this_in => 0); + exception when others then + wt_assert.isnull( + msg_in => 'Run set_last_run(NULL) Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'Run set_last_run(-99)', + check_this_in => set_last_run(-99), + against_this_in => 0); + exception when others then + wt_assert.isnull( + msg_in => 'Run set_last_run(-99) Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + end t_set_last_run; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function delete_run_id + (in_test_run_id in number) + return number +is + l_test_runner_id number; + ret_num number; +begin + begin + select test_runner_id + into l_test_runner_id + from wt_test_runs + where id = in_test_run_id; + exception when NO_DATA_FOUND then + return 0; + end; + delete from wt_test_runs where id = in_test_run_id; + ret_num := SQL%ROWCOUNT; + set_last_run(l_test_runner_id); + return ret_num; +end delete_run_id; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_delete_run_id + is + l_tr_id number := wt_test_runner.dim_id(C_OWNER, C_NAME); + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'DELETE_RUN_ID Setup'; + delete from wt_test_runs where test_runner_id = l_tr_id; + wt_assert.isnotnull ( + msg_in => 'Clear any previous records (ROWCOUNT)', + check_this_in => SQL%ROWCOUNT); + COMMIT; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'DELETE_RUN_ID Happy Path 1'; + insert into wt_test_runs (id, test_runner_id, is_last_run, start_dtm) + values (-9, l_tr_id, '', sysdate-3); + insert into wt_test_runs (id, test_runner_id, is_last_run, start_dtm) + values (-10, l_tr_id, '', sysdate-2); + insert into wt_test_runs (id, test_runner_id, is_last_run, start_dtm) + values (-11, l_tr_id, C_LAST_RUN_FLAG, sysdate-1); + COMMIT; + wt_assert.eqqueryvalue ( + msg_in => 'Number of Records After Insert', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id, + against_value_in => 3); + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'Run delete_run_id(-11)', + check_this_in => delete_run_id(-11), + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_run_id(-11) Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Number of Records After Delete', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id, + against_value_in => 2); + wt_assert.eqqueryvalue ( + msg_in => 'Number of Last Run Records', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'Run delete_run_id(-10)', + check_this_in => delete_run_id(-10), + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_run_id(-10) Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Number of Records After 2nd Delete', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id, + against_value_in => 1); + wt_assert.eqqueryvalue ( + msg_in => 'Number of Last Run Records, 2nd Delete', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id || + ' and is_last_run = ''' || C_LAST_RUN_FLAG || '''', + against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + begin + wt_assert.eq ( + msg_in => 'Run delete_run_id(-9)', + check_this_in => delete_run_id(-9), + against_this_in => 1); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_run_id(-9) Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue ( + msg_in => 'Number of Records After 3rd Delete', + check_query_in => 'select count(*) from wt_test_runs' || + ' where test_runner_id = ' || l_tr_id, + against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'DELETE_RUN_ID Sad Path 1'; + -- Should run without error + wt_assert.raises( + msg_in => 'Delete Run ID(-9995)', + check_call_in => 'declare junk number; begin junk := wt_test_run.delete_run_id(-9995); end;', + against_exc_in => ''); + end t_delete_run_id; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Hooks are active during Unit Testing +-- Unable to Unit Test this +procedure insert_hooks +is +begin ------%WTPLSQL_begin_ignore_lines%------ + delete_hooks; + insert into hooks (hook_name, seq, run_string) + values ('before_test_run', 30, 'begin wtp.wt_test_run.initialize; end;'); + insert into hooks (hook_name, seq, run_string) + values ('after_test_run', 30, 'begin wtp.wt_test_run.finalize1; end;'); + insert into hooks (hook_name, seq, run_string) + values ('after_test_run', 70, 'begin wtp.wt_test_run.finalize2; end;'); + commit; + hook.init; +end insert_hooks; ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Hooks are active during Unit Testing +-- Unable to Unit Test this +procedure delete_hooks +is +begin ------%WTPLSQL_begin_ignore_lines%------ + delete from hooks where run_string like '% wtp.wt_test_run.%'; + dbms_output.put_line(SQL%ROWCOUNT || ' "wt_test_run" rows deleted from HOOKS table.'); + hook.init; + commit; +end delete_hooks; ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure WTPLSQL_RUN + is + begin + -------------------------------------- WTPLSQL Testing -- + wtplsql.g_DBOUT := 'WT_TEST_RUN:PACKAGE BODY'; + t_set_g_test_runs_rec; + t_clear_last_run; + t_insert_test_run; + t_delete_runs; + t_initialize; + t_finalize1; + t_finalize2; + t_get_last_run_flag; + t_set_last_run; + t_delete_run_id; + end; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +end wt_test_run; +/ + +set define on diff --git a/wtpsav/WTP/WT_TEST_RUN.pspec b/wtpsav/WTP/WT_TEST_RUN.pspec new file mode 100644 index 0000000..2ed49be --- /dev/null +++ b/wtpsav/WTP/WT_TEST_RUN.pspec @@ -0,0 +1,66 @@ + +-- +-- Create WTP.WT_TEST_RUN Package +-- + +set define off + + +--DBMS_METADATA:WTP.WT_TEST_RUN + + CREATE OR REPLACE EDITIONABLE PACKAGE "WTP"."WT_TEST_RUN" + authid definer +as + + C_LAST_RUN_FLAG constant varchar2(1) := 'Y'; + + function get_last_run_flag + return varchar2 deterministic; + + function set_last_run + (in_test_runner_id in number) + return number; + procedure set_last_run + (in_test_runner_id in number); + + g_keep_num_recs number := 20; + + procedure initialize; + + procedure finalize1; + + function finalize2 + return number; + procedure finalize2; + + function delete_run_id + (in_test_run_id in number) + return number; + + procedure insert_hooks; + + procedure delete_hooks; + + -- WtPLSQL Self Test Procedures + -- + -- alter system set PLSQL_CCFLAGS = + -- 'WTPLSQL_SELFTEST:TRUE' + -- scope=BOTH; + -- + $IF $$WTPLSQL_SELFTEST + $THEN + procedure WTPLSQL_RUN; + $END + +end wt_test_run; +/ + + +-- Grants +grant EXECUTE on "WTP"."WT_TEST_RUN" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_TEST_RUNNER.pbody b/wtpsav/WTP/WT_TEST_RUNNER.pbody new file mode 100644 index 0000000..edb6233 --- /dev/null +++ b/wtpsav/WTP/WT_TEST_RUNNER.pbody @@ -0,0 +1,400 @@ + +-- +-- Create WTP.WT_TEST_RUNNER Package Body +-- + +set define off + + +--DBMS_METADATA:WTP.WT_TEST_RUNNER + + CREATE OR REPLACE EDITIONABLE PACKAGE BODY "WTP"."WT_TEST_RUNNER" +as + + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + C_OWNER CONSTANT varchar2(50) := 'WT_TEST_RUNNER_OWNER_FOR_TESTING_1234ABCD'; + C_NAME CONSTANT varchar2(50) := 'WT_TEST_RUNNER_NAME_FOR_TESTING_1234ABCD'; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--------------------- +-- Public Procedures +--------------------- + + +------------------------------------------------------------ +function get_id + (in_owner in varchar2 + ,in_name in varchar2) + return number +is + l_id number; +begin + select id into l_id + from wt_test_runners + where owner = in_owner + and name = in_name; + return l_id; +exception when NO_DATA_FOUND +then + return NULL; +end get_id; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_get_id + is + l_id number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Setup'; + delete from wt_test_runners + where owner = C_OWNER + and name = C_NAME; + wt_assert.isnotnull + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 0' + ,check_query_in => 'select count(*) from wt_test_runners' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Happy Path 1'; + wt_assert.isnull + (msg_in => 'Check for Null return' + ,check_this_in => get_id(C_OWNER, C_NAME)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Happy Path 2'; + insert into wt_test_runners (id, owner, name) + values (wt_test_runners_seq.nextval, C_OWNER, C_NAME) + returning id into l_id; + wt_assert.eq + (msg_in => 'Check ID return' + ,check_this_in => get_id(C_OWNER, C_NAME) + ,against_this_in => l_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_get_id Teardown'; + delete from wt_test_runners + where owner = C_OWNER + and name = C_NAME; + wt_assert.eq + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT + ,against_this_in => 1); + commit; + end t_get_id; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function dim_id + (in_owner in varchar2 + ,in_name in varchar2) + return number +is + pragma AUTONOMOUS_TRANSACTION; + rec wt_test_runners%ROWTYPE; +begin + if in_owner is NULL + OR in_name is NULL + then + return NULL; + end if; + rec.id := get_id (in_owner, in_name); + if rec.id is null + then + rec.id := wt_test_runners_seq.nextval; + rec.owner := in_owner; + rec.name := in_name; + insert into wt_test_runners values rec; + end if; + commit; + return rec.id; +end dim_id; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_dim_id + is + l_id number; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Setup'; + delete from wt_test_runners + where owner = C_OWNER + and name = C_NAME; + wt_assert.isnotnull + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 0' + ,check_query_in => 'select count(*) from wt_test_runners' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Happy Path 1'; + l_id := dim_id(C_OWNER, C_NAME); + wt_assert.isnotnull + (msg_in => 'Check ID return 1' + ,check_this_in => l_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Happy Path 2'; + wt_assert.eq + (msg_in => 'Check ID return 2' + ,check_this_in => dim_id(C_OWNER, C_NAME) + ,against_this_in => l_id); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Sad Path 1'; + wt_assert.isnull + (msg_in => 'Check NULL return' + ,check_this_in => dim_id(NULL, NULL)); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_dim_id Teardown'; + delete from wt_test_runners + where owner = C_OWNER + and name = C_NAME; + wt_assert.eq + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT + ,against_this_in => 1); + commit; + end t_dim_id; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +-- Delete all records for a test runner +function delete_records + (in_test_runner_id in number) + return number +is + ret_num number := 0; +begin + for buff in ( + select id from wt_test_runs + where test_runner_id = in_test_runner_id ) + loop + ret_num := ret_num + wt_profile.delete_run_id(buff.id); + ret_num := ret_num + wt_result.delete_run_id(buff.id); + ret_num := ret_num + wt_test_run.delete_run_id(buff.id); + end loop; + delete from wt_test_runners where id = in_test_runner_id; + ret_num := ret_num + SQL%ROWCOUNT; + return ret_num; +end delete_records; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_delete_records + is + l_runner_id number := -99; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Setup'; + delete from wt_test_runners + where owner = C_OWNER + and name = C_NAME; + wt_assert.isnotnull + (msg_in => 'Number of wt_test_runners Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + delete from wt_test_runs + where id = l_runner_id + and test_runner_id = l_runner_id; + wt_assert.isnotnull + (msg_in => 'Number of wt_test_runs Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + insert into wt_test_runners (id, owner, name) + values (l_runner_id, C_OWNER, C_NAME); + wt_assert.eqqueryvalue + (msg_in => 'Number of wt_test_runners Rows should be 1' + ,check_query_in => 'select count(*) from wt_test_runners' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || '''' + ,against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + insert into wt_test_runs (id, test_runner_id, start_dtm) + values (l_runner_id, l_runner_id, sysdate); + wt_assert.eqqueryvalue + (msg_in => 'Number of wt_test_runs Rows should be 1' + ,check_query_in => 'select count(*) from wt_test_runs' || + ' where id = ' || l_runner_id || + ' and test_runner_id = ' || l_runner_id + ,against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Happy Path 1'; + begin + wt_assert.eq ( + msg_in => 'Run delete_records(' || l_runner_id || ')', + check_this_in => delete_records(l_runner_id), + against_this_in => 2); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_records(' || l_runner_id || ') Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'delete_records(' || l_runner_id || ') Number of wt_test_runners Rows should be 0' + ,check_query_in => 'select count(*) from wt_test_runners' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Happy Path 2'; + begin + wt_assert.eq ( + msg_in => 'Run delete_records(NULL)', + check_this_in => delete_records(NULL), + against_this_in => 0); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_records(NULL) Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'delete_records(NULL) Number of wt_test_runners Rows should be 0' + ,check_query_in => 'select count(*) from wt_test_runners' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_delete_records Happy Path 3'; + begin + wt_assert.eq ( + msg_in => 'Run delete_records(-9999)', + check_this_in => delete_records(-9999), + against_this_in => 0); + exception when others then + wt_assert.isnull( + msg_in => 'Run delete_records(-9999) Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'delete_records(-9999) Number of wt_test_runners Rows should be 0' + ,check_query_in => 'select count(*) from wt_test_runners' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || '''' + ,against_value_in => 0); + commit; + end t_delete_records; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +function cleanup_records + return number +is +begin + delete from wt_test_runners + where id in ( + select id from wt_test_runners + MINUS + select distinct test_runner_id ID from wt_test_runs); + return SQL%ROWCOUNT; +end cleanup_records; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_cleanup_records + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_cleanup_records Setup'; + delete from wt_test_runners + where owner = C_OWNER + and name = C_NAME; + wt_assert.isnotnull + (msg_in => 'Number of Rows deleted' + ,check_this_in => SQL%ROWCOUNT); + -------------------------------------- WTPLSQL Testing -- + insert into wt_test_runners (id, owner, name) + values (wt_test_runners_seq.nextval, C_OWNER, C_NAME); + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 1' + ,check_query_in => 'select count(*) from wt_test_runners' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || '''' + ,against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_cleanup_records Happy Path 1'; + begin + wt_assert.isnotnull ( + msg_in => 'Run cleanup_records 1', + check_this_in => cleanup_records); + exception when others then + wt_assert.isnull( + msg_in => 'Run cleanup_records 1 Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should be 0' + ,check_query_in => 'select count(*) from wt_test_runners' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || '''' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 't_cleanup_records Happy Path 2'; + begin + wt_assert.eq ( + msg_in => 'Run cleanup_records 2', + check_this_in => cleanup_records, + against_this_in => 0); + exception when others then + wt_assert.isnull( + msg_in => 'Run cleanup_records 2 Exception', + check_this_in => SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ); + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Number of Rows should still be 0' + ,check_query_in => 'select count(*) from wt_test_runners' || + ' where owner = ''' || C_OWNER || + ''' and name = ''' || C_NAME || '''' + ,against_value_in => 0); + commit; + end t_cleanup_records; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure WTPLSQL_RUN + is + begin + -------------------------------------- WTPLSQL Testing -- + wtplsql.g_DBOUT := 'WT_TEST_RUNNER:PACKAGE BODY'; + t_get_id; + t_dim_id; + t_delete_records; + t_cleanup_records; + end; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +end wt_test_runner; +/ + +set define on diff --git a/wtpsav/WTP/WT_TEST_RUNNER.pspec b/wtpsav/WTP/WT_TEST_RUNNER.pspec new file mode 100644 index 0000000..63d2653 --- /dev/null +++ b/wtpsav/WTP/WT_TEST_RUNNER.pspec @@ -0,0 +1,59 @@ + +-- +-- Create WTP.WT_TEST_RUNNER Package +-- + +set define off + + +--DBMS_METADATA:WTP.WT_TEST_RUNNER + + CREATE OR REPLACE EDITIONABLE PACKAGE "WTP"."WT_TEST_RUNNER" + authid definer +as + + -- Return a Test Runner Surrogate Key. + -- Return NULL if the Test Runner does not exist. + function get_id + (in_owner in varchar2 + ,in_name in varchar2) + return number; + + -- Return a Test Runner Surrogate Key. + -- Add the Test Runner if it does not exist. + function dim_id + (in_owner in varchar2 + ,in_name in varchar2) + return number; + + -- Delete all records for a test runner + function delete_records + (in_test_runner_id in number) + return number; + + -- Delete all records with no child records + function cleanup_records + return number; + + -- WtPLSQL Self Test Procedures + -- + -- alter system set PLSQL_CCFLAGS = + -- 'WTPLSQL_SELFTEST:TRUE' + -- scope=BOTH; + -- + $IF $$WTPLSQL_SELFTEST + $THEN + procedure WTPLSQL_RUN; + $END + +end wt_test_runner; +/ + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_TEST_RUNNERS.tab b/wtpsav/WTP/WT_TEST_RUNNERS.tab new file mode 100644 index 0000000..81bfc89 --- /dev/null +++ b/wtpsav/WTP/WT_TEST_RUNNERS.tab @@ -0,0 +1,43 @@ + +-- +-- Create WTP.WT_TEST_RUNNERS Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:WTP.WT_TEST_RUNNERS + + CREATE TABLE "WTP"."WT_TEST_RUNNERS" + ( "ID" NUMBER(38,0) CONSTRAINT "WT_TEST_RUNNERS_NN1" NOT NULL ENABLE, + "OWNER" VARCHAR2(128 BYTE) CONSTRAINT "WT_TEST_RUNNERS_NN2" NOT NULL ENABLE, + "NAME" VARCHAR2(128 BYTE) CONSTRAINT "WT_TEST_RUNNERS_NN3" NOT NULL ENABLE + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "WTP"."WT_TEST_RUNNERS" ADD CONSTRAINT "WT_TEST_RUNNERS_PK" PRIMARY KEY ("ID") + USING INDEX ENABLE; +ALTER TABLE "WTP"."WT_TEST_RUNNERS" ADD CONSTRAINT "WT_TEST_RUNNERS_NK1" UNIQUE ("OWNER", "NAME") + USING INDEX ENABLE; + +-- Comments + +--DBMS_METADATA:WTP.WT_TEST_RUNNERS + + COMMENT ON COLUMN "WTP"."WT_TEST_RUNNERS"."ID" IS 'Primary (Surrogate) Key for each Test Runner'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNNERS"."OWNER" IS 'Owner of the Test Runner package. Natural Key 1 part 1'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNNERS"."NAME" IS 'Name of the Test Runner package. Natural Key 1 part 2'; + COMMENT ON TABLE "WTP"."WT_TEST_RUNNERS" IS 'List of Test Runners.'; + + +-- Grants +grant DELETE on "WTP"."WT_TEST_RUNNERS" to "PUBLIC"; +grant SELECT on "WTP"."WT_TEST_RUNNERS" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_TEST_RUNNERS_SEQ.seq b/wtpsav/WTP/WT_TEST_RUNNERS_SEQ.seq new file mode 100644 index 0000000..d62b7f5 --- /dev/null +++ b/wtpsav/WTP/WT_TEST_RUNNERS_SEQ.seq @@ -0,0 +1,20 @@ + +-- +-- Create WTP.WT_TEST_RUNNERS_SEQ Sequence +-- + +set define off + + +--DBMS_METADATA:WTP.WT_TEST_RUNNERS_SEQ + + CREATE SEQUENCE "WTP"."WT_TEST_RUNNERS_SEQ" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 ORDER NOCYCLE NOKEEP NOSCALE GLOBAL ; + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_TEST_RUNS.tab b/wtpsav/WTP/WT_TEST_RUNS.tab new file mode 100644 index 0000000..632212a --- /dev/null +++ b/wtpsav/WTP/WT_TEST_RUNS.tab @@ -0,0 +1,78 @@ + +-- +-- Create WTP.WT_TEST_RUNS Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:WTP.WT_TEST_RUNS + + CREATE TABLE "WTP"."WT_TEST_RUNS" + ( "ID" NUMBER(38,0), + "TEST_RUNNER_ID" NUMBER(38,0) CONSTRAINT "WT_TEST_RUNS_NN1" NOT NULL ENABLE, + "START_DTM" TIMESTAMP (3) WITH LOCAL TIME ZONE CONSTRAINT "WT_TEST_RUNS_NN2" NOT NULL ENABLE, + "END_DTM" TIMESTAMP (3) WITH LOCAL TIME ZONE, + "DBOUT_ID" NUMBER(38,0), + "RUNNER_SEC" NUMBER(6,1), + "IS_LAST_RUN" VARCHAR2(1 BYTE), + "ERROR_MESSAGE" VARCHAR2(4000 BYTE), + "TC_CNT" NUMBER(7,0), + "TC_FAIL" NUMBER(7,0), + "TC_YIELD_PCT" NUMBER(4,1), + "ASRT_FST_DTM" TIMESTAMP (3) WITH LOCAL TIME ZONE, + "ASRT_LST_DTM" TIMESTAMP (3) WITH LOCAL TIME ZONE, + "ASRT_CNT" NUMBER(7,0), + "ASRT_FAIL" NUMBER(7,0), + "ASRT_YIELD_PCT" NUMBER(4,1), + "ASRT_MIN_MSEC" NUMBER(10,0), + "ASRT_AVG_MSEC" NUMBER(10,0), + "ASRT_MAX_MSEC" NUMBER(10,0), + "ASRT_TOT_MSEC" NUMBER(10,0) + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "WTP"."WT_TEST_RUNS" ADD CONSTRAINT "WT_TEST_RUNS_PK" PRIMARY KEY ("ID") + USING INDEX ENABLE; +ALTER TABLE "WTP"."WT_TEST_RUNS" ADD CONSTRAINT "WT_TEST_RUNS_NK1" UNIQUE ("TEST_RUNNER_ID", "START_DTM") + USING INDEX ENABLE; + +-- Comments + +--DBMS_METADATA:WTP.WT_TEST_RUNS + + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."ID" IS 'Primary (Surrogate) Key for each Test Run'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."TEST_RUNNER_ID" IS '(Required) Surrogate Key the Test Runner package. Natural Key 1 part 1'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."START_DTM" IS '(Required) Date/time (and fractional seconds) this Test Run started. Natural Key 1 part 2'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."END_DTM" IS 'Date/time (and fractional seconds) this Test Run ended.'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."DBOUT_ID" IS 'Surrogate Key to the Database Object Under Test (DBOUT).'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."RUNNER_SEC" IS 'Total Runtime for Test Runner in Seconds'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."IS_LAST_RUN" IS 'Flag "Y" to indicate this is the most recent run for this package owner/name'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."ERROR_MESSAGE" IS 'Error messages from this Test Run.'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."TC_CNT" IS 'Number of Test Cases'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."TC_FAIL" IS 'Number of Failed Test Cases'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."TC_YIELD_PCT" IS 'Percentage of successful test cases to total Test Cases.'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."ASRT_FST_DTM" IS 'Date/Time of First Assertion'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."ASRT_LST_DTM" IS 'Date/Time of Last Assertion'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."ASRT_CNT" IS 'Number of Assertions across all Test Cases'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."ASRT_FAIL" IS 'Number of Assertion Failures across all Test Cases'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."ASRT_YIELD_PCT" IS 'Percentage of successful assertions to total assertions.'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."ASRT_MIN_MSEC" IS 'Minumum Assertion Interval in Milliseconds across all Test Cases'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."ASRT_AVG_MSEC" IS 'Average Assertion Interval in Milliseconds across all Test Cases'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."ASRT_MAX_MSEC" IS 'Maximum Assertion Interval in Milliseconds across all Test Cases'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS"."ASRT_TOT_MSEC" IS 'Total Assertion Intervals in Milliseconds across all Test Cases'; + COMMENT ON TABLE "WTP"."WT_TEST_RUNS" IS 'Test Run data for each execution of a Test Runner.'; + + +-- Grants +grant DELETE on "WTP"."WT_TEST_RUNS" to "PUBLIC"; +grant INSERT on "WTP"."WT_TEST_RUNS" to "PUBLIC"; +grant SELECT on "WTP"."WT_TEST_RUNS" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_TEST_RUNS.tabfk b/wtpsav/WTP/WT_TEST_RUNS.tabfk new file mode 100644 index 0000000..9e8176e --- /dev/null +++ b/wtpsav/WTP/WT_TEST_RUNS.tabfk @@ -0,0 +1,23 @@ + +-- +-- Create Foreign Keys for WTP.WT_TEST_RUNS TABLE +-- + +set define off + + +-- NOTE: This is a "BASE TABLE" Foreign Key + +--DBMS_METADATA:WTP.WT_TEST_RUNS_FK1 + + ALTER TABLE "WTP"."WT_TEST_RUNS" ADD CONSTRAINT "WT_TEST_RUNS_FK1" FOREIGN KEY ("DBOUT_ID") + REFERENCES "WTP"."WT_DBOUTS" ("ID") ENABLE; + +-- NOTE: This is a "BASE TABLE" Foreign Key + +--DBMS_METADATA:WTP.WT_TEST_RUNS_FK2 + + ALTER TABLE "WTP"."WT_TEST_RUNS" ADD CONSTRAINT "WT_TEST_RUNS_FK2" FOREIGN KEY ("TEST_RUNNER_ID") + REFERENCES "WTP"."WT_TEST_RUNNERS" ("ID") ENABLE; + +set define on diff --git a/wtpsav/WTP/WT_TEST_RUNS.tabind b/wtpsav/WTP/WT_TEST_RUNS.tabind new file mode 100644 index 0000000..3013461 --- /dev/null +++ b/wtpsav/WTP/WT_TEST_RUNS.tabind @@ -0,0 +1,23 @@ + +-- +-- Create Indexes for WTP.WT_TEST_RUNS TABLE +-- + +set define off + + +-- NOTE: This is a "TARGET" Index + +--DBMS_METADATA:WTP.WT_TEST_RUNS_IX1 + + CREATE INDEX "WTP"."WT_TEST_RUNS_IX1" ON "WTP"."WT_TEST_RUNS" ("IS_LAST_RUN", "TEST_RUNNER_ID") + ; + +-- NOTE: This is a "TARGET" Index + +--DBMS_METADATA:WTP.WT_TEST_RUNS_IX2 + + CREATE INDEX "WTP"."WT_TEST_RUNS_IX2" ON "WTP"."WT_TEST_RUNS" ("DBOUT_ID", "TEST_RUNNER_ID") + ; + +set define on diff --git a/wtpsav/WTP/WT_TEST_RUNS_SEQ.seq b/wtpsav/WTP/WT_TEST_RUNS_SEQ.seq new file mode 100644 index 0000000..7e040c4 --- /dev/null +++ b/wtpsav/WTP/WT_TEST_RUNS_SEQ.seq @@ -0,0 +1,21 @@ + +-- +-- Create WTP.WT_TEST_RUNS_SEQ Sequence +-- + +set define off + + +--DBMS_METADATA:WTP.WT_TEST_RUNS_SEQ + + CREATE SEQUENCE "WTP"."WT_TEST_RUNS_SEQ" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 ORDER NOCYCLE NOKEEP NOSCALE GLOBAL ; + + +-- Grants +grant SELECT on "WTP"."WT_TEST_RUNS_SEQ" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsav/WTP/WT_TEST_RUNS_VW.vw b/wtpsav/WTP/WT_TEST_RUNS_VW.vw new file mode 100644 index 0000000..25a47ac --- /dev/null +++ b/wtpsav/WTP/WT_TEST_RUNS_VW.vw @@ -0,0 +1,87 @@ + +-- +-- Create WTP.WT_TEST_RUNS_VW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "WTP"."WT_TEST_RUNS_VW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants +grant SELECT on "WTP"."WT_TEST_RUNS_VW" to "PUBLIC"; + + + +--DBMS_METADATA:WTP.WT_TEST_RUNS_VW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "WTP"."WT_TEST_RUNS_VW" ("TEST_RUN_ID", "TEST_RUNNER_ID", "TEST_RUNNER_OWNER", "TEST_RUNNER_NAME", "START_DTM", "END_DTM", "RUNNER_SEC", "IS_LAST_RUN", "ERROR_MESSAGE", "TC_CNT", "TC_FAIL", "TC_YIELD_PCT", "ASRT_FST_DTM", "ASRT_LST_DTM", "ASRT_CNT", "ASRT_FAIL", "ASRT_YIELD_PCT", "ASRT_MIN_MSEC", "ASRT_AVG_MSEC", "ASRT_MAX_MSEC", "ASRT_TOT_MSEC") AS + select run.id TEST_RUN_ID + ,run.test_runner_id + ,tr.owner TEST_RUNNER_OWNER + ,tr.name TEST_RUNNER_NAME + ,run.start_dtm + ,run.end_dtm + ,run.runner_sec + ,run.is_last_run + ,run.error_message + ,run.tc_cnt + ,run.tc_fail + ,run.tc_yield_pct + ,run.asrt_fst_dtm + ,run.asrt_lst_dtm + ,run.asrt_cnt + ,run.asrt_fail + ,run.asrt_yield_pct + ,run.asrt_min_msec + ,run.asrt_avg_msec + ,run.asrt_max_msec + ,run.asrt_tot_msec + from wt_test_runs run + join wt_test_runners tr + on tr.id = run.test_runner_id; + +-- Comments + +--DBMS_METADATA:WTP.WT_TEST_RUNS_VW + + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."TEST_RUN_ID" IS 'Primary (Surrogate) Key for each Test Run'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."TEST_RUNNER_ID" IS 'Surrogate Key the Test Runner package.'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."TEST_RUNNER_OWNER" IS 'Owner of the Test Runner package.'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."TEST_RUNNER_NAME" IS 'Name of the Test Runner package.'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."START_DTM" IS 'Date/time (and fractional seconds) this Test Run started.'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."END_DTM" IS 'Date/time (and fractional seconds) this Test Run ended.'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."RUNNER_SEC" IS 'Total Runtime for Test Runner in Seconds'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."IS_LAST_RUN" IS 'Optional Flag "Y" to indicate this is the most recent run for this package owner/name'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."ERROR_MESSAGE" IS 'Optional Error messages from this Test Run.'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."TC_CNT" IS 'Number of Test Cases'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."TC_FAIL" IS 'Number of Failed Test Cases'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."TC_YIELD_PCT" IS 'Percentage of successful test cases to total Test Cases.'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."ASRT_FST_DTM" IS 'Date/Time of First Assertion'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."ASRT_LST_DTM" IS 'Date/Time of Last Assertion'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."ASRT_CNT" IS 'Number of Assertions across all Test Cases'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."ASRT_FAIL" IS 'Number of Assertion Failures across all Test Cases'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."ASRT_YIELD_PCT" IS 'Percentage of successful assertions to total assertions.'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."ASRT_MIN_MSEC" IS 'Minumum Assertion Interval in Milliseconds across all Test Cases'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."ASRT_AVG_MSEC" IS 'Sum of Squares of Assertion Interval in Milliseconds across all Test Cases'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."ASRT_MAX_MSEC" IS 'Maximum Assertion Interval in Milliseconds across all Test Cases'; + COMMENT ON COLUMN "WTP"."WT_TEST_RUNS_VW"."ASRT_TOT_MSEC" IS 'Total Assertion Intervals in Milliseconds across all Test Cases'; + COMMENT ON TABLE "WTP"."WT_TEST_RUNS_VW" IS 'Test Run data for each execution of a Test Runner.'; + + +-- Grants +grant SELECT on "WTP"."WT_TEST_RUNS_VW" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsav/alter_foreign_keys.sql b/wtpsav/alter_foreign_keys.sql new file mode 100644 index 0000000..5bd5a97 --- /dev/null +++ b/wtpsav/alter_foreign_keys.sql @@ -0,0 +1,88 @@ + +-- +-- Alter "wtpsav" Install Type Foreign Keys +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure missing_parent_sql + (in_owner sys.dba_constraints.owner%TYPE + ,in_constraint sys.dba_constraints.constraint_name%TYPE) + is + TYPE fk_rec_type is record + (child_owner sys.dba_constraints.owner%TYPE + ,child_table sys.dba_constraints.table_name%TYPE + ,child_column sys.dba_cons_columns.column_name%TYPE + ,parent_owner sys.dba_constraints.owner%TYPE + ,parent_table sys.dba_constraints.table_name%TYPE + ,parent_column sys.dba_cons_columns.column_name%TYPE); + TYPE fk_nt_type is table of fk_rec_type; + fk_nt fk_nt_type; + sql_txt varchar2(1000); + begin + select ctab.owner child_owner, ctab.table_name child_table, ccol.column_name child_column, + ptab.owner parent_owner, ptab.table_name parent_table, pcol.column_name parent_column + bulk collect into fk_nt + from sys.dba_constraints ctab + join sys.dba_cons_columns ccol + on ccol.owner = ctab.owner and ccol.constraint_name = ctab.constraint_name + join sys.dba_constraints ptab + on ptab.owner = ctab.r_owner and ptab.constraint_name = ctab.r_constraint_name + join sys.dba_cons_columns pcol + on pcol.owner = ptab.owner and pcol.constraint_name = ptab.constraint_name + and pcol.position = ccol.position + where ctab.owner = in_owner and ctab.constraint_name = in_constraint + order by ccol.position; + if SQL%NOTFOUND then return; end if; + dbms_output.put_line('-- ORA-20000: Query to find missing parent keys:'); + -- ORA-20000: select "CHILD_KEY" from from "CHILD_OWNER"."CHILD_TABLE" group by "CHILD_KEY" + sql_txt := '-- ORA-20000: select "' || fk_nt(1).child_column; + for i in 2 .. fk_nt.LAST + loop + sql_txt := sql_txt || '", "' || fk_nt(i).child_column; + end loop; + sql_txt := sql_txt || '" from "' || fk_nt(1).child_owner || '"."' || fk_nt(1).child_table || + '" group by "' || fk_nt(1).child_column; + for i in 2 .. fk_nt.LAST + loop + sql_txt := sql_txt || '", "' || fk_nt(i).child_column; + end loop; + dbms_output.put_line (sql_txt || '"'); + -- ORA-20000: MINUS select "PARENT_KEY" from "PARENT_OWNER"."PARENT_TABLE"; + sql_txt := '-- ORA-20000: MINUS select "' || fk_nt(1).parent_column; + for i in 2 .. fk_nt.LAST + loop + sql_txt := sql_txt || '", "' || fk_nt(i).parent_column; + end loop; + sql_txt := sql_txt || '" from "' || fk_nt(1).parent_owner || '"."' || fk_nt(1).parent_table || '";'; + dbms_output.put_line (sql_txt); + end missing_parent_sql; + procedure do_it (in_schema in varchar2) + is + sql_txt varchar2(1000); + begin + for buff in (select owner, table_name, constraint_name from dba_constraints + where constraint_type = 'R' and owner = in_schema + order by owner, table_name, constraint_name) + loop + sql_txt := 'alter table "' || buff.owner || '"."' || buff.table_name || + '" &1. constraint "' || buff.constraint_name || '"'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- *'); + dbms_output.put_line('-- ERROR at line :'); + dbms_output.put_line('-- ' || SQLERRM); + missing_parent_sql(buff.owner,buff.constraint_name); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Foreign Keys is done.'); + end do_it; +begin + dbms_output.put_line('Alter Foreign Keys for wtpsav Install Type'); + do_it('WTP'); +end; +/ diff --git a/wtpsav/alter_queues.sql b/wtpsav/alter_queues.sql new file mode 100644 index 0000000..fdadd67 --- /dev/null +++ b/wtpsav/alter_queues.sql @@ -0,0 +1,36 @@ + +-- +-- Alter "wtpsav" Install Type Queues +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select owner, name from dba_queues + where owner = in_schema and queue_type != 'EXCEPTION_QUEUE' + order by owner, name) + loop + sql_txt := 'begin DBMS_AQADM.' || + case '&1.' when 'ENABLE' then 'START_QUEUE' + else 'STOP_QUEUE' + end || + '(QUEUE_NAME => ''' || buff.owner || '.' || buff.name || + ''', ENQUEUE => TRUE, DEQUEUE => TRUE); end;'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Queues is done.'); + end do_it; +begin + dbms_output.put_line('Alter Queues for wtpsav Install Type'); + do_it('WTP'); +end; +/ diff --git a/wtpsav/alter_scheduler_jobs.sql b/wtpsav/alter_scheduler_jobs.sql new file mode 100644 index 0000000..339dbf9 --- /dev/null +++ b/wtpsav/alter_scheduler_jobs.sql @@ -0,0 +1,32 @@ + +-- +-- Alter "wtpsav" Install Type Scheduler Jobs +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select owner, job_name from dba_scheduler_jobs + where owner = in_schema + order by owner, job_name) + loop + sql_txt := 'begin DBMS_SCHEDULER.&1.(NAME => ''' || + buff.owner || '.' || buff.job_name || '''); end;'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Scheduler Jobs is done.'); + end do_it; +begin + dbms_output.put_line('Alter Scheduler Jobs for wtpsav Install Type'); + do_it('WTP'); +end; +/ diff --git a/wtpsav/alter_triggers.sql b/wtpsav/alter_triggers.sql new file mode 100644 index 0000000..85267f7 --- /dev/null +++ b/wtpsav/alter_triggers.sql @@ -0,0 +1,32 @@ + +-- +-- Alter "wtpsav" Install Type Triggers +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select owner, trigger_name from dba_triggers + where table_owner = in_schema + order by owner, trigger_name) + loop + sql_txt := 'alter trigger "' || buff.owner || '"."' || + buff.trigger_name || '" &1.'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Triggers is done.'); + end do_it; +begin + dbms_output.put_line('Alter Triggers for wtpsav Install Type'); + do_it('WTP'); +end; +/ diff --git a/wtpsav/compile_all.sql b/wtpsav/compile_all.sql new file mode 100644 index 0000000..f731fdd --- /dev/null +++ b/wtpsav/compile_all.sql @@ -0,0 +1,36 @@ + +-- +-- Compile All "wtpsav" Install Type Objects +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select object_name + from sys.dba_objects + where owner = in_schema + and object_type = 'JAVA SOURCE' + order by object_name ) + loop + sql_txt := 'alter java source "' || in_schema || '"."' || buff.object_name || '" compile'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + begin + DBMS_UTILITY.compile_schema(schema => in_schema, compile_all => FALSE); + dbms_output.put_line('-- ' || in_schema || ' Compile All is done.'); + exception when others then + dbms_output.put_line('Compiling Schema ' || in_schema || CHR(10) || SQLERRM); + dbms_output.put_line(''); + end; + end do_it; +begin + dbms_output.put_line('Compile All for wtpsav Install Type'); + do_it('WTP'); +end; +/ diff --git a/wtpsav/db_build_junit_report.sql b/wtpsav/db_build_junit_report.sql new file mode 100644 index 0000000..02394ef --- /dev/null +++ b/wtpsav/db_build_junit_report.sql @@ -0,0 +1,112 @@ + +-- +-- Create JUnit XML Report of Database Build Status for "wtpsav" Install Type +-- + +declare + -- + procedure ot (in_txt in varchar2) is begin + dbms_output.put_line(in_txt); + end ot; + -- + procedure do_it (in_schema in varchar2) is + begin + for tsuite in ( + with q1 as ( + select obj.owner + ,count(obj.owner) NUM_TESTS + ,sum(decode(obj.status, 'VALID', 0, 1)) NUM_FAILURES + ,min(obj.last_ddl_time) TSTAMP + -- Jenkins JUnit Plugin adds all these times together + -- round((max(obj.last_ddl_time) - min(obj.last_ddl_time))*24*60*60) + ,0 ELAPSED_SECS + from dba_objects obj + where obj.owner = in_schema + group by obj.owner + UNION + select syn.table_owner OWNER + ,count(syn.table_owner) NUM_TESTS + ,sum(decode(obj.status, 'VALID', 0, 1)) NUM_FAILURES + ,min(obj.last_ddl_time) TSTAMP + -- Jenkins JUnit Plugin adds all these times together + -- round((max(obj.last_ddl_time) - min(obj.last_ddl_time))*24*60*60) + ,0 ELAPSED_SECS + from dba_synonyms syn + join dba_objects obj + on obj.object_name = syn.synonym_name + and obj.owner = syn.owner + where syn.owner = 'PUBLIC' + and syn.table_owner = in_schema + group by syn.table_owner + ) + select owner -- TESTSUITE + ,sum(NUM_TESTS) NUM_TESTS + ,sum(NUM_FAILURES) NUM_FAILURES + ,max(TSTAMP) TSTAMP + ,sum(ELAPSED_SECS) ELAPSED_SECS + from q1 + group by owner + order by owner) + loop + ot(' '); + for tcase in ( + select obj.object_type -- TESTCASE + ,replace(obj.object_name,'.','_') OBJECT_NAME -- CLASS + ,obj.STATUS + ,0 ELAPSED_SECS + from dba_objects obj + where obj.owner = tsuite.owner + UNION ALL + select 'PUBLIC_SYNONYM' OBJECT_TYPE -- TESTCASE + ,replace(obj.object_name,'.','_') OBJECT_NAME -- CLASS + ,obj.STATUS + ,0 ELAPSED_SECS + from dba_synonyms syn + join dba_objects obj + on obj.object_name = syn.synonym_name + and obj.owner = syn.owner + where syn.owner = 'PUBLIC' + and syn.table_owner = tsuite.owner + order by 1,2 ) + loop + if tcase.status = 'VALID' + then + ot(' ' ); + else + ot(' ' ); + ot(' '); + ot('** Object Status is ' || tcase.status); + for terror in ( + select 'Line ' || line || + ', Col ' || position || + ': ' || UTL_I18N.ESCAPE_REFERENCE(text, 'us7ascii') ERROR_TXT + from dba_errors + where owner = tsuite.owner + and type = decode(tcase.object_type,'PUBLIC_SYNONYM','SYNONYM',tcase.object_type) + and name = tcase.object_name + order by sequence ) + loop + ot(terror.error_txt); + end loop; + ot(' '); + ot(' '); + end if; + end loop; + ot(' '); + end loop; + end do_it; +begin + ot(''); + ot(''); + do_it('WTP'); + ot(''); +end; +/ diff --git a/wtpsav/db_install.sql b/wtpsav/db_install.sql new file mode 100644 index 0000000..8fab835 --- /dev/null +++ b/wtpsav/db_install.sql @@ -0,0 +1,57 @@ + +-- Database Installation Assist +-- Wrapper for Database Installation Scripts +-- +-- Parameters +-- 1) Script Name +-- 2) Schema Name +-- 3) System Connect String + +prompt === DBI Started: &1. + +define DBI_SCRIPT_NAME="&1." +define DBI_SCHEMA_NAME="&2." +define DBI_SYSTEM_CONNECT="&3." + +variable dbi_beg_dtm varchar2(40) +variable dbi_beg_secs number + +set feedback off +begin + -- Initialize Timer + :dbi_beg_dtm := to_char(systimestamp,'YYYY-MM-DD') || 'T' || + to_char(systimestamp,'HH24:MI:SS'); + :dbi_beg_secs := dbms_utility.get_time; + -- Set Current Schema + if length('&DBI_SCHEMA_NAME.') > 0 + then + execute immediate 'alter session set current_schema = "&DBI_SCHEMA_NAME."'; + end if; +end; +/ + +set feedback on +set blockterminator off +set sqlblanklines on + +@"&DBI_SCRIPT_NAME." "&DBI_SYSTEM_CONNECT." "" "" +set serveroutput on size unlimited format wrapped + +set sqlblanklines off +set blockterminator on +set feedback off +begin + -- Reset Current Schema + if length('&DBI_SCHEMA_NAME.') > 0 + then + execute immediate 'alter session set current_schema = "' || USER || '"'; + end if; + -- Show Timer Results + dbms_output.put_line('=== DBI Completed at ' || to_char(systimestamp,'YYYY-MM-DD') || 'T' || + to_char(systimestamp,'HH24:MI:SS') || + ' for a duration of ' || trim( (dbms_utility.get_time - :dbi_beg_secs) / 100 ) || + ' seconds (started at ' || :dbi_beg_dtm || ')'); +end; +/ + +set feedback on diff --git a/wtpsav/fix_invalid_public_synonyms.sql b/wtpsav/fix_invalid_public_synonyms.sql new file mode 100644 index 0000000..ef70282 --- /dev/null +++ b/wtpsav/fix_invalid_public_synonyms.sql @@ -0,0 +1,49 @@ + +-- +-- Re-create Invalid Public Synonyms +-- + +---------------------------------------- +prompt +prompt Re-create Invalid Public Synonyms +set serveroutput on size unlimited format wrapped +set linesize 2499 + +Declare + sql_txt varchar(2000); +Begin + for buff in (with q1 as ( + select owner, object_name, editionable + from dba_objects + where status != 'VALID' + ) + select syn.synonym_name, syn.table_owner, syn.table_name, + case q1.editionable when 'Y' then ' EDITIONABLE' + when NULL then '' + else ' NONEDITIONABLE' + end EDITIONABLE + from dba_synonyms syn + join q1 + on q1.owner = syn.owner + and q1.object_name = syn.synonym_name + join dba_users usr + on usr.username = syn.table_owner + and ( usr.oracle_maintained is null + OR usr.oracle_maintained != 'Y') + where syn.owner = 'PUBLIC' ) + loop + begin + sql_txt := 'CREATE OR REPLACE' || buff.EDITIONABLE || ' PUBLIC SYNONYM "' || + buff.synonym_name || '" for "' || buff.table_owner || '"."' || + buff.table_name ||'"'; + dbms_output.put_line(sql_txt); + execute immediate sql_txt; + exception + when others then + dbms_output.put_line('ERROR:' || CHR(10) || SQLERRM || CHR(10)); + dbms_output.put_line('----------------------------------------'); + end; + end loop; +end; +/ + diff --git a/wtpsav/install.sql b/wtpsav/install.sql new file mode 100644 index 0000000..6033345 --- /dev/null +++ b/wtpsav/install.sql @@ -0,0 +1,76 @@ + +-- +-- Master Installation Script +-- All scripts created by "https://ODBCapture.org", Version V2.1 +-- +-- Must be run as SYS +-- +-- Command Line Parameters: +-- 1 - TO_PDB_SYSTEM: SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the pluggable database. +-- The Data Load installation requires this connection information. +-- + +-- NOTE: If running in a Linux based Docker Container from a Windows FileSystem Mount, run this first: +-- dos2unix -f -o ../install/*/*.csv ../install/*/*/*.csv + +define TOP_PDB_SYSTEM="&1." +execute DBMS_JAVA.SET_OUTPUT(1000000); +set serveroutput on size unlimited format wrapped + +---------------------------------------- +prompt Identify this Module in V$SESSION +set appinfo "wtpsav Installation" + +---------------------------------------- +prompt Setup Abort on Error +WHENEVER SQLERROR EXIT SQL.SQLCODE +WHENEVER OSERROR EXIT + +---------------------------------------- +prompt +prompt ************************** +prompt * Run SYS Installation * +prompt ************************** +prompt +@install_sys.sql "" "" "" + +---------------------------------------- +prompt Setup Continue on Error +WHENEVER SQLERROR CONTINUE +WHENEVER OSERROR CONTINUE + +---------------------------------------- +prompt +prompt ***************************** +prompt * Run SYSTEM Installation * +prompt ***************************** +prompt +connect &TOP_PDB_SYSTEM. +execute DBMS_JAVA.SET_OUTPUT(1000000); +set serveroutput on size unlimited format wrapped +@install_system.sql "" "" "" + +---------------------------------------- +prompt +prompt ************************* +prompt * Install Application * +prompt ************************* +prompt +@install_wtpsav.sql "&TOP_PDB_SYSTEM." "" "" + +---------------------------------------- +prompt +prompt ***************** +prompt * Run Reports * +prompt ***************** +prompt +@report_status.sql "&TOP_PDB_SYSTEM." "" "" + +---------------------------------------- +set appinfo "Null" +set appinfo off +prompt +prompt "wtpsav" Installation is Done. + diff --git a/wtpsav/install_sys.sql b/wtpsav/install_sys.sql new file mode 100644 index 0000000..c53ba1c --- /dev/null +++ b/wtpsav/install_sys.sql @@ -0,0 +1,18 @@ + +-- +-- SYS Installation Script +-- +-- Must be run as SYS +-- + +spool install_sys.log + +set blockterminator off +set sqlblanklines on + +---------------------------------------- +set sqlblanklines off +set blockterminator on + +spool off + diff --git a/wtpsav/install_system.sql b/wtpsav/install_system.sql new file mode 100644 index 0000000..dd64dd5 --- /dev/null +++ b/wtpsav/install_system.sql @@ -0,0 +1,18 @@ + +-- +-- SYSTEM Installation Script +-- +-- Must be run as SYSTEM +-- + +spool install_system.log + +set blockterminator off +set sqlblanklines on + +---------------------------------------- +set sqlblanklines off +set blockterminator on + +spool off + diff --git a/wtpsav/install_wtpsav.sql b/wtpsav/install_wtpsav.sql new file mode 100644 index 0000000..d5968ec --- /dev/null +++ b/wtpsav/install_wtpsav.sql @@ -0,0 +1,117 @@ + +-- +-- wtpsav Installation Script +-- +-- Must be run as a SYSTEM User (DBA) +-- +-- Command Line Parameters: +-- 1 - INSTALL_SYSTEM_CONNECT: SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +spool install_wtpsav.log + +define INSTALL_SYSTEM_CONNECT="&1." + +-- Must Set SQLPREFIX away from "#" Oracle Change Data Capture packages +set sqlprefix "~" + +-- Using "^P", CHR(16), DLE as an escape character +set escape OFF +set escape "" + +---------------------------------------- +-- Prepare for Install +@db_install.sql "./installation_prepare.sql" "" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- SEQUENCE Install + +@db_install.sql "WTP/PLSQL_PROFILER_RUNNUMBER.seq" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_DBOUTS_SEQ.seq" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_TESTCASES_SEQ.seq" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_TEST_RUNNERS_SEQ.seq" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_TEST_RUNS_SEQ.seq" "WTP" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- PROCEDURE Install + +@db_install.sql "WTP/JUNIT_XML_PERSIST_ALL.proc" "WTP" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- PACKAGE Install + +@db_install.sql "WTP/WT_DBOUT.pspec" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_JOB.pspec" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_PERSIST_REPORT.pspec" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_PROFILE.pspec" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_RESULT.pspec" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_TESTCASE.pspec" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_TEST_RUN.pspec" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_TEST_RUNNER.pspec" "WTP" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- TABLE Install + +@db_install.sql "WTP/PLSQL_PROFILER_DATA.tab" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/PLSQL_PROFILER_RUNS.tab" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/PLSQL_PROFILER_UNITS.tab" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_DBOUTS.tab" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_DBOUT_RUNS.tab" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_PROFILES.tab" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_RESULTS.tab" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_TESTCASES.tab" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_TESTCASE_RUNS.tab" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_TEST_RUNNERS.tab" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_TEST_RUNS.tab" "WTP" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- INDEX Install + +@db_install.sql "WTP/PLSQL_PROFILER_RUNS.tabind" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_DBOUTS.tabind" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_RESULTS.tabind" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_TESTCASE_RUNS.tabind" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_TEST_RUNS.tabind" "WTP" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- VIEW Install + +@db_install.sql "WTP/WT_DBOUT_RUNS_VW.vw" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_PROFILES_VW.vw" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_RESULTS_VW.vw" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_SCHEDULER_JOBS_VW.vw" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_TESTCASE_RUNS_VW.vw" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_TEST_RUNS_VW.vw" "WTP" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- PACKAGE BODY Install + +@db_install.sql "WTP/WT_DBOUT.pbody" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_JOB.pbody" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_PERSIST_REPORT.pbody" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_PROFILE.pbody" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_RESULT.pbody" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_TESTCASE.pbody" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_TEST_RUN.pbody" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_TEST_RUNNER.pbody" "WTP" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- TABLE_FOREIGN_KEY Install + +@db_install.sql "WTP/PLSQL_PROFILER_DATA.tabfk" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/PLSQL_PROFILER_UNITS.tabfk" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_DBOUT_RUNS.tabfk" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_PROFILES.tabfk" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_RESULTS.tabfk" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_TESTCASE_RUNS.tabfk" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_TEST_RUNS.tabfk" "WTP" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- Finalize Installation +@db_install.sql "./installation_finalize.sql" "" "&INSTALL_SYSTEM_CONNECT." + +spool off + diff --git a/wtpsav/installation_finalize.sql b/wtpsav/installation_finalize.sql new file mode 100644 index 0000000..7660714 --- /dev/null +++ b/wtpsav/installation_finalize.sql @@ -0,0 +1,48 @@ + +-- +-- Finalize Installation +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +define FINAL_SYSTEM_CONNECT="&1." + +prompt +prompt Drop_Temp_Publicly_Updateable_Table_SQL +drop table SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE purge; + +prompt +prompt fix_invalid_public_synonyms +@"fix_invalid_public_synonyms.sql" "" + +prompt +prompt compile_all +@"compile_all.sql" "" + +prompt +prompt alter_foreign_keys_ENABLE +@"alter_foreign_keys.sql" "ENABLE" + +prompt +prompt alter_triggers_ENABLE +@"alter_triggers.sql" "ENABLE" + +prompt +prompt update_id_sequences +@"update_id_sequences.sql" "" + +--prompt +--prompt alter_queues_ENABLE +--@"alter_queues.sql" "ENABLE" + +--prompt +--prompt alter_scheduler_jobs_ENABLE +--@"alter_scheduler_jobs.sql" "ENABLE" + +prompt +prompt Load Installation Files +@"odbcapture_installation_logs.cdl" "&FINAL_SYSTEM_CONNECT." diff --git a/wtpsav/installation_prepare.sql b/wtpsav/installation_prepare.sql new file mode 100644 index 0000000..265eb55 --- /dev/null +++ b/wtpsav/installation_prepare.sql @@ -0,0 +1,9 @@ + +-- +-- Prepare for View Install +-- + +prompt +prompt Create_Temp_Publicly_Updateable_Table_SQL +create table SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE (c1 number); +grant all on SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE to PUBLIC with grant option; diff --git a/wtpsav/list_invalids.csv b/wtpsav/list_invalids.csv new file mode 100644 index 0000000..e2d4f25 --- /dev/null +++ b/wtpsav/list_invalids.csv @@ -0,0 +1 @@ +"OWNER","OBJECT_NAME","OBJECT_TYPE","STATUS" diff --git a/wtpsav/list_invalids.sql b/wtpsav/list_invalids.sql new file mode 100644 index 0000000..285c5f4 --- /dev/null +++ b/wtpsav/list_invalids.sql @@ -0,0 +1,47 @@ + +-- +-- List Invalid Objects for "wtpsav" Install Type +-- + +declare + procedure do_it (in_schema in varchar2) is + begin + for buff in ( + with q1 as ( + select owner + ,object_name + ,object_type + ,status + from dba_objects obj + where obj.owner = in_schema + and ( obj.object_type != 'TYPE' + or obj.object_name not like 'SYSTP%==') + and obj.status != 'VALID' + UNION ALL + select syn.table_owner + ,syn.synonym_name + ,'PUBLIC_SYNONYM' OBJECT_TYPE + ,obj.status + from dba_synonyms syn + join dba_objects obj + on obj.object_name = syn.synonym_name + and obj.owner = syn.owner + and obj.status != 'VALID' + where syn.owner = 'PUBLIC' + and syn.table_owner = in_schema + ) + select '"' || owner || '",' || + '"' || object_name || '",' || + '"' || object_type || '",' || + '"' || status || '"' RECORD_DATA + from q1 + order by RECORD_DATA) + loop + dbms_output.put_line(buff.RECORD_DATA); + end loop; + end do_it; +begin + dbms_output.put_line('"OWNER","OBJECT_NAME","OBJECT_TYPE","STATUS"'); + do_it('WTP'); +end; +/ diff --git a/wtpsav/log_files_junit_report.sql b/wtpsav/log_files_junit_report.sql new file mode 100644 index 0000000..3ea9f0a --- /dev/null +++ b/wtpsav/log_files_junit_report.sql @@ -0,0 +1,282 @@ + +-- +-- Create JUnit XML Report of Database Log Files for "wtpsav" Schema +-- + +--Element | Description +-------------|------------- +--TestSuite | install_SYS, install_SYSTEM, and install_wtpsav +--Hostname | Database Name +--Property | name="Source Version" value="https://github.com/DMSTEX/DMSTEX.git at f2c736d0cc6fd80d961414dcae37df2bed0d69e2 (Branch: main)" +--Testcase | Script Name +--Classname | "Schema Name"."Object Type" +--Assertions | Number of PL/SQL Statements +--Status | PASS/FAIL/ERROR/DISABLE +--Time | Testcase Duration +--Timestamp | Testcase Runtime (ISO 8601 format) +--Errors | Number of Test Errors + +declare + -- + -- Process CLOB Contents from odbcapture_installation_logs + line_txt varchar2(4000); + so_far pls_integer; + end_pos pls_integer; + -- + -- Varchar2 Associative Array + TYPE vc2_aa_type is table of varchar2(4000) + index by pls_integer; + -- + -- Testcases + TYPE tc_rec_type is record + (schema_name varchar2(128) + ,script_ext varchar2(10) -- Script Name Extension + ,num_statements number(3) -- Number of statements executed in a script + ,status varchar2(10) -- PASS/FAIL + ,duration_secs number(5) + ,t_timestamp varchar2(20) -- 2014-01-21T16:17:18 + ,error_message varchar2(4000) + ,tc_err_aa vc2_aa_type + ,tc_sys_out_aa vc2_aa_type + ); + TYPE tc_aa_type is table of tc_rec_type + index by varchar2(256); -- Testcase Name (Script Name with Path) + tc_aa tc_aa_type; + tc_name varchar2(256); -- Testcase Name (Script Name with Path) + prev_tc_name varchar2(256); -- Previous Testcase Name + -- + tc_buff_aa vc2_aa_type; -- Buffer Array for Testcases + sys_buff_aa vc2_aa_type; -- Buffer Array for System + sys_err boolean := FALSE; -- System Error Found + -- + total_tests number(4); + total_errors number(4); + total_duration number(6); + -- + procedure initialize_testcase (in_buff in varchar2) is begin + -- === DBI Started: "ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tab" + tc_name := replace(substr(in_buff, 18, 256),'"',''); + tc_aa(tc_name).schema_name := substr(tc_name, 1, instr(tc_name,'/',1)-1); + tc_aa(tc_name).script_ext := substr(tc_name, instr(tc_name,'.',-1)+1,10); + tc_aa(tc_name).status := 'PASS'; + end initialize_testcase; + -- + procedure finalize_testcase (in_buff in varchar2) is begin + if tc_name is null then return; end if; + tc_aa(tc_name).t_timestamp := substr(in_buff,22,19); + tc_aa(tc_name).duration_secs := substr(in_buff,60,length(in_buff)-60-40); + total_duration := total_duration + tc_aa(tc_name).duration_secs; + if regexp_like(tc_name, '[.]cdl$') + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := '### SQL*Loader Log File: ' || replace(tc_name,'.cdl','.log'); + begin + select substr(replace(contents,CHR(10)||CHR(10),CHR(10)),1,4000) + into tc_buff_aa(tc_buff_aa.COUNT + 1) + from odbcapture_installation_logs + where file_name = replace(tc_name,'.cdl','.log'); + exception when others then + tc_buff_aa(tc_buff_aa.COUNT + 1) := SQLERRM; + end; + end if; + if tc_aa(tc_name).status = 'FAIL' + then + tc_aa(tc_name).num_statements := 1; + total_errors := total_errors + 1; + if tc_buff_aa.COUNT > 0 + then + for i in tc_buff_aa.FIRST .. tc_buff_aa.LAST + loop + tc_aa(tc_name).tc_err_aa(i) := tc_buff_aa(i); + end loop; + end if; + else + tc_aa(tc_name).num_statements := tc_buff_aa.COUNT; + if tc_buff_aa.COUNT > 0 + then + for i in tc_buff_aa.FIRST .. tc_buff_aa.LAST + loop + tc_aa(tc_name).tc_sys_out_aa(i) := tc_buff_aa(i); + end loop; + end if; + end if; + total_tests := total_tests + 1; + prev_tc_name := tc_name; + tc_buff_aa.DELETE; + tc_name := ''; + end finalize_testcase; + -- + procedure process_contents_line (in_txt in varchar2) is + ldr_txt varchar2(4000); + begin + if in_txt is null then return; end if; + case + when regexp_like(in_txt, '^=== DBI Started: ') + then + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := 'Unexpected Testcase End: ' || in_txt; + finalize_testcase(''); + initialize_testcase(in_txt); + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + else + initialize_testcase(in_txt); + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + end if; + when regexp_like(in_txt, '^=== DBI Completed at ') + then + -- === DBI Completed at 2024-03-05T02:54:49 for a duration of 1.25 seconds (started at 2024-03-05T02:54:48) + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + finalize_testcase(in_txt); + else + sys_err := TRUE; + sys_buff_aa(sys_buff_aa.COUNT + 1) := 'Unexpected Testcase End: ' || in_txt; + end if; + when regexp_like(in_txt, '^(-- ){0,1}(PL[/]SQL:|(PLS|OCI|ORA|SP2|SQL|TNS)-[[:digit:]])') + then + -- (-- ){0,1}: "-- " may or may not be present + -- PL/SQL: PL/SQL Message + -- PLS-"digit" PL/SQL Errors + -- OCI-"digit" Oracle Call Interface + -- ORA-"digit" Oracle Database Errors + -- SP2-"digit" SQL*Plus Errors + -- SQL-"digit" SQL Errors + -- TNS-"digit" Transparent Network Substrate Errors + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + tc_aa(tc_name).status := 'FAIL'; + if tc_aa(tc_name).error_message is null + then + tc_aa(tc_name).error_message := in_txt; + end if; + else + sys_err := TRUE; + sys_buff_aa(sys_buff_aa.COUNT + 1) := '(' || prev_tc_name || ') ' || in_txt; + end if; + else + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + else + sys_buff_aa(sys_buff_aa.COUNT + 1) := '(' || prev_tc_name || ') ' || in_txt; + end if; + end case; + end process_contents_line; + -- + procedure p (in_txt in varchar2) is begin + dbms_output.put_line(in_txt); + end p; +begin + -- + prev_tc_name := 'Initializing'; + -- JUnit XML Format for Jenkins: "https://llg.cubic.org/docs/junit/" + p(''); + p(''); + for buf1 in (select rownum TS_ID + ,l.file_name + ,to_char(l.load_dtm,'YYYY-MM-DD') || 'T' || + to_char(l.load_dtm,'HH24:MI:SS') TSTAMP + ,db.db_unique_name + ,l.contents + from odbcapture_installation_logs l + cross join v$database db + where l.install_type = 'wtpsav' + and l.file_name like 'install%' + and l.load_dtm > trunc(sysdate,'DD') - 2 + order by l.file_name, l.load_dtm) + loop + -- Initialize + tc_aa.DELETE; + tc_buff_aa.DELETE; + sys_buff_aa.DELETE; + tc_name := ''; + total_tests := 0; + total_errors := 0; + total_duration := 0; + -- Fill the Testcase Array + so_far := 0; + loop + end_pos := instr(buf1.contents, chr(10), so_far + 1); + exit when end_pos = 0; + line_txt := substr(buf1.contents, so_far + 1, end_pos - so_far - 1); + process_contents_line(line_txt); + so_far := end_pos; + end loop; + line_txt := substr(buf1.contents, so_far + 1, 4000); + process_contents_line(line_txt); + -- testsuite can appear multiple times, if contained in a testsuites element. It can also be the root element. + p(' '); + tc_name := tc_aa.FIRST; + while tc_name is not null + loop + -- testcase can appear multiple times, see /testsuites/testsuite@tests + p(' '); + if tc_aa(tc_name).status = 'PASS' + then + if tc_aa(tc_name).tc_sys_out_aa.COUNT > 0 + then + -- Data that was written to standard out while the test was executed. optional + p(' '); + for i in tc_aa(tc_name).tc_sys_out_aa.FIRST .. tc_aa(tc_name).tc_sys_out_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(tc_aa(tc_name).tc_sys_out_aa(i))); + end loop; + p(' '); + end if; + else + -- Indicates that the test errored. An errored test is one that had an unanticipated problem. For example an unchecked throwable or a problem with the implementation of the test. Contains as a text node relevant data for the error, for example a stack trace. optional + p(' ' ); -- The error message. e.g., if a java exception is thrown, the return value of getMessage() + if tc_aa(tc_name).tc_err_aa.COUNT > 0 + then + for i in tc_aa(tc_name).tc_err_aa.FIRST .. tc_aa(tc_name).tc_err_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(tc_aa(tc_name).tc_err_aa(i))); + end loop; + end if; + p(' '); + end if; + p(' '); + exit when tc_name = tc_aa.LAST; + tc_name := tc_aa.NEXT(tc_name); + end loop; + if sys_buff_aa.COUNT > 0 + then + if sys_err + then + -- Data that was written to standard error while the test suite was executed. optional + p(' '); + for i in sys_buff_aa.FIRST .. sys_buff_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(sys_buff_aa(i))); + end loop; + p(' '); + else + -- Data that was written to standard out while the test suite was executed. optional + p(' '); + for i in sys_buff_aa.FIRST .. sys_buff_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(sys_buff_aa(i))); + end loop; + p(' '); + end if; + end if; + p(' '); + end loop; + p(''); +end; +/ diff --git a/wtpsav/odbcapture_installation_logs.cdl b/wtpsav/odbcapture_installation_logs.cdl new file mode 100644 index 0000000..efb09a6 --- /dev/null +++ b/wtpsav/odbcapture_installation_logs.cdl @@ -0,0 +1,71 @@ + +-- +-- Consolidated Data Load script for odbcapture_installation_logs data +-- +-- Must be run as SYSTEM +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +prompt +prompt Confirm/Create odbcapture_installation_logs Table +declare + jnk number := 0; + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql || ';'); + execute immediate in_sql; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end run_sql; +begin + begin + execute immediate 'insert into odbcapture_installation_logs(load_dtm, install_type, file_name)' || + ' values(sysdate, ''Test'', ''Test'')'; + rollback; + jnk := 1; + exception when others then + if SQLERRM != 'ORA-00942: table or view does not exist' + then + dbms_output.put_line('odbcapture_installation_logs table: ' || SQLERRM); + end if; + jnk := -1; + end; + if jnk = -1 + then + run_sql('create table odbcapture_installation_logs' || CHR(10) || + ' (load_dtm date' || CHR(10) || + ' ,install_type varchar2(10)' || CHR(10) || + ' ,file_name varchar2(512)' || CHR(10) || + ' ,contents clob)'); + run_sql('comment on column odbcapture_installation_logs.load_dtm is ''Date/Time the installation log file was loaded.'''); + run_sql('comment on column odbcapture_installation_logs.install_type is ''Type of installation (from TYPE_CONF).'''); + run_sql('comment on column odbcapture_installation_logs.file_name is ''Name of installation log file.'''); + run_sql('comment on column odbcapture_installation_logs.contents is ''Contents/Text of the installation log file.'''); + run_sql('comment on table odbcapture_installation_logs is ''ODBCAPTURE installation log files.'''); + run_sql('grant select on odbcapture_installation_logs to public'); + run_sql('create public synonym odbcapture_installation_logs for odbcapture_installation_logs'); + end if; +end; +/ + + +-- NOTE: Additional file extensions for SQL*Loader include +-- .bad - Bad Records +-- .dsc - Discard Records +-- .log - Log File + +prompt +prompt sqlldr_control=./odbcapture_installation_logs.ctl +host sqlldr '&1.' control=odbcapture_installation_logs.ctl data=odbcapture_installation_logs.csv log=odbcapture_installation_logs.log silent=HEADER,FEEDBACK + +begin + if '&_RC.' != '0' then + raise_application_error(-20000, 'Control file "odbcapture_installation_logs.ctl" returned error: &_RC.'); + end if; +end; +/ + diff --git a/wtpsav/odbcapture_installation_logs.csv b/wtpsav/odbcapture_installation_logs.csv new file mode 100644 index 0000000..21815fe --- /dev/null +++ b/wtpsav/odbcapture_installation_logs.csv @@ -0,0 +1,3 @@ +"wtpsav","install_sys.log" +"wtpsav","install_system.log" +"wtpsav","install_wtpsav.log" diff --git a/wtpsav/odbcapture_installation_logs.ctl b/wtpsav/odbcapture_installation_logs.ctl new file mode 100644 index 0000000..3a1cf46 --- /dev/null +++ b/wtpsav/odbcapture_installation_logs.ctl @@ -0,0 +1,8 @@ +LOAD DATA +APPEND INTO TABLE "ODBCAPTURE_INSTALLATION_LOGS" +FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' + (LOAD_DTM SYSDATE + ,INSTALL_TYPE char(10) + ,FILE_NAME char(512) + ,CONTENTS LOBFILE(FILE_NAME) TERMINATED BY EOF + ) diff --git a/wtpsav/report_status.sql b/wtpsav/report_status.sql new file mode 100644 index 0000000..fd1a73a --- /dev/null +++ b/wtpsav/report_status.sql @@ -0,0 +1,114 @@ + +-- +-- Report Status Script +-- +-- Must be run as SYSTEM User (DBA) +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- +-- Note: odbcapture_installation_logs table will be created +-- to load installation logs (if not already available). +-- + +---------------------------------------- +-- Setup for Reports +set linesize 2499 +set trimspool on +set echo off +set verify off +set termout on +set serveroutput on size unlimited format wrapped + +---------------------------------------- +prompt +prompt Reporting Summary of Install Type Log Errors +declare + TYPE err_aa_type is table of pls_integer index by varchar2(4000); + err_aa err_aa_type; + line_txt varchar2(4000); + so_far pls_integer; + end_pos pls_integer; + procedure add_line is + begin + if regexp_like(line_txt, '(ORA-|SQL-|SP2-|PLS-|PL2-|TNS-|(object|mmap) failed)') + then + begin + err_aa(line_txt) := err_aa(line_txt) + 1; + exception when NO_DATA_FOUND then + err_aa(line_txt) := 1; + end; + end if; + end add_line; +begin + for buff in (select file_name, load_dtm, contents + from odbcapture_installation_logs + where install_type = 'wtpsav' + and load_dtm > trunc(sysdate,'DD') - 2 + order by file_name, load_dtm) + loop + dbms_output.put_line('Processing file ' || buff.file_name || + ' (' || to_char(buff.load_dtm,'YYYY-MM-DD HH24:MI:SS') || ')'); + err_aa.DELETE; + so_far := 0; + loop + end_pos := instr(buff.contents, chr(10), so_far + 1); + exit when end_pos = 0; + line_txt := substr(buff.contents, so_far + 1, end_pos - so_far - 1); + add_line; + so_far := end_pos; + end loop; + line_txt := substr(buff.contents, so_far + 1, 4000); + add_line; + if err_aa.COUNT = 0 then continue; end if; + line_txt := err_aa.FIRST; + loop + dbms_output.put_line(line_txt); + dbms_output.put_line(' ' || err_aa(line_txt) || ' lines: ' || line_txt); + exit when line_txt = err_aa.LAST; + line_txt := err_aa.NEXT(line_txt); + end loop; + end loop; +end; +/ + +---------------------------------------- +prompt +prompt Reporting Invalid Objects +set feedback off +set termout off +spool list_invalids.csv +@"list_invalids.sql" "" +spool off +set termout on +set feedback on + +---------------------------------------- +prompt +prompt Reporting JUnit XML Database Build Status +set feedback off +set termout off +spool db_build_junit_report.xml +@"db_build_junit_report.sql" "" +spool off +set termout on +set feedback on + +---------------------------------------- +prompt +prompt Reorting JUnit XML Installation Log +set feedback off +set termout off +spool log_files_junit_report.xml +@"log_files_junit_report.sql" "" +spool off +set termout on +set feedback on + +---------------------------------------- +-- Done with Reports +set linesize 80 +set verify on diff --git a/wtpsav/update_id_sequences.sql b/wtpsav/update_id_sequences.sql new file mode 100644 index 0000000..e58f26f --- /dev/null +++ b/wtpsav/update_id_sequences.sql @@ -0,0 +1,59 @@ + +-- +-- Update "wtpsav" IDENTITY SEQUENCES +-- + +declare + UNDEFINED_SEQUENCE EXCEPTION; -- sequence not yet defined in this session + PRAGMA EXCEPTION_INIT (UNDEFINED_SEQUENCE, -8002); + l_last_seq number; + l_max_val number; + sql_txt varchar2(4000); + procedure do_it (in_schema_name in varchar2) is + begin + for buff in ( + select tic.owner + ,tic.table_name + ,tic.column_name + ,tic.sequence_name + from dba_tab_identity_cols tic + where tic.owner = in_schema_name) + loop + -- Find the Current Sequence Value + sql_txt := 'select ' || buff.owner || '.' || buff.sequence_name || + '.currval from dual'; + begin + execute immediate sql_txt into l_last_seq; + exception when UNDEFINED_SEQUENCE + then + -- Find the Last Number for the Sequence + select ds.last_number into l_last_seq + from dba_sequences ds + where ds.sequence_owner = buff.owner + and ds.sequence_name = buff.sequence_name; + end; + -- Find the maximum IDENTITY column value + sql_txt := 'select max(' || buff.column_name || ')' || + ' from ' || buff.owner || '.' || buff.table_name; + execute immediate sql_txt into l_max_val; + -- Display values found + dbms_output.put_line(buff.owner || '.' || buff.sequence_name || ' Last Sequence: ' || l_last_seq || + ', ' || buff.owner || '.' || buff.table_name || ' max(' || buff.column_name || ') = ' || l_max_val); + if l_last_seq < l_max_val + then + -- Increment the sequence as necessary + sql_txt := 'begin' || + ' while ' || buff.owner || '.' || buff.sequence_name || '.nextval < ' || l_max_val || + ' loop null; end loop;' || + 'end;'; + dbms_output.put_line(sql_txt); + execute immediate sql_txt;-- using l_last_seq; + end if; + end loop; + dbms_output.put_line('-- ' || in_schema_name || ' Identity Sequence Updates is done.'); + end do_it; +begin + dbms_output.put_line('Update ID Sequences for wtpsav Install Type'); + do_it('WTP'); +end; +/ diff --git a/wtpsrc/SYS/WTP.usr b/wtpsrc/SYS/WTP.usr new file mode 100644 index 0000000..b7f2376 --- /dev/null +++ b/wtpsrc/SYS/WTP.usr @@ -0,0 +1,26 @@ + +-- +-- Create WTP Schema +-- + +set define off + +create user "WTP" + identified by "WTP" + default tablespace USERS + temporary tablespace TEMP + profile DEFAULT + quota 512M on USERS +; + +-- Grant SYS Objects (but not directories) + +grant SELECT on "SYS"."DBA_OBJECTS" to "WTP" with grant option; +grant SELECT on "SYS"."DBA_PROCEDURES" to "WTP" with grant option; +grant SELECT on "SYS"."DBA_SOURCE" to "WTP" with grant option; +grant EXECUTE on "SYS"."DBMS_ALERT" to "WTP"; +grant SELECT on "SYS"."DBMS_ALERT_INFO" to "WTP" with grant option; +grant EXECUTE on "SYS"."DBMS_LOCK" to "WTP"; +grant SELECT on "SYS"."GV_$PARAMETER" to "WTP" with grant option; + +set define on diff --git a/wtpsrc/SYSTEM/WTP_usr.grnt b/wtpsrc/SYSTEM/WTP_usr.grnt new file mode 100644 index 0000000..ae40430 --- /dev/null +++ b/wtpsrc/SYSTEM/WTP_usr.grnt @@ -0,0 +1,56 @@ + +-- +-- Create WTP Grants +-- + +set define off + + +-- Database System Privileges + +--DBMS_METADATA:WTP + + GRANT CREATE SESSION TO "WTP"; + GRANT CREATE TABLE TO "WTP"; + GRANT CREATE PUBLIC SYNONYM TO "WTP"; + GRANT CREATE VIEW TO "WTP"; + GRANT CREATE SEQUENCE TO "WTP"; + GRANT CREATE DATABASE LINK TO "WTP"; + GRANT CREATE PROCEDURE TO "WTP"; + GRANT EXECUTE ANY PROCEDURE TO "WTP"; + GRANT CREATE TRIGGER TO "WTP"; + GRANT CREATE TYPE TO "WTP"; + GRANT CREATE JOB TO "WTP"; + +-- "sys" INSTALL_TYPE Role Grants +-- "GRANTEE" (delayed) Role Grants +-- Note: "OBJECT" Schema Object Grants are given during Role creation + + + +-- "sys" INSTALL_TYPE Schema Object Grants, excluding SYS objects +-- "GRANTEE" (delayed) Schema Object Grants +-- Note: "OBJECT" Schema Object Grants are given during object creation + + + +-- Advanced Queue System Privileges + + + +-- Advanced Queue Grants +-- "GRANTEE" (Delayed) Advanced Queue Grants +-- Note: "QUEUE" Advanced Queue Grants are given during object creation + +-- Advanced Queue Subscriptions +-- "GRANTEE" (Delayed) Advanced Queue Subscription +-- Note: "QUEUE" Advanced Queue Subscriptions are given during object creation + + + +-- "GRANTEE" (Delayed) Fine-Grained Java Permissions +-- Note: "JAVA_CLASS" Fine-Grained Java Permissions are given during object creation +-- + + +set define on diff --git a/wtpsrc/WTP/CORE_DATA.pbody b/wtpsrc/WTP/CORE_DATA.pbody new file mode 100644 index 0000000..2a18d41 --- /dev/null +++ b/wtpsrc/WTP/CORE_DATA.pbody @@ -0,0 +1,690 @@ + +-- +-- Create WTP.CORE_DATA Package Body +-- + +set define off + + +--DBMS_METADATA:WTP.CORE_DATA + + CREATE OR REPLACE EDITIONABLE PACKAGE BODY "WTP"."CORE_DATA" +is + + g_first_executed_dtm timestamp(6) with local time zone; + +--------------------- +-- Public Procedures +--------------------- + +------------------------------------------------------------ +function get_testcase + return long_name +is +begin + return nvl(wt_assert.g_testcase + ,substr(core_data.g_run_rec.test_runner_owner || '.' || + core_data.g_run_rec.test_runner_name, 1, 128)); +end get_testcase; + +------------------------------------------------------------ +procedure init1 + (in_package_name in varchar2) +is + l_run_recNULL run_rec_type; + l_testcase long_name; +begin + -- Initialize Test Run Record + g_run_rec := l_run_recNULL; + g_run_rec.start_dtm := systimestamp; + g_run_rec.test_runner_name := in_package_name; + -- These don't always work: + -- g_run_rec.test_runner_owner := sys_context('userenv', 'current_schema'); + -- select username into g_run_rec.test_runner_owner from user_users; + g_run_rec.test_runner_owner := USER; + -- Initialize Test Cases Array + l_testcase := g_tcases_aa.LAST; + while l_testcase is not null + loop + g_tcases_aa.DELETE(l_testcase); + l_testcase := g_tcases_aa.PRIOR(l_testcase); + end loop; + -- Initialize Test Results Array + g_results_nt := null; +end init1; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_init1 + is + l_run_recSAVE run_rec_type; + l_tcases_aaSAVE tcases_aa_type; + l_results_ntSAVE results_nt_type; + l_run_recTEST run_rec_type; + l_tcases_aaTEST tcases_aa_type; + l_results_ntTEST results_nt_type; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'INIT "One" Happy Path 1'; + l_run_recSAVE := g_run_rec; + l_tcases_aaSAVE := g_tcases_aa; + l_results_ntSAVE := g_results_nt; + g_tcases_aa('INIT Happy 1 Test 1') := NULL; + g_tcases_aa('INIT Happy 1 Test 2') := NULL; + init1 ('WTPLSQL'); + l_run_recTEST := g_run_rec; + l_tcases_aaTEST := g_tcases_aa; + l_results_ntTEST := g_results_nt; + g_run_rec := l_run_recSAVE; + g_tcases_aa := l_tcases_aaSAVE; + g_results_nt := l_results_ntSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'l_run_recTEST.test_runner_owner' + ,check_this_in => l_run_recTEST.test_runner_owner + ,against_this_in => USER); + wt_assert.eq + (msg_in => 'l_run_recTEST.test_runner_name' + ,check_this_in => l_run_recTEST.test_runner_name + ,against_this_in => 'WTPLSQL'); + wt_assert.isnotnull + (msg_in => 'l_run_recTEST.start_dtm' + ,check_this_in => l_run_recTEST.start_dtm); + wt_assert.this + (msg_in => 'l_run_recTEST.start_dtm > l_run_recSAVE.start_dtm' + ,check_this_in => l_run_recTEST.start_dtm > l_run_recSAVE.start_dtm); + wt_assert.isnull + (msg_in => 'l_run_recTEST.end_dtm' + ,check_this_in => l_run_recTEST.end_dtm); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'l_run_recTEST.runner_sec' + ,check_this_in => l_run_recTEST.runner_sec + ,against_this_in => 0); + wt_assert.eq + (msg_in => 'l_run_recTEST.runner_sec' + ,check_this_in => l_run_recTEST.runner_sec + ,against_this_in => 0); + wt_assert.eq + (msg_in => 'l_run_recTEST.tc_cnt' + ,check_this_in => l_run_recTEST.tc_cnt + ,against_this_in => 0); + wt_assert.eq + (msg_in => 'l_run_recTEST.tc_fail' + ,check_this_in => l_run_recTEST.tc_fail + ,against_this_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_cnt' + ,check_this_in => l_run_recTEST.asrt_cnt + ,against_this_in => 0); + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_fail' + ,check_this_in => l_run_recTEST.asrt_fail + ,against_this_in => 0); + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_tot_msec' + ,check_this_in => l_run_recTEST.asrt_tot_msec + ,against_this_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull + (msg_in => 'l_tcases_aaTEST.FIRST' + ,check_this_in => l_tcases_aaTEST.FIRST); + wt_assert.this + (msg_in => 'l_results_ntTEST is null' + ,check_this_in => (l_results_ntTEST is NULL) ); + end t_init1; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure init2 +is +begin + g_first_executed_dtm := systimestamp; +end init2; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_init2 + is + l_run_recSAVE run_rec_type; + l_tcases_aaSAVE tcases_aa_type; + l_results_ntSAVE results_nt_type; + l_run_recTEST run_rec_type; + l_tcases_aaTEST tcases_aa_type; + l_results_ntTEST results_nt_type; + lt PLS_INTEGER; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'INIT "Two" Happy Path 1'; + l_run_recSAVE := g_run_rec; + l_tcases_aaSAVE := g_tcases_aa; + l_results_ntSAVE := g_results_nt; + -- lt points to the NULL record in g_results_nt + lt := g_results_nt.COUNT; + g_results_nt(lt).executed_dtm := null; + init2; + l_run_recTEST := g_run_rec; + l_tcases_aaTEST := g_tcases_aa; + l_results_ntTEST := g_results_nt; + g_run_rec := l_run_recSAVE; + g_tcases_aa := l_tcases_aaSAVE; + g_results_nt := l_results_ntSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull + (msg_in => 'l_results_ntTEST(1).executed_dtm' + ,check_this_in => l_results_ntTEST(1).executed_dtm); + wt_assert.this + (msg_in => 'l_results_ntTEST(1).executed_dtm >= l_run_recTEST.start_dtm' + ,check_this_in => l_results_ntTEST(1).executed_dtm >= l_run_recTEST.start_dtm); + end t_init2; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure add + (in_testcase in varchar2 + ,in_assertion in varchar2 + ,in_pass in boolean + ,in_details in varchar2 + ,in_message in varchar2) +is + l_results_rec results_rec_type; + l_results_recNULL results_rec_type; + l_tcases_rec tcases_rec_type; + l_current_tstamp timestamp(6) with local time zone := systimestamp; + l_interval_buff interval day(9) to second(6); +begin + ------------------------------------------------------------ + -- Set and Update "l_results_rec" + if g_results_nt is null + then + l_results_rec := l_results_recNULL; + else + l_results_rec := g_results_nt(g_results_nt.COUNT); + end if; + l_results_rec.testcase := nvl(in_testcase + ,substr(g_run_rec.test_runner_owner || '.' || + g_run_rec.test_runner_name, 1, 128)); + l_results_rec.assertion := in_assertion; + l_results_rec.pass := nvl(in_pass,FALSE); + l_results_rec.details := in_details; + l_results_rec.message := in_message; + l_interval_buff := l_current_tstamp - + nvl(l_results_rec.executed_dtm + ,g_first_executed_dtm); + l_results_rec.interval_msec := 1000*( extract(second from l_interval_buff) + + 60*( extract(minute from l_interval_buff) + + 60*( extract(hour from l_interval_buff) + + 24*extract(day from l_interval_buff) + ) ) ); + l_results_rec.executed_dtm := l_current_tstamp; + ------------------------------------------------------------ + -- Add New Element + if g_results_nt is null + then + -- Initialize the "g_results_nt" Array + g_results_nt := results_nt_type(l_results_rec); + else + -- Add New Element to "g_results_nt" Array + g_results_nt.extend; + g_results_nt(g_results_nt.COUNT) := l_results_rec; + end if; + ----------------------------------------------- + -- Update "g_run_rec" based on "l_results_rec" + g_run_rec.asrt_cnt := g_run_rec.asrt_cnt + 1; + if NOT l_results_rec.pass + then + g_run_rec.asrt_fail := g_run_rec.asrt_fail + 1; + end if; + g_run_rec.asrt_tot_msec := g_run_rec.asrt_tot_msec + + l_results_rec.interval_msec; + if l_results_rec.interval_msec < nvl(g_run_rec.asrt_min_msec,9999999) + then + g_run_rec.asrt_min_msec := l_results_rec.interval_msec; + end if; + if l_results_rec.interval_msec > nvl(g_run_rec.asrt_max_msec,-1) + then + g_run_rec.asrt_max_msec := l_results_rec.interval_msec; + end if; + ----------------------------------------------------------------------- + -- Set "l_tcases_rec" and update the appropriate "g_tcases_aa" element + -- + if g_tcases_aa.EXISTS(l_results_rec.testcase) + then + l_tcases_rec := g_tcases_aa(l_results_rec.testcase); + end if; + l_tcases_rec.asrt_cnt := l_tcases_rec.asrt_cnt + 1; + if NOT l_results_rec.pass + then + l_tcases_rec.asrt_fail := l_tcases_rec.asrt_fail + 1; + end if; + l_tcases_rec.asrt_tot_msec := l_tcases_rec.asrt_tot_msec + + l_results_rec.interval_msec; + if l_results_rec.interval_msec < nvl(l_tcases_rec.asrt_min_msec,9999999) + then + l_tcases_rec.asrt_min_msec := l_results_rec.interval_msec; + end if; + if l_results_rec.interval_msec > nvl(l_tcases_rec.asrt_max_msec,-1) + then + l_tcases_rec.asrt_max_msec := l_results_rec.interval_msec; + end if; + g_tcases_aa(l_results_rec.testcase) := l_tcases_rec; + -- +end add; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_add + is + l_run_recSAVE run_rec_type; + l_tcases_aaSAVE tcases_aa_type; + l_results_ntSAVE results_nt_type; + l_run_recTEST run_rec_type; + l_tcases_aaTEST tcases_aa_type; + l_results_ntTEST results_nt_type; + lt PLS_INTEGER; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Add Procedure Happy Path 1'; + l_run_recSAVE := g_run_rec; + l_tcases_aaSAVE := g_tcases_aa; + l_results_ntSAVE := g_results_nt; + add(in_testcase => 'The Testcase' + ,in_assertion => 'The Assert' + ,in_pass => TRUE + ,in_details => 'The Details' + ,in_message => 'The Message'); + -------------------------------------- WTPLSQL Testing -- + l_run_recTEST := g_run_rec; + l_tcases_aaTEST := g_tcases_aa; + l_results_ntTEST := g_results_nt; + g_run_rec := l_run_recSAVE; + g_tcases_aa := l_tcases_aaSAVE; + g_results_nt := l_results_ntSAVE; + lt := l_results_ntTEST.COUNT; + wt_assert.isnotnull + (msg_in => 'The last element in l_resultsTEST_nt' + ,check_this_in => lt); + -------------------------------------- WTPLSQL Testing -- + -- l_results_nt Testing + ----------------------- + wt_assert.eq + (msg_in => 'l_results_ntTEST.COUNT = ' || + 'l_results_ntSAVE.COUNT + 1' + ,check_this_in => l_results_ntTEST.COUNT + ,against_this_in => l_results_ntSAVE.COUNT + 1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull + (msg_in => 'l_results_ntTEST(lt).interval_msec' + ,check_this_in => l_results_ntTEST(lt).interval_msec); + wt_assert.this + (msg_in => 'l_results_ntTEST(lt).interval_msec >= 0' + ,check_this_in => l_results_ntTEST(lt).interval_msec >= 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull + (msg_in => 'l_results_ntTEST(lt).executed_dtm' + ,check_this_in => l_results_ntTEST(lt).executed_dtm); + wt_assert.this + (msg_in => 'l_results_ntTEST(lt).executed_dtm >= ' || + 'l_results_ntTEST(lt-1).executed_dtm' + ,check_this_in => l_results_ntTEST(lt).executed_dtm >= + l_results_ntTEST(lt-1).executed_dtm); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'l_results_ntTEST(lt).testcase' + ,check_this_in => l_results_ntTEST(lt).testcase + ,against_this_in => 'The Testcase'); + wt_assert.eq + (msg_in => 'l_results_ntTEST(lt).assertion' + ,check_this_in => l_results_ntTEST(lt).assertion + ,against_this_in => 'The Assert'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'l_results_ntTEST(lt).pass' + ,check_this_in => l_results_ntTEST(lt).pass + ,against_this_in => TRUE); + wt_assert.eq + (msg_in => 'l_results_ntTEST(lt).details' + ,check_this_in => l_results_ntTEST(lt).details + ,against_this_in => 'The Details'); + wt_assert.eq + (msg_in => 'l_results_ntTEST(lt).message' + ,check_this_in => l_results_ntTEST(lt).message + ,against_this_in => 'The Message'); + -------------------------------------- WTPLSQL Testing -- + -- l_run_rec Testing + -------------------- + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_cnt = ' || + 'l_run_recSAVE.asrt_cnt + 1' + ,check_this_in => l_run_recTEST.asrt_cnt + ,against_this_in => l_run_recSAVE.asrt_cnt + 1); + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_fail = ' || + 'l_run_recSAVE.asrt_fail' + ,check_this_in => l_run_recTEST.asrt_fail + ,against_this_in => l_run_recSAVE.asrt_fail); + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_tot_msec = ' || + 'l_run_recSAVE.asrt_tot_msec + ' || + 'l_results_ntTEST(lt).interval_msec' + ,check_this_in => l_run_recTEST.asrt_tot_msec + ,against_this_in => l_run_recSAVE.asrt_tot_msec + + l_results_ntTEST(lt).interval_msec); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull + (msg_in => 'l_run_recTEST.asrt_min_msec' + ,check_this_in => l_run_recTEST.asrt_min_msec); + wt_assert.this + (msg_in => 'l_run_recTEST.asrt_min_msec <= ' || + 'l_run_recSAVE.asrt_min_msec' + ,check_this_in => l_run_recTEST.asrt_min_msec <= + l_run_recSAVE.asrt_min_msec); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull + (msg_in => 'l_run_recTEST.asrt_max_msec' + ,check_this_in => l_run_recTEST.asrt_max_msec); + wt_assert.this + (msg_in => 'l_run_recTEST.asrt_max_msec >= ' || + 'l_run_recSAVE.asrt_max_msec' + ,check_this_in => l_run_recTEST.asrt_max_msec >= + l_run_recSAVE.asrt_max_msec); + -------------------------------------- WTPLSQL Testing -- + -- l_tcases_aa Testing + ---------------------- + wt_assert.eq + (msg_in => 'l_tcases_aaTEST(''The Testcase'').asrt_cnt' + ,check_this_in => l_tcases_aaTEST('The Testcase').asrt_cnt + ,against_this_in => 1); + wt_assert.eq + (msg_in => 'l_tcases_aaTEST(''The Testcase'').asrt_fail' + ,check_this_in => l_tcases_aaTEST('The Testcase').asrt_fail + ,against_this_in => 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull + (msg_in => 'l_tcases_aaTEST(''The Testcase'').asrt_fail' + ,check_this_in => l_tcases_aaTEST('The Testcase').asrt_fail); + wt_assert.isnotnull + (msg_in => 'l_tcases_aaTEST(''The Testcase'').asrt_tot_msec' + ,check_this_in => l_tcases_aaTEST('The Testcase').asrt_tot_msec); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull + (msg_in => 'l_tcases_aaTEST(''The Testcase'').asrt_min_msec' + ,check_this_in => l_tcases_aaTEST('The Testcase').asrt_min_msec); + wt_assert.isnotnull + (msg_in => 'l_tcases_aaTEST(''The Testcase'').asrt_max_msec' + ,check_this_in => l_tcases_aaTEST('The Testcase').asrt_max_msec); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Add Procedure Happy Path 2'; + l_run_recSAVE := g_run_rec; + l_tcases_aaSAVE := g_tcases_aa; + l_results_ntSAVE := g_results_nt; + add(in_testcase => 'The Testcase' + ,in_assertion => 'The Assert' + ,in_pass => FALSE + ,in_details => 'The Details' + ,in_message => 'The Message'); + -------------------------------------- WTPLSQL Testing -- + l_run_recTEST := g_run_rec; + l_tcases_aaTEST := g_tcases_aa; + l_results_ntTEST := g_results_nt; + g_run_rec := l_run_recSAVE; + g_tcases_aa := l_tcases_aaSAVE; + g_results_nt := l_results_ntSAVE; + lt := l_results_ntTEST.COUNT; + wt_assert.isnotnull + (msg_in => 'The last element in l_resultsTEST_nt' + ,check_this_in => lt); + -------------------------------------- WTPLSQL Testing -- + -- l_results_nt Testing + -------------------- + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_cnt = ' || + 'l_run_recSAVE.asrt_cnt + 1' + ,check_this_in => l_run_recTEST.asrt_cnt + ,against_this_in => l_run_recSAVE.asrt_cnt + 1); + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_fail = ' || + 'l_run_recSAVE.asrt_fail + 1' + ,check_this_in => l_run_recTEST.asrt_fail + ,against_this_in => l_run_recSAVE.asrt_fail + 1); + -------------------------------------- WTPLSQL Testing -- + -- l_run_rec Testing + -------------------- + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_cnt = ' || + 'l_run_recSAVE.asrt_cnt + 1' + ,check_this_in => l_run_recTEST.asrt_cnt + ,against_this_in => l_run_recSAVE.asrt_cnt + 1); + wt_assert.eq + (msg_in => 'l_run_recTEST.asrt_fail = ' || + 'l_run_recSAVE.asrt_fail + 1' + ,check_this_in => l_run_recTEST.asrt_fail + ,against_this_in => l_run_recSAVE.asrt_fail + 1); + -------------------------------------- WTPLSQL Testing -- + -- l_tcases_aa Testing + ---------------------- + wt_assert.eq + (msg_in => 'l_tcases_aaTEST(''The Testcase'').asrt_cnt' + ,check_this_in => l_tcases_aaTEST('The Testcase').asrt_cnt + ,against_this_in => 1); + wt_assert.eq + (msg_in => 'l_tcases_aaTEST(''The Testcase'').asrt_fail' + ,check_this_in => l_tcases_aaTEST('The Testcase').asrt_fail + ,against_this_in => 1); + end t_add; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure final1 +is + l_testcase long_name; + l_interval_buff interval day(9) to second(6); +begin + -- Update Test Case Data + g_run_rec.tc_cnt := g_tcases_aa.COUNT; + g_run_rec.tc_fail := 0; + if g_tcases_aa.COUNT > 0 + then + l_testcase := g_tcases_aa.FIRST; + loop + if g_tcases_aa(l_testcase).asrt_fail > 0 + then + g_run_rec.tc_fail := g_run_rec.tc_fail + 1; + end if; + exit when l_testcase = g_tcases_aa.LAST; + l_testcase := g_tcases_aa.NEXT(l_testcase); + end loop; + end if; + -- + if g_results_nt.EXISTS(1) + then + g_run_rec.asrt_fst_dtm := g_results_nt(1).executed_dtm; + g_run_rec.asrt_lst_dtm := g_results_nt(g_results_nt.COUNT).executed_dtm; + end if; + -- Update Test Run Data + g_run_rec.end_dtm := systimestamp; + l_interval_buff := g_run_rec.end_dtm - g_run_rec.start_dtm; + g_run_rec.runner_sec := (extract(second from l_interval_buff) + + 60 * ( extract(minute from l_interval_buff) + + 60 * ( extract(hour from l_interval_buff) + + 24 * ( extract(day from l_interval_buff) + ) ) ) ); +end final1; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_final1 + is + l_run_recSAVE run_rec_type; + l_tcases_aaSAVE tcases_aa_type; + l_results_ntSAVE results_nt_type; + l_run_recTEST run_rec_type; + l_tcases_aaTEST tcases_aa_type; + l_results_ntTEST results_nt_type; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'FINAL "One" Happy Path'; + l_run_recSAVE := g_run_rec; + l_tcases_aaSAVE := g_tcases_aa; + l_results_ntSAVE := g_results_nt; + g_tcases_aa('TC1').asrt_fail := 2; + final1; + l_run_recTEST := g_run_rec; + l_tcases_aaTEST := g_tcases_aa; + l_results_ntTEST := g_results_nt; + g_run_rec := l_run_recSAVE; + g_tcases_aa := l_tcases_aaSAVE; + g_results_nt := l_results_ntSAVE; + -------------------------------------- WTPLSQL Testing -- + -- Update Test Case Data + wt_assert.isnotnull + (msg_in => 'l_run_recTEST.tc_cnt' + ,check_this_in => l_run_recTEST.tc_cnt); + wt_assert.this + (msg_in => 'l_run_recTEST.tc_cnt > 0' + ,check_this_in => l_run_recTEST.tc_cnt > 0); + wt_assert.isnotnull + (msg_in => 'l_run_recTEST.tc_fail' + ,check_this_in => l_run_recTEST.tc_fail); + wt_assert.this + (msg_in => 'l_run_recTEST.tc_fail >= 0' + ,check_this_in => l_run_recTEST.tc_fail >= 0); + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull + (msg_in => 'l_run_recSAVE.asrt_fst_dtm' + ,check_this_in => l_run_recSAVE.asrt_fst_dtm); + wt_assert.isnotnull + (msg_in => 'l_run_recTEST.asrt_fst_dtm' + ,check_this_in => l_run_recTEST.asrt_fst_dtm); + wt_assert.isnull + (msg_in => 'l_run_recSAVE.asrt_lst_dtm' + ,check_this_in => l_run_recSAVE.asrt_lst_dtm); + wt_assert.isnotnull + (msg_in => 'l_run_recTEST.asrt_lst_dtm' + ,check_this_in => l_run_recTEST.asrt_lst_dtm); + -------------------------------------- WTPLSQL Testing -- + -- Update Test Run Data + wt_assert.isnull + (msg_in => 'l_run_recSAVE.end_dtm' + ,check_this_in => l_run_recSAVE.end_dtm); + wt_assert.isnotnull + (msg_in => 'l_run_recTEST.end_dtm' + ,check_this_in => l_run_recTEST.end_dtm); + wt_assert.isnotnull + (msg_in => 'l_run_recTEST.runner_sec' + ,check_this_in => l_run_recTEST.runner_sec); + wt_assert.this + (msg_in => 'l_run_recTEST.runner_sec >= l_run_recSAVE.runner_sec' + ,check_this_in => l_run_recTEST.runner_sec >= l_run_recSAVE.runner_sec); + end t_final1; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure run_error + (in_error_message in varchar2) +is +begin + if g_run_rec.error_message is null + then + g_run_rec.error_message := substr(in_error_message,1,4000); + else + g_run_rec.error_message := substr(g_run_rec.error_message || CHR(10) || + in_error_message,1,4000); + end if; +end run_error; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_run_error + is + l_run_recSAVE run_rec_type; + l_run_recTEST run_rec_type; + test_message varchar2(32767); + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'RUN_ERROR Happy Path 1'; + l_run_recSAVE := g_run_rec; + g_run_rec.error_message := ''; + run_error('Simlple Message'); + l_run_recTEST := g_run_rec; + g_run_rec := l_run_recSAVE; + wt_assert.eq + (msg_in => 'l_run_recTEST.error_message' + ,check_this_in => l_run_recTEST.error_message + ,against_this_in => 'Simlple Message'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'RUN_ERROR Happy Path 2'; + l_run_recSAVE := g_run_rec; + g_run_rec.error_message := ''; + run_error('Message 1'); + run_error('Message 2'); + l_run_recTEST := g_run_rec; + g_run_rec := l_run_recSAVE; + wt_assert.eq + (msg_in => 'l_run_recTEST.error_message' + ,check_this_in => l_run_recTEST.error_message + ,against_this_in => 'Message 1' || CHR(10) || 'Message 2'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'RUN_ERROR Happy Path 3'; + for i in 1 .. 399 + loop + test_message := test_message || '1234567890'; + end loop; + l_run_recSAVE := g_run_rec; + g_run_rec.error_message := ''; + run_error(test_message); + run_error('Longer than 10 characters.'); + l_run_recTEST := g_run_rec; + g_run_rec := l_run_recSAVE; + wt_assert.isnotnull + (msg_in => 'substr(l_run_recTEST.error_message,3000)' + ,check_this_in => substr(l_run_recTEST.error_message,3000)); + wt_assert.this + (msg_in => 'l_run_recTEST.error_message like ''%Longer th''' + ,check_this_in => l_run_recTEST.error_message like '%Longer th'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'RUN_ERROR Happy Path 4'; + l_run_recSAVE := g_run_rec; + g_run_rec.error_message := ''; + run_error(''); + run_error('Message'); + run_error(''); + l_run_recTEST := g_run_rec; + g_run_rec := l_run_recSAVE; + wt_assert.eq + (msg_in => 'l_run_recTEST.error_message' + ,check_this_in => l_run_recTEST.error_message + ,against_this_in => 'Message' || CHR(10)); + end t_run_error; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure WTPLSQL_RUN + is + begin + wtplsql.g_DBOUT := 'CORE_DATA:PACKAGE BODY'; + -------------------------------------- WTPLSQL Testing -- + t_init1; + t_init2; + t_add; + t_final1; + --t_final2; + t_run_error; + end; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +end core_data; +/ + +set define on diff --git a/wtpsrc/WTP/CORE_DATA.pspec b/wtpsrc/WTP/CORE_DATA.pspec new file mode 100644 index 0000000..ac04d21 --- /dev/null +++ b/wtpsrc/WTP/CORE_DATA.pspec @@ -0,0 +1,101 @@ + +-- +-- Create WTP.CORE_DATA Package +-- + +set define off + + +--DBMS_METADATA:WTP.CORE_DATA + + CREATE OR REPLACE EDITIONABLE PACKAGE "WTP"."CORE_DATA" + authid definer +is + + SUBTYPE long_name is varchar2(128); + + TYPE run_rec_type is record + (test_runner_owner long_name -- Owner of the Test Runner + ,test_runner_name long_name -- Name of the Test Runner + ,start_dtm timestamp(3) with local time zone -- Test Runner Start Date/Time + ,end_dtm timestamp(3) with local time zone -- Test Runner End Date/Time + ,runner_sec number(6,1) default 0 -- Total Runtime for Test Runner in Seconds + ,error_message varchar2(4000) -- Error Message + ,tc_cnt number(7) default 0 -- Number of Test Cases + ,tc_fail number(7) default 0 -- Number of Failed Test Cases + ,asrt_fst_dtm timestamp(3) with local time zone -- Date/Time of First Assertion + ,asrt_lst_dtm timestamp(3) with local time zone -- Date/Time of Last Assertion + ,asrt_cnt number(7) default 0 -- Number of Assertions across all Test Cases + ,asrt_fail number(7) default 0 -- Number of Assertion Failures across all Test Cases + ,asrt_min_msec number(10,3) -- Minumum Assertion Interval in Milliseconds across all Test Cases + ,asrt_max_msec number(10,3) -- Maximum Assertion Interval in Milliseconds across all Test Cases + ,asrt_tot_msec number(10,3) default 0 -- Total Assertion Intervals in Milliseconds across all Test Cases + ,dbout_owner long_name -- Owner of the Database Object Under Test + ,dbout_name long_name -- Name of the Database Object Under Test + ,dbout_type varchar2(20) -- Type of the Database Object Under Test + ); + g_run_rec run_rec_type; + + TYPE tcases_rec_type is record + (asrt_cnt number(7) default 0 -- Number of Assertions in this Test Case + ,asrt_fail number(7) default 0 -- Number of Failed Assertsion in this Test Case + ,asrt_min_msec number(10,3) -- Minumum Assertion Interval in Milliseconds in this Test Cases + ,asrt_max_msec number(10,3) -- Maximum Assertion Interval in Milliseconds in this Test Cases + ,asrt_tot_msec number(10,3) default 0 -- Total Assertion Interval in Milliseconds in this Test Cases + ); + TYPE tcases_aa_type is table of tcases_rec_type index by long_name; + g_tcases_aa tcases_aa_type; + + TYPE results_rec_type is record + (testcase long_name -- Test Case Name of the Assertion + ,executed_dtm timestamp(6) with local time zone -- Execution Date/Time of the Assertion + ,interval_msec number(10,3) default 0 -- Interval from Previous Assertion in Milliseconds + ,assertion varchar2(15) -- Name of the Assertion + ,pass boolean -- Did the Assertion Pass? (TRUE/FALSE) + ,message varchar2(200) -- Identification Message of the Assertion + ,details varchar2(4000) -- Test Details of the Assertion + ); + TYPE results_nt_type is table of results_rec_type; + g_results_nt results_nt_type; + + procedure init1 + (in_package_name in varchar2); + + procedure init2; + + procedure add + (in_testcase in varchar2 + ,in_assertion in varchar2 + ,in_pass in boolean + ,in_details in varchar2 + ,in_message in varchar2); + + procedure final1; + + procedure run_error + (in_error_message in varchar2); + + -- WtPLSQL Self Test Procedures + -- + -- alter system set PLSQL_CCFLAGS = + -- 'WTPLSQL_SELFTEST:TRUE' + -- scope=BOTH; + -- + $IF $$WTPLSQL_SELFTEST + $THEN + procedure WTPLSQL_RUN; + $END + +end core_data; +/ + + +-- Grants + +grant EXECUTE on "WTP"."CORE_DATA" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsrc/WTP/HOOK.pbody b/wtpsrc/WTP/HOOK.pbody new file mode 100644 index 0000000..c8ced0d --- /dev/null +++ b/wtpsrc/WTP/HOOK.pbody @@ -0,0 +1,237 @@ + +-- +-- Create WTP.HOOK Package Body +-- + +set define off + + +--DBMS_METADATA:WTP.HOOK + + CREATE OR REPLACE EDITIONABLE PACKAGE BODY "WTP"."HOOK" +as + + TYPE run_nt_type is table + of hooks%ROWTYPE; + TYPE run_aa_type is table + of run_nt_type + index by varchar2(20); + g_run_aa run_aa_type; + +---------------------- +-- Private Procedures +---------------------- + +--------------------- +-- Public Procedures +--------------------- + +------------------------------------------------------------ +procedure run + (in_hook_name in varchar2) +is + l_error_stack varchar2(32000); +begin + $IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ + $THEN + if NOT g_run_assert_hook + AND in_hook_name = 'after_assertion' + then + return; + end if; + $END ------%WTPLSQL_end_ignore_lines%------ + if NOT g_run_aa.EXISTS(in_hook_name) + then + --dbms_output.put_line('No hook for ' || in_hook_name); + return; + end if; + for i in 1 .. g_run_aa(in_hook_name).COUNT + loop + begin + execute immediate g_run_aa(in_hook_name)(i).run_string; + exception when OTHERS then + l_error_stack := 'Hook Error in "' || in_hook_name || + '", SEQ ' || g_run_aa(in_hook_name)(i).seq || + '.' || CHR(10) || + SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack; + core_data.run_error(l_error_stack); + end; + end loop; +end run; + +------------------------------------------------------------ +procedure init +is + l_run_nt run_nt_type; +begin + g_run_aa.DELETE; + for buff in ( + select hook_name + from hooks + group by hook_name ) + loop + select * bulk collect into l_run_nt + from hooks + where hook_name = buff.hook_name + order by hooks.seq; + if SQL%FOUND + then + g_run_aa(buff.hook_name) := l_run_nt; + end if; + end loop; +end init; + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + -------------------------------------- WTPLSQL Testing -- + procedure test_hook + (in_msg in varchar2) + is + begin + g_test_hook_msg := in_msg; + end test_hook; + -------------------------------------- WTPLSQL Testing -- + procedure WTPLSQL_RUN + is + TYPE hooks_nt_type is table of hooks%ROWTYPE; + l_hooks_ntSAVE hooks_nt_type; + TYPE hname_nt_type is table of hooks.hook_name%TYPE; + l_hname_nt hname_nt_type; + l_hooks_rec hooks%ROWTYPE; + l_err_msgSAVE core_data.g_run_rec.error_message%TYPE; + l_err_msgTEST core_data.g_run_rec.error_message%TYPE; + num_recs number; + begin + wtplsql.g_DBOUT := 'HOOK:PACKAGE BODY'; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Setup'; + g_run_assert_hook := FALSE; + select count(*) into num_recs from hooks; + wt_assert.isnotnull + (msg_in => 'Number of records before setup' + ,check_this_in => num_recs); + -------------------------------------- WTPLSQL Testing -- + l_hname_nt := hname_nt_type('before_test_all' + ,'before_test_run' + ,'execute_test_runner' + ,'after_assertion' + ,'after_test_run' + ,'after_test_all' + ,'ad_hoc_report'); + select * bulk collect into l_hooks_ntSAVE from hooks; + delete from hooks; + -------------------------------------- WTPLSQL Testing -- + l_hooks_rec.seq := 1; + l_hooks_rec.description := 'WTPLSQL Self Test'; + for i in 1 .. l_hname_nt.COUNT + loop + l_hooks_rec.hook_name := l_hname_nt(i); + l_hooks_rec.run_string := 'begin hook.test_hook(''' || + l_hname_nt(i) || '''); end;'; + insert into hooks values l_hooks_rec; + end loop; + commit; + -------------------------------------- WTPLSQL Testing -- + init; + wt_assert.eqqueryvalue + (msg_in => 'Confirm number of test records' + ,check_query_in => 'select count(*) from hooks' + ,against_value_in => l_hname_nt.COUNT); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'All Hooks On'; + for i in 1 .. l_hname_nt.COUNT + loop + g_test_hook_msg := ''; + g_run_assert_hook := TRUE; + hook.run(l_hname_nt(i)); + g_run_assert_hook := FALSE; + wt_assert.eq + (msg_in => l_hname_nt(i) || ' is active' + ,check_this_in => g_test_hook_msg + ,against_this_in => l_hname_nt(i)); + end loop; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'All Hooks Off'; + delete from hooks; + commit; + init; + wt_assert.eqqueryvalue + (msg_in => 'Confirm number of test records 2' + ,check_query_in => 'select count(*) from hooks' + ,against_value_in => 0); + -------------------------------------- WTPLSQL Testing -- + for i in 1 .. l_hname_nt.COUNT + loop + g_test_hook_msg := ''; + hook.run(l_hname_nt(i)); + wt_assert.isnull + (msg_in => l_hname_nt(i) || ' is not active' + ,check_this_in => g_test_hook_msg); + end loop; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Hooks Sad Path 1'; + l_hooks_rec.seq := 1; + l_hooks_rec.description := 'WTPLSQL Self Test'; + l_hooks_rec.hook_name := 'ad_hoc_report'; + l_hooks_rec.run_string := 'declare n1 number; begin n1:=1/0; end;'; + insert into hooks values l_hooks_rec; + commit; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eqqueryvalue + (msg_in => 'Confirm number of test records' + ,check_query_in => 'select count(*) from hooks' + ,against_value_in => 1); + init; + wt_assert.isnull + (msg_in => 'core_data.g_run_rec.error_message' + ,check_this_in => core_data.g_run_rec.error_message); + -------------------------------------- WTPLSQL Testing -- + l_err_msgSAVE := core_data.g_run_rec.error_message; + core_data.g_run_rec.error_message := ''; + wt_assert.raises + (msg_in => 'Test Exception Handler' + ,check_call_in => 'begin hook.run(''ad_hoc_report''); end;' + ,against_exc_in => ''); + l_err_msgTEST := core_data.g_run_rec.error_message; + core_data.g_run_rec.error_message := l_err_msgSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnotnull + (msg_in => 'Confirm core_data.run_error' + ,check_this_in => l_err_msgTEST); + wt_assert.this + (msg_in => 'l_err_msgTEST like ''Hook Error in "ad_hoc_report", SEQ 1.' || '\n' || + 'ORA-01476: divisor is equal to zero' || '\n' || + 'ORA-06512: at line 1%''' + ,check_this_in => l_err_msgTEST like 'Hook Error in "ad_hoc_report", SEQ 1.' || CHR(10) || + 'ORA-01476: divisor is equal to zero' || CHR(10) || + 'ORA-06512: at line 1%'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Teardown'; + delete from hooks; + forall i in 1 .. l_hooks_ntSAVE.COUNT + insert into hooks values l_hooks_ntSAVE(i); + commit; + init; + wt_assert.eqqueryvalue + (msg_in => 'Number of records after teardown' + ,check_query_in => 'select count(*) from hooks' + ,against_value_in => num_recs); + g_run_assert_hook := TRUE; + end WTPLSQL_RUN; + +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +------------------------------------------------------------ +------%WTPLSQL_begin_ignore_lines%------ Can't Test This +begin + init; +end hook; +/ + +set define on diff --git a/wtpsrc/WTP/HOOK.pspec b/wtpsrc/WTP/HOOK.pspec new file mode 100644 index 0000000..5893fbd --- /dev/null +++ b/wtpsrc/WTP/HOOK.pspec @@ -0,0 +1,48 @@ + +-- +-- Create WTP.HOOK Package +-- + +set define off + + +--DBMS_METADATA:WTP.HOOK + + CREATE OR REPLACE EDITIONABLE PACKAGE "WTP"."HOOK" + authid definer +as + + procedure run + (in_hook_name in varchar2); + + procedure init; + + -- WtPLSQL Self Test Procedures + -- + -- alter system set PLSQL_CCFLAGS = + -- 'WTPLSQL_SELFTEST:TRUE' + -- scope=BOTH; + -- + $IF $$WTPLSQL_SELFTEST + $THEN + g_run_assert_hook boolean := TRUE; + g_test_hook_msg varchar2(4000); + -- + procedure test_hook + (in_msg in varchar2); + procedure WTPLSQL_RUN; + $END + +end hook; +/ + + +-- Grants + +grant EXECUTE on "WTP"."HOOK" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsrc/WTP/HOOKS.cdl b/wtpsrc/WTP/HOOKS.cdl new file mode 100644 index 0000000..1e597b9 --- /dev/null +++ b/wtpsrc/WTP/HOOKS.cdl @@ -0,0 +1,59 @@ + +-- +-- Consolidated Data Load script for WTP.HOOKS data +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +prompt +prompt Disable Triggers and Foreign Keys +declare + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql || ';'); + execute immediate in_sql; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end run_sql; +begin + for buff in (select owner, trigger_name + from dba_triggers + where table_owner = 'WTP' + and table_name = 'HOOKS' + order by owner, trigger_name) + loop + run_sql('alter trigger "' || buff.owner || '"' || + '."' || buff.trigger_name || '" DISABLE'); + end loop; + for buff in (select constraint_name + from dba_constraints + where constraint_type = 'R' + and owner = 'WTP' + and table_name = 'HOOKS' + order by owner, constraint_name) + loop + run_sql('alter table "WTP"."HOOKS"' || + ' DISABLE constraint "' || buff.constraint_name || '"'); + end loop; +end; +/ + +-- NOTE: Additional file extensions for SQL*Loader include +-- .bad - Bad Records +-- .dsc - Discard Records +-- .log - Log File + +prompt +prompt sqlldr_control=WTP/HOOKS.ctl +host sqlldr '&1.' control=WTP/HOOKS.ctl data=WTP/HOOKS.csv log=WTP/HOOKS.log silent=HEADER,FEEDBACK + +begin + if '&_RC.' != '0' then + raise_application_error(-20000, 'Control file "WTP/HOOKS.ctl" returned error: &_RC.'); + end if; +end; +/ + diff --git a/wtpsrc/WTP/HOOKS.csv b/wtpsrc/WTP/HOOKS.csv new file mode 100644 index 0000000..d06ea00 --- /dev/null +++ b/wtpsrc/WTP/HOOKS.csv @@ -0,0 +1,6 @@ +"HOOK_NAME","SEQ","RUN_STRING","DESCRIPTION" +"ad_hoc_report",20,"begin wtp.wt_ad_hoc_report; end;", +"after_test_all",20,"begin wtp.wt_core_report.after_test_all; end;", +"after_test_run",20,"begin wtp.wt_core_report.dbms_out(in_detail_level => 10); end;", +"before_test_all",20,"begin wtp.wt_core_report.before_test_all; end;", +"execute_test_runner",20,"begin wtp.wt_execute_test_runner; end;", diff --git a/wtpsrc/WTP/HOOKS.ctl b/wtpsrc/WTP/HOOKS.ctl new file mode 100644 index 0000000..8bfeae8 --- /dev/null +++ b/wtpsrc/WTP/HOOKS.ctl @@ -0,0 +1,10 @@ +OPTIONS (SKIP=1) +LOAD DATA +APPEND INTO TABLE "WTP"."HOOKS" +FIELDS CSV WITH EMBEDDED +TRAILING NULLCOLS + (HOOK_NAME CHAR(20) + ,SEQ FLOAT EXTERNAL + ,RUN_STRING CHAR(4000) + ,DESCRIPTION CHAR(1000) + ) diff --git a/wtpsrc/WTP/HOOKS.tab b/wtpsrc/WTP/HOOKS.tab new file mode 100644 index 0000000..1c179e3 --- /dev/null +++ b/wtpsrc/WTP/HOOKS.tab @@ -0,0 +1,54 @@ + +-- +-- Create WTP.HOOKS Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:WTP.HOOKS + + CREATE TABLE "WTP"."HOOKS" + ( "HOOK_NAME" VARCHAR2(20 BYTE) CONSTRAINT "WT_HOOKS_NN1" NOT NULL ENABLE, + "SEQ" NUMBER(2,0) CONSTRAINT "WT_HOOKS_NN2" NOT NULL ENABLE, + "RUN_STRING" VARCHAR2(4000 BYTE) CONSTRAINT "WT_HOOKS_NN3" NOT NULL ENABLE, + "DESCRIPTION" VARCHAR2(1000 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "WTP"."HOOKS" ADD CONSTRAINT "HOOKS_CK1" CHECK ( hook_name in +('before_test_all' +,'before_test_run' +,'execute_test_runner' +,'after_assertion' +,'after_test_run' +,'after_test_all' +,'ad_hoc_report') ) ENABLE; +ALTER TABLE "WTP"."HOOKS" ADD CONSTRAINT "HOOKS_CK2" CHECK (seq > 0) ENABLE; +ALTER TABLE "WTP"."HOOKS" ADD CONSTRAINT "HOOKS_PK" PRIMARY KEY ("HOOK_NAME", "SEQ") + USING INDEX ENABLE; + +-- Comments + +--DBMS_METADATA:WTP.HOOKS + + COMMENT ON COLUMN "WTP"."HOOKS"."HOOK_NAME" IS 'Primary Key for each Hook Name'; + COMMENT ON COLUMN "WTP"."HOOKS"."SEQ" IS 'Primary Key for the sequence of the Hook'; + COMMENT ON COLUMN "WTP"."HOOKS"."RUN_STRING" IS 'Procedure Name or Un-named PL/SQL Block for EXECUTE IMMEDIATE'; + COMMENT ON COLUMN "WTP"."HOOKS"."DESCRIPTION" IS 'Description of this Hook.'; + COMMENT ON TABLE "WTP"."HOOKS" IS 'wtPLSQL Hooks.'; + + +-- Grants +grant DELETE on "WTP"."HOOKS" to "PUBLIC"; +grant INSERT on "WTP"."HOOKS" to "PUBLIC"; +grant SELECT on "WTP"."HOOKS" to "PUBLIC"; +grant UPDATE on "WTP"."HOOKS" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsrc/WTP/JUNIT_CORE_REPORT.pbody b/wtpsrc/WTP/JUNIT_CORE_REPORT.pbody new file mode 100644 index 0000000..48b2d10 --- /dev/null +++ b/wtpsrc/WTP/JUNIT_CORE_REPORT.pbody @@ -0,0 +1,248 @@ + +-- +-- Create WTP.JUNIT_CORE_REPORT Package Body +-- + +set define off + + +--DBMS_METADATA:WTP.JUNIT_CORE_REPORT + + CREATE OR REPLACE EDITIONABLE PACKAGE BODY "WTP"."JUNIT_CORE_REPORT" +as + + +---------------------- +-- PRivate Procedures +---------------------- + + +------------------------------------------------------------ +-- Print to DBMS_OUTPUT +procedure p + (in_line in varchar2) +is +begin + if g_in_process + then + vc_aa(vc_aa.COUNT + 1) := in_line; + else + dbms_output.put_line(in_line); + end if; +end p; + + +------------------------------------------------------------ +-- XML Escape +function xe + (in_txt in varchar2) + return varchar2 +is +begin + return replace + (replace + (replace + (replace + (replace + (in_txt + ,'<','<') -- Less Than + ,'>','>') -- Greater Than + ,'&','&') -- Ampersand + ,'''',''') -- Apostrophe + ,'"','"'); -- Quotation Mark +end xe; + + +--------------------- +-- Public Procedures +--------------------- + + +------------------------------------------------------------ +procedure xml_header +is +begin + p(''); + p(''); + p(''); + p(''); + p(''); +end xml_header; + + +------------------------------------------------------------ +procedure xml_body +is + l_rec core_data.results_rec_type; + l_testcase core_data.long_name; + l_classname varchar2(4000); + single_line_save boolean; +begin + single_line_save := wt_core_report.g_single_line_output; + wt_core_report.g_single_line_output := TRUE; + if core_data.g_run_rec.dbout_name is not null + then + l_classname := xe(core_data.g_run_rec.dbout_owner) || + '.' || xe(core_data.g_run_rec.dbout_name) || + ':' || xe(replace(core_data.g_run_rec.dbout_type,' ','_')); + end if; + if core_data.g_tcases_aa.COUNT > 0 + then + --------------------- + -- Test Suite Header + p(' ' ); + l_testcase := core_data.g_tcases_aa.FIRST; + loop + -------------------- + -- Test Case Header + p(' ' ); + if core_data.g_tcases_aa(l_testcase).asrt_fail > 0 + or ( core_data.g_run_rec.error_message is not null + and l_testcase = core_data.g_results_nt(core_data.g_results_nt.COUNT).testcase) + then + ----------------------- + -- Short Error Message + if core_data.g_run_rec.error_message is not null + and l_testcase = core_data.g_results_nt(core_data.g_results_nt.COUNT).testcase + then + p(' ' ); + else + p(' ' ); + end if; + p(' '); + p(' '); + ----------------------- + end if; + p(' '); + -------------------- + exit when l_testcase = core_data.g_tcases_aa.LAST; + l_testcase := core_data.g_tcases_aa.NEXT(l_testcase); + end loop; + p(' '); + --------------------- + end if; + wt_core_report.g_single_line_output := single_line_save; +end xml_body; + + +------------------------------------------------------------ +procedure xml_trailer +is +begin + p(''); +end xml_trailer; + + +------------------------------------------------------------ +-- This can be used as an +procedure show_current +is +begin + -- + if not g_in_process + then + xml_header; + end if; + -- + xml_body; + -- + if not g_in_process + then + xml_trailer; + end if; + -- +end show_current; + + +------------------------------------------------------------ +procedure before_test_all +is +begin + vc_aa.DELETE; + g_in_process := TRUE; + xml_header; +end before_test_all; + + +------------------------------------------------------------ +procedure after_test_all +is +begin + xml_trailer; + for i in 1 .. vc_aa.COUNT + loop + dbms_output.put_line(vc_aa(i)); + end loop; + g_in_process := FALSE; +end after_test_all; + + +------------------------------------------------------------ +procedure insert_hooks +is +begin + delete_hooks; + insert into hooks (hook_name, seq, run_string) + values ('before_test_all', 20, 'begin wtp.junit_core_report.before_test_all; end;'); + insert into hooks (hook_name, seq, run_string) + values ('after_test_run', 20, 'begin wtp.junit_core_report.show_current; end;'); + insert into hooks (hook_name, seq, run_string) + values ('after_test_all', 20, 'begin wtp.junit_core_report.after_test_all; end;'); + commit; + hook.init; +end insert_hooks; + + +------------------------------------------------------------ +procedure delete_hooks +is +begin + delete from hooks where run_string like '%wtp.junit_core_report.%'; + dbms_output.put_line(SQL%ROWCOUNT || ' "junit_core_report" rows deleted from HOOKS table.'); + hook.init; + commit; +end delete_hooks; + + +end junit_core_report; +/ + +set define on diff --git a/wtpsrc/WTP/JUNIT_CORE_REPORT.pspec b/wtpsrc/WTP/JUNIT_CORE_REPORT.pspec new file mode 100644 index 0000000..09e3b23 --- /dev/null +++ b/wtpsrc/WTP/JUNIT_CORE_REPORT.pspec @@ -0,0 +1,47 @@ + +-- +-- Create WTP.JUNIT_CORE_REPORT Package +-- + +set define off + + +--DBMS_METADATA:WTP.JUNIT_CORE_REPORT + + CREATE OR REPLACE EDITIONABLE PACKAGE "WTP"."JUNIT_CORE_REPORT" + authid definer +as + + g_in_process boolean := FALSE; + + TYPE vc_aa_type is table of varchar2(4000) index by pls_integer; + vc_aa vc_aa_type; + + procedure xml_header; + + procedure xml_body; + + procedure xml_trailer; + + procedure before_test_all; + + procedure show_current; + + procedure after_test_all; + + procedure insert_hooks; + + procedure delete_hooks; + +end junit_core_report; +/ + + +-- Grants +grant EXECUTE on "WTP"."JUNIT_CORE_REPORT" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsrc/WTP/WTPLSQL.pbody b/wtpsrc/WTP/WTPLSQL.pbody new file mode 100644 index 0000000..72f7d8e --- /dev/null +++ b/wtpsrc/WTP/WTPLSQL.pbody @@ -0,0 +1,634 @@ + +-- +-- Create WTP.WTPLSQL Package Body +-- + +set define off + + +--DBMS_METADATA:WTP.WTPLSQL + + CREATE OR REPLACE EDITIONABLE PACKAGE BODY "WTP"."WTPLSQL" +as + + $IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ + $THEN + TYPE test_all_aa_type is table of varchar2(400) index by varchar2(400); + test_all_aa test_all_aa_type; + wtplsql_skip_test boolean := FALSE; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +---------------------- +-- Private Procedures +---------------------- + + +------------------------------------------------------------ +-- This procedure is separated for internal WTPLSQL testing +procedure check_runner +is + l_package_check number; +begin + -- These RAISEs can be captured because the Test Runs Record is set. + -- Check for NULL Runner Name + if core_data.g_run_rec.test_runner_name is null + then + raise_application_error (-20001, 'TEST_RUNNER_NAME is null'); + end if; + -- Check for Valid Runner Name + select count(*) into l_package_check + from wt_qual_test_runners_vw + where owner = core_data.g_run_rec.test_runner_owner + and package_name = core_data.g_run_rec.test_runner_name; + if l_package_check = 0 + then + raise_application_error (-20002, 'TEST_RUNNER_NAME Procedure "' || + core_data.g_run_rec.test_runner_name || + '.' || C_RUNNER_ENTRY_POINT || + '" is not valid' ); + end if; +end check_runner; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_check_runner + is + l_run_recSAVE core_data.run_rec_type; + l_msg_in varchar2(4000); + l_err_in varchar2(4000); + -------------------------------------- WTPLSQL Testing -- + procedure l_test_sqlerrm is begin + -- Restore the core_data.g_run_rec + core_data.g_run_rec := l_run_recSAVE; + wt_assert.eq + (msg_in => l_msg_in + ,check_this_in => SQLERRM + ,against_this_in => l_err_in); + end l_test_sqlerrm; + begin + -- Save CORE_DATA data + l_run_recSAVE := core_data.g_run_rec; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'CHECK_RUNNER Happy Path 1'; + wt_assert.eq + (msg_in => 'Confirm TEST_RUNNER_OWNER' + ,check_this_in => core_data.g_run_rec.test_runner_owner + ,against_this_in => USER); + core_data.g_run_rec.test_runner_name := 'WTPLSQL'; + l_msg_in := 'Valid TEST_RUNNER_NAME'; + l_err_in := 'ORA-0000: normal, successful completion'; + begin + check_runner; + l_test_sqlerrm; + exception when others then + l_test_sqlerrm; + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'CHECK_RUNNER Sad Path 1'; + core_data.g_run_rec.test_runner_name := ''; + l_msg_in := 'Null TEST_RUNNER_NAME'; + l_err_in := 'ORA-20001: TEST_RUNNER_NAME is null'; + begin + check_runner; + l_test_sqlerrm; + exception when others then + -- This test is expected to throw an error + l_test_sqlerrm; + end; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'CHECK_RUNNER Sad Path 2'; + core_data.g_run_rec.test_runner_name := 'BOGUS'; + l_msg_in := 'Invalid TEST_RUNNER_NAME'; + l_err_in := 'ORA-20002: TEST_RUNNER_NAME Procedure "BOGUS.' || + C_RUNNER_ENTRY_POINT || '" is not valid'; + begin + check_runner; + l_test_sqlerrm; + exception when others then + l_test_sqlerrm; + end; + end t_check_runner; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure check_dbout +is + -- + -- https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements008.htm#SQLRF51129 + -- Within a namespace, no two objects can have the same name. The following + -- schema objects share one namespace: + -- -) Packages + -- -) Private synonyms + -- -) Sequences + -- -) Stand-alone procedures + -- -) Stand-alone stored functions + -- -) User-defined operators + -- -) User-defined types + -- -) Tables + -- -) Views + -- Each of the following schema objects has its own namespace: + -- -) Clusters + -- -) Constraints + -- -) Database triggers + -- -) Dimensions + -- -) Indexes + -- -) Materialized views (When you create a materialized view, the database + -- creates an internal table of the same name. This table has the same + -- namespace as the other tables in the schema. Therefore, a schema + -- cannot contain a table and a materialized view of the same name.) + -- -) Private database links + -- Because tables and sequences are in the same namespace, a table and a + -- sequence in the same schema cannot have the same name. However, tables + -- and indexes are in different namespaces. Therefore, a table and an index + -- in the same schema can have the same name. + -- Each schema in the database has its own namespaces for the objects it + -- contains. This means, for example, that two tables in different schemas + -- are in different namespaces and can have the same name. + -- Results are unknown if a Database Object Under Test has the same name in + -- different namespaces. + -- + l_dot_pos number; + l_cln_pos number; +begin + if g_DBOUT is null + then + return; + end if; + l_dot_pos := instr(g_DBOUT,'.'); + l_cln_pos := instr(g_DBOUT,':'); + begin + with q_main as ( + select obj.owner + ,obj.object_name + ,obj.object_type + from dba_objects obj + where obj.owner = core_data.g_run_rec.test_runner_owner + and ( ( -- No separators were given, assume USER is the owner. + -- No object type was given. This could throw TOO_MANY_ROWS. + l_dot_pos = 0 + and l_cln_pos = 0 + and obj.object_name = g_DBOUT ) + OR ( -- No object owner was given, assume USER is the owner. + l_dot_pos = 0 + and l_cln_pos != 0 + and obj.object_name = substr(g_DBOUT, 1, l_cln_pos-1) + and obj.object_type = substr(g_DBOUT, l_cln_pos+1, 512) ) ) + UNION ALL + select obj.owner + ,obj.object_name + ,obj.object_type + from dba_objects obj + where ( -- No object type was given. This could throw TOO_MANY_ROWS. + l_dot_pos != 0 + and l_cln_pos = 0 + and obj.owner = substr(g_DBOUT, 1, l_dot_pos-1) + and obj.object_name = substr(g_DBOUT, l_dot_pos+1, 512) ) + OR ( -- All separators were given + l_dot_pos != 0 + and l_cln_pos != 0 + and obj.owner = substr(g_DBOUT, 1, l_dot_pos-1) + and obj.object_name = substr(g_DBOUT, l_dot_pos+1, l_cln_pos-l_dot_pos-1) + and obj.object_type = substr(g_DBOUT, l_cln_pos+1, 512) ) + ) + select owner + ,object_name + ,object_type + into core_data.g_run_rec.dbout_owner + ,core_data.g_run_rec.dbout_name + ,core_data.g_run_rec.dbout_type + from q_main; + exception + when NO_DATA_FOUND + then + core_data.run_error('Unable to find database object "' || + g_DBOUT || '".' ); + return; + when TOO_MANY_ROWS + then + -- The SELECT INTO will load some values into these variables + -- when TOO_MANY_ROWS are selected. + core_data.g_run_rec.dbout_owner := ''; + core_data.g_run_rec.dbout_name := ''; + core_data.g_run_rec.dbout_type := ''; + core_data.run_error('Found too many database objects "' || + g_DBOUT || '".' ); + return; + when OTHERS + then + core_data.g_run_rec.dbout_owner := ''; + core_data.g_run_rec.dbout_name := ''; + core_data.g_run_rec.dbout_type := ''; + core_data.run_error('Error finding database object: ' || SQLERRM); + return; + end; + -- +end check_dbout; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_check_dbout + is + l_run_recSAVE core_data.run_rec_type; + l_run_recTEST core_data.run_rec_type; + procedure clear_run_rec is begin + core_data.g_run_rec.dbout_owner := ''; + core_data.g_run_rec.dbout_name := ''; + core_data.g_run_rec.dbout_type := ''; + core_data.g_run_rec.error_message := ''; + end clear_run_rec; + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Find DBOUT Happy Path 1'; + l_run_recSAVE := core_data.g_run_rec; + clear_run_rec; + g_DBOUT := ''; + check_dbout; + l_run_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_run_recSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull( + msg_in => 'l_run_recTEST.dbout_owner', + check_this_in => l_run_recTEST.dbout_owner); + wt_assert.isnull( + msg_in => 'l_run_recTEST.dbout_name', + check_this_in => l_run_recTEST.dbout_name); + wt_assert.isnull( + msg_in => 'l_run_recTEST.dbout_type', + check_this_in => l_run_recTEST.dbout_type); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Find DBOUT Happy Path 2'; + l_run_recSAVE := core_data.g_run_rec; + clear_run_rec; + g_DBOUT := 'SYS.DUAL'; + check_dbout; + l_run_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_run_recSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq( + msg_in => 'l_run_recTEST.dbout_owner', + check_this_in => l_run_recTEST.dbout_owner, + against_this_in => 'SYS'); + wt_assert.eq( + msg_in => 'l_run_recTEST.dbout_name', + check_this_in => l_run_recTEST.dbout_name, + against_this_in => 'DUAL'); + wt_assert.eq( + msg_in => 'l_run_recTEST.dbout_type', + check_this_in => l_run_recTEST.dbout_type, + against_this_in => 'TABLE'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Find DBOUT Happy Path 3'; + l_run_recSAVE := core_data.g_run_rec; + clear_run_rec; + g_DBOUT := 'WTPLSQL:PACKAGE BODY'; + check_dbout; + l_run_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_run_recSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq( + msg_in => 'l_run_recTEST.dbout_owner', + check_this_in => l_run_recTEST.dbout_owner, + against_this_in => USER); + wt_assert.eq( + msg_in => 'l_run_recTEST.dbout_name', + check_this_in => l_run_recTEST.dbout_name, + against_this_in => 'WTPLSQL'); + wt_assert.eq( + msg_in => 'l_run_recTEST.dbout_type', + check_this_in => l_run_recTEST.dbout_type, + against_this_in => 'PACKAGE BODY'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Find DBOUT Happy Path 4'; + l_run_recSAVE := core_data.g_run_rec; + clear_run_rec; + g_DBOUT := 'WT_EXECUTE_TEST_RUNNER'; + check_dbout; + l_run_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_run_recSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq( + msg_in => 'l_run_recTEST.dbout_owner', + check_this_in => l_run_recTEST.dbout_owner, + against_this_in => USER); + wt_assert.eq( + msg_in => 'l_run_recTEST.dbout_name', + check_this_in => l_run_recTEST.dbout_name, + against_this_in => 'WT_EXECUTE_TEST_RUNNER'); + wt_assert.eq( + msg_in => 'l_run_recTEST.dbout_type', + check_this_in => l_run_recTEST.dbout_type, + against_this_in => 'PROCEDURE'); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Find DBOUT Sad Path 1'; + l_run_recSAVE := core_data.g_run_rec; + clear_run_rec; + g_DBOUT := 'someone.bogus:thingy'; + check_dbout; + l_run_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_run_recSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull( + msg_in => 'l_run_recTEST.dbout_owner', + check_this_in => l_run_recTEST.dbout_owner); + wt_assert.isnull( + msg_in => 'l_run_recTEST.dbout_name', + check_this_in => l_run_recTEST.dbout_name); + wt_assert.isnull( + msg_in => 'l_run_recTEST.dbout_type', + check_this_in => l_run_recTEST.dbout_type); + wt_assert.isnotnull( + msg_in => 'l_run_recTEST.error_message', + check_this_in => l_run_recTEST.error_message); + wt_assert.eqqueryvalue ( + msg_in => 'l_run_recTEST.error_message', + check_query_in => 'select 1 from dual where ''' || + l_run_recTEST.error_message || + ''' like ''%Unable to find database object "' || + g_DBOUT || '".%''', + against_value_in => 1); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Find DBOUT Sad Path 2'; + l_run_recSAVE := core_data.g_run_rec; + clear_run_rec; + g_DBOUT := 'WTPLSQL'; + check_dbout; + g_DBOUT := ''; + l_run_recTEST := core_data.g_run_rec; + core_data.g_run_rec := l_run_recSAVE; + -------------------------------------- WTPLSQL Testing -- + wt_assert.isnull( + msg_in => 'l_run_recTEST.dbout_owner', + check_this_in => l_run_recTEST.dbout_owner); + wt_assert.isnull( + msg_in => 'l_run_recTEST.dbout_name', + check_this_in => l_run_recTEST.dbout_name); + wt_assert.isnull( + msg_in => 'l_run_recTEST.dbout_type', + check_this_in => l_run_recTEST.dbout_type); + wt_assert.eqqueryvalue ( + msg_in => 'l_run_recTEST.error_message', + check_query_in => 'select 1 from dual where ''' || + l_run_recTEST.error_message || + ''' like ''%Found too many database objects "WTPLSQL".%''', + against_value_in => 1); + end t_check_dbout; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--------------------- +-- Public Procedures +--------------------- + + +------------------------------------------------------------ +function get_runner_entry_point + return varchar2 +is +begin + return C_RUNNER_ENTRY_POINT; +end get_runner_entry_point; + +------------------------------------------------------------ +function show_version + return varchar2 +is + ret_str varchar2(4000); +begin + for buff in ( + select component, version + from wt_versions t1 + where (component, install_tstmp) in ( + select t2.component, max(t2.install_tstmp) + from wt_versions t2 + group by t2.component) + and action != 'REMOVE' + order by install_tstmp ) + loop + ret_str := ret_str || buff.component || ' ' || + trim(to_char(buff.version,'9999.099')) || ', '; + end loop; + return substr(ret_str, 1, length(ret_str)-2); +exception when NO_DATA_FOUND +then + return ''; +end show_version; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_show_version + is + existing_version varchar2(4000); + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Show Version Setup'; + existing_version := show_version; + wt_assert.isnotnull ( + msg_in => 'Saved Original Version', + check_this_in => existing_version); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Show Version Happy Path 1'; + insert into wt_versions (component, version, action) + values ('TESTING', 1.01, 'INSTALL'); + wt_assert.isnotnull ( + msg_in => 'Show New Version', + check_this_in => show_version); + wt_assert.this ( + msg_in => 'Test New Version', + check_this_in => regexp_like(show_version, 'TESTING 1[.]010')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Show Version Happy Path 2'; + insert into wt_versions (component, version, action) + values ('TESTING', 1.02, 'UPDATE'); + wt_assert.isnotnull ( + msg_in => 'Show New Version', + check_this_in => show_version); + wt_assert.this ( + msg_in => 'Test New Version', + check_this_in => regexp_like(show_version, 'TESTING 1[.]020')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Show Version Happy Path 3'; + insert into wt_versions (component, version, action) + values ('TESTING', 1.02, 'REMOVE'); + wt_assert.isnotnull ( + msg_in => 'Show New Version', + check_this_in => show_version); + wt_assert.this ( + msg_in => 'Test New Version', + check_this_in => not regexp_like(show_version, 'TESTING')); + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Show Version Teardown'; + rollback; + delete from wt_versions where component = 'TESTING'; + wt_assert.eq ( + msg_in => 'Records Deleted', + check_this_in => SQL%ROWCOUNT, + against_this_in => 0); + commit; + -------------------------------------- WTPLSQL Testing -- + wt_assert.eq ( + msg_in => 'Return to Existing Version', + check_this_in => show_version, + against_this_in => existing_version); + end t_show_version; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure test_run + (in_package_name in varchar2) +is +begin + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + if wtplsql_skip_test then + test_all_aa(in_package_name) := 'X'; + return; -- Avoid running the TEST_RUN procedure for some self-tests + end if; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + -- Primary Initialize + core_data.init1(in_package_name); + g_DBOUT := ''; + wt_assert.reset_globals; + -- Reset the Test Runs Record before checking anything + check_runner; + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + -- This will avoid running the hook for some self-tests + if NOT wtplsql_skip_test then + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + hook.run('before_test_run'); + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + end if; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + -- Secondary Initialize + core_data.init2; + g_DBOUT := ''; + -- + hook.run('execute_test_runner'); + -- + -- Primary Finalize + wt_assert.g_testcase := ''; + check_dbout; + core_data.final1; + g_DBOUT := ''; + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + -- This will avoid running the hook for some self-tests + if NOT wtplsql_skip_test then + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + hook.run('after_test_run'); + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + end if; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- +end test_run; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_test_run + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Test Run Testing'; + wt_assert.isnotnull ( + msg_in => 'Not Testing Test Run', + check_this_in => 'Too complicated because testing occurs while the this procedure is actively running.'); + end t_test_run; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +------------------------------------------------------------ +procedure test_all +is + TYPE runners_nt_type is table of varchar2(128); + l_runners_nt runners_nt_type; +begin + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + -- This will avoid running the hook for some self-tests + if NOT wtplsql_skip_test then + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + hook.run('before_test_all'); + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + end if; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + select object_name + bulk collect into l_runners_nt + from user_procedures t1 + where procedure_name = C_RUNNER_ENTRY_POINT + and object_type = 'PACKAGE' + group by object_name + order by object_name; + for i in 1 .. l_runners_nt.COUNT + loop + test_run(l_runners_nt(i)); + end loop; + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + -- This will avoid running the hook for some self-tests + if NOT wtplsql_skip_test then + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + hook.run('after_test_all'); + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + end if; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- +end test_all; + +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure t_test_all + is + begin + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'TEST_ALL Happy Path'; + test_all_aa.DELETE; + wtplsql_skip_test := TRUE; + -- TEST_ALL will populate the test_all_aa array + wtplsql.test_all; + wtplsql_skip_test := FALSE; + -- This package should be in the test_all_aa array + -------------------------------------- WTPLSQL Testing -- + wt_assert.this ( + msg_in => 'test_all_aa.EXISTS(''WTPLSQL'')', + check_this_in => test_all_aa.EXISTS( 'WTPLSQL' )); + end t_test_all; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- + + +--==============================================================-- +$IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ +$THEN + procedure WTPLSQL_RUN + is + begin + -------------------------------------- WTPLSQL Testing -- + -- Can't set wtplsql.g_DBOUT because it is used for Unit Testing + --wtplsql.g_DBOUT := 'WTPLSQL:PACKAGE BODY'; + t_check_runner; + t_check_dbout; + t_show_version; + t_test_run; + t_test_all; + end; +$END ----------------%WTPLSQL_end_ignore_lines%---------------- +--==============================================================-- + + +end wtplsql; +/ + +set define on diff --git a/wtpsrc/WTP/WTPLSQL.pspec b/wtpsrc/WTP/WTPLSQL.pspec new file mode 100644 index 0000000..948a87e --- /dev/null +++ b/wtpsrc/WTP/WTPLSQL.pspec @@ -0,0 +1,71 @@ + +-- +-- Create WTP.WTPLSQL Package +-- + +set define off + + +--DBMS_METADATA:WTP.WTPLSQL + + CREATE OR REPLACE EDITIONABLE PACKAGE "WTP"."WTPLSQL" + authid definer +as + + C_RUNNER_ENTRY_POINT constant varchar2(30) := 'WTPLSQL_RUN'; + + function get_runner_entry_point + return varchar2 deterministic; + + function show_version + return varchar2; + + -- Database Object Under Test. + -- Modify as required + g_DBOUT varchar2(128); + + -- Run a single test runner in the current schema + -- Returns after test runner is complete + procedure test_run + (in_package_name in varchar2); + + -- Run all test runners in the current schema + -- Returns after all test runners are complete + procedure test_all; + + -- WtPLSQL Self Test Procedures + -- + -- alter system set PLSQL_CCFLAGS = + -- 'WTPLSQL_ENABLE:TRUE, WTPLSQL_SELFTEST:TRUE' + -- scope=BOTH; + -- + -- begin + -- dbms_utility.compile_schema('WTP',TRUE,FALSE); + -- end; + -- / + -- + $IF $$WTPLSQL_SELFTEST + $THEN + procedure WTPLSQL_RUN; + $END + +end wtplsql; +/ + + +-- Grants +grant EXECUTE on "WTP"."WTPLSQL" to "PUBLIC"; + + +-- Synonyms + +--DBMS_METADATA:PUBLIC.WTPLSQL + + CREATE OR REPLACE NONEDITIONABLE PUBLIC SYNONYM "WTPLSQL" FOR "WTP"."WTPLSQL"; + +--DBMS_METADATA:PUBLIC.WT_WTPLSQL + + CREATE OR REPLACE NONEDITIONABLE PUBLIC SYNONYM "WT_WTPLSQL" FOR "WTP"."WTPLSQL"; + + +set define on diff --git a/wtpsrc/WTP/WT_AD_HOC_REPORT.proc b/wtpsrc/WTP/WT_AD_HOC_REPORT.proc new file mode 100644 index 0000000..8591fb4 --- /dev/null +++ b/wtpsrc/WTP/WT_AD_HOC_REPORT.proc @@ -0,0 +1,39 @@ + +-- +-- Create WTP.WT_AD_HOC_REPORT Procedure +-- + +set define off + + +--DBMS_METADATA:WTP.WT_AD_HOC_REPORT + + CREATE OR REPLACE EDITIONABLE PROCEDURE "WTP"."WT_AD_HOC_REPORT" + authid current_user + -- AUTHID CURRENT_USER is required for assertions with + -- dynamic PL/SQL execution. +is +begin + dbms_output.put_line(wt_assert.g_rec.last_msg); + dbms_output.put_line(' Assertion ' || wt_assert.g_rec.last_assert || + case wt_assert.last_pass + when TRUE then ' PASSED.' + else ' FAILED.' + end); + if wt_assert.g_testcase is not null + then + dbms_output.put_line(' Testcase: ' || wt_assert.g_testcase); + end if; + dbms_output.put_line( ' ' || wt_assert.g_rec.last_details); +end wt_ad_hoc_report; +/ + + +-- Grants +grant EXECUTE on "WTP"."WT_AD_HOC_REPORT" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/src/core/wt_assert.pkb b/wtpsrc/WTP/WT_ASSERT.pbody similarity index 94% rename from src/core/wt_assert.pkb rename to wtpsrc/WTP/WT_ASSERT.pbody index 30db4ac..302cef9 100644 --- a/src/core/wt_assert.pkb +++ b/wtpsrc/WTP/WT_ASSERT.pbody @@ -1,13 +1,14 @@ -create or replace package body wt_assert is - -- See (public) RESET_GLOBALS procedure for default global values - TYPE g_rec_type is record - (last_pass boolean - ,raise_exception boolean - ,last_assert wt_results.assertion%TYPE - ,last_msg wt_results.message%TYPE - ,last_details wt_results.details%TYPE); - g_rec g_rec_type; +-- +-- Create WTP.WT_ASSERT Package Body +-- + +set define off + + +--DBMS_METADATA:WTP.WT_ASSERT + + CREATE OR REPLACE EDITIONABLE PACKAGE BODY "WTP"."WT_ASSERT" is $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ temp_rowid1 CONSTANT rowid := chartorowid('AAAFd1AAFAAAABSAA/'); @@ -94,54 +95,159 @@ $END ----------------%WTPLSQL_end_ignore_lines%---------------- procedure process_assertion is begin - -$IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ - if not wtplsql_skip_save then -$END ----------------%WTPLSQL_end_ignore_lines%---------------- - wt_result.save - (in_assertion => g_rec.last_assert - ,in_status => case g_rec.last_pass - when TRUE then C_PASS - else C_FAIL - end - ,in_details => g_rec.last_details - ,in_testcase => g_testcase - ,in_message => g_rec.last_msg); -$IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + if core_data.g_run_rec.test_runner_name is null + then + hook.run('ad_hoc_report'); + return; end if; -$END ----------------%WTPLSQL_end_ignore_lines%---------------- - - if g_rec.raise_exception and not g_rec.last_pass + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + if not wtplsql_skip_save then + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + core_data.add + (in_testcase => g_testcase + ,in_assertion => g_rec.last_assert + ,in_pass => g_rec.last_pass + ,in_details => g_rec.last_details + ,in_message => g_rec.last_msg); + -- + $IF $$WTPLSQL_SELFTEST $THEN ------%WTPLSQL_begin_ignore_lines%------ + end if; + $END ----------------%WTPLSQL_end_ignore_lines%---------------- + -- + hook.run('after_assertion'); + if g_rec.raise_exception + and not g_rec.last_pass then - raise_application_error(-20003, wt_text_report.format_test_result - (in_assertion => g_rec.last_assert - ,in_status => C_FAIL - ,in_details => g_rec.last_details - ,in_testcase => g_testcase - ,in_message => g_rec.last_msg) ); + raise_application_error(-20004, g_rec.last_msg || CHR(10) || + ' Assertion ' || g_rec.last_assert || ' Failed.' || CHR(10) || + ' Testcase: ' || g_testcase || CHR(10) || + ' ' || g_rec.last_details ); end if; - end process_assertion; $IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ $THEN procedure t_process_assertion is + l_test_runner_nameSAVE core_data.g_run_rec.test_runner_name%TYPE; + l_msg varchar2(100) := 'Check Exception Processing'; + l_line varchar2(32767); + l_status pls_integer; begin -------------------------------------- WTPLSQL Testing -- - g_testcase := 'PROCESS_ASSERTION'; + loop + dbms_output.get_line(l_line, l_status); + exit when l_status = 1; + wt_assert.isnull + (msg_in => 'Clear DBMS_OUTPUT Buffer' + ,check_this_in => l_line); + end loop; + -------------------------------------- WTPLSQL Testing -- + wt_assert.g_testcase := 'Ad Hoc Report Happy Path'; + g_rec.last_assert := 'THIS'; + g_rec.last_pass := TRUE; + g_rec.last_details := 'Expected "PASS" and got "PASS"'; + g_rec.last_msg := 'Ad Hoc Report Happy Path'; + g_rec.raise_exception := FALSE; + l_test_runner_nameSAVE := core_data.g_run_rec.test_runner_name; + core_data.g_run_rec.test_runner_name := ''; + begin + -------------------------------------- WTPLSQL Testing -- + process_assertion; -- Should not throw exception + core_data.g_run_rec.test_runner_name := l_test_runner_nameSAVE; + wt_assert.isnotnull + (msg_in => l_msg + ,check_this_in => 'Ad Hoc Report Exception Success'); + exception + -------------------------------------- WTPLSQL Testing -- + when OTHERS then + core_data.g_run_rec.test_runner_name := l_test_runner_nameSAVE; + wt_assert.isnull + (msg_in => l_msg + ,check_this_in => 'Ad Hoc Report Exception Failed'); + end; + -------------------------------------- WTPLSQL Testing -- + dbms_output.get_line(l_line, l_status); + wt_assert.eq + (msg_in => 'Ad Hoc Line 1 Status' + ,check_this_in => l_status + ,against_this_in => 0); + wt_assert.eq + (msg_in => 'Ad Hoc Line 1 Line' + ,check_this_in => l_line + ,against_this_in => 'Ad Hoc Report Happy Path'); + -------------------------------------- WTPLSQL Testing -- + dbms_output.get_line(l_line, l_status); + wt_assert.eq + (msg_in => 'Ad Hoc Line 2 Status' + ,check_this_in => l_status + ,against_this_in => 0); + wt_assert.eq + (msg_in => 'Ad Hoc Line 2 Line' + ,check_this_in => l_line + ,against_this_in => ' Assertion THIS PASSED.'); + -------------------------------------- WTPLSQL Testing -- + dbms_output.get_line(l_line, l_status); + wt_assert.eq + (msg_in => 'Ad Hoc Line 3 Status' + ,check_this_in => l_status + ,against_this_in => 0); + wt_assert.eq + (msg_in => 'Ad Hoc Line 3 Line' + ,check_this_in => l_line + ,against_this_in => ' Testcase: Ad Hoc Report Happy Path'); + -------------------------------------- WTPLSQL Testing -- + dbms_output.get_line(l_line, l_status); + wt_assert.eq + (msg_in => 'Ad Hoc Line 4 Status' + ,check_this_in => l_status + ,against_this_in => 0); + wt_assert.eq + (msg_in => 'Ad Hoc Line 4 Line' + ,check_this_in => l_line + ,against_this_in => ' Expected "PASS" and got "PASS"'); + -------------------------------------- WTPLSQL Testing -- + g_testcase := 'PROCESS_ASSERTION'; g_rec.last_assert := 'THIS'; g_rec.last_pass := FALSE; g_rec.last_details := 'Expected "PASS" and got "FAIL"'; g_rec.last_msg := 'Process Assertion Forced Failure'; g_rec.raise_exception := TRUE; - wtplsql_skip_save := TRUE; - process_assertion; -- Should throw exception - wtplsql_skip_save := FALSE; - -------------------------------------- WTPLSQL Testing -- - exception - when ASSERT_FAILURE_EXCEPTION then - wtplsql_skip_save := FALSE; + begin + -------------------------------------- WTPLSQL Testing -- + wtplsql_skip_save := TRUE; + process_assertion; -- Should throw exception + wtplsql_skip_save := FALSE; + wt_assert.g_testcase := 'Test Process Assertion'; + wt_assert.isnull + (msg_in => l_msg + ,check_this_in => 'Exception missing, should not have arrived here'); + exception + -------------------------------------- WTPLSQL Testing -- + when ASSERT_FAILURE_EXCEPTION then + wtplsql_skip_save := FALSE; + wt_assert.g_testcase := 'Test Process Assertion'; + wt_assert.eq + (msg_in => l_msg + ,check_this_in => SQLERRM + ,against_this_in => 'ORA-20004: Process Assertion Forced Failure' || CHR(10) || + ' Assertion THIS Failed.' || CHR(10) || + ' Testcase: PROCESS_ASSERTION' || CHR(10) || + ' Expected "PASS" and got "FAIL"'); + -------------------------------------- WTPLSQL Testing -- + when OTHERS then + wtplsql_skip_save := FALSE; + wt_assert.g_testcase := 'Test Process Assertion'; + wt_assert.isnull + (msg_in => l_msg + ,check_this_in => 'Incorrect Exception Thrown: ' || + substr(SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack + ,1,3950) ); + end; end t_process_assertion; $END ----------------%WTPLSQL_end_ignore_lines%---------------- @@ -254,21 +360,21 @@ begin end last_pass; function last_assert - return wt_results.assertion%TYPE + return varchar2 is begin return g_rec.last_assert; end last_assert; function last_msg - return wt_results.message%TYPE + return varchar2 is begin return g_rec.last_msg; end last_msg; function last_details - return wt_results.details%TYPE + return varchar2 is begin return g_rec.last_details; @@ -313,10 +419,10 @@ is begin g_testcase := ''; g_rec.last_pass := NULL; + g_rec.raise_exception := FALSE; g_rec.last_assert := ''; g_rec.last_msg := ''; g_rec.last_details := ''; - g_rec.raise_exception := FALSE; end reset_globals; $IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ @@ -469,7 +575,7 @@ procedure this ( is begin g_rec.last_assert := 'THIS'; - g_rec.last_msg := msg_in; + g_rec.last_msg := substr(msg_in,1,200); g_rec.last_pass := nvl(check_this_in, FALSE); g_rec.last_details := 'Expected "TRUE" and got "' || boolean_to_status(check_this_in) || '"'; @@ -608,8 +714,8 @@ is begin g_rec.last_assert := 'EQ'; g_rec.last_msg := msg_in; - g_rec.last_pass := (xmltype.getclobval(check_this_in) = - xmltype.getclobval(against_this_in) ); + g_rec.last_pass := nvl(xmltype.getclobval(check_this_in) = + xmltype.getclobval(against_this_in), FALSE); g_rec.last_details := 'Expected "' || substr(xmltype.getclobval(against_this_in),1,1000) || '" and got "' || substr(xmltype.getclobval(check_this_in) ,1,1000) || '"'; @@ -921,14 +1027,14 @@ $THEN check_this_in => (temp_rec.last_pass = FALSE)); -------------------------------------- WTPLSQL Testing -- -- VARCHAR2 includes Includes LONG RAW - wt_assert.g_testcase := 'EQ LANG RAW Happy Path 1'; + wt_assert.g_testcase := 'EQ LONG RAW Happy Path 1'; eq ( msg_in => 'Run Test', check_this_in => temp_lraw1, against_this_in => temp_lraw1); -------------------------------------- WTPLSQL Testing -- -- VARCHAR2 includes Includes LONG RAW - wt_assert.g_testcase := 'EQ LANG RAW Happy Path 1'; + wt_assert.g_testcase := 'EQ LONG RAW Happy Path 1'; wtplsql_skip_save := TRUE; eq ( msg_in => 'Not Used', @@ -2326,8 +2432,9 @@ begin execute immediate check_call_in; exception when OTHERS then l_sqlerrm := SQLERRM; - l_errstack := substr(dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace + l_errstack := substr(SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack ,1,4000); end; -- @@ -2337,14 +2444,14 @@ begin then -- Both are Null g_rec.last_pass := TRUE; - elsif against_exc_in is null OR l_sqlerrm is null + elsif l_sqlerrm is null OR against_exc_in is null then -- If both were Null, it would have been caught above. -- So, only one can be Null g_rec.last_pass := FALSE; else -- If either was Null, it would have been caught above. - g_rec.last_pass := l_sqlerrm like '%' || against_exc_in || '%'; + g_rec.last_pass := nvl(l_sqlerrm like '%' || against_exc_in || '%', FALSE); end if; if against_exc_in is null then @@ -2442,11 +2549,9 @@ $THEN msg_in => 'temp_rec.last_details', check_this_in => temp_rec.last_details, against_this_in => 'Expected exception "%PLS-00302: component ''BOGUS'' must be declared%". ' || - 'Actual exception raised was "ORA-06550: line 1, column 17:' || CHR(10) || - 'PLS-00302: component ''BOGUS'' must be declared' || CHR(10) || - 'ORA-06550: line 1, column 7:' || CHR(10) || - 'PL/SQL: Statement ignored". ' || - 'Exception raised by: "begin wt_assert.bogus; end;".'); + 'Actual exception raised was "ORA-06550: line 1, column 17:' || CHR(10) || + 'PLS-00302: component ''BOGUS'' must be declared". ' || + 'Exception raised by: "begin wt_assert.bogus; end;".' ); -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Raises Tests Happy Path 2'; raises ( @@ -2457,13 +2562,10 @@ $THEN wt_assert.eq ( msg_in => 'temp_rec.last_details value', check_this_in => temp_rec.last_details, - against_this_in => 'Expected exception "%-00302%". ' || - 'Actual exception raised was "' || - 'ORA-06550: line 1, column 17:' || CHR(10) || - 'PLS-00302: component ''BOGUS'' must be declared' || CHR(10) || - 'ORA-06550: line 1, column 7:' || CHR(10) || - 'PL/SQL: Statement ignored". ' || - 'Exception raised by: "begin wt_assert.bogus; end;".'); + against_this_in => 'Expected exception "%-00302%". ' || + 'Actual exception raised was "ORA-06550: line 1, column 17:' || CHR(10) || + 'PLS-00302: component ''BOGUS'' must be declared". ' || + 'Exception raised by: "begin wt_assert.bogus; end;".' ); -------------------------------------- WTPLSQL Testing -- throws ( msg_in => 'THROWS Varchar2 Test', @@ -2474,12 +2576,9 @@ $THEN msg_in => 'temp_rec.last_details value', check_this_in => temp_rec.last_details, against_this_in => 'Expected exception "%PLS-00302: component ''BOGUS'' must be declared%". ' || - 'Actual exception raised was "' || - 'ORA-06550: line 1, column 17:' || CHR(10) || - 'PLS-00302: component ''BOGUS'' must be declared' || CHR(10) || - 'ORA-06550: line 1, column 7:' || CHR(10) || - 'PL/SQL: Statement ignored". ' || - 'Exception raised by: "begin wt_assert.bogus; end;".'); + 'Actual exception raised was "ORA-06550: line 1, column 17:' || CHR(10) || + 'PLS-00302: component ''BOGUS'' must be declared". ' || + 'Exception raised by: "begin wt_assert.bogus; end;".' ); -------------------------------------- WTPLSQL Testing -- throws ( msg_in => 'THROWS Number Test', @@ -2489,13 +2588,10 @@ $THEN wt_assert.eq ( msg_in => 'temp_rec.last_details value', check_this_in => temp_rec.last_details, - against_this_in => 'Expected exception "%-00302%". ' || - 'Actual exception raised was "' || - 'ORA-06550: line 1, column 17:' || CHR(10) || - 'PLS-00302: component ''BOGUS'' must be declared' || CHR(10) || - 'ORA-06550: line 1, column 7:' || CHR(10) || - 'PL/SQL: Statement ignored". ' || - 'Exception raised by: "begin wt_assert.bogus; end;".'); + against_this_in => 'Expected exception "%-00302%". ' || + 'Actual exception raised was "ORA-06550: line 1, column 17:' || CHR(10) || + 'PLS-00302: component ''BOGUS'' must be declared". ' || + 'Exception raised by: "begin wt_assert.bogus; end;".' ); -------------------------------------- WTPLSQL Testing -- wt_assert.g_testcase := 'Raises Tests Happy Path 3'; raises ( @@ -2586,7 +2682,7 @@ begin open l_rc for check_query_in; fetch l_rc into l_rc_buff; close l_rc; - g_rec.last_pass := ( l_rc_buff = against_value_in + g_rec.last_pass := ( nvl(l_rc_buff = against_value_in, FALSE) or ( l_rc_buff is null and against_value_in is null and null_ok_in ) ); @@ -2596,8 +2692,9 @@ begin g_rec.raise_exception := raise_exc_in; process_assertion; exception when others then - l_errstack := substr(dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace,1,2900); + l_errstack := substr(SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack,1,2900); g_rec.last_details := 'Exception raised for Query: ' || substr(check_query_in ,1,1000) || CHR(10) || l_errstack; @@ -2624,16 +2721,17 @@ begin open l_rc for check_query_in; fetch l_rc into l_rc_buff; close l_rc; - g_rec.last_pass := (xmltype.getclobval(l_rc_buff) = - xmltype.getclobval(against_value_in) ); + g_rec.last_pass := nvl(xmltype.getclobval(l_rc_buff) = + xmltype.getclobval(against_value_in), FALSE); g_rec.last_details := 'Expected "' || substr(xmltype.getclobval(against_value_in),1,1000) || '" and got "' || substr(xmltype.getclobval(l_rc_buff ),1,1000) || '" for Query: ' || substr( check_query_in ,1,1000) ; g_rec.raise_exception := raise_exc_in; process_assertion; exception when others then - l_errstack := substr(dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace,1,2900); + l_errstack := substr(SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack,1,2900); g_rec.last_details := 'Exception raised for Query: ' || substr(check_query_in ,1,1000) || CHR(10) || l_errstack; @@ -2660,7 +2758,7 @@ begin open l_rc for check_query_in; fetch l_rc into l_rc_buff; close l_rc; - g_rec.last_pass := ( l_rc_buff = against_value_in + g_rec.last_pass := ( nvl(l_rc_buff = against_value_in, FALSE) or ( l_rc_buff is null and against_value_in is null and null_ok_in ) ); @@ -2670,8 +2768,9 @@ begin g_rec.raise_exception := raise_exc_in; process_assertion; exception when others then - l_errstack := substr(dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace,1,2900); + l_errstack := substr(SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack,1,2900); g_rec.last_details := 'Exception raised for Query: ' || substr(check_query_in ,1,1000) || CHR(10) || l_errstack; @@ -2700,7 +2799,7 @@ begin fetch l_rc into l_rc_buff; close l_rc; compare_results := nvl(DBMS_LOB.COMPARE(l_rc_buff, against_value_in),-1); - g_rec.last_pass := ( (compare_results = 0) + g_rec.last_pass := ( nvl(compare_results = 0, FALSE) or ( l_rc_buff is null and against_value_in is null and null_ok_in ) ); @@ -2710,8 +2809,9 @@ begin g_rec.raise_exception := raise_exc_in; process_assertion; exception when others then - l_errstack := substr(dbms_utility.format_error_stack || - dbms_utility.format_error_backtrace,1,2900); + l_errstack := substr(SQLERRM || CHR(10) || + dbms_utility.format_error_backtrace || + dbms_utility.format_call_stack,1,2900); g_rec.last_details := 'Exception raised for Query: ' || substr(check_query_in ,1,1000) || CHR(10) || l_errstack; @@ -3413,7 +3513,7 @@ is g_rec.last_details := SQLERRM || CHR(10) || 'FAILURE of Compare Query: ' || l_query || ';'; g_rec.last_pass := FALSE; - l_success := FALSE; + l_success := FALSE; g_rec.raise_exception := raise_exc_in; process_assertion; end l_run_query; @@ -3437,7 +3537,7 @@ begin end if; l_run_query; if NOT l_success then return; end if; - g_rec.last_pass := (l_check_cnt = l_cnt); + g_rec.last_pass := nvl(l_check_cnt = l_cnt, FALSE); -- g_rec.last_details := 'Expected ' || l_cnt || ' rows from "' || against_this_in || '" and got ' || l_check_cnt || ' rows from "' || check_this_in || @@ -3870,9 +3970,11 @@ $IF $$WTPLSQL_SELFTEST ------%WTPLSQL_begin_ignore_lines%------ $THEN -- Can't profile this package because all the "assert" tests -- pause profiling before they execute. - procedure WTPLSQL_RUN --% WTPLSQL SET DBOUT "WT_ASSERT:PACKAGE BODY" %-- + procedure WTPLSQL_RUN is begin + wtplsql.g_DBOUT := 'WT_ASSERT:PACKAGE BODY'; + hook.g_run_assert_hook := FALSE; select temp_clob, temp_nclob, temp_xml, temp_blob into temp_clob1, temp_nclob1, temp_xml1, temp_blob1 from wt_self_test where id = 1; @@ -3885,9 +3987,9 @@ $THEN t_reset_globals; t_this; t_eq; + -------------------------------------- WTPLSQL Testing -- t_isnotnull; t_isnull; - -------------------------------------- WTPLSQL Testing -- t_raises; t_eqqueryvalue; t_eqquery; @@ -3895,6 +3997,8 @@ $THEN t_eqtabcount; t_object_exists; t_object_not_exists; + -------------------------------------- WTPLSQL Testing -- + hook.g_run_assert_hook := TRUE; end WTPLSQL_RUN; $END ----------------%WTPLSQL_end_ignore_lines%---------------- --==============================================================-- @@ -3902,3 +4006,5 @@ $END ----------------%WTPLSQL_end_ignore_lines%---------------- end wt_assert; / + +set define on diff --git a/src/core/wt_assert.pks b/wtpsrc/WTP/WT_ASSERT.pspec similarity index 89% rename from src/core/wt_assert.pks rename to wtpsrc/WTP/WT_ASSERT.pspec index 53bcf13..ec05422 100644 --- a/src/core/wt_assert.pks +++ b/wtpsrc/WTP/WT_ASSERT.pspec @@ -1,30 +1,47 @@ -create or replace package wt_assert authid current_user + +-- +-- Create WTP.WT_ASSERT Package +-- + +set define off + + +--DBMS_METADATA:WTP.WT_ASSERT + + CREATE OR REPLACE EDITIONABLE PACKAGE "WTP"."WT_ASSERT" + authid current_user is -- AUTHID CURRENT_USER is required for dynamic PL/SQL execution. ASSERT_FAILURE_EXCEPTION exception; - PRAGMA EXCEPTION_INIT(ASSERT_FAILURE_EXCEPTION, -20003); - - C_PASS CONSTANT varchar2(10) := 'PASS'; - C_FAIL CONSTANT varchar2(10) := 'FAIL'; + PRAGMA EXCEPTION_INIT(ASSERT_FAILURE_EXCEPTION, -20004); -- See RESET_GLOBALS procedure for default global values -- Testcase name for a series of assertions. -- Modify as required - g_testcase wt_results.testcase%TYPE; + g_testcase core_data.long_name; + + -- See RESET_GLOBALS procedure for default global values + TYPE g_rec_type is record + (last_pass boolean + ,raise_exception boolean + ,last_assert varchar2(15) + ,last_msg varchar2(200) + ,last_details varchar2(4000)); + g_rec g_rec_type; function last_pass return boolean; function last_assert - return wt_results.assertion%TYPE; + return varchar2; function last_msg - return wt_results.message%TYPE; + return varchar2; function last_details - return wt_results.details%TYPE; + return varchar2; procedure reset_globals; @@ -267,3 +284,22 @@ is $END end wt_assert; +/ + + +-- Grants +grant EXECUTE on "WTP"."WT_ASSERT" to "PUBLIC"; + + +-- Synonyms + +--DBMS_METADATA:PUBLIC.UTASSERT + + CREATE OR REPLACE NONEDITIONABLE PUBLIC SYNONYM "UTASSERT" FOR "WTP"."WT_ASSERT"; + +--DBMS_METADATA:PUBLIC.WT_ASSERT + + CREATE OR REPLACE NONEDITIONABLE PUBLIC SYNONYM "WT_ASSERT" FOR "WTP"."WT_ASSERT"; + + +set define on diff --git a/wtpsrc/WTP/WT_CORE_REPORT.pbody b/wtpsrc/WTP/WT_CORE_REPORT.pbody new file mode 100644 index 0000000..f677582 --- /dev/null +++ b/wtpsrc/WTP/WT_CORE_REPORT.pbody @@ -0,0 +1,269 @@ + +-- +-- Create WTP.WT_CORE_REPORT Package Body +-- + +set define off + + +--DBMS_METADATA:WTP.WT_CORE_REPORT + + CREATE OR REPLACE EDITIONABLE PACKAGE BODY "WTP"."WT_CORE_REPORT" +as + + +---------------------- +-- Private Procedures +---------------------- + + +------------------------------------------------------------ +procedure p + (in_text in varchar2) +is +begin + if g_in_process + then + vc_aa(vc_aa.COUNT + 1) := in_text; + else + dbms_output.put_line(in_text); + end if; +end p; + +------------------------------------------------------------ +procedure summary_out +is + asrt_cnt number; + asrt_fail number; + run_sec number; + tc_cnt number; + tc_fail number; + tc_yield number; + min_msec number; + max_msec number; + tot_msec number; + avg_msec number; +begin + p(''); + -- + p(' wtPLSQL ' || wtplsql.show_version); + p(' Start Date/Time: ' || + to_char(core_data.g_run_rec.start_dtm, g_date_format)); + p(' Test Results for ' || core_data.g_run_rec.test_runner_owner || + '.' || core_data.g_run_rec.test_runner_name ); + ---------------------------------------- + if core_data.g_run_rec.dbout_name is not null + then + p(' Database Object Under Test is ' || core_data.g_run_rec.dbout_type || + ' ' || core_data.g_run_rec.dbout_owner || + '.' || core_data.g_run_rec.dbout_name ); + end if; + p(' ------------------------------------------------------------------'); + -- + asrt_cnt := nvl(core_data.g_run_rec.asrt_cnt ,0); + asrt_fail := nvl(core_data.g_run_rec.asrt_fail ,0); + run_sec := nvl(core_data.g_run_rec.runner_sec ,0); + tc_cnt := nvl(core_data.g_run_rec.tc_cnt ,0); + tc_fail := nvl(core_data.g_run_rec.tc_fail ,0); + min_msec := nvl(core_data.g_run_rec.asrt_min_msec,0); + max_msec := nvl(core_data.g_run_rec.asrt_max_msec,0); + tot_msec := nvl(core_data.g_run_rec.asrt_tot_msec,0); + case nvl(asrt_cnt,0) + when 0 then avg_msec := 0; + else avg_msec := nvl(tot_msec/asrt_cnt,0); + end case; + case nvl(tc_cnt,0) + when 0 then tc_yield := 0; + else tc_yield := nvl(100*(1-(tc_fail/tc_cnt)),0); + end case; + -- + p(' Minimum Elapsed msec: ' || to_char(min_msec ,'999999999') || + ' Total Assertions: ' || to_char(asrt_cnt ,'999999999') ); + p(' Average Elapsed msec: ' || to_char(avg_msec ,'999999999') || + ' Failed Assertions: ' || to_char(asrt_fail,'999999999') ); + p(' Maximum Elapsed msec: ' || to_char(max_msec ,'999999999') || + ' Total Testcases: ' || to_char(tc_cnt ,'999999999') ); + p(' Total Run Time (sec): ' || to_char(run_sec ,'9999990.9') || + ' Failed Testcases: ' || to_char(tc_fail ,'999999999') ); + p(' ' || ' ' || + ' Testcase Yield: ' || to_char(tc_yield ,'999999999') || '%'); + -- + if core_data.g_run_rec.error_message is not null + then + p(''); + p(' *** Test Runner Error ***'); + p(core_data.g_run_rec.error_message); + end if; + -- +end summary_out; + +------------------------------------------------------------ +procedure results_out + (in_show_pass in boolean) +is + l_rec core_data.results_rec_type; + old_testcase core_data.long_name; + show_header boolean := TRUE; +begin + -- Check Test Results Array + if NOT core_data.g_results_nt.EXISTS(1) + then + p(' * NOTE: No Data in Test Results Array "core_data.g_results_nt"'); + return; + end if; + -- Loop through all results + for i in 1 .. core_data.g_results_nt.COUNT + loop + -- Determine if this should be displayed + if core_data.g_results_nt.EXISTS(i) + AND ( in_show_pass + OR NOT core_data.g_results_nt(i).pass) + then + l_rec := core_data.g_results_nt(i); + -- Remove Consecutive Testcases + if l_rec.testcase = old_testcase + then + l_rec.testcase := ''; + else + old_testcase := l_rec.testcase; + end if; + -- Display header if needed + if show_header + then + p(''); + p(' ' || core_data.g_run_rec.test_runner_owner || + '.' || core_data.g_run_rec.test_runner_name || + ' Test Runner Details' ); + p(' --------------------------------------------------------------'); + show_header := FALSE; + end if; + -- Display the result + p(format_test_result(l_rec)); + end if; + end loop; + -- +end results_out; + + +--------------------- +-- Public Procedures +--------------------- + + +------------------------------------------------------------ +procedure dbms_out + (in_detail_level in number default 0 + ,in_summary_last in boolean default FALSE) +is +begin + -- Setup Display Order + if in_summary_last + then + if in_detail_level >= 10 + then + results_out(in_detail_level >= 20); + end if; + summary_out; + else + summary_out; + if in_detail_level >= 10 + then + results_out(in_detail_level >= 20); + end if; + end if; + p(''); +end dbms_out; + + +------------------------------------------------------------ +procedure before_test_all +is +begin + vc_aa.DELETE; + g_in_process := TRUE; +end before_test_all; + + +------------------------------------------------------------ +procedure after_test_all +is +begin + for i in 1 .. vc_aa.COUNT + loop + dbms_output.put_line(vc_aa(i)); + end loop; + g_in_process := FALSE; +end after_test_all; + + +------------------------------------------------------------ +function format_test_result + (in_rec in core_data.results_rec_type) + return varchar2 +is + l_out_str varchar2(32000) := ''; +begin + if in_rec.testcase is not null + then + l_out_str := rpad('---*** ' || in_rec.testcase || + ' ***---' + ,80,'-') || CHR(10); + end if; + if in_rec.pass + then + l_out_str := l_out_str || ' PASS '; + else + l_out_str := l_out_str || '#FAIL#'; + end if; + if in_rec.interval_msec is not null + then + l_out_str := l_out_str || lpad(in_rec.interval_msec,4) || 'ms '; + end if; + if in_rec.message is not null + then + l_out_str := l_out_str || in_rec.message || '. '; + end if; + l_out_str := l_out_str || in_rec.assertion || ' - '; + if g_single_line_output + then + l_out_str := l_out_str || replace(replace(in_rec.details + ,CHR(13),'\r') + ,CHR(10),'\n'); + else + l_out_str := l_out_str || in_rec.details; + end if; + return l_out_str; +end format_test_result; + + +------------------------------------------------------------ +procedure insert_hooks +is +begin + delete_hooks; + insert into hooks (hook_name, seq, run_string) + values ('before_test_all', 20, 'begin wtp.wt_core_report.before_test_all; end;'); + insert into hooks (hook_name, seq, run_string) + values ('after_test_run', 20, 'begin wtp.wt_core_report.dbms_out(in_detail_level => 10); end;'); + insert into hooks (hook_name, seq, run_string) + values ('after_test_all', 20, 'begin wtp.wt_core_report.after_test_all; end;'); + commit; + hook.init; +end insert_hooks; + + +------------------------------------------------------------ +procedure delete_hooks +is +begin + delete from hooks where run_string like '% wtp.wt_core_report.%'; + dbms_output.put_line(SQL%ROWCOUNT || ' "wt_core_report" rows deleted from HOOKS table.'); + hook.init; + commit; +end delete_hooks; + + +end wt_core_report; +/ + +set define on diff --git a/wtpsrc/WTP/WT_CORE_REPORT.pspec b/wtpsrc/WTP/WT_CORE_REPORT.pspec new file mode 100644 index 0000000..87c428f --- /dev/null +++ b/wtpsrc/WTP/WT_CORE_REPORT.pspec @@ -0,0 +1,67 @@ + +-- +-- Create WTP.WT_CORE_REPORT Package +-- + +set define off + + +--DBMS_METADATA:WTP.WT_CORE_REPORT + + CREATE OR REPLACE EDITIONABLE PACKAGE "WTP"."WT_CORE_REPORT" + authid definer +as + + -- To report the latest Test Runner results: + -- begin + -- wt_core_report.dbms_out(30, TRUE); + -- end; + -- / + + -- Turn this off to allow output across multiple lines of text + g_single_line_output boolean := TRUE; + + -- DATE data type format for Report Header + g_date_format varchar2(100) := 'DD-Mon-YYYY HH:MI:SS PM'; + + -- True While Processing a TEST_ALL + g_in_process boolean := FALSE; + TYPE vc_aa_type is table of varchar2(4000) index by pls_integer; + vc_aa vc_aa_type; + + procedure dbms_out + (in_detail_level in number default 0 + ,in_summary_last in boolean default FALSE); + -- "in_detail_level" settings for DBMS_OUT procedure: + -- * Less than 10 (including null) - No Detail + -- * Assertion results summary. + -- * 10 to 19 - Minimal Detail + -- * Assertion results summary. + -- * Failed assertion result details. + -- * 20 or more - Full Detail + -- * Assertion results summary. + -- * All assertion result details. + + procedure before_test_all; + procedure after_test_all; + + function format_test_result + (in_rec in core_data.results_rec_type) + return varchar2; + + procedure insert_hooks; + + procedure delete_hooks; + +end wt_core_report; +/ + + +-- Grants +grant EXECUTE on "WTP"."WT_CORE_REPORT" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsrc/WTP/WT_EXECUTE_TEST_RUNNER.proc b/wtpsrc/WTP/WT_EXECUTE_TEST_RUNNER.proc new file mode 100644 index 0000000..2c90eb8 --- /dev/null +++ b/wtpsrc/WTP/WT_EXECUTE_TEST_RUNNER.proc @@ -0,0 +1,33 @@ + +-- +-- Create WTP.WT_EXECUTE_TEST_RUNNER Procedure +-- + +set define off + + +--DBMS_METADATA:WTP.WT_EXECUTE_TEST_RUNNER + + CREATE OR REPLACE EDITIONABLE PROCEDURE "WTP"."WT_EXECUTE_TEST_RUNNER" + authid current_user + -- AUTHID CURRENT_USER is required for assertions with dynamic PL/SQL execution. +is + sql_txt varchar2(4000); +begin + sql_txt := 'begin "' || wtp.core_data.g_run_rec.test_runner_owner || + '"."' || wtp.core_data.g_run_rec.test_runner_name || + '".' || wtplsql.C_RUNNER_ENTRY_POINT || '; end;'; + --dbms_output.put_line(sql_txt); + execute immediate sql_txt; +end wt_execute_test_runner; +/ + + +-- Grants +grant EXECUTE on "WTP"."WT_EXECUTE_TEST_RUNNER" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsrc/WTP/WT_QUAL_TEST_RUNNERS_VW.vw b/wtpsrc/WTP/WT_QUAL_TEST_RUNNERS_VW.vw new file mode 100644 index 0000000..b94279d --- /dev/null +++ b/wtpsrc/WTP/WT_QUAL_TEST_RUNNERS_VW.vw @@ -0,0 +1,49 @@ + +-- +-- Create WTP.WT_QUAL_TEST_RUNNERS_VW view +-- +-- NOTE: Foreign keys are in a difference script +-- Triggers are in a difference script +-- + +set define off + + +-- +-- Need to avoid errors granting permisions on a view that has errors +-- Found this technique on Ask Tom +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:43253832697675#2653213300346351987 +create view "WTP"."WT_QUAL_TEST_RUNNERS_VW" + as select * from SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE; + +-- Grants +grant SELECT on "WTP"."WT_QUAL_TEST_RUNNERS_VW" to "PUBLIC"; + + + +--DBMS_METADATA:WTP.WT_QUAL_TEST_RUNNERS_VW + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "WTP"."WT_QUAL_TEST_RUNNERS_VW" ("OWNER", "PACKAGE_NAME") AS + select owner + ,object_name PACKAGE_NAME + from dba_procedures + where procedure_name = wtplsql.get_runner_entry_point + and object_type = 'PACKAGE'; + +-- Comments + +--DBMS_METADATA:WTP.WT_QUAL_TEST_RUNNERS_VW + + COMMENT ON COLUMN "WTP"."WT_QUAL_TEST_RUNNERS_VW"."OWNER" IS 'Owner of the Qualified Test Runner Package'; + COMMENT ON COLUMN "WTP"."WT_QUAL_TEST_RUNNERS_VW"."PACKAGE_NAME" IS 'Name of the Qualified Test Runner Package'; + COMMENT ON TABLE "WTP"."WT_QUAL_TEST_RUNNERS_VW" IS 'All PL/SQL Packages with the required Test Runner Entry Point.'; + + +-- Grants +grant SELECT on "WTP"."WT_QUAL_TEST_RUNNERS_VW" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsrc/WTP/WT_VERSIONS.tab b/wtpsrc/WTP/WT_VERSIONS.tab new file mode 100644 index 0000000..aa59e3f --- /dev/null +++ b/wtpsrc/WTP/WT_VERSIONS.tab @@ -0,0 +1,45 @@ + +-- +-- Create WTP.WT_VERSIONS Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:WTP.WT_VERSIONS + + CREATE TABLE "WTP"."WT_VERSIONS" + ( "INSTALL_TSTMP" TIMESTAMP (6) WITH LOCAL TIME ZONE DEFAULT systimestamp, + "COMPONENT" VARCHAR2(15 BYTE) CONSTRAINT "WT_VESIONS_NN1" NOT NULL ENABLE, + "VERSION" NUMBER CONSTRAINT "WT_VESIONS_NN2" NOT NULL ENABLE, + "ACTION" VARCHAR2(15 BYTE) CONSTRAINT "WT_VESIONS_NN3" NOT NULL ENABLE, + "NOTES" VARCHAR2(4000 BYTE) + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "WTP"."WT_VERSIONS" ADD CONSTRAINT "WT_VERSIONS_CK1" CHECK (action in ('INSTALL','UPDATE','REMOVE')) ENABLE; +ALTER TABLE "WTP"."WT_VERSIONS" ADD CONSTRAINT "WT_VERSIONS_PK" PRIMARY KEY ("INSTALL_TSTMP") + USING INDEX ENABLE; + +-- Comments + +--DBMS_METADATA:WTP.WT_VERSIONS + + COMMENT ON COLUMN "WTP"."WT_VERSIONS"."INSTALL_TSTMP" IS '(Required) Date/Time the action was taken'; + COMMENT ON COLUMN "WTP"."WT_VERSIONS"."COMPONENT" IS '(Required) Component or Add-on name'; + COMMENT ON COLUMN "WTP"."WT_VERSIONS"."VERSION" IS '(Required) Version number of the Component or Add-on'; + COMMENT ON COLUMN "WTP"."WT_VERSIONS"."ACTION" IS '(Required) One of INSTALL, UPDATE, or REMOVE'; + COMMENT ON COLUMN "WTP"."WT_VERSIONS"."NOTES" IS 'Additional notes for the action taken'; + COMMENT ON TABLE "WTP"."WT_VERSIONS" IS 'Records the installed and upgraded versions.'; + + +-- Grants +grant SELECT on "WTP"."WT_VERSIONS" to "PUBLIC"; + + +-- Synonyms + + +set define on diff --git a/wtpsrc/alter_foreign_keys.sql b/wtpsrc/alter_foreign_keys.sql new file mode 100644 index 0000000..bd398c9 --- /dev/null +++ b/wtpsrc/alter_foreign_keys.sql @@ -0,0 +1,88 @@ + +-- +-- Alter "wtpsrc" Install Type Foreign Keys +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure missing_parent_sql + (in_owner sys.dba_constraints.owner%TYPE + ,in_constraint sys.dba_constraints.constraint_name%TYPE) + is + TYPE fk_rec_type is record + (child_owner sys.dba_constraints.owner%TYPE + ,child_table sys.dba_constraints.table_name%TYPE + ,child_column sys.dba_cons_columns.column_name%TYPE + ,parent_owner sys.dba_constraints.owner%TYPE + ,parent_table sys.dba_constraints.table_name%TYPE + ,parent_column sys.dba_cons_columns.column_name%TYPE); + TYPE fk_nt_type is table of fk_rec_type; + fk_nt fk_nt_type; + sql_txt varchar2(1000); + begin + select ctab.owner child_owner, ctab.table_name child_table, ccol.column_name child_column, + ptab.owner parent_owner, ptab.table_name parent_table, pcol.column_name parent_column + bulk collect into fk_nt + from sys.dba_constraints ctab + join sys.dba_cons_columns ccol + on ccol.owner = ctab.owner and ccol.constraint_name = ctab.constraint_name + join sys.dba_constraints ptab + on ptab.owner = ctab.r_owner and ptab.constraint_name = ctab.r_constraint_name + join sys.dba_cons_columns pcol + on pcol.owner = ptab.owner and pcol.constraint_name = ptab.constraint_name + and pcol.position = ccol.position + where ctab.owner = in_owner and ctab.constraint_name = in_constraint + order by ccol.position; + if SQL%NOTFOUND then return; end if; + dbms_output.put_line('-- ORA-20000: Query to find missing parent keys:'); + -- ORA-20000: select "CHILD_KEY" from from "CHILD_OWNER"."CHILD_TABLE" group by "CHILD_KEY" + sql_txt := '-- ORA-20000: select "' || fk_nt(1).child_column; + for i in 2 .. fk_nt.LAST + loop + sql_txt := sql_txt || '", "' || fk_nt(i).child_column; + end loop; + sql_txt := sql_txt || '" from "' || fk_nt(1).child_owner || '"."' || fk_nt(1).child_table || + '" group by "' || fk_nt(1).child_column; + for i in 2 .. fk_nt.LAST + loop + sql_txt := sql_txt || '", "' || fk_nt(i).child_column; + end loop; + dbms_output.put_line (sql_txt || '"'); + -- ORA-20000: MINUS select "PARENT_KEY" from "PARENT_OWNER"."PARENT_TABLE"; + sql_txt := '-- ORA-20000: MINUS select "' || fk_nt(1).parent_column; + for i in 2 .. fk_nt.LAST + loop + sql_txt := sql_txt || '", "' || fk_nt(i).parent_column; + end loop; + sql_txt := sql_txt || '" from "' || fk_nt(1).parent_owner || '"."' || fk_nt(1).parent_table || '";'; + dbms_output.put_line (sql_txt); + end missing_parent_sql; + procedure do_it (in_schema in varchar2) + is + sql_txt varchar2(1000); + begin + for buff in (select owner, table_name, constraint_name from dba_constraints + where constraint_type = 'R' and owner = in_schema + order by owner, table_name, constraint_name) + loop + sql_txt := 'alter table "' || buff.owner || '"."' || buff.table_name || + '" &1. constraint "' || buff.constraint_name || '"'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- *'); + dbms_output.put_line('-- ERROR at line :'); + dbms_output.put_line('-- ' || SQLERRM); + missing_parent_sql(buff.owner,buff.constraint_name); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Foreign Keys is done.'); + end do_it; +begin + dbms_output.put_line('Alter Foreign Keys for wtpsrc Install Type'); + do_it('WTP'); +end; +/ diff --git a/wtpsrc/alter_queues.sql b/wtpsrc/alter_queues.sql new file mode 100644 index 0000000..fe33f3c --- /dev/null +++ b/wtpsrc/alter_queues.sql @@ -0,0 +1,36 @@ + +-- +-- Alter "wtpsrc" Install Type Queues +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select owner, name from dba_queues + where owner = in_schema and queue_type != 'EXCEPTION_QUEUE' + order by owner, name) + loop + sql_txt := 'begin DBMS_AQADM.' || + case '&1.' when 'ENABLE' then 'START_QUEUE' + else 'STOP_QUEUE' + end || + '(QUEUE_NAME => ''' || buff.owner || '.' || buff.name || + ''', ENQUEUE => TRUE, DEQUEUE => TRUE); end;'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Queues is done.'); + end do_it; +begin + dbms_output.put_line('Alter Queues for wtpsrc Install Type'); + do_it('WTP'); +end; +/ diff --git a/wtpsrc/alter_scheduler_jobs.sql b/wtpsrc/alter_scheduler_jobs.sql new file mode 100644 index 0000000..0cba96a --- /dev/null +++ b/wtpsrc/alter_scheduler_jobs.sql @@ -0,0 +1,32 @@ + +-- +-- Alter "wtpsrc" Install Type Scheduler Jobs +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select owner, job_name from dba_scheduler_jobs + where owner = in_schema + order by owner, job_name) + loop + sql_txt := 'begin DBMS_SCHEDULER.&1.(NAME => ''' || + buff.owner || '.' || buff.job_name || '''); end;'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Scheduler Jobs is done.'); + end do_it; +begin + dbms_output.put_line('Alter Scheduler Jobs for wtpsrc Install Type'); + do_it('WTP'); +end; +/ diff --git a/wtpsrc/alter_triggers.sql b/wtpsrc/alter_triggers.sql new file mode 100644 index 0000000..f287b49 --- /dev/null +++ b/wtpsrc/alter_triggers.sql @@ -0,0 +1,32 @@ + +-- +-- Alter "wtpsrc" Install Type Triggers +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select owner, trigger_name from dba_triggers + where table_owner = in_schema + order by owner, trigger_name) + loop + sql_txt := 'alter trigger "' || buff.owner || '"."' || + buff.trigger_name || '" &1.'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Triggers is done.'); + end do_it; +begin + dbms_output.put_line('Alter Triggers for wtpsrc Install Type'); + do_it('WTP'); +end; +/ diff --git a/wtpsrc/compile_all.sql b/wtpsrc/compile_all.sql new file mode 100644 index 0000000..8f30f8c --- /dev/null +++ b/wtpsrc/compile_all.sql @@ -0,0 +1,36 @@ + +-- +-- Compile All "wtpsrc" Install Type Objects +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select object_name + from sys.dba_objects + where owner = in_schema + and object_type = 'JAVA SOURCE' + order by object_name ) + loop + sql_txt := 'alter java source "' || in_schema || '"."' || buff.object_name || '" compile'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + begin + DBMS_UTILITY.compile_schema(schema => in_schema, compile_all => FALSE); + dbms_output.put_line('-- ' || in_schema || ' Compile All is done.'); + exception when others then + dbms_output.put_line('Compiling Schema ' || in_schema || CHR(10) || SQLERRM); + dbms_output.put_line(''); + end; + end do_it; +begin + dbms_output.put_line('Compile All for wtpsrc Install Type'); + do_it('WTP'); +end; +/ diff --git a/wtpsrc/db_build_junit_report.sql b/wtpsrc/db_build_junit_report.sql new file mode 100644 index 0000000..d31eeca --- /dev/null +++ b/wtpsrc/db_build_junit_report.sql @@ -0,0 +1,112 @@ + +-- +-- Create JUnit XML Report of Database Build Status for "wtpsrc" Install Type +-- + +declare + -- + procedure ot (in_txt in varchar2) is begin + dbms_output.put_line(in_txt); + end ot; + -- + procedure do_it (in_schema in varchar2) is + begin + for tsuite in ( + with q1 as ( + select obj.owner + ,count(obj.owner) NUM_TESTS + ,sum(decode(obj.status, 'VALID', 0, 1)) NUM_FAILURES + ,min(obj.last_ddl_time) TSTAMP + -- Jenkins JUnit Plugin adds all these times together + -- round((max(obj.last_ddl_time) - min(obj.last_ddl_time))*24*60*60) + ,0 ELAPSED_SECS + from dba_objects obj + where obj.owner = in_schema + group by obj.owner + UNION + select syn.table_owner OWNER + ,count(syn.table_owner) NUM_TESTS + ,sum(decode(obj.status, 'VALID', 0, 1)) NUM_FAILURES + ,min(obj.last_ddl_time) TSTAMP + -- Jenkins JUnit Plugin adds all these times together + -- round((max(obj.last_ddl_time) - min(obj.last_ddl_time))*24*60*60) + ,0 ELAPSED_SECS + from dba_synonyms syn + join dba_objects obj + on obj.object_name = syn.synonym_name + and obj.owner = syn.owner + where syn.owner = 'PUBLIC' + and syn.table_owner = in_schema + group by syn.table_owner + ) + select owner -- TESTSUITE + ,sum(NUM_TESTS) NUM_TESTS + ,sum(NUM_FAILURES) NUM_FAILURES + ,max(TSTAMP) TSTAMP + ,sum(ELAPSED_SECS) ELAPSED_SECS + from q1 + group by owner + order by owner) + loop + ot(' '); + for tcase in ( + select obj.object_type -- TESTCASE + ,replace(obj.object_name,'.','_') OBJECT_NAME -- CLASS + ,obj.STATUS + ,0 ELAPSED_SECS + from dba_objects obj + where obj.owner = tsuite.owner + UNION ALL + select 'PUBLIC_SYNONYM' OBJECT_TYPE -- TESTCASE + ,replace(obj.object_name,'.','_') OBJECT_NAME -- CLASS + ,obj.STATUS + ,0 ELAPSED_SECS + from dba_synonyms syn + join dba_objects obj + on obj.object_name = syn.synonym_name + and obj.owner = syn.owner + where syn.owner = 'PUBLIC' + and syn.table_owner = tsuite.owner + order by 1,2 ) + loop + if tcase.status = 'VALID' + then + ot(' ' ); + else + ot(' ' ); + ot(' '); + ot('** Object Status is ' || tcase.status); + for terror in ( + select 'Line ' || line || + ', Col ' || position || + ': ' || UTL_I18N.ESCAPE_REFERENCE(text, 'us7ascii') ERROR_TXT + from dba_errors + where owner = tsuite.owner + and type = decode(tcase.object_type,'PUBLIC_SYNONYM','SYNONYM',tcase.object_type) + and name = tcase.object_name + order by sequence ) + loop + ot(terror.error_txt); + end loop; + ot(' '); + ot(' '); + end if; + end loop; + ot(' '); + end loop; + end do_it; +begin + ot(''); + ot(''); + do_it('WTP'); + ot(''); +end; +/ diff --git a/wtpsrc/db_install.sql b/wtpsrc/db_install.sql new file mode 100644 index 0000000..8fab835 --- /dev/null +++ b/wtpsrc/db_install.sql @@ -0,0 +1,57 @@ + +-- Database Installation Assist +-- Wrapper for Database Installation Scripts +-- +-- Parameters +-- 1) Script Name +-- 2) Schema Name +-- 3) System Connect String + +prompt === DBI Started: &1. + +define DBI_SCRIPT_NAME="&1." +define DBI_SCHEMA_NAME="&2." +define DBI_SYSTEM_CONNECT="&3." + +variable dbi_beg_dtm varchar2(40) +variable dbi_beg_secs number + +set feedback off +begin + -- Initialize Timer + :dbi_beg_dtm := to_char(systimestamp,'YYYY-MM-DD') || 'T' || + to_char(systimestamp,'HH24:MI:SS'); + :dbi_beg_secs := dbms_utility.get_time; + -- Set Current Schema + if length('&DBI_SCHEMA_NAME.') > 0 + then + execute immediate 'alter session set current_schema = "&DBI_SCHEMA_NAME."'; + end if; +end; +/ + +set feedback on +set blockterminator off +set sqlblanklines on + +@"&DBI_SCRIPT_NAME." "&DBI_SYSTEM_CONNECT." "" "" +set serveroutput on size unlimited format wrapped + +set sqlblanklines off +set blockterminator on +set feedback off +begin + -- Reset Current Schema + if length('&DBI_SCHEMA_NAME.') > 0 + then + execute immediate 'alter session set current_schema = "' || USER || '"'; + end if; + -- Show Timer Results + dbms_output.put_line('=== DBI Completed at ' || to_char(systimestamp,'YYYY-MM-DD') || 'T' || + to_char(systimestamp,'HH24:MI:SS') || + ' for a duration of ' || trim( (dbms_utility.get_time - :dbi_beg_secs) / 100 ) || + ' seconds (started at ' || :dbi_beg_dtm || ')'); +end; +/ + +set feedback on diff --git a/wtpsrc/fix_invalid_public_synonyms.sql b/wtpsrc/fix_invalid_public_synonyms.sql new file mode 100644 index 0000000..ef70282 --- /dev/null +++ b/wtpsrc/fix_invalid_public_synonyms.sql @@ -0,0 +1,49 @@ + +-- +-- Re-create Invalid Public Synonyms +-- + +---------------------------------------- +prompt +prompt Re-create Invalid Public Synonyms +set serveroutput on size unlimited format wrapped +set linesize 2499 + +Declare + sql_txt varchar(2000); +Begin + for buff in (with q1 as ( + select owner, object_name, editionable + from dba_objects + where status != 'VALID' + ) + select syn.synonym_name, syn.table_owner, syn.table_name, + case q1.editionable when 'Y' then ' EDITIONABLE' + when NULL then '' + else ' NONEDITIONABLE' + end EDITIONABLE + from dba_synonyms syn + join q1 + on q1.owner = syn.owner + and q1.object_name = syn.synonym_name + join dba_users usr + on usr.username = syn.table_owner + and ( usr.oracle_maintained is null + OR usr.oracle_maintained != 'Y') + where syn.owner = 'PUBLIC' ) + loop + begin + sql_txt := 'CREATE OR REPLACE' || buff.EDITIONABLE || ' PUBLIC SYNONYM "' || + buff.synonym_name || '" for "' || buff.table_owner || '"."' || + buff.table_name ||'"'; + dbms_output.put_line(sql_txt); + execute immediate sql_txt; + exception + when others then + dbms_output.put_line('ERROR:' || CHR(10) || SQLERRM || CHR(10)); + dbms_output.put_line('----------------------------------------'); + end; + end loop; +end; +/ + diff --git a/wtpsrc/install.sql b/wtpsrc/install.sql new file mode 100644 index 0000000..ef51e19 --- /dev/null +++ b/wtpsrc/install.sql @@ -0,0 +1,76 @@ + +-- +-- Master Installation Script +-- All scripts created by "https://ODBCapture.org", Version V2.1 +-- +-- Must be run as SYS +-- +-- Command Line Parameters: +-- 1 - TO_PDB_SYSTEM: SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the pluggable database. +-- The Data Load installation requires this connection information. +-- + +-- NOTE: If running in a Linux based Docker Container from a Windows FileSystem Mount, run this first: +-- dos2unix -f -o ../install/*/*.csv ../install/*/*/*.csv + +define TOP_PDB_SYSTEM="&1." +execute DBMS_JAVA.SET_OUTPUT(1000000); +set serveroutput on size unlimited format wrapped + +---------------------------------------- +prompt Identify this Module in V$SESSION +set appinfo "wtpsrc Installation" + +---------------------------------------- +prompt Setup Abort on Error +WHENEVER SQLERROR EXIT SQL.SQLCODE +WHENEVER OSERROR EXIT + +---------------------------------------- +prompt +prompt ************************** +prompt * Run SYS Installation * +prompt ************************** +prompt +@install_sys.sql "" "" "" + +---------------------------------------- +prompt Setup Continue on Error +WHENEVER SQLERROR CONTINUE +WHENEVER OSERROR CONTINUE + +---------------------------------------- +prompt +prompt ***************************** +prompt * Run SYSTEM Installation * +prompt ***************************** +prompt +connect &TOP_PDB_SYSTEM. +execute DBMS_JAVA.SET_OUTPUT(1000000); +set serveroutput on size unlimited format wrapped +@install_system.sql "" "" "" + +---------------------------------------- +prompt +prompt ************************* +prompt * Install Application * +prompt ************************* +prompt +@install_wtpsrc.sql "&TOP_PDB_SYSTEM." "" "" + +---------------------------------------- +prompt +prompt ***************** +prompt * Run Reports * +prompt ***************** +prompt +@report_status.sql "&TOP_PDB_SYSTEM." "" "" + +---------------------------------------- +set appinfo "Null" +set appinfo off +prompt +prompt "wtpsrc" Installation is Done. + diff --git a/wtpsrc/install_sys.sql b/wtpsrc/install_sys.sql new file mode 100644 index 0000000..070a641 --- /dev/null +++ b/wtpsrc/install_sys.sql @@ -0,0 +1,23 @@ + +-- +-- SYS Installation Script +-- +-- Must be run as SYS +-- + +spool install_sys.log + +set blockterminator off +set sqlblanklines on + +---------------------------------------- +-- USER Install + +@db_install.sql "SYS/WTP.usr" "" "" + +---------------------------------------- +set sqlblanklines off +set blockterminator on + +spool off + diff --git a/wtpsrc/install_system.sql b/wtpsrc/install_system.sql new file mode 100644 index 0000000..abd1be8 --- /dev/null +++ b/wtpsrc/install_system.sql @@ -0,0 +1,23 @@ + +-- +-- SYSTEM Installation Script +-- +-- Must be run as SYSTEM +-- + +spool install_system.log + +set blockterminator off +set sqlblanklines on + +---------------------------------------- +-- GRANT Install + +@db_install.sql "SYSTEM/WTP_usr.grnt" "" "" + +---------------------------------------- +set sqlblanklines off +set blockterminator on + +spool off + diff --git a/wtpsrc/install_wtpsrc.sql b/wtpsrc/install_wtpsrc.sql new file mode 100644 index 0000000..57ae496 --- /dev/null +++ b/wtpsrc/install_wtpsrc.sql @@ -0,0 +1,76 @@ + +-- +-- wtpsrc Installation Script +-- +-- Must be run as a SYSTEM User (DBA) +-- +-- Command Line Parameters: +-- 1 - INSTALL_SYSTEM_CONNECT: SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +spool install_wtpsrc.log + +define INSTALL_SYSTEM_CONNECT="&1." + +-- Must Set SQLPREFIX away from "#" Oracle Change Data Capture packages +set sqlprefix "~" + +-- Using "^P", CHR(16), DLE as an escape character +set escape OFF +set escape "" + +---------------------------------------- +-- Prepare for Install +@db_install.sql "./installation_prepare.sql" "" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- PROCEDURE Install + +@db_install.sql "WTP/WT_AD_HOC_REPORT.proc" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_EXECUTE_TEST_RUNNER.proc" "WTP" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- PACKAGE Install + +@db_install.sql "WTP/CORE_DATA.pspec" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/HOOK.pspec" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/JUNIT_CORE_REPORT.pspec" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WTPLSQL.pspec" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_ASSERT.pspec" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_CORE_REPORT.pspec" "WTP" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- TABLE Install + +@db_install.sql "WTP/HOOKS.tab" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_VERSIONS.tab" "WTP" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- DATA_LOAD Install + +@db_install.sql "WTP/HOOKS.cdl" "WTP" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- VIEW Install + +@db_install.sql "WTP/WT_QUAL_TEST_RUNNERS_VW.vw" "WTP" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- PACKAGE BODY Install + +@db_install.sql "WTP/CORE_DATA.pbody" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/HOOK.pbody" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/JUNIT_CORE_REPORT.pbody" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WTPLSQL.pbody" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_ASSERT.pbody" "WTP" "&INSTALL_SYSTEM_CONNECT." +@db_install.sql "WTP/WT_CORE_REPORT.pbody" "WTP" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- Finalize Installation +@db_install.sql "./installation_finalize.sql" "" "&INSTALL_SYSTEM_CONNECT." + +spool off + diff --git a/wtpsrc/installation_finalize.sql b/wtpsrc/installation_finalize.sql new file mode 100644 index 0000000..7660714 --- /dev/null +++ b/wtpsrc/installation_finalize.sql @@ -0,0 +1,48 @@ + +-- +-- Finalize Installation +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +define FINAL_SYSTEM_CONNECT="&1." + +prompt +prompt Drop_Temp_Publicly_Updateable_Table_SQL +drop table SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE purge; + +prompt +prompt fix_invalid_public_synonyms +@"fix_invalid_public_synonyms.sql" "" + +prompt +prompt compile_all +@"compile_all.sql" "" + +prompt +prompt alter_foreign_keys_ENABLE +@"alter_foreign_keys.sql" "ENABLE" + +prompt +prompt alter_triggers_ENABLE +@"alter_triggers.sql" "ENABLE" + +prompt +prompt update_id_sequences +@"update_id_sequences.sql" "" + +--prompt +--prompt alter_queues_ENABLE +--@"alter_queues.sql" "ENABLE" + +--prompt +--prompt alter_scheduler_jobs_ENABLE +--@"alter_scheduler_jobs.sql" "ENABLE" + +prompt +prompt Load Installation Files +@"odbcapture_installation_logs.cdl" "&FINAL_SYSTEM_CONNECT." diff --git a/wtpsrc/installation_prepare.sql b/wtpsrc/installation_prepare.sql new file mode 100644 index 0000000..265eb55 --- /dev/null +++ b/wtpsrc/installation_prepare.sql @@ -0,0 +1,9 @@ + +-- +-- Prepare for View Install +-- + +prompt +prompt Create_Temp_Publicly_Updateable_Table_SQL +create table SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE (c1 number); +grant all on SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE to PUBLIC with grant option; diff --git a/wtpsrc/list_invalids.csv b/wtpsrc/list_invalids.csv new file mode 100644 index 0000000..e2d4f25 --- /dev/null +++ b/wtpsrc/list_invalids.csv @@ -0,0 +1 @@ +"OWNER","OBJECT_NAME","OBJECT_TYPE","STATUS" diff --git a/wtpsrc/list_invalids.sql b/wtpsrc/list_invalids.sql new file mode 100644 index 0000000..1e38a7d --- /dev/null +++ b/wtpsrc/list_invalids.sql @@ -0,0 +1,47 @@ + +-- +-- List Invalid Objects for "wtpsrc" Install Type +-- + +declare + procedure do_it (in_schema in varchar2) is + begin + for buff in ( + with q1 as ( + select owner + ,object_name + ,object_type + ,status + from dba_objects obj + where obj.owner = in_schema + and ( obj.object_type != 'TYPE' + or obj.object_name not like 'SYSTP%==') + and obj.status != 'VALID' + UNION ALL + select syn.table_owner + ,syn.synonym_name + ,'PUBLIC_SYNONYM' OBJECT_TYPE + ,obj.status + from dba_synonyms syn + join dba_objects obj + on obj.object_name = syn.synonym_name + and obj.owner = syn.owner + and obj.status != 'VALID' + where syn.owner = 'PUBLIC' + and syn.table_owner = in_schema + ) + select '"' || owner || '",' || + '"' || object_name || '",' || + '"' || object_type || '",' || + '"' || status || '"' RECORD_DATA + from q1 + order by RECORD_DATA) + loop + dbms_output.put_line(buff.RECORD_DATA); + end loop; + end do_it; +begin + dbms_output.put_line('"OWNER","OBJECT_NAME","OBJECT_TYPE","STATUS"'); + do_it('WTP'); +end; +/ diff --git a/wtpsrc/log_files_junit_report.sql b/wtpsrc/log_files_junit_report.sql new file mode 100644 index 0000000..e088eca --- /dev/null +++ b/wtpsrc/log_files_junit_report.sql @@ -0,0 +1,282 @@ + +-- +-- Create JUnit XML Report of Database Log Files for "wtpsrc" Schema +-- + +--Element | Description +-------------|------------- +--TestSuite | install_SYS, install_SYSTEM, and install_wtpsrc +--Hostname | Database Name +--Property | name="Source Version" value="https://github.com/DMSTEX/DMSTEX.git at f2c736d0cc6fd80d961414dcae37df2bed0d69e2 (Branch: main)" +--Testcase | Script Name +--Classname | "Schema Name"."Object Type" +--Assertions | Number of PL/SQL Statements +--Status | PASS/FAIL/ERROR/DISABLE +--Time | Testcase Duration +--Timestamp | Testcase Runtime (ISO 8601 format) +--Errors | Number of Test Errors + +declare + -- + -- Process CLOB Contents from odbcapture_installation_logs + line_txt varchar2(4000); + so_far pls_integer; + end_pos pls_integer; + -- + -- Varchar2 Associative Array + TYPE vc2_aa_type is table of varchar2(4000) + index by pls_integer; + -- + -- Testcases + TYPE tc_rec_type is record + (schema_name varchar2(128) + ,script_ext varchar2(10) -- Script Name Extension + ,num_statements number(3) -- Number of statements executed in a script + ,status varchar2(10) -- PASS/FAIL + ,duration_secs number(5) + ,t_timestamp varchar2(20) -- 2014-01-21T16:17:18 + ,error_message varchar2(4000) + ,tc_err_aa vc2_aa_type + ,tc_sys_out_aa vc2_aa_type + ); + TYPE tc_aa_type is table of tc_rec_type + index by varchar2(256); -- Testcase Name (Script Name with Path) + tc_aa tc_aa_type; + tc_name varchar2(256); -- Testcase Name (Script Name with Path) + prev_tc_name varchar2(256); -- Previous Testcase Name + -- + tc_buff_aa vc2_aa_type; -- Buffer Array for Testcases + sys_buff_aa vc2_aa_type; -- Buffer Array for System + sys_err boolean := FALSE; -- System Error Found + -- + total_tests number(4); + total_errors number(4); + total_duration number(6); + -- + procedure initialize_testcase (in_buff in varchar2) is begin + -- === DBI Started: "ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tab" + tc_name := replace(substr(in_buff, 18, 256),'"',''); + tc_aa(tc_name).schema_name := substr(tc_name, 1, instr(tc_name,'/',1)-1); + tc_aa(tc_name).script_ext := substr(tc_name, instr(tc_name,'.',-1)+1,10); + tc_aa(tc_name).status := 'PASS'; + end initialize_testcase; + -- + procedure finalize_testcase (in_buff in varchar2) is begin + if tc_name is null then return; end if; + tc_aa(tc_name).t_timestamp := substr(in_buff,22,19); + tc_aa(tc_name).duration_secs := substr(in_buff,60,length(in_buff)-60-40); + total_duration := total_duration + tc_aa(tc_name).duration_secs; + if regexp_like(tc_name, '[.]cdl$') + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := '### SQL*Loader Log File: ' || replace(tc_name,'.cdl','.log'); + begin + select substr(replace(contents,CHR(10)||CHR(10),CHR(10)),1,4000) + into tc_buff_aa(tc_buff_aa.COUNT + 1) + from odbcapture_installation_logs + where file_name = replace(tc_name,'.cdl','.log'); + exception when others then + tc_buff_aa(tc_buff_aa.COUNT + 1) := SQLERRM; + end; + end if; + if tc_aa(tc_name).status = 'FAIL' + then + tc_aa(tc_name).num_statements := 1; + total_errors := total_errors + 1; + if tc_buff_aa.COUNT > 0 + then + for i in tc_buff_aa.FIRST .. tc_buff_aa.LAST + loop + tc_aa(tc_name).tc_err_aa(i) := tc_buff_aa(i); + end loop; + end if; + else + tc_aa(tc_name).num_statements := tc_buff_aa.COUNT; + if tc_buff_aa.COUNT > 0 + then + for i in tc_buff_aa.FIRST .. tc_buff_aa.LAST + loop + tc_aa(tc_name).tc_sys_out_aa(i) := tc_buff_aa(i); + end loop; + end if; + end if; + total_tests := total_tests + 1; + prev_tc_name := tc_name; + tc_buff_aa.DELETE; + tc_name := ''; + end finalize_testcase; + -- + procedure process_contents_line (in_txt in varchar2) is + ldr_txt varchar2(4000); + begin + if in_txt is null then return; end if; + case + when regexp_like(in_txt, '^=== DBI Started: ') + then + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := 'Unexpected Testcase End: ' || in_txt; + finalize_testcase(''); + initialize_testcase(in_txt); + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + else + initialize_testcase(in_txt); + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + end if; + when regexp_like(in_txt, '^=== DBI Completed at ') + then + -- === DBI Completed at 2024-03-05T02:54:49 for a duration of 1.25 seconds (started at 2024-03-05T02:54:48) + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + finalize_testcase(in_txt); + else + sys_err := TRUE; + sys_buff_aa(sys_buff_aa.COUNT + 1) := 'Unexpected Testcase End: ' || in_txt; + end if; + when regexp_like(in_txt, '^(-- ){0,1}(PL[/]SQL:|(PLS|OCI|ORA|SP2|SQL|TNS)-[[:digit:]])') + then + -- (-- ){0,1}: "-- " may or may not be present + -- PL/SQL: PL/SQL Message + -- PLS-"digit" PL/SQL Errors + -- OCI-"digit" Oracle Call Interface + -- ORA-"digit" Oracle Database Errors + -- SP2-"digit" SQL*Plus Errors + -- SQL-"digit" SQL Errors + -- TNS-"digit" Transparent Network Substrate Errors + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + tc_aa(tc_name).status := 'FAIL'; + if tc_aa(tc_name).error_message is null + then + tc_aa(tc_name).error_message := in_txt; + end if; + else + sys_err := TRUE; + sys_buff_aa(sys_buff_aa.COUNT + 1) := '(' || prev_tc_name || ') ' || in_txt; + end if; + else + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + else + sys_buff_aa(sys_buff_aa.COUNT + 1) := '(' || prev_tc_name || ') ' || in_txt; + end if; + end case; + end process_contents_line; + -- + procedure p (in_txt in varchar2) is begin + dbms_output.put_line(in_txt); + end p; +begin + -- + prev_tc_name := 'Initializing'; + -- JUnit XML Format for Jenkins: "https://llg.cubic.org/docs/junit/" + p(''); + p(''); + for buf1 in (select rownum TS_ID + ,l.file_name + ,to_char(l.load_dtm,'YYYY-MM-DD') || 'T' || + to_char(l.load_dtm,'HH24:MI:SS') TSTAMP + ,db.db_unique_name + ,l.contents + from odbcapture_installation_logs l + cross join v$database db + where l.install_type = 'wtpsrc' + and l.file_name like 'install%' + and l.load_dtm > trunc(sysdate,'DD') - 2 + order by l.file_name, l.load_dtm) + loop + -- Initialize + tc_aa.DELETE; + tc_buff_aa.DELETE; + sys_buff_aa.DELETE; + tc_name := ''; + total_tests := 0; + total_errors := 0; + total_duration := 0; + -- Fill the Testcase Array + so_far := 0; + loop + end_pos := instr(buf1.contents, chr(10), so_far + 1); + exit when end_pos = 0; + line_txt := substr(buf1.contents, so_far + 1, end_pos - so_far - 1); + process_contents_line(line_txt); + so_far := end_pos; + end loop; + line_txt := substr(buf1.contents, so_far + 1, 4000); + process_contents_line(line_txt); + -- testsuite can appear multiple times, if contained in a testsuites element. It can also be the root element. + p(' '); + tc_name := tc_aa.FIRST; + while tc_name is not null + loop + -- testcase can appear multiple times, see /testsuites/testsuite@tests + p(' '); + if tc_aa(tc_name).status = 'PASS' + then + if tc_aa(tc_name).tc_sys_out_aa.COUNT > 0 + then + -- Data that was written to standard out while the test was executed. optional + p(' '); + for i in tc_aa(tc_name).tc_sys_out_aa.FIRST .. tc_aa(tc_name).tc_sys_out_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(tc_aa(tc_name).tc_sys_out_aa(i))); + end loop; + p(' '); + end if; + else + -- Indicates that the test errored. An errored test is one that had an unanticipated problem. For example an unchecked throwable or a problem with the implementation of the test. Contains as a text node relevant data for the error, for example a stack trace. optional + p(' ' ); -- The error message. e.g., if a java exception is thrown, the return value of getMessage() + if tc_aa(tc_name).tc_err_aa.COUNT > 0 + then + for i in tc_aa(tc_name).tc_err_aa.FIRST .. tc_aa(tc_name).tc_err_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(tc_aa(tc_name).tc_err_aa(i))); + end loop; + end if; + p(' '); + end if; + p(' '); + exit when tc_name = tc_aa.LAST; + tc_name := tc_aa.NEXT(tc_name); + end loop; + if sys_buff_aa.COUNT > 0 + then + if sys_err + then + -- Data that was written to standard error while the test suite was executed. optional + p(' '); + for i in sys_buff_aa.FIRST .. sys_buff_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(sys_buff_aa(i))); + end loop; + p(' '); + else + -- Data that was written to standard out while the test suite was executed. optional + p(' '); + for i in sys_buff_aa.FIRST .. sys_buff_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(sys_buff_aa(i))); + end loop; + p(' '); + end if; + end if; + p(' '); + end loop; + p(''); +end; +/ diff --git a/wtpsrc/odbcapture_installation_logs.cdl b/wtpsrc/odbcapture_installation_logs.cdl new file mode 100644 index 0000000..efb09a6 --- /dev/null +++ b/wtpsrc/odbcapture_installation_logs.cdl @@ -0,0 +1,71 @@ + +-- +-- Consolidated Data Load script for odbcapture_installation_logs data +-- +-- Must be run as SYSTEM +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +prompt +prompt Confirm/Create odbcapture_installation_logs Table +declare + jnk number := 0; + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql || ';'); + execute immediate in_sql; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end run_sql; +begin + begin + execute immediate 'insert into odbcapture_installation_logs(load_dtm, install_type, file_name)' || + ' values(sysdate, ''Test'', ''Test'')'; + rollback; + jnk := 1; + exception when others then + if SQLERRM != 'ORA-00942: table or view does not exist' + then + dbms_output.put_line('odbcapture_installation_logs table: ' || SQLERRM); + end if; + jnk := -1; + end; + if jnk = -1 + then + run_sql('create table odbcapture_installation_logs' || CHR(10) || + ' (load_dtm date' || CHR(10) || + ' ,install_type varchar2(10)' || CHR(10) || + ' ,file_name varchar2(512)' || CHR(10) || + ' ,contents clob)'); + run_sql('comment on column odbcapture_installation_logs.load_dtm is ''Date/Time the installation log file was loaded.'''); + run_sql('comment on column odbcapture_installation_logs.install_type is ''Type of installation (from TYPE_CONF).'''); + run_sql('comment on column odbcapture_installation_logs.file_name is ''Name of installation log file.'''); + run_sql('comment on column odbcapture_installation_logs.contents is ''Contents/Text of the installation log file.'''); + run_sql('comment on table odbcapture_installation_logs is ''ODBCAPTURE installation log files.'''); + run_sql('grant select on odbcapture_installation_logs to public'); + run_sql('create public synonym odbcapture_installation_logs for odbcapture_installation_logs'); + end if; +end; +/ + + +-- NOTE: Additional file extensions for SQL*Loader include +-- .bad - Bad Records +-- .dsc - Discard Records +-- .log - Log File + +prompt +prompt sqlldr_control=./odbcapture_installation_logs.ctl +host sqlldr '&1.' control=odbcapture_installation_logs.ctl data=odbcapture_installation_logs.csv log=odbcapture_installation_logs.log silent=HEADER,FEEDBACK + +begin + if '&_RC.' != '0' then + raise_application_error(-20000, 'Control file "odbcapture_installation_logs.ctl" returned error: &_RC.'); + end if; +end; +/ + diff --git a/wtpsrc/odbcapture_installation_logs.csv b/wtpsrc/odbcapture_installation_logs.csv new file mode 100644 index 0000000..861a74e --- /dev/null +++ b/wtpsrc/odbcapture_installation_logs.csv @@ -0,0 +1,4 @@ +"wtpsrc","install_sys.log" +"wtpsrc","install_system.log" +"wtpsrc","install_wtpsrc.log" +"wtpsrc","WTP/HOOKS.log" diff --git a/wtpsrc/odbcapture_installation_logs.ctl b/wtpsrc/odbcapture_installation_logs.ctl new file mode 100644 index 0000000..3a1cf46 --- /dev/null +++ b/wtpsrc/odbcapture_installation_logs.ctl @@ -0,0 +1,8 @@ +LOAD DATA +APPEND INTO TABLE "ODBCAPTURE_INSTALLATION_LOGS" +FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' + (LOAD_DTM SYSDATE + ,INSTALL_TYPE char(10) + ,FILE_NAME char(512) + ,CONTENTS LOBFILE(FILE_NAME) TERMINATED BY EOF + ) diff --git a/wtpsrc/report_status.sql b/wtpsrc/report_status.sql new file mode 100644 index 0000000..1e1b71e --- /dev/null +++ b/wtpsrc/report_status.sql @@ -0,0 +1,114 @@ + +-- +-- Report Status Script +-- +-- Must be run as SYSTEM User (DBA) +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- +-- Note: odbcapture_installation_logs table will be created +-- to load installation logs (if not already available). +-- + +---------------------------------------- +-- Setup for Reports +set linesize 2499 +set trimspool on +set echo off +set verify off +set termout on +set serveroutput on size unlimited format wrapped + +---------------------------------------- +prompt +prompt Reporting Summary of Install Type Log Errors +declare + TYPE err_aa_type is table of pls_integer index by varchar2(4000); + err_aa err_aa_type; + line_txt varchar2(4000); + so_far pls_integer; + end_pos pls_integer; + procedure add_line is + begin + if regexp_like(line_txt, '(ORA-|SQL-|SP2-|PLS-|PL2-|TNS-|(object|mmap) failed)') + then + begin + err_aa(line_txt) := err_aa(line_txt) + 1; + exception when NO_DATA_FOUND then + err_aa(line_txt) := 1; + end; + end if; + end add_line; +begin + for buff in (select file_name, load_dtm, contents + from odbcapture_installation_logs + where install_type = 'wtpsrc' + and load_dtm > trunc(sysdate,'DD') - 2 + order by file_name, load_dtm) + loop + dbms_output.put_line('Processing file ' || buff.file_name || + ' (' || to_char(buff.load_dtm,'YYYY-MM-DD HH24:MI:SS') || ')'); + err_aa.DELETE; + so_far := 0; + loop + end_pos := instr(buff.contents, chr(10), so_far + 1); + exit when end_pos = 0; + line_txt := substr(buff.contents, so_far + 1, end_pos - so_far - 1); + add_line; + so_far := end_pos; + end loop; + line_txt := substr(buff.contents, so_far + 1, 4000); + add_line; + if err_aa.COUNT = 0 then continue; end if; + line_txt := err_aa.FIRST; + loop + dbms_output.put_line(line_txt); + dbms_output.put_line(' ' || err_aa(line_txt) || ' lines: ' || line_txt); + exit when line_txt = err_aa.LAST; + line_txt := err_aa.NEXT(line_txt); + end loop; + end loop; +end; +/ + +---------------------------------------- +prompt +prompt Reporting Invalid Objects +set feedback off +set termout off +spool list_invalids.csv +@"list_invalids.sql" "" +spool off +set termout on +set feedback on + +---------------------------------------- +prompt +prompt Reporting JUnit XML Database Build Status +set feedback off +set termout off +spool db_build_junit_report.xml +@"db_build_junit_report.sql" "" +spool off +set termout on +set feedback on + +---------------------------------------- +prompt +prompt Reorting JUnit XML Installation Log +set feedback off +set termout off +spool log_files_junit_report.xml +@"log_files_junit_report.sql" "" +spool off +set termout on +set feedback on + +---------------------------------------- +-- Done with Reports +set linesize 80 +set verify on diff --git a/wtpsrc/update_id_sequences.sql b/wtpsrc/update_id_sequences.sql new file mode 100644 index 0000000..9f61105 --- /dev/null +++ b/wtpsrc/update_id_sequences.sql @@ -0,0 +1,59 @@ + +-- +-- Update "wtpsrc" IDENTITY SEQUENCES +-- + +declare + UNDEFINED_SEQUENCE EXCEPTION; -- sequence not yet defined in this session + PRAGMA EXCEPTION_INIT (UNDEFINED_SEQUENCE, -8002); + l_last_seq number; + l_max_val number; + sql_txt varchar2(4000); + procedure do_it (in_schema_name in varchar2) is + begin + for buff in ( + select tic.owner + ,tic.table_name + ,tic.column_name + ,tic.sequence_name + from dba_tab_identity_cols tic + where tic.owner = in_schema_name) + loop + -- Find the Current Sequence Value + sql_txt := 'select ' || buff.owner || '.' || buff.sequence_name || + '.currval from dual'; + begin + execute immediate sql_txt into l_last_seq; + exception when UNDEFINED_SEQUENCE + then + -- Find the Last Number for the Sequence + select ds.last_number into l_last_seq + from dba_sequences ds + where ds.sequence_owner = buff.owner + and ds.sequence_name = buff.sequence_name; + end; + -- Find the maximum IDENTITY column value + sql_txt := 'select max(' || buff.column_name || ')' || + ' from ' || buff.owner || '.' || buff.table_name; + execute immediate sql_txt into l_max_val; + -- Display values found + dbms_output.put_line(buff.owner || '.' || buff.sequence_name || ' Last Sequence: ' || l_last_seq || + ', ' || buff.owner || '.' || buff.table_name || ' max(' || buff.column_name || ') = ' || l_max_val); + if l_last_seq < l_max_val + then + -- Increment the sequence as necessary + sql_txt := 'begin' || + ' while ' || buff.owner || '.' || buff.sequence_name || '.nextval < ' || l_max_val || + ' loop null; end loop;' || + 'end;'; + dbms_output.put_line(sql_txt); + execute immediate sql_txt;-- using l_last_seq; + end if; + end loop; + dbms_output.put_line('-- ' || in_schema_name || ' Identity Sequence Updates is done.'); + end do_it; +begin + dbms_output.put_line('Update ID Sequences for wtpsrc Install Type'); + do_it('WTP'); +end; +/ diff --git a/wtptst/WTP/WT_SELF_TEST.cdl b/wtptst/WTP/WT_SELF_TEST.cdl new file mode 100644 index 0000000..780817f --- /dev/null +++ b/wtptst/WTP/WT_SELF_TEST.cdl @@ -0,0 +1,134 @@ + +-- +-- Consolidated Data Load script for WTP.WT_SELF_TEST data +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +prompt +prompt Disable Triggers and Foreign Keys +declare + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql || ';'); + execute immediate in_sql; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end run_sql; +begin + for buff in (select owner, trigger_name + from dba_triggers + where table_owner = 'WTP' + and table_name = 'WT_SELF_TEST' + order by owner, trigger_name) + loop + run_sql('alter trigger "' || buff.owner || '"' || + '."' || buff.trigger_name || '" DISABLE'); + end loop; + for buff in (select constraint_name + from dba_constraints + where constraint_type = 'R' + and owner = 'WTP' + and table_name = 'WT_SELF_TEST' + order by owner, constraint_name) + loop + run_sql('alter table "WTP"."WT_SELF_TEST"' || + ' DISABLE constraint "' || buff.constraint_name || '"'); + end loop; +end; +/ + +-- NOTE: Additional file extensions for SQL*Loader include +-- .bad - Bad Records +-- .dsc - Discard Records +-- .log - Log File + +prompt +prompt sqlldr_control=WTP/WT_SELF_TEST.ctl +host sqlldr '&1.' control=WTP/WT_SELF_TEST.ctl data=WTP/WT_SELF_TEST.csv log=WTP/WT_SELF_TEST.log silent=HEADER,FEEDBACK + +begin + if '&_RC.' != '0' then + raise_application_error(-20000, 'Control file "WTP/WT_SELF_TEST.ctl" returned error: &_RC.'); + end if; +end; +/ + +declare + l_blob blob; + the_blob blob; + procedure b64_decode + (in_blob in BLOB) + is + B64_ENCODE_HEADER constant varchar2(30) := '(Base64 with Linefeeds)'; + SPLIT_LEN constant pls_integer := 32764; -- Must be divisible by 4 + header_txt varchar2(128); + len_blob pls_integer; + ptr pls_integer; + begin + dbms_lob.trim(l_blob, 0); + dbms_lob.trim(the_blob, 0); + ---------------------------------------- + -- Check incoming BLOB sizes (and return if needed) + if in_blob is null then return; end if; + len_blob := length(in_blob); + if len_blob = 0 then return; end if; + ---------------------------------------- + -- Check for B64_ENCODE_HEADER in in_BLOB + header_txt := to_char(dbms_lob.substr(in_blob + ,length(B64_ENCODE_HEADER) + ,1) + ,nls_charset_id('US7ASCII')); + if header_txt != B64_ENCODE_HEADER + then + raise_application_error(-20000, 'B64_ENCODE_HEADER missing from data: ' || header_txt); + end if; + ---------------------------------------- + -- Create "L_BLOB" after removing B64_ENCODE_HEADER, Carriage Returns, and Line Feeds + ptr := 1 + length(B64_ENCODE_HEADER); -- Skip over the header + while ptr <= len_blob + loop + dbms_lob.append(l_blob + ,utl_raw.translate(dbms_lob.substr(in_blob + ,SPLIT_LEN + ,ptr) + ,hextoraw('000D0A') -- NULL, Carriage Return, Line Feed + ,hextoraw('00') ) ); -- NULL + ptr := ptr + SPLIT_LEN; + end loop; + len_blob := length(l_blob); + ---------------------------------------- + -- Create "THE_BLOB" after Base64 Decoding + ptr := 1; + while ptr <= len_blob + loop + dbms_lob.append(the_blob + ,UTL_ENCODE.BASE64_DECODE(dbms_lob.substr(l_blob + ,SPLIT_LEN + ,ptr) ) ); + ptr := ptr + SPLIT_LEN; + end loop; + end b64_decode; +begin + dbms_lob.createtemporary(l_blob, true); + dbms_lob.createtemporary(the_blob, true); + for buff in (select ROWID RID, "TEMP_BLOB" + from "WTP"."WT_SELF_TEST" + for update of "TEMP_BLOB") + loop + b64_decode(buff."TEMP_BLOB"); + -- This overwrites the Base64 Encoded String with the original binary data + update "WTP"."WT_SELF_TEST" + set "TEMP_BLOB" = the_blob + where rowid = buff.rid; + end loop; + dbms_lob.freetemporary(l_blob); + dbms_lob.freetemporary(the_blob); +end; +/ + +commit; + diff --git a/wtptst/WTP/WT_SELF_TEST.csv b/wtptst/WTP/WT_SELF_TEST.csv new file mode 100644 index 0000000..f0f6c77 --- /dev/null +++ b/wtptst/WTP/WT_SELF_TEST.csv @@ -0,0 +1,7134 @@ +"ID","TEMP_CLOB","TEMP_NCLOB","TEMP_XML","TEMP_BLOB" +1," + + FPDS-NG search results for<![CDATA[: pl/sql]]> + + + + + + + + + <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]> + + 2016-02-16 13:10:02 + + + + + 1625 + DOLF072J11595 + 0 + 0 + + 4730 + GS35F4543G + 0 + + 2007-05-04 00:00:00 + 2007-04-15 00:00:00 + 2008-04-14 00:00:00 + 2008-04-14 00:00:00 + + 12638.59 + 12638.59 + 12638.59 + + 0.00 + 0.00 + 0.00 + + 1625 + BLSNO + X + + 0.00 + + C + J + NONE + X + XPERT FOR ORACLE ADMINISTRATION, PL/SQL DEVELOPMENT, TUNING MODULE, QUEST SQL OPTIMIZER. + + N + X + N + X + N + N + 1 + + N + X + X + X + + X + + 7030 + D + 541519 + E + + + DLT SOLUTIONS INCORPORATED + + + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + false + false + false + + false + false + false + false + false + false + false + + false + false + false + + false + false + false + false + 173 + 26 + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + 13861 SUNRISE VALLEY DR STE 400 + HERNDON + VA + 201716126 + USA + 10 + 7864681990000PR + 201716126 + + 786468199 + DLT SOLUTIONS INCORPORATED + 786468199 + DLT SOLUTIONS LLC + + 2002-03-14 00:00:00 + 2008-11-16 00:00:00 + S + + + 50000 + DC + USA + 202120002 + 00 + + SP1 + NONE + NONE + 1 + A + N + false + N + X + + + REYNOLDS.VANESSA@BLS.GOV + 2007-04-10 16:40:29 + IDV_CORRECT + 2016-02-16 13:10:02 + F + + + + <![CDATA[New DELIVERY ORDER EDCIO12O0009 awarded to DLT SOLUTIONS, LLC for the amount of $14,168.16]]> + + 2016-02-16 13:10:16 + + + + + 9100 + EDCIO12O0009 + 0 + 0 + + 4730 + GS35F4543G + 107 + + 2012-05-11 00:00:00 + 2012-05-11 00:00:00 + 2012-09-30 00:00:00 + 2013-06-30 00:00:00 + + 14168.16 + 14168.16 + 14168.16 + + 14168.16 + 14168.16 + 14168.16 + + 9100 + PO + 9100 + EI + X + + 0.00 + + C + J + NONE + TOAD SOFTWARE SUPPORT RENEWAL. TOAD IS USED BY THE DEPARTMENT OF EDUCATION AS A PRIMARY SQL AND PL/SQL DEVELOPMENT TOOL. IT IS ALSO USED FOR PRODUCTION SUPPORT AND MANAGING ORACLE DATABASES. + N + X + N + X + N + X + + + + 91 + 0202 + N + 1 + + N + X + X + X + + X + + 7030 + D + 541519 + C + E + USA + D + + + DLT SOLUTIONS, LLC + + + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + true + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + false + false + true + + false + false + false + false + false + false + false + + false + true + false + + true + false + false + false + VA + USA + CORPORATE NOT TAX EXEMPT + 245 + 775944576 + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + 13861 SUNRISE VALLEY DR STE 400 + HERNDON + VA + 201716126 + USA + 10 + + 786468199 + DLT SOLUTIONS, LLC + 786468199 + DLT SOLUTIONS LLC + + O + + + DC + USA + 202020001 + 00 + + A + MAFO + NONE + NONE + FAIR + 1 + A + N + N + X + N + + + KARL.L.FEHRMAN@ED.GOV + 2012-05-08 13:41:06 + IDV_CORRECT + 2016-02-16 13:10:16 + F + MICHAEL.HOLLOWAY@ED.GOV + 2012-05-11 10:13:31 + + + + <![CDATA[PURCHASE ORDER DJF152600P0008877 (1) awarded to SKILLBUILDERS INC, was modified for the amount of $0]]> + + 2016-09-15 10:37:14 + + + + + 1549 + DJF152600P0008877 + 1 + 0 + + 2015-10-30 00:00:00 + 2015-10-30 00:00:00 + 2015-10-30 00:00:00 + 2015-10-30 00:00:00 + + 0.00 + 0.00 + 0.00 + + 15000.00 + 15000.00 + 15000.00 + + 1549 + PDS02 + 1549 + PDS02 + X + + 0.00 + + B + J + K + NONE + ""IGF::CL::IGF"" + + + + +THIS WILL BE AN ONLINE CLASS FOR 10 APPLICATION DEVELOPERS. EACH DEVELOPER WILL ACCESS THE TRAINING FROM EITHER A HOME COMPUTER OR ONE ON UNET. COURSE TOPICS INCLUDE SQL STATEMENT PROCESSING, PL/SQL TUNING, VIEWING THE EXECUTION PLAN, THE IMPORTANC + CL + N + X + N + N + X + + + + 15 + 0200 + 000 + Y + 1 + + N + N + N + N + + X + + U012 + D + 611420 + C + A + USA + C + + + SKILLBUILDERS INC + + + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + true + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + false + false + true + + false + false + false + false + false + false + false + + true + false + false + + true + false + false + false + RI + USA + CORPORATE NOT TAX EXEMPT + 3 + 800000 + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + 213 ROBINSON ST + WAKEFIELD + RI + 028793590 + USA + 4017836172 + 4017830405 + 02 + 960084242 + 02879 + + 960084242 + SKILLBUILDERS INC + 960084242 + SKILLBUILDERS INC + + 2001-10-22 00:00:00 + 2016-01-21 00:00:00 + O + + + DC + USA + 205350001 + 00 + + A + NP + NONE + NONE + 3 + D + N + N + N + N + + B + + VLBANKS + 2015-10-30 13:34:40 + VLBANKS + 2016-09-15 10:37:14 + F + VLBANKS + 2016-09-15 10:37:14 + VLBANKS + 2016-09-15 10:37:14 + Y + + + + <![CDATA[New PURCHASE ORDER DOC40PAPT1511219 awarded to SHI INTERNATIONAL CORP. for the amount of $4,000]]> + + 2015-06-11 17:40:38 + + + + + 1344 + DOC40PAPT1511219 + 0 + 0 + + 2015-06-09 00:00:00 + 2015-06-09 00:00:00 + 2016-06-08 00:00:00 + 2016-06-08 00:00:00 + + 4000.00 + 4000.00 + 4000.00 + + 4000.00 + 4000.00 + 4000.00 + + 1344 + 000PA + 1344 + 000PA + X + + 0.00 + + B + J + NONE + LICENSE FOR SONARSOURCE PL/SQL + N + X + N + X + X + + + + 13 + 1006 + 000 + N + 1 + + Y + X + X + X + + X + + 7030 + D + 423430 + C + A + E + USA + D + + + SHI INTERNATIONAL CORP. + + + false + false + false + false + false + false + false + true + + true + false + true + false + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + true + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + false + false + true + + false + false + false + false + false + false + false + + false + false + false + + true + false + false + false + NJ + USA + CORPORATE NOT TAX EXEMPT + 2000 + 6500000000 + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + 290 DAVIDSON AVE STE 101 + SOMERSET + NJ + 088734179 + USA + 8476031132 + 12 + 611429481 + 08873 + + 611429481 + SHI INTERNATIONAL CORP. + 611429481 + SHI INTERNATIONAL CORP. + + 2001-12-05 00:00:00 + 2016-05-19 00:00:00 + O + + + VA + USA + 223131450 + 08 + + G + SP1 + NONE + NONE + SP2 + 1 + D + N + N + X + N + + B + + PTOTBF + 2015-06-11 17:09:54 + PTOTBF + 2015-06-11 17:40:38 + F + PTOTBF + 2015-06-11 17:40:38 + + + + <![CDATA[New DELIVERY ORDER AG32SBD150147 awarded to APEXTECH LLC for the amount of $198,000]]> + + 2017-10-04 14:20:48 + + + + + 12H2 + AG32SBD150147 + 0 + 0 + + 4732 + GS06F0821Z + 0 + + 2015-06-03 00:00:00 + 2015-06-03 00:00:00 + 2019-07-05 00:00:00 + 2019-07-05 00:00:00 + + 198000.00 + 198000.00 + 833580.00 + + 614790.00 + 614790.00 + 833580.00 + + 12H2 + 32SB + 12H2 + 31PE + X + + 0.00 + + C + J + NONE + THE PURPOSE OF THIS DELIVERY ORDER IS TO PURCHASE ORACLE PL/SQL PROGRAMMER (DATABASE ANALYST/PROGRAMMER-SENIOR) SERVICES IN ACCORDANCE WITH ATTACHED STATEMENT OF WORK DATED 6/1/2015. + +THIS AWARD IS AN OPTION YEAR CONTRACT. IT INCLUDES A BASE YEAR PLUS, THREE (3) ONE YEAR OPTION PERIODS. BASE YEAR PERIOD OF PERFORMANCE IS 7/6/2015 THROUGH 7/5/2016. + +IGF::CT::IGF + CT + N + X + N + N + X + + + + 12 + 1400 + N + 1 + + Y + X + N + X + + X + + D308 + D + 541512 + C + A + E + USA + C + + + APEXTECH LLC + + + false + false + false + false + false + false + false + false + + true + false + false + false + true + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + true + false + false + + false + false + false + false + false + false + false + + false + true + false + + true + false + false + false + OTHER + 13 + 2000000 + + false + false + false + false + false + false + false + false + false + false + false + false + + true + false + true + true + false + false + false + + 2200 WILSON BLVD + ARLINGTON + VA + 222013397 + USA + 7032539722 + 7035222037 + 08 + 126242150 + 222013397 + + 126242150 + APEXTECH LLC + 126242150 + APEXTECH LLC + + 2003-01-15 00:00:00 + 2014-07-31 00:00:00 + S + + + MD + USA + 207051003 + 04 + + D + MAFO + 8A + NONE + OSA + A + N + N + Y + N + + B + + JESSICA.MASSEY@ARS.USDA.GOV + 2015-05-21 14:03:35 + IDV_CORRECT + 2017-10-04 14:20:48 + F + JESSICA.MASSEY@ARS.USDA.GOV + 2015-06-03 13:17:36 + N + + + + <![CDATA[New PURCHASE ORDER M6738610P1027 awarded to DILTEX INC for the amount of $700]]> + + 2017-11-29 23:36:42 + + + + + 9700 + M6738610P1027 + 0 + 0 + + 2010-05-18 00:00:00 + 2010-05-18 00:00:00 + 2010-06-17 00:00:00 + 2010-06-17 00:00:00 + + 700.00 + 700.00 + 700.00 + + 700.00 + 700.00 + 700.00 + + 1700 + M67386 + 1700 + M67386 + X + + 0.00 + + B + J + NONE + PL/SQL SOFTWARE DEVELOPER + N + N + X + N + X + Z + N + 1 + + Y + N + N + N + + X + + 7030 + D + C9E + 423430 + C + A + 000 + A + A + USA + D + + + DILTEX INC + + + false + false + false + false + false + false + false + true + + true + true + false + false + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + true + false + false + + false + false + false + false + false + false + false + + true + false + false + + true + false + false + false + OTHER + 4 + 2000000 + + false + false + false + false + false + false + false + false + false + false + false + false + + false + true + false + false + false + false + false + + 14530 PACIFIC AVE + BALDWIN PARK + CA + 917065340 + USA + 6269601314 + 6269560615 + 32 + 969907914 + 917065340 + + 969907914 + DILTEX INC + 969907914 + DILTEX INC + + 2005-10-02 00:00:00 + 2011-01-12 00:00:00 + S + + + MO + USA + 641471208 + 05 + + D + NP + SBA + NONE + 2 + A + N + false + N + X + N + 0.00 + + B + + JUDY.RUPARD.M67386@USMC.MIL + 2010-05-18 08:59:07 + DOD_CLOSEOUT + 2017-11-29 23:36:42 + F + ANDREA.LEACH.M67386@USMC.MIL + 2010-05-18 10:04:12 + DOD_CLOSEOUT + 2017-11-29 23:36:42 + Y + + + + <![CDATA[New PURCHASE ORDER AG64WCP140083 awarded to SOFTCHOICE CORPORATION for the amount of $216]]> + + 2014-06-29 12:37:57 + + + + + 1205 + AG64WCP140083 + 0 + 0 + + 2014-06-29 00:00:00 + 2014-06-27 00:00:00 + 2015-06-30 00:00:00 + 2015-06-30 00:00:00 + + 216.00 + 216.00 + 216.00 + + 216.00 + 216.00 + 216.00 + + 1205 + 64WC + 12A7 + 64WC + X + + 0.00 + + B + J + PL SQL DEVELOPER SFTW RENEWAL + NONE + IGF::OT::IGF + +PL/SQL DEVELOPER LICENSES ANNUAL SERVICE CONTRACT - 6 USERS E-DOWNLOAD, PART RV1555 #5266.6 + +WAIVER: FY14-RENEWAL R14318, CO-JADAMS, PURCHASE CARD, SOFTCHOICE + OT + N + X + N + N + X + + + + 12 + 4609 + Y + 1 + + N + N + N + N + + X + + D319 + D + 541519 + C + A + E + USA + C + + + SOFTCHOICE CORPORATION + + + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + true + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + false + false + true + + false + false + false + false + false + false + false + + false + false + false + + true + false + false + false + NY + USA + CORPORATE NOT TAX EXEMPT + 1200 + 1000000000 + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + 314 W SUPERIOR ST STE 301 + CHICAGO + IL + 606543538 + USA + 7034801969 + 7034801956 + 07 + 929022028 + 606543538 + + 929022028 + SOFTCHOICE CORPORATION + 248864415 + SOFTCHOICE CORPORATION + + 2003-02-06 00:00:00 + 2015-02-03 00:00:00 + O + + + MO + USA + 641143363 + 05 + + F + SP1 + NONE + NONE + 2 + A + N + N + N + N + + B + + JENNIFER.ADAMS@USDA.GOV + 2014-06-29 12:02:32 + JENNIFER.ADAMS@USDA.GOV + 2014-06-29 12:37:57 + F + JENNIFER.ADAMS@USDA.GOV + 2014-06-29 12:37:57 + + + + <![CDATA[New DELIVERY ORDER AG32SBD170266 awarded to APEXTECH LLC for the amount of $211,860]]> + + 2017-10-04 14:20:48 + + + + + 12H2 + AG32SBD170266 + 0 + 0 + + 4732 + GS06F0821Z + PA0003ADDRESSCHG + + 2017-09-22 00:00:00 + 2017-09-22 00:00:00 + 2019-09-28 00:00:00 + 2019-09-28 00:00:00 + + 211860.00 + 211860.00 + 430650.00 + + 211860.00 + 211860.00 + 430650.00 + + 12H2 + 1232SB + 12H2 + 12344P + X + + 0.00 + + C + J + NONE + IGF::OT::IGF +ORACLE PL/SQL PROGRAMMERS + OT + N + X + D + N + X + + + + 12 + 1400 + N + 1 + + Y + X + N + X + + B + 40 U.S.C. 11302(E) + + D308 + H + 541512 + C + A + E + USA + C + + + APEXTECH LLC + + + false + false + false + false + false + false + false + false + + true + false + false + false + true + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + true + false + false + + false + false + false + false + false + false + false + + false + true + false + + true + false + false + false + OTHER + 13 + 2000000 + + false + false + false + false + false + false + false + false + false + false + false + false + + true + false + true + true + false + false + false + + 2200 WILSON BLVD STE 810 + ARLINGTON + VA + 222013361 + USA + 7032539722 + 7035222037 + 08 + 126242150 + 222013397 + + 126242150 + 3C7R1 + APEXTECH LLC + 126242150 + APEXTECH LLC + + 2003-01-15 00:00:00 + 2014-07-31 00:00:00 + S + + + MD + USA + 207051003 + 04 + + D + MAFO + 8A + NONE + OSA + A + N + N + Y + N + + + PAUL.MERRITT@ARS.USDA.GOV + 2017-09-19 10:19:11 + IDV_CORRECT + 2017-10-04 14:20:48 + F + PAUL.MERRITT@ARS.USDA.GOV + 2017-09-22 14:31:02 + N + + + + <![CDATA[New DELIVERY ORDER HQ042307F0009 awarded to DLT SOLUTIONS INCORPORATED for the amount of $3,199]]> + + 2016-02-16 13:10:05 + + + + + 9700 + HQ042307F0009 + 0 + 0 + + 4730 + GS35F4543G + 0 + + 2006-10-01 00:00:00 + 2006-10-01 00:00:00 + 2007-09-30 00:00:00 + 2007-09-30 00:00:00 + + 3199.00 + 3199.00 + 3199.00 + + 3199.00 + 3199.00 + 3199.00 + + 97BZ + HQ0423 + 97BZ + HQ0422 + X + + 0.00 + + C + J + NONE + X + SQL NAVIGATOR FOR ORACLE SOFTWARE LICENSE MAINTENANCE RENEWAL; SQL NAVIGATOR FOR ORACLE XPERT TUNING MODULE SOFTWARE LICENSE MAINTENANCE RENEWAL; PL FORMAT OPTION FOR SQL NAVIGATOR SOFTWARE LICENSE MAINTENANCE RENEWAL; DEBUGGER OPTION FOR SQL NAVIGATOR SOFTWARE LICENSE MAINTENANCE RENEWAL; AND KNOWLEDGE XPERT FOR PL/SQL DEVELOPMENT SOFTWARE MAINTENANCE LICENSE RENEWAL + N + N + X + N + N + N + Z + N + 1 + + N + X + X + X + + X + + D301 + D + A7 + 541519 + 000 + A + E + USA + C + + + DLT SOLUTIONS INCORPORATED + + + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + false + false + false + + false + false + false + false + false + false + false + + false + false + false + + false + false + false + false + 173 + 26 + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + 13861 SUNRISE VALLEY DR STE 400 + HERNDON + VA + 201716126 + USA + 10 + 7864681990000PR + 201716126 + + 786468199 + DLT SOLUTIONS INCORPORATED + 786468199 + DLT SOLUTIONS LLC + + 2002-03-14 00:00:00 + 2008-11-16 00:00:00 + S + + + 16000 + OH + USA + 441992055 + 11 + + A + MAFO + NONE + NONE + FAIR + 1 + A + N + false + N + X + 0.00 + + B + + LINDA.BARVINCHAK.HQ0423@DFAS.MIL + 2007-01-14 17:35:05 + IDV_CORRECT + 2016-02-16 13:10:05 + F + + + + <![CDATA[New DELIVERY ORDER DJDEAEP070051D awarded to DLT SOLUTIONS INCORPORATED for the amount of $544.2]]> + + 2016-02-16 13:10:02 + + + + + 1524 + DJDEAEP070051D + 0 + 0 + + 4730 + GS35F4543G + 0 + + 2007-04-25 00:00:00 + 2007-04-25 00:00:00 + 2007-09-30 00:00:00 + 2008-09-29 00:00:00 + + 544.20 + 544.20 + 544.20 + + 544.20 + 544.20 + 544.20 + + 1524 + DEAEP + X + + 0.00 + + C + J + NONE + X + RENEWAL OF SOFTWARE MAINTENANCE AND TECHNICAL SUPPORT FOR KNOWLEDGE XPERT FOR PL/SQL DEVELOPMENT. ESSENTIAL TO EIS SOFTWARE APPLICATION + N + X + N + N + N + N + 1 + + N + X + X + X + + X + + D310 + D + 541519 + E + + + DLT SOLUTIONS INCORPORATED + + + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + false + false + false + + false + false + false + false + false + false + false + + false + false + false + + false + false + false + false + 173 + 26 + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + 13861 SUNRISE VALLEY DR STE 400 + HERNDON + VA + 201716126 + USA + 10 + 7864681990000PR + 201716126 + + 786468199 + DLT SOLUTIONS INCORPORATED + 786468199 + DLT SOLUTIONS LLC + + 2002-03-14 00:00:00 + 2008-11-16 00:00:00 + S + + + 24000 + TX + USA + 799088098 + 16 + + SP1 + NONE + NONE + 1 + A + N + false + N + X + + + ELENA.A.BESAW@USDOJ.GOV + 2007-05-03 15:21:39 + IDV_CORRECT + 2016-02-16 13:10:02 + F + + +"," + + FPDS-NG search results for<![CDATA[: pl/sql]]> + + + + + + + + + <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]> + + 2016-02-16 13:10:02 + + + + + 1625 + DOLF072J11595 + 0 + 0 + + 4730 + GS35F4543G + 0 + + 2007-05-04 00:00:00 + 2007-04-15 00:00:00 + 2008-04-14 00:00:00 + 2008-04-14 00:00:00 + + 12638.59 + 12638.59 + 12638.59 + + 0.00 + 0.00 + 0.00 + + 1625 + BLSNO + X + + 0.00 + + C + J + NONE + X + XPERT FOR ORACLE ADMINISTRATION, PL/SQL DEVELOPMENT, TUNING MODULE, QUEST SQL OPTIMIZER. + + N + X + N + X + N + N + 1 + + N + X + X + X + + X + + 7030 + D + 541519 + E + + + DLT SOLUTIONS INCORPORATED + + + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + false + false + false + + false + false + false + false + false + false + false + + false + false + false + + false + false + false + false + 173 + 26 + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + 13861 SUNRISE VALLEY DR STE 400 + HERNDON + VA + 201716126 + USA + 10 + 7864681990000PR + 201716126 + + 786468199 + DLT SOLUTIONS INCORPORATED + 786468199 + DLT SOLUTIONS LLC + + 2002-03-14 00:00:00 + 2008-11-16 00:00:00 + S + + + 50000 + DC + USA + 202120002 + 00 + + SP1 + NONE + NONE + 1 + A + N + false + N + X + + + REYNOLDS.VANESSA@BLS.GOV + 2007-04-10 16:40:29 + IDV_CORRECT + 2016-02-16 13:10:02 + F + + + + <![CDATA[New DELIVERY ORDER EDCIO12O0009 awarded to DLT SOLUTIONS, LLC for the amount of $14,168.16]]> + + 2016-02-16 13:10:16 + + + + + 9100 + EDCIO12O0009 + 0 + 0 + + 4730 + GS35F4543G + 107 + + 2012-05-11 00:00:00 + 2012-05-11 00:00:00 + 2012-09-30 00:00:00 + 2013-06-30 00:00:00 + + 14168.16 + 14168.16 + 14168.16 + + 14168.16 + 14168.16 + 14168.16 + + 9100 + PO + 9100 + EI + X + + 0.00 + + C + J + NONE + TOAD SOFTWARE SUPPORT RENEWAL. TOAD IS USED BY THE DEPARTMENT OF EDUCATION AS A PRIMARY SQL AND PL/SQL DEVELOPMENT TOOL. IT IS ALSO USED FOR PRODUCTION SUPPORT AND MANAGING ORACLE DATABASES. + N + X + N + X + N + X + + + + 91 + 0202 + N + 1 + + N + X + X + X + + X + + 7030 + D + 541519 + C + E + USA + D + + + DLT SOLUTIONS, LLC + + + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + true + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + false + false + true + + false + false + false + false + false + false + false + + false + true + false + + true + false + false + false + VA + USA + CORPORATE NOT TAX EXEMPT + 245 + 775944576 + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + 13861 SUNRISE VALLEY DR STE 400 + HERNDON + VA + 201716126 + USA + 10 + + 786468199 + DLT SOLUTIONS, LLC + 786468199 + DLT SOLUTIONS LLC + + O + + + DC + USA + 202020001 + 00 + + A + MAFO + NONE + NONE + FAIR + 1 + A + N + N + X + N + + + KARL.L.FEHRMAN@ED.GOV + 2012-05-08 13:41:06 + IDV_CORRECT + 2016-02-16 13:10:16 + F + MICHAEL.HOLLOWAY@ED.GOV + 2012-05-11 10:13:31 + + + + <![CDATA[PURCHASE ORDER DJF152600P0008877 (1) awarded to SKILLBUILDERS INC, was modified for the amount of $0]]> + + 2016-09-15 10:37:14 + + + + + 1549 + DJF152600P0008877 + 1 + 0 + + 2015-10-30 00:00:00 + 2015-10-30 00:00:00 + 2015-10-30 00:00:00 + 2015-10-30 00:00:00 + + 0.00 + 0.00 + 0.00 + + 15000.00 + 15000.00 + 15000.00 + + 1549 + PDS02 + 1549 + PDS02 + X + + 0.00 + + B + J + K + NONE + ""IGF::CL::IGF"" + + + + +THIS WILL BE AN ONLINE CLASS FOR 10 APPLICATION DEVELOPERS. EACH DEVELOPER WILL ACCESS THE TRAINING FROM EITHER A HOME COMPUTER OR ONE ON UNET. COURSE TOPICS INCLUDE SQL STATEMENT PROCESSING, PL/SQL TUNING, VIEWING THE EXECUTION PLAN, THE IMPORTANC + CL + N + X + N + N + X + + + + 15 + 0200 + 000 + Y + 1 + + N + N + N + N + + X + + U012 + D + 611420 + C + A + USA + C + + + SKILLBUILDERS INC + + + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + true + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + false + false + true + + false + false + false + false + false + false + false + + true + false + false + + true + false + false + false + RI + USA + CORPORATE NOT TAX EXEMPT + 3 + 800000 + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + 213 ROBINSON ST + WAKEFIELD + RI + 028793590 + USA + 4017836172 + 4017830405 + 02 + 960084242 + 02879 + + 960084242 + SKILLBUILDERS INC + 960084242 + SKILLBUILDERS INC + + 2001-10-22 00:00:00 + 2016-01-21 00:00:00 + O + + + DC + USA + 205350001 + 00 + + A + NP + NONE + NONE + 3 + D + N + N + N + N + + B + + VLBANKS + 2015-10-30 13:34:40 + VLBANKS + 2016-09-15 10:37:14 + F + VLBANKS + 2016-09-15 10:37:14 + VLBANKS + 2016-09-15 10:37:14 + Y + + + + <![CDATA[New PURCHASE ORDER DOC40PAPT1511219 awarded to SHI INTERNATIONAL CORP. for the amount of $4,000]]> + + 2015-06-11 17:40:38 + + + + + 1344 + DOC40PAPT1511219 + 0 + 0 + + 2015-06-09 00:00:00 + 2015-06-09 00:00:00 + 2016-06-08 00:00:00 + 2016-06-08 00:00:00 + + 4000.00 + 4000.00 + 4000.00 + + 4000.00 + 4000.00 + 4000.00 + + 1344 + 000PA + 1344 + 000PA + X + + 0.00 + + B + J + NONE + LICENSE FOR SONARSOURCE PL/SQL + N + X + N + X + X + + + + 13 + 1006 + 000 + N + 1 + + Y + X + X + X + + X + + 7030 + D + 423430 + C + A + E + USA + D + + + SHI INTERNATIONAL CORP. + + + false + false + false + false + false + false + false + true + + true + false + true + false + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + true + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + false + false + true + + false + false + false + false + false + false + false + + false + false + false + + true + false + false + false + NJ + USA + CORPORATE NOT TAX EXEMPT + 2000 + 6500000000 + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + 290 DAVIDSON AVE STE 101 + SOMERSET + NJ + 088734179 + USA + 8476031132 + 12 + 611429481 + 08873 + + 611429481 + SHI INTERNATIONAL CORP. + 611429481 + SHI INTERNATIONAL CORP. + + 2001-12-05 00:00:00 + 2016-05-19 00:00:00 + O + + + VA + USA + 223131450 + 08 + + G + SP1 + NONE + NONE + SP2 + 1 + D + N + N + X + N + + B + + PTOTBF + 2015-06-11 17:09:54 + PTOTBF + 2015-06-11 17:40:38 + F + PTOTBF + 2015-06-11 17:40:38 + + + + <![CDATA[New DELIVERY ORDER AG32SBD150147 awarded to APEXTECH LLC for the amount of $198,000]]> + + 2017-10-04 14:20:48 + + + + + 12H2 + AG32SBD150147 + 0 + 0 + + 4732 + GS06F0821Z + 0 + + 2015-06-03 00:00:00 + 2015-06-03 00:00:00 + 2019-07-05 00:00:00 + 2019-07-05 00:00:00 + + 198000.00 + 198000.00 + 833580.00 + + 614790.00 + 614790.00 + 833580.00 + + 12H2 + 32SB + 12H2 + 31PE + X + + 0.00 + + C + J + NONE + THE PURPOSE OF THIS DELIVERY ORDER IS TO PURCHASE ORACLE PL/SQL PROGRAMMER (DATABASE ANALYST/PROGRAMMER-SENIOR) SERVICES IN ACCORDANCE WITH ATTACHED STATEMENT OF WORK DATED 6/1/2015. + +THIS AWARD IS AN OPTION YEAR CONTRACT. IT INCLUDES A BASE YEAR PLUS, THREE (3) ONE YEAR OPTION PERIODS. BASE YEAR PERIOD OF PERFORMANCE IS 7/6/2015 THROUGH 7/5/2016. + +IGF::CT::IGF + CT + N + X + N + N + X + + + + 12 + 1400 + N + 1 + + Y + X + N + X + + X + + D308 + D + 541512 + C + A + E + USA + C + + + APEXTECH LLC + + + false + false + false + false + false + false + false + false + + true + false + false + false + true + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + true + false + false + + false + false + false + false + false + false + false + + false + true + false + + true + false + false + false + OTHER + 13 + 2000000 + + false + false + false + false + false + false + false + false + false + false + false + false + + true + false + true + true + false + false + false + + 2200 WILSON BLVD + ARLINGTON + VA + 222013397 + USA + 7032539722 + 7035222037 + 08 + 126242150 + 222013397 + + 126242150 + APEXTECH LLC + 126242150 + APEXTECH LLC + + 2003-01-15 00:00:00 + 2014-07-31 00:00:00 + S + + + MD + USA + 207051003 + 04 + + D + MAFO + 8A + NONE + OSA + A + N + N + Y + N + + B + + JESSICA.MASSEY@ARS.USDA.GOV + 2015-05-21 14:03:35 + IDV_CORRECT + 2017-10-04 14:20:48 + F + JESSICA.MASSEY@ARS.USDA.GOV + 2015-06-03 13:17:36 + N + + + + <![CDATA[New PURCHASE ORDER M6738610P1027 awarded to DILTEX INC for the amount of $700]]> + + 2017-11-29 23:36:42 + + + + + 9700 + M6738610P1027 + 0 + 0 + + 2010-05-18 00:00:00 + 2010-05-18 00:00:00 + 2010-06-17 00:00:00 + 2010-06-17 00:00:00 + + 700.00 + 700.00 + 700.00 + + 700.00 + 700.00 + 700.00 + + 1700 + M67386 + 1700 + M67386 + X + + 0.00 + + B + J + NONE + PL/SQL SOFTWARE DEVELOPER + N + N + X + N + X + Z + N + 1 + + Y + N + N + N + + X + + 7030 + D + C9E + 423430 + C + A + 000 + A + A + USA + D + + + DILTEX INC + + + false + false + false + false + false + false + false + true + + true + true + false + false + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + true + false + false + + false + false + false + false + false + false + false + + true + false + false + + true + false + false + false + OTHER + 4 + 2000000 + + false + false + false + false + false + false + false + false + false + false + false + false + + false + true + false + false + false + false + false + + 14530 PACIFIC AVE + BALDWIN PARK + CA + 917065340 + USA + 6269601314 + 6269560615 + 32 + 969907914 + 917065340 + + 969907914 + DILTEX INC + 969907914 + DILTEX INC + + 2005-10-02 00:00:00 + 2011-01-12 00:00:00 + S + + + MO + USA + 641471208 + 05 + + D + NP + SBA + NONE + 2 + A + N + false + N + X + N + 0.00 + + B + + JUDY.RUPARD.M67386@USMC.MIL + 2010-05-18 08:59:07 + DOD_CLOSEOUT + 2017-11-29 23:36:42 + F + ANDREA.LEACH.M67386@USMC.MIL + 2010-05-18 10:04:12 + DOD_CLOSEOUT + 2017-11-29 23:36:42 + Y + + + + <![CDATA[New PURCHASE ORDER AG64WCP140083 awarded to SOFTCHOICE CORPORATION for the amount of $216]]> + + 2014-06-29 12:37:57 + + + + + 1205 + AG64WCP140083 + 0 + 0 + + 2014-06-29 00:00:00 + 2014-06-27 00:00:00 + 2015-06-30 00:00:00 + 2015-06-30 00:00:00 + + 216.00 + 216.00 + 216.00 + + 216.00 + 216.00 + 216.00 + + 1205 + 64WC + 12A7 + 64WC + X + + 0.00 + + B + J + PL SQL DEVELOPER SFTW RENEWAL + NONE + IGF::OT::IGF + +PL/SQL DEVELOPER LICENSES ANNUAL SERVICE CONTRACT - 6 USERS E-DOWNLOAD, PART RV1555 #5266.6 + +WAIVER: FY14-RENEWAL R14318, CO-JADAMS, PURCHASE CARD, SOFTCHOICE + OT + N + X + N + N + X + + + + 12 + 4609 + Y + 1 + + N + N + N + N + + X + + D319 + D + 541519 + C + A + E + USA + C + + + SOFTCHOICE CORPORATION + + + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + true + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + false + false + true + + false + false + false + false + false + false + false + + false + false + false + + true + false + false + false + NY + USA + CORPORATE NOT TAX EXEMPT + 1200 + 1000000000 + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + 314 W SUPERIOR ST STE 301 + CHICAGO + IL + 606543538 + USA + 7034801969 + 7034801956 + 07 + 929022028 + 606543538 + + 929022028 + SOFTCHOICE CORPORATION + 248864415 + SOFTCHOICE CORPORATION + + 2003-02-06 00:00:00 + 2015-02-03 00:00:00 + O + + + MO + USA + 641143363 + 05 + + F + SP1 + NONE + NONE + 2 + A + N + N + N + N + + B + + JENNIFER.ADAMS@USDA.GOV + 2014-06-29 12:02:32 + JENNIFER.ADAMS@USDA.GOV + 2014-06-29 12:37:57 + F + JENNIFER.ADAMS@USDA.GOV + 2014-06-29 12:37:57 + + + + <![CDATA[New DELIVERY ORDER AG32SBD170266 awarded to APEXTECH LLC for the amount of $211,860]]> + + 2017-10-04 14:20:48 + + + + + 12H2 + AG32SBD170266 + 0 + 0 + + 4732 + GS06F0821Z + PA0003ADDRESSCHG + + 2017-09-22 00:00:00 + 2017-09-22 00:00:00 + 2019-09-28 00:00:00 + 2019-09-28 00:00:00 + + 211860.00 + 211860.00 + 430650.00 + + 211860.00 + 211860.00 + 430650.00 + + 12H2 + 1232SB + 12H2 + 12344P + X + + 0.00 + + C + J + NONE + IGF::OT::IGF +ORACLE PL/SQL PROGRAMMERS + OT + N + X + D + N + X + + + + 12 + 1400 + N + 1 + + Y + X + N + X + + B + 40 U.S.C. 11302(E) + + D308 + H + 541512 + C + A + E + USA + C + + + APEXTECH LLC + + + false + false + false + false + false + false + false + false + + true + false + false + false + true + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + true + false + false + + false + false + false + false + false + false + false + + false + true + false + + true + false + false + false + OTHER + 13 + 2000000 + + false + false + false + false + false + false + false + false + false + false + false + false + + true + false + true + true + false + false + false + + 2200 WILSON BLVD STE 810 + ARLINGTON + VA + 222013361 + USA + 7032539722 + 7035222037 + 08 + 126242150 + 222013397 + + 126242150 + 3C7R1 + APEXTECH LLC + 126242150 + APEXTECH LLC + + 2003-01-15 00:00:00 + 2014-07-31 00:00:00 + S + + + MD + USA + 207051003 + 04 + + D + MAFO + 8A + NONE + OSA + A + N + N + Y + N + + + PAUL.MERRITT@ARS.USDA.GOV + 2017-09-19 10:19:11 + IDV_CORRECT + 2017-10-04 14:20:48 + F + PAUL.MERRITT@ARS.USDA.GOV + 2017-09-22 14:31:02 + N + + + + <![CDATA[New DELIVERY ORDER HQ042307F0009 awarded to DLT SOLUTIONS INCORPORATED for the amount of $3,199]]> + + 2016-02-16 13:10:05 + + + + + 9700 + HQ042307F0009 + 0 + 0 + + 4730 + GS35F4543G + 0 + + 2006-10-01 00:00:00 + 2006-10-01 00:00:00 + 2007-09-30 00:00:00 + 2007-09-30 00:00:00 + + 3199.00 + 3199.00 + 3199.00 + + 3199.00 + 3199.00 + 3199.00 + + 97BZ + HQ0423 + 97BZ + HQ0422 + X + + 0.00 + + C + J + NONE + X + SQL NAVIGATOR FOR ORACLE SOFTWARE LICENSE MAINTENANCE RENEWAL; SQL NAVIGATOR FOR ORACLE XPERT TUNING MODULE SOFTWARE LICENSE MAINTENANCE RENEWAL; PL FORMAT OPTION FOR SQL NAVIGATOR SOFTWARE LICENSE MAINTENANCE RENEWAL; DEBUGGER OPTION FOR SQL NAVIGATOR SOFTWARE LICENSE MAINTENANCE RENEWAL; AND KNOWLEDGE XPERT FOR PL/SQL DEVELOPMENT SOFTWARE MAINTENANCE LICENSE RENEWAL + N + N + X + N + N + N + Z + N + 1 + + N + X + X + X + + X + + D301 + D + A7 + 541519 + 000 + A + E + USA + C + + + DLT SOLUTIONS INCORPORATED + + + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + false + false + false + + false + false + false + false + false + false + false + + false + false + false + + false + false + false + false + 173 + 26 + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + 13861 SUNRISE VALLEY DR STE 400 + HERNDON + VA + 201716126 + USA + 10 + 7864681990000PR + 201716126 + + 786468199 + DLT SOLUTIONS INCORPORATED + 786468199 + DLT SOLUTIONS LLC + + 2002-03-14 00:00:00 + 2008-11-16 00:00:00 + S + + + 16000 + OH + USA + 441992055 + 11 + + A + MAFO + NONE + NONE + FAIR + 1 + A + N + false + N + X + 0.00 + + B + + LINDA.BARVINCHAK.HQ0423@DFAS.MIL + 2007-01-14 17:35:05 + IDV_CORRECT + 2016-02-16 13:10:05 + F + + + + <![CDATA[New DELIVERY ORDER DJDEAEP070051D awarded to DLT SOLUTIONS INCORPORATED for the amount of $544.2]]> + + 2016-02-16 13:10:02 + + + + + 1524 + DJDEAEP070051D + 0 + 0 + + 4730 + GS35F4543G + 0 + + 2007-04-25 00:00:00 + 2007-04-25 00:00:00 + 2007-09-30 00:00:00 + 2008-09-29 00:00:00 + + 544.20 + 544.20 + 544.20 + + 544.20 + 544.20 + 544.20 + + 1524 + DEAEP + X + + 0.00 + + C + J + NONE + X + RENEWAL OF SOFTWARE MAINTENANCE AND TECHNICAL SUPPORT FOR KNOWLEDGE XPERT FOR PL/SQL DEVELOPMENT. ESSENTIAL TO EIS SOFTWARE APPLICATION + N + X + N + N + N + N + 1 + + N + X + X + X + + X + + D310 + D + 541519 + E + + + DLT SOLUTIONS INCORPORATED + + + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + false + + false + false + false + + false + false + false + false + false + false + false + + false + false + false + + false + false + false + false + 173 + 26 + + false + false + false + false + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + 13861 SUNRISE VALLEY DR STE 400 + HERNDON + VA + 201716126 + USA + 10 + 7864681990000PR + 201716126 + + 786468199 + DLT SOLUTIONS INCORPORATED + 786468199 + DLT SOLUTIONS LLC + + 2002-03-14 00:00:00 + 2008-11-16 00:00:00 + S + + + 24000 + TX + USA + 799088098 + 16 + + SP1 + NONE + NONE + 1 + A + N + false + N + X + + + ELENA.A.BESAW@USDOJ.GOV + 2007-05-03 15:21:39 + IDV_CORRECT + 2016-02-16 13:10:02 + F + + +"," + + FPDS-NG search results for<![CDATA[: pl/sql]]> + + + + + + + + + <![CDATA[New DELIVERY ORDER DOLF072J11595 awarded to DLT SOLUTIONS INCORPORATED for the amount of $12,638.59]]> + + 2016-02-16 13:10:02 + + + + + 1625 + DOLF072J11595 + 0 + 0 + + + 4730 + GS35F4543G + 0 + + + + 2007-05-04 00:00:00 + 2007-04-15 00:00:00 + 2008-04-14 00:00:00 + 2008-04-14 00:00:00 + + + 12638.59 + 12638.59 + 12638.59 + + + 0.00 + 0.00 + 0.00 + + + 1625 + BLSNO + X + + + 0.00 + + + C + J + NONE + X + XPERT FOR ORACLE ADMINISTRATION, PL/SQL DEVELOPMENT, TUNING MODULE, QUEST SQL OPTIMIZER. + + N + X + N + X + N + N + 1 + + + N + X + X + X + + X + + + 7030 + D + 541519 + E + + + + DLT SOLUTIONS INCORPORATED + + + + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + false + false + false + false + false + + + false + false + + false + false + false + + false + + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + false + false + false + + + + false + false + false + false + false + false + false + false + + + false + false + false + + + false + false + false + false + false + false + false + + + false + false + false + + false + false + false + + false + 173 + 26 + + + false + false + false + false + false + false + false + false + false + false + false + false + + + false + false + false + false + false + false + false + + + 13861 SUNRISE VALLEY DR STE 400 + HERNDON + VA + 201716126 + USA + 10 + + 7864681990000PR + 201716126 + + 786468199 + DLT SOLUTIONS INCORPORATED + 786468199 + DLT SOLUTIONS LLC + + + 2002-03-14 00:00:00 + 2008-11-16 00:00:00 + + + S + + + + 50000 + DC + USA + + 202120002 + 00 + + + SP1 + NONE + NONE + 1 + A + N + false + N + X + + + + REYNOLDS.VANESSA@BLS.GOV + 2007-04-10 16:40:29 + IDV_CORRECT + 2016-02-16 13:10:02 + F + + + + + + <![CDATA[New DELIVERY ORDER EDCIO12O0009 awarded to DLT SOLUTIONS, LLC for the amount of $14,168.16]]> + + 2016-02-16 13:10:16 + + + + + 9100 + EDCIO12O0009 + 0 + 0 + + + 4730 + GS35F4543G + 107 + + + + 2012-05-11 00:00:00 + 2012-05-11 00:00:00 + 2012-09-30 00:00:00 + 2013-06-30 00:00:00 + + + 14168.16 + 14168.16 + 14168.16 + + + 14168.16 + 14168.16 + 14168.16 + + + 9100 + PO + 9100 + EI + X + + + 0.00 + + + C + J + NONE + TOAD SOFTWARE SUPPORT RENEWAL. TOAD IS USED BY THE DEPARTMENT OF EDUCATION AS A PRIMARY SQL AND PL/SQL DEVELOPMENT TOOL. IT IS ALSO USED FOR PRODUCTION SUPPORT AND MANAGING ORACLE DATABASES. + N + X + N + X + N + X + + + + 91 + 0202 + + + + N + 1 + + + N + X + X + X + + X + + + 7030 + D + 541519 + C + E + USA + D + + + + DLT SOLUTIONS, LLC + + + + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + false + false + false + false + false + + + false + false + + false + false + false + + false + + false + false + false + false + false + false + false + false + + false + false + + true + false + false + false + false + false + false + + + + false + false + false + false + false + false + false + false + + + false + false + true + + + false + false + false + false + false + false + false + + + false + true + false + + true + false + false + + false + VA + USA + CORPORATE NOT TAX EXEMPT + 245 + 775944576 + + + false + false + false + false + false + false + false + false + false + false + false + false + + + false + false + false + false + false + false + false + + + 13861 SUNRISE VALLEY DR STE 400 + HERNDON + VA + 201716126 + USA + 10 + + + 786468199 + DLT SOLUTIONS, LLC + 786468199 + DLT SOLUTIONS LLC + + + + O + + + + DC + USA + + 202020001 + 00 + + + A + MAFO + NONE + NONE + FAIR + 1 + A + N + N + X + N + + + + KARL.L.FEHRMAN@ED.GOV + 2012-05-08 13:41:06 + IDV_CORRECT + 2016-02-16 13:10:16 + F + MICHAEL.HOLLOWAY@ED.GOV + 2012-05-11 10:13:31 + + + + + + <![CDATA[PURCHASE ORDER DJF152600P0008877 (1) awarded to SKILLBUILDERS INC, was modified for the amount of $0]]> + + 2016-09-15 10:37:14 + + + + + 1549 + DJF152600P0008877 + 1 + 0 + + + + 2015-10-30 00:00:00 + 2015-10-30 00:00:00 + 2015-10-30 00:00:00 + 2015-10-30 00:00:00 + + + 0.00 + 0.00 + 0.00 + + + 15000.00 + 15000.00 + 15000.00 + + + 1549 + PDS02 + 1549 + PDS02 + X + + + 0.00 + + + B + J + K + NONE + "IGF::CL::IGF" + + + + +THIS WILL BE AN ONLINE CLASS FOR 10 APPLICATION DEVELOPERS. EACH DEVELOPER WILL ACCESS THE TRAINING FROM EITHER A HOME COMPUTER OR ONE ON UNET. COURSE TOPICS INCLUDE SQL STATEMENT PROCESSING, PL/SQL TUNING, VIEWING THE EXECUTION PLAN, THE IMPORTANC + CL + N + X + N + N + X + + + + 15 + 0200 + 000 + + + + Y + 1 + + + N + N + N + N + + X + + + U012 + D + 611420 + C + A + USA + C + + + + SKILLBUILDERS INC + + + + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + false + false + false + false + false + + + false + false + + false + false + false + + false + + false + false + false + false + false + false + false + false + + false + false + + true + false + false + false + false + false + false + + + + false + false + false + false + false + false + false + false + + + false + false + true + + + false + false + false + false + false + false + false + + + true + false + false + + true + false + false + + false + RI + USA + CORPORATE NOT TAX EXEMPT + 3 + 800000 + + + false + false + false + false + false + false + false + false + false + false + false + false + + + false + false + false + false + false + false + false + + + 213 ROBINSON ST + WAKEFIELD + RI + 028793590 + USA + 4017836172 + 4017830405 + 02 + + 960084242 + 02879 + + 960084242 + SKILLBUILDERS INC + 960084242 + SKILLBUILDERS INC + + + 2001-10-22 00:00:00 + 2016-01-21 00:00:00 + + + O + + + + DC + USA + + 205350001 + 00 + + + A + NP + NONE + NONE + 3 + D + N + N + N + N + + + B + + + VLBANKS + 2015-10-30 13:34:40 + VLBANKS + 2016-09-15 10:37:14 + F + VLBANKS + 2016-09-15 10:37:14 + VLBANKS + 2016-09-15 10:37:14 + Y + + + + + + <![CDATA[New PURCHASE ORDER DOC40PAPT1511219 awarded to SHI INTERNATIONAL CORP. for the amount of $4,000]]> + + 2015-06-11 17:40:38 + + + + + 1344 + DOC40PAPT1511219 + 0 + 0 + + + + 2015-06-09 00:00:00 + 2015-06-09 00:00:00 + 2016-06-08 00:00:00 + 2016-06-08 00:00:00 + + + 4000.00 + 4000.00 + 4000.00 + + + 4000.00 + 4000.00 + 4000.00 + + + 1344 + 000PA + 1344 + 000PA + X + + + 0.00 + + + B + J + NONE + LICENSE FOR SONARSOURCE PL/SQL + N + X + N + X + X + + + + 13 + 1006 + 000 + + + + N + 1 + + + Y + X + X + X + + X + + + 7030 + D + 423430 + C + A + E + USA + D + + + + SHI INTERNATIONAL CORP. + + + + false + false + false + false + false + false + false + true + + true + false + true + false + false + false + false + + false + false + false + false + false + + + false + false + + false + false + false + + false + + false + false + false + false + false + false + false + false + + false + false + + true + false + false + false + false + false + false + + + + false + false + false + false + false + false + false + false + + + false + false + true + + + false + false + false + false + false + false + false + + + false + false + false + + true + false + false + + false + NJ + USA + CORPORATE NOT TAX EXEMPT + 2000 + 6500000000 + + + false + false + false + false + false + false + false + false + false + false + false + false + + + false + false + false + false + false + false + false + + + 290 DAVIDSON AVE STE 101 + SOMERSET + NJ + 088734179 + USA + 8476031132 + 12 + + 611429481 + 08873 + + 611429481 + SHI INTERNATIONAL CORP. + 611429481 + SHI INTERNATIONAL CORP. + + + 2001-12-05 00:00:00 + 2016-05-19 00:00:00 + + + O + + + + VA + USA + + 223131450 + 08 + + + G + SP1 + NONE + NONE + SP2 + 1 + D + N + N + X + N + + + B + + + PTOTBF + 2015-06-11 17:09:54 + PTOTBF + 2015-06-11 17:40:38 + F + PTOTBF + 2015-06-11 17:40:38 + + + + + + <![CDATA[New DELIVERY ORDER AG32SBD150147 awarded to APEXTECH LLC for the amount of $198,000]]> + + 2017-10-04 14:20:48 + + + + + 12H2 + AG32SBD150147 + 0 + 0 + + + 4732 + GS06F0821Z + 0 + + + + 2015-06-03 00:00:00 + 2015-06-03 00:00:00 + 2019-07-05 00:00:00 + 2019-07-05 00:00:00 + + + 198000.00 + 198000.00 + 833580.00 + + + 614790.00 + 614790.00 + 833580.00 + + + 12H2 + 32SB + 12H2 + 31PE + X + + + 0.00 + + + C + J + NONE + THE PURPOSE OF THIS DELIVERY ORDER IS TO PURCHASE ORACLE PL/SQL PROGRAMMER (DATABASE ANALYST/PROGRAMMER-SENIOR) SERVICES IN ACCORDANCE WITH ATTACHED STATEMENT OF WORK DATED 6/1/2015. + +THIS AWARD IS AN OPTION YEAR CONTRACT. IT INCLUDES A BASE YEAR PLUS, THREE (3) ONE YEAR OPTION PERIODS. BASE YEAR PERIOD OF PERFORMANCE IS 7/6/2015 THROUGH 7/5/2016. + +IGF::CT::IGF + CT + N + X + N + N + X + + + + 12 + 1400 + + + + N + 1 + + + Y + X + N + X + + X + + + D308 + D + 541512 + C + A + E + USA + C + + + + APEXTECH LLC + + + + false + false + false + false + false + false + false + false + + true + false + false + false + true + false + false + + false + false + false + false + false + + + false + false + + false + false + false + + false + + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + false + false + false + + + + false + false + false + false + false + false + false + false + + + true + false + false + + + false + false + false + false + false + false + false + + + false + true + false + + true + false + false + + false + OTHER + 13 + 2000000 + + + false + false + false + false + false + false + false + false + false + false + false + false + + + true + false + true + true + false + false + false + + + 2200 WILSON BLVD + ARLINGTON + VA + 222013397 + USA + 7032539722 + 7035222037 + 08 + + 126242150 + 222013397 + + 126242150 + APEXTECH LLC + 126242150 + APEXTECH LLC + + + 2003-01-15 00:00:00 + 2014-07-31 00:00:00 + + + S + + + + MD + USA + + 207051003 + 04 + + + D + MAFO + 8A + NONE + OSA + A + N + N + Y + N + + + B + + + JESSICA.MASSEY@ARS.USDA.GOV + 2015-05-21 14:03:35 + IDV_CORRECT + 2017-10-04 14:20:48 + F + JESSICA.MASSEY@ARS.USDA.GOV + 2015-06-03 13:17:36 + N + + + + + + <![CDATA[New PURCHASE ORDER M6738610P1027 awarded to DILTEX INC for the amount of $700]]> + + 2017-11-29 23:36:42 + + + + + 9700 + M6738610P1027 + 0 + 0 + + + + 2010-05-18 00:00:00 + 2010-05-18 00:00:00 + 2010-06-17 00:00:00 + 2010-06-17 00:00:00 + + + 700.00 + 700.00 + 700.00 + + + 700.00 + 700.00 + 700.00 + + + 1700 + M67386 + 1700 + M67386 + X + + + 0.00 + + + B + J + NONE + PL/SQL SOFTWARE DEVELOPER + N + N + X + N + X + Z + N + 1 + + + Y + N + N + N + + X + + + 7030 + D + C9E + 423430 + C + A + 000 + A + A + USA + D + + + + DILTEX INC + + + + false + false + false + false + false + false + false + true + + true + true + false + false + false + false + false + + false + false + false + false + false + + + false + false + + false + false + false + + false + + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + false + false + false + + + + false + false + false + false + false + false + false + false + + + true + false + false + + + false + false + false + false + false + false + false + + + true + false + false + + true + false + false + + false + OTHER + 4 + 2000000 + + + false + false + false + false + false + false + false + false + false + false + false + false + + + false + true + false + false + false + false + false + + + 14530 PACIFIC AVE + BALDWIN PARK + CA + 917065340 + USA + 6269601314 + 6269560615 + 32 + + 969907914 + 917065340 + + 969907914 + DILTEX INC + 969907914 + DILTEX INC + + + 2005-10-02 00:00:00 + 2011-01-12 00:00:00 + + + S + + + + MO + USA + + 641471208 + 05 + + + D + NP + SBA + NONE + 2 + A + N + false + N + X + N + 0.00 + + + B + + + JUDY.RUPARD.M67386@USMC.MIL + 2010-05-18 08:59:07 + DOD_CLOSEOUT + 2017-11-29 23:36:42 + F + ANDREA.LEACH.M67386@USMC.MIL + 2010-05-18 10:04:12 + DOD_CLOSEOUT + 2017-11-29 23:36:42 + Y + + + + + + <![CDATA[New PURCHASE ORDER AG64WCP140083 awarded to SOFTCHOICE CORPORATION for the amount of $216]]> + + 2014-06-29 12:37:57 + + + + + 1205 + AG64WCP140083 + 0 + 0 + + + + 2014-06-29 00:00:00 + 2014-06-27 00:00:00 + 2015-06-30 00:00:00 + 2015-06-30 00:00:00 + + + 216.00 + 216.00 + 216.00 + + + 216.00 + 216.00 + 216.00 + + + 1205 + 64WC + 12A7 + 64WC + X + + + 0.00 + + + B + J + PL SQL DEVELOPER SFTW RENEWAL + NONE + IGF::OT::IGF + +PL/SQL DEVELOPER LICENSES ANNUAL SERVICE CONTRACT - 6 USERS E-DOWNLOAD, PART RV1555 #5266.6 + +WAIVER: FY14-RENEWAL R14318, CO-JADAMS, PURCHASE CARD, SOFTCHOICE + OT + N + X + N + N + X + + + + 12 + 4609 + + + + Y + 1 + + + N + N + N + N + + X + + + D319 + D + 541519 + C + A + E + USA + C + + + + SOFTCHOICE CORPORATION + + + + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + false + false + false + false + false + + + false + false + + false + false + false + + false + + false + false + false + false + false + false + false + false + + false + false + + true + false + false + false + false + false + false + + + + false + false + false + false + false + false + false + false + + + false + false + true + + + false + false + false + false + false + false + false + + + false + false + false + + true + false + false + + false + NY + USA + CORPORATE NOT TAX EXEMPT + 1200 + 1000000000 + + + false + false + false + false + false + false + false + false + false + false + false + false + + + false + false + false + false + false + false + false + + + 314 W SUPERIOR ST STE 301 + CHICAGO + IL + 606543538 + USA + 7034801969 + 7034801956 + 07 + + 929022028 + 606543538 + + 929022028 + SOFTCHOICE CORPORATION + 248864415 + SOFTCHOICE CORPORATION + + + 2003-02-06 00:00:00 + 2015-02-03 00:00:00 + + + O + + + + MO + USA + + 641143363 + 05 + + + F + SP1 + NONE + NONE + 2 + A + N + N + N + N + + + B + + + JENNIFER.ADAMS@USDA.GOV + 2014-06-29 12:02:32 + JENNIFER.ADAMS@USDA.GOV + 2014-06-29 12:37:57 + F + JENNIFER.ADAMS@USDA.GOV + 2014-06-29 12:37:57 + + + + + + <![CDATA[New DELIVERY ORDER AG32SBD170266 awarded to APEXTECH LLC for the amount of $211,860]]> + + 2017-10-04 14:20:48 + + + + + 12H2 + AG32SBD170266 + 0 + 0 + + + 4732 + GS06F0821Z + PA0003ADDRESSCHG + + + + 2017-09-22 00:00:00 + 2017-09-22 00:00:00 + 2019-09-28 00:00:00 + 2019-09-28 00:00:00 + + + 211860.00 + 211860.00 + 430650.00 + + + 211860.00 + 211860.00 + 430650.00 + + + 12H2 + 1232SB + 12H2 + 12344P + X + + + 0.00 + + + C + J + NONE + IGF::OT::IGF +ORACLE PL/SQL PROGRAMMERS + OT + N + X + D + N + X + + + + 12 + 1400 + + + + N + 1 + + + Y + X + N + X + + B + 40 U.S.C. 11302(E) + + + D308 + H + 541512 + C + A + E + USA + C + + + + APEXTECH LLC + + + + false + false + false + false + false + false + false + false + + true + false + false + false + true + false + false + + false + false + false + false + false + + + false + false + + false + false + false + + false + + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + false + false + false + + + + false + false + false + false + false + false + false + false + + + true + false + false + + + false + false + false + false + false + false + false + + + false + true + false + + true + false + false + + false + OTHER + 13 + 2000000 + + + false + false + false + false + false + false + false + false + false + false + false + false + + + true + false + true + true + false + false + false + + + 2200 WILSON BLVD STE 810 + ARLINGTON + VA + 222013361 + USA + 7032539722 + 7035222037 + 08 + + 126242150 + 222013397 + + 126242150 + 3C7R1 + APEXTECH LLC + 126242150 + APEXTECH LLC + + + 2003-01-15 00:00:00 + 2014-07-31 00:00:00 + + + S + + + + MD + USA + + 207051003 + 04 + + + D + MAFO + 8A + NONE + OSA + A + N + N + Y + N + + + + PAUL.MERRITT@ARS.USDA.GOV + 2017-09-19 10:19:11 + IDV_CORRECT + 2017-10-04 14:20:48 + F + PAUL.MERRITT@ARS.USDA.GOV + 2017-09-22 14:31:02 + N + + + + + + <![CDATA[New DELIVERY ORDER HQ042307F0009 awarded to DLT SOLUTIONS INCORPORATED for the amount of $3,199]]> + + 2016-02-16 13:10:05 + + + + + 9700 + HQ042307F0009 + 0 + 0 + + + 4730 + GS35F4543G + 0 + + + + 2006-10-01 00:00:00 + 2006-10-01 00:00:00 + 2007-09-30 00:00:00 + 2007-09-30 00:00:00 + + + 3199.00 + 3199.00 + 3199.00 + + + 3199.00 + 3199.00 + 3199.00 + + + 97BZ + HQ0423 + 97BZ + HQ0422 + X + + + 0.00 + + + C + J + NONE + X + SQL NAVIGATOR FOR ORACLE SOFTWARE LICENSE MAINTENANCE RENEWAL; SQL NAVIGATOR FOR ORACLE XPERT TUNING MODULE SOFTWARE LICENSE MAINTENANCE RENEWAL; PL FORMAT OPTION FOR SQL NAVIGATOR SOFTWARE LICENSE MAINTENANCE RENEWAL; DEBUGGER OPTION FOR SQL NAVIGATOR SOFTWARE LICENSE MAINTENANCE RENEWAL; AND KNOWLEDGE XPERT FOR PL/SQL DEVELOPMENT SOFTWARE MAINTENANCE LICENSE RENEWAL + N + N + X + N + N + N + Z + N + 1 + + + N + X + X + X + + X + + + D301 + D + A7 + 541519 + 000 + A + E + USA + C + + + + DLT SOLUTIONS INCORPORATED + + + + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + false + false + false + false + false + + + false + false + + false + false + false + + false + + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + false + false + false + + + + false + false + false + false + false + false + false + false + + + false + false + false + + + false + false + false + false + false + false + false + + + false + false + false + + false + false + false + + false + 173 + 26 + + + false + false + false + false + false + false + false + false + false + false + false + false + + + false + false + false + false + false + false + false + + + 13861 SUNRISE VALLEY DR STE 400 + HERNDON + VA + 201716126 + USA + 10 + + 7864681990000PR + 201716126 + + 786468199 + DLT SOLUTIONS INCORPORATED + 786468199 + DLT SOLUTIONS LLC + + + 2002-03-14 00:00:00 + 2008-11-16 00:00:00 + + + S + + + + 16000 + OH + USA + + 441992055 + 11 + + + A + MAFO + NONE + NONE + FAIR + 1 + A + N + false + N + X + 0.00 + + + B + + + LINDA.BARVINCHAK.HQ0423@DFAS.MIL + 2007-01-14 17:35:05 + IDV_CORRECT + 2016-02-16 13:10:05 + F + + + + + + <![CDATA[New DELIVERY ORDER DJDEAEP070051D awarded to DLT SOLUTIONS INCORPORATED for the amount of $544.2]]> + + 2016-02-16 13:10:02 + + + + + 1524 + DJDEAEP070051D + 0 + 0 + + + 4730 + GS35F4543G + 0 + + + + 2007-04-25 00:00:00 + 2007-04-25 00:00:00 + 2007-09-30 00:00:00 + 2008-09-29 00:00:00 + + + 544.20 + 544.20 + 544.20 + + + 544.20 + 544.20 + 544.20 + + + 1524 + DEAEP + X + + + 0.00 + + + C + J + NONE + X + RENEWAL OF SOFTWARE MAINTENANCE AND TECHNICAL SUPPORT FOR KNOWLEDGE XPERT FOR PL/SQL DEVELOPMENT. ESSENTIAL TO EIS SOFTWARE APPLICATION + N + X + N + N + N + N + 1 + + + N + X + X + X + + X + + + D310 + D + 541519 + E + + + + DLT SOLUTIONS INCORPORATED + + + + false + false + false + false + false + false + false + false + + false + false + false + false + false + false + false + + false + false + false + false + false + + + false + false + + false + false + false + + false + + false + false + false + false + false + false + false + false + + false + false + + false + false + false + false + false + false + false + + + + false + false + false + false + false + false + false + false + + + false + false + false + + + false + false + false + false + false + false + false + + + false + false + false + + false + false + false + + false + 173 + 26 + + + false + false + false + false + false + false + false + false + false + false + false + false + + + false + false + false + false + false + false + false + + + 13861 SUNRISE VALLEY DR STE 400 + HERNDON + VA + 201716126 + USA + 10 + + 7864681990000PR + 201716126 + + 786468199 + DLT SOLUTIONS INCORPORATED + 786468199 + DLT SOLUTIONS LLC + + + 2002-03-14 00:00:00 + 2008-11-16 00:00:00 + + + S + + + + 24000 + TX + USA + + 799088098 + 16 + + + SP1 + NONE + NONE + 1 + A + N + false + N + X + + + + ELENA.A.BESAW@USDOJ.GOV + 2007-05-03 15:21:39 + IDV_CORRECT + 2016-02-16 13:10:02 + F + + + + + +","(Base64 with Linefeeds) +PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGZlZWQgeG1s bnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvQXRvbSI+CiAgPHRpdGxlPkZQRFMt Tkcgc2VhcmNoIHJlc3VsdHMgZm9yPCFbQ0RBVEFbOiBwbC9zcWxdXT48L3RpdGxl PgogIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJ0ZXh0L2h0bWwiIGhyZWY9 Imh0dHBzOi8vd3d3LmZwZHMuZ292L2V6c2VhcmNoL3NlYXJjaC5kbz9zPUZQRFMm YW1wO2luZGV4TmFtZT1hd2FyZGZ1bGwmYW1wO3RlbXBsYXRlTmFtZT0xLjUuMSZh bXA7cT1wbCUyRnNxbCZhbXA7c3RhcnQ9MCI+PC9saW5rPgogIDxsaW5rIHJlbD0i bGFzdCIgdHlwZT0idGV4dC9odG1sIiBocmVmPSJodHRwczovL3d3dy5mcGRzLmdv di9lenNlYXJjaC9GRUVEUy9BVE9NP3M9RlBEUyZhbXA7RkVFRE5BTUU9UFVCTElD JmFtcDtWRVJTSU9OPTEuNS4xJmFtcDtxPXBsJTJGc3FsJmFtcDtzdGFydD0yMCI+ PC9saW5rPgogIDxsaW5rIHJlbD0ibmV4dCIgdHlwZT0idGV4dC9odG1sIiBocmVm PSJodHRwczovL3d3dy5mcGRzLmdvdi9lenNlYXJjaC9GRUVEUy9BVE9NP3M9RlBE UyZhbXA7RkVFRE5BTUU9UFVCTElDJmFtcDtWRVJTSU9OPTEuNS4xJmFtcDtxPXBs JTJGc3FsJmFtcDtzdGFydD0xMCI+PC9saW5rPgogIDxtb2RpZmllZC8+CiAgPGF1 dGhvcj4KICAgIDxuYW1lLz4KICA8L2F1dGhvcj4KICA8ZW50cnk+CiAgICA8dGl0 bGU+PCFbQ0RBVEFbTmV3IERFTElWRVJZIE9SREVSIERPTEYwNzJKMTE1OTUgYXdh cmRlZCB0byBETFQgU09MVVRJT05TIElOQ09SUE9SQVRFRCBmb3IgdGhlIGFtb3Vu dCBvZiAkMTIsNjM4LjU5XV0+PC90aXRsZT4KICAgIDxsaW5rIHJlbD0iYWx0ZXJu YXRlIiB0eXBlPSJ0ZXh0L2h0bWwiIGhyZWY9Imh0dHBzOi8vd3d3LmZwZHMuZ292 L2V6c2VhcmNoL3NlYXJjaC5kbz9zPUZQRFMmYW1wO2luZGV4TmFtZT1hd2FyZGZ1 bGwmYW1wO3RlbXBsYXRlTmFtZT0xLjUuMSZhbXA7cT1ET0xGMDcySjExNTk1KzE2 MjUrIj48L2xpbms+CiAgICA8bW9kaWZpZWQ+MjAxNi0wMi0xNiAxMzoxMDowMjwv bW9kaWZpZWQ+CiAgICA8Y29udGVudCB4bWxuczpuczE9Imh0dHBzOi8vd3d3LmZw ZHMuZ292L0ZQRFMiIHR5cGU9ImFwcGxpY2F0aW9uL3htbCI+CiAgICAgIDxuczE6 YXdhcmQgeG1sbnM6bnMxPSJodHRwOi8vd3d3LmZwZHNuZy5jb20vRlBEUyIgdmVy c2lvbj0iMS4yIj4KICAgICAgICA8bnMxOmF3YXJkSUQ+CiAgICAgICAgICA8bnMx OmF3YXJkQ29udHJhY3RJRD4KICAgICAgICAgICAgPG5zMTphZ2VuY3lJRCBuYW1l PSJCVVJFQVUgT0YgTEFCT1IgU1RBVElTVElDUyI+MTYyNTwvbnMxOmFnZW5jeUlE PgogICAgICAgICAgICA8bnMxOlBJSUQ+RE9MRjA3MkoxMTU5NTwvbnMxOlBJSUQ+ CiAgICAgICAgICAgIDxuczE6bW9kTnVtYmVyPjA8L25zMTptb2ROdW1iZXI+CiAg ICAgICAgICAgIDxuczE6dHJhbnNhY3Rpb25OdW1iZXI+MDwvbnMxOnRyYW5zYWN0 aW9uTnVtYmVyPjwvbnMxOmF3YXJkQ29udHJhY3RJRD4KICAgICAgICAgIDxuczE6 cmVmZXJlbmNlZElEVklEPgogICAgICAgICAgICA8bnMxOmFnZW5jeUlEIG5hbWU9 IkZFREVSQUwgQUNRVUlTSVRJT04gU0VSVklDRSI+NDczMDwvbnMxOmFnZW5jeUlE PgogICAgICAgICAgICA8bnMxOlBJSUQ+R1MzNUY0NTQzRzwvbnMxOlBJSUQ+CiAg ICAgICAgICAgIDxuczE6bW9kTnVtYmVyPjA8L25zMTptb2ROdW1iZXI+PC9uczE6 cmVmZXJlbmNlZElEVklEPjwvbnMxOmF3YXJkSUQ+CiAgICAgICAgPG5zMTpyZWxl dmFudENvbnRyYWN0RGF0ZXM+CiAgICAgICAgICA8bnMxOnNpZ25lZERhdGU+MjAw Ny0wNS0wNCAwMDowMDowMDwvbnMxOnNpZ25lZERhdGU+CiAgICAgICAgICA8bnMx OmVmZmVjdGl2ZURhdGU+MjAwNy0wNC0xNSAwMDowMDowMDwvbnMxOmVmZmVjdGl2 ZURhdGU+CiAgICAgICAgICA8bnMxOmN1cnJlbnRDb21wbGV0aW9uRGF0ZT4yMDA4 LTA0LTE0IDAwOjAwOjAwPC9uczE6Y3VycmVudENvbXBsZXRpb25EYXRlPgogICAg ICAgICAgPG5zMTp1bHRpbWF0ZUNvbXBsZXRpb25EYXRlPjIwMDgtMDQtMTQgMDA6 MDA6MDA8L25zMTp1bHRpbWF0ZUNvbXBsZXRpb25EYXRlPjwvbnMxOnJlbGV2YW50 Q29udHJhY3REYXRlcz4KICAgICAgICA8bnMxOmRvbGxhclZhbHVlcz4KICAgICAg ICAgIDxuczE6b2JsaWdhdGVkQW1vdW50PjEyNjM4LjU5PC9uczE6b2JsaWdhdGVk QW1vdW50PgogICAgICAgICAgPG5zMTpiYXNlQW5kRXhlcmNpc2VkT3B0aW9uc1Zh bHVlPjEyNjM4LjU5PC9uczE6YmFzZUFuZEV4ZXJjaXNlZE9wdGlvbnNWYWx1ZT4K ICAgICAgICAgIDxuczE6YmFzZUFuZEFsbE9wdGlvbnNWYWx1ZT4xMjYzOC41OTwv bnMxOmJhc2VBbmRBbGxPcHRpb25zVmFsdWU+PC9uczE6ZG9sbGFyVmFsdWVzPgog ICAgICAgIDxuczE6dG90YWxEb2xsYXJWYWx1ZXM+CiAgICAgICAgICA8bnMxOnRv dGFsT2JsaWdhdGVkQW1vdW50PjAuMDA8L25zMTp0b3RhbE9ibGlnYXRlZEFtb3Vu dD4KICAgICAgICAgIDxuczE6dG90YWxCYXNlQW5kRXhlcmNpc2VkT3B0aW9uc1Zh bHVlPjAuMDA8L25zMTp0b3RhbEJhc2VBbmRFeGVyY2lzZWRPcHRpb25zVmFsdWU+ CiAgICAgICAgICA8bnMxOnRvdGFsQmFzZUFuZEFsbE9wdGlvbnNWYWx1ZT4wLjAw PC9uczE6dG90YWxCYXNlQW5kQWxsT3B0aW9uc1ZhbHVlPjwvbnMxOnRvdGFsRG9s bGFyVmFsdWVzPgogICAgICAgIDxuczE6cHVyY2hhc2VySW5mb3JtYXRpb24+CiAg ICAgICAgICA8bnMxOmNvbnRyYWN0aW5nT2ZmaWNlQWdlbmN5SUQgbmFtZT0iQlVS RUFVIE9GIExBQk9SIFNUQVRJU1RJQ1MiIGRlcGFydG1lbnRJRD0iMTYwMCIgZGVw YXJ0bWVudE5hbWU9IkxBQk9SLCBERVBBUlRNRU5UIE9GIj4xNjI1PC9uczE6Y29u dHJhY3RpbmdPZmZpY2VBZ2VuY3lJRD4KICAgICAgICAgIDxuczE6Y29udHJhY3Rp bmdPZmZpY2VJRCBuYW1lPSJCVVJFQVUgT0YgTEFCT1IgU1RBVElTVElDUyBQVVJD SEFTSU5HIiBjb3VudHJ5PSJVU0EiPkJMU05PPC9uczE6Y29udHJhY3RpbmdPZmZp Y2VJRD4KICAgICAgICAgIDxuczE6Zm9yZWlnbkZ1bmRpbmcgZGVzY3JpcHRpb249 Ik5PVCBBUFBMSUNBQkxFIj5YPC9uczE6Zm9yZWlnbkZ1bmRpbmc+PC9uczE6cHVy Y2hhc2VySW5mb3JtYXRpb24+CiAgICAgICAgPG5zMTpjb250cmFjdE1hcmtldGlu Z0RhdGE+CiAgICAgICAgICA8bnMxOmZlZVBhaWRGb3JVc2VPZlNlcnZpY2U+MC4w MDwvbnMxOmZlZVBhaWRGb3JVc2VPZlNlcnZpY2U+PC9uczE6Y29udHJhY3RNYXJr ZXRpbmdEYXRhPgogICAgICAgIDxuczE6Y29udHJhY3REYXRhPgogICAgICAgICAg PG5zMTpjb250cmFjdEFjdGlvblR5cGUgZGVzY3JpcHRpb249IkRFTElWRVJZIE9S REVSIj5DPC9uczE6Y29udHJhY3RBY3Rpb25UeXBlPgogICAgICAgICAgPG5zMTp0 eXBlT2ZDb250cmFjdFByaWNpbmcgZGVzY3JpcHRpb249IkZJWEVEIFBSSUNFIj5K PC9uczE6dHlwZU9mQ29udHJhY3RQcmljaW5nPgogICAgICAgICAgPG5zMTpuYXRp b25hbEludGVyZXN0QWN0aW9uQ29kZSBkZXNjcmlwdGlvbj0iTk9ORSI+Tk9ORTwv bnMxOm5hdGlvbmFsSW50ZXJlc3RBY3Rpb25Db2RlPgogICAgICAgICAgPG5zMTpj b3N0QWNjb3VudGluZ1N0YW5kYXJkc0NsYXVzZSBkZXNjcmlwdGlvbj0iTk9UIEFQ UExJQ0FCTEUgRVhFTVBUIEZST00gQ0FTIj5YPC9uczE6Y29zdEFjY291bnRpbmdT dGFuZGFyZHNDbGF1c2U+CiAgICAgICAgICA8bnMxOmRlc2NyaXB0aW9uT2ZDb250 cmFjdFJlcXVpcmVtZW50PlhQRVJUIEZPUiBPUkFDTEUgQURNSU5JU1RSQVRJT04s IFBML1NRTCBERVZFTE9QTUVOVCwgVFVOSU5HIE1PRFVMRSwgUVVFU1QgU1FMIE9Q VElNSVpFUi4KPC9uczE6ZGVzY3JpcHRpb25PZkNvbnRyYWN0UmVxdWlyZW1lbnQ+ CiAgICAgICAgICA8bnMxOkdGRS1HRlAgZGVzY3JpcHRpb249IlRyYW5zYWN0aW9u IGRvZXMgbm90IHVzZSBHRkUvR0ZQIj5OPC9uczE6R0ZFLUdGUD4KICAgICAgICAg IDxuczE6dW5kZWZpbml0aXplZEFjdGlvbiBkZXNjcmlwdGlvbj0iTk8iPlg8L25z MTp1bmRlZmluaXRpemVkQWN0aW9uPgogICAgICAgICAgPG5zMTpjb25zb2xpZGF0 ZWRDb250cmFjdCBkZXNjcmlwdGlvbj0iTk8iPk48L25zMTpjb25zb2xpZGF0ZWRD b250cmFjdD4KICAgICAgICAgIDxuczE6cGVyZm9ybWFuY2VCYXNlZFNlcnZpY2VD b250cmFjdCBkZXNjcmlwdGlvbj0iTk9UIEFQUExJQ0FCTEUiPlg8L25zMTpwZXJm b3JtYW5jZUJhc2VkU2VydmljZUNvbnRyYWN0PgogICAgICAgICAgPG5zMTptdWx0 aVllYXJDb250cmFjdCBkZXNjcmlwdGlvbj0iTk8iPk48L25zMTptdWx0aVllYXJD b250cmFjdD4KICAgICAgICAgIDxuczE6cHVyY2hhc2VDYXJkQXNQYXltZW50TWV0 aG9kIGRlc2NyaXB0aW9uPSJOTyI+TjwvbnMxOnB1cmNoYXNlQ2FyZEFzUGF5bWVu dE1ldGhvZD4KICAgICAgICAgIDxuczE6bnVtYmVyT2ZBY3Rpb25zPjE8L25zMTpu dW1iZXJPZkFjdGlvbnM+PC9uczE6Y29udHJhY3REYXRhPgogICAgICAgIDxuczE6 bGVnaXNsYXRpdmVNYW5kYXRlcz4KICAgICAgICAgIDxuczE6Q2xpbmdlckNvaGVu QWN0IGRlc2NyaXB0aW9uPSJOTyI+TjwvbnMxOkNsaW5nZXJDb2hlbkFjdD4KICAg ICAgICAgIDxuczE6bWF0ZXJpYWxzU3VwcGxpZXNBcnRpY2xlc0VxdWlwbWVudCBk ZXNjcmlwdGlvbj0iTk9UIEFQUExJQ0FCTEUiPlg8L25zMTptYXRlcmlhbHNTdXBw bGllc0FydGljbGVzRXF1aXBtZW50PgogICAgICAgICAgPG5zMTpsYWJvclN0YW5k YXJkcyBkZXNjcmlwdGlvbj0iTk9UIEFQUExJQ0FCTEUiPlg8L25zMTpsYWJvclN0 YW5kYXJkcz4KICAgICAgICAgIDxuczE6Y29uc3RydWN0aW9uV2FnZVJhdGVSZXF1 aXJlbWVudHMgZGVzY3JpcHRpb249Ik5PVCBBUFBMSUNBQkxFIj5YPC9uczE6Y29u c3RydWN0aW9uV2FnZVJhdGVSZXF1aXJlbWVudHM+CiAgICAgICAgICA8bnMxOmxp c3RPZkFkZGl0aW9uYWxSZXBvcnRpbmdWYWx1ZXM+PC9uczE6bGlzdE9mQWRkaXRp b25hbFJlcG9ydGluZ1ZhbHVlcz4KICAgICAgICAgIDxuczE6aW50ZXJhZ2VuY3lD b250cmFjdGluZ0F1dGhvcml0eSBkZXNjcmlwdGlvbj0iTk9UIEFQUExJQ0FCTEUi Plg8L25zMTppbnRlcmFnZW5jeUNvbnRyYWN0aW5nQXV0aG9yaXR5PjwvbnMxOmxl Z2lzbGF0aXZlTWFuZGF0ZXM+CiAgICAgICAgPG5zMTpwcm9kdWN0T3JTZXJ2aWNl SW5mb3JtYXRpb24+CiAgICAgICAgICA8bnMxOnByb2R1Y3RPclNlcnZpY2VDb2Rl IGRlc2NyaXB0aW9uPSJBRFAgU09GVFdBUkUiIHByb2R1Y3RPclNlcnZpY2VUeXBl PSJQUk9EVUNUIj43MDMwPC9uczE6cHJvZHVjdE9yU2VydmljZUNvZGU+CiAgICAg ICAgICA8bnMxOmNvbnRyYWN0QnVuZGxpbmcgZGVzY3JpcHRpb249Ik5PVCBBIEJV TkRMRUQgUkVRVUlSRU1FTlQiPkQ8L25zMTpjb250cmFjdEJ1bmRsaW5nPgogICAg ICAgICAgPG5zMTpwcmluY2lwYWxOQUlDU0NvZGUgZGVzY3JpcHRpb249Ik9USEVS IENPTVBVVEVSIFJFTEFURUQgU0VSVklDRVMiPjU0MTUxOTwvbnMxOnByaW5jaXBh bE5BSUNTQ29kZT4KICAgICAgICAgIDxuczE6dXNlT2ZFUEFEZXNpZ25hdGVkUHJv ZHVjdHMgZGVzY3JpcHRpb249Ik5PVCBSRVFVSVJFRCI+RTwvbnMxOnVzZU9mRVBB RGVzaWduYXRlZFByb2R1Y3RzPjwvbnMxOnByb2R1Y3RPclNlcnZpY2VJbmZvcm1h dGlvbj4KICAgICAgICA8bnMxOnZlbmRvcj4KICAgICAgICAgIDxuczE6dmVuZG9y SGVhZGVyPgogICAgICAgICAgICA8bnMxOnZlbmRvck5hbWU+RExUIFNPTFVUSU9O UyBJTkNPUlBPUkFURUQ8L25zMTp2ZW5kb3JOYW1lPjwvbnMxOnZlbmRvckhlYWRl cj4KICAgICAgICAgIDxuczE6dmVuZG9yU2l0ZURldGFpbHM+CiAgICAgICAgICAg IDxuczE6dmVuZG9yU29jaW9FY29ub21pY0luZGljYXRvcnM+CiAgICAgICAgICAg ICAgPG5zMTppc0FsYXNrYW5OYXRpdmVPd25lZENvcnBvcmF0aW9uT3JGaXJtPmZh bHNlPC9uczE6aXNBbGFza2FuTmF0aXZlT3duZWRDb3Jwb3JhdGlvbk9yRmlybT4K ICAgICAgICAgICAgICA8bnMxOmlzQW1lcmljYW5JbmRpYW5Pd25lZD5mYWxzZTwv bnMxOmlzQW1lcmljYW5JbmRpYW5Pd25lZD4KICAgICAgICAgICAgICA8bnMxOmlz SW5kaWFuVHJpYmU+ZmFsc2U8L25zMTppc0luZGlhblRyaWJlPgogICAgICAgICAg ICAgIDxuczE6aXNOYXRpdmVIYXdhaWlhbk93bmVkT3JnYW5pemF0aW9uT3JGaXJt PmZhbHNlPC9uczE6aXNOYXRpdmVIYXdhaWlhbk93bmVkT3JnYW5pemF0aW9uT3JG aXJtPgogICAgICAgICAgICAgIDxuczE6aXNUcmliYWxseU93bmVkRmlybT5mYWxz ZTwvbnMxOmlzVHJpYmFsbHlPd25lZEZpcm0+CiAgICAgICAgICAgICAgPG5zMTpp c1ZldGVyYW5Pd25lZD5mYWxzZTwvbnMxOmlzVmV0ZXJhbk93bmVkPgogICAgICAg ICAgICAgIDxuczE6aXNTZXJ2aWNlUmVsYXRlZERpc2FibGVkVmV0ZXJhbk93bmVk QnVzaW5lc3M+ZmFsc2U8L25zMTppc1NlcnZpY2VSZWxhdGVkRGlzYWJsZWRWZXRl cmFuT3duZWRCdXNpbmVzcz4KICAgICAgICAgICAgICA8bnMxOmlzV29tZW5Pd25l ZD5mYWxzZTwvbnMxOmlzV29tZW5Pd25lZD4KICAgICAgICAgICAgICA8bnMxOm1p bm9yaXR5T3duZWQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzTWlub3JpdHlPd25l ZD5mYWxzZTwvbnMxOmlzTWlub3JpdHlPd25lZD4KICAgICAgICAgICAgICAgIDxu czE6aXNTdWJDb250aW5lbnRBc2lhbkFtZXJpY2FuT3duZWRCdXNpbmVzcz5mYWxz ZTwvbnMxOmlzU3ViQ29udGluZW50QXNpYW5BbWVyaWNhbk93bmVkQnVzaW5lc3M+ CiAgICAgICAgICAgICAgICA8bnMxOmlzQXNpYW5QYWNpZmljQW1lcmljYW5Pd25l ZEJ1c2luZXNzPmZhbHNlPC9uczE6aXNBc2lhblBhY2lmaWNBbWVyaWNhbk93bmVk QnVzaW5lc3M+CiAgICAgICAgICAgICAgICA8bnMxOmlzQmxhY2tBbWVyaWNhbk93 bmVkQnVzaW5lc3M+ZmFsc2U8L25zMTppc0JsYWNrQW1lcmljYW5Pd25lZEJ1c2lu ZXNzPgogICAgICAgICAgICAgICAgPG5zMTppc0hpc3BhbmljQW1lcmljYW5Pd25l ZEJ1c2luZXNzPmZhbHNlPC9uczE6aXNIaXNwYW5pY0FtZXJpY2FuT3duZWRCdXNp bmVzcz4KICAgICAgICAgICAgICAgIDxuczE6aXNOYXRpdmVBbWVyaWNhbk93bmVk QnVzaW5lc3M+ZmFsc2U8L25zMTppc05hdGl2ZUFtZXJpY2FuT3duZWRCdXNpbmVz cz4KICAgICAgICAgICAgICAgIDxuczE6aXNPdGhlck1pbm9yaXR5T3duZWQ+ZmFs c2U8L25zMTppc090aGVyTWlub3JpdHlPd25lZD48L25zMTptaW5vcml0eU93bmVk PgogICAgICAgICAgICAgIDxuczE6aXNWZXJ5U21hbGxCdXNpbmVzcz5mYWxzZTwv bnMxOmlzVmVyeVNtYWxsQnVzaW5lc3M+CiAgICAgICAgICAgICAgPG5zMTppc1dv bWVuT3duZWRTbWFsbEJ1c2luZXNzPmZhbHNlPC9uczE6aXNXb21lbk93bmVkU21h bGxCdXNpbmVzcz4KICAgICAgICAgICAgICA8bnMxOmlzRWNvbm9taWNhbGx5RGlz YWR2YW50YWdlZFdvbWVuT3duZWRTbWFsbEJ1c2luZXNzPmZhbHNlPC9uczE6aXNF Y29ub21pY2FsbHlEaXNhZHZhbnRhZ2VkV29tZW5Pd25lZFNtYWxsQnVzaW5lc3M+ CiAgICAgICAgICAgICAgPG5zMTppc0pvaW50VmVudHVyZVdvbWVuT3duZWRTbWFs bEJ1c2luZXNzPmZhbHNlPC9uczE6aXNKb2ludFZlbnR1cmVXb21lbk93bmVkU21h bGxCdXNpbmVzcz4KICAgICAgICAgICAgICA8bnMxOmlzSm9pbnRWZW50dXJlRWNv bm9taWNhbGx5RGlzYWR2YW50YWdlZFdvbWVuT3duZWRTbWFsbEJ1c2luZXNzPmZh bHNlPC9uczE6aXNKb2ludFZlbnR1cmVFY29ub21pY2FsbHlEaXNhZHZhbnRhZ2Vk V29tZW5Pd25lZFNtYWxsQnVzaW5lc3M+PC9uczE6dmVuZG9yU29jaW9FY29ub21p Y0luZGljYXRvcnM+CiAgICAgICAgICAgIDxuczE6dmVuZG9yQnVzaW5lc3NUeXBl cz4KICAgICAgICAgICAgICA8bnMxOmlzQ29tbXVuaXR5RGV2ZWxvcGVkQ29ycG9y YXRpb25Pd25lZEZpcm0+ZmFsc2U8L25zMTppc0NvbW11bml0eURldmVsb3BlZENv cnBvcmF0aW9uT3duZWRGaXJtPgogICAgICAgICAgICAgIDxuczE6aXNMYWJvclN1 cnBsdXNBcmVhRmlybT5mYWxzZTwvbnMxOmlzTGFib3JTdXJwbHVzQXJlYUZpcm0+ CiAgICAgICAgICAgICAgPG5zMTpmZWRlcmFsR292ZXJubWVudD4KICAgICAgICAg ICAgICAgIDxuczE6aXNGZWRlcmFsR292ZXJubWVudD5mYWxzZTwvbnMxOmlzRmVk ZXJhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzRmVkZXJhbGx5 RnVuZGVkUmVzZWFyY2hBbmREZXZlbG9wbWVudENvcnA+ZmFsc2U8L25zMTppc0Zl ZGVyYWxseUZ1bmRlZFJlc2VhcmNoQW5kRGV2ZWxvcG1lbnRDb3JwPgogICAgICAg ICAgICAgICAgPG5zMTppc0ZlZGVyYWxHb3Zlcm5tZW50QWdlbmN5PmZhbHNlPC9u czE6aXNGZWRlcmFsR292ZXJubWVudEFnZW5jeT48L25zMTpmZWRlcmFsR292ZXJu bWVudD4KICAgICAgICAgICAgICA8bnMxOmlzU3RhdGVHb3Zlcm5tZW50PmZhbHNl PC9uczE6aXNTdGF0ZUdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgPG5zMTpsb2Nh bEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzTG9jYWxHb3Zlcm5t ZW50PmZhbHNlPC9uczE6aXNMb2NhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAg ICA8bnMxOmlzQ2l0eUxvY2FsR292ZXJubWVudD5mYWxzZTwvbnMxOmlzQ2l0eUxv Y2FsR292ZXJubWVudD4KICAgICAgICAgICAgICAgIDxuczE6aXNDb3VudHlMb2Nh bEdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc0NvdW50eUxvY2FsR292ZXJubWVudD4K ICAgICAgICAgICAgICAgIDxuczE6aXNJbnRlck11bmljaXBhbExvY2FsR292ZXJu bWVudD5mYWxzZTwvbnMxOmlzSW50ZXJNdW5pY2lwYWxMb2NhbEdvdmVybm1lbnQ+ CiAgICAgICAgICAgICAgICA8bnMxOmlzTG9jYWxHb3Zlcm5tZW50T3duZWQ+ZmFs c2U8L25zMTppc0xvY2FsR292ZXJubWVudE93bmVkPgogICAgICAgICAgICAgICAg PG5zMTppc011bmljaXBhbGl0eUxvY2FsR292ZXJubWVudD5mYWxzZTwvbnMxOmlz TXVuaWNpcGFsaXR5TG9jYWxHb3Zlcm5tZW50PgogICAgICAgICAgICAgICAgPG5z MTppc1NjaG9vbERpc3RyaWN0TG9jYWxHb3Zlcm5tZW50PmZhbHNlPC9uczE6aXNT Y2hvb2xEaXN0cmljdExvY2FsR292ZXJubWVudD4KICAgICAgICAgICAgICAgIDxu czE6aXNUb3duc2hpcExvY2FsR292ZXJubWVudD5mYWxzZTwvbnMxOmlzVG93bnNo aXBMb2NhbEdvdmVybm1lbnQ+PC9uczE6bG9jYWxHb3Zlcm5tZW50PgogICAgICAg ICAgICAgIDxuczE6aXNUcmliYWxHb3Zlcm5tZW50PmZhbHNlPC9uczE6aXNUcmli YWxHb3Zlcm5tZW50PgogICAgICAgICAgICAgIDxuczE6aXNGb3JlaWduR292ZXJu bWVudD5mYWxzZTwvbnMxOmlzRm9yZWlnbkdvdmVybm1lbnQ+CiAgICAgICAgICAg ICAgPG5zMTpidXNpbmVzc09yT3JnYW5pemF0aW9uVHlwZT4KICAgICAgICAgICAg ICAgIDxuczE6aXNDb3Jwb3JhdGVFbnRpdHlOb3RUYXhFeGVtcHQ+ZmFsc2U8L25z MTppc0NvcnBvcmF0ZUVudGl0eU5vdFRheEV4ZW1wdD4KICAgICAgICAgICAgICAg IDxuczE6aXNDb3Jwb3JhdGVFbnRpdHlUYXhFeGVtcHQ+ZmFsc2U8L25zMTppc0Nv cnBvcmF0ZUVudGl0eVRheEV4ZW1wdD4KICAgICAgICAgICAgICAgIDxuczE6aXNQ YXJ0bmVyc2hpcE9yTGltaXRlZExpYWJpbGl0eVBhcnRuZXJzaGlwPmZhbHNlPC9u czE6aXNQYXJ0bmVyc2hpcE9yTGltaXRlZExpYWJpbGl0eVBhcnRuZXJzaGlwPgog ICAgICAgICAgICAgICAgPG5zMTppc1NvbGVQcm9wcmVpdG9yc2hpcD5mYWxzZTwv bnMxOmlzU29sZVByb3ByZWl0b3JzaGlwPgogICAgICAgICAgICAgICAgPG5zMTpp c1NtYWxsQWdyaWN1bHR1cmFsQ29vcGVyYXRpdmU+ZmFsc2U8L25zMTppc1NtYWxs QWdyaWN1bHR1cmFsQ29vcGVyYXRpdmU+CiAgICAgICAgICAgICAgICA8bnMxOmlz SW50ZXJuYXRpb25hbE9yZ2FuaXphdGlvbj5mYWxzZTwvbnMxOmlzSW50ZXJuYXRp b25hbE9yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxuczE6aXNVU0dvdmVy bm1lbnRFbnRpdHk+ZmFsc2U8L25zMTppc1VTR292ZXJubWVudEVudGl0eT48L25z MTpidXNpbmVzc09yT3JnYW5pemF0aW9uVHlwZT48L25zMTp2ZW5kb3JCdXNpbmVz c1R5cGVzPgogICAgICAgICAgICA8bnMxOnZlbmRvckxpbmVPZkJ1c2luZXNzPgog ICAgICAgICAgICAgIDxuczE6aXNDb21tdW5pdHlEZXZlbG9wbWVudENvcnBvcmF0 aW9uPmZhbHNlPC9uczE6aXNDb21tdW5pdHlEZXZlbG9wbWVudENvcnBvcmF0aW9u PgogICAgICAgICAgICAgIDxuczE6aXNEb21lc3RpY1NoZWx0ZXI+ZmFsc2U8L25z MTppc0RvbWVzdGljU2hlbHRlcj4KICAgICAgICAgICAgICA8bnMxOmlzRWR1Y2F0 aW9uYWxJbnN0aXR1dGlvbj5mYWxzZTwvbnMxOmlzRWR1Y2F0aW9uYWxJbnN0aXR1 dGlvbj4KICAgICAgICAgICAgICA8bnMxOmlzRm91bmRhdGlvbj5mYWxzZTwvbnMx OmlzRm91bmRhdGlvbj4KICAgICAgICAgICAgICA8bnMxOmlzSG9zcGl0YWw+ZmFs c2U8L25zMTppc0hvc3BpdGFsPgogICAgICAgICAgICAgIDxuczE6aXNNYW51ZmFj dHVyZXJPZkdvb2RzPmZhbHNlPC9uczE6aXNNYW51ZmFjdHVyZXJPZkdvb2RzPgog ICAgICAgICAgICAgIDxuczE6aXNWZXRlcmluYXJ5SG9zcGl0YWw+ZmFsc2U8L25z MTppc1ZldGVyaW5hcnlIb3NwaXRhbD4KICAgICAgICAgICAgICA8bnMxOmlzSGlz cGFuaWNTZXJ2aWNpbmdJbnN0aXR1dGlvbj5mYWxzZTwvbnMxOmlzSGlzcGFuaWNT ZXJ2aWNpbmdJbnN0aXR1dGlvbj48L25zMTp2ZW5kb3JMaW5lT2ZCdXNpbmVzcz4K ICAgICAgICAgICAgPG5zMTp2ZW5kb3JSZWxhdGlvbnNoaXBXaXRoRmVkZXJhbEdv dmVybm1lbnQ+CiAgICAgICAgICAgICAgPG5zMTpyZWNlaXZlc0NvbnRyYWN0cz5m YWxzZTwvbnMxOnJlY2VpdmVzQ29udHJhY3RzPgogICAgICAgICAgICAgIDxuczE6 cmVjZWl2ZXNHcmFudHM+ZmFsc2U8L25zMTpyZWNlaXZlc0dyYW50cz4KICAgICAg ICAgICAgICA8bnMxOnJlY2VpdmVzQ29udHJhY3RzQW5kR3JhbnRzPmZhbHNlPC9u czE6cmVjZWl2ZXNDb250cmFjdHNBbmRHcmFudHM+PC9uczE6dmVuZG9yUmVsYXRp b25zaGlwV2l0aEZlZGVyYWxHb3Zlcm5tZW50PgogICAgICAgICAgICA8bnMxOnR5 cGVPZkdvdmVybm1lbnRFbnRpdHk+CiAgICAgICAgICAgICAgPG5zMTppc0FpcnBv cnRBdXRob3JpdHk+ZmFsc2U8L25zMTppc0FpcnBvcnRBdXRob3JpdHk+CiAgICAg ICAgICAgICAgPG5zMTppc0NvdW5jaWxPZkdvdmVybm1lbnRzPmZhbHNlPC9uczE6 aXNDb3VuY2lsT2ZHb3Zlcm5tZW50cz4KICAgICAgICAgICAgICA8bnMxOmlzSG91 c2luZ0F1dGhvcml0aWVzUHVibGljT3JUcmliYWw+ZmFsc2U8L25zMTppc0hvdXNp bmdBdXRob3JpdGllc1B1YmxpY09yVHJpYmFsPgogICAgICAgICAgICAgIDxuczE6 aXNJbnRlcnN0YXRlRW50aXR5PmZhbHNlPC9uczE6aXNJbnRlcnN0YXRlRW50aXR5 PgogICAgICAgICAgICAgIDxuczE6aXNQbGFubmluZ0NvbW1pc3Npb24+ZmFsc2U8 L25zMTppc1BsYW5uaW5nQ29tbWlzc2lvbj4KICAgICAgICAgICAgICA8bnMxOmlz UG9ydEF1dGhvcml0eT5mYWxzZTwvbnMxOmlzUG9ydEF1dGhvcml0eT4KICAgICAg ICAgICAgICA8bnMxOmlzVHJhbnNpdEF1dGhvcml0eT5mYWxzZTwvbnMxOmlzVHJh bnNpdEF1dGhvcml0eT48L25zMTp0eXBlT2ZHb3Zlcm5tZW50RW50aXR5PgogICAg ICAgICAgICA8bnMxOnZlbmRvck9yZ2FuaXphdGlvbkZhY3RvcnM+CiAgICAgICAg ICAgICAgPG5zMTppc1N1YmNoYXB0ZXJTQ29ycG9yYXRpb24+ZmFsc2U8L25zMTpp c1N1YmNoYXB0ZXJTQ29ycG9yYXRpb24+CiAgICAgICAgICAgICAgPG5zMTppc0xp bWl0ZWRMaWFiaWxpdHlDb3Jwb3JhdGlvbj5mYWxzZTwvbnMxOmlzTGltaXRlZExp YWJpbGl0eUNvcnBvcmF0aW9uPgogICAgICAgICAgICAgIDxuczE6aXNGb3JlaWdu T3duZWRBbmRMb2NhdGVkPmZhbHNlPC9uczE6aXNGb3JlaWduT3duZWRBbmRMb2Nh dGVkPgogICAgICAgICAgICAgIDxuczE6cHJvZml0U3RydWN0dXJlPgogICAgICAg ICAgICAgICAgPG5zMTppc0ZvclByb2ZpdE9yZ2FuaXphdGlvbj5mYWxzZTwvbnMx OmlzRm9yUHJvZml0T3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPG5zMTpp c05vbnByb2ZpdE9yZ2FuaXphdGlvbj5mYWxzZTwvbnMxOmlzTm9ucHJvZml0T3Jn YW5pemF0aW9uPgogICAgICAgICAgICAgICAgPG5zMTppc090aGVyTm90Rm9yUHJv Zml0T3JnYW5pemF0aW9uPmZhbHNlPC9uczE6aXNPdGhlck5vdEZvclByb2ZpdE9y Z2FuaXphdGlvbj48L25zMTpwcm9maXRTdHJ1Y3R1cmU+CiAgICAgICAgICAgICAg PG5zMTppc1NoZWx0ZXJlZFdvcmtzaG9wPmZhbHNlPC9uczE6aXNTaGVsdGVyZWRX b3Jrc2hvcD4KICAgICAgICAgICAgICA8bnMxOm51bWJlck9mRW1wbG95ZWVzPjE3 MzwvbnMxOm51bWJlck9mRW1wbG95ZWVzPgogICAgICAgICAgICAgIDxuczE6YW5u dWFsUmV2ZW51ZT4yNjwvbnMxOmFubnVhbFJldmVudWU+PC9uczE6dmVuZG9yT3Jn YW5pemF0aW9uRmFjdG9ycz4KICAgICAgICAgICAgPG5zMTp0eXBlT2ZFZHVjYXRp b25hbEVudGl0eT4KICAgICAgICAgICAgICA8bnMxOmlzMTg2MkxhbmRHcmFudENv bGxlZ2U+ZmFsc2U8L25zMTppczE4NjJMYW5kR3JhbnRDb2xsZWdlPgogICAgICAg ICAgICAgIDxuczE6aXMxODkwTGFuZEdyYW50Q29sbGVnZT5mYWxzZTwvbnMxOmlz MTg5MExhbmRHcmFudENvbGxlZ2U+CiAgICAgICAgICAgICAgPG5zMTppczE5OTRM YW5kR3JhbnRDb2xsZWdlPmZhbHNlPC9uczE6aXMxOTk0TGFuZEdyYW50Q29sbGVn ZT4KICAgICAgICAgICAgICA8bnMxOmlzSGlzdG9yaWNhbGx5QmxhY2tDb2xsZWdl T3JVbml2ZXJzaXR5PmZhbHNlPC9uczE6aXNIaXN0b3JpY2FsbHlCbGFja0NvbGxl Z2VPclVuaXZlcnNpdHk+CiAgICAgICAgICAgICAgPG5zMTppc01pbm9yaXR5SW5z dGl0dXRpb24+ZmFsc2U8L25zMTppc01pbm9yaXR5SW5zdGl0dXRpb24+CiAgICAg ICAgICAgICAgPG5zMTppc1ByaXZhdGVVbml2ZXJzaXR5T3JDb2xsZWdlPmZhbHNl PC9uczE6aXNQcml2YXRlVW5pdmVyc2l0eU9yQ29sbGVnZT4KICAgICAgICAgICAg ICA8bnMxOmlzU2Nob29sT2ZGb3Jlc3RyeT5mYWxzZTwvbnMxOmlzU2Nob29sT2ZG b3Jlc3RyeT4KICAgICAgICAgICAgICA8bnMxOmlzU3RhdGVDb250cm9sbGVkSW5z dGl0dXRpb25vZkhpZ2hlckxlYXJuaW5nPmZhbHNlPC9uczE6aXNTdGF0ZUNvbnRy b2xsZWRJbnN0aXR1dGlvbm9mSGlnaGVyTGVhcm5pbmc+CiAgICAgICAgICAgICAg PG5zMTppc1RyaWJhbENvbGxlZ2U+ZmFsc2U8L25zMTppc1RyaWJhbENvbGxlZ2U+ CiAgICAgICAgICAgICAgPG5zMTppc1ZldGVyaW5hcnlDb2xsZWdlPmZhbHNlPC9u czE6aXNWZXRlcmluYXJ5Q29sbGVnZT4KICAgICAgICAgICAgICA8bnMxOmlzQWxh c2thbk5hdGl2ZVNlcnZpY2luZ0luc3RpdHV0aW9uPmZhbHNlPC9uczE6aXNBbGFz a2FuTmF0aXZlU2VydmljaW5nSW5zdGl0dXRpb24+CiAgICAgICAgICAgICAgPG5z MTppc05hdGl2ZUhhd2FpaWFuU2VydmljaW5nSW5zdGl0dXRpb24+ZmFsc2U8L25z MTppc05hdGl2ZUhhd2FpaWFuU2VydmljaW5nSW5zdGl0dXRpb24+PC9uczE6dHlw ZU9mRWR1Y2F0aW9uYWxFbnRpdHk+CiAgICAgICAgICAgIDxuczE6dmVuZG9yQ2Vy dGlmaWNhdGlvbnM+CiAgICAgICAgICAgICAgPG5zMTppc0RPVENlcnRpZmllZERp c2FkdmFudGFnZWRCdXNpbmVzc0VudGVycHJpc2U+ZmFsc2U8L25zMTppc0RPVENl cnRpZmllZERpc2FkdmFudGFnZWRCdXNpbmVzc0VudGVycHJpc2U+CiAgICAgICAg ICAgICAgPG5zMTppc1NlbGZDZXJ0aWZpZWRTbWFsbERpc2FkdmFudGFnZWRCdXNp bmVzcz5mYWxzZTwvbnMxOmlzU2VsZkNlcnRpZmllZFNtYWxsRGlzYWR2YW50YWdl ZEJ1c2luZXNzPgogICAgICAgICAgICAgIDxuczE6aXNTQkFDZXJ0aWZpZWRTbWFs bERpc2FkdmFudGFnZWRCdXNpbmVzcz5mYWxzZTwvbnMxOmlzU0JBQ2VydGlmaWVk U21hbGxEaXNhZHZhbnRhZ2VkQnVzaW5lc3M+CiAgICAgICAgICAgICAgPG5zMTpp c1NCQUNlcnRpZmllZDhBUHJvZ3JhbVBhcnRpY2lwYW50PmZhbHNlPC9uczE6aXNT QkFDZXJ0aWZpZWQ4QVByb2dyYW1QYXJ0aWNpcGFudD4KICAgICAgICAgICAgICA8 bnMxOmlzU2VsZkNlcnRpZmllZEhVQlpvbmVKb2ludFZlbnR1cmU+ZmFsc2U8L25z MTppc1NlbGZDZXJ0aWZpZWRIVUJab25lSm9pbnRWZW50dXJlPgogICAgICAgICAg ICAgIDxuczE6aXNTQkFDZXJ0aWZpZWRIVUJab25lPmZhbHNlPC9uczE6aXNTQkFD ZXJ0aWZpZWRIVUJab25lPgogICAgICAgICAgICAgIDxuczE6aXNTQkFDZXJ0aWZp ZWQ4QUpvaW50VmVudHVyZT5mYWxzZTwvbnMxOmlzU0JBQ2VydGlmaWVkOEFKb2lu dFZlbnR1cmU+PC9uczE6dmVuZG9yQ2VydGlmaWNhdGlvbnM+CiAgICAgICAgICAg IDxuczE6dmVuZG9yTG9jYXRpb24+CiAgICAgICAgICAgICAgPG5zMTpzdHJlZXRB ZGRyZXNzPjEzODYxIFNVTlJJU0UgVkFMTEVZIERSIFNURSA0MDA8L25zMTpzdHJl ZXRBZGRyZXNzPgogICAgICAgICAgICAgIDxuczE6Y2l0eT5IRVJORE9OPC9uczE6 Y2l0eT4KICAgICAgICAgICAgICA8bnMxOnN0YXRlIG5hbWU9IlZJUkdJTklBIj5W QTwvbnMxOnN0YXRlPgogICAgICAgICAgICAgIDxuczE6WklQQ29kZT4yMDE3MTYx MjY8L25zMTpaSVBDb2RlPgogICAgICAgICAgICAgIDxuczE6Y291bnRyeUNvZGUg bmFtZT0iVU5JVEVEIFNUQVRFUyI+VVNBPC9uczE6Y291bnRyeUNvZGU+CiAgICAg ICAgICAgICAgPG5zMTpjb25ncmVzc2lvbmFsRGlzdHJpY3RDb2RlPjEwPC9uczE6 Y29uZ3Jlc3Npb25hbERpc3RyaWN0Q29kZT48L25zMTp2ZW5kb3JMb2NhdGlvbj4K ICAgICAgICAgICAgPG5zMTp2ZW5kb3JTaXRlQ29kZT43ODY0NjgxOTkwMDAwUFI8 L25zMTp2ZW5kb3JTaXRlQ29kZT4KICAgICAgICAgICAgPG5zMTp2ZW5kb3JBbHRl cm5hdGVTaXRlQ29kZT4yMDE3MTYxMjY8L25zMTp2ZW5kb3JBbHRlcm5hdGVTaXRl Q29kZT4KICAgICAgICAgICAgPG5zMTp2ZW5kb3JEVU5TSW5mb3JtYXRpb24+CiAg ICAgICAgICAgICAgPG5zMTpEVU5TTnVtYmVyPjc4NjQ2ODE5OTwvbnMxOkRVTlNO dW1iZXI+CiAgICAgICAgICAgICAgPG5zMTp2ZW5kb3JOYW1lPkRMVCBTT0xVVElP TlMgSU5DT1JQT1JBVEVEPC9uczE6dmVuZG9yTmFtZT4KICAgICAgICAgICAgICA8 bnMxOmdsb2JhbFBhcmVudERVTlNOdW1iZXI+Nzg2NDY4MTk5PC9uczE6Z2xvYmFs UGFyZW50RFVOU051bWJlcj4KICAgICAgICAgICAgICA8bnMxOmdsb2JhbFBhcmVu dERVTlNOYW1lPkRMVCBTT0xVVElPTlMgIExMQzwvbnMxOmdsb2JhbFBhcmVudERV TlNOYW1lPjwvbnMxOnZlbmRvckRVTlNJbmZvcm1hdGlvbj4KICAgICAgICAgICAg PG5zMTpjY3JSZWdpc3RyYXRpb25EZXRhaWxzPgogICAgICAgICAgICAgIDxuczE6 cmVnaXN0cmF0aW9uRGF0ZT4yMDAyLTAzLTE0IDAwOjAwOjAwPC9uczE6cmVnaXN0 cmF0aW9uRGF0ZT4KICAgICAgICAgICAgICA8bnMxOnJlbmV3YWxEYXRlPjIwMDgt MTEtMTYgMDA6MDA6MDA8L25zMTpyZW5ld2FsRGF0ZT48L25zMTpjY3JSZWdpc3Ry YXRpb25EZXRhaWxzPjwvbnMxOnZlbmRvclNpdGVEZXRhaWxzPgogICAgICAgICAg PG5zMTpjb250cmFjdGluZ09mZmljZXJCdXNpbmVzc1NpemVEZXRlcm1pbmF0aW9u IGRlc2NyaXB0aW9uPSJTTUFMTCBCVVNJTkVTUyI+UzwvbnMxOmNvbnRyYWN0aW5n T2ZmaWNlckJ1c2luZXNzU2l6ZURldGVybWluYXRpb24+PC9uczE6dmVuZG9yPgog ICAgICAgIDxuczE6cGxhY2VPZlBlcmZvcm1hbmNlPgogICAgICAgICAgPG5zMTpw cmluY2lwYWxQbGFjZU9mUGVyZm9ybWFuY2U+CiAgICAgICAgICAgIDxuczE6bG9j YXRpb25Db2RlPjUwMDAwPC9uczE6bG9jYXRpb25Db2RlPgogICAgICAgICAgICA8 bnMxOnN0YXRlQ29kZSBuYW1lPSJESVNUUklDVCBPRiBDT0xVTUJJQSI+REM8L25z MTpzdGF0ZUNvZGU+CiAgICAgICAgICAgIDxuczE6Y291bnRyeUNvZGUgbmFtZT0i VU5JVEVEIFNUQVRFUyI+VVNBPC9uczE6Y291bnRyeUNvZGU+PC9uczE6cHJpbmNp cGFsUGxhY2VPZlBlcmZvcm1hbmNlPgogICAgICAgICAgPG5zMTpwbGFjZU9mUGVy Zm9ybWFuY2VaSVBDb2RlIGNvdW50eT0iRElTVFJJQ1QgT0YgQ09MVU1CSUEiIGNp dHk9IldBU0hJTkdUT04iPjIwMjEyMDAwMjwvbnMxOnBsYWNlT2ZQZXJmb3JtYW5j ZVpJUENvZGU+CiAgICAgICAgICA8bnMxOnBsYWNlT2ZQZXJmb3JtYW5jZUNvbmdy ZXNzaW9uYWxEaXN0cmljdD4wMDwvbnMxOnBsYWNlT2ZQZXJmb3JtYW5jZUNvbmdy ZXNzaW9uYWxEaXN0cmljdD48L25zMTpwbGFjZU9mUGVyZm9ybWFuY2U+CiAgICAg ICAgPG5zMTpjb21wZXRpdGlvbj4KICAgICAgICAgIDxuczE6c29saWNpdGF0aW9u UHJvY2VkdXJlcyBkZXNjcmlwdGlvbj0iU0lNUExJRklFRCBBQ1FVSVNJVElPTiI+ U1AxPC9uczE6c29saWNpdGF0aW9uUHJvY2VkdXJlcz4KICAgICAgICAgIDxuczE6 dHlwZU9mU2V0QXNpZGUgZGVzY3JpcHRpb249Ik5PIFNFVCBBU0lERSBVU0VELiI+ Tk9ORTwvbnMxOnR5cGVPZlNldEFzaWRlPgogICAgICAgICAgPG5zMTpldmFsdWF0 ZWRQcmVmZXJlbmNlIGRlc2NyaXB0aW9uPSJOTyBQUkVGRVJFTkNFIFVTRUQiPk5P TkU8L25zMTpldmFsdWF0ZWRQcmVmZXJlbmNlPgogICAgICAgICAgPG5zMTpudW1i ZXJPZk9mZmVyc1JlY2VpdmVkPjE8L25zMTpudW1iZXJPZk9mZmVyc1JlY2VpdmVk PgogICAgICAgICAgPG5zMTpjb21tZXJjaWFsSXRlbUFjcXVpc2l0aW9uUHJvY2Vk dXJlcyBkZXNjcmlwdGlvbj0iQ09NTUVSQ0lBTCBJVEVNIj5BPC9uczE6Y29tbWVy Y2lhbEl0ZW1BY3F1aXNpdGlvblByb2NlZHVyZXM+CiAgICAgICAgICA8bnMxOmNv bW1lcmNpYWxJdGVtVGVzdFByb2dyYW0gZGVzY3JpcHRpb249Ik5PIj5OPC9uczE6 Y29tbWVyY2lhbEl0ZW1UZXN0UHJvZ3JhbT4KICAgICAgICAgIDxuczE6c21hbGxC dXNpbmVzc0NvbXBldGl0aXZlbmVzc0RlbW9uc3RyYXRpb25Qcm9ncmFtPmZhbHNl PC9uczE6c21hbGxCdXNpbmVzc0NvbXBldGl0aXZlbmVzc0RlbW9uc3RyYXRpb25Q cm9ncmFtPgogICAgICAgICAgPG5zMTpBNzZBY3Rpb24gZGVzY3JpcHRpb249Ik5P Ij5OPC9uczE6QTc2QWN0aW9uPgogICAgICAgICAgPG5zMTpmZWRCaXpPcHBzIGRl c2NyaXB0aW9uPSJOT1QgQVBQTElDQUJMRSI+WDwvbnMxOmZlZEJpek9wcHM+PC9u czE6Y29tcGV0aXRpb24+CiAgICAgICAgPG5zMTpwcmVmZXJlbmNlUHJvZ3JhbXM+ PC9uczE6cHJlZmVyZW5jZVByb2dyYW1zPgogICAgICAgIDxuczE6dHJhbnNhY3Rp b25JbmZvcm1hdGlvbj4KICAgICAgICAgIDxuczE6Y3JlYXRlZEJ5PlJFWU5PTERT LlZBTkVTU0FAQkxTLkdPVjwvbnMxOmNyZWF0ZWRCeT4KICAgICAgICAgIDxuczE6 Y3JlYXRlZERhdGU+MjAwNy0wNC0xMCAxNjo0MDoyOTwvbnMxOmNyZWF0ZWREYXRl PgogICAgICAgICAgPG5zMTpsYXN0TW9kaWZpZWRCeT5JRFZfQ09SUkVDVDwvbnMx Omxhc3RNb2RpZmllZEJ5PgogICAgICAgICAgPG5zMTpsYXN0TW9kaWZpZWREYXRl PjIwMTYtMDItMTYgMTM6MTA6MDI8L25zMTpsYXN0TW9kaWZpZWREYXRlPgogICAg ICAgICAgPG5zMTpzdGF0dXMgZGVzY3JpcHRpb249IkZJTkFMIj5GPC9uczE6c3Rh dHVzPjwvbnMxOnRyYW5zYWN0aW9uSW5mb3JtYXRpb24+PC9uczE6YXdhcmQ+CiAg ICA8L2NvbnRlbnQ+CiAgPC9lbnRyeT4KICA8ZW50cnk+CiAgICA8dGl0bGU+PCFb Q0RBVEFbTmV3IERFTElWRVJZIE9SREVSIEVEQ0lPMTJPMDAwOSBhd2FyZGVkIHRv IERMVCBTT0xVVElPTlMsIExMQyBmb3IgdGhlIGFtb3VudCBvZiAkMTQsMTY4LjE2 XV0+PC90aXRsZT4KICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJ0ZXh0 L2h0bWwiIGhyZWY9Imh0dHBzOi8vd3d3LmZwZHMuZ292L2V6c2VhcmNoL3NlYXJj aC5kbz9zPUZQRFMmYW1wO2luZGV4TmFtZT1hd2FyZGZ1bGwmYW1wO3RlbXBsYXRl TmFtZT0xLjUuMSZhbXA7cT1FRENJTzEyTzAwMDkrOTEwMCsiPjwvbGluaz4KICAg IDxtb2RpZmllZD4yMDE2LTAyLTE2IDEzOjEwOjE2PC9tb2RpZmllZD4KICAgIDxj b250ZW50IHhtbG5zOm5zMT0iaHR0cHM6Ly93d3cuZnBkcy5nb3YvRlBEUyIgdHlw ZT0iYXBwbGljYXRpb24veG1sIj4KICAgICAgPG5zMTphd2FyZCB4bWxuczpuczE9 Imh0dHA6Ly93d3cuZnBkc25nLmNvbS9GUERTIiB2ZXJzaW9uPSIxLjQiPgogICAg ICAgIDxuczE6YXdhcmRJRD4KICAgICAgICAgIDxuczE6YXdhcmRDb250cmFjdElE PgogICAgICAgICAgICA8bnMxOmFnZW5jeUlEIG5hbWU9IkVEVUNBVElPTiwgREVQ QVJUTUVOVCBPRiI+OTEwMDwvbnMxOmFnZW5jeUlEPgogICAgICAgICAgICA8bnMx OlBJSUQ+RURDSU8xMk8wMDA5PC9uczE6UElJRD4KICAgICAgICAgICAgPG5zMTpt b2ROdW1iZXI+MDwvbnMxOm1vZE51bWJlcj4KICAgICAgICAgICAgPG5zMTp0cmFu c2FjdGlvbk51bWJlcj4wPC9uczE6dHJhbnNhY3Rpb25OdW1iZXI+PC9uczE6YXdh cmRDb250cmFjdElEPgogICAgICAgICAgPG5zMTpyZWZlcmVuY2VkSURWSUQ+CiAg ICAgICAgICAgIDxuczE6YWdlbmN5SUQgbmFtZT0iRkVERVJBTCBBQ1FVSVNJVElP TiBTRVJWSUNFIj40NzMwPC9uczE6YWdlbmN5SUQ+CiAgICAgICAgICAgIDxuczE6 UElJRD5HUzM1RjQ1NDNHPC9uczE6UElJRD4KICAgICAgICAgICAgPG5zMTptb2RO dW1iZXI+MTA3PC9uczE6bW9kTnVtYmVyPjwvbnMxOnJlZmVyZW5jZWRJRFZJRD48 L25zMTphd2FyZElEPgogICAgICAgIDxuczE6cmVsZXZhbnRDb250cmFjdERhdGVz PgogICAgICAgICAgPG5zMTpzaWduZWREYXRlPjIwMTItMDUtMTEgMDA6MDA6MDA8 L25zMTpzaWduZWREYXRlPgogICAgICAgICAgPG5zMTplZmZlY3RpdmVEYXRlPjIw MTItMDUtMTEgMDA6MDA6MDA8L25zMTplZmZlY3RpdmVEYXRlPgogICAgICAgICAg PG5zMTpjdXJyZW50Q29tcGxldGlvbkRhdGU+MjAxMi0wOS0zMCAwMDowMDowMDwv bnMxOmN1cnJlbnRDb21wbGV0aW9uRGF0ZT4KICAgICAgICAgIDxuczE6dWx0aW1h dGVDb21wbGV0aW9uRGF0ZT4yMDEzLTA2LTMwIDAwOjAwOjAwPC9uczE6dWx0aW1h dGVDb21wbGV0aW9uRGF0ZT48L25zMTpyZWxldmFudENvbnRyYWN0RGF0ZXM+CiAg ICAgICAgPG5zMTpkb2xsYXJWYWx1ZXM+CiAgICAgICAgICA8bnMxOm9ibGlnYXRl ZEFtb3VudD4xNDE2OC4xNjwvbnMxOm9ibGlnYXRlZEFtb3VudD4KICAgICAgICAg IDxuczE6YmFzZUFuZEV4ZXJjaXNlZE9wdGlvbnNWYWx1ZT4xNDE2OC4xNjwvbnMx OmJhc2VBbmRFeGVyY2lzZWRPcHRpb25zVmFsdWU+CiAgICAgICAgICA8bnMxOmJh c2VBbmRBbGxPcHRpb25zVmFsdWU+MTQxNjguMTY8L25zMTpiYXNlQW5kQWxsT3B0 aW9uc1ZhbHVlPjwvbnMxOmRvbGxhclZhbHVlcz4KICAgICAgICA8bnMxOnRvdGFs RG9sbGFyVmFsdWVzPgogICAgICAgICAgPG5zMTp0b3RhbE9ibGlnYXRlZEFtb3Vu dD4xNDE2OC4xNjwvbnMxOnRvdGFsT2JsaWdhdGVkQW1vdW50PgogICAgICAgICAg PG5zMTp0b3RhbEJhc2VBbmRFeGVyY2lzZWRPcHRpb25zVmFsdWU+MTQxNjguMTY8 L25zMTp0b3RhbEJhc2VBbmRFeGVyY2lzZWRPcHRpb25zVmFsdWU+CiAgICAgICAg ICA8bnMxOnRvdGFsQmFzZUFuZEFsbE9wdGlvbnNWYWx1ZT4xNDE2OC4xNjwvbnMx OnRvdGFsQmFzZUFuZEFsbE9wdGlvbnNWYWx1ZT48L25zMTp0b3RhbERvbGxhclZh bHVlcz4KICAgICAgICA8bnMxOnB1cmNoYXNlckluZm9ybWF0aW9uPgogICAgICAg ICAgPG5zMTpjb250cmFjdGluZ09mZmljZUFnZW5jeUlEIG5hbWU9IkVEVUNBVElP TiwgREVQQVJUTUVOVCBPRiIgZGVwYXJ0bWVudElEPSI5MTAwIiBkZXBhcnRtZW50 TmFtZT0iRURVQ0FUSU9OLCBERVBBUlRNRU5UIE9GIj45MTAwPC9uczE6Y29udHJh Y3RpbmdPZmZpY2VBZ2VuY3lJRD4KICAgICAgICAgIDxuczE6Y29udHJhY3RpbmdP ZmZpY2VJRCBuYW1lPSJQUklOQ0lQQUwgT0ZGSUNFUyIgY291bnRyeT0iVVNBIj5Q TzwvbnMxOmNvbnRyYWN0aW5nT2ZmaWNlSUQ+CiAgICAgICAgICA8bnMxOmZ1bmRp bmdSZXF1ZXN0aW5nQWdlbmN5SUQgbmFtZT0iRURVQ0FUSU9OLCBERVBBUlRNRU5U IE9GIiBkZXBhcnRtZW50SUQ9IjkxMDAiIGRlcGFydG1lbnROYW1lPSJFRFVDQVRJ T04sIERFUEFSVE1FTlQgT0YiPjkxMDA8L25zMTpmdW5kaW5nUmVxdWVzdGluZ0Fn ZW5jeUlEPgogICAgICAgICAgPG5zMTpmdW5kaW5nUmVxdWVzdGluZ09mZmljZUlE IG5hbWU9Ik9DSU8gLSBPRkZJQ0UgT0YgQ0hJRUYgSU5GT1JNQVRJT04gT0ZGSUNF UiI+RUk8L25zMTpmdW5kaW5nUmVxdWVzdGluZ09mZmljZUlEPgogICAgICAgICAg PG5zMTpmb3JlaWduRnVuZGluZyBkZXNjcmlwdGlvbj0iTk9UIEFQUExJQ0FCTEUi Plg8L25zMTpmb3JlaWduRnVuZGluZz48L25zMTpwdXJjaGFzZXJJbmZvcm1hdGlv bj4KICAgICAgICA8bnMxOmNvbnRyYWN0TWFya2V0aW5nRGF0YT4KICAgICAgICAg IDxuczE6ZmVlUGFpZEZvclVzZU9mU2VydmljZT4wLjAwPC9uczE6ZmVlUGFpZEZv clVzZU9mU2VydmljZT48L25zMTpjb250cmFjdE1hcmtldGluZ0RhdGE+CiAgICAg ICAgPG5zMTpjb250cmFjdERhdGE+CiAgICAgICAgICA8bnMxOmNvbnRyYWN0QWN0 aW9uVHlwZSBkZXNjcmlwdGlvbj0iREVMSVZFUlkgT1JERVIiPkM8L25zMTpjb250 cmFjdEFjdGlvblR5cGU+CiAgICAgICAgICA8bnMxOnR5cGVPZkNvbnRyYWN0UHJp Y2luZyBkZXNjcmlwdGlvbj0iRklSTSBGSVhFRCBQUklDRSI+SjwvbnMxOnR5cGVP ZkNvbnRyYWN0UHJpY2luZz4KICAgICAgICAgIDxuczE6bmF0aW9uYWxJbnRlcmVz dEFjdGlvbkNvZGUgZGVzY3JpcHRpb249Ik5PTkUiPk5PTkU8L25zMTpuYXRpb25h bEludGVyZXN0QWN0aW9uQ29kZT4KICAgICAgICAgIDxuczE6ZGVzY3JpcHRpb25P ZkNvbnRyYWN0UmVxdWlyZW1lbnQ+VE9BRCBTT0ZUV0FSRSBTVVBQT1JUIFJFTkVX QUwuICBUT0FEIElTIFVTRUQgQlkgVEhFIERFUEFSVE1FTlQgT0YgRURVQ0FUSU9O IEFTIEEgUFJJTUFSWSBTUUwgQU5EIFBML1NRTCBERVZFTE9QTUVOVCBUT09MLiAg SVQgSVMgQUxTTyBVU0VEIEZPUiBQUk9EVUNUSU9OIFNVUFBPUlQgQU5EIE1BTkFH SU5HIE9SQUNMRSBEQVRBQkFTRVMuPC9uczE6ZGVzY3JpcHRpb25PZkNvbnRyYWN0 UmVxdWlyZW1lbnQ+CiAgICAgICAgICA8bnMxOkdGRS1HRlAgZGVzY3JpcHRpb249 IlRyYW5zYWN0aW9uIGRvZXMgbm90IHVzZSBHRkUvR0ZQIj5OPC9uczE6R0ZFLUdG UD4KICAgICAgICAgIDxuczE6dW5kZWZpbml0aXplZEFjdGlvbiBkZXNjcmlwdGlv bj0iTk8iPlg8L25zMTp1bmRlZmluaXRpemVkQWN0aW9uPgogICAgICAgICAgPG5z MTpjb25zb2xpZGF0ZWRDb250cmFjdCBkZXNjcmlwdGlvbj0iTk8iPk48L25zMTpj b25zb2xpZGF0ZWRDb250cmFjdD4KICAgICAgICAgIDxuczE6cGVyZm9ybWFuY2VC YXNlZFNlcnZpY2VDb250cmFjdCBkZXNjcmlwdGlvbj0iTk9UIEFQUExJQ0FCTEUi Plg8L25zMTpwZXJmb3JtYW5jZUJhc2VkU2VydmljZUNvbnRyYWN0PgogICAgICAg ICAgPG5zMTptdWx0aVllYXJDb250cmFjdCBkZXNjcmlwdGlvbj0iTk8iPk48L25z MTptdWx0aVllYXJDb250cmFjdD4KICAgICAgICAgIDxuczE6Y29udGluZ2VuY3lI dW1hbml0YXJpYW5QZWFjZWtlZXBpbmdPcGVyYXRpb24gZGVzY3JpcHRpb249Ik5P VCBBUFBMSUNBQkxFIj5YPC9uczE6Y29udGluZ2VuY3lIdW1hbml0YXJpYW5QZWFj ZWtlZXBpbmdPcGVyYXRpb24+CiAgICAgICAgICA8bnMxOmxpc3RPZlRyZWFzdXJ5 QWNjb3VudHM+CiAgICAgICAgICAgIDxuczE6dHJlYXN1cnlBY2NvdW50PgogICAg ICAgICAgICAgIDxuczE6dHJlYXN1cnlBY2NvdW50U3ltYm9sPgogICAgICAgICAg ICAgICAgPG5zMTphZ2VuY3lJZGVudGlmaWVyPjkxPC9uczE6YWdlbmN5SWRlbnRpZmll cj4KICAgICAgICAgICAgICAgIDxuczE6bWFpbkFjY291bnRDb2RlPjAyMDI8L25z MTptYWluQWNjb3VudENvZGU+PC9uczE6dHJlYXN1cnlBY2NvdW50U3ltYm9sPjwv bnMxOnRyZWFzdXJ5QWNjb3VudD48L25zMTpsaXN0T2ZUcmVhc3VyeUFjY291bnRz PgogICAgICAgICAgPG5zMTpwdXJjaGFzZUNhcmRBc1BheW1lbnRNZXRob2QgZGVz Y3JpcHRpb249Ik5PIj5OPC9uczE6cHVyY2hhc2VDYXJkQXNQYXltZW50TWV0aG9k PgogICAgICAgICAgPG5zMTpudW1iZXJPZkFjdGlvbnM+MTwvbnMxOm51bWJlck9m QWN0aW9ucz48L25zMTpjb250cmFjdERhdGE+CiAgICAgICAgPG5zMTpsZWdpc2xh dGl2ZU1hbmRhdGVzPgogICAgICAgICAgPG5zMTpDbGluZ2VyQ29oZW5BY3QgZGVz Y3JpcHRpb249Ik5PIj5OPC9uczE6Q2xpbmdlckNvaGVuQWN0PgogICAgICAgICAg PG5zMTptYXRlcmlhbHNTdXBwbGllc0FydGljbGVzRXF1aXBtZW50IGRlc2NyaXB0 aW9uPSJOT1QgQVBQTElDQUJMRSI+WDwvbnMxOm1hdGVyaWFsc1N1cHBsaWVzQXJ0 aWNsZXNFcXVpcG1lbnQ+CiAgICAgICAgICA8bnMxOmxhYm9yU3RhbmRhcmRzIGRl c2NyaXB0aW9uPSJOT1QgQVBQTElDQUJMRSI+WDwvbnMxOmxhYm9yU3RhbmRhcmRz PgogICAgICAgICAgPG5zMTpjb25zdHJ1Y3Rpb25XYWdlUmF0ZVJlcXVpcmVtZW50 cyBkZXNjcmlwdGlvbj0iTk9UIEFQUExJQ0FCTEUiPlg8L25zMTpjb25zdHJ1Y3Rp b25XYWdlUmF0ZVJlcXVpcmVtZW50cz4KICAgICAgICAgIDxuczE6bGlzdE9mQWRk aXRpb25hbFJlcG9ydGluZ1ZhbHVlcz48L25zMTpsaXN0T2ZBZGRpdGlvbmFsUmVw b3J0aW5nVmFsdWVzPgogICAgICAgICAgPG5zMTppbnRlcmFnZW5jeUNvbnRyYWN0 aW5nQXV0aG9yaXR5IGRlc2NyaXB0aW9uPSJOT1QgQVBQTElDQUJMRSI+WDwvbnMx OmludGVyYWdlbmN5Q29udHJhY3RpbmdBdXRob3JpdHk+PC9uczE6bGVnaXNsYXRp dmVNYW5kYXRlcz4KICAgICAgICA8bnMxOnByb2R1Y3RPclNlcnZpY2VJbmZvcm1h dGlvbj4KICAgICAgICAgIDxuczE6cHJvZHVjdE9yU2VydmljZUNvZGUgZGVzY3Jp cHRpb249IkFEUCBTT0ZUV0FSRSIgcHJvZHVjdE9yU2VydmljZVR5cGU9IlBST0RV Q1QiPjcwMzA8L25zMTpwcm9kdWN0T3JTZXJ2aWNlQ29kZT4KICAgICAgICAgIDxu czE6Y29udHJhY3RCdW5kbGluZyBkZXNjcmlwdGlvbj0iTk9UIEEgQlVORExFRCBS RVFVSVJFTUVOVCI+RDwvbnMxOmNvbnRyYWN0QnVuZGxpbmc+CiAgICAgICAgICA8 bnMxOnByaW5jaXBhbE5BSUNTQ29kZSBkZXNjcmlwdGlvbj0iT1RIRVIgQ09NUFVU RVIgUkVMQVRFRCBTRVJWSUNFUyI+NTQxNTE5PC9uczE6cHJpbmNpcGFsTkFJQ1ND b2RlPgogICAgICAgICAgPG5zMTpyZWNvdmVyZWRNYXRlcmlhbENsYXVzZXMgZGVz Y3JpcHRpb249Ik5PIENMQVVTRVMgSU5DTFVERUQgQU5EIE5PIFNVU1RBSU5BQklM SVRZIElOQ0xVREVEIj5DPC9uczE6cmVjb3ZlcmVkTWF0ZXJpYWxDbGF1c2VzPgog ICAgICAgICAgPG5zMTp1c2VPZkVQQURlc2lnbmF0ZWRQcm9kdWN0cyBkZXNjcmlw dGlvbj0iTk9UIFJFUVVJUkVEIj5FPC9uczE6dXNlT2ZFUEFEZXNpZ25hdGVkUHJv ZHVjdHM+CiAgICAgICAgICA8bnMxOmNvdW50cnlPZk9yaWdpbiBuYW1lPSJVTklU RUQgU1RBVEVTIj5VU0E8L25zMTpjb3VudHJ5T2ZPcmlnaW4+CiAgICAgICAgICA8 bnMxOnBsYWNlT2ZNYW51ZmFjdHVyZSBkZXNjcmlwdGlvbj0iTUZHIElOIFUuUy4i PkQ8L25zMTpwbGFjZU9mTWFudWZhY3R1cmU+PC9uczE6cHJvZHVjdE9yU2Vydmlj ZUluZm9ybWF0aW9uPgogICAgICAgIDxuczE6dmVuZG9yPgogICAgICAgICAgPG5z MTp2ZW5kb3JIZWFkZXI+CiAgICAgICAgICAgIDxuczE6dmVuZG9yTmFtZT5ETFQg U09MVVRJT05TLCBMTEM8L25zMTp2ZW5kb3JOYW1lPjwvbnMxOnZlbmRvckhlYWRl cj4KICAgICAgICAgIDxuczE6dmVuZG9yU2l0ZURldGFpbHM+CiAgICAgICAgICAg IDxuczE6dmVuZG9yU29jaW9FY29ub21pY0luZGljYXRvcnM+CiAgICAgICAgICAg ICAgPG5zMTppc0FsYXNrYW5OYXRpdmVPd25lZENvcnBvcmF0aW9uT3JGaXJtPmZh bHNlPC9uczE6aXNBbGFza2FuTmF0aXZlT3duZWRDb3Jwb3JhdGlvbk9yRmlybT4K ICAgICAgICAgICAgICA8bnMxOmlzQW1lcmljYW5JbmRpYW5Pd25lZD5mYWxzZTwv bnMxOmlzQW1lcmljYW5JbmRpYW5Pd25lZD4KICAgICAgICAgICAgICA8bnMxOmlz SW5kaWFuVHJpYmU+ZmFsc2U8L25zMTppc0luZGlhblRyaWJlPgogICAgICAgICAg ICAgIDxuczE6aXNOYXRpdmVIYXdhaWlhbk93bmVkT3JnYW5pemF0aW9uT3JGaXJt PmZhbHNlPC9uczE6aXNOYXRpdmVIYXdhaWlhbk93bmVkT3JnYW5pemF0aW9uT3JG aXJtPgogICAgICAgICAgICAgIDxuczE6aXNUcmliYWxseU93bmVkRmlybT5mYWxz ZTwvbnMxOmlzVHJpYmFsbHlPd25lZEZpcm0+CiAgICAgICAgICAgICAgPG5zMTpp c1ZldGVyYW5Pd25lZD5mYWxzZTwvbnMxOmlzVmV0ZXJhbk93bmVkPgogICAgICAg ICAgICAgIDxuczE6aXNTZXJ2aWNlUmVsYXRlZERpc2FibGVkVmV0ZXJhbk93bmVk QnVzaW5lc3M+ZmFsc2U8L25zMTppc1NlcnZpY2VSZWxhdGVkRGlzYWJsZWRWZXRl cmFuT3duZWRCdXNpbmVzcz4KICAgICAgICAgICAgICA8bnMxOmlzV29tZW5Pd25l ZD5mYWxzZTwvbnMxOmlzV29tZW5Pd25lZD4KICAgICAgICAgICAgICA8bnMxOm1p bm9yaXR5T3duZWQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzTWlub3JpdHlPd25l ZD5mYWxzZTwvbnMxOmlzTWlub3JpdHlPd25lZD4KICAgICAgICAgICAgICAgIDxu czE6aXNTdWJDb250aW5lbnRBc2lhbkFtZXJpY2FuT3duZWRCdXNpbmVzcz5mYWxz ZTwvbnMxOmlzU3ViQ29udGluZW50QXNpYW5BbWVyaWNhbk93bmVkQnVzaW5lc3M+ CiAgICAgICAgICAgICAgICA8bnMxOmlzQXNpYW5QYWNpZmljQW1lcmljYW5Pd25l ZEJ1c2luZXNzPmZhbHNlPC9uczE6aXNBc2lhblBhY2lmaWNBbWVyaWNhbk93bmVk QnVzaW5lc3M+CiAgICAgICAgICAgICAgICA8bnMxOmlzQmxhY2tBbWVyaWNhbk93 bmVkQnVzaW5lc3M+ZmFsc2U8L25zMTppc0JsYWNrQW1lcmljYW5Pd25lZEJ1c2lu ZXNzPgogICAgICAgICAgICAgICAgPG5zMTppc0hpc3BhbmljQW1lcmljYW5Pd25l ZEJ1c2luZXNzPmZhbHNlPC9uczE6aXNIaXNwYW5pY0FtZXJpY2FuT3duZWRCdXNp bmVzcz4KICAgICAgICAgICAgICAgIDxuczE6aXNOYXRpdmVBbWVyaWNhbk93bmVk QnVzaW5lc3M+ZmFsc2U8L25zMTppc05hdGl2ZUFtZXJpY2FuT3duZWRCdXNpbmVz cz4KICAgICAgICAgICAgICAgIDxuczE6aXNPdGhlck1pbm9yaXR5T3duZWQ+ZmFs c2U8L25zMTppc090aGVyTWlub3JpdHlPd25lZD48L25zMTptaW5vcml0eU93bmVk PgogICAgICAgICAgICAgIDxuczE6aXNWZXJ5U21hbGxCdXNpbmVzcz5mYWxzZTwv bnMxOmlzVmVyeVNtYWxsQnVzaW5lc3M+CiAgICAgICAgICAgICAgPG5zMTppc1dv bWVuT3duZWRTbWFsbEJ1c2luZXNzPmZhbHNlPC9uczE6aXNXb21lbk93bmVkU21h bGxCdXNpbmVzcz4KICAgICAgICAgICAgICA8bnMxOmlzRWNvbm9taWNhbGx5RGlz YWR2YW50YWdlZFdvbWVuT3duZWRTbWFsbEJ1c2luZXNzPmZhbHNlPC9uczE6aXNF Y29ub21pY2FsbHlEaXNhZHZhbnRhZ2VkV29tZW5Pd25lZFNtYWxsQnVzaW5lc3M+ CiAgICAgICAgICAgICAgPG5zMTppc0pvaW50VmVudHVyZVdvbWVuT3duZWRTbWFs bEJ1c2luZXNzPmZhbHNlPC9uczE6aXNKb2ludFZlbnR1cmVXb21lbk93bmVkU21h bGxCdXNpbmVzcz4KICAgICAgICAgICAgICA8bnMxOmlzSm9pbnRWZW50dXJlRWNv bm9taWNhbGx5RGlzYWR2YW50YWdlZFdvbWVuT3duZWRTbWFsbEJ1c2luZXNzPmZh bHNlPC9uczE6aXNKb2ludFZlbnR1cmVFY29ub21pY2FsbHlEaXNhZHZhbnRhZ2Vk V29tZW5Pd25lZFNtYWxsQnVzaW5lc3M+PC9uczE6dmVuZG9yU29jaW9FY29ub21p Y0luZGljYXRvcnM+CiAgICAgICAgICAgIDxuczE6dmVuZG9yQnVzaW5lc3NUeXBl cz4KICAgICAgICAgICAgICA8bnMxOmlzQ29tbXVuaXR5RGV2ZWxvcGVkQ29ycG9y YXRpb25Pd25lZEZpcm0+ZmFsc2U8L25zMTppc0NvbW11bml0eURldmVsb3BlZENv cnBvcmF0aW9uT3duZWRGaXJtPgogICAgICAgICAgICAgIDxuczE6aXNMYWJvclN1 cnBsdXNBcmVhRmlybT5mYWxzZTwvbnMxOmlzTGFib3JTdXJwbHVzQXJlYUZpcm0+ CiAgICAgICAgICAgICAgPG5zMTpmZWRlcmFsR292ZXJubWVudD4KICAgICAgICAg ICAgICAgIDxuczE6aXNGZWRlcmFsR292ZXJubWVudD5mYWxzZTwvbnMxOmlzRmVk ZXJhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzRmVkZXJhbGx5 RnVuZGVkUmVzZWFyY2hBbmREZXZlbG9wbWVudENvcnA+ZmFsc2U8L25zMTppc0Zl ZGVyYWxseUZ1bmRlZFJlc2VhcmNoQW5kRGV2ZWxvcG1lbnRDb3JwPgogICAgICAg ICAgICAgICAgPG5zMTppc0ZlZGVyYWxHb3Zlcm5tZW50QWdlbmN5PmZhbHNlPC9u czE6aXNGZWRlcmFsR292ZXJubWVudEFnZW5jeT48L25zMTpmZWRlcmFsR292ZXJu bWVudD4KICAgICAgICAgICAgICA8bnMxOmlzU3RhdGVHb3Zlcm5tZW50PmZhbHNl PC9uczE6aXNTdGF0ZUdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgPG5zMTpsb2Nh bEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzTG9jYWxHb3Zlcm5t ZW50PmZhbHNlPC9uczE6aXNMb2NhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAg ICA8bnMxOmlzQ2l0eUxvY2FsR292ZXJubWVudD5mYWxzZTwvbnMxOmlzQ2l0eUxv Y2FsR292ZXJubWVudD4KICAgICAgICAgICAgICAgIDxuczE6aXNDb3VudHlMb2Nh bEdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc0NvdW50eUxvY2FsR292ZXJubWVudD4K ICAgICAgICAgICAgICAgIDxuczE6aXNJbnRlck11bmljaXBhbExvY2FsR292ZXJu bWVudD5mYWxzZTwvbnMxOmlzSW50ZXJNdW5pY2lwYWxMb2NhbEdvdmVybm1lbnQ+ CiAgICAgICAgICAgICAgICA8bnMxOmlzTG9jYWxHb3Zlcm5tZW50T3duZWQ+ZmFs c2U8L25zMTppc0xvY2FsR292ZXJubWVudE93bmVkPgogICAgICAgICAgICAgICAg PG5zMTppc011bmljaXBhbGl0eUxvY2FsR292ZXJubWVudD5mYWxzZTwvbnMxOmlz TXVuaWNpcGFsaXR5TG9jYWxHb3Zlcm5tZW50PgogICAgICAgICAgICAgICAgPG5z MTppc1NjaG9vbERpc3RyaWN0TG9jYWxHb3Zlcm5tZW50PmZhbHNlPC9uczE6aXNT Y2hvb2xEaXN0cmljdExvY2FsR292ZXJubWVudD4KICAgICAgICAgICAgICAgIDxu czE6aXNUb3duc2hpcExvY2FsR292ZXJubWVudD5mYWxzZTwvbnMxOmlzVG93bnNo aXBMb2NhbEdvdmVybm1lbnQ+PC9uczE6bG9jYWxHb3Zlcm5tZW50PgogICAgICAg ICAgICAgIDxuczE6aXNUcmliYWxHb3Zlcm5tZW50PmZhbHNlPC9uczE6aXNUcmli YWxHb3Zlcm5tZW50PgogICAgICAgICAgICAgIDxuczE6aXNGb3JlaWduR292ZXJu bWVudD5mYWxzZTwvbnMxOmlzRm9yZWlnbkdvdmVybm1lbnQ+CiAgICAgICAgICAg ICAgPG5zMTpidXNpbmVzc09yT3JnYW5pemF0aW9uVHlwZT4KICAgICAgICAgICAg ICAgIDxuczE6aXNDb3Jwb3JhdGVFbnRpdHlOb3RUYXhFeGVtcHQ+dHJ1ZTwvbnMx OmlzQ29ycG9yYXRlRW50aXR5Tm90VGF4RXhlbXB0PgogICAgICAgICAgICAgICAg PG5zMTppc0NvcnBvcmF0ZUVudGl0eVRheEV4ZW1wdD5mYWxzZTwvbnMxOmlzQ29y cG9yYXRlRW50aXR5VGF4RXhlbXB0PgogICAgICAgICAgICAgICAgPG5zMTppc1Bh cnRuZXJzaGlwT3JMaW1pdGVkTGlhYmlsaXR5UGFydG5lcnNoaXA+ZmFsc2U8L25z MTppc1BhcnRuZXJzaGlwT3JMaW1pdGVkTGlhYmlsaXR5UGFydG5lcnNoaXA+CiAg ICAgICAgICAgICAgICA8bnMxOmlzU29sZVByb3ByZWl0b3JzaGlwPmZhbHNlPC9u czE6aXNTb2xlUHJvcHJlaXRvcnNoaXA+CiAgICAgICAgICAgICAgICA8bnMxOmlz U21hbGxBZ3JpY3VsdHVyYWxDb29wZXJhdGl2ZT5mYWxzZTwvbnMxOmlzU21hbGxB Z3JpY3VsdHVyYWxDb29wZXJhdGl2ZT4KICAgICAgICAgICAgICAgIDxuczE6aXNJ bnRlcm5hdGlvbmFsT3JnYW5pemF0aW9uPmZhbHNlPC9uczE6aXNJbnRlcm5hdGlv bmFsT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPG5zMTppc1VTR292ZXJu bWVudEVudGl0eT5mYWxzZTwvbnMxOmlzVVNHb3Zlcm5tZW50RW50aXR5PjwvbnMx OmJ1c2luZXNzT3JPcmdhbml6YXRpb25UeXBlPjwvbnMxOnZlbmRvckJ1c2luZXNz VHlwZXM+CiAgICAgICAgICAgIDxuczE6dmVuZG9yTGluZU9mQnVzaW5lc3M+CiAg ICAgICAgICAgICAgPG5zMTppc0NvbW11bml0eURldmVsb3BtZW50Q29ycG9yYXRp b24+ZmFsc2U8L25zMTppc0NvbW11bml0eURldmVsb3BtZW50Q29ycG9yYXRpb24+ CiAgICAgICAgICAgICAgPG5zMTppc0RvbWVzdGljU2hlbHRlcj5mYWxzZTwvbnMx OmlzRG9tZXN0aWNTaGVsdGVyPgogICAgICAgICAgICAgIDxuczE6aXNFZHVjYXRp b25hbEluc3RpdHV0aW9uPmZhbHNlPC9uczE6aXNFZHVjYXRpb25hbEluc3RpdHV0 aW9uPgogICAgICAgICAgICAgIDxuczE6aXNGb3VuZGF0aW9uPmZhbHNlPC9uczE6 aXNGb3VuZGF0aW9uPgogICAgICAgICAgICAgIDxuczE6aXNIb3NwaXRhbD5mYWxz ZTwvbnMxOmlzSG9zcGl0YWw+CiAgICAgICAgICAgICAgPG5zMTppc01hbnVmYWN0 dXJlck9mR29vZHM+ZmFsc2U8L25zMTppc01hbnVmYWN0dXJlck9mR29vZHM+CiAg ICAgICAgICAgICAgPG5zMTppc1ZldGVyaW5hcnlIb3NwaXRhbD5mYWxzZTwvbnMx OmlzVmV0ZXJpbmFyeUhvc3BpdGFsPgogICAgICAgICAgICAgIDxuczE6aXNIaXNw YW5pY1NlcnZpY2luZ0luc3RpdHV0aW9uPmZhbHNlPC9uczE6aXNIaXNwYW5pY1Nl cnZpY2luZ0luc3RpdHV0aW9uPjwvbnMxOnZlbmRvckxpbmVPZkJ1c2luZXNzPgog ICAgICAgICAgICA8bnMxOnZlbmRvclJlbGF0aW9uc2hpcFdpdGhGZWRlcmFsR292 ZXJubWVudD4KICAgICAgICAgICAgICA8bnMxOnJlY2VpdmVzQ29udHJhY3RzPmZh bHNlPC9uczE6cmVjZWl2ZXNDb250cmFjdHM+CiAgICAgICAgICAgICAgPG5zMTpy ZWNlaXZlc0dyYW50cz5mYWxzZTwvbnMxOnJlY2VpdmVzR3JhbnRzPgogICAgICAg ICAgICAgIDxuczE6cmVjZWl2ZXNDb250cmFjdHNBbmRHcmFudHM+dHJ1ZTwvbnMx OnJlY2VpdmVzQ29udHJhY3RzQW5kR3JhbnRzPjwvbnMxOnZlbmRvclJlbGF0aW9u c2hpcFdpdGhGZWRlcmFsR292ZXJubWVudD4KICAgICAgICAgICAgPG5zMTp0eXBl T2ZHb3Zlcm5tZW50RW50aXR5PgogICAgICAgICAgICAgIDxuczE6aXNBaXJwb3J0 QXV0aG9yaXR5PmZhbHNlPC9uczE6aXNBaXJwb3J0QXV0aG9yaXR5PgogICAgICAg ICAgICAgIDxuczE6aXNDb3VuY2lsT2ZHb3Zlcm5tZW50cz5mYWxzZTwvbnMxOmlz Q291bmNpbE9mR292ZXJubWVudHM+CiAgICAgICAgICAgICAgPG5zMTppc0hvdXNp bmdBdXRob3JpdGllc1B1YmxpY09yVHJpYmFsPmZhbHNlPC9uczE6aXNIb3VzaW5n QXV0aG9yaXRpZXNQdWJsaWNPclRyaWJhbD4KICAgICAgICAgICAgICA8bnMxOmlz SW50ZXJzdGF0ZUVudGl0eT5mYWxzZTwvbnMxOmlzSW50ZXJzdGF0ZUVudGl0eT4K ICAgICAgICAgICAgICA8bnMxOmlzUGxhbm5pbmdDb21taXNzaW9uPmZhbHNlPC9u czE6aXNQbGFubmluZ0NvbW1pc3Npb24+CiAgICAgICAgICAgICAgPG5zMTppc1Bv cnRBdXRob3JpdHk+ZmFsc2U8L25zMTppc1BvcnRBdXRob3JpdHk+CiAgICAgICAg ICAgICAgPG5zMTppc1RyYW5zaXRBdXRob3JpdHk+ZmFsc2U8L25zMTppc1RyYW5z aXRBdXRob3JpdHk+PC9uczE6dHlwZU9mR292ZXJubWVudEVudGl0eT4KICAgICAg ICAgICAgPG5zMTp2ZW5kb3JPcmdhbml6YXRpb25GYWN0b3JzPgogICAgICAgICAg ICAgIDxuczE6aXNTdWJjaGFwdGVyU0NvcnBvcmF0aW9uPmZhbHNlPC9uczE6aXNT dWJjaGFwdGVyU0NvcnBvcmF0aW9uPgogICAgICAgICAgICAgIDxuczE6aXNMaW1p dGVkTGlhYmlsaXR5Q29ycG9yYXRpb24+dHJ1ZTwvbnMxOmlzTGltaXRlZExpYWJp bGl0eUNvcnBvcmF0aW9uPgogICAgICAgICAgICAgIDxuczE6aXNGb3JlaWduT3du ZWRBbmRMb2NhdGVkPmZhbHNlPC9uczE6aXNGb3JlaWduT3duZWRBbmRMb2NhdGVk PgogICAgICAgICAgICAgIDxuczE6cHJvZml0U3RydWN0dXJlPgogICAgICAgICAg ICAgICAgPG5zMTppc0ZvclByb2ZpdE9yZ2FuaXphdGlvbj50cnVlPC9uczE6aXNG b3JQcm9maXRPcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8bnMxOmlzTm9u cHJvZml0T3JnYW5pemF0aW9uPmZhbHNlPC9uczE6aXNOb25wcm9maXRPcmdhbml6 YXRpb24+CiAgICAgICAgICAgICAgICA8bnMxOmlzT3RoZXJOb3RGb3JQcm9maXRP cmdhbml6YXRpb24+ZmFsc2U8L25zMTppc090aGVyTm90Rm9yUHJvZml0T3JnYW5p emF0aW9uPjwvbnMxOnByb2ZpdFN0cnVjdHVyZT4KICAgICAgICAgICAgICA8bnMx OmlzU2hlbHRlcmVkV29ya3Nob3A+ZmFsc2U8L25zMTppc1NoZWx0ZXJlZFdvcmtz aG9wPgogICAgICAgICAgICAgIDxuczE6c3RhdGVPZkluY29ycG9yYXRpb24gbmFt ZT0iVklSR0lOSUEiPlZBPC9uczE6c3RhdGVPZkluY29ycG9yYXRpb24+CiAgICAg ICAgICAgICAgPG5zMTpjb3VudHJ5T2ZJbmNvcnBvcmF0aW9uIG5hbWU9IlVOSVRF RCBTVEFURVMiPlVTQTwvbnMxOmNvdW50cnlPZkluY29ycG9yYXRpb24+CiAgICAg ICAgICAgICAgPG5zMTpvcmdhbml6YXRpb25hbFR5cGU+Q09SUE9SQVRFIE5PVCBU QVggRVhFTVBUPC9uczE6b3JnYW5pemF0aW9uYWxUeXBlPgogICAgICAgICAgICAg IDxuczE6bnVtYmVyT2ZFbXBsb3llZXM+MjQ1PC9uczE6bnVtYmVyT2ZFbXBsb3ll ZXM+CiAgICAgICAgICAgICAgPG5zMTphbm51YWxSZXZlbnVlPjc3NTk0NDU3Njwv bnMxOmFubnVhbFJldmVudWU+PC9uczE6dmVuZG9yT3JnYW5pemF0aW9uRmFjdG9y cz4KICAgICAgICAgICAgPG5zMTp0eXBlT2ZFZHVjYXRpb25hbEVudGl0eT4KICAg ICAgICAgICAgICA8bnMxOmlzMTg2MkxhbmRHcmFudENvbGxlZ2U+ZmFsc2U8L25z MTppczE4NjJMYW5kR3JhbnRDb2xsZWdlPgogICAgICAgICAgICAgIDxuczE6aXMx ODkwTGFuZEdyYW50Q29sbGVnZT5mYWxzZTwvbnMxOmlzMTg5MExhbmRHcmFudENv bGxlZ2U+CiAgICAgICAgICAgICAgPG5zMTppczE5OTRMYW5kR3JhbnRDb2xsZWdl PmZhbHNlPC9uczE6aXMxOTk0TGFuZEdyYW50Q29sbGVnZT4KICAgICAgICAgICAg ICA8bnMxOmlzSGlzdG9yaWNhbGx5QmxhY2tDb2xsZWdlT3JVbml2ZXJzaXR5PmZh bHNlPC9uczE6aXNIaXN0b3JpY2FsbHlCbGFja0NvbGxlZ2VPclVuaXZlcnNpdHk+ CiAgICAgICAgICAgICAgPG5zMTppc01pbm9yaXR5SW5zdGl0dXRpb24+ZmFsc2U8 L25zMTppc01pbm9yaXR5SW5zdGl0dXRpb24+CiAgICAgICAgICAgICAgPG5zMTpp c1ByaXZhdGVVbml2ZXJzaXR5T3JDb2xsZWdlPmZhbHNlPC9uczE6aXNQcml2YXRl VW5pdmVyc2l0eU9yQ29sbGVnZT4KICAgICAgICAgICAgICA8bnMxOmlzU2Nob29s T2ZGb3Jlc3RyeT5mYWxzZTwvbnMxOmlzU2Nob29sT2ZGb3Jlc3RyeT4KICAgICAg ICAgICAgICA8bnMxOmlzU3RhdGVDb250cm9sbGVkSW5zdGl0dXRpb25vZkhpZ2hl ckxlYXJuaW5nPmZhbHNlPC9uczE6aXNTdGF0ZUNvbnRyb2xsZWRJbnN0aXR1dGlv bm9mSGlnaGVyTGVhcm5pbmc+CiAgICAgICAgICAgICAgPG5zMTppc1RyaWJhbENv bGxlZ2U+ZmFsc2U8L25zMTppc1RyaWJhbENvbGxlZ2U+CiAgICAgICAgICAgICAg PG5zMTppc1ZldGVyaW5hcnlDb2xsZWdlPmZhbHNlPC9uczE6aXNWZXRlcmluYXJ5 Q29sbGVnZT4KICAgICAgICAgICAgICA8bnMxOmlzQWxhc2thbk5hdGl2ZVNlcnZp Y2luZ0luc3RpdHV0aW9uPmZhbHNlPC9uczE6aXNBbGFza2FuTmF0aXZlU2Vydmlj aW5nSW5zdGl0dXRpb24+CiAgICAgICAgICAgICAgPG5zMTppc05hdGl2ZUhhd2Fp aWFuU2VydmljaW5nSW5zdGl0dXRpb24+ZmFsc2U8L25zMTppc05hdGl2ZUhhd2Fp aWFuU2VydmljaW5nSW5zdGl0dXRpb24+PC9uczE6dHlwZU9mRWR1Y2F0aW9uYWxF bnRpdHk+CiAgICAgICAgICAgIDxuczE6dmVuZG9yQ2VydGlmaWNhdGlvbnM+CiAg ICAgICAgICAgICAgPG5zMTppc0RPVENlcnRpZmllZERpc2FkdmFudGFnZWRCdXNp bmVzc0VudGVycHJpc2U+ZmFsc2U8L25zMTppc0RPVENlcnRpZmllZERpc2FkdmFu dGFnZWRCdXNpbmVzc0VudGVycHJpc2U+CiAgICAgICAgICAgICAgPG5zMTppc1Nl bGZDZXJ0aWZpZWRTbWFsbERpc2FkdmFudGFnZWRCdXNpbmVzcz5mYWxzZTwvbnMx OmlzU2VsZkNlcnRpZmllZFNtYWxsRGlzYWR2YW50YWdlZEJ1c2luZXNzPgogICAg ICAgICAgICAgIDxuczE6aXNTQkFDZXJ0aWZpZWRTbWFsbERpc2FkdmFudGFnZWRC dXNpbmVzcz5mYWxzZTwvbnMxOmlzU0JBQ2VydGlmaWVkU21hbGxEaXNhZHZhbnRh Z2VkQnVzaW5lc3M+CiAgICAgICAgICAgICAgPG5zMTppc1NCQUNlcnRpZmllZDhB UHJvZ3JhbVBhcnRpY2lwYW50PmZhbHNlPC9uczE6aXNTQkFDZXJ0aWZpZWQ4QVBy b2dyYW1QYXJ0aWNpcGFudD4KICAgICAgICAgICAgICA8bnMxOmlzU2VsZkNlcnRp ZmllZEhVQlpvbmVKb2ludFZlbnR1cmU+ZmFsc2U8L25zMTppc1NlbGZDZXJ0aWZp ZWRIVUJab25lSm9pbnRWZW50dXJlPgogICAgICAgICAgICAgIDxuczE6aXNTQkFD ZXJ0aWZpZWRIVUJab25lPmZhbHNlPC9uczE6aXNTQkFDZXJ0aWZpZWRIVUJab25l PgogICAgICAgICAgICAgIDxuczE6aXNTQkFDZXJ0aWZpZWQ4QUpvaW50VmVudHVy ZT5mYWxzZTwvbnMxOmlzU0JBQ2VydGlmaWVkOEFKb2ludFZlbnR1cmU+PC9uczE6 dmVuZG9yQ2VydGlmaWNhdGlvbnM+CiAgICAgICAgICAgIDxuczE6dmVuZG9yTG9j YXRpb24+CiAgICAgICAgICAgICAgPG5zMTpzdHJlZXRBZGRyZXNzPjEzODYxIFNV TlJJU0UgVkFMTEVZIERSIFNURSA0MDA8L25zMTpzdHJlZXRBZGRyZXNzPgogICAg ICAgICAgICAgIDxuczE6Y2l0eT5IRVJORE9OPC9uczE6Y2l0eT4KICAgICAgICAg ICAgICA8bnMxOnN0YXRlIG5hbWU9IlZJUkdJTklBIj5WQTwvbnMxOnN0YXRlPgog ICAgICAgICAgICAgIDxuczE6WklQQ29kZT4yMDE3MTYxMjY8L25zMTpaSVBDb2Rl PgogICAgICAgICAgICAgIDxuczE6Y291bnRyeUNvZGUgbmFtZT0iVU5JVEVEIFNU QVRFUyI+VVNBPC9uczE6Y291bnRyeUNvZGU+CiAgICAgICAgICAgICAgPG5zMTpj b25ncmVzc2lvbmFsRGlzdHJpY3RDb2RlPjEwPC9uczE6Y29uZ3Jlc3Npb25hbERp c3RyaWN0Q29kZT48L25zMTp2ZW5kb3JMb2NhdGlvbj4KICAgICAgICAgICAgPG5z MTp2ZW5kb3JEVU5TSW5mb3JtYXRpb24+CiAgICAgICAgICAgICAgPG5zMTpEVU5T TnVtYmVyPjc4NjQ2ODE5OTwvbnMxOkRVTlNOdW1iZXI+CiAgICAgICAgICAgICAg PG5zMTp2ZW5kb3JOYW1lPkRMVCBTT0xVVElPTlMsIExMQzwvbnMxOnZlbmRvck5h bWU+CiAgICAgICAgICAgICAgPG5zMTpnbG9iYWxQYXJlbnREVU5TTnVtYmVyPjc4 NjQ2ODE5OTwvbnMxOmdsb2JhbFBhcmVudERVTlNOdW1iZXI+CiAgICAgICAgICAg ICAgPG5zMTpnbG9iYWxQYXJlbnREVU5TTmFtZT5ETFQgU09MVVRJT05TICBMTEM8 L25zMTpnbG9iYWxQYXJlbnREVU5TTmFtZT48L25zMTp2ZW5kb3JEVU5TSW5mb3Jt YXRpb24+CiAgICAgICAgICAgIDxuczE6Y2NyUmVnaXN0cmF0aW9uRGV0YWlscz48 L25zMTpjY3JSZWdpc3RyYXRpb25EZXRhaWxzPjwvbnMxOnZlbmRvclNpdGVEZXRh aWxzPgogICAgICAgICAgPG5zMTpjb250cmFjdGluZ09mZmljZXJCdXNpbmVzc1Np emVEZXRlcm1pbmF0aW9uIGRlc2NyaXB0aW9uPSJPVEhFUiBUSEFOIFNNQUxMIEJV U0lORVNTIj5PPC9uczE6Y29udHJhY3RpbmdPZmZpY2VyQnVzaW5lc3NTaXplRGV0 ZXJtaW5hdGlvbj48L25zMTp2ZW5kb3I+CiAgICAgICAgPG5zMTpwbGFjZU9mUGVy Zm9ybWFuY2U+CiAgICAgICAgICA8bnMxOnByaW5jaXBhbFBsYWNlT2ZQZXJmb3Jt YW5jZT4KICAgICAgICAgICAgPG5zMTpzdGF0ZUNvZGUgbmFtZT0iRElTVFJJQ1Qg T0YgQ09MVU1CSUEiPkRDPC9uczE6c3RhdGVDb2RlPgogICAgICAgICAgICA8bnMx OmNvdW50cnlDb2RlIG5hbWU9IlVOSVRFRCBTVEFURVMiPlVTQTwvbnMxOmNvdW50 cnlDb2RlPjwvbnMxOnByaW5jaXBhbFBsYWNlT2ZQZXJmb3JtYW5jZT4KICAgICAg ICAgIDxuczE6cGxhY2VPZlBlcmZvcm1hbmNlWklQQ29kZSBjb3VudHk9IkRJU1RS SUNUIE9GIENPTFVNQklBIiBjaXR5PSJXQVNISU5HVE9OIj4yMDIwMjAwMDE8L25z MTpwbGFjZU9mUGVyZm9ybWFuY2VaSVBDb2RlPgogICAgICAgICAgPG5zMTpwbGFj ZU9mUGVyZm9ybWFuY2VDb25ncmVzc2lvbmFsRGlzdHJpY3Q+MDA8L25zMTpwbGFj ZU9mUGVyZm9ybWFuY2VDb25ncmVzc2lvbmFsRGlzdHJpY3Q+PC9uczE6cGxhY2VP ZlBlcmZvcm1hbmNlPgogICAgICAgIDxuczE6Y29tcGV0aXRpb24+CiAgICAgICAg ICA8bnMxOmV4dGVudENvbXBldGVkIGRlc2NyaXB0aW9uPSJGVUxMIEFORCBPUEVO IENPTVBFVElUSU9OIj5BPC9uczE6ZXh0ZW50Q29tcGV0ZWQ+CiAgICAgICAgICA8 bnMxOnNvbGljaXRhdGlvblByb2NlZHVyZXMgZGVzY3JpcHRpb249IlNVQkpFQ1Qg VE8gTVVMVElQTEUgQVdBUkQgRkFJUiBPUFBPUlRVTklUWSI+TUFGTzwvbnMxOnNv bGljaXRhdGlvblByb2NlZHVyZXM+CiAgICAgICAgICA8bnMxOnR5cGVPZlNldEFz aWRlIGRlc2NyaXB0aW9uPSJOTyBTRVQgQVNJREUgVVNFRC4iPk5PTkU8L25zMTp0 eXBlT2ZTZXRBc2lkZT4KICAgICAgICAgIDxuczE6ZXZhbHVhdGVkUHJlZmVyZW5j ZSBkZXNjcmlwdGlvbj0iTk8gUFJFRkVSRU5DRSBVU0VEIj5OT05FPC9uczE6ZXZh bHVhdGVkUHJlZmVyZW5jZT4KICAgICAgICAgIDxuczE6c3RhdHV0b3J5RXhjZXB0 aW9uVG9GYWlyT3Bwb3J0dW5pdHkgZGVzY3JpcHRpb249IkZBSVIgT1BQT1JUVU5J VFkgR0lWRU4iPkZBSVI8L25zMTpzdGF0dXRvcnlFeGNlcHRpb25Ub0ZhaXJPcHBv cnR1bml0eT4KICAgICAgICAgIDxuczE6bnVtYmVyT2ZPZmZlcnNSZWNlaXZlZD4x PC9uczE6bnVtYmVyT2ZPZmZlcnNSZWNlaXZlZD4KICAgICAgICAgIDxuczE6Y29t bWVyY2lhbEl0ZW1BY3F1aXNpdGlvblByb2NlZHVyZXMgZGVzY3JpcHRpb249IkNP TU1FUkNJQUwgSVRFTSI+QTwvbnMxOmNvbW1lcmNpYWxJdGVtQWNxdWlzaXRpb25Q cm9jZWR1cmVzPgogICAgICAgICAgPG5zMTpjb21tZXJjaWFsSXRlbVRlc3RQcm9n cmFtIGRlc2NyaXB0aW9uPSJOTyI+TjwvbnMxOmNvbW1lcmNpYWxJdGVtVGVzdFBy b2dyYW0+CiAgICAgICAgICA8bnMxOkE3NkFjdGlvbiBkZXNjcmlwdGlvbj0iTk8i Pk48L25zMTpBNzZBY3Rpb24+CiAgICAgICAgICA8bnMxOmZlZEJpek9wcHMgZGVz Y3JpcHRpb249Ik5PVCBBUFBMSUNBQkxFIj5YPC9uczE6ZmVkQml6T3Bwcz4KICAg ICAgICAgIDxuczE6bG9jYWxBcmVhU2V0QXNpZGUgZGVzY3JpcHRpb249Ik5PIj5O PC9uczE6bG9jYWxBcmVhU2V0QXNpZGU+PC9uczE6Y29tcGV0aXRpb24+CiAgICAg ICAgPG5zMTpwcmVmZXJlbmNlUHJvZ3JhbXM+PC9uczE6cHJlZmVyZW5jZVByb2dy YW1zPgogICAgICAgIDxuczE6dHJhbnNhY3Rpb25JbmZvcm1hdGlvbj4KICAgICAg ICAgIDxuczE6Y3JlYXRlZEJ5PktBUkwuTC5GRUhSTUFOQEVELkdPVjwvbnMxOmNy ZWF0ZWRCeT4KICAgICAgICAgIDxuczE6Y3JlYXRlZERhdGU+MjAxMi0wNS0wOCAx Mzo0MTowNjwvbnMxOmNyZWF0ZWREYXRlPgogICAgICAgICAgPG5zMTpsYXN0TW9k aWZpZWRCeT5JRFZfQ09SUkVDVDwvbnMxOmxhc3RNb2RpZmllZEJ5PgogICAgICAg ICAgPG5zMTpsYXN0TW9kaWZpZWREYXRlPjIwMTYtMDItMTYgMTM6MTA6MTY8L25z MTpsYXN0TW9kaWZpZWREYXRlPgogICAgICAgICAgPG5zMTpzdGF0dXMgZGVzY3Jp cHRpb249IkZJTkFMIj5GPC9uczE6c3RhdHVzPgogICAgICAgICAgPG5zMTphcHBy b3ZlZEJ5Pk1JQ0hBRUwuSE9MTE9XQVlARUQuR09WPC9uczE6YXBwcm92ZWRCeT4K ICAgICAgICAgIDxuczE6YXBwcm92ZWREYXRlPjIwMTItMDUtMTEgMTA6MTM6MzE8 L25zMTphcHByb3ZlZERhdGU+PC9uczE6dHJhbnNhY3Rpb25JbmZvcm1hdGlvbj48 L25zMTphd2FyZD4KICAgIDwvY29udGVudD4KICA8L2VudHJ5PgogIDxlbnRyeT4K ICAgIDx0aXRsZT48IVtDREFUQVtQVVJDSEFTRSBPUkRFUiBESkYxNTI2MDBQMDAw ODg3NyAoMSkgYXdhcmRlZCB0byBTS0lMTEJVSUxERVJTIElOQywgd2FzIG1vZGlm aWVkIGZvciB0aGUgYW1vdW50IG9mICQwXV0+PC90aXRsZT4KICAgIDxsaW5rIHJl bD0iYWx0ZXJuYXRlIiB0eXBlPSJ0ZXh0L2h0bWwiIGhyZWY9Imh0dHBzOi8vd3d3 LmZwZHMuZ292L2V6c2VhcmNoL3NlYXJjaC5kbz9zPUZQRFMmYW1wO2luZGV4TmFt ZT1hd2FyZGZ1bGwmYW1wO3RlbXBsYXRlTmFtZT0xLjUuMSZhbXA7cT1ESkYxNTI2 MDBQMDAwODg3NysxNTQ5KyI+PC9saW5rPgogICAgPG1vZGlmaWVkPjIwMTYtMDkt MTUgMTA6Mzc6MTQ8L21vZGlmaWVkPgogICAgPGNvbnRlbnQgeG1sbnM6bnMxPSJo dHRwczovL3d3dy5mcGRzLmdvdi9GUERTIiB0eXBlPSJhcHBsaWNhdGlvbi94bWwi PgogICAgICA8bnMxOmF3YXJkIHhtbG5zOm5zMT0iaHR0cDovL3d3dy5mcGRzbmcu Y29tL0ZQRFMiIHZlcnNpb249IjEuNCI+CiAgICAgICAgPG5zMTphd2FyZElEPgog ICAgICAgICAgPG5zMTphd2FyZENvbnRyYWN0SUQ+CiAgICAgICAgICAgIDxuczE6 YWdlbmN5SUQgbmFtZT0iRkVERVJBTCBCVVJFQVUgT0YgSU5WRVNUSUdBVElPTiI+ MTU0OTwvbnMxOmFnZW5jeUlEPgogICAgICAgICAgICA8bnMxOlBJSUQ+REpGMTUy NjAwUDAwMDg4Nzc8L25zMTpQSUlEPgogICAgICAgICAgICA8bnMxOm1vZE51bWJl cj4xPC9uczE6bW9kTnVtYmVyPgogICAgICAgICAgICA8bnMxOnRyYW5zYWN0aW9u TnVtYmVyPjA8L25zMTp0cmFuc2FjdGlvbk51bWJlcj48L25zMTphd2FyZENvbnRy YWN0SUQ+PC9uczE6YXdhcmRJRD4KICAgICAgICA8bnMxOnJlbGV2YW50Q29udHJh Y3REYXRlcz4KICAgICAgICAgIDxuczE6c2lnbmVkRGF0ZT4yMDE1LTEwLTMwIDAw OjAwOjAwPC9uczE6c2lnbmVkRGF0ZT4KICAgICAgICAgIDxuczE6ZWZmZWN0aXZl RGF0ZT4yMDE1LTEwLTMwIDAwOjAwOjAwPC9uczE6ZWZmZWN0aXZlRGF0ZT4KICAg ICAgICAgIDxuczE6Y3VycmVudENvbXBsZXRpb25EYXRlPjIwMTUtMTAtMzAgMDA6 MDA6MDA8L25zMTpjdXJyZW50Q29tcGxldGlvbkRhdGU+CiAgICAgICAgICA8bnMx OnVsdGltYXRlQ29tcGxldGlvbkRhdGU+MjAxNS0xMC0zMCAwMDowMDowMDwvbnMx OnVsdGltYXRlQ29tcGxldGlvbkRhdGU+PC9uczE6cmVsZXZhbnRDb250cmFjdERh dGVzPgogICAgICAgIDxuczE6ZG9sbGFyVmFsdWVzPgogICAgICAgICAgPG5zMTpv YmxpZ2F0ZWRBbW91bnQ+MC4wMDwvbnMxOm9ibGlnYXRlZEFtb3VudD4KICAgICAg ICAgIDxuczE6YmFzZUFuZEV4ZXJjaXNlZE9wdGlvbnNWYWx1ZT4wLjAwPC9uczE6 YmFzZUFuZEV4ZXJjaXNlZE9wdGlvbnNWYWx1ZT4KICAgICAgICAgIDxuczE6YmFz ZUFuZEFsbE9wdGlvbnNWYWx1ZT4wLjAwPC9uczE6YmFzZUFuZEFsbE9wdGlvbnNW YWx1ZT48L25zMTpkb2xsYXJWYWx1ZXM+CiAgICAgICAgPG5zMTp0b3RhbERvbGxh clZhbHVlcz4KICAgICAgICAgIDxuczE6dG90YWxPYmxpZ2F0ZWRBbW91bnQ+MTUw MDAuMDA8L25zMTp0b3RhbE9ibGlnYXRlZEFtb3VudD4KICAgICAgICAgIDxuczE6 dG90YWxCYXNlQW5kRXhlcmNpc2VkT3B0aW9uc1ZhbHVlPjE1MDAwLjAwPC9uczE6 dG90YWxCYXNlQW5kRXhlcmNpc2VkT3B0aW9uc1ZhbHVlPgogICAgICAgICAgPG5z MTp0b3RhbEJhc2VBbmRBbGxPcHRpb25zVmFsdWU+MTUwMDAuMDA8L25zMTp0b3Rh bEJhc2VBbmRBbGxPcHRpb25zVmFsdWU+PC9uczE6dG90YWxEb2xsYXJWYWx1ZXM+ CiAgICAgICAgPG5zMTpwdXJjaGFzZXJJbmZvcm1hdGlvbj4KICAgICAgICAgIDxu czE6Y29udHJhY3RpbmdPZmZpY2VBZ2VuY3lJRCBuYW1lPSJGRURFUkFMIEJVUkVB VSBPRiBJTlZFU1RJR0FUSU9OIiBkZXBhcnRtZW50SUQ9IjE1MDAiIGRlcGFydG1l bnROYW1lPSJKVVNUSUNFLCBERVBBUlRNRU5UIE9GIj4xNTQ5PC9uczE6Y29udHJh Y3RpbmdPZmZpY2VBZ2VuY3lJRD4KICAgICAgICAgIDxuczE6Y29udHJhY3RpbmdP ZmZpY2VJRCBuYW1lPSJERVBUIE9GIEpVU1QvRkVERVJBTCBCVVJFQVUgT0YgSU5W RVNUSUdBVElPTiIgY291bnRyeT0iVVNBIj5QRFMwMjwvbnMxOmNvbnRyYWN0aW5n T2ZmaWNlSUQ+CiAgICAgICAgICA8bnMxOmZ1bmRpbmdSZXF1ZXN0aW5nQWdlbmN5 SUQgbmFtZT0iRkVERVJBTCBCVVJFQVUgT0YgSU5WRVNUSUdBVElPTiIgZGVwYXJ0 bWVudElEPSIxNTAwIiBkZXBhcnRtZW50TmFtZT0iSlVTVElDRSwgREVQQVJUTUVO VCBPRiI+MTU0OTwvbnMxOmZ1bmRpbmdSZXF1ZXN0aW5nQWdlbmN5SUQ+CiAgICAg ICAgICA8bnMxOmZ1bmRpbmdSZXF1ZXN0aW5nT2ZmaWNlSUQgbmFtZT0iREVQVCBP RiBKVVNUL0ZFREVSQUwgQlVSRUFVIE9GIElOVkVTVElHQVRJT04iPlBEUzAyPC9u czE6ZnVuZGluZ1JlcXVlc3RpbmdPZmZpY2VJRD4KICAgICAgICAgIDxuczE6Zm9y ZWlnbkZ1bmRpbmcgZGVzY3JpcHRpb249Ik5PVCBBUFBMSUNBQkxFIj5YPC9uczE6 Zm9yZWlnbkZ1bmRpbmc+PC9uczE6cHVyY2hhc2VySW5mb3JtYXRpb24+CiAgICAg ICAgPG5zMTpjb250cmFjdE1hcmtldGluZ0RhdGE+CiAgICAgICAgICA8bnMxOmZl ZVBhaWRGb3JVc2VPZlNlcnZpY2U+MC4wMDwvbnMxOmZlZVBhaWRGb3JVc2VPZlNl cnZpY2U+PC9uczE6Y29udHJhY3RNYXJrZXRpbmdEYXRhPgogICAgICAgIDxuczE6 Y29udHJhY3REYXRhPgogICAgICAgICAgPG5zMTpjb250cmFjdEFjdGlvblR5cGUg ZGVzY3JpcHRpb249IlBVUkNIQVNFIE9SREVSIj5CPC9uczE6Y29udHJhY3RBY3Rp b25UeXBlPgogICAgICAgICAgPG5zMTp0eXBlT2ZDb250cmFjdFByaWNpbmcgZGVz Y3JpcHRpb249IkZJUk0gRklYRUQgUFJJQ0UiPko8L25zMTp0eXBlT2ZDb250cmFj dFByaWNpbmc+CiAgICAgICAgICA8bnMxOnJlYXNvbkZvck1vZGlmaWNhdGlvbiBk ZXNjcmlwdGlvbj0iQ0xPU0UgT1VUIj5LPC9uczE6cmVhc29uRm9yTW9kaWZpY2F0 aW9uPgogICAgICAgICAgPG5zMTpuYXRpb25hbEludGVyZXN0QWN0aW9uQ29kZSBk ZXNjcmlwdGlvbj0iTk9ORSI+Tk9ORTwvbnMxOm5hdGlvbmFsSW50ZXJlc3RBY3Rp b25Db2RlPgogICAgICAgICAgPG5zMTpkZXNjcmlwdGlvbk9mQ29udHJhY3RSZXF1 aXJlbWVudD4iSUdGOjpDTDo6SUdGIgoKCgoKVEhJUyBXSUxMIEJFIEFOIE9OTElO RSBDTEFTUyBGT1IgMTAgQVBQTElDQVRJT04gREVWRUxPUEVSUy4gIEVBQ0ggREVW RUxPUEVSIFdJTEwgQUNDRVNTIFRIRSBUUkFJTklORyBGUk9NIEVJVEhFUiBBIEhP TUUgQ09NUFVURVIgT1IgT05FIE9OIFVORVQuICBDT1VSU0UgVE9QSUNTIElOQ0xV REUgU1FMIFNUQVRFTUVOVCBQUk9DRVNTSU5HLCBQTC9TUUwgVFVOSU5HLCBWSUVX SU5HIFRIRSBFWEVDVVRJT04gUExBTiwgVEhFIElNUE9SVEFOQzwvbnMxOmRlc2Ny aXB0aW9uT2ZDb250cmFjdFJlcXVpcmVtZW50PgogICAgICAgICAgPG5zMTppbmhl cmVudGx5R292ZXJubWVudGFsRnVuY3Rpb24gZGVzY3JpcHRpb249IkNMT1NFTFkg QVNTT0NJQVRFRCI+Q0w8L25zMTppbmhlcmVudGx5R292ZXJubWVudGFsRnVuY3Rp b24+CiAgICAgICAgICA8bnMxOkdGRS1HRlAgZGVzY3JpcHRpb249IlRyYW5zYWN0 aW9uIGRvZXMgbm90IHVzZSBHRkUvR0ZQIj5OPC9uczE6R0ZFLUdGUD4KICAgICAg ICAgIDxuczE6dW5kZWZpbml0aXplZEFjdGlvbiBkZXNjcmlwdGlvbj0iTk8iPlg8 L25zMTp1bmRlZmluaXRpemVkQWN0aW9uPgogICAgICAgICAgPG5zMTpjb25zb2xp ZGF0ZWRDb250cmFjdCBkZXNjcmlwdGlvbj0iTk8iPk48L25zMTpjb25zb2xpZGF0 ZWRDb250cmFjdD4KICAgICAgICAgIDxuczE6cGVyZm9ybWFuY2VCYXNlZFNlcnZp Y2VDb250cmFjdCBkZXNjcmlwdGlvbj0iTk8gLSBTRVJWSUNFIFdIRVJFIFBCQSBJ UyBOT1QgVVNFRC4iPk48L25zMTpwZXJmb3JtYW5jZUJhc2VkU2VydmljZUNvbnRy YWN0PgogICAgICAgICAgPG5zMTpjb250aW5nZW5jeUh1bWFuaXRhcmlhblBlYWNl a2VlcGluZ09wZXJhdGlvbiBkZXNjcmlwdGlvbj0iTk9UIEFQUExJQ0FCTEUiPlg8 L25zMTpjb250aW5nZW5jeUh1bWFuaXRhcmlhblBlYWNla2VlcGluZ09wZXJhdGlv bj4KICAgICAgICAgIDxuczE6bGlzdE9mVHJlYXN1cnlBY2NvdW50cz4KICAgICAg ICAgICAgPG5zMTp0cmVhc3VyeUFjY291bnQ+CiAgICAgICAgICAgICAgPG5zMTp0 cmVhc3VyeUFjY291bnRTeW1ib2w+CiAgICAgICAgICAgICAgICA8bnMxOmFnZW5j eUlkZW50aWZpZXI+MTU8L25zMTphZ2VuY3lJZGVudGlmaWVyPgogICAgICAgICAg ICAgICAgPG5zMTptYWluQWNjb3VudENvZGU+MDIwMDwvbnMxOm1haW5BY2NvdW50 Q29kZT4KICAgICAgICAgICAgICAgIDxuczE6c3ViQWNjb3VudENvZGU+MDAwPC9u czE6c3ViQWNjb3VudENvZGU+PC9uczE6dHJlYXN1cnlBY2NvdW50U3ltYm9sPjwv bnMxOnRyZWFzdXJ5QWNjb3VudD48L25zMTpsaXN0T2ZUcmVhc3VyeUFjY291bnRz PgogICAgICAgICAgPG5zMTpwdXJjaGFzZUNhcmRBc1BheW1lbnRNZXRob2QgZGVz Y3JpcHRpb249IllFUyI+WTwvbnMxOnB1cmNoYXNlQ2FyZEFzUGF5bWVudE1ldGhv ZD4KICAgICAgICAgIDxuczE6bnVtYmVyT2ZBY3Rpb25zPjE8L25zMTpudW1iZXJP ZkFjdGlvbnM+PC9uczE6Y29udHJhY3REYXRhPgogICAgICAgIDxuczE6bGVnaXNs YXRpdmVNYW5kYXRlcz4KICAgICAgICAgIDxuczE6Q2xpbmdlckNvaGVuQWN0IGRl c2NyaXB0aW9uPSJOTyI+TjwvbnMxOkNsaW5nZXJDb2hlbkFjdD4KICAgICAgICAg IDxuczE6bWF0ZXJpYWxzU3VwcGxpZXNBcnRpY2xlc0VxdWlwbWVudCBkZXNjcmlw dGlvbj0iTk8iPk48L25zMTptYXRlcmlhbHNTdXBwbGllc0FydGljbGVzRXF1aXBt ZW50PgogICAgICAgICAgPG5zMTpsYWJvclN0YW5kYXJkcyBkZXNjcmlwdGlvbj0i Tk8iPk48L25zMTpsYWJvclN0YW5kYXJkcz4KICAgICAgICAgIDxuczE6Y29uc3Ry dWN0aW9uV2FnZVJhdGVSZXF1aXJlbWVudHMgZGVzY3JpcHRpb249Ik5PIj5OPC9u czE6Y29uc3RydWN0aW9uV2FnZVJhdGVSZXF1aXJlbWVudHM+CiAgICAgICAgICA8 bnMxOmxpc3RPZkFkZGl0aW9uYWxSZXBvcnRpbmdWYWx1ZXM+PC9uczE6bGlzdE9m QWRkaXRpb25hbFJlcG9ydGluZ1ZhbHVlcz4KICAgICAgICAgIDxuczE6aW50ZXJh Z2VuY3lDb250cmFjdGluZ0F1dGhvcml0eSBkZXNjcmlwdGlvbj0iTk9UIEFQUExJ Q0FCTEUiPlg8L25zMTppbnRlcmFnZW5jeUNvbnRyYWN0aW5nQXV0aG9yaXR5Pjwv bnMxOmxlZ2lzbGF0aXZlTWFuZGF0ZXM+CiAgICAgICAgPG5zMTpwcm9kdWN0T3JT ZXJ2aWNlSW5mb3JtYXRpb24+CiAgICAgICAgICA8bnMxOnByb2R1Y3RPclNlcnZp Y2VDb2RlIGRlc2NyaXB0aW9uPSJFRFVDQVRJT04vVFJBSU5JTkctIElORk9STUFU SU9OIFRFQ0hOT0xPR1kvVEVMRUNPTU1VTklDQVRJT05TIFRSQUlOSU5HIiBwcm9k dWN0T3JTZXJ2aWNlVHlwZT0iU0VSVklDRSI+VTAxMjwvbnMxOnByb2R1Y3RPclNl cnZpY2VDb2RlPgogICAgICAgICAgPG5zMTpjb250cmFjdEJ1bmRsaW5nIGRlc2Ny aXB0aW9uPSJOT1QgQSBCVU5ETEVEIFJFUVVJUkVNRU5UIj5EPC9uczE6Y29udHJh Y3RCdW5kbGluZz4KICAgICAgICAgIDxuczE6cHJpbmNpcGFsTkFJQ1NDb2RlIGRl c2NyaXB0aW9uPSJDT01QVVRFUiBUUkFJTklORyI+NjExNDIwPC9uczE6cHJpbmNp cGFsTkFJQ1NDb2RlPgogICAgICAgICAgPG5zMTpyZWNvdmVyZWRNYXRlcmlhbENs YXVzZXMgZGVzY3JpcHRpb249Ik5PIENMQVVTRVMgSU5DTFVERUQgQU5EIE5PIFNV U1RBSU5BQklMSVRZIElOQ0xVREVEIj5DPC9uczE6cmVjb3ZlcmVkTWF0ZXJpYWxD bGF1c2VzPgogICAgICAgICAgPG5zMTp1c2VPZkVQQURlc2lnbmF0ZWRQcm9kdWN0 cyBkZXNjcmlwdGlvbj0iTUVFVFMgUkVRVUlSRU1FTlRTIj5BPC9uczE6dXNlT2ZF UEFEZXNpZ25hdGVkUHJvZHVjdHM+CiAgICAgICAgICA8bnMxOmNvdW50cnlPZk9y aWdpbiBuYW1lPSJVTklURUQgU1RBVEVTIj5VU0E8L25zMTpjb3VudHJ5T2ZPcmln aW4+CiAgICAgICAgICA8bnMxOnBsYWNlT2ZNYW51ZmFjdHVyZSBkZXNjcmlwdGlv bj0iTk9UIEEgTUFOVUZBQ1RVUkVEIEVORCBQUk9EVUNUIj5DPC9uczE6cGxhY2VP Zk1hbnVmYWN0dXJlPjwvbnMxOnByb2R1Y3RPclNlcnZpY2VJbmZvcm1hdGlvbj4K ICAgICAgICA8bnMxOnZlbmRvcj4KICAgICAgICAgIDxuczE6dmVuZG9ySGVhZGVy PgogICAgICAgICAgICA8bnMxOnZlbmRvck5hbWU+U0tJTExCVUlMREVSUyBJTkM8 L25zMTp2ZW5kb3JOYW1lPjwvbnMxOnZlbmRvckhlYWRlcj4KICAgICAgICAgIDxu czE6dmVuZG9yU2l0ZURldGFpbHM+CiAgICAgICAgICAgIDxuczE6dmVuZG9yU29j aW9FY29ub21pY0luZGljYXRvcnM+CiAgICAgICAgICAgICAgPG5zMTppc0FsYXNr YW5OYXRpdmVPd25lZENvcnBvcmF0aW9uT3JGaXJtPmZhbHNlPC9uczE6aXNBbGFz a2FuTmF0aXZlT3duZWRDb3Jwb3JhdGlvbk9yRmlybT4KICAgICAgICAgICAgICA8 bnMxOmlzQW1lcmljYW5JbmRpYW5Pd25lZD5mYWxzZTwvbnMxOmlzQW1lcmljYW5J bmRpYW5Pd25lZD4KICAgICAgICAgICAgICA8bnMxOmlzSW5kaWFuVHJpYmU+ZmFs c2U8L25zMTppc0luZGlhblRyaWJlPgogICAgICAgICAgICAgIDxuczE6aXNOYXRp dmVIYXdhaWlhbk93bmVkT3JnYW5pemF0aW9uT3JGaXJtPmZhbHNlPC9uczE6aXNO YXRpdmVIYXdhaWlhbk93bmVkT3JnYW5pemF0aW9uT3JGaXJtPgogICAgICAgICAg ICAgIDxuczE6aXNUcmliYWxseU93bmVkRmlybT5mYWxzZTwvbnMxOmlzVHJpYmFs bHlPd25lZEZpcm0+CiAgICAgICAgICAgICAgPG5zMTppc1ZldGVyYW5Pd25lZD5m YWxzZTwvbnMxOmlzVmV0ZXJhbk93bmVkPgogICAgICAgICAgICAgIDxuczE6aXNT ZXJ2aWNlUmVsYXRlZERpc2FibGVkVmV0ZXJhbk93bmVkQnVzaW5lc3M+ZmFsc2U8 L25zMTppc1NlcnZpY2VSZWxhdGVkRGlzYWJsZWRWZXRlcmFuT3duZWRCdXNpbmVz cz4KICAgICAgICAgICAgICA8bnMxOmlzV29tZW5Pd25lZD5mYWxzZTwvbnMxOmlz V29tZW5Pd25lZD4KICAgICAgICAgICAgICA8bnMxOm1pbm9yaXR5T3duZWQ+CiAg ICAgICAgICAgICAgICA8bnMxOmlzTWlub3JpdHlPd25lZD5mYWxzZTwvbnMxOmlz TWlub3JpdHlPd25lZD4KICAgICAgICAgICAgICAgIDxuczE6aXNTdWJDb250aW5l bnRBc2lhbkFtZXJpY2FuT3duZWRCdXNpbmVzcz5mYWxzZTwvbnMxOmlzU3ViQ29u dGluZW50QXNpYW5BbWVyaWNhbk93bmVkQnVzaW5lc3M+CiAgICAgICAgICAgICAg ICA8bnMxOmlzQXNpYW5QYWNpZmljQW1lcmljYW5Pd25lZEJ1c2luZXNzPmZhbHNl PC9uczE6aXNBc2lhblBhY2lmaWNBbWVyaWNhbk93bmVkQnVzaW5lc3M+CiAgICAg ICAgICAgICAgICA8bnMxOmlzQmxhY2tBbWVyaWNhbk93bmVkQnVzaW5lc3M+ZmFs c2U8L25zMTppc0JsYWNrQW1lcmljYW5Pd25lZEJ1c2luZXNzPgogICAgICAgICAg ICAgICAgPG5zMTppc0hpc3BhbmljQW1lcmljYW5Pd25lZEJ1c2luZXNzPmZhbHNl PC9uczE6aXNIaXNwYW5pY0FtZXJpY2FuT3duZWRCdXNpbmVzcz4KICAgICAgICAg ICAgICAgIDxuczE6aXNOYXRpdmVBbWVyaWNhbk93bmVkQnVzaW5lc3M+ZmFsc2U8 L25zMTppc05hdGl2ZUFtZXJpY2FuT3duZWRCdXNpbmVzcz4KICAgICAgICAgICAg ICAgIDxuczE6aXNPdGhlck1pbm9yaXR5T3duZWQ+ZmFsc2U8L25zMTppc090aGVy TWlub3JpdHlPd25lZD48L25zMTptaW5vcml0eU93bmVkPgogICAgICAgICAgICAg IDxuczE6aXNWZXJ5U21hbGxCdXNpbmVzcz5mYWxzZTwvbnMxOmlzVmVyeVNtYWxsQnVz aW5lc3M+CiAgICAgICAgICAgICAgPG5zMTppc1dvbWVuT3duZWRTbWFsbEJ1c2lu ZXNzPmZhbHNlPC9uczE6aXNXb21lbk93bmVkU21hbGxCdXNpbmVzcz4KICAgICAg ICAgICAgICA8bnMxOmlzRWNvbm9taWNhbGx5RGlzYWR2YW50YWdlZFdvbWVuT3du ZWRTbWFsbEJ1c2luZXNzPmZhbHNlPC9uczE6aXNFY29ub21pY2FsbHlEaXNhZHZh bnRhZ2VkV29tZW5Pd25lZFNtYWxsQnVzaW5lc3M+CiAgICAgICAgICAgICAgPG5z MTppc0pvaW50VmVudHVyZVdvbWVuT3duZWRTbWFsbEJ1c2luZXNzPmZhbHNlPC9u czE6aXNKb2ludFZlbnR1cmVXb21lbk93bmVkU21hbGxCdXNpbmVzcz4KICAgICAg ICAgICAgICA8bnMxOmlzSm9pbnRWZW50dXJlRWNvbm9taWNhbGx5RGlzYWR2YW50 YWdlZFdvbWVuT3duZWRTbWFsbEJ1c2luZXNzPmZhbHNlPC9uczE6aXNKb2ludFZl bnR1cmVFY29ub21pY2FsbHlEaXNhZHZhbnRhZ2VkV29tZW5Pd25lZFNtYWxsQnVz aW5lc3M+PC9uczE6dmVuZG9yU29jaW9FY29ub21pY0luZGljYXRvcnM+CiAgICAg ICAgICAgIDxuczE6dmVuZG9yQnVzaW5lc3NUeXBlcz4KICAgICAgICAgICAgICA8 bnMxOmlzQ29tbXVuaXR5RGV2ZWxvcGVkQ29ycG9yYXRpb25Pd25lZEZpcm0+ZmFs c2U8L25zMTppc0NvbW11bml0eURldmVsb3BlZENvcnBvcmF0aW9uT3duZWRGaXJt PgogICAgICAgICAgICAgIDxuczE6aXNMYWJvclN1cnBsdXNBcmVhRmlybT5mYWxz ZTwvbnMxOmlzTGFib3JTdXJwbHVzQXJlYUZpcm0+CiAgICAgICAgICAgICAgPG5z MTpmZWRlcmFsR292ZXJubWVudD4KICAgICAgICAgICAgICAgIDxuczE6aXNGZWRl cmFsR292ZXJubWVudD5mYWxzZTwvbnMxOmlzRmVkZXJhbEdvdmVybm1lbnQ+CiAg ICAgICAgICAgICAgICA8bnMxOmlzRmVkZXJhbGx5RnVuZGVkUmVzZWFyY2hBbmRE ZXZlbG9wbWVudENvcnA+ZmFsc2U8L25zMTppc0ZlZGVyYWxseUZ1bmRlZFJlc2Vh cmNoQW5kRGV2ZWxvcG1lbnRDb3JwPgogICAgICAgICAgICAgICAgPG5zMTppc0Zl ZGVyYWxHb3Zlcm5tZW50QWdlbmN5PmZhbHNlPC9uczE6aXNGZWRlcmFsR292ZXJu bWVudEFnZW5jeT48L25zMTpmZWRlcmFsR292ZXJubWVudD4KICAgICAgICAgICAg ICA8bnMxOmlzU3RhdGVHb3Zlcm5tZW50PmZhbHNlPC9uczE6aXNTdGF0ZUdvdmVy bm1lbnQ+CiAgICAgICAgICAgICAgPG5zMTpsb2NhbEdvdmVybm1lbnQ+CiAgICAg ICAgICAgICAgICA8bnMxOmlzTG9jYWxHb3Zlcm5tZW50PmZhbHNlPC9uczE6aXNM b2NhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzQ2l0eUxvY2Fs R292ZXJubWVudD5mYWxzZTwvbnMxOmlzQ2l0eUxvY2FsR292ZXJubWVudD4KICAg ICAgICAgICAgICAgIDxuczE6aXNDb3VudHlMb2NhbEdvdmVybm1lbnQ+ZmFsc2U8 L25zMTppc0NvdW50eUxvY2FsR292ZXJubWVudD4KICAgICAgICAgICAgICAgIDxu czE6aXNJbnRlck11bmljaXBhbExvY2FsR292ZXJubWVudD5mYWxzZTwvbnMxOmlz SW50ZXJNdW5pY2lwYWxMb2NhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgICA8 bnMxOmlzTG9jYWxHb3Zlcm5tZW50T3duZWQ+ZmFsc2U8L25zMTppc0xvY2FsR292 ZXJubWVudE93bmVkPgogICAgICAgICAgICAgICAgPG5zMTppc011bmljaXBhbGl0 eUxvY2FsR292ZXJubWVudD5mYWxzZTwvbnMxOmlzTXVuaWNpcGFsaXR5TG9jYWxH b3Zlcm5tZW50PgogICAgICAgICAgICAgICAgPG5zMTppc1NjaG9vbERpc3RyaWN0 TG9jYWxHb3Zlcm5tZW50PmZhbHNlPC9uczE6aXNTY2hvb2xEaXN0cmljdExvY2Fs R292ZXJubWVudD4KICAgICAgICAgICAgICAgIDxuczE6aXNUb3duc2hpcExvY2Fs R292ZXJubWVudD5mYWxzZTwvbnMxOmlzVG93bnNoaXBMb2NhbEdvdmVybm1lbnQ+ PC9uczE6bG9jYWxHb3Zlcm5tZW50PgogICAgICAgICAgICAgIDxuczE6aXNUcmli YWxHb3Zlcm5tZW50PmZhbHNlPC9uczE6aXNUcmliYWxHb3Zlcm5tZW50PgogICAg ICAgICAgICAgIDxuczE6aXNGb3JlaWduR292ZXJubWVudD5mYWxzZTwvbnMxOmlz Rm9yZWlnbkdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgPG5zMTpidXNpbmVzc09y T3JnYW5pemF0aW9uVHlwZT4KICAgICAgICAgICAgICAgIDxuczE6aXNDb3Jwb3Jh dGVFbnRpdHlOb3RUYXhFeGVtcHQ+dHJ1ZTwvbnMxOmlzQ29ycG9yYXRlRW50aXR5 Tm90VGF4RXhlbXB0PgogICAgICAgICAgICAgICAgPG5zMTppc0NvcnBvcmF0ZUVu dGl0eVRheEV4ZW1wdD5mYWxzZTwvbnMxOmlzQ29ycG9yYXRlRW50aXR5VGF4RXhl bXB0PgogICAgICAgICAgICAgICAgPG5zMTppc1BhcnRuZXJzaGlwT3JMaW1pdGVk TGlhYmlsaXR5UGFydG5lcnNoaXA+ZmFsc2U8L25zMTppc1BhcnRuZXJzaGlwT3JM aW1pdGVkTGlhYmlsaXR5UGFydG5lcnNoaXA+CiAgICAgICAgICAgICAgICA8bnMx OmlzU29sZVByb3ByZWl0b3JzaGlwPmZhbHNlPC9uczE6aXNTb2xlUHJvcHJlaXRv cnNoaXA+CiAgICAgICAgICAgICAgICA8bnMxOmlzU21hbGxBZ3JpY3VsdHVyYWxD b29wZXJhdGl2ZT5mYWxzZTwvbnMxOmlzU21hbGxBZ3JpY3VsdHVyYWxDb29wZXJh dGl2ZT4KICAgICAgICAgICAgICAgIDxuczE6aXNJbnRlcm5hdGlvbmFsT3JnYW5p emF0aW9uPmZhbHNlPC9uczE6aXNJbnRlcm5hdGlvbmFsT3JnYW5pemF0aW9uPgog ICAgICAgICAgICAgICAgPG5zMTppc1VTR292ZXJubWVudEVudGl0eT5mYWxzZTwv bnMxOmlzVVNHb3Zlcm5tZW50RW50aXR5PjwvbnMxOmJ1c2luZXNzT3JPcmdhbml6 YXRpb25UeXBlPjwvbnMxOnZlbmRvckJ1c2luZXNzVHlwZXM+CiAgICAgICAgICAg IDxuczE6dmVuZG9yTGluZU9mQnVzaW5lc3M+CiAgICAgICAgICAgICAgPG5zMTpp c0NvbW11bml0eURldmVsb3BtZW50Q29ycG9yYXRpb24+ZmFsc2U8L25zMTppc0Nv bW11bml0eURldmVsb3BtZW50Q29ycG9yYXRpb24+CiAgICAgICAgICAgICAgPG5z MTppc0RvbWVzdGljU2hlbHRlcj5mYWxzZTwvbnMxOmlzRG9tZXN0aWNTaGVsdGVy PgogICAgICAgICAgICAgIDxuczE6aXNFZHVjYXRpb25hbEluc3RpdHV0aW9uPmZh bHNlPC9uczE6aXNFZHVjYXRpb25hbEluc3RpdHV0aW9uPgogICAgICAgICAgICAg IDxuczE6aXNGb3VuZGF0aW9uPmZhbHNlPC9uczE6aXNGb3VuZGF0aW9uPgogICAg ICAgICAgICAgIDxuczE6aXNIb3NwaXRhbD5mYWxzZTwvbnMxOmlzSG9zcGl0YWw+ CiAgICAgICAgICAgICAgPG5zMTppc01hbnVmYWN0dXJlck9mR29vZHM+ZmFsc2U8 L25zMTppc01hbnVmYWN0dXJlck9mR29vZHM+CiAgICAgICAgICAgICAgPG5zMTpp c1ZldGVyaW5hcnlIb3NwaXRhbD5mYWxzZTwvbnMxOmlzVmV0ZXJpbmFyeUhvc3Bp dGFsPgogICAgICAgICAgICAgIDxuczE6aXNIaXNwYW5pY1NlcnZpY2luZ0luc3Rp dHV0aW9uPmZhbHNlPC9uczE6aXNIaXNwYW5pY1NlcnZpY2luZ0luc3RpdHV0aW9u PjwvbnMxOnZlbmRvckxpbmVPZkJ1c2luZXNzPgogICAgICAgICAgICA8bnMxOnZl bmRvclJlbGF0aW9uc2hpcFdpdGhGZWRlcmFsR292ZXJubWVudD4KICAgICAgICAg ICAgICA8bnMxOnJlY2VpdmVzQ29udHJhY3RzPmZhbHNlPC9uczE6cmVjZWl2ZXND b250cmFjdHM+CiAgICAgICAgICAgICAgPG5zMTpyZWNlaXZlc0dyYW50cz5mYWxz ZTwvbnMxOnJlY2VpdmVzR3JhbnRzPgogICAgICAgICAgICAgIDxuczE6cmVjZWl2 ZXNDb250cmFjdHNBbmRHcmFudHM+dHJ1ZTwvbnMxOnJlY2VpdmVzQ29udHJhY3Rz QW5kR3JhbnRzPjwvbnMxOnZlbmRvclJlbGF0aW9uc2hpcFdpdGhGZWRlcmFsR292 ZXJubWVudD4KICAgICAgICAgICAgPG5zMTp0eXBlT2ZHb3Zlcm5tZW50RW50aXR5 PgogICAgICAgICAgICAgIDxuczE6aXNBaXJwb3J0QXV0aG9yaXR5PmZhbHNlPC9u czE6aXNBaXJwb3J0QXV0aG9yaXR5PgogICAgICAgICAgICAgIDxuczE6aXNDb3Vu Y2lsT2ZHb3Zlcm5tZW50cz5mYWxzZTwvbnMxOmlzQ291bmNpbE9mR292ZXJubWVu dHM+CiAgICAgICAgICAgICAgPG5zMTppc0hvdXNpbmdBdXRob3JpdGllc1B1Ymxp Y09yVHJpYmFsPmZhbHNlPC9uczE6aXNIb3VzaW5nQXV0aG9yaXRpZXNQdWJsaWNP clRyaWJhbD4KICAgICAgICAgICAgICA8bnMxOmlzSW50ZXJzdGF0ZUVudGl0eT5m YWxzZTwvbnMxOmlzSW50ZXJzdGF0ZUVudGl0eT4KICAgICAgICAgICAgICA8bnMx OmlzUGxhbm5pbmdDb21taXNzaW9uPmZhbHNlPC9uczE6aXNQbGFubmluZ0NvbW1p c3Npb24+CiAgICAgICAgICAgICAgPG5zMTppc1BvcnRBdXRob3JpdHk+ZmFsc2U8 L25zMTppc1BvcnRBdXRob3JpdHk+CiAgICAgICAgICAgICAgPG5zMTppc1RyYW5z aXRBdXRob3JpdHk+ZmFsc2U8L25zMTppc1RyYW5zaXRBdXRob3JpdHk+PC9uczE6 dHlwZU9mR292ZXJubWVudEVudGl0eT4KICAgICAgICAgICAgPG5zMTp2ZW5kb3JP cmdhbml6YXRpb25GYWN0b3JzPgogICAgICAgICAgICAgIDxuczE6aXNTdWJjaGFw dGVyU0NvcnBvcmF0aW9uPnRydWU8L25zMTppc1N1YmNoYXB0ZXJTQ29ycG9yYXRp b24+CiAgICAgICAgICAgICAgPG5zMTppc0xpbWl0ZWRMaWFiaWxpdHlDb3Jwb3Jh dGlvbj5mYWxzZTwvbnMxOmlzTGltaXRlZExpYWJpbGl0eUNvcnBvcmF0aW9uPgog ICAgICAgICAgICAgIDxuczE6aXNGb3JlaWduT3duZWRBbmRMb2NhdGVkPmZhbHNl PC9uczE6aXNGb3JlaWduT3duZWRBbmRMb2NhdGVkPgogICAgICAgICAgICAgIDxu czE6cHJvZml0U3RydWN0dXJlPgogICAgICAgICAgICAgICAgPG5zMTppc0ZvclBy b2ZpdE9yZ2FuaXphdGlvbj50cnVlPC9uczE6aXNGb3JQcm9maXRPcmdhbml6YXRp b24+CiAgICAgICAgICAgICAgICA8bnMxOmlzTm9ucHJvZml0T3JnYW5pemF0aW9u PmZhbHNlPC9uczE6aXNOb25wcm9maXRPcmdhbml6YXRpb24+CiAgICAgICAgICAg ICAgICA8bnMxOmlzT3RoZXJOb3RGb3JQcm9maXRPcmdhbml6YXRpb24+ZmFsc2U8 L25zMTppc090aGVyTm90Rm9yUHJvZml0T3JnYW5pemF0aW9uPjwvbnMxOnByb2Zp dFN0cnVjdHVyZT4KICAgICAgICAgICAgICA8bnMxOmlzU2hlbHRlcmVkV29ya3No b3A+ZmFsc2U8L25zMTppc1NoZWx0ZXJlZFdvcmtzaG9wPgogICAgICAgICAgICAg IDxuczE6c3RhdGVPZkluY29ycG9yYXRpb24gbmFtZT0iUkhPREUgSVNMQU5EIj5S STwvbnMxOnN0YXRlT2ZJbmNvcnBvcmF0aW9uPgogICAgICAgICAgICAgIDxuczE6 Y291bnRyeU9mSW5jb3Jwb3JhdGlvbiBuYW1lPSJVTklURUQgU1RBVEVTIj5VU0E8 L25zMTpjb3VudHJ5T2ZJbmNvcnBvcmF0aW9uPgogICAgICAgICAgICAgIDxuczE6 b3JnYW5pemF0aW9uYWxUeXBlPkNPUlBPUkFURSBOT1QgVEFYIEVYRU1QVDwvbnMx Om9yZ2FuaXphdGlvbmFsVHlwZT4KICAgICAgICAgICAgICA8bnMxOm51bWJlck9m RW1wbG95ZWVzPjM8L25zMTpudW1iZXJPZkVtcGxveWVlcz4KICAgICAgICAgICAg ICA8bnMxOmFubnVhbFJldmVudWU+ODAwMDAwPC9uczE6YW5udWFsUmV2ZW51ZT48 L25zMTp2ZW5kb3JPcmdhbml6YXRpb25GYWN0b3JzPgogICAgICAgICAgICA8bnMx OnR5cGVPZkVkdWNhdGlvbmFsRW50aXR5PgogICAgICAgICAgICAgIDxuczE6aXMx ODYyTGFuZEdyYW50Q29sbGVnZT5mYWxzZTwvbnMxOmlzMTg2MkxhbmRHcmFudENv bGxlZ2U+CiAgICAgICAgICAgICAgPG5zMTppczE4OTBMYW5kR3JhbnRDb2xsZWdl PmZhbHNlPC9uczE6aXMxODkwTGFuZEdyYW50Q29sbGVnZT4KICAgICAgICAgICAg ICA8bnMxOmlzMTk5NExhbmRHcmFudENvbGxlZ2U+ZmFsc2U8L25zMTppczE5OTRM YW5kR3JhbnRDb2xsZWdlPgogICAgICAgICAgICAgIDxuczE6aXNIaXN0b3JpY2Fs bHlCbGFja0NvbGxlZ2VPclVuaXZlcnNpdHk+ZmFsc2U8L25zMTppc0hpc3Rvcmlj YWxseUJsYWNrQ29sbGVnZU9yVW5pdmVyc2l0eT4KICAgICAgICAgICAgICA8bnMx OmlzTWlub3JpdHlJbnN0aXR1dGlvbj5mYWxzZTwvbnMxOmlzTWlub3JpdHlJbnN0 aXR1dGlvbj4KICAgICAgICAgICAgICA8bnMxOmlzUHJpdmF0ZVVuaXZlcnNpdHlP ckNvbGxlZ2U+ZmFsc2U8L25zMTppc1ByaXZhdGVVbml2ZXJzaXR5T3JDb2xsZWdl PgogICAgICAgICAgICAgIDxuczE6aXNTY2hvb2xPZkZvcmVzdHJ5PmZhbHNlPC9u czE6aXNTY2hvb2xPZkZvcmVzdHJ5PgogICAgICAgICAgICAgIDxuczE6aXNTdGF0 ZUNvbnRyb2xsZWRJbnN0aXR1dGlvbm9mSGlnaGVyTGVhcm5pbmc+ZmFsc2U8L25z MTppc1N0YXRlQ29udHJvbGxlZEluc3RpdHV0aW9ub2ZIaWdoZXJMZWFybmluZz4K ICAgICAgICAgICAgICA8bnMxOmlzVHJpYmFsQ29sbGVnZT5mYWxzZTwvbnMxOmlz VHJpYmFsQ29sbGVnZT4KICAgICAgICAgICAgICA8bnMxOmlzVmV0ZXJpbmFyeUNv bGxlZ2U+ZmFsc2U8L25zMTppc1ZldGVyaW5hcnlDb2xsZWdlPgogICAgICAgICAg ICAgIDxuczE6aXNBbGFza2FuTmF0aXZlU2VydmljaW5nSW5zdGl0dXRpb24+ZmFs c2U8L25zMTppc0FsYXNrYW5OYXRpdmVTZXJ2aWNpbmdJbnN0aXR1dGlvbj4KICAg ICAgICAgICAgICA8bnMxOmlzTmF0aXZlSGF3YWlpYW5TZXJ2aWNpbmdJbnN0aXR1 dGlvbj5mYWxzZTwvbnMxOmlzTmF0aXZlSGF3YWlpYW5TZXJ2aWNpbmdJbnN0aXR1 dGlvbj48L25zMTp0eXBlT2ZFZHVjYXRpb25hbEVudGl0eT4KICAgICAgICAgICAg PG5zMTp2ZW5kb3JDZXJ0aWZpY2F0aW9ucz4KICAgICAgICAgICAgICA8bnMxOmlz RE9UQ2VydGlmaWVkRGlzYWR2YW50YWdlZEJ1c2luZXNzRW50ZXJwcmlzZT5mYWxz ZTwvbnMxOmlzRE9UQ2VydGlmaWVkRGlzYWR2YW50YWdlZEJ1c2luZXNzRW50ZXJw cmlzZT4KICAgICAgICAgICAgICA8bnMxOmlzU2VsZkNlcnRpZmllZFNtYWxsRGlz YWR2YW50YWdlZEJ1c2luZXNzPmZhbHNlPC9uczE6aXNTZWxmQ2VydGlmaWVkU21h bGxEaXNhZHZhbnRhZ2VkQnVzaW5lc3M+CiAgICAgICAgICAgICAgPG5zMTppc1NC QUNlcnRpZmllZFNtYWxsRGlzYWR2YW50YWdlZEJ1c2luZXNzPmZhbHNlPC9uczE6 aXNTQkFDZXJ0aWZpZWRTbWFsbERpc2FkdmFudGFnZWRCdXNpbmVzcz4KICAgICAg ICAgICAgICA8bnMxOmlzU0JBQ2VydGlmaWVkOEFQcm9ncmFtUGFydGljaXBhbnQ+ ZmFsc2U8L25zMTppc1NCQUNlcnRpZmllZDhBUHJvZ3JhbVBhcnRpY2lwYW50Pgog ICAgICAgICAgICAgIDxuczE6aXNTZWxmQ2VydGlmaWVkSFVCWm9uZUpvaW50VmVu dHVyZT5mYWxzZTwvbnMxOmlzU2VsZkNlcnRpZmllZEhVQlpvbmVKb2ludFZlbnR1 cmU+CiAgICAgICAgICAgICAgPG5zMTppc1NCQUNlcnRpZmllZEhVQlpvbmU+ZmFs c2U8L25zMTppc1NCQUNlcnRpZmllZEhVQlpvbmU+CiAgICAgICAgICAgICAgPG5z MTppc1NCQUNlcnRpZmllZDhBSm9pbnRWZW50dXJlPmZhbHNlPC9uczE6aXNTQkFD ZXJ0aWZpZWQ4QUpvaW50VmVudHVyZT48L25zMTp2ZW5kb3JDZXJ0aWZpY2F0aW9u cz4KICAgICAgICAgICAgPG5zMTp2ZW5kb3JMb2NhdGlvbj4KICAgICAgICAgICAg ICA8bnMxOnN0cmVldEFkZHJlc3M+MjEzIFJPQklOU09OIFNUPC9uczE6c3RyZWV0 QWRkcmVzcz4KICAgICAgICAgICAgICA8bnMxOmNpdHk+V0FLRUZJRUxEPC9uczE6 Y2l0eT4KICAgICAgICAgICAgICA8bnMxOnN0YXRlIG5hbWU9IlJIT0RFIElTTEFO RCI+Ukk8L25zMTpzdGF0ZT4KICAgICAgICAgICAgICA8bnMxOlpJUENvZGU+MDI4 NzkzNTkwPC9uczE6WklQQ29kZT4KICAgICAgICAgICAgICA8bnMxOmNvdW50cnlD b2RlIG5hbWU9IlVOSVRFRCBTVEFURVMiPlVTQTwvbnMxOmNvdW50cnlDb2RlPgog ICAgICAgICAgICAgIDxuczE6cGhvbmVObz40MDE3ODM2MTcyPC9uczE6cGhvbmVO bz4KICAgICAgICAgICAgICA8bnMxOmZheE5vPjQwMTc4MzA0MDU8L25zMTpmYXhO bz4KICAgICAgICAgICAgICA8bnMxOmNvbmdyZXNzaW9uYWxEaXN0cmljdENvZGU+ MDI8L25zMTpjb25ncmVzc2lvbmFsRGlzdHJpY3RDb2RlPjwvbnMxOnZlbmRvckxv Y2F0aW9uPgogICAgICAgICAgICA8bnMxOnZlbmRvclNpdGVDb2RlPjk2MDA4NDI0 MjwvbnMxOnZlbmRvclNpdGVDb2RlPgogICAgICAgICAgICA8bnMxOnZlbmRvckFs dGVybmF0ZVNpdGVDb2RlPjAyODc5PC9uczE6dmVuZG9yQWx0ZXJuYXRlU2l0ZUNv ZGU+CiAgICAgICAgICAgIDxuczE6dmVuZG9yRFVOU0luZm9ybWF0aW9uPgogICAg ICAgICAgICAgIDxuczE6RFVOU051bWJlcj45NjAwODQyNDI8L25zMTpEVU5TTnVt YmVyPgogICAgICAgICAgICAgIDxuczE6dmVuZG9yTmFtZT5TS0lMTEJVSUxERVJT IElOQzwvbnMxOnZlbmRvck5hbWU+CiAgICAgICAgICAgICAgPG5zMTpnbG9iYWxQ YXJlbnREVU5TTnVtYmVyPjk2MDA4NDI0MjwvbnMxOmdsb2JhbFBhcmVudERVTlNO dW1iZXI+CiAgICAgICAgICAgICAgPG5zMTpnbG9iYWxQYXJlbnREVU5TTmFtZT5T S0lMTEJVSUxERVJTIElOQzwvbnMxOmdsb2JhbFBhcmVudERVTlNOYW1lPjwvbnMx OnZlbmRvckRVTlNJbmZvcm1hdGlvbj4KICAgICAgICAgICAgPG5zMTpjY3JSZWdp c3RyYXRpb25EZXRhaWxzPgogICAgICAgICAgICAgIDxuczE6cmVnaXN0cmF0aW9u RGF0ZT4yMDAxLTEwLTIyIDAwOjAwOjAwPC9uczE6cmVnaXN0cmF0aW9uRGF0ZT4K ICAgICAgICAgICAgICA8bnMxOnJlbmV3YWxEYXRlPjIwMTYtMDEtMjEgMDA6MDA6 MDA8L25zMTpyZW5ld2FsRGF0ZT48L25zMTpjY3JSZWdpc3RyYXRpb25EZXRhaWxz PjwvbnMxOnZlbmRvclNpdGVEZXRhaWxzPgogICAgICAgICAgPG5zMTpjb250cmFj dGluZ09mZmljZXJCdXNpbmVzc1NpemVEZXRlcm1pbmF0aW9uIGRlc2NyaXB0aW9u PSJPVEhFUiBUSEFOIFNNQUxMIEJVU0lORVNTIj5PPC9uczE6Y29udHJhY3RpbmdP ZmZpY2VyQnVzaW5lc3NTaXplRGV0ZXJtaW5hdGlvbj48L25zMTp2ZW5kb3I+CiAg ICAgICAgPG5zMTpwbGFjZU9mUGVyZm9ybWFuY2U+CiAgICAgICAgICA8bnMxOnBy aW5jaXBhbFBsYWNlT2ZQZXJmb3JtYW5jZT4KICAgICAgICAgICAgPG5zMTpzdGF0 ZUNvZGUgbmFtZT0iRElTVFJJQ1QgT0YgQ09MVU1CSUEiPkRDPC9uczE6c3RhdGVD b2RlPgogICAgICAgICAgICA8bnMxOmNvdW50cnlDb2RlIG5hbWU9IlVOSVRFRCBT VEFURVMiPlVTQTwvbnMxOmNvdW50cnlDb2RlPjwvbnMxOnByaW5jaXBhbFBsYWNl T2ZQZXJmb3JtYW5jZT4KICAgICAgICAgIDxuczE6cGxhY2VPZlBlcmZvcm1hbmNl WklQQ29kZSBjb3VudHk9IkRJU1RSSUNUIE9GIENPTFVNQklBIiBjaXR5PSJXQVNI SU5HVE9OIj4yMDUzNTAwMDE8L25zMTpwbGFjZU9mUGVyZm9ybWFuY2VaSVBDb2Rl PgogICAgICAgICAgPG5zMTpwbGFjZU9mUGVyZm9ybWFuY2VDb25ncmVzc2lvbmFs RGlzdHJpY3Q+MDA8L25zMTpwbGFjZU9mUGVyZm9ybWFuY2VDb25ncmVzc2lvbmFs RGlzdHJpY3Q+PC9uczE6cGxhY2VPZlBlcmZvcm1hbmNlPgogICAgICAgIDxuczE6 Y29tcGV0aXRpb24+CiAgICAgICAgICA8bnMxOmV4dGVudENvbXBldGVkIGRlc2Ny aXB0aW9uPSJGVUxMIEFORCBPUEVOIENPTVBFVElUSU9OIj5BPC9uczE6ZXh0ZW50 Q29tcGV0ZWQ+CiAgICAgICAgICA8bnMxOnNvbGljaXRhdGlvblByb2NlZHVyZXMg ZGVzY3JpcHRpb249Ik5FR09USUFURUQgUFJPUE9TQUwvUVVPVEUiPk5QPC9uczE6 c29saWNpdGF0aW9uUHJvY2VkdXJlcz4KICAgICAgICAgIDxuczE6dHlwZU9mU2V0 QXNpZGUgZGVzY3JpcHRpb249Ik5PIFNFVCBBU0lERSBVU0VELiI+Tk9ORTwvbnMx OnR5cGVPZlNldEFzaWRlPgogICAgICAgICAgPG5zMTpldmFsdWF0ZWRQcmVmZXJl bmNlIGRlc2NyaXB0aW9uPSJOTyBQUkVGRVJFTkNFIFVTRUQiPk5PTkU8L25zMTpl dmFsdWF0ZWRQcmVmZXJlbmNlPgogICAgICAgICAgPG5zMTpudW1iZXJPZk9mZmVy c1JlY2VpdmVkPjM8L25zMTpudW1iZXJPZk9mZmVyc1JlY2VpdmVkPgogICAgICAg ICAgPG5zMTpjb21tZXJjaWFsSXRlbUFjcXVpc2l0aW9uUHJvY2VkdXJlcyBkZXNj cmlwdGlvbj0iQ09NTUVSQ0lBTCBJVEVNIFBST0NFRFVSRVMgTk9UIFVTRUQiPkQ8 L25zMTpjb21tZXJjaWFsSXRlbUFjcXVpc2l0aW9uUHJvY2VkdXJlcz4KICAgICAg ICAgIDxuczE6Y29tbWVyY2lhbEl0ZW1UZXN0UHJvZ3JhbSBkZXNjcmlwdGlvbj0i Tk8iPk48L25zMTpjb21tZXJjaWFsSXRlbVRlc3RQcm9ncmFtPgogICAgICAgICAg PG5zMTpBNzZBY3Rpb24gZGVzY3JpcHRpb249Ik5PIj5OPC9uczE6QTc2QWN0aW9u PgogICAgICAgICAgPG5zMTpmZWRCaXpPcHBzIGRlc2NyaXB0aW9uPSJOTyI+Tjwv bnMxOmZlZEJpek9wcHM+CiAgICAgICAgICA8bnMxOmxvY2FsQXJlYVNldEFzaWRl IGRlc2NyaXB0aW9uPSJOTyI+TjwvbnMxOmxvY2FsQXJlYVNldEFzaWRlPjwvbnMx OmNvbXBldGl0aW9uPgogICAgICAgIDxuczE6cHJlZmVyZW5jZVByb2dyYW1zPgog ICAgICAgICAgPG5zMTpzdWJjb250cmFjdFBsYW4gZGVzY3JpcHRpb249IlBMQU4g Tk9UIFJFUVVJUkVEICI+QjwvbnMxOnN1YmNvbnRyYWN0UGxhbj48L25zMTpwcmVm ZXJlbmNlUHJvZ3JhbXM+CiAgICAgICAgPG5zMTp0cmFuc2FjdGlvbkluZm9ybWF0 aW9uPgogICAgICAgICAgPG5zMTpjcmVhdGVkQnk+VkxCQU5LUzwvbnMxOmNyZWF0 ZWRCeT4KICAgICAgICAgIDxuczE6Y3JlYXRlZERhdGU+MjAxNS0xMC0zMCAxMzoz NDo0MDwvbnMxOmNyZWF0ZWREYXRlPgogICAgICAgICAgPG5zMTpsYXN0TW9kaWZp ZWRCeT5WTEJBTktTPC9uczE6bGFzdE1vZGlmaWVkQnk+CiAgICAgICAgICA8bnMx Omxhc3RNb2RpZmllZERhdGU+MjAxNi0wOS0xNSAxMDozNzoxNDwvbnMxOmxhc3RN b2RpZmllZERhdGU+CiAgICAgICAgICA8bnMxOnN0YXR1cyBkZXNjcmlwdGlvbj0i RklOQUwiPkY8L25zMTpzdGF0dXM+CiAgICAgICAgICA8bnMxOmFwcHJvdmVkQnk+ VkxCQU5LUzwvbnMxOmFwcHJvdmVkQnk+CiAgICAgICAgICA8bnMxOmFwcHJvdmVk RGF0ZT4yMDE2LTA5LTE1IDEwOjM3OjE0PC9uczE6YXBwcm92ZWREYXRlPgogICAg ICAgICAgPG5zMTpjbG9zZWRCeT5WTEJBTktTPC9uczE6Y2xvc2VkQnk+CiAgICAg ICAgICA8bnMxOmNsb3NlZERhdGU+MjAxNi0wOS0xNSAxMDozNzoxNDwvbnMxOmNs b3NlZERhdGU+CiAgICAgICAgICA8bnMxOmNsb3NlZFN0YXR1cz5ZPC9uczE6Y2xv c2VkU3RhdHVzPjwvbnMxOnRyYW5zYWN0aW9uSW5mb3JtYXRpb24+PC9uczE6YXdh cmQ+CiAgICA8L2NvbnRlbnQ+CiAgPC9lbnRyeT4KICA8ZW50cnk+CiAgICA8dGl0 bGU+PCFbQ0RBVEFbTmV3IFBVUkNIQVNFIE9SREVSIERPQzQwUEFQVDE1MTEyMTkg YXdhcmRlZCB0byBTSEkgSU5URVJOQVRJT05BTCBDT1JQLiBmb3IgdGhlIGFtb3Vu dCBvZiAkNCwwMDBdXT48L3RpdGxlPgogICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUi IHR5cGU9InRleHQvaHRtbCIgaHJlZj0iaHR0cHM6Ly93d3cuZnBkcy5nb3YvZXpz ZWFyY2gvc2VhcmNoLmRvP3M9RlBEUyZhbXA7aW5kZXhOYW1lPWF3YXJkZnVsbCZh bXA7dGVtcGxhdGVOYW1lPTEuNS4xJmFtcDtxPURPQzQwUEFQVDE1MTEyMTkrMTM0 NCsiPjwvbGluaz4KICAgIDxtb2RpZmllZD4yMDE1LTA2LTExIDE3OjQwOjM4PC9t b2RpZmllZD4KICAgIDxjb250ZW50IHhtbG5zOm5zMT0iaHR0cHM6Ly93d3cuZnBk cy5nb3YvRlBEUyIgdHlwZT0iYXBwbGljYXRpb24veG1sIj4KICAgICAgPG5zMTph d2FyZCB4bWxuczpuczE9Imh0dHA6Ly93d3cuZnBkc25nLmNvbS9GUERTIiB2ZXJz aW9uPSIxLjQiPgogICAgICAgIDxuczE6YXdhcmRJRD4KICAgICAgICAgIDxuczE6 YXdhcmRDb250cmFjdElEPgogICAgICAgICAgICA8bnMxOmFnZW5jeUlEIG5hbWU9 IlBBVEVOVCBBTkQgVFJBREVNQVJLIE9GRklDRSI+MTM0NDwvbnMxOmFnZW5jeUlE PgogICAgICAgICAgICA8bnMxOlBJSUQ+RE9DNDBQQVBUMTUxMTIxOTwvbnMxOlBJ SUQ+CiAgICAgICAgICAgIDxuczE6bW9kTnVtYmVyPjA8L25zMTptb2ROdW1iZXI+ CiAgICAgICAgICAgIDxuczE6dHJhbnNhY3Rpb25OdW1iZXI+MDwvbnMxOnRyYW5z YWN0aW9uTnVtYmVyPjwvbnMxOmF3YXJkQ29udHJhY3RJRD48L25zMTphd2FyZElE PgogICAgICAgIDxuczE6cmVsZXZhbnRDb250cmFjdERhdGVzPgogICAgICAgICAg PG5zMTpzaWduZWREYXRlPjIwMTUtMDYtMDkgMDA6MDA6MDA8L25zMTpzaWduZWRE YXRlPgogICAgICAgICAgPG5zMTplZmZlY3RpdmVEYXRlPjIwMTUtMDYtMDkgMDA6 MDA6MDA8L25zMTplZmZlY3RpdmVEYXRlPgogICAgICAgICAgPG5zMTpjdXJyZW50 Q29tcGxldGlvbkRhdGU+MjAxNi0wNi0wOCAwMDowMDowMDwvbnMxOmN1cnJlbnRD b21wbGV0aW9uRGF0ZT4KICAgICAgICAgIDxuczE6dWx0aW1hdGVDb21wbGV0aW9u RGF0ZT4yMDE2LTA2LTA4IDAwOjAwOjAwPC9uczE6dWx0aW1hdGVDb21wbGV0aW9u RGF0ZT48L25zMTpyZWxldmFudENvbnRyYWN0RGF0ZXM+CiAgICAgICAgPG5zMTpk b2xsYXJWYWx1ZXM+CiAgICAgICAgICA8bnMxOm9ibGlnYXRlZEFtb3VudD40MDAw LjAwPC9uczE6b2JsaWdhdGVkQW1vdW50PgogICAgICAgICAgPG5zMTpiYXNlQW5k RXhlcmNpc2VkT3B0aW9uc1ZhbHVlPjQwMDAuMDA8L25zMTpiYXNlQW5kRXhlcmNp c2VkT3B0aW9uc1ZhbHVlPgogICAgICAgICAgPG5zMTpiYXNlQW5kQWxsT3B0aW9u c1ZhbHVlPjQwMDAuMDA8L25zMTpiYXNlQW5kQWxsT3B0aW9uc1ZhbHVlPjwvbnMx OmRvbGxhclZhbHVlcz4KICAgICAgICA8bnMxOnRvdGFsRG9sbGFyVmFsdWVzPgog ICAgICAgICAgPG5zMTp0b3RhbE9ibGlnYXRlZEFtb3VudD40MDAwLjAwPC9uczE6 dG90YWxPYmxpZ2F0ZWRBbW91bnQ+CiAgICAgICAgICA8bnMxOnRvdGFsQmFzZUFu ZEV4ZXJjaXNlZE9wdGlvbnNWYWx1ZT40MDAwLjAwPC9uczE6dG90YWxCYXNlQW5k RXhlcmNpc2VkT3B0aW9uc1ZhbHVlPgogICAgICAgICAgPG5zMTp0b3RhbEJhc2VB bmRBbGxPcHRpb25zVmFsdWU+NDAwMC4wMDwvbnMxOnRvdGFsQmFzZUFuZEFsbE9w dGlvbnNWYWx1ZT48L25zMTp0b3RhbERvbGxhclZhbHVlcz4KICAgICAgICA8bnMx OnB1cmNoYXNlckluZm9ybWF0aW9uPgogICAgICAgICAgPG5zMTpjb250cmFjdGlu Z09mZmljZUFnZW5jeUlEIG5hbWU9IlBBVEVOVCBBTkQgVFJBREVNQVJLIE9GRklD RSIgZGVwYXJ0bWVudElEPSIxMzAwIiBkZXBhcnRtZW50TmFtZT0iQ09NTUVSQ0Us IERFUEFSVE1FTlQgT0YiPjEzNDQ8L25zMTpjb250cmFjdGluZ09mZmljZUFnZW5j eUlEPgogICAgICAgICAgPG5zMTpjb250cmFjdGluZ09mZmljZUlEIG5hbWU9IkRF UFQgT0YgQ09NTS9QQVRFTlQgQU5EIFRSQURFTUFSSyBPRkZJQ0UiIGNvdW50cnk9 IlVTQSI+MDAwUEE8L25zMTpjb250cmFjdGluZ09mZmljZUlEPgogICAgICAgICAg PG5zMTpmdW5kaW5nUmVxdWVzdGluZ0FnZW5jeUlEIG5hbWU9IlBBVEVOVCBBTkQg VFJBREVNQVJLIE9GRklDRSIgZGVwYXJ0bWVudElEPSIxMzAwIiBkZXBhcnRtZW50 TmFtZT0iQ09NTUVSQ0UsIERFUEFSVE1FTlQgT0YiPjEzNDQ8L25zMTpmdW5kaW5n UmVxdWVzdGluZ0FnZW5jeUlEPgogICAgICAgICAgPG5zMTpmdW5kaW5nUmVxdWVz dGluZ09mZmljZUlEIG5hbWU9IkRFUFQgT0YgQ09NTS9QQVRFTlQgQU5EIFRSQURF TUFSSyBPRkZJQ0UiPjAwMFBBPC9uczE6ZnVuZGluZ1JlcXVlc3RpbmdPZmZpY2VJ RD4KICAgICAgICAgIDxuczE6Zm9yZWlnbkZ1bmRpbmcgZGVzY3JpcHRpb249Ik5P VCBBUFBMSUNBQkxFIj5YPC9uczE6Zm9yZWlnbkZ1bmRpbmc+PC9uczE6cHVyY2hh c2VySW5mb3JtYXRpb24+CiAgICAgICAgPG5zMTpjb250cmFjdE1hcmtldGluZ0Rh dGE+CiAgICAgICAgICA8bnMxOmZlZVBhaWRGb3JVc2VPZlNlcnZpY2U+MC4wMDwv bnMxOmZlZVBhaWRGb3JVc2VPZlNlcnZpY2U+PC9uczE6Y29udHJhY3RNYXJrZXRp bmdEYXRhPgogICAgICAgIDxuczE6Y29udHJhY3REYXRhPgogICAgICAgICAgPG5z MTpjb250cmFjdEFjdGlvblR5cGUgZGVzY3JpcHRpb249IlBVUkNIQVNFIE9SREVS Ij5CPC9uczE6Y29udHJhY3RBY3Rpb25UeXBlPgogICAgICAgICAgPG5zMTp0eXBl T2ZDb250cmFjdFByaWNpbmcgZGVzY3JpcHRpb249IkZJUk0gRklYRUQgUFJJQ0Ui Pko8L25zMTp0eXBlT2ZDb250cmFjdFByaWNpbmc+CiAgICAgICAgICA8bnMxOm5h dGlvbmFsSW50ZXJlc3RBY3Rpb25Db2RlIGRlc2NyaXB0aW9uPSJOT05FIj5OT05F PC9uczE6bmF0aW9uYWxJbnRlcmVzdEFjdGlvbkNvZGU+CiAgICAgICAgICA8bnMx OmRlc2NyaXB0aW9uT2ZDb250cmFjdFJlcXVpcmVtZW50PkxJQ0VOU0UgRk9SIFNP TkFSU09VUkNFIFBML1NRTDwvbnMxOmRlc2NyaXB0aW9uT2ZDb250cmFjdFJlcXVp cmVtZW50PgogICAgICAgICAgPG5zMTpHRkUtR0ZQIGRlc2NyaXB0aW9uPSJUcmFu c2FjdGlvbiBkb2VzIG5vdCB1c2UgR0ZFL0dGUCI+TjwvbnMxOkdGRS1HRlA+CiAg ICAgICAgICA8bnMxOnVuZGVmaW5pdGl6ZWRBY3Rpb24gZGVzY3JpcHRpb249Ik5P Ij5YPC9uczE6dW5kZWZpbml0aXplZEFjdGlvbj4KICAgICAgICAgIDxuczE6Y29u c29saWRhdGVkQ29udHJhY3QgZGVzY3JpcHRpb249Ik5PIj5OPC9uczE6Y29uc29s aWRhdGVkQ29udHJhY3Q+CiAgICAgICAgICA8bnMxOnBlcmZvcm1hbmNlQmFzZWRT ZXJ2aWNlQ29udHJhY3QgZGVzY3JpcHRpb249Ik5PVCBBUFBMSUNBQkxFIj5YPC9u czE6cGVyZm9ybWFuY2VCYXNlZFNlcnZpY2VDb250cmFjdD4KICAgICAgICAgIDxu czE6Y29udGluZ2VuY3lIdW1hbml0YXJpYW5QZWFjZWtlZXBpbmdPcGVyYXRpb24g ZGVzY3JpcHRpb249Ik5PVCBBUFBMSUNBQkxFIj5YPC9uczE6Y29udGluZ2VuY3lI dW1hbml0YXJpYW5QZWFjZWtlZXBpbmdPcGVyYXRpb24+CiAgICAgICAgICA8bnMx Omxpc3RPZlRyZWFzdXJ5QWNjb3VudHM+CiAgICAgICAgICAgIDxuczE6dHJlYXN1 cnlBY2NvdW50PgogICAgICAgICAgICAgIDxuczE6dHJlYXN1cnlBY2NvdW50U3lt Ym9sPgogICAgICAgICAgICAgICAgPG5zMTphZ2VuY3lJZGVudGlmaWVyPjEzPC9u czE6YWdlbmN5SWRlbnRpZmllcj4KICAgICAgICAgICAgICAgIDxuczE6bWFpbkFj Y291bnRDb2RlPjEwMDY8L25zMTptYWluQWNjb3VudENvZGU+CiAgICAgICAgICAg ICAgICA8bnMxOnN1YkFjY291bnRDb2RlPjAwMDwvbnMxOnN1YkFjY291bnRDb2Rl PjwvbnMxOnRyZWFzdXJ5QWNjb3VudFN5bWJvbD48L25zMTp0cmVhc3VyeUFjY291 bnQ+PC9uczE6bGlzdE9mVHJlYXN1cnlBY2NvdW50cz4KICAgICAgICAgIDxuczE6 cHVyY2hhc2VDYXJkQXNQYXltZW50TWV0aG9kIGRlc2NyaXB0aW9uPSJOTyI+Tjwv bnMxOnB1cmNoYXNlQ2FyZEFzUGF5bWVudE1ldGhvZD4KICAgICAgICAgIDxuczE6 bnVtYmVyT2ZBY3Rpb25zPjE8L25zMTpudW1iZXJPZkFjdGlvbnM+PC9uczE6Y29u dHJhY3REYXRhPgogICAgICAgIDxuczE6bGVnaXNsYXRpdmVNYW5kYXRlcz4KICAg ICAgICAgIDxuczE6Q2xpbmdlckNvaGVuQWN0IGRlc2NyaXB0aW9uPSJZRVMiPlk8 L25zMTpDbGluZ2VyQ29oZW5BY3Q+CiAgICAgICAgICA8bnMxOm1hdGVyaWFsc1N1 cHBsaWVzQXJ0aWNsZXNFcXVpcG1lbnQgZGVzY3JpcHRpb249Ik5PVCBBUFBMSUNB QkxFIj5YPC9uczE6bWF0ZXJpYWxzU3VwcGxpZXNBcnRpY2xlc0VxdWlwbWVudD4K ICAgICAgICAgIDxuczE6bGFib3JTdGFuZGFyZHMgZGVzY3JpcHRpb249Ik5PVCBB UFBMSUNBQkxFIj5YPC9uczE6bGFib3JTdGFuZGFyZHM+CiAgICAgICAgICA8bnMx OmNvbnN0cnVjdGlvbldhZ2VSYXRlUmVxdWlyZW1lbnRzIGRlc2NyaXB0aW9uPSJO T1QgQVBQTElDQUJMRSI+WDwvbnMxOmNvbnN0cnVjdGlvbldhZ2VSYXRlUmVxdWly ZW1lbnRzPgogICAgICAgICAgPG5zMTpsaXN0T2ZBZGRpdGlvbmFsUmVwb3J0aW5n VmFsdWVzPjwvbnMxOmxpc3RPZkFkZGl0aW9uYWxSZXBvcnRpbmdWYWx1ZXM+CiAg ICAgICAgICA8bnMxOmludGVyYWdlbmN5Q29udHJhY3RpbmdBdXRob3JpdHkgZGVz Y3JpcHRpb249Ik5PVCBBUFBMSUNBQkxFIj5YPC9uczE6aW50ZXJhZ2VuY3lDb250 cmFjdGluZ0F1dGhvcml0eT48L25zMTpsZWdpc2xhdGl2ZU1hbmRhdGVzPgogICAg ICAgIDxuczE6cHJvZHVjdE9yU2VydmljZUluZm9ybWF0aW9uPgogICAgICAgICAg PG5zMTpwcm9kdWN0T3JTZXJ2aWNlQ29kZSBkZXNjcmlwdGlvbj0iQURQIFNPRlRX QVJFIiBwcm9kdWN0T3JTZXJ2aWNlVHlwZT0iUFJPRFVDVCI+NzAzMDwvbnMxOnBy b2R1Y3RPclNlcnZpY2VDb2RlPgogICAgICAgICAgPG5zMTpjb250cmFjdEJ1bmRs aW5nIGRlc2NyaXB0aW9uPSJOT1QgQSBCVU5ETEVEIFJFUVVJUkVNRU5UIj5EPC9u czE6Y29udHJhY3RCdW5kbGluZz4KICAgICAgICAgIDxuczE6cHJpbmNpcGFsTkFJ Q1NDb2RlIGRlc2NyaXB0aW9uPSJDT01QVVRFUiBBTkQgQ09NUFVURVIgUEVSSVBI RVJBTCBFUVVJUE1FTlQgQU5EIFNPRlRXQVJFIE1FUkNIQU5UIFdIT0xFU0FMRVJT Ij40MjM0MzA8L25zMTpwcmluY2lwYWxOQUlDU0NvZGU+CiAgICAgICAgICA8bnMx OnJlY292ZXJlZE1hdGVyaWFsQ2xhdXNlcyBkZXNjcmlwdGlvbj0iTk8gQ0xBVVNF UyBJTkNMVURFRCBBTkQgTk8gU1VTVEFJTkFCSUxJVFkgSU5DTFVERUQiPkM8L25z MTpyZWNvdmVyZWRNYXRlcmlhbENsYXVzZXM+CiAgICAgICAgICA8bnMxOm1hbnVm YWN0dXJpbmdPcmdhbml6YXRpb25UeXBlIGRlc2NyaXB0aW9uPSJVLlMuIE9XTkVE IEJVU0lORVNTIj5BPC9uczE6bWFudWZhY3R1cmluZ09yZ2FuaXphdGlvblR5cGU+ CiAgICAgICAgICA8bnMxOnVzZU9mRVBBRGVzaWduYXRlZFByb2R1Y3RzIGRlc2Ny aXB0aW9uPSJOT1QgUkVRVUlSRUQiPkU8L25zMTp1c2VPZkVQQURlc2lnbmF0ZWRQ cm9kdWN0cz4KICAgICAgICAgIDxuczE6Y291bnRyeU9mT3JpZ2luIG5hbWU9IlVO SVRFRCBTVEFURVMiPlVTQTwvbnMxOmNvdW50cnlPZk9yaWdpbj4KICAgICAgICAg IDxuczE6cGxhY2VPZk1hbnVmYWN0dXJlIGRlc2NyaXB0aW9uPSJNRkcgSU4gVS5T LiI+RDwvbnMxOnBsYWNlT2ZNYW51ZmFjdHVyZT48L25zMTpwcm9kdWN0T3JTZXJ2 aWNlSW5mb3JtYXRpb24+CiAgICAgICAgPG5zMTp2ZW5kb3I+CiAgICAgICAgICA8 bnMxOnZlbmRvckhlYWRlcj4KICAgICAgICAgICAgPG5zMTp2ZW5kb3JOYW1lPlNI SSBJTlRFUk5BVElPTkFMIENPUlAuPC9uczE6dmVuZG9yTmFtZT48L25zMTp2ZW5k b3JIZWFkZXI+CiAgICAgICAgICA8bnMxOnZlbmRvclNpdGVEZXRhaWxzPgogICAg ICAgICAgICA8bnMxOnZlbmRvclNvY2lvRWNvbm9taWNJbmRpY2F0b3JzPgogICAg ICAgICAgICAgIDxuczE6aXNBbGFza2FuTmF0aXZlT3duZWRDb3Jwb3JhdGlvbk9y RmlybT5mYWxzZTwvbnMxOmlzQWxhc2thbk5hdGl2ZU93bmVkQ29ycG9yYXRpb25P ckZpcm0+CiAgICAgICAgICAgICAgPG5zMTppc0FtZXJpY2FuSW5kaWFuT3duZWQ+ ZmFsc2U8L25zMTppc0FtZXJpY2FuSW5kaWFuT3duZWQ+CiAgICAgICAgICAgICAg PG5zMTppc0luZGlhblRyaWJlPmZhbHNlPC9uczE6aXNJbmRpYW5UcmliZT4KICAg ICAgICAgICAgICA8bnMxOmlzTmF0aXZlSGF3YWlpYW5Pd25lZE9yZ2FuaXphdGlv bk9yRmlybT5mYWxzZTwvbnMxOmlzTmF0aXZlSGF3YWlpYW5Pd25lZE9yZ2FuaXph dGlvbk9yRmlybT4KICAgICAgICAgICAgICA8bnMxOmlzVHJpYmFsbHlPd25lZEZp cm0+ZmFsc2U8L25zMTppc1RyaWJhbGx5T3duZWRGaXJtPgogICAgICAgICAgICAg IDxuczE6aXNWZXRlcmFuT3duZWQ+ZmFsc2U8L25zMTppc1ZldGVyYW5Pd25lZD4K ICAgICAgICAgICAgICA8bnMxOmlzU2VydmljZVJlbGF0ZWREaXNhYmxlZFZldGVy YW5Pd25lZEJ1c2luZXNzPmZhbHNlPC9uczE6aXNTZXJ2aWNlUmVsYXRlZERpc2Fi bGVkVmV0ZXJhbk93bmVkQnVzaW5lc3M+CiAgICAgICAgICAgICAgPG5zMTppc1dv bWVuT3duZWQ+dHJ1ZTwvbnMxOmlzV29tZW5Pd25lZD4KICAgICAgICAgICAgICA8 bnMxOm1pbm9yaXR5T3duZWQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzTWlub3Jp dHlPd25lZD50cnVlPC9uczE6aXNNaW5vcml0eU93bmVkPgogICAgICAgICAgICAg ICAgPG5zMTppc1N1YkNvbnRpbmVudEFzaWFuQW1lcmljYW5Pd25lZEJ1c2luZXNz PmZhbHNlPC9uczE6aXNTdWJDb250aW5lbnRBc2lhbkFtZXJpY2FuT3duZWRCdXNp bmVzcz4KICAgICAgICAgICAgICAgIDxuczE6aXNBc2lhblBhY2lmaWNBbWVyaWNh bk93bmVkQnVzaW5lc3M+dHJ1ZTwvbnMxOmlzQXNpYW5QYWNpZmljQW1lcmljYW5P d25lZEJ1c2luZXNzPgogICAgICAgICAgICAgICAgPG5zMTppc0JsYWNrQW1lcmlj YW5Pd25lZEJ1c2luZXNzPmZhbHNlPC9uczE6aXNCbGFja0FtZXJpY2FuT3duZWRC dXNpbmVzcz4KICAgICAgICAgICAgICAgIDxuczE6aXNIaXNwYW5pY0FtZXJpY2Fu T3duZWRCdXNpbmVzcz5mYWxzZTwvbnMxOmlzSGlzcGFuaWNBbWVyaWNhbk93bmVk QnVzaW5lc3M+CiAgICAgICAgICAgICAgICA8bnMxOmlzTmF0aXZlQW1lcmljYW5P d25lZEJ1c2luZXNzPmZhbHNlPC9uczE6aXNOYXRpdmVBbWVyaWNhbk93bmVkQnVz aW5lc3M+CiAgICAgICAgICAgICAgICA8bnMxOmlzT3RoZXJNaW5vcml0eU93bmVk PmZhbHNlPC9uczE6aXNPdGhlck1pbm9yaXR5T3duZWQ+PC9uczE6bWlub3JpdHlP d25lZD4KICAgICAgICAgICAgICA8bnMxOmlzVmVyeVNtYWxsQnVzaW5lc3M+ZmFs c2U8L25zMTppc1ZlcnlTbWFsbEJ1c2luZXNzPgogICAgICAgICAgICAgIDxuczE6 aXNXb21lbk93bmVkU21hbGxCdXNpbmVzcz5mYWxzZTwvbnMxOmlzV29tZW5Pd25l ZFNtYWxsQnVzaW5lc3M+CiAgICAgICAgICAgICAgPG5zMTppc0Vjb25vbWljYWxs eURpc2FkdmFudGFnZWRXb21lbk93bmVkU21hbGxCdXNpbmVzcz5mYWxzZTwvbnMx OmlzRWNvbm9taWNhbGx5RGlzYWR2YW50YWdlZFdvbWVuT3duZWRTbWFsbEJ1c2lu ZXNzPgogICAgICAgICAgICAgIDxuczE6aXNKb2ludFZlbnR1cmVXb21lbk93bmVk U21hbGxCdXNpbmVzcz5mYWxzZTwvbnMxOmlzSm9pbnRWZW50dXJlV29tZW5Pd25l ZFNtYWxsQnVzaW5lc3M+CiAgICAgICAgICAgICAgPG5zMTppc0pvaW50VmVudHVy ZUVjb25vbWljYWxseURpc2FkdmFudGFnZWRXb21lbk93bmVkU21hbGxCdXNpbmVz cz5mYWxzZTwvbnMxOmlzSm9pbnRWZW50dXJlRWNvbm9taWNhbGx5RGlzYWR2YW50 YWdlZFdvbWVuT3duZWRTbWFsbEJ1c2luZXNzPjwvbnMxOnZlbmRvclNvY2lvRWNv bm9taWNJbmRpY2F0b3JzPgogICAgICAgICAgICA8bnMxOnZlbmRvckJ1c2luZXNz VHlwZXM+CiAgICAgICAgICAgICAgPG5zMTppc0NvbW11bml0eURldmVsb3BlZENv cnBvcmF0aW9uT3duZWRGaXJtPmZhbHNlPC9uczE6aXNDb21tdW5pdHlEZXZlbG9w ZWRDb3Jwb3JhdGlvbk93bmVkRmlybT4KICAgICAgICAgICAgICA8bnMxOmlzTGFi b3JTdXJwbHVzQXJlYUZpcm0+ZmFsc2U8L25zMTppc0xhYm9yU3VycGx1c0FyZWFG aXJtPgogICAgICAgICAgICAgIDxuczE6ZmVkZXJhbEdvdmVybm1lbnQ+CiAgICAg ICAgICAgICAgICA8bnMxOmlzRmVkZXJhbEdvdmVybm1lbnQ+ZmFsc2U8L25zMTpp c0ZlZGVyYWxHb3Zlcm5tZW50PgogICAgICAgICAgICAgICAgPG5zMTppc0ZlZGVy YWxseUZ1bmRlZFJlc2VhcmNoQW5kRGV2ZWxvcG1lbnRDb3JwPmZhbHNlPC9uczE6 aXNGZWRlcmFsbHlGdW5kZWRSZXNlYXJjaEFuZERldmVsb3BtZW50Q29ycD4KICAg ICAgICAgICAgICAgIDxuczE6aXNGZWRlcmFsR292ZXJubWVudEFnZW5jeT5mYWxz ZTwvbnMxOmlzRmVkZXJhbEdvdmVybm1lbnRBZ2VuY3k+PC9uczE6ZmVkZXJhbEdv dmVybm1lbnQ+CiAgICAgICAgICAgICAgPG5zMTppc1N0YXRlR292ZXJubWVudD5m YWxzZTwvbnMxOmlzU3RhdGVHb3Zlcm5tZW50PgogICAgICAgICAgICAgIDxuczE6 bG9jYWxHb3Zlcm5tZW50PgogICAgICAgICAgICAgICAgPG5zMTppc0xvY2FsR292 ZXJubWVudD5mYWxzZTwvbnMxOmlzTG9jYWxHb3Zlcm5tZW50PgogICAgICAgICAg ICAgICAgPG5zMTppc0NpdHlMb2NhbEdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc0Np dHlMb2NhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzQ291bnR5 TG9jYWxHb3Zlcm5tZW50PmZhbHNlPC9uczE6aXNDb3VudHlMb2NhbEdvdmVybm1l bnQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzSW50ZXJNdW5pY2lwYWxMb2NhbEdv dmVybm1lbnQ+ZmFsc2U8L25zMTppc0ludGVyTXVuaWNpcGFsTG9jYWxHb3Zlcm5t ZW50PgogICAgICAgICAgICAgICAgPG5zMTppc0xvY2FsR292ZXJubWVudE93bmVk PmZhbHNlPC9uczE6aXNMb2NhbEdvdmVybm1lbnRPd25lZD4KICAgICAgICAgICAg ICAgIDxuczE6aXNNdW5pY2lwYWxpdHlMb2NhbEdvdmVybm1lbnQ+ZmFsc2U8L25z MTppc011bmljaXBhbGl0eUxvY2FsR292ZXJubWVudD4KICAgICAgICAgICAgICAg IDxuczE6aXNTY2hvb2xEaXN0cmljdExvY2FsR292ZXJubWVudD5mYWxzZTwvbnMx OmlzU2Nob29sRGlzdHJpY3RMb2NhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAg ICA8bnMxOmlzVG93bnNoaXBMb2NhbEdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc1Rv d25zaGlwTG9jYWxHb3Zlcm5tZW50PjwvbnMxOmxvY2FsR292ZXJubWVudD4KICAg ICAgICAgICAgICA8bnMxOmlzVHJpYmFsR292ZXJubWVudD5mYWxzZTwvbnMxOmlz VHJpYmFsR292ZXJubWVudD4KICAgICAgICAgICAgICA8bnMxOmlzRm9yZWlnbkdv dmVybm1lbnQ+ZmFsc2U8L25zMTppc0ZvcmVpZ25Hb3Zlcm5tZW50PgogICAgICAg ICAgICAgIDxuczE6YnVzaW5lc3NPck9yZ2FuaXphdGlvblR5cGU+CiAgICAgICAg ICAgICAgICA8bnMxOmlzQ29ycG9yYXRlRW50aXR5Tm90VGF4RXhlbXB0PnRydWU8 L25zMTppc0NvcnBvcmF0ZUVudGl0eU5vdFRheEV4ZW1wdD4KICAgICAgICAgICAg ICAgIDxuczE6aXNDb3Jwb3JhdGVFbnRpdHlUYXhFeGVtcHQ+ZmFsc2U8L25zMTpp c0NvcnBvcmF0ZUVudGl0eVRheEV4ZW1wdD4KICAgICAgICAgICAgICAgIDxuczE6 aXNQYXJ0bmVyc2hpcE9yTGltaXRlZExpYWJpbGl0eVBhcnRuZXJzaGlwPmZhbHNl PC9uczE6aXNQYXJ0bmVyc2hpcE9yTGltaXRlZExpYWJpbGl0eVBhcnRuZXJzaGlw PgogICAgICAgICAgICAgICAgPG5zMTppc1NvbGVQcm9wcmVpdG9yc2hpcD5mYWxz ZTwvbnMxOmlzU29sZVByb3ByZWl0b3JzaGlwPgogICAgICAgICAgICAgICAgPG5z MTppc1NtYWxsQWdyaWN1bHR1cmFsQ29vcGVyYXRpdmU+ZmFsc2U8L25zMTppc1Nt YWxsQWdyaWN1bHR1cmFsQ29vcGVyYXRpdmU+CiAgICAgICAgICAgICAgICA8bnMx OmlzSW50ZXJuYXRpb25hbE9yZ2FuaXphdGlvbj5mYWxzZTwvbnMxOmlzSW50ZXJu YXRpb25hbE9yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxuczE6aXNVU0dv dmVybm1lbnRFbnRpdHk+ZmFsc2U8L25zMTppc1VTR292ZXJubWVudEVudGl0eT48 L25zMTpidXNpbmVzc09yT3JnYW5pemF0aW9uVHlwZT48L25zMTp2ZW5kb3JCdXNp bmVzc1R5cGVzPgogICAgICAgICAgICA8bnMxOnZlbmRvckxpbmVPZkJ1c2luZXNz PgogICAgICAgICAgICAgIDxuczE6aXNDb21tdW5pdHlEZXZlbG9wbWVudENvcnBv cmF0aW9uPmZhbHNlPC9uczE6aXNDb21tdW5pdHlEZXZlbG9wbWVudENvcnBvcmF0 aW9uPgogICAgICAgICAgICAgIDxuczE6aXNEb21lc3RpY1NoZWx0ZXI+ZmFsc2U8 L25zMTppc0RvbWVzdGljU2hlbHRlcj4KICAgICAgICAgICAgICA8bnMxOmlzRWR1 Y2F0aW9uYWxJbnN0aXR1dGlvbj5mYWxzZTwvbnMxOmlzRWR1Y2F0aW9uYWxJbnN0 aXR1dGlvbj4KICAgICAgICAgICAgICA8bnMxOmlzRm91bmRhdGlvbj5mYWxzZTwv bnMxOmlzRm91bmRhdGlvbj4KICAgICAgICAgICAgICA8bnMxOmlzSG9zcGl0YWw+ ZmFsc2U8L25zMTppc0hvc3BpdGFsPgogICAgICAgICAgICAgIDxuczE6aXNNYW51 ZmFjdHVyZXJPZkdvb2RzPmZhbHNlPC9uczE6aXNNYW51ZmFjdHVyZXJPZkdvb2Rz PgogICAgICAgICAgICAgIDxuczE6aXNWZXRlcmluYXJ5SG9zcGl0YWw+ZmFsc2U8 L25zMTppc1ZldGVyaW5hcnlIb3NwaXRhbD4KICAgICAgICAgICAgICA8bnMxOmlzSGlz cGFuaWNTZXJ2aWNpbmdJbnN0aXR1dGlvbj5mYWxzZTwvbnMxOmlzSGlzcGFuaWNT ZXJ2aWNpbmdJbnN0aXR1dGlvbj48L25zMTp2ZW5kb3JMaW5lT2ZCdXNpbmVzcz4K ICAgICAgICAgICAgPG5zMTp2ZW5kb3JSZWxhdGlvbnNoaXBXaXRoRmVkZXJhbEdv dmVybm1lbnQ+CiAgICAgICAgICAgICAgPG5zMTpyZWNlaXZlc0NvbnRyYWN0cz5m YWxzZTwvbnMxOnJlY2VpdmVzQ29udHJhY3RzPgogICAgICAgICAgICAgIDxuczE6 cmVjZWl2ZXNHcmFudHM+ZmFsc2U8L25zMTpyZWNlaXZlc0dyYW50cz4KICAgICAg ICAgICAgICA8bnMxOnJlY2VpdmVzQ29udHJhY3RzQW5kR3JhbnRzPnRydWU8L25z MTpyZWNlaXZlc0NvbnRyYWN0c0FuZEdyYW50cz48L25zMTp2ZW5kb3JSZWxhdGlv bnNoaXBXaXRoRmVkZXJhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgIDxuczE6dHlw ZU9mR292ZXJubWVudEVudGl0eT4KICAgICAgICAgICAgICA8bnMxOmlzQWlycG9y dEF1dGhvcml0eT5mYWxzZTwvbnMxOmlzQWlycG9ydEF1dGhvcml0eT4KICAgICAg ICAgICAgICA8bnMxOmlzQ291bmNpbE9mR292ZXJubWVudHM+ZmFsc2U8L25zMTpp c0NvdW5jaWxPZkdvdmVybm1lbnRzPgogICAgICAgICAgICAgIDxuczE6aXNIb3Vz aW5nQXV0aG9yaXRpZXNQdWJsaWNPclRyaWJhbD5mYWxzZTwvbnMxOmlzSG91c2lu Z0F1dGhvcml0aWVzUHVibGljT3JUcmliYWw+CiAgICAgICAgICAgICAgPG5zMTpp c0ludGVyc3RhdGVFbnRpdHk+ZmFsc2U8L25zMTppc0ludGVyc3RhdGVFbnRpdHk+ CiAgICAgICAgICAgICAgPG5zMTppc1BsYW5uaW5nQ29tbWlzc2lvbj5mYWxzZTwv bnMxOmlzUGxhbm5pbmdDb21taXNzaW9uPgogICAgICAgICAgICAgIDxuczE6aXNQ b3J0QXV0aG9yaXR5PmZhbHNlPC9uczE6aXNQb3J0QXV0aG9yaXR5PgogICAgICAg ICAgICAgIDxuczE6aXNUcmFuc2l0QXV0aG9yaXR5PmZhbHNlPC9uczE6aXNUcmFu c2l0QXV0aG9yaXR5PjwvbnMxOnR5cGVPZkdvdmVybm1lbnRFbnRpdHk+CiAgICAg ICAgICAgIDxuczE6dmVuZG9yT3JnYW5pemF0aW9uRmFjdG9ycz4KICAgICAgICAg ICAgICA8bnMxOmlzU3ViY2hhcHRlclNDb3Jwb3JhdGlvbj5mYWxzZTwvbnMxOmlz U3ViY2hhcHRlclNDb3Jwb3JhdGlvbj4KICAgICAgICAgICAgICA8bnMxOmlzTGlt aXRlZExpYWJpbGl0eUNvcnBvcmF0aW9uPmZhbHNlPC9uczE6aXNMaW1pdGVkTGlh YmlsaXR5Q29ycG9yYXRpb24+CiAgICAgICAgICAgICAgPG5zMTppc0ZvcmVpZ25P d25lZEFuZExvY2F0ZWQ+ZmFsc2U8L25zMTppc0ZvcmVpZ25Pd25lZEFuZExvY2F0 ZWQ+CiAgICAgICAgICAgICAgPG5zMTpwcm9maXRTdHJ1Y3R1cmU+CiAgICAgICAg ICAgICAgICA8bnMxOmlzRm9yUHJvZml0T3JnYW5pemF0aW9uPnRydWU8L25zMTpp c0ZvclByb2ZpdE9yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxuczE6aXNO b25wcm9maXRPcmdhbml6YXRpb24+ZmFsc2U8L25zMTppc05vbnByb2ZpdE9yZ2Fu aXphdGlvbj4KICAgICAgICAgICAgICAgIDxuczE6aXNPdGhlck5vdEZvclByb2Zp dE9yZ2FuaXphdGlvbj5mYWxzZTwvbnMxOmlzT3RoZXJOb3RGb3JQcm9maXRPcmdh bml6YXRpb24+PC9uczE6cHJvZml0U3RydWN0dXJlPgogICAgICAgICAgICAgIDxu czE6aXNTaGVsdGVyZWRXb3Jrc2hvcD5mYWxzZTwvbnMxOmlzU2hlbHRlcmVkV29y a3Nob3A+CiAgICAgICAgICAgICAgPG5zMTpzdGF0ZU9mSW5jb3Jwb3JhdGlvbiBu YW1lPSJORVcgSkVSU0VZIj5OSjwvbnMxOnN0YXRlT2ZJbmNvcnBvcmF0aW9uPgog ICAgICAgICAgICAgIDxuczE6Y291bnRyeU9mSW5jb3Jwb3JhdGlvbiBuYW1lPSJV TklURUQgU1RBVEVTIj5VU0E8L25zMTpjb3VudHJ5T2ZJbmNvcnBvcmF0aW9uPgog ICAgICAgICAgICAgIDxuczE6b3JnYW5pemF0aW9uYWxUeXBlPkNPUlBPUkFURSBO T1QgVEFYIEVYRU1QVDwvbnMxOm9yZ2FuaXphdGlvbmFsVHlwZT4KICAgICAgICAg ICAgICA8bnMxOm51bWJlck9mRW1wbG95ZWVzPjIwMDA8L25zMTpudW1iZXJPZkVt cGxveWVlcz4KICAgICAgICAgICAgICA8bnMxOmFubnVhbFJldmVudWU+NjUwMDAw MDAwMDwvbnMxOmFubnVhbFJldmVudWU+PC9uczE6dmVuZG9yT3JnYW5pemF0aW9u RmFjdG9ycz4KICAgICAgICAgICAgPG5zMTp0eXBlT2ZFZHVjYXRpb25hbEVudGl0 eT4KICAgICAgICAgICAgICA8bnMxOmlzMTg2MkxhbmRHcmFudENvbGxlZ2U+ZmFs c2U8L25zMTppczE4NjJMYW5kR3JhbnRDb2xsZWdlPgogICAgICAgICAgICAgIDxu czE6aXMxODkwTGFuZEdyYW50Q29sbGVnZT5mYWxzZTwvbnMxOmlzMTg5MExhbmRH cmFudENvbGxlZ2U+CiAgICAgICAgICAgICAgPG5zMTppczE5OTRMYW5kR3JhbnRD b2xsZWdlPmZhbHNlPC9uczE6aXMxOTk0TGFuZEdyYW50Q29sbGVnZT4KICAgICAg ICAgICAgICA8bnMxOmlzSGlzdG9yaWNhbGx5QmxhY2tDb2xsZWdlT3JVbml2ZXJz aXR5PmZhbHNlPC9uczE6aXNIaXN0b3JpY2FsbHlCbGFja0NvbGxlZ2VPclVuaXZl cnNpdHk+CiAgICAgICAgICAgICAgPG5zMTppc01pbm9yaXR5SW5zdGl0dXRpb24+ ZmFsc2U8L25zMTppc01pbm9yaXR5SW5zdGl0dXRpb24+CiAgICAgICAgICAgICAg PG5zMTppc1ByaXZhdGVVbml2ZXJzaXR5T3JDb2xsZWdlPmZhbHNlPC9uczE6aXNQ cml2YXRlVW5pdmVyc2l0eU9yQ29sbGVnZT4KICAgICAgICAgICAgICA8bnMxOmlz U2Nob29sT2ZGb3Jlc3RyeT5mYWxzZTwvbnMxOmlzU2Nob29sT2ZGb3Jlc3RyeT4K ICAgICAgICAgICAgICA8bnMxOmlzU3RhdGVDb250cm9sbGVkSW5zdGl0dXRpb25v ZkhpZ2hlckxlYXJuaW5nPmZhbHNlPC9uczE6aXNTdGF0ZUNvbnRyb2xsZWRJbnN0 aXR1dGlvbm9mSGlnaGVyTGVhcm5pbmc+CiAgICAgICAgICAgICAgPG5zMTppc1Ry aWJhbENvbGxlZ2U+ZmFsc2U8L25zMTppc1RyaWJhbENvbGxlZ2U+CiAgICAgICAg ICAgICAgPG5zMTppc1ZldGVyaW5hcnlDb2xsZWdlPmZhbHNlPC9uczE6aXNWZXRl cmluYXJ5Q29sbGVnZT4KICAgICAgICAgICAgICA8bnMxOmlzQWxhc2thbk5hdGl2 ZVNlcnZpY2luZ0luc3RpdHV0aW9uPmZhbHNlPC9uczE6aXNBbGFza2FuTmF0aXZl U2VydmljaW5nSW5zdGl0dXRpb24+CiAgICAgICAgICAgICAgPG5zMTppc05hdGl2 ZUhhd2FpaWFuU2VydmljaW5nSW5zdGl0dXRpb24+ZmFsc2U8L25zMTppc05hdGl2 ZUhhd2FpaWFuU2VydmljaW5nSW5zdGl0dXRpb24+PC9uczE6dHlwZU9mRWR1Y2F0 aW9uYWxFbnRpdHk+CiAgICAgICAgICAgIDxuczE6dmVuZG9yQ2VydGlmaWNhdGlv bnM+CiAgICAgICAgICAgICAgPG5zMTppc0RPVENlcnRpZmllZERpc2FkdmFudGFn ZWRCdXNpbmVzc0VudGVycHJpc2U+ZmFsc2U8L25zMTppc0RPVENlcnRpZmllZERp c2FkdmFudGFnZWRCdXNpbmVzc0VudGVycHJpc2U+CiAgICAgICAgICAgICAgPG5z MTppc1NlbGZDZXJ0aWZpZWRTbWFsbERpc2FkdmFudGFnZWRCdXNpbmVzcz5mYWxz ZTwvbnMxOmlzU2VsZkNlcnRpZmllZFNtYWxsRGlzYWR2YW50YWdlZEJ1c2luZXNz PgogICAgICAgICAgICAgIDxuczE6aXNTQkFDZXJ0aWZpZWRTbWFsbERpc2FkdmFu dGFnZWRCdXNpbmVzcz5mYWxzZTwvbnMxOmlzU0JBQ2VydGlmaWVkU21hbGxEaXNh ZHZhbnRhZ2VkQnVzaW5lc3M+CiAgICAgICAgICAgICAgPG5zMTppc1NCQUNlcnRp ZmllZDhBUHJvZ3JhbVBhcnRpY2lwYW50PmZhbHNlPC9uczE6aXNTQkFDZXJ0aWZp ZWQ4QVByb2dyYW1QYXJ0aWNpcGFudD4KICAgICAgICAgICAgICA8bnMxOmlzU2Vs ZkNlcnRpZmllZEhVQlpvbmVKb2ludFZlbnR1cmU+ZmFsc2U8L25zMTppc1NlbGZD ZXJ0aWZpZWRIVUJab25lSm9pbnRWZW50dXJlPgogICAgICAgICAgICAgIDxuczE6 aXNTQkFDZXJ0aWZpZWRIVUJab25lPmZhbHNlPC9uczE6aXNTQkFDZXJ0aWZpZWRI VUJab25lPgogICAgICAgICAgICAgIDxuczE6aXNTQkFDZXJ0aWZpZWQ4QUpvaW50 VmVudHVyZT5mYWxzZTwvbnMxOmlzU0JBQ2VydGlmaWVkOEFKb2ludFZlbnR1cmU+ PC9uczE6dmVuZG9yQ2VydGlmaWNhdGlvbnM+CiAgICAgICAgICAgIDxuczE6dmVu ZG9yTG9jYXRpb24+CiAgICAgICAgICAgICAgPG5zMTpzdHJlZXRBZGRyZXNzPjI5 MCBEQVZJRFNPTiBBVkUgU1RFIDEwMTwvbnMxOnN0cmVldEFkZHJlc3M+CiAgICAg ICAgICAgICAgPG5zMTpjaXR5PlNPTUVSU0VUPC9uczE6Y2l0eT4KICAgICAgICAg ICAgICA8bnMxOnN0YXRlIG5hbWU9Ik5FVyBKRVJTRVkiPk5KPC9uczE6c3RhdGU+ CiAgICAgICAgICAgICAgPG5zMTpaSVBDb2RlPjA4ODczNDE3OTwvbnMxOlpJUENv ZGU+CiAgICAgICAgICAgICAgPG5zMTpjb3VudHJ5Q29kZSBuYW1lPSJVTklURUQg U1RBVEVTIj5VU0E8L25zMTpjb3VudHJ5Q29kZT4KICAgICAgICAgICAgICA8bnMx OnBob25lTm8+ODQ3NjAzMTEzMjwvbnMxOnBob25lTm8+CiAgICAgICAgICAgICAg PG5zMTpjb25ncmVzc2lvbmFsRGlzdHJpY3RDb2RlPjEyPC9uczE6Y29uZ3Jlc3Np b25hbERpc3RyaWN0Q29kZT48L25zMTp2ZW5kb3JMb2NhdGlvbj4KICAgICAgICAg ICAgPG5zMTp2ZW5kb3JTaXRlQ29kZT42MTE0Mjk0ODE8L25zMTp2ZW5kb3JTaXRl Q29kZT4KICAgICAgICAgICAgPG5zMTp2ZW5kb3JBbHRlcm5hdGVTaXRlQ29kZT4w ODg3MzwvbnMxOnZlbmRvckFsdGVybmF0ZVNpdGVDb2RlPgogICAgICAgICAgICA8 bnMxOnZlbmRvckRVTlNJbmZvcm1hdGlvbj4KICAgICAgICAgICAgICA8bnMxOkRV TlNOdW1iZXI+NjExNDI5NDgxPC9uczE6RFVOU051bWJlcj4KICAgICAgICAgICAg ICA8bnMxOnZlbmRvck5hbWU+U0hJIElOVEVSTkFUSU9OQUwgQ09SUC48L25zMTp2 ZW5kb3JOYW1lPgogICAgICAgICAgICAgIDxuczE6Z2xvYmFsUGFyZW50RFVOU051 bWJlcj42MTE0Mjk0ODE8L25zMTpnbG9iYWxQYXJlbnREVU5TTnVtYmVyPgogICAg ICAgICAgICAgIDxuczE6Z2xvYmFsUGFyZW50RFVOU05hbWU+U0hJIElOVEVSTkFU SU9OQUwgQ09SUC48L25zMTpnbG9iYWxQYXJlbnREVU5TTmFtZT48L25zMTp2ZW5k b3JEVU5TSW5mb3JtYXRpb24+CiAgICAgICAgICAgIDxuczE6Y2NyUmVnaXN0cmF0 aW9uRGV0YWlscz4KICAgICAgICAgICAgICA8bnMxOnJlZ2lzdHJhdGlvbkRhdGU+ MjAwMS0xMi0wNSAwMDowMDowMDwvbnMxOnJlZ2lzdHJhdGlvbkRhdGU+CiAgICAg ICAgICAgICAgPG5zMTpyZW5ld2FsRGF0ZT4yMDE2LTA1LTE5IDAwOjAwOjAwPC9u czE6cmVuZXdhbERhdGU+PC9uczE6Y2NyUmVnaXN0cmF0aW9uRGV0YWlscz48L25z MTp2ZW5kb3JTaXRlRGV0YWlscz4KICAgICAgICAgIDxuczE6Y29udHJhY3RpbmdP ZmZpY2VyQnVzaW5lc3NTaXplRGV0ZXJtaW5hdGlvbiBkZXNjcmlwdGlvbj0iT1RI RVIgVEhBTiBTTUFMTCBCVVNJTkVTUyI+TzwvbnMxOmNvbnRyYWN0aW5nT2ZmaWNl ckJ1c2luZXNzU2l6ZURldGVybWluYXRpb24+PC9uczE6dmVuZG9yPgogICAgICAg IDxuczE6cGxhY2VPZlBlcmZvcm1hbmNlPgogICAgICAgICAgPG5zMTpwcmluY2lw YWxQbGFjZU9mUGVyZm9ybWFuY2U+CiAgICAgICAgICAgIDxuczE6c3RhdGVDb2Rl IG5hbWU9IlZJUkdJTklBIj5WQTwvbnMxOnN0YXRlQ29kZT4KICAgICAgICAgICAg PG5zMTpjb3VudHJ5Q29kZSBuYW1lPSJVTklURUQgU1RBVEVTIj5VU0E8L25zMTpj b3VudHJ5Q29kZT48L25zMTpwcmluY2lwYWxQbGFjZU9mUGVyZm9ybWFuY2U+CiAg ICAgICAgICA8bnMxOnBsYWNlT2ZQZXJmb3JtYW5jZVpJUENvZGUgY291bnR5PSJB TEVYQU5EUklBIENJVFkiIGNpdHk9IkFMRVhBTkRSSUEiPjIyMzEzMTQ1MDwvbnMx OnBsYWNlT2ZQZXJmb3JtYW5jZVpJUENvZGU+CiAgICAgICAgICA8bnMxOnBsYWNl T2ZQZXJmb3JtYW5jZUNvbmdyZXNzaW9uYWxEaXN0cmljdD4wODwvbnMxOnBsYWNl T2ZQZXJmb3JtYW5jZUNvbmdyZXNzaW9uYWxEaXN0cmljdD48L25zMTpwbGFjZU9m UGVyZm9ybWFuY2U+CiAgICAgICAgPG5zMTpjb21wZXRpdGlvbj4KICAgICAgICAg IDxuczE6ZXh0ZW50Q29tcGV0ZWQgZGVzY3JpcHRpb249Ik5PVCBDT01QRVRFRCBV TkRFUiBTQVAiPkc8L25zMTpleHRlbnRDb21wZXRlZD4KICAgICAgICAgIDxuczE6 c29saWNpdGF0aW9uUHJvY2VkdXJlcyBkZXNjcmlwdGlvbj0iU0lNUExJRklFRCBB Q1FVSVNJVElPTiI+U1AxPC9uczE6c29saWNpdGF0aW9uUHJvY2VkdXJlcz4KICAg ICAgICAgIDxuczE6dHlwZU9mU2V0QXNpZGUgZGVzY3JpcHRpb249Ik5PIFNFVCBB U0lERSBVU0VELiI+Tk9ORTwvbnMxOnR5cGVPZlNldEFzaWRlPgogICAgICAgICAg PG5zMTpldmFsdWF0ZWRQcmVmZXJlbmNlIGRlc2NyaXB0aW9uPSJOTyBQUkVGRVJF TkNFIFVTRUQiPk5PTkU8L25zMTpldmFsdWF0ZWRQcmVmZXJlbmNlPgogICAgICAg ICAgPG5zMTpyZWFzb25Ob3RDb21wZXRlZCBkZXNjcmlwdGlvbj0iU0FQIE5PTi1D T01QRVRJVElPTiI+U1AyPC9uczE6cmVhc29uTm90Q29tcGV0ZWQ+CiAgICAgICAg ICA8bnMxOm51bWJlck9mT2ZmZXJzUmVjZWl2ZWQ+MTwvbnMxOm51bWJlck9mT2Zm ZXJzUmVjZWl2ZWQ+CiAgICAgICAgICA8bnMxOmNvbW1lcmNpYWxJdGVtQWNxdWlz aXRpb25Qcm9jZWR1cmVzIGRlc2NyaXB0aW9uPSJDT01NRVJDSUFMIElURU0gUFJP Q0VEVVJFUyBOT1QgVVNFRCI+RDwvbnMxOmNvbW1lcmNpYWxJdGVtQWNxdWlzaXRp b25Qcm9jZWR1cmVzPgogICAgICAgICAgPG5zMTpjb21tZXJjaWFsSXRlbVRlc3RQ cm9ncmFtIGRlc2NyaXB0aW9uPSJOTyI+TjwvbnMxOmNvbW1lcmNpYWxJdGVtVGVz dFByb2dyYW0+CiAgICAgICAgICA8bnMxOkE3NkFjdGlvbiBkZXNjcmlwdGlvbj0i Tk8iPk48L25zMTpBNzZBY3Rpb24+CiAgICAgICAgICA8bnMxOmZlZEJpek9wcHMg ZGVzY3JpcHRpb249Ik5PVCBBUFBMSUNBQkxFIj5YPC9uczE6ZmVkQml6T3Bwcz4K ICAgICAgICAgIDxuczE6bG9jYWxBcmVhU2V0QXNpZGUgZGVzY3JpcHRpb249Ik5P Ij5OPC9uczE6bG9jYWxBcmVhU2V0QXNpZGU+PC9uczE6Y29tcGV0aXRpb24+CiAg ICAgICAgPG5zMTpwcmVmZXJlbmNlUHJvZ3JhbXM+CiAgICAgICAgICA8bnMxOnN1 YmNvbnRyYWN0UGxhbiBkZXNjcmlwdGlvbj0iUExBTiBOT1QgUkVRVUlSRUQgIj5C PC9uczE6c3ViY29udHJhY3RQbGFuPjwvbnMxOnByZWZlcmVuY2VQcm9ncmFtcz4K ICAgICAgICA8bnMxOnRyYW5zYWN0aW9uSW5mb3JtYXRpb24+CiAgICAgICAgICA8 bnMxOmNyZWF0ZWRCeT5QVE9UQkY8L25zMTpjcmVhdGVkQnk+CiAgICAgICAgICA8 bnMxOmNyZWF0ZWREYXRlPjIwMTUtMDYtMTEgMTc6MDk6NTQ8L25zMTpjcmVhdGVk RGF0ZT4KICAgICAgICAgIDxuczE6bGFzdE1vZGlmaWVkQnk+UFRPVEJGPC9uczE6 bGFzdE1vZGlmaWVkQnk+CiAgICAgICAgICA8bnMxOmxhc3RNb2RpZmllZERhdGU+ MjAxNS0wNi0xMSAxNzo0MDozODwvbnMxOmxhc3RNb2RpZmllZERhdGU+CiAgICAg ICAgICA8bnMxOnN0YXR1cyBkZXNjcmlwdGlvbj0iRklOQUwiPkY8L25zMTpzdGF0 dXM+CiAgICAgICAgICA8bnMxOmFwcHJvdmVkQnk+UFRPVEJGPC9uczE6YXBwcm92 ZWRCeT4KICAgICAgICAgIDxuczE6YXBwcm92ZWREYXRlPjIwMTUtMDYtMTEgMTc6 NDA6Mzg8L25zMTphcHByb3ZlZERhdGU+PC9uczE6dHJhbnNhY3Rpb25JbmZvcm1h dGlvbj48L25zMTphd2FyZD4KICAgIDwvY29udGVudD4KICA8L2VudHJ5PgogIDxl bnRyeT4KICAgIDx0aXRsZT48IVtDREFUQVtOZXcgREVMSVZFUlkgT1JERVIgQUcz MlNCRDE1MDE0NyBhd2FyZGVkIHRvIEFQRVhURUNIIExMQyBmb3IgdGhlIGFtb3Vu dCBvZiAkMTk4LDAwMF1dPjwvdGl0bGU+CiAgICA8bGluayByZWw9ImFsdGVybmF0 ZSIgdHlwZT0idGV4dC9odG1sIiBocmVmPSJodHRwczovL3d3dy5mcGRzLmdvdi9l enNlYXJjaC9zZWFyY2guZG8/cz1GUERTJmFtcDtpbmRleE5hbWU9YXdhcmRmdWxs JmFtcDt0ZW1wbGF0ZU5hbWU9MS41LjEmYW1wO3E9QUczMlNCRDE1MDE0NysxMkgy KyI+PC9saW5rPgogICAgPG1vZGlmaWVkPjIwMTctMTAtMDQgMTQ6MjA6NDg8L21v ZGlmaWVkPgogICAgPGNvbnRlbnQgeG1sbnM6bnMxPSJodHRwczovL3d3dy5mcGRz Lmdvdi9GUERTIiB0eXBlPSJhcHBsaWNhdGlvbi94bWwiPgogICAgICA8bnMxOmF3 YXJkIHhtbG5zOm5zMT0iaHR0cDovL3d3dy5mcGRzbmcuY29tL0ZQRFMiIHZlcnNp b249IjEuNCI+CiAgICAgICAgPG5zMTphd2FyZElEPgogICAgICAgICAgPG5zMTph d2FyZENvbnRyYWN0SUQ+CiAgICAgICAgICAgIDxuczE6YWdlbmN5SUQgbmFtZT0i QUdSSUNVTFRVUkFMIFJFU0VBUkNIIFNFUlZJQ0UiPjEySDI8L25zMTphZ2VuY3lJ RD4KICAgICAgICAgICAgPG5zMTpQSUlEPkFHMzJTQkQxNTAxNDc8L25zMTpQSUlE PgogICAgICAgICAgICA8bnMxOm1vZE51bWJlcj4wPC9uczE6bW9kTnVtYmVyPgog ICAgICAgICAgICA8bnMxOnRyYW5zYWN0aW9uTnVtYmVyPjA8L25zMTp0cmFuc2Fj dGlvbk51bWJlcj48L25zMTphd2FyZENvbnRyYWN0SUQ+CiAgICAgICAgICA8bnMx OnJlZmVyZW5jZWRJRFZJRD4KICAgICAgICAgICAgPG5zMTphZ2VuY3lJRCBuYW1l PSJGRURFUkFMIEFDUVVJU0lUSU9OIFNFUlZJQ0UiPjQ3MzI8L25zMTphZ2VuY3lJ RD4KICAgICAgICAgICAgPG5zMTpQSUlEPkdTMDZGMDgyMVo8L25zMTpQSUlEPgog ICAgICAgICAgICA8bnMxOm1vZE51bWJlcj4wPC9uczE6bW9kTnVtYmVyPjwvbnMx OnJlZmVyZW5jZWRJRFZJRD48L25zMTphd2FyZElEPgogICAgICAgIDxuczE6cmVs ZXZhbnRDb250cmFjdERhdGVzPgogICAgICAgICAgPG5zMTpzaWduZWREYXRlPjIw MTUtMDYtMDMgMDA6MDA6MDA8L25zMTpzaWduZWREYXRlPgogICAgICAgICAgPG5z MTplZmZlY3RpdmVEYXRlPjIwMTUtMDYtMDMgMDA6MDA6MDA8L25zMTplZmZlY3Rp dmVEYXRlPgogICAgICAgICAgPG5zMTpjdXJyZW50Q29tcGxldGlvbkRhdGU+MjAx OS0wNy0wNSAwMDowMDowMDwvbnMxOmN1cnJlbnRDb21wbGV0aW9uRGF0ZT4KICAg ICAgICAgIDxuczE6dWx0aW1hdGVDb21wbGV0aW9uRGF0ZT4yMDE5LTA3LTA1IDAw OjAwOjAwPC9uczE6dWx0aW1hdGVDb21wbGV0aW9uRGF0ZT48L25zMTpyZWxldmFu dENvbnRyYWN0RGF0ZXM+CiAgICAgICAgPG5zMTpkb2xsYXJWYWx1ZXM+CiAgICAg ICAgICA8bnMxOm9ibGlnYXRlZEFtb3VudD4xOTgwMDAuMDA8L25zMTpvYmxpZ2F0 ZWRBbW91bnQ+CiAgICAgICAgICA8bnMxOmJhc2VBbmRFeGVyY2lzZWRPcHRpb25z VmFsdWU+MTk4MDAwLjAwPC9uczE6YmFzZUFuZEV4ZXJjaXNlZE9wdGlvbnNWYWx1 ZT4KICAgICAgICAgIDxuczE6YmFzZUFuZEFsbE9wdGlvbnNWYWx1ZT44MzM1ODAu MDA8L25zMTpiYXNlQW5kQWxsT3B0aW9uc1ZhbHVlPjwvbnMxOmRvbGxhclZhbHVl cz4KICAgICAgICA8bnMxOnRvdGFsRG9sbGFyVmFsdWVzPgogICAgICAgICAgPG5z MTp0b3RhbE9ibGlnYXRlZEFtb3VudD42MTQ3OTAuMDA8L25zMTp0b3RhbE9ibGln YXRlZEFtb3VudD4KICAgICAgICAgIDxuczE6dG90YWxCYXNlQW5kRXhlcmNpc2Vk T3B0aW9uc1ZhbHVlPjYxNDc5MC4wMDwvbnMxOnRvdGFsQmFzZUFuZEV4ZXJjaXNl ZE9wdGlvbnNWYWx1ZT4KICAgICAgICAgIDxuczE6dG90YWxCYXNlQW5kQWxsT3B0 aW9uc1ZhbHVlPjgzMzU4MC4wMDwvbnMxOnRvdGFsQmFzZUFuZEFsbE9wdGlvbnNW YWx1ZT48L25zMTp0b3RhbERvbGxhclZhbHVlcz4KICAgICAgICA8bnMxOnB1cmNo YXNlckluZm9ybWF0aW9uPgogICAgICAgICAgPG5zMTpjb250cmFjdGluZ09mZmlj ZUFnZW5jeUlEIG5hbWU9IkFHUklDVUxUVVJBTCBSRVNFQVJDSCBTRVJWSUNFIiBk ZXBhcnRtZW50SUQ9IjEyMDAiIGRlcGFydG1lbnROYW1lPSJBR1JJQ1VMVFVSRSwg REVQQVJUTUVOVCBPRiI+MTJIMjwvbnMxOmNvbnRyYWN0aW5nT2ZmaWNlQWdlbmN5 SUQ+CiAgICAgICAgICA8bnMxOmNvbnRyYWN0aW5nT2ZmaWNlSUQgbmFtZT0iVVNE QSBBUlMgTkNSQlNDIDMyU0IiIHJlZ2lvbkNvZGU9IjEzIiBjb3VudHJ5PSJVU0Ei PjMyU0I8L25zMTpjb250cmFjdGluZ09mZmljZUlEPgogICAgICAgICAgPG5zMTpm dW5kaW5nUmVxdWVzdGluZ0FnZW5jeUlEIG5hbWU9IkFHUklDVUxUVVJBTCBSRVNF QVJDSCBTRVJWSUNFIiBkZXBhcnRtZW50SUQ9IjEyMDAiIGRlcGFydG1lbnROYW1l PSJBR1JJQ1VMVFVSRSwgREVQQVJUTUVOVCBPRiI+MTJIMjwvbnMxOmZ1bmRpbmdS ZXF1ZXN0aW5nQWdlbmN5SUQ+CiAgICAgICAgICA8bnMxOmZ1bmRpbmdSZXF1ZXN0 aW5nT2ZmaWNlSUQgbmFtZT0iVVNEQSBBUlMgT0NJTyAzMVBFIj4zMVBFPC9uczE6 ZnVuZGluZ1JlcXVlc3RpbmdPZmZpY2VJRD4KICAgICAgICAgIDxuczE6Zm9yZWln bkZ1bmRpbmcgZGVzY3JpcHRpb249Ik5PVCBBUFBMSUNBQkxFIj5YPC9uczE6Zm9y ZWlnbkZ1bmRpbmc+PC9uczE6cHVyY2hhc2VySW5mb3JtYXRpb24+CiAgICAgICAg PG5zMTpjb250cmFjdE1hcmtldGluZ0RhdGE+CiAgICAgICAgICA8bnMxOmZlZVBh aWRGb3JVc2VPZlNlcnZpY2U+MC4wMDwvbnMxOmZlZVBhaWRGb3JVc2VPZlNlcnZp Y2U+PC9uczE6Y29udHJhY3RNYXJrZXRpbmdEYXRhPgogICAgICAgIDxuczE6Y29u dHJhY3REYXRhPgogICAgICAgICAgPG5zMTpjb250cmFjdEFjdGlvblR5cGUgZGVz Y3JpcHRpb249IkRFTElWRVJZIE9SREVSIj5DPC9uczE6Y29udHJhY3RBY3Rpb25U eXBlPgogICAgICAgICAgPG5zMTp0eXBlT2ZDb250cmFjdFByaWNpbmcgZGVzY3Jp cHRpb249IkZJUk0gRklYRUQgUFJJQ0UiPko8L25zMTp0eXBlT2ZDb250cmFjdFBy aWNpbmc+CiAgICAgICAgICA8bnMxOm5hdGlvbmFsSW50ZXJlc3RBY3Rpb25Db2Rl IGRlc2NyaXB0aW9uPSJOT05FIj5OT05FPC9uczE6bmF0aW9uYWxJbnRlcmVzdEFj dGlvbkNvZGU+CiAgICAgICAgICA8bnMxOmRlc2NyaXB0aW9uT2ZDb250cmFjdFJl cXVpcmVtZW50PlRIRSBQVVJQT1NFIE9GIFRISVMgREVMSVZFUlkgT1JERVIgSVMg VE8gUFVSQ0hBU0UgT1JBQ0xFIFBML1NRTCBQUk9HUkFNTUVSIChEQVRBQkFTRSBB TkFMWVNUL1BST0dSQU1NRVItU0VOSU9SKSBTRVJWSUNFUyBJTiBBQ0NPUkRBTkNF IFdJVEggQVRUQUNIRUQgU1RBVEVNRU5UIE9GIFdPUksgREFURUQgNi8xLzIwMTUu CgpUSElTIEFXQVJEIElTIEFOIE9QVElPTiBZRUFSIENPTlRSQUNULiBJVCBJTkNM VURFUyBBIEJBU0UgWUVBUiBQTFVTLCBUSFJFRSAoMykgT05FIFlFQVIgT1BUSU9O IFBFUklPRFMuIEJBU0UgWUVBUiBQRVJJT0QgT0YgUEVSRk9STUFOQ0UgSVMgNy82 LzIwMTUgVEhST1VHSCA3LzUvMjAxNi4gIAoKSUdGOjpDVDo6SUdGPC9uczE6ZGVz Y3JpcHRpb25PZkNvbnRyYWN0UmVxdWlyZW1lbnQ+CiAgICAgICAgICA8bnMxOmlu aGVyZW50bHlHb3Zlcm5tZW50YWxGdW5jdGlvbiBkZXNjcmlwdGlvbj0iQ1JJVElD QUwgRlVOQ1RJT05TIj5DVDwvbnMxOmluaGVyZW50bHlHb3Zlcm5tZW50YWxGdW5j dGlvbj4KICAgICAgICAgIDxuczE6R0ZFLUdGUCBkZXNjcmlwdGlvbj0iVHJhbnNh Y3Rpb24gZG9lcyBub3QgdXNlIEdGRS9HRlAiPk48L25zMTpHRkUtR0ZQPgogICAg ICAgICAgPG5zMTp1bmRlZmluaXRpemVkQWN0aW9uIGRlc2NyaXB0aW9uPSJOTyI+ WDwvbnMxOnVuZGVmaW5pdGl6ZWRBY3Rpb24+CiAgICAgICAgICA8bnMxOmNvbnNv bGlkYXRlZENvbnRyYWN0IGRlc2NyaXB0aW9uPSJOTyI+TjwvbnMxOmNvbnNvbGlk YXRlZENvbnRyYWN0PgogICAgICAgICAgPG5zMTpwZXJmb3JtYW5jZUJhc2VkU2Vy dmljZUNvbnRyYWN0IGRlc2NyaXB0aW9uPSJOTyAtIFNFUlZJQ0UgV0hFUkUgUEJB IElTIE5PVCBVU0VELiI+TjwvbnMxOnBlcmZvcm1hbmNlQmFzZWRTZXJ2aWNlQ29u dHJhY3Q+CiAgICAgICAgICA8bnMxOmNvbnRpbmdlbmN5SHVtYW5pdGFyaWFuUGVh Y2VrZWVwaW5nT3BlcmF0aW9uIGRlc2NyaXB0aW9uPSJOT1QgQVBQTElDQUJMRSI+ WDwvbnMxOmNvbnRpbmdlbmN5SHVtYW5pdGFyaWFuUGVhY2VrZWVwaW5nT3BlcmF0 aW9uPgogICAgICAgICAgPG5zMTpsaXN0T2ZUcmVhc3VyeUFjY291bnRzPgogICAg ICAgICAgICA8bnMxOnRyZWFzdXJ5QWNjb3VudD4KICAgICAgICAgICAgICA8bnMx OnRyZWFzdXJ5QWNjb3VudFN5bWJvbD4KICAgICAgICAgICAgICAgIDxuczE6YWdl bmN5SWRlbnRpZmllcj4xMjwvbnMxOmFnZW5jeUlkZW50aWZpZXI+CiAgICAgICAg ICAgICAgICA8bnMxOm1haW5BY2NvdW50Q29kZT4xNDAwPC9uczE6bWFpbkFjY291 bnRDb2RlPjwvbnMxOnRyZWFzdXJ5QWNjb3VudFN5bWJvbD48L25zMTp0cmVhc3Vy eUFjY291bnQ+PC9uczE6bGlzdE9mVHJlYXN1cnlBY2NvdW50cz4KICAgICAgICAg IDxuczE6cHVyY2hhc2VDYXJkQXNQYXltZW50TWV0aG9kIGRlc2NyaXB0aW9uPSJO TyI+TjwvbnMxOnB1cmNoYXNlQ2FyZEFzUGF5bWVudE1ldGhvZD4KICAgICAgICAg IDxuczE6bnVtYmVyT2ZBY3Rpb25zPjE8L25zMTpudW1iZXJPZkFjdGlvbnM+PC9u czE6Y29udHJhY3REYXRhPgogICAgICAgIDxuczE6bGVnaXNsYXRpdmVNYW5kYXRl cz4KICAgICAgICAgIDxuczE6Q2xpbmdlckNvaGVuQWN0IGRlc2NyaXB0aW9uPSJZ RVMiPlk8L25zMTpDbGluZ2VyQ29oZW5BY3Q+CiAgICAgICAgICA8bnMxOm1hdGVy aWFsc1N1cHBsaWVzQXJ0aWNsZXNFcXVpcG1lbnQgZGVzY3JpcHRpb249Ik5PVCBB UFBMSUNBQkxFIj5YPC9uczE6bWF0ZXJpYWxzU3VwcGxpZXNBcnRpY2xlc0VxdWlw bWVudD4KICAgICAgICAgIDxuczE6bGFib3JTdGFuZGFyZHMgZGVzY3JpcHRpb249 Ik5PIj5OPC9uczE6bGFib3JTdGFuZGFyZHM+CiAgICAgICAgICA8bnMxOmNvbnN0 cnVjdGlvbldhZ2VSYXRlUmVxdWlyZW1lbnRzIGRlc2NyaXB0aW9uPSJOT1QgQVBQ TElDQUJMRSI+WDwvbnMxOmNvbnN0cnVjdGlvbldhZ2VSYXRlUmVxdWlyZW1lbnRz PgogICAgICAgICAgPG5zMTpsaXN0T2ZBZGRpdGlvbmFsUmVwb3J0aW5nVmFsdWVz PjwvbnMxOmxpc3RPZkFkZGl0aW9uYWxSZXBvcnRpbmdWYWx1ZXM+CiAgICAgICAg ICA8bnMxOmludGVyYWdlbmN5Q29udHJhY3RpbmdBdXRob3JpdHkgZGVzY3JpcHRp b249Ik5PVCBBUFBMSUNBQkxFIj5YPC9uczE6aW50ZXJhZ2VuY3lDb250cmFjdGlu Z0F1dGhvcml0eT48L25zMTpsZWdpc2xhdGl2ZU1hbmRhdGVzPgogICAgICAgIDxu czE6cHJvZHVjdE9yU2VydmljZUluZm9ybWF0aW9uPgogICAgICAgICAgPG5zMTpw cm9kdWN0T3JTZXJ2aWNlQ29kZSBkZXNjcmlwdGlvbj0iSVQgQU5EIFRFTEVDT00t IFBST0dSQU1NSU5HIiBwcm9kdWN0T3JTZXJ2aWNlVHlwZT0iU0VSVklDRSI+RDMw ODwvbnMxOnByb2R1Y3RPclNlcnZpY2VDb2RlPgogICAgICAgICAgPG5zMTpjb250 cmFjdEJ1bmRsaW5nIGRlc2NyaXB0aW9uPSJOT1QgQSBCVU5ETEVEIFJFUVVJUkVN RU5UIj5EPC9uczE6Y29udHJhY3RCdW5kbGluZz4KICAgICAgICAgIDxuczE6cHJp bmNpcGFsTkFJQ1NDb2RlIGRlc2NyaXB0aW9uPSJDT01QVVRFUiBTWVNURU1TIERF U0lHTiBTRVJWSUNFUyI+NTQxNTEyPC9uczE6cHJpbmNpcGFsTkFJQ1NDb2RlPgog ICAgICAgICAgPG5zMTpyZWNvdmVyZWRNYXRlcmlhbENsYXVzZXMgZGVzY3JpcHRp b249Ik5PIENMQVVTRVMgSU5DTFVERUQgQU5EIE5PIFNVU1RBSU5BQklMSVRZIElO Q0xVREVEIj5DPC9uczE6cmVjb3ZlcmVkTWF0ZXJpYWxDbGF1c2VzPgogICAgICAg ICAgPG5zMTptYW51ZmFjdHVyaW5nT3JnYW5pemF0aW9uVHlwZSBkZXNjcmlwdGlv bj0iVS5TLiBPV05FRCBCVVNJTkVTUyI+QTwvbnMxOm1hbnVmYWN0dXJpbmdPcmdh bml6YXRpb25UeXBlPgogICAgICAgICAgPG5zMTp1c2VPZkVQQURlc2lnbmF0ZWRQ cm9kdWN0cyBkZXNjcmlwdGlvbj0iTk9UIFJFUVVJUkVEIj5FPC9uczE6dXNlT2ZF UEFEZXNpZ25hdGVkUHJvZHVjdHM+CiAgICAgICAgICA8bnMxOmNvdW50cnlPZk9y aWdpbiBuYW1lPSJVTklURUQgU1RBVEVTIj5VU0E8L25zMTpjb3VudHJ5T2ZPcmln aW4+CiAgICAgICAgICA8bnMxOnBsYWNlT2ZNYW51ZmFjdHVyZSBkZXNjcmlwdGlv bj0iTk9UIEEgTUFOVUZBQ1RVUkVEIEVORCBQUk9EVUNUIj5DPC9uczE6cGxhY2VP Zk1hbnVmYWN0dXJlPjwvbnMxOnByb2R1Y3RPclNlcnZpY2VJbmZvcm1hdGlvbj4K ICAgICAgICA8bnMxOnZlbmRvcj4KICAgICAgICAgIDxuczE6dmVuZG9ySGVhZGVy PgogICAgICAgICAgICA8bnMxOnZlbmRvck5hbWU+QVBFWFRFQ0ggTExDPC9uczE6 dmVuZG9yTmFtZT48L25zMTp2ZW5kb3JIZWFkZXI+CiAgICAgICAgICA8bnMxOnZl bmRvclNpdGVEZXRhaWxzPgogICAgICAgICAgICA8bnMxOnZlbmRvclNvY2lvRWNv bm9taWNJbmRpY2F0b3JzPgogICAgICAgICAgICAgIDxuczE6aXNBbGFza2FuTmF0 aXZlT3duZWRDb3Jwb3JhdGlvbk9yRmlybT5mYWxzZTwvbnMxOmlzQWxhc2thbk5h dGl2ZU93bmVkQ29ycG9yYXRpb25PckZpcm0+CiAgICAgICAgICAgICAgPG5zMTpp c0FtZXJpY2FuSW5kaWFuT3duZWQ+ZmFsc2U8L25zMTppc0FtZXJpY2FuSW5kaWFu T3duZWQ+CiAgICAgICAgICAgICAgPG5zMTppc0luZGlhblRyaWJlPmZhbHNlPC9u czE6aXNJbmRpYW5UcmliZT4KICAgICAgICAgICAgICA8bnMxOmlzTmF0aXZlSGF3 YWlpYW5Pd25lZE9yZ2FuaXphdGlvbk9yRmlybT5mYWxzZTwvbnMxOmlzTmF0aXZl SGF3YWlpYW5Pd25lZE9yZ2FuaXphdGlvbk9yRmlybT4KICAgICAgICAgICAgICA8 bnMxOmlzVHJpYmFsbHlPd25lZEZpcm0+ZmFsc2U8L25zMTppc1RyaWJhbGx5T3du ZWRGaXJtPgogICAgICAgICAgICAgIDxuczE6aXNWZXRlcmFuT3duZWQ+ZmFsc2U8 L25zMTppc1ZldGVyYW5Pd25lZD4KICAgICAgICAgICAgICA8bnMxOmlzU2Vydmlj ZVJlbGF0ZWREaXNhYmxlZFZldGVyYW5Pd25lZEJ1c2luZXNzPmZhbHNlPC9uczE6 aXNTZXJ2aWNlUmVsYXRlZERpc2FibGVkVmV0ZXJhbk93bmVkQnVzaW5lc3M+CiAg ICAgICAgICAgICAgPG5zMTppc1dvbWVuT3duZWQ+ZmFsc2U8L25zMTppc1dvbWVu T3duZWQ+CiAgICAgICAgICAgICAgPG5zMTptaW5vcml0eU93bmVkPgogICAgICAg ICAgICAgICAgPG5zMTppc01pbm9yaXR5T3duZWQ+dHJ1ZTwvbnMxOmlzTWlub3Jp dHlPd25lZD4KICAgICAgICAgICAgICAgIDxuczE6aXNTdWJDb250aW5lbnRBc2lh bkFtZXJpY2FuT3duZWRCdXNpbmVzcz5mYWxzZTwvbnMxOmlzU3ViQ29udGluZW50 QXNpYW5BbWVyaWNhbk93bmVkQnVzaW5lc3M+CiAgICAgICAgICAgICAgICA8bnMx OmlzQXNpYW5QYWNpZmljQW1lcmljYW5Pd25lZEJ1c2luZXNzPmZhbHNlPC9uczE6 aXNBc2lhblBhY2lmaWNBbWVyaWNhbk93bmVkQnVzaW5lc3M+CiAgICAgICAgICAg ICAgICA8bnMxOmlzQmxhY2tBbWVyaWNhbk93bmVkQnVzaW5lc3M+ZmFsc2U8L25z MTppc0JsYWNrQW1lcmljYW5Pd25lZEJ1c2luZXNzPgogICAgICAgICAgICAgICAg PG5zMTppc0hpc3BhbmljQW1lcmljYW5Pd25lZEJ1c2luZXNzPnRydWU8L25zMTpp c0hpc3BhbmljQW1lcmljYW5Pd25lZEJ1c2luZXNzPgogICAgICAgICAgICAgICAg PG5zMTppc05hdGl2ZUFtZXJpY2FuT3duZWRCdXNpbmVzcz5mYWxzZTwvbnMxOmlz TmF0aXZlQW1lcmljYW5Pd25lZEJ1c2luZXNzPgogICAgICAgICAgICAgICAgPG5z MTppc090aGVyTWlub3JpdHlPd25lZD5mYWxzZTwvbnMxOmlzT3RoZXJNaW5vcml0 eU93bmVkPjwvbnMxOm1pbm9yaXR5T3duZWQ+CiAgICAgICAgICAgICAgPG5zMTpp c1ZlcnlTbWFsbEJ1c2luZXNzPmZhbHNlPC9uczE6aXNWZXJ5U21hbGxCdXNpbmVz cz4KICAgICAgICAgICAgICA8bnMxOmlzV29tZW5Pd25lZFNtYWxsQnVzaW5lc3M+ ZmFsc2U8L25zMTppc1dvbWVuT3duZWRTbWFsbEJ1c2luZXNzPgogICAgICAgICAg ICAgIDxuczE6aXNFY29ub21pY2FsbHlEaXNhZHZhbnRhZ2VkV29tZW5Pd25lZFNt YWxsQnVzaW5lc3M+ZmFsc2U8L25zMTppc0Vjb25vbWljYWxseURpc2FkdmFudGFn ZWRXb21lbk93bmVkU21hbGxCdXNpbmVzcz4KICAgICAgICAgICAgICA8bnMxOmlz Sm9pbnRWZW50dXJlV29tZW5Pd25lZFNtYWxsQnVzaW5lc3M+ZmFsc2U8L25zMTpp c0pvaW50VmVudHVyZVdvbWVuT3duZWRTbWFsbEJ1c2luZXNzPgogICAgICAgICAg ICAgIDxuczE6aXNKb2ludFZlbnR1cmVFY29ub21pY2FsbHlEaXNhZHZhbnRhZ2Vk V29tZW5Pd25lZFNtYWxsQnVzaW5lc3M+ZmFsc2U8L25zMTppc0pvaW50VmVudHVy ZUVjb25vbWljYWxseURpc2FkdmFudGFnZWRXb21lbk93bmVkU21hbGxCdXNpbmVz cz48L25zMTp2ZW5kb3JTb2Npb0Vjb25vbWljSW5kaWNhdG9ycz4KICAgICAgICAg ICAgPG5zMTp2ZW5kb3JCdXNpbmVzc1R5cGVzPgogICAgICAgICAgICAgIDxuczE6 aXNDb21tdW5pdHlEZXZlbG9wZWRDb3Jwb3JhdGlvbk93bmVkRmlybT5mYWxzZTwv bnMxOmlzQ29tbXVuaXR5RGV2ZWxvcGVkQ29ycG9yYXRpb25Pd25lZEZpcm0+CiAg ICAgICAgICAgICAgPG5zMTppc0xhYm9yU3VycGx1c0FyZWFGaXJtPmZhbHNlPC9u czE6aXNMYWJvclN1cnBsdXNBcmVhRmlybT4KICAgICAgICAgICAgICA8bnMxOmZl ZGVyYWxHb3Zlcm5tZW50PgogICAgICAgICAgICAgICAgPG5zMTppc0ZlZGVyYWxH b3Zlcm5tZW50PmZhbHNlPC9uczE6aXNGZWRlcmFsR292ZXJubWVudD4KICAgICAg ICAgICAgICAgIDxuczE6aXNGZWRlcmFsbHlGdW5kZWRSZXNlYXJjaEFuZERldmVs b3BtZW50Q29ycD5mYWxzZTwvbnMxOmlzRmVkZXJhbGx5RnVuZGVkUmVzZWFyY2hB bmREZXZlbG9wbWVudENvcnA+CiAgICAgICAgICAgICAgICA8bnMxOmlzRmVkZXJh bEdvdmVybm1lbnRBZ2VuY3k+ZmFsc2U8L25zMTppc0ZlZGVyYWxHb3Zlcm5tZW50 QWdlbmN5PjwvbnMxOmZlZGVyYWxHb3Zlcm5tZW50PgogICAgICAgICAgICAgIDxu czE6aXNTdGF0ZUdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc1N0YXRlR292ZXJubWVu dD4KICAgICAgICAgICAgICA8bnMxOmxvY2FsR292ZXJubWVudD4KICAgICAgICAg ICAgICAgIDxuczE6aXNMb2NhbEdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc0xvY2Fs R292ZXJubWVudD4KICAgICAgICAgICAgICAgIDxuczE6aXNDaXR5TG9jYWxHb3Zl cm5tZW50PmZhbHNlPC9uczE6aXNDaXR5TG9jYWxHb3Zlcm5tZW50PgogICAgICAg ICAgICAgICAgPG5zMTppc0NvdW50eUxvY2FsR292ZXJubWVudD5mYWxzZTwvbnMx OmlzQ291bnR5TG9jYWxHb3Zlcm5tZW50PgogICAgICAgICAgICAgICAgPG5zMTpp c0ludGVyTXVuaWNpcGFsTG9jYWxHb3Zlcm5tZW50PmZhbHNlPC9uczE6aXNJbnRl ck11bmljaXBhbExvY2FsR292ZXJubWVudD4KICAgICAgICAgICAgICAgIDxuczE6 aXNMb2NhbEdvdmVybm1lbnRPd25lZD5mYWxzZTwvbnMxOmlzTG9jYWxHb3Zlcm5t ZW50T3duZWQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzTXVuaWNpcGFsaXR5TG9j YWxHb3Zlcm5tZW50PmZhbHNlPC9uczE6aXNNdW5pY2lwYWxpdHlMb2NhbEdvdmVy bm1lbnQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzU2Nob29sRGlzdHJpY3RMb2Nh bEdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc1NjaG9vbERpc3RyaWN0TG9jYWxHb3Zl cm5tZW50PgogICAgICAgICAgICAgICAgPG5zMTppc1Rvd25zaGlwTG9jYWxHb3Zl cm5tZW50PmZhbHNlPC9uczE6aXNUb3duc2hpcExvY2FsR292ZXJubWVudD48L25z MTpsb2NhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgPG5zMTppc1RyaWJhbEdv dmVybm1lbnQ+ZmFsc2U8L25zMTppc1RyaWJhbEdvdmVybm1lbnQ+CiAgICAgICAg ICAgICAgPG5zMTppc0ZvcmVpZ25Hb3Zlcm5tZW50PmZhbHNlPC9uczE6aXNGb3Jl aWduR292ZXJubWVudD4KICAgICAgICAgICAgICA8bnMxOmJ1c2luZXNzT3JPcmdh bml6YXRpb25UeXBlPgogICAgICAgICAgICAgICAgPG5zMTppc0NvcnBvcmF0ZUVu dGl0eU5vdFRheEV4ZW1wdD5mYWxzZTwvbnMxOmlzQ29ycG9yYXRlRW50aXR5Tm90 VGF4RXhlbXB0PgogICAgICAgICAgICAgICAgPG5zMTppc0NvcnBvcmF0ZUVudGl0 eVRheEV4ZW1wdD5mYWxzZTwvbnMxOmlzQ29ycG9yYXRlRW50aXR5VGF4RXhlbXB0 PgogICAgICAgICAgICAgICAgPG5zMTppc1BhcnRuZXJzaGlwT3JMaW1pdGVkTGlh YmlsaXR5UGFydG5lcnNoaXA+ZmFsc2U8L25zMTppc1BhcnRuZXJzaGlwT3JMaW1p dGVkTGlhYmlsaXR5UGFydG5lcnNoaXA+CiAgICAgICAgICAgICAgICA8bnMxOmlz U29sZVByb3ByZWl0b3JzaGlwPmZhbHNlPC9uczE6aXNTb2xlUHJvcHJlaXRvcnNo aXA+CiAgICAgICAgICAgICAgICA8bnMxOmlzU21hbGxBZ3JpY3VsdHVyYWxDb29w ZXJhdGl2ZT5mYWxzZTwvbnMxOmlzU21hbGxBZ3JpY3VsdHVyYWxDb29wZXJhdGl2 ZT4KICAgICAgICAgICAgICAgIDxuczE6aXNJbnRlcm5hdGlvbmFsT3JnYW5pemF0 aW9uPmZhbHNlPC9uczE6aXNJbnRlcm5hdGlvbmFsT3JnYW5pemF0aW9uPgogICAg ICAgICAgICAgICAgPG5zMTppc1VTR292ZXJubWVudEVudGl0eT5mYWxzZTwvbnMx OmlzVVNHb3Zlcm5tZW50RW50aXR5PjwvbnMxOmJ1c2luZXNzT3JPcmdhbml6YXRp b25UeXBlPjwvbnMxOnZlbmRvckJ1c2luZXNzVHlwZXM+CiAgICAgICAgICAgIDxu czE6dmVuZG9yTGluZU9mQnVzaW5lc3M+CiAgICAgICAgICAgICAgPG5zMTppc0Nv bW11bml0eURldmVsb3BtZW50Q29ycG9yYXRpb24+ZmFsc2U8L25zMTppc0NvbW11 bml0eURldmVsb3BtZW50Q29ycG9yYXRpb24+CiAgICAgICAgICAgICAgPG5zMTpp c0RvbWVzdGljU2hlbHRlcj5mYWxzZTwvbnMxOmlzRG9tZXN0aWNTaGVsdGVyPgog ICAgICAgICAgICAgIDxuczE6aXNFZHVjYXRpb25hbEluc3RpdHV0aW9uPmZhbHNl PC9uczE6aXNFZHVjYXRpb25hbEluc3RpdHV0aW9uPgogICAgICAgICAgICAgIDxu czE6aXNGb3VuZGF0aW9uPmZhbHNlPC9uczE6aXNGb3VuZGF0aW9uPgogICAgICAg ICAgICAgIDxuczE6aXNIb3NwaXRhbD5mYWxzZTwvbnMxOmlzSG9zcGl0YWw+CiAg ICAgICAgICAgICAgPG5zMTppc01hbnVmYWN0dXJlck9mR29vZHM+ZmFsc2U8L25z MTppc01hbnVmYWN0dXJlck9mR29vZHM+CiAgICAgICAgICAgICAgPG5zMTppc1Zl dGVyaW5hcnlIb3NwaXRhbD5mYWxzZTwvbnMxOmlzVmV0ZXJpbmFyeUhvc3BpdGFs PgogICAgICAgICAgICAgIDxuczE6aXNIaXNwYW5pY1NlcnZpY2luZ0luc3RpdHV0 aW9uPmZhbHNlPC9uczE6aXNIaXNwYW5pY1NlcnZpY2luZ0luc3RpdHV0aW9uPjwv bnMxOnZlbmRvckxpbmVPZkJ1c2luZXNzPgogICAgICAgICAgICA8bnMxOnZlbmRv clJlbGF0aW9uc2hpcFdpdGhGZWRlcmFsR292ZXJubWVudD4KICAgICAgICAgICAg ICA8bnMxOnJlY2VpdmVzQ29udHJhY3RzPnRydWU8L25zMTpyZWNlaXZlc0NvbnRy YWN0cz4KICAgICAgICAgICAgICA8bnMxOnJlY2VpdmVzR3JhbnRzPmZhbHNlPC9u czE6cmVjZWl2ZXNHcmFudHM+CiAgICAgICAgICAgICAgPG5zMTpyZWNlaXZlc0Nv bnRyYWN0c0FuZEdyYW50cz5mYWxzZTwvbnMxOnJlY2VpdmVzQ29udHJhY3RzQW5k R3JhbnRzPjwvbnMxOnZlbmRvclJlbGF0aW9uc2hpcFdpdGhGZWRlcmFsR292ZXJu bWVudD4KICAgICAgICAgICAgPG5zMTp0eXBlT2ZHb3Zlcm5tZW50RW50aXR5Pgog ICAgICAgICAgICAgIDxuczE6aXNBaXJwb3J0QXV0aG9yaXR5PmZhbHNlPC9uczE6 aXNBaXJwb3J0QXV0aG9yaXR5PgogICAgICAgICAgICAgIDxuczE6aXNDb3VuY2ls T2ZHb3Zlcm5tZW50cz5mYWxzZTwvbnMxOmlzQ291bmNpbE9mR292ZXJubWVudHM+ CiAgICAgICAgICAgICAgPG5zMTppc0hvdXNpbmdBdXRob3JpdGllc1B1YmxpY09y VHJpYmFsPmZhbHNlPC9uczE6aXNIb3VzaW5nQXV0aG9yaXRpZXNQdWJsaWNPclRy aWJhbD4KICAgICAgICAgICAgICA8bnMxOmlzSW50ZXJzdGF0ZUVudGl0eT5mYWxz ZTwvbnMxOmlzSW50ZXJzdGF0ZUVudGl0eT4KICAgICAgICAgICAgICA8bnMxOmlz UGxhbm5pbmdDb21taXNzaW9uPmZhbHNlPC9uczE6aXNQbGFubmluZ0NvbW1pc3Np b24+CiAgICAgICAgICAgICAgPG5zMTppc1BvcnRBdXRob3JpdHk+ZmFsc2U8L25z MTppc1BvcnRBdXRob3JpdHk+CiAgICAgICAgICAgICAgPG5zMTppc1RyYW5zaXRB dXRob3JpdHk+ZmFsc2U8L25zMTppc1RyYW5zaXRBdXRob3JpdHk+PC9uczE6dHlw ZU9mR292ZXJubWVudEVudGl0eT4KICAgICAgICAgICAgPG5zMTp2ZW5kb3JPcmdh bml6YXRpb25GYWN0b3JzPgogICAgICAgICAgICAgIDxuczE6aXNTdWJjaGFwdGVy U0NvcnBvcmF0aW9uPmZhbHNlPC9uczE6aXNTdWJjaGFwdGVyU0NvcnBvcmF0aW9u PgogICAgICAgICAgICAgIDxuczE6aXNMaW1pdGVkTGlhYmlsaXR5Q29ycG9yYXRp b24+dHJ1ZTwvbnMxOmlzTGltaXRlZExpYWJpbGl0eUNvcnBvcmF0aW9uPgogICAg ICAgICAgICAgIDxuczE6aXNGb3JlaWduT3duZWRBbmRMb2NhdGVkPmZhbHNlPC9u czE6aXNGb3JlaWduT3duZWRBbmRMb2NhdGVkPgogICAgICAgICAgICAgIDxuczE6 cHJvZml0U3RydWN0dXJlPgogICAgICAgICAgICAgICAgPG5zMTppc0ZvclByb2Zp dE9yZ2FuaXphdGlvbj50cnVlPC9uczE6aXNGb3JQcm9maXRPcmdhbml6YXRpb24+ CiAgICAgICAgICAgICAgICA8bnMxOmlzTm9ucHJvZml0T3JnYW5pemF0aW9uPmZh bHNlPC9uczE6aXNOb25wcm9maXRPcmdhbml6YXRpb24+CiAgICAgICAgICAgICAg ICA8bnMxOmlzT3RoZXJOb3RGb3JQcm9maXRPcmdhbml6YXRpb24+ZmFsc2U8L25z MTppc090aGVyTm90Rm9yUHJvZml0T3JnYW5pemF0aW9uPjwvbnMxOnByb2ZpdFN0 cnVjdHVyZT4KICAgICAgICAgICAgICA8bnMxOmlzU2hlbHRlcmVkV29ya3Nob3A+ ZmFsc2U8L25zMTppc1NoZWx0ZXJlZFdvcmtzaG9wPgogICAgICAgICAgICAgIDxu czE6b3JnYW5pemF0aW9uYWxUeXBlPk9USEVSPC9uczE6b3JnYW5pemF0aW9uYWxU eXBlPgogICAgICAgICAgICAgIDxuczE6bnVtYmVyT2ZFbXBsb3llZXM+MTM8L25z MTpudW1iZXJPZkVtcGxveWVlcz4KICAgICAgICAgICAgICA8bnMxOmFubnVhbFJl dmVudWU+MjAwMDAwMDwvbnMxOmFubnVhbFJldmVudWU+PC9uczE6dmVuZG9yT3Jn YW5pemF0aW9uRmFjdG9ycz4KICAgICAgICAgICAgPG5zMTp0eXBlT2ZFZHVjYXRp b25hbEVudGl0eT4KICAgICAgICAgICAgICA8bnMxOmlzMTg2MkxhbmRHcmFudENv bGxlZ2U+ZmFsc2U8L25zMTppczE4NjJMYW5kR3JhbnRDb2xsZWdlPgogICAgICAg ICAgICAgIDxuczE6aXMxODkwTGFuZEdyYW50Q29sbGVnZT5mYWxzZTwvbnMxOmlz MTg5MExhbmRHcmFudENvbGxlZ2U+CiAgICAgICAgICAgICAgPG5zMTppczE5OTRM YW5kR3JhbnRDb2xsZWdlPmZhbHNlPC9uczE6aXMxOTk0TGFuZEdyYW50Q29sbGVn ZT4KICAgICAgICAgICAgICA8bnMxOmlzSGlzdG9yaWNhbGx5QmxhY2tDb2xsZWdl T3JVbml2ZXJzaXR5PmZhbHNlPC9uczE6aXNIaXN0b3JpY2FsbHlCbGFja0NvbGxl Z2VPclVuaXZlcnNpdHk+CiAgICAgICAgICAgICAgPG5zMTppc01pbm9yaXR5SW5z dGl0dXRpb24+ZmFsc2U8L25zMTppc01pbm9yaXR5SW5zdGl0dXRpb24+CiAgICAg ICAgICAgICAgPG5zMTppc1ByaXZhdGVVbml2ZXJzaXR5T3JDb2xsZWdlPmZhbHNl PC9uczE6aXNQcml2YXRlVW5pdmVyc2l0eU9yQ29sbGVnZT4KICAgICAgICAgICAg ICA8bnMxOmlzU2Nob29sT2ZGb3Jlc3RyeT5mYWxzZTwvbnMxOmlzU2Nob29sT2ZG b3Jlc3RyeT4KICAgICAgICAgICAgICA8bnMxOmlzU3RhdGVDb250cm9sbGVkSW5z dGl0dXRpb25vZkhpZ2hlckxlYXJuaW5nPmZhbHNlPC9uczE6aXNTdGF0ZUNvbnRy b2xsZWRJbnN0aXR1dGlvbm9mSGlnaGVyTGVhcm5pbmc+CiAgICAgICAgICAgICAg PG5zMTppc1RyaWJhbENvbGxlZ2U+ZmFsc2U8L25zMTppc1RyaWJhbENvbGxlZ2U+ CiAgICAgICAgICAgICAgPG5zMTppc1ZldGVyaW5hcnlDb2xsZWdlPmZhbHNlPC9u czE6aXNWZXRlcmluYXJ5Q29sbGVnZT4KICAgICAgICAgICAgICA8bnMxOmlzQWxh c2thbk5hdGl2ZVNlcnZpY2luZ0luc3RpdHV0aW9uPmZhbHNlPC9uczE6aXNBbGFza2Fu TmF0aXZlU2VydmljaW5nSW5zdGl0dXRpb24+CiAgICAgICAgICAgICAgPG5zMTpp c05hdGl2ZUhhd2FpaWFuU2VydmljaW5nSW5zdGl0dXRpb24+ZmFsc2U8L25zMTpp c05hdGl2ZUhhd2FpaWFuU2VydmljaW5nSW5zdGl0dXRpb24+PC9uczE6dHlwZU9m RWR1Y2F0aW9uYWxFbnRpdHk+CiAgICAgICAgICAgIDxuczE6dmVuZG9yQ2VydGlm aWNhdGlvbnM+CiAgICAgICAgICAgICAgPG5zMTppc0RPVENlcnRpZmllZERpc2Fk dmFudGFnZWRCdXNpbmVzc0VudGVycHJpc2U+dHJ1ZTwvbnMxOmlzRE9UQ2VydGlm aWVkRGlzYWR2YW50YWdlZEJ1c2luZXNzRW50ZXJwcmlzZT4KICAgICAgICAgICAg ICA8bnMxOmlzU2VsZkNlcnRpZmllZFNtYWxsRGlzYWR2YW50YWdlZEJ1c2luZXNz PmZhbHNlPC9uczE6aXNTZWxmQ2VydGlmaWVkU21hbGxEaXNhZHZhbnRhZ2VkQnVz aW5lc3M+CiAgICAgICAgICAgICAgPG5zMTppc1NCQUNlcnRpZmllZFNtYWxsRGlz YWR2YW50YWdlZEJ1c2luZXNzPnRydWU8L25zMTppc1NCQUNlcnRpZmllZFNtYWxs RGlzYWR2YW50YWdlZEJ1c2luZXNzPgogICAgICAgICAgICAgIDxuczE6aXNTQkFD ZXJ0aWZpZWQ4QVByb2dyYW1QYXJ0aWNpcGFudD50cnVlPC9uczE6aXNTQkFDZXJ0 aWZpZWQ4QVByb2dyYW1QYXJ0aWNpcGFudD4KICAgICAgICAgICAgICA8bnMxOmlz U2VsZkNlcnRpZmllZEhVQlpvbmVKb2ludFZlbnR1cmU+ZmFsc2U8L25zMTppc1Nl bGZDZXJ0aWZpZWRIVUJab25lSm9pbnRWZW50dXJlPgogICAgICAgICAgICAgIDxu czE6aXNTQkFDZXJ0aWZpZWRIVUJab25lPmZhbHNlPC9uczE6aXNTQkFDZXJ0aWZp ZWRIVUJab25lPgogICAgICAgICAgICAgIDxuczE6aXNTQkFDZXJ0aWZpZWQ4QUpv aW50VmVudHVyZT5mYWxzZTwvbnMxOmlzU0JBQ2VydGlmaWVkOEFKb2ludFZlbnR1 cmU+PC9uczE6dmVuZG9yQ2VydGlmaWNhdGlvbnM+CiAgICAgICAgICAgIDxuczE6 dmVuZG9yTG9jYXRpb24+CiAgICAgICAgICAgICAgPG5zMTpzdHJlZXRBZGRyZXNz PjIyMDAgV0lMU09OIEJMVkQ8L25zMTpzdHJlZXRBZGRyZXNzPgogICAgICAgICAg ICAgIDxuczE6Y2l0eT5BUkxJTkdUT048L25zMTpjaXR5PgogICAgICAgICAgICAg IDxuczE6c3RhdGUgbmFtZT0iVklSR0lOSUEiPlZBPC9uczE6c3RhdGU+CiAgICAg ICAgICAgICAgPG5zMTpaSVBDb2RlPjIyMjAxMzM5NzwvbnMxOlpJUENvZGU+CiAg ICAgICAgICAgICAgPG5zMTpjb3VudHJ5Q29kZSBuYW1lPSJVTklURUQgU1RBVEVT Ij5VU0E8L25zMTpjb3VudHJ5Q29kZT4KICAgICAgICAgICAgICA8bnMxOnBob25l Tm8+NzAzMjUzOTcyMjwvbnMxOnBob25lTm8+CiAgICAgICAgICAgICAgPG5zMTpm YXhObz43MDM1MjIyMDM3PC9uczE6ZmF4Tm8+CiAgICAgICAgICAgICAgPG5zMTpj b25ncmVzc2lvbmFsRGlzdHJpY3RDb2RlPjA4PC9uczE6Y29uZ3Jlc3Npb25hbERp c3RyaWN0Q29kZT48L25zMTp2ZW5kb3JMb2NhdGlvbj4KICAgICAgICAgICAgPG5z MTp2ZW5kb3JTaXRlQ29kZT4xMjYyNDIxNTA8L25zMTp2ZW5kb3JTaXRlQ29kZT4K ICAgICAgICAgICAgPG5zMTp2ZW5kb3JBbHRlcm5hdGVTaXRlQ29kZT4yMjIwMTMz OTc8L25zMTp2ZW5kb3JBbHRlcm5hdGVTaXRlQ29kZT4KICAgICAgICAgICAgPG5z MTp2ZW5kb3JEVU5TSW5mb3JtYXRpb24+CiAgICAgICAgICAgICAgPG5zMTpEVU5T TnVtYmVyPjEyNjI0MjE1MDwvbnMxOkRVTlNOdW1iZXI+CiAgICAgICAgICAgICAg PG5zMTp2ZW5kb3JOYW1lPkFQRVhURUNIIExMQzwvbnMxOnZlbmRvck5hbWU+CiAg ICAgICAgICAgICAgPG5zMTpnbG9iYWxQYXJlbnREVU5TTnVtYmVyPjEyNjI0MjE1 MDwvbnMxOmdsb2JhbFBhcmVudERVTlNOdW1iZXI+CiAgICAgICAgICAgICAgPG5z MTpnbG9iYWxQYXJlbnREVU5TTmFtZT5BUEVYVEVDSCBMTEM8L25zMTpnbG9iYWxQ YXJlbnREVU5TTmFtZT48L25zMTp2ZW5kb3JEVU5TSW5mb3JtYXRpb24+CiAgICAg ICAgICAgIDxuczE6Y2NyUmVnaXN0cmF0aW9uRGV0YWlscz4KICAgICAgICAgICAg ICA8bnMxOnJlZ2lzdHJhdGlvbkRhdGU+MjAwMy0wMS0xNSAwMDowMDowMDwvbnMx OnJlZ2lzdHJhdGlvbkRhdGU+CiAgICAgICAgICAgICAgPG5zMTpyZW5ld2FsRGF0 ZT4yMDE0LTA3LTMxIDAwOjAwOjAwPC9uczE6cmVuZXdhbERhdGU+PC9uczE6Y2Ny UmVnaXN0cmF0aW9uRGV0YWlscz48L25zMTp2ZW5kb3JTaXRlRGV0YWlscz4KICAg ICAgICAgIDxuczE6Y29udHJhY3RpbmdPZmZpY2VyQnVzaW5lc3NTaXplRGV0ZXJt aW5hdGlvbiBkZXNjcmlwdGlvbj0iU01BTEwgQlVTSU5FU1MiPlM8L25zMTpjb250 cmFjdGluZ09mZmljZXJCdXNpbmVzc1NpemVEZXRlcm1pbmF0aW9uPjwvbnMxOnZl bmRvcj4KICAgICAgICA8bnMxOnBsYWNlT2ZQZXJmb3JtYW5jZT4KICAgICAgICAg IDxuczE6cHJpbmNpcGFsUGxhY2VPZlBlcmZvcm1hbmNlPgogICAgICAgICAgICA8 bnMxOnN0YXRlQ29kZSBuYW1lPSJNQVJZTEFORCI+TUQ8L25zMTpzdGF0ZUNvZGU+ CiAgICAgICAgICAgIDxuczE6Y291bnRyeUNvZGUgbmFtZT0iVU5JVEVEIFNUQVRF UyI+VVNBPC9uczE6Y291bnRyeUNvZGU+PC9uczE6cHJpbmNpcGFsUGxhY2VPZlBl cmZvcm1hbmNlPgogICAgICAgICAgPG5zMTpwbGFjZU9mUGVyZm9ybWFuY2VaSVBD b2RlIGNvdW50eT0iUFJJTkNFIEdFT1JHRVMiIGNpdHk9IkJFTFRTVklMTEUiPjIw NzA1MTAwMzwvbnMxOnBsYWNlT2ZQZXJmb3JtYW5jZVpJUENvZGU+CiAgICAgICAg ICA8bnMxOnBsYWNlT2ZQZXJmb3JtYW5jZUNvbmdyZXNzaW9uYWxEaXN0cmljdD4w NDwvbnMxOnBsYWNlT2ZQZXJmb3JtYW5jZUNvbmdyZXNzaW9uYWxEaXN0cmljdD48 L25zMTpwbGFjZU9mUGVyZm9ybWFuY2U+CiAgICAgICAgPG5zMTpjb21wZXRpdGlv bj4KICAgICAgICAgIDxuczE6ZXh0ZW50Q29tcGV0ZWQgZGVzY3JpcHRpb249IkZV TEwgQU5EIE9QRU4gQ09NUEVUSVRJT04gQUZURVIgRVhDTFVTSU9OIE9GIFNPVVJD RVMiPkQ8L25zMTpleHRlbnRDb21wZXRlZD4KICAgICAgICAgIDxuczE6c29saWNp dGF0aW9uUHJvY2VkdXJlcyBkZXNjcmlwdGlvbj0iU1VCSkVDVCBUTyBNVUxUSVBM RSBBV0FSRCBGQUlSIE9QUE9SVFVOSVRZIj5NQUZPPC9uczE6c29saWNpdGF0aW9u UHJvY2VkdXJlcz4KICAgICAgICAgIDxuczE6dHlwZU9mU2V0QXNpZGUgZGVzY3Jp cHRpb249IjhBIENPTVBFVEVEIj44QTwvbnMxOnR5cGVPZlNldEFzaWRlPgogICAg ICAgICAgPG5zMTpldmFsdWF0ZWRQcmVmZXJlbmNlIGRlc2NyaXB0aW9uPSJOTyBQ UkVGRVJFTkNFIFVTRUQiPk5PTkU8L25zMTpldmFsdWF0ZWRQcmVmZXJlbmNlPgog ICAgICAgICAgPG5zMTpzdGF0dXRvcnlFeGNlcHRpb25Ub0ZhaXJPcHBvcnR1bml0 eSBkZXNjcmlwdGlvbj0iT1RIRVIgU1RBVFVUT1JZIEFVVEhPUklUWSI+T1NBPC9u czE6c3RhdHV0b3J5RXhjZXB0aW9uVG9GYWlyT3Bwb3J0dW5pdHk+CiAgICAgICAg ICA8bnMxOmNvbW1lcmNpYWxJdGVtQWNxdWlzaXRpb25Qcm9jZWR1cmVzIGRlc2Ny aXB0aW9uPSJDT01NRVJDSUFMIElURU0iPkE8L25zMTpjb21tZXJjaWFsSXRlbUFj cXVpc2l0aW9uUHJvY2VkdXJlcz4KICAgICAgICAgIDxuczE6Y29tbWVyY2lhbEl0 ZW1UZXN0UHJvZ3JhbSBkZXNjcmlwdGlvbj0iTk8iPk48L25zMTpjb21tZXJjaWFs SXRlbVRlc3RQcm9ncmFtPgogICAgICAgICAgPG5zMTpBNzZBY3Rpb24gZGVzY3Jp cHRpb249Ik5PIj5OPC9uczE6QTc2QWN0aW9uPgogICAgICAgICAgPG5zMTpmZWRC aXpPcHBzIGRlc2NyaXB0aW9uPSJZRVMiPlk8L25zMTpmZWRCaXpPcHBzPgogICAg ICAgICAgPG5zMTpsb2NhbEFyZWFTZXRBc2lkZSBkZXNjcmlwdGlvbj0iTk8iPk48 L25zMTpsb2NhbEFyZWFTZXRBc2lkZT48L25zMTpjb21wZXRpdGlvbj4KICAgICAg ICA8bnMxOnByZWZlcmVuY2VQcm9ncmFtcz4KICAgICAgICAgIDxuczE6c3ViY29u dHJhY3RQbGFuIGRlc2NyaXB0aW9uPSJQTEFOIE5PVCBSRVFVSVJFRCAiPkI8L25z MTpzdWJjb250cmFjdFBsYW4+PC9uczE6cHJlZmVyZW5jZVByb2dyYW1zPgogICAg ICAgIDxuczE6dHJhbnNhY3Rpb25JbmZvcm1hdGlvbj4KICAgICAgICAgIDxuczE6 Y3JlYXRlZEJ5PkpFU1NJQ0EuTUFTU0VZQEFSUy5VU0RBLkdPVjwvbnMxOmNyZWF0 ZWRCeT4KICAgICAgICAgIDxuczE6Y3JlYXRlZERhdGU+MjAxNS0wNS0yMSAxNDow MzozNTwvbnMxOmNyZWF0ZWREYXRlPgogICAgICAgICAgPG5zMTpsYXN0TW9kaWZp ZWRCeT5JRFZfQ09SUkVDVDwvbnMxOmxhc3RNb2RpZmllZEJ5PgogICAgICAgICAg PG5zMTpsYXN0TW9kaWZpZWREYXRlPjIwMTctMTAtMDQgMTQ6MjA6NDg8L25zMTps YXN0TW9kaWZpZWREYXRlPgogICAgICAgICAgPG5zMTpzdGF0dXMgZGVzY3JpcHRp b249IkZJTkFMIj5GPC9uczE6c3RhdHVzPgogICAgICAgICAgPG5zMTphcHByb3Zl ZEJ5PkpFU1NJQ0EuTUFTU0VZQEFSUy5VU0RBLkdPVjwvbnMxOmFwcHJvdmVkQnk+ CiAgICAgICAgICA8bnMxOmFwcHJvdmVkRGF0ZT4yMDE1LTA2LTAzIDEzOjE3OjM2 PC9uczE6YXBwcm92ZWREYXRlPgogICAgICAgICAgPG5zMTpjbG9zZWRTdGF0dXM+ TjwvbnMxOmNsb3NlZFN0YXR1cz48L25zMTp0cmFuc2FjdGlvbkluZm9ybWF0aW9u PjwvbnMxOmF3YXJkPgogICAgPC9jb250ZW50PgogIDwvZW50cnk+CiAgPGVudHJ5 PgogICAgPHRpdGxlPjwhW0NEQVRBW05ldyBQVVJDSEFTRSBPUkRFUiBNNjczODYx MFAxMDI3IGF3YXJkZWQgdG8gRElMVEVYIElOQyBmb3IgdGhlIGFtb3VudCBvZiAk NzAwXV0+PC90aXRsZT4KICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJ0 ZXh0L2h0bWwiIGhyZWY9Imh0dHBzOi8vd3d3LmZwZHMuZ292L2V6c2VhcmNoL3Nl YXJjaC5kbz9zPUZQRFMmYW1wO2luZGV4TmFtZT1hd2FyZGZ1bGwmYW1wO3RlbXBs YXRlTmFtZT0xLjUuMSZhbXA7cT1NNjczODYxMFAxMDI3Kzk3MDArIj48L2xpbms+ CiAgICA8bW9kaWZpZWQ+MjAxNy0xMS0yOSAyMzozNjo0MjwvbW9kaWZpZWQ+CiAg ICA8Y29udGVudCB4bWxuczpuczE9Imh0dHBzOi8vd3d3LmZwZHMuZ292L0ZQRFMi IHR5cGU9ImFwcGxpY2F0aW9uL3htbCI+CiAgICAgIDxuczE6YXdhcmQgeG1sbnM6 bnMxPSJodHRwOi8vd3d3LmZwZHNuZy5jb20vRlBEUyIgdmVyc2lvbj0iMS4zIj4K ICAgICAgICA8bnMxOmF3YXJkSUQ+CiAgICAgICAgICA8bnMxOmF3YXJkQ29udHJh Y3RJRD4KICAgICAgICAgICAgPG5zMTphZ2VuY3lJRCBuYW1lPSJERVBUIE9GIERF RkVOU0UiPjk3MDA8L25zMTphZ2VuY3lJRD4KICAgICAgICAgICAgPG5zMTpQSUlE Pk02NzM4NjEwUDEwMjc8L25zMTpQSUlEPgogICAgICAgICAgICA8bnMxOm1vZE51 bWJlcj4wPC9uczE6bW9kTnVtYmVyPgogICAgICAgICAgICA8bnMxOnRyYW5zYWN0 aW9uTnVtYmVyPjA8L25zMTp0cmFuc2FjdGlvbk51bWJlcj48L25zMTphd2FyZENv bnRyYWN0SUQ+PC9uczE6YXdhcmRJRD4KICAgICAgICA8bnMxOnJlbGV2YW50Q29u dHJhY3REYXRlcz4KICAgICAgICAgIDxuczE6c2lnbmVkRGF0ZT4yMDEwLTA1LTE4 IDAwOjAwOjAwPC9uczE6c2lnbmVkRGF0ZT4KICAgICAgICAgIDxuczE6ZWZmZWN0 aXZlRGF0ZT4yMDEwLTA1LTE4IDAwOjAwOjAwPC9uczE6ZWZmZWN0aXZlRGF0ZT4K ICAgICAgICAgIDxuczE6Y3VycmVudENvbXBsZXRpb25EYXRlPjIwMTAtMDYtMTcg MDA6MDA6MDA8L25zMTpjdXJyZW50Q29tcGxldGlvbkRhdGU+CiAgICAgICAgICA8 bnMxOnVsdGltYXRlQ29tcGxldGlvbkRhdGU+MjAxMC0wNi0xNyAwMDowMDowMDwv bnMxOnVsdGltYXRlQ29tcGxldGlvbkRhdGU+PC9uczE6cmVsZXZhbnRDb250cmFj dERhdGVzPgogICAgICAgIDxuczE6ZG9sbGFyVmFsdWVzPgogICAgICAgICAgPG5z MTpvYmxpZ2F0ZWRBbW91bnQ+NzAwLjAwPC9uczE6b2JsaWdhdGVkQW1vdW50Pgog ICAgICAgICAgPG5zMTpiYXNlQW5kRXhlcmNpc2VkT3B0aW9uc1ZhbHVlPjcwMC4w MDwvbnMxOmJhc2VBbmRFeGVyY2lzZWRPcHRpb25zVmFsdWU+CiAgICAgICAgICA8 bnMxOmJhc2VBbmRBbGxPcHRpb25zVmFsdWU+NzAwLjAwPC9uczE6YmFzZUFuZEFs bE9wdGlvbnNWYWx1ZT48L25zMTpkb2xsYXJWYWx1ZXM+CiAgICAgICAgPG5zMTp0 b3RhbERvbGxhclZhbHVlcz4KICAgICAgICAgIDxuczE6dG90YWxPYmxpZ2F0ZWRB bW91bnQ+NzAwLjAwPC9uczE6dG90YWxPYmxpZ2F0ZWRBbW91bnQ+CiAgICAgICAg ICA8bnMxOnRvdGFsQmFzZUFuZEV4ZXJjaXNlZE9wdGlvbnNWYWx1ZT43MDAuMDA8 L25zMTp0b3RhbEJhc2VBbmRFeGVyY2lzZWRPcHRpb25zVmFsdWU+CiAgICAgICAg ICA8bnMxOnRvdGFsQmFzZUFuZEFsbE9wdGlvbnNWYWx1ZT43MDAuMDA8L25zMTp0 b3RhbEJhc2VBbmRBbGxPcHRpb25zVmFsdWU+PC9uczE6dG90YWxEb2xsYXJWYWx1 ZXM+CiAgICAgICAgPG5zMTpwdXJjaGFzZXJJbmZvcm1hdGlvbj4KICAgICAgICAg IDxuczE6Y29udHJhY3RpbmdPZmZpY2VBZ2VuY3lJRCBuYW1lPSJERVBUIE9GIFRI RSBOQVZZIiBkZXBhcnRtZW50SUQ9Ijk3MDAiIGRlcGFydG1lbnROYW1lPSJERVBU IE9GIERFRkVOU0UiPjE3MDA8L25zMTpjb250cmFjdGluZ09mZmljZUFnZW5jeUlE PgogICAgICAgICAgPG5zMTpjb250cmFjdGluZ09mZmljZUlEIG5hbWU9IkNPTlRS QUNUSU5HIE9GRklDRVIiIGNvdW50cnk9IlVTQSI+TTY3Mzg2PC9uczE6Y29udHJh Y3RpbmdPZmZpY2VJRD4KICAgICAgICAgIDxuczE6ZnVuZGluZ1JlcXVlc3RpbmdB Z2VuY3lJRCBuYW1lPSJERVBUIE9GIFRIRSBOQVZZIiBkZXBhcnRtZW50SUQ9Ijk3 MDAiIGRlcGFydG1lbnROYW1lPSJERVBUIE9GIERFRkVOU0UiPjE3MDA8L25zMTpm dW5kaW5nUmVxdWVzdGluZ0FnZW5jeUlEPgogICAgICAgICAgPG5zMTpmdW5kaW5n UmVxdWVzdGluZ09mZmljZUlEIG5hbWU9IkNPTlRSQUNUSU5HIE9GRklDRVIiPk02 NzM4NjwvbnMxOmZ1bmRpbmdSZXF1ZXN0aW5nT2ZmaWNlSUQ+CiAgICAgICAgICA8 bnMxOmZvcmVpZ25GdW5kaW5nIGRlc2NyaXB0aW9uPSJOT1QgQVBQTElDQUJMRSI+ WDwvbnMxOmZvcmVpZ25GdW5kaW5nPjwvbnMxOnB1cmNoYXNlckluZm9ybWF0aW9u PgogICAgICAgIDxuczE6Y29udHJhY3RNYXJrZXRpbmdEYXRhPgogICAgICAgICAg PG5zMTpmZWVQYWlkRm9yVXNlT2ZTZXJ2aWNlPjAuMDA8L25zMTpmZWVQYWlkRm9y VXNlT2ZTZXJ2aWNlPjwvbnMxOmNvbnRyYWN0TWFya2V0aW5nRGF0YT4KICAgICAg ICA8bnMxOmNvbnRyYWN0RGF0YT4KICAgICAgICAgIDxuczE6Y29udHJhY3RBY3Rp b25UeXBlIGRlc2NyaXB0aW9uPSJQVVJDSEFTRSBPUkRFUiI+QjwvbnMxOmNvbnRy YWN0QWN0aW9uVHlwZT4KICAgICAgICAgIDxuczE6dHlwZU9mQ29udHJhY3RQcmlj aW5nIGRlc2NyaXB0aW9uPSJGSVJNIEZJWEVEIFBSSUNFIj5KPC9uczE6dHlwZU9m Q29udHJhY3RQcmljaW5nPgogICAgICAgICAgPG5zMTpuYXRpb25hbEludGVyZXN0 QWN0aW9uQ29kZSBkZXNjcmlwdGlvbj0iTk9ORSI+Tk9ORTwvbnMxOm5hdGlvbmFs SW50ZXJlc3RBY3Rpb25Db2RlPgogICAgICAgICAgPG5zMTpkZXNjcmlwdGlvbk9m Q29udHJhY3RSZXF1aXJlbWVudD5QTC9TUUwgU09GVFdBUkUgREVWRUxPUEVSPC9u czE6ZGVzY3JpcHRpb25PZkNvbnRyYWN0UmVxdWlyZW1lbnQ+CiAgICAgICAgICA8 bnMxOkdGRS1HRlAgZGVzY3JpcHRpb249IlRyYW5zYWN0aW9uIGRvZXMgbm90IHVz ZSBHRkUvR0ZQIj5OPC9uczE6R0ZFLUdGUD4KICAgICAgICAgIDxuczE6c2VhVHJh bnNwb3J0YXRpb24gZGVzY3JpcHRpb249Ik5PIj5OPC9uczE6c2VhVHJhbnNwb3J0 YXRpb24+CiAgICAgICAgICA8bnMxOnVuZGVmaW5pdGl6ZWRBY3Rpb24gZGVzY3Jp cHRpb249Ik5PIj5YPC9uczE6dW5kZWZpbml0aXplZEFjdGlvbj4KICAgICAgICAg IDxuczE6Y29uc29saWRhdGVkQ29udHJhY3QgZGVzY3JpcHRpb249Ik5PIj5OPC9u czE6Y29uc29saWRhdGVkQ29udHJhY3Q+CiAgICAgICAgICA8bnMxOnBlcmZvcm1h bmNlQmFzZWRTZXJ2aWNlQ29udHJhY3QgZGVzY3JpcHRpb249Ik5PVCBBUFBMSUNB QkxFIj5YPC9uczE6cGVyZm9ybWFuY2VCYXNlZFNlcnZpY2VDb250cmFjdD4KICAg ICAgICAgIDxuczE6Y29udHJhY3RGaW5hbmNpbmcgZGVzY3JpcHRpb249Ik5PVCBB UFBMSUNBQkxFIj5aPC9uczE6Y29udHJhY3RGaW5hbmNpbmc+CiAgICAgICAgICA8 bnMxOnB1cmNoYXNlQ2FyZEFzUGF5bWVudE1ldGhvZCBkZXNjcmlwdGlvbj0iTk8i Pk48L25zMTpwdXJjaGFzZUNhcmRBc1BheW1lbnRNZXRob2Q+CiAgICAgICAgICA8 bnMxOm51bWJlck9mQWN0aW9ucz4xPC9uczE6bnVtYmVyT2ZBY3Rpb25zPjwvbnMx OmNvbnRyYWN0RGF0YT4KICAgICAgICA8bnMxOmxlZ2lzbGF0aXZlTWFuZGF0ZXM+ CiAgICAgICAgICA8bnMxOkNsaW5nZXJDb2hlbkFjdCBkZXNjcmlwdGlvbj0iWUVT Ij5ZPC9uczE6Q2xpbmdlckNvaGVuQWN0PgogICAgICAgICAgPG5zMTptYXRlcmlh bHNTdXBwbGllc0FydGljbGVzRXF1aXBtZW50IGRlc2NyaXB0aW9uPSJOTyI+Tjwv bnMxOm1hdGVyaWFsc1N1cHBsaWVzQXJ0aWNsZXNFcXVpcG1lbnQ+CiAgICAgICAg ICA8bnMxOmxhYm9yU3RhbmRhcmRzIGRlc2NyaXB0aW9uPSJOTyI+TjwvbnMxOmxh Ym9yU3RhbmRhcmRzPgogICAgICAgICAgPG5zMTpjb25zdHJ1Y3Rpb25XYWdlUmF0 ZVJlcXVpcmVtZW50cyBkZXNjcmlwdGlvbj0iTk8iPk48L25zMTpjb25zdHJ1Y3Rp b25XYWdlUmF0ZVJlcXVpcmVtZW50cz4KICAgICAgICAgIDxuczE6bGlzdE9mQWRk aXRpb25hbFJlcG9ydGluZ1ZhbHVlcz48L25zMTpsaXN0T2ZBZGRpdGlvbmFsUmVw b3J0aW5nVmFsdWVzPgogICAgICAgICAgPG5zMTppbnRlcmFnZW5jeUNvbnRyYWN0 aW5nQXV0aG9yaXR5IGRlc2NyaXB0aW9uPSJOT1QgQVBQTElDQUJMRSI+WDwvbnMx OmludGVyYWdlbmN5Q29udHJhY3RpbmdBdXRob3JpdHk+PC9uczE6bGVnaXNsYXRp dmVNYW5kYXRlcz4KICAgICAgICA8bnMxOnByb2R1Y3RPclNlcnZpY2VJbmZvcm1h dGlvbj4KICAgICAgICAgIDxuczE6cHJvZHVjdE9yU2VydmljZUNvZGUgZGVzY3Jp cHRpb249IkFEUCBTT0ZUV0FSRSIgcHJvZHVjdE9yU2VydmljZVR5cGU9IlBST0RV Q1QiPjcwMzA8L25zMTpwcm9kdWN0T3JTZXJ2aWNlQ29kZT4KICAgICAgICAgIDxu czE6Y29udHJhY3RCdW5kbGluZyBkZXNjcmlwdGlvbj0iTk9UIEEgQlVORExFRCBS RVFVSVJFTUVOVCI+RDwvbnMxOmNvbnRyYWN0QnVuZGxpbmc+CiAgICAgICAgICA8 bnMxOmNsYWltYW50UHJvZ3JhbUNvZGUgZGVzY3JpcHRpb249IkFMTCBPVEhFUlMg Tk9UIElERU5USUZJQUJMRSBUTyBBTlkgT1RIRVIgUFJPQ1VSRU1FTlQgUFJPR1JB TSI+QzlFPC9uczE6Y2xhaW1hbnRQcm9ncmFtQ29kZT4KICAgICAgICAgIDxuczE6 cHJpbmNpcGFsTkFJQ1NDb2RlIGRlc2NyaXB0aW9uPSJDT01QVVRFUiBBTkQgQ09N UFVURVIgUEVSSVBIRVJBTCBFUVVJUE1FTlQgQU5EIFNPRlRXQVJFIE1FUkNIQU5U IFdIT0xFU0FMRVJTIj40MjM0MzA8L25zMTpwcmluY2lwYWxOQUlDU0NvZGU+CiAg ICAgICAgICA8bnMxOnJlY292ZXJlZE1hdGVyaWFsQ2xhdXNlcyBkZXNjcmlwdGlv bj0iTk8gQ0xBVVNFUyBJTkNMVURFRCBBTkQgTk8gU1VTVEFJTkFCSUxJVFkgSU5D TFVERUQiPkM8L25zMTpyZWNvdmVyZWRNYXRlcmlhbENsYXVzZXM+CiAgICAgICAg ICA8bnMxOm1hbnVmYWN0dXJpbmdPcmdhbml6YXRpb25UeXBlIGRlc2NyaXB0aW9u PSJVLlMuIE9XTkVEIEJVU0lORVNTIj5BPC9uczE6bWFudWZhY3R1cmluZ09yZ2Fu aXphdGlvblR5cGU+CiAgICAgICAgICA8bnMxOnN5c3RlbUVxdWlwbWVudENvZGUg ZGVzY3JpcHRpb249Ik5PTkUiPjAwMDwvbnMxOnN5c3RlbUVxdWlwbWVudENvZGU+ CiAgICAgICAgICA8bnMxOmluZm9ybWF0aW9uVGVjaG5vbG9neUNvbW1lcmNpYWxJ dGVtQ2F0ZWdvcnkgZGVzY3JpcHRpb249IkNPTU1FUkNJQUxMWSBBVkFJTEFCTEUi PkE8L25zMTppbmZvcm1hdGlvblRlY2hub2xvZ3lDb21tZXJjaWFsSXRlbUNhdGVn b3J5PgogICAgICAgICAgPG5zMTp1c2VPZkVQQURlc2lnbmF0ZWRQcm9kdWN0cyBk ZXNjcmlwdGlvbj0iTUVFVFMgUkVRVUlSRU1FTlRTIj5BPC9uczE6dXNlT2ZFUEFE ZXNpZ25hdGVkUHJvZHVjdHM+CiAgICAgICAgICA8bnMxOmNvdW50cnlPZk9yaWdp biBuYW1lPSJVTklURUQgU1RBVEVTIj5VU0E8L25zMTpjb3VudHJ5T2ZPcmlnaW4+ CiAgICAgICAgICA8bnMxOnBsYWNlT2ZNYW51ZmFjdHVyZSBkZXNjcmlwdGlvbj0i TUZHIElOIFUuUy4iPkQ8L25zMTpwbGFjZU9mTWFudWZhY3R1cmU+PC9uczE6cHJv ZHVjdE9yU2VydmljZUluZm9ybWF0aW9uPgogICAgICAgIDxuczE6dmVuZG9yPgog ICAgICAgICAgPG5zMTp2ZW5kb3JIZWFkZXI+CiAgICAgICAgICAgIDxuczE6dmVu ZG9yTmFtZT5ESUxURVggSU5DPC9uczE6dmVuZG9yTmFtZT48L25zMTp2ZW5kb3JI ZWFkZXI+CiAgICAgICAgICA8bnMxOnZlbmRvclNpdGVEZXRhaWxzPgogICAgICAg ICAgICA8bnMxOnZlbmRvclNvY2lvRWNvbm9taWNJbmRpY2F0b3JzPgogICAgICAg ICAgICAgIDxuczE6aXNBbGFza2FuTmF0aXZlT3duZWRDb3Jwb3JhdGlvbk9yRmly bT5mYWxzZTwvbnMxOmlzQWxhc2thbk5hdGl2ZU93bmVkQ29ycG9yYXRpb25PckZp cm0+CiAgICAgICAgICAgICAgPG5zMTppc0FtZXJpY2FuSW5kaWFuT3duZWQ+ZmFs c2U8L25zMTppc0FtZXJpY2FuSW5kaWFuT3duZWQ+CiAgICAgICAgICAgICAgPG5z MTppc0luZGlhblRyaWJlPmZhbHNlPC9uczE6aXNJbmRpYW5UcmliZT4KICAgICAg ICAgICAgICA8bnMxOmlzTmF0aXZlSGF3YWlpYW5Pd25lZE9yZ2FuaXphdGlvbk9y RmlybT5mYWxzZTwvbnMxOmlzTmF0aXZlSGF3YWlpYW5Pd25lZE9yZ2FuaXphdGlv bk9yRmlybT4KICAgICAgICAgICAgICA8bnMxOmlzVHJpYmFsbHlPd25lZEZpcm0+ ZmFsc2U8L25zMTppc1RyaWJhbGx5T3duZWRGaXJtPgogICAgICAgICAgICAgIDxu czE6aXNWZXRlcmFuT3duZWQ+ZmFsc2U8L25zMTppc1ZldGVyYW5Pd25lZD4KICAg ICAgICAgICAgICA8bnMxOmlzU2VydmljZVJlbGF0ZWREaXNhYmxlZFZldGVyYW5P d25lZEJ1c2luZXNzPmZhbHNlPC9uczE6aXNTZXJ2aWNlUmVsYXRlZERpc2FibGVk VmV0ZXJhbk93bmVkQnVzaW5lc3M+CiAgICAgICAgICAgICAgPG5zMTppc1dvbWVu T3duZWQ+dHJ1ZTwvbnMxOmlzV29tZW5Pd25lZD4KICAgICAgICAgICAgICA8bnMx Om1pbm9yaXR5T3duZWQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzTWlub3JpdHlP d25lZD50cnVlPC9uczE6aXNNaW5vcml0eU93bmVkPgogICAgICAgICAgICAgICAg PG5zMTppc1N1YkNvbnRpbmVudEFzaWFuQW1lcmljYW5Pd25lZEJ1c2luZXNzPnRy dWU8L25zMTppc1N1YkNvbnRpbmVudEFzaWFuQW1lcmljYW5Pd25lZEJ1c2luZXNz PgogICAgICAgICAgICAgICAgPG5zMTppc0FzaWFuUGFjaWZpY0FtZXJpY2FuT3du ZWRCdXNpbmVzcz5mYWxzZTwvbnMxOmlzQXNpYW5QYWNpZmljQW1lcmljYW5Pd25l ZEJ1c2luZXNzPgogICAgICAgICAgICAgICAgPG5zMTppc0JsYWNrQW1lcmljYW5P d25lZEJ1c2luZXNzPmZhbHNlPC9uczE6aXNCbGFja0FtZXJpY2FuT3duZWRCdXNp bmVzcz4KICAgICAgICAgICAgICAgIDxuczE6aXNIaXNwYW5pY0FtZXJpY2FuT3du ZWRCdXNpbmVzcz5mYWxzZTwvbnMxOmlzSGlzcGFuaWNBbWVyaWNhbk93bmVkQnVz aW5lc3M+CiAgICAgICAgICAgICAgICA8bnMxOmlzTmF0aXZlQW1lcmljYW5Pd25l ZEJ1c2luZXNzPmZhbHNlPC9uczE6aXNOYXRpdmVBbWVyaWNhbk93bmVkQnVzaW5l c3M+CiAgICAgICAgICAgICAgICA8bnMxOmlzT3RoZXJNaW5vcml0eU93bmVkPmZh bHNlPC9uczE6aXNPdGhlck1pbm9yaXR5T3duZWQ+PC9uczE6bWlub3JpdHlPd25l ZD4KICAgICAgICAgICAgICA8bnMxOmlzVmVyeVNtYWxsQnVzaW5lc3M+ZmFsc2U8 L25zMTppc1ZlcnlTbWFsbEJ1c2luZXNzPgogICAgICAgICAgICAgIDxuczE6aXNX b21lbk93bmVkU21hbGxCdXNpbmVzcz5mYWxzZTwvbnMxOmlzV29tZW5Pd25lZFNt YWxsQnVzaW5lc3M+CiAgICAgICAgICAgICAgPG5zMTppc0Vjb25vbWljYWxseURp c2FkdmFudGFnZWRXb21lbk93bmVkU21hbGxCdXNpbmVzcz5mYWxzZTwvbnMxOmlz RWNvbm9taWNhbGx5RGlzYWR2YW50YWdlZFdvbWVuT3duZWRTbWFsbEJ1c2luZXNz PgogICAgICAgICAgICAgIDxuczE6aXNKb2ludFZlbnR1cmVXb21lbk93bmVkU21h bGxCdXNpbmVzcz5mYWxzZTwvbnMxOmlzSm9pbnRWZW50dXJlV29tZW5Pd25lZFNt YWxsQnVzaW5lc3M+CiAgICAgICAgICAgICAgPG5zMTppc0pvaW50VmVudHVyZUVj b25vbWljYWxseURpc2FkdmFudGFnZWRXb21lbk93bmVkU21hbGxCdXNpbmVzcz5m YWxzZTwvbnMxOmlzSm9pbnRWZW50dXJlRWNvbm9taWNhbGx5RGlzYWR2YW50YWdl ZFdvbWVuT3duZWRTbWFsbEJ1c2luZXNzPjwvbnMxOnZlbmRvclNvY2lvRWNvbm9t aWNJbmRpY2F0b3JzPgogICAgICAgICAgICA8bnMxOnZlbmRvckJ1c2luZXNzVHlw ZXM+CiAgICAgICAgICAgICAgPG5zMTppc0NvbW11bml0eURldmVsb3BlZENvcnBv cmF0aW9uT3duZWRGaXJtPmZhbHNlPC9uczE6aXNDb21tdW5pdHlEZXZlbG9wZWRD b3Jwb3JhdGlvbk93bmVkRmlybT4KICAgICAgICAgICAgICA8bnMxOmlzTGFib3JT dXJwbHVzQXJlYUZpcm0+ZmFsc2U8L25zMTppc0xhYm9yU3VycGx1c0FyZWFGaXJt PgogICAgICAgICAgICAgIDxuczE6ZmVkZXJhbEdvdmVybm1lbnQ+CiAgICAgICAg ICAgICAgICA8bnMxOmlzRmVkZXJhbEdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc0Zl ZGVyYWxHb3Zlcm5tZW50PgogICAgICAgICAgICAgICAgPG5zMTppc0ZlZGVyYWxs eUZ1bmRlZFJlc2VhcmNoQW5kRGV2ZWxvcG1lbnRDb3JwPmZhbHNlPC9uczE6aXNG ZWRlcmFsbHlGdW5kZWRSZXNlYXJjaEFuZERldmVsb3BtZW50Q29ycD4KICAgICAg ICAgICAgICAgIDxuczE6aXNGZWRlcmFsR292ZXJubWVudEFnZW5jeT5mYWxzZTwv bnMxOmlzRmVkZXJhbEdvdmVybm1lbnRBZ2VuY3k+PC9uczE6ZmVkZXJhbEdvdmVy bm1lbnQ+CiAgICAgICAgICAgICAgPG5zMTppc1N0YXRlR292ZXJubWVudD5mYWxz ZTwvbnMxOmlzU3RhdGVHb3Zlcm5tZW50PgogICAgICAgICAgICAgIDxuczE6bG9j YWxHb3Zlcm5tZW50PgogICAgICAgICAgICAgICAgPG5zMTppc0xvY2FsR292ZXJu bWVudD5mYWxzZTwvbnMxOmlzTG9jYWxHb3Zlcm5tZW50PgogICAgICAgICAgICAg ICAgPG5zMTppc0NpdHlMb2NhbEdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc0NpdHlM b2NhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzQ291bnR5TG9j YWxHb3Zlcm5tZW50PmZhbHNlPC9uczE6aXNDb3VudHlMb2NhbEdvdmVybm1lbnQ+ CiAgICAgICAgICAgICAgICA8bnMxOmlzSW50ZXJNdW5pY2lwYWxMb2NhbEdvdmVy bm1lbnQ+ZmFsc2U8L25zMTppc0ludGVyTXVuaWNpcGFsTG9jYWxHb3Zlcm5tZW50 PgogICAgICAgICAgICAgICAgPG5zMTppc0xvY2FsR292ZXJubWVudE93bmVkPmZh bHNlPC9uczE6aXNMb2NhbEdvdmVybm1lbnRPd25lZD4KICAgICAgICAgICAgICAg IDxuczE6aXNNdW5pY2lwYWxpdHlMb2NhbEdvdmVybm1lbnQ+ZmFsc2U8L25zMTpp c011bmljaXBhbGl0eUxvY2FsR292ZXJubWVudD4KICAgICAgICAgICAgICAgIDxu czE6aXNTY2hvb2xEaXN0cmljdExvY2FsR292ZXJubWVudD5mYWxzZTwvbnMxOmlz U2Nob29sRGlzdHJpY3RMb2NhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgICA8 bnMxOmlzVG93bnNoaXBMb2NhbEdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc1Rvd25z aGlwTG9jYWxHb3Zlcm5tZW50PjwvbnMxOmxvY2FsR292ZXJubWVudD4KICAgICAg ICAgICAgICA8bnMxOmlzVHJpYmFsR292ZXJubWVudD5mYWxzZTwvbnMxOmlzVHJp YmFsR292ZXJubWVudD4KICAgICAgICAgICAgICA8bnMxOmlzRm9yZWlnbkdvdmVy bm1lbnQ+ZmFsc2U8L25zMTppc0ZvcmVpZ25Hb3Zlcm5tZW50PgogICAgICAgICAg ICAgIDxuczE6YnVzaW5lc3NPck9yZ2FuaXphdGlvblR5cGU+CiAgICAgICAgICAg ICAgICA8bnMxOmlzQ29ycG9yYXRlRW50aXR5Tm90VGF4RXhlbXB0PmZhbHNlPC9u czE6aXNDb3Jwb3JhdGVFbnRpdHlOb3RUYXhFeGVtcHQ+CiAgICAgICAgICAgICAg ICA8bnMxOmlzQ29ycG9yYXRlRW50aXR5VGF4RXhlbXB0PmZhbHNlPC9uczE6aXND b3Jwb3JhdGVFbnRpdHlUYXhFeGVtcHQ+CiAgICAgICAgICAgICAgICA8bnMxOmlz UGFydG5lcnNoaXBPckxpbWl0ZWRMaWFiaWxpdHlQYXJ0bmVyc2hpcD5mYWxzZTwv bnMxOmlzUGFydG5lcnNoaXBPckxpbWl0ZWRMaWFiaWxpdHlQYXJ0bmVyc2hpcD4K ICAgICAgICAgICAgICAgIDxuczE6aXNTb2xlUHJvcHJlaXRvcnNoaXA+ZmFsc2U8 L25zMTppc1NvbGVQcm9wcmVpdG9yc2hpcD4KICAgICAgICAgICAgICAgIDxuczE6 aXNTbWFsbEFncmljdWx0dXJhbENvb3BlcmF0aXZlPmZhbHNlPC9uczE6aXNTbWFs bEFncmljdWx0dXJhbENvb3BlcmF0aXZlPgogICAgICAgICAgICAgICAgPG5zMTpp c0ludGVybmF0aW9uYWxPcmdhbml6YXRpb24+ZmFsc2U8L25zMTppc0ludGVybmF0 aW9uYWxPcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8bnMxOmlzVVNHb3Zl cm5tZW50RW50aXR5PmZhbHNlPC9uczE6aXNVU0dvdmVybm1lbnRFbnRpdHk+PC9u czE6YnVzaW5lc3NPck9yZ2FuaXphdGlvblR5cGU+PC9uczE6dmVuZG9yQnVzaW5l c3NUeXBlcz4KICAgICAgICAgICAgPG5zMTp2ZW5kb3JMaW5lT2ZCdXNpbmVzcz4K ICAgICAgICAgICAgICA8bnMxOmlzQ29tbXVuaXR5RGV2ZWxvcG1lbnRDb3Jwb3Jh dGlvbj5mYWxzZTwvbnMxOmlzQ29tbXVuaXR5RGV2ZWxvcG1lbnRDb3Jwb3JhdGlv bj4KICAgICAgICAgICAgICA8bnMxOmlzRG9tZXN0aWNTaGVsdGVyPmZhbHNlPC9u czE6aXNEb21lc3RpY1NoZWx0ZXI+CiAgICAgICAgICAgICAgPG5zMTppc0VkdWNh dGlvbmFsSW5zdGl0dXRpb24+ZmFsc2U8L25zMTppc0VkdWNhdGlvbmFsSW5zdGl0 dXRpb24+CiAgICAgICAgICAgICAgPG5zMTppc0ZvdW5kYXRpb24+ZmFsc2U8L25z MTppc0ZvdW5kYXRpb24+CiAgICAgICAgICAgICAgPG5zMTppc0hvc3BpdGFsPmZh bHNlPC9uczE6aXNIb3NwaXRhbD4KICAgICAgICAgICAgICA8bnMxOmlzTWFudWZh Y3R1cmVyT2ZHb29kcz5mYWxzZTwvbnMxOmlzTWFudWZhY3R1cmVyT2ZHb29kcz4K ICAgICAgICAgICAgICA8bnMxOmlzVmV0ZXJpbmFyeUhvc3BpdGFsPmZhbHNlPC9u czE6aXNWZXRlcmluYXJ5SG9zcGl0YWw+CiAgICAgICAgICAgICAgPG5zMTppc0hp c3BhbmljU2VydmljaW5nSW5zdGl0dXRpb24+ZmFsc2U8L25zMTppc0hpc3Bhbmlj U2VydmljaW5nSW5zdGl0dXRpb24+PC9uczE6dmVuZG9yTGluZU9mQnVzaW5lc3M+ CiAgICAgICAgICAgIDxuczE6dmVuZG9yUmVsYXRpb25zaGlwV2l0aEZlZGVyYWxH b3Zlcm5tZW50PgogICAgICAgICAgICAgIDxuczE6cmVjZWl2ZXNDb250cmFjdHM+ dHJ1ZTwvbnMxOnJlY2VpdmVzQ29udHJhY3RzPgogICAgICAgICAgICAgIDxuczE6 cmVjZWl2ZXNHcmFudHM+ZmFsc2U8L25zMTpyZWNlaXZlc0dyYW50cz4KICAgICAg ICAgICAgICA8bnMxOnJlY2VpdmVzQ29udHJhY3RzQW5kR3JhbnRzPmZhbHNlPC9u czE6cmVjZWl2ZXNDb250cmFjdHNBbmRHcmFudHM+PC9uczE6dmVuZG9yUmVsYXRp b25zaGlwV2l0aEZlZGVyYWxHb3Zlcm5tZW50PgogICAgICAgICAgICA8bnMxOnR5 cGVPZkdvdmVybm1lbnRFbnRpdHk+CiAgICAgICAgICAgICAgPG5zMTppc0FpcnBv cnRBdXRob3JpdHk+ZmFsc2U8L25zMTppc0FpcnBvcnRBdXRob3JpdHk+CiAgICAg ICAgICAgICAgPG5zMTppc0NvdW5jaWxPZkdvdmVybm1lbnRzPmZhbHNlPC9uczE6 aXNDb3VuY2lsT2ZHb3Zlcm5tZW50cz4KICAgICAgICAgICAgICA8bnMxOmlzSG91 c2luZ0F1dGhvcml0aWVzUHVibGljT3JUcmliYWw+ZmFsc2U8L25zMTppc0hvdXNp bmdBdXRob3JpdGllc1B1YmxpY09yVHJpYmFsPgogICAgICAgICAgICAgIDxuczE6 aXNJbnRlcnN0YXRlRW50aXR5PmZhbHNlPC9uczE6aXNJbnRlcnN0YXRlRW50aXR5 PgogICAgICAgICAgICAgIDxuczE6aXNQbGFubmluZ0NvbW1pc3Npb24+ZmFsc2U8 L25zMTppc1BsYW5uaW5nQ29tbWlzc2lvbj4KICAgICAgICAgICAgICA8bnMxOmlz UG9ydEF1dGhvcml0eT5mYWxzZTwvbnMxOmlzUG9ydEF1dGhvcml0eT4KICAgICAg ICAgICAgICA8bnMxOmlzVHJhbnNpdEF1dGhvcml0eT5mYWxzZTwvbnMxOmlzVHJh bnNpdEF1dGhvcml0eT48L25zMTp0eXBlT2ZHb3Zlcm5tZW50RW50aXR5PgogICAg ICAgICAgICA8bnMxOnZlbmRvck9yZ2FuaXphdGlvbkZhY3RvcnM+CiAgICAgICAg ICAgICAgPG5zMTppc1N1YmNoYXB0ZXJTQ29ycG9yYXRpb24+dHJ1ZTwvbnMxOmlz U3ViY2hhcHRlclNDb3Jwb3JhdGlvbj4KICAgICAgICAgICAgICA8bnMxOmlzTGlt aXRlZExpYWJpbGl0eUNvcnBvcmF0aW9uPmZhbHNlPC9uczE6aXNMaW1pdGVkTGlh YmlsaXR5Q29ycG9yYXRpb24+CiAgICAgICAgICAgICAgPG5zMTppc0ZvcmVpZ25P d25lZEFuZExvY2F0ZWQ+ZmFsc2U8L25zMTppc0ZvcmVpZ25Pd25lZEFuZExvY2F0 ZWQ+CiAgICAgICAgICAgICAgPG5zMTpwcm9maXRTdHJ1Y3R1cmU+CiAgICAgICAg ICAgICAgICA8bnMxOmlzRm9yUHJvZml0T3JnYW5pemF0aW9uPnRydWU8L25zMTpp c0ZvclByb2ZpdE9yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxuczE6aXNO b25wcm9maXRPcmdhbml6YXRpb24+ZmFsc2U8L25zMTppc05vbnByb2ZpdE9yZ2Fu aXphdGlvbj4KICAgICAgICAgICAgICAgIDxuczE6aXNPdGhlck5vdEZvclByb2Zp dE9yZ2FuaXphdGlvbj5mYWxzZTwvbnMxOmlzT3RoZXJOb3RGb3JQcm9maXRPcmdh bml6YXRpb24+PC9uczE6cHJvZml0U3RydWN0dXJlPgogICAgICAgICAgICAgIDxu czE6aXNTaGVsdGVyZWRXb3Jrc2hvcD5mYWxzZTwvbnMxOmlzU2hlbHRlcmVkV29y a3Nob3A+CiAgICAgICAgICAgICAgPG5zMTpvcmdhbml6YXRpb25hbFR5cGU+T1RI RVI8L25zMTpvcmdhbml6YXRpb25hbFR5cGU+CiAgICAgICAgICAgICAgPG5zMTpu dW1iZXJPZkVtcGxveWVlcz40PC9uczE6bnVtYmVyT2ZFbXBsb3llZXM+CiAgICAg ICAgICAgICAgPG5zMTphbm51YWxSZXZlbnVlPjIwMDAwMDA8L25zMTphbm51YWxS ZXZlbnVlPjwvbnMxOnZlbmRvck9yZ2FuaXphdGlvbkZhY3RvcnM+CiAgICAgICAg ICAgIDxuczE6dHlwZU9mRWR1Y2F0aW9uYWxFbnRpdHk+CiAgICAgICAgICAgICAg PG5zMTppczE4NjJMYW5kR3JhbnRDb2xsZWdlPmZhbHNlPC9uczE6aXMxODYyTGFu ZEdyYW50Q29sbGVnZT4KICAgICAgICAgICAgICA8bnMxOmlzMTg5MExhbmRHcmFu dENvbGxlZ2U+ZmFsc2U8L25zMTppczE4OTBMYW5kR3JhbnRDb2xsZWdlPgogICAg ICAgICAgICAgIDxuczE6aXMxOTk0TGFuZEdyYW50Q29sbGVnZT5mYWxzZTwvbnMx OmlzMTk5NExhbmRHcmFudENvbGxlZ2U+CiAgICAgICAgICAgICAgPG5zMTppc0hp c3RvcmljYWxseUJsYWNrQ29sbGVnZU9yVW5pdmVyc2l0eT5mYWxzZTwvbnMxOmlz SGlzdG9yaWNhbGx5QmxhY2tDb2xsZWdlT3JVbml2ZXJzaXR5PgogICAgICAgICAg ICAgIDxuczE6aXNNaW5vcml0eUluc3RpdHV0aW9uPmZhbHNlPC9uczE6aXNNaW5v cml0eUluc3RpdHV0aW9uPgogICAgICAgICAgICAgIDxuczE6aXNQcml2YXRlVW5p dmVyc2l0eU9yQ29sbGVnZT5mYWxzZTwvbnMxOmlzUHJpdmF0ZVVuaXZlcnNpdHlP ckNvbGxlZ2U+CiAgICAgICAgICAgICAgPG5zMTppc1NjaG9vbE9mRm9yZXN0cnk+ ZmFsc2U8L25zMTppc1NjaG9vbE9mRm9yZXN0cnk+CiAgICAgICAgICAgICAgPG5z MTppc1N0YXRlQ29udHJvbGxlZEluc3RpdHV0aW9ub2ZIaWdoZXJMZWFybmluZz5m YWxzZTwvbnMxOmlzU3RhdGVDb250cm9sbGVkSW5zdGl0dXRpb25vZkhpZ2hlckxl YXJuaW5nPgogICAgICAgICAgICAgIDxuczE6aXNUcmliYWxDb2xsZWdlPmZhbHNl PC9uczE6aXNUcmliYWxDb2xsZWdlPgogICAgICAgICAgICAgIDxuczE6aXNWZXRl cmluYXJ5Q29sbGVnZT5mYWxzZTwvbnMxOmlzVmV0ZXJpbmFyeUNvbGxlZ2U+CiAg ICAgICAgICAgICAgPG5zMTppc0FsYXNrYW5OYXRpdmVTZXJ2aWNpbmdJbnN0aXR1 dGlvbj5mYWxzZTwvbnMxOmlzQWxhc2thbk5hdGl2ZVNlcnZpY2luZ0luc3RpdHV0 aW9uPgogICAgICAgICAgICAgIDxuczE6aXNOYXRpdmVIYXdhaWlhblNlcnZpY2lu Z0luc3RpdHV0aW9uPmZhbHNlPC9uczE6aXNOYXRpdmVIYXdhaWlhblNlcnZpY2lu Z0luc3RpdHV0aW9uPjwvbnMxOnR5cGVPZkVkdWNhdGlvbmFsRW50aXR5PgogICAg ICAgICAgICA8bnMxOnZlbmRvckNlcnRpZmljYXRpb25zPgogICAgICAgICAgICAg IDxuczE6aXNET1RDZXJ0aWZpZWREaXNhZHZhbnRhZ2VkQnVzaW5lc3NFbnRlcnBy aXNlPmZhbHNlPC9uczE6aXNET1RDZXJ0aWZpZWREaXNhZHZhbnRhZ2VkQnVzaW5l c3NFbnRlcnByaXNlPgogICAgICAgICAgICAgIDxuczE6aXNTZWxmQ2VydGlmaWVk U21hbGxEaXNhZHZhbnRhZ2VkQnVzaW5lc3M+dHJ1ZTwvbnMxOmlzU2VsZkNlcnRp ZmllZFNtYWxsRGlzYWR2YW50YWdlZEJ1c2luZXNzPgogICAgICAgICAgICAgIDxu czE6aXNTQkFDZXJ0aWZpZWRTbWFsbERpc2FkdmFudGFnZWRCdXNpbmVzcz5mYWxz ZTwvbnMxOmlzU0JBQ2VydGlmaWVkU21hbGxEaXNhZHZhbnRhZ2VkQnVzaW5lc3M+ CiAgICAgICAgICAgICAgPG5zMTppc1NCQUNlcnRpZmllZDhBUHJvZ3JhbVBhcnRp Y2lwYW50PmZhbHNlPC9uczE6aXNTQkFDZXJ0aWZpZWQ4QVByb2dyYW1QYXJ0aWNp cGFudD4KICAgICAgICAgICAgICA8bnMxOmlzU2VsZkNlcnRpZmllZEhVQlpvbmVK b2ludFZlbnR1cmU+ZmFsc2U8L25zMTppc1NlbGZDZXJ0aWZpZWRIVUJab25lSm9p bnRWZW50dXJlPgogICAgICAgICAgICAgIDxuczE6aXNTQkFDZXJ0aWZpZWRIVUJa b25lPmZhbHNlPC9uczE6aXNTQkFDZXJ0aWZpZWRIVUJab25lPgogICAgICAgICAg ICAgIDxuczE6aXNTQkFDZXJ0aWZpZWQ4QUpvaW50VmVudHVyZT5mYWxzZTwvbnMx OmlzU0JBQ2VydGlmaWVkOEFKb2ludFZlbnR1cmU+PC9uczE6dmVuZG9yQ2VydGlm aWNhdGlvbnM+CiAgICAgICAgICAgIDxuczE6dmVuZG9yTG9jYXRpb24+CiAgICAg ICAgICAgICAgPG5zMTpzdHJlZXRBZGRyZXNzPjE0NTMwIFBBQ0lGSUMgQVZFPC9u czE6c3RyZWV0QWRkcmVzcz4KICAgICAgICAgICAgICA8bnMxOmNpdHk+QkFMRFdJ TiBQQVJLPC9uczE6Y2l0eT4KICAgICAgICAgICAgICA8bnMxOnN0YXRlIG5hbWU9 IkNBTElGT1JOSUEiPkNBPC9uczE6c3RhdGU+CiAgICAgICAgICAgICAgPG5zMTpa SVBDb2RlPjkxNzA2NTM0MDwvbnMxOlpJUENvZGU+CiAgICAgICAgICAgICAgPG5z MTpjb3VudHJ5Q29kZSBuYW1lPSJVTklURUQgU1RBVEVTIj5VU0E8L25zMTpjb3Vu dHJ5Q29kZT4KICAgICAgICAgICAgICA8bnMxOnBob25lTm8+NjI2OTYwMTMxNDwv bnMxOnBob25lTm8+CiAgICAgICAgICAgICAgPG5zMTpmYXhObz42MjY5NTYwNjE1 PC9uczE6ZmF4Tm8+CiAgICAgICAgICAgICAgPG5zMTpjb25ncmVzc2lvbmFsRGlz dHJpY3RDb2RlPjMyPC9uczE6Y29uZ3Jlc3Npb25hbERpc3RyaWN0Q29kZT48L25z MTp2ZW5kb3JMb2NhdGlvbj4KICAgICAgICAgICAgPG5zMTp2ZW5kb3JTaXRlQ29k ZT45Njk5MDc5MTQ8L25zMTp2ZW5kb3JTaXRlQ29kZT4KICAgICAgICAgICAgPG5z MTp2ZW5kb3JBbHRlcm5hdGVTaXRlQ29kZT45MTcwNjUzNDA8L25zMTp2ZW5kb3JB bHRlcm5hdGVTaXRlQ29kZT4KICAgICAgICAgICAgPG5zMTp2ZW5kb3JEVU5TSW5m b3JtYXRpb24+CiAgICAgICAgICAgICAgPG5zMTpEVU5TTnVtYmVyPjk2OTkwNzkx NDwvbnMxOkRVTlNOdW1iZXI+CiAgICAgICAgICAgICAgPG5zMTp2ZW5kb3JOYW1l PkRJTFRFWCBJTkM8L25zMTp2ZW5kb3JOYW1lPgogICAgICAgICAgICAgIDxuczE6 Z2xvYmFsUGFyZW50RFVOU051bWJlcj45Njk5MDc5MTQ8L25zMTpnbG9iYWxQYXJl bnREVU5TTnVtYmVyPgogICAgICAgICAgICAgIDxuczE6Z2xvYmFsUGFyZW50RFVO U05hbWU+RElMVEVYIElOQzwvbnMxOmdsb2JhbFBhcmVudERVTlNOYW1lPjwvbnMx OnZlbmRvckRVTlNJbmZvcm1hdGlvbj4KICAgICAgICAgICAgPG5zMTpjY3JSZWdp c3RyYXRpb25EZXRhaWxzPgogICAgICAgICAgICAgIDxuczE6cmVnaXN0cmF0aW9u RGF0ZT4yMDA1LTEwLTAyIDAwOjAwOjAwPC9uczE6cmVnaXN0cmF0aW9uRGF0ZT4K ICAgICAgICAgICAgICA8bnMxOnJlbmV3YWxEYXRlPjIwMTEtMDEtMTIgMDA6MDA6 MDA8L25zMTpyZW5ld2FsRGF0ZT48L25zMTpjY3JSZWdpc3RyYXRpb25EZXRhaWxz PjwvbnMxOnZlbmRvclNpdGVEZXRhaWxzPgogICAgICAgICAgPG5zMTpjb250cmFj dGluZ09mZmljZXJCdXNpbmVzc1NpemVEZXRlcm1pbmF0aW9uIGRlc2NyaXB0aW9u PSJTTUFMTCBCVVNJTkVTUyI+UzwvbnMxOmNvbnRyYWN0aW5nT2ZmaWNlckJ1c2lu ZXNzU2l6ZURldGVybWluYXRpb24+PC9uczE6dmVuZG9yPgogICAgICAgIDxuczE6 cGxhY2VPZlBlcmZvcm1hbmNlPgogICAgICAgICAgPG5zMTpwcmluY2lwYWxQbGFj ZU9mUGVyZm9ybWFuY2U+CiAgICAgICAgICAgIDxuczE6c3RhdGVDb2RlIG5hbWU9 Ik1JU1NPVVJJIj5NTzwvbnMxOnN0YXRlQ29kZT4KICAgICAgICAgICAgPG5zMTpj b3VudHJ5Q29kZSBuYW1lPSJVTklURUQgU1RBVEVTIj5VU0E8L25zMTpjb3VudHJ5 Q29kZT48L25zMTpwcmluY2lwYWxQbGFjZU9mUGVyZm9ybWFuY2U+CiAgICAgICAg ICA8bnMxOnBsYWNlT2ZQZXJmb3JtYW5jZVpJUENvZGUgY291bnR5PSJKQUNLU09O IiBjaXR5PSJLQU5TQVMgQ0lUWSI+NjQxNDcxMjA4PC9uczE6cGxhY2VPZlBlcmZv cm1hbmNlWklQQ29kZT4KICAgICAgICAgIDxuczE6cGxhY2VPZlBlcmZvcm1hbmNl Q29uZ3Jlc3Npb25hbERpc3RyaWN0PjA1PC9uczE6cGxhY2VPZlBlcmZvcm1hbmNl Q29uZ3Jlc3Npb25hbERpc3RyaWN0PjwvbnMxOnBsYWNlT2ZQZXJmb3JtYW5jZT4K ICAgICAgICA8bnMxOmNvbXBldGl0aW9uPgogICAgICAgICAgPG5zMTpleHRlbnRD b21wZXRlZCBkZXNjcmlwdGlvbj0iRlVMTCBBTkQgT1BFTiBDT01QRVRJVElPTiBB RlRFUiBFWENMVVNJT04gT0YgU09VUkNFUyI+RDwvbnMxOmV4dGVudENvbXBldGVk PgogICAgICAgICAgPG5zMTpzb2xpY2l0YXRpb25Qcm9jZWR1cmVzIGRlc2NyaXB0 aW9uPSJORUdPVElBVEVEIFBST1BPU0FML1FVT1RFIj5OUDwvbnMxOnNvbGljaXRh dGlvblByb2NlZHVyZXM+CiAgICAgICAgICA8bnMxOnR5cGVPZlNldEFzaWRlIGRl c2NyaXB0aW9uPSJTTUFMTCBCVVNJTkVTUyBTRVQgQVNJREUgLSBUT1RBTCI+U0JB PC9uczE6dHlwZU9mU2V0QXNpZGU+CiAgICAgICAgICA8bnMxOmV2YWx1YXRlZFBy ZWZlcmVuY2UgZGVzY3JpcHRpb249Ik5PIFBSRUZFUkVOQ0UgVVNFRCI+Tk9ORTwv bnMxOmV2YWx1YXRlZFByZWZlcmVuY2U+CiAgICAgICAgICA8bnMxOm51bWJlck9m T2ZmZXJzUmVjZWl2ZWQ+MjwvbnMxOm51bWJlck9mT2ZmZXJzUmVjZWl2ZWQ+CiAg ICAgICAgICA8bnMxOmNvbW1lcmNpYWxJdGVtQWNxdWlzaXRpb25Qcm9jZWR1cmVz IGRlc2NyaXB0aW9uPSJDT01NRVJDSUFMIElURU0iPkE8L25zMTpjb21tZXJjaWFs SXRlbUFjcXVpc2l0aW9uUHJvY2VkdXJlcz4KICAgICAgICAgIDxuczE6Y29tbWVy Y2lhbEl0ZW1UZXN0UHJvZ3JhbSBkZXNjcmlwdGlvbj0iTk8iPk48L25zMTpjb21t ZXJjaWFsSXRlbVRlc3RQcm9ncmFtPgogICAgICAgICAgPG5zMTpzbWFsbEJ1c2lu ZXNzQ29tcGV0aXRpdmVuZXNzRGVtb25zdHJhdGlvblByb2dyYW0+ZmFsc2U8L25z MTpzbWFsbEJ1c2luZXNzQ29tcGV0aXRpdmVuZXNzRGVtb25zdHJhdGlvblByb2dyYW0+ CiAgICAgICAgICA8bnMxOkE3NkFjdGlvbiBkZXNjcmlwdGlvbj0iTk8iPk48L25z MTpBNzZBY3Rpb24+CiAgICAgICAgICA8bnMxOmZlZEJpek9wcHMgZGVzY3JpcHRp b249Ik5PVCBBUFBMSUNBQkxFIj5YPC9uczE6ZmVkQml6T3Bwcz4KICAgICAgICAg IDxuczE6bG9jYWxBcmVhU2V0QXNpZGUgZGVzY3JpcHRpb249Ik5PIj5OPC9uczE6 bG9jYWxBcmVhU2V0QXNpZGU+CiAgICAgICAgICA8bnMxOnByaWNlRXZhbHVhdGlv blBlcmNlbnREaWZmZXJlbmNlPjAuMDA8L25zMTpwcmljZUV2YWx1YXRpb25QZXJj ZW50RGlmZmVyZW5jZT48L25zMTpjb21wZXRpdGlvbj4KICAgICAgICA8bnMxOnBy ZWZlcmVuY2VQcm9ncmFtcz4KICAgICAgICAgIDxuczE6c3ViY29udHJhY3RQbGFu IGRlc2NyaXB0aW9uPSJQTEFOIE5PVCBSRVFVSVJFRCAiPkI8L25zMTpzdWJjb250 cmFjdFBsYW4+PC9uczE6cHJlZmVyZW5jZVByb2dyYW1zPgogICAgICAgIDxuczE6 dHJhbnNhY3Rpb25JbmZvcm1hdGlvbj4KICAgICAgICAgIDxuczE6Y3JlYXRlZEJ5 PkpVRFkuUlVQQVJELk02NzM4NkBVU01DLk1JTDwvbnMxOmNyZWF0ZWRCeT4KICAg ICAgICAgIDxuczE6Y3JlYXRlZERhdGU+MjAxMC0wNS0xOCAwODo1OTowNzwvbnMx OmNyZWF0ZWREYXRlPgogICAgICAgICAgPG5zMTpsYXN0TW9kaWZpZWRCeT5ET0Rf Q0xPU0VPVVQ8L25zMTpsYXN0TW9kaWZpZWRCeT4KICAgICAgICAgIDxuczE6bGFz dE1vZGlmaWVkRGF0ZT4yMDE3LTExLTI5IDIzOjM2OjQyPC9uczE6bGFzdE1vZGlm aWVkRGF0ZT4KICAgICAgICAgIDxuczE6c3RhdHVzIGRlc2NyaXB0aW9uPSJGSU5B TCI+RjwvbnMxOnN0YXR1cz4KICAgICAgICAgIDxuczE6YXBwcm92ZWRCeT5BTkRS RUEuTEVBQ0guTTY3Mzg2QFVTTUMuTUlMPC9uczE6YXBwcm92ZWRCeT4KICAgICAg ICAgIDxuczE6YXBwcm92ZWREYXRlPjIwMTAtMDUtMTggMTA6MDQ6MTI8L25zMTph cHByb3ZlZERhdGU+CiAgICAgICAgICA8bnMxOmNsb3NlZEJ5PkRPRF9DTE9TRU9V VDwvbnMxOmNsb3NlZEJ5PgogICAgICAgICAgPG5zMTpjbG9zZWREYXRlPjIwMTct MTEtMjkgMjM6MzY6NDI8L25zMTpjbG9zZWREYXRlPgogICAgICAgICAgPG5zMTpj bG9zZWRTdGF0dXM+WTwvbnMxOmNsb3NlZFN0YXR1cz48L25zMTp0cmFuc2FjdGlv bkluZm9ybWF0aW9uPjwvbnMxOmF3YXJkPgogICAgPC9jb250ZW50PgogIDwvZW50 cnk+CiAgPGVudHJ5PgogICAgPHRpdGxlPjwhW0NEQVRBW05ldyBQVVJDSEFTRSBP UkRFUiBBRzY0V0NQMTQwMDgzIGF3YXJkZWQgdG8gU09GVENIT0lDRSBDT1JQT1JB VElPTiBmb3IgdGhlIGFtb3VudCBvZiAkMjE2XV0+PC90aXRsZT4KICAgIDxsaW5r IHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJ0ZXh0L2h0bWwiIGhyZWY9Imh0dHBzOi8v d3d3LmZwZHMuZ292L2V6c2VhcmNoL3NlYXJjaC5kbz9zPUZQRFMmYW1wO2luZGV4 TmFtZT1hd2FyZGZ1bGwmYW1wO3RlbXBsYXRlTmFtZT0xLjUuMSZhbXA7cT1BRzY0 V0NQMTQwMDgzKzEyMDUrIj48L2xpbms+CiAgICA8bW9kaWZpZWQ+MjAxNC0wNi0y OSAxMjozNzo1NzwvbW9kaWZpZWQ+CiAgICA8Y29udGVudCB4bWxuczpuczE9Imh0 dHBzOi8vd3d3LmZwZHMuZ292L0ZQRFMiIHR5cGU9ImFwcGxpY2F0aW9uL3htbCI+ CiAgICAgIDxuczE6YXdhcmQgeG1sbnM6bnMxPSJodHRwOi8vd3d3LmZwZHNuZy5j b20vRlBEUyIgdmVyc2lvbj0iMS40Ij4KICAgICAgICA8bnMxOmF3YXJkSUQ+CiAg ICAgICAgICA8bnMxOmF3YXJkQ29udHJhY3RJRD4KICAgICAgICAgICAgPG5zMTph Z2VuY3lJRCBuYW1lPSJVU0RBLCBPRkZJQ0UgT0YgVEhFIENISUVGIEZJTkFOQ0lB TCBPRkZJQ0VSIj4xMjA1PC9uczE6YWdlbmN5SUQ+CiAgICAgICAgICAgIDxuczE6 UElJRD5BRzY0V0NQMTQwMDgzPC9uczE6UElJRD4KICAgICAgICAgICAgPG5zMTpt b2ROdW1iZXI+MDwvbnMxOm1vZE51bWJlcj4KICAgICAgICAgICAgPG5zMTp0cmFu c2FjdGlvbk51bWJlcj4wPC9uczE6dHJhbnNhY3Rpb25OdW1iZXI+PC9uczE6YXdh cmRDb250cmFjdElEPjwvbnMxOmF3YXJkSUQ+CiAgICAgICAgPG5zMTpyZWxldmFu dENvbnRyYWN0RGF0ZXM+CiAgICAgICAgICA8bnMxOnNpZ25lZERhdGU+MjAxNC0w Ni0yOSAwMDowMDowMDwvbnMxOnNpZ25lZERhdGU+CiAgICAgICAgICA8bnMxOmVm ZmVjdGl2ZURhdGU+MjAxNC0wNi0yNyAwMDowMDowMDwvbnMxOmVmZmVjdGl2ZURh dGU+CiAgICAgICAgICA8bnMxOmN1cnJlbnRDb21wbGV0aW9uRGF0ZT4yMDE1LTA2 LTMwIDAwOjAwOjAwPC9uczE6Y3VycmVudENvbXBsZXRpb25EYXRlPgogICAgICAg ICAgPG5zMTp1bHRpbWF0ZUNvbXBsZXRpb25EYXRlPjIwMTUtMDYtMzAgMDA6MDA6 MDA8L25zMTp1bHRpbWF0ZUNvbXBsZXRpb25EYXRlPjwvbnMxOnJlbGV2YW50Q29u dHJhY3REYXRlcz4KICAgICAgICA8bnMxOmRvbGxhclZhbHVlcz4KICAgICAgICAg IDxuczE6b2JsaWdhdGVkQW1vdW50PjIxNi4wMDwvbnMxOm9ibGlnYXRlZEFtb3Vu dD4KICAgICAgICAgIDxuczE6YmFzZUFuZEV4ZXJjaXNlZE9wdGlvbnNWYWx1ZT4y MTYuMDA8L25zMTpiYXNlQW5kRXhlcmNpc2VkT3B0aW9uc1ZhbHVlPgogICAgICAg ICAgPG5zMTpiYXNlQW5kQWxsT3B0aW9uc1ZhbHVlPjIxNi4wMDwvbnMxOmJhc2VB bmRBbGxPcHRpb25zVmFsdWU+PC9uczE6ZG9sbGFyVmFsdWVzPgogICAgICAgIDxu czE6dG90YWxEb2xsYXJWYWx1ZXM+CiAgICAgICAgICA8bnMxOnRvdGFsT2JsaWdh dGVkQW1vdW50PjIxNi4wMDwvbnMxOnRvdGFsT2JsaWdhdGVkQW1vdW50PgogICAg ICAgICAgPG5zMTp0b3RhbEJhc2VBbmRFeGVyY2lzZWRPcHRpb25zVmFsdWU+MjE2 LjAwPC9uczE6dG90YWxCYXNlQW5kRXhlcmNpc2VkT3B0aW9uc1ZhbHVlPgogICAg ICAgICAgPG5zMTp0b3RhbEJhc2VBbmRBbGxPcHRpb25zVmFsdWU+MjE2LjAwPC9u czE6dG90YWxCYXNlQW5kQWxsT3B0aW9uc1ZhbHVlPjwvbnMxOnRvdGFsRG9sbGFy VmFsdWVzPgogICAgICAgIDxuczE6cHVyY2hhc2VySW5mb3JtYXRpb24+CiAgICAg ICAgICA8bnMxOmNvbnRyYWN0aW5nT2ZmaWNlQWdlbmN5SUQgbmFtZT0iVVNEQSwg T0ZGSUNFIE9GIFRIRSBDSElFRiBGSU5BTkNJQUwgT0ZGSUNFUiIgZGVwYXJ0bWVu dElEPSIxMjAwIiBkZXBhcnRtZW50TmFtZT0iQUdSSUNVTFRVUkUsIERFUEFSVE1F TlQgT0YiPjEyMDU8L25zMTpjb250cmFjdGluZ09mZmljZUFnZW5jeUlEPgogICAg ICAgICAgPG5zMTpjb250cmFjdGluZ09mZmljZUlEIG5hbWU9IlVTREEsIE9DSU8s IE5BVElPTkFMIElORk9STUFUSU9OIFRFQ0hOT0xPR1kgQ0VOVEVSIiBjb3VudHJ5 PSJVU0EiPjY0V0M8L25zMTpjb250cmFjdGluZ09mZmljZUlEPgogICAgICAgICAg PG5zMTpmdW5kaW5nUmVxdWVzdGluZ0FnZW5jeUlEIG5hbWU9IlVTREEsIE9GRklD RSBPRiBUSEUgQ0hJRUYgSU5GT1JNQVRJT04gT0ZGSUNFUiIgZGVwYXJ0bWVudElE PSIxMjAwIiBkZXBhcnRtZW50TmFtZT0iQUdSSUNVTFRVUkUsIERFUEFSVE1FTlQg T0YiPjEyQTc8L25zMTpmdW5kaW5nUmVxdWVzdGluZ0FnZW5jeUlEPgogICAgICAg ICAgPG5zMTpmdW5kaW5nUmVxdWVzdGluZ09mZmljZUlEIG5hbWU9IlVTREEsIE9D SU8sIE5BVElPTkFMIElORk9STUFUSU9OIFRFQ0hOT0xPR1kgQ0VOVEVSIj42NFdD PC9uczE6ZnVuZGluZ1JlcXVlc3RpbmdPZmZpY2VJRD4KICAgICAgICAgIDxuczE6 Zm9yZWlnbkZ1bmRpbmcgZGVzY3JpcHRpb249Ik5PVCBBUFBMSUNBQkxFIj5YPC9u czE6Zm9yZWlnbkZ1bmRpbmc+PC9uczE6cHVyY2hhc2VySW5mb3JtYXRpb24+CiAg ICAgICAgPG5zMTpjb250cmFjdE1hcmtldGluZ0RhdGE+CiAgICAgICAgICA8bnMx OmZlZVBhaWRGb3JVc2VPZlNlcnZpY2U+MC4wMDwvbnMxOmZlZVBhaWRGb3JVc2VP ZlNlcnZpY2U+PC9uczE6Y29udHJhY3RNYXJrZXRpbmdEYXRhPgogICAgICAgIDxu czE6Y29udHJhY3REYXRhPgogICAgICAgICAgPG5zMTpjb250cmFjdEFjdGlvblR5 cGUgZGVzY3JpcHRpb249IlBVUkNIQVNFIE9SREVSIj5CPC9uczE6Y29udHJhY3RB Y3Rpb25UeXBlPgogICAgICAgICAgPG5zMTp0eXBlT2ZDb250cmFjdFByaWNpbmcg ZGVzY3JpcHRpb249IkZJUk0gRklYRUQgUFJJQ0UiPko8L25zMTp0eXBlT2ZDb250 cmFjdFByaWNpbmc+CiAgICAgICAgICA8bnMxOm1ham9yUHJvZ3JhbUNvZGU+UEwg U1FMIERFVkVMT1BFUiBTRlRXIFJFTkVXQUw8L25zMTptYWpvclByb2dyYW1Db2Rl PgogICAgICAgICAgPG5zMTpuYXRpb25hbEludGVyZXN0QWN0aW9uQ29kZSBkZXNj cmlwdGlvbj0iTk9ORSI+Tk9ORTwvbnMxOm5hdGlvbmFsSW50ZXJlc3RBY3Rpb25D b2RlPgogICAgICAgICAgPG5zMTpkZXNjcmlwdGlvbk9mQ29udHJhY3RSZXF1aXJl bWVudD5JR0Y6Ok9UOjpJR0YKClBML1NRTCBERVZFTE9QRVIgTElDRU5TRVMgQU5O VUFMIFNFUlZJQ0UgQ09OVFJBQ1QgLSA2IFVTRVJTIEUtRE9XTkxPQUQsIFBBUlQg UlYxNTU1ICM1MjY2LjYKCldBSVZFUjogRlkxNC1SRU5FV0FMIFIxNDMxOCwgQ08t SkFEQU1TLCBQVVJDSEFTRSBDQVJELCBTT0ZUQ0hPSUNFPC9uczE6ZGVzY3JpcHRp b25PZkNvbnRyYWN0UmVxdWlyZW1lbnQ+CiAgICAgICAgICA8bnMxOmluaGVyZW50 bHlHb3Zlcm5tZW50YWxGdW5jdGlvbiBkZXNjcmlwdGlvbj0iT1RIRVIgRlVOQ1RJ T05TIj5PVDwvbnMxOmluaGVyZW50bHlHb3Zlcm5tZW50YWxGdW5jdGlvbj4KICAg ICAgICAgIDxuczE6R0ZFLUdGUCBkZXNjcmlwdGlvbj0iVHJhbnNhY3Rpb24gZG9l cyBub3QgdXNlIEdGRS9HRlAiPk48L25zMTpHRkUtR0ZQPgogICAgICAgICAgPG5z MTp1bmRlZmluaXRpemVkQWN0aW9uIGRlc2NyaXB0aW9uPSJOTyI+WDwvbnMxOnVu ZGVmaW5pdGl6ZWRBY3Rpb24+CiAgICAgICAgICA8bnMxOmNvbnNvbGlkYXRlZENv bnRyYWN0IGRlc2NyaXB0aW9uPSJOTyI+TjwvbnMxOmNvbnNvbGlkYXRlZENvbnRy YWN0PgogICAgICAgICAgPG5zMTpwZXJmb3JtYW5jZUJhc2VkU2VydmljZUNvbnRy YWN0IGRlc2NyaXB0aW9uPSJOTyAtIFNFUlZJQ0UgV0hFUkUgUEJBIElTIE5PVCBV U0VELiI+TjwvbnMxOnBlcmZvcm1hbmNlQmFzZWRTZXJ2aWNlQ29udHJhY3Q+CiAg ICAgICAgICA8bnMxOmNvbnRpbmdlbmN5SHVtYW5pdGFyaWFuUGVhY2VrZWVwaW5n T3BlcmF0aW9uIGRlc2NyaXB0aW9uPSJOT1QgQVBQTElDQUJMRSI+WDwvbnMxOmNv bnRpbmdlbmN5SHVtYW5pdGFyaWFuUGVhY2VrZWVwaW5nT3BlcmF0aW9uPgogICAg ICAgICAgPG5zMTpsaXN0T2ZUcmVhc3VyeUFjY291bnRzPgogICAgICAgICAgICA8 bnMxOnRyZWFzdXJ5QWNjb3VudD4KICAgICAgICAgICAgICA8bnMxOnRyZWFzdXJ5 QWNjb3VudFN5bWJvbD4KICAgICAgICAgICAgICAgIDxuczE6YWdlbmN5SWRlbnRp Zmllcj4xMjwvbnMxOmFnZW5jeUlkZW50aWZpZXI+CiAgICAgICAgICAgICAgICA8 bnMxOm1haW5BY2NvdW50Q29kZT40NjA5PC9uczE6bWFpbkFjY291bnRDb2RlPjwv bnMxOnRyZWFzdXJ5QWNjb3VudFN5bWJvbD48L25zMTp0cmVhc3VyeUFjY291bnQ+ PC9uczE6bGlzdE9mVHJlYXN1cnlBY2NvdW50cz4KICAgICAgICAgIDxuczE6cHVy Y2hhc2VDYXJkQXNQYXltZW50TWV0aG9kIGRlc2NyaXB0aW9uPSJZRVMiPlk8L25z MTpwdXJjaGFzZUNhcmRBc1BheW1lbnRNZXRob2Q+CiAgICAgICAgICA8bnMxOm51 bWJlck9mQWN0aW9ucz4xPC9uczE6bnVtYmVyT2ZBY3Rpb25zPjwvbnMxOmNvbnRy YWN0RGF0YT4KICAgICAgICA8bnMxOmxlZ2lzbGF0aXZlTWFuZGF0ZXM+CiAgICAg ICAgICA8bnMxOkNsaW5nZXJDb2hlbkFjdCBkZXNjcmlwdGlvbj0iTk8iPk48L25z MTpDbGluZ2VyQ29oZW5BY3Q+CiAgICAgICAgICA8bnMxOm1hdGVyaWFsc1N1cHBs aWVzQXJ0aWNsZXNFcXVpcG1lbnQgZGVzY3JpcHRpb249Ik5PIj5OPC9uczE6bWF0 ZXJpYWxzU3VwcGxpZXNBcnRpY2xlc0VxdWlwbWVudD4KICAgICAgICAgIDxuczE6 bGFib3JTdGFuZGFyZHMgZGVzY3JpcHRpb249Ik5PIj5OPC9uczE6bGFib3JTdGFu ZGFyZHM+CiAgICAgICAgICA8bnMxOmNvbnN0cnVjdGlvbldhZ2VSYXRlUmVxdWly ZW1lbnRzIGRlc2NyaXB0aW9uPSJOTyI+TjwvbnMxOmNvbnN0cnVjdGlvbldhZ2VS YXRlUmVxdWlyZW1lbnRzPgogICAgICAgICAgPG5zMTpsaXN0T2ZBZGRpdGlvbmFs UmVwb3J0aW5nVmFsdWVzPjwvbnMxOmxpc3RPZkFkZGl0aW9uYWxSZXBvcnRpbmdW YWx1ZXM+CiAgICAgICAgICA8bnMxOmludGVyYWdlbmN5Q29udHJhY3RpbmdBdXRo b3JpdHkgZGVzY3JpcHRpb249Ik5PVCBBUFBMSUNBQkxFIj5YPC9uczE6aW50ZXJh Z2VuY3lDb250cmFjdGluZ0F1dGhvcml0eT48L25zMTpsZWdpc2xhdGl2ZU1hbmRh dGVzPgogICAgICAgIDxuczE6cHJvZHVjdE9yU2VydmljZUluZm9ybWF0aW9uPgog ICAgICAgICAgPG5zMTpwcm9kdWN0T3JTZXJ2aWNlQ29kZSBkZXNjcmlwdGlvbj0i SVQgQU5EIFRFTEVDT00tIEFOTlVBTCBTT0ZUV0FSRSBNQUlOVEVOQU5DRSBTRVJW SUNFIFBMQU5TIiBwcm9kdWN0T3JTZXJ2aWNlVHlwZT0iU0VSVklDRSI+RDMxOTwv bnMxOnByb2R1Y3RPclNlcnZpY2VDb2RlPgogICAgICAgICAgPG5zMTpjb250cmFj dEJ1bmRsaW5nIGRlc2NyaXB0aW9uPSJOT1QgQSBCVU5ETEVEIFJFUVVJUkVNRU5U Ij5EPC9uczE6Y29udHJhY3RCdW5kbGluZz4KICAgICAgICAgIDxuczE6cHJpbmNp cGFsTkFJQ1NDb2RlIGRlc2NyaXB0aW9uPSJPVEhFUiBDT01QVVRFUiBSRUxBVEVE IFNFUlZJQ0VTIj41NDE1MTk8L25zMTpwcmluY2lwYWxOQUlDU0NvZGU+CiAgICAg ICAgICA8bnMxOnJlY292ZXJlZE1hdGVyaWFsQ2xhdXNlcyBkZXNjcmlwdGlvbj0i Tk8gQ0xBVVNFUyBJTkNMVURFRCBBTkQgTk8gU1VTVEFJTkFCSUxJVFkgSU5DTFVE RUQiPkM8L25zMTpyZWNvdmVyZWRNYXRlcmlhbENsYXVzZXM+CiAgICAgICAgICA8 bnMxOm1hbnVmYWN0dXJpbmdPcmdhbml6YXRpb25UeXBlIGRlc2NyaXB0aW9uPSJV LlMuIE9XTkVEIEJVU0lORVNTIj5BPC9uczE6bWFudWZhY3R1cmluZ09yZ2FuaXph dGlvblR5cGU+CiAgICAgICAgICA8bnMxOnVzZU9mRVBBRGVzaWduYXRlZFByb2R1 Y3RzIGRlc2NyaXB0aW9uPSJOT1QgUkVRVUlSRUQiPkU8L25zMTp1c2VPZkVQQURl c2lnbmF0ZWRQcm9kdWN0cz4KICAgICAgICAgIDxuczE6Y291bnRyeU9mT3JpZ2lu IG5hbWU9IlVOSVRFRCBTVEFURVMiPlVTQTwvbnMxOmNvdW50cnlPZk9yaWdpbj4K ICAgICAgICAgIDxuczE6cGxhY2VPZk1hbnVmYWN0dXJlIGRlc2NyaXB0aW9uPSJO T1QgQSBNQU5VRkFDVFVSRUQgRU5EIFBST0RVQ1QiPkM8L25zMTpwbGFjZU9mTWFu dWZhY3R1cmU+PC9uczE6cHJvZHVjdE9yU2VydmljZUluZm9ybWF0aW9uPgogICAg ICAgIDxuczE6dmVuZG9yPgogICAgICAgICAgPG5zMTp2ZW5kb3JIZWFkZXI+CiAg ICAgICAgICAgIDxuczE6dmVuZG9yTmFtZT5TT0ZUQ0hPSUNFIENPUlBPUkFUSU9O PC9uczE6dmVuZG9yTmFtZT48L25zMTp2ZW5kb3JIZWFkZXI+CiAgICAgICAgICA8 bnMxOnZlbmRvclNpdGVEZXRhaWxzPgogICAgICAgICAgICA8bnMxOnZlbmRvclNv Y2lvRWNvbm9taWNJbmRpY2F0b3JzPgogICAgICAgICAgICAgIDxuczE6aXNBbGFz a2FuTmF0aXZlT3duZWRDb3Jwb3JhdGlvbk9yRmlybT5mYWxzZTwvbnMxOmlzQWxh c2thbk5hdGl2ZU93bmVkQ29ycG9yYXRpb25PckZpcm0+CiAgICAgICAgICAgICAg PG5zMTppc0FtZXJpY2FuSW5kaWFuT3duZWQ+ZmFsc2U8L25zMTppc0FtZXJpY2Fu SW5kaWFuT3duZWQ+CiAgICAgICAgICAgICAgPG5zMTppc0luZGlhblRyaWJlPmZh bHNlPC9uczE6aXNJbmRpYW5UcmliZT4KICAgICAgICAgICAgICA8bnMxOmlzTmF0 aXZlSGF3YWlpYW5Pd25lZE9yZ2FuaXphdGlvbk9yRmlybT5mYWxzZTwvbnMxOmlz TmF0aXZlSGF3YWlpYW5Pd25lZE9yZ2FuaXphdGlvbk9yRmlybT4KICAgICAgICAg ICAgICA8bnMxOmlzVHJpYmFsbHlPd25lZEZpcm0+ZmFsc2U8L25zMTppc1RyaWJh bGx5T3duZWRGaXJtPgogICAgICAgICAgICAgIDxuczE6aXNWZXRlcmFuT3duZWQ+ ZmFsc2U8L25zMTppc1ZldGVyYW5Pd25lZD4KICAgICAgICAgICAgICA8bnMxOmlz U2VydmljZVJlbGF0ZWREaXNhYmxlZFZldGVyYW5Pd25lZEJ1c2luZXNzPmZhbHNl PC9uczE6aXNTZXJ2aWNlUmVsYXRlZERpc2FibGVkVmV0ZXJhbk93bmVkQnVzaW5l c3M+CiAgICAgICAgICAgICAgPG5zMTppc1dvbWVuT3duZWQ+ZmFsc2U8L25zMTpp c1dvbWVuT3duZWQ+CiAgICAgICAgICAgICAgPG5zMTptaW5vcml0eU93bmVkPgog ICAgICAgICAgICAgICAgPG5zMTppc01pbm9yaXR5T3duZWQ+ZmFsc2U8L25zMTpp c01pbm9yaXR5T3duZWQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzU3ViQ29udGlu ZW50QXNpYW5BbWVyaWNhbk93bmVkQnVzaW5lc3M+ZmFsc2U8L25zMTppc1N1YkNv bnRpbmVudEFzaWFuQW1lcmljYW5Pd25lZEJ1c2luZXNzPgogICAgICAgICAgICAg ICAgPG5zMTppc0FzaWFuUGFjaWZpY0FtZXJpY2FuT3duZWRCdXNpbmVzcz5mYWxz ZTwvbnMxOmlzQXNpYW5QYWNpZmljQW1lcmljYW5Pd25lZEJ1c2luZXNzPgogICAg ICAgICAgICAgICAgPG5zMTppc0JsYWNrQW1lcmljYW5Pd25lZEJ1c2luZXNzPmZh bHNlPC9uczE6aXNCbGFja0FtZXJpY2FuT3duZWRCdXNpbmVzcz4KICAgICAgICAg ICAgICAgIDxuczE6aXNIaXNwYW5pY0FtZXJpY2FuT3duZWRCdXNpbmVzcz5mYWxz ZTwvbnMxOmlzSGlzcGFuaWNBbWVyaWNhbk93bmVkQnVzaW5lc3M+CiAgICAgICAg ICAgICAgICA8bnMxOmlzTmF0aXZlQW1lcmljYW5Pd25lZEJ1c2luZXNzPmZhbHNl PC9uczE6aXNOYXRpdmVBbWVyaWNhbk93bmVkQnVzaW5lc3M+CiAgICAgICAgICAg ICAgICA8bnMxOmlzT3RoZXJNaW5vcml0eU93bmVkPmZhbHNlPC9uczE6aXNPdGhl ck1pbm9yaXR5T3duZWQ+PC9uczE6bWlub3JpdHlPd25lZD4KICAgICAgICAgICAg ICA8bnMxOmlzVmVyeVNtYWxsQnVzaW5lc3M+ZmFsc2U8L25zMTppc1ZlcnlTbWFs bEJ1c2luZXNzPgogICAgICAgICAgICAgIDxuczE6aXNXb21lbk93bmVkU21hbGxC dXNpbmVzcz5mYWxzZTwvbnMxOmlzV29tZW5Pd25lZFNtYWxsQnVzaW5lc3M+CiAg ICAgICAgICAgICAgPG5zMTppc0Vjb25vbWljYWxseURpc2FkdmFudGFnZWRXb21l bk93bmVkU21hbGxCdXNpbmVzcz5mYWxzZTwvbnMxOmlzRWNvbm9taWNhbGx5RGlz YWR2YW50YWdlZFdvbWVuT3duZWRTbWFsbEJ1c2luZXNzPgogICAgICAgICAgICAg IDxuczE6aXNKb2ludFZlbnR1cmVXb21lbk93bmVkU21hbGxCdXNpbmVzcz5mYWxz ZTwvbnMxOmlzSm9pbnRWZW50dXJlV29tZW5Pd25lZFNtYWxsQnVzaW5lc3M+CiAg ICAgICAgICAgICAgPG5zMTppc0pvaW50VmVudHVyZUVjb25vbWljYWxseURpc2Fk dmFudGFnZWRXb21lbk93bmVkU21hbGxCdXNpbmVzcz5mYWxzZTwvbnMxOmlzSm9p bnRWZW50dXJlRWNvbm9taWNhbGx5RGlzYWR2YW50YWdlZFdvbWVuT3duZWRTbWFs bEJ1c2luZXNzPjwvbnMxOnZlbmRvclNvY2lvRWNvbm9taWNJbmRpY2F0b3JzPgog ICAgICAgICAgICA8bnMxOnZlbmRvckJ1c2luZXNzVHlwZXM+CiAgICAgICAgICAg ICAgPG5zMTppc0NvbW11bml0eURldmVsb3BlZENvcnBvcmF0aW9uT3duZWRGaXJt PmZhbHNlPC9uczE6aXNDb21tdW5pdHlEZXZlbG9wZWRDb3Jwb3JhdGlvbk93bmVk RmlybT4KICAgICAgICAgICAgICA8bnMxOmlzTGFib3JTdXJwbHVzQXJlYUZpcm0+ ZmFsc2U8L25zMTppc0xhYm9yU3VycGx1c0FyZWFGaXJtPgogICAgICAgICAgICAg IDxuczE6ZmVkZXJhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgICA8bnMxOmlz RmVkZXJhbEdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc0ZlZGVyYWxHb3Zlcm5tZW50 PgogICAgICAgICAgICAgICAgPG5zMTppc0ZlZGVyYWxseUZ1bmRlZFJlc2VhcmNo QW5kRGV2ZWxvcG1lbnRDb3JwPmZhbHNlPC9uczE6aXNGZWRlcmFsbHlGdW5kZWRS ZXNlYXJjaEFuZERldmVsb3BtZW50Q29ycD4KICAgICAgICAgICAgICAgIDxuczE6 aXNGZWRlcmFsR292ZXJubWVudEFnZW5jeT5mYWxzZTwvbnMxOmlzRmVkZXJhbEdv dmVybm1lbnRBZ2VuY3k+PC9uczE6ZmVkZXJhbEdvdmVybm1lbnQ+CiAgICAgICAg ICAgICAgPG5zMTppc1N0YXRlR292ZXJubWVudD5mYWxzZTwvbnMxOmlzU3RhdGVH b3Zlcm5tZW50PgogICAgICAgICAgICAgIDxuczE6bG9jYWxHb3Zlcm5tZW50Pgog ICAgICAgICAgICAgICAgPG5zMTppc0xvY2FsR292ZXJubWVudD5mYWxzZTwvbnMx OmlzTG9jYWxHb3Zlcm5tZW50PgogICAgICAgICAgICAgICAgPG5zMTppc0NpdHlM b2NhbEdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc0NpdHlMb2NhbEdvdmVybm1lbnQ+ CiAgICAgICAgICAgICAgICA8bnMxOmlzQ291bnR5TG9jYWxHb3Zlcm5tZW50PmZh bHNlPC9uczE6aXNDb3VudHlMb2NhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAg ICA8bnMxOmlzSW50ZXJNdW5pY2lwYWxMb2NhbEdvdmVybm1lbnQ+ZmFsc2U8L25z MTppc0ludGVyTXVuaWNpcGFsTG9jYWxHb3Zlcm5tZW50PgogICAgICAgICAgICAg ICAgPG5zMTppc0xvY2FsR292ZXJubWVudE93bmVkPmZhbHNlPC9uczE6aXNMb2Nh bEdvdmVybm1lbnRPd25lZD4KICAgICAgICAgICAgICAgIDxuczE6aXNNdW5pY2lw YWxpdHlMb2NhbEdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc011bmljaXBhbGl0eUxv Y2FsR292ZXJubWVudD4KICAgICAgICAgICAgICAgIDxuczE6aXNTY2hvb2xEaXN0 cmljdExvY2FsR292ZXJubWVudD5mYWxzZTwvbnMxOmlzU2Nob29sRGlzdHJpY3RM b2NhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzVG93bnNoaXBM b2NhbEdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc1Rvd25zaGlwTG9jYWxHb3Zlcm5t ZW50PjwvbnMxOmxvY2FsR292ZXJubWVudD4KICAgICAgICAgICAgICA8bnMxOmlz VHJpYmFsR292ZXJubWVudD5mYWxzZTwvbnMxOmlzVHJpYmFsR292ZXJubWVudD4K ICAgICAgICAgICAgICA8bnMxOmlzRm9yZWlnbkdvdmVybm1lbnQ+ZmFsc2U8L25z MTppc0ZvcmVpZ25Hb3Zlcm5tZW50PgogICAgICAgICAgICAgIDxuczE6YnVzaW5l c3NPck9yZ2FuaXphdGlvblR5cGU+CiAgICAgICAgICAgICAgICA8bnMxOmlzQ29y cG9yYXRlRW50aXR5Tm90VGF4RXhlbXB0PnRydWU8L25zMTppc0NvcnBvcmF0ZUVu dGl0eU5vdFRheEV4ZW1wdD4KICAgICAgICAgICAgICAgIDxuczE6aXNDb3Jwb3Jh dGVFbnRpdHlUYXhFeGVtcHQ+ZmFsc2U8L25zMTppc0NvcnBvcmF0ZUVudGl0eVRh eEV4ZW1wdD4KICAgICAgICAgICAgICAgIDxuczE6aXNQYXJ0bmVyc2hpcE9yTGlt aXRlZExpYWJpbGl0eVBhcnRuZXJzaGlwPmZhbHNlPC9uczE6aXNQYXJ0bmVyc2hp cE9yTGltaXRlZExpYWJpbGl0eVBhcnRuZXJzaGlwPgogICAgICAgICAgICAgICAg PG5zMTppc1NvbGVQcm9wcmVpdG9yc2hpcD5mYWxzZTwvbnMxOmlzU29sZVByb3By ZWl0b3JzaGlwPgogICAgICAgICAgICAgICAgPG5zMTppc1NtYWxsQWdyaWN1bHR1 cmFsQ29vcGVyYXRpdmU+ZmFsc2U8L25zMTppc1NtYWxsQWdyaWN1bHR1cmFsQ29v cGVyYXRpdmU+CiAgICAgICAgICAgICAgICA8bnMxOmlzSW50ZXJuYXRpb25hbE9y Z2FuaXphdGlvbj5mYWxzZTwvbnMxOmlzSW50ZXJuYXRpb25hbE9yZ2FuaXphdGlv bj4KICAgICAgICAgICAgICAgIDxuczE6aXNVU0dvdmVybm1lbnRFbnRpdHk+ZmFs c2U8L25zMTppc1VTR292ZXJubWVudEVudGl0eT48L25zMTpidXNpbmVzc09yT3Jn YW5pemF0aW9uVHlwZT48L25zMTp2ZW5kb3JCdXNpbmVzc1R5cGVzPgogICAgICAg ICAgICA8bnMxOnZlbmRvckxpbmVPZkJ1c2luZXNzPgogICAgICAgICAgICAgIDxu czE6aXNDb21tdW5pdHlEZXZlbG9wbWVudENvcnBvcmF0aW9uPmZhbHNlPC9uczE6 aXNDb21tdW5pdHlEZXZlbG9wbWVudENvcnBvcmF0aW9uPgogICAgICAgICAgICAg IDxuczE6aXNEb21lc3RpY1NoZWx0ZXI+ZmFsc2U8L25zMTppc0RvbWVzdGljU2hl bHRlcj4KICAgICAgICAgICAgICA8bnMxOmlzRWR1Y2F0aW9uYWxJbnN0aXR1dGlv bj5mYWxzZTwvbnMxOmlzRWR1Y2F0aW9uYWxJbnN0aXR1dGlvbj4KICAgICAgICAg ICAgICA8bnMxOmlzRm91bmRhdGlvbj5mYWxzZTwvbnMxOmlzRm91bmRhdGlvbj4K ICAgICAgICAgICAgICA8bnMxOmlzSG9zcGl0YWw+ZmFsc2U8L25zMTppc0hvc3Bp dGFsPgogICAgICAgICAgICAgIDxuczE6aXNNYW51ZmFjdHVyZXJPZkdvb2RzPmZh bHNlPC9uczE6aXNNYW51ZmFjdHVyZXJPZkdvb2RzPgogICAgICAgICAgICAgIDxu czE6aXNWZXRlcmluYXJ5SG9zcGl0YWw+ZmFsc2U8L25zMTppc1ZldGVyaW5hcnlI b3NwaXRhbD4KICAgICAgICAgICAgICA8bnMxOmlzSGlzcGFuaWNTZXJ2aWNpbmdJ bnN0aXR1dGlvbj5mYWxzZTwvbnMxOmlzSGlzcGFuaWNTZXJ2aWNpbmdJbnN0aXR1 dGlvbj48L25zMTp2ZW5kb3JMaW5lT2ZCdXNpbmVzcz4KICAgICAgICAgICAgPG5z MTp2ZW5kb3JSZWxhdGlvbnNoaXBXaXRoRmVkZXJhbEdvdmVybm1lbnQ+CiAgICAg ICAgICAgICAgPG5zMTpyZWNlaXZlc0NvbnRyYWN0cz5mYWxzZTwvbnMxOnJlY2Vp dmVzQ29udHJhY3RzPgogICAgICAgICAgICAgIDxuczE6cmVjZWl2ZXNHcmFudHM+ ZmFsc2U8L25zMTpyZWNlaXZlc0dyYW50cz4KICAgICAgICAgICAgICA8bnMxOnJl Y2VpdmVzQ29udHJhY3RzQW5kR3JhbnRzPnRydWU8L25zMTpyZWNlaXZlc0NvbnRy YWN0c0FuZEdyYW50cz48L25zMTp2ZW5kb3JSZWxhdGlvbnNoaXBXaXRoRmVkZXJh bEdvdmVybm1lbnQ+CiAgICAgICAgICAgIDxuczE6dHlwZU9mR292ZXJubWVudEVu dGl0eT4KICAgICAgICAgICAgICA8bnMxOmlzQWlycG9ydEF1dGhvcml0eT5mYWxz ZTwvbnMxOmlzQWlycG9ydEF1dGhvcml0eT4KICAgICAgICAgICAgICA8bnMxOmlz Q291bmNpbE9mR292ZXJubWVudHM+ZmFsc2U8L25zMTppc0NvdW5jaWxPZkdvdmVy bm1lbnRzPgogICAgICAgICAgICAgIDxuczE6aXNIb3VzaW5nQXV0aG9yaXRpZXNQ dWJsaWNPclRyaWJhbD5mYWxzZTwvbnMxOmlzSG91c2luZ0F1dGhvcml0aWVzUHVi bGljT3JUcmliYWw+CiAgICAgICAgICAgICAgPG5zMTppc0ludGVyc3RhdGVFbnRp dHk+ZmFsc2U8L25zMTppc0ludGVyc3RhdGVFbnRpdHk+CiAgICAgICAgICAgICAg PG5zMTppc1BsYW5uaW5nQ29tbWlzc2lvbj5mYWxzZTwvbnMxOmlzUGxhbm5pbmdD b21taXNzaW9uPgogICAgICAgICAgICAgIDxuczE6aXNQb3J0QXV0aG9yaXR5PmZh bHNlPC9uczE6aXNQb3J0QXV0aG9yaXR5PgogICAgICAgICAgICAgIDxuczE6aXNU cmFuc2l0QXV0aG9yaXR5PmZhbHNlPC9uczE6aXNUcmFuc2l0QXV0aG9yaXR5Pjwv bnMxOnR5cGVPZkdvdmVybm1lbnRFbnRpdHk+CiAgICAgICAgICAgIDxuczE6dmVu ZG9yT3JnYW5pemF0aW9uRmFjdG9ycz4KICAgICAgICAgICAgICA8bnMxOmlzU3Vi Y2hhcHRlclNDb3Jwb3JhdGlvbj5mYWxzZTwvbnMxOmlzU3ViY2hhcHRlclNDb3Jw b3JhdGlvbj4KICAgICAgICAgICAgICA8bnMxOmlzTGltaXRlZExpYWJpbGl0eUNv cnBvcmF0aW9uPmZhbHNlPC9uczE6aXNMaW1pdGVkTGlhYmlsaXR5Q29ycG9yYXRp b24+CiAgICAgICAgICAgICAgPG5zMTppc0ZvcmVpZ25Pd25lZEFuZExvY2F0ZWQ+ ZmFsc2U8L25zMTppc0ZvcmVpZ25Pd25lZEFuZExvY2F0ZWQ+CiAgICAgICAgICAg ICAgPG5zMTpwcm9maXRTdHJ1Y3R1cmU+CiAgICAgICAgICAgICAgICA8bnMxOmlz Rm9yUHJvZml0T3JnYW5pemF0aW9uPnRydWU8L25zMTppc0ZvclByb2ZpdE9yZ2Fu aXphdGlvbj4KICAgICAgICAgICAgICAgIDxuczE6aXNOb25wcm9maXRPcmdhbml6 YXRpb24+ZmFsc2U8L25zMTppc05vbnByb2ZpdE9yZ2FuaXphdGlvbj4KICAgICAg ICAgICAgICAgIDxuczE6aXNPdGhlck5vdEZvclByb2ZpdE9yZ2FuaXphdGlvbj5m YWxzZTwvbnMxOmlzT3RoZXJOb3RGb3JQcm9maXRPcmdhbml6YXRpb24+PC9uczE6 cHJvZml0U3RydWN0dXJlPgogICAgICAgICAgICAgIDxuczE6aXNTaGVsdGVyZWRX b3Jrc2hvcD5mYWxzZTwvbnMxOmlzU2hlbHRlcmVkV29ya3Nob3A+CiAgICAgICAg ICAgICAgPG5zMTpzdGF0ZU9mSW5jb3Jwb3JhdGlvbiBuYW1lPSJORVcgWU9SSyI+ Tlk8L25zMTpzdGF0ZU9mSW5jb3Jwb3JhdGlvbj4KICAgICAgICAgICAgICA8bnMx OmNvdW50cnlPZkluY29ycG9yYXRpb24gbmFtZT0iVU5JVEVEIFNUQVRFUyI+VVNB PC9uczE6Y291bnRyeU9mSW5jb3Jwb3JhdGlvbj4KICAgICAgICAgICAgICA8bnMx Om9yZ2FuaXphdGlvbmFsVHlwZT5DT1JQT1JBVEUgTk9UIFRBWCBFWEVNUFQ8L25z MTpvcmdhbml6YXRpb25hbFR5cGU+CiAgICAgICAgICAgICAgPG5zMTpudW1iZXJP ZkVtcGxveWVlcz4xMjAwPC9uczE6bnVtYmVyT2ZFbXBsb3llZXM+CiAgICAgICAg ICAgICAgPG5zMTphbm51YWxSZXZlbnVlPjEwMDAwMDAwMDA8L25zMTphbm51YWxS ZXZlbnVlPjwvbnMxOnZlbmRvck9yZ2FuaXphdGlvbkZhY3RvcnM+CiAgICAgICAg ICAgIDxuczE6dHlwZU9mRWR1Y2F0aW9uYWxFbnRpdHk+CiAgICAgICAgICAgICAg PG5zMTppczE4NjJMYW5kR3JhbnRDb2xsZWdlPmZhbHNlPC9uczE6aXMxODYyTGFu ZEdyYW50Q29sbGVnZT4KICAgICAgICAgICAgICA8bnMxOmlzMTg5MExhbmRHcmFu dENvbGxlZ2U+ZmFsc2U8L25zMTppczE4OTBMYW5kR3JhbnRDb2xsZWdlPgogICAg ICAgICAgICAgIDxuczE6aXMxOTk0TGFuZEdyYW50Q29sbGVnZT5mYWxzZTwvbnMx OmlzMTk5NExhbmRHcmFudENvbGxlZ2U+CiAgICAgICAgICAgICAgPG5zMTppc0hp c3RvcmljYWxseUJsYWNrQ29sbGVnZU9yVW5pdmVyc2l0eT5mYWxzZTwvbnMxOmlz SGlzdG9yaWNhbGx5QmxhY2tDb2xsZWdlT3JVbml2ZXJzaXR5PgogICAgICAgICAg ICAgIDxuczE6aXNNaW5vcml0eUluc3RpdHV0aW9uPmZhbHNlPC9uczE6aXNNaW5v cml0eUluc3RpdHV0aW9uPgogICAgICAgICAgICAgIDxuczE6aXNQcml2YXRlVW5p dmVyc2l0eU9yQ29sbGVnZT5mYWxzZTwvbnMxOmlzUHJpdmF0ZVVuaXZlcnNpdHlP ckNvbGxlZ2U+CiAgICAgICAgICAgICAgPG5zMTppc1NjaG9vbE9mRm9yZXN0cnk+ ZmFsc2U8L25zMTppc1NjaG9vbE9mRm9yZXN0cnk+CiAgICAgICAgICAgICAgPG5z MTppc1N0YXRlQ29udHJvbGxlZEluc3RpdHV0aW9ub2ZIaWdoZXJMZWFybmluZz5m YWxzZTwvbnMxOmlzU3RhdGVDb250cm9sbGVkSW5zdGl0dXRpb25vZkhpZ2hlckxl YXJuaW5nPgogICAgICAgICAgICAgIDxuczE6aXNUcmliYWxDb2xsZWdlPmZhbHNl PC9uczE6aXNUcmliYWxDb2xsZWdlPgogICAgICAgICAgICAgIDxuczE6aXNWZXRl cmluYXJ5Q29sbGVnZT5mYWxzZTwvbnMxOmlzVmV0ZXJpbmFyeUNvbGxlZ2U+CiAg ICAgICAgICAgICAgPG5zMTppc0FsYXNrYW5OYXRpdmVTZXJ2aWNpbmdJbnN0aXR1 dGlvbj5mYWxzZTwvbnMxOmlzQWxhc2thbk5hdGl2ZVNlcnZpY2luZ0luc3RpdHV0 aW9uPgogICAgICAgICAgICAgIDxuczE6aXNOYXRpdmVIYXdhaWlhblNlcnZpY2lu Z0luc3RpdHV0aW9uPmZhbHNlPC9uczE6aXNOYXRpdmVIYXdhaWlhblNlcnZpY2lu Z0luc3RpdHV0aW9uPjwvbnMxOnR5cGVPZkVkdWNhdGlvbmFsRW50aXR5PgogICAg ICAgICAgICA8bnMxOnZlbmRvckNlcnRpZmljYXRpb25zPgogICAgICAgICAgICAg IDxuczE6aXNET1RDZXJ0aWZpZWREaXNhZHZhbnRhZ2VkQnVzaW5lc3NFbnRlcnBy aXNlPmZhbHNlPC9uczE6aXNET1RDZXJ0aWZpZWREaXNhZHZhbnRhZ2VkQnVzaW5l c3NFbnRlcnByaXNlPgogICAgICAgICAgICAgIDxuczE6aXNTZWxmQ2VydGlmaWVk U21hbGxEaXNhZHZhbnRhZ2VkQnVzaW5lc3M+ZmFsc2U8L25zMTppc1NlbGZDZXJ0 aWZpZWRTbWFsbERpc2FkdmFudGFnZWRCdXNpbmVzcz4KICAgICAgICAgICAgICA8 bnMxOmlzU0JBQ2VydGlmaWVkU21hbGxEaXNhZHZhbnRhZ2VkQnVzaW5lc3M+ZmFs c2U8L25zMTppc1NCQUNlcnRpZmllZFNtYWxsRGlzYWR2YW50YWdlZEJ1c2luZXNz PgogICAgICAgICAgICAgIDxuczE6aXNTQkFDZXJ0aWZpZWQ4QVByb2dyYW1QYXJ0 aWNpcGFudD5mYWxzZTwvbnMxOmlzU0JBQ2VydGlmaWVkOEFQcm9ncmFtUGFydGlj aXBhbnQ+CiAgICAgICAgICAgICAgPG5zMTppc1NlbGZDZXJ0aWZpZWRIVUJab25l Sm9pbnRWZW50dXJlPmZhbHNlPC9uczE6aXNTZWxmQ2VydGlmaWVkSFVCWm9uZUpv aW50VmVudHVyZT4KICAgICAgICAgICAgICA8bnMxOmlzU0JBQ2VydGlmaWVkSFVC Wm9uZT5mYWxzZTwvbnMxOmlzU0JBQ2VydGlmaWVkSFVCWm9uZT4KICAgICAgICAg ICAgICA8bnMxOmlzU0JBQ2VydGlmaWVkOEFKb2ludFZlbnR1cmU+ZmFsc2U8L25z MTppc1NCQUNlcnRpZmllZDhBSm9pbnRWZW50dXJlPjwvbnMxOnZlbmRvckNlcnRp ZmljYXRpb25zPgogICAgICAgICAgICA8bnMxOnZlbmRvckxvY2F0aW9uPgogICAg ICAgICAgICAgIDxuczE6c3RyZWV0QWRkcmVzcz4zMTQgVyBTVVBFUklPUiBTVCBT VEUgMzAxPC9uczE6c3RyZWV0QWRkcmVzcz4KICAgICAgICAgICAgICA8bnMxOmNp dHk+Q0hJQ0FHTzwvbnMxOmNpdHk+CiAgICAgICAgICAgICAgPG5zMTpzdGF0ZSBu YW1lPSJJTExJTk9JUyI+SUw8L25zMTpzdGF0ZT4KICAgICAgICAgICAgICA8bnMx OlpJUENvZGU+NjA2NTQzNTM4PC9uczE6WklQQ29kZT4KICAgICAgICAgICAgICA8 bnMxOmNvdW50cnlDb2RlIG5hbWU9IlVOSVRFRCBTVEFURVMiPlVTQTwvbnMxOmNv dW50cnlDb2RlPgogICAgICAgICAgICAgIDxuczE6cGhvbmVObz43MDM0ODAxOTY5 PC9uczE6cGhvbmVObz4KICAgICAgICAgICAgICA8bnMxOmZheE5vPjcwMzQ4MDE5 NTY8L25zMTpmYXhObz4KICAgICAgICAgICAgICA8bnMxOmNvbmdyZXNzaW9uYWxE aXN0cmljdENvZGU+MDc8L25zMTpjb25ncmVzc2lvbmFsRGlzdHJpY3RDb2RlPjwv bnMxOnZlbmRvckxvY2F0aW9uPgogICAgICAgICAgICA8bnMxOnZlbmRvclNpdGVD b2RlPjkyOTAyMjAyODwvbnMxOnZlbmRvclNpdGVDb2RlPgogICAgICAgICAgICA8 bnMxOnZlbmRvckFsdGVybmF0ZVNpdGVDb2RlPjYwNjU0MzUzODwvbnMxOnZlbmRv ckFsdGVybmF0ZVNpdGVDb2RlPgogICAgICAgICAgICA8bnMxOnZlbmRvckRVTlNJ bmZvcm1hdGlvbj4KICAgICAgICAgICAgICA8bnMxOkRVTlNOdW1iZXI+OTI5MDIy MDI4PC9uczE6RFVOU051bWJlcj4KICAgICAgICAgICAgICA8bnMxOnZlbmRvck5h bWU+U09GVENIT0lDRSBDT1JQT1JBVElPTjwvbnMxOnZlbmRvck5hbWU+CiAgICAg ICAgICAgICAgPG5zMTpnbG9iYWxQYXJlbnREVU5TTnVtYmVyPjI0ODg2NDQxNTwv bnMxOmdsb2JhbFBhcmVudERVTlNOdW1iZXI+CiAgICAgICAgICAgICAgPG5zMTpn bG9iYWxQYXJlbnREVU5TTmFtZT5TT0ZUQ0hPSUNFIENPUlBPUkFUSU9OPC9uczE6 Z2xvYmFsUGFyZW50RFVOU05hbWU+PC9uczE6dmVuZG9yRFVOU0luZm9ybWF0aW9u PgogICAgICAgICAgICA8bnMxOmNjclJlZ2lzdHJhdGlvbkRldGFpbHM+CiAgICAg ICAgICAgICAgPG5zMTpyZWdpc3RyYXRpb25EYXRlPjIwMDMtMDItMDYgMDA6MDA6 MDA8L25zMTpyZWdpc3RyYXRpb25EYXRlPgogICAgICAgICAgICAgIDxuczE6cmVu ZXdhbERhdGU+MjAxNS0wMi0wMyAwMDowMDowMDwvbnMxOnJlbmV3YWxEYXRlPjwv bnMxOmNjclJlZ2lzdHJhdGlvbkRldGFpbHM+PC9uczE6dmVuZG9yU2l0ZURldGFp bHM+CiAgICAgICAgICA8bnMxOmNvbnRyYWN0aW5nT2ZmaWNlckJ1c2luZXNzU2l6 ZURldGVybWluYXRpb24gZGVzY3JpcHRpb249Ik9USEVSIFRIQU4gU01BTEwgQlVT SU5FU1MiPk88L25zMTpjb250cmFjdGluZ09mZmljZXJCdXNpbmVzc1NpemVEZXRl cm1pbmF0aW9uPjwvbnMxOnZlbmRvcj4KICAgICAgICA8bnMxOnBsYWNlT2ZQZXJm b3JtYW5jZT4KICAgICAgICAgIDxuczE6cHJpbmNpcGFsUGxhY2VPZlBlcmZvcm1h bmNlPgogICAgICAgICAgICA8bnMxOnN0YXRlQ29kZSBuYW1lPSJNSVNTT1VSSSI+ TU88L25zMTpzdGF0ZUNvZGU+CiAgICAgICAgICAgIDxuczE6Y291bnRyeUNvZGUg bmFtZT0iVU5JVEVEIFNUQVRFUyI+VVNBPC9uczE6Y291bnRyeUNvZGU+PC9uczE6 cHJpbmNpcGFsUGxhY2VPZlBlcmZvcm1hbmNlPgogICAgICAgICAgPG5zMTpwbGFj ZU9mUGVyZm9ybWFuY2VaSVBDb2RlIGNvdW50eT0iSkFDS1NPTiIgY2l0eT0iS0FO U0FTIENJVFkiPjY0MTE0MzM2MzwvbnMxOnBsYWNlT2ZQZXJmb3JtYW5jZVpJUENv ZGU+CiAgICAgICAgICA8bnMxOnBsYWNlT2ZQZXJmb3JtYW5jZUNvbmdyZXNzaW9u YWxEaXN0cmljdD4wNTwvbnMxOnBsYWNlT2ZQZXJmb3JtYW5jZUNvbmdyZXNzaW9u YWxEaXN0cmljdD48L25zMTpwbGFjZU9mUGVyZm9ybWFuY2U+CiAgICAgICAgPG5z MTpjb21wZXRpdGlvbj4KICAgICAgICAgIDxuczE6ZXh0ZW50Q29tcGV0ZWQgZGVz Y3JpcHRpb249IkNPTVBFVEVEIFVOREVSIFNBUCI+RjwvbnMxOmV4dGVudENvbXBl dGVkPgogICAgICAgICAgPG5zMTpzb2xpY2l0YXRpb25Qcm9jZWR1cmVzIGRlc2Ny aXB0aW9uPSJTSU1QTElGSUVEIEFDUVVJU0lUSU9OIj5TUDE8L25zMTpzb2xpY2l0 YXRpb25Qcm9jZWR1cmVzPgogICAgICAgICAgPG5zMTp0eXBlT2ZTZXRBc2lkZSBk ZXNjcmlwdGlvbj0iTk8gU0VUIEFTSURFIFVTRUQuIj5OT05FPC9uczE6dHlwZU9m U2V0QXNpZGU+CiAgICAgICAgICA8bnMxOmV2YWx1YXRlZFByZWZlcmVuY2UgZGVz Y3JpcHRpb249Ik5PIFBSRUZFUkVOQ0UgVVNFRCI+Tk9ORTwvbnMxOmV2YWx1YXRl ZFByZWZlcmVuY2U+CiAgICAgICAgICA8bnMxOm51bWJlck9mT2ZmZXJzUmVjZWl2 ZWQ+MjwvbnMxOm51bWJlck9mT2ZmZXJzUmVjZWl2ZWQ+CiAgICAgICAgICA8bnMx OmNvbW1lcmNpYWxJdGVtQWNxdWlzaXRpb25Qcm9jZWR1cmVzIGRlc2NyaXB0aW9u PSJDT01NRVJDSUFMIElURU0iPkE8L25zMTpjb21tZXJjaWFsSXRlbUFjcXVpc2l0 aW9uUHJvY2VkdXJlcz4KICAgICAgICAgIDxuczE6Y29tbWVyY2lhbEl0ZW1UZXN0 UHJvZ3JhbSBkZXNjcmlwdGlvbj0iTk8iPk48L25zMTpjb21tZXJjaWFsSXRlbVRl c3RQcm9ncmFtPgogICAgICAgICAgPG5zMTpBNzZBY3Rpb24gZGVzY3JpcHRpb249 Ik5PIj5OPC9uczE6QTc2QWN0aW9uPgogICAgICAgICAgPG5zMTpmZWRCaXpPcHBz IGRlc2NyaXB0aW9uPSJOTyI+TjwvbnMxOmZlZEJpek9wcHM+CiAgICAgICAgICA8 bnMxOmxvY2FsQXJlYVNldEFzaWRlIGRlc2NyaXB0aW9uPSJOTyI+TjwvbnMxOmxv Y2FsQXJlYVNldEFzaWRlPjwvbnMxOmNvbXBldGl0aW9uPgogICAgICAgIDxuczE6 cHJlZmVyZW5jZVByb2dyYW1zPgogICAgICAgICAgPG5zMTpzdWJjb250cmFjdFBs YW4gZGVzY3JpcHRpb249IlBMQU4gTk9UIFJFUVVJUkVEICI+QjwvbnMxOnN1YmNv bnRyYWN0UGxhbj48L25zMTpwcmVmZXJlbmNlUHJvZ3JhbXM+CiAgICAgICAgPG5z MTp0cmFuc2FjdGlvbkluZm9ybWF0aW9uPgogICAgICAgICAgPG5zMTpjcmVhdGVk Qnk+SkVOTklGRVIuQURBTVNAVVNEQS5HT1Y8L25zMTpjcmVhdGVkQnk+CiAgICAg ICAgICA8bnMxOmNyZWF0ZWREYXRlPjIwMTQtMDYtMjkgMTI6MDI6MzI8L25zMTpj cmVhdGVkRGF0ZT4KICAgICAgICAgIDxuczE6bGFzdE1vZGlmaWVkQnk+SkVOTklG RVIuQURBTVNAVVNEQS5HT1Y8L25zMTpsYXN0TW9kaWZpZWRCeT4KICAgICAgICAg IDxuczE6bGFzdE1vZGlmaWVkRGF0ZT4yMDE0LTA2LTI5IDEyOjM3OjU3PC9uczE6 bGFzdE1vZGlmaWVkRGF0ZT4KICAgICAgICAgIDxuczE6c3RhdHVzIGRlc2NyaXB0 aW9uPSJGSU5BTCI+RjwvbnMxOnN0YXR1cz4KICAgICAgICAgIDxuczE6YXBwcm92 ZWRCeT5KRU5OSUZFUi5BREFNU0BVU0RBLkdPVjwvbnMxOmFwcHJvdmVkQnk+CiAg ICAgICAgICA8bnMxOmFwcHJvdmVkRGF0ZT4yMDE0LTA2LTI5IDEyOjM3OjU3PC9u czE6YXBwcm92ZWREYXRlPjwvbnMxOnRyYW5zYWN0aW9uSW5mb3JtYXRpb24+PC9u czE6YXdhcmQ+CiAgICA8L2NvbnRlbnQ+CiAgPC9lbnRyeT4KICA8ZW50cnk+CiAg ICA8dGl0bGU+PCFbQ0RBVEFbTmV3IERFTElWRVJZIE9SREVSIEFHMzJTQkQxNzAy NjYgYXdhcmRlZCB0byBBUEVYVEVDSCBMTEMgZm9yIHRoZSBhbW91bnQgb2YgJDIx MSw4NjBdXT48L3RpdGxlPgogICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9 InRleHQvaHRtbCIgaHJlZj0iaHR0cHM6Ly93d3cuZnBkcy5nb3YvZXpzZWFyY2gv c2VhcmNoLmRvP3M9RlBEUyZhbXA7aW5kZXhOYW1lPWF3YXJkZnVsbCZhbXA7dGVt cGxhdGVOYW1lPTEuNS4xJmFtcDtxPUFHMzJTQkQxNzAyNjYrMTJIMisiPjwvbGlu az4KICAgIDxtb2RpZmllZD4yMDE3LTEwLTA0IDE0OjIwOjQ4PC9tb2RpZmllZD4K ICAgIDxjb250ZW50IHhtbG5zOm5zMT0iaHR0cHM6Ly93d3cuZnBkcy5nb3YvRlBE UyIgdHlwZT0iYXBwbGljYXRpb24veG1sIj4KICAgICAgPG5zMTphd2FyZCB4bWxu czpuczE9Imh0dHA6Ly93d3cuZnBkc25nLmNvbS9GUERTIiB2ZXJzaW9uPSIxLjQi PgogICAgICAgIDxuczE6YXdhcmRJRD4KICAgICAgICAgIDxuczE6YXdhcmRDb250 cmFjdElEPgogICAgICAgICAgICA8bnMxOmFnZW5jeUlEIG5hbWU9IkFHUklDVUxU VVJBTCBSRVNFQVJDSCBTRVJWSUNFIj4xMkgyPC9uczE6YWdlbmN5SUQ+CiAgICAg ICAgICAgIDxuczE6UElJRD5BRzMyU0JEMTcwMjY2PC9uczE6UElJRD4KICAgICAg ICAgICAgPG5zMTptb2ROdW1iZXI+MDwvbnMxOm1vZE51bWJlcj4KICAgICAgICAg ICAgPG5zMTp0cmFuc2FjdGlvbk51bWJlcj4wPC9uczE6dHJhbnNhY3Rpb25OdW1i ZXI+PC9uczE6YXdhcmRDb250cmFjdElEPgogICAgICAgICAgPG5zMTpyZWZlcmVu Y2VkSURWSUQ+CiAgICAgICAgICAgIDxuczE6YWdlbmN5SUQgbmFtZT0iRkVERVJB TCBBQ1FVSVNJVElPTiBTRVJWSUNFIj40NzMyPC9uczE6YWdlbmN5SUQ+CiAgICAg ICAgICAgIDxuczE6UElJRD5HUzA2RjA4MjFaPC9uczE6UElJRD4KICAgICAgICAg ICAgPG5zMTptb2ROdW1iZXI+UEEwMDAzQUREUkVTU0NIRzwvbnMxOm1vZE51bWJl cj48L25zMTpyZWZlcmVuY2VkSURWSUQ+PC9uczE6YXdhcmRJRD4KICAgICAgICA8 bnMxOnJlbGV2YW50Q29udHJhY3REYXRlcz4KICAgICAgICAgIDxuczE6c2lnbmVk RGF0ZT4yMDE3LTA5LTIyIDAwOjAwOjAwPC9uczE6c2lnbmVkRGF0ZT4KICAgICAg ICAgIDxuczE6ZWZmZWN0aXZlRGF0ZT4yMDE3LTA5LTIyIDAwOjAwOjAwPC9uczE6 ZWZmZWN0aXZlRGF0ZT4KICAgICAgICAgIDxuczE6Y3VycmVudENvbXBsZXRpb25E YXRlPjIwMTktMDktMjggMDA6MDA6MDA8L25zMTpjdXJyZW50Q29tcGxldGlvbkRh dGU+CiAgICAgICAgICA8bnMxOnVsdGltYXRlQ29tcGxldGlvbkRhdGU+MjAxOS0w OS0yOCAwMDowMDowMDwvbnMxOnVsdGltYXRlQ29tcGxldGlvbkRhdGU+PC9uczE6 cmVsZXZhbnRDb250cmFjdERhdGVzPgogICAgICAgIDxuczE6ZG9sbGFyVmFsdWVz PgogICAgICAgICAgPG5zMTpvYmxpZ2F0ZWRBbW91bnQ+MjExODYwLjAwPC9uczE6 b2JsaWdhdGVkQW1vdW50PgogICAgICAgICAgPG5zMTpiYXNlQW5kRXhlcmNpc2Vk T3B0aW9uc1ZhbHVlPjIxMTg2MC4wMDwvbnMxOmJhc2VBbmRFeGVyY2lzZWRPcHRp b25zVmFsdWU+CiAgICAgICAgICA8bnMxOmJhc2VBbmRBbGxPcHRpb25zVmFsdWU+ NDMwNjUwLjAwPC9uczE6YmFzZUFuZEFsbE9wdGlvbnNWYWx1ZT48L25zMTpkb2xs YXJWYWx1ZXM+CiAgICAgICAgPG5zMTp0b3RhbERvbGxhclZhbHVlcz4KICAgICAg ICAgIDxuczE6dG90YWxPYmxpZ2F0ZWRBbW91bnQ+MjExODYwLjAwPC9uczE6dG90 YWxPYmxpZ2F0ZWRBbW91bnQ+CiAgICAgICAgICA8bnMxOnRvdGFsQmFzZUFuZEV4 ZXJjaXNlZE9wdGlvbnNWYWx1ZT4yMTE4NjAuMDA8L25zMTp0b3RhbEJhc2VBbmRF eGVyY2lzZWRPcHRpb25zVmFsdWU+CiAgICAgICAgICA8bnMxOnRvdGFsQmFzZUFuZEFs bE9wdGlvbnNWYWx1ZT40MzA2NTAuMDA8L25zMTp0b3RhbEJhc2VBbmRBbGxPcHRp b25zVmFsdWU+PC9uczE6dG90YWxEb2xsYXJWYWx1ZXM+CiAgICAgICAgPG5zMTpw dXJjaGFzZXJJbmZvcm1hdGlvbj4KICAgICAgICAgIDxuczE6Y29udHJhY3RpbmdP ZmZpY2VBZ2VuY3lJRCBuYW1lPSJBR1JJQ1VMVFVSQUwgUkVTRUFSQ0ggU0VSVklD RSIgZGVwYXJ0bWVudElEPSIxMjAwIiBkZXBhcnRtZW50TmFtZT0iQUdSSUNVTFRV UkUsIERFUEFSVE1FTlQgT0YiPjEySDI8L25zMTpjb250cmFjdGluZ09mZmljZUFn ZW5jeUlEPgogICAgICAgICAgPG5zMTpjb250cmFjdGluZ09mZmljZUlEIG5hbWU9 IlVTREEgQVJTIE5DUkJTQyBBQ1EgQlJBTkNIIiByZWdpb25Db2RlPSIxMyIgY291 bnRyeT0iVVNBIj4xMjMyU0I8L25zMTpjb250cmFjdGluZ09mZmljZUlEPgogICAg ICAgICAgPG5zMTpmdW5kaW5nUmVxdWVzdGluZ0FnZW5jeUlEIG5hbWU9IkFHUklD VUxUVVJBTCBSRVNFQVJDSCBTRVJWSUNFIiBkZXBhcnRtZW50SUQ9IjEyMDAiIGRl cGFydG1lbnROYW1lPSJBR1JJQ1VMVFVSRSwgREVQQVJUTUVOVCBPRiI+MTJIMjwv bnMxOmZ1bmRpbmdSZXF1ZXN0aW5nQWdlbmN5SUQ+CiAgICAgICAgICA8bnMxOmZ1 bmRpbmdSZXF1ZXN0aW5nT2ZmaWNlSUQgbmFtZT0iVVNEQSBBUlMgQUZNIEZNQUQi PjEyMzQ0UDwvbnMxOmZ1bmRpbmdSZXF1ZXN0aW5nT2ZmaWNlSUQ+CiAgICAgICAg ICA8bnMxOmZvcmVpZ25GdW5kaW5nIGRlc2NyaXB0aW9uPSJOT1QgQVBQTElDQUJM RSI+WDwvbnMxOmZvcmVpZ25GdW5kaW5nPjwvbnMxOnB1cmNoYXNlckluZm9ybWF0 aW9uPgogICAgICAgIDxuczE6Y29udHJhY3RNYXJrZXRpbmdEYXRhPgogICAgICAg ICAgPG5zMTpmZWVQYWlkRm9yVXNlT2ZTZXJ2aWNlPjAuMDA8L25zMTpmZWVQYWlk Rm9yVXNlT2ZTZXJ2aWNlPjwvbnMxOmNvbnRyYWN0TWFya2V0aW5nRGF0YT4KICAg ICAgICA8bnMxOmNvbnRyYWN0RGF0YT4KICAgICAgICAgIDxuczE6Y29udHJhY3RB Y3Rpb25UeXBlIGRlc2NyaXB0aW9uPSJERUxJVkVSWSBPUkRFUiI+QzwvbnMxOmNv bnRyYWN0QWN0aW9uVHlwZT4KICAgICAgICAgIDxuczE6dHlwZU9mQ29udHJhY3RQ cmljaW5nIGRlc2NyaXB0aW9uPSJGSVJNIEZJWEVEIFBSSUNFIj5KPC9uczE6dHlw ZU9mQ29udHJhY3RQcmljaW5nPgogICAgICAgICAgPG5zMTpuYXRpb25hbEludGVy ZXN0QWN0aW9uQ29kZSBkZXNjcmlwdGlvbj0iTk9ORSI+Tk9ORTwvbnMxOm5hdGlv bmFsSW50ZXJlc3RBY3Rpb25Db2RlPgogICAgICAgICAgPG5zMTpkZXNjcmlwdGlv bk9mQ29udHJhY3RSZXF1aXJlbWVudD5JR0Y6Ok9UOjpJR0YKT1JBQ0xFIFBML1NR TCBQUk9HUkFNTUVSUzwvbnMxOmRlc2NyaXB0aW9uT2ZDb250cmFjdFJlcXVpcmVt ZW50PgogICAgICAgICAgPG5zMTppbmhlcmVudGx5R292ZXJubWVudGFsRnVuY3Rp b24gZGVzY3JpcHRpb249Ik9USEVSIEZVTkNUSU9OUyI+T1Q8L25zMTppbmhlcmVu dGx5R292ZXJubWVudGFsRnVuY3Rpb24+CiAgICAgICAgICA8bnMxOkdGRS1HRlAg ZGVzY3JpcHRpb249IlRyYW5zYWN0aW9uIGRvZXMgbm90IHVzZSBHRkUvR0ZQIj5O PC9uczE6R0ZFLUdGUD4KICAgICAgICAgIDxuczE6dW5kZWZpbml0aXplZEFjdGlv biBkZXNjcmlwdGlvbj0iTk8iPlg8L25zMTp1bmRlZmluaXRpemVkQWN0aW9uPgog ICAgICAgICAgPG5zMTpjb25zb2xpZGF0ZWRDb250cmFjdCBkZXNjcmlwdGlvbj0i Tk9UIENPTlNPTElEQVRFRCI+RDwvbnMxOmNvbnNvbGlkYXRlZENvbnRyYWN0Pgog ICAgICAgICAgPG5zMTpwZXJmb3JtYW5jZUJhc2VkU2VydmljZUNvbnRyYWN0IGRl c2NyaXB0aW9uPSJOTyAtIFNFUlZJQ0UgV0hFUkUgUEJBIElTIE5PVCBVU0VELiI+ TjwvbnMxOnBlcmZvcm1hbmNlQmFzZWRTZXJ2aWNlQ29udHJhY3Q+CiAgICAgICAg ICA8bnMxOmNvbnRpbmdlbmN5SHVtYW5pdGFyaWFuUGVhY2VrZWVwaW5nT3BlcmF0 aW9uIGRlc2NyaXB0aW9uPSJOT1QgQVBQTElDQUJMRSI+WDwvbnMxOmNvbnRpbmdl bmN5SHVtYW5pdGFyaWFuUGVhY2VrZWVwaW5nT3BlcmF0aW9uPgogICAgICAgICAg PG5zMTpsaXN0T2ZUcmVhc3VyeUFjY291bnRzPgogICAgICAgICAgICA8bnMxOnRy ZWFzdXJ5QWNjb3VudD4KICAgICAgICAgICAgICA8bnMxOnRyZWFzdXJ5QWNjb3Vu dFN5bWJvbD4KICAgICAgICAgICAgICAgIDxuczE6YWdlbmN5SWRlbnRpZmllcj4x MjwvbnMxOmFnZW5jeUlkZW50aWZpZXI+CiAgICAgICAgICAgICAgICA8bnMxOm1h aW5BY2NvdW50Q29kZT4xNDAwPC9uczE6bWFpbkFjY291bnRDb2RlPjwvbnMxOnRy ZWFzdXJ5QWNjb3VudFN5bWJvbD48L25zMTp0cmVhc3VyeUFjY291bnQ+PC9uczE6 bGlzdE9mVHJlYXN1cnlBY2NvdW50cz4KICAgICAgICAgIDxuczE6cHVyY2hhc2VD YXJkQXNQYXltZW50TWV0aG9kIGRlc2NyaXB0aW9uPSJOTyI+TjwvbnMxOnB1cmNo YXNlQ2FyZEFzUGF5bWVudE1ldGhvZD4KICAgICAgICAgIDxuczE6bnVtYmVyT2ZB Y3Rpb25zPjE8L25zMTpudW1iZXJPZkFjdGlvbnM+PC9uczE6Y29udHJhY3REYXRh PgogICAgICAgIDxuczE6bGVnaXNsYXRpdmVNYW5kYXRlcz4KICAgICAgICAgIDxu czE6Q2xpbmdlckNvaGVuQWN0IGRlc2NyaXB0aW9uPSJZRVMiPlk8L25zMTpDbGlu Z2VyQ29oZW5BY3Q+CiAgICAgICAgICA8bnMxOm1hdGVyaWFsc1N1cHBsaWVzQXJ0 aWNsZXNFcXVpcG1lbnQgZGVzY3JpcHRpb249Ik5PVCBBUFBMSUNBQkxFIj5YPC9u czE6bWF0ZXJpYWxzU3VwcGxpZXNBcnRpY2xlc0VxdWlwbWVudD4KICAgICAgICAg IDxuczE6bGFib3JTdGFuZGFyZHMgZGVzY3JpcHRpb249Ik5PIj5OPC9uczE6bGFi b3JTdGFuZGFyZHM+CiAgICAgICAgICA8bnMxOmNvbnN0cnVjdGlvbldhZ2VSYXRl UmVxdWlyZW1lbnRzIGRlc2NyaXB0aW9uPSJOT1QgQVBQTElDQUJMRSI+WDwvbnMx OmNvbnN0cnVjdGlvbldhZ2VSYXRlUmVxdWlyZW1lbnRzPgogICAgICAgICAgPG5z MTpsaXN0T2ZBZGRpdGlvbmFsUmVwb3J0aW5nVmFsdWVzPjwvbnMxOmxpc3RPZkFk ZGl0aW9uYWxSZXBvcnRpbmdWYWx1ZXM+CiAgICAgICAgICA8bnMxOmludGVyYWdl bmN5Q29udHJhY3RpbmdBdXRob3JpdHkgZGVzY3JpcHRpb249Ik9USEVSIFNUQVRV VE9SWSBBVVRIT1JJVFkiPkI8L25zMTppbnRlcmFnZW5jeUNvbnRyYWN0aW5nQXV0 aG9yaXR5PgogICAgICAgICAgPG5zMTpvdGhlclN0YXR1dG9yeUF1dGhvcml0eT40 MCBVLlMuQy4gMTEzMDIoRSk8L25zMTpvdGhlclN0YXR1dG9yeUF1dGhvcml0eT48 L25zMTpsZWdpc2xhdGl2ZU1hbmRhdGVzPgogICAgICAgIDxuczE6cHJvZHVjdE9y U2VydmljZUluZm9ybWF0aW9uPgogICAgICAgICAgPG5zMTpwcm9kdWN0T3JTZXJ2 aWNlQ29kZSBkZXNjcmlwdGlvbj0iSVQgQU5EIFRFTEVDT00tIFBST0dSQU1NSU5H IiBwcm9kdWN0T3JTZXJ2aWNlVHlwZT0iU0VSVklDRSI+RDMwODwvbnMxOnByb2R1 Y3RPclNlcnZpY2VDb2RlPgogICAgICAgICAgPG5zMTpjb250cmFjdEJ1bmRsaW5n IGRlc2NyaXB0aW9uPSJOT1QgQlVORExFRCI+SDwvbnMxOmNvbnRyYWN0QnVuZGxp bmc+CiAgICAgICAgICA8bnMxOnByaW5jaXBhbE5BSUNTQ29kZSBkZXNjcmlwdGlv bj0iQ09NUFVURVIgU1lTVEVNUyBERVNJR04gU0VSVklDRVMiPjU0MTUxMjwvbnMx OnByaW5jaXBhbE5BSUNTQ29kZT4KICAgICAgICAgIDxuczE6cmVjb3ZlcmVkTWF0 ZXJpYWxDbGF1c2VzIGRlc2NyaXB0aW9uPSJOTyBDTEFVU0VTIElOQ0xVREVEIEFO RCBOTyBTVVNUQUlOQUJJTElUWSBJTkNMVURFRCI+QzwvbnMxOnJlY292ZXJlZE1h dGVyaWFsQ2xhdXNlcz4KICAgICAgICAgIDxuczE6bWFudWZhY3R1cmluZ09yZ2Fu aXphdGlvblR5cGUgZGVzY3JpcHRpb249IlUuUy4gT1dORUQgQlVTSU5FU1MiPkE8 L25zMTptYW51ZmFjdHVyaW5nT3JnYW5pemF0aW9uVHlwZT4KICAgICAgICAgIDxu czE6dXNlT2ZFUEFEZXNpZ25hdGVkUHJvZHVjdHMgZGVzY3JpcHRpb249Ik5PVCBS RVFVSVJFRCI+RTwvbnMxOnVzZU9mRVBBRGVzaWduYXRlZFByb2R1Y3RzPgogICAg ICAgICAgPG5zMTpjb3VudHJ5T2ZPcmlnaW4gbmFtZT0iVU5JVEVEIFNUQVRFUyI+ VVNBPC9uczE6Y291bnRyeU9mT3JpZ2luPgogICAgICAgICAgPG5zMTpwbGFjZU9m TWFudWZhY3R1cmUgZGVzY3JpcHRpb249Ik5PVCBBIE1BTlVGQUNUVVJFRCBFTkQg UFJPRFVDVCI+QzwvbnMxOnBsYWNlT2ZNYW51ZmFjdHVyZT48L25zMTpwcm9kdWN0 T3JTZXJ2aWNlSW5mb3JtYXRpb24+CiAgICAgICAgPG5zMTp2ZW5kb3I+CiAgICAg ICAgICA8bnMxOnZlbmRvckhlYWRlcj4KICAgICAgICAgICAgPG5zMTp2ZW5kb3JO YW1lPkFQRVhURUNIIExMQzwvbnMxOnZlbmRvck5hbWU+PC9uczE6dmVuZG9ySGVh ZGVyPgogICAgICAgICAgPG5zMTp2ZW5kb3JTaXRlRGV0YWlscz4KICAgICAgICAg ICAgPG5zMTp2ZW5kb3JTb2Npb0Vjb25vbWljSW5kaWNhdG9ycz4KICAgICAgICAg ICAgICA8bnMxOmlzQWxhc2thbk5hdGl2ZU93bmVkQ29ycG9yYXRpb25PckZpcm0+ ZmFsc2U8L25zMTppc0FsYXNrYW5OYXRpdmVPd25lZENvcnBvcmF0aW9uT3JGaXJt PgogICAgICAgICAgICAgIDxuczE6aXNBbWVyaWNhbkluZGlhbk93bmVkPmZhbHNl PC9uczE6aXNBbWVyaWNhbkluZGlhbk93bmVkPgogICAgICAgICAgICAgIDxuczE6 aXNJbmRpYW5UcmliZT5mYWxzZTwvbnMxOmlzSW5kaWFuVHJpYmU+CiAgICAgICAg ICAgICAgPG5zMTppc05hdGl2ZUhhd2FpaWFuT3duZWRPcmdhbml6YXRpb25PckZp cm0+ZmFsc2U8L25zMTppc05hdGl2ZUhhd2FpaWFuT3duZWRPcmdhbml6YXRpb25P ckZpcm0+CiAgICAgICAgICAgICAgPG5zMTppc1RyaWJhbGx5T3duZWRGaXJtPmZh bHNlPC9uczE6aXNUcmliYWxseU93bmVkRmlybT4KICAgICAgICAgICAgICA8bnMx OmlzVmV0ZXJhbk93bmVkPmZhbHNlPC9uczE6aXNWZXRlcmFuT3duZWQ+CiAgICAg ICAgICAgICAgPG5zMTppc1NlcnZpY2VSZWxhdGVkRGlzYWJsZWRWZXRlcmFuT3du ZWRCdXNpbmVzcz5mYWxzZTwvbnMxOmlzU2VydmljZVJlbGF0ZWREaXNhYmxlZFZl dGVyYW5Pd25lZEJ1c2luZXNzPgogICAgICAgICAgICAgIDxuczE6aXNXb21lbk93 bmVkPmZhbHNlPC9uczE6aXNXb21lbk93bmVkPgogICAgICAgICAgICAgIDxuczE6 bWlub3JpdHlPd25lZD4KICAgICAgICAgICAgICAgIDxuczE6aXNNaW5vcml0eU93 bmVkPnRydWU8L25zMTppc01pbm9yaXR5T3duZWQ+CiAgICAgICAgICAgICAgICA8 bnMxOmlzU3ViQ29udGluZW50QXNpYW5BbWVyaWNhbk93bmVkQnVzaW5lc3M+ZmFs c2U8L25zMTppc1N1YkNvbnRpbmVudEFzaWFuQW1lcmljYW5Pd25lZEJ1c2luZXNz PgogICAgICAgICAgICAgICAgPG5zMTppc0FzaWFuUGFjaWZpY0FtZXJpY2FuT3du ZWRCdXNpbmVzcz5mYWxzZTwvbnMxOmlzQXNpYW5QYWNpZmljQW1lcmljYW5Pd25l ZEJ1c2luZXNzPgogICAgICAgICAgICAgICAgPG5zMTppc0JsYWNrQW1lcmljYW5P d25lZEJ1c2luZXNzPmZhbHNlPC9uczE6aXNCbGFja0FtZXJpY2FuT3duZWRCdXNp bmVzcz4KICAgICAgICAgICAgICAgIDxuczE6aXNIaXNwYW5pY0FtZXJpY2FuT3du ZWRCdXNpbmVzcz50cnVlPC9uczE6aXNIaXNwYW5pY0FtZXJpY2FuT3duZWRCdXNp bmVzcz4KICAgICAgICAgICAgICAgIDxuczE6aXNOYXRpdmVBbWVyaWNhbk93bmVk QnVzaW5lc3M+ZmFsc2U8L25zMTppc05hdGl2ZUFtZXJpY2FuT3duZWRCdXNpbmVz cz4KICAgICAgICAgICAgICAgIDxuczE6aXNPdGhlck1pbm9yaXR5T3duZWQ+ZmFs c2U8L25zMTppc090aGVyTWlub3JpdHlPd25lZD48L25zMTptaW5vcml0eU93bmVk PgogICAgICAgICAgICAgIDxuczE6aXNWZXJ5U21hbGxCdXNpbmVzcz5mYWxzZTwv bnMxOmlzVmVyeVNtYWxsQnVzaW5lc3M+CiAgICAgICAgICAgICAgPG5zMTppc1dv bWVuT3duZWRTbWFsbEJ1c2luZXNzPmZhbHNlPC9uczE6aXNXb21lbk93bmVkU21h bGxCdXNpbmVzcz4KICAgICAgICAgICAgICA8bnMxOmlzRWNvbm9taWNhbGx5RGlz YWR2YW50YWdlZFdvbWVuT3duZWRTbWFsbEJ1c2luZXNzPmZhbHNlPC9uczE6aXNF Y29ub21pY2FsbHlEaXNhZHZhbnRhZ2VkV29tZW5Pd25lZFNtYWxsQnVzaW5lc3M+ CiAgICAgICAgICAgICAgPG5zMTppc0pvaW50VmVudHVyZVdvbWVuT3duZWRTbWFs bEJ1c2luZXNzPmZhbHNlPC9uczE6aXNKb2ludFZlbnR1cmVXb21lbk93bmVkU21h bGxCdXNpbmVzcz4KICAgICAgICAgICAgICA8bnMxOmlzSm9pbnRWZW50dXJlRWNv bm9taWNhbGx5RGlzYWR2YW50YWdlZFdvbWVuT3duZWRTbWFsbEJ1c2luZXNzPmZh bHNlPC9uczE6aXNKb2ludFZlbnR1cmVFY29ub21pY2FsbHlEaXNhZHZhbnRhZ2Vk V29tZW5Pd25lZFNtYWxsQnVzaW5lc3M+PC9uczE6dmVuZG9yU29jaW9FY29ub21p Y0luZGljYXRvcnM+CiAgICAgICAgICAgIDxuczE6dmVuZG9yQnVzaW5lc3NUeXBl cz4KICAgICAgICAgICAgICA8bnMxOmlzQ29tbXVuaXR5RGV2ZWxvcGVkQ29ycG9y YXRpb25Pd25lZEZpcm0+ZmFsc2U8L25zMTppc0NvbW11bml0eURldmVsb3BlZENv cnBvcmF0aW9uT3duZWRGaXJtPgogICAgICAgICAgICAgIDxuczE6aXNMYWJvclN1 cnBsdXNBcmVhRmlybT5mYWxzZTwvbnMxOmlzTGFib3JTdXJwbHVzQXJlYUZpcm0+ CiAgICAgICAgICAgICAgPG5zMTpmZWRlcmFsR292ZXJubWVudD4KICAgICAgICAg ICAgICAgIDxuczE6aXNGZWRlcmFsR292ZXJubWVudD5mYWxzZTwvbnMxOmlzRmVk ZXJhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzRmVkZXJhbGx5 RnVuZGVkUmVzZWFyY2hBbmREZXZlbG9wbWVudENvcnA+ZmFsc2U8L25zMTppc0Zl ZGVyYWxseUZ1bmRlZFJlc2VhcmNoQW5kRGV2ZWxvcG1lbnRDb3JwPgogICAgICAg ICAgICAgICAgPG5zMTppc0ZlZGVyYWxHb3Zlcm5tZW50QWdlbmN5PmZhbHNlPC9u czE6aXNGZWRlcmFsR292ZXJubWVudEFnZW5jeT48L25zMTpmZWRlcmFsR292ZXJu bWVudD4KICAgICAgICAgICAgICA8bnMxOmlzU3RhdGVHb3Zlcm5tZW50PmZhbHNl PC9uczE6aXNTdGF0ZUdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgPG5zMTpsb2Nh bEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzTG9jYWxHb3Zlcm5t ZW50PmZhbHNlPC9uczE6aXNMb2NhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAg ICA8bnMxOmlzQ2l0eUxvY2FsR292ZXJubWVudD5mYWxzZTwvbnMxOmlzQ2l0eUxv Y2FsR292ZXJubWVudD4KICAgICAgICAgICAgICAgIDxuczE6aXNDb3VudHlMb2Nh bEdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc0NvdW50eUxvY2FsR292ZXJubWVudD4K ICAgICAgICAgICAgICAgIDxuczE6aXNJbnRlck11bmljaXBhbExvY2FsR292ZXJu bWVudD5mYWxzZTwvbnMxOmlzSW50ZXJNdW5pY2lwYWxMb2NhbEdvdmVybm1lbnQ+ CiAgICAgICAgICAgICAgICA8bnMxOmlzTG9jYWxHb3Zlcm5tZW50T3duZWQ+ZmFs c2U8L25zMTppc0xvY2FsR292ZXJubWVudE93bmVkPgogICAgICAgICAgICAgICAg PG5zMTppc011bmljaXBhbGl0eUxvY2FsR292ZXJubWVudD5mYWxzZTwvbnMxOmlz TXVuaWNpcGFsaXR5TG9jYWxHb3Zlcm5tZW50PgogICAgICAgICAgICAgICAgPG5z MTppc1NjaG9vbERpc3RyaWN0TG9jYWxHb3Zlcm5tZW50PmZhbHNlPC9uczE6aXNT Y2hvb2xEaXN0cmljdExvY2FsR292ZXJubWVudD4KICAgICAgICAgICAgICAgIDxu czE6aXNUb3duc2hpcExvY2FsR292ZXJubWVudD5mYWxzZTwvbnMxOmlzVG93bnNo aXBMb2NhbEdvdmVybm1lbnQ+PC9uczE6bG9jYWxHb3Zlcm5tZW50PgogICAgICAg ICAgICAgIDxuczE6aXNUcmliYWxHb3Zlcm5tZW50PmZhbHNlPC9uczE6aXNUcmli YWxHb3Zlcm5tZW50PgogICAgICAgICAgICAgIDxuczE6aXNGb3JlaWduR292ZXJu bWVudD5mYWxzZTwvbnMxOmlzRm9yZWlnbkdvdmVybm1lbnQ+CiAgICAgICAgICAg ICAgPG5zMTpidXNpbmVzc09yT3JnYW5pemF0aW9uVHlwZT4KICAgICAgICAgICAg ICAgIDxuczE6aXNDb3Jwb3JhdGVFbnRpdHlOb3RUYXhFeGVtcHQ+ZmFsc2U8L25z MTppc0NvcnBvcmF0ZUVudGl0eU5vdFRheEV4ZW1wdD4KICAgICAgICAgICAgICAg IDxuczE6aXNDb3Jwb3JhdGVFbnRpdHlUYXhFeGVtcHQ+ZmFsc2U8L25zMTppc0Nv cnBvcmF0ZUVudGl0eVRheEV4ZW1wdD4KICAgICAgICAgICAgICAgIDxuczE6aXNQ YXJ0bmVyc2hpcE9yTGltaXRlZExpYWJpbGl0eVBhcnRuZXJzaGlwPmZhbHNlPC9u czE6aXNQYXJ0bmVyc2hpcE9yTGltaXRlZExpYWJpbGl0eVBhcnRuZXJzaGlwPgog ICAgICAgICAgICAgICAgPG5zMTppc1NvbGVQcm9wcmVpdG9yc2hpcD5mYWxzZTwv bnMxOmlzU29sZVByb3ByZWl0b3JzaGlwPgogICAgICAgICAgICAgICAgPG5zMTpp c1NtYWxsQWdyaWN1bHR1cmFsQ29vcGVyYXRpdmU+ZmFsc2U8L25zMTppc1NtYWxs QWdyaWN1bHR1cmFsQ29vcGVyYXRpdmU+CiAgICAgICAgICAgICAgICA8bnMxOmlz SW50ZXJuYXRpb25hbE9yZ2FuaXphdGlvbj5mYWxzZTwvbnMxOmlzSW50ZXJuYXRp b25hbE9yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxuczE6aXNVU0dvdmVy bm1lbnRFbnRpdHk+ZmFsc2U8L25zMTppc1VTR292ZXJubWVudEVudGl0eT48L25z MTpidXNpbmVzc09yT3JnYW5pemF0aW9uVHlwZT48L25zMTp2ZW5kb3JCdXNpbmVz c1R5cGVzPgogICAgICAgICAgICA8bnMxOnZlbmRvckxpbmVPZkJ1c2luZXNzPgog ICAgICAgICAgICAgIDxuczE6aXNDb21tdW5pdHlEZXZlbG9wbWVudENvcnBvcmF0 aW9uPmZhbHNlPC9uczE6aXNDb21tdW5pdHlEZXZlbG9wbWVudENvcnBvcmF0aW9u PgogICAgICAgICAgICAgIDxuczE6aXNEb21lc3RpY1NoZWx0ZXI+ZmFsc2U8L25z MTppc0RvbWVzdGljU2hlbHRlcj4KICAgICAgICAgICAgICA8bnMxOmlzRWR1Y2F0 aW9uYWxJbnN0aXR1dGlvbj5mYWxzZTwvbnMxOmlzRWR1Y2F0aW9uYWxJbnN0aXR1 dGlvbj4KICAgICAgICAgICAgICA8bnMxOmlzRm91bmRhdGlvbj5mYWxzZTwvbnMx OmlzRm91bmRhdGlvbj4KICAgICAgICAgICAgICA8bnMxOmlzSG9zcGl0YWw+ZmFs c2U8L25zMTppc0hvc3BpdGFsPgogICAgICAgICAgICAgIDxuczE6aXNNYW51ZmFj dHVyZXJPZkdvb2RzPmZhbHNlPC9uczE6aXNNYW51ZmFjdHVyZXJPZkdvb2RzPgog ICAgICAgICAgICAgIDxuczE6aXNWZXRlcmluYXJ5SG9zcGl0YWw+ZmFsc2U8L25z MTppc1ZldGVyaW5hcnlIb3NwaXRhbD4KICAgICAgICAgICAgICA8bnMxOmlzSGlz cGFuaWNTZXJ2aWNpbmdJbnN0aXR1dGlvbj5mYWxzZTwvbnMxOmlzSGlzcGFuaWNT ZXJ2aWNpbmdJbnN0aXR1dGlvbj48L25zMTp2ZW5kb3JMaW5lT2ZCdXNpbmVzcz4K ICAgICAgICAgICAgPG5zMTp2ZW5kb3JSZWxhdGlvbnNoaXBXaXRoRmVkZXJhbEdv dmVybm1lbnQ+CiAgICAgICAgICAgICAgPG5zMTpyZWNlaXZlc0NvbnRyYWN0cz50 cnVlPC9uczE6cmVjZWl2ZXNDb250cmFjdHM+CiAgICAgICAgICAgICAgPG5zMTpy ZWNlaXZlc0dyYW50cz5mYWxzZTwvbnMxOnJlY2VpdmVzR3JhbnRzPgogICAgICAg ICAgICAgIDxuczE6cmVjZWl2ZXNDb250cmFjdHNBbmRHcmFudHM+ZmFsc2U8L25z MTpyZWNlaXZlc0NvbnRyYWN0c0FuZEdyYW50cz48L25zMTp2ZW5kb3JSZWxhdGlv bnNoaXBXaXRoRmVkZXJhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgIDxuczE6dHlw ZU9mR292ZXJubWVudEVudGl0eT4KICAgICAgICAgICAgICA8bnMxOmlzQWlycG9y dEF1dGhvcml0eT5mYWxzZTwvbnMxOmlzQWlycG9ydEF1dGhvcml0eT4KICAgICAg ICAgICAgICA8bnMxOmlzQ291bmNpbE9mR292ZXJubWVudHM+ZmFsc2U8L25zMTpp c0NvdW5jaWxPZkdvdmVybm1lbnRzPgogICAgICAgICAgICAgIDxuczE6aXNIb3Vz aW5nQXV0aG9yaXRpZXNQdWJsaWNPclRyaWJhbD5mYWxzZTwvbnMxOmlzSG91c2lu Z0F1dGhvcml0aWVzUHVibGljT3JUcmliYWw+CiAgICAgICAgICAgICAgPG5zMTpp c0ludGVyc3RhdGVFbnRpdHk+ZmFsc2U8L25zMTppc0ludGVyc3RhdGVFbnRpdHk+ CiAgICAgICAgICAgICAgPG5zMTppc1BsYW5uaW5nQ29tbWlzc2lvbj5mYWxzZTwv bnMxOmlzUGxhbm5pbmdDb21taXNzaW9uPgogICAgICAgICAgICAgIDxuczE6aXNQ b3J0QXV0aG9yaXR5PmZhbHNlPC9uczE6aXNQb3J0QXV0aG9yaXR5PgogICAgICAg ICAgICAgIDxuczE6aXNUcmFuc2l0QXV0aG9yaXR5PmZhbHNlPC9uczE6aXNUcmFu c2l0QXV0aG9yaXR5PjwvbnMxOnR5cGVPZkdvdmVybm1lbnRFbnRpdHk+CiAgICAg ICAgICAgIDxuczE6dmVuZG9yT3JnYW5pemF0aW9uRmFjdG9ycz4KICAgICAgICAg ICAgICA8bnMxOmlzU3ViY2hhcHRlclNDb3Jwb3JhdGlvbj5mYWxzZTwvbnMxOmlz U3ViY2hhcHRlclNDb3Jwb3JhdGlvbj4KICAgICAgICAgICAgICA8bnMxOmlzTGlt aXRlZExpYWJpbGl0eUNvcnBvcmF0aW9uPnRydWU8L25zMTppc0xpbWl0ZWRMaWFi aWxpdHlDb3Jwb3JhdGlvbj4KICAgICAgICAgICAgICA8bnMxOmlzRm9yZWlnbk93 bmVkQW5kTG9jYXRlZD5mYWxzZTwvbnMxOmlzRm9yZWlnbk93bmVkQW5kTG9jYXRl ZD4KICAgICAgICAgICAgICA8bnMxOnByb2ZpdFN0cnVjdHVyZT4KICAgICAgICAg ICAgICAgIDxuczE6aXNGb3JQcm9maXRPcmdhbml6YXRpb24+dHJ1ZTwvbnMxOmlz Rm9yUHJvZml0T3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPG5zMTppc05v bnByb2ZpdE9yZ2FuaXphdGlvbj5mYWxzZTwvbnMxOmlzTm9ucHJvZml0T3JnYW5p emF0aW9uPgogICAgICAgICAgICAgICAgPG5zMTppc090aGVyTm90Rm9yUHJvZml0 T3JnYW5pemF0aW9uPmZhbHNlPC9uczE6aXNPdGhlck5vdEZvclByb2ZpdE9yZ2Fu aXphdGlvbj48L25zMTpwcm9maXRTdHJ1Y3R1cmU+CiAgICAgICAgICAgICAgPG5z MTppc1NoZWx0ZXJlZFdvcmtzaG9wPmZhbHNlPC9uczE6aXNTaGVsdGVyZWRXb3Jr c2hvcD4KICAgICAgICAgICAgICA8bnMxOm9yZ2FuaXphdGlvbmFsVHlwZT5PVEhF UjwvbnMxOm9yZ2FuaXphdGlvbmFsVHlwZT4KICAgICAgICAgICAgICA8bnMxOm51 bWJlck9mRW1wbG95ZWVzPjEzPC9uczE6bnVtYmVyT2ZFbXBsb3llZXM+CiAgICAg ICAgICAgICAgPG5zMTphbm51YWxSZXZlbnVlPjIwMDAwMDA8L25zMTphbm51YWxS ZXZlbnVlPjwvbnMxOnZlbmRvck9yZ2FuaXphdGlvbkZhY3RvcnM+CiAgICAgICAg ICAgIDxuczE6dHlwZU9mRWR1Y2F0aW9uYWxFbnRpdHk+CiAgICAgICAgICAgICAg PG5zMTppczE4NjJMYW5kR3JhbnRDb2xsZWdlPmZhbHNlPC9uczE6aXMxODYyTGFu ZEdyYW50Q29sbGVnZT4KICAgICAgICAgICAgICA8bnMxOmlzMTg5MExhbmRHcmFu dENvbGxlZ2U+ZmFsc2U8L25zMTppczE4OTBMYW5kR3JhbnRDb2xsZWdlPgogICAg ICAgICAgICAgIDxuczE6aXMxOTk0TGFuZEdyYW50Q29sbGVnZT5mYWxzZTwvbnMx OmlzMTk5NExhbmRHcmFudENvbGxlZ2U+CiAgICAgICAgICAgICAgPG5zMTppc0hp c3RvcmljYWxseUJsYWNrQ29sbGVnZU9yVW5pdmVyc2l0eT5mYWxzZTwvbnMxOmlz SGlzdG9yaWNhbGx5QmxhY2tDb2xsZWdlT3JVbml2ZXJzaXR5PgogICAgICAgICAg ICAgIDxuczE6aXNNaW5vcml0eUluc3RpdHV0aW9uPmZhbHNlPC9uczE6aXNNaW5v cml0eUluc3RpdHV0aW9uPgogICAgICAgICAgICAgIDxuczE6aXNQcml2YXRlVW5p dmVyc2l0eU9yQ29sbGVnZT5mYWxzZTwvbnMxOmlzUHJpdmF0ZVVuaXZlcnNpdHlP ckNvbGxlZ2U+CiAgICAgICAgICAgICAgPG5zMTppc1NjaG9vbE9mRm9yZXN0cnk+ ZmFsc2U8L25zMTppc1NjaG9vbE9mRm9yZXN0cnk+CiAgICAgICAgICAgICAgPG5z MTppc1N0YXRlQ29udHJvbGxlZEluc3RpdHV0aW9ub2ZIaWdoZXJMZWFybmluZz5m YWxzZTwvbnMxOmlzU3RhdGVDb250cm9sbGVkSW5zdGl0dXRpb25vZkhpZ2hlckxl YXJuaW5nPgogICAgICAgICAgICAgIDxuczE6aXNUcmliYWxDb2xsZWdlPmZhbHNl PC9uczE6aXNUcmliYWxDb2xsZWdlPgogICAgICAgICAgICAgIDxuczE6aXNWZXRl cmluYXJ5Q29sbGVnZT5mYWxzZTwvbnMxOmlzVmV0ZXJpbmFyeUNvbGxlZ2U+CiAg ICAgICAgICAgICAgPG5zMTppc0FsYXNrYW5OYXRpdmVTZXJ2aWNpbmdJbnN0aXR1 dGlvbj5mYWxzZTwvbnMxOmlzQWxhc2thbk5hdGl2ZVNlcnZpY2luZ0luc3RpdHV0 aW9uPgogICAgICAgICAgICAgIDxuczE6aXNOYXRpdmVIYXdhaWlhblNlcnZpY2lu Z0luc3RpdHV0aW9uPmZhbHNlPC9uczE6aXNOYXRpdmVIYXdhaWlhblNlcnZpY2lu Z0luc3RpdHV0aW9uPjwvbnMxOnR5cGVPZkVkdWNhdGlvbmFsRW50aXR5PgogICAg ICAgICAgICA8bnMxOnZlbmRvckNlcnRpZmljYXRpb25zPgogICAgICAgICAgICAg IDxuczE6aXNET1RDZXJ0aWZpZWREaXNhZHZhbnRhZ2VkQnVzaW5lc3NFbnRlcnBy aXNlPnRydWU8L25zMTppc0RPVENlcnRpZmllZERpc2FkdmFudGFnZWRCdXNpbmVz c0VudGVycHJpc2U+CiAgICAgICAgICAgICAgPG5zMTppc1NlbGZDZXJ0aWZpZWRT bWFsbERpc2FkdmFudGFnZWRCdXNpbmVzcz5mYWxzZTwvbnMxOmlzU2VsZkNlcnRp ZmllZFNtYWxsRGlzYWR2YW50YWdlZEJ1c2luZXNzPgogICAgICAgICAgICAgIDxu czE6aXNTQkFDZXJ0aWZpZWRTbWFsbERpc2FkdmFudGFnZWRCdXNpbmVzcz50cnVl PC9uczE6aXNTQkFDZXJ0aWZpZWRTbWFsbERpc2FkdmFudGFnZWRCdXNpbmVzcz4K ICAgICAgICAgICAgICA8bnMxOmlzU0JBQ2VydGlmaWVkOEFQcm9ncmFtUGFydGlj aXBhbnQ+dHJ1ZTwvbnMxOmlzU0JBQ2VydGlmaWVkOEFQcm9ncmFtUGFydGljaXBh bnQ+CiAgICAgICAgICAgICAgPG5zMTppc1NlbGZDZXJ0aWZpZWRIVUJab25lSm9p bnRWZW50dXJlPmZhbHNlPC9uczE6aXNTZWxmQ2VydGlmaWVkSFVCWm9uZUpvaW50 VmVudHVyZT4KICAgICAgICAgICAgICA8bnMxOmlzU0JBQ2VydGlmaWVkSFVCWm9u ZT5mYWxzZTwvbnMxOmlzU0JBQ2VydGlmaWVkSFVCWm9uZT4KICAgICAgICAgICAg ICA8bnMxOmlzU0JBQ2VydGlmaWVkOEFKb2ludFZlbnR1cmU+ZmFsc2U8L25zMTpp c1NCQUNlcnRpZmllZDhBSm9pbnRWZW50dXJlPjwvbnMxOnZlbmRvckNlcnRpZmlj YXRpb25zPgogICAgICAgICAgICA8bnMxOnZlbmRvckxvY2F0aW9uPgogICAgICAg ICAgICAgIDxuczE6c3RyZWV0QWRkcmVzcz4yMjAwIFdJTFNPTiBCTFZEIFNURSA4 MTA8L25zMTpzdHJlZXRBZGRyZXNzPgogICAgICAgICAgICAgIDxuczE6Y2l0eT5B UkxJTkdUT048L25zMTpjaXR5PgogICAgICAgICAgICAgIDxuczE6c3RhdGUgbmFt ZT0iVklSR0lOSUEiPlZBPC9uczE6c3RhdGU+CiAgICAgICAgICAgICAgPG5zMTpa SVBDb2RlPjIyMjAxMzM2MTwvbnMxOlpJUENvZGU+CiAgICAgICAgICAgICAgPG5z MTpjb3VudHJ5Q29kZSBuYW1lPSJVTklURUQgU1RBVEVTIj5VU0E8L25zMTpjb3Vu dHJ5Q29kZT4KICAgICAgICAgICAgICA8bnMxOnBob25lTm8+NzAzMjUzOTcyMjwv bnMxOnBob25lTm8+CiAgICAgICAgICAgICAgPG5zMTpmYXhObz43MDM1MjIyMDM3 PC9uczE6ZmF4Tm8+CiAgICAgICAgICAgICAgPG5zMTpjb25ncmVzc2lvbmFsRGlz dHJpY3RDb2RlPjA4PC9uczE6Y29uZ3Jlc3Npb25hbERpc3RyaWN0Q29kZT48L25z MTp2ZW5kb3JMb2NhdGlvbj4KICAgICAgICAgICAgPG5zMTp2ZW5kb3JTaXRlQ29k ZT4xMjYyNDIxNTA8L25zMTp2ZW5kb3JTaXRlQ29kZT4KICAgICAgICAgICAgPG5z MTp2ZW5kb3JBbHRlcm5hdGVTaXRlQ29kZT4yMjIwMTMzOTc8L25zMTp2ZW5kb3JB bHRlcm5hdGVTaXRlQ29kZT4KICAgICAgICAgICAgPG5zMTp2ZW5kb3JEVU5TSW5m b3JtYXRpb24+CiAgICAgICAgICAgICAgPG5zMTpEVU5TTnVtYmVyPjEyNjI0MjE1 MDwvbnMxOkRVTlNOdW1iZXI+CiAgICAgICAgICAgICAgPG5zMTpjYWdlQ29kZT4z QzdSMTwvbnMxOmNhZ2VDb2RlPgogICAgICAgICAgICAgIDxuczE6dmVuZG9yTmFt ZT5BUEVYVEVDSCBMTEM8L25zMTp2ZW5kb3JOYW1lPgogICAgICAgICAgICAgIDxu czE6Z2xvYmFsUGFyZW50RFVOU051bWJlcj4xMjYyNDIxNTA8L25zMTpnbG9iYWxQ YXJlbnREVU5TTnVtYmVyPgogICAgICAgICAgICAgIDxuczE6Z2xvYmFsUGFyZW50 RFVOU05hbWU+QVBFWFRFQ0ggTExDPC9uczE6Z2xvYmFsUGFyZW50RFVOU05hbWU+ PC9uczE6dmVuZG9yRFVOU0luZm9ybWF0aW9uPgogICAgICAgICAgICA8bnMxOmNj clJlZ2lzdHJhdGlvbkRldGFpbHM+CiAgICAgICAgICAgICAgPG5zMTpyZWdpc3Ry YXRpb25EYXRlPjIwMDMtMDEtMTUgMDA6MDA6MDA8L25zMTpyZWdpc3RyYXRpb25E YXRlPgogICAgICAgICAgICAgIDxuczE6cmVuZXdhbERhdGU+MjAxNC0wNy0zMSAw MDowMDowMDwvbnMxOnJlbmV3YWxEYXRlPjwvbnMxOmNjclJlZ2lzdHJhdGlvbkRl dGFpbHM+PC9uczE6dmVuZG9yU2l0ZURldGFpbHM+CiAgICAgICAgICA8bnMxOmNv bnRyYWN0aW5nT2ZmaWNlckJ1c2luZXNzU2l6ZURldGVybWluYXRpb24gZGVzY3Jp cHRpb249IlNNQUxMIEJVU0lORVNTIj5TPC9uczE6Y29udHJhY3RpbmdPZmZpY2Vy QnVzaW5lc3NTaXplRGV0ZXJtaW5hdGlvbj48L25zMTp2ZW5kb3I+CiAgICAgICAg PG5zMTpwbGFjZU9mUGVyZm9ybWFuY2U+CiAgICAgICAgICA8bnMxOnByaW5jaXBh bFBsYWNlT2ZQZXJmb3JtYW5jZT4KICAgICAgICAgICAgPG5zMTpzdGF0ZUNvZGUg bmFtZT0iTUFSWUxBTkQiPk1EPC9uczE6c3RhdGVDb2RlPgogICAgICAgICAgICA8 bnMxOmNvdW50cnlDb2RlIG5hbWU9IlVOSVRFRCBTVEFURVMiPlVTQTwvbnMxOmNv dW50cnlDb2RlPjwvbnMxOnByaW5jaXBhbFBsYWNlT2ZQZXJmb3JtYW5jZT4KICAg ICAgICAgIDxuczE6cGxhY2VPZlBlcmZvcm1hbmNlWklQQ29kZSBjb3VudHk9IlBS SU5DRSBHRU9SR0VTIiBjaXR5PSJCRUxUU1ZJTExFIj4yMDcwNTEwMDM8L25zMTpw bGFjZU9mUGVyZm9ybWFuY2VaSVBDb2RlPgogICAgICAgICAgPG5zMTpwbGFjZU9m UGVyZm9ybWFuY2VDb25ncmVzc2lvbmFsRGlzdHJpY3Q+MDQ8L25zMTpwbGFjZU9m UGVyZm9ybWFuY2VDb25ncmVzc2lvbmFsRGlzdHJpY3Q+PC9uczE6cGxhY2VPZlBl cmZvcm1hbmNlPgogICAgICAgIDxuczE6Y29tcGV0aXRpb24+CiAgICAgICAgICA8 bnMxOmV4dGVudENvbXBldGVkIGRlc2NyaXB0aW9uPSJGVUxMIEFORCBPUEVOIENP TVBFVElUSU9OIEFGVEVSIEVYQ0xVU0lPTiBPRiBTT1VSQ0VTIj5EPC9uczE6ZXh0 ZW50Q29tcGV0ZWQ+CiAgICAgICAgICA8bnMxOnNvbGljaXRhdGlvblByb2NlZHVy ZXMgZGVzY3JpcHRpb249IlNVQkpFQ1QgVE8gTVVMVElQTEUgQVdBUkQgRkFJUiBP UFBPUlRVTklUWSI+TUFGTzwvbnMxOnNvbGljaXRhdGlvblByb2NlZHVyZXM+CiAg ICAgICAgICA8bnMxOnR5cGVPZlNldEFzaWRlIGRlc2NyaXB0aW9uPSI4QSBDT01Q RVRFRCI+OEE8L25zMTp0eXBlT2ZTZXRBc2lkZT4KICAgICAgICAgIDxuczE6ZXZh bHVhdGVkUHJlZmVyZW5jZSBkZXNjcmlwdGlvbj0iTk8gUFJFRkVSRU5DRSBVU0VE Ij5OT05FPC9uczE6ZXZhbHVhdGVkUHJlZmVyZW5jZT4KICAgICAgICAgIDxuczE6 c3RhdHV0b3J5RXhjZXB0aW9uVG9GYWlyT3Bwb3J0dW5pdHkgZGVzY3JpcHRpb249 Ik9USEVSIFNUQVRVVE9SWSBBVVRIT1JJVFkiPk9TQTwvbnMxOnN0YXR1dG9yeUV4 Y2VwdGlvblRvRmFpck9wcG9ydHVuaXR5PgogICAgICAgICAgPG5zMTpjb21tZXJj aWFsSXRlbUFjcXVpc2l0aW9uUHJvY2VkdXJlcyBkZXNjcmlwdGlvbj0iQ09NTUVS Q0lBTCBJVEVNIj5BPC9uczE6Y29tbWVyY2lhbEl0ZW1BY3F1aXNpdGlvblByb2Nl ZHVyZXM+CiAgICAgICAgICA8bnMxOmNvbW1lcmNpYWxJdGVtVGVzdFByb2dyYW0g ZGVzY3JpcHRpb249Ik5PIj5OPC9uczE6Y29tbWVyY2lhbEl0ZW1UZXN0UHJvZ3Jh bT4KICAgICAgICAgIDxuczE6QTc2QWN0aW9uIGRlc2NyaXB0aW9uPSJOTyI+Tjwv bnMxOkE3NkFjdGlvbj4KICAgICAgICAgIDxuczE6ZmVkQml6T3BwcyBkZXNjcmlw dGlvbj0iWUVTIj5ZPC9uczE6ZmVkQml6T3Bwcz4KICAgICAgICAgIDxuczE6bG9j YWxBcmVhU2V0QXNpZGUgZGVzY3JpcHRpb249Ik5PIj5OPC9uczE6bG9jYWxBcmVh U2V0QXNpZGU+PC9uczE6Y29tcGV0aXRpb24+CiAgICAgICAgPG5zMTpwcmVmZXJl bmNlUHJvZ3JhbXM+PC9uczE6cHJlZmVyZW5jZVByb2dyYW1zPgogICAgICAgIDxu czE6dHJhbnNhY3Rpb25JbmZvcm1hdGlvbj4KICAgICAgICAgIDxuczE6Y3JlYXRl ZEJ5PlBBVUwuTUVSUklUVEBBUlMuVVNEQS5HT1Y8L25zMTpjcmVhdGVkQnk+CiAg ICAgICAgICA8bnMxOmNyZWF0ZWREYXRlPjIwMTctMDktMTkgMTA6MTk6MTE8L25z MTpjcmVhdGVkRGF0ZT4KICAgICAgICAgIDxuczE6bGFzdE1vZGlmaWVkQnk+SURW X0NPUlJFQ1Q8L25zMTpsYXN0TW9kaWZpZWRCeT4KICAgICAgICAgIDxuczE6bGFz dE1vZGlmaWVkRGF0ZT4yMDE3LTEwLTA0IDE0OjIwOjQ4PC9uczE6bGFzdE1vZGlm aWVkRGF0ZT4KICAgICAgICAgIDxuczE6c3RhdHVzIGRlc2NyaXB0aW9uPSJGSU5B TCI+RjwvbnMxOnN0YXR1cz4KICAgICAgICAgIDxuczE6YXBwcm92ZWRCeT5QQVVM Lk1FUlJJVFRAQVJTLlVTREEuR09WPC9uczE6YXBwcm92ZWRCeT4KICAgICAgICAg IDxuczE6YXBwcm92ZWREYXRlPjIwMTctMDktMjIgMTQ6MzE6MDI8L25zMTphcHBy b3ZlZERhdGU+CiAgICAgICAgICA8bnMxOmNsb3NlZFN0YXR1cz5OPC9uczE6Y2xv c2VkU3RhdHVzPjwvbnMxOnRyYW5zYWN0aW9uSW5mb3JtYXRpb24+PC9uczE6YXdh cmQ+CiAgICA8L2NvbnRlbnQ+CiAgPC9lbnRyeT4KICA8ZW50cnk+CiAgICA8dGl0 bGU+PCFbQ0RBVEFbTmV3IERFTElWRVJZIE9SREVSIEhRMDQyMzA3RjAwMDkgYXdh cmRlZCB0byBETFQgU09MVVRJT05TIElOQ09SUE9SQVRFRCBmb3IgdGhlIGFtb3Vu dCBvZiAkMywxOTldXT48L3RpdGxlPgogICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUi IHR5cGU9InRleHQvaHRtbCIgaHJlZj0iaHR0cHM6Ly93d3cuZnBkcy5nb3YvZXpz ZWFyY2gvc2VhcmNoLmRvP3M9RlBEUyZhbXA7aW5kZXhOYW1lPWF3YXJkZnVsbCZh bXA7dGVtcGxhdGVOYW1lPTEuNS4xJmFtcDtxPUhRMDQyMzA3RjAwMDkrOTcwMCsi PjwvbGluaz4KICAgIDxtb2RpZmllZD4yMDE2LTAyLTE2IDEzOjEwOjA1PC9tb2Rp ZmllZD4KICAgIDxjb250ZW50IHhtbG5zOm5zMT0iaHR0cHM6Ly93d3cuZnBkcy5n b3YvRlBEUyIgdHlwZT0iYXBwbGljYXRpb24veG1sIj4KICAgICAgPG5zMTphd2Fy ZCB4bWxuczpuczE9Imh0dHA6Ly93d3cuZnBkc25nLmNvbS9GUERTIiB2ZXJzaW9u PSIxLjIiPgogICAgICAgIDxuczE6YXdhcmRJRD4KICAgICAgICAgIDxuczE6YXdh cmRDb250cmFjdElEPgogICAgICAgICAgICA8bnMxOmFnZW5jeUlEIG5hbWU9IkRF UFQgT0YgREVGRU5TRSI+OTcwMDwvbnMxOmFnZW5jeUlEPgogICAgICAgICAgICA8 bnMxOlBJSUQ+SFEwNDIzMDdGMDAwOTwvbnMxOlBJSUQ+CiAgICAgICAgICAgIDxu czE6bW9kTnVtYmVyPjA8L25zMTptb2ROdW1iZXI+CiAgICAgICAgICAgIDxuczE6 dHJhbnNhY3Rpb25OdW1iZXI+MDwvbnMxOnRyYW5zYWN0aW9uTnVtYmVyPjwvbnMx OmF3YXJkQ29udHJhY3RJRD4KICAgICAgICAgIDxuczE6cmVmZXJlbmNlZElEVklE PgogICAgICAgICAgICA8bnMxOmFnZW5jeUlEIG5hbWU9IkZFREVSQUwgQUNRVUlT SVRJT04gU0VSVklDRSI+NDczMDwvbnMxOmFnZW5jeUlEPgogICAgICAgICAgICA8 bnMxOlBJSUQ+R1MzNUY0NTQzRzwvbnMxOlBJSUQ+CiAgICAgICAgICAgIDxuczE6 bW9kTnVtYmVyPjA8L25zMTptb2ROdW1iZXI+PC9uczE6cmVmZXJlbmNlZElEVklE PjwvbnMxOmF3YXJkSUQ+CiAgICAgICAgPG5zMTpyZWxldmFudENvbnRyYWN0RGF0 ZXM+CiAgICAgICAgICA8bnMxOnNpZ25lZERhdGU+MjAwNi0xMC0wMSAwMDowMDow MDwvbnMxOnNpZ25lZERhdGU+CiAgICAgICAgICA8bnMxOmVmZmVjdGl2ZURhdGU+ MjAwNi0xMC0wMSAwMDowMDowMDwvbnMxOmVmZmVjdGl2ZURhdGU+CiAgICAgICAg ICA8bnMxOmN1cnJlbnRDb21wbGV0aW9uRGF0ZT4yMDA3LTA5LTMwIDAwOjAwOjAw PC9uczE6Y3VycmVudENvbXBsZXRpb25EYXRlPgogICAgICAgICAgPG5zMTp1bHRp bWF0ZUNvbXBsZXRpb25EYXRlPjIwMDctMDktMzAgMDA6MDA6MDA8L25zMTp1bHRp bWF0ZUNvbXBsZXRpb25EYXRlPjwvbnMxOnJlbGV2YW50Q29udHJhY3REYXRlcz4K ICAgICAgICA8bnMxOmRvbGxhclZhbHVlcz4KICAgICAgICAgIDxuczE6b2JsaWdh dGVkQW1vdW50PjMxOTkuMDA8L25zMTpvYmxpZ2F0ZWRBbW91bnQ+CiAgICAgICAg ICA8bnMxOmJhc2VBbmRFeGVyY2lzZWRPcHRpb25zVmFsdWU+MzE5OS4wMDwvbnMx OmJhc2VBbmRFeGVyY2lzZWRPcHRpb25zVmFsdWU+CiAgICAgICAgICA8bnMxOmJh c2VBbmRBbGxPcHRpb25zVmFsdWU+MzE5OS4wMDwvbnMxOmJhc2VBbmRBbGxPcHRp b25zVmFsdWU+PC9uczE6ZG9sbGFyVmFsdWVzPgogICAgICAgIDxuczE6dG90YWxE b2xsYXJWYWx1ZXM+CiAgICAgICAgICA8bnMxOnRvdGFsT2JsaWdhdGVkQW1vdW50 PjMxOTkuMDA8L25zMTp0b3RhbE9ibGlnYXRlZEFtb3VudD4KICAgICAgICAgIDxu czE6dG90YWxCYXNlQW5kRXhlcmNpc2VkT3B0aW9uc1ZhbHVlPjMxOTkuMDA8L25z MTp0b3RhbEJhc2VBbmRFeGVyY2lzZWRPcHRpb25zVmFsdWU+CiAgICAgICAgICA8 bnMxOnRvdGFsQmFzZUFuZEFsbE9wdGlvbnNWYWx1ZT4zMTk5LjAwPC9uczE6dG90 YWxCYXNlQW5kQWxsT3B0aW9uc1ZhbHVlPjwvbnMxOnRvdGFsRG9sbGFyVmFsdWVz PgogICAgICAgIDxuczE6cHVyY2hhc2VySW5mb3JtYXRpb24+CiAgICAgICAgICA8 bnMxOmNvbnRyYWN0aW5nT2ZmaWNlQWdlbmN5SUQgbmFtZT0iREVGRU5TRSBGSU5B TkNFIEFORCBBQ0NPVU5USU5HIFNFUlZJQ0UgKERGQVMpIiBkZXBhcnRtZW50SUQ9 Ijk3MDAiIGRlcGFydG1lbnROYW1lPSJERVBUIE9GIERFRkVOU0UiPjk3Qlo8L25z MTpjb250cmFjdGluZ09mZmljZUFnZW5jeUlEPgogICAgICAgICAgPG5zMTpjb250 cmFjdGluZ09mZmljZUlEIG5hbWU9IkRFRkVOU0UgRklOQU5DRSBBTkQgQUNDT1VO VElORyBTVkMiIGNvdW50cnk9IlVTQSI+SFEwNDIzPC9uczE6Y29udHJhY3RpbmdP ZmZpY2VJRD4KICAgICAgICAgIDxuczE6ZnVuZGluZ1JlcXVlc3RpbmdBZ2VuY3lJ RCBuYW1lPSJERUZFTlNFIEZJTkFOQ0UgQU5EIEFDQ09VTlRJTkcgU0VSVklDRSAo REZBUykiIGRlcGFydG1lbnRJRD0iOTcwMCIgZGVwYXJ0bWVudE5hbWU9IkRFUFQg T0YgREVGRU5TRSI+OTdCWjwvbnMxOmZ1bmRpbmdSZXF1ZXN0aW5nQWdlbmN5SUQ+ CiAgICAgICAgICA8bnMxOmZ1bmRpbmdSZXF1ZXN0aW5nT2ZmaWNlSUQgbmFtZT0i REVGRU5TRSBGSU5BTkNFIEFORCBBQ0NPVU5USU5HIFNWQyI+SFEwNDIyPC9uczE6 ZnVuZGluZ1JlcXVlc3RpbmdPZmZpY2VJRD4KICAgICAgICAgIDxuczE6Zm9yZWln bkZ1bmRpbmcgZGVzY3JpcHRpb249Ik5PVCBBUFBMSUNBQkxFIj5YPC9uczE6Zm9y ZWlnbkZ1bmRpbmc+PC9uczE6cHVyY2hhc2VySW5mb3JtYXRpb24+CiAgICAgICAg PG5zMTpjb250cmFjdE1hcmtldGluZ0RhdGE+CiAgICAgICAgICA8bnMxOmZlZVBh aWRGb3JVc2VPZlNlcnZpY2U+MC4wMDwvbnMxOmZlZVBhaWRGb3JVc2VPZlNlcnZp Y2U+PC9uczE6Y29udHJhY3RNYXJrZXRpbmdEYXRhPgogICAgICAgIDxuczE6Y29u dHJhY3REYXRhPgogICAgICAgICAgPG5zMTpjb250cmFjdEFjdGlvblR5cGUgZGVz Y3JpcHRpb249IkRFTElWRVJZIE9SREVSIj5DPC9uczE6Y29udHJhY3RBY3Rpb25U eXBlPgogICAgICAgICAgPG5zMTp0eXBlT2ZDb250cmFjdFByaWNpbmcgZGVzY3Jp cHRpb249IkZJWEVEIFBSSUNFIj5KPC9uczE6dHlwZU9mQ29udHJhY3RQcmljaW5n PgogICAgICAgICAgPG5zMTpuYXRpb25hbEludGVyZXN0QWN0aW9uQ29kZSBkZXNj cmlwdGlvbj0iTk9ORSI+Tk9ORTwvbnMxOm5hdGlvbmFsSW50ZXJlc3RBY3Rpb25D b2RlPgogICAgICAgICAgPG5zMTpjb3N0QWNjb3VudGluZ1N0YW5kYXJkc0NsYXVz ZSBkZXNjcmlwdGlvbj0iTk9UIEFQUExJQ0FCTEUgRVhFTVBUIEZST00gQ0FTIj5Y PC9uczE6Y29zdEFjY291bnRpbmdTdGFuZGFyZHNDbGF1c2U+CiAgICAgICAgICA8 bnMxOmRlc2NyaXB0aW9uT2ZDb250cmFjdFJlcXVpcmVtZW50PlNRTCBOQVZJR0FU T1IgRk9SIE9SQUNMRSBTT0ZUV0FSRSBMSUNFTlNFIE1BSU5URU5BTkNFIFJFTkVX QUw7IFNRTCBOQVZJR0FUT1IgRk9SIE9SQUNMRSBYUEVSVCBUVU5JTkcgTU9EVUxF IFNPRlRXQVJFIExJQ0VOU0UgTUFJTlRFTkFOQ0UgUkVORVdBTDsgUEwgRk9STUFU IE9QVElPTiBGT1IgU1FMIE5BVklHQVRPUiBTT0ZUV0FSRSBMSUNFTlNFIE1BSU5U RU5BTkNFIFJFTkVXQUw7IERFQlVHR0VSIE9QVElPTiBGT1IgU1FMIE5BVklHQVRP UiBTT0ZUV0FSRSBMSUNFTlNFIE1BSU5URU5BTkNFIFJFTkVXQUw7IEFORCBLTk9X TEVER0UgWFBFUlQgRk9SIFBML1NRTCBERVZFTE9QTUVOVCBTT0ZUV0FSRSBNQUlO VEVOQU5DRSBMSUNFTlNFIFJFTkVXQUw8L25zMTpkZXNjcmlwdGlvbk9mQ29udHJh Y3RSZXF1aXJlbWVudD4KICAgICAgICAgIDxuczE6R0ZFLUdGUCBkZXNjcmlwdGlv bj0iVHJhbnNhY3Rpb24gZG9lcyBub3QgdXNlIEdGRS9HRlAiPk48L25zMTpHRkUt R0ZQPgogICAgICAgICAgPG5zMTpzZWFUcmFuc3BvcnRhdGlvbiBkZXNjcmlwdGlv bj0iTk8iPk48L25zMTpzZWFUcmFuc3BvcnRhdGlvbj4KICAgICAgICAgIDxuczE6 dW5kZWZpbml0aXplZEFjdGlvbiBkZXNjcmlwdGlvbj0iTk8iPlg8L25zMTp1bmRl ZmluaXRpemVkQWN0aW9uPgogICAgICAgICAgPG5zMTpjb25zb2xpZGF0ZWRDb250 cmFjdCBkZXNjcmlwdGlvbj0iTk8iPk48L25zMTpjb25zb2xpZGF0ZWRDb250cmFj dD4KICAgICAgICAgIDxuczE6cGVyZm9ybWFuY2VCYXNlZFNlcnZpY2VDb250cmFj dCBkZXNjcmlwdGlvbj0iTk8gLSBTRVJWSUNFIFdIRVJFIFBCQSBJUyBOT1QgVVNF RC4iPk48L25zMTpwZXJmb3JtYW5jZUJhc2VkU2VydmljZUNvbnRyYWN0PgogICAg ICAgICAgPG5zMTptdWx0aVllYXJDb250cmFjdCBkZXNjcmlwdGlvbj0iTk8iPk48 L25zMTptdWx0aVllYXJDb250cmFjdD4KICAgICAgICAgIDxuczE6Y29udHJhY3RG aW5hbmNpbmcgZGVzY3JpcHRpb249Ik5PVCBBUFBMSUNBQkxFIj5aPC9uczE6Y29u dHJhY3RGaW5hbmNpbmc+CiAgICAgICAgICA8bnMxOnB1cmNoYXNlQ2FyZEFzUGF5 bWVudE1ldGhvZCBkZXNjcmlwdGlvbj0iTk8iPk48L25zMTpwdXJjaGFzZUNhcmRB c1BheW1lbnRNZXRob2Q+CiAgICAgICAgICA8bnMxOm51bWJlck9mQWN0aW9ucz4x PC9uczE6bnVtYmVyT2ZBY3Rpb25zPjwvbnMxOmNvbnRyYWN0RGF0YT4KICAgICAg ICA8bnMxOmxlZ2lzbGF0aXZlTWFuZGF0ZXM+CiAgICAgICAgICA8bnMxOkNsaW5n ZXJDb2hlbkFjdCBkZXNjcmlwdGlvbj0iTk8iPk48L25zMTpDbGluZ2VyQ29oZW5B Y3Q+CiAgICAgICAgICA8bnMxOm1hdGVyaWFsc1N1cHBsaWVzQXJ0aWNsZXNFcXVp cG1lbnQgZGVzY3JpcHRpb249Ik5PVCBBUFBMSUNBQkxFIj5YPC9uczE6bWF0ZXJp YWxzU3VwcGxpZXNBcnRpY2xlc0VxdWlwbWVudD4KICAgICAgICAgIDxuczE6bGFi b3JTdGFuZGFyZHMgZGVzY3JpcHRpb249Ik5PVCBBUFBMSUNBQkxFIj5YPC9uczE6 bGFib3JTdGFuZGFyZHM+CiAgICAgICAgICA8bnMxOmNvbnN0cnVjdGlvbldhZ2VS YXRlUmVxdWlyZW1lbnRzIGRlc2NyaXB0aW9uPSJOT1QgQVBQTElDQUJMRSI+WDwv bnMxOmNvbnN0cnVjdGlvbldhZ2VSYXRlUmVxdWlyZW1lbnRzPgogICAgICAgICAg PG5zMTpsaXN0T2ZBZGRpdGlvbmFsUmVwb3J0aW5nVmFsdWVzPjwvbnMxOmxpc3RP ZkFkZGl0aW9uYWxSZXBvcnRpbmdWYWx1ZXM+CiAgICAgICAgICA8bnMxOmludGVy YWdlbmN5Q29udHJhY3RpbmdBdXRob3JpdHkgZGVzY3JpcHRpb249Ik5PVCBBUFBMSUNB QkxFIj5YPC9uczE6aW50ZXJhZ2VuY3lDb250cmFjdGluZ0F1dGhvcml0eT48L25z MTpsZWdpc2xhdGl2ZU1hbmRhdGVzPgogICAgICAgIDxuczE6cHJvZHVjdE9yU2Vy dmljZUluZm9ybWF0aW9uPgogICAgICAgICAgPG5zMTpwcm9kdWN0T3JTZXJ2aWNl Q29kZSBkZXNjcmlwdGlvbj0iQURQIEZBQ0lMSVRZIE1BTkFHRU1FTlQiIHByb2R1 Y3RPclNlcnZpY2VUeXBlPSJTRVJWSUNFIj5EMzAxPC9uczE6cHJvZHVjdE9yU2Vy dmljZUNvZGU+CiAgICAgICAgICA8bnMxOmNvbnRyYWN0QnVuZGxpbmcgZGVzY3Jp cHRpb249Ik5PVCBBIEJVTkRMRUQgUkVRVUlSRU1FTlQiPkQ8L25zMTpjb250cmFj dEJ1bmRsaW5nPgogICAgICAgICAgPG5zMTpjbGFpbWFudFByb2dyYW1Db2RlIGRl c2NyaXB0aW9uPSJFTEVDVFJPTklDUyBBTkQgQ09NTVVOSUNBVElPTiBFUVVJUE1F TlQiPkE3PC9uczE6Y2xhaW1hbnRQcm9ncmFtQ29kZT4KICAgICAgICAgIDxuczE6 cHJpbmNpcGFsTkFJQ1NDb2RlIGRlc2NyaXB0aW9uPSJPVEhFUiBDT01QVVRFUiBS RUxBVEVEIFNFUlZJQ0VTIj41NDE1MTk8L25zMTpwcmluY2lwYWxOQUlDU0NvZGU+ CiAgICAgICAgICA8bnMxOnN5c3RlbUVxdWlwbWVudENvZGUgZGVzY3JpcHRpb249 Ik5PTkUiPjAwMDwvbnMxOnN5c3RlbUVxdWlwbWVudENvZGU+CiAgICAgICAgICA8 bnMxOmluZm9ybWF0aW9uVGVjaG5vbG9neUNvbW1lcmNpYWxJdGVtQ2F0ZWdvcnkg ZGVzY3JpcHRpb249IkNPTU1FUkNJQUxMWSBBVkFJTEFCTEUiPkE8L25zMTppbmZv cm1hdGlvblRlY2hub2xvZ3lDb21tZXJjaWFsSXRlbUNhdGVnb3J5PgogICAgICAg ICAgPG5zMTp1c2VPZkVQQURlc2lnbmF0ZWRQcm9kdWN0cyBkZXNjcmlwdGlvbj0i Tk9UIFJFUVVJUkVEIj5FPC9uczE6dXNlT2ZFUEFEZXNpZ25hdGVkUHJvZHVjdHM+ CiAgICAgICAgICA8bnMxOmNvdW50cnlPZk9yaWdpbiBuYW1lPSJVTklURUQgU1RB VEVTIj5VU0E8L25zMTpjb3VudHJ5T2ZPcmlnaW4+CiAgICAgICAgICA8bnMxOnBs YWNlT2ZNYW51ZmFjdHVyZSBkZXNjcmlwdGlvbj0iTk9UIEEgTUFOVUZBQ1RVUkVE IEVORCBQUk9EVUNUIj5DPC9uczE6cGxhY2VPZk1hbnVmYWN0dXJlPjwvbnMxOnBy b2R1Y3RPclNlcnZpY2VJbmZvcm1hdGlvbj4KICAgICAgICA8bnMxOnZlbmRvcj4K ICAgICAgICAgIDxuczE6dmVuZG9ySGVhZGVyPgogICAgICAgICAgICA8bnMxOnZl bmRvck5hbWU+RExUIFNPTFVUSU9OUyBJTkNPUlBPUkFURUQ8L25zMTp2ZW5kb3JO YW1lPjwvbnMxOnZlbmRvckhlYWRlcj4KICAgICAgICAgIDxuczE6dmVuZG9yU2l0 ZURldGFpbHM+CiAgICAgICAgICAgIDxuczE6dmVuZG9yU29jaW9FY29ub21pY0lu ZGljYXRvcnM+CiAgICAgICAgICAgICAgPG5zMTppc0FsYXNrYW5OYXRpdmVPd25l ZENvcnBvcmF0aW9uT3JGaXJtPmZhbHNlPC9uczE6aXNBbGFza2FuTmF0aXZlT3du ZWRDb3Jwb3JhdGlvbk9yRmlybT4KICAgICAgICAgICAgICA8bnMxOmlzQW1lcmlj YW5JbmRpYW5Pd25lZD5mYWxzZTwvbnMxOmlzQW1lcmljYW5JbmRpYW5Pd25lZD4K ICAgICAgICAgICAgICA8bnMxOmlzSW5kaWFuVHJpYmU+ZmFsc2U8L25zMTppc0lu ZGlhblRyaWJlPgogICAgICAgICAgICAgIDxuczE6aXNOYXRpdmVIYXdhaWlhbk93 bmVkT3JnYW5pemF0aW9uT3JGaXJtPmZhbHNlPC9uczE6aXNOYXRpdmVIYXdhaWlh bk93bmVkT3JnYW5pemF0aW9uT3JGaXJtPgogICAgICAgICAgICAgIDxuczE6aXNU cmliYWxseU93bmVkRmlybT5mYWxzZTwvbnMxOmlzVHJpYmFsbHlPd25lZEZpcm0+ CiAgICAgICAgICAgICAgPG5zMTppc1ZldGVyYW5Pd25lZD5mYWxzZTwvbnMxOmlz VmV0ZXJhbk93bmVkPgogICAgICAgICAgICAgIDxuczE6aXNTZXJ2aWNlUmVsYXRl ZERpc2FibGVkVmV0ZXJhbk93bmVkQnVzaW5lc3M+ZmFsc2U8L25zMTppc1NlcnZp Y2VSZWxhdGVkRGlzYWJsZWRWZXRlcmFuT3duZWRCdXNpbmVzcz4KICAgICAgICAg ICAgICA8bnMxOmlzV29tZW5Pd25lZD5mYWxzZTwvbnMxOmlzV29tZW5Pd25lZD4K ICAgICAgICAgICAgICA8bnMxOm1pbm9yaXR5T3duZWQ+CiAgICAgICAgICAgICAg ICA8bnMxOmlzTWlub3JpdHlPd25lZD5mYWxzZTwvbnMxOmlzTWlub3JpdHlPd25l ZD4KICAgICAgICAgICAgICAgIDxuczE6aXNTdWJDb250aW5lbnRBc2lhbkFtZXJp Y2FuT3duZWRCdXNpbmVzcz5mYWxzZTwvbnMxOmlzU3ViQ29udGluZW50QXNpYW5B bWVyaWNhbk93bmVkQnVzaW5lc3M+CiAgICAgICAgICAgICAgICA8bnMxOmlzQXNp YW5QYWNpZmljQW1lcmljYW5Pd25lZEJ1c2luZXNzPmZhbHNlPC9uczE6aXNBc2lh blBhY2lmaWNBbWVyaWNhbk93bmVkQnVzaW5lc3M+CiAgICAgICAgICAgICAgICA8 bnMxOmlzQmxhY2tBbWVyaWNhbk93bmVkQnVzaW5lc3M+ZmFsc2U8L25zMTppc0Js YWNrQW1lcmljYW5Pd25lZEJ1c2luZXNzPgogICAgICAgICAgICAgICAgPG5zMTpp c0hpc3BhbmljQW1lcmljYW5Pd25lZEJ1c2luZXNzPmZhbHNlPC9uczE6aXNIaXNw YW5pY0FtZXJpY2FuT3duZWRCdXNpbmVzcz4KICAgICAgICAgICAgICAgIDxuczE6 aXNOYXRpdmVBbWVyaWNhbk93bmVkQnVzaW5lc3M+ZmFsc2U8L25zMTppc05hdGl2 ZUFtZXJpY2FuT3duZWRCdXNpbmVzcz4KICAgICAgICAgICAgICAgIDxuczE6aXNP dGhlck1pbm9yaXR5T3duZWQ+ZmFsc2U8L25zMTppc090aGVyTWlub3JpdHlPd25l ZD48L25zMTptaW5vcml0eU93bmVkPgogICAgICAgICAgICAgIDxuczE6aXNWZXJ5 U21hbGxCdXNpbmVzcz5mYWxzZTwvbnMxOmlzVmVyeVNtYWxsQnVzaW5lc3M+CiAg ICAgICAgICAgICAgPG5zMTppc1dvbWVuT3duZWRTbWFsbEJ1c2luZXNzPmZhbHNl PC9uczE6aXNXb21lbk93bmVkU21hbGxCdXNpbmVzcz4KICAgICAgICAgICAgICA8 bnMxOmlzRWNvbm9taWNhbGx5RGlzYWR2YW50YWdlZFdvbWVuT3duZWRTbWFsbEJ1 c2luZXNzPmZhbHNlPC9uczE6aXNFY29ub21pY2FsbHlEaXNhZHZhbnRhZ2VkV29t ZW5Pd25lZFNtYWxsQnVzaW5lc3M+CiAgICAgICAgICAgICAgPG5zMTppc0pvaW50 VmVudHVyZVdvbWVuT3duZWRTbWFsbEJ1c2luZXNzPmZhbHNlPC9uczE6aXNKb2lu dFZlbnR1cmVXb21lbk93bmVkU21hbGxCdXNpbmVzcz4KICAgICAgICAgICAgICA8 bnMxOmlzSm9pbnRWZW50dXJlRWNvbm9taWNhbGx5RGlzYWR2YW50YWdlZFdvbWVu T3duZWRTbWFsbEJ1c2luZXNzPmZhbHNlPC9uczE6aXNKb2ludFZlbnR1cmVFY29u b21pY2FsbHlEaXNhZHZhbnRhZ2VkV29tZW5Pd25lZFNtYWxsQnVzaW5lc3M+PC9u czE6dmVuZG9yU29jaW9FY29ub21pY0luZGljYXRvcnM+CiAgICAgICAgICAgIDxu czE6dmVuZG9yQnVzaW5lc3NUeXBlcz4KICAgICAgICAgICAgICA8bnMxOmlzQ29t bXVuaXR5RGV2ZWxvcGVkQ29ycG9yYXRpb25Pd25lZEZpcm0+ZmFsc2U8L25zMTpp c0NvbW11bml0eURldmVsb3BlZENvcnBvcmF0aW9uT3duZWRGaXJtPgogICAgICAg ICAgICAgIDxuczE6aXNMYWJvclN1cnBsdXNBcmVhRmlybT5mYWxzZTwvbnMxOmlz TGFib3JTdXJwbHVzQXJlYUZpcm0+CiAgICAgICAgICAgICAgPG5zMTpmZWRlcmFs R292ZXJubWVudD4KICAgICAgICAgICAgICAgIDxuczE6aXNGZWRlcmFsR292ZXJu bWVudD5mYWxzZTwvbnMxOmlzRmVkZXJhbEdvdmVybm1lbnQ+CiAgICAgICAgICAg ICAgICA8bnMxOmlzRmVkZXJhbGx5RnVuZGVkUmVzZWFyY2hBbmREZXZlbG9wbWVu dENvcnA+ZmFsc2U8L25zMTppc0ZlZGVyYWxseUZ1bmRlZFJlc2VhcmNoQW5kRGV2 ZWxvcG1lbnRDb3JwPgogICAgICAgICAgICAgICAgPG5zMTppc0ZlZGVyYWxHb3Zl cm5tZW50QWdlbmN5PmZhbHNlPC9uczE6aXNGZWRlcmFsR292ZXJubWVudEFnZW5j eT48L25zMTpmZWRlcmFsR292ZXJubWVudD4KICAgICAgICAgICAgICA8bnMxOmlz U3RhdGVHb3Zlcm5tZW50PmZhbHNlPC9uczE6aXNTdGF0ZUdvdmVybm1lbnQ+CiAg ICAgICAgICAgICAgPG5zMTpsb2NhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAg ICA8bnMxOmlzTG9jYWxHb3Zlcm5tZW50PmZhbHNlPC9uczE6aXNMb2NhbEdvdmVy bm1lbnQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzQ2l0eUxvY2FsR292ZXJubWVu dD5mYWxzZTwvbnMxOmlzQ2l0eUxvY2FsR292ZXJubWVudD4KICAgICAgICAgICAg ICAgIDxuczE6aXNDb3VudHlMb2NhbEdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc0Nv dW50eUxvY2FsR292ZXJubWVudD4KICAgICAgICAgICAgICAgIDxuczE6aXNJbnRl ck11bmljaXBhbExvY2FsR292ZXJubWVudD5mYWxzZTwvbnMxOmlzSW50ZXJNdW5p Y2lwYWxMb2NhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzTG9j YWxHb3Zlcm5tZW50T3duZWQ+ZmFsc2U8L25zMTppc0xvY2FsR292ZXJubWVudE93 bmVkPgogICAgICAgICAgICAgICAgPG5zMTppc011bmljaXBhbGl0eUxvY2FsR292 ZXJubWVudD5mYWxzZTwvbnMxOmlzTXVuaWNpcGFsaXR5TG9jYWxHb3Zlcm5tZW50 PgogICAgICAgICAgICAgICAgPG5zMTppc1NjaG9vbERpc3RyaWN0TG9jYWxHb3Zl cm5tZW50PmZhbHNlPC9uczE6aXNTY2hvb2xEaXN0cmljdExvY2FsR292ZXJubWVu dD4KICAgICAgICAgICAgICAgIDxuczE6aXNUb3duc2hpcExvY2FsR292ZXJubWVu dD5mYWxzZTwvbnMxOmlzVG93bnNoaXBMb2NhbEdvdmVybm1lbnQ+PC9uczE6bG9j YWxHb3Zlcm5tZW50PgogICAgICAgICAgICAgIDxuczE6aXNUcmliYWxHb3Zlcm5t ZW50PmZhbHNlPC9uczE6aXNUcmliYWxHb3Zlcm5tZW50PgogICAgICAgICAgICAg IDxuczE6aXNGb3JlaWduR292ZXJubWVudD5mYWxzZTwvbnMxOmlzRm9yZWlnbkdv dmVybm1lbnQ+CiAgICAgICAgICAgICAgPG5zMTpidXNpbmVzc09yT3JnYW5pemF0 aW9uVHlwZT4KICAgICAgICAgICAgICAgIDxuczE6aXNDb3Jwb3JhdGVFbnRpdHlO b3RUYXhFeGVtcHQ+ZmFsc2U8L25zMTppc0NvcnBvcmF0ZUVudGl0eU5vdFRheEV4 ZW1wdD4KICAgICAgICAgICAgICAgIDxuczE6aXNDb3Jwb3JhdGVFbnRpdHlUYXhF eGVtcHQ+ZmFsc2U8L25zMTppc0NvcnBvcmF0ZUVudGl0eVRheEV4ZW1wdD4KICAg ICAgICAgICAgICAgIDxuczE6aXNQYXJ0bmVyc2hpcE9yTGltaXRlZExpYWJpbGl0 eVBhcnRuZXJzaGlwPmZhbHNlPC9uczE6aXNQYXJ0bmVyc2hpcE9yTGltaXRlZExp YWJpbGl0eVBhcnRuZXJzaGlwPgogICAgICAgICAgICAgICAgPG5zMTppc1NvbGVQ cm9wcmVpdG9yc2hpcD5mYWxzZTwvbnMxOmlzU29sZVByb3ByZWl0b3JzaGlwPgog ICAgICAgICAgICAgICAgPG5zMTppc1NtYWxsQWdyaWN1bHR1cmFsQ29vcGVyYXRp dmU+ZmFsc2U8L25zMTppc1NtYWxsQWdyaWN1bHR1cmFsQ29vcGVyYXRpdmU+CiAg ICAgICAgICAgICAgICA8bnMxOmlzSW50ZXJuYXRpb25hbE9yZ2FuaXphdGlvbj5m YWxzZTwvbnMxOmlzSW50ZXJuYXRpb25hbE9yZ2FuaXphdGlvbj4KICAgICAgICAg ICAgICAgIDxuczE6aXNVU0dvdmVybm1lbnRFbnRpdHk+ZmFsc2U8L25zMTppc1VT R292ZXJubWVudEVudGl0eT48L25zMTpidXNpbmVzc09yT3JnYW5pemF0aW9uVHlw ZT48L25zMTp2ZW5kb3JCdXNpbmVzc1R5cGVzPgogICAgICAgICAgICA8bnMxOnZl bmRvckxpbmVPZkJ1c2luZXNzPgogICAgICAgICAgICAgIDxuczE6aXNDb21tdW5p dHlEZXZlbG9wbWVudENvcnBvcmF0aW9uPmZhbHNlPC9uczE6aXNDb21tdW5pdHlE ZXZlbG9wbWVudENvcnBvcmF0aW9uPgogICAgICAgICAgICAgIDxuczE6aXNEb21l c3RpY1NoZWx0ZXI+ZmFsc2U8L25zMTppc0RvbWVzdGljU2hlbHRlcj4KICAgICAg ICAgICAgICA8bnMxOmlzRWR1Y2F0aW9uYWxJbnN0aXR1dGlvbj5mYWxzZTwvbnMx OmlzRWR1Y2F0aW9uYWxJbnN0aXR1dGlvbj4KICAgICAgICAgICAgICA8bnMxOmlz Rm91bmRhdGlvbj5mYWxzZTwvbnMxOmlzRm91bmRhdGlvbj4KICAgICAgICAgICAg ICA8bnMxOmlzSG9zcGl0YWw+ZmFsc2U8L25zMTppc0hvc3BpdGFsPgogICAgICAg ICAgICAgIDxuczE6aXNNYW51ZmFjdHVyZXJPZkdvb2RzPmZhbHNlPC9uczE6aXNN YW51ZmFjdHVyZXJPZkdvb2RzPgogICAgICAgICAgICAgIDxuczE6aXNWZXRlcmlu YXJ5SG9zcGl0YWw+ZmFsc2U8L25zMTppc1ZldGVyaW5hcnlIb3NwaXRhbD4KICAg ICAgICAgICAgICA8bnMxOmlzSGlzcGFuaWNTZXJ2aWNpbmdJbnN0aXR1dGlvbj5m YWxzZTwvbnMxOmlzSGlzcGFuaWNTZXJ2aWNpbmdJbnN0aXR1dGlvbj48L25zMTp2 ZW5kb3JMaW5lT2ZCdXNpbmVzcz4KICAgICAgICAgICAgPG5zMTp2ZW5kb3JSZWxh dGlvbnNoaXBXaXRoRmVkZXJhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgPG5z MTpyZWNlaXZlc0NvbnRyYWN0cz5mYWxzZTwvbnMxOnJlY2VpdmVzQ29udHJhY3Rz PgogICAgICAgICAgICAgIDxuczE6cmVjZWl2ZXNHcmFudHM+ZmFsc2U8L25zMTpy ZWNlaXZlc0dyYW50cz4KICAgICAgICAgICAgICA8bnMxOnJlY2VpdmVzQ29udHJh Y3RzQW5kR3JhbnRzPmZhbHNlPC9uczE6cmVjZWl2ZXNDb250cmFjdHNBbmRHcmFu dHM+PC9uczE6dmVuZG9yUmVsYXRpb25zaGlwV2l0aEZlZGVyYWxHb3Zlcm5tZW50 PgogICAgICAgICAgICA8bnMxOnR5cGVPZkdvdmVybm1lbnRFbnRpdHk+CiAgICAg ICAgICAgICAgPG5zMTppc0FpcnBvcnRBdXRob3JpdHk+ZmFsc2U8L25zMTppc0Fp cnBvcnRBdXRob3JpdHk+CiAgICAgICAgICAgICAgPG5zMTppc0NvdW5jaWxPZkdv dmVybm1lbnRzPmZhbHNlPC9uczE6aXNDb3VuY2lsT2ZHb3Zlcm5tZW50cz4KICAg ICAgICAgICAgICA8bnMxOmlzSG91c2luZ0F1dGhvcml0aWVzUHVibGljT3JUcmli YWw+ZmFsc2U8L25zMTppc0hvdXNpbmdBdXRob3JpdGllc1B1YmxpY09yVHJpYmFs PgogICAgICAgICAgICAgIDxuczE6aXNJbnRlcnN0YXRlRW50aXR5PmZhbHNlPC9u czE6aXNJbnRlcnN0YXRlRW50aXR5PgogICAgICAgICAgICAgIDxuczE6aXNQbGFu bmluZ0NvbW1pc3Npb24+ZmFsc2U8L25zMTppc1BsYW5uaW5nQ29tbWlzc2lvbj4K ICAgICAgICAgICAgICA8bnMxOmlzUG9ydEF1dGhvcml0eT5mYWxzZTwvbnMxOmlz UG9ydEF1dGhvcml0eT4KICAgICAgICAgICAgICA8bnMxOmlzVHJhbnNpdEF1dGhv cml0eT5mYWxzZTwvbnMxOmlzVHJhbnNpdEF1dGhvcml0eT48L25zMTp0eXBlT2ZH b3Zlcm5tZW50RW50aXR5PgogICAgICAgICAgICA8bnMxOnZlbmRvck9yZ2FuaXph dGlvbkZhY3RvcnM+CiAgICAgICAgICAgICAgPG5zMTppc1N1YmNoYXB0ZXJTQ29y cG9yYXRpb24+ZmFsc2U8L25zMTppc1N1YmNoYXB0ZXJTQ29ycG9yYXRpb24+CiAg ICAgICAgICAgICAgPG5zMTppc0xpbWl0ZWRMaWFiaWxpdHlDb3Jwb3JhdGlvbj5m YWxzZTwvbnMxOmlzTGltaXRlZExpYWJpbGl0eUNvcnBvcmF0aW9uPgogICAgICAg ICAgICAgIDxuczE6aXNGb3JlaWduT3duZWRBbmRMb2NhdGVkPmZhbHNlPC9uczE6 aXNGb3JlaWduT3duZWRBbmRMb2NhdGVkPgogICAgICAgICAgICAgIDxuczE6cHJv Zml0U3RydWN0dXJlPgogICAgICAgICAgICAgICAgPG5zMTppc0ZvclByb2ZpdE9y Z2FuaXphdGlvbj5mYWxzZTwvbnMxOmlzRm9yUHJvZml0T3JnYW5pemF0aW9uPgog ICAgICAgICAgICAgICAgPG5zMTppc05vbnByb2ZpdE9yZ2FuaXphdGlvbj5mYWxz ZTwvbnMxOmlzTm9ucHJvZml0T3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAg PG5zMTppc090aGVyTm90Rm9yUHJvZml0T3JnYW5pemF0aW9uPmZhbHNlPC9uczE6 aXNPdGhlck5vdEZvclByb2ZpdE9yZ2FuaXphdGlvbj48L25zMTpwcm9maXRTdHJ1 Y3R1cmU+CiAgICAgICAgICAgICAgPG5zMTppc1NoZWx0ZXJlZFdvcmtzaG9wPmZh bHNlPC9uczE6aXNTaGVsdGVyZWRXb3Jrc2hvcD4KICAgICAgICAgICAgICA8bnMx Om51bWJlck9mRW1wbG95ZWVzPjE3MzwvbnMxOm51bWJlck9mRW1wbG95ZWVzPgog ICAgICAgICAgICAgIDxuczE6YW5udWFsUmV2ZW51ZT4yNjwvbnMxOmFubnVhbFJl dmVudWU+PC9uczE6dmVuZG9yT3JnYW5pemF0aW9uRmFjdG9ycz4KICAgICAgICAg ICAgPG5zMTp0eXBlT2ZFZHVjYXRpb25hbEVudGl0eT4KICAgICAgICAgICAgICA8 bnMxOmlzMTg2MkxhbmRHcmFudENvbGxlZ2U+ZmFsc2U8L25zMTppczE4NjJMYW5k R3JhbnRDb2xsZWdlPgogICAgICAgICAgICAgIDxuczE6aXMxODkwTGFuZEdyYW50 Q29sbGVnZT5mYWxzZTwvbnMxOmlzMTg5MExhbmRHcmFudENvbGxlZ2U+CiAgICAg ICAgICAgICAgPG5zMTppczE5OTRMYW5kR3JhbnRDb2xsZWdlPmZhbHNlPC9uczE6 aXMxOTk0TGFuZEdyYW50Q29sbGVnZT4KICAgICAgICAgICAgICA8bnMxOmlzSGlz dG9yaWNhbGx5QmxhY2tDb2xsZWdlT3JVbml2ZXJzaXR5PmZhbHNlPC9uczE6aXNI aXN0b3JpY2FsbHlCbGFja0NvbGxlZ2VPclVuaXZlcnNpdHk+CiAgICAgICAgICAg ICAgPG5zMTppc01pbm9yaXR5SW5zdGl0dXRpb24+ZmFsc2U8L25zMTppc01pbm9y aXR5SW5zdGl0dXRpb24+CiAgICAgICAgICAgICAgPG5zMTppc1ByaXZhdGVVbml2 ZXJzaXR5T3JDb2xsZWdlPmZhbHNlPC9uczE6aXNQcml2YXRlVW5pdmVyc2l0eU9y Q29sbGVnZT4KICAgICAgICAgICAgICA8bnMxOmlzU2Nob29sT2ZGb3Jlc3RyeT5m YWxzZTwvbnMxOmlzU2Nob29sT2ZGb3Jlc3RyeT4KICAgICAgICAgICAgICA8bnMx OmlzU3RhdGVDb250cm9sbGVkSW5zdGl0dXRpb25vZkhpZ2hlckxlYXJuaW5nPmZh bHNlPC9uczE6aXNTdGF0ZUNvbnRyb2xsZWRJbnN0aXR1dGlvbm9mSGlnaGVyTGVh cm5pbmc+CiAgICAgICAgICAgICAgPG5zMTppc1RyaWJhbENvbGxlZ2U+ZmFsc2U8 L25zMTppc1RyaWJhbENvbGxlZ2U+CiAgICAgICAgICAgICAgPG5zMTppc1ZldGVy aW5hcnlDb2xsZWdlPmZhbHNlPC9uczE6aXNWZXRlcmluYXJ5Q29sbGVnZT4KICAg ICAgICAgICAgICA8bnMxOmlzQWxhc2thbk5hdGl2ZVNlcnZpY2luZ0luc3RpdHV0 aW9uPmZhbHNlPC9uczE6aXNBbGFza2FuTmF0aXZlU2VydmljaW5nSW5zdGl0dXRp b24+CiAgICAgICAgICAgICAgPG5zMTppc05hdGl2ZUhhd2FpaWFuU2VydmljaW5n SW5zdGl0dXRpb24+ZmFsc2U8L25zMTppc05hdGl2ZUhhd2FpaWFuU2VydmljaW5n SW5zdGl0dXRpb24+PC9uczE6dHlwZU9mRWR1Y2F0aW9uYWxFbnRpdHk+CiAgICAg ICAgICAgIDxuczE6dmVuZG9yQ2VydGlmaWNhdGlvbnM+CiAgICAgICAgICAgICAg PG5zMTppc0RPVENlcnRpZmllZERpc2FkdmFudGFnZWRCdXNpbmVzc0VudGVycHJp c2U+ZmFsc2U8L25zMTppc0RPVENlcnRpZmllZERpc2FkdmFudGFnZWRCdXNpbmVz c0VudGVycHJpc2U+CiAgICAgICAgICAgICAgPG5zMTppc1NlbGZDZXJ0aWZpZWRT bWFsbERpc2FkdmFudGFnZWRCdXNpbmVzcz5mYWxzZTwvbnMxOmlzU2VsZkNlcnRp ZmllZFNtYWxsRGlzYWR2YW50YWdlZEJ1c2luZXNzPgogICAgICAgICAgICAgIDxu czE6aXNTQkFDZXJ0aWZpZWRTbWFsbERpc2FkdmFudGFnZWRCdXNpbmVzcz5mYWxz ZTwvbnMxOmlzU0JBQ2VydGlmaWVkU21hbGxEaXNhZHZhbnRhZ2VkQnVzaW5lc3M+ CiAgICAgICAgICAgICAgPG5zMTppc1NCQUNlcnRpZmllZDhBUHJvZ3JhbVBhcnRp Y2lwYW50PmZhbHNlPC9uczE6aXNTQkFDZXJ0aWZpZWQ4QVByb2dyYW1QYXJ0aWNp cGFudD4KICAgICAgICAgICAgICA8bnMxOmlzU2VsZkNlcnRpZmllZEhVQlpvbmVK b2ludFZlbnR1cmU+ZmFsc2U8L25zMTppc1NlbGZDZXJ0aWZpZWRIVUJab25lSm9p bnRWZW50dXJlPgogICAgICAgICAgICAgIDxuczE6aXNTQkFDZXJ0aWZpZWRIVUJa b25lPmZhbHNlPC9uczE6aXNTQkFDZXJ0aWZpZWRIVUJab25lPgogICAgICAgICAg ICAgIDxuczE6aXNTQkFDZXJ0aWZpZWQ4QUpvaW50VmVudHVyZT5mYWxzZTwvbnMx OmlzU0JBQ2VydGlmaWVkOEFKb2ludFZlbnR1cmU+PC9uczE6dmVuZG9yQ2VydGlm aWNhdGlvbnM+CiAgICAgICAgICAgIDxuczE6dmVuZG9yTG9jYXRpb24+CiAgICAg ICAgICAgICAgPG5zMTpzdHJlZXRBZGRyZXNzPjEzODYxIFNVTlJJU0UgVkFMTEVZ IERSIFNURSA0MDA8L25zMTpzdHJlZXRBZGRyZXNzPgogICAgICAgICAgICAgIDxu czE6Y2l0eT5IRVJORE9OPC9uczE6Y2l0eT4KICAgICAgICAgICAgICA8bnMxOnN0 YXRlIG5hbWU9IlZJUkdJTklBIj5WQTwvbnMxOnN0YXRlPgogICAgICAgICAgICAg IDxuczE6WklQQ29kZT4yMDE3MTYxMjY8L25zMTpaSVBDb2RlPgogICAgICAgICAg ICAgIDxuczE6Y291bnRyeUNvZGUgbmFtZT0iVU5JVEVEIFNUQVRFUyI+VVNBPC9u czE6Y291bnRyeUNvZGU+CiAgICAgICAgICAgICAgPG5zMTpjb25ncmVzc2lvbmFs RGlzdHJpY3RDb2RlPjEwPC9uczE6Y29uZ3Jlc3Npb25hbERpc3RyaWN0Q29kZT48 L25zMTp2ZW5kb3JMb2NhdGlvbj4KICAgICAgICAgICAgPG5zMTp2ZW5kb3JTaXRl Q29kZT43ODY0NjgxOTkwMDAwUFI8L25zMTp2ZW5kb3JTaXRlQ29kZT4KICAgICAg ICAgICAgPG5zMTp2ZW5kb3JBbHRlcm5hdGVTaXRlQ29kZT4yMDE3MTYxMjY8L25z MTp2ZW5kb3JBbHRlcm5hdGVTaXRlQ29kZT4KICAgICAgICAgICAgPG5zMTp2ZW5k b3JEVU5TSW5mb3JtYXRpb24+CiAgICAgICAgICAgICAgPG5zMTpEVU5TTnVtYmVy Pjc4NjQ2ODE5OTwvbnMxOkRVTlNOdW1iZXI+CiAgICAgICAgICAgICAgPG5zMTp2 ZW5kb3JOYW1lPkRMVCBTT0xVVElPTlMgSU5DT1JQT1JBVEVEPC9uczE6dmVuZG9y TmFtZT4KICAgICAgICAgICAgICA8bnMxOmdsb2JhbFBhcmVudERVTlNOdW1iZXI+ Nzg2NDY4MTk5PC9uczE6Z2xvYmFsUGFyZW50RFVOU051bWJlcj4KICAgICAgICAg ICAgICA8bnMxOmdsb2JhbFBhcmVudERVTlNOYW1lPkRMVCBTT0xVVElPTlMgIExM QzwvbnMxOmdsb2JhbFBhcmVudERVTlNOYW1lPjwvbnMxOnZlbmRvckRVTlNJbmZv cm1hdGlvbj4KICAgICAgICAgICAgPG5zMTpjY3JSZWdpc3RyYXRpb25EZXRhaWxz PgogICAgICAgICAgICAgIDxuczE6cmVnaXN0cmF0aW9uRGF0ZT4yMDAyLTAzLTE0 IDAwOjAwOjAwPC9uczE6cmVnaXN0cmF0aW9uRGF0ZT4KICAgICAgICAgICAgICA8 bnMxOnJlbmV3YWxEYXRlPjIwMDgtMTEtMTYgMDA6MDA6MDA8L25zMTpyZW5ld2Fs RGF0ZT48L25zMTpjY3JSZWdpc3RyYXRpb25EZXRhaWxzPjwvbnMxOnZlbmRvclNp dGVEZXRhaWxzPgogICAgICAgICAgPG5zMTpjb250cmFjdGluZ09mZmljZXJCdXNp bmVzc1NpemVEZXRlcm1pbmF0aW9uIGRlc2NyaXB0aW9uPSJTTUFMTCBCVVNJTkVT UyI+UzwvbnMxOmNvbnRyYWN0aW5nT2ZmaWNlckJ1c2luZXNzU2l6ZURldGVybWlu YXRpb24+PC9uczE6dmVuZG9yPgogICAgICAgIDxuczE6cGxhY2VPZlBlcmZvcm1h bmNlPgogICAgICAgICAgPG5zMTpwcmluY2lwYWxQbGFjZU9mUGVyZm9ybWFuY2U+ CiAgICAgICAgICAgIDxuczE6bG9jYXRpb25Db2RlPjE2MDAwPC9uczE6bG9jYXRp b25Db2RlPgogICAgICAgICAgICA8bnMxOnN0YXRlQ29kZSBuYW1lPSJPSElPIj5P SDwvbnMxOnN0YXRlQ29kZT4KICAgICAgICAgICAgPG5zMTpjb3VudHJ5Q29kZSBu YW1lPSJVTklURUQgU1RBVEVTIj5VU0E8L25zMTpjb3VudHJ5Q29kZT48L25zMTpw cmluY2lwYWxQbGFjZU9mUGVyZm9ybWFuY2U+CiAgICAgICAgICA8bnMxOnBsYWNl T2ZQZXJmb3JtYW5jZVpJUENvZGUgY291bnR5PSJDVVlBSE9HQSIgY2l0eT0iQ0xF VkVMQU5EIj40NDE5OTIwNTU8L25zMTpwbGFjZU9mUGVyZm9ybWFuY2VaSVBDb2Rl PgogICAgICAgICAgPG5zMTpwbGFjZU9mUGVyZm9ybWFuY2VDb25ncmVzc2lvbmFs RGlzdHJpY3Q+MTE8L25zMTpwbGFjZU9mUGVyZm9ybWFuY2VDb25ncmVzc2lvbmFs RGlzdHJpY3Q+PC9uczE6cGxhY2VPZlBlcmZvcm1hbmNlPgogICAgICAgIDxuczE6 Y29tcGV0aXRpb24+CiAgICAgICAgICA8bnMxOmV4dGVudENvbXBldGVkIGRlc2Ny aXB0aW9uPSJGVUxMIEFORCBPUEVOIENPTVBFVElUSU9OIj5BPC9uczE6ZXh0ZW50 Q29tcGV0ZWQ+CiAgICAgICAgICA8bnMxOnNvbGljaXRhdGlvblByb2NlZHVyZXMg ZGVzY3JpcHRpb249IlNVQkpFQ1QgVE8gTVVMVElQTEUgQVdBUkQgRkFJUiBPUFBP UlRVTklUWSI+TUFGTzwvbnMxOnNvbGljaXRhdGlvblByb2NlZHVyZXM+CiAgICAg ICAgICA8bnMxOnR5cGVPZlNldEFzaWRlIGRlc2NyaXB0aW9uPSJOTyBTRVQgQVNJ REUgVVNFRC4iPk5PTkU8L25zMTp0eXBlT2ZTZXRBc2lkZT4KICAgICAgICAgIDxu czE6ZXZhbHVhdGVkUHJlZmVyZW5jZSBkZXNjcmlwdGlvbj0iTk8gUFJFRkVSRU5D RSBVU0VEIj5OT05FPC9uczE6ZXZhbHVhdGVkUHJlZmVyZW5jZT4KICAgICAgICAg IDxuczE6c3RhdHV0b3J5RXhjZXB0aW9uVG9GYWlyT3Bwb3J0dW5pdHkgZGVzY3Jp cHRpb249IkZBSVIgT1BQT1JUVU5JVFkgR0lWRU4iPkZBSVI8L25zMTpzdGF0dXRv cnlFeGNlcHRpb25Ub0ZhaXJPcHBvcnR1bml0eT4KICAgICAgICAgIDxuczE6bnVt YmVyT2ZPZmZlcnNSZWNlaXZlZD4xPC9uczE6bnVtYmVyT2ZPZmZlcnNSZWNlaXZl ZD4KICAgICAgICAgIDxuczE6Y29tbWVyY2lhbEl0ZW1BY3F1aXNpdGlvblByb2Nl ZHVyZXMgZGVzY3JpcHRpb249IkNPTU1FUkNJQUwgSVRFTSI+QTwvbnMxOmNvbW1l cmNpYWxJdGVtQWNxdWlzaXRpb25Qcm9jZWR1cmVzPgogICAgICAgICAgPG5zMTpj b21tZXJjaWFsSXRlbVRlc3RQcm9ncmFtIGRlc2NyaXB0aW9uPSJOTyI+TjwvbnMx OmNvbW1lcmNpYWxJdGVtVGVzdFByb2dyYW0+CiAgICAgICAgICA8bnMxOnNtYWxs QnVzaW5lc3NDb21wZXRpdGl2ZW5lc3NEZW1vbnN0cmF0aW9uUHJvZ3JhbT5mYWxz ZTwvbnMxOnNtYWxsQnVzaW5lc3NDb21wZXRpdGl2ZW5lc3NEZW1vbnN0cmF0aW9u UHJvZ3JhbT4KICAgICAgICAgIDxuczE6QTc2QWN0aW9uIGRlc2NyaXB0aW9uPSJO TyI+TjwvbnMxOkE3NkFjdGlvbj4KICAgICAgICAgIDxuczE6ZmVkQml6T3BwcyBk ZXNjcmlwdGlvbj0iTk9UIEFQUExJQ0FCTEUiPlg8L25zMTpmZWRCaXpPcHBzPgog ICAgICAgICAgPG5zMTpwcmljZUV2YWx1YXRpb25QZXJjZW50RGlmZmVyZW5jZT4w LjAwPC9uczE6cHJpY2VFdmFsdWF0aW9uUGVyY2VudERpZmZlcmVuY2U+PC9uczE6 Y29tcGV0aXRpb24+CiAgICAgICAgPG5zMTpwcmVmZXJlbmNlUHJvZ3JhbXM+CiAg ICAgICAgICA8bnMxOnN1YmNvbnRyYWN0UGxhbiBkZXNjcmlwdGlvbj0iUExBTiBO T1QgUkVRVUlSRUQgIj5CPC9uczE6c3ViY29udHJhY3RQbGFuPjwvbnMxOnByZWZl cmVuY2VQcm9ncmFtcz4KICAgICAgICA8bnMxOnRyYW5zYWN0aW9uSW5mb3JtYXRp b24+CiAgICAgICAgICA8bnMxOmNyZWF0ZWRCeT5MSU5EQS5CQVJWSU5DSEFLLkhR MDQyM0BERkFTLk1JTDwvbnMxOmNyZWF0ZWRCeT4KICAgICAgICAgIDxuczE6Y3Jl YXRlZERhdGU+MjAwNy0wMS0xNCAxNzozNTowNTwvbnMxOmNyZWF0ZWREYXRlPgog ICAgICAgICAgPG5zMTpsYXN0TW9kaWZpZWRCeT5JRFZfQ09SUkVDVDwvbnMxOmxh c3RNb2RpZmllZEJ5PgogICAgICAgICAgPG5zMTpsYXN0TW9kaWZpZWREYXRlPjIw MTYtMDItMTYgMTM6MTA6MDU8L25zMTpsYXN0TW9kaWZpZWREYXRlPgogICAgICAg ICAgPG5zMTpzdGF0dXMgZGVzY3JpcHRpb249IkZJTkFMIj5GPC9uczE6c3RhdHVz PjwvbnMxOnRyYW5zYWN0aW9uSW5mb3JtYXRpb24+PC9uczE6YXdhcmQ+CiAgICA8 L2NvbnRlbnQ+CiAgPC9lbnRyeT4KICA8ZW50cnk+CiAgICA8dGl0bGU+PCFbQ0RB VEFbTmV3IERFTElWRVJZIE9SREVSIERKREVBRVAwNzAwNTFEIGF3YXJkZWQgdG8g RExUIFNPTFVUSU9OUyBJTkNPUlBPUkFURUQgZm9yIHRoZSBhbW91bnQgb2YgJDU0 NC4yXV0+PC90aXRsZT4KICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJ0 ZXh0L2h0bWwiIGhyZWY9Imh0dHBzOi8vd3d3LmZwZHMuZ292L2V6c2VhcmNoL3Nl YXJjaC5kbz9zPUZQRFMmYW1wO2luZGV4TmFtZT1hd2FyZGZ1bGwmYW1wO3RlbXBs YXRlTmFtZT0xLjUuMSZhbXA7cT1ESkRFQUVQMDcwMDUxRCsxNTI0KyI+PC9saW5r PgogICAgPG1vZGlmaWVkPjIwMTYtMDItMTYgMTM6MTA6MDI8L21vZGlmaWVkPgog ICAgPGNvbnRlbnQgeG1sbnM6bnMxPSJodHRwczovL3d3dy5mcGRzLmdvdi9GUERT IiB0eXBlPSJhcHBsaWNhdGlvbi94bWwiPgogICAgICA8bnMxOmF3YXJkIHhtbG5z Om5zMT0iaHR0cDovL3d3dy5mcGRzbmcuY29tL0ZQRFMiIHZlcnNpb249IjEuMiI+ CiAgICAgICAgPG5zMTphd2FyZElEPgogICAgICAgICAgPG5zMTphd2FyZENvbnRy YWN0SUQ+CiAgICAgICAgICAgIDxuczE6YWdlbmN5SUQgbmFtZT0iRFJVRyBFTkZP UkNFTUVOVCBBRE1JTklTVFJBVElPTiI+MTUyNDwvbnMxOmFnZW5jeUlEPgogICAg ICAgICAgICA8bnMxOlBJSUQ+REpERUFFUDA3MDA1MUQ8L25zMTpQSUlEPgogICAg ICAgICAgICA8bnMxOm1vZE51bWJlcj4wPC9uczE6bW9kTnVtYmVyPgogICAgICAg ICAgICA8bnMxOnRyYW5zYWN0aW9uTnVtYmVyPjA8L25zMTp0cmFuc2FjdGlvbk51 bWJlcj48L25zMTphd2FyZENvbnRyYWN0SUQ+CiAgICAgICAgICA8bnMxOnJlZmVy ZW5jZWRJRFZJRD4KICAgICAgICAgICAgPG5zMTphZ2VuY3lJRCBuYW1lPSJGRURF UkFMIEFDUVVJU0lUSU9OIFNFUlZJQ0UiPjQ3MzA8L25zMTphZ2VuY3lJRD4KICAg ICAgICAgICAgPG5zMTpQSUlEPkdTMzVGNDU0M0c8L25zMTpQSUlEPgogICAgICAg ICAgICA8bnMxOm1vZE51bWJlcj4wPC9uczE6bW9kTnVtYmVyPjwvbnMxOnJlZmVy ZW5jZWRJRFZJRD48L25zMTphd2FyZElEPgogICAgICAgIDxuczE6cmVsZXZhbnRD b250cmFjdERhdGVzPgogICAgICAgICAgPG5zMTpzaWduZWREYXRlPjIwMDctMDQt MjUgMDA6MDA6MDA8L25zMTpzaWduZWREYXRlPgogICAgICAgICAgPG5zMTplZmZl Y3RpdmVEYXRlPjIwMDctMDQtMjUgMDA6MDA6MDA8L25zMTplZmZlY3RpdmVEYXRl PgogICAgICAgICAgPG5zMTpjdXJyZW50Q29tcGxldGlvbkRhdGU+MjAwNy0wOS0z MCAwMDowMDowMDwvbnMxOmN1cnJlbnRDb21wbGV0aW9uRGF0ZT4KICAgICAgICAg IDxuczE6dWx0aW1hdGVDb21wbGV0aW9uRGF0ZT4yMDA4LTA5LTI5IDAwOjAwOjAw PC9uczE6dWx0aW1hdGVDb21wbGV0aW9uRGF0ZT48L25zMTpyZWxldmFudENvbnRy YWN0RGF0ZXM+CiAgICAgICAgPG5zMTpkb2xsYXJWYWx1ZXM+CiAgICAgICAgICA8 bnMxOm9ibGlnYXRlZEFtb3VudD41NDQuMjA8L25zMTpvYmxpZ2F0ZWRBbW91bnQ+ CiAgICAgICAgICA8bnMxOmJhc2VBbmRFeGVyY2lzZWRPcHRpb25zVmFsdWU+NTQ0 LjIwPC9uczE6YmFzZUFuZEV4ZXJjaXNlZE9wdGlvbnNWYWx1ZT4KICAgICAgICAg IDxuczE6YmFzZUFuZEFsbE9wdGlvbnNWYWx1ZT41NDQuMjA8L25zMTpiYXNlQW5k QWxsT3B0aW9uc1ZhbHVlPjwvbnMxOmRvbGxhclZhbHVlcz4KICAgICAgICA8bnMx OnRvdGFsRG9sbGFyVmFsdWVzPgogICAgICAgICAgPG5zMTp0b3RhbE9ibGlnYXRl ZEFtb3VudD41NDQuMjA8L25zMTp0b3RhbE9ibGlnYXRlZEFtb3VudD4KICAgICAg ICAgIDxuczE6dG90YWxCYXNlQW5kRXhlcmNpc2VkT3B0aW9uc1ZhbHVlPjU0NC4y MDwvbnMxOnRvdGFsQmFzZUFuZEV4ZXJjaXNlZE9wdGlvbnNWYWx1ZT4KICAgICAg ICAgIDxuczE6dG90YWxCYXNlQW5kQWxsT3B0aW9uc1ZhbHVlPjU0NC4yMDwvbnMx OnRvdGFsQmFzZUFuZEFsbE9wdGlvbnNWYWx1ZT48L25zMTp0b3RhbERvbGxhclZh bHVlcz4KICAgICAgICA8bnMxOnB1cmNoYXNlckluZm9ybWF0aW9uPgogICAgICAg ICAgPG5zMTpjb250cmFjdGluZ09mZmljZUFnZW5jeUlEIG5hbWU9IkRSVUcgRU5G T1JDRU1FTlQgQURNSU5JU1RSQVRJT04iIGRlcGFydG1lbnRJRD0iMTUwMCIgZGVw YXJ0bWVudE5hbWU9IkpVU1RJQ0UsIERFUEFSVE1FTlQgT0YiPjE1MjQ8L25zMTpj b250cmFjdGluZ09mZmljZUFnZW5jeUlEPgogICAgICAgICAgPG5zMTpjb250cmFj dGluZ09mZmljZUlEIG5hbWU9IkRJVklTSU9OLUVMIFBBU08gSU5URUxMSUdFTkNF IENFTlRFUiIgY291bnRyeT0iVVNBIj5ERUFFUDwvbnMxOmNvbnRyYWN0aW5nT2Zm aWNlSUQ+CiAgICAgICAgICA8bnMxOmZvcmVpZ25GdW5kaW5nIGRlc2NyaXB0aW9u PSJOT1QgQVBQTElDQUJMRSI+WDwvbnMxOmZvcmVpZ25GdW5kaW5nPjwvbnMxOnB1 cmNoYXNlckluZm9ybWF0aW9uPgogICAgICAgIDxuczE6Y29udHJhY3RNYXJrZXRp bmdEYXRhPgogICAgICAgICAgPG5zMTpmZWVQYWlkRm9yVXNlT2ZTZXJ2aWNlPjAu MDA8L25zMTpmZWVQYWlkRm9yVXNlT2ZTZXJ2aWNlPjwvbnMxOmNvbnRyYWN0TWFy a2V0aW5nRGF0YT4KICAgICAgICA8bnMxOmNvbnRyYWN0RGF0YT4KICAgICAgICAg IDxuczE6Y29udHJhY3RBY3Rpb25UeXBlIGRlc2NyaXB0aW9uPSJERUxJVkVSWSBP UkRFUiI+QzwvbnMxOmNvbnRyYWN0QWN0aW9uVHlwZT4KICAgICAgICAgIDxuczE6 dHlwZU9mQ29udHJhY3RQcmljaW5nIGRlc2NyaXB0aW9uPSJGSVhFRCBQUklDRSI+ SjwvbnMxOnR5cGVPZkNvbnRyYWN0UHJpY2luZz4KICAgICAgICAgIDxuczE6bmF0 aW9uYWxJbnRlcmVzdEFjdGlvbkNvZGUgZGVzY3JpcHRpb249Ik5PTkUiPk5PTkU8 L25zMTpuYXRpb25hbEludGVyZXN0QWN0aW9uQ29kZT4KICAgICAgICAgIDxuczE6 Y29zdEFjY291bnRpbmdTdGFuZGFyZHNDbGF1c2UgZGVzY3JpcHRpb249Ik5PVCBB UFBMSUNBQkxFIEVYRU1QVCBGUk9NIENBUyI+WDwvbnMxOmNvc3RBY2NvdW50aW5n U3RhbmRhcmRzQ2xhdXNlPgogICAgICAgICAgPG5zMTpkZXNjcmlwdGlvbk9mQ29u dHJhY3RSZXF1aXJlbWVudD5SRU5FV0FMIE9GIFNPRlRXQVJFIE1BSU5URU5BTkNF IEFORCBURUNITklDQUwgU1VQUE9SVCBGT1IgS05PV0xFREdFIFhQRVJUIEZPUiBQ TC9TUUwgREVWRUxPUE1FTlQuIEVTU0VOVElBTCBUTyBFSVMgU09GVFdBUkUgQVBQ TElDQVRJT048L25zMTpkZXNjcmlwdGlvbk9mQ29udHJhY3RSZXF1aXJlbWVudD4K ICAgICAgICAgIDxuczE6R0ZFLUdGUCBkZXNjcmlwdGlvbj0iVHJhbnNhY3Rpb24g ZG9lcyBub3QgdXNlIEdGRS9HRlAiPk48L25zMTpHRkUtR0ZQPgogICAgICAgICAg PG5zMTp1bmRlZmluaXRpemVkQWN0aW9uIGRlc2NyaXB0aW9uPSJOTyI+WDwvbnMx OnVuZGVmaW5pdGl6ZWRBY3Rpb24+CiAgICAgICAgICA8bnMxOmNvbnNvbGlkYXRl ZENvbnRyYWN0IGRlc2NyaXB0aW9uPSJOTyI+TjwvbnMxOmNvbnNvbGlkYXRlZENv bnRyYWN0PgogICAgICAgICAgPG5zMTpwZXJmb3JtYW5jZUJhc2VkU2VydmljZUNv bnRyYWN0IGRlc2NyaXB0aW9uPSJOTyAtIFNFUlZJQ0UgV0hFUkUgUEJBIElTIE5P VCBVU0VELiI+TjwvbnMxOnBlcmZvcm1hbmNlQmFzZWRTZXJ2aWNlQ29udHJhY3Q+ CiAgICAgICAgICA8bnMxOm11bHRpWWVhckNvbnRyYWN0IGRlc2NyaXB0aW9uPSJO TyI+TjwvbnMxOm11bHRpWWVhckNvbnRyYWN0PgogICAgICAgICAgPG5zMTpwdXJj aGFzZUNhcmRBc1BheW1lbnRNZXRob2QgZGVzY3JpcHRpb249Ik5PIj5OPC9uczE6 cHVyY2hhc2VDYXJkQXNQYXltZW50TWV0aG9kPgogICAgICAgICAgPG5zMTpudW1i ZXJPZkFjdGlvbnM+MTwvbnMxOm51bWJlck9mQWN0aW9ucz48L25zMTpjb250cmFj dERhdGE+CiAgICAgICAgPG5zMTpsZWdpc2xhdGl2ZU1hbmRhdGVzPgogICAgICAg ICAgPG5zMTpDbGluZ2VyQ29oZW5BY3QgZGVzY3JpcHRpb249Ik5PIj5OPC9uczE6 Q2xpbmdlckNvaGVuQWN0PgogICAgICAgICAgPG5zMTptYXRlcmlhbHNTdXBwbGll c0FydGljbGVzRXF1aXBtZW50IGRlc2NyaXB0aW9uPSJOT1QgQVBQTElDQUJMRSI+ WDwvbnMxOm1hdGVyaWFsc1N1cHBsaWVzQXJ0aWNsZXNFcXVpcG1lbnQ+CiAgICAg ICAgICA8bnMxOmxhYm9yU3RhbmRhcmRzIGRlc2NyaXB0aW9uPSJOT1QgQVBQTElD QUJMRSI+WDwvbnMxOmxhYm9yU3RhbmRhcmRzPgogICAgICAgICAgPG5zMTpjb25z dHJ1Y3Rpb25XYWdlUmF0ZVJlcXVpcmVtZW50cyBkZXNjcmlwdGlvbj0iTk9UIEFQ UExJQ0FCTEUiPlg8L25zMTpjb25zdHJ1Y3Rpb25XYWdlUmF0ZVJlcXVpcmVtZW50 cz4KICAgICAgICAgIDxuczE6bGlzdE9mQWRkaXRpb25hbFJlcG9ydGluZ1ZhbHVl cz48L25zMTpsaXN0T2ZBZGRpdGlvbmFsUmVwb3J0aW5nVmFsdWVzPgogICAgICAg ICAgPG5zMTppbnRlcmFnZW5jeUNvbnRyYWN0aW5nQXV0aG9yaXR5IGRlc2NyaXB0 aW9uPSJOT1QgQVBQTElDQUJMRSI+WDwvbnMxOmludGVyYWdlbmN5Q29udHJhY3Rp bmdBdXRob3JpdHk+PC9uczE6bGVnaXNsYXRpdmVNYW5kYXRlcz4KICAgICAgICA8 bnMxOnByb2R1Y3RPclNlcnZpY2VJbmZvcm1hdGlvbj4KICAgICAgICAgIDxuczE6 cHJvZHVjdE9yU2VydmljZUNvZGUgZGVzY3JpcHRpb249IkFEUCBCQUNLVVAgQU5E IFNFQ1VSSVRZIFNFUlZJQ0VTIiBwcm9kdWN0T3JTZXJ2aWNlVHlwZT0iU0VSVklD RSI+RDMxMDwvbnMxOnByb2R1Y3RPclNlcnZpY2VDb2RlPgogICAgICAgICAgPG5z MTpjb250cmFjdEJ1bmRsaW5nIGRlc2NyaXB0aW9uPSJOT1QgQSBCVU5ETEVEIFJF UVVJUkVNRU5UIj5EPC9uczE6Y29udHJhY3RCdW5kbGluZz4KICAgICAgICAgIDxu czE6cHJpbmNpcGFsTkFJQ1NDb2RlIGRlc2NyaXB0aW9uPSJPVEhFUiBDT01QVVRF UiBSRUxBVEVEIFNFUlZJQ0VTIj41NDE1MTk8L25zMTpwcmluY2lwYWxOQUlDU0Nv ZGU+CiAgICAgICAgICA8bnMxOnVzZU9mRVBBRGVzaWduYXRlZFByb2R1Y3RzIGRl c2NyaXB0aW9uPSJOT1QgUkVRVUlSRUQiPkU8L25zMTp1c2VPZkVQQURlc2lnbmF0 ZWRQcm9kdWN0cz48L25zMTpwcm9kdWN0T3JTZXJ2aWNlSW5mb3JtYXRpb24+CiAg ICAgICAgPG5zMTp2ZW5kb3I+CiAgICAgICAgICA8bnMxOnZlbmRvckhlYWRlcj4K ICAgICAgICAgICAgPG5zMTp2ZW5kb3JOYW1lPkRMVCBTT0xVVElPTlMgSU5DT1JQ T1JBVEVEPC9uczE6dmVuZG9yTmFtZT48L25zMTp2ZW5kb3JIZWFkZXI+CiAgICAg ICAgICA8bnMxOnZlbmRvclNpdGVEZXRhaWxzPgogICAgICAgICAgICA8bnMxOnZl bmRvclNvY2lvRWNvbm9taWNJbmRpY2F0b3JzPgogICAgICAgICAgICAgIDxuczE6 aXNBbGFza2FuTmF0aXZlT3duZWRDb3Jwb3JhdGlvbk9yRmlybT5mYWxzZTwvbnMx OmlzQWxhc2thbk5hdGl2ZU93bmVkQ29ycG9yYXRpb25PckZpcm0+CiAgICAgICAg ICAgICAgPG5zMTppc0FtZXJpY2FuSW5kaWFuT3duZWQ+ZmFsc2U8L25zMTppc0Ft ZXJpY2FuSW5kaWFuT3duZWQ+CiAgICAgICAgICAgICAgPG5zMTppc0luZGlhblRy aWJlPmZhbHNlPC9uczE6aXNJbmRpYW5UcmliZT4KICAgICAgICAgICAgICA8bnMx OmlzTmF0aXZlSGF3YWlpYW5Pd25lZE9yZ2FuaXphdGlvbk9yRmlybT5mYWxzZTwv bnMxOmlzTmF0aXZlSGF3YWlpYW5Pd25lZE9yZ2FuaXphdGlvbk9yRmlybT4KICAg ICAgICAgICAgICA8bnMxOmlzVHJpYmFsbHlPd25lZEZpcm0+ZmFsc2U8L25zMTpp c1RyaWJhbGx5T3duZWRGaXJtPgogICAgICAgICAgICAgIDxuczE6aXNWZXRlcmFu T3duZWQ+ZmFsc2U8L25zMTppc1ZldGVyYW5Pd25lZD4KICAgICAgICAgICAgICA8 bnMxOmlzU2VydmljZVJlbGF0ZWREaXNhYmxlZFZldGVyYW5Pd25lZEJ1c2luZXNz PmZhbHNlPC9uczE6aXNTZXJ2aWNlUmVsYXRlZERpc2FibGVkVmV0ZXJhbk93bmVk QnVzaW5lc3M+CiAgICAgICAgICAgICAgPG5zMTppc1dvbWVuT3duZWQ+ZmFsc2U8 L25zMTppc1dvbWVuT3duZWQ+CiAgICAgICAgICAgICAgPG5zMTptaW5vcml0eU93 bmVkPgogICAgICAgICAgICAgICAgPG5zMTppc01pbm9yaXR5T3duZWQ+ZmFsc2U8 L25zMTppc01pbm9yaXR5T3duZWQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzU3Vi Q29udGluZW50QXNpYW5BbWVyaWNhbk93bmVkQnVzaW5lc3M+ZmFsc2U8L25zMTpp c1N1YkNvbnRpbmVudEFzaWFuQW1lcmljYW5Pd25lZEJ1c2luZXNzPgogICAgICAg ICAgICAgICAgPG5zMTppc0FzaWFuUGFjaWZpY0FtZXJpY2FuT3duZWRCdXNpbmVz cz5mYWxzZTwvbnMxOmlzQXNpYW5QYWNpZmljQW1lcmljYW5Pd25lZEJ1c2luZXNz PgogICAgICAgICAgICAgICAgPG5zMTppc0JsYWNrQW1lcmljYW5Pd25lZEJ1c2lu ZXNzPmZhbHNlPC9uczE6aXNCbGFja0FtZXJpY2FuT3duZWRCdXNpbmVzcz4KICAg ICAgICAgICAgICAgIDxuczE6aXNIaXNwYW5pY0FtZXJpY2FuT3duZWRCdXNpbmVz cz5mYWxzZTwvbnMxOmlzSGlzcGFuaWNBbWVyaWNhbk93bmVkQnVzaW5lc3M+CiAg ICAgICAgICAgICAgICA8bnMxOmlzTmF0aXZlQW1lcmljYW5Pd25lZEJ1c2luZXNz PmZhbHNlPC9uczE6aXNOYXRpdmVBbWVyaWNhbk93bmVkQnVzaW5lc3M+CiAgICAg ICAgICAgICAgICA8bnMxOmlzT3RoZXJNaW5vcml0eU93bmVkPmZhbHNlPC9uczE6 aXNPdGhlck1pbm9yaXR5T3duZWQ+PC9uczE6bWlub3JpdHlPd25lZD4KICAgICAg ICAgICAgICA8bnMxOmlzVmVyeVNtYWxsQnVzaW5lc3M+ZmFsc2U8L25zMTppc1Zl cnlTbWFsbEJ1c2luZXNzPgogICAgICAgICAgICAgIDxuczE6aXNXb21lbk93bmVk U21hbGxCdXNpbmVzcz5mYWxzZTwvbnMxOmlzV29tZW5Pd25lZFNtYWxsQnVzaW5l c3M+CiAgICAgICAgICAgICAgPG5zMTppc0Vjb25vbWljYWxseURpc2FkdmFudGFn ZWRXb21lbk93bmVkU21hbGxCdXNpbmVzcz5mYWxzZTwvbnMxOmlzRWNvbm9taWNh bGx5RGlzYWR2YW50YWdlZFdvbWVuT3duZWRTbWFsbEJ1c2luZXNzPgogICAgICAg ICAgICAgIDxuczE6aXNKb2ludFZlbnR1cmVXb21lbk93bmVkU21hbGxCdXNpbmVz cz5mYWxzZTwvbnMxOmlzSm9pbnRWZW50dXJlV29tZW5Pd25lZFNtYWxsQnVzaW5l c3M+CiAgICAgICAgICAgICAgPG5zMTppc0pvaW50VmVudHVyZUVjb25vbWljYWxs eURpc2FkdmFudGFnZWRXb21lbk93bmVkU21hbGxCdXNpbmVzcz5mYWxzZTwvbnMx OmlzSm9pbnRWZW50dXJlRWNvbm9taWNhbGx5RGlzYWR2YW50YWdlZFdvbWVuT3du ZWRTbWFsbEJ1c2luZXNzPjwvbnMxOnZlbmRvclNvY2lvRWNvbm9taWNJbmRpY2F0 b3JzPgogICAgICAgICAgICA8bnMxOnZlbmRvckJ1c2luZXNzVHlwZXM+CiAgICAg ICAgICAgICAgPG5zMTppc0NvbW11bml0eURldmVsb3BlZENvcnBvcmF0aW9uT3du ZWRGaXJtPmZhbHNlPC9uczE6aXNDb21tdW5pdHlEZXZlbG9wZWRDb3Jwb3JhdGlv bk93bmVkRmlybT4KICAgICAgICAgICAgICA8bnMxOmlzTGFib3JTdXJwbHVzQXJl YUZpcm0+ZmFsc2U8L25zMTppc0xhYm9yU3VycGx1c0FyZWFGaXJtPgogICAgICAg ICAgICAgIDxuczE6ZmVkZXJhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgICA8 bnMxOmlzRmVkZXJhbEdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc0ZlZGVyYWxHb3Zl cm5tZW50PgogICAgICAgICAgICAgICAgPG5zMTppc0ZlZGVyYWxseUZ1bmRlZFJl c2VhcmNoQW5kRGV2ZWxvcG1lbnRDb3JwPmZhbHNlPC9uczE6aXNGZWRlcmFsbHlG dW5kZWRSZXNlYXJjaEFuZERldmVsb3BtZW50Q29ycD4KICAgICAgICAgICAgICAg IDxuczE6aXNGZWRlcmFsR292ZXJubWVudEFnZW5jeT5mYWxzZTwvbnMxOmlzRmVk ZXJhbEdvdmVybm1lbnRBZ2VuY3k+PC9uczE6ZmVkZXJhbEdvdmVybm1lbnQ+CiAg ICAgICAgICAgICAgPG5zMTppc1N0YXRlR292ZXJubWVudD5mYWxzZTwvbnMxOmlz U3RhdGVHb3Zlcm5tZW50PgogICAgICAgICAgICAgIDxuczE6bG9jYWxHb3Zlcm5t ZW50PgogICAgICAgICAgICAgICAgPG5zMTppc0xvY2FsR292ZXJubWVudD5mYWxz ZTwvbnMxOmlzTG9jYWxHb3Zlcm5tZW50PgogICAgICAgICAgICAgICAgPG5zMTpp c0NpdHlMb2NhbEdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc0NpdHlMb2NhbEdvdmVy bm1lbnQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzQ291bnR5TG9jYWxHb3Zlcm5t ZW50PmZhbHNlPC9uczE6aXNDb3VudHlMb2NhbEdvdmVybm1lbnQ+CiAgICAgICAg ICAgICAgICA8bnMxOmlzSW50ZXJNdW5pY2lwYWxMb2NhbEdvdmVybm1lbnQ+ZmFs c2U8L25zMTppc0ludGVyTXVuaWNpcGFsTG9jYWxHb3Zlcm5tZW50PgogICAgICAg ICAgICAgICAgPG5zMTppc0xvY2FsR292ZXJubWVudE93bmVkPmZhbHNlPC9uczE6aXNM b2NhbEdvdmVybm1lbnRPd25lZD4KICAgICAgICAgICAgICAgIDxuczE6aXNNdW5p Y2lwYWxpdHlMb2NhbEdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc011bmljaXBhbGl0 eUxvY2FsR292ZXJubWVudD4KICAgICAgICAgICAgICAgIDxuczE6aXNTY2hvb2xE aXN0cmljdExvY2FsR292ZXJubWVudD5mYWxzZTwvbnMxOmlzU2Nob29sRGlzdHJp Y3RMb2NhbEdvdmVybm1lbnQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzVG93bnNo aXBMb2NhbEdvdmVybm1lbnQ+ZmFsc2U8L25zMTppc1Rvd25zaGlwTG9jYWxHb3Zl cm5tZW50PjwvbnMxOmxvY2FsR292ZXJubWVudD4KICAgICAgICAgICAgICA8bnMx OmlzVHJpYmFsR292ZXJubWVudD5mYWxzZTwvbnMxOmlzVHJpYmFsR292ZXJubWVu dD4KICAgICAgICAgICAgICA8bnMxOmlzRm9yZWlnbkdvdmVybm1lbnQ+ZmFsc2U8 L25zMTppc0ZvcmVpZ25Hb3Zlcm5tZW50PgogICAgICAgICAgICAgIDxuczE6YnVz aW5lc3NPck9yZ2FuaXphdGlvblR5cGU+CiAgICAgICAgICAgICAgICA8bnMxOmlz Q29ycG9yYXRlRW50aXR5Tm90VGF4RXhlbXB0PmZhbHNlPC9uczE6aXNDb3Jwb3Jh dGVFbnRpdHlOb3RUYXhFeGVtcHQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzQ29y cG9yYXRlRW50aXR5VGF4RXhlbXB0PmZhbHNlPC9uczE6aXNDb3Jwb3JhdGVFbnRp dHlUYXhFeGVtcHQ+CiAgICAgICAgICAgICAgICA8bnMxOmlzUGFydG5lcnNoaXBP ckxpbWl0ZWRMaWFiaWxpdHlQYXJ0bmVyc2hpcD5mYWxzZTwvbnMxOmlzUGFydG5l cnNoaXBPckxpbWl0ZWRMaWFiaWxpdHlQYXJ0bmVyc2hpcD4KICAgICAgICAgICAg ICAgIDxuczE6aXNTb2xlUHJvcHJlaXRvcnNoaXA+ZmFsc2U8L25zMTppc1NvbGVQ cm9wcmVpdG9yc2hpcD4KICAgICAgICAgICAgICAgIDxuczE6aXNTbWFsbEFncmlj dWx0dXJhbENvb3BlcmF0aXZlPmZhbHNlPC9uczE6aXNTbWFsbEFncmljdWx0dXJh bENvb3BlcmF0aXZlPgogICAgICAgICAgICAgICAgPG5zMTppc0ludGVybmF0aW9u YWxPcmdhbml6YXRpb24+ZmFsc2U8L25zMTppc0ludGVybmF0aW9uYWxPcmdhbml6 YXRpb24+CiAgICAgICAgICAgICAgICA8bnMxOmlzVVNHb3Zlcm5tZW50RW50aXR5 PmZhbHNlPC9uczE6aXNVU0dvdmVybm1lbnRFbnRpdHk+PC9uczE6YnVzaW5lc3NP ck9yZ2FuaXphdGlvblR5cGU+PC9uczE6dmVuZG9yQnVzaW5lc3NUeXBlcz4KICAg ICAgICAgICAgPG5zMTp2ZW5kb3JMaW5lT2ZCdXNpbmVzcz4KICAgICAgICAgICAg ICA8bnMxOmlzQ29tbXVuaXR5RGV2ZWxvcG1lbnRDb3Jwb3JhdGlvbj5mYWxzZTwv bnMxOmlzQ29tbXVuaXR5RGV2ZWxvcG1lbnRDb3Jwb3JhdGlvbj4KICAgICAgICAg ICAgICA8bnMxOmlzRG9tZXN0aWNTaGVsdGVyPmZhbHNlPC9uczE6aXNEb21lc3Rp Y1NoZWx0ZXI+CiAgICAgICAgICAgICAgPG5zMTppc0VkdWNhdGlvbmFsSW5zdGl0 dXRpb24+ZmFsc2U8L25zMTppc0VkdWNhdGlvbmFsSW5zdGl0dXRpb24+CiAgICAg ICAgICAgICAgPG5zMTppc0ZvdW5kYXRpb24+ZmFsc2U8L25zMTppc0ZvdW5kYXRp b24+CiAgICAgICAgICAgICAgPG5zMTppc0hvc3BpdGFsPmZhbHNlPC9uczE6aXNI b3NwaXRhbD4KICAgICAgICAgICAgICA8bnMxOmlzTWFudWZhY3R1cmVyT2ZHb29k cz5mYWxzZTwvbnMxOmlzTWFudWZhY3R1cmVyT2ZHb29kcz4KICAgICAgICAgICAg ICA8bnMxOmlzVmV0ZXJpbmFyeUhvc3BpdGFsPmZhbHNlPC9uczE6aXNWZXRlcmlu YXJ5SG9zcGl0YWw+CiAgICAgICAgICAgICAgPG5zMTppc0hpc3BhbmljU2Vydmlj aW5nSW5zdGl0dXRpb24+ZmFsc2U8L25zMTppc0hpc3BhbmljU2VydmljaW5nSW5z dGl0dXRpb24+PC9uczE6dmVuZG9yTGluZU9mQnVzaW5lc3M+CiAgICAgICAgICAg IDxuczE6dmVuZG9yUmVsYXRpb25zaGlwV2l0aEZlZGVyYWxHb3Zlcm5tZW50Pgog ICAgICAgICAgICAgIDxuczE6cmVjZWl2ZXNDb250cmFjdHM+ZmFsc2U8L25zMTpy ZWNlaXZlc0NvbnRyYWN0cz4KICAgICAgICAgICAgICA8bnMxOnJlY2VpdmVzR3Jh bnRzPmZhbHNlPC9uczE6cmVjZWl2ZXNHcmFudHM+CiAgICAgICAgICAgICAgPG5z MTpyZWNlaXZlc0NvbnRyYWN0c0FuZEdyYW50cz5mYWxzZTwvbnMxOnJlY2VpdmVz Q29udHJhY3RzQW5kR3JhbnRzPjwvbnMxOnZlbmRvclJlbGF0aW9uc2hpcFdpdGhG ZWRlcmFsR292ZXJubWVudD4KICAgICAgICAgICAgPG5zMTp0eXBlT2ZHb3Zlcm5t ZW50RW50aXR5PgogICAgICAgICAgICAgIDxuczE6aXNBaXJwb3J0QXV0aG9yaXR5 PmZhbHNlPC9uczE6aXNBaXJwb3J0QXV0aG9yaXR5PgogICAgICAgICAgICAgIDxu czE6aXNDb3VuY2lsT2ZHb3Zlcm5tZW50cz5mYWxzZTwvbnMxOmlzQ291bmNpbE9m R292ZXJubWVudHM+CiAgICAgICAgICAgICAgPG5zMTppc0hvdXNpbmdBdXRob3Jp dGllc1B1YmxpY09yVHJpYmFsPmZhbHNlPC9uczE6aXNIb3VzaW5nQXV0aG9yaXRp ZXNQdWJsaWNPclRyaWJhbD4KICAgICAgICAgICAgICA8bnMxOmlzSW50ZXJzdGF0 ZUVudGl0eT5mYWxzZTwvbnMxOmlzSW50ZXJzdGF0ZUVudGl0eT4KICAgICAgICAg ICAgICA8bnMxOmlzUGxhbm5pbmdDb21taXNzaW9uPmZhbHNlPC9uczE6aXNQbGFu bmluZ0NvbW1pc3Npb24+CiAgICAgICAgICAgICAgPG5zMTppc1BvcnRBdXRob3Jp dHk+ZmFsc2U8L25zMTppc1BvcnRBdXRob3JpdHk+CiAgICAgICAgICAgICAgPG5z MTppc1RyYW5zaXRBdXRob3JpdHk+ZmFsc2U8L25zMTppc1RyYW5zaXRBdXRob3Jp dHk+PC9uczE6dHlwZU9mR292ZXJubWVudEVudGl0eT4KICAgICAgICAgICAgPG5z MTp2ZW5kb3JPcmdhbml6YXRpb25GYWN0b3JzPgogICAgICAgICAgICAgIDxuczE6 aXNTdWJjaGFwdGVyU0NvcnBvcmF0aW9uPmZhbHNlPC9uczE6aXNTdWJjaGFwdGVy U0NvcnBvcmF0aW9uPgogICAgICAgICAgICAgIDxuczE6aXNMaW1pdGVkTGlhYmls aXR5Q29ycG9yYXRpb24+ZmFsc2U8L25zMTppc0xpbWl0ZWRMaWFiaWxpdHlDb3Jw b3JhdGlvbj4KICAgICAgICAgICAgICA8bnMxOmlzRm9yZWlnbk93bmVkQW5kTG9j YXRlZD5mYWxzZTwvbnMxOmlzRm9yZWlnbk93bmVkQW5kTG9jYXRlZD4KICAgICAg ICAgICAgICA8bnMxOnByb2ZpdFN0cnVjdHVyZT4KICAgICAgICAgICAgICAgIDxu czE6aXNGb3JQcm9maXRPcmdhbml6YXRpb24+ZmFsc2U8L25zMTppc0ZvclByb2Zp dE9yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxuczE6aXNOb25wcm9maXRP cmdhbml6YXRpb24+ZmFsc2U8L25zMTppc05vbnByb2ZpdE9yZ2FuaXphdGlvbj4K ICAgICAgICAgICAgICAgIDxuczE6aXNPdGhlck5vdEZvclByb2ZpdE9yZ2FuaXph dGlvbj5mYWxzZTwvbnMxOmlzT3RoZXJOb3RGb3JQcm9maXRPcmdhbml6YXRpb24+ PC9uczE6cHJvZml0U3RydWN0dXJlPgogICAgICAgICAgICAgIDxuczE6aXNTaGVs dGVyZWRXb3Jrc2hvcD5mYWxzZTwvbnMxOmlzU2hlbHRlcmVkV29ya3Nob3A+CiAg ICAgICAgICAgICAgPG5zMTpudW1iZXJPZkVtcGxveWVlcz4xNzM8L25zMTpudW1i ZXJPZkVtcGxveWVlcz4KICAgICAgICAgICAgICA8bnMxOmFubnVhbFJldmVudWU+ MjY8L25zMTphbm51YWxSZXZlbnVlPjwvbnMxOnZlbmRvck9yZ2FuaXphdGlvbkZh Y3RvcnM+CiAgICAgICAgICAgIDxuczE6dHlwZU9mRWR1Y2F0aW9uYWxFbnRpdHk+ CiAgICAgICAgICAgICAgPG5zMTppczE4NjJMYW5kR3JhbnRDb2xsZWdlPmZhbHNl PC9uczE6aXMxODYyTGFuZEdyYW50Q29sbGVnZT4KICAgICAgICAgICAgICA8bnMx OmlzMTg5MExhbmRHcmFudENvbGxlZ2U+ZmFsc2U8L25zMTppczE4OTBMYW5kR3Jh bnRDb2xsZWdlPgogICAgICAgICAgICAgIDxuczE6aXMxOTk0TGFuZEdyYW50Q29s bGVnZT5mYWxzZTwvbnMxOmlzMTk5NExhbmRHcmFudENvbGxlZ2U+CiAgICAgICAg ICAgICAgPG5zMTppc0hpc3RvcmljYWxseUJsYWNrQ29sbGVnZU9yVW5pdmVyc2l0 eT5mYWxzZTwvbnMxOmlzSGlzdG9yaWNhbGx5QmxhY2tDb2xsZWdlT3JVbml2ZXJz aXR5PgogICAgICAgICAgICAgIDxuczE6aXNNaW5vcml0eUluc3RpdHV0aW9uPmZh bHNlPC9uczE6aXNNaW5vcml0eUluc3RpdHV0aW9uPgogICAgICAgICAgICAgIDxu czE6aXNQcml2YXRlVW5pdmVyc2l0eU9yQ29sbGVnZT5mYWxzZTwvbnMxOmlzUHJp dmF0ZVVuaXZlcnNpdHlPckNvbGxlZ2U+CiAgICAgICAgICAgICAgPG5zMTppc1Nj aG9vbE9mRm9yZXN0cnk+ZmFsc2U8L25zMTppc1NjaG9vbE9mRm9yZXN0cnk+CiAg ICAgICAgICAgICAgPG5zMTppc1N0YXRlQ29udHJvbGxlZEluc3RpdHV0aW9ub2ZI aWdoZXJMZWFybmluZz5mYWxzZTwvbnMxOmlzU3RhdGVDb250cm9sbGVkSW5zdGl0 dXRpb25vZkhpZ2hlckxlYXJuaW5nPgogICAgICAgICAgICAgIDxuczE6aXNUcmli YWxDb2xsZWdlPmZhbHNlPC9uczE6aXNUcmliYWxDb2xsZWdlPgogICAgICAgICAg ICAgIDxuczE6aXNWZXRlcmluYXJ5Q29sbGVnZT5mYWxzZTwvbnMxOmlzVmV0ZXJp bmFyeUNvbGxlZ2U+CiAgICAgICAgICAgICAgPG5zMTppc0FsYXNrYW5OYXRpdmVT ZXJ2aWNpbmdJbnN0aXR1dGlvbj5mYWxzZTwvbnMxOmlzQWxhc2thbk5hdGl2ZVNl cnZpY2luZ0luc3RpdHV0aW9uPgogICAgICAgICAgICAgIDxuczE6aXNOYXRpdmVI YXdhaWlhblNlcnZpY2luZ0luc3RpdHV0aW9uPmZhbHNlPC9uczE6aXNOYXRpdmVI YXdhaWlhblNlcnZpY2luZ0luc3RpdHV0aW9uPjwvbnMxOnR5cGVPZkVkdWNhdGlv bmFsRW50aXR5PgogICAgICAgICAgICA8bnMxOnZlbmRvckNlcnRpZmljYXRpb25z PgogICAgICAgICAgICAgIDxuczE6aXNET1RDZXJ0aWZpZWREaXNhZHZhbnRhZ2Vk QnVzaW5lc3NFbnRlcnByaXNlPmZhbHNlPC9uczE6aXNET1RDZXJ0aWZpZWREaXNh ZHZhbnRhZ2VkQnVzaW5lc3NFbnRlcnByaXNlPgogICAgICAgICAgICAgIDxuczE6 aXNTZWxmQ2VydGlmaWVkU21hbGxEaXNhZHZhbnRhZ2VkQnVzaW5lc3M+ZmFsc2U8 L25zMTppc1NlbGZDZXJ0aWZpZWRTbWFsbERpc2FkdmFudGFnZWRCdXNpbmVzcz4K ICAgICAgICAgICAgICA8bnMxOmlzU0JBQ2VydGlmaWVkU21hbGxEaXNhZHZhbnRh Z2VkQnVzaW5lc3M+ZmFsc2U8L25zMTppc1NCQUNlcnRpZmllZFNtYWxsRGlzYWR2 YW50YWdlZEJ1c2luZXNzPgogICAgICAgICAgICAgIDxuczE6aXNTQkFDZXJ0aWZp ZWQ4QVByb2dyYW1QYXJ0aWNpcGFudD5mYWxzZTwvbnMxOmlzU0JBQ2VydGlmaWVk OEFQcm9ncmFtUGFydGljaXBhbnQ+CiAgICAgICAgICAgICAgPG5zMTppc1NlbGZD ZXJ0aWZpZWRIVUJab25lSm9pbnRWZW50dXJlPmZhbHNlPC9uczE6aXNTZWxmQ2Vy dGlmaWVkSFVCWm9uZUpvaW50VmVudHVyZT4KICAgICAgICAgICAgICA8bnMxOmlz U0JBQ2VydGlmaWVkSFVCWm9uZT5mYWxzZTwvbnMxOmlzU0JBQ2VydGlmaWVkSFVC Wm9uZT4KICAgICAgICAgICAgICA8bnMxOmlzU0JBQ2VydGlmaWVkOEFKb2ludFZl bnR1cmU+ZmFsc2U8L25zMTppc1NCQUNlcnRpZmllZDhBSm9pbnRWZW50dXJlPjwv bnMxOnZlbmRvckNlcnRpZmljYXRpb25zPgogICAgICAgICAgICA8bnMxOnZlbmRv ckxvY2F0aW9uPgogICAgICAgICAgICAgIDxuczE6c3RyZWV0QWRkcmVzcz4xMzg2 MSBTVU5SSVNFIFZBTExFWSBEUiBTVEUgNDAwPC9uczE6c3RyZWV0QWRkcmVzcz4K ICAgICAgICAgICAgICA8bnMxOmNpdHk+SEVSTkRPTjwvbnMxOmNpdHk+CiAgICAg ICAgICAgICAgPG5zMTpzdGF0ZSBuYW1lPSJWSVJHSU5JQSI+VkE8L25zMTpzdGF0 ZT4KICAgICAgICAgICAgICA8bnMxOlpJUENvZGU+MjAxNzE2MTI2PC9uczE6WklQ Q29kZT4KICAgICAgICAgICAgICA8bnMxOmNvdW50cnlDb2RlIG5hbWU9IlVOSVRF RCBTVEFURVMiPlVTQTwvbnMxOmNvdW50cnlDb2RlPgogICAgICAgICAgICAgIDxu czE6Y29uZ3Jlc3Npb25hbERpc3RyaWN0Q29kZT4xMDwvbnMxOmNvbmdyZXNzaW9u YWxEaXN0cmljdENvZGU+PC9uczE6dmVuZG9yTG9jYXRpb24+CiAgICAgICAgICAg IDxuczE6dmVuZG9yU2l0ZUNvZGU+Nzg2NDY4MTk5MDAwMFBSPC9uczE6dmVuZG9y U2l0ZUNvZGU+CiAgICAgICAgICAgIDxuczE6dmVuZG9yQWx0ZXJuYXRlU2l0ZUNv ZGU+MjAxNzE2MTI2PC9uczE6dmVuZG9yQWx0ZXJuYXRlU2l0ZUNvZGU+CiAgICAg ICAgICAgIDxuczE6dmVuZG9yRFVOU0luZm9ybWF0aW9uPgogICAgICAgICAgICAg IDxuczE6RFVOU051bWJlcj43ODY0NjgxOTk8L25zMTpEVU5TTnVtYmVyPgogICAg ICAgICAgICAgIDxuczE6dmVuZG9yTmFtZT5ETFQgU09MVVRJT05TIElOQ09SUE9S QVRFRDwvbnMxOnZlbmRvck5hbWU+CiAgICAgICAgICAgICAgPG5zMTpnbG9iYWxQ YXJlbnREVU5TTnVtYmVyPjc4NjQ2ODE5OTwvbnMxOmdsb2JhbFBhcmVudERVTlNO dW1iZXI+CiAgICAgICAgICAgICAgPG5zMTpnbG9iYWxQYXJlbnREVU5TTmFtZT5E TFQgU09MVVRJT05TICBMTEM8L25zMTpnbG9iYWxQYXJlbnREVU5TTmFtZT48L25z MTp2ZW5kb3JEVU5TSW5mb3JtYXRpb24+CiAgICAgICAgICAgIDxuczE6Y2NyUmVn aXN0cmF0aW9uRGV0YWlscz4KICAgICAgICAgICAgICA8bnMxOnJlZ2lzdHJhdGlv bkRhdGU+MjAwMi0wMy0xNCAwMDowMDowMDwvbnMxOnJlZ2lzdHJhdGlvbkRhdGU+ CiAgICAgICAgICAgICAgPG5zMTpyZW5ld2FsRGF0ZT4yMDA4LTExLTE2IDAwOjAw OjAwPC9uczE6cmVuZXdhbERhdGU+PC9uczE6Y2NyUmVnaXN0cmF0aW9uRGV0YWls cz48L25zMTp2ZW5kb3JTaXRlRGV0YWlscz4KICAgICAgICAgIDxuczE6Y29udHJh Y3RpbmdPZmZpY2VyQnVzaW5lc3NTaXplRGV0ZXJtaW5hdGlvbiBkZXNjcmlwdGlv bj0iU01BTEwgQlVTSU5FU1MiPlM8L25zMTpjb250cmFjdGluZ09mZmljZXJCdXNp bmVzc1NpemVEZXRlcm1pbmF0aW9uPjwvbnMxOnZlbmRvcj4KICAgICAgICA8bnMx OnBsYWNlT2ZQZXJmb3JtYW5jZT4KICAgICAgICAgIDxuczE6cHJpbmNpcGFsUGxh Y2VPZlBlcmZvcm1hbmNlPgogICAgICAgICAgICA8bnMxOmxvY2F0aW9uQ29kZT4y NDAwMDwvbnMxOmxvY2F0aW9uQ29kZT4KICAgICAgICAgICAgPG5zMTpzdGF0ZUNv ZGUgbmFtZT0iVEVYQVMiPlRYPC9uczE6c3RhdGVDb2RlPgogICAgICAgICAgICA8 bnMxOmNvdW50cnlDb2RlIG5hbWU9IlVOSVRFRCBTVEFURVMiPlVTQTwvbnMxOmNv dW50cnlDb2RlPjwvbnMxOnByaW5jaXBhbFBsYWNlT2ZQZXJmb3JtYW5jZT4KICAg ICAgICAgIDxuczE6cGxhY2VPZlBlcmZvcm1hbmNlWklQQ29kZSBjb3VudHk9IkVM IFBBU08iIGNpdHk9IkVMIFBBU08iPjc5OTA4ODA5ODwvbnMxOnBsYWNlT2ZQZXJm b3JtYW5jZVpJUENvZGU+CiAgICAgICAgICA8bnMxOnBsYWNlT2ZQZXJmb3JtYW5j ZUNvbmdyZXNzaW9uYWxEaXN0cmljdD4xNjwvbnMxOnBsYWNlT2ZQZXJmb3JtYW5j ZUNvbmdyZXNzaW9uYWxEaXN0cmljdD48L25zMTpwbGFjZU9mUGVyZm9ybWFuY2U+ CiAgICAgICAgPG5zMTpjb21wZXRpdGlvbj4KICAgICAgICAgIDxuczE6c29saWNp dGF0aW9uUHJvY2VkdXJlcyBkZXNjcmlwdGlvbj0iU0lNUExJRklFRCBBQ1FVSVNJ VElPTiI+U1AxPC9uczE6c29saWNpdGF0aW9uUHJvY2VkdXJlcz4KICAgICAgICAg IDxuczE6dHlwZU9mU2V0QXNpZGUgZGVzY3JpcHRpb249Ik5PIFNFVCBBU0lERSBV U0VELiI+Tk9ORTwvbnMxOnR5cGVPZlNldEFzaWRlPgogICAgICAgICAgPG5zMTpl dmFsdWF0ZWRQcmVmZXJlbmNlIGRlc2NyaXB0aW9uPSJOTyBQUkVGRVJFTkNFIFVT RUQiPk5PTkU8L25zMTpldmFsdWF0ZWRQcmVmZXJlbmNlPgogICAgICAgICAgPG5z MTpudW1iZXJPZk9mZmVyc1JlY2VpdmVkPjE8L25zMTpudW1iZXJPZk9mZmVyc1Jl Y2VpdmVkPgogICAgICAgICAgPG5zMTpjb21tZXJjaWFsSXRlbUFjcXVpc2l0aW9u UHJvY2VkdXJlcyBkZXNjcmlwdGlvbj0iQ09NTUVSQ0lBTCBJVEVNIj5BPC9uczE6 Y29tbWVyY2lhbEl0ZW1BY3F1aXNpdGlvblByb2NlZHVyZXM+CiAgICAgICAgICA8 bnMxOmNvbW1lcmNpYWxJdGVtVGVzdFByb2dyYW0gZGVzY3JpcHRpb249Ik5PIj5O PC9uczE6Y29tbWVyY2lhbEl0ZW1UZXN0UHJvZ3JhbT4KICAgICAgICAgIDxuczE6 c21hbGxCdXNpbmVzc0NvbXBldGl0aXZlbmVzc0RlbW9uc3RyYXRpb25Qcm9ncmFt PmZhbHNlPC9uczE6c21hbGxCdXNpbmVzc0NvbXBldGl0aXZlbmVzc0RlbW9uc3Ry YXRpb25Qcm9ncmFtPgogICAgICAgICAgPG5zMTpBNzZBY3Rpb24gZGVzY3JpcHRp b249Ik5PIj5OPC9uczE6QTc2QWN0aW9uPgogICAgICAgICAgPG5zMTpmZWRCaXpP cHBzIGRlc2NyaXB0aW9uPSJOT1QgQVBQTElDQUJMRSI+WDwvbnMxOmZlZEJpek9w cHM+PC9uczE6Y29tcGV0aXRpb24+CiAgICAgICAgPG5zMTpwcmVmZXJlbmNlUHJv Z3JhbXM+PC9uczE6cHJlZmVyZW5jZVByb2dyYW1zPgogICAgICAgIDxuczE6dHJh bnNhY3Rpb25JbmZvcm1hdGlvbj4KICAgICAgICAgIDxuczE6Y3JlYXRlZEJ5PkVM RU5BLkEuQkVTQVdAVVNET0ouR09WPC9uczE6Y3JlYXRlZEJ5PgogICAgICAgICAg PG5zMTpjcmVhdGVkRGF0ZT4yMDA3LTA1LTAzIDE1OjIxOjM5PC9uczE6Y3JlYXRl ZERhdGU+CiAgICAgICAgICA8bnMxOmxhc3RNb2RpZmllZEJ5PklEVl9DT1JSRUNU PC9uczE6bGFzdE1vZGlmaWVkQnk+CiAgICAgICAgICA8bnMxOmxhc3RNb2RpZmll ZERhdGU+MjAxNi0wMi0xNiAxMzoxMDowMjwvbnMxOmxhc3RNb2RpZmllZERhdGU+ CiAgICAgICAgICA8bnMxOnN0YXR1cyBkZXNjcmlwdGlvbj0iRklOQUwiPkY8L25z MTpzdGF0dXM+PC9uczE6dHJhbnNhY3Rpb25JbmZvcm1hdGlvbj48L25zMTphd2Fy ZD4KICAgIDwvY29udGVudD4KICA8L2VudHJ5Pgo8L2ZlZWQ+ +" +2,"","",,"" diff --git a/wtptst/WTP/WT_SELF_TEST.ctl b/wtptst/WTP/WT_SELF_TEST.ctl new file mode 100644 index 0000000..3f60666 --- /dev/null +++ b/wtptst/WTP/WT_SELF_TEST.ctl @@ -0,0 +1,12 @@ +OPTIONS (SKIP=1) +LOAD DATA +APPEND INTO TABLE "WTP"."WT_SELF_TEST" +FIELDS CSV WITH EMBEDDED +TRAILING NULLCOLS + (ID FLOAT EXTERNAL + ,TEMP_CLOB CHAR(1048576) + ,TEMP_NCLOB CHAR(1048576) + ,TEMP_XML CHAR(1048576) + -- BLOB data must be decoded from Base64 after loading + ,TEMP_BLOB CHAR(1572864) + ) diff --git a/wtptst/WTP/WT_SELF_TEST.tab b/wtptst/WTP/WT_SELF_TEST.tab new file mode 100644 index 0000000..d98114f --- /dev/null +++ b/wtptst/WTP/WT_SELF_TEST.tab @@ -0,0 +1,43 @@ + +-- +-- Create WTP.WT_SELF_TEST Table +-- +-- NOTE: Foreign keys are in a different script +-- Indexes are in a different script +-- Triggers are in a different script +-- + +set define off + + +--DBMS_METADATA:WTP.WT_SELF_TEST + + CREATE TABLE "WTP"."WT_SELF_TEST" + ( "ID" NUMBER, + "TEMP_CLOB" CLOB, + "TEMP_NCLOB" NCLOB, + "TEMP_XML" "XMLTYPE", + "TEMP_BLOB" BLOB + ) SEGMENT CREATION IMMEDIATE LOGGING; +ALTER TABLE "WTP"."WT_SELF_TEST" ADD CONSTRAINT "WT_SELF_TEST_PK" PRIMARY KEY ("ID") + USING INDEX ENABLE; + +-- Comments + +--DBMS_METADATA:WTP.WT_SELF_TEST + + COMMENT ON COLUMN "WTP"."WT_SELF_TEST"."ID" IS 'Primary Key'; + COMMENT ON COLUMN "WTP"."WT_SELF_TEST"."TEMP_CLOB" IS 'CLOB test data'; + COMMENT ON COLUMN "WTP"."WT_SELF_TEST"."TEMP_NCLOB" IS 'NCLOB test data'; + COMMENT ON COLUMN "WTP"."WT_SELF_TEST"."TEMP_XML" IS 'XML test data'; + COMMENT ON COLUMN "WTP"."WT_SELF_TEST"."TEMP_BLOB" IS 'BLOB test data'; + COMMENT ON TABLE "WTP"."WT_SELF_TEST" IS 'Test Data for unit testing of WTPLSQL.'; + + +-- Grants + + +-- Synonyms + + +set define on diff --git a/wtptst/WTP/WT_SELF_TEST.tabtrg b/wtptst/WTP/WT_SELF_TEST.tabtrg new file mode 100644 index 0000000..af4e87d --- /dev/null +++ b/wtptst/WTP/WT_SELF_TEST.tabtrg @@ -0,0 +1,25 @@ + +-- +-- Create Triggers for WTP.WT_SELF_TEST TABLE +-- + +set define off + + +-- NOTE: This is a "TARGET" Trigger + +--DBMS_METADATA:WTP.WT_SELF_TEST$TEST + + CREATE OR REPLACE EDITIONABLE TRIGGER "WTP"."WT_SELF_TEST$TEST" + before insert on wt_self_test + for each row +declare + l_junk number; +begin + l_junk := 1; +end; + +/ +ALTER TRIGGER "WTP"."WT_SELF_TEST$TEST" ENABLE; + +set define on diff --git a/wtptst/alter_foreign_keys.sql b/wtptst/alter_foreign_keys.sql new file mode 100644 index 0000000..be2b565 --- /dev/null +++ b/wtptst/alter_foreign_keys.sql @@ -0,0 +1,88 @@ + +-- +-- Alter "wtptst" Install Type Foreign Keys +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure missing_parent_sql + (in_owner sys.dba_constraints.owner%TYPE + ,in_constraint sys.dba_constraints.constraint_name%TYPE) + is + TYPE fk_rec_type is record + (child_owner sys.dba_constraints.owner%TYPE + ,child_table sys.dba_constraints.table_name%TYPE + ,child_column sys.dba_cons_columns.column_name%TYPE + ,parent_owner sys.dba_constraints.owner%TYPE + ,parent_table sys.dba_constraints.table_name%TYPE + ,parent_column sys.dba_cons_columns.column_name%TYPE); + TYPE fk_nt_type is table of fk_rec_type; + fk_nt fk_nt_type; + sql_txt varchar2(1000); + begin + select ctab.owner child_owner, ctab.table_name child_table, ccol.column_name child_column, + ptab.owner parent_owner, ptab.table_name parent_table, pcol.column_name parent_column + bulk collect into fk_nt + from sys.dba_constraints ctab + join sys.dba_cons_columns ccol + on ccol.owner = ctab.owner and ccol.constraint_name = ctab.constraint_name + join sys.dba_constraints ptab + on ptab.owner = ctab.r_owner and ptab.constraint_name = ctab.r_constraint_name + join sys.dba_cons_columns pcol + on pcol.owner = ptab.owner and pcol.constraint_name = ptab.constraint_name + and pcol.position = ccol.position + where ctab.owner = in_owner and ctab.constraint_name = in_constraint + order by ccol.position; + if SQL%NOTFOUND then return; end if; + dbms_output.put_line('-- ORA-20000: Query to find missing parent keys:'); + -- ORA-20000: select "CHILD_KEY" from from "CHILD_OWNER"."CHILD_TABLE" group by "CHILD_KEY" + sql_txt := '-- ORA-20000: select "' || fk_nt(1).child_column; + for i in 2 .. fk_nt.LAST + loop + sql_txt := sql_txt || '", "' || fk_nt(i).child_column; + end loop; + sql_txt := sql_txt || '" from "' || fk_nt(1).child_owner || '"."' || fk_nt(1).child_table || + '" group by "' || fk_nt(1).child_column; + for i in 2 .. fk_nt.LAST + loop + sql_txt := sql_txt || '", "' || fk_nt(i).child_column; + end loop; + dbms_output.put_line (sql_txt || '"'); + -- ORA-20000: MINUS select "PARENT_KEY" from "PARENT_OWNER"."PARENT_TABLE"; + sql_txt := '-- ORA-20000: MINUS select "' || fk_nt(1).parent_column; + for i in 2 .. fk_nt.LAST + loop + sql_txt := sql_txt || '", "' || fk_nt(i).parent_column; + end loop; + sql_txt := sql_txt || '" from "' || fk_nt(1).parent_owner || '"."' || fk_nt(1).parent_table || '";'; + dbms_output.put_line (sql_txt); + end missing_parent_sql; + procedure do_it (in_schema in varchar2) + is + sql_txt varchar2(1000); + begin + for buff in (select owner, table_name, constraint_name from dba_constraints + where constraint_type = 'R' and owner = in_schema + order by owner, table_name, constraint_name) + loop + sql_txt := 'alter table "' || buff.owner || '"."' || buff.table_name || + '" &1. constraint "' || buff.constraint_name || '"'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- *'); + dbms_output.put_line('-- ERROR at line :'); + dbms_output.put_line('-- ' || SQLERRM); + missing_parent_sql(buff.owner,buff.constraint_name); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Foreign Keys is done.'); + end do_it; +begin + dbms_output.put_line('Alter Foreign Keys for wtptst Install Type'); + do_it('WTP'); +end; +/ diff --git a/wtptst/alter_queues.sql b/wtptst/alter_queues.sql new file mode 100644 index 0000000..b89e6c2 --- /dev/null +++ b/wtptst/alter_queues.sql @@ -0,0 +1,36 @@ + +-- +-- Alter "wtptst" Install Type Queues +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select owner, name from dba_queues + where owner = in_schema and queue_type != 'EXCEPTION_QUEUE' + order by owner, name) + loop + sql_txt := 'begin DBMS_AQADM.' || + case '&1.' when 'ENABLE' then 'START_QUEUE' + else 'STOP_QUEUE' + end || + '(QUEUE_NAME => ''' || buff.owner || '.' || buff.name || + ''', ENQUEUE => TRUE, DEQUEUE => TRUE); end;'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Queues is done.'); + end do_it; +begin + dbms_output.put_line('Alter Queues for wtptst Install Type'); + do_it('WTP'); +end; +/ diff --git a/wtptst/alter_scheduler_jobs.sql b/wtptst/alter_scheduler_jobs.sql new file mode 100644 index 0000000..efca82a --- /dev/null +++ b/wtptst/alter_scheduler_jobs.sql @@ -0,0 +1,32 @@ + +-- +-- Alter "wtptst" Install Type Scheduler Jobs +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select owner, job_name from dba_scheduler_jobs + where owner = in_schema + order by owner, job_name) + loop + sql_txt := 'begin DBMS_SCHEDULER.&1.(NAME => ''' || + buff.owner || '.' || buff.job_name || '''); end;'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Scheduler Jobs is done.'); + end do_it; +begin + dbms_output.put_line('Alter Scheduler Jobs for wtptst Install Type'); + do_it('WTP'); +end; +/ diff --git a/wtptst/alter_triggers.sql b/wtptst/alter_triggers.sql new file mode 100644 index 0000000..5a975cb --- /dev/null +++ b/wtptst/alter_triggers.sql @@ -0,0 +1,32 @@ + +-- +-- Alter "wtptst" Install Type Triggers +-- +-- Command Line Parameters: +-- 1 - ENABLE/DISABLE +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select owner, trigger_name from dba_triggers + where table_owner = in_schema + order by owner, trigger_name) + loop + sql_txt := 'alter trigger "' || buff.owner || '"."' || + buff.trigger_name || '" &1.'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + dbms_output.put_line('-- ' || in_schema || ' Alter Triggers is done.'); + end do_it; +begin + dbms_output.put_line('Alter Triggers for wtptst Install Type'); + do_it('WTP'); +end; +/ diff --git a/wtptst/compile_all.sql b/wtptst/compile_all.sql new file mode 100644 index 0000000..f98fcae --- /dev/null +++ b/wtptst/compile_all.sql @@ -0,0 +1,36 @@ + +-- +-- Compile All "wtptst" Install Type Objects +-- + +declare + procedure do_it (in_schema in varchar2) is + sql_txt varchar2(1000); + begin + for buff in (select object_name + from sys.dba_objects + where owner = in_schema + and object_type = 'JAVA SOURCE' + order by object_name ) + loop + sql_txt := 'alter java source "' || in_schema || '"."' || buff.object_name || '" compile'; + dbms_output.put_line(sql_txt || ';'); + begin + execute immediate sql_txt; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end; + end loop; + begin + DBMS_UTILITY.compile_schema(schema => in_schema, compile_all => FALSE); + dbms_output.put_line('-- ' || in_schema || ' Compile All is done.'); + exception when others then + dbms_output.put_line('Compiling Schema ' || in_schema || CHR(10) || SQLERRM); + dbms_output.put_line(''); + end; + end do_it; +begin + dbms_output.put_line('Compile All for wtptst Install Type'); + do_it('WTP'); +end; +/ diff --git a/wtptst/db_build_junit_report.sql b/wtptst/db_build_junit_report.sql new file mode 100644 index 0000000..35be61e --- /dev/null +++ b/wtptst/db_build_junit_report.sql @@ -0,0 +1,112 @@ + +-- +-- Create JUnit XML Report of Database Build Status for "wtptst" Install Type +-- + +declare + -- + procedure ot (in_txt in varchar2) is begin + dbms_output.put_line(in_txt); + end ot; + -- + procedure do_it (in_schema in varchar2) is + begin + for tsuite in ( + with q1 as ( + select obj.owner + ,count(obj.owner) NUM_TESTS + ,sum(decode(obj.status, 'VALID', 0, 1)) NUM_FAILURES + ,min(obj.last_ddl_time) TSTAMP + -- Jenkins JUnit Plugin adds all these times together + -- round((max(obj.last_ddl_time) - min(obj.last_ddl_time))*24*60*60) + ,0 ELAPSED_SECS + from dba_objects obj + where obj.owner = in_schema + group by obj.owner + UNION + select syn.table_owner OWNER + ,count(syn.table_owner) NUM_TESTS + ,sum(decode(obj.status, 'VALID', 0, 1)) NUM_FAILURES + ,min(obj.last_ddl_time) TSTAMP + -- Jenkins JUnit Plugin adds all these times together + -- round((max(obj.last_ddl_time) - min(obj.last_ddl_time))*24*60*60) + ,0 ELAPSED_SECS + from dba_synonyms syn + join dba_objects obj + on obj.object_name = syn.synonym_name + and obj.owner = syn.owner + where syn.owner = 'PUBLIC' + and syn.table_owner = in_schema + group by syn.table_owner + ) + select owner -- TESTSUITE + ,sum(NUM_TESTS) NUM_TESTS + ,sum(NUM_FAILURES) NUM_FAILURES + ,max(TSTAMP) TSTAMP + ,sum(ELAPSED_SECS) ELAPSED_SECS + from q1 + group by owner + order by owner) + loop + ot(' '); + for tcase in ( + select obj.object_type -- TESTCASE + ,replace(obj.object_name,'.','_') OBJECT_NAME -- CLASS + ,obj.STATUS + ,0 ELAPSED_SECS + from dba_objects obj + where obj.owner = tsuite.owner + UNION ALL + select 'PUBLIC_SYNONYM' OBJECT_TYPE -- TESTCASE + ,replace(obj.object_name,'.','_') OBJECT_NAME -- CLASS + ,obj.STATUS + ,0 ELAPSED_SECS + from dba_synonyms syn + join dba_objects obj + on obj.object_name = syn.synonym_name + and obj.owner = syn.owner + where syn.owner = 'PUBLIC' + and syn.table_owner = tsuite.owner + order by 1,2 ) + loop + if tcase.status = 'VALID' + then + ot(' ' ); + else + ot(' ' ); + ot(' '); + ot('** Object Status is ' || tcase.status); + for terror in ( + select 'Line ' || line || + ', Col ' || position || + ': ' || UTL_I18N.ESCAPE_REFERENCE(text, 'us7ascii') ERROR_TXT + from dba_errors + where owner = tsuite.owner + and type = decode(tcase.object_type,'PUBLIC_SYNONYM','SYNONYM',tcase.object_type) + and name = tcase.object_name + order by sequence ) + loop + ot(terror.error_txt); + end loop; + ot(' '); + ot(' '); + end if; + end loop; + ot(' '); + end loop; + end do_it; +begin + ot(''); + ot(''); + do_it('WTP'); + ot(''); +end; +/ diff --git a/wtptst/db_install.sql b/wtptst/db_install.sql new file mode 100644 index 0000000..8fab835 --- /dev/null +++ b/wtptst/db_install.sql @@ -0,0 +1,57 @@ + +-- Database Installation Assist +-- Wrapper for Database Installation Scripts +-- +-- Parameters +-- 1) Script Name +-- 2) Schema Name +-- 3) System Connect String + +prompt === DBI Started: &1. + +define DBI_SCRIPT_NAME="&1." +define DBI_SCHEMA_NAME="&2." +define DBI_SYSTEM_CONNECT="&3." + +variable dbi_beg_dtm varchar2(40) +variable dbi_beg_secs number + +set feedback off +begin + -- Initialize Timer + :dbi_beg_dtm := to_char(systimestamp,'YYYY-MM-DD') || 'T' || + to_char(systimestamp,'HH24:MI:SS'); + :dbi_beg_secs := dbms_utility.get_time; + -- Set Current Schema + if length('&DBI_SCHEMA_NAME.') > 0 + then + execute immediate 'alter session set current_schema = "&DBI_SCHEMA_NAME."'; + end if; +end; +/ + +set feedback on +set blockterminator off +set sqlblanklines on + +@"&DBI_SCRIPT_NAME." "&DBI_SYSTEM_CONNECT." "" "" +set serveroutput on size unlimited format wrapped + +set sqlblanklines off +set blockterminator on +set feedback off +begin + -- Reset Current Schema + if length('&DBI_SCHEMA_NAME.') > 0 + then + execute immediate 'alter session set current_schema = "' || USER || '"'; + end if; + -- Show Timer Results + dbms_output.put_line('=== DBI Completed at ' || to_char(systimestamp,'YYYY-MM-DD') || 'T' || + to_char(systimestamp,'HH24:MI:SS') || + ' for a duration of ' || trim( (dbms_utility.get_time - :dbi_beg_secs) / 100 ) || + ' seconds (started at ' || :dbi_beg_dtm || ')'); +end; +/ + +set feedback on diff --git a/wtptst/fix_invalid_public_synonyms.sql b/wtptst/fix_invalid_public_synonyms.sql new file mode 100644 index 0000000..ef70282 --- /dev/null +++ b/wtptst/fix_invalid_public_synonyms.sql @@ -0,0 +1,49 @@ + +-- +-- Re-create Invalid Public Synonyms +-- + +---------------------------------------- +prompt +prompt Re-create Invalid Public Synonyms +set serveroutput on size unlimited format wrapped +set linesize 2499 + +Declare + sql_txt varchar(2000); +Begin + for buff in (with q1 as ( + select owner, object_name, editionable + from dba_objects + where status != 'VALID' + ) + select syn.synonym_name, syn.table_owner, syn.table_name, + case q1.editionable when 'Y' then ' EDITIONABLE' + when NULL then '' + else ' NONEDITIONABLE' + end EDITIONABLE + from dba_synonyms syn + join q1 + on q1.owner = syn.owner + and q1.object_name = syn.synonym_name + join dba_users usr + on usr.username = syn.table_owner + and ( usr.oracle_maintained is null + OR usr.oracle_maintained != 'Y') + where syn.owner = 'PUBLIC' ) + loop + begin + sql_txt := 'CREATE OR REPLACE' || buff.EDITIONABLE || ' PUBLIC SYNONYM "' || + buff.synonym_name || '" for "' || buff.table_owner || '"."' || + buff.table_name ||'"'; + dbms_output.put_line(sql_txt); + execute immediate sql_txt; + exception + when others then + dbms_output.put_line('ERROR:' || CHR(10) || SQLERRM || CHR(10)); + dbms_output.put_line('----------------------------------------'); + end; + end loop; +end; +/ + diff --git a/wtptst/install.sql b/wtptst/install.sql new file mode 100644 index 0000000..20e761f --- /dev/null +++ b/wtptst/install.sql @@ -0,0 +1,76 @@ + +-- +-- Master Installation Script +-- All scripts created by "https://ODBCapture.org", Version V2.1 +-- +-- Must be run as SYS +-- +-- Command Line Parameters: +-- 1 - TO_PDB_SYSTEM: SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the pluggable database. +-- The Data Load installation requires this connection information. +-- + +-- NOTE: If running in a Linux based Docker Container from a Windows FileSystem Mount, run this first: +-- dos2unix -f -o ../install/*/*.csv ../install/*/*/*.csv + +define TOP_PDB_SYSTEM="&1." +execute DBMS_JAVA.SET_OUTPUT(1000000); +set serveroutput on size unlimited format wrapped + +---------------------------------------- +prompt Identify this Module in V$SESSION +set appinfo "wtptst Installation" + +---------------------------------------- +prompt Setup Abort on Error +WHENEVER SQLERROR EXIT SQL.SQLCODE +WHENEVER OSERROR EXIT + +---------------------------------------- +prompt +prompt ************************** +prompt * Run SYS Installation * +prompt ************************** +prompt +@install_sys.sql "" "" "" + +---------------------------------------- +prompt Setup Continue on Error +WHENEVER SQLERROR CONTINUE +WHENEVER OSERROR CONTINUE + +---------------------------------------- +prompt +prompt ***************************** +prompt * Run SYSTEM Installation * +prompt ***************************** +prompt +connect &TOP_PDB_SYSTEM. +execute DBMS_JAVA.SET_OUTPUT(1000000); +set serveroutput on size unlimited format wrapped +@install_system.sql "" "" "" + +---------------------------------------- +prompt +prompt ************************* +prompt * Install Application * +prompt ************************* +prompt +@install_wtptst.sql "&TOP_PDB_SYSTEM." "" "" + +---------------------------------------- +prompt +prompt ***************** +prompt * Run Reports * +prompt ***************** +prompt +@report_status.sql "&TOP_PDB_SYSTEM." "" "" + +---------------------------------------- +set appinfo "Null" +set appinfo off +prompt +prompt "wtptst" Installation is Done. + diff --git a/wtptst/install_sys.sql b/wtptst/install_sys.sql new file mode 100644 index 0000000..c53ba1c --- /dev/null +++ b/wtptst/install_sys.sql @@ -0,0 +1,18 @@ + +-- +-- SYS Installation Script +-- +-- Must be run as SYS +-- + +spool install_sys.log + +set blockterminator off +set sqlblanklines on + +---------------------------------------- +set sqlblanklines off +set blockterminator on + +spool off + diff --git a/wtptst/install_system.sql b/wtptst/install_system.sql new file mode 100644 index 0000000..dd64dd5 --- /dev/null +++ b/wtptst/install_system.sql @@ -0,0 +1,18 @@ + +-- +-- SYSTEM Installation Script +-- +-- Must be run as SYSTEM +-- + +spool install_system.log + +set blockterminator off +set sqlblanklines on + +---------------------------------------- +set sqlblanklines off +set blockterminator on + +spool off + diff --git a/wtptst/install_wtptst.sql b/wtptst/install_wtptst.sql new file mode 100644 index 0000000..46db2be --- /dev/null +++ b/wtptst/install_wtptst.sql @@ -0,0 +1,49 @@ + +-- +-- wtptst Installation Script +-- +-- Must be run as a SYSTEM User (DBA) +-- +-- Command Line Parameters: +-- 1 - INSTALL_SYSTEM_CONNECT: SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +spool install_wtptst.log + +define INSTALL_SYSTEM_CONNECT="&1." + +-- Must Set SQLPREFIX away from "#" Oracle Change Data Capture packages +set sqlprefix "~" + +-- Using "^P", CHR(16), DLE as an escape character +set escape OFF +set escape "" + +---------------------------------------- +-- Prepare for Install +@db_install.sql "./installation_prepare.sql" "" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- TABLE Install + +@db_install.sql "WTP/WT_SELF_TEST.tab" "WTP" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- DATA_LOAD Install + +@db_install.sql "WTP/WT_SELF_TEST.cdl" "WTP" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- TRIGGER Install + +@db_install.sql "WTP/WT_SELF_TEST.tabtrg" "WTP" "&INSTALL_SYSTEM_CONNECT." + +---------------------------------------- +-- Finalize Installation +@db_install.sql "./installation_finalize.sql" "" "&INSTALL_SYSTEM_CONNECT." + +spool off + diff --git a/wtptst/installation_finalize.sql b/wtptst/installation_finalize.sql new file mode 100644 index 0000000..7660714 --- /dev/null +++ b/wtptst/installation_finalize.sql @@ -0,0 +1,48 @@ + +-- +-- Finalize Installation +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +define FINAL_SYSTEM_CONNECT="&1." + +prompt +prompt Drop_Temp_Publicly_Updateable_Table_SQL +drop table SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE purge; + +prompt +prompt fix_invalid_public_synonyms +@"fix_invalid_public_synonyms.sql" "" + +prompt +prompt compile_all +@"compile_all.sql" "" + +prompt +prompt alter_foreign_keys_ENABLE +@"alter_foreign_keys.sql" "ENABLE" + +prompt +prompt alter_triggers_ENABLE +@"alter_triggers.sql" "ENABLE" + +prompt +prompt update_id_sequences +@"update_id_sequences.sql" "" + +--prompt +--prompt alter_queues_ENABLE +--@"alter_queues.sql" "ENABLE" + +--prompt +--prompt alter_scheduler_jobs_ENABLE +--@"alter_scheduler_jobs.sql" "ENABLE" + +prompt +prompt Load Installation Files +@"odbcapture_installation_logs.cdl" "&FINAL_SYSTEM_CONNECT." diff --git a/wtptst/installation_prepare.sql b/wtptst/installation_prepare.sql new file mode 100644 index 0000000..265eb55 --- /dev/null +++ b/wtptst/installation_prepare.sql @@ -0,0 +1,9 @@ + +-- +-- Prepare for View Install +-- + +prompt +prompt Create_Temp_Publicly_Updateable_Table_SQL +create table SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE (c1 number); +grant all on SYSTEM.TEMP_PUBLICLY_UPDATEABLE_TABLE to PUBLIC with grant option; diff --git a/wtptst/list_invalids.csv b/wtptst/list_invalids.csv new file mode 100644 index 0000000..e2d4f25 --- /dev/null +++ b/wtptst/list_invalids.csv @@ -0,0 +1 @@ +"OWNER","OBJECT_NAME","OBJECT_TYPE","STATUS" diff --git a/wtptst/list_invalids.sql b/wtptst/list_invalids.sql new file mode 100644 index 0000000..6f53240 --- /dev/null +++ b/wtptst/list_invalids.sql @@ -0,0 +1,47 @@ + +-- +-- List Invalid Objects for "wtptst" Install Type +-- + +declare + procedure do_it (in_schema in varchar2) is + begin + for buff in ( + with q1 as ( + select owner + ,object_name + ,object_type + ,status + from dba_objects obj + where obj.owner = in_schema + and ( obj.object_type != 'TYPE' + or obj.object_name not like 'SYSTP%==') + and obj.status != 'VALID' + UNION ALL + select syn.table_owner + ,syn.synonym_name + ,'PUBLIC_SYNONYM' OBJECT_TYPE + ,obj.status + from dba_synonyms syn + join dba_objects obj + on obj.object_name = syn.synonym_name + and obj.owner = syn.owner + and obj.status != 'VALID' + where syn.owner = 'PUBLIC' + and syn.table_owner = in_schema + ) + select '"' || owner || '",' || + '"' || object_name || '",' || + '"' || object_type || '",' || + '"' || status || '"' RECORD_DATA + from q1 + order by RECORD_DATA) + loop + dbms_output.put_line(buff.RECORD_DATA); + end loop; + end do_it; +begin + dbms_output.put_line('"OWNER","OBJECT_NAME","OBJECT_TYPE","STATUS"'); + do_it('WTP'); +end; +/ diff --git a/wtptst/log_files_junit_report.sql b/wtptst/log_files_junit_report.sql new file mode 100644 index 0000000..73adf6c --- /dev/null +++ b/wtptst/log_files_junit_report.sql @@ -0,0 +1,282 @@ + +-- +-- Create JUnit XML Report of Database Log Files for "wtptst" Schema +-- + +--Element | Description +-------------|------------- +--TestSuite | install_SYS, install_SYSTEM, and install_wtptst +--Hostname | Database Name +--Property | name="Source Version" value="https://github.com/DMSTEX/DMSTEX.git at f2c736d0cc6fd80d961414dcae37df2bed0d69e2 (Branch: main)" +--Testcase | Script Name +--Classname | "Schema Name"."Object Type" +--Assertions | Number of PL/SQL Statements +--Status | PASS/FAIL/ERROR/DISABLE +--Time | Testcase Duration +--Timestamp | Testcase Runtime (ISO 8601 format) +--Errors | Number of Test Errors + +declare + -- + -- Process CLOB Contents from odbcapture_installation_logs + line_txt varchar2(4000); + so_far pls_integer; + end_pos pls_integer; + -- + -- Varchar2 Associative Array + TYPE vc2_aa_type is table of varchar2(4000) + index by pls_integer; + -- + -- Testcases + TYPE tc_rec_type is record + (schema_name varchar2(128) + ,script_ext varchar2(10) -- Script Name Extension + ,num_statements number(3) -- Number of statements executed in a script + ,status varchar2(10) -- PASS/FAIL + ,duration_secs number(5) + ,t_timestamp varchar2(20) -- 2014-01-21T16:17:18 + ,error_message varchar2(4000) + ,tc_err_aa vc2_aa_type + ,tc_sys_out_aa vc2_aa_type + ); + TYPE tc_aa_type is table of tc_rec_type + index by varchar2(256); -- Testcase Name (Script Name with Path) + tc_aa tc_aa_type; + tc_name varchar2(256); -- Testcase Name (Script Name with Path) + prev_tc_name varchar2(256); -- Previous Testcase Name + -- + tc_buff_aa vc2_aa_type; -- Buffer Array for Testcases + sys_buff_aa vc2_aa_type; -- Buffer Array for System + sys_err boolean := FALSE; -- System Error Found + -- + total_tests number(4); + total_errors number(4); + total_duration number(6); + -- + procedure initialize_testcase (in_buff in varchar2) is begin + -- === DBI Started: "ODBCAPTURE/OBJ_INSTALL_COMMENTS_TAB.tab" + tc_name := replace(substr(in_buff, 18, 256),'"',''); + tc_aa(tc_name).schema_name := substr(tc_name, 1, instr(tc_name,'/',1)-1); + tc_aa(tc_name).script_ext := substr(tc_name, instr(tc_name,'.',-1)+1,10); + tc_aa(tc_name).status := 'PASS'; + end initialize_testcase; + -- + procedure finalize_testcase (in_buff in varchar2) is begin + if tc_name is null then return; end if; + tc_aa(tc_name).t_timestamp := substr(in_buff,22,19); + tc_aa(tc_name).duration_secs := substr(in_buff,60,length(in_buff)-60-40); + total_duration := total_duration + tc_aa(tc_name).duration_secs; + if regexp_like(tc_name, '[.]cdl$') + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := '### SQL*Loader Log File: ' || replace(tc_name,'.cdl','.log'); + begin + select substr(replace(contents,CHR(10)||CHR(10),CHR(10)),1,4000) + into tc_buff_aa(tc_buff_aa.COUNT + 1) + from odbcapture_installation_logs + where file_name = replace(tc_name,'.cdl','.log'); + exception when others then + tc_buff_aa(tc_buff_aa.COUNT + 1) := SQLERRM; + end; + end if; + if tc_aa(tc_name).status = 'FAIL' + then + tc_aa(tc_name).num_statements := 1; + total_errors := total_errors + 1; + if tc_buff_aa.COUNT > 0 + then + for i in tc_buff_aa.FIRST .. tc_buff_aa.LAST + loop + tc_aa(tc_name).tc_err_aa(i) := tc_buff_aa(i); + end loop; + end if; + else + tc_aa(tc_name).num_statements := tc_buff_aa.COUNT; + if tc_buff_aa.COUNT > 0 + then + for i in tc_buff_aa.FIRST .. tc_buff_aa.LAST + loop + tc_aa(tc_name).tc_sys_out_aa(i) := tc_buff_aa(i); + end loop; + end if; + end if; + total_tests := total_tests + 1; + prev_tc_name := tc_name; + tc_buff_aa.DELETE; + tc_name := ''; + end finalize_testcase; + -- + procedure process_contents_line (in_txt in varchar2) is + ldr_txt varchar2(4000); + begin + if in_txt is null then return; end if; + case + when regexp_like(in_txt, '^=== DBI Started: ') + then + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := 'Unexpected Testcase End: ' || in_txt; + finalize_testcase(''); + initialize_testcase(in_txt); + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + else + initialize_testcase(in_txt); + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + end if; + when regexp_like(in_txt, '^=== DBI Completed at ') + then + -- === DBI Completed at 2024-03-05T02:54:49 for a duration of 1.25 seconds (started at 2024-03-05T02:54:48) + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + finalize_testcase(in_txt); + else + sys_err := TRUE; + sys_buff_aa(sys_buff_aa.COUNT + 1) := 'Unexpected Testcase End: ' || in_txt; + end if; + when regexp_like(in_txt, '^(-- ){0,1}(PL[/]SQL:|(PLS|OCI|ORA|SP2|SQL|TNS)-[[:digit:]])') + then + -- (-- ){0,1}: "-- " may or may not be present + -- PL/SQL: PL/SQL Message + -- PLS-"digit" PL/SQL Errors + -- OCI-"digit" Oracle Call Interface + -- ORA-"digit" Oracle Database Errors + -- SP2-"digit" SQL*Plus Errors + -- SQL-"digit" SQL Errors + -- TNS-"digit" Transparent Network Substrate Errors + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + tc_aa(tc_name).status := 'FAIL'; + if tc_aa(tc_name).error_message is null + then + tc_aa(tc_name).error_message := in_txt; + end if; + else + sys_err := TRUE; + sys_buff_aa(sys_buff_aa.COUNT + 1) := '(' || prev_tc_name || ') ' || in_txt; + end if; + else + if tc_name is not null + then + tc_buff_aa(tc_buff_aa.COUNT + 1) := in_txt; + else + sys_buff_aa(sys_buff_aa.COUNT + 1) := '(' || prev_tc_name || ') ' || in_txt; + end if; + end case; + end process_contents_line; + -- + procedure p (in_txt in varchar2) is begin + dbms_output.put_line(in_txt); + end p; +begin + -- + prev_tc_name := 'Initializing'; + -- JUnit XML Format for Jenkins: "https://llg.cubic.org/docs/junit/" + p(''); + p(''); + for buf1 in (select rownum TS_ID + ,l.file_name + ,to_char(l.load_dtm,'YYYY-MM-DD') || 'T' || + to_char(l.load_dtm,'HH24:MI:SS') TSTAMP + ,db.db_unique_name + ,l.contents + from odbcapture_installation_logs l + cross join v$database db + where l.install_type = 'wtptst' + and l.file_name like 'install%' + and l.load_dtm > trunc(sysdate,'DD') - 2 + order by l.file_name, l.load_dtm) + loop + -- Initialize + tc_aa.DELETE; + tc_buff_aa.DELETE; + sys_buff_aa.DELETE; + tc_name := ''; + total_tests := 0; + total_errors := 0; + total_duration := 0; + -- Fill the Testcase Array + so_far := 0; + loop + end_pos := instr(buf1.contents, chr(10), so_far + 1); + exit when end_pos = 0; + line_txt := substr(buf1.contents, so_far + 1, end_pos - so_far - 1); + process_contents_line(line_txt); + so_far := end_pos; + end loop; + line_txt := substr(buf1.contents, so_far + 1, 4000); + process_contents_line(line_txt); + -- testsuite can appear multiple times, if contained in a testsuites element. It can also be the root element. + p(' '); + tc_name := tc_aa.FIRST; + while tc_name is not null + loop + -- testcase can appear multiple times, see /testsuites/testsuite@tests + p(' '); + if tc_aa(tc_name).status = 'PASS' + then + if tc_aa(tc_name).tc_sys_out_aa.COUNT > 0 + then + -- Data that was written to standard out while the test was executed. optional + p(' '); + for i in tc_aa(tc_name).tc_sys_out_aa.FIRST .. tc_aa(tc_name).tc_sys_out_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(tc_aa(tc_name).tc_sys_out_aa(i))); + end loop; + p(' '); + end if; + else + -- Indicates that the test errored. An errored test is one that had an unanticipated problem. For example an unchecked throwable or a problem with the implementation of the test. Contains as a text node relevant data for the error, for example a stack trace. optional + p(' ' ); -- The error message. e.g., if a java exception is thrown, the return value of getMessage() + if tc_aa(tc_name).tc_err_aa.COUNT > 0 + then + for i in tc_aa(tc_name).tc_err_aa.FIRST .. tc_aa(tc_name).tc_err_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(tc_aa(tc_name).tc_err_aa(i))); + end loop; + end if; + p(' '); + end if; + p(' '); + exit when tc_name = tc_aa.LAST; + tc_name := tc_aa.NEXT(tc_name); + end loop; + if sys_buff_aa.COUNT > 0 + then + if sys_err + then + -- Data that was written to standard error while the test suite was executed. optional + p(' '); + for i in sys_buff_aa.FIRST .. sys_buff_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(sys_buff_aa(i))); + end loop; + p(' '); + else + -- Data that was written to standard out while the test suite was executed. optional + p(' '); + for i in sys_buff_aa.FIRST .. sys_buff_aa.LAST + loop + p(DBMS_XMLGEN.CONVERT(sys_buff_aa(i))); + end loop; + p(' '); + end if; + end if; + p(' '); + end loop; + p(''); +end; +/ diff --git a/wtptst/odbcapture_installation_logs.cdl b/wtptst/odbcapture_installation_logs.cdl new file mode 100644 index 0000000..efb09a6 --- /dev/null +++ b/wtptst/odbcapture_installation_logs.cdl @@ -0,0 +1,71 @@ + +-- +-- Consolidated Data Load script for odbcapture_installation_logs data +-- +-- Must be run as SYSTEM +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- + +prompt +prompt Confirm/Create odbcapture_installation_logs Table +declare + jnk number := 0; + procedure run_sql (in_sql in varchar2) is begin + dbms_output.put_line(in_sql || ';'); + execute immediate in_sql; + exception when others then + dbms_output.put_line('-- ' || SQLERRM || CHR(10)); + end run_sql; +begin + begin + execute immediate 'insert into odbcapture_installation_logs(load_dtm, install_type, file_name)' || + ' values(sysdate, ''Test'', ''Test'')'; + rollback; + jnk := 1; + exception when others then + if SQLERRM != 'ORA-00942: table or view does not exist' + then + dbms_output.put_line('odbcapture_installation_logs table: ' || SQLERRM); + end if; + jnk := -1; + end; + if jnk = -1 + then + run_sql('create table odbcapture_installation_logs' || CHR(10) || + ' (load_dtm date' || CHR(10) || + ' ,install_type varchar2(10)' || CHR(10) || + ' ,file_name varchar2(512)' || CHR(10) || + ' ,contents clob)'); + run_sql('comment on column odbcapture_installation_logs.load_dtm is ''Date/Time the installation log file was loaded.'''); + run_sql('comment on column odbcapture_installation_logs.install_type is ''Type of installation (from TYPE_CONF).'''); + run_sql('comment on column odbcapture_installation_logs.file_name is ''Name of installation log file.'''); + run_sql('comment on column odbcapture_installation_logs.contents is ''Contents/Text of the installation log file.'''); + run_sql('comment on table odbcapture_installation_logs is ''ODBCAPTURE installation log files.'''); + run_sql('grant select on odbcapture_installation_logs to public'); + run_sql('create public synonym odbcapture_installation_logs for odbcapture_installation_logs'); + end if; +end; +/ + + +-- NOTE: Additional file extensions for SQL*Loader include +-- .bad - Bad Records +-- .dsc - Discard Records +-- .log - Log File + +prompt +prompt sqlldr_control=./odbcapture_installation_logs.ctl +host sqlldr '&1.' control=odbcapture_installation_logs.ctl data=odbcapture_installation_logs.csv log=odbcapture_installation_logs.log silent=HEADER,FEEDBACK + +begin + if '&_RC.' != '0' then + raise_application_error(-20000, 'Control file "odbcapture_installation_logs.ctl" returned error: &_RC.'); + end if; +end; +/ + diff --git a/wtptst/odbcapture_installation_logs.csv b/wtptst/odbcapture_installation_logs.csv new file mode 100644 index 0000000..75cedb6 --- /dev/null +++ b/wtptst/odbcapture_installation_logs.csv @@ -0,0 +1,4 @@ +"wtptst","install_sys.log" +"wtptst","install_system.log" +"wtptst","install_wtptst.log" +"wtptst","WTP/WT_SELF_TEST.log" diff --git a/wtptst/odbcapture_installation_logs.ctl b/wtptst/odbcapture_installation_logs.ctl new file mode 100644 index 0000000..3a1cf46 --- /dev/null +++ b/wtptst/odbcapture_installation_logs.ctl @@ -0,0 +1,8 @@ +LOAD DATA +APPEND INTO TABLE "ODBCAPTURE_INSTALLATION_LOGS" +FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' + (LOAD_DTM SYSDATE + ,INSTALL_TYPE char(10) + ,FILE_NAME char(512) + ,CONTENTS LOBFILE(FILE_NAME) TERMINATED BY EOF + ) diff --git a/wtptst/report_status.sql b/wtptst/report_status.sql new file mode 100644 index 0000000..b606658 --- /dev/null +++ b/wtptst/report_status.sql @@ -0,0 +1,114 @@ + +-- +-- Report Status Script +-- +-- Must be run as SYSTEM User (DBA) +-- +-- Command Line Parameters: +-- 1 - SYSTEM/password@TNSALIAS +-- i.e. pass the username and password for the SYSTEM user +-- and the TNSALIAS for the connection to the database. +-- The Data Load installation requires this connection information. +-- +-- Note: odbcapture_installation_logs table will be created +-- to load installation logs (if not already available). +-- + +---------------------------------------- +-- Setup for Reports +set linesize 2499 +set trimspool on +set echo off +set verify off +set termout on +set serveroutput on size unlimited format wrapped + +---------------------------------------- +prompt +prompt Reporting Summary of Install Type Log Errors +declare + TYPE err_aa_type is table of pls_integer index by varchar2(4000); + err_aa err_aa_type; + line_txt varchar2(4000); + so_far pls_integer; + end_pos pls_integer; + procedure add_line is + begin + if regexp_like(line_txt, '(ORA-|SQL-|SP2-|PLS-|PL2-|TNS-|(object|mmap) failed)') + then + begin + err_aa(line_txt) := err_aa(line_txt) + 1; + exception when NO_DATA_FOUND then + err_aa(line_txt) := 1; + end; + end if; + end add_line; +begin + for buff in (select file_name, load_dtm, contents + from odbcapture_installation_logs + where install_type = 'wtptst' + and load_dtm > trunc(sysdate,'DD') - 2 + order by file_name, load_dtm) + loop + dbms_output.put_line('Processing file ' || buff.file_name || + ' (' || to_char(buff.load_dtm,'YYYY-MM-DD HH24:MI:SS') || ')'); + err_aa.DELETE; + so_far := 0; + loop + end_pos := instr(buff.contents, chr(10), so_far + 1); + exit when end_pos = 0; + line_txt := substr(buff.contents, so_far + 1, end_pos - so_far - 1); + add_line; + so_far := end_pos; + end loop; + line_txt := substr(buff.contents, so_far + 1, 4000); + add_line; + if err_aa.COUNT = 0 then continue; end if; + line_txt := err_aa.FIRST; + loop + dbms_output.put_line(line_txt); + dbms_output.put_line(' ' || err_aa(line_txt) || ' lines: ' || line_txt); + exit when line_txt = err_aa.LAST; + line_txt := err_aa.NEXT(line_txt); + end loop; + end loop; +end; +/ + +---------------------------------------- +prompt +prompt Reporting Invalid Objects +set feedback off +set termout off +spool list_invalids.csv +@"list_invalids.sql" "" +spool off +set termout on +set feedback on + +---------------------------------------- +prompt +prompt Reporting JUnit XML Database Build Status +set feedback off +set termout off +spool db_build_junit_report.xml +@"db_build_junit_report.sql" "" +spool off +set termout on +set feedback on + +---------------------------------------- +prompt +prompt Reorting JUnit XML Installation Log +set feedback off +set termout off +spool log_files_junit_report.xml +@"log_files_junit_report.sql" "" +spool off +set termout on +set feedback on + +---------------------------------------- +-- Done with Reports +set linesize 80 +set verify on diff --git a/wtptst/update_id_sequences.sql b/wtptst/update_id_sequences.sql new file mode 100644 index 0000000..a7861bc --- /dev/null +++ b/wtptst/update_id_sequences.sql @@ -0,0 +1,59 @@ + +-- +-- Update "wtptst" IDENTITY SEQUENCES +-- + +declare + UNDEFINED_SEQUENCE EXCEPTION; -- sequence not yet defined in this session + PRAGMA EXCEPTION_INIT (UNDEFINED_SEQUENCE, -8002); + l_last_seq number; + l_max_val number; + sql_txt varchar2(4000); + procedure do_it (in_schema_name in varchar2) is + begin + for buff in ( + select tic.owner + ,tic.table_name + ,tic.column_name + ,tic.sequence_name + from dba_tab_identity_cols tic + where tic.owner = in_schema_name) + loop + -- Find the Current Sequence Value + sql_txt := 'select ' || buff.owner || '.' || buff.sequence_name || + '.currval from dual'; + begin + execute immediate sql_txt into l_last_seq; + exception when UNDEFINED_SEQUENCE + then + -- Find the Last Number for the Sequence + select ds.last_number into l_last_seq + from dba_sequences ds + where ds.sequence_owner = buff.owner + and ds.sequence_name = buff.sequence_name; + end; + -- Find the maximum IDENTITY column value + sql_txt := 'select max(' || buff.column_name || ')' || + ' from ' || buff.owner || '.' || buff.table_name; + execute immediate sql_txt into l_max_val; + -- Display values found + dbms_output.put_line(buff.owner || '.' || buff.sequence_name || ' Last Sequence: ' || l_last_seq || + ', ' || buff.owner || '.' || buff.table_name || ' max(' || buff.column_name || ') = ' || l_max_val); + if l_last_seq < l_max_val + then + -- Increment the sequence as necessary + sql_txt := 'begin' || + ' while ' || buff.owner || '.' || buff.sequence_name || '.nextval < ' || l_max_val || + ' loop null; end loop;' || + 'end;'; + dbms_output.put_line(sql_txt); + execute immediate sql_txt;-- using l_last_seq; + end if; + end loop; + dbms_output.put_line('-- ' || in_schema_name || ' Identity Sequence Updates is done.'); + end do_it; +begin + dbms_output.put_line('Update ID Sequences for wtptst Install Type'); + do_it('WTP'); +end; +/