Convert unsupported types in generic diagrams on import

This commit is contained in:
1ilit 2024-06-16 01:38:22 +03:00
parent 0a108fc33a
commit 490cb738de
2 changed files with 51 additions and 26 deletions

View File

@ -2,10 +2,22 @@ import { Cardinality, DB } from "../../data/constants";
import { dbToTypes } from "../../data/datatypes"; import { dbToTypes } from "../../data/datatypes";
import { buildSQLFromAST } from "./shared"; import { buildSQLFromAST } from "./shared";
export const affinity = new Proxy( const affinity = {
{ INT: "INTEGER" }, [DB.MYSQL]: new Proxy(
{ get: (target, prop) => (prop in target ? target[prop] : "BLOB") }, { INT: "INTEGER" },
); { get: (target, prop) => (prop in target ? target[prop] : "BLOB") },
),
[DB.GENERIC]: new Proxy(
{
INT: "INTEGER",
TINYINT: "SMALLINT",
MEDIUMINT: "INTEGER",
BIT: "BOOLEAN",
YEAR: "INTEGER",
},
{ get: (target, prop) => (prop in target ? target[prop] : "BLOB") },
),
};
export function fromMySQL(ast, diagramDb = DB.GENERIC) { export function fromMySQL(ast, diagramDb = DB.GENERIC) {
const tables = []; const tables = [];
@ -28,7 +40,7 @@ export function fromMySQL(ast, diagramDb = DB.GENERIC) {
let type = d.definition.dataType; let type = d.definition.dataType;
if (!dbToTypes[diagramDb][type]) { if (!dbToTypes[diagramDb][type]) {
type = affinity[type]; type = affinity[diagramDb][type];
} }
field.type = type; field.type = type;

View File

@ -2,26 +2,39 @@ import { Cardinality, DB } from "../../data/constants";
import { dbToTypes } from "../../data/datatypes"; import { dbToTypes } from "../../data/datatypes";
import { buildSQLFromAST } from "./shared"; import { buildSQLFromAST } from "./shared";
export const affinity = new Proxy( const affinity = {
{ [DB.SQLITE]: new Proxy(
INT: "INTEGER", {
TINYINT: "INTEGER", INT: "INTEGER",
SMALLINT: "INTEGER", TINYINT: "INTEGER",
MEDIUMINT: "INTEGER", SMALLINT: "INTEGER",
BIGINT: "INTEGER", MEDIUMINT: "INTEGER",
"UNSIGNED BIG INT": "INTEGER", BIGINT: "INTEGER",
INT2: "INTEGER", "UNSIGNED BIG INT": "INTEGER",
INT8: "INTEGER", INT2: "INTEGER",
CHARACTER: "TEXT", INT8: "INTEGER",
NCHARACTER: "TEXT", CHARACTER: "TEXT",
NVARCHAR: "VARCHAR", NCHARACTER: "TEXT",
DOUBLE: "REAL", NVARCHAR: "VARCHAR",
FLOAT: "REAL", DOUBLE: "REAL",
}, FLOAT: "REAL",
{ },
get: (target, prop) => (prop in target ? target[prop] : "BLOB"), { get: (target, prop) => (prop in target ? target[prop] : "BLOB") },
}, ),
); [DB.GENERIC]: new Proxy(
{
INT: "INTEGER",
TINYINT: "SMALLINT",
MEDIUMINT: "INTEGER",
INT2: "INTEGER",
INT8: "INTEGER",
CHARACTER: "TEXT",
NCHARACTER: "TEXT",
NVARCHAR: "VARCHAR",
},
{ get: (target, prop) => (prop in target ? target[prop] : "BLOB") },
),
};
export function fromSQLite(ast, diagramDb = DB.GENERIC) { export function fromSQLite(ast, diagramDb = DB.GENERIC) {
console.log(ast); console.log(ast);
@ -45,7 +58,7 @@ export function fromSQLite(ast, diagramDb = DB.GENERIC) {
let type = d.definition.dataType; let type = d.definition.dataType;
if (!dbToTypes[diagramDb][type]) { if (!dbToTypes[diagramDb][type]) {
type = affinity[type]; type = affinity[diagramDb][type];
} }
field.type = type; field.type = type;