diff --git a/core/src/main/java/datart/core/base/consts/Const.java b/core/src/main/java/datart/core/base/consts/Const.java index 32c598588..e1c15f88a 100644 --- a/core/src/main/java/datart/core/base/consts/Const.java +++ b/core/src/main/java/datart/core/base/consts/Const.java @@ -48,7 +48,7 @@ public class Const { public static final String DEFAULT_VARIABLE_QUOTE = "$"; //变量匹配符 public static final Pattern VARIABLE_PATTERN = Pattern.compile("\\$\\S+\\$"); - + //变量正则模板 public static final String VARIABLE_PATTERN_TEMPLATE = "\\$%s\\$"; /** diff --git a/data-providers/src/main/java/datart/data/provider/jdbc/PermissionVariablePlaceholder.java b/data-providers/src/main/java/datart/data/provider/jdbc/PermissionVariablePlaceholder.java deleted file mode 100644 index 56f4bfa2b..000000000 --- a/data-providers/src/main/java/datart/data/provider/jdbc/PermissionVariablePlaceholder.java +++ /dev/null @@ -1,65 +0,0 @@ -///* -// * Datart -// *

-// * Copyright 2021 -// *

-// * Licensed under the Apache License, Version 2.0 (the "License"); -// * you may not use this file except in compliance with the License. -// * You may obtain a copy of the License at -// *

-// * http://www.apache.org/licenses/LICENSE-2.0 -// *

-// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an "AS IS" BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -// */ -// -//package datart.data.provider.jdbc; -// -//import datart.core.base.consts.Const; -//import datart.core.data.provider.ScriptVariable; -//import datart.data.provider.calcite.SqlNodeUtils; -//import datart.data.provider.script.ReplacementPair; -//import datart.data.provider.script.VariablePlaceholder; -//import org.apache.calcite.sql.SqlCall; -//import org.apache.calcite.sql.SqlDialect; -//import org.springframework.util.CollectionUtils; -// -//import java.io.Serializable; -// -//public class PermissionVariablePlaceholder extends VariablePlaceholder { -// -// public PermissionVariablePlaceholder(ScriptVariable variable, SqlDialect sqlDialect, SqlCall sqlCall, String originalSqlFragment) { -// super(variable, sqlDialect, sqlCall, originalSqlFragment); -// } -// -// @Override -// public ReplacementPair replacementPair() { -// -// if (CollectionUtils.isEmpty(variable.getValues())) { -// return new ReplacementPair(originalSqlFragment, SqlScriptRender.FALSE_CONDITION); -// } -// -// for (Serializable value : variable.getValues()) { -// if (Const.ALL_PERMISSION.equals(value.toString())) { -// return new ReplacementPair(originalSqlFragment, SqlScriptRender.TRUE_CONDITION); -// } -// } -// -// if (variable.getValues().size() == 1) { -// replaceVariable(sqlCall); -// -// return new ReplacementPair(originalSqlFragment, SqlNodeUtils.toSql(sqlCall, sqlDialect)); -// } -// -// //权限变量为多值,需要解析SQL条件表达式,根据权限变量值修改关系运算符 -// SqlCall fixSqlCall = autoFixSqlCall(); -// -// return new ReplacementPair(originalSqlFragment, SqlNodeUtils.toSql(fixSqlCall, sqlDialect)); -// -// } -// -// -//} diff --git a/data-providers/src/main/java/datart/data/provider/jdbc/QueryVariablePlaceholder.java b/data-providers/src/main/java/datart/data/provider/jdbc/QueryVariablePlaceholder.java deleted file mode 100644 index 0d91f6705..000000000 --- a/data-providers/src/main/java/datart/data/provider/jdbc/QueryVariablePlaceholder.java +++ /dev/null @@ -1,48 +0,0 @@ -///* -// * Datart -// *

-// * Copyright 2021 -// *

-// * Licensed under the Apache License, Version 2.0 (the "License"); -// * you may not use this file except in compliance with the License. -// * You may obtain a copy of the License at -// *

-// * http://www.apache.org/licenses/LICENSE-2.0 -// *

-// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an "AS IS" BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -// */ -// -//package datart.data.provider.jdbc; -// -//import datart.core.data.provider.ScriptVariable; -//import datart.data.provider.calcite.SqlNodeUtils; -//import datart.data.provider.script.ReplacementPair; -//import datart.data.provider.script.VariablePlaceholder; -//import org.apache.calcite.sql.SqlCall; -//import org.apache.calcite.sql.SqlDialect; -//import org.springframework.util.CollectionUtils; -// -//public class QueryVariablePlaceholder extends VariablePlaceholder { -// -// public QueryVariablePlaceholder(ScriptVariable variable, SqlDialect sqlDialect, SqlCall sqlCall, String originalSqlFragment) { -// super(variable, sqlDialect, sqlCall, originalSqlFragment); -// } -// -// @Override -// public ReplacementPair replacementPair() { -// if (CollectionUtils.isEmpty(variable.getValues())) { -// SqlCall isNullSqlCall = createIsNullSqlCall(sqlCall.getOperandList().get(0)); -// return new ReplacementPair(originalSqlFragment, SqlNodeUtils.toSql(isNullSqlCall, sqlDialect)); -// } -// if (variable.getValues().size() == 1) { -// replaceVariable(sqlCall); -// return new ReplacementPair(originalSqlFragment, SqlNodeUtils.toSql(sqlCall, sqlDialect)); -// } -// SqlCall fixedCall = autoFixSqlCall(); -// return new ReplacementPair(originalSqlFragment, SqlNodeUtils.toSql(fixedCall, sqlDialect)); -// } -//} diff --git a/data-providers/src/main/java/datart/data/provider/jdbc/RegexVariableResolver.java b/data-providers/src/main/java/datart/data/provider/jdbc/RegexVariableResolver.java index bdf9b7d2c..1b7951b54 100644 --- a/data-providers/src/main/java/datart/data/provider/jdbc/RegexVariableResolver.java +++ b/data-providers/src/main/java/datart/data/provider/jdbc/RegexVariableResolver.java @@ -59,6 +59,7 @@ private static VariablePlaceholder createPlaceholder(SqlDialect sqlDialect, Stri String variableExpression = tryMatchVariableExpression(sql, variableFragment); SqlCall sqlCall = parseAsSqlCall(variableExpression, variableFragment); + if (sqlCall == null) { return new SimpleVariablePlaceholder(variable, sqlDialect, variableFragment); } else { diff --git a/data-providers/src/main/java/datart/data/provider/jdbc/SimpleVariablePlaceholder.java b/data-providers/src/main/java/datart/data/provider/jdbc/SimpleVariablePlaceholder.java index 126f0a76e..f842a914f 100644 --- a/data-providers/src/main/java/datart/data/provider/jdbc/SimpleVariablePlaceholder.java +++ b/data-providers/src/main/java/datart/data/provider/jdbc/SimpleVariablePlaceholder.java @@ -55,35 +55,6 @@ public ReplacementPair replacementPair() { return new ReplacementPair(originalSqlFragment, formatValue(variable)); } - private String formatValue(ScriptVariable variable) { - switch (variable.getValueType()) { - case NUMERIC: - case KEYWORD: - case SNIPPET: - case FRAGMENT: - case IDENTIFIER: - return formatWithoutQuote(variable.getValues()); - default: - return formatWithQuote(variable.getValues()); - } - } - - private String formatWithoutQuote(Set values) { - if (CollectionUtils.isEmpty(values)) { - return ""; - } - return String.join(",", values); - } - - private String formatWithQuote(Set values) { - if (CollectionUtils.isEmpty(values)) { - return ""; - } - return values.stream().map(SqlSimpleStringLiteral::new) - .map(node -> SqlNodeUtils.toSql(node, sqlDialect)) - .collect(Collectors.joining(",")); - } - @Override public int getStartPos() { return Integer.MAX_VALUE; diff --git a/data-providers/src/main/java/datart/data/provider/jdbc/TrueVariablePlaceholder.java b/data-providers/src/main/java/datart/data/provider/jdbc/TrueVariablePlaceholder.java deleted file mode 100644 index c4267acda..000000000 --- a/data-providers/src/main/java/datart/data/provider/jdbc/TrueVariablePlaceholder.java +++ /dev/null @@ -1,41 +0,0 @@ -///* -// * Datart -// *

-// * Copyright 2021 -// *

-// * Licensed under the Apache License, Version 2.0 (the "License"); -// * you may not use this file except in compliance with the License. -// * You may obtain a copy of the License at -// *

-// * http://www.apache.org/licenses/LICENSE-2.0 -// *

-// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an "AS IS" BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -// */ -// -//package datart.data.provider.jdbc; -// -//import datart.core.data.provider.ScriptVariable; -//import datart.data.provider.script.ReplacementPair; -//import datart.data.provider.script.VariablePlaceholder; -//import org.apache.calcite.sql.SqlCall; -//import org.apache.calcite.sql.SqlDialect; -// -//public class TrueVariablePlaceholder extends VariablePlaceholder { -// -// public TrueVariablePlaceholder(ScriptVariable variable, SqlDialect sqlDialect, SqlCall sqlCall, String originalSqlFragment) { -// super(variable, sqlDialect, sqlCall, originalSqlFragment); -// } -// -// public TrueVariablePlaceholder(String originalSqlFragment) { -// this(null, null, null, originalSqlFragment); -// } -// -// @Override -// public ReplacementPair replacementPair() { -// return new ReplacementPair(originalSqlFragment, SqlScriptRender.TRUE_CONDITION); -// } -//} diff --git a/data-providers/src/main/java/datart/data/provider/script/VariablePlaceholder.java b/data-providers/src/main/java/datart/data/provider/script/VariablePlaceholder.java index 7c0e02330..8ebb77309 100644 --- a/data-providers/src/main/java/datart/data/provider/script/VariablePlaceholder.java +++ b/data-providers/src/main/java/datart/data/provider/script/VariablePlaceholder.java @@ -289,11 +289,40 @@ protected ReplacementPair replaceAsSting() { Matcher matcher = variablePattern.matcher(originalSqlFragment); if (matcher.find()) { String group = matcher.group(); - SqlNode sqlNode = SqlNodeUtils.toSingleSqlLiteral(variable, SqlParserPos.ZERO); - replacement = replacement.replace(group, sqlNode.toSqlString(sqlDialect).getSql()); + replacement = replacement.replace(group, formatValue(variable)); } } return new ReplacementPair(originalSqlFragment, replacement); } + protected String formatValue(ScriptVariable variable) { + switch (variable.getValueType()) { + case NUMERIC: + case KEYWORD: + case SNIPPET: + case FRAGMENT: + case IDENTIFIER: + return formatWithoutQuote(variable.getValues()); + default: + return formatWithQuote(variable.getValues()); + } + } + + protected String formatWithoutQuote(Set values) { + if (org.springframework.util.CollectionUtils.isEmpty(values)) { + return ""; + } + return String.join(",", values); + } + + protected String formatWithQuote(Set values) { + if (org.springframework.util.CollectionUtils.isEmpty(values)) { + return ""; + } + return values.stream().map(SqlSimpleStringLiteral::new) + .map(node -> SqlNodeUtils.toSql(node, sqlDialect)) + .collect(Collectors.joining(",")); + } + + } \ No newline at end of file diff --git a/server/src/main/java/datart/server/service/impl/StoryboardServiceImpl.java b/server/src/main/java/datart/server/service/impl/StoryboardServiceImpl.java index 6c8f8eee9..fb9261842 100644 --- a/server/src/main/java/datart/server/service/impl/StoryboardServiceImpl.java +++ b/server/src/main/java/datart/server/service/impl/StoryboardServiceImpl.java @@ -120,7 +120,7 @@ public void requirePermission(Storyboard storyboard, int permission) { } private boolean hasPermission(Role role, Storyboard storyboard, int permission) { - if (storyboard.getId() == null || (permission & Const.CREATE) == permission) { + if (storyboard.getId() == null || (permission & Const.CREATE) == Const.CREATE) { return securityManager.hasPermission(PermissionHelper.vizPermission(storyboard.getOrgId(), role.getId(), ResourceType.STORYBOARD.name(), permission)); } else { return securityManager.hasPermission(PermissionHelper.vizPermission(storyboard.getOrgId(), role.getId(), storyboard.getId(), permission));