Files
mayfly-go/mayfly_go_web/src/views/ops/db/dialect/index.ts

189 lines
4.5 KiB
TypeScript
Raw Normal View History

2023-11-26 21:21:35 +08:00
import { MysqlDialect } from './mysql_dialect';
import { PostgresqlDialect } from './postgres_dialect';
2023-12-06 14:50:02 +08:00
import { DMDialect } from '@/views/ops/db/dialect/dm_dialect';
import { SqlLanguage } from 'sql-formatter/lib/src/sqlFormatter';
2023-11-26 21:21:35 +08:00
export interface sqlColumnType {
udtName: string;
dataType: string;
desc: string;
space: string;
range?: string;
}
export interface RowDefinition {
name: string;
type: string;
value: string;
length: string;
numScale: string;
notNull: boolean;
pri: boolean;
auto_increment: boolean;
remark: string;
}
export interface IndexDefinition {
indexName: string;
columnNames: string[];
unique: boolean;
indexType: string;
indexComment?: string;
}
2023-12-12 12:41:44 +08:00
export const commonCustomKeywords = ['GROUP BY', 'ORDER BY', 'LEFT JOIN', 'RIGHT JOIN', 'INNER JOIN', 'SELECT * FROM'];
export interface EditorCompletionItem {
/** 用于显示 */
label: string;
/** 用于插入编辑器,可预置一些变量方便使用函数 */
insertText?: string;
/** 用于描述 */
description: string;
}
export interface EditorCompletion {
/** 关键字 */
keywords: EditorCompletionItem[];
/** 操作关键字 */
operators: EditorCompletionItem[];
/** 函数,包括内置函数和自定义函数 */
functions: EditorCompletionItem[];
/** 内置变量 */
variables: EditorCompletionItem[];
}
// 定义一个数据类型的枚举,包含字符串、数字、日期、时间、日期时间
export enum DataType {
String = 'string',
Number = 'number',
Date = 'date',
Time = 'time',
DateTime = 'datetime',
}
/** 列数据类型角标 */
export const ColumnTypeSubscript = {
/** 字符串 */
string: 'abc',
/** 数字 */
number: '123',
/** 日期 */
date: 'icon-clock',
/** 时间 */
time: 'icon-clock',
/** 日期时间 */
datetime: 'icon-clock',
};
// 数据库基础信息
export interface DialectInfo {
/**
*
*/
icon: string;
/**
*
*/
defaultPort: number;
/**
* sql的方言
*/
formatSqlDialect: SqlLanguage;
/**
*
*/
columnTypes: sqlColumnType[];
2023-12-12 12:41:44 +08:00
/**
*
*/
editorCompletions: EditorCompletion;
}
2023-11-26 21:21:35 +08:00
export const DbType = {
mysql: 'mysql',
postgresql: 'postgres',
2023-12-06 14:50:02 +08:00
dm: 'dm', // 达梦
2023-11-26 21:21:35 +08:00
};
export interface DbDialect {
2023-11-27 17:40:47 +08:00
/**
*
2023-11-27 17:40:47 +08:00
*/
getInfo(): DialectInfo;
2023-11-26 21:21:35 +08:00
/**
* sql
* @param table
* @param condition
* @param orderBy
* @param pageNum
* @param limit
*/
getDefaultSelectSql(table: string, condition: string, orderBy: string, pageNum: number, limit: number): string;
getPageSql(pageNum: number, limit: number): string;
getDefaultRows(): RowDefinition[];
getDefaultIndex(): IndexDefinition;
2023-11-26 21:21:35 +08:00
/**
* 使
* @param name
*/
wrapName(name: string): string;
/**
* sql
* @param tableData
*/
getCreateTableSql(tableData: any): string;
/**
* sql
* @param tableData
*/
getCreateIndexSql(tableData: any): string;
/**
* sql
* @param tableName
* @param changeData
*/
getModifyColumnSql(tableName: string, changeData: { del: RowDefinition[]; add: RowDefinition[]; upd: RowDefinition[] }): string;
2023-11-26 21:21:35 +08:00
/**
* sql
* @param tableName
* @param changeData
*/
getModifyIndexSql(tableName: string, changeData: { del: any[]; add: any[]; upd: any[] }): string;
/** 通过数据库字段类型,返回基本数据类型 */
getDataType: (columnType: string) => DataType;
2023-11-26 21:21:35 +08:00
}
let mysqlDialect = new MysqlDialect();
let postgresDialect = new PostgresqlDialect();
2023-12-06 14:50:02 +08:00
let dmDialect = new DMDialect();
2023-11-26 21:21:35 +08:00
export const getDbDialect = (dbType: string | undefined): DbDialect => {
if (!dbType) {
return mysqlDialect;
}
2023-11-26 21:21:35 +08:00
if (dbType === DbType.mysql) {
return mysqlDialect;
}
if (dbType === DbType.postgresql) {
return postgresDialect;
}
2023-12-06 14:50:02 +08:00
if (dbType === DbType.dm) {
return dmDialect;
}
2023-11-26 21:21:35 +08:00
throw new Error('不支持的数据库');
};