fix: 显示并提示 sql 变量只能在where中使用

This commit is contained in:
taojinlong 2022-06-27 12:42:08 +08:00
parent b0b9de235d
commit 0f5b69aebe
8 changed files with 37 additions and 4 deletions

View File

@ -45,6 +45,7 @@ import io.dataease.service.engine.EngineService;
import io.dataease.service.sys.SysAuthService;
import net.sf.jsqlparser.expression.BinaryExpression;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.ExpressionVisitor;
import net.sf.jsqlparser.expression.Parenthesis;
import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
import net.sf.jsqlparser.expression.operators.conditional.OrExpression;
@ -52,6 +53,7 @@ import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
import net.sf.jsqlparser.expression.operators.relational.InExpression;
import net.sf.jsqlparser.expression.operators.relational.LikeExpression;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.parser.SimpleNode;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.select.PlainSelect;
import net.sf.jsqlparser.statement.select.Select;
@ -951,6 +953,14 @@ public class DataSetTableService {
return sqlVariableDetails;
}
public void checkVariable(final String sql) throws Exception{
String tmpSql = removeVariables(sql);
if (tmpSql.contains(SubstitutedParams)) {
throw new Exception(Translator.get("I18N_SQL_variable_limit"));
}
}
public String handleVariableDefaultValue(String sql, String sqlVariableDetails) {
if (StringUtils.isEmpty(sql)) {
DataEaseException.throwException(Translator.get("i18n_sql_not_empty"));
@ -1022,6 +1032,7 @@ public class DataSetTableService {
if (StringUtils.isEmpty(sql)) {
DataEaseException.throwException(Translator.get("i18n_sql_not_empty"));
}
checkVariable(sql);
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
String sqlAsTable = qp.createSQLPreview(sql, null);
datasourceRequest.setQuery(sqlAsTable);

View File

@ -188,3 +188,4 @@ I18N_NO_PERMISSION=You do not have permission to
I18N_PLEASE_CONCAT_ADMIN=Please contact the administrator for authorization
I18N_SQL_variable_limit=SQL variables can only be used in where conditions

View File

@ -190,3 +190,5 @@ I18N_DATASOURCE_LEVEL_GRANT=授权
I18N_NO_PERMISSION=当前用户没有权限
I18N_PLEASE_CONCAT_ADMIN=请联系管理员开通
I18N_SQL_variable_limit=SQL 变量只能在 WHERE 条件中使用

View File

@ -184,4 +184,6 @@ I18N_DATASOURCE_LEVEL_GRANT=授權
I18N_NO_PERMISSION=當前用戶沒有權限
I18N_PLEASE_CONCAT_ADMIN=請聯系管理員開通
I18N_PLEASE_CONCAT_ADMIN=請聯系管理員開通
I18N_SQL_variable_limit=SQL變數只能在WHERE條件中使用

View File

@ -1122,6 +1122,7 @@ export default {
max_more_than_mix: 'Max must more than Min'
},
dataset: {
sql_variable_limit: 'SQL variables can only be used in where conditions',
select_year: 'Select Year',
select_month: 'Select Month',
select_date: 'Select Date',

View File

@ -1122,6 +1122,7 @@ export default {
max_more_than_mix: '最大值必須大於最小值'
},
dataset: {
sql_variable_limit: 'SQL 變數只能在 WHERE 條件中使用',
select_year: '選擇年',
select_month: '選擇月',
select_date: '選擇日期',

View File

@ -1125,6 +1125,7 @@ export default {
},
dataset: {
select_year: '选择年',
sql_variable_limit: 'SQL 变量只能在 WHERE 条件中使用',
select_month: '选择月',
select_date: '选择日期',
select_time: '选择时间',

View File

@ -46,12 +46,26 @@
<el-option :label="$t('dataset.sync_latter')" value="sync_latter"/>
</el-select>
</el-form-item>
<el-form-item>
<span v-if="mode === '0'" style="line-height: 26px;">
<el-tooltip class="item" effect="dark" content="Right Bottom 提示文字" placement="bottom">
<div slot="content">
{{ $t('dataset.sql_variable_limit') }}<br>
</div>
<i class="el-icon-info" style="cursor: pointer;" />
</el-tooltip>
</span>
</el-form-item>
</el-form>
</el-col>
<el-col :span="8">
<el-button v-if="mode === '0'" type="text" size="mini" style="float: right;" @click="variableMgm">
{{ $t('sql_variable.variable_mgm') }}
</el-button>
<el-tooltip tyle="float: right;" v-if="mode === '0'" class="item" effect="dark" :content="$t('dataset.sql_variable_limit')" placement="left">
<el-button type="text" size="mini" style="float: right;" @click="variableMgm">
{{ $t('sql_variable.variable_mgm') }}
</el-button>
</el-tooltip>
</el-col>
</el-row>
<el-row>