UNPKG

@eggjs/dal-runtime

Version:
395 lines 31.7 kB
"use strict"; 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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