qdy 3 miesięcy temu
rodzic
commit
cdd5f26f85
3 zmienionych plików z 15 dodań i 47 usunięć
  1. 1
    1
      factory/factory.go
  2. 12
    46
      factory/query.go
  3. 2
    0
      go.sum

+ 1
- 1
factory/factory.go Wyświetl plik

94
 }
94
 }
95
 
95
 
96
 // QuickQueryToCSV 快捷查询,直接返回 CSV 字符串(包含表头)
96
 // QuickQueryToCSV 快捷查询,直接返回 CSV 字符串(包含表头)
97
-func QuickQueryToCSV(db *sql.DB, sql string) *types.QueryResult {
97
+func QuickQueryToCSV(db *sql.DB, sql string) ([]byte, error) {
98
 	return NewDBQuery(db).QueryToCSV(sql)
98
 	return NewDBQuery(db).QueryToCSV(sql)
99
 }
99
 }
100
 
100
 

+ 12
- 46
factory/query.go Wyświetl plik

107
 	return result
107
 	return result
108
 }
108
 }
109
 
109
 
110
-// QueryToCSV 查询并返回 CSV 字符串(包含表头,统一返回QueryResult)
111
-func (e *QueryExecutor) QueryToCSV(sql string) *types.QueryResult {
112
-	startTime := time.Now()
113
-	result := &types.QueryResult{}
110
+// QueryToCSV 查询并返回 CSV 字节数据(包含表头)
111
+func (e *QueryExecutor) QueryToCSV(sql string) ([]byte, error) {
114
 
112
 
115
 	if sql == "" {
113
 	if sql == "" {
116
-		result.Success = false
117
-		result.Error = "SQL query cannot be empty"
118
-		result.Time = time.Since(startTime).String()
119
-		return result
114
+		return nil, fmt.Errorf("SQL query cannot be empty")
120
 	}
115
 	}
121
 
116
 
122
 	rows, err := e.db.Query(sql)
117
 	rows, err := e.db.Query(sql)
123
 	if err != nil {
118
 	if err != nil {
124
-		result.Success = false
125
-		result.Error = fmt.Sprintf("Query execution failed: %v", err)
126
-		result.Time = time.Since(startTime).String()
127
-		return result
119
+		return nil, fmt.Errorf("query execution failed: %v", err)
128
 	}
120
 	}
129
 	defer rows.Close()
121
 	defer rows.Close()
130
 
122
 
131
 	columns, err := rows.Columns()
123
 	columns, err := rows.Columns()
132
 	if err != nil {
124
 	if err != nil {
133
-		result.Success = false
134
-		result.Error = fmt.Sprintf("Failed to get columns: %v", err)
135
-		result.Time = time.Since(startTime).String()
136
-		return result
125
+		return nil, fmt.Errorf("failed to get columns: %v", err)
137
 	}
126
 	}
138
 
127
 
139
 	var builder strings.Builder
128
 	var builder strings.Builder
140
 	writer := csv.NewWriter(&builder)
129
 	writer := csv.NewWriter(&builder)
141
-	count := 0
142
 
130
 
143
 	// 写入表头
131
 	// 写入表头
144
 	if err := writer.Write(columns); err != nil {
132
 	if err := writer.Write(columns); err != nil {
145
-		result.Success = false
146
-		result.Error = fmt.Sprintf("Failed to write CSV header: %v", err)
147
-		result.Time = time.Since(startTime).String()
148
-		return result
133
+		return nil, fmt.Errorf("failed to write CSV header: %v", err)
149
 	}
134
 	}
150
 
135
 
136
+	count := 0
151
 	for rows.Next() {
137
 	for rows.Next() {
152
 		count++
138
 		count++
153
 		values := make([]interface{}, len(columns))
139
 		values := make([]interface{}, len(columns))
157
 		}
143
 		}
158
 
144
 
159
 		if err := rows.Scan(valuePtrs...); err != nil {
145
 		if err := rows.Scan(valuePtrs...); err != nil {
160
-			result.Success = false
161
-			result.Error = fmt.Sprintf("Failed to scan row: %v", err)
162
-			result.Time = time.Since(startTime).String()
163
-			return result
146
+			return nil, fmt.Errorf("failed to scan row: %v", err)
164
 		}
147
 		}
165
 
148
 
166
 		// 所有值转为字符串
149
 		// 所有值转为字符串
174
 		}
157
 		}
