Cleanup parser statements, add delete and insert statement, add TASKS.md for tracking tasks
This commit is contained in:
51
manager.go
51
manager.go
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user