mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-08-05 22:03:36 +08:00
🐛 fix(query-editor): 修复 SQL 美化未按数据库方言选择格式化器
- 为 QueryEditor 美化入口按当前连接类型动态选择 sql-formatter language - 让 postgres、kingbase、highgo、vastbase、opengauss、gaussdb 使用 postgresql 方言 - 让 oracle、dameng 使用 plsql,避免固定 mysql 方言导致语法解析失败 - 补充 PostgreSQL 窗口函数与类型转换 SQL 的美化回归测试 Close #561
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import React, { useState, useEffect, useRef, useMemo, useCallback } from 'react';
|
||||
import Editor, { type OnMount } from './MonacoEditor';
|
||||
import { message, Modal, Input, Form, MenuProps } from 'antd';
|
||||
import { format } from 'sql-formatter';
|
||||
import { format, type SqlLanguage } from 'sql-formatter';
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
import { TabData, ColumnDefinition, IndexDefinition } from '../types';
|
||||
import { useStore } from '../store';
|
||||
@@ -468,6 +468,38 @@ const normalizeMetadataDialect = (conn: any): string => {
|
||||
return String(dialect || '').toLowerCase();
|
||||
};
|
||||
|
||||
const resolveQueryEditorFormatterLanguage = (conn: any): SqlLanguage => {
|
||||
const dialect = normalizeMetadataDialect(conn);
|
||||
switch (dialect) {
|
||||
case 'postgres':
|
||||
case 'kingbase':
|
||||
case 'highgo':
|
||||
case 'vastbase':
|
||||
case 'opengauss':
|
||||
case 'gaussdb':
|
||||
return 'postgresql';
|
||||
case 'duckdb':
|
||||
return 'duckdb';
|
||||
case 'sqlite':
|
||||
return 'sqlite';
|
||||
case 'sqlserver':
|
||||
return 'transactsql';
|
||||
case 'oracle':
|
||||
case 'dameng':
|
||||
return 'plsql';
|
||||
case 'clickhouse':
|
||||
return 'clickhouse';
|
||||
case 'mysql':
|
||||
case 'goldendb':
|
||||
case 'sphinx':
|
||||
return 'mysql';
|
||||
case 'mariadb':
|
||||
return 'mariadb';
|
||||
default:
|
||||
return 'sql';
|
||||
}
|
||||
};
|
||||
|
||||
const buildCompletionTableCommentSQL = (dialect: string, dbName: string): string => {
|
||||
const db = String(dbName || '').trim();
|
||||
const escapedDb = escapeMetadataSqlLiteral(db);
|
||||
@@ -3684,7 +3716,8 @@ const QueryEditor: React.FC<{ tab: TabData; isActive?: boolean }> = ({ tab, isAc
|
||||
|
||||
const handleFormat = () => {
|
||||
try {
|
||||
const formatted = format(getCurrentQuery(), { language: 'mysql', keywordCase: sqlFormatOptions.keywordCase });
|
||||
const formatterLanguage = resolveQueryEditorFormatterLanguage(connections.find(c => c.id === currentConnectionId));
|
||||
const formatted = format(getCurrentQuery(), { language: formatterLanguage, keywordCase: sqlFormatOptions.keywordCase });
|
||||
const editor = editorRef.current;
|
||||
const monaco = monacoRef.current;
|
||||
const model = editor?.getModel?.();
|
||||
|
||||
Reference in New Issue
Block a user