Skip to content

com_tools: stop the listAll API inventing a tool out of orphan resources - #1956

Open
denphi wants to merge 1 commit into
hubzero:2.4-mainfrom
denphi:fix/tools-listall-group-by-alias
Open

denphi wants to merge 1 commit into
hubzero:2.4-mainfrom
denphi:fix/tools-listall-group-by-alias

Conversation

@denphi

@denphi denphi commented Oct 26, 2026

Copy link
Copy Markdown
Contributor

getAllTools() left outer joins #__resources to #__tool_version and then groups by v.toolname -- the nullable side of the join. Every type 7 standalone resource with no matching tool version lands in a single v.toolname IS NULL group, r.alias is neither grouped nor functionally dependent on it, and the server returns one arbitrarily chosen alias to stand in for all of them. A second degenerate group forms around v.toolname = '' for resources whose alias is empty.

On nanoHUB that surfaced as two entries in /api/tools/listAll that are not tools at all: "mdl" (the alias the server happened to pick out of eight orphaned resources) and "". Sixteen resources in total were being collapsed into those two rows.

Group by the alias that is actually selected, make the join inner so the orphan group cannot form, and skip empty aliases. No published tool is lost -- every affected resource is in published state 0, 2 or 4, and the entries are old tool-information stubs and explicit test records.

It stays silent because ONLY_FULL_GROUP_BY is off on that server; with it on the query would be rejected outright.

Before you submit this pull request, please make sure:

  • [] Make sure there are links in the PR to the source JIRA card(s) and hubzero ticket(s)
  • [] Include a brief summary of the issue in your own words
  • [] Include a brief summary of the fix/changed code
  • [] Include a brief summary of your testing. What did you specifically do to investigate that this change has the correct results?
  • [] Indicate if the change needs to be hotfixed to any production hubs before a normal core rollout
  • [] Double check someone is assigned to review the ticket

Thanks!

getAllTools() left outer joins #__resources to #__tool_version and then
groups by v.toolname -- the nullable side of the join. Every type 7
standalone resource with no matching tool version lands in a single
v.toolname IS NULL group, r.alias is neither grouped nor functionally
dependent on it, and the server returns one arbitrarily chosen alias to
stand in for all of them. A second degenerate group forms around
v.toolname = '' for resources whose alias is empty.

On nanoHUB that surfaced as two entries in /api/tools/listAll that are
not tools at all: "mdl" (the alias the server happened to pick out of
eight orphaned resources) and "". Sixteen resources in total were being
collapsed into those two rows.

Group by the alias that is actually selected, make the join inner so the
orphan group cannot form, and skip empty aliases. No published tool is
lost -- every affected resource is in published state 0, 2 or 4, and the
entries are old tool-information stubs and explicit test records.

It stays silent because ONLY_FULL_GROUP_BY is off on that server; with it
on the query would be rejected outright.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@denphi
denphi requested a review from nkissebe as a code owner October 26, 2026 19:30

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant