SQLSelect — UNION storage/rendering broken

Open
#63 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
55/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Stale
Tech stack
sql
Domain
database

Research direction

Start in src/ClassModules/SQLSelect.cls and inspect Union, UnionString, aUnion, and the final SQL rendering order. Reproduce the issue with two selects followed by OrderBy, then verify that unions are initialized, all unions are rendered, and UNION clauses appear before ORDER BY.

Written by the indexing model from the issue text.

Description

SQLSelect: fix UNION storage/rendering and clause order

  • Component: src/ClassModules/SQLSelect.cls
Problems
  • Stores the class identifier instead of the instance in Union.
  • Name mismatch between sUnion and aUnion; union array not initialized.
  • UnionString builds only one union; ORDER BY placed before UNION in final SQL.
Snippet (actual)
Public Sub Union(oSelect As SQLSelect, Optional sType = "")
    Dim UnionArray() As Variant
    UnionArray = Array(SQLSelect, sType) ' uses class name, not instance
    ' ...
End Sub

Private Function UnionString()
    Dim NewSelect As iSQLQuery
    aUnion = UnionArray(0)
    Set NewSelect = aUnion(0)
    UnionString = " UNION " & NewSelect.toString()
End Function
Expected (conceptual)
' Store (oSelect, sType)
aUnion = ArrayPush(aUnion, Array(oSelect, sType))

' Build all unions and place before ORDER BY
Function UnionString() As String
    Dim i As Long, s As String
    For i = 0 To UBound(aUnion)
        Dim it As Variant: it = aUnion(i)
        Dim q As iSQLQuery: Set q = it(0)
        Dim t As String: t = it(1)
        s = s & " UNION " & IIf(t <> "", t & " ", "") & q.toString()
    Next i
    UnionString = s
End Function
Steps to Reproduce
  1. Create two selects; call First.Union Second and then OrderBy.
Actual
  • UNION omitted/malformed; ORDER BY rendered without merging unions.
Proposed Fix
  • Store (oSelect, sType); iterate unions; emit before OrderByString; initialize aUnion.

Dominant language
VBA
Stars
90
Forks
18
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from Beakerboy/VBA-SQL-Library

All issues in Beakerboy/VBA-SQL-Library

Similar issues

More Databases issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.