mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-07-22 05:11:44 +08:00
38 lines
1.3 KiB
TypeScript
38 lines
1.3 KiB
TypeScript
import { isOracleLikeDialect } from '../utils/sqlDialect';
|
||
|
||
export const splitSchemaExecutionStatements = (sqlText: string): string[] => (
|
||
String(sqlText || '')
|
||
.replace(/;/g, ';')
|
||
.split(/;\s*\n/)
|
||
.map(statement => statement.trim())
|
||
.filter(Boolean)
|
||
);
|
||
|
||
export const normalizeSchemaStatementForExecution = (statement: string, dbType: string): string => {
|
||
const trimmed = String(statement || '').trim();
|
||
if (!trimmed) return '';
|
||
if (isOracleLikeDialect(dbType)) {
|
||
return trimmed.replace(/;+\s*$/, '').trim();
|
||
}
|
||
return trimmed.endsWith(';') ? trimmed : `${trimmed};`;
|
||
};
|
||
|
||
const unescapeSqlComment = (text: string, mysqlBackslashEscapes = false): string => {
|
||
const unescaped = text.replace(/''/g, "'");
|
||
return mysqlBackslashEscapes ? unescaped.replace(/\\'/g, "'") : unescaped;
|
||
};
|
||
|
||
export const parseTableCommentFromDDL = (ddlText: string): string => {
|
||
const ddl = String(ddlText || '').replace(/\r?\n/g, ' ');
|
||
const mysqlMatch = ddl.match(/COMMENT\s*=\s*'((?:\\'|''|[^'])*)'/i);
|
||
if (mysqlMatch) {
|
||
return unescapeSqlComment(mysqlMatch[1], true);
|
||
}
|
||
|
||
const commentOnTableMatch = ddl.match(/\bCOMMENT\s+ON\s+TABLE\s+.+?\s+IS\s+(NULL|'((?:''|[^'])*)')/i);
|
||
if (!commentOnTableMatch || commentOnTableMatch[1].toUpperCase() === 'NULL') {
|
||
return '';
|
||
}
|
||
return unescapeSqlComment(commentOnTableMatch[2] || '');
|
||
};
|