|
|
|
|
|
|
|
|
|
package db |
|
|
|
import ( |
|
"context" |
|
"database/sql" |
|
"regexp" |
|
"strings" |
|
) |
|
|
|
|
|
func CommonQuery(db *sql.DB, query string, args ...interface{}) ([]map[string]interface{}, error) { |
|
|
|
rs, err := db.Query(query, args...) |
|
|
|
if err != nil { |
|
panic(err) |
|
} |
|
|
|
defer func() { |
|
if rs != nil { |
|
_ = rs.Close() |
|
} |
|
}() |
|
|
|
col, colErr := rs.Columns() |
|
|
|
if colErr != nil { |
|
return nil, colErr |
|
} |
|
|
|
typeVal, err := rs.ColumnTypes() |
|
if err != nil { |
|
return nil, err |
|
} |
|
|
|
|
|
|
|
results := make([]map[string]interface{}, 0) |
|
|
|
r, _ := regexp.Compile(`\\((.*)\\)`) |
|
for rs.Next() { |
|
var colVar = make([]interface{}, len(col)) |
|
for i := 0; i < len(col); i++ { |
|
typeName := strings.ToUpper(r.ReplaceAllString(typeVal[i].DatabaseTypeName(), "")) |
|
SetColVarType(&colVar, i, typeName) |
|
} |
|
result := make(map[string]interface{}) |
|
if scanErr := rs.Scan(colVar...); scanErr != nil { |
|
return nil, scanErr |
|
} |
|
for j := 0; j < len(col); j++ { |
|
typeName := strings.ToUpper(r.ReplaceAllString(typeVal[j].DatabaseTypeName(), "")) |
|
SetResultValue(&result, col[j], colVar[j], typeName) |
|
} |
|
results = append(results, result) |
|
} |
|
if err := rs.Err(); err != nil { |
|
return nil, err |
|
} |
|
return results, nil |
|
} |
|
|
|
|
|
func CommonExec(db *sql.DB, query string, args ...interface{}) (sql.Result, error) { |
|
|
|
rs, err := db.Exec(query, args...) |
|
if err != nil { |
|
return nil, err |
|
} |
|
return rs, nil |
|
} |
|
|
|
|
|
func CommonQueryWithTx(tx *sql.Tx, query string, args ...interface{}) ([]map[string]interface{}, error) { |
|
|
|
rs, err := tx.Query(query, args...) |
|
|
|
if err != nil { |
|
panic(err) |
|
} |
|
|
|
defer func() { |
|
if rs != nil { |
|
_ = rs.Close() |
|
} |
|
}() |
|
|
|
col, colErr := rs.Columns() |
|
|
|
if colErr != nil { |
|
return nil, colErr |
|
} |
|
|
|
typeVal, err := rs.ColumnTypes() |
|
if err != nil { |
|
return nil, err |
|
} |
|
|
|
|
|
|
|
results := make([]map[string]interface{}, 0) |
|
|
|
r, _ := regexp.Compile(`\\((.*)\\)`) |
|
for rs.Next() { |
|
var colVar = make([]interface{}, len(col)) |
|
for i := 0; i < len(col); i++ { |
|
typeName := strings.ToUpper(r.ReplaceAllString(typeVal[i].DatabaseTypeName(), "")) |
|
SetColVarType(&colVar, i, typeName) |
|
} |
|
result := make(map[string]interface{}) |
|
if scanErr := rs.Scan(colVar...); scanErr != nil { |
|
return nil, scanErr |
|
} |
|
for j := 0; j < len(col); j++ { |
|
typeName := strings.ToUpper(r.ReplaceAllString(typeVal[j].DatabaseTypeName(), "")) |
|
SetResultValue(&result, col[j], colVar[j], typeName) |
|
} |
|
results = append(results, result) |
|
} |
|
if err := rs.Err(); err != nil { |
|
return nil, err |
|
} |
|
return results, nil |
|
} |
|
|
|
|
|
func CommonExecWithTx(tx *sql.Tx, query string, args ...interface{}) (sql.Result, error) { |
|
rs, err := tx.Exec(query, args...) |
|
if err != nil { |
|
return nil, err |
|
} |
|
return rs, nil |
|
} |
|
|
|
|
|
func CommonBeginTxWithLevel(db *sql.DB, level sql.IsolationLevel) *sql.Tx { |
|
tx, err := db.BeginTx(context.Background(), &sql.TxOptions{Isolation: level}) |
|
if err != nil { |
|
panic(err) |
|
} |
|
return tx |
|
} |
|
|