VBA-SQL-Library icon indicating copy to clipboard operation
VBA-SQL-Library copied to clipboard

SQLSelect — UNION storage/rendering broken

Open Ben-Gonzalez-97 opened this issue 3 months ago • 0 comments

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.

Ben-Gonzalez-97 avatar Oct 16 '25 13:10 Ben-Gonzalez-97