func InsertQuery(ctx context.Context, db *sqlx.DB, builder *BuilderInsert) (sql.Result, error) {
var (
regex *regexp.Regexp = regexp.MustCompile(`[,]+$`)
fields string = regex.ReplaceAllString(strings.Join(builder.Fields, ","), "")
values string = regex.ReplaceAllString(strings.Repeat("?,", len(builder.Fields)), "")
args []interface{} = []interface{}{}
mutex *sync.RWMutex = &sync.RWMutex{}
)
query := "INSERT INTO " + builder.Table + " (" + fields + ") " + "VALUES (" + values + ")"
query = db.Rebind(query)
for _, v := range builder.Args {
mutex.Lock()
args = append(args, v)
mutex.Unlock()
}
stmt, err := db.PrepareContext(ctx, query)
if err != nil {
return nil, err
}
result, err := stmt.ExecContext(ctx, args...)
if err != nil {
return nil, err
}
return result, err
}
func UpdateQuery(ctx context.Context, db *sqlx.DB, builder *BuilderUpdate) (sql.Result, error) {
var (
regex *regexp.Regexp = regexp.MustCompile(`[,]+$`)
args []interface{} = []interface{}{}
assigns []string = []string{}
mutex *sync.RWMutex = &sync.RWMutex{}
)
for _, v := range builder.Fields {
mutex.Lock()
assigns = append(assigns, regex.ReplaceAllLiteralString(v, "")+"="+"?")
mutex.Unlock()
}
query := "UPDATE " + builder.Table + " SET " + regex.ReplaceAllString(strings.Join(assigns, ","), "")
query = db.Rebind(query + " " + builder.Query)
fmt.Println(query)
for _, v := range builder.Args {
mutex.Lock()
args = append(args, v)
mutex.Unlock()
}
stmt, err := db.Prepare(query)
if err != nil {
return nil, err
}
result, err := stmt.Exec(args...)
if err != nil {
return nil, err
}
return result, nil
}
func QueryRow(ctx context.Context, db *sqlx.DB, builder *BuilderSelect) (*sql.Row, error) {
var (
regex *regexp.Regexp = regexp.MustCompile(`[,]+$`)
fields string = regex.ReplaceAllString(strings.Join(builder.Fields, ","), "")
args []interface{} = []interface{}{}
mutex *sync.RWMutex = &sync.RWMutex{}
)
query := "SELECT " + fields + " FROM " + builder.Table + " " + builder.Query
query = db.Rebind(query)
for _, v := range builder.Args {
mutex.Lock()
args = append(args, regex.ReplaceAllLiteralString(v, ""))
mutex.Unlock()
}
stmt, err := db.Prepare(query)
if err != nil {
return nil, err
}
row := stmt.QueryRowContext(ctx, args...)
return row, nil
}