exportResultToZip exports a single query result to the ZIP archive. It writes both the SQL statement and the formatted result data.
( ctx context.Context, zipw *zip.Writer, stores *store.Store, instance *store.InstanceMessage, database *store.DatabaseMessage, result *v1pb.QueryResult, request *v1pb.ExportRequest, statementNumber int, )
| 1255 | // exportResultToZip exports a single query result to the ZIP archive. |
| 1256 | // It writes both the SQL statement and the formatted result data. |
| 1257 | func exportResultToZip( |
| 1258 | ctx context.Context, |
| 1259 | zipw *zip.Writer, |
| 1260 | stores *store.Store, |
| 1261 | instance *store.InstanceMessage, |
| 1262 | database *store.DatabaseMessage, |
| 1263 | result *v1pb.QueryResult, |
| 1264 | request *v1pb.ExportRequest, |
| 1265 | statementNumber int, |
| 1266 | ) error { |
| 1267 | baseFilename := fmt.Sprintf("%s/%s/statement-%d", database.InstanceID, database.DatabaseName, statementNumber) |
| 1268 | |
| 1269 | // Write statement file |
| 1270 | statementFilename := fmt.Sprintf("%s.sql", baseFilename) |
| 1271 | if err := export.WriteZipEntry(zipw, statementFilename, []byte(result.Statement), request.GetPassword()); err != nil { |
| 1272 | return errors.Wrap(err, "failed to write statement") |
| 1273 | } |
| 1274 | |
| 1275 | // Write result file by streaming directly to ZIP |
| 1276 | resultExt := strings.ToLower(request.Format.String()) |
| 1277 | resultFilename := fmt.Sprintf("%s.result.%s", baseFilename, resultExt) |
| 1278 | if err := formatExportToZip(ctx, zipw, resultFilename, stores, instance, database, result, request); err != nil { |
| 1279 | return errors.Wrap(err, "failed to write formatted result") |
| 1280 | } |
| 1281 | |
| 1282 | return nil |
| 1283 | } |
| 1284 | |
| 1285 | // formatExportToZip formats query results and writes them directly to a ZIP entry. |
| 1286 | // This function streams the formatted data to minimize memory usage. |
no test coverage detected