ToolJet/server/data-migrations/1690830899563-UpdateMysqlDatasourceForSocketConnection.ts
Akshay ead092a21a
Feature: Mysql socket support (#7168)
* Add socket_path for mysql plugin

- Add new property `socket_path`
- If `socket_path` is set, ignore host/port and ssl settings when setting up the connection

* Add socket_path to manifest

* Add socket_path for mysql plugin

- Add new property `socket_path`
- If `socket_path` is set, ignore host/port and ssl settings when setting up the connection

* Add socket_path to manifest

* make mysql connection type as a dropdown

* add data migration for mysql socket opts

* declare generic parameter for the function

* fix lint

* fix migration progress count

---------

Co-authored-by: Kariem Hussein <kariem.hussein@gmail.com>
2023-08-02 15:49:31 +05:30

61 lines
2 KiB
TypeScript

import { DataSource } from 'src/entities/data_source.entity';
import { EntityManager, In, MigrationInterface, QueryRunner } from 'typeorm';
import { MigrationProgress, processDataInBatches } from 'src/helpers/utils.helper';
import { DataSourceOptions } from 'src/entities/data_source_options.entity';
export class UpdateMysqlDatasourceForSocketConnection1690830899563 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
const entityManager = queryRunner.manager;
const dataSourceIds = (
await entityManager.find(DataSource, {
where: { kind: 'mysql' },
select: ['id'],
})
).map((d) => d.id);
const datasourceOptionsCount = await entityManager.count(DataSourceOptions, {
where: { dataSourceId: In(dataSourceIds) },
});
const migrationProgress = new MigrationProgress(
'UpdateMysqlDatasourceForSocketConnection1690830899563',
datasourceOptionsCount
);
const getDataSourceOptionsToUpdate = async (
entityManager: EntityManager,
skip: number,
take: number
): Promise<DataSourceOptions[]> => {
return await entityManager.find(DataSourceOptions, {
where: { dataSourceId: In(dataSourceIds) },
take,
skip,
});
};
const processDataSourceOptionsBatch = async (
entityManager: EntityManager,
dataSourceOptions: DataSourceOptions[]
): Promise<void> => {
for (const dataSourceOption of dataSourceOptions) {
if (dataSourceOption.options.connection_type) {
migrationProgress.show();
continue;
}
dataSourceOption.options = {
...dataSourceOption.options,
connection_type: { value: 'hostname', encrypted: false },
};
await entityManager.save(dataSourceOption);
migrationProgress.show();
}
};
await processDataInBatches(entityManager, getDataSourceOptionsToUpdate, processDataSourceOptionsBatch);
}
public async down(queryRunner: QueryRunner): Promise<void> {}
}