提交 927bdbde authored 作者: taojinlong's avatar taojinlong

fix: mongo sql 拼接问题

上级 0e52dd0d
...@@ -137,6 +137,10 @@ public class JdbcProvider extends DatasourceProvider { ...@@ -137,6 +137,10 @@ public class JdbcProvider extends DatasourceProvider {
@Override @Override
public List<TableFiled> getTableFileds(DatasourceRequest datasourceRequest) throws Exception { 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<>(); List<TableFiled> list = new LinkedList<>();
try (Connection connection = getConnectionFromPool(datasourceRequest)) { try (Connection connection = getConnectionFromPool(datasourceRequest)) {
DatabaseMetaData databaseMetaData = connection.getMetaData(); DatabaseMetaData databaseMetaData = connection.getMetaData();
......
...@@ -31,11 +31,11 @@ public class SQLConstants { ...@@ -31,11 +31,11 @@ public class SQLConstants {
*/ */
public static final String SQL_TEMPLATE = "sql/sqlTemplate.stg"; public static final String SQL_TEMPLATE = "sql/sqlTemplate.stg";
public static final String TABLE_ALIAS_PREFIX = "T_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_X_PREFIX = "f_ax_%s";
public static final String FIELD_ALIAS_Y_PREFIX = "F_AY_%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 GROUP_ALIAS_PREFIX = "g_a_%s";
public static final String ORDER_ALIAS_X_PREFIX = "O_AX_%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 ORDER_ALIAS_Y_PREFIX = "o_ay_%s";
public static final String WHERE_ALIAS_PREFIX = "W_A_%s"; public static final String WHERE_ALIAS_PREFIX = "w_a_%s";
} }
...@@ -114,7 +114,10 @@ public class MongoQueryProvider extends QueryProvider { ...@@ -114,7 +114,10 @@ public class MongoQueryProvider extends QueryProvider {
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
ST st_sql = stg.getInstanceOf("previewSql"); ST st_sql = stg.getInstanceOf("previewSql");
st_sql.add("isGroup", isGroup); 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); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter); String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
List<String> wheres = new ArrayList<>(); List<String> wheres = new ArrayList<>();
...@@ -233,8 +236,14 @@ public class MongoQueryProvider extends QueryProvider { ...@@ -233,8 +236,14 @@ public class MongoQueryProvider extends QueryProvider {
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
ST st_sql = stg.getInstanceOf("querySql"); ST st_sql = stg.getInstanceOf("querySql");
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); if (CollectionUtils.isNotEmpty(xFields)) {
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields); 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 (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
String sql = st_sql.render(); String sql = st_sql.render();
...@@ -302,7 +311,10 @@ public class MongoQueryProvider extends QueryProvider { ...@@ -302,7 +311,10 @@ public class MongoQueryProvider extends QueryProvider {
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
ST st_sql = stg.getInstanceOf("previewSql"); ST st_sql = stg.getInstanceOf("previewSql");
st_sql.add("isGroup", false); 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 (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
String sql = st_sql.render(); String sql = st_sql.render();
...@@ -417,8 +429,14 @@ public class MongoQueryProvider extends QueryProvider { ...@@ -417,8 +429,14 @@ public class MongoQueryProvider extends QueryProvider {
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
ST st_sql = stg.getInstanceOf("querySql"); ST st_sql = stg.getInstanceOf("querySql");
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); if (CollectionUtils.isNotEmpty(xFields)) {
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields); 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 (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
String sql = st_sql.render(); String sql = st_sql.render();
...@@ -527,8 +545,14 @@ public class MongoQueryProvider extends QueryProvider { ...@@ -527,8 +545,14 @@ public class MongoQueryProvider extends QueryProvider {
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
ST st_sql = stg.getInstanceOf("querySql"); ST st_sql = stg.getInstanceOf("querySql");
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); if (CollectionUtils.isNotEmpty(xFields)) {
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields); 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 (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
String sql = st_sql.render(); String sql = st_sql.render();
...@@ -610,7 +634,10 @@ public class MongoQueryProvider extends QueryProvider { ...@@ -610,7 +634,10 @@ public class MongoQueryProvider extends QueryProvider {
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
ST st_sql = stg.getInstanceOf("querySql"); 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 (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
String sql = st_sql.render(); String sql = st_sql.render();
...@@ -735,7 +762,7 @@ public class MongoQueryProvider extends QueryProvider { ...@@ -735,7 +762,7 @@ public class MongoQueryProvider extends QueryProvider {
for (ChartCustomFilterItemDTO filterItemDTO : filter) { for (ChartCustomFilterItemDTO filterItemDTO : filter) {
String value = filterItemDTO.getValue(); String value = filterItemDTO.getValue();
String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm());
String whereValue = ""; String whereValue = value;
if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) {
whereValue = ""; whereValue = "";
...@@ -750,8 +777,10 @@ public class MongoQueryProvider extends QueryProvider { ...@@ -750,8 +777,10 @@ public class MongoQueryProvider extends QueryProvider {
} else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) {
whereValue = "'%" + value + "%'"; whereValue = "'%" + value + "%'";
} else { } else {
if(field.getDeType() == DeTypeConstants.DE_STRING){
whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, value); whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, value);
} }
}
list.add(SQLObj.builder() list.add(SQLObj.builder()
.whereField(whereName) .whereField(whereName)
.whereTermAndValue(whereTerm + whereValue) .whereTermAndValue(whereTerm + whereValue)
...@@ -809,7 +838,11 @@ public class MongoQueryProvider extends QueryProvider { ...@@ -809,7 +838,11 @@ public class MongoQueryProvider extends QueryProvider {
whereValue = String.format(MongoConstants.WHERE_BETWEEN, value.get(0), value.get(1)); whereValue = String.format(MongoConstants.WHERE_BETWEEN, value.get(0), value.get(1));
} }
} else { } else {
if(field.getDeType() == DeTypeConstants.DE_STRING){
whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, value.get(0)); whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, value.get(0));
}else {
whereValue = value.get(0);
}
} }
list.add(SQLObj.builder() list.add(SQLObj.builder()
.whereField(whereName) .whereField(whereName)
...@@ -908,7 +941,11 @@ public class MongoQueryProvider extends QueryProvider { ...@@ -908,7 +941,11 @@ public class MongoQueryProvider extends QueryProvider {
} else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) { } else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) {
whereValue = "'%" + f.getValue() + "%'"; whereValue = "'%" + f.getValue() + "%'";
} else { } else {
if(y.getDeType() == DeTypeConstants.DE_STRING){
whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, f.getValue()); whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, f.getValue());
}else {
whereValue = f.getValue();
}
} }
list.add(SQLObj.builder() list.add(SQLObj.builder()
.whereField(fieldAlias) .whereField(fieldAlias)
......
querySql(limitFiled, groups, aggregators, filters, orders, table) querySql(limitFiled, groups, aggregators, filters, orders, table, notUseAs)
::=<< ::=<<
SELECT SELECT
<if(limitFiled)> <if(limitFiled)>
...@@ -7,11 +7,17 @@ SELECT ...@@ -7,11 +7,17 @@ SELECT
<if(!groups && !aggregators)> <if(!groups && !aggregators)>
* *
<endif> <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"> <groups:{group|<if(group)><group.fieldName> AS <group.fieldAlias><endif>}; separator=",\n">
<endif> <endif>
<if(groups && aggregators)>,<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"> <aggregators:{agg|<if(agg)><agg.fieldName> AS <agg.fieldAlias><endif>}; separator=",\n">
<endif> <endif>
FROM FROM
...@@ -31,7 +37,7 @@ ORDER BY ...@@ -31,7 +37,7 @@ ORDER BY
>> >>
previewSql(limitFiled, groups, aggregators, filters, orders, table, isGroup) previewSql(limitFiled, groups, aggregators, filters, orders, table, isGroup, notUseAs)
::=<< ::=<<
SELECT SELECT
<if(limitFiled)> <if(limitFiled)>
...@@ -40,11 +46,17 @@ SELECT ...@@ -40,11 +46,17 @@ SELECT
<if(!groups && !aggregators)> <if(!groups && !aggregators)>
* *
<endif> <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"> <groups:{group|<if(group)><group.fieldName> AS <group.fieldAlias><endif>}; separator=",\n">
<endif> <endif>
<if(groups && aggregators)>,<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"> <aggregators:{agg|<if(agg)><agg.fieldName> AS <agg.fieldAlias><endif>}; separator=",\n">
<endif> <endif>
FROM FROM
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论