Skip to content

Commit c8939dc

Browse files
authored
Add data source adapter of MariaDB (FlowiseAI#2595)
fix(datasource.ts): add mariadb
1 parent 34251fa commit c8939dc

24 files changed

+477
-0
lines changed

packages/server/src/DataSource.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { getUserHome } from './utils'
66
import { entities } from './database/entities'
77
import { sqliteMigrations } from './database/migrations/sqlite'
88
import { mysqlMigrations } from './database/migrations/mysql'
9+
import { mariadbMigrations } from './database/migrations/mariadb'
910
import { postgresMigrations } from './database/migrations/postgres'
1011

1112
let appDataSource: DataSource
@@ -44,6 +45,22 @@ export const init = async (): Promise<void> => {
4445
ssl: getDatabaseSSLFromEnv()
4546
})
4647
break
48+
case 'mariadb':
49+
appDataSource = new DataSource({
50+
type: 'mariadb',
51+
host: process.env.DATABASE_HOST,
52+
port: parseInt(process.env.DATABASE_PORT || '3306'),
53+
username: process.env.DATABASE_USER,
54+
password: process.env.DATABASE_PASSWORD,
55+
database: process.env.DATABASE_NAME,
56+
charset: 'utf8mb4',
57+
synchronize: false,
58+
migrationsRun: false,
59+
entities: Object.values(entities),
60+
migrations: mariadbMigrations,
61+
ssl: getDatabaseSSLFromEnv()
62+
})
63+
break
4764
case 'postgres':
4865
appDataSource = new DataSource({
4966
type: 'postgres',
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm'
2+
3+
export class Init1693840429259 implements MigrationInterface {
4+
public async up(queryRunner: QueryRunner): Promise<void> {
5+
await queryRunner.query(
6+
`CREATE TABLE IF NOT EXISTS \`chat_flow\` (
7+
\`id\` varchar(36) NOT NULL,
8+
\`name\` varchar(255) NOT NULL,
9+
\`flowData\` text NOT NULL,
10+
\`deployed\` tinyint DEFAULT NULL,
11+
\`isPublic\` tinyint DEFAULT NULL,
12+
\`apikeyid\` varchar(255) DEFAULT NULL,
13+
\`chatbotConfig\` varchar(255) DEFAULT NULL,
14+
\`createdDate\` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
15+
\`updatedDate\` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
16+
PRIMARY KEY (\`id\`)
17+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;`
18+
)
19+
await queryRunner.query(
20+
`CREATE TABLE IF NOT EXISTS \`chat_message\` (
21+
\`id\` varchar(36) NOT NULL,
22+
\`role\` varchar(255) NOT NULL,
23+
\`chatflowid\` varchar(255) NOT NULL,
24+
\`content\` text NOT NULL,
25+
\`sourceDocuments\` varchar(255) DEFAULT NULL,
26+
\`createdDate\` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
27+
PRIMARY KEY (\`id\`),
28+
KEY \`IDX_e574527322272fd838f4f0f3d3\` (\`chatflowid\`)
29+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;`
30+
)
31+
await queryRunner.query(
32+
`CREATE TABLE IF NOT EXISTS \`credential\` (
33+
\`id\` varchar(36) NOT NULL,
34+
\`name\` varchar(255) NOT NULL,
35+
\`credentialName\` varchar(255) NOT NULL,
36+
\`encryptedData\` varchar(255) NOT NULL,
37+
\`createdDate\` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
38+
\`updatedDate\` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
39+
PRIMARY KEY (\`id\`)
40+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;`
41+
)
42+
await queryRunner.query(
43+
`CREATE TABLE IF NOT EXISTS \`tool\` (
44+
\`id\` varchar(36) NOT NULL,
45+
\`name\` varchar(255) NOT NULL,
46+
\`description\` text NOT NULL,
47+
\`color\` varchar(255) NOT NULL,
48+
\`iconSrc\` varchar(255) DEFAULT NULL,
49+
\`schema\` varchar(255) DEFAULT NULL,
50+
\`func\` varchar(255) DEFAULT NULL,
51+
\`createdDate\` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
52+
\`updatedDate\` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
53+
PRIMARY KEY (\`id\`)
54+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;`
55+
)
56+
}
57+
58+
public async down(queryRunner: QueryRunner): Promise<void> {
59+
await queryRunner.query(`DROP TABLE chat_flow`)
60+
await queryRunner.query(`DROP TABLE chat_message`)
61+
await queryRunner.query(`DROP TABLE credential`)
62+
await queryRunner.query(`DROP TABLE tool`)
63+
}
64+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm'
2+
3+
export class ModifyChatFlow1693997791471 implements MigrationInterface {
4+
public async up(queryRunner: QueryRunner): Promise<void> {
5+
await queryRunner.query(`ALTER TABLE \`chat_flow\` MODIFY \`chatbotConfig\` TEXT;`)
6+
}
7+
8+
public async down(queryRunner: QueryRunner): Promise<void> {
9+
await queryRunner.query(`ALTER TABLE \`chat_flow\` MODIFY \`chatbotConfig\` VARCHAR;`)
10+
}
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm'
2+
3+
export class ModifyChatMessage1693999022236 implements MigrationInterface {
4+
public async up(queryRunner: QueryRunner): Promise<void> {
5+
await queryRunner.query(`ALTER TABLE \`chat_message\` MODIFY \`sourceDocuments\` TEXT;`)
6+
}
7+
8+
public async down(queryRunner: QueryRunner): Promise<void> {
9+
await queryRunner.query(`ALTER TABLE \`chat_message\` MODIFY \`sourceDocuments\` VARCHAR;`)
10+
}
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm'
2+
3+
export class ModifyCredential1693999261583 implements MigrationInterface {
4+
public async up(queryRunner: QueryRunner): Promise<void> {
5+
await queryRunner.query(`ALTER TABLE \`credential\` MODIFY \`encryptedData\` TEXT NOT NULL;`)
6+
}
7+
8+
public async down(queryRunner: QueryRunner): Promise<void> {
9+
await queryRunner.query(`ALTER TABLE \`credential\` MODIFY \`encryptedData\` VARCHAR NOT NULL;`)
10+
}
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm'
2+
3+
export class ModifyTool1694001465232 implements MigrationInterface {
4+
public async up(queryRunner: QueryRunner): Promise<void> {
5+
await queryRunner.query(`ALTER TABLE \`tool\` MODIFY \`schema\` TEXT, MODIFY \`func\` TEXT;`)
6+
}
7+
8+
public async down(queryRunner: QueryRunner): Promise<void> {
9+
await queryRunner.query(`ALTER TABLE \`tool\` MODIFY \`schema\` VARCHAR, MODIFY \`func\` VARCHAR;`)
10+
}
11+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm'
2+
3+
export class AddApiConfig1694099200729 implements MigrationInterface {
4+
public async up(queryRunner: QueryRunner): Promise<void> {
5+
const columnExists = await queryRunner.hasColumn('chat_flow', 'apiConfig')
6+
if (!columnExists) queryRunner.query(`ALTER TABLE \`chat_flow\` ADD COLUMN \`apiConfig\` TEXT;`)
7+
}
8+
9+
public async down(queryRunner: QueryRunner): Promise<void> {
10+
await queryRunner.query(`ALTER TABLE \`chat_flow\` DROP COLUMN \`apiConfig\`;`)
11+
}
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm'
2+
3+
export class AddAnalytic1694432361423 implements MigrationInterface {
4+
public async up(queryRunner: QueryRunner): Promise<void> {
5+
const columnExists = await queryRunner.hasColumn('chat_flow', 'analytic')
6+
if (!columnExists) queryRunner.query(`ALTER TABLE \`chat_flow\` ADD COLUMN \`analytic\` TEXT;`)
7+
}
8+
9+
public async down(queryRunner: QueryRunner): Promise<void> {
10+
await queryRunner.query(`ALTER TABLE \`chat_flow\` DROP COLUMN \`analytic\`;`)
11+
}
12+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm'
2+
3+
export class AddChatHistory1694658767766 implements MigrationInterface {
4+
public async up(queryRunner: QueryRunner): Promise<void> {
5+
const chatTypeColumnExists = await queryRunner.hasColumn('chat_message', 'chatType')
6+
if (!chatTypeColumnExists)
7+
await queryRunner.query(`ALTER TABLE \`chat_message\` ADD COLUMN \`chatType\` VARCHAR(255) NOT NULL DEFAULT 'INTERNAL';`)
8+
9+
const chatIdColumnExists = await queryRunner.hasColumn('chat_message', 'chatId')
10+
if (!chatIdColumnExists) await queryRunner.query(`ALTER TABLE \`chat_message\` ADD COLUMN \`chatId\` VARCHAR(255);`)
11+
const results: { id: string; chatflowid: string }[] = await queryRunner.query(`WITH RankedMessages AS (
12+
SELECT
13+
\`chatflowid\`,
14+
\`id\`,
15+
\`createdDate\`,
16+
ROW_NUMBER() OVER (PARTITION BY \`chatflowid\` ORDER BY \`createdDate\`) AS row_num
17+
FROM \`chat_message\`
18+
)
19+
SELECT \`chatflowid\`, \`id\`
20+
FROM RankedMessages
21+
WHERE row_num = 1;`)
22+
for (const chatMessage of results) {
23+
await queryRunner.query(
24+
`UPDATE \`chat_message\` SET \`chatId\` = '${chatMessage.id}' WHERE \`chatflowid\` = '${chatMessage.chatflowid}'`
25+
)
26+
}
27+
await queryRunner.query(`ALTER TABLE \`chat_message\` MODIFY \`chatId\` VARCHAR(255) NOT NULL;`)
28+
29+
const memoryTypeColumnExists = await queryRunner.hasColumn('chat_message', 'memoryType')
30+
if (!memoryTypeColumnExists) await queryRunner.query(`ALTER TABLE \`chat_message\` ADD COLUMN \`memoryType\` VARCHAR(255);`)
31+
32+
const sessionIdColumnExists = await queryRunner.hasColumn('chat_message', 'sessionId')
33+
if (!sessionIdColumnExists) await queryRunner.query(`ALTER TABLE \`chat_message\` ADD COLUMN \`sessionId\` VARCHAR(255);`)
34+
}
35+
36+
public async down(queryRunner: QueryRunner): Promise<void> {
37+
await queryRunner.query(
38+
`ALTER TABLE \`chat_message\` DROP COLUMN \`chatType\`, DROP COLUMN \`chatId\`, DROP COLUMN \`memoryType\`, DROP COLUMN \`sessionId\`;`
39+
)
40+
}
41+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm'
2+
3+
export class AddAssistantEntity1699325775451 implements MigrationInterface {
4+
public async up(queryRunner: QueryRunner): Promise<void> {
5+
await queryRunner.query(
6+
`CREATE TABLE IF NOT EXISTS \`assistant\` (
7+
\`id\` varchar(36) NOT NULL,
8+
\`credential\` varchar(255) NOT NULL,
9+
\`details\` text NOT NULL,
10+
\`iconSrc\` varchar(255) DEFAULT NULL,
11+
\`createdDate\` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
12+
\`updatedDate\` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
13+
PRIMARY KEY (\`id\`)
14+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;`
15+
)
16+
}
17+
18+
public async down(queryRunner: QueryRunner): Promise<void> {
19+
await queryRunner.query(`DROP TABLE assistant`)
20+
}
21+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm'
2+
3+
export class AddUsedToolsToChatMessage1699481607341 implements MigrationInterface {
4+
public async up(queryRunner: QueryRunner): Promise<void> {
5+
const columnExists = await queryRunner.hasColumn('chat_message', 'usedTools')
6+
if (!columnExists) queryRunner.query(`ALTER TABLE \`chat_message\` ADD COLUMN \`usedTools\` TEXT;`)
7+
}
8+
9+
public async down(queryRunner: QueryRunner): Promise<void> {
10+
await queryRunner.query(`ALTER TABLE \`chat_message\` DROP COLUMN \`usedTools\`;`)
11+
}
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm'
2+
3+
export class AddCategoryToChatFlow1699900910291 implements MigrationInterface {
4+
public async up(queryRunner: QueryRunner): Promise<void> {
5+
const columnExists = await queryRunner.hasColumn('chat_flow', 'category')
6+
if (!columnExists) queryRunner.query(`ALTER TABLE \`chat_flow\` ADD COLUMN \`category\` TEXT;`)
7+
}
8+
9+
public async down(queryRunner: QueryRunner): Promise<void> {
10+
await queryRunner.query(`ALTER TABLE \`chat_flow\` DROP COLUMN \`category\`;`)
11+
}
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm'
2+
3+
export class AddFileAnnotationsToChatMessage1700271021237 implements MigrationInterface {
4+
public async up(queryRunner: QueryRunner): Promise<void> {
5+
const columnExists = await queryRunner.hasColumn('chat_message', 'fileAnnotations')
6+
if (!columnExists) queryRunner.query(`ALTER TABLE \`chat_message\` ADD COLUMN \`fileAnnotations\` TEXT;`)
7+
}
8+
9+
public async down(queryRunner: QueryRunner): Promise<void> {
10+
await queryRunner.query(`ALTER TABLE \`chat_message\` DROP COLUMN \`fileAnnotations\`;`)
11+
}
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm'
2+
3+
export class AddFileUploadsToChatMessage1701788586491 implements MigrationInterface {
4+
public async up(queryRunner: QueryRunner): Promise<void> {
5+
const columnExists = await queryRunner.hasColumn('chat_message', 'fileUploads')
6+
if (!columnExists) queryRunner.query(`ALTER TABLE \`chat_message\` ADD COLUMN \`fileUploads\` TEXT;`)
7+
}
8+
9+
public async down(queryRunner: QueryRunner): Promise<void> {
10+
await queryRunner.query(`ALTER TABLE \`chat_message\` DROP COLUMN \`fileUploads\`;`)
11+
}
12+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm'
2+
3+
export class AddVariableEntity1699325775451 implements MigrationInterface {
4+
public async up(queryRunner: QueryRunner): Promise<void> {
5+
await queryRunner.query(
6+
`CREATE TABLE IF NOT EXISTS \`variable\` (
7+
\`id\` varchar(36) NOT NULL,
8+
\`name\` varchar(255) NOT NULL,
9+
\`value\` text NOT NULL,
10+
\`type\` varchar(255) DEFAULT NULL,
11+
\`createdDate\` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
12+
\`updatedDate\` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
13+
PRIMARY KEY (\`id\`)
14+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;`
15+
)
16+
}
17+
18+
public async down(queryRunner: QueryRunner): Promise<void> {
19+
await queryRunner.query(`DROP TABLE variable`)
20+
}
21+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm'
2+
3+
export class AddSpeechToText1706364937060 implements MigrationInterface {
4+
public async up(queryRunner: QueryRunner): Promise<void> {
5+
const columnExists = await queryRunner.hasColumn('chat_flow', 'speechToText')
6+
if (!columnExists) queryRunner.query(`ALTER TABLE \`chat_flow\` ADD COLUMN \`speechToText\` TEXT;`)
7+
}
8+
9+
public async down(queryRunner: QueryRunner): Promise<void> {
10+
await queryRunner.query(`ALTER TABLE \`chat_flow\` DROP COLUMN \`speechToText\`;`)
11+
}
12+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm'
2+
3+
export class AddFeedback1707213626553 implements MigrationInterface {
4+
public async up(queryRunner: QueryRunner): Promise<void> {
5+
await queryRunner.query(
6+
`CREATE TABLE IF NOT EXISTS \`chat_message_feedback\` (
7+
\`id\` varchar(36) NOT NULL,
8+
\`chatflowid\` varchar(255) NOT NULL,
9+
\`content\` text,
10+
\`chatId\` varchar(255) NOT NULL,
11+
\`messageId\` varchar(255) NOT NULL,
12+
\`rating\` varchar(255) NOT NULL,
13+
\`createdDate\` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
14+
PRIMARY KEY (\`id\`)
15+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;`
16+
)
17+
}
18+
19+
public async down(queryRunner: QueryRunner): Promise<void> {
20+
await queryRunner.query(`DROP TABLE chat_message_feedback`)
21+
}
22+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm'
2+
3+
export class AddUpsertHistoryEntity1709814301358 implements MigrationInterface {
4+
public async up(queryRunner: QueryRunner): Promise<void> {
5+
await queryRunner.query(
6+
`CREATE TABLE IF NOT EXISTS \`upsert_history\` (
7+
\`id\` varchar(36) NOT NULL,
8+
\`chatflowid\` varchar(255) NOT NULL,
9+
\`result\` text NOT NULL,
10+
\`flowData\` text NOT NULL,
11+
\`date\` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
12+
PRIMARY KEY (\`id\`),
13+
KEY \`IDX_a0b59fd66f6e48d2b198123cb6\` (\`chatflowid\`)
14+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;`
15+
)
16+
}
17+
18+
public async down(queryRunner: QueryRunner): Promise<void> {
19+
await queryRunner.query(`DROP TABLE upsert_history`)
20+
}
21+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm'
2+
3+
export class AddLead1710832127079 implements MigrationInterface {
4+
public async up(queryRunner: QueryRunner): Promise<void> {
5+
await queryRunner.query(
6+
`CREATE TABLE IF NOT EXISTS \`lead\` (
7+
\`id\` varchar(36) NOT NULL,
8+
\`chatflowid\` varchar(255) NOT NULL,
9+
\`chatId\` varchar(255) NOT NULL,
10+
\`name\` text,
11+
\`email\` text,
12+
\`phone\` text,
13+
\`createdDate\` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
14+
PRIMARY KEY (\`id\`)
15+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;`
16+
)
17+
}
18+
19+
public async down(queryRunner: QueryRunner): Promise<void> {
20+
await queryRunner.query(`DROP TABLE lead`)
21+
}
22+
}

0 commit comments

Comments
 (0)