Skip to content

Commit 1e1851e

Browse files
committed
fix: execute sql from file to avoid exceeding cmd line character limits
1 parent 897ecb4 commit 1e1851e

1 file changed

Lines changed: 52 additions & 14 deletions

File tree

src/main/utils/h2.ts

Lines changed: 52 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,33 @@ async function clear(type?: 'delete_old' | 'delete_new'): Promise<void> {
8484
* @returns 执行结果
8585
*/
8686
async function executeSqlInOldH2(sql: string): Promise<string> {
87-
const { stdout, stderr } = (await execAsync(
88-
`"${JAVA_PATH}" -cp "${OLD_H2_JAR_PATH}" org.h2.tools.Shell -url "${OLD_H2_URL}" -user "${DB_USERNAME}" -password "${DB_PASSWORD}" -sql "${sql}"`,
89-
)) as ExecResult;
90-
if (stderr) {
91-
log.error('[old]execute sql error: ', stderr);
92-
return null;
87+
const tempSqlFile = path.join(TMP_EXPORT_SQL_DIR, `temp_${Date.now()}.sql`);
88+
89+
try {
90+
// 确保临时目录存在
91+
if (!fs.existsSync(TMP_EXPORT_SQL_DIR)) {
92+
await fsPromises.mkdir(TMP_EXPORT_SQL_DIR, { recursive: true });
93+
}
94+
95+
// 将SQL写入临时文件
96+
await fsPromises.writeFile(tempSqlFile, sql, 'utf8');
97+
98+
// 执行SQL文件
99+
const { stdout, stderr } = (await execAsync(
100+
`"${JAVA_PATH}" -cp "${OLD_H2_JAR_PATH}" org.h2.tools.RunScript -url "${OLD_H2_URL}" -user "${DB_USERNAME}" -password "${DB_PASSWORD}" -script "${tempSqlFile}"`,
101+
)) as ExecResult;
102+
103+
if (stderr) {
104+
log.error('[old]execute sql error: ', stderr);
105+
return null;
106+
}
107+
return stdout;
108+
} finally {
109+
// 删除临时文件
110+
if (fs.existsSync(tempSqlFile)) {
111+
await fsPromises.rm(tempSqlFile, { force: true });
112+
}
93113
}
94-
return stdout;
95114
}
96115

97116
/**
@@ -100,14 +119,33 @@ async function executeSqlInOldH2(sql: string): Promise<string> {
100119
* @returns 执行结果
101120
*/
102121
async function executeSqlInNewH2(sql: string): Promise<string> {
103-
const { stdout, stderr } = (await execAsync(
104-
`"${JAVA_PATH}" -cp "${NEW_H2_JAR_PATH}" org.h2.tools.Shell -url "${NEW_H2_URL}" -user "${DB_USERNAME}" -password "${DB_PASSWORD}" -sql "${sql}"`,
105-
)) as ExecResult;
106-
if (stderr) {
107-
log.error('[new]execute sql error: ', stderr);
108-
return null;
122+
const tempSqlFile = path.join(TMP_EXPORT_SQL_DIR, `temp_${Date.now()}.sql`);
123+
124+
try {
125+
// 确保临时目录存在
126+
if (!fs.existsSync(TMP_EXPORT_SQL_DIR)) {
127+
await fsPromises.mkdir(TMP_EXPORT_SQL_DIR, { recursive: true });
128+
}
129+
130+
// 将SQL写入临时文件
131+
await fsPromises.writeFile(tempSqlFile, sql, 'utf8');
132+
133+
// 执行SQL文件
134+
const { stdout, stderr } = (await execAsync(
135+
`"${JAVA_PATH}" -cp "${NEW_H2_JAR_PATH}" org.h2.tools.RunScript -url "${NEW_H2_URL}" -user "${DB_USERNAME}" -password "${DB_PASSWORD}" -script "${tempSqlFile}"`,
136+
)) as ExecResult;
137+
138+
if (stderr) {
139+
log.error('[new]execute sql error: ', stderr);
140+
return null;
141+
}
142+
return stdout;
143+
} finally {
144+
// 删除临时文件
145+
if (fs.existsSync(tempSqlFile)) {
146+
await fsPromises.rm(tempSqlFile, { force: true });
147+
}
109148
}
110-
return stdout;
111149
}
112150

113151
/**

0 commit comments

Comments
 (0)