1
0
forked from boos/BoosAPI

fix(db): avoid mysql prefixes on non-text indexes

This commit is contained in:
ciat-777
2026-03-15 15:16:15 +08:00
parent ef5f67e604
commit 2699882569
3 changed files with 22 additions and 13 deletions
+12 -12
View File
@@ -25,23 +25,23 @@ CREATE INDEX `account_tokens_enabled_idx` ON `account_tokens` (`enabled`);
CREATE INDEX `accounts_site_id_idx` ON `accounts` (`site_id`);
CREATE INDEX `accounts_site_status_idx` ON `accounts` (`site_id`, `status`(191));
CREATE INDEX `accounts_status_idx` ON `accounts` (`status`(191));
CREATE INDEX `checkin_logs_account_created_at_idx` ON `checkin_logs` (`account_id`, `created_at`(191));
CREATE INDEX `checkin_logs_created_at_idx` ON `checkin_logs` (`created_at`(191));
CREATE INDEX `checkin_logs_account_created_at_idx` ON `checkin_logs` (`account_id`, `created_at`);
CREATE INDEX `checkin_logs_created_at_idx` ON `checkin_logs` (`created_at`);
CREATE INDEX `checkin_logs_status_idx` ON `checkin_logs` (`status`(191));
CREATE INDEX `downstream_api_keys_enabled_idx` ON `downstream_api_keys` (`enabled`);
CREATE INDEX `downstream_api_keys_expires_at_idx` ON `downstream_api_keys` (`expires_at`(191));
CREATE INDEX `downstream_api_keys_expires_at_idx` ON `downstream_api_keys` (`expires_at`);
CREATE INDEX `downstream_api_keys_name_idx` ON `downstream_api_keys` (`name`(191));
CREATE INDEX `events_created_at_idx` ON `events` (`created_at`(191));
CREATE INDEX `events_read_created_at_idx` ON `events` (`read`, `created_at`(191));
CREATE INDEX `events_type_created_at_idx` ON `events` (`type`(191), `created_at`(191));
CREATE INDEX `events_created_at_idx` ON `events` (`created_at`);
CREATE INDEX `events_read_created_at_idx` ON `events` (`read`, `created_at`);
CREATE INDEX `events_type_created_at_idx` ON `events` (`type`(191), `created_at`);
CREATE INDEX `model_availability_account_available_idx` ON `model_availability` (`account_id`, `available`);
CREATE INDEX `model_availability_model_name_idx` ON `model_availability` (`model_name`(191));
CREATE INDEX `proxy_files_owner_lookup_idx` ON `proxy_files` (`owner_type`(191), `owner_id`(191), `deleted_at`(191));
CREATE INDEX `proxy_logs_account_created_at_idx` ON `proxy_logs` (`account_id`, `created_at`(191));
CREATE INDEX `proxy_logs_created_at_idx` ON `proxy_logs` (`created_at`(191));
CREATE INDEX `proxy_logs_model_actual_created_at_idx` ON `proxy_logs` (`model_actual`(191), `created_at`(191));
CREATE INDEX `proxy_logs_status_created_at_idx` ON `proxy_logs` (`status`(191), `created_at`(191));
CREATE INDEX `proxy_video_tasks_created_at_idx` ON `proxy_video_tasks` (`created_at`(191));
CREATE INDEX `proxy_files_owner_lookup_idx` ON `proxy_files` (`owner_type`(191), `owner_id`(191), `deleted_at`);
CREATE INDEX `proxy_logs_account_created_at_idx` ON `proxy_logs` (`account_id`, `created_at`);
CREATE INDEX `proxy_logs_created_at_idx` ON `proxy_logs` (`created_at`);
CREATE INDEX `proxy_logs_model_actual_created_at_idx` ON `proxy_logs` (`model_actual`(191), `created_at`);
CREATE INDEX `proxy_logs_status_created_at_idx` ON `proxy_logs` (`status`(191), `created_at`);
CREATE INDEX `proxy_video_tasks_created_at_idx` ON `proxy_video_tasks` (`created_at`);
CREATE INDEX `proxy_video_tasks_upstream_video_id_idx` ON `proxy_video_tasks` (`upstream_video_id`(191));
CREATE INDEX `route_channels_account_id_idx` ON `route_channels` (`account_id`);
CREATE INDEX `route_channels_route_enabled_idx` ON `route_channels` (`route_id`, `enabled`);
@@ -114,6 +114,15 @@ describe('schema artifact generator', () => {
expect(artifacts.mysqlBootstrap).not.toContain('CREATE TABLE IF NOT EXISTS `settings` (`key` TEXT NOT NULL PRIMARY KEY, `value` TEXT)');
});
it('does not add mysql text prefixes to non-text index columns', () => {
const artifacts = generateDialectArtifacts(readSchemaContract());
expect(artifacts.mysqlBootstrap).toContain('CREATE INDEX `checkin_logs_account_created_at_idx` ON `checkin_logs` (`account_id`, `created_at`)');
expect(artifacts.mysqlBootstrap).toContain('CREATE INDEX `events_read_created_at_idx` ON `events` (`read`, `created_at`)');
expect(artifacts.mysqlBootstrap).not.toContain('`created_at`(191)');
expect(artifacts.mysqlBootstrap).not.toContain('`read`(191)');
});
it('rejects destructive diffs when generating additive upgrades', () => {
const current = readSchemaContract();
const previous = structuredClone(current);
+1 -1
View File
@@ -33,7 +33,7 @@ function quoteIdentifier(dialect: SqlDialect, identifier: string): string {
}
function escapeMysqlTextPrefix(columnType: LogicalColumnType): string {
return columnType === 'text' || columnType === 'datetime' || columnType === 'json' ? '(191)' : '';
return columnType === 'text' ? '(191)' : '';
}
function mapColumnType(dialect: SqlDialect, columnName: string, column: SchemaContractColumn): string {