diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 96242eb..40e1e0d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,7 +15,7 @@ jobs: uses: actions/setup-go@v5 - name: Golangci-lint - uses: golangci/golangci-lint-action@v6.0.1 + uses: golangci/golangci-lint-action@v6 - name: Test run: go test -v ./... diff --git a/.golangci.yml b/.golangci.yml index 19268fb..af15e71 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -105,6 +105,10 @@ linters-settings: # report when replacing `errors.New(fmt.Sprintf())` with `fmt.Errorf()` is possible - name: errorf + # enforces conventions on source file names + - name: filename-format + arguments: ["^[_a-z][_a-z0-9]*\\.go$"] + # incrementing an integer variable by 1 is recommended to be done using the `++` operator - name: increment-decrement @@ -140,6 +144,7 @@ linters-settings: # warns when initialism, variable or package naming conventions are not followed. - name: var-naming + arguments: [[], ["DB", "DML"]] # if-then-else conditional with identical implementations in both branches is an error. - name: identical-branches diff --git a/app/App.go b/app/app.go similarity index 100% rename from app/App.go rename to app/app.go diff --git a/app/Keymap.go b/app/keymap.go similarity index 100% rename from app/Keymap.go rename to app/keymap.go diff --git a/components/ArgConnection.go b/components/arg_connection.go similarity index 81% rename from components/ArgConnection.go rename to components/arg_connection.go index 554707c..cf9351e 100644 --- a/components/ArgConnection.go +++ b/components/arg_connection.go @@ -26,20 +26,22 @@ func InitFromArg(connectionString string) error { DBName: DBName, URL: connectionString, } - var newDbDriver drivers.Driver + + var newDBDriver drivers.Driver switch connection.Provider { case drivers.DriverMySQL: - newDbDriver = &drivers.MySQL{} + newDBDriver = &drivers.MySQL{} case drivers.DriverPostgres: - newDbDriver = &drivers.Postgres{} + newDBDriver = &drivers.Postgres{} case drivers.DriverSqlite: - newDbDriver = &drivers.SQLite{} + newDBDriver = &drivers.SQLite{} } - err = newDbDriver.Connect(connection.URL) + err = newDBDriver.Connect(connection.URL) if err != nil { return fmt.Errorf("Could not connect to database %s: %s", connectionString, err) } - MainPages.AddAndSwitchToPage(connection.URL, NewHomePage(connection, newDbDriver).Flex, true) + MainPages.AddAndSwitchToPage(connection.URL, NewHomePage(connection, newDBDriver).Flex, true) + return nil } diff --git a/components/ConfirmationModal.go b/components/confirmation_modal.go similarity index 100% rename from components/ConfirmationModal.go rename to components/confirmation_modal.go diff --git a/components/ConnectionForm.go b/components/connection_form.go similarity index 100% rename from components/ConnectionForm.go rename to components/connection_form.go diff --git a/components/ConnectionPage.go b/components/connection_page.go similarity index 100% rename from components/ConnectionPage.go rename to components/connection_page.go diff --git a/components/ConnectionSelection.go b/components/connection_selection.go similarity index 100% rename from components/ConnectionSelection.go rename to components/connection_selection.go diff --git a/components/ConnectionsTable.go b/components/connections_table.go similarity index 100% rename from components/ConnectionsTable.go rename to components/connections_table.go diff --git a/components/HelpModal.go b/components/help_modal.go similarity index 100% rename from components/HelpModal.go rename to components/help_modal.go diff --git a/components/HelpStatus.go b/components/help_status.go similarity index 100% rename from components/HelpStatus.go rename to components/help_status.go diff --git a/components/Home.go b/components/home.go similarity index 98% rename from components/Home.go rename to components/home.go index a355ffe..5c6c1ce 100644 --- a/components/Home.go +++ b/components/home.go @@ -23,7 +23,7 @@ type Home struct { HelpModal *HelpModal DBDriver drivers.Driver FocusedWrapper string - ListOfDBChanges []models.DbDmlChange + ListOfDBChanges []models.DBDMLChange } func NewHomePage(connection models.Connection, dbdriver drivers.Driver) *Home { @@ -43,7 +43,7 @@ func NewHomePage(connection models.Connection, dbdriver drivers.Driver) *Home { HelpStatus: NewHelpStatus(), HelpModal: NewHelpModal(), DBDriver: dbdriver, - ListOfDBChanges: []models.DbDmlChange{}, + ListOfDBChanges: []models.DBDMLChange{}, } go home.subscribeToTreeChanges() @@ -317,7 +317,7 @@ func (home *Home) homeInputCapture(event *tcell.EventKey) *tcell.EventKey { if err != nil { table.SetError(err.Error(), nil) } else { - home.ListOfDBChanges = []models.DbDmlChange{} + home.ListOfDBChanges = []models.DBDMLChange{} table.FetchRecords(nil) home.Tree.ForceRemoveHighlight() diff --git a/components/Pages.go b/components/pages.go similarity index 100% rename from components/Pages.go rename to components/pages.go diff --git a/components/Pagination.go b/components/pagination.go similarity index 100% rename from components/Pagination.go rename to components/pagination.go diff --git a/components/ResultTableFilter.go b/components/result_table_filter.go similarity index 100% rename from components/ResultTableFilter.go rename to components/result_table_filter.go diff --git a/components/ResultsTable.go b/components/results_table.go similarity index 93% rename from components/ResultsTable.go rename to components/results_table.go index 22cc33b..ffa11bd 100644 --- a/components/ResultsTable.go +++ b/components/results_table.go @@ -18,7 +18,7 @@ import ( ) type ResultsTableState struct { - listOfDbChanges *[]models.DbDmlChange + listOfDBChanges *[]models.DBDMLChange error string currentSort string databaseName string @@ -53,7 +53,7 @@ type ResultsTable struct { DBDriver drivers.Driver } -func NewResultsTable(listOfDbChanges *[]models.DbDmlChange, tree *Tree, dbdriver drivers.Driver) *ResultsTable { +func NewResultsTable(listOfDBChanges *[]models.DBDMLChange, tree *Tree, dbdriver drivers.Driver) *ResultsTable { state := &ResultsTableState{ records: [][]string{}, columns: [][]string{}, @@ -62,7 +62,7 @@ func NewResultsTable(listOfDbChanges *[]models.DbDmlChange, tree *Tree, dbdriver indexes: [][]string{}, isEditing: false, isLoading: false, - listOfDbChanges: listOfDbChanges, + listOfDBChanges: listOfDBChanges, showSidebar: false, } @@ -231,7 +231,7 @@ func (table *ResultsTable) subscribeToSidebarChanges() { } logger.Info("eventSidebarCommitEditing", map[string]any{"cellValue": cellValue, "params": params, "rowIndex": row, "changedColumnIndex": changedColumnIndex}) - table.AppendNewChange(models.DmlUpdateType, row, changedColumnIndex, cellValue) + table.AppendNewChange(models.DMLUpdateType, row, changedColumnIndex, cellValue) App.ForceDraw() case eventSidebarError: @@ -262,10 +262,10 @@ func (table *ResultsTable) AddRows(rows [][]string) { } func (table *ResultsTable) AddInsertedRows() { - inserts := make([]models.DbDmlChange, 0) + inserts := make([]models.DBDMLChange, 0) - for _, change := range *table.state.listOfDbChanges { - if change.Type == models.DmlInsertType { + for _, change := range *table.state.listOfDBChanges { + if change.Type == models.DMLInsertType { inserts = append(inserts, change) } } @@ -418,7 +418,7 @@ func (table *ResultsTable) tableInputCapture(event *tcell.EventKey) *tcell.Event isAnInsertedRow := false indexOfInsertedRow := -1 - for i, insertedRow := range *table.state.listOfDbChanges { + for i, insertedRow := range *table.state.listOfDBChanges { cellReference := table.GetCell(selectedRowIndex, 0).GetReference() if cellReference != nil && insertedRow.PrimaryKeyInfo[0].Value == cellReference { @@ -428,7 +428,7 @@ func (table *ResultsTable) tableInputCapture(event *tcell.EventKey) *tcell.Event } if isAnInsertedRow { - *table.state.listOfDbChanges = append((*table.state.listOfDbChanges)[:indexOfInsertedRow], (*table.state.listOfDbChanges)[indexOfInsertedRow+1:]...) + *table.state.listOfDBChanges = append((*table.state.listOfDBChanges)[:indexOfInsertedRow], (*table.state.listOfDBChanges)[indexOfInsertedRow+1:]...) table.RemoveRow(selectedRowIndex) if selectedRowIndex-1 != 0 { table.Select(selectedRowIndex-1, 0) @@ -438,7 +438,7 @@ func (table *ResultsTable) tableInputCapture(event *tcell.EventKey) *tcell.Event } } } else { - table.AppendNewChange(models.DmlDeleteType, selectedRowIndex, -1, models.CellValue{}) + table.AppendNewChange(models.DMLDeleteType, selectedRowIndex, -1, models.CellValue{}) } } @@ -455,7 +455,7 @@ func (table *ResultsTable) tableInputCapture(event *tcell.EventKey) *tcell.Event table.FinishSettingValue() if selection >= 0 { - table.AppendNewChange(models.DmlUpdateType, selectedRowIndex, selectedColumnIndex, models.CellValue{Type: selection, Value: value, Column: table.GetColumnNameByIndex(selectedColumnIndex)}) + table.AppendNewChange(models.DMLUpdateType, selectedRowIndex, selectedColumnIndex, models.CellValue{Type: selection, Value: value, Column: table.GetColumnNameByIndex(selectedColumnIndex)}) } }) @@ -967,7 +967,7 @@ func (table *ResultsTable) StartEditingCell(row int, col int, callback func(newV cell.SetText(newValue) if currentValue != newValue { - table.AppendNewChange(models.DmlUpdateType, row, col, models.CellValue{Type: models.String, Value: newValue, Column: columnName, TableColumnIndex: col, TableRowIndex: row}) + table.AppendNewChange(models.DMLUpdateType, row, col, models.CellValue{Type: models.String, Value: newValue, Column: columnName, TableColumnIndex: col, TableRowIndex: row}) } switch key { @@ -1011,8 +1011,8 @@ func (table *ResultsTable) StartEditingCell(row int, col int, callback func(newV } func (table *ResultsTable) CheckIfRowIsInserted(rowID string) bool { - for _, dmlChange := range *table.state.listOfDbChanges { - if dmlChange.Type == models.DmlInsertType && dmlChange.PrimaryKeyInfo[0].Value == rowID { + for _, dmlChange := range *table.state.listOfDBChanges { + if dmlChange.Type == models.DMLInsertType && dmlChange.PrimaryKeyInfo[0].Value == rowID { return true } } @@ -1021,11 +1021,11 @@ func (table *ResultsTable) CheckIfRowIsInserted(rowID string) bool { } func (table *ResultsTable) MutateInsertedRowCell(rowID string, newValue models.CellValue) { - for i, dmlChange := range *table.state.listOfDbChanges { - if dmlChange.PrimaryKeyInfo[0].Value == rowID && dmlChange.Type == models.DmlInsertType { + for i, dmlChange := range *table.state.listOfDBChanges { + if dmlChange.PrimaryKeyInfo[0].Value == rowID && dmlChange.Type == models.DMLInsertType { for j, v := range dmlChange.Values { if v.Column == newValue.Column { - (*table.state.listOfDbChanges)[i].Values[j] = newValue + (*table.state.listOfDBChanges)[i].Values[j] = newValue break } } @@ -1033,7 +1033,7 @@ func (table *ResultsTable) MutateInsertedRowCell(rowID string, newValue models.C } } -func (table *ResultsTable) AppendNewChange(changeType models.DmlType, rowIndex int, colIndex int, value models.CellValue) { +func (table *ResultsTable) AppendNewChange(changeType models.DMLType, rowIndex int, colIndex int, value models.CellValue) { databaseName := table.GetDatabaseName() tableName := table.GetTableName() @@ -1058,7 +1058,7 @@ func (table *ResultsTable) AppendNewChange(changeType models.DmlType, rowIndex i return } - if changeType == models.DmlUpdateType { + if changeType == models.DMLUpdateType { switch value.Type { case models.Null, models.Empty, models.Default: tableCell.SetText(value.Value.(string)) @@ -1067,7 +1067,7 @@ func (table *ResultsTable) AppendNewChange(changeType models.DmlType, rowIndex i } } - for i, dmlChange := range *table.state.listOfDbChanges { + for i, dmlChange := range *table.state.listOfDBChanges { changeExistOnSameCell := false for _, value := range dmlChange.Values { @@ -1092,27 +1092,27 @@ func (table *ResultsTable) AppendNewChange(changeType models.DmlType, rowIndex i } switch changeType { - case models.DmlUpdateType: + case models.DMLUpdateType: originalValue := table.GetRecords()[rowIndex][colIndex] if changeForColExists { if originalValue == value.Value { - if len((*table.state.listOfDbChanges)[i].Values) == 1 { - *table.state.listOfDbChanges = append((*table.state.listOfDbChanges)[:i], (*table.state.listOfDbChanges)[i+1:]...) + if len((*table.state.listOfDBChanges)[i].Values) == 1 { + *table.state.listOfDBChanges = append((*table.state.listOfDBChanges)[:i], (*table.state.listOfDBChanges)[i+1:]...) } else { - (*table.state.listOfDbChanges)[i].Values = append((*table.state.listOfDbChanges)[i].Values[:valueIndex], (*table.state.listOfDbChanges)[i].Values[valueIndex+1:]...) + (*table.state.listOfDBChanges)[i].Values = append((*table.state.listOfDBChanges)[i].Values[:valueIndex], (*table.state.listOfDBChanges)[i].Values[valueIndex+1:]...) } table.SetCellColor(rowIndex, colIndex, app.Styles.PrimitiveBackgroundColor) } else { - (*table.state.listOfDbChanges)[i].Values[valueIndex] = value + (*table.state.listOfDBChanges)[i].Values[valueIndex] = value } } else { - (*table.state.listOfDbChanges)[i].Values = append((*table.state.listOfDbChanges)[i].Values, value) + (*table.state.listOfDBChanges)[i].Values = append((*table.state.listOfDBChanges)[i].Values, value) table.SetCellColor(rowIndex, colIndex, colorTableChange) } - case models.DmlDeleteType: - *table.state.listOfDbChanges = append((*table.state.listOfDbChanges)[:i], (*table.state.listOfDbChanges)[i+1:]...) + case models.DMLDeleteType: + *table.state.listOfDBChanges = append((*table.state.listOfDBChanges)[:i], (*table.state.listOfDBChanges)[i+1:]...) table.SetRowColor(rowIndex, app.Styles.PrimitiveBackgroundColor) } } @@ -1121,14 +1121,14 @@ func (table *ResultsTable) AppendNewChange(changeType models.DmlType, rowIndex i if !dmlChangeAlreadyExists { switch changeType { - case models.DmlDeleteType: + case models.DMLDeleteType: table.SetRowColor(rowIndex, colorTableDelete) - case models.DmlUpdateType: + case models.DMLUpdateType: tableCell.SetStyle(tcell.StyleDefault.Background(colorTableChange)) table.SetCellColor(rowIndex, colIndex, colorTableChange) } - newDmlChange := models.DbDmlChange{ + newDMLChange := models.DBDMLChange{ Type: changeType, Database: databaseName, Table: tableName, @@ -1136,11 +1136,11 @@ func (table *ResultsTable) AppendNewChange(changeType models.DmlType, rowIndex i PrimaryKeyInfo: rowPrimaryKeyInfo, } - *table.state.listOfDbChanges = append(*table.state.listOfDbChanges, newDmlChange) + *table.state.listOfDBChanges = append(*table.state.listOfDBChanges, newDMLChange) } - logger.Info("AppendNewChange", map[string]any{"listOfDbChanges": *table.state.listOfDbChanges}) + logger.Info("AppendNewChange", map[string]any{"listOfDbChanges": *table.state.listOfDBChanges}) } func (table *ResultsTable) GetPrimaryKeyValue(rowIndex int) []models.PrimaryKeyInfo { @@ -1179,15 +1179,15 @@ func (table *ResultsTable) appendNewRow() { } } - newInsert := models.DbDmlChange{ - Type: models.DmlInsertType, + newInsert := models.DBDMLChange{ + Type: models.DMLInsertType, Database: table.GetDatabaseName(), Table: table.GetTableName(), Values: newRow, PrimaryKeyInfo: []models.PrimaryKeyInfo{{Name: "", Value: newRowUUID}}, } - *table.state.listOfDbChanges = append(*table.state.listOfDbChanges, newInsert) + *table.state.listOfDBChanges = append(*table.state.listOfDBChanges, newInsert) table.AppendNewRow(newRow, newRowTableIndex, newRowUUID) @@ -1353,8 +1353,8 @@ func (table *ResultsTable) UpdateSidebar() { pendingEditExist := false - for _, dmlChange := range *table.state.listOfDbChanges { - if dmlChange.Type == models.DmlUpdateType { + for _, dmlChange := range *table.state.listOfDBChanges { + if dmlChange.Type == models.DMLUpdateType { for _, v := range dmlChange.Values { if v.Column == name && v.TableRowIndex == selectedRow && v.TableColumnIndex == i-1 { pendingEditExist = true diff --git a/components/ResultsTableMenu.go b/components/results_table_menu.go similarity index 100% rename from components/ResultsTableMenu.go rename to components/results_table_menu.go diff --git a/components/SetValueList.go b/components/set_value_list.go similarity index 100% rename from components/SetValueList.go rename to components/set_value_list.go diff --git a/components/Sidebar.go b/components/sidebar.go similarity index 100% rename from components/Sidebar.go rename to components/sidebar.go diff --git a/components/SQLEditor.go b/components/sql_editor.go similarity index 100% rename from components/SQLEditor.go rename to components/sql_editor.go diff --git a/components/TabbedMenu.go b/components/tabbed_menu.go similarity index 100% rename from components/TabbedMenu.go rename to components/tabbed_menu.go diff --git a/components/Tree.go b/components/tree.go similarity index 100% rename from components/Tree.go rename to components/tree.go diff --git a/drivers/driver.go b/drivers/driver.go index 207aa56..36cdae6 100644 --- a/drivers/driver.go +++ b/drivers/driver.go @@ -18,7 +18,7 @@ type Driver interface { DeleteRecord(database, table string, primaryKeyColumnName, primaryKeyValue string) error ExecuteDMLStatement(query string) (string, error) ExecuteQuery(query string) ([][]string, error) - ExecutePendingChanges(changes []models.DbDmlChange) error + ExecutePendingChanges(changes []models.DBDMLChange) error SetProvider(provider string) // NOTE: This is used to get the primary key from the database table until i find a better way to do it. See ResultsTable.go GetPrimaryKeyValue function GetProvider() string GetPrimaryKeyColumnNames(database, table string) ([]string, error) diff --git a/drivers/mysql.go b/drivers/mysql.go index 7eaa752..bf5cf51 100644 --- a/drivers/mysql.go +++ b/drivers/mysql.go @@ -448,7 +448,7 @@ func (db *MySQL) ExecuteDMLStatement(query string) (result string, err error) { return fmt.Sprintf("%d rows affected", rowsAffected), nil } -func (db *MySQL) ExecutePendingChanges(changes []models.DbDmlChange) (err error) { +func (db *MySQL) ExecutePendingChanges(changes []models.DBDMLChange) (err error) { var queries []models.Query for _, change := range changes { @@ -479,7 +479,7 @@ func (db *MySQL) ExecutePendingChanges(changes []models.DbDmlChange) (err error) } switch change.Type { - case models.DmlInsertType: + case models.DMLInsertType: queryStr := "INSERT INTO " queryStr += db.formatTableName(change.Database, change.Table) queryStr += fmt.Sprintf(" (%s) VALUES (%s)", strings.Join(columnNames, ", "), strings.Join(valuesPlaceholder, ", ")) @@ -490,7 +490,7 @@ func (db *MySQL) ExecutePendingChanges(changes []models.DbDmlChange) (err error) } queries = append(queries, newQuery) - case models.DmlUpdateType: + case models.DMLUpdateType: queryStr := "UPDATE " queryStr += db.formatTableName(change.Database, change.Table) @@ -521,7 +521,7 @@ func (db *MySQL) ExecutePendingChanges(changes []models.DbDmlChange) (err error) } queries = append(queries, newQuery) - case models.DmlDeleteType: + case models.DMLDeleteType: queryStr := "DELETE FROM " queryStr += db.formatTableName(change.Database, change.Table) diff --git a/drivers/postgres.go b/drivers/postgres.go index 466bddb..d4a28a3 100644 --- a/drivers/postgres.go +++ b/drivers/postgres.go @@ -735,7 +735,7 @@ func (db *Postgres) ExecuteQuery(query string) (results [][]string, err error) { return } -func (db *Postgres) ExecutePendingChanges(changes []models.DbDmlChange) (err error) { +func (db *Postgres) ExecutePendingChanges(changes []models.DBDMLChange) (err error) { var queries []models.Query for _, change := range changes { @@ -776,7 +776,7 @@ func (db *Postgres) ExecutePendingChanges(changes []models.DbDmlChange) (err err switch change.Type { - case models.DmlInsertType: + case models.DMLInsertType: queryStr := "INSERT INTO " + formattedTableName queryStr += fmt.Sprintf(" (%s) VALUES (%s)", strings.Join(columnNames, ", "), strings.Join(valuesPlaceholder, ", ")) @@ -787,7 +787,7 @@ func (db *Postgres) ExecutePendingChanges(changes []models.DbDmlChange) (err err } queries = append(queries, newQuery) - case models.DmlUpdateType: + case models.DMLUpdateType: queryStr := "UPDATE " + formattedTableName for i, column := range columnNames { @@ -826,7 +826,7 @@ func (db *Postgres) ExecutePendingChanges(changes []models.DbDmlChange) (err err } queries = append(queries, newQuery) - case models.DmlDeleteType: + case models.DMLDeleteType: queryStr := "DELETE FROM " + formattedTableName args := make([]interface{}, len(change.PrimaryKeyInfo)) diff --git a/drivers/sqlite.go b/drivers/sqlite.go index e6147b0..9a677d2 100644 --- a/drivers/sqlite.go +++ b/drivers/sqlite.go @@ -477,7 +477,7 @@ func (db *SQLite) ExecuteDMLStatement(query string) (result string, err error) { return fmt.Sprintf("%d rows affected", rowsAffected), nil } -func (db *SQLite) ExecutePendingChanges(changes []models.DbDmlChange) (err error) { +func (db *SQLite) ExecutePendingChanges(changes []models.DBDMLChange) (err error) { var queries []models.Query for _, change := range changes { @@ -486,7 +486,7 @@ func (db *SQLite) ExecutePendingChanges(changes []models.DbDmlChange) (err error valuesPlaceholder := []string{} switch change.Type { - case models.DmlInsertType: + case models.DMLInsertType: for _, cell := range change.Values { switch cell.Type { case models.Null: @@ -517,7 +517,7 @@ func (db *SQLite) ExecutePendingChanges(changes []models.DbDmlChange) (err error } queries = append(queries, newQuery) - case models.DmlUpdateType: + case models.DMLUpdateType: for _, cell := range change.Values { switch cell.Type { @@ -570,7 +570,7 @@ func (db *SQLite) ExecutePendingChanges(changes []models.DbDmlChange) (err error } queries = append(queries, newQuery) - case models.DmlDeleteType: + case models.DMLDeleteType: queryStr := "DELETE FROM " queryStr += db.formatTableName(change.Table) diff --git a/models/models.go b/models/models.go index be3f57c..8aff0c8 100644 --- a/models/models.go +++ b/models/models.go @@ -29,7 +29,7 @@ type ConnectionPages struct { type ( CellValueType int8 - DmlType int8 + DMLType int8 ) // This is not a direct map of the database types, but rather a way to represent them in the UI. @@ -51,9 +51,9 @@ type CellValue struct { } const ( - DmlUpdateType DmlType = iota - DmlDeleteType - DmlInsertType + DMLUpdateType DMLType = iota + DMLDeleteType + DMLInsertType ) type PrimaryKeyInfo struct { @@ -65,12 +65,12 @@ func (pki PrimaryKeyInfo) Equal(other PrimaryKeyInfo) bool { return pki.Name == other.Name && pki.Value == other.Value } -type DbDmlChange struct { +type DBDMLChange struct { Database string Table string PrimaryKeyInfo []PrimaryKeyInfo Values []CellValue - Type DmlType + Type DMLType } type DatabaseTableColumn struct {