package db import ( "context" "fmt" "strings" ) func (c *Client) LoadData( ctx context.Context, viewName string, searchCondition string, orderBy string, searchColumns []string, args []any, ) ([]map[string]any, error) { var where string // WHERE 构造 if searchCondition != "" && len(searchColumns) > 0 { var conditions []string for _, col := range searchColumns { conditions = append(conditions, fmt.Sprintf("%s LIKE ?", col)) } where = " WHERE (" + strings.Join(conditions, " OR ") + ")" // 自动加 % for i := range args { if s, ok := args[i].(string); ok { args[i] = "%" + s + "%" } } } // ORDER BY var order string if orderBy != "" { order = " ORDER BY " + orderBy } sql := fmt.Sprintf("SELECT * FROM %s%s%s", viewName, where, order) return c.query(ctx, sql, args...) } func (c *Client) LoadDataBySQL( ctx context.Context, sql string, args []any, ) ([]map[string]any, error) { 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() }