Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions TablePro/Core/Autocomplete/DerivedTableParser.swift
Original file line number Diff line number Diff line change
Expand Up @@ -263,8 +263,8 @@ internal struct DerivedTableParser {
let c = ns.character(at: index)
if c == Self.backtick || c == Self.doubleQuote {
let end = matchingQuote(in: ns, from: index, limit: limit, quote: c)
guard end > index + 1 else { return nil }
return ns.substring(with: NSRange(location: index + 1, length: end - index - 1))
guard end > index + 2 else { return nil }
return ns.substring(with: NSRange(location: index + 1, length: end - index - 2))
}
if c == Self.openBracket {
var j = index + 1
Expand Down
9 changes: 4 additions & 5 deletions TablePro/Core/Autocomplete/SQLContextAnalyzer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -790,8 +790,9 @@ final class SQLContextAnalyzer {
}

/// Attach derived-table columns to references and add any derived table or
/// CTE not already in scope. A derived alias wins over a plain reference of
/// the same identifier (e.g. a CTE used directly in a FROM clause).
/// CTE not already in scope. Columns attach to a matching reference (e.g. a
/// CTE aliased in a FROM clause), and the derived table or CTE is still
/// registered under its own name so it resolves by either identifier.
private func mergeDerivedTables(
_ derivedTables: [DerivedTable],
cteNames: [String],
Expand All @@ -802,20 +803,18 @@ final class SQLContextAnalyzer {
uniquingKeysWith: { first, _ in first }
)

var consumed = Set<String>()
for index in references.indices {
let ref = references[index]
for key in [ref.tableName.lowercased(), ref.identifier.lowercased()] {
guard let columns = derivedColumnsByAlias[key] else { continue }
consumed.insert(key)
references[index] = TableReference(
tableName: ref.tableName, alias: ref.alias, schema: ref.schema, derivedColumns: columns
)
break
}
}

var present = Set(references.map { $0.identifier.lowercased() }).union(consumed)
var present = Set(references.map { $0.identifier.lowercased() })
for derived in derivedTables where present.insert(derived.alias.lowercased()).inserted {
references.append(
TableReference(tableName: derived.alias, alias: derived.alias, derivedColumns: derived.columns)
Expand Down
8 changes: 4 additions & 4 deletions TableProTests/Plugins/EtcdQueryBuilderTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ struct EtcdQueryBuilderBrowseTests {
#expect(parsed?.limit == 100)
#expect(parsed?.offset == 0)
#expect(parsed?.sortAscending == true)
#expect(parsed?.filterType == .none)
#expect(parsed?.filterType == EtcdFilterType.none)
#expect(parsed?.filterValue == "")
}

Expand Down Expand Up @@ -191,7 +191,7 @@ struct EtcdQueryBuilderFilteredTests {
)
#expect(query != nil)
let parsed = EtcdQueryBuilder.parseRangeQuery(query!)
#expect(parsed?.filterType == .none)
#expect(parsed?.filterType == EtcdFilterType.none)
}
}

Expand Down Expand Up @@ -262,7 +262,7 @@ struct EtcdQueryBuilderCountTests {
let parsed = EtcdQueryBuilder.parseCountQuery(query)
#expect(parsed != nil)
#expect(parsed?.prefix == "/myprefix/")
#expect(parsed?.filterType == .none)
#expect(parsed?.filterType == EtcdFilterType.none)
#expect(parsed?.filterValue == "")
}

Expand Down Expand Up @@ -322,7 +322,7 @@ struct EtcdQueryBuilderTagTests {
#expect(parsed?.limit == 42)
#expect(parsed?.offset == 7)
#expect(parsed?.sortAscending == false)
#expect(parsed?.filterType == .none)
#expect(parsed?.filterType == EtcdFilterType.none)
#expect(parsed?.filterValue == "")
}

Expand Down
Loading