fix: mongo sql 拼接问题

This commit is contained in:
taojinlong 2021-12-31 16:34:21 +08:00
parent 0e52dd0d73
commit 927bdbdebf
4 changed files with 79 additions and 26 deletions

View File

@ -137,6 +137,10 @@ public class JdbcProvider extends DatasourceProvider {
@Override
public List<TableFiled> getTableFileds(DatasourceRequest datasourceRequest) throws Exception {
if(datasourceRequest.getDatasource().getType().equalsIgnoreCase("mongo")){
datasourceRequest.setQuery("select * from " + datasourceRequest.getTable());
return fetchResultField(datasourceRequest);
}
List<TableFiled> list = new LinkedList<>();
try (Connection connection = getConnectionFromPool(datasourceRequest)) {
DatabaseMetaData databaseMetaData = connection.getMetaData();

View File

@ -31,11 +31,11 @@ public class SQLConstants {
*/
public static final String SQL_TEMPLATE = "sql/sqlTemplate.stg";
public static final String TABLE_ALIAS_PREFIX = "T_A_%s";
public static final String FIELD_ALIAS_X_PREFIX = "F_AX_%s";
public static final String FIELD_ALIAS_Y_PREFIX = "F_AY_%s";
public static final String GROUP_ALIAS_PREFIX = "G_A_%s";
public static final String ORDER_ALIAS_X_PREFIX = "O_AX_%s";
public static final String ORDER_ALIAS_Y_PREFIX = "O_AY_%s";
public static final String WHERE_ALIAS_PREFIX = "W_A_%s";
public static final String TABLE_ALIAS_PREFIX = "t_a_%s";
public static final String FIELD_ALIAS_X_PREFIX = "f_ax_%s";
public static final String FIELD_ALIAS_Y_PREFIX = "f_ay_%s";
public static final String GROUP_ALIAS_PREFIX = "g_a_%s";
public static final String ORDER_ALIAS_X_PREFIX = "o_ax_%s";
public static final String ORDER_ALIAS_Y_PREFIX = "o_ay_%s";
public static final String WHERE_ALIAS_PREFIX = "w_a_%s";
}

View File

@ -114,7 +114,10 @@ public class MongoQueryProvider extends QueryProvider {
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
ST st_sql = stg.getInstanceOf("previewSql");
st_sql.add("isGroup", isGroup);
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
if (CollectionUtils.isNotEmpty(xFields)) {
st_sql.add("groups", xFields);
st_sql.add("notUseAs", true);
}
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
List<String> wheres = new ArrayList<>();
@ -233,8 +236,14 @@ public class MongoQueryProvider extends QueryProvider {
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
ST st_sql = stg.getInstanceOf("querySql");
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
if (CollectionUtils.isNotEmpty(xFields)) {
st_sql.add("groups", xFields);
st_sql.add("notUseAs", true);
}
if (CollectionUtils.isNotEmpty(yFields)) {
st_sql.add("aggregators", yFields);
st_sql.add("notUseAs", true);
}
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
String sql = st_sql.render();
@ -302,7 +311,10 @@ public class MongoQueryProvider extends QueryProvider {
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
ST st_sql = stg.getInstanceOf("previewSql");
st_sql.add("isGroup", false);
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
if (CollectionUtils.isNotEmpty(xFields)) {
st_sql.add("groups", xFields);
st_sql.add("notUseAs", true);
}
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
String sql = st_sql.render();
@ -417,8 +429,14 @@ public class MongoQueryProvider extends QueryProvider {
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
ST st_sql = stg.getInstanceOf("querySql");
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
if (CollectionUtils.isNotEmpty(xFields)) {
st_sql.add("groups", xFields);
st_sql.add("notUseAs", true);
}
if (CollectionUtils.isNotEmpty(yFields)) {
st_sql.add("aggregators", yFields);
st_sql.add("notUseAs", true);
}
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
String sql = st_sql.render();
@ -527,8 +545,14 @@ public class MongoQueryProvider extends QueryProvider {
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
ST st_sql = stg.getInstanceOf("querySql");
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
if (CollectionUtils.isNotEmpty(xFields)) {
st_sql.add("groups", xFields);
st_sql.add("notUseAs", true);
}
if (CollectionUtils.isNotEmpty(yFields)) {
st_sql.add("aggregators", yFields);
st_sql.add("notUseAs", true);
}
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
String sql = st_sql.render();
@ -610,7 +634,10 @@ public class MongoQueryProvider extends QueryProvider {
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
ST st_sql = stg.getInstanceOf("querySql");
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
if (CollectionUtils.isNotEmpty(yFields)) {
st_sql.add("aggregators", yFields);
st_sql.add("notUseAs", true);
}
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
String sql = st_sql.render();
@ -735,7 +762,7 @@ public class MongoQueryProvider extends QueryProvider {
for (ChartCustomFilterItemDTO filterItemDTO : filter) {
String value = filterItemDTO.getValue();
String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm());
String whereValue = "";
String whereValue = value;
if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) {
whereValue = "";
@ -750,7 +777,9 @@ public class MongoQueryProvider extends QueryProvider {
} else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) {
whereValue = "'%" + value + "%'";
} else {
whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, value);
if(field.getDeType() == DeTypeConstants.DE_STRING){
whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, value);
}
}
list.add(SQLObj.builder()
.whereField(whereName)
@ -809,7 +838,11 @@ public class MongoQueryProvider extends QueryProvider {
whereValue = String.format(MongoConstants.WHERE_BETWEEN, value.get(0), value.get(1));
}
} else {
whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, value.get(0));
if(field.getDeType() == DeTypeConstants.DE_STRING){
whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, value.get(0));
}else {
whereValue = value.get(0);
}
}
list.add(SQLObj.builder()
.whereField(whereName)
@ -908,7 +941,11 @@ public class MongoQueryProvider extends QueryProvider {
} else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) {
whereValue = "'%" + f.getValue() + "%'";
} else {
whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, f.getValue());
if(y.getDeType() == DeTypeConstants.DE_STRING){
whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, f.getValue());
}else {
whereValue = f.getValue();
}
}
list.add(SQLObj.builder()
.whereField(fieldAlias)

View File

@ -1,4 +1,4 @@
querySql(limitFiled, groups, aggregators, filters, orders, table)
querySql(limitFiled, groups, aggregators, filters, orders, table, notUseAs)
::=<<
SELECT
<if(limitFiled)>
@ -7,11 +7,17 @@ SELECT
<if(!groups && !aggregators)>
*
<endif>
<if(groups)>
<if(groups && notUseAs)>
<groups:{group|<if(group)><group.fieldName> <endif>}; separator=",\n">
<endif>
<if(groups && !notUseAs)>
<groups:{group|<if(group)><group.fieldName> AS <group.fieldAlias><endif>}; separator=",\n">
<endif>
<if(groups && aggregators)>,<endif>
<if(aggregators)>
<if(aggregators && notUseAs)>
<aggregators:{agg|<if(agg)><agg.fieldName> <endif>}; separator=",\n">
<endif>
<if(aggregators && !notUseAs)>
<aggregators:{agg|<if(agg)><agg.fieldName> AS <agg.fieldAlias><endif>}; separator=",\n">
<endif>
FROM
@ -31,7 +37,7 @@ ORDER BY
>>
previewSql(limitFiled, groups, aggregators, filters, orders, table, isGroup)
previewSql(limitFiled, groups, aggregators, filters, orders, table, isGroup, notUseAs)
::=<<
SELECT
<if(limitFiled)>
@ -40,11 +46,17 @@ SELECT
<if(!groups && !aggregators)>
*
<endif>
<if(groups)>
<if(groups && notUseAs)>
<groups:{group|<if(group)><group.fieldName> <endif>}; separator=",\n">
<endif>
<if(groups && !notUseAs)>
<groups:{group|<if(group)><group.fieldName> AS <group.fieldAlias><endif>}; separator=",\n">
<endif>
<if(groups && aggregators)>,<endif>
<if(aggregators)>
<if(aggregators && notUseAs)>
<aggregators:{agg|<if(agg)><agg.fieldName> <endif>}; separator=",\n">
<endif>
<if(aggregators && !notUseAs)>
<aggregators:{agg|<if(agg)><agg.fieldName> AS <agg.fieldAlias><endif>}; separator=",\n">
<endif>
FROM