diff --git a/VERSION b/VERSION index ed530b3a7..d80dc339d 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v3.1.5 +v3.1.6 diff --git a/development/releasing.md b/development/releasing.md index 7c8d779ef..3d2eed97d 100644 --- a/development/releasing.md +++ b/development/releasing.md @@ -10,7 +10,10 @@ To create a release: - merge the release branch to master and wait for master build to complete successfully - create a release from the master branch using [github releases page](https://github.com/utPLSQL/utPLSQL/releases) and populate release description using information found on the issues and pull requests since previous release. To find issues closed after certain date use [advanced filters](https://help.github.com/articles/searching-issues-and-pull-requests/#search-by-open-or-closed-state). - Example: [`is:issue closed:>2018-07-22`](https://github.com/utPLSQL/utPLSQL/issues?utf8=%E2%9C%93&q=is%3Aissue+closed%3A%3E2018-07-22+) + Example: [`is:issue closed:>2018-07-22`](https://github.com/utPLSQL/utPLSQL/issues?utf8=%E2%9C%93&q=is%3Aissue+closed%3A%3E2018-07-22+) + - After release was successfully built, merge master branch back into develop branch + - After develop branch was built, update version number in `VERSION` file to represent next planned release version. + - Clone `utplsql.githug.io` project and add a new announcement about next version being released in `_posts`. Use previous announcements as a template. Make sure to set date, time and post title properly. The following will happen: - build executed on branch `release/vX.Y.Z-[something]` updates files `sonar-project.properties`, `VERSION` with project version derived from the release branch name diff --git a/docs/about/authors.md b/docs/about/authors.md index 74f294701..b3abfac6c 100644 --- a/docs/about/authors.md +++ b/docs/about/authors.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.6.2729-blue.svg) ### utPLSQL v3 Major Contributors diff --git a/docs/about/license.md b/docs/about/license.md index 193e46c03..b55ca2d4d 100644 --- a/docs/about/license.md +++ b/docs/about/license.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.6.2729-blue.svg) # Version Information diff --git a/docs/about/project-details.md b/docs/about/project-details.md index 4126baeb5..51c135cfc 100644 --- a/docs/about/project-details.md +++ b/docs/about/project-details.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.6.2729-blue.svg) # utPLSQL Project Details diff --git a/docs/about/support.md b/docs/about/support.md index e774552c8..4a7720d37 100644 --- a/docs/about/support.md +++ b/docs/about/support.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.6.2729-blue.svg) # How to get support diff --git a/docs/index.md b/docs/index.md index 00c62767d..772c7d463 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.6.2729-blue.svg) # Introduction to utPLSQL diff --git a/docs/userguide/advanced_data_comparison.md b/docs/userguide/advanced_data_comparison.md index 7bf15f123..63f0461f6 100644 --- a/docs/userguide/advanced_data_comparison.md +++ b/docs/userguide/advanced_data_comparison.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.6.2729-blue.svg) # Advanced data comparison diff --git a/docs/userguide/annotations.md b/docs/userguide/annotations.md index 3bc2b7456..4e888ee95 100644 --- a/docs/userguide/annotations.md +++ b/docs/userguide/annotations.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.6.2729-blue.svg) # Annotations diff --git a/docs/userguide/best-practices.md b/docs/userguide/best-practices.md index c2ed2cd8d..b47b90c91 100644 --- a/docs/userguide/best-practices.md +++ b/docs/userguide/best-practices.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.6.2729-blue.svg) # Best Practices diff --git a/docs/userguide/coverage.md b/docs/userguide/coverage.md index a4de33f7e..4f2a30688 100644 --- a/docs/userguide/coverage.md +++ b/docs/userguide/coverage.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.6.2729-blue.svg) # Coverage utPLSQL comes with a built-in coverage reporting engine. The code coverage reporting is based on the DBMS_PROFILER package provided with Oracle database. diff --git a/docs/userguide/exception-reporting.md b/docs/userguide/exception-reporting.md index 522a858db..2a220efad 100644 --- a/docs/userguide/exception-reporting.md +++ b/docs/userguide/exception-reporting.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.6.2729-blue.svg) # Exception handling and reporting diff --git a/docs/userguide/expectations.md b/docs/userguide/expectations.md index e64bbe2f8..25de3c652 100644 --- a/docs/userguide/expectations.md +++ b/docs/userguide/expectations.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.6.2729-blue.svg) # Expectation concepts Validation of the code under test (the tested logic of procedure/function etc.) is performed by comparing the actual data against the expected data. diff --git a/docs/userguide/getting-started.md b/docs/userguide/getting-started.md index 15a0ee039..6f59dc759 100644 --- a/docs/userguide/getting-started.md +++ b/docs/userguide/getting-started.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.6.2729-blue.svg) # Getting started with TDD and utPLSQL diff --git a/docs/userguide/install.md b/docs/userguide/install.md index 547a51a1e..0a47fcfd1 100644 --- a/docs/userguide/install.md +++ b/docs/userguide/install.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.6.2729-blue.svg) # Downloading latest version of utPLSQL diff --git a/docs/userguide/querying_suites.md b/docs/userguide/querying_suites.md index 9441386df..50aa661f5 100644 --- a/docs/userguide/querying_suites.md +++ b/docs/userguide/querying_suites.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.6.2729-blue.svg) # Qyerying for test suites diff --git a/docs/userguide/reporters.md b/docs/userguide/reporters.md index 4d340dd78..104795ded 100644 --- a/docs/userguide/reporters.md +++ b/docs/userguide/reporters.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.6.2729-blue.svg) utPLSQL provides the following reporting formats. diff --git a/docs/userguide/running-unit-tests.md b/docs/userguide/running-unit-tests.md index 8985cad7a..3703fa4d8 100644 --- a/docs/userguide/running-unit-tests.md +++ b/docs/userguide/running-unit-tests.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.6.2729-blue.svg) # Running tests diff --git a/docs/userguide/upgrade.md b/docs/userguide/upgrade.md index 7c0740c32..b803a671a 100644 --- a/docs/userguide/upgrade.md +++ b/docs/userguide/upgrade.md @@ -1,4 +1,4 @@ -![version](https://img.shields.io/badge/version-v3.1.5.2707-blue.svg) +![version](https://img.shields.io/badge/version-v3.1.6.2729-blue.svg) # Upgrading from version 2 diff --git a/sonar-project.properties b/sonar-project.properties index 84e767093..c137871ee 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -2,7 +2,7 @@ sonar.projectKey=utPLSQL # this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1. sonar.projectName=utPLSQL -sonar.projectVersion=v3.1.5 +sonar.projectVersion=v3.1.6 # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. # Since SonarQube 4.2, this property is optional if sonar.modules is set. diff --git a/source/core/ut_utils.pks b/source/core/ut_utils.pks index 8d2ceef9b..a9ecf9ac6 100644 --- a/source/core/ut_utils.pks +++ b/source/core/ut_utils.pks @@ -21,7 +21,7 @@ create or replace package ut_utils authid definer is * */ - gc_version constant varchar2(50) := 'v3.1.5.2707'; + gc_version constant varchar2(50) := 'v3.1.6.2729'; subtype t_executable_type is varchar2(30); gc_before_all constant t_executable_type := 'beforeall'; diff --git a/source/create_synonyms_and_grants_for_public.sql b/source/create_synonyms_and_grants_for_public.sql index 2535c25fc..dcc940737 100644 --- a/source/create_synonyms_and_grants_for_public.sql +++ b/source/create_synonyms_and_grants_for_public.sql @@ -107,8 +107,6 @@ grant select, insert, delete, update on &&ut3_owner..dbmspcc_units to public; grant execute on &&ut3_owner..ut_matcher_options to public; grant execute on &&ut3_owner..ut_matcher_options_items to public; grant execute on &&ut3_owner..ut_run_info to public; -grant execute on &&ut3_owner..ut_cursor_column_tab to public; -grant execute on &&ut3_owner..ut_cursor_details to public; prompt Creating synonyms for UTPLSQL objects in &&ut3_owner schema to PUBLIC @@ -169,5 +167,3 @@ create public synonym dbmspcc_blocks for &&ut3_owner..dbmspcc_blocks; create public synonym dbmspcc_runs for &&ut3_owner..dbmspcc_runs; create public synonym dbmspcc_units for &&ut3_owner..dbmspcc_units; create public synonym ut_run_info for &&ut3_owner..ut_run_info; -create public synonym ut_cursor_column_tab for &&ut3_owner..ut_cursor_column_tab; -create public synonym ut_cursor_details for &&ut3_owner..ut_cursor_details; diff --git a/source/create_user_grants.sql b/source/create_user_grants.sql index c0dbebcaf..feab90933 100644 --- a/source/create_user_grants.sql +++ b/source/create_user_grants.sql @@ -126,5 +126,3 @@ grant select, insert, delete, update on &&ut3_owner..dbmspcc_units to &ut3_user; grant execute on &&ut3_owner..ut_matcher_options to &ut3_user; grant execute on &&ut3_owner..ut_matcher_options_items to &ut3_user; grant execute on &&ut3_owner..ut_run_info to &ut3_user; -grant execute on &&ut3_owner..ut_cursor_column_tab to &ut3_user; -grant execute on &&ut3_owner..ut_cursor_details to &ut3_user; diff --git a/source/create_user_synonyms.sql b/source/create_user_synonyms.sql index 89d1736f8..b08cb7b0e 100644 --- a/source/create_user_synonyms.sql +++ b/source/create_user_synonyms.sql @@ -109,5 +109,3 @@ create or replace synonym &ut3_user..dbmspcc_blocks for &&ut3_owner..dbmspcc_blo create or replace synonym &ut3_user..dbmspcc_runs for &&ut3_owner..dbmspcc_runs; create or replace synonym &ut3_user..dbmspcc_units for &&ut3_owner..dbmspcc_units; create or replace synonym &ut3_user..ut_run_info for &&ut3_owner..ut_run_info; -create or replace synonym &ut3_user..ut_cursor_column_tab for &&ut3_owner..ut_cursor_column_tab; -create or replace synonym &ut3_user..ut_cursor_details for &&ut3_owner..ut_cursor_details; \ No newline at end of file diff --git a/source/expectations/data_values/ut_compound_data_helper.pkb b/source/expectations/data_values/ut_compound_data_helper.pkb index dab3d4af1..abb07ee80 100644 --- a/source/expectations/data_values/ut_compound_data_helper.pkb +++ b/source/expectations/data_values/ut_compound_data_helper.pkb @@ -79,13 +79,16 @@ create or replace package body ut_compound_data_helper is execute immediate q'[with expected_cols as ( select access_path exp_column_name,column_position exp_col_pos, - replace(column_type,'VARCHAR2','CHAR') exp_col_type_compare, column_type exp_col_type + replace(column_type_name,'VARCHAR2','CHAR') exp_col_type_compare, column_type_name exp_col_type from table(:a_expected) + where parent_name is null and hierarchy_level = 1 and column_name is not null ), actual_cols as ( select access_path act_column_name,column_position act_col_pos, - replace(column_type,'VARCHAR2','CHAR') act_col_type_compare, column_type act_col_type - from table(:a_actual)), + replace(column_type_name,'VARCHAR2','CHAR') act_col_type_compare, column_type_name act_col_type + from table(:a_actual) + where parent_name is null and hierarchy_level = 1 and column_name is not null + ), joined_cols as ( select e.*,a.*]' || case when a_order_enforced then ', @@ -586,6 +589,13 @@ create or replace package body ut_compound_data_helper is end; end; + function get_compare_cursor(a_diff_cursor_text in clob,a_self_id raw, a_other_id raw) return sys_refcursor is + l_diff_cursor sys_refcursor; + begin + open l_diff_cursor for a_diff_cursor_text using a_self_id, a_other_id; + return l_diff_cursor; + end; + begin g_anytype_name_map(dbms_types.typecode_date) := 'DATE'; g_anytype_name_map(dbms_types.typecode_number) := 'NUMBER'; diff --git a/source/expectations/data_values/ut_compound_data_helper.pks b/source/expectations/data_values/ut_compound_data_helper.pks index 679c13692..bf3182500 100644 --- a/source/expectations/data_values/ut_compound_data_helper.pks +++ b/source/expectations/data_values/ut_compound_data_helper.pks @@ -89,6 +89,8 @@ create or replace package ut_compound_data_helper authid definer is function is_sql_compare_allowed(a_type_name varchar2) return boolean; function get_column_type_desc(a_type_code in integer, a_dbms_sql_desc in boolean) return varchar2; - + + function get_compare_cursor(a_diff_cursor_text in clob,a_self_id raw, a_other_id raw) return sys_refcursor; + end; / diff --git a/source/expectations/data_values/ut_cursor_column.tpb b/source/expectations/data_values/ut_cursor_column.tpb index ab83ff339..5f6f18c56 100644 --- a/source/expectations/data_values/ut_cursor_column.tpb +++ b/source/expectations/data_values/ut_cursor_column.tpb @@ -12,7 +12,7 @@ create or replace type body ut_cursor_column as self.column_position := a_col_position; --Position of the column in cursor/ type self.column_len := a_col_max_len; --length of column self.column_name := TRIM( BOTH '''' FROM a_col_name); --name of the column - self.column_type_name := a_col_type_name; --type name e.g. test_dummy_object or varchar2 + self.column_type_name := coalesce(a_col_type_name,a_col_type); --type name e.g. test_dummy_object or varchar2 self.access_path := case when a_access_path is null then self.column_name else diff --git a/source/expectations/data_values/ut_cursor_details.tpb b/source/expectations/data_values/ut_cursor_details.tpb index f6162aac2..c1d229e6a 100644 --- a/source/expectations/data_values/ut_cursor_details.tpb +++ b/source/expectations/data_values/ut_cursor_details.tpb @@ -195,12 +195,10 @@ create or replace type body ut_cursor_details as member function get_xml_children(a_parent_name varchar2 := null) return xmltype is l_result xmltype; begin - select xmlagg(xmlelement(evalname t.column_name,t.column_type, - self.get_xml_children(t.column_name))) + select xmlagg(xmlelement(evalname t.column_name,t.column_type_name)) into l_result from table(self.cursor_columns_info) t - where (a_parent_name is not null and parent_name = a_parent_name and hierarchy_level > 1 and column_name is not null) - or (a_parent_name is null and parent_name is null and hierarchy_level = 1 and column_name is not null) + where (a_parent_name is null and parent_name is null and hierarchy_level = 1 and column_name is not null) having count(*) > 0; return l_result; diff --git a/source/expectations/data_values/ut_data_value_refcursor.tpb b/source/expectations/data_values/ut_data_value_refcursor.tpb index 584ca6426..83bd1502f 100644 --- a/source/expectations/data_values/ut_data_value_refcursor.tpb +++ b/source/expectations/data_values/ut_data_value_refcursor.tpb @@ -306,7 +306,8 @@ create or replace type body ut_data_value_refcursor as l_diff_id := ut_compound_data_helper.get_hash(a_self.data_id||a_other.data_id); begin - open l_cursor for a_diff_cursor_text using a_self.data_id, a_other.data_id; + l_cursor := ut_compound_data_helper.get_compare_cursor(a_diff_cursor_text, + a_self.data_id, a_other.data_id); --fetch and save rows for display of diff fetch l_cursor bulk collect into l_diff_tab limit ut_utils.gc_diff_max_rows; diff --git a/test/core/expectations/test_expectations_cursor.pkb b/test/core/expectations/test_expectations_cursor.pkb index f0d9ae36e..1b155353d 100644 --- a/test/core/expectations/test_expectations_cursor.pkb +++ b/test/core/expectations/test_expectations_cursor.pkb @@ -2465,5 +2465,65 @@ Diff:% ut.expect(l_actual_message).to_be_like(l_expected_message); end; + procedure udt_messg_format_eq is + l_actual sys_refcursor; + l_expected sys_refcursor; + l_expected_tab ut3.ut_key_value_pairs := ut3.ut_key_value_pairs(); + l_expected_message varchar2(32767); + l_actual_message varchar2(32767); + begin + select ut3.ut_key_value_pair(rownum,'Something '||rownum) + bulk collect into l_expected_tab + from dual connect by level <=2; + + --Arrange + open l_actual for select object_name, owner from all_objects where rownum < 3; + open l_expected for select value(x) as udt from table(l_expected_tab) x; + + --Act + ut3.ut.expect(l_actual).to_contain(l_expected); + --Assert + l_expected_message := q'[%Actual: refcursor [ count = 2 ] was expected to contain: refcursor [ count = 2 ] +%Diff: +%Columns: +%Column [data-type: UT_KEY_VALUE_PAIR] is missing. Expected column position: 1. +%Column [position: 1, data-type: VARCHAR2] is not expected in results. +%Column [position: 2, data-type: VARCHAR2] is not expected in results. +%Rows: [ 2 differences ] +%Missing: 1Something 1 +%Missing: 2Something 2%]'; + l_actual_message := ut3.ut_expectation_processor.get_failed_expectations()(1).message; + --Assert + ut.expect(l_actual_message).to_be_like(l_expected_message); + end; + + procedure udt_messg_format_empt is + l_actual sys_refcursor; + l_actual_tab ut3.ut_key_value_pairs := ut3.ut_key_value_pairs(); + l_actual_message varchar2(32767); + l_expected_message varchar2(32767); + begin + select ut3.ut_key_value_pair(rownum,'Something '||rownum) + bulk collect into l_actual_tab + from dual connect by level <=2; + + --Arrange + open l_actual for select value(x) as udt from table(l_actual_tab) x; + + --Act + ut3.ut.expect(l_actual).to_be_empty(); + --Assert + l_expected_message := q'[%Actual: (refcursor [ count = 2 ]) +%Data-types: +%UT_KEY_VALUE_PAIR +%Data: +%1Something 12Something 2 +%was expected to be empty%]'; + + l_actual_message := ut3.ut_expectation_processor.get_failed_expectations()(1).message; + --Assert + ut.expect(l_actual_message).to_be_like(l_expected_message); + end; + end; / diff --git a/test/core/expectations/test_expectations_cursor.pks b/test/core/expectations/test_expectations_cursor.pks index c0195393e..e8f492674 100644 --- a/test/core/expectations/test_expectations_cursor.pks +++ b/test/core/expectations/test_expectations_cursor.pks @@ -390,6 +390,11 @@ create or replace package test_expectations_cursor is --%test(Cursor to contain duplicates fail) procedure to_contain_duplicates_fail; - + + --%test(Display a message with a uer defined type with only type name not structure on equal) + procedure udt_messg_format_eq; + + --%test(Display a message with a uer defined type with only type name not structure on empty) + procedure udt_messg_format_empt; end; / diff --git a/test/core/min_grant_user/test_min_grant_user.pkb b/test/core/min_grant_user/test_min_grant_user.pkb index f35bb4f74..233cca67f 100644 --- a/test/core/min_grant_user/test_min_grant_user.pkb +++ b/test/core/min_grant_user/test_min_grant_user.pkb @@ -55,6 +55,17 @@ create or replace package body test_min_grant_user is '%1 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)%' ); end; + + procedure test_equal_non_diff_sql is + l_results clob; + begin + execute immediate 'begin ut3$user#.test_cursor_grants.run_test_equal_non_diff_sql(); end;'; + l_results := core.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%execute test with non diff datatype [% sec]' || + '%1 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)%' ); + + end; end; / diff --git a/test/core/min_grant_user/test_min_grant_user.pks b/test/core/min_grant_user/test_min_grant_user.pks index 82a2b014b..daf34b35d 100644 --- a/test/core/min_grant_user/test_min_grant_user.pks +++ b/test/core/min_grant_user/test_min_grant_user.pks @@ -18,5 +18,8 @@ create or replace package test_min_grant_user is --%test(execute empty test) procedure test_empty_cursor; + --%test(execute test with non diff datatype) + procedure test_equal_non_diff_sql; + end; / diff --git a/test/helpers/ut3user#.test_cursor_grants.pkb b/test/helpers/ut3user#.test_cursor_grants.pkb index 2ed1ff919..112d9559e 100644 --- a/test/helpers/ut3user#.test_cursor_grants.pkb +++ b/test/helpers/ut3user#.test_cursor_grants.pkb @@ -24,6 +24,11 @@ create or replace package body ut3$user#.test_cursor_grants is begin ut3.ut.run('test_cursor_grants.test_empty_cursor'); end; + + procedure run_test_equal_non_diff_sql is + begin + ut3.ut.run('test_cursor_grants.test_equal_non_diff_sql'); + end; procedure test_join_by_cursor is l_actual SYS_REFCURSOR; @@ -92,5 +97,18 @@ create or replace package body ut3$user#.test_cursor_grants is ut3.ut.expect(l_expected).to_be_empty(); end; + procedure test_equal_non_diff_sql is + l_actual SYS_REFCURSOR; + l_expected SYS_REFCURSOR; + begin + open l_actual for + select to_clob('test1') as item from dual; + + open l_expected for + select to_clob('test1') as item from dual; + + ut3.ut.expect(l_actual).to_equal(l_expected); + end; + end; / diff --git a/test/helpers/ut3user#.test_cursor_grants.pks b/test/helpers/ut3user#.test_cursor_grants.pks index 2ebb3d04a..cf829c09f 100644 --- a/test/helpers/ut3user#.test_cursor_grants.pks +++ b/test/helpers/ut3user#.test_cursor_grants.pks @@ -6,7 +6,8 @@ create or replace package ut3$user#.test_cursor_grants is procedure run_test_not_empty_cursor; procedure run_test_have_count_cursor; procedure run_test_empty_cursor; - + procedure run_test_equal_non_diff_sql; + --%test(execute join by test) procedure test_join_by_cursor; @@ -22,5 +23,8 @@ create or replace package ut3$user#.test_cursor_grants is --%test(execute empty test) procedure test_empty_cursor; + --%test(execute test with non diff datatype) + procedure test_equal_non_diff_sql; + end; /