forked from github/dataease
fix: mongo sql 拼接问题
This commit is contained in:
parent
0e52dd0d73
commit
927bdbdebf
@ -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();
|
||||
|
@ -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";
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user