1
+ import { DB } from "../../data/constants" ;
1
2
import { dbToTypes , defaultTypes } from "../../data/datatypes" ;
2
3
import { getInlineFK , parseDefault } from "./shared" ;
3
4
@@ -42,10 +43,10 @@ export function generateSchema(type) {
42
43
export function getTypeString (
43
44
field ,
44
45
currentDb ,
45
- dbms = "mysql" ,
46
+ dbms = DB . MYSQL ,
46
47
baseType = false ,
47
48
) {
48
- if ( dbms === "mysql" ) {
49
+ if ( dbms === DB . MYSQL ) {
49
50
if ( field . type === "UUID" ) {
50
51
return `VARCHAR(36)` ;
51
52
}
@@ -62,7 +63,7 @@ export function getTypeString(
62
63
return "JSON" ;
63
64
}
64
65
return field . type ;
65
- } else if ( dbms === "postgres" ) {
66
+ } else if ( dbms === DB . POSTGRES ) {
66
67
if ( field . type === "SMALLINT" && field . increment ) {
67
68
return "smallserial" ;
68
69
}
@@ -97,7 +98,7 @@ export function getTypeString(
97
98
return `${ field . type . toLowerCase ( ) } ${ field . size ? `(${ field . size } )` : "" } ` ;
98
99
}
99
100
return field . type . toLowerCase ( ) ;
100
- } else if ( dbms === "mssql" ) {
101
+ } else if ( dbms === DB . MSSQL ) {
101
102
let type = field . type ;
102
103
switch ( field . type ) {
103
104
case "ENUM" :
@@ -134,59 +135,36 @@ export function getTypeString(
134
135
}
135
136
136
137
return type ;
137
- } else if ( dbms === "oraclesql" ) {
138
+ } else if ( dbms === DB . ORACLESQL ) {
138
139
let oracleType ;
139
140
switch ( field . type ) {
140
- case "INT" :
141
- case "INTEGER" :
142
- case "SMALLINT" :
143
141
case "BIGINT" :
144
- case "DECIMAL" :
145
- case "NUMERIC" :
146
- case "REAL" :
147
- case "FLOAT" :
148
- case "DOUBLE" :
149
142
oracleType = "NUMBER" ;
150
143
break ;
151
- case "CHAR" :
152
- oracleType = "CHAR" ;
153
- break ;
154
144
case "VARCHAR" :
155
145
oracleType = "VARCHAR2" ;
156
146
break ;
157
147
case "TEXT" :
158
148
oracleType = "CLOB" ;
159
149
break ;
160
150
case "TIME" :
161
- oracleType = "TIMESTAMP" ;
162
- break ;
163
- case "TIMESTAMP" :
164
- case "DATE" :
165
151
case "DATETIME" :
166
- oracleType = field . type ;
167
- break ;
168
- case "BOOLEAN" :
169
- oracleType = "NUMBER(1)" ;
152
+ oracleType = "TIMESTAMP" ;
170
153
break ;
171
154
case "BINARY" :
172
155
case "VARBINARY" :
173
156
oracleType = "RAW" ;
174
157
break ;
175
- case "BLOB" :
176
- oracleType = "BLOB" ;
177
- break ;
178
- case "JSON" :
179
- oracleType = "JSON" ;
180
- break ;
181
158
case "UUID" :
182
159
oracleType = "RAW(16)" ;
183
160
break ;
184
- case "ENUM" :
185
161
case "SET" :
186
- oracleType = "VARCHAR2" ;
162
+ case "ENUM" :
163
+ oracleType = field . name + "_t" ;
187
164
break ;
188
165
default :
189
- throw new Error ( `Unsupported type for Oracle: ${ field . type } ` ) ;
166
+ oracleType = field . type ;
167
+ break ;
190
168
}
191
169
const typeInfo = dbToTypes [ currentDb ] [ oracleType ] ;
192
170
if ( typeInfo . isSized || typeInfo . hasPrecision ) {
@@ -197,12 +175,6 @@ export function getTypeString(
197
175
}
198
176
}
199
177
200
- if ( field . type === "ENUM" || field . type === "SET" ) {
201
- oracleType += ` CHECK (${ field . name } IN (${ field . values
202
- . map ( ( v ) => `'${ v } '` )
203
- . join ( ", " ) } ))`;
204
- }
205
-
206
178
return oracleType ;
207
179
}
208
180
}
@@ -283,13 +255,15 @@ export function jsonToPostgreSQL(obj) {
283
255
type . comment === "" ? "" : `/**\n${ type . comment } \n*/\n`
284
256
} CREATE TYPE ${ type . name } AS (\n${ type . fields
285
257
. map (
286
- ( f ) => `\t${ f . name } ${ getTypeString ( f , obj . database , "postgres" ) } ` ,
258
+ ( f ) => `\t${ f . name } ${ getTypeString ( f , obj . database , DB . POSTGRES ) } ` ,
287
259
)
288
260
. join ( "\n" ) } \n);`
289
261
) ;
290
262
} else {
291
263
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
+ )
293
267
. join ( ",\n" ) } \n);\n${
294
268
type . comment && type . comment . trim ( ) != ""
295
269
? `\nCOMMENT ON TYPE ${ type . name } IS '${ type . comment } ';\n`
@@ -317,7 +291,7 @@ export function jsonToPostgreSQL(obj) {
317
291
( field ) =>
318
292
`${ field . comment === "" ? "" : `\t-- ${ field . comment } \n` } \t"${
319
293
field . name
320
- } " ${ getTypeString ( field , obj . database , "postgres" ) } ${
294
+ } " ${ getTypeString ( field , obj . database , DB . POSTGRES ) } ${
321
295
field . notNull ? " NOT NULL" : ""
322
296
} ${ field . unique ? " UNIQUE" : "" } ${
323
297
field . default !== "" ? ` DEFAULT ${ parseDefault ( field ) } ` : ""
@@ -447,7 +421,7 @@ export function jsonToMariaDB(obj) {
447
421
( field ) =>
448
422
`\t\`${
449
423
field . name
450
- } \` ${ getTypeString ( field , obj . database , "oraclesql" ) } ${ field . notNull ? " NOT NULL" : "" } ${
424
+ } \` ${ getTypeString ( field , obj . database , DB . MYSQL ) } ${ field . notNull ? " NOT NULL" : "" } ${
451
425
field . increment ? " AUTO_INCREMENT" : ""
452
426
} ${ field . unique ? " UNIQUE" : "" } ${
453
427
field . default !== ""
@@ -506,7 +480,7 @@ export function jsonToSQLServer(obj) {
506
480
} CREATE TYPE [${ type . name } ] FROM ${
507
481
type . fields . length < 0
508
482
? ""
509
- : `${ getTypeString ( type . fields [ 0 ] , obj . database , "mssql" , true ) } `
483
+ : `${ getTypeString ( type . fields [ 0 ] , obj . database , DB . MSSQL , true ) } `
510
484
} ;\nGO\n`;
511
485
} )
512
486
. join ( "\n" ) } \n${ obj . tables
@@ -519,7 +493,7 @@ export function jsonToSQLServer(obj) {
519
493
( field ) =>
520
494
`${ field . comment === "" ? "" : `\t-- ${ field . comment } \n` } \t[${
521
495
field . name
522
- } ] ${ getTypeString ( field , obj . database , "mssql" ) } ${
496
+ } ] ${ getTypeString ( field , obj . database , DB . MSSQL ) } ${
523
497
field . notNull ? " NOT NULL" : ""
524
498
} ${ field . increment ? " IDENTITY" : "" } ${
525
499
field . unique ? " UNIQUE" : ""
@@ -569,13 +543,30 @@ export function jsonToOracleSQL(obj) {
569
543
. map (
570
544
( table ) =>
571
545
`${
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
+ } ${
572
559
table . comment === "" ? "" : `/* ${ table . comment } */\n`
573
560
} CREATE TABLE "${ table . name } " (\n${ table . fields
574
561
. map (
575
562
( field ) =>
576
563
`${ field . comment === "" ? "" : ` -- ${ field . comment } \n` } "${
577
564
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
+ } ${
579
570
field . default !== ""
580
571
? ` DEFAULT ${ parseDefault ( field , obj . database ) } `
581
572
: ""
@@ -605,9 +596,7 @@ export function jsonToOracleSQL(obj) {
605
596
. join ( "\n\n" ) } \n${ obj . references
606
597
. map (
607
598
( 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 ("${
611
600
obj . tables [ r . startTableId ] . fields [ r . startFieldId ] . name
612
601
} ") REFERENCES "${ obj . tables [ r . endTableId ] . name } "("${
613
602
obj . tables [ r . endTableId ] . fields [ r . endFieldId ] . name
0 commit comments