Support empty strings and strings with quotes for default (#10)
This commit is contained in:
parent
9c34e6c40d
commit
895059c76a
@ -1,6 +1,8 @@
|
|||||||
|
import { strHasQuotes } from "./utils";
|
||||||
|
|
||||||
function validateDateStr(str) {
|
function validateDateStr(str) {
|
||||||
return /^(?!0000)(?!00)(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9]|3[01])|(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31))$/.test(
|
return /^(?!0000)(?!00)(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9]|3[01])|(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31))$/.test(
|
||||||
str
|
str,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -17,6 +19,9 @@ function checkDefault(field) {
|
|||||||
return field.values.includes(field.default);
|
return field.values.includes(field.default);
|
||||||
case "CHAR":
|
case "CHAR":
|
||||||
case "VARCHAR":
|
case "VARCHAR":
|
||||||
|
if (strHasQuotes(field.default)) {
|
||||||
|
return field.default.length - 2 <= field.size;
|
||||||
|
}
|
||||||
return field.default.length <= field.size;
|
return field.default.length <= field.size;
|
||||||
case "BINARY":
|
case "BINARY":
|
||||||
case "VARBINARY":
|
case "VARBINARY":
|
||||||
@ -94,26 +99,26 @@ export function getIssues(diagram) {
|
|||||||
} else if (field.type === "ENUM" || field.type === "SET") {
|
} else if (field.type === "ENUM" || field.type === "SET") {
|
||||||
if (!field.values || field.values.length === 0) {
|
if (!field.values || field.values.length === 0) {
|
||||||
issues.push(
|
issues.push(
|
||||||
`"${field.name}" field of table "${table.name}" is of type ${field.type} but no values have been specified`
|
`"${field.name}" field of table "${table.name}" is of type ${field.type} but no values have been specified`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!checkDefault(field)) {
|
if (!checkDefault(field)) {
|
||||||
issues.push(
|
issues.push(
|
||||||
`Default value for field "${field.name}" in table "${table.name}" does not match its type.`
|
`Default value for field "${field.name}" in table "${table.name}" does not match its type.`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (field.notNull && field.default.toLowerCase() === "null") {
|
if (field.notNull && field.default.toLowerCase() === "null") {
|
||||||
issues.push(
|
issues.push(
|
||||||
`"${field.name}" field of table "${table.name}" is NOT NULL but has default NULL`
|
`"${field.name}" field of table "${table.name}" is NOT NULL but has default NULL`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (field.type === "DOUBLE" && field.size !== "") {
|
if (field.type === "DOUBLE" && field.size !== "") {
|
||||||
issues.push(
|
issues.push(
|
||||||
`Specifying number of digits for floating point data types is deprecated.`
|
`Specifying number of digits for floating point data types is deprecated.`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,14 +177,14 @@ export function getIssues(diagram) {
|
|||||||
} else if (field.type === "ENUM" || field.type === "SET") {
|
} else if (field.type === "ENUM" || field.type === "SET") {
|
||||||
if (!field.values || field.values.length === 0) {
|
if (!field.values || field.values.length === 0) {
|
||||||
issues.push(
|
issues.push(
|
||||||
`"${field.name}" field of type "${type.name}" is of type ${field.type} but no values have been specified`
|
`"${field.name}" field of type "${type.name}" is of type ${field.type} but no values have been specified`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (field.type === "DOUBLE" && field.size !== "") {
|
if (field.type === "DOUBLE" && field.size !== "") {
|
||||||
issues.push(
|
issues.push(
|
||||||
`Specifying number of digits for floating point data types is deprecated.`
|
`Specifying number of digits for floating point data types is deprecated.`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,7 +222,7 @@ export function getIssues(diagram) {
|
|||||||
function checkCircularRelationships(tableId, visited = []) {
|
function checkCircularRelationships(tableId, visited = []) {
|
||||||
if (visited.includes(tableId)) {
|
if (visited.includes(tableId)) {
|
||||||
issues.push(
|
issues.push(
|
||||||
`Circular relationship involving table: "${diagram.tables[tableId].name}"`
|
`Circular relationship involving table: "${diagram.tables[tableId].name}"`,
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { sqlDataTypes } from "../data/constants";
|
import { sqlDataTypes } from "../data/constants";
|
||||||
|
import { strHasQuotes } from "./utils";
|
||||||
|
|
||||||
export function getJsonType(f) {
|
export function getJsonType(f) {
|
||||||
if (!sqlDataTypes.includes(f.type)) {
|
if (!sqlDataTypes.includes(f.type)) {
|
||||||
@ -34,7 +35,7 @@ export function generateSchema(type) {
|
|||||||
return `{\n\t\t\t"$schema": "http://json-schema.org/draft-04/schema#",\n\t\t\t"type": "object",\n\t\t\t"properties": {\n\t\t\t\t${type.fields
|
return `{\n\t\t\t"$schema": "http://json-schema.org/draft-04/schema#",\n\t\t\t"type": "object",\n\t\t\t"properties": {\n\t\t\t\t${type.fields
|
||||||
.map((f) => `"${f.name}" : ${getJsonType(f)}`)
|
.map((f) => `"${f.name}" : ${getJsonType(f)}`)
|
||||||
.join(
|
.join(
|
||||||
",\n\t\t\t\t"
|
",\n\t\t\t\t",
|
||||||
)}\n\t\t\t},\n\t\t\t"additionalProperties": false\n\t\t}`;
|
)}\n\t\t\t},\n\t\t\t"additionalProperties": false\n\t\t}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,8 +84,8 @@ export function getTypeString(field, dbms = "mysql", baseType = false) {
|
|||||||
field.type === "BINARY"
|
field.type === "BINARY"
|
||||||
? "bit"
|
? "bit"
|
||||||
: field.type === "VARBINARY"
|
: field.type === "VARBINARY"
|
||||||
? "bit varying"
|
? "bit varying"
|
||||||
: field.type.toLowerCase();
|
: field.type.toLowerCase();
|
||||||
return `${type}(${field.size})`;
|
return `${type}(${field.size})`;
|
||||||
}
|
}
|
||||||
if (hasPrecision(field.type) && field.size !== "") {
|
if (hasPrecision(field.type) && field.size !== "") {
|
||||||
@ -145,6 +146,16 @@ export function hasQuotes(type) {
|
|||||||
].includes(type);
|
].includes(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function parseDefault(field) {
|
||||||
|
if (strHasQuotes(field.default)) {
|
||||||
|
return field.default;
|
||||||
|
}
|
||||||
|
|
||||||
|
return hasQuotes(field.type) && field.default.toLowerCase() !== "null"
|
||||||
|
? `'${field.default}'`
|
||||||
|
: `${field.default}`;
|
||||||
|
}
|
||||||
|
|
||||||
export function jsonToMySQL(obj) {
|
export function jsonToMySQL(obj) {
|
||||||
return `${obj.tables
|
return `${obj.tables
|
||||||
.map(
|
.map(
|
||||||
@ -159,25 +170,18 @@ export function jsonToMySQL(obj) {
|
|||||||
}\` ${getTypeString(field)}${field.notNull ? " NOT NULL" : ""}${
|
}\` ${getTypeString(field)}${field.notNull ? " NOT NULL" : ""}${
|
||||||
field.increment ? " AUTO_INCREMENT" : ""
|
field.increment ? " AUTO_INCREMENT" : ""
|
||||||
}${field.unique ? " UNIQUE" : ""}${
|
}${field.unique ? " UNIQUE" : ""}${
|
||||||
field.default !== ""
|
field.default !== "" ? ` DEFAULT ${parseDefault(field)}` : ""
|
||||||
? ` DEFAULT ${
|
|
||||||
hasQuotes(field.type) &&
|
|
||||||
field.default.toLowerCase() !== "null"
|
|
||||||
? `"${field.default}"`
|
|
||||||
: `${field.default}`
|
|
||||||
}`
|
|
||||||
: ""
|
|
||||||
}${
|
}${
|
||||||
field.check === "" || !hasCheck(field.type)
|
field.check === "" || !hasCheck(field.type)
|
||||||
? !sqlDataTypes.includes(field.type)
|
? !sqlDataTypes.includes(field.type)
|
||||||
? ` CHECK(\n\t\tJSON_SCHEMA_VALID("${generateSchema(
|
? ` CHECK(\n\t\tJSON_SCHEMA_VALID("${generateSchema(
|
||||||
obj.types.find(
|
obj.types.find(
|
||||||
(t) => t.name === field.type.toLowerCase()
|
(t) => t.name === field.type.toLowerCase(),
|
||||||
)
|
),
|
||||||
)}", \`${field.name}\`))`
|
)}", \`${field.name}\`))`
|
||||||
: ""
|
: ""
|
||||||
: ` CHECK(${field.check})`
|
: ` CHECK(${field.check})`
|
||||||
}`
|
}`,
|
||||||
)
|
)
|
||||||
.join(",\n")}${
|
.join(",\n")}${
|
||||||
table.fields.filter((f) => f.primary).length > 0
|
table.fields.filter((f) => f.primary).length > 0
|
||||||
@ -194,10 +198,10 @@ export function jsonToMySQL(obj) {
|
|||||||
i.name
|
i.name
|
||||||
}\`\nON \`${table.name}\` (${i.fields
|
}\`\nON \`${table.name}\` (${i.fields
|
||||||
.map((f) => `\`${f}\``)
|
.map((f) => `\`${f}\``)
|
||||||
.join(", ")});`
|
.join(", ")});`,
|
||||||
)}`
|
)}`
|
||||||
: ""
|
: ""
|
||||||
}`
|
}`,
|
||||||
)
|
)
|
||||||
.join("\n")}\n${obj.references
|
.join("\n")}\n${obj.references
|
||||||
.map(
|
.map(
|
||||||
@ -208,7 +212,7 @@ export function jsonToMySQL(obj) {
|
|||||||
obj.tables[r.startTableId].fields[r.startFieldId].name
|
obj.tables[r.startTableId].fields[r.startFieldId].name
|
||||||
}\`) REFERENCES \`${obj.tables[r.endTableId].name}\`(\`${
|
}\`) REFERENCES \`${obj.tables[r.endTableId].name}\`(\`${
|
||||||
obj.tables[r.endTableId].fields[r.endFieldId].name
|
obj.tables[r.endTableId].fields[r.endFieldId].name
|
||||||
}\`)\nON UPDATE ${r.updateConstraint.toUpperCase()} ON DELETE ${r.deleteConstraint.toUpperCase()};`
|
}\`)\nON UPDATE ${r.updateConstraint.toUpperCase()} ON DELETE ${r.deleteConstraint.toUpperCase()};`,
|
||||||
)
|
)
|
||||||
.join("\n")}`;
|
.join("\n")}`;
|
||||||
}
|
}
|
||||||
@ -221,7 +225,7 @@ export function jsonToPostgreSQL(obj) {
|
|||||||
(f) =>
|
(f) =>
|
||||||
`CREATE TYPE "${f.name}_t" AS ENUM (${f.values
|
`CREATE TYPE "${f.name}_t" AS ENUM (${f.values
|
||||||
.map((v) => `'${v}'`)
|
.map((v) => `'${v}'`)
|
||||||
.join(", ")});\n`
|
.join(", ")});\n`,
|
||||||
);
|
);
|
||||||
if (typeStatements.length > 0) {
|
if (typeStatements.length > 0) {
|
||||||
return (
|
return (
|
||||||
@ -251,7 +255,7 @@ export function jsonToPostgreSQL(obj) {
|
|||||||
(f) =>
|
(f) =>
|
||||||
`CREATE TYPE "${f.name}_t" AS ENUM (${f.values
|
`CREATE TYPE "${f.name}_t" AS ENUM (${f.values
|
||||||
.map((v) => `'${v}'`)
|
.map((v) => `'${v}'`)
|
||||||
.join(", ")});\n\n`
|
.join(", ")});\n\n`,
|
||||||
)}`
|
)}`
|
||||||
: ""
|
: ""
|
||||||
}CREATE TABLE "${table.name}" (\n${table.fields
|
}CREATE TABLE "${table.name}" (\n${table.fields
|
||||||
@ -262,19 +266,12 @@ export function jsonToPostgreSQL(obj) {
|
|||||||
}" ${getTypeString(field, "postgres")}${
|
}" ${getTypeString(field, "postgres")}${
|
||||||
field.notNull ? " NOT NULL" : ""
|
field.notNull ? " NOT NULL" : ""
|
||||||
}${
|
}${
|
||||||
field.default !== ""
|
field.default !== "" ? ` DEFAULT ${parseDefault(field)}` : ""
|
||||||
? ` DEFAULT ${
|
|
||||||
hasQuotes(field.type) &&
|
|
||||||
field.default.toLowerCase() !== "null"
|
|
||||||
? `'${field.default}'`
|
|
||||||
: `${field.default}`
|
|
||||||
}`
|
|
||||||
: ""
|
|
||||||
}${
|
}${
|
||||||
field.check === "" || !hasCheck(field.type)
|
field.check === "" || !hasCheck(field.type)
|
||||||
? ""
|
? ""
|
||||||
: ` CHECK(${field.check})`
|
: ` CHECK(${field.check})`
|
||||||
}`
|
}`,
|
||||||
)
|
)
|
||||||
.join(",\n")}${
|
.join(",\n")}${
|
||||||
table.fields.filter((f) => f.primary).length > 0
|
table.fields.filter((f) => f.primary).length > 0
|
||||||
@ -291,10 +288,10 @@ export function jsonToPostgreSQL(obj) {
|
|||||||
i.name
|
i.name
|
||||||
}"\nON "${table.name}" (${i.fields
|
}"\nON "${table.name}" (${i.fields
|
||||||
.map((f) => `"${f}"`)
|
.map((f) => `"${f}"`)
|
||||||
.join(", ")});`
|
.join(", ")});`,
|
||||||
)}`
|
)}`
|
||||||
: ""
|
: ""
|
||||||
}`
|
}`,
|
||||||
)
|
)
|
||||||
.join("\n")}\n${obj.references
|
.join("\n")}\n${obj.references
|
||||||
.map(
|
.map(
|
||||||
@ -303,7 +300,7 @@ export function jsonToPostgreSQL(obj) {
|
|||||||
obj.tables[r.startTableId].fields[r.startFieldId].name
|
obj.tables[r.startTableId].fields[r.startFieldId].name
|
||||||
}") REFERENCES "${obj.tables[r.endTableId].name}"("${
|
}") REFERENCES "${obj.tables[r.endTableId].name}"("${
|
||||||
obj.tables[r.endTableId].fields[r.endFieldId].name
|
obj.tables[r.endTableId].fields[r.endFieldId].name
|
||||||
}")\nON UPDATE ${r.updateConstraint.toUpperCase()} ON DELETE ${r.deleteConstraint.toUpperCase()};`
|
}")\nON UPDATE ${r.updateConstraint.toUpperCase()} ON DELETE ${r.deleteConstraint.toUpperCase()};`,
|
||||||
)
|
)
|
||||||
.join("\n")}`;
|
.join("\n")}`;
|
||||||
}
|
}
|
||||||
@ -369,20 +366,11 @@ export function jsonToSQLite(obj) {
|
|||||||
field.name
|
field.name
|
||||||
}" ${getSQLiteType(field)}${field.notNull ? " NOT NULL" : ""}${
|
}" ${getSQLiteType(field)}${field.notNull ? " NOT NULL" : ""}${
|
||||||
field.unique ? " UNIQUE" : ""
|
field.unique ? " UNIQUE" : ""
|
||||||
}${
|
}${field.default !== "" ? ` DEFAULT ${parseDefault(field)}` : ""}${
|
||||||
field.default !== ""
|
|
||||||
? ` DEFAULT ${
|
|
||||||
hasQuotes(field.type) &&
|
|
||||||
field.default.toLowerCase() !== "null"
|
|
||||||
? `'${field.default}'`
|
|
||||||
: `${field.default}`
|
|
||||||
}`
|
|
||||||
: ""
|
|
||||||
}${
|
|
||||||
field.check === "" || !hasCheck(field.type)
|
field.check === "" || !hasCheck(field.type)
|
||||||
? ""
|
? ""
|
||||||
: ` CHECK(${field.check})`
|
: ` CHECK(${field.check})`
|
||||||
}`
|
}`,
|
||||||
)
|
)
|
||||||
.join(",\n")}${
|
.join(",\n")}${
|
||||||
table.fields.filter((f) => f.primary).length > 0
|
table.fields.filter((f) => f.primary).length > 0
|
||||||
@ -400,7 +388,7 @@ export function jsonToSQLite(obj) {
|
|||||||
i.name
|
i.name
|
||||||
}"\nON "${table.name}" (${i.fields
|
}"\nON "${table.name}" (${i.fields
|
||||||
.map((f) => `"${f}"`)
|
.map((f) => `"${f}"`)
|
||||||
.join(", ")});`
|
.join(", ")});`,
|
||||||
)
|
)
|
||||||
.join("\n")}`
|
.join("\n")}`
|
||||||
: ""
|
: ""
|
||||||
@ -423,25 +411,18 @@ export function jsonToMariaDB(obj) {
|
|||||||
}\` ${getTypeString(field)}${field.notNull ? " NOT NULL" : ""}${
|
}\` ${getTypeString(field)}${field.notNull ? " NOT NULL" : ""}${
|
||||||
field.increment ? " AUTO_INCREMENT" : ""
|
field.increment ? " AUTO_INCREMENT" : ""
|
||||||
}${field.unique ? " UNIQUE" : ""}${
|
}${field.unique ? " UNIQUE" : ""}${
|
||||||
field.default !== ""
|
field.default !== "" ? ` DEFAULT ${parseDefault(field)}` : ""
|
||||||
? ` DEFAULT ${
|
|
||||||
hasQuotes(field.type) &&
|
|
||||||
field.default.toLowerCase() !== "null"
|
|
||||||
? `"${field.default}"`
|
|
||||||
: `${field.default}`
|
|
||||||
}`
|
|
||||||
: ""
|
|
||||||
}${
|
}${
|
||||||
field.check === "" || !hasCheck(field.type)
|
field.check === "" || !hasCheck(field.type)
|
||||||
? !sqlDataTypes.includes(field.type)
|
? !sqlDataTypes.includes(field.type)
|
||||||
? ` CHECK(\n\t\tJSON_SCHEMA_VALID('${generateSchema(
|
? ` CHECK(\n\t\tJSON_SCHEMA_VALID('${generateSchema(
|
||||||
obj.types.find(
|
obj.types.find(
|
||||||
(t) => t.name === field.type.toLowerCase()
|
(t) => t.name === field.type.toLowerCase(),
|
||||||
)
|
),
|
||||||
)}', \`${field.name}\`))`
|
)}', \`${field.name}\`))`
|
||||||
: ""
|
: ""
|
||||||
: ` CHECK(${field.check})`
|
: ` CHECK(${field.check})`
|
||||||
}`
|
}`,
|
||||||
)
|
)
|
||||||
.join(",\n")}${
|
.join(",\n")}${
|
||||||
table.fields.filter((f) => f.primary).length > 0
|
table.fields.filter((f) => f.primary).length > 0
|
||||||
@ -458,10 +439,10 @@ export function jsonToMariaDB(obj) {
|
|||||||
i.name
|
i.name
|
||||||
}\`\nON \`${table.name}\` (${i.fields
|
}\`\nON \`${table.name}\` (${i.fields
|
||||||
.map((f) => `\`${f}\``)
|
.map((f) => `\`${f}\``)
|
||||||
.join(", ")});`
|
.join(", ")});`,
|
||||||
)}`
|
)}`
|
||||||
: ""
|
: ""
|
||||||
}`
|
}`,
|
||||||
)
|
)
|
||||||
.join("\n")}\n${obj.references
|
.join("\n")}\n${obj.references
|
||||||
.map(
|
.map(
|
||||||
@ -472,7 +453,7 @@ export function jsonToMariaDB(obj) {
|
|||||||
obj.tables[r.startTableId].fields[r.startFieldId].name
|
obj.tables[r.startTableId].fields[r.startFieldId].name
|
||||||
}\`) REFERENCES \`${obj.tables[r.endTableId].name}\`(\`${
|
}\`) REFERENCES \`${obj.tables[r.endTableId].name}\`(\`${
|
||||||
obj.tables[r.endTableId].fields[r.endFieldId].name
|
obj.tables[r.endTableId].fields[r.endFieldId].name
|
||||||
}\`)\nON UPDATE ${r.updateConstraint.toUpperCase()} ON DELETE ${r.deleteConstraint.toUpperCase()};`
|
}\`)\nON UPDATE ${r.updateConstraint.toUpperCase()} ON DELETE ${r.deleteConstraint.toUpperCase()};`,
|
||||||
)
|
)
|
||||||
.join("\n")}`;
|
.join("\n")}`;
|
||||||
}
|
}
|
||||||
@ -503,19 +484,12 @@ export function jsonToSQLServer(obj) {
|
|||||||
}${field.increment ? " IDENTITY" : ""}${
|
}${field.increment ? " IDENTITY" : ""}${
|
||||||
field.unique ? " UNIQUE" : ""
|
field.unique ? " UNIQUE" : ""
|
||||||
}${
|
}${
|
||||||
field.default !== ""
|
field.default !== "" ? ` DEFAULT ${parseDefault(field)}` : ""
|
||||||
? ` DEFAULT ${
|
|
||||||
hasQuotes(field.type) &&
|
|
||||||
field.default.toLowerCase() !== "null"
|
|
||||||
? `'${field.default}'`
|
|
||||||
: `${field.default}`
|
|
||||||
}`
|
|
||||||
: ""
|
|
||||||
}${
|
}${
|
||||||
field.check === "" || !hasCheck(field.type)
|
field.check === "" || !hasCheck(field.type)
|
||||||
? ""
|
? ""
|
||||||
: ` CHECK(${field.check})`
|
: ` CHECK(${field.check})`
|
||||||
}`
|
}`,
|
||||||
)
|
)
|
||||||
.join(",\n")}${
|
.join(",\n")}${
|
||||||
table.fields.filter((f) => f.primary).length > 0
|
table.fields.filter((f) => f.primary).length > 0
|
||||||
@ -532,10 +506,10 @@ export function jsonToSQLServer(obj) {
|
|||||||
i.name
|
i.name
|
||||||
}]\nON [${table.name}] (${i.fields
|
}]\nON [${table.name}] (${i.fields
|
||||||
.map((f) => `[${f}]`)
|
.map((f) => `[${f}]`)
|
||||||
.join(", ")});\nGO\n`
|
.join(", ")});\nGO\n`,
|
||||||
)}`
|
)}`
|
||||||
: ""
|
: ""
|
||||||
}`
|
}`,
|
||||||
)
|
)
|
||||||
.join("\n")}\n${obj.references
|
.join("\n")}\n${obj.references
|
||||||
.map(
|
.map(
|
||||||
@ -544,7 +518,7 @@ export function jsonToSQLServer(obj) {
|
|||||||
obj.tables[r.startTableId].fields[r.startFieldId].name
|
obj.tables[r.startTableId].fields[r.startFieldId].name
|
||||||
}]) REFERENCES [${obj.tables[r.endTableId].name}]([${
|
}]) REFERENCES [${obj.tables[r.endTableId].name}]([${
|
||||||
obj.tables[r.endTableId].fields[r.endFieldId].name
|
obj.tables[r.endTableId].fields[r.endFieldId].name
|
||||||
}])\nON UPDATE ${r.updateConstraint.toUpperCase()} ON DELETE ${r.deleteConstraint.toUpperCase()};\nGO`
|
}])\nON UPDATE ${r.updateConstraint.toUpperCase()} ON DELETE ${r.deleteConstraint.toUpperCase()};\nGO`,
|
||||||
)
|
)
|
||||||
.join("\n")}`;
|
.join("\n")}`;
|
||||||
}
|
}
|
||||||
|
@ -14,3 +14,13 @@ export function dataURItoBlob(dataUrl) {
|
|||||||
export function arrayIsEqual(arr1, arr2) {
|
export function arrayIsEqual(arr1, arr2) {
|
||||||
return JSON.stringify(arr1) === JSON.stringify(arr2);
|
return JSON.stringify(arr1) === JSON.stringify(arr2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function strHasQuotes(str) {
|
||||||
|
if (str.length < 2) return false;
|
||||||
|
|
||||||
|
return (
|
||||||
|
(str[0] === str[str.length - 1] && str[0] === "'") ||
|
||||||
|
(str[0] === str[str.length - 1] && str[0] === '"') ||
|
||||||
|
(str[0] === str[str.length - 1] && str[0] === "`")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user