summaryrefslogtreecommitdiff
path: root/interface/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'interface/main.go')
-rw-r--r--interface/main.go103
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) {