package core import ( "fmt" "strings" ) func GetEnvs(db DB, source string) ([]string, error) { rows, err := db.Query(` select name, value from envs where source = ? `, source) if err != nil { return nil, err } defer rows.Close() var envs []string for rows.Next() { var name string var value string if err := rows.Scan(&name, &value); err != nil { return nil, err } envs = append(envs, fmt.Sprintf("%s=%s", name, value)) } if err := rows.Err(); err != nil { return nil, err } return envs, nil } func SetEnvs(db DB, source string, envs []string) error { return db.Transact(func(tx DB) error { for _, env := range envs { parts := strings.SplitN(env, "=", 2) if len(parts) != 2 { return fmt.Errorf("invalid env format: %s", env) } if parts[1] == "" { _, err := tx.Exec(` delete from envs where source = ? and name = ? `, source, parts[0]) if err != nil { return fmt.Errorf("failed to clear source %s env %s: %v", source, parts[0], err) } } else { _, err := tx.Exec(` insert into envs (source, name, value) values (?, ?, ?) `, source, parts[0], parts[1]) if err != nil { return fmt.Errorf("failed to set source %s env %s = %s: %v", source, parts[0], parts[1], err) } } } return nil }) }