(obj)
| 190 | } |
| 191 | |
| 192 | export function jsonToMySQL(obj) { |
| 193 | return `${obj.tables |
| 194 | .map( |
| 195 | (table) => |
| 196 | `CREATE TABLE IF NOT EXISTS \`${table.name}\` (\n${table.fields |
| 197 | .map( |
| 198 | (field) => |
| 199 | `\t\`${ |
| 200 | field.name |
| 201 | }\` ${getTypeString(field, obj.database)}${field.notNull ? " NOT NULL" : ""}${ |
| 202 | field.increment ? " AUTO_INCREMENT" : "" |
| 203 | }${field.unique ? " UNIQUE" : ""}${ |
| 204 | field.default !== "" |
| 205 | ? ` DEFAULT ${parseDefault(field, obj.database)}` |
| 206 | : "" |
| 207 | }${ |
| 208 | field.check === "" || |
| 209 | !dbToTypes[obj.database][field.type].hasCheck |
| 210 | ? !Object.keys(defaultTypes).includes(field.type) |
| 211 | ? ` CHECK(\n\t\tJSON_SCHEMA_VALID("${generateSchema( |
| 212 | obj.types.find( |
| 213 | (t) => t.name === field.type.toLowerCase(), |
| 214 | ), |
| 215 | )}", \`${field.name}\`))` |
| 216 | : "" |
| 217 | : ` CHECK(${field.check})` |
| 218 | }${field.comment ? ` COMMENT '${escapeQuotes(field.comment)}'` : ""}`, |
| 219 | ) |
| 220 | .join(",\n")}${ |
| 221 | table.fields.filter((f) => f.primary).length > 0 |
| 222 | ? `,\n\tPRIMARY KEY(${table.fields |
| 223 | .filter((f) => f.primary) |
| 224 | .map((f) => `\`${f.name}\``) |
| 225 | .join(", ")})` |
| 226 | : "" |
| 227 | }${uniqueConstraintClause(table, (s) => `\`${s}\``)}\n)${table.comment ? ` COMMENT='${escapeQuotes(table.comment)}'` : ""};\n${`\n${table.indices |
| 228 | .map( |
| 229 | (i) => |
| 230 | `CREATE ${i.unique ? "UNIQUE " : ""}INDEX \`${i.name}\`\nON \`${table.name}\` (${i.fields |
| 231 | .map((f) => `\`${f}\``) |
| 232 | .join(", ")});`, |
| 233 | ) |
| 234 | .join("\n")}`}`, |
| 235 | ) |
| 236 | .join("\n")}\n${obj.references |
| 237 | .map((r) => { |
| 238 | const { name: startName, fields: startFields } = obj.tables.find( |
| 239 | (t) => t.id === r.startTableId, |
| 240 | ); |
| 241 | |
| 242 | const endTable = obj.tables.find((t) => t.id === r.endTableId); |
| 243 | const { name: endName } = endTable; |
| 244 | const { startColumns, endColumns } = getFkColumnNames( |
| 245 | r, |
| 246 | { fields: startFields }, |
| 247 | endTable, |
| 248 | ); |
| 249 | return `ALTER TABLE \`${startName}\`\nADD FOREIGN KEY(${startColumns |
no test coverage detected