Skip to content

Commit 34eeb2a

Browse files
authored
Merge pull request #653 from LinuxSuRen/feat/iotdb
feat: add iotdb support
2 parents 12a0db8 + 05d9194 commit 34eeb2a

File tree

6 files changed

+655
-603
lines changed

6 files changed

+655
-603
lines changed

console/atest-ui/src/views/DataManager.vue

Lines changed: 69 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,25 @@ import type { Pair } from './types'
66
import { ElMessage } from 'element-plus'
77
import { Codemirror } from 'vue-codemirror'
88
import HistoryInput from '../components/HistoryInput.vue'
9+
import type { Ref } from 'vue'
910
10-
const stores = ref([] as Store[])
11+
const stores: Ref<Store[]> = ref([])
1112
const kind = ref('')
1213
const store = ref('')
1314
const sqlQuery = ref('')
1415
const queryResult = ref([] as any[])
15-
const queryResultAsJSON= ref('')
16+
const queryResultAsJSON = ref('')
1617
const columns = ref([] as string[])
1718
const queryTip = ref('')
1819
const loadingStores = ref(true)
1920
const dataFormat = ref('table')
2021
const dataFormatOptions = ['table', 'json']
2122
const queryDataMeta = ref({} as QueryDataMeta)
2223
23-
const tablesTree = ref([])
24+
interface TreeItem {
25+
label: string
26+
}
27+
const tablesTree = ref([] as TreeItem[])
2428
watch(store, (s) => {
2529
kind.value = ''
2630
stores.value.forEach((e: Store) => {
@@ -60,6 +64,7 @@ const queryTables = () => {
6064
watch(kind, (k) => {
6165
switch (k) {
6266
case 'atest-store-orm':
67+
case 'atest-store-iotdb':
6368
queryTip.value = 'Enter SQL query'
6469
executeQuery()
6570
break;
@@ -144,6 +149,7 @@ const executeQuery = async () => {
144149
const data = await API.DataQueryAsync(store.value, kind.value, queryDataMeta.value.currentDatabase, sqlQuery.value);
145150
switch (kind.value) {
146151
case 'atest-store-orm':
152+
case 'atest-store-iotdb':
147153
ormDataHandler(data)
148154
success = true
149155
break;
@@ -172,60 +178,64 @@ const executeQuery = async () => {
172178
</script>
173179

174180
<template>
175-
<div>
176-
<el-container style="height: calc(100vh - 50px);">
177-
<el-aside v-if="kind === 'atest-store-orm'">
178-
<el-scrollbar>
179-
<el-select v-model="queryDataMeta.currentDatabase" placeholder="Select database" @change="queryTables" filterable>
180-
<el-option v-for="item in queryDataMeta.databases" :key="item" :label="item"
181-
:value="item"></el-option>
182-
</el-select>
183-
<el-tree :data="tablesTree" node-key="label" @node-click="queryDataFromTable" highlight-current draggable/>
184-
</el-scrollbar>
185-
</el-aside>
186-
<el-container>
187-
<el-header>
188-
<el-form @submit.prevent="executeQuery">
189-
<el-row :gutter="10">
190-
<el-col :span="4">
191-
<el-form-item>
192-
<el-select v-model="store" placeholder="Select store" filterable :loading="loadingStores">
193-
<el-option v-for="item in stores" :key="item.name" :label="item.name"
194-
:value="item.name" :disabled="!item.ready" :kind="item.kind.name"></el-option>
195-
</el-select>
196-
</el-form-item>
197-
</el-col>
198-
<el-col :span="16">
199-
<el-form-item>
200-
<HistoryInput :placeholder="queryTip" :callback="executeQuery" v-model="sqlQuery"/>
201-
</el-form-item>
202-
</el-col>
203-
<el-col :span="2">
204-
<el-form-item>
205-
<el-button type="primary" @click="executeQuery">Execute</el-button>
206-
</el-form-item>
207-
</el-col>
208-
<el-col :span="2">
209-
<el-select v-model="dataFormat" placeholder="Select data format">
210-
<el-option v-for="item in dataFormatOptions" :key="item" :label="item" :value="item"></el-option>
211-
</el-select>
212-
</el-col>
213-
</el-row>
214-
</el-form>
215-
</el-header>
216-
<el-main>
217-
<div style="display: flex; gap: 8px;">
218-
<el-tag type="primary" v-if="queryResult.length > 0">{{ queryResult.length }} rows</el-tag>
219-
<el-tag type="primary" v-if="queryDataMeta.duration">{{ queryDataMeta.duration }}</el-tag>
220-
<el-tag type="primary" v-for="label in queryDataMeta.labels">{{ label.value }}</el-tag>
221-
</div>
222-
<el-table :data="queryResult" stripe v-if="dataFormat === 'table'">
223-
<el-table-column v-for="col in columns" :key="col" :prop="col" :label="col" sortable/>
224-
</el-table>
225-
<Codemirror v-else-if="dataFormat === 'json'"
226-
v-model="queryResultAsJSON"/>
227-
</el-main>
228-
</el-container>
229-
</el-container>
230-
</div>
181+
<div>
182+
<el-container style="height: calc(100vh - 50px);">
183+
<el-aside v-if="kind === 'atest-store-orm' || kind === 'atest-store-iotdb'">
184+
<el-scrollbar>
185+
<el-select v-model="queryDataMeta.currentDatabase" placeholder="Select database"
186+
@change="queryTables" filterable>
187+
<el-option v-for="item in queryDataMeta.databases" :key="item" :label="item"
188+
:value="item"></el-option>
189+
</el-select>
190+
<el-tree :data="tablesTree" node-key="label" @node-click="queryDataFromTable" highlight-current
191+
draggable />
192+
</el-scrollbar>
193+
</el-aside>
194+
<el-container>
195+
<el-header>
196+
<el-form @submit.prevent="executeQuery">
197+
<el-row :gutter="10">
198+
<el-col :span="4">
199+
<el-form-item>
200+
<el-select v-model="store" placeholder="Select store" filterable
201+
:loading="loadingStores">
202+
<el-option v-for="item in stores" :key="item.name" :label="item.name"
203+
:value="item.name" :disabled="!item.ready"
204+
:kind="item.kind.name"></el-option>
205+
</el-select>
206+
</el-form-item>
207+
</el-col>
208+
<el-col :span="16">
209+
<el-form-item>
210+
<HistoryInput :placeholder="queryTip" :callback="executeQuery" v-model="sqlQuery" />
211+
</el-form-item>
212+
</el-col>
213+
<el-col :span="2">
214+
<el-form-item>
215+
<el-button type="primary" @click="executeQuery">Execute</el-button>
216+
</el-form-item>
217+
</el-col>
218+
<el-col :span="2">
219+
<el-select v-model="dataFormat" placeholder="Select data format">
220+
<el-option v-for="item in dataFormatOptions" :key="item" :label="item"
221+
:value="item"></el-option>
222+
</el-select>
223+
</el-col>
224+
</el-row>
225+
</el-form>
226+
</el-header>
227+
<el-main>
228+
<div style="display: flex; gap: 8px;">
229+
<el-tag type="primary" v-if="queryResult.length > 0">{{ queryResult.length }} rows</el-tag>
230+
<el-tag type="primary" v-if="queryDataMeta.duration">{{ queryDataMeta.duration }}</el-tag>
231+
<el-tag type="primary" v-for="label in queryDataMeta.labels">{{ label.value }}</el-tag>
232+
</div>
233+
<el-table :data="queryResult" stripe v-if="dataFormat === 'table'">
234+
<el-table-column v-for="col in columns" :key="col" :prop="col" :label="col" sortable />
235+
</el-table>
236+
<Codemirror v-else-if="dataFormat === 'json'" v-model="queryResultAsJSON" />
237+
</el-main>
238+
</el-container>
239+
</el-container>
240+
</div>
231241
</template>

console/atest-ui/src/views/__test__/store.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
import {SupportedExtension, SupportedExtensions} from "../store";
17+
import { SupportedExtension, SupportedExtensions } from "../store";
1818

1919
describe("SupportedExtensions", () => {
2020
test('length check', () => {
2121
const extensions = SupportedExtensions()
22-
expect(extensions.length).toBe(6)
22+
expect(extensions.length).toBe(7)
2323
})
2424

2525
for (const extension of SupportedExtensions()) {

0 commit comments

Comments
 (0)