Skip to content

Commit 4261ddc

Browse files
committed
Export from generic
1 parent 6b5e2fa commit 4261ddc

File tree

1 file changed

+38
-49
lines changed

1 file changed

+38
-49
lines changed

src/utils/exportSQL/generic.js

+38-49
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { DB } from "../../data/constants";
12
import { dbToTypes, defaultTypes } from "../../data/datatypes";
23
import { getInlineFK, parseDefault } from "./shared";
34

@@ -42,10 +43,10 @@ export function generateSchema(type) {
4243
export function getTypeString(
4344
field,
4445
currentDb,
45-
dbms = "mysql",
46+
dbms = DB.MYSQL,
4647
baseType = false,
4748
) {
48-
if (dbms === "mysql") {
49+
if (dbms === DB.MYSQL) {
4950
if (field.type === "UUID") {
5051
return `VARCHAR(36)`;
5152
}
@@ -62,7 +63,7 @@ export function getTypeString(
6263
return "JSON";
6364
}
6465
return field.type;
65-
} else if (dbms === "postgres") {
66+
} else if (dbms === DB.POSTGRES) {
6667
if (field.type === "SMALLINT" && field.increment) {
6768
return "smallserial";
6869
}
@@ -97,7 +98,7 @@ export function getTypeString(
9798
return `${field.type.toLowerCase()}${field.size ? `(${field.size})` : ""}`;
9899
}
99100
return field.type.toLowerCase();
100-
} else if (dbms === "mssql") {
101+
} else if (dbms === DB.MSSQL) {
101102
let type = field.type;
102103
switch (field.type) {
103104
case "ENUM":
@@ -134,59 +135,36 @@ export function getTypeString(
134135
}
135136

136137
return type;
137-
} else if (dbms === "oraclesql") {
138+
} else if (dbms === DB.ORACLESQL) {
138139
let oracleType;
139140
switch (field.type) {
140-
case "INT":
141-
case "INTEGER":
142-
case "SMALLINT":
143141
case "BIGINT":
144-
case "DECIMAL":
145-
case "NUMERIC":
146-
case "REAL":
147-
case "FLOAT":
148-
case "DOUBLE":
149142
oracleType = "NUMBER";
150143
break;
151-
case "CHAR":
152-
oracleType = "CHAR";
153-
break;
154144
case "VARCHAR":
155145
oracleType = "VARCHAR2";
156146
break;
157147
case "TEXT":
158148
oracleType = "CLOB";
159149
break;
160150
case "TIME":
161-
oracleType = "TIMESTAMP";
162-
break;
163-
case "TIMESTAMP":
164-
case "DATE":
165151
case "DATETIME":
166-
oracleType = field.type;
167-
break;
168-
case "BOOLEAN":
169-
oracleType = "NUMBER(1)";
152+
oracleType = "TIMESTAMP";
170153
break;
171154
case "BINARY":
172155
case "VARBINARY":
173156
oracleType = "RAW";
174157
break;
175-
case "BLOB":
176-
oracleType = "BLOB";
177-
break;
178-
case "JSON":
179-
oracleType = "JSON";
180-
break;
181158
case "UUID":
182159
oracleType = "RAW(16)";
183160
break;
184-
case "ENUM":
185161
case "SET":
186-
oracleType = "VARCHAR2";
162+
case "ENUM":
163+
oracleType = field.name + "_t";
187164
break;
188165
default:
189-
throw new Error(`Unsupported type for Oracle: ${field.type}`);
166+
oracleType = field.type;
167+
break;
190168
}
191169
const typeInfo = dbToTypes[currentDb][oracleType];
192170
if (typeInfo.isSized || typeInfo.hasPrecision) {
@@ -197,12 +175,6 @@ export function getTypeString(
197175
}
198176
}
199177

200-
if (field.type === "ENUM" || field.type === "SET") {
201-
oracleType += ` CHECK (${field.name} IN (${field.values
202-
.map((v) => `'${v}'`)
203-
.join(", ")}))`;
204-
}
205-
206178
return oracleType;
207179
}
208180
}
@@ -283,13 +255,15 @@ export function jsonToPostgreSQL(obj) {
283255
type.comment === "" ? "" : `/**\n${type.comment}\n*/\n`
284256
}CREATE TYPE ${type.name} AS (\n${type.fields
285257
.map(
286-
(f) => `\t${f.name} ${getTypeString(f, obj.database, "postgres")}`,
258+
(f) => `\t${f.name} ${getTypeString(f, obj.database, DB.POSTGRES)}`,
287259
)
288260
.join("\n")}\n);`
289261
);
290262
} else {
291263
return `CREATE TYPE ${type.name} AS (\n${type.fields
292-
.map((f) => `\t${f.name} ${getTypeString(f, obj.database, "postgres")}`)
264+
.map(
265+
(f) => `\t${f.name} ${getTypeString(f, obj.database, DB.POSTGRES)}`,
266+
)
293267
.join(",\n")}\n);\n${
294268
type.comment && type.comment.trim() != ""
295269
? `\nCOMMENT ON TYPE ${type.name} IS '${type.comment}';\n`
@@ -317,7 +291,7 @@ export function jsonToPostgreSQL(obj) {
317291
(field) =>
318292
`${field.comment === "" ? "" : `\t-- ${field.comment}\n`}\t"${
319293
field.name
320-
}" ${getTypeString(field, obj.database, "postgres")}${
294+
}" ${getTypeString(field, obj.database, DB.POSTGRES)}${
321295
field.notNull ? " NOT NULL" : ""
322296
}${field.unique ? " UNIQUE" : ""}${
323297
field.default !== "" ? ` DEFAULT ${parseDefault(field)}` : ""
@@ -447,7 +421,7 @@ export function jsonToMariaDB(obj) {
447421
(field) =>
448422
`\t\`${
449423
field.name
450-
}\` ${getTypeString(field, obj.database, "oraclesql")}${field.notNull ? " NOT NULL" : ""}${
424+
}\` ${getTypeString(field, obj.database, DB.MYSQL)}${field.notNull ? " NOT NULL" : ""}${
451425
field.increment ? " AUTO_INCREMENT" : ""
452426
}${field.unique ? " UNIQUE" : ""}${
453427
field.default !== ""
@@ -506,7 +480,7 @@ export function jsonToSQLServer(obj) {
506480
}CREATE TYPE [${type.name}] FROM ${
507481
type.fields.length < 0
508482
? ""
509-
: `${getTypeString(type.fields[0], obj.database, "mssql", true)}`
483+
: `${getTypeString(type.fields[0], obj.database, DB.MSSQL, true)}`
510484
};\nGO\n`;
511485
})
512486
.join("\n")}\n${obj.tables
@@ -519,7 +493,7 @@ export function jsonToSQLServer(obj) {
519493
(field) =>
520494
`${field.comment === "" ? "" : `\t-- ${field.comment}\n`}\t[${
521495
field.name
522-
}] ${getTypeString(field, obj.database, "mssql")}${
496+
}] ${getTypeString(field, obj.database, DB.MSSQL)}${
523497
field.notNull ? " NOT NULL" : ""
524498
}${field.increment ? " IDENTITY" : ""}${
525499
field.unique ? " UNIQUE" : ""
@@ -569,13 +543,30 @@ export function jsonToOracleSQL(obj) {
569543
.map(
570544
(table) =>
571545
`${
546+
table.fields.filter((f) => f.type === "ENUM" || f.type === "SET")
547+
.length > 0
548+
? `${table.fields
549+
.filter((f) => f.type === "ENUM" || f.type === "SET")
550+
.map(
551+
(f) =>
552+
`CREATE DOMAIN "${f.name}_t" AS ENUM (${f.values
553+
.map((v) => `'${v}'`)
554+
.join(", ")});\n`,
555+
)
556+
.join("\n")}\n`
557+
: ""
558+
}${
572559
table.comment === "" ? "" : `/* ${table.comment} */\n`
573560
}CREATE TABLE "${table.name}" (\n${table.fields
574561
.map(
575562
(field) =>
576563
`${field.comment === "" ? "" : ` -- ${field.comment}\n`} "${
577564
field.name
578-
}" ${getTypeString(field, obj.database, "oraclesql")}${field.primary ? "" : field.notNull ? (table.indices.some((index) => index.fields.some((f) => f === field.name)) ? " NOT NULL" : field.unique ? " NOT NULL UNIQUE" : " UNIQUE") : ""}${
565+
}" ${getTypeString(field, obj.database, DB.ORACLESQL)}${
566+
field.notNull ? " NOT NULL" : ""
567+
}${field.increment ? " GENERATED ALWAYS AS IDENTITY" : ""}${
568+
field.unique ? " UNIQUE" : ""
569+
}${
579570
field.default !== ""
580571
? ` DEFAULT ${parseDefault(field, obj.database)}`
581572
: ""
@@ -605,9 +596,7 @@ export function jsonToOracleSQL(obj) {
605596
.join("\n\n")}\n${obj.references
606597
.map(
607598
(r) =>
608-
`ALTER TABLE "${obj.tables[r.startTableId].name}"\nADD CONSTRAINT fk_${
609-
r.startTableId
610-
}_${r.endTableId} FOREIGN KEY ("${
599+
`ALTER TABLE "${obj.tables[r.startTableId].name}"\nADD CONSTRAINT "${r.name}" FOREIGN KEY ("${
611600
obj.tables[r.startTableId].fields[r.startFieldId].name
612601
}") REFERENCES "${obj.tables[r.endTableId].name}"("${
613602
obj.tables[r.endTableId].fields[r.endFieldId].name

0 commit comments

Comments
 (0)