perf: 修改sql升级语句,兼容mysql5.7

This commit is contained in:
xiaojunnuo
2026-02-09 18:18:19 +08:00
parent d286c040a5
commit 02f89a9c9d
11 changed files with 60 additions and 14 deletions

View File

@@ -62,7 +62,7 @@ services:
# - certd_typeorm_dataSource_default_password=yourpasswd # 密码 # - certd_typeorm_dataSource_default_password=yourpasswd # 密码
# - certd_typeorm_dataSource_default_database=certd # 数据库名 # - certd_typeorm_dataSource_default_database=certd # 数据库名
# #↓↓↓↓ ----------------------------- 使用mysql数据库需要提前创建数据库 charset=utf8mb4, collation=utf8mb4_bin # #↓↓↓↓ ----------------------------- 使用mysql8数据库,需要提前创建数据库 charset=utf8mb4, collation=utf8mb4_bin
# - certd_flyway_scriptDir=./db/migration-mysql # 升级脚本目录 # - certd_flyway_scriptDir=./db/migration-mysql # 升级脚本目录
# - certd_typeorm_dataSource_default_type=mysql # 数据库类型, 或者 mariadb # - certd_typeorm_dataSource_default_type=mysql # 数据库类型, 或者 mariadb
# - certd_typeorm_dataSource_default_host=localhost # 数据库地址 # - certd_typeorm_dataSource_default_host=localhost # 数据库地址

View File

@@ -31,6 +31,12 @@ const DefaultLogger = {
console.error(args); console.error(args);
}, },
}; };
let customLogger:any = null;
export function setFlywayLogger (logger: any) {
customLogger = logger;
};
export class Flyway { export class Flyway {
scriptDir; scriptDir;
flywayTableName; flywayTableName;
@@ -43,7 +49,7 @@ export class Flyway {
this.flywayTableName = opts.flywayTableName ?? 'flyway_history'; this.flywayTableName = opts.flywayTableName ?? 'flyway_history';
this.baseline = opts.baseline ?? false; this.baseline = opts.baseline ?? false;
this.allowHashNotMatch = opts.allowHashNotMatch ?? false; this.allowHashNotMatch = opts.allowHashNotMatch ?? false;
this.logger = opts.logger || DefaultLogger; this.logger = customLogger || opts.logger || DefaultLogger;
this.connection = opts.connection; this.connection = opts.connection;
} }

View File

@@ -1,6 +1,3 @@
// src/index.ts
export { FlywayConfiguration as Configuration } from './configuration.js'; export { FlywayConfiguration as Configuration } from './configuration.js';
// eslint-disable-next-line node/no-unpublished-import export { Flyway, setFlywayLogger } from './flyway.js';
export { Flyway } from './flyway.js';
// eslint-disable-next-line node/no-unpublished-import
export { FlywayHistory } from './entity.js'; export { FlywayHistory } from './entity.js';

View File

@@ -11,6 +11,8 @@ typeorm:
default: default:
logging: false logging: false
flyway:
allowHashNotMatch: true
account: account:
server: server:

View File

@@ -97,7 +97,7 @@ CREATE TABLE `cd_cert_info`
CREATE INDEX `index_cert_info_user_id` ON `cd_cert_info` (`user_id`); CREATE INDEX `index_cert_info_user_id` ON `cd_cert_info` (`user_id`);
CREATE INDEX `index_cert_info_domain` ON `cd_cert_info` (`domain`); CREATE INDEX `index_cert_info_domain` ON `cd_cert_info` (`domain`);
CREATE INDEX `index_cert_info_domains` ON `cd_cert_info` (`domains`(200)); CREATE INDEX `index_cert_info_domains` ON `cd_cert_info` (`domains`(190));
CREATE INDEX `index_cert_info_pipeline` ON `cd_cert_info` (`pipeline_id`); CREATE INDEX `index_cert_info_pipeline` ON `cd_cert_info` (`pipeline_id`);
@@ -124,7 +124,7 @@ CREATE TABLE `cd_site_info`
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
); ) ENGINE=InnoDB;
CREATE INDEX `index_site_info_user_id` ON `cd_site_info` (`user_id`); CREATE INDEX `index_site_info_user_id` ON `cd_site_info` (`user_id`);
CREATE INDEX `index_site_info_domain` ON `cd_site_info` (`domain`); CREATE INDEX `index_site_info_domain` ON `cd_site_info` (`domain`);

View File

@@ -16,5 +16,5 @@ CREATE TABLE `cd_domain`
); );
CREATE INDEX `index_domain_user_id` ON `cd_domain` (`user_id`); CREATE INDEX `index_domain_user_id` ON `cd_domain` (`user_id`);
CREATE INDEX `index_domain_domain` ON `cd_domain` (`domain`); CREATE INDEX `index_domain_domain` ON `cd_domain` (`domain`(100));

View File

