new ui
This commit is contained in:
@@ -33,6 +33,10 @@ struct MainView: View {
|
|||||||
@State private var selectedTableName: String? = nil
|
@State private var selectedTableName: String? = nil
|
||||||
@State private var outputExpanded = true
|
@State private var outputExpanded = true
|
||||||
|
|
||||||
|
@State private var navigatorMode = 0
|
||||||
|
@State private var administrationPage: WorkbenchAdminPage? = nil
|
||||||
|
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
VStack(spacing: 0) {
|
VStack(spacing: 0) {
|
||||||
mainToolbar
|
mainToolbar
|
||||||
@@ -163,8 +167,27 @@ struct MainView: View {
|
|||||||
|
|
||||||
private var navigator: some View {
|
private var navigator: some View {
|
||||||
VStack(spacing: 0) {
|
VStack(spacing: 0) {
|
||||||
sectionHeader("NAVIGATOR")
|
Picker("Navigator", selection: $navigatorMode) {
|
||||||
|
Text("Administration").tag(0)
|
||||||
|
Text("Schemas").tag(1)
|
||||||
|
}
|
||||||
|
.pickerStyle(.segmented)
|
||||||
|
.labelsHidden()
|
||||||
|
.padding(8)
|
||||||
|
|
||||||
|
if navigatorMode == 0 {
|
||||||
|
administrationNavigator
|
||||||
|
} else {
|
||||||
|
schemasNavigator
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
.background(WB.sidebar)
|
||||||
|
}
|
||||||
|
|
||||||
|
private var schemasNavigator: some View {
|
||||||
|
VStack(spacing: 0) {
|
||||||
HStack {
|
HStack {
|
||||||
Text("SCHEMAS")
|
Text("SCHEMAS")
|
||||||
.font(.system(size: 11, weight: .bold))
|
.font(.system(size: 11, weight: .bold))
|
||||||
@@ -230,7 +253,67 @@ struct MainView: View {
|
|||||||
}
|
}
|
||||||
.frame(height: 125)
|
.frame(height: 125)
|
||||||
}
|
}
|
||||||
.background(WB.sidebar)
|
}
|
||||||
|
|
||||||
|
private var administrationNavigator: some View {
|
||||||
|
ScrollView {
|
||||||
|
VStack(alignment: .leading, spacing: 4) {
|
||||||
|
administrationSection(
|
||||||
|
"MANAGEMENT",
|
||||||
|
pages: [
|
||||||
|
.serverStatus,
|
||||||
|
.clientConnections,
|
||||||
|
.users,
|
||||||
|
.variables
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
administrationSection(
|
||||||
|
"PERFORMANCE",
|
||||||
|
pages: [
|
||||||
|
.dashboard,
|
||||||
|
.performanceReports,
|
||||||
|
.performanceSchema
|
||||||
|
]
|
||||||
|
)
|
||||||
|
}
|
||||||
|
.padding(8)
|
||||||
|
}
|
||||||
|
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||||
|
}
|
||||||
|
|
||||||
|
private func administrationSection(
|
||||||
|
_ title: String,
|
||||||
|
pages: [WorkbenchAdminPage]
|
||||||
|
) -> some View {
|
||||||
|
VStack(alignment: .leading, spacing: 4) {
|
||||||
|
Text(title)
|
||||||
|
.font(.system(size: 11, weight: .bold))
|
||||||
|
.foregroundStyle(.secondary)
|
||||||
|
.padding(.top, 12)
|
||||||
|
.padding(.bottom, 4)
|
||||||
|
|
||||||
|
ForEach(pages) { page in
|
||||||
|
Button {
|
||||||
|
administrationPage = page
|
||||||
|
} label: {
|
||||||
|
Label(page.rawValue, systemImage: page.icon)
|
||||||
|
.frame(
|
||||||
|
maxWidth: .infinity,
|
||||||
|
alignment: .leading
|
||||||
|
)
|
||||||
|
.padding(.horizontal, 8)
|
||||||
|
.padding(.vertical, 7)
|
||||||
|
.background(
|
||||||
|
administrationPage == page
|
||||||
|
? Color.accentColor.opacity(0.18)
|
||||||
|
: Color.clear
|
||||||
|
)
|
||||||
|
.clipShape(RoundedRectangle(cornerRadius: 5))
|
||||||
|
}
|
||||||
|
.buttonStyle(.plain)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -444,6 +527,22 @@ struct MainView: View {
|
|||||||
// MARK: - Workspace
|
// MARK: - Workspace
|
||||||
|
|
||||||
private var workspace: some View {
|
private var workspace: some View {
|
||||||
|
Group {
|
||||||
|
if let page = administrationPage {
|
||||||
|
WorkbenchAdministrationView(
|
||||||
|
page: page,
|
||||||
|
profile: model.selected
|
||||||
|
) {
|
||||||
|
administrationPage = nil
|
||||||
|
navigatorMode = 1
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
sqlWorkspace
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private var sqlWorkspace: some View {
|
||||||
VStack(spacing: 0) {
|
VStack(spacing: 0) {
|
||||||
queryTabBar
|
queryTabBar
|
||||||
|
|
||||||
@@ -1143,3 +1242,300 @@ struct NativeResultGrid: NSViewRepresentable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// MARK: - MySQL Administration
|
||||||
|
|
||||||
|
enum WorkbenchAdminPage: String, CaseIterable, Identifiable {
|
||||||
|
case serverStatus = "Server Status"
|
||||||
|
case clientConnections = "Client Connections"
|
||||||
|
case users = "Users and Privileges"
|
||||||
|
case variables = "Status and System Variables"
|
||||||
|
case dashboard = "Dashboard"
|
||||||
|
case performanceReports = "Performance Reports"
|
||||||
|
case performanceSchema = "Performance Schema Setup"
|
||||||
|
|
||||||
|
var id: String { rawValue }
|
||||||
|
|
||||||
|
var icon: String {
|
||||||
|
switch self {
|
||||||
|
case .serverStatus: return "server.rack"
|
||||||
|
case .clientConnections: return "person.2"
|
||||||
|
case .users: return "person.crop.circle.badge.checkmark"
|
||||||
|
case .variables: return "slider.horizontal.3"
|
||||||
|
case .dashboard: return "chart.xyaxis.line"
|
||||||
|
case .performanceReports: return "chart.bar.xaxis"
|
||||||
|
case .performanceSchema: return "gauge.with.dots.needle.67percent"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var statement: String {
|
||||||
|
switch self {
|
||||||
|
case .serverStatus:
|
||||||
|
return """
|
||||||
|
SHOW GLOBAL STATUS WHERE Variable_name IN (
|
||||||
|
'Uptime',
|
||||||
|
'Threads_connected',
|
||||||
|
'Threads_running',
|
||||||
|
'Questions',
|
||||||
|
'Queries',
|
||||||
|
'Connections',
|
||||||
|
'Bytes_received',
|
||||||
|
'Bytes_sent'
|
||||||
|
)
|
||||||
|
"""
|
||||||
|
|
||||||
|
case .clientConnections:
|
||||||
|
return "SHOW FULL PROCESSLIST"
|
||||||
|
|
||||||
|
case .users:
|
||||||
|
return """
|
||||||
|
SELECT User, Host, plugin, account_locked
|
||||||
|
FROM mysql.user
|
||||||
|
ORDER BY User, Host
|
||||||
|
"""
|
||||||
|
|
||||||
|
case .variables:
|
||||||
|
return "SHOW GLOBAL VARIABLES"
|
||||||
|
|
||||||
|
case .dashboard:
|
||||||
|
return """
|
||||||
|
SHOW GLOBAL STATUS WHERE Variable_name IN (
|
||||||
|
'Uptime',
|
||||||
|
'Connections',
|
||||||
|
'Threads_connected',
|
||||||
|
'Threads_running',
|
||||||
|
'Questions',
|
||||||
|
'Queries',
|
||||||
|
'Bytes_received',
|
||||||
|
'Bytes_sent',
|
||||||
|
'Innodb_buffer_pool_reads',
|
||||||
|
'Innodb_buffer_pool_read_requests',
|
||||||
|
'Slow_queries'
|
||||||
|
)
|
||||||
|
"""
|
||||||
|
|
||||||
|
case .performanceReports:
|
||||||
|
return """
|
||||||
|
SELECT *
|
||||||
|
FROM sys.statement_analysis
|
||||||
|
LIMIT 100
|
||||||
|
"""
|
||||||
|
|
||||||
|
case .performanceSchema:
|
||||||
|
return """
|
||||||
|
SELECT NAME, ENABLED, TIMED
|
||||||
|
FROM performance_schema.setup_instruments
|
||||||
|
LIMIT 250
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct WorkbenchAdministrationView: View {
|
||||||
|
let page: WorkbenchAdminPage
|
||||||
|
let profile: ConnectionProfile?
|
||||||
|
let close: () -> Void
|
||||||
|
|
||||||
|
@State private var result = QueryResult()
|
||||||
|
@State private var loading = false
|
||||||
|
@State private var errorMessage: String?
|
||||||
|
@State private var lastUpdated: Date?
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
VStack(spacing: 0) {
|
||||||
|
header
|
||||||
|
|
||||||
|
Divider()
|
||||||
|
|
||||||
|
if loading && result.columns.isEmpty {
|
||||||
|
Spacer()
|
||||||
|
|
||||||
|
ProgressView("Loading \(page.rawValue)…")
|
||||||
|
|
||||||
|
Spacer()
|
||||||
|
} else if let errorMessage {
|
||||||
|
ContentUnavailableView {
|
||||||
|
Label(
|
||||||
|
"Unable to Load \(page.rawValue)",
|
||||||
|
systemImage: "exclamationmark.triangle"
|
||||||
|
)
|
||||||
|
} description: {
|
||||||
|
Text(errorMessage)
|
||||||
|
} actions: {
|
||||||
|
Button("Retry") {
|
||||||
|
Task { await refresh() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||||
|
} else if result.columns.isEmpty {
|
||||||
|
ContentUnavailableView(
|
||||||
|
"No Data",
|
||||||
|
systemImage: "tablecells",
|
||||||
|
description: Text(
|
||||||
|
"The server did not return any columns."
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||||
|
} else {
|
||||||
|
resultContent
|
||||||
|
}
|
||||||
|
|
||||||
|
Divider()
|
||||||
|
|
||||||
|
footer
|
||||||
|
}
|
||||||
|
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||||
|
.task(id: "\(page.id)-\(profile?.id.uuidString ?? "")") {
|
||||||
|
await refresh()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private var header: some View {
|
||||||
|
HStack(spacing: 14) {
|
||||||
|
Image(systemName: page.icon)
|
||||||
|
.font(.system(size: 27))
|
||||||
|
.foregroundStyle(.blue)
|
||||||
|
.frame(width: 40)
|
||||||
|
|
||||||
|
VStack(alignment: .leading, spacing: 3) {
|
||||||
|
Text(profile?.name ?? "No Connection")
|
||||||
|
.font(.caption)
|
||||||
|
.foregroundStyle(.secondary)
|
||||||
|
|
||||||
|
Text(page.rawValue)
|
||||||
|
.font(.system(size: 22, weight: .semibold))
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer()
|
||||||
|
|
||||||
|
Button {
|
||||||
|
Task { await refresh() }
|
||||||
|
} label: {
|
||||||
|
Label("Refresh", systemImage: "arrow.clockwise")
|
||||||
|
}
|
||||||
|
.disabled(loading)
|
||||||
|
|
||||||
|
Button {
|
||||||
|
close()
|
||||||
|
} label: {
|
||||||
|
Label("SQL Editor", systemImage: "chevron.left.forwardslash.chevron.right")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.padding(18)
|
||||||
|
}
|
||||||
|
|
||||||
|
@ViewBuilder
|
||||||
|
private var resultContent: some View {
|
||||||
|
if page == .dashboard || page == .serverStatus {
|
||||||
|
ScrollView {
|
||||||
|
LazyVGrid(
|
||||||
|
columns: [
|
||||||
|
GridItem(.adaptive(minimum: 180), spacing: 12)
|
||||||
|
],
|
||||||
|
spacing: 12
|
||||||
|
) {
|
||||||
|
ForEach(result.rows.indices, id: \.self) { index in
|
||||||
|
let row = result.rows[index]
|
||||||
|
|
||||||
|
if row.count >= 2 {
|
||||||
|
VStack(alignment: .leading, spacing: 10) {
|
||||||
|
Text(
|
||||||
|
row[0]
|
||||||
|
.replacingOccurrences(
|
||||||
|
of: "_",
|
||||||
|
with: " "
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.font(.caption)
|
||||||
|
.foregroundStyle(.secondary)
|
||||||
|
|
||||||
|
Text(row[1])
|
||||||
|
.font(
|
||||||
|
.system(
|
||||||
|
size: 23,
|
||||||
|
weight: .semibold,
|
||||||
|
design: .rounded
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.lineLimit(1)
|
||||||
|
.minimumScaleFactor(0.65)
|
||||||
|
}
|
||||||
|
.frame(
|
||||||
|
maxWidth: .infinity,
|
||||||
|
minHeight: 90,
|
||||||
|
alignment: .leading
|
||||||
|
)
|
||||||
|
.padding(14)
|
||||||
|
.background(
|
||||||
|
Color(nsColor: .controlBackgroundColor)
|
||||||
|
)
|
||||||
|
.clipShape(
|
||||||
|
RoundedRectangle(cornerRadius: 10)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.padding(18)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
NativeResultGrid(
|
||||||
|
columns: result.columns,
|
||||||
|
rows: result.rows
|
||||||
|
)
|
||||||
|
.frame(
|
||||||
|
maxWidth: .infinity,
|
||||||
|
maxHeight: .infinity
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private var footer: some View {
|
||||||
|
HStack {
|
||||||
|
if let lastUpdated {
|
||||||
|
Text(
|
||||||
|
"Updated \(lastUpdated.formatted(date: .omitted, time: .standard))"
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
Text("Not loaded")
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer()
|
||||||
|
|
||||||
|
Text("\(result.rows.count) rows")
|
||||||
|
}
|
||||||
|
.font(.caption)
|
||||||
|
.foregroundStyle(.secondary)
|
||||||
|
.padding(.horizontal, 16)
|
||||||
|
.frame(height: 30)
|
||||||
|
}
|
||||||
|
|
||||||
|
@MainActor
|
||||||
|
private func refresh() async {
|
||||||
|
guard let profile else {
|
||||||
|
errorMessage = "Select a MySQL connection first."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
loading = true
|
||||||
|
errorMessage = nil
|
||||||
|
|
||||||
|
defer {
|
||||||
|
loading = false
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
let response = try await NativeMySQLRunner.run(
|
||||||
|
profile: profile,
|
||||||
|
database: "",
|
||||||
|
password: PasswordStore.read(profile.id),
|
||||||
|
sql: page.statement
|
||||||
|
)
|
||||||
|
|
||||||
|
result = response
|
||||||
|
lastUpdated = Date()
|
||||||
|
} catch {
|
||||||
|
errorMessage = error.localizedDescription
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+131
-27
@@ -7,7 +7,31 @@
|
|||||||
"key": "MySQL Workbench",
|
"key": "MySQL Workbench",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 18,
|
"startingColumn": 18,
|
||||||
"startingLine": 84
|
"startingLine": 88
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"comment": "",
|
||||||
|
"key": "Navigator",
|
||||||
|
"location": {
|
||||||
|
"startingColumn": 20,
|
||||||
|
"startingLine": 170
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"comment": "",
|
||||||
|
"key": "Administration",
|
||||||
|
"location": {
|
||||||
|
"startingColumn": 22,
|
||||||
|
"startingLine": 171
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"comment": "",
|
||||||
|
"key": "Schemas",
|
||||||
|
"location": {
|
||||||
|
"startingColumn": 22,
|
||||||
|
"startingLine": 172
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -15,7 +39,7 @@
|
|||||||
"key": "SCHEMAS",
|
"key": "SCHEMAS",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 22,
|
"startingColumn": 22,
|
||||||
"startingLine": 169
|
"startingLine": 192
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -23,7 +47,7 @@
|
|||||||
"key": "Edit Connection",
|
"key": "Edit Connection",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 36,
|
"startingColumn": 36,
|
||||||
"startingLine": 223
|
"startingLine": 246
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -31,7 +55,7 @@
|
|||||||
"key": "Set as Default Schema",
|
"key": "Set as Default Schema",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 24,
|
"startingColumn": 24,
|
||||||
"startingLine": 280
|
"startingLine": 363
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -39,7 +63,7 @@
|
|||||||
"key": "Refresh Tables",
|
"key": "Refresh Tables",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 24,
|
"startingColumn": 24,
|
||||||
"startingLine": 284
|
"startingLine": 367
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -47,7 +71,7 @@
|
|||||||
"key": "Load Tables",
|
"key": "Load Tables",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 28,
|
"startingColumn": 28,
|
||||||
"startingLine": 354
|
"startingLine": 437
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -55,7 +79,7 @@
|
|||||||
"key": "Tables",
|
"key": "Tables",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 22,
|
"startingColumn": 22,
|
||||||
"startingLine": 327
|
"startingLine": 410
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -63,7 +87,7 @@
|
|||||||
"key": "Select First 100 Rows",
|
"key": "Select First 100 Rows",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 20,
|
"startingColumn": 20,
|
||||||
"startingLine": 410
|
"startingLine": 493
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -71,7 +95,7 @@
|
|||||||
"key": "New Query Tab",
|
"key": "New Query Tab",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 19,
|
"startingColumn": 19,
|
||||||
"startingLine": 515
|
"startingLine": 614
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -79,7 +103,7 @@
|
|||||||
"key": "Default Schema:",
|
"key": "Default Schema:",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 18,
|
"startingColumn": 18,
|
||||||
"startingLine": 540
|
"startingLine": 639
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -87,7 +111,7 @@
|
|||||||
"key": "SQL Editor",
|
"key": "SQL Editor",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 18,
|
"startingColumn": 18,
|
||||||
"startingLine": 550
|
"startingLine": 649
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -95,7 +119,7 @@
|
|||||||
"key": "Execute SQL",
|
"key": "Execute SQL",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 19,
|
"startingColumn": 19,
|
||||||
"startingLine": 528
|
"startingLine": 627
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -103,7 +127,7 @@
|
|||||||
"key": "Format SQL",
|
"key": "Format SQL",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 19,
|
"startingColumn": 19,
|
||||||
"startingLine": 535
|
"startingLine": 634
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -111,7 +135,7 @@
|
|||||||
"key": "%lld",
|
"key": "%lld",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 26,
|
"startingColumn": 26,
|
||||||
"startingLine": 590
|
"startingLine": 689
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -119,7 +143,7 @@
|
|||||||
"key": "Result Grid",
|
"key": "Result Grid",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 22,
|
"startingColumn": 22,
|
||||||
"startingLine": 622
|
"startingLine": 721
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -127,7 +151,7 @@
|
|||||||
"key": "No query results",
|
"key": "No query results",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 26,
|
"startingColumn": 26,
|
||||||
"startingLine": 640
|
"startingLine": 739
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -135,7 +159,7 @@
|
|||||||
"key": "Action Output",
|
"key": "Action Output",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 22,
|
"startingColumn": 22,
|
||||||
"startingLine": 662
|
"startingLine": 761
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -143,7 +167,7 @@
|
|||||||
"key": "UTF-8",
|
"key": "UTF-8",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 18,
|
"startingColumn": 18,
|
||||||
"startingLine": 737
|
"startingLine": 836
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -151,7 +175,7 @@
|
|||||||
"key": "Connection Settings",
|
"key": "Connection Settings",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 18,
|
"startingColumn": 18,
|
||||||
"startingLine": 912
|
"startingLine": 1011
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -159,7 +183,7 @@
|
|||||||
"key": "Connection Name",
|
"key": "Connection Name",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 21,
|
"startingColumn": 21,
|
||||||
"startingLine": 917
|
"startingLine": 1016
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -167,7 +191,7 @@
|
|||||||
"key": "Hostname",
|
"key": "Hostname",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 21,
|
"startingColumn": 21,
|
||||||
"startingLine": 922
|
"startingLine": 1021
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -175,7 +199,7 @@
|
|||||||
"key": "Port",
|
"key": "Port",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 21,
|
"startingColumn": 21,
|
||||||
"startingLine": 927
|
"startingLine": 1026
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -183,7 +207,7 @@
|
|||||||
"key": "Username",
|
"key": "Username",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 21,
|
"startingColumn": 21,
|
||||||
"startingLine": 933
|
"startingLine": 1032
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -191,7 +215,7 @@
|
|||||||
"key": "Password (macOS Keychain)",
|
"key": "Password (macOS Keychain)",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 21,
|
"startingColumn": 21,
|
||||||
"startingLine": 938
|
"startingLine": 1037
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -199,7 +223,7 @@
|
|||||||
"key": "Default Schema",
|
"key": "Default Schema",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 21,
|
"startingColumn": 21,
|
||||||
"startingLine": 943
|
"startingLine": 1042
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -207,7 +231,7 @@
|
|||||||
"key": "Cancel",
|
"key": "Cancel",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 24,
|
"startingColumn": 24,
|
||||||
"startingLine": 951
|
"startingLine": 1050
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -215,7 +239,87 @@
|
|||||||
"key": "Save",
|
"key": "Save",
|
||||||
"location": {
|
"location": {
|
||||||
"startingColumn": 24,
|
"startingColumn": 24,
|
||||||
"startingLine": 955
|
"startingLine": 1054
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"comment": "",
|
||||||
|
"key": "The server did not return any columns.",
|
||||||
|
"location": {
|
||||||
|
"startingColumn": 25,
|
||||||
|
"startingLine": 1376
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"comment": "",
|
||||||
|
"key": "Loading %@…",
|
||||||
|
"location": {
|
||||||
|
"startingColumn": 30,
|
||||||
|
"startingLine": 1354
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"comment": "",
|
||||||
|
"key": "No Data",
|
||||||
|
"location": {
|
||||||
|
"startingColumn": 21,
|
||||||
|
"startingLine": 1373
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"comment": "",
|
||||||
|
"key": "Unable to Load %@",
|
||||||
|
"location": {
|
||||||
|
"startingColumn": 25,
|
||||||
|
"startingLine": 1360
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"comment": "",
|
||||||
|
"key": "Retry",
|
||||||
|
"location": {
|
||||||
|
"startingColumn": 28,
|
||||||
|
"startingLine": 1366
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"comment": "",
|
||||||
|
"key": "Refresh",
|
||||||
|
"location": {
|
||||||
|
"startingColumn": 23,
|
||||||
|
"startingLine": 1415
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"comment": "",
|
||||||
|
"key": "SQL Editor",
|
||||||
|
"location": {
|
||||||
|
"startingColumn": 23,
|
||||||
|
"startingLine": 1422
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"comment": "",
|
||||||
|
"key": "Not loaded",
|
||||||
|
"location": {
|
||||||
|
"startingColumn": 22,
|
||||||
|
"startingLine": 1500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"comment": "",
|
||||||
|
"key": "Updated %@",
|
||||||
|
"location": {
|
||||||
|
"startingColumn": 21,
|
||||||
|
"startingLine": 1497
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"comment": "",
|
||||||
|
"key": "%lld rows",
|
||||||
|
"location": {
|
||||||
|
"startingColumn": 18,
|
||||||
|
"startingLine": 1505
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
@@ -3,3 +3,4 @@
|
|||||||
/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
|
/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>
|
<dict>
|
||||||
<key>cdhash</key>
|
<key>cdhash</key>
|
||||||
<data>
|
<data>
|
||||||
1TJJDc7LhSK1AHyUbPhKlUy9S8A=
|
5Wek/oPAL5JjNIHDxN/dkqjd0UI=
|
||||||
</data>
|
</data>
|
||||||
<key>requirement</key>
|
<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>
|
<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.
@@ -90,6 +90,48 @@
|
|||||||
<key>uniqueIdentifier</key>
|
<key>uniqueIdentifier</key>
|
||||||
<string>8EB6F71B-1109-492D-84B8-8C2FE5C14BB0</string>
|
<string>8EB6F71B-1109-492D-84B8-8C2FE5C14BB0</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<key>AD44F407-7FE5-46AE-A82F-8FAC1CA2720B</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>AD44F407-7FE5-46AE-A82F-8FAC1CA2720B.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>813875703.86912405</real>
|
||||||
|
<key>timeStoppedRecording</key>
|
||||||
|
<real>813875715.47182798</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>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
1792182796.251258: Module build session file for module cache at Path(str: "/Volumes/Developer/Applications/WorkbenchReplacement/build/ModuleCache.noindex")
|
1792182904.277697: 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">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>LastAccessedDate</key>
|
<key>LastAccessedDate</key>
|
||||||
<date>2026-10-16T20:33:16Z</date>
|
<date>2026-10-16T20:35:04Z</date>
|
||||||
<key>WorkspacePath</key>
|
<key>WorkspacePath</key>
|
||||||
<string>/Volumes/Developer/Applications/WorkbenchReplacement/WorkbenchReplacement.xcodeproj</string>
|
<string>/Volumes/Developer/Applications/WorkbenchReplacement/WorkbenchReplacement.xcodeproj</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
|||||||
Reference in New Issue
Block a user