UNPKG

nsgm-cli

Version:

A CLI tool to run Next/Style-components and Graphql/Mysql fullstack project

53 lines (51 loc) 1.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SQLGenerator = void 0; const base_generator_1 = require("./base-generator"); /** * SQL生成器 * 专门负责生成数据库表结构 */ class SQLGenerator extends base_generator_1.BaseGenerator { generate() { const fieldDefinitions = this.fields.map((field) => { let sql = ` \`${field.name}\``; // 数据类型 sql += ` ${this.getSQLType(field)}`; // 是否必填 if (field.required && !field.isAutoIncrement) { sql += ' NOT NULL'; } else if (!field.required) { sql += ' DEFAULT NULL'; } // 自增 if (field.isAutoIncrement) { sql += ' AUTO_INCREMENT'; } // 默认值 if (field.type === 'timestamp' && field.name === 'create_date') { sql += ' DEFAULT CURRENT_TIMESTAMP(3)'; } else if (field.type === 'timestamp' && field.name === 'update_date') { sql += ' DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3)'; } else if (field.type === 'varchar' && field.name !== 'id' && !field.required) { sql += " DEFAULT ''"; } // 注释 if (field.comment) { sql += ` COMMENT '${field.comment}'`; } return sql; }); const primaryKeyField = this.fields.find((f) => f.isPrimaryKey); const primaryKey = primaryKeyField ? ` PRIMARY KEY (\`${primaryKeyField.name}\`)` : ''; return `use crm_demo; CREATE TABLE \`${this.controller}\` ( ${fieldDefinitions.join(',\n')}, ${primaryKey} ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;`; } } exports.SQLGenerator = SQLGenerator;