Cleanup parser statements, add delete and insert statement, add TASKS.md for tracking tasks

This commit is contained in:
Pablu
2025-12-02 17:06:27 +01:00
parent f6ca16b1f0
commit e07bb9e496
10 changed files with 438 additions and 266 deletions

View File

@@ -126,21 +126,60 @@ func (m *Manager) RunSql(sqlText string) (Table, error) {
return Table{}, err
}
selectStmt, ok := stmt.(*engine.SelectStatement)
if !ok {
switch v := stmt.(type) {
case *engine.SelectStatement:
return m.tableFromSelectStatement(sqlText, v)
case *engine.InsertStatement:
if !slices.ContainsFunc(m.tables, func(t Table) bool {
return v.Table == t.Name
}) {
return Table{}, fmt.Errorf("Table not found")
}
res, err := m.conn.Exec(sqlText)
if err != nil {
return Table{}, err
}
affected, err := res.RowsAffected()
if err != nil {
return Table{}, err
}
return Table{}, fmt.Errorf("Rows affected: %v", affected)
case *engine.DeleteStatement:
if !slices.ContainsFunc(m.tables, func(t Table) bool {
return v.Table == t.Name
}) {
return Table{}, fmt.Errorf("Table not found")
}
res, err := m.conn.Exec(sqlText)
if err != nil {
return Table{}, err
}
affected, err := res.RowsAffected()
if err != nil {
return Table{}, err
}
return Table{}, fmt.Errorf("Rows affected: %v", affected)
default:
return Table{}, fmt.Errorf("Input statement is not of correct Syntax, select statement")
}
}
table, ok := m.GetTable(selectStmt.From)
func (m *Manager) tableFromSelectStatement(sqlText string, stmt *engine.SelectStatement) (Table, error) {
table, ok := m.GetTable(stmt.From)
if !ok {
return Table{}, fmt.Errorf("Selected Table does not exist, have you perhaps misstyped the table Name?")
}
fields := make([]Column, 0)
if slices.Contains(selectStmt.Fields, "*") {
if slices.Contains(stmt.Fields, "*") {
fields = table.Columns
} else {
for _, columnName := range selectStmt.Fields {
for _, columnName := range stmt.Fields {
index := slices.IndexFunc(table.Columns, func(c Column) bool {
if c.Name == columnName {
return true
@@ -153,7 +192,7 @@ func (m *Manager) RunSql(sqlText string) (Table, error) {
}
table.Columns = fields
err = m.loadTableRaw(&table, fields, sqlText)
err := m.loadTableRaw(&table, fields, sqlText)
if err != nil {
return Table{}, err
}