175
 
158
 
176
 		if err := writer.Write(row); err != nil {
159
 		if err := writer.Write(row); err != nil {
177
-			result.Success = false
178
-			result.Error = fmt.Sprintf("Failed to write CSV row: %v", err)
179
-			result.Time = time.Since(startTime).String()
180
-			return result
160
+			return nil, fmt.Errorf("failed to write CSV row: %v", err)
181
 		}
161
 		}
182
 	}
162
 	}
183
 
163
 
184
 	writer.Flush()
164
 	writer.Flush()
185
 	if err := writer.Error(); err != nil {
165
 	if err := writer.Error(); err != nil {
186
-		result.Success = false
187
-		result.Error = fmt.Sprintf("Failed to flush CSV: %v", err)
188
-		result.Time = time.Since(startTime).String()
189
-		return result
166
+		return nil, fmt.Errorf("failed to flush CSV: %v", err)
190
 	}
167
 	}
191
 
168
 
192
 	if err := rows.Err(); err != nil {
169
 	if err := rows.Err(); err != nil {
193
-		result.Success = false
194
-		result.Error = fmt.Sprintf("Row iteration error: %v", err)
195
-		result.Time = time.Since(startTime).String()
196
-		return result
170
+		return nil, fmt.Errorf("row iteration error: %v", err)
197
 	}
171
 	}
198
 
172
 
199
-	result.Success = true
200
-	result.Data = map[string]interface{}{
201
-		"csv":           builder.String(),
202
-		"count":         count,
203
-		"includeHeader": true,
204
-	}
205
-	result.Count = count
206
-	result.Time = time.Since(startTime).String()
207
-	return result
173
+	return []byte(builder.String()), nil
208
 }
174
 }
209
 
175
 
210
 // ExecuteQueryWithColumns 执行查询并返回完整结果(包含列信息)
176
 // ExecuteQueryWithColumns 执行查询并返回完整结果(包含列信息)

+ 2
- 0
go.sum Wyświetl plik

2
 filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
2
 filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
3
 git.x2erp.com/qdy/go-base v0.1.6 h1:25Fv2xvRmf3YZFmYiO1PmeR6molT0ucBRwKDE5DHr6Y=
3
 git.x2erp.com/qdy/go-base v0.1.6 h1:25Fv2xvRmf3YZFmYiO1PmeR6molT0ucBRwKDE5DHr6Y=
4
 git.x2erp.com/qdy/go-base v0.1.6/go.mod h1:Q+YLwpCoU8CVSnzATLdz2LAzVMlz/CEGzo8DePf7cug=
4
 git.x2erp.com/qdy/go-base v0.1.6/go.mod h1:Q+YLwpCoU8CVSnzATLdz2LAzVMlz/CEGzo8DePf7cug=
5
+git.x2erp.com/qdy/go-base v0.1.7 h1:IdhNbvUyQZtPDTsccZArzE0C+OcGf0/XjEy2Xcu1WHI=
6
+git.x2erp.com/qdy/go-base v0.1.7/go.mod h1:Q+YLwpCoU8CVSnzATLdz2LAzVMlz/CEGzo8DePf7cug=
5
 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 h1:Gt0j3wceWMwPmiazCa8MzMA0MfhmPIz0Qp0FJ6qcM0U=
7
 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 h1:Gt0j3wceWMwPmiazCa8MzMA0MfhmPIz0Qp0FJ6qcM0U=
6
 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0/go.mod h1:Ot/6aikWnKWi4l9QB7qVSwa8iMphQNqkWALMoNT3rzM=
8
 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0/go.mod h1:Ot/6aikWnKWi4l9QB7qVSwa8iMphQNqkWALMoNT3rzM=
7
 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.1 h1:B+blDbyVIG3WaikNxPnhPiJ1MThR03b3vKGtER95TP4=
9
 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.1 h1:B+blDbyVIG3WaikNxPnhPiJ1MThR03b3vKGtER95TP4=

Ładowanie…
Anuluj
Zapisz