Skip to content

Commit 82b3cdf

Browse files
committed
fix: FK audit — always quote values, use OSLog, log FK fetch errors, remove dead code
1 parent a2a125c commit 82b3cdf

3 files changed

Lines changed: 12 additions & 11 deletions

File tree

TableProMobile/TableProMobile/Views/Components/FKPreviewView.swift

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// TableProMobile
44
//
55

6+
import os
67
import SwiftUI
78
import TableProDatabase
89
import TableProModels
@@ -14,6 +15,8 @@ struct FKPreviewItem: Identifiable {
1415
}
1516

1617
struct FKPreviewView: View {
18+
private static let logger = Logger(subsystem: "com.TablePro", category: "FKPreviewView")
19+
1720
@Environment(\.dismiss) private var dismiss
1821
let fk: ForeignKeyInfo
1922
let value: String
@@ -71,18 +74,13 @@ struct FKPreviewView: View {
7174
do {
7275
let quoted = SQLBuilder.quoteIdentifier(fk.referencedTable, for: databaseType)
7376
let quotedCol = SQLBuilder.quoteIdentifier(fk.referencedColumn, for: databaseType)
74-
let sqlValue: String
75-
if Int64(value) != nil || Double(value) != nil {
76-
sqlValue = value
77-
} else {
78-
sqlValue = "'\(value.replacingOccurrences(of: "'", with: "''"))'"
79-
}
80-
let query = "SELECT * FROM \(quoted) WHERE \(quotedCol) = \(sqlValue) LIMIT 1"
77+
let escapedValue = value.replacingOccurrences(of: "'", with: "''")
78+
let query = "SELECT * FROM \(quoted) WHERE \(quotedCol) = '\(escapedValue)' LIMIT 1"
8179
let result = try await session.driver.execute(query: query)
8280
columns = result.columns
8381
row = result.rows.first
8482
} catch {
85-
print("FK preview error: \(error)")
83+
Self.logger.warning("FK preview failed: \(error.localizedDescription, privacy: .public)")
8684
row = nil
8785
}
8886
isLoading = false

TableProMobile/TableProMobile/Views/DataBrowserView.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,11 @@ struct DataBrowserView: View {
450450
columnDetails = try await session.driver.fetchColumns(table: table.name, schema: nil)
451451
}
452452
if foreignKeys.isEmpty {
453-
foreignKeys = (try? await session.driver.fetchForeignKeys(table: table.name, schema: nil)) ?? []
453+
do {
454+
foreignKeys = try await session.driver.fetchForeignKeys(table: table.name, schema: nil)
455+
} catch {
456+
Self.logger.warning("Failed to fetch foreign keys: \(error.localizedDescription, privacy: .public)")
457+
}
454458
}
455459
if pagination.totalRows == nil {
456460
await fetchTotalRows(session: session)

TableProMobile/TableProMobile/Views/RowDetailView.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,6 @@ struct RowDetailView: View {
198198
ToolbarItemGroup(placement: .bottomBar) {
199199
Button {
200200
withAnimation { currentIndex -= 1 }
201-
if isEditing { startEditing() }
202201
} label: {
203202
Image(systemName: "chevron.left")
204203
}
@@ -216,7 +215,6 @@ struct RowDetailView: View {
216215

217216
Button {
218217
withAnimation { currentIndex += 1 }
219-
if isEditing { startEditing() }
220218
} label: {
221219
Image(systemName: "chevron.right")
222220
}
@@ -350,6 +348,7 @@ struct RowDetailView: View {
350348

351349
guard !changes.isEmpty else {
352350
isEditing = false
351+
editedValues = []
353352
return
354353
}
355354

0 commit comments

Comments
 (0)