Skip to content

avoid quadratic member lookups in table and alias visitors - #2763

Merged
manticore-projects merged 1 commit into
JSQLParser:masterfrom
dxbjavid:visitor-membership-quadratic
Oct 11, 2026
Merged

manticore-projects merged 1 commit into
JSQLParser:masterfrom
dxbjavid:visitor-membership-quadratic

Conversation

@dxbjavid

Copy link
Copy Markdown
Contributor

TablesNamesFinder remembers the names of derived tables, CTEs and lateral selects in otherItemNames and checks every plain table reference against it before recording it, but that collection was an ArrayList, so the membership test was linear and a statement with n aliased items and n table references took O(n^2) to walk through findTables. The same shape affects AddAliasesVisitor, where each generated alias is checked against the already used ones with a LinkedList.contains, so adding aliases to a select with n items was quadratic as well. Both collections are only ever used for membership, never for ordering, so backing them with a LinkedHashSet keeps the output identical while bringing both walks back to linear; I have added a timing regression test for each.

TablesNamesFinder tracked derived-table, CTE and lateral names in an ArrayList and matched every plain table reference against it, and AddAliasesVisitor checked each generated alias against a LinkedList, so both walked parsed SQL in O(n^2). Both collections are used only for membership, so back them with a LinkedHashSet.

Signed-off-by: Javid Khan <dxbjavid@gmail.com>
@manticore-projects
manticore-projects merged commit cdbaf1a into JSQLParser:master Oct 11, 2026
10 checks passed
@manticore-projects

Copy link
Copy Markdown
Contributor

Kudos for knowing/understanding the Java Collection classes and Lists :-D

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.

2 participants