Beakerboy / Beakerboy/VBA-SQL-Library
SQLSelect — UNION storage/rendering broken
- Dominant language
- VBA
- Stars
- 90
- Forks
- 18
- PR merge metrics
- No merged PRs in 30d
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)
```vb
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)
```vb
' 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`.
---
Contributor guide
No contributing guide indexed for this repository
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.
Assessment
- Tech stack
- sql
- Domain
- database
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 55/100