Initial giu version, not very good looking, maybe prefer CharmBracelet Tea

This commit is contained in:
Pablu
2025-10-28 19:13:43 +01:00
parent 396b531013
commit e2d39f715f
10 changed files with 313 additions and 56 deletions

24
cmd/sqv-cli/main.go Normal file
View File

@@ -0,0 +1,24 @@
package main
import (
"fmt"
"log"
"os"
engine "git.pablu.de/pablu/sqv-engine"
)
func main() {
file, err := os.ReadFile("test.sql")
if err != nil {
log.Fatal(err)
}
m := engine.NewManagerFromFile(string(file))
err = m.Start()
if err != nil {
log.Fatal(err)
}
fmt.Print(m)
}

93
cmd/sqv-giu/main.go Normal file
View File

@@ -0,0 +1,93 @@
package main
import (
"log"
"os"
engine "git.pablu.de/pablu/sqv-engine"
g "github.com/AllenDang/giu"
)
type Test struct {
tables []engine.Table
enabled []bool
}
func (t *Test) loop() {
tableMenuItems := make([]g.Widget, len(t.tables))
for i, table := range t.tables {
tableMenuItems[i] = g.MenuItem(table.Name).OnClick(func() {
t.enabled[i] = !t.enabled[i]
})
}
g.MainMenuBar().Layout(
g.Menu("Tables").Layout(
tableMenuItems...,
),
).Build()
for i, table := range t.tables {
if t.enabled[i] {
g.Window(table.Name).Layout(
SqlTable(table),
)
}
}
}
func SqlTable(table engine.Table) *g.TableWidget {
tableColumns := make([]*g.TableColumnWidget, 0)
for _, column := range table.Columns {
tableColumns = append(tableColumns, g.TableColumn(column.Name))
}
tableRows := make([]*g.TableRowWidget, 0)
for _, row := range table.Rows {
tableRows = append(tableRows, SqlValueRow(row))
}
return g.Table().Columns(
tableColumns...,
).Rows(tableRows...)
}
func SqlValueRow(row engine.Row) *g.TableRowWidget {
v := make([]g.Widget, 0)
for _, values := range row.Values {
v = append(v, g.Label(values))
}
return g.TableRow(v...)
}
func main() {
wnd := g.NewMasterWindow("SQV", 800, 600, 0)
//nolint:gocritic // should be here for doc
// errMarkers = imgui.NewErrorMarkers()
file, err := os.ReadFile("test.sql")
if err != nil {
log.Fatal(err)
}
m := engine.NewManagerFromFile(string(file))
if err := m.Start(); err != nil {
log.Fatal(err)
}
t := Test{
tables: m.GetTables(),
enabled: make([]bool, len(m.GetTables())),
}
t.tables[2].Rows = []engine.Row{
engine.Row{
Values: []string{
"HELLO", "WORLD", "!",
},
},
}
wnd.Run(t.loop)
}

View File

@@ -1,79 +0,0 @@
package main
import (
"errors"
"fmt"
"io"
"log"
"strings"
"git.pablu.de/pablu/sqv-engine/sql"
)
func main() {
s := `CREATE TABLE TEST(
ID text PRIMARY KEY
);
CREATE TABLE sessions (
session_id text PRIMARY KEY,
access_token text NOT NULL,
user_email text NOT NULL,
FOREIGN KEY(user_email) REFERENCES users(email)
);
CREATE TABLE IF NOT EXISTS users (
email text PRIMARY KEY,
username text
);
CREATE TABLE IF NOT EXISTS sessions (
session_id text PRIMARY KEY,
access_token text NOT NULL,
user_email text NOT NULL,
FOREIGN KEY(user_email) REFERENCES users(email)
);
CREATE TABLE IF NOT EXISTS game_settings (
lobby_id text PRIMARY KEY,
max_players integer,
game_mode text,
selected_playlist_id text
);
CREATE TABLE IF NOT EXISTS lobbys (
lobby_id text PRIMARY KEY,
host_email text,
game_settings_id text,
FOREIGN KEY(game_settings_id) REFERENCES game_settings(lobby_id),
FOREIGN KEY(host_email) REFERENCES users(email)
);
CREATE TABLE IF NOT EXISTS users_in_lobbys (
user_email text PRIMARY KEY,
lobby_id text,
FOREIGN KEY(user_email) REFERENCES users(email),
FOREIGN KEY(lobby_id) REFERENCES lobbys(lobby_id)
);
CREATE TABLE IF NOT EXISTS auth_states (
state_id text PRIMARY KEY,
code_verifier text NOT NULL
);
`
parser := sql.NewParser(strings.NewReader(s))
for {
stmt, err := parser.Parse()
if err != nil && errors.Is(err, io.EOF) {
fmt.Println("Finished parsing")
break
} else if err != nil {
log.Fatal(err)
}
stmt.Print()
fmt.Println()
}
}