feat(structure): disable Oracle-like integer length

This commit is contained in:
t8y2 committed 2026-07-04 23:17:51 +08:00
1 parent 3ba617fc74
commit cec17844a9
4 files changed
+77

No files matched your search

@@ -28,6 +28,14 @@ describe("tableStructureEditorState", () => {
expect(dataTypeLengthInputValue("mysql", "set('manual','auto')")).toBe("");
});
it("does not expose Oracle-like integer display widths as editable length", () => {
expect(isDataTypeLengthDisabled("dameng", "integer")).toBe(true);
expect(dataTypeLengthInputValue("dameng", "integer(11)")).toBe("");
expect(combineDataTypeForDatabase("dameng", "integer", "11")).toBe("integer");
expect(combineDataTypeForDatabase("oracle", "number", "10,0")).toBe("number(10,0)");
expect(combineDataTypeForDatabase("mysql", "integer", "11")).toBe("integer(11)");
});
it("strips SQL Server metadata parentheses from editable defaults", () => {
const drafts = createColumnDrafts(
[
@@ -423,6 +423,8 @@ export const POSTGRES_TYPE_LENGTH_DISABLES: string[] = [
"xml",
];
export const ORACLE_LIKE_TYPE_LENGTH_DISABLES: string[] = ["binary_double", "binary_float", "bigint", "boolean", "bool", "byte", "date", "double", "double precision", "float", "integer", "int", "long", "long raw", "nclob", "real", "smallint", "text", "tinyint"];
export function parseExtraToColumnExtra(extra: string | null | undefined, databaseType?: DatabaseType): ColumnExtra {
const result: ColumnExtra = {};
if (!extra) return result;
@@ -883,6 +885,10 @@ function isMysqlLikeStructureType(dbType: DatabaseType | undefined): boolean {
return dbType === "mysql" || dbType === "doris" || dbType === "starrocks" || dbType === "goldendb" || dbType === "sundb" || dbType === "databend";
}
function isOracleLikeStructureType(dbType: DatabaseType | undefined): boolean {
return dbType === "oracle" || dbType === "dameng" || dbType === "oceanbase-oracle" || dbType === "iris" || dbType === "yashandb" || dbType === "xugu";
}
function isValidTemporalPrecision(dbType: DatabaseType | undefined, params: string): boolean {
if (!/^\d+$/.test(params)) return false;
const value = Number(params);
@@ -907,6 +913,9 @@ export function isDataTypeLengthDisabled(_dbType: DatabaseType | undefined, base
return key !== "bit" && key !== "float_vector";
} else if (_dbType === "postgres" || _dbType === "gaussdb" || _dbType === "kwdb" || _dbType === "opengauss" || _dbType === "highgo" || _dbType === "vastbase" || _dbType === "kingbase") {
return POSTGRES_TYPE_LENGTH_DISABLES.includes(key);
} else if (isOracleLikeStructureType(_dbType)) {
// Dameng/Oracle integer aliases have fixed precision; MySQL-style display widths generate invalid DDL.
return ORACLE_LIKE_TYPE_LENGTH_DISABLES.includes(key);
} else if (isMysqlLikeStructureType(_dbType)) {
return key === "enum" || key === "set";
} else {