fix: sql 拼接错误

This commit is contained in:
taojinlong 2021-12-06 16:59:54 +08:00
parent 408a796e74
commit c51a41da34
4 changed files with 32 additions and 19 deletions

View File

@ -898,7 +898,7 @@ public class EsQueryProvider extends QueryProvider {
if (StringUtils.equalsIgnoreCase(y.getSummary(), "avg") || StringUtils.containsIgnoreCase(y.getSummary(), "pop")) {
String cast = String.format(EsSqlLConstants.CAST, originField, y.getDeType() == DeTypeConstants.DE_INT ? "bigint" : "double");
String agg = String.format(EsSqlLConstants.AGG_FIELD, y.getSummary(), cast);
fieldName = String.format(EsSqlLConstants.CAST, agg, EsSqlLConstants.DEFAULT_FLOAT_FORMAT);
fieldName = String.format(EsSqlLConstants.ROUND, agg, "2");
} else {
String cast = String.format(EsSqlLConstants.CAST, originField, y.getDeType() == DeTypeConstants.DE_INT ? "bigint" : "double");
fieldName = String.format(EsSqlLConstants.AGG_FIELD, y.getSummary(), cast);

View File

@ -19,12 +19,10 @@ public class EsSqlLConstants extends SQLConstants {
public static final String CAST = "CAST(%s AS %s)";
public static final String ROUND = "ROUND(%s, %s)";
public static final String DEFAULT_DATE_FORMAT = "YYYY-MM-dd HH:mm:ss";
public static final String DEFAULT_INT_FORMAT = "DECIMAL(20,0)";
public static final String DEFAULT_FLOAT_FORMAT = "DECIMAL(20,2)";
public static final String WHERE_VALUE_NULL = "(NULL,'')";
public static final String WHERE_VALUE_VALUE = "'%s'";

View File

@ -282,7 +282,11 @@ public class SqlserverQueryProvider extends QueryProvider {
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
return sqlLimit(st.render(), view);
if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) {
SQLObj limitFiled = SQLObj.builder().limitFiled("top " + view.getResultCount() + " ").build();
st.add("limitFiled", limitFiled);
}
return st.render();
}
@Override
@ -353,7 +357,11 @@ public class SqlserverQueryProvider extends QueryProvider {
.build();
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
return sqlLimit(st.render(), view);
if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) {
SQLObj limitFiled = SQLObj.builder().limitFiled("top " + view.getResultCount() + " ").build();
st.add("limitFiled", limitFiled);
}
return st.render();
}
@Override
@ -491,7 +499,11 @@ public class SqlserverQueryProvider extends QueryProvider {
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
return sqlLimit(st.render(), view);
if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) {
SQLObj limitFiled = SQLObj.builder().limitFiled("top " + view.getResultCount() + " ").build();
st.add("limitFiled", limitFiled);
}
return st.render();
}
@Override
@ -604,7 +616,11 @@ public class SqlserverQueryProvider extends QueryProvider {
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
return sqlLimit(st.render(), view);
if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) {
SQLObj limitFiled = SQLObj.builder().limitFiled("top " + view.getResultCount() + " ").build();
st.add("limitFiled", limitFiled);
}
return st.render();
}
@Override
@ -686,7 +702,11 @@ public class SqlserverQueryProvider extends QueryProvider {
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
return sqlLimit(st.render(), view);
if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) {
SQLObj limitFiled = SQLObj.builder().limitFiled("top " + view.getResultCount() + " ").build();
st.add("limitFiled", limitFiled);
}
return st.render();
}
@Override
@ -1057,12 +1077,4 @@ public class SqlserverQueryProvider extends QueryProvider {
}
return originField;
}
private String sqlLimit(String sql, ChartViewWithBLOBs view) {
if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) {
return String.format("SELECT top %s * from ( %s ) as DE_SQLSERVER_TMP ", view.getResultCount(), sqlFix(sql));
} else {
return sql;
}
}
}

View File

@ -1,6 +1,9 @@
querySql(groups, aggregators, filters, orders, table)
querySql(limitFiled, groups, aggregators, filters, orders, table)
::=<<
SELECT
<if(limitFiled)>
<limitFiled.limitFiled>
<endif>
<if(!groups && !aggregators)>
*
<endif>