GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Introduction of Code Based Access Control (CBAC). by jgebal · Pull Request #1389 · utPLSQL/utPLSQL

Conversation

@jgebal

@jgebal jgebal commented Nov 8, 2026

Copy link
Copy Markdown
Member
  • Added new role &&ut3_owner._cbac_modify_objects_role to hold private utPLSQL objects privileges that are to be available for sources compiled with invoker-rights.

  • Changed ut_annotation_cache_manager to be invoker rights.

  • The ut_annotation_cache_manager is now using access rights to &&ut3_owner. objects via role `&&ut3_owner._cbac_modify_objects_role

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@jgebal
Introduction of Code Based Access Control (CBAC).
20f2894
- Added new role `&&ut3_owner._cbac_modify_objects_role` to hold private utPLSQL objects privileges that are to be available for sources compiled with invoker-rights.

- Changed `ut_annotation_cache_manager` to be invoker rights.
@github-actions

github-actions Bot commented Nov 8, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

Test Results

    1 files  ± 0    105 suites  +3   4m 18s ⏱️ + 1m 19s
1 181 tests +42  1 178 ✅ +42  3 💤 ±0  0 ❌ ±0 
1 185 runs  +42  1 179 ✅ +42  6 💤 ±0  0 ❌ ±0 

Results for commit c78c579. ± Comparison against base commit 9132d9e.

This pull request removes 38 and adds 80 tests. Note that renamed tests count towards both.
utplsql.test_user.api.test_ut_run.nested_context_#5 ‑ Execute all suites tests with tag
utplsql.test_user.api.test_ut_run.nested_context_#5 ‑ Execute suite and all of its children
utplsql.test_user.api.test_ut_run.nested_context_#5 ‑ Execute suite and parents
utplsql.test_user.api.test_ut_run.nested_context_#5 ‑ Execute suite by one tag
utplsql.test_user.api.test_ut_run.nested_context_#5 ‑ Execute suite test for duplicate list tags
utplsql.test_user.api.test_ut_run.nested_context_#5 ‑ Execute test by tag ut_run
utplsql.test_user.api.test_ut_run.nested_context_#5 ‑ Execute test for duplicate list tags
utplsql.test_user.api.test_ut_run.nested_context_#5 ‑ Execute test for non existing tag
utplsql.test_user.api.test_ut_run.nested_context_#5 ‑ Execute tests by passing two tags
utplsql.test_user.api.test_ut_run.nested_context_#5 ‑ Execute tests by passing two tags - Legacy notation
…
utplsql.test_user.api.test_ut_run.nested_context_#5 ‑ Runs the suites of each schema together, in order of schema names
utplsql.test_user.api.test_ut_run.nested_context_#6 ‑ Execute all suites tests with tag
utplsql.test_user.api.test_ut_run.nested_context_#6 ‑ Execute suite and all of its children
utplsql.test_user.api.test_ut_run.nested_context_#6 ‑ Execute suite and parents
utplsql.test_user.api.test_ut_run.nested_context_#6 ‑ Execute suite by one tag
utplsql.test_user.api.test_ut_run.nested_context_#6 ‑ Execute suite test for duplicate list tags
utplsql.test_user.api.test_ut_run.nested_context_#6 ‑ Execute test by tag ut_run
utplsql.test_user.api.test_ut_run.nested_context_#6 ‑ Execute test for duplicate list tags
utplsql.test_user.api.test_ut_run.nested_context_#6 ‑ Execute test for non existing tag
utplsql.test_user.api.test_ut_run.nested_context_#6 ‑ Execute tests by passing two tags
…

♻️ This comment has been updated with latest results.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@codecov

codecov Bot commented Nov 8, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.95%. Comparing base (9132d9e) to head (c78c579).
⚠️ Report is 3 commits behind head on develop.

Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #1389      +/-   ##
===========================================
+ Coverage    94.93%   94.95%   +0.01%     
===========================================
  Files          111      113       +2     
  Lines         5452     5412      -40     
  Branches        27       24       -3     
===========================================
- Hits          5176     5139      -37     
+ Misses         260      257       -3     
  Partials        16       16              
Flag Coverage Δ
19.20-ee 94.94% <100.00%> (?)
19se ?
21XE 95.09% <100.00%> (+0.04%) ⬆️
23-free 94.77% <100.00%> (+0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

jgebal added 27 commits November 8, 2026 22:51
@jgebal
Introduction of Code Based Access Control (CBAC).
8052c58
- Changed `ut_suite_cache_manager` to use Code Based Access Control and use invoker rights.
@jgebal
Refactoring ut_suite_cache_manager, ut_suite_manager, `ut_annotat…
c72d8d3
…ion_cache_manager` and `ut_annotation_manager` and reorganizing code
@jgebal
Introducing SQL_MACRO for managing complex queries.
3e731b9
Refactoring `ut_suite_cache_manager`, `ut_suite_manager`, `ut_annotation_cache_manager` and `ut_annotation_manager` and reorganizing code.
@jgebal
Attempting to fix compilation issues on 19c and 21c
1d2ae2c
@jgebal
Update build to use docker image 19.20
a917cf7
Update of documentation.
@jgebal
Fixing 21XE access for SQL MACROS
ab35529
@jgebal
Changed 19.20 image
134c7f0
@jgebal
Update of ut_annotation_cache_info structure and get_cached_objects f…
4d6be44
…or performance.
@jgebal
Update of get_cached_objects for performance.
05ab742
@jgebal
Remove a_parsed_after from the get_cached_objects SQL macro
22a2c23
The freshness check in get_objects_to_refresh is simplified to
(c.parse_time is null or o.last_ddl_time >= cast(c.parse_time as date)).
@jgebal
Pass suite cache rows to reconstruct_from_cache without a ref cursor
b0083f1
The rollback type is now set only in reconstruct_from_cache.
@jgebal
Check suite access before generating logical suites.
6f70675
Added tests for a user with partial access to test_annotation_cache.

The access check now runs in the query of ut_suite_cache_manager.get_suite_items.
Logical suites are generated from accessible rows only.
A suitepath with no accessible package below it now raises "No suite packages found for path".
@jgebal
Build the suite list in one static SQL statement
99c3acb
ut_suite_manager built the list of suites to run through five SQL
statements over PL/SQL collections: path matching, tag filter, logical
suites, access check and sort, copying all rows each time.
ut_suite_cache_manager.get_suite_rows now does it in one static SQL
statement with named CTEs. It replaces get_suite_items,
get_cached_suite_rows, sort_and_randomize_tests, get_cached_suite_info
and ut_suite_tag_filter.apply. Both the run and get_suites_info use it.

Tags are filtered with ut_suite_tag_filter.is_matching, called from SQL.
It takes the tags as a comma-separated text, because Oracle caches a
deterministic function only when all arguments are scalars; each
distinct set of tags is then evaluated once per statement.
@jgebal
Refactoring ut_suite_tag_filter.pkb
3076cae
@jgebal
Fixed test for is_matching
9176f77
@jgebal
Added a test for deduplication of overlapping run paths
ab61557
@jgebal
Resolve run paths with a single matching rule in a SQL macro
caba6de
The table SQL macro ut_suite_cache_macros.match_paths is now the only
definition of which suite items a path selects.

Access is checked before parents are added, so a wildcard selects only
packages the user can access.

Added tests for wildcards run by a user with partial access.
@jgebal
Add get_suites_info tests for contexts, disabled tests and procedure …
6f618ad
…paths
@jgebal
Build suite info from the run statement without executables
c5f0951
configure_execution_by_path and get_suites_info share the private
refresh_cache_for_paths instead of repeating the schema resolution and
cache refresh.
@jgebal
Build each suite item with one constructor call in get_logical_suite
2114ee8
get_logical_suite repeated the constructor of ut_suite,
ut_suite_context and ut_logical_suite twice, once with the items
collected one level below and once with an empty list. It now chooses
the items list first.
@jgebal
Use one rule for skipping the package access check
f871809
`can_skip_all_objects_scan` and `skip_access_check` are
replaced by `can_skip_access_check`
@jgebal
Drop all test packages created by test_tfs_junit_reporter
270c741
@jgebal
Document the suitepath limits.
84a3da2
@jgebal
Document and test wildcard paths combined with tags
6e7597b
@jgebal
Document and test that only * is a wildcard in run paths
c6a1601
@jgebal
Warn when a parent suite of a runnable package is not accessible
095508e
@jgebal
Check the tag expression before selecting suites
01f6b09
jgebal added 8 commits November 10, 2026 23:18
@jgebal
Group the suites of a run by schema
21ab1f7
A run can include paths in several schemas, and their suites are siblings
at the top level of the run. They were ordered by line number and path,
so suites of different schemas could interleave.
@jgebal
Raise invalid tag expression error for an unmatched right bracket
d4f53eb
@jgebal
Move reconcile_paths_and_suites to ut_suite_manager
1fe4357
@jgebal
Move contributor rules into CONTRIBUTING.md
b060c84
Add the engineering principles, the refactoring rules and the rules for
code based access control and SQL macros to CONTRIBUTING.md, together
with the local constant prefix, the license header and the version
string conventions. Remove the suite cache refactoring plan, which is
done.
@jgebal
Fixing build scripts.
deb7336
@jgebal
Evaluate tag expressions without dynamic SQL
343eecb
ut_suite_tag_filter.is_matching evaluates the postfix form of the tag
expression with a stack of booleans, instead of generating a PL/SQL block
and running it with execute immediate. The postfix form of the last
expression is cached. conv_postfix_to_infix_sql is removed.

- A tag expression made only of spaces and tabs is no tag filter, the same
  as null. Tabs are ignored like spaces.
- An empty expression, or one ending with an operator, raises the invalid
  tag expression error instead of ORA-06502.
- Tags with quotes and long expressions no longer break the generated block.
- Document that none and any are lowercase only.
- Add tests for precedence, keywords, case sensitivity, whitespace, quotes,
  many tags and three-valued logic; remove the v$sqlarea based cache test.
@jgebal
Adding note on comments in code into CONTRIBUTING.md
d087f48
@jgebal
Strip whitespace from tag expressions with one public function
c78c579
@sonarqubecloud

sonarqubecloud Bot commented Nov 11, 2026

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
D Reliability Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

No reviews

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

1 participant

@jgebal
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.