diff --git a/src/utils/importSQL/mariadb.js b/src/utils/importSQL/mariadb.js index e458d84..eb430f3 100644 --- a/src/utils/importSQL/mariadb.js +++ b/src/utils/importSQL/mariadb.js @@ -92,7 +92,7 @@ export function fromMariaDB(ast, diagramDb = DB.GENERIC) { } field.check = ""; if (d.check) { - field.check = buildSQLFromAST(d.check.definition[0]); + field.check = buildSQLFromAST(d.check.definition[0], DB.MARIADB); } table.fields.push(field); diff --git a/src/utils/importSQL/mssql.js b/src/utils/importSQL/mssql.js index 4d8efef..4b63685 100644 --- a/src/utils/importSQL/mssql.js +++ b/src/utils/importSQL/mssql.js @@ -104,7 +104,7 @@ export function fromMSSQL(ast, diagramDb = DB.GENERIC) { } field.check = ""; if (d.check) { - field.check = buildSQLFromAST(d.check.definition[0]); + field.check = buildSQLFromAST(d.check.definition[0], DB.MSSQL); } table.fields.push(field); diff --git a/src/utils/importSQL/mysql.js b/src/utils/importSQL/mysql.js index a6b674b..caa06d6 100644 --- a/src/utils/importSQL/mysql.js +++ b/src/utils/importSQL/mysql.js @@ -92,7 +92,7 @@ export function fromMySQL(ast, diagramDb = DB.GENERIC) { } field.check = ""; if (d.check) { - field.check = buildSQLFromAST(d.check.definition[0]); + field.check = buildSQLFromAST(d.check.definition[0], DB.MYSQL); } table.fields.push(field); diff --git a/src/utils/importSQL/postgres.js b/src/utils/importSQL/postgres.js index 84b0f80..be183d8 100644 --- a/src/utils/importSQL/postgres.js +++ b/src/utils/importSQL/postgres.js @@ -92,7 +92,7 @@ export function fromPostgres(ast, diagramDb = DB.GENERIC) { } field.check = ""; if (d.check) { - field.check = buildSQLFromAST(d.check.definition[0]); + field.check = buildSQLFromAST(d.check.definition[0], DB.POSTGRES); } table.fields.push(field); diff --git a/src/utils/importSQL/shared.js b/src/utils/importSQL/shared.js index 0c27310..cab0cbc 100644 --- a/src/utils/importSQL/shared.js +++ b/src/utils/importSQL/shared.js @@ -1,7 +1,24 @@ -export function buildSQLFromAST(ast) { +import { DB } from "../../data/constants"; + +function quoteColumn(str, db) { + switch (db) { + case DB.MYSQL: + return `\`${str}\``; + case DB.SQLITE: + return `"${str}"`; + case DB.POSTGRES: + return `"${str}"`; + case DB.MSSQL: + return `[${str}]`; + case DB.MARIADB: + return `\`${str}\``; + } +} + +export function buildSQLFromAST(ast, db = DB.MYSQL) { if (ast.type === "binary_expr") { - const leftSQL = buildSQLFromAST(ast.left); - const rightSQL = buildSQLFromAST(ast.right); + const leftSQL = buildSQLFromAST(ast.left, db); + const rightSQL = buildSQLFromAST(ast.right, db); return `${leftSQL} ${ast.operator} ${rightSQL}`; } @@ -26,7 +43,7 @@ export function buildSQLFromAST(ast) { } return expr; } else if (ast.type === "column_ref") { - return "`" + ast.column + "`"; + return quoteColumn(ast.column, db); } else if (ast.type === "expr_list") { return ast.value.map((v) => v.value).join(" AND "); } else { diff --git a/src/utils/importSQL/sqlite.js b/src/utils/importSQL/sqlite.js index 7a1c9c3..28f359d 100644 --- a/src/utils/importSQL/sqlite.js +++ b/src/utils/importSQL/sqlite.js @@ -110,7 +110,7 @@ export function fromSQLite(ast, diagramDb = DB.GENERIC) { } field.check = ""; if (d.check) { - field.check = buildSQLFromAST(d.check.definition[0]); + field.check = buildSQLFromAST(d.check.definition[0], DB.SQLITE); } table.fields.push(field);