From 3fcdd0cf7ea2075b575135f313a39a91abbe8e86 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Mon, 2 Sep 2024 16:22:28 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20sql=E5=8F=82=E6=95=B0=E6=94=AF?= =?UTF-8?q?=E6=8C=81hiving=20=E8=AF=AD=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commons/utils/SqlparserUtils.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java b/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java index 463019f503..877d535d92 100644 --- a/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java +++ b/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java @@ -66,6 +66,7 @@ public class SqlparserUtils { } if (select.getSelectBody() instanceof PlainSelect) { + return handlePlainSelect((PlainSelect) select.getSelectBody(), select, dsType); } else { StringBuilder result = new StringBuilder(); @@ -84,6 +85,7 @@ public class SqlparserUtils { handleSelectItems(plainSelect, dsType); handleFromItems(plainSelect, dsType); handleJoins(plainSelect, dsType); + handleHaving(plainSelect); return handleWhere(plainSelect, statementSelect, dsType); } @@ -175,6 +177,29 @@ public class SqlparserUtils { } } + private static String handleHaving(PlainSelect plainSelect) throws Exception { + Expression expr = plainSelect.getHaving(); + StringBuilder stringBuilder = new StringBuilder(); + BinaryExpression binaryExpression = null; + try { + binaryExpression = (BinaryExpression) expr; + } catch (Exception e) { + } + if (binaryExpression != null) { + boolean hasSubBinaryExpression = binaryExpression instanceof AndExpression || binaryExpression instanceof OrExpression; + if (!hasSubBinaryExpression && !(binaryExpression.getLeftExpression() instanceof BinaryExpression) && !(binaryExpression.getLeftExpression() instanceof InExpression) && (hasVariable(binaryExpression.getLeftExpression().toString()) || hasVariable(binaryExpression.getRightExpression().toString()))) { + stringBuilder.append(SubstitutedSql); + } else { + expr.accept(getExpressionDeParser(stringBuilder)); + } + + } else { + expr.accept(getExpressionDeParser(stringBuilder)); + } + plainSelect.setHaving(CCJSqlParserUtil.parseCondExpression(stringBuilder.toString())); + return plainSelect.toString(); + } + private static String handleWhere(PlainSelect plainSelect, Select statementSelect, String dsType) throws Exception { Expression expr = plainSelect.getWhere(); if (expr == null) { From d571fa17c6be00ee560f00c94907d4e4cf20f191 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Mon, 2 Sep 2024 16:43:34 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E6=95=B0=E6=8D=AE=E6=BA=90=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=20loading=20=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/visualized/data/datasource/form/EditorDetail.vue | 4 ++++ .../src/views/visualized/data/datasource/form/index.vue | 2 ++ 2 files changed, 6 insertions(+) diff --git a/core/core-frontend/src/views/visualized/data/datasource/form/EditorDetail.vue b/core/core-frontend/src/views/visualized/data/datasource/form/EditorDetail.vue index 6058e587da..02ab4efe31 100644 --- a/core/core-frontend/src/views/visualized/data/datasource/form/EditorDetail.vue +++ b/core/core-frontend/src/views/visualized/data/datasource/form/EditorDetail.vue @@ -55,6 +55,7 @@ const state = reactive({ }) const schemas = ref([]) +const loading = ref(false) const dsForm = ref() const cronEdit = ref(true) @@ -502,7 +503,9 @@ const getDsSchema = () => { if (val) { const request = JSON.parse(JSON.stringify(form.value)) request.configuration = Base64.encode(JSON.stringify(request.configuration)) + loading.value = true getSchema(request).then(res => { + loading.value = false schemas.value = res.data ElMessage.success(t('commons.success')) }) @@ -722,6 +725,7 @@ defineExpose({ label-width="180px" label-position="top" require-asterisk-position="right" + v-loading="loading" > { } const doValidateDs = request => { + dsLoading.value = true validate(request).then(res => { + dsLoading.value = false if (res.data.type === 'API') { let error = 0 const status = JSON.parse(res.data.status) as Array<{ status: string; name: string }>