diff --git a/src/store/modules/logquery/index.ts b/src/store/modules/logquery/index.ts index c9c1f0f3..b29473d8 100644 --- a/src/store/modules/logquery/index.ts +++ b/src/store/modules/logquery/index.ts @@ -8,23 +8,26 @@ import { SchemaType } from '../code-run/types' type TableMap = { [key: string]: Array } -export const typeMap = { - 'string': 'String', - 'int unsigned': 'Number', - 'bigint': 'Number', - 'int32': 'Number', - 'int64': 'Number', - 'double': 'Number', - 'float64': 'Number', - 'timestamp': 'Time', - 'timestamp(3)': 'Time', - 'timestamp(6)': 'Time', - 'timestamp(9)': 'Time', -} +const numberTypeRe = /(int|float|decimal|double)/i +const timeTypeRe = /(timestamp|date)/i type ColumnsMap = { [key: string]: Array } +function getColumnOpType(dataType) { + let opType = '' + if (dataType === 'string') { + opType = 'String' + } else if (dataType === 'boolean') { + opType = 'Boolean' + } else if (numberTypeRe.test(dataType)) { + opType = 'Number' + } else if (timeTypeRe.test(dataType)) { + opType = 'Time' + } + return opType +} + const useLogQueryStore = defineStore('logQuery', () => { /** sql state */ // current query result sql @@ -118,11 +121,11 @@ const useLogQueryStore = defineStore('logQuery', () => { conditions: [] as Array, orderBy: 'DESC', }) - type TypeKey = keyof typeof typeMap const opMap = { String: ['=', 'contains', 'not contains', '!=', 'like'], Number: ['=', '!=', '>', '>=', '<', '<='], Time: ['>', '>=', '<', '<='], + Boolean: ['=', '!='], } type OpKey = keyof typeof opMap @@ -133,8 +136,9 @@ const useLogQueryStore = defineStore('logQuery', () => { if (index === -1) { return [] } - const type = fields[index].data_type as TypeKey - const opKey = typeMap[type] as OpKey + const type = fields[index].data_type + + const opKey = getColumnOpType(type) as OpKey return opMap[opKey] || [] } const limit = ref(1000) @@ -236,7 +240,7 @@ const useLogQueryStore = defineStore('logQuery', () => { function singleCondition(condition: Condition) { const column = condition.field - const columnType = typeMap[column.data_type as keyof typeof typeMap] + const columnType = getColumnOpType(column.data_type) let columnName = condition.field.name if (columnName.toUpperCase() !== columnName && columnName.toLowerCase() !== columnName) { diff --git a/src/views/dashboard/logs/query/SQLBuilder.vue b/src/views/dashboard/logs/query/SQLBuilder.vue index e4a6e3e9..efcb01f6 100644 --- a/src/views/dashboard/logs/query/SQLBuilder.vue +++ b/src/views/dashboard/logs/query/SQLBuilder.vue @@ -60,7 +60,7 @@ a-form(