diff --git a/pkg/ui/column_screens.go b/pkg/ui/column_screens.go index 7bbf5df..35dbde9 100644 --- a/pkg/ui/column_screens.go +++ b/pkg/ui/column_screens.go @@ -23,6 +23,7 @@ func (se *SchemaEditor) showColumnEditor(schemaIndex, tableIndex, colIndex int, newIsNotNull := column.NotNull newDefault := column.Default newDescription := column.Description + newGUID := column.GUID // Column type options: PostgreSQL, MySQL, SQL Server, and common SQL types columnTypes := []string{ @@ -94,9 +95,14 @@ func (se *SchemaEditor) showColumnEditor(schemaIndex, tableIndex, colIndex int, newDescription = value }) + form.AddInputField("GUID", column.GUID, 40, nil, func(value string) { + newGUID = value + }) + form.AddButton("Save", func() { // Apply changes using dataops se.UpdateColumn(schemaIndex, tableIndex, originalName, newName, newType, newIsPK, newIsNotNull, newDefault, newDescription) + se.db.Schemas[schemaIndex].Tables[tableIndex].Columns[newName].GUID = newGUID se.pages.RemovePage("column-editor") se.pages.SwitchToPage("table-editor") diff --git a/pkg/ui/database_screens.go b/pkg/ui/database_screens.go index d3c488c..72513e7 100644 --- a/pkg/ui/database_screens.go +++ b/pkg/ui/database_screens.go @@ -14,6 +14,7 @@ func (se *SchemaEditor) showEditDatabaseForm() { dbComment := se.db.Comment dbType := string(se.db.DatabaseType) dbVersion := se.db.DatabaseVersion + dbGUID := se.db.GUID // Database type options dbTypeOptions := []string{"pgsql", "mssql", "sqlite"} @@ -45,11 +46,16 @@ func (se *SchemaEditor) showEditDatabaseForm() { dbVersion = value }) + form.AddInputField("GUID", dbGUID, 40, nil, func(value string) { + dbGUID = value + }) + form.AddButton("Save", func() { if dbName == "" { return } se.updateDatabase(dbName, dbDescription, dbComment, dbType, dbVersion) + se.db.GUID = dbGUID se.pages.RemovePage("edit-database") se.pages.RemovePage("main") se.pages.AddPage("main", se.createMainMenu(), true, true) diff --git a/pkg/ui/schema_screens.go b/pkg/ui/schema_screens.go index c352371..bdebce1 100644 --- a/pkg/ui/schema_screens.go +++ b/pkg/ui/schema_screens.go @@ -24,8 +24,8 @@ func (se *SchemaEditor) showSchemaList() { schemaTable := tview.NewTable().SetBorders(true).SetSelectable(true, false).SetFixed(1, 0) // Add header row with padding for full width - headers := []string{"Name", "Sequence", "Total Tables", "Total Sequences", "Total Views", "Description"} - headerWidths := []int{20, 15, 20, 20, 15} // Last column takes remaining space + headers := []string{"Name", "Sequence", "Total Tables", "Total Sequences", "Total Views", "GUID", "Description"} + headerWidths := []int{20, 15, 20, 20, 15, 36} // Last column takes remaining space for i, header := range headers { padding := "" if i < len(headerWidths) { @@ -67,9 +67,14 @@ func (se *SchemaEditor) showSchemaList() { viewsCell := tview.NewTableCell(viewsStr).SetSelectable(true) schemaTable.SetCell(row+1, 4, viewsCell) + // GUID - pad to 36 chars + guidStr := fmt.Sprintf("%-36s", schema.GUID) + guidCell := tview.NewTableCell(guidStr).SetSelectable(true) + schemaTable.SetCell(row+1, 5, guidCell) + // Description - no padding, takes remaining space descCell := tview.NewTableCell(schema.Description).SetSelectable(true) - schemaTable.SetCell(row+1, 5, descCell) + schemaTable.SetCell(row+1, 6, descCell) } schemaTable.SetTitle(" Schemas ").SetBorder(true).SetTitleAlign(tview.AlignLeft) @@ -307,6 +312,7 @@ func (se *SchemaEditor) showEditSchemaDialog(schemaIndex int) { newName := schema.Name newOwner := schema.Owner newDescription := schema.Description + newGUID := schema.GUID form.AddInputField("Schema Name", schema.Name, 40, nil, func(value string) { newName = value @@ -320,9 +326,14 @@ func (se *SchemaEditor) showEditSchemaDialog(schemaIndex int) { newDescription = value }) + form.AddInputField("GUID", schema.GUID, 40, nil, func(value string) { + newGUID = value + }) + form.AddButton("Save", func() { // Apply changes using dataops se.UpdateSchema(schemaIndex, newName, newOwner, newDescription) + se.db.Schemas[schemaIndex].GUID = newGUID schema := se.db.Schemas[schemaIndex] se.pages.RemovePage("edit-schema") diff --git a/pkg/ui/table_screens.go b/pkg/ui/table_screens.go index 706bf52..ba164d1 100644 --- a/pkg/ui/table_screens.go +++ b/pkg/ui/table_screens.go @@ -24,8 +24,8 @@ func (se *SchemaEditor) showTableList() { tableTable := tview.NewTable().SetBorders(true).SetSelectable(true, false).SetFixed(1, 0) // Add header row with padding for full width - headers := []string{"Name", "Schema", "Sequence", "Total Columns", "Total Relations", "Total Indexes", "Description", "Comment"} - headerWidths := []int{18, 15, 12, 14, 15, 14, 0, 12} // Description gets remainder + headers := []string{"Name", "Schema", "Sequence", "Total Columns", "Total Relations", "Total Indexes", "GUID", "Description", "Comment"} + headerWidths := []int{18, 15, 12, 14, 15, 14, 36, 0, 12} // Description gets remainder for i, header := range headers { padding := "" if i < len(headerWidths) && headerWidths[i] > 0 { @@ -82,14 +82,19 @@ func (se *SchemaEditor) showTableList() { idxCell := tview.NewTableCell(idxStr).SetSelectable(true) tableTable.SetCell(row+1, 5, idxCell) + // GUID - pad to 36 chars + guidStr := fmt.Sprintf("%-36s", table.GUID) + guidCell := tview.NewTableCell(guidStr).SetSelectable(true) + tableTable.SetCell(row+1, 6, guidCell) + // Description - no padding, takes remaining space descCell := tview.NewTableCell(table.Description).SetSelectable(true) - tableTable.SetCell(row+1, 6, descCell) + tableTable.SetCell(row+1, 7, descCell) // Comment - pad to 12 chars commentStr := fmt.Sprintf("%-12s", table.Comment) commentCell := tview.NewTableCell(commentStr).SetSelectable(true) - tableTable.SetCell(row+1, 7, commentCell) + tableTable.SetCell(row+1, 8, commentCell) } tableTable.SetTitle(" All Tables ").SetBorder(true).SetTitleAlign(tview.AlignLeft) @@ -188,8 +193,8 @@ func (se *SchemaEditor) showTableEditor(schemaIndex, tableIndex int, table *mode colTable := tview.NewTable().SetBorders(true).SetSelectable(true, false).SetFixed(1, 0) // Add header row with padding for full width - headers := []string{"Name", "Type", "Default", "KeyType", "Description"} - headerWidths := []int{20, 18, 15, 15} // Last column takes remaining space + headers := []string{"Name", "Type", "Default", "KeyType", "GUID", "Description"} + headerWidths := []int{20, 18, 15, 15, 36} // Last column takes remaining space for i, header := range headers { padding := "" if i < len(headerWidths) { @@ -237,9 +242,14 @@ func (se *SchemaEditor) showTableEditor(schemaIndex, tableIndex int, table *mode keyTypeCell := tview.NewTableCell(keyTypeStr).SetSelectable(true) colTable.SetCell(row+1, 3, keyTypeCell) + // GUID - pad to 36 chars + guidStr := fmt.Sprintf("%-36s", column.GUID) + guidCell := tview.NewTableCell(guidStr).SetSelectable(true) + colTable.SetCell(row+1, 4, guidCell) + // Description descCell := tview.NewTableCell(column.Description).SetSelectable(true) - colTable.SetCell(row+1, 4, descCell) + colTable.SetCell(row+1, 5, descCell) } colTable.SetTitle(" Columns ").SetBorder(true).SetTitleAlign(tview.AlignLeft) @@ -490,6 +500,7 @@ func (se *SchemaEditor) showEditTableDialog(schemaIndex, tableIndex int) { // Local variables to collect changes newName := table.Name newDescription := table.Description + newGUID := table.GUID form.AddInputField("Table Name", table.Name, 40, nil, func(value string) { newName = value @@ -499,9 +510,14 @@ func (se *SchemaEditor) showEditTableDialog(schemaIndex, tableIndex int) { newDescription = value }) + form.AddInputField("GUID", table.GUID, 40, nil, func(value string) { + newGUID = value + }) + form.AddButton("Save", func() { // Apply changes using dataops se.UpdateTable(schemaIndex, tableIndex, newName, newDescription) + se.db.Schemas[schemaIndex].Tables[tableIndex].GUID = newGUID table := se.db.Schemas[schemaIndex].Tables[tableIndex] se.pages.RemovePage("edit-table")