Browse Source

REPORT-53367 复制传参后sql-远程下,新增的转义字符提示失效

feature/10.0
Bruce.Deng 4 years ago
parent
commit
cec0f89c5f
  1. 15
      designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java

15
designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java

@ -6,7 +6,6 @@ import com.fr.base.ParameterMapNameSpace;
import com.fr.data.impl.DBTableData; import com.fr.data.impl.DBTableData;
import com.fr.data.impl.EscapeSqlHelper; import com.fr.data.impl.EscapeSqlHelper;
import com.fr.data.operator.DataOperator; import com.fr.data.operator.DataOperator;
import com.fr.decision.config.PreventSqlInjConfig;
import com.fr.decision.webservice.v10.config.ConfigService; import com.fr.decision.webservice.v10.config.ConfigService;
import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.dialog.link.MessageWithLink; import com.fr.design.dialog.link.MessageWithLink;
@ -19,7 +18,6 @@ import com.fr.design.parameter.ParameterInputPane;
import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.CloudCenter; import com.fr.general.CloudCenter;
import com.fr.general.GeneralContext; import com.fr.general.GeneralContext;
import com.fr.invoke.Reflect;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
import com.fr.plugin.injectable.PluginModule; import com.fr.plugin.injectable.PluginModule;
import com.fr.script.Calculator; import com.fr.script.Calculator;
@ -190,11 +188,7 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener {
calculator.pushNameSpace(ns); calculator.pushNameSpace(ns);
Parameter[] paras = processParameters(tableData, calculator); Parameter[] paras = processParameters(tableData, calculator);
// 所有被转义参数的集合 // 所有被转义参数的集合
// 远程时如何获取服务器上的转义字符?这里比较恶心 refreshEscapeSqlHelper();
// 方法1是新增rpc接口,交由服务器去获取转义字符。但是要考虑兼容问题:
// 新设计器jar远程老服务器jar,需要提供Compatible实现,但是这个实现能做什么呢?目前没有老的接口可以去获取服务器的转义字符,仍然啥也做不了;
// 现在采用方法2,通过反射调用PreventSqlInjConfig的刷新方法(因为它是decision模块的private方法,直接改成public仍然有兼容问题)
Reflect.on(PreventSqlInjConfig.class).call("refreshPreventSqlInjConfig");
Set<String> specialCharParam = EscapeSqlHelper.getInstance().getSpecialCharParam(paras); Set<String> specialCharParam = EscapeSqlHelper.getInstance().getSpecialCharParam(paras);
// 将参数转义等 // 将参数转义等
Set<TableDataProvider> tableDataProviders = getTableDataProviders(); Set<TableDataProvider> tableDataProviders = getTableDataProviders();
@ -223,6 +217,13 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener {
pane.setVisible(true); pane.setVisible(true);
} }
private static void refreshEscapeSqlHelper() {
EscapeSqlHelper.getInstance().setUseForbidWord(ConfigService.getInstance().getPSIConfig().isUseForbidWord());
EscapeSqlHelper.getInstance().setSelectedForbidWord(ConfigService.getInstance().getPSIConfig().getSelectedForbidWord());
EscapeSqlHelper.getInstance().setUseEscapeSpecialChar(ConfigService.getInstance().getPSIConfig().isUseEscapeSpecialChar());
EscapeSqlHelper.getInstance().setSelectedSpecialChar(ConfigService.getInstance().getPSIConfig().getSelectedSpecialChar());
}
private static boolean isShowSpecialCharSqlPane(List<int[]> specialCharParamIndex) { private static boolean isShowSpecialCharSqlPane(List<int[]> specialCharParamIndex) {
return specialCharParamIndex != null && !specialCharParamIndex.isEmpty(); return specialCharParamIndex != null && !specialCharParamIndex.isEmpty();
} }

Loading…
Cancel
Save