diff --git a/ui/package-lock.json b/ui/package-lock.json
index 2cecb0a..b37450c 100644
--- a/ui/package-lock.json
+++ b/ui/package-lock.json
@@ -13,6 +13,7 @@
"codemirror": "^5.65.17",
"codemirror-json-schema": "^0.8.1",
"element-plus": "^2.10.4",
+ "sql-formatter": "^15.6.10",
"vue": "^3.5.17",
"vue-codemirror": "^5.1.0",
"vue-i18n": "^11.1.9"
@@ -2390,6 +2391,19 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/sql-formatter": {
+ "version": "15.6.10",
+ "resolved": "https://registry.npmmirror.com/sql-formatter/-/sql-formatter-15.6.10.tgz",
+ "integrity": "sha512-0bJOPQrRO/JkjQhiThVayq0hOKnI1tHI+2OTkmT7TGtc6kqS+V7kveeMzRW+RNQGxofmTmet9ILvztyuxv0cJQ==",
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1",
+ "nearley": "^2.20.1"
+ },
+ "bin": {
+ "sql-formatter": "bin/sql-formatter-cli.cjs"
+ }
+ },
"node_modules/stringify-entities": {
"version": "4.0.4",
"resolved": "https://registry.npmmirror.com/stringify-entities/-/stringify-entities-4.0.4.tgz",
diff --git a/ui/package.json b/ui/package.json
index e5b7f85..82ba94b 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -10,14 +10,15 @@
"preview": "vite preview"
},
"dependencies": {
- "vue": "^3.5.17",
- "element-plus": "^2.10.4",
- "vue-i18n": "^11.1.9",
- "vue-codemirror": "^5.1.0",
+ "@codemirror/lang-json": "^6.0.2",
+ "@codemirror/lang-sql": "github:codemirror/lang-sql",
"codemirror": "^5.65.17",
"codemirror-json-schema": "^0.8.1",
- "@codemirror/lang-json": "^6.0.2",
- "@codemirror/lang-sql": "github:codemirror/lang-sql"
+ "element-plus": "^2.10.4",
+ "sql-formatter": "^15.6.10",
+ "vue": "^3.5.17",
+ "vue-codemirror": "^5.1.0",
+ "vue-i18n": "^11.1.9"
},
"devDependencies": {
"@vitejs/plugin-vue": "^6.0.0",
diff --git a/ui/src/components/DataManager.vue b/ui/src/components/DataManager.vue
index 3e9d677..f22460b 100644
--- a/ui/src/components/DataManager.vue
+++ b/ui/src/components/DataManager.vue
@@ -9,8 +9,11 @@ import type { Pair } from './types'
import { GetDataManagerPreference, SetDataManagerPreference } from './cache'
import {ElMessage, type ElTree} from 'element-plus'
import { Codemirror } from 'vue-codemirror'
+import { standardKeymap } from "@codemirror/commands"
+import { keymap } from "@codemirror/view"
import { sql, StandardSQL, MySQL, PostgreSQL, Cassandra } from "@codemirror/lang-sql"
import type { SQLConfig } from "@codemirror/lang-sql"
+import { format } from 'sql-formatter';
import HistoryInput from './HistoryInput.vue'
import { Refresh, Document } from '@element-plus/icons-vue'
import { Magic } from './magicKeys'
@@ -229,6 +232,13 @@ const ormDataHandler = (data: QueryData) => {
})
}
+const formatSQL = () => {
+ sqlQuery.value = format(sqlQuery.value, {
+ keywordCase: 'upper',
+ language: 'mysql'
+ })
+}
+
const keyValueDataHandler = (data: QueryData) => {
queryResult.value = []
columns.value = ['key', 'value']
@@ -410,6 +420,7 @@ Magic.LoadMagicKeys('DataManager', new Map([
+ Format
Execute
@@ -441,7 +452,7 @@ Magic.LoadMagicKeys('DataManager', new Map([
v-model="sqlQuery"
v-if="complexEditor"
style="height: var(--sql-editor-height);"
- :extensions="[sql(sqlConfig)]"
+ :extensions="[sql(sqlConfig), keymap.of(standardKeymap)]"
/>