@eggjs/dal-runtime
Version:
tegg dal decorator
395 lines • 31.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SqlGenerator = void 0;
const tegg_types_1 = require("@eggjs/tegg-types");
// TODO diff 实现
class SqlGenerator {
formatComment(comment) {
return comment.replace(/\n/g, '\\n');
}
generateColumn(column) {
const sqls = [
' ',
column.columnName,
this.generateColumnType(column.type),
];
if (column.canNull) {
sqls.push('NULL');
}
else {
sqls.push('NOT NULL');
}
if ([
tegg_types_1.ColumnType.POINT,
tegg_types_1.ColumnType.GEOMETRY,
tegg_types_1.ColumnType.POINT,
tegg_types_1.ColumnType.LINESTRING,
tegg_types_1.ColumnType.POLYGON,
tegg_types_1.ColumnType.MULTIPOINT,
tegg_types_1.ColumnType.MULTILINESTRING,
tegg_types_1.ColumnType.MULTIPOLYGON,
tegg_types_1.ColumnType.GEOMETRYCOLLECTION,
].includes(column.type.type)) {
const SRID = column.type.SRID;
if (SRID) {
sqls.push(`SRID ${SRID}`);
}
}
if (typeof column.default !== 'undefined') {
sqls.push(`DEFAULT ${column.default}`);
}
if (column.autoIncrement) {
sqls.push('AUTO_INCREMENT');
}
if (column.uniqueKey) {
sqls.push('UNIQUE KEY');
}
if (column.primaryKey) {
sqls.push('PRIMARY KEY');
}
if (column.comment) {
sqls.push(`COMMENT '${this.formatComment(column.comment)}'`);
}
if (column.collate) {
sqls.push(`COLLATE ${column.collate}`);
}
if (column.columnFormat) {
sqls.push(`COLUMN_FORMAT ${column.columnFormat}`);
}
if (column.engineAttribute) {
sqls.push(`ENGINE_ATTRIBUTE='${column.engineAttribute}'`);
}
if (column.secondaryEngineAttribute) {
sqls.push(`SECONDARY_ENGINE_ATTRIBUTE='${column.secondaryEngineAttribute}'`);
}
return sqls.join(' ');
}
generateColumnType(columnType) {
const sqls = [];
switch (columnType.type) {
case tegg_types_1.ColumnType.BOOL: {
sqls.push('BOOL');
break;
}
case tegg_types_1.ColumnType.BIT: {
if (columnType.length) {
sqls.push(`BIT(${columnType.length})`);
}
else {
sqls.push('BIT');
}
break;
}
case tegg_types_1.ColumnType.TINYINT:
case tegg_types_1.ColumnType.SMALLINT:
case tegg_types_1.ColumnType.MEDIUMINT:
case tegg_types_1.ColumnType.INT:
case tegg_types_1.ColumnType.BIGINT: {
if (typeof columnType.length === 'number') {
sqls.push(`${columnType.type}(${columnType.length})`);
}
else {
sqls.push(columnType.type);
}
if (columnType.unsigned) {
sqls.push('UNSIGNED');
}
if (columnType.zeroFill) {
sqls.push('ZEROFILL');
}
break;
}
case tegg_types_1.ColumnType.DECIMAL:
case tegg_types_1.ColumnType.FLOAT:
case tegg_types_1.ColumnType.DOUBLE: {
if (typeof columnType.length === 'number' && typeof columnType.fractionalLength === 'number') {
sqls.push(`${columnType.type}(${columnType.length},${columnType.fractionalLength})`);
}
else if (typeof columnType.length === 'number') {
sqls.push(`${columnType.type}(${columnType.length})`);
}
else {
sqls.push('TINYINT');
}
if (columnType.unsigned) {
sqls.push('UNSIGNED');
}
if (columnType.zeroFill) {
sqls.push('ZEROFILL');
}
break;
}
case tegg_types_1.ColumnType.DATE: {
sqls.push('DATE');
break;
}
case tegg_types_1.ColumnType.DATETIME:
case tegg_types_1.ColumnType.TIMESTAMP: {
if (columnType.precision) {
sqls.push(`${columnType.type}(${columnType.precision})`);
}
else {
sqls.push(columnType.type);
}
if (columnType.autoUpdate) {
if (columnType.precision) {
sqls.push(`ON UPDATE CURRENT_TIMESTAMP(${columnType.precision})`);
}
else {
sqls.push('ON UPDATE CURRENT_TIMESTAMP');
}
}
break;
}
case tegg_types_1.ColumnType.TIME: {
if (columnType.precision) {
sqls.push(`${columnType.type}(${columnType.precision})`);
}
else {
sqls.push(columnType.type);
}
break;
}
case tegg_types_1.ColumnType.YEAR: {
sqls.push('YEAR');
break;
}
case tegg_types_1.ColumnType.CHAR:
case tegg_types_1.ColumnType.TEXT: {
if (columnType.length) {
sqls.push(`${columnType.type}(${columnType.length})`);
}
else {
sqls.push(columnType.type);
}
if (columnType.characterSet) {
sqls.push(`CHARACTER SET ${columnType.characterSet}`);
}
if (columnType.collate) {
sqls.push(`COLLATE ${columnType.collate}`);
}
break;
}
case tegg_types_1.ColumnType.VARCHAR: {
sqls.push(`${columnType.type}(${columnType.length})`);
if (columnType.characterSet) {
sqls.push(`CHARACTER SET ${columnType.characterSet}`);
}
if (columnType.collate) {
sqls.push(`COLLATE ${columnType.collate}`);
}
break;
}
case tegg_types_1.ColumnType.BINARY: {
if (columnType.length) {
sqls.push(`${columnType.type}(${columnType.length})`);
}
else {
sqls.push(columnType.type);
}
break;
}
case tegg_types_1.ColumnType.VARBINARY: {
sqls.push(`${columnType.type}(${columnType.length})`);
break;
}
case tegg_types_1.ColumnType.TINYBLOB: {
sqls.push('TINYBLOB');
break;
}
case tegg_types_1.ColumnType.TINYTEXT:
case tegg_types_1.ColumnType.MEDIUMTEXT:
case tegg_types_1.ColumnType.LONGTEXT: {
sqls.push(columnType.type);
if (columnType.characterSet) {
sqls.push(`CHARACTER SET ${columnType.characterSet}`);
}
if (columnType.collate) {
sqls.push(`COLLATE ${columnType.collate}`);
}
break;
}
case tegg_types_1.ColumnType.BLOB: {
if (columnType.length) {
sqls.push(`${columnType.type}(${columnType.length})`);
}
else {
sqls.push(columnType.type);
}
break;
}
case tegg_types_1.ColumnType.MEDIUMBLOB: {
sqls.push('MEDIUMBLOB');
break;
}
case tegg_types_1.ColumnType.LONGBLOB: {
sqls.push('LONGBLOB');
break;
}
case tegg_types_1.ColumnType.ENUM: {
const enumValue = columnType.enums.map(t => `'${t}'`).join(',');
sqls.push(`ENUM(${enumValue})`);
if (columnType.characterSet) {
sqls.push(`CHARACTER SET ${columnType.characterSet}`);
}
if (columnType.collate) {
sqls.push(`COLLATE ${columnType.collate}`);
}
break;
}
case tegg_types_1.ColumnType.SET: {
const enumValue = columnType.enums.map(t => `'${t}'`).join(',');
sqls.push(`SET(${enumValue})`);
if (columnType.characterSet) {
sqls.push(`CHARACTER SET ${columnType.characterSet}`);
}
if (columnType.collate) {
sqls.push(`COLLATE ${columnType.collate}`);
}
break;
}
case tegg_types_1.ColumnType.JSON: {
sqls.push('JSON');
break;
}
case tegg_types_1.ColumnType.GEOMETRY:
case tegg_types_1.ColumnType.POINT:
case tegg_types_1.ColumnType.LINESTRING:
case tegg_types_1.ColumnType.POLYGON:
case tegg_types_1.ColumnType.MULTIPOINT:
case tegg_types_1.ColumnType.MULTILINESTRING:
case tegg_types_1.ColumnType.MULTIPOLYGON:
case tegg_types_1.ColumnType.GEOMETRYCOLLECTION: {
sqls.push(columnType.type);
break;
}
default: {
throw new Error(`unknown ColumnType ${columnType}`);
}
}
return sqls.join(' ');
}
generateIndex(indexModel) {
const indexSql = [
' ',
];
switch (indexModel.type) {
case tegg_types_1.IndexType.INDEX: {
indexSql.push('KEY');
break;
}
case tegg_types_1.IndexType.UNIQUE: {
indexSql.push('UNIQUE KEY');
break;
}
case tegg_types_1.IndexType.PRIMARY: {
indexSql.push('PRIMARY KEY');
break;
}
case tegg_types_1.IndexType.FULLTEXT: {
indexSql.push('FULLTEXT KEY');
break;
}
case tegg_types_1.IndexType.SPATIAL: {
indexSql.push('SPATIAL KEY');
break;
}
default: {
throw new Error(`unknown IndexType ${indexModel.type}`);
}
}
indexSql.push(indexModel.name);
indexSql.push(`(${indexModel.keys.map(t => t.columnName).join(',')})`);
if (indexModel.storeType) {
indexSql.push(`USING ${indexModel.storeType}`);
}
if (indexModel.parser) {
indexSql.push(`WITH PARSER ${indexModel.parser}`);
}
if (indexModel.comment) {
indexSql.push(`COMMENT '${this.formatComment(indexModel.comment)}'`);
}
if (indexModel.engineAttribute) {
indexSql.push(`ENGINE_ATTRIBUTE='${indexModel.engineAttribute}'`);
}
if (indexModel.secondaryEngineAttribute) {
indexSql.push(`SECONDARY_ENGINE_ATTRIBUTE='${indexModel.secondaryEngineAttribute}'`);
}
return indexSql.join(' ');
}
generateTableOptions(tableModel) {
const sqls = [];
if (tableModel.autoExtendSize) {
sqls.push(`AUTOEXTEND_SIZE=${tableModel.autoExtendSize}`);
}
if (tableModel.autoIncrement) {
sqls.push(`AUTO_INCREMENT=${tableModel.autoIncrement}`);
}
if (tableModel.avgRowLength) {
sqls.push(`AVG_ROW_LENGTH=${tableModel.avgRowLength}`);
}
if (tableModel.characterSet) {
sqls.push(`DEFAULT CHARACTER SET ${tableModel.characterSet}`);
}
if (tableModel.collate) {
sqls.push(`DEFAULT COLLATE ${tableModel.collate}`);
}
if (tableModel.comment) {
sqls.push(`COMMENT='${this.formatComment(tableModel.comment)}'`);
}
if (tableModel.compression) {
sqls.push(`COMPRESSION='${tableModel.compression}'`);
}
if (typeof tableModel.encryption !== 'undefined') {
sqls.push(`ENCRYPTION='${tableModel.encryption ? 'Y' : 'N'}'`);
}
if (typeof tableModel.engine !== 'undefined') {
sqls.push(`ENGINE=${tableModel.engine}`);
}
if (tableModel.engineAttribute) {
sqls.push(`ENGINE_ATTRIBUTE='${tableModel.engineAttribute}'`);
}
if (tableModel.secondaryEngineAttribute) {
sqls.push(`SECONDARY_ENGINE_ATTRIBUTE = '${tableModel.secondaryEngineAttribute}'`);
}
if (tableModel.insertMethod) {
sqls.push(`INSERT_METHOD=${tableModel.insertMethod}`);
}
if (tableModel.keyBlockSize) {
sqls.push(`KEY_BLOCK_SIZE=${tableModel.keyBlockSize}`);
}
if (tableModel.maxRows) {
sqls.push(`MAX_ROWS=${tableModel.maxRows}`);
}
if (tableModel.minRows) {
sqls.push(`MIN_ROWS=${tableModel.minRows}`);
}
if (tableModel.rowFormat) {
sqls.push(`ROW_FORMAT=${tableModel.rowFormat}`);
}
return sqls.join(', ');
}
generate(tableModel) {
const createSql = [];
createSql.push(`CREATE TABLE IF NOT EXISTS ${tableModel.name} (`);
const columnSql = [];
for (const column of tableModel.columns) {
columnSql.push(this.generateColumn(column));
}
const indexSql = [];
for (const index of tableModel.indices) {
indexSql.push(this.generateIndex(index));
}
if (indexSql.length) {
createSql.push(columnSql.join(',\n') + ',');
createSql.push(indexSql.join(',\n'));
}
else {
createSql.push(columnSql.join(',\n'));
}
createSql.push(`) ${this.generateTableOptions(tableModel)};`);
return createSql.join('\n');
}
}
exports.SqlGenerator = SqlGenerator;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3FsR2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1NxbEdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLQSxrREFBMEQ7QUFHMUQsZUFBZTtBQUNmLE1BQWEsWUFBWTtJQUNmLGFBQWEsQ0FBQyxPQUFlO1FBQ25DLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUFtQjtRQUN4QyxNQUFNLElBQUksR0FBYTtZQUNyQixHQUFHO1lBQ0gsTUFBTSxDQUFDLFVBQVU7WUFDakIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7U0FDckMsQ0FBQztRQUNGLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7UUFDRCxJQUFLO1lBQ0gsdUJBQVUsQ0FBQyxLQUFLO1lBQ2hCLHVCQUFVLENBQUMsUUFBUTtZQUNuQix1QkFBVSxDQUFDLEtBQUs7WUFDaEIsdUJBQVUsQ0FBQyxVQUFVO1lBQ3JCLHVCQUFVLENBQUMsT0FBTztZQUNsQix1QkFBVSxDQUFDLFVBQVU7WUFDckIsdUJBQVUsQ0FBQyxlQUFlO1lBQzFCLHVCQUFVLENBQUMsWUFBWTtZQUN2Qix1QkFBVSxDQUFDLGtCQUFrQjtTQUNiLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLElBQUksR0FBSSxNQUFNLENBQUMsSUFBMEIsQ0FBQyxJQUFJLENBQUM7WUFDckQsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFFB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