From 57f85fe2a2c44007553e76a2ea41e3e3aa075e55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Cmit=20Tun=C3=A7?= Date: Mon, 30 Mar 2026 08:35:10 +0300 Subject: [PATCH] feat: add MySqlOperationService for archive extraction, query execution, and database management --- src/main/services/MySqlOperationService.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/main/services/MySqlOperationService.ts b/src/main/services/MySqlOperationService.ts index 9a7eecb..cf128c8 100644 --- a/src/main/services/MySqlOperationService.ts +++ b/src/main/services/MySqlOperationService.ts @@ -2,6 +2,7 @@ import fs from 'fs' import path from 'path' import { spawn } from 'child_process' import decompress from 'decompress' +import zlib from 'zlib' export interface MySqlConfig { binPath: string @@ -17,6 +18,26 @@ export class MySqlOperationService { fs.mkdirSync(targetDir, { recursive: true }) } + const lowerPath = archivePath.toLowerCase() + if (lowerPath.endsWith('.gz') && !lowerPath.endsWith('.tar.gz')) { + // Handle single-file gzip compression like .sql.gz + const baseName = path.basename(archivePath, '.gz') + const outPath = path.join(targetDir, baseName.endsWith('.sql') ? baseName : `${baseName}.sql`) + + const source = fs.createReadStream(archivePath) + const destination = fs.createWriteStream(outPath) + const unzip = zlib.createUnzip() + + await new Promise((resolve, reject) => { + source.pipe(unzip).pipe(destination) + .on('finish', () => resolve(true)) + .on('error', reject) + }) + + return [outPath] + } + + // Process standard archives (tar, zip, tar.gz) await decompress(archivePath, targetDir) // Find all .sql files in the extracted directory