多维表格
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

181 lines
3.7 KiB

import { ClientType } from '~/lib'
export interface ProjectCreateForm {
title: string
dataSource: {
client: ClientType
connection: DefaultConnection | SQLiteConnection
searchPath?: string[]
}
inflection: {
inflectionColumn?: string
inflectionTable?: string
}
sslUse?: SSLUsage
extraParameters: Record<string, string>[]
}
export interface DefaultConnection {
host: string
database: string
user: string
password: string
port: number | string
ssl?: Record<CertTypes, string> | 'true'
}
export interface SQLiteConnection {
client: ClientType.SQLITE
database: string
connection: {
filename?: string
}
useNullAsDefault?: boolean
}
const defaultHost = 'localhost'
const testDataBaseNames = {
[ClientType.MYSQL]: null,
mysql: null,
[ClientType.PG]: 'postgres',
oracledb: 'xe',
[ClientType.MSSQL]: undefined,
[ClientType.SQLITE]: 'a.sqlite',
}
export const getTestDatabaseName = (db: { client: ClientType; connection?: { database?: string } }) => {
if (db.client === ClientType.PG) return db.connection?.database
return testDataBaseNames[db.client as keyof typeof testDataBaseNames]
}
export const clientTypes = [
{
text: 'MySql',
value: ClientType.MYSQL,
},
{
text: 'MSSQL',
value: ClientType.MSSQL,
},
{
text: 'PostgreSQL',
value: ClientType.PG,
},
{
text: 'SQLite',
value: ClientType.SQLITE,
},
]
const homeDir = ''
const sampleConnectionData: Record<ClientType | string, ProjectCreateForm['dataSource']['connection']> = {
[ClientType.PG]: {
host: defaultHost,
port: '5432',
user: 'postgres',
password: 'password',
database: '_test',
} as DefaultConnection,
[ClientType.MYSQL]: {
host: defaultHost,
port: '3306',
user: 'root',
password: 'password',
database: '_test',
} as DefaultConnection,
[ClientType.VITESS]: {
host: defaultHost,
port: '15306',
user: 'root',
password: 'password',
database: '_test',
} as DefaultConnection,
[ClientType.MSSQL]: {
host: defaultHost,
port: 1433,
user: 'sa',
password: 'Password123.',
database: '_test',
} as DefaultConnection,
[ClientType.SQLITE]: {
client: ClientType.SQLITE,
database: homeDir,
connection: {
filename: homeDir,
},
useNullAsDefault: true,
},
tidb: {
host: defaultHost,
port: '4000',
user: 'root',
password: '',
database: '_test',
} as DefaultConnection,
yugabyte: {
host: defaultHost,
port: '5432',
user: 'postgres',
password: '',
database: '_test',
} as DefaultConnection,
citusdb: {
host: defaultHost,
port: '5432',
user: 'postgres',
password: '',
database: '_test',
} as DefaultConnection,
cockroachdb: {
host: defaultHost,
port: '5432',
user: 'postgres',
password: '',
database: '_test',
} as DefaultConnection,
greenplum: {
host: defaultHost,
port: '5432',
user: 'postgres',
password: '',
database: '_test',
} as DefaultConnection,
oracledb: {
host: defaultHost,
port: '1521',
user: 'system',
password: 'Oracle18',
database: '_test',
} as DefaultConnection,
}
export const getDefaultConnectionConfig = (client: ClientType): ProjectCreateForm['dataSource'] => {
return {
client,
connection: sampleConnectionData[client],
searchPath: [ClientType.PG, ClientType.MSSQL].includes(client)
? client === ClientType.PG
? ['public']
: ['dbo']
: undefined,
}
}
enum SSLUsage {
No = 'No',
Allowed = 'Allowed',
Preferred = 'Preferred',
Required = 'Required',
RequiredWithCa = 'Required-CA',
RequiredWithIdentity = 'Required-Identity',
}
enum CertTypes {
ca = 'ca',
cert = 'cert',
key = 'key',
}
export { SSLUsage, CertTypes }