@@ -1,5 +1,5 @@
CREATE TABLE `cd_oauth_bound` CREATE TABLE IF NOT EXISTS `cd_oauth_bound`
( (
`id` bigint PRIMARY KEY AUTO_INCREMENT NOT NULL, `id` bigint PRIMARY KEY AUTO_INCREMENT NOT NULL,
`user_id` bigint NOT NULL, `user_id` bigint NOT NULL,
@@ -7,8 +7,8 @@ CREATE TABLE `cd_oauth_bound`
`open_id` varchar(512) NOT NULL, `open_id` varchar(512) NOT NULL,
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
); ) ENGINE=InnoDB;
CREATE INDEX `index_oauth_bound_user_id` ON `cd_oauth_bound` (`user_id`); CREATE INDEX `index_oauth_bound_user_id` ON `cd_oauth_bound` (`user_id`);
CREATE INDEX `index_oauth_bound_open_id` ON `cd_oauth_bound` (`open_id`); CREATE INDEX `index_oauth_bound_open_id` ON `cd_oauth_bound` (`open_id`(190));

View File

@@ -75,6 +75,8 @@ function transformMysql() {
pgSql = pgSql.replaceAll(/text/g, 'longtext'); pgSql = pgSql.replaceAll(/text/g, 'longtext');
//双引号 替换成反引号 //双引号 替换成反引号
pgSql = pgSql.replaceAll(/"/g, '`'); pgSql = pgSql.replaceAll(/"/g, '`');
//create table if not exists
pgSql = pgSql.replaceAll(/CREATE TABLE ([ ]+)`/g, 'CREATE TABLE IF NOT EXISTS `');
fs.writeFileSync(`./migration-mysql/${notFile}`, pgSql); fs.writeFileSync(`./migration-mysql/${notFile}`, pgSql);
} }

View File

@@ -4,7 +4,7 @@ import { MidwayConfig } from '@midwayjs/core';
// import { fileURLToPath } from 'node:url'; // import { fileURLToPath } from 'node:url';
// // const __filename = fileURLToPath(import.meta.url); // // const __filename = fileURLToPath(import.meta.url);
// const __dirname = dirname(fileURLToPath(import.meta.url)); // const __dirname = dirname(fileURLToPath(import.meta.url));
import { FlywayHistory } from '@certd/midway-flyway-js'; import { FlywayHistory, setFlywayLogger } from '@certd/midway-flyway-js';
import { UserEntity } from '../modules/sys/authority/entity/user.js'; import { UserEntity } from '../modules/sys/authority/entity/user.js';
import { PipelineEntity } from '../modules/pipeline/entity/pipeline.js'; import { PipelineEntity } from '../modules/pipeline/entity/pipeline.js';
//import { logger } from '../utils/logger'; //import { logger } from '../utils/logger';
@@ -15,6 +15,7 @@ import { commercialEntities } from '@certd/commercial-core';
import { tmpdir } from 'node:os'; import { tmpdir } from 'node:os';
import { DefaultUploadFileMimeType, uploadWhiteList } from '@midwayjs/upload'; import { DefaultUploadFileMimeType, uploadWhiteList } from '@midwayjs/upload';
import path from 'path'; import path from 'path';
import { logger } from '@certd/basic';
const env = process.env.NODE_ENV || 'development'; const env = process.env.NODE_ENV || 'development';
@@ -137,4 +138,6 @@ mergeConfig(development, 'development');
mergeConfig(development, env); mergeConfig(development, env);
setFlywayLogger(logger);
export default development; export default development;

View File

@@ -78,7 +78,7 @@ export class MainConfiguration {
app: koa.Application; app: koa.Application;
async onReady() { async onReady() {
// 设置flyway logger
// add middleware // add middleware

View File

@@ -1,4 +1,5 @@
import { AccessInput, BaseAccess, IsAccess } from "@certd/pipeline"; import { AccessInput, BaseAccess, IsAccess } from "@certd/pipeline";
import { AliyunAccess } from "./aliyun-access.js";
@IsAccess({ @IsAccess({
name: "alioss", name: "alioss",
@@ -36,6 +37,15 @@ export class AliossAccess extends BaseAccess {
title: "Bucket", title: "Bucket",
helper: "存储桶名称", helper: "存储桶名称",
required: true, required: true,
component: {
name: "remote-auto-complete",
vModel: "value",
type: "access",
action: AliossAccess.prototype.onGetBucketList.name,
search: false,
pager: false,
watches: ["accessId", "region"],
},
}) })
bucket!: string; bucket!: string;
@@ -76,6 +86,32 @@ export class AliossAccess extends BaseAccess {
} }
} }
async onGetBucketList() {
const access = (await this.ctx.accessService.getById(this.accessId)) as AliyunAccess;
const client = await this.getClient(access);
let res;
const buckets = [];
do {
const requestData = { marker: res?.nextMarker || null, "max-keys": 1000 };
res = await client.listBuckets(requestData);
buckets.push(...(res?.buckets || []));
} while (!!res?.nextMarker);
return buckets.filter(bucket => bucket?.region === this.region).map(bucket => ({ label: `${bucket.name}<${bucket.region}>`, value: bucket.name }));
}
async getClient(access: AliyunAccess) {
// @ts-ignore
const OSS = await import("ali-oss");
return new OSS.default({
accessKeyId: access.accessKeyId,
accessKeySecret: access.accessKeySecret,
// yourRegion填写Bucket所在地域。以华东1杭州为例Region填写为oss-cn-hangzhou。
region: this.region,
//@ts-ignore
authorizationV4: true,
});
}
} }
new AliossAccess(); new AliossAccess();