diff --git a/frontend/src/utils/ddlFormat.test.ts b/frontend/src/utils/ddlFormat.test.ts index cbbaea5..74977d7 100644 --- a/frontend/src/utils/ddlFormat.test.ts +++ b/frontend/src/utils/ddlFormat.test.ts @@ -19,4 +19,18 @@ describe('formatDdlForDisplay', () => { expect(formatDdlForDisplay(raw, 'duckdb')).toBe(raw); }); + + it('keeps Oracle comment statements separated from create table DDL', () => { + const raw = `CREATE TABLE "H2"."S_BUSI" ( + "ID" NUMBER +) TABLESPACE "H2DB"; + +COMMENT ON TABLE "H2"."S_BUSI" IS '业务机构信息'; +COMMENT ON COLUMN "H2"."S_BUSI"."ID" IS '主键';`; + + const formatted = formatDdlForDisplay(raw, 'oracle'); + + expect(formatted).toContain('TABLESPACE "H2DB";\n\nCOMMENT ON TABLE "H2"."S_BUSI"'); + expect(formatted).toContain(`COMMENT ON COLUMN "H2"."S_BUSI"."ID" IS '主键';`); + }); }); diff --git a/internal/db/oracle_get_tables_test.go b/internal/db/oracle_get_tables_test.go index 5909b38..8e6307d 100644 --- a/internal/db/oracle_get_tables_test.go +++ b/internal/db/oracle_get_tables_test.go @@ -317,4 +317,7 @@ ORDER BY c.column_id`] = oracleRecordingQueryResult{ t.Fatalf("expected DDL to contain %q, got: %s", want, ddl) } } + if !strings.Contains(ddl, ");\n\nCOMMENT ON TABLE") { + t.Fatalf("expected Oracle DDL comments to be separated by a statement terminator and blank line, got: %s", ddl) + } } diff --git a/internal/db/oracle_impl.go b/internal/db/oracle_impl.go index a988d25..4d657d8 100644 --- a/internal/db/oracle_impl.go +++ b/internal/db/oracle_impl.go @@ -585,7 +585,18 @@ func (o *OracleDB) appendOracleCommentDDL(baseDDL string, dbName string, tableNa if len(commentLines) == 0 { return baseDDL } - return strings.TrimRight(baseDDL, " \t\r\n") + "\n" + strings.Join(commentLines, "\n") + return ensureOracleDDLStatementTerminator(baseDDL) + "\n\n" + strings.Join(commentLines, "\n") +} + +func ensureOracleDDLStatementTerminator(ddl string) string { + trimmed := strings.TrimRight(ddl, " \t\r\n") + if trimmed == "" { + return trimmed + } + if strings.HasSuffix(trimmed, ";") || strings.HasSuffix(trimmed, "/") { + return trimmed + } + return trimmed + ";" } func (o *OracleDB) fetchOracleTableComment(schema string, table string) string {