Skip to content

SQLSelect — UNION storage/rendering broken #63

Description

@Ben-Gonzalez-97

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.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions