34 lines
758 B
Go
34 lines
758 B
Go
package build
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"sort"
|
|
"strings"
|
|
|
|
"git.secnex.io/secnex/pgson/schema"
|
|
"git.secnex.io/secnex/pgson/sql"
|
|
)
|
|
|
|
func Insert(s *schema.Table, data map[string]any) (*string, error) {
|
|
cols := []string{}
|
|
values := []string{}
|
|
// Keys of the data map
|
|
keys := make([]string, 0, len(data))
|
|
for k := range data {
|
|
keys = append(keys, k)
|
|
}
|
|
sort.Strings(keys)
|
|
for _, k := range keys {
|
|
if err := sql.ValidateIdent(k); err != nil {
|
|
log.Printf("Invalid column identifier: %s", k)
|
|
return nil, err
|
|
}
|
|
cols = append(cols, sql.QuoteIdent(k))
|
|
values = append(values, sql.QuoteValue(data[k]))
|
|
}
|
|
ddl := fmt.Sprintf(sql.DML_INSERT_INTO, sql.QuoteIdent(s.Name), strings.Join(cols, ", "), strings.Join(values, ", "))
|
|
|
|
return &ddl, nil
|
|
}
|