Changes
* Replaced the nested export form with a scrollable layout. * Made the table selection checkboxes directly visible. * Preserved the Select All and Select None buttons. * Kept the view selection controls. * Cleared stale table selections when switching databases. * Added automatic database loading when the application opens. * Preserved the existing SQL editor and administration functionality.
This commit is contained in:
@@ -68,6 +68,11 @@ struct MainView: View {
|
||||
) == "dark" ? .dark : .light
|
||||
)
|
||||
.background(Color(nsColor: .windowBackgroundColor))
|
||||
.task {
|
||||
if model.databases.isEmpty, model.selected != nil {
|
||||
model.loadDatabases()
|
||||
}
|
||||
}
|
||||
.sheet(isPresented: $showingDatabaseTransfer) {
|
||||
WorkbenchDatabaseTransferView(model: model)
|
||||
}
|
||||
@@ -1572,6 +1577,9 @@ struct WorkbenchDatabaseTransferView: View {
|
||||
@State private var exportStructure = true
|
||||
@State private var exportData = true
|
||||
@State private var includeDrop = false
|
||||
@State private var includeViews = true
|
||||
@State private var availableViews: [String] = []
|
||||
@State private var selectedViews: Set<String> = []
|
||||
@State private var loadingTables = false
|
||||
@State private var availableDatabases: [String] = []
|
||||
@State private var loadingDatabases = false
|
||||
@@ -1593,8 +1601,10 @@ struct WorkbenchDatabaseTransferView: View {
|
||||
.pickerStyle(.segmented)
|
||||
.padding(20)
|
||||
|
||||
Form {
|
||||
Section("MySQL Connection") {
|
||||
ScrollView {
|
||||
VStack(alignment: .leading, spacing: 16) {
|
||||
GroupBox("MySQL Connection") {
|
||||
VStack(alignment: .leading, spacing: 10) {
|
||||
LabeledContent("Connection") {
|
||||
Text(selectedProfile?.name ?? "Not selected")
|
||||
}
|
||||
@@ -1613,14 +1623,18 @@ struct WorkbenchDatabaseTransferView: View {
|
||||
}
|
||||
.disabled(loadingDatabases || selectedProfile == nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if selectedMode == 0 {
|
||||
Section("Export Options") {
|
||||
GroupBox("Export Options") {
|
||||
VStack(alignment: .leading, spacing: 10) {
|
||||
Toggle("Table structure", isOn: $exportStructure)
|
||||
Toggle("Table data", isOn: $exportData)
|
||||
Toggle("Add DROP TABLE IF EXISTS", isOn: $includeDrop)
|
||||
.disabled(!exportStructure)
|
||||
Toggle("Include views (definitions)", isOn: $includeViews)
|
||||
.disabled(!exportStructure)
|
||||
HStack {
|
||||
Text("Tables (\(selectedTables.count) selected)")
|
||||
Spacer()
|
||||
@@ -1630,25 +1644,43 @@ struct WorkbenchDatabaseTransferView: View {
|
||||
.disabled(loadingTables)
|
||||
}
|
||||
if loadingTables { ProgressView("Loading tables…") }
|
||||
ScrollView {
|
||||
LazyVStack(alignment: .leading) {
|
||||
ForEach(availableTables, id: \.self) { table in
|
||||
Toggle(table, isOn: Binding(
|
||||
get: { selectedTables.contains(table) },
|
||||
set: { checked in
|
||||
if checked { selectedTables.insert(table) }
|
||||
else { selectedTables.remove(table) }
|
||||
}
|
||||
))
|
||||
if availableTables.isEmpty && !loadingTables {
|
||||
Text("No tables found. Select a database or refresh the list.")
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
ForEach(availableTables, id: \.self) { table in
|
||||
Toggle(table, isOn: Binding(
|
||||
get: { selectedTables.contains(table) },
|
||||
set: { checked in
|
||||
if checked { selectedTables.insert(table) }
|
||||
else { selectedTables.remove(table) }
|
||||
}
|
||||
))
|
||||
}
|
||||
if includeViews && exportStructure {
|
||||
HStack {
|
||||
Text("Views (\(selectedViews.count) selected)")
|
||||
Spacer()
|
||||
Button("All") { selectedViews = Set(availableViews) }
|
||||
Button("None") { selectedViews.removeAll() }
|
||||
}
|
||||
ForEach(availableViews, id: \.self) { view in
|
||||
Toggle(view, isOn: Binding(
|
||||
get: { selectedViews.contains(view) },
|
||||
set: { checked in
|
||||
if checked { selectedViews.insert(view) }
|
||||
else { selectedViews.remove(view) }
|
||||
}
|
||||
))
|
||||
}
|
||||
}
|
||||
.frame(maxHeight: 180)
|
||||
Text("Exports base tables with batched INSERT statements. Views, triggers, routines and transaction-consistent snapshots are not included.")
|
||||
Text("Exports base tables and selected views. Triggers, routines, consistent snapshots and guaranteed row ordering are not yet supported.")
|
||||
.font(.caption).foregroundStyle(.secondary)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Section("Import Options") {
|
||||
GroupBox("Import Options") {
|
||||
VStack(alignment: .leading, spacing: 10) {
|
||||
Text("Import SQL statements into the selected database.")
|
||||
.foregroundStyle(.secondary)
|
||||
|
||||
@@ -1656,9 +1688,11 @@ struct WorkbenchDatabaseTransferView: View {
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section("Progress") {
|
||||
GroupBox("Progress") {
|
||||
VStack(alignment: .leading, spacing: 10) {
|
||||
ProgressView(value: progress)
|
||||
.frame(maxWidth: .infinity)
|
||||
|
||||
@@ -1666,9 +1700,12 @@ struct WorkbenchDatabaseTransferView: View {
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
.textSelection(.enabled)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.formStyle(.grouped)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.padding(20)
|
||||
|
||||
Divider()
|
||||
|
||||
@@ -1701,7 +1738,7 @@ struct WorkbenchDatabaseTransferView: View {
|
||||
.disabled(
|
||||
selectedProfile == nil ||
|
||||
database.isEmpty ||
|
||||
(selectedMode == 0 && (selectedTables.isEmpty || (!exportStructure && !exportData)))
|
||||
(selectedMode == 0 && ((!exportStructure && !exportData) || (selectedTables.isEmpty && !(exportStructure && includeViews && !selectedViews.isEmpty))))
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -1719,6 +1756,10 @@ struct WorkbenchDatabaseTransferView: View {
|
||||
await loadTransferDatabases()
|
||||
}
|
||||
.task(id: database) {
|
||||
availableTables = []
|
||||
selectedTables = []
|
||||
availableViews = []
|
||||
selectedViews = []
|
||||
if !database.isEmpty { await loadTables() }
|
||||
}
|
||||
.confirmationDialog(
|
||||
@@ -1846,7 +1887,11 @@ struct WorkbenchDatabaseTransferView: View {
|
||||
|
||||
@MainActor
|
||||
private func loadTables() async {
|
||||
guard !database.isEmpty else { availableTables = []; selectedTables = []; return }
|
||||
guard !database.isEmpty else {
|
||||
availableTables = []; selectedTables = []
|
||||
availableViews = []; selectedViews = []
|
||||
return
|
||||
}
|
||||
loadingTables = true
|
||||
defer { loadingTables = false }
|
||||
do {
|
||||
@@ -1855,10 +1900,16 @@ struct WorkbenchDatabaseTransferView: View {
|
||||
row.count > 1 && row[1].uppercased() == "BASE TABLE" ? row[0] : nil
|
||||
}
|
||||
selectedTables = Set(availableTables)
|
||||
availableViews = rows.rows.compactMap { row in
|
||||
row.count > 1 && row[1].uppercased() == "VIEW" ? row[0] : nil
|
||||
}
|
||||
selectedViews = Set(availableViews)
|
||||
} catch {
|
||||
status = "Cannot list tables: \(error.localizedDescription)"
|
||||
availableTables = []
|
||||
selectedTables = []
|
||||
availableViews = []
|
||||
selectedViews = []
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1866,7 +1917,11 @@ struct WorkbenchDatabaseTransferView: View {
|
||||
// preserved rather than reconstructed from QueryResult's String values.
|
||||
@MainActor
|
||||
private func exportSQL(to url: URL) async {
|
||||
guard !selectedTables.isEmpty, exportStructure || exportData else { return }
|
||||
guard exportStructure || exportData else { return }
|
||||
let views = exportStructure && includeViews
|
||||
? availableViews.filter { selectedViews.contains($0) }
|
||||
: []
|
||||
guard !selectedTables.isEmpty || !views.isEmpty else { return }
|
||||
isWorking = true
|
||||
progress = 0
|
||||
let tables = availableTables.filter { selectedTables.contains($0) }
|
||||
@@ -1937,7 +1992,23 @@ struct WorkbenchDatabaseTransferView: View {
|
||||
if batch.rows.count < 250 { break }
|
||||
}
|
||||
}
|
||||
progress = Double(index + 1) / Double(tables.count)
|
||||
progress = Double(index + 1) / Double(max(tables.count + views.count, 1))
|
||||
}
|
||||
// Views are exported after base tables so dependencies exist on restore.
|
||||
// The server's SHOW CREATE VIEW response may contain a DEFINER clause;
|
||||
// importing under a different MySQL account can require extra privileges.
|
||||
for (index, view) in views.enumerated() {
|
||||
try Task.checkCancellation()
|
||||
let qualified = "\(db).\(quoteIdentifier(view))"
|
||||
status = "Exporting view \(view)"
|
||||
let definition = try await execute("SHOW CREATE VIEW \(qualified)")
|
||||
guard let row = definition.rows.first, row.count > 1 else {
|
||||
throw WorkbenchTransferError.message("Missing CREATE VIEW for \(view)")
|
||||
}
|
||||
try write("\n-- View \(qualified)\n")
|
||||
if includeDrop { try write("DROP VIEW IF EXISTS \(qualified);\n") }
|
||||
try write(row[1] + ";\n")
|
||||
progress = Double(tables.count + index + 1) / Double(max(tables.count + views.count, 1))
|
||||
}
|
||||
try Task.checkCancellation()
|
||||
try handle?.close()
|
||||
@@ -1948,7 +2019,7 @@ struct WorkbenchDatabaseTransferView: View {
|
||||
try FileManager.default.moveItem(at: tempURL, to: url)
|
||||
}
|
||||
progress = 1
|
||||
status = "Export complete: \(tables.count) tables"
|
||||
status = "Export complete: \(tables.count) tables, \(views.count) views"
|
||||
} catch is CancellationError {
|
||||
status = "Export cancelled; no final backup was written"
|
||||
} catch {
|
||||
|
||||
BIN
Binary file not shown.
+117
-77
@@ -7,7 +7,7 @@
|
||||
"key": "MySQL Workbench",
|
||||
"location": {
|
||||
"startingColumn": 18,
|
||||
"startingLine": 93
|
||||
"startingLine": 98
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -15,7 +15,7 @@
|
||||
"key": "Navigator",
|
||||
"location": {
|
||||
"startingColumn": 20,
|
||||
"startingLine": 182
|
||||
"startingLine": 187
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -23,7 +23,7 @@
|
||||
"key": "Administration",
|
||||
"location": {
|
||||
"startingColumn": 22,
|
||||
"startingLine": 183
|
||||
"startingLine": 188
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -31,7 +31,7 @@
|
||||
"key": "Schemas",
|
||||
"location": {
|
||||
"startingColumn": 22,
|
||||
"startingLine": 184
|
||||
"startingLine": 189
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -39,7 +39,7 @@
|
||||
"key": "SCHEMAS",
|
||||
"location": {
|
||||
"startingColumn": 22,
|
||||
"startingLine": 204
|
||||
"startingLine": 209
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -47,7 +47,7 @@
|
||||
"key": "Edit Connection",
|
||||
"location": {
|
||||
"startingColumn": 36,
|
||||
"startingLine": 258
|
||||
"startingLine": 263
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -55,7 +55,7 @@
|
||||
"key": "Set as Default Schema",
|
||||
"location": {
|
||||
"startingColumn": 24,
|
||||
"startingLine": 375
|
||||
"startingLine": 380
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -63,7 +63,7 @@
|
||||
"key": "Refresh Tables",
|
||||
"location": {
|
||||
"startingColumn": 24,
|
||||
"startingLine": 379
|
||||
"startingLine": 384
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -71,7 +71,7 @@
|
||||
"key": "Load Tables",
|
||||
"location": {
|
||||
"startingColumn": 28,
|
||||
"startingLine": 449
|
||||
"startingLine": 454
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -79,7 +79,7 @@
|
||||
"key": "Tables",
|
||||
"location": {
|
||||
"startingColumn": 22,
|
||||
"startingLine": 422
|
||||
"startingLine": 427
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -87,7 +87,7 @@
|
||||
"key": "Select First 100 Rows",
|
||||
"location": {
|
||||
"startingColumn": 20,
|
||||
"startingLine": 505
|
||||
"startingLine": 510
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -95,7 +95,7 @@
|
||||
"key": "New Query Tab",
|
||||
"location": {
|
||||
"startingColumn": 19,
|
||||
"startingLine": 626
|
||||
"startingLine": 631
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -103,7 +103,7 @@
|
||||
"key": "Default Schema:",
|
||||
"location": {
|
||||
"startingColumn": 18,
|
||||
"startingLine": 651
|
||||
"startingLine": 656
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -111,7 +111,7 @@
|
||||
"key": "SQL Editor",
|
||||
"location": {
|
||||
"startingColumn": 18,
|
||||
"startingLine": 661
|
||||
"startingLine": 666
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -119,7 +119,7 @@
|
||||
"key": "Execute SQL",
|
||||
"location": {
|
||||
"startingColumn": 19,
|
||||
"startingLine": 639
|
||||
"startingLine": 644
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -127,7 +127,7 @@
|
||||
"key": "Format SQL",
|
||||
"location": {
|
||||
"startingColumn": 19,
|
||||
"startingLine": 646
|
||||
"startingLine": 651
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -135,7 +135,7 @@
|
||||
"key": "%lld",
|
||||
"location": {
|
||||
"startingColumn": 26,
|
||||
"startingLine": 701
|
||||
"startingLine": 706
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -143,7 +143,7 @@
|
||||
"key": "Result Grid",
|
||||
"location": {
|
||||
"startingColumn": 22,
|
||||
"startingLine": 733
|
||||
"startingLine": 738
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -151,7 +151,7 @@
|
||||
"key": "No query results",
|
||||
"location": {
|
||||
"startingColumn": 26,
|
||||
"startingLine": 751
|
||||
"startingLine": 756
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -159,7 +159,7 @@
|
||||
"key": "Action Output",
|
||||
"location": {
|
||||
"startingColumn": 22,
|
||||
"startingLine": 773
|
||||
"startingLine": 778
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -167,7 +167,7 @@
|
||||
"key": "UTF-8",
|
||||
"location": {
|
||||
"startingColumn": 18,
|
||||
"startingLine": 848
|
||||
"startingLine": 853
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -175,7 +175,7 @@
|
||||
"key": "Connection Settings",
|
||||
"location": {
|
||||
"startingColumn": 18,
|
||||
"startingLine": 1023
|
||||
"startingLine": 1028
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -183,7 +183,7 @@
|
||||
"key": "Connection Name",
|
||||
"location": {
|
||||
"startingColumn": 21,
|
||||
"startingLine": 1028
|
||||
"startingLine": 1033
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -191,7 +191,7 @@
|
||||
"key": "Hostname",
|
||||
"location": {
|
||||
"startingColumn": 21,
|
||||
"startingLine": 1033
|
||||
"startingLine": 1038
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -199,7 +199,7 @@
|
||||
"key": "Port",
|
||||
"location": {
|
||||
"startingColumn": 21,
|
||||
"startingLine": 1038
|
||||
"startingLine": 1043
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -207,7 +207,7 @@
|
||||
"key": "Username",
|
||||
"location": {
|
||||
"startingColumn": 21,
|
||||
"startingLine": 1044
|
||||
"startingLine": 1049
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -215,7 +215,7 @@
|
||||
"key": "Password (macOS Keychain)",
|
||||
"location": {
|
||||
"startingColumn": 21,
|
||||
"startingLine": 1049
|
||||
"startingLine": 1054
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -223,7 +223,7 @@
|
||||
"key": "Default Schema",
|
||||
"location": {
|
||||
"startingColumn": 21,
|
||||
"startingLine": 1054
|
||||
"startingLine": 1059
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -231,7 +231,7 @@
|
||||
"key": "Cancel",
|
||||
"location": {
|
||||
"startingColumn": 24,
|
||||
"startingLine": 1062
|
||||
"startingLine": 1067
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -239,7 +239,7 @@
|
||||
"key": "Save",
|
||||
"location": {
|
||||
"startingColumn": 24,
|
||||
"startingLine": 1066
|
||||
"startingLine": 1071
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -247,7 +247,7 @@
|
||||
"key": "The server did not return any columns.",
|
||||
"location": {
|
||||
"startingColumn": 25,
|
||||
"startingLine": 1388
|
||||
"startingLine": 1393
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -255,7 +255,7 @@
|
||||
"key": "Loading %@…",
|
||||
"location": {
|
||||
"startingColumn": 30,
|
||||
"startingLine": 1366
|
||||
"startingLine": 1371
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -263,7 +263,7 @@
|
||||
"key": "No Data",
|
||||
"location": {
|
||||
"startingColumn": 21,
|
||||
"startingLine": 1385
|
||||
"startingLine": 1390
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -271,7 +271,7 @@
|
||||
"key": "Unable to Load %@",
|
||||
"location": {
|
||||
"startingColumn": 25,
|
||||
"startingLine": 1372
|
||||
"startingLine": 1377
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -279,7 +279,7 @@
|
||||
"key": "Retry",
|
||||
"location": {
|
||||
"startingColumn": 28,
|
||||
"startingLine": 1378
|
||||
"startingLine": 1383
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -287,7 +287,7 @@
|
||||
"key": "Refresh",
|
||||
"location": {
|
||||
"startingColumn": 23,
|
||||
"startingLine": 1427
|
||||
"startingLine": 1432
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -295,7 +295,7 @@
|
||||
"key": "SQL Editor",
|
||||
"location": {
|
||||
"startingColumn": 23,
|
||||
"startingLine": 1434
|
||||
"startingLine": 1439
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -303,7 +303,7 @@
|
||||
"key": "Not loaded",
|
||||
"location": {
|
||||
"startingColumn": 22,
|
||||
"startingLine": 1512
|
||||
"startingLine": 1517
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -311,7 +311,7 @@
|
||||
"key": "Updated %@",
|
||||
"location": {
|
||||
"startingColumn": 21,
|
||||
"startingLine": 1509
|
||||
"startingLine": 1514
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -319,7 +319,7 @@
|
||||
"key": "%lld rows",
|
||||
"location": {
|
||||
"startingColumn": 18,
|
||||
"startingLine": 1517
|
||||
"startingLine": 1522
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -327,7 +327,7 @@
|
||||
"key": "Import SQL into %@?",
|
||||
"location": {
|
||||
"startingColumn": 13,
|
||||
"startingLine": 1725
|
||||
"startingLine": 1766
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -335,7 +335,7 @@
|
||||
"key": "Operation",
|
||||
"location": {
|
||||
"startingColumn": 20,
|
||||
"startingLine": 1589
|
||||
"startingLine": 1597
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -343,7 +343,7 @@
|
||||
"key": "Data Export",
|
||||
"location": {
|
||||
"startingColumn": 22,
|
||||
"startingLine": 1590
|
||||
"startingLine": 1598
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -351,39 +351,39 @@
|
||||
"key": "Data Import / Restore",
|
||||
"location": {
|
||||
"startingColumn": 22,
|
||||
"startingLine": 1591
|
||||
"startingLine": 1599
|
||||
}
|
||||
},
|
||||
{
|
||||
"comment": "",
|
||||
"key": "MySQL Connection",
|
||||
"location": {
|
||||
"startingColumn": 25,
|
||||
"startingLine": 1597
|
||||
"startingColumn": 26,
|
||||
"startingLine": 1606
|
||||
}
|
||||
},
|
||||
{
|
||||
"comment": "",
|
||||
"key": "Export Options",
|
||||
"location": {
|
||||
"startingColumn": 29,
|
||||
"startingLine": 1619
|
||||
"startingColumn": 30,
|
||||
"startingLine": 1630
|
||||
}
|
||||
},
|
||||
{
|
||||
"comment": "",
|
||||
"key": "Import Options",
|
||||
"location": {
|
||||
"startingColumn": 29,
|
||||
"startingLine": 1651
|
||||
"startingColumn": 30,
|
||||
"startingLine": 1682
|
||||
}
|
||||
},
|
||||
{
|
||||
"comment": "",
|
||||
"key": "Progress",
|
||||
"location": {
|
||||
"startingColumn": 25,
|
||||
"startingLine": 1661
|
||||
"startingColumn": 26,
|
||||
"startingLine": 1694
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -391,7 +391,7 @@
|
||||
"key": "Connection",
|
||||
"location": {
|
||||
"startingColumn": 36,
|
||||
"startingLine": 1598
|
||||
"startingLine": 1608
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -399,7 +399,7 @@
|
||||
"key": "Database",
|
||||
"location": {
|
||||
"startingColumn": 28,
|
||||
"startingLine": 1602
|
||||
"startingLine": 1612
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -407,7 +407,7 @@
|
||||
"key": "Select Database",
|
||||
"location": {
|
||||
"startingColumn": 30,
|
||||
"startingLine": 1603
|
||||
"startingLine": 1613
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -415,15 +415,23 @@
|
||||
"key": "Refresh Databases",
|
||||
"location": {
|
||||
"startingColumn": 32,
|
||||
"startingLine": 1611
|
||||
"startingLine": 1621
|
||||
}
|
||||
},
|
||||
{
|
||||
"comment": "",
|
||||
"key": "Exports base tables with batched INSERT statements. Views, triggers, routines and transaction-consistent snapshots are not included.",
|
||||
"key": "No tables found. Select a database or refresh the list.",
|
||||
"location": {
|
||||
"startingColumn": 34,
|
||||
"startingLine": 1648
|
||||
}
|
||||
},
|
||||
{
|
||||
"comment": "",
|
||||
"key": "Exports base tables and selected views. Triggers, routines, consistent snapshots and guaranteed row ordering are not yet supported.",
|
||||
"location": {
|
||||
"startingColumn": 30,
|
||||
"startingLine": 1647
|
||||
"startingLine": 1677
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -431,7 +439,7 @@
|
||||
"key": "Table structure",
|
||||
"location": {
|
||||
"startingColumn": 32,
|
||||
"startingLine": 1620
|
||||
"startingLine": 1632
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -439,7 +447,7 @@
|
||||
"key": "Table data",
|
||||
"location": {
|
||||
"startingColumn": 32,
|
||||
"startingLine": 1621
|
||||
"startingLine": 1633
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -447,7 +455,15 @@
|
||||
"key": "Add DROP TABLE IF EXISTS",
|
||||
"location": {
|
||||
"startingColumn": 32,
|
||||
"startingLine": 1622
|
||||
"startingLine": 1634
|
||||
}
|
||||
},
|
||||
{
|
||||
"comment": "",
|
||||
"key": "Include views (definitions)",
|
||||
"location": {
|
||||
"startingColumn": 32,
|
||||
"startingLine": 1636
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -455,7 +471,7 @@
|
||||
"key": "Loading tables…",
|
||||
"location": {
|
||||
"startingColumn": 57,
|
||||
"startingLine": 1632
|
||||
"startingLine": 1646
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -463,7 +479,7 @@
|
||||
"key": "Tables (%lld selected)",
|
||||
"location": {
|
||||
"startingColumn": 34,
|
||||
"startingLine": 1625
|
||||
"startingLine": 1639
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -471,7 +487,7 @@
|
||||
"key": "All",
|
||||
"location": {
|
||||
"startingColumn": 36,
|
||||
"startingLine": 1627
|
||||
"startingLine": 1641
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -479,7 +495,7 @@
|
||||
"key": "None",
|
||||
"location": {
|
||||
"startingColumn": 36,
|
||||
"startingLine": 1628
|
||||
"startingLine": 1642
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -487,7 +503,31 @@
|
||||
"key": "Refresh",
|
||||
"location": {
|
||||
"startingColumn": 36,
|
||||
"startingLine": 1629
|
||||
"startingLine": 1643
|
||||
}
|
||||
},
|
||||
{
|
||||
"comment": "",
|
||||
"key": "Views (%lld selected)",
|
||||
"location": {
|
||||
"startingColumn": 38,
|
||||
"startingLine": 1662
|
||||
}
|
||||
},
|
||||
{
|
||||
"comment": "",
|
||||
"key": "All",
|
||||
"location": {
|
||||
"startingColumn": 40,
|
||||
"startingLine": 1664
|
||||
}
|
||||
},
|
||||
{
|
||||
"comment": "",
|
||||
"key": "None",
|
||||
"location": {
|
||||
"startingColumn": 40,
|
||||
"startingLine": 1665
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -495,7 +535,7 @@
|
||||
"key": "Import SQL statements into the selected database.",
|
||||
"location": {
|
||||
"startingColumn": 30,
|
||||
"startingLine": 1652
|
||||
"startingLine": 1684
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -503,7 +543,7 @@
|
||||
"key": "Supports ordinary SQL statements. Dumps using custom DELIMITER directives or stored routines are not supported yet.",
|
||||
"location": {
|
||||
"startingColumn": 30,
|
||||
"startingLine": 1655
|
||||
"startingLine": 1687
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -511,7 +551,7 @@
|
||||
"key": "Close",
|
||||
"location": {
|
||||
"startingColumn": 24,
|
||||
"startingLine": 1676
|
||||
"startingLine": 1713
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -519,7 +559,7 @@
|
||||
"key": "Cancel",
|
||||
"location": {
|
||||
"startingColumn": 28,
|
||||
"startingLine": 1684
|
||||
"startingLine": 1721
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -527,7 +567,7 @@
|
||||
"key": "Export SQL…",
|
||||
"location": {
|
||||
"startingColumn": 31,
|
||||
"startingLine": 1691
|
||||
"startingLine": 1728
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -535,7 +575,7 @@
|
||||
"key": "Import SQL…",
|
||||
"location": {
|
||||
"startingColumn": 31,
|
||||
"startingLine": 1692
|
||||
"startingLine": 1729
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -543,7 +583,7 @@
|
||||
"key": "Import SQL",
|
||||
"location": {
|
||||
"startingColumn": 20,
|
||||
"startingLine": 1728
|
||||
"startingLine": 1769
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -551,7 +591,7 @@
|
||||
"key": "Cancel",
|
||||
"location": {
|
||||
"startingColumn": 20,
|
||||
"startingLine": 1736
|
||||
"startingLine": 1777
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -559,7 +599,7 @@
|
||||
"key": "SQL files can modify or delete existing database objects and data. Ensure you have a backup before continuing.",
|
||||
"location": {
|
||||
"startingColumn": 17,
|
||||
"startingLine": 1741
|
||||
"startingLine": 1782
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -567,7 +607,7 @@
|
||||
"key": "Database Import / Export",
|
||||
"location": {
|
||||
"startingColumn": 22,
|
||||
"startingLine": 1753
|
||||
"startingLine": 1794
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -575,7 +615,7 @@
|
||||
"key": "Built-in native MySQL database tools",
|
||||
"location": {
|
||||
"startingColumn": 22,
|
||||
"startingLine": 1756
|
||||
"startingLine": 1797
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
@@ -7,3 +7,5 @@
|
||||
/Volumes/Developer/Applications/WorkbenchReplacement/build/Build/Products/Debug/WorkbenchReplacement.app
|
||||
/Volumes/Developer/Applications/WorkbenchReplacement/build/Build/Products/Debug/WorkbenchReplacement.app
|
||||
/Volumes/Developer/Applications/WorkbenchReplacement/build/Build/Products/Debug/WorkbenchReplacement.app
|
||||
/Volumes/Developer/Applications/WorkbenchReplacement/build/Build/Products/Debug/WorkbenchReplacement.app
|
||||
/Volumes/Developer/Applications/WorkbenchReplacement/build/Build/Products/Debug/WorkbenchReplacement.app
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
+1
-1
@@ -19,7 +19,7 @@
|
||||
<dict>
|
||||
<key>cdhash</key>
|
||||
<data>
|
||||
kACWojMyCPE6G6Uw22tGzRrP2x4=
|
||||
Iv3+eGn5ABjizzuIQDv3FNnVrWE=
|
||||
</data>
|
||||
<key>requirement</key>
|
||||
<string>identifier "WorkbenchReplacement.debug" and anchor apple generic and certificate leaf[subject.CN] = "Apple Development: Mark Gregory (FLBRJ3BYDD)" and certificate 1[field.1.2.840.113635.100.6.2.1] /* exists */</string>
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
@@ -48,7 +48,7 @@
|
||||
<key>uniqueIdentifier</key>
|
||||
<string>087CD1E0-7E94-4934-A62E-C6C070CD1577</string>
|
||||
</dict>
|
||||
<key>AD44F407-7FE5-46AE-A82F-8FAC1CA2720B</key>
|
||||
<key>20B4B0A0-41A0-44A0-BA02-3E5707BABE60</key>
|
||||
<dict>
|
||||
<key>className</key>
|
||||
<string>IDECommandLineBuildLog</string>
|
||||
@@ -57,7 +57,7 @@
|
||||
<key>domainType</key>
|
||||
<string>Xcode.IDEActivityLogDomainType.BuildLog</string>
|
||||
<key>fileName</key>
|
||||
<string>AD44F407-7FE5-46AE-A82F-8FAC1CA2720B.xcactivitylog</string>
|
||||
<string>20B4B0A0-41A0-44A0-BA02-3E5707BABE60.xcactivitylog</string>
|
||||
<key>hasPrimaryLog</key>
|
||||
<true/>
|
||||
<key>primaryObservable</key>
|
||||
@@ -82,13 +82,55 @@
|
||||
<key>signature</key>
|
||||
<string>Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug</string>
|
||||
<key>timeStartedRecording</key>
|
||||
<real>813875703.86912405</real>
|
||||
<real>813876442.84578598</real>
|
||||
<key>timeStoppedRecording</key>
|
||||
<real>813875715.47182798</real>
|
||||
<real>813876454.95874095</real>
|
||||
<key>title</key>
|
||||
<string>Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug</string>
|
||||
<key>uniqueIdentifier</key>
|
||||
<string>AD44F407-7FE5-46AE-A82F-8FAC1CA2720B</string>
|
||||
<string>20B4B0A0-41A0-44A0-BA02-3E5707BABE60</string>
|
||||
</dict>
|
||||
<key>705B952B-2A37-40D9-B731-8E2290C15462</key>
|
||||
<dict>
|
||||
<key>className</key>
|
||||
<string>IDECommandLineBuildLog</string>
|
||||
<key>documentTypeString</key>
|
||||
<string><nil></string>
|
||||
<key>domainType</key>
|
||||
<string>Xcode.IDEActivityLogDomainType.BuildLog</string>
|
||||
<key>fileName</key>
|
||||
<string>705B952B-2A37-40D9-B731-8E2290C15462.xcactivitylog</string>
|
||||
<key>hasPrimaryLog</key>
|
||||
<true/>
|
||||
<key>primaryObservable</key>
|
||||
<dict>
|
||||
<key>highLevelStatus</key>
|
||||
<string>S</string>
|
||||
<key>totalNumberOfAnalyzerIssues</key>
|
||||
<integer>0</integer>
|
||||
<key>totalNumberOfErrors</key>
|
||||
<integer>0</integer>
|
||||
<key>totalNumberOfTestFailures</key>
|
||||
<integer>0</integer>
|
||||
<key>totalNumberOfWarnings</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>schemeIdentifier-containerName</key>
|
||||
<string>WorkbenchReplacement project</string>
|
||||
<key>schemeIdentifier-schemeName</key>
|
||||
<string>WorkbenchReplacement</string>
|
||||
<key>schemeIdentifier-sharedScheme</key>
|
||||
<integer>1</integer>
|
||||
<key>signature</key>
|
||||
<string>Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug</string>
|
||||
<key>timeStartedRecording</key>
|
||||
<real>813876591.82079995</real>
|
||||
<key>timeStoppedRecording</key>
|
||||
<real>813876604.10285401</real>
|
||||
<key>title</key>
|
||||
<string>Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug</string>
|
||||
<key>uniqueIdentifier</key>
|
||||
<string>705B952B-2A37-40D9-B731-8E2290C15462</string>
|
||||
</dict>
|
||||
<key>AF582207-87B3-4A2E-A532-DA0FD8F61FBD</key>
|
||||
<dict>
|
||||
@@ -132,48 +174,6 @@
|
||||
<key>uniqueIdentifier</key>
|
||||
<string>AF582207-87B3-4A2E-A532-DA0FD8F61FBD</string>
|
||||
</dict>
|
||||
<key>BA4E5983-8DAA-49CA-A677-11E73E67F0B0</key>
|
||||
<dict>
|
||||
<key>className</key>
|
||||
<string>IDECommandLineBuildLog</string>
|
||||
<key>documentTypeString</key>
|
||||
<string><nil></string>
|
||||
<key>domainType</key>
|
||||
<string>Xcode.IDEActivityLogDomainType.BuildLog</string>
|
||||
<key>fileName</key>
|
||||
<string>BA4E5983-8DAA-49CA-A677-11E73E67F0B0.xcactivitylog</string>
|
||||
<key>hasPrimaryLog</key>
|
||||
<true/>
|
||||
<key>primaryObservable</key>
|
||||
<dict>
|
||||
<key>highLevelStatus</key>
|
||||
<string>S</string>
|
||||
<key>totalNumberOfAnalyzerIssues</key>
|
||||
<integer>0</integer>
|
||||
<key>totalNumberOfErrors</key>
|
||||
<integer>0</integer>
|
||||
<key>totalNumberOfTestFailures</key>
|
||||
<integer>0</integer>
|
||||
<key>totalNumberOfWarnings</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>schemeIdentifier-containerName</key>
|
||||
<string>WorkbenchReplacement project</string>
|
||||
<key>schemeIdentifier-schemeName</key>
|
||||
<string>WorkbenchReplacement</string>
|
||||
<key>schemeIdentifier-sharedScheme</key>
|
||||
<integer>1</integer>
|
||||
<key>signature</key>
|
||||
<string>Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug</string>
|
||||
<key>timeStartedRecording</key>
|
||||
<real>813875867.553792</real>
|
||||
<key>timeStoppedRecording</key>
|
||||
<real>813875879.94755697</real>
|
||||
<key>title</key>
|
||||
<string>Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug</string>
|
||||
<key>uniqueIdentifier</key>
|
||||
<string>BA4E5983-8DAA-49CA-A677-11E73E67F0B0</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -1 +1 @@
|
||||
1792183470.9957151: Module build session file for module cache at Path(str: "/Volumes/Developer/Applications/WorkbenchReplacement/build/ModuleCache.noindex")
|
||||
1792183792.223736: Module build session file for module cache at Path(str: "/Volumes/Developer/Applications/WorkbenchReplacement/build/ModuleCache.noindex")
|
||||
|
||||
BIN
Binary file not shown.
+1
-1
@@ -3,7 +3,7 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LastAccessedDate</key>
|
||||
<date>2026-10-16T20:44:30Z</date>
|
||||
<date>2026-10-16T20:49:52Z</date>
|
||||
<key>WorkspacePath</key>
|
||||
<string>/Volumes/Developer/Applications/WorkbenchReplacement/WorkbenchReplacement.xcodeproj</string>
|
||||
</dict>
|
||||
|
||||
Reference in New Issue
Block a user