diff options
| author | Andrew Guschin <guschin.drew@gmail.com> | 2022-05-30 01:28:19 +0400 |
|---|---|---|
| committer | Andrew Guschin <guschin.drew@gmail.com> | 2022-05-30 01:28:19 +0400 |
| commit | 34b5b0fccfa39885003ea3dcb565c5af5bceb3ed (patch) | |
| tree | c910e52ad719108182fe6eeda57f1d6369bcdc28 /interface/main.go | |
| parent | 30cac6776ffe530892f27c87f7fc26db0f08fd8b (diff) | |
Добавление кода для удаления записей
Diffstat (limited to 'interface/main.go')
| -rw-r--r-- | interface/main.go | 103 |
1 files changed, 73 insertions, 30 deletions
diff --git a/interface/main.go b/interface/main.go index 15a0077..4ff4ae0 100644 --- a/interface/main.go +++ b/interface/main.go @@ -1,6 +1,7 @@ package main import ( + "errors" "fmt" "fyne.io/fyne/v2" "fyne.io/fyne/v2/app" @@ -8,6 +9,7 @@ import ( "fyne.io/fyne/v2/dialog" "fyne.io/fyne/v2/layout" "fyne.io/fyne/v2/widget" + "strings" ) type DBInterface struct { @@ -21,6 +23,27 @@ func genMainView(view fyne.CanvasObject, buttons []fyne.CanvasObject) fyne.Canva nil, container.NewGridWithColumns(len(buttons), buttons...), nil, nil, view) } +func parseQuery(box *fyne.Container) (string, error) { + var query []string + for _, obj := range box.Objects { + constraint := obj.(*fyne.Container).Objects + column := constraint[0].(*widget.Select) + operator := constraint[1].(*widget.Select) + value := constraint[2].(*widget.Entry) + + if column.SelectedIndex() == -1 { + return "", errors.New("В одном из ограничений не выбрана колонка") + } + if operator.SelectedIndex() == -1 { + return "", errors.New("В одном из ограничений не выбран оператор") + } + + query = append(query, + fmt.Sprintf("%s %s '%s'", column.Selected, operator.Selected, value.Text)) + } + return strings.Join(query, " AND "), nil +} + func (app *DBInterface) insertAdminView(table string) { app.window.SetTitle(fmt.Sprintf("Insert into table %s", table)) columns, _ := app.db.getColumns(table) @@ -47,40 +70,60 @@ func (app *DBInterface) insertAdminView(table string) { func (app *DBInterface) deleteAdminView(table string) { app.window.SetTitle(fmt.Sprintf("Delete from table %s", table)) + columns, _ := app.db.getColumns(table) - queryLabel := widget.NewLabel(fmt.Sprintf("DELETE FROM [%s] WHERE", table)) - - var query []fyne.CanvasObject - newConstraintBtn := widget.NewButton("Добавить новое ограничение", func() {}) - updateView := func() { - queryBox := container.NewVBox(queryLabel, container.NewVBox(query...), newConstraintBtn) - deleteBtn := widget.NewButton("Выполнить удаление", func() { + queryBox := container.NewVBox() - }) - backBtn := widget.NewButton("Назад", func() { - app.showAdminTable(table) - }) - app.window.SetContent( - genMainView( - container.NewVScroll(queryBox), - []fyne.CanvasObject{deleteBtn, backBtn})) - } - - columns, _ := app.db.getColumns(table) - newConstraintBtn.OnTapped = func() { - selectBtn := widget.NewSelect(columns, func(value string) { - fmt.Println("Select set to", value) - }) - operatorBtn := widget.NewSelect([]string{"=", "<", "<=", ">=", "LIKE"}, func(value string) { - fmt.Println("Select set to", value) - }) + newConstraintBtn := widget.NewButton("Добавить новое ограничение", func() { + selectBtn := widget.NewSelect(columns, func(value string) {}) + operatorBtn := widget.NewSelect([]string{"=", "<", "<=", ">=", "LIKE"}, func(value string) {}) compareField := widget.NewEntry() - fieldConstraint := container.NewGridWithColumns(3, selectBtn, operatorBtn, compareField) - query = append(query, fieldConstraint) - updateView() - } - updateView() + queryBox.Add(fieldConstraint) + queryBox.Refresh() + }) + + deleteBtn := widget.NewButton("Выполнить удаление", func() { + if len(queryBox.Objects) == 0 { + dialog.ShowInformation( + "Удаление", + "Необходимо указать как минимум одно ограничение", + app.window) + } else { + query, err := parseQuery(queryBox) + if err != nil { + dialog.ShowInformation( + "Удаление", + err.Error(), + app.window) + return + } + err = app.db.deleteWhere(table, query) + if err != nil { + dialog.ShowInformation( + "Удаление", + err.Error(), + app.window) + return + } + + dialog.ShowInformation( + "Удаление", + "Удаление прошло успешно", + app.window) + } + }) + backBtn := widget.NewButton("Назад", func() { + app.showAdminTable(table) + }) + app.window.SetContent( + genMainView( + container.NewVScroll( + container.NewVBox( + widget.NewLabel(fmt.Sprintf("DELETE FROM [%s] WHERE", table)), + queryBox, + newConstraintBtn)), + []fyne.CanvasObject{deleteBtn, backBtn})) } func (app *DBInterface) selectAdminView(table string) { |