Fix quotes on columns in checks

This commit is contained in:
1ilit 2024-07-07 16:55:04 +03:00
parent 897c125e3b
commit 9e2bb48fb8
6 changed files with 26 additions and 9 deletions

View File

@ -92,7 +92,7 @@ export function fromMariaDB(ast, diagramDb = DB.GENERIC) {
} }
field.check = ""; field.check = "";
if (d.check) { if (d.check) {
field.check = buildSQLFromAST(d.check.definition[0]); field.check = buildSQLFromAST(d.check.definition[0], DB.MARIADB);
} }
table.fields.push(field); table.fields.push(field);

View File

@ -104,7 +104,7 @@ export function fromMSSQL(ast, diagramDb = DB.GENERIC) {
} }
field.check = ""; field.check = "";
if (d.check) { if (d.check) {
field.check = buildSQLFromAST(d.check.definition[0]); field.check = buildSQLFromAST(d.check.definition[0], DB.MSSQL);
} }
table.fields.push(field); table.fields.push(field);

View File

@ -92,7 +92,7 @@ export function fromMySQL(ast, diagramDb = DB.GENERIC) {
} }
field.check = ""; field.check = "";
if (d.check) { if (d.check) {
field.check = buildSQLFromAST(d.check.definition[0]); field.check = buildSQLFromAST(d.check.definition[0], DB.MYSQL);
} }
table.fields.push(field); table.fields.push(field);

View File

@ -92,7 +92,7 @@ export function fromPostgres(ast, diagramDb = DB.GENERIC) {
} }
field.check = ""; field.check = "";
if (d.check) { if (d.check) {
field.check = buildSQLFromAST(d.check.definition[0]); field.check = buildSQLFromAST(d.check.definition[0], DB.POSTGRES);
} }
table.fields.push(field); table.fields.push(field);

View File

@ -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") { if (ast.type === "binary_expr") {
const leftSQL = buildSQLFromAST(ast.left); const leftSQL = buildSQLFromAST(ast.left, db);
const rightSQL = buildSQLFromAST(ast.right); const rightSQL = buildSQLFromAST(ast.right, db);
return `${leftSQL} ${ast.operator} ${rightSQL}`; return `${leftSQL} ${ast.operator} ${rightSQL}`;
} }
@ -26,7 +43,7 @@ export function buildSQLFromAST(ast) {
} }
return expr; return expr;
} else if (ast.type === "column_ref") { } else if (ast.type === "column_ref") {
return "`" + ast.column + "`"; return quoteColumn(ast.column, db);
} else if (ast.type === "expr_list") { } else if (ast.type === "expr_list") {
return ast.value.map((v) => v.value).join(" AND "); return ast.value.map((v) => v.value).join(" AND ");
} else { } else {

View File

@ -110,7 +110,7 @@ export function fromSQLite(ast, diagramDb = DB.GENERIC) {
} }
field.check = ""; field.check = "";
if (d.check) { if (d.check) {
field.check = buildSQLFromAST(d.check.definition[0]); field.check = buildSQLFromAST(d.check.definition[0], DB.SQLITE);
} }
table.fields.push(field); table.fields.push(field);