(improvement)(Headless) corrector supports subselect sql (#1006)

* [improvement] corrector support subselect sql

---------

Co-authored-by: zuopengge
This commit is contained in:
mainmain
2024-05-17 10:01:49 +08:00
committed by GitHub
parent 2411cb3fdc
commit 7949efea75
6 changed files with 32 additions and 5 deletions

View File

@@ -206,6 +206,12 @@ public class SqlReplaceHelper {
replaceAsName(fieldNameMap, selectItem);
}
if (plainSelect.getFromItem() instanceof ParenthesedSelect) {
ParenthesedSelect parenthesedSelect = (ParenthesedSelect) plainSelect.getFromItem();
PlainSelect subPlainSelect = parenthesedSelect.getPlainSelect();
replaceFieldsInPlainOneSelect(fieldNameMap, exactReplace, subPlainSelect);
}
//3. replace oder by fields
List<OrderByElement> orderByElements = plainSelect.getOrderByElements();
if (!CollectionUtils.isEmpty(orderByElements)) {

View File

@@ -122,19 +122,28 @@ public class SqlSelectHelper {
List<PlainSelect> plainSelectList = new ArrayList<>();
if (selectStatement instanceof PlainSelect) {
PlainSelect plainSelect = (PlainSelect) selectStatement;
plainSelectList.add(plainSelect);
getSubPlainSelect(plainSelect, plainSelectList);
} else if (selectStatement instanceof SetOperationList) {
SetOperationList setOperationList = (SetOperationList) selectStatement;
if (!CollectionUtils.isEmpty(setOperationList.getSelects())) {
setOperationList.getSelects().forEach(subSelectBody -> {
PlainSelect subPlainSelect = (PlainSelect) subSelectBody;
plainSelectList.add(subPlainSelect);
getSubPlainSelect(subPlainSelect, plainSelectList);
});
}
}
return plainSelectList;
}
public static void getSubPlainSelect(PlainSelect plainSelect, List<PlainSelect> plainSelectList) {
plainSelectList.add(plainSelect);
if (plainSelect.getFromItem() instanceof ParenthesedSelect) {
ParenthesedSelect parenthesedSelect = (ParenthesedSelect) plainSelect.getFromItem();
PlainSelect subPlainSelect = parenthesedSelect.getPlainSelect();
getSubPlainSelect(subPlainSelect, plainSelectList);
}
}
public static Select getSelect(String sql) {
Statement statement = null;
try {
@@ -275,6 +284,14 @@ public class SqlSelectHelper {
if (Objects.nonNull(where)) {
where.accept(new FieldAndValueAcquireVisitor(result));
}
if (plainSelect.getFromItem() instanceof ParenthesedSelect) {
ParenthesedSelect parenthesedSelect = (ParenthesedSelect) plainSelect.getFromItem();
PlainSelect subPlainSelect = parenthesedSelect.getPlainSelect();
Expression subWhere = subPlainSelect.getWhere();
if (Objects.nonNull(subWhere)) {
subWhere.accept(new FieldAndValueAcquireVisitor(result));
}
}
}
return new ArrayList<>(result);
}

View File

@@ -258,7 +258,7 @@ def build_dataSet(domain_id,model_id1,model_id2,model_id3,model_id4):
{"id":model_id3,"includesAll":False,"metrics":metric_list3,"dimensions":dimension_list3},
{"id":model_id4,"includesAll":False,"metrics":metric_list4,"dimensions":dimension_list4}
]},
"queryConfig":{"tagTypeDefaultConfig":{},"metricTypeDefaultConfig":{"timeDefaultConfig":{"unit":1,"period":"DAY","timeMode":"RECENT"}}},"admins":["admin"],"admin":"admin"}
"queryConfig":{"tagTypeDefaultConfig":{},"metricTypeDefaultConfig":{"timeDefaultConfig":{"unit":0,"period":"DAY","timeMode":"RECENT"}}},"admins":["admin"],"admin":"admin"}
url=get_url_pre()+"/api/semantic/dataSet"
authorization=get_authorization()
header = {}

View File

@@ -66,6 +66,7 @@ def get_pred_result():
pred_sql_list=[]
default_sql="select * from tablea "
time_cost=[]
time.sleep(60)
for i in range(0,len(questions)):
start_time = time.time()
pred_sql=get_pred_sql(questions[i],url,agent_id,chat_id,authorization,default_sql)
@@ -73,7 +74,7 @@ def get_pred_result():
cost='%.3f'%(end_time-start_time)
time_cost.append(cost)
pred_sql_list.append(pred_sql)
time.sleep(60)
time.sleep(3)
write_sql(pred_sql_path, pred_sql_list)
return [float(cost) for cost in time_cost]

View File

@@ -58,6 +58,9 @@ public class S2SqlDateHelper {
DatePeriodEnum datePeriodEnum = DatePeriodEnum.get(period);
String startDate = DateUtils.getBeforeDate(unit, datePeriodEnum);
String endDate = DateUtils.getBeforeDate(1, datePeriodEnum);
if (unit == 0) {
endDate = startDate;
}
if (TimeMode.LAST.equals(timeMode)) {
endDate = startDate;
}

View File

@@ -288,4 +288,4 @@ public class S2LangChain4jAutoConfiguration {
.build();
}
}
}