Files
workspace/code/allapp/allapp-go-v3/pkg/db/select.go
T
2026-04-17 17:25:15 +08:00

99 lines
1.7 KiB
Go

package db
import (
"allapp-go/pkg/logger"
"context"
"fmt"
"strings"
"go.uber.org/zap"
)
func (c *Client) LoadData(
ctx context.Context,
viewName string,
searchCondition string,
orderBy string,
searchColumns []string,
args []any,
) ([]map[string]any, error) {
selectCols := "*"
if len(searchColumns) > 0 {
selectCols = strings.Join(searchColumns, ", ")
}
where := ""
if searchCondition != "" {
where = " WHERE " + searchCondition
}
order := ""
if orderBy != "" {
order = " ORDER BY " + orderBy
}
sql := fmt.Sprintf("SELECT %s FROM %s%s%s",
selectCols,
viewName,
where,
order,
)
logger.FromCtx(ctx).Info("LoadData",
zap.String("sql", sql),
zap.Any("args", args),
)
return c.query(ctx, sql, args...)
}
func (c *Client) LoadDataBySQL(
ctx context.Context,
sql string,
args []any,
) ([]map[string]any, error) {
logger.FromCtx(ctx).Info("LoadDataBySQL",
zap.String("sql", sql),
zap.Any("args", args),
)
return c.query(ctx, sql, args...)
}
// ==========================
// 核心查询方法(已升级)
// ==========================
func (c *Client) query(ctx context.Context, sql string, args ...any) ([]map[string]any, error) {
sql = convertPlaceholder(sql)
rows, err := c.exec().Query(ctx, sql, args...)
if err != nil {
return nil, err
}
defer rows.Close()
// 获取字段名
fields := rows.FieldDescriptions()
result := make([]map[string]any, 0, 16)
for rows.Next() {
values, err := rows.Values()
if err != nil {
return nil, err
}
row := make(map[string]any, len(values))
for i, f := range fields {
if i < len(values) {
row[string(f.Name)] = values[i]
}
}
result = append(result, row)
}
return result, rows.Err()
}