[improvement][project] global refactor , code format , support llm , support fuzzy detect ,support query filter and so on.

This commit is contained in:
lexluo
2023-07-08 15:00:03 +08:00
parent 5ffd617431
commit 404163f391
329 changed files with 21050 additions and 5036 deletions

View File

@@ -40,6 +40,7 @@ public class Constants {
public static final String DAY = "DAY";
public static final String DAY_FORMAT = "yyyy-MM-dd";
public static final String MONTH_FORMAT = "yyyy-MM";
public static final String DAY_FORMAT_INT = "YYYYMMDD";
public static final String MONTH = "MONTH";
public static final String WEEK = "WEEK";

View File

@@ -1,7 +1,7 @@
package com.tencent.supersonic.common.nlp;
import com.google.common.base.Objects;
import java.io.Serializable;
import java.util.Objects;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
@@ -14,8 +14,18 @@ public class ItemDO implements Serializable {
private Integer domain;
private Integer itemId;
private String name;
private String bizName;
private Long useCnt = 0L;
public ItemDO() {
}
public ItemDO(Integer domain, Integer itemId, String name, String bizName) {
this.domain = domain;
this.itemId = itemId;
this.name = name;
this.bizName = bizName;
}
@Override
public boolean equals(Object o) {
@@ -26,7 +36,14 @@ public class ItemDO implements Serializable {
return false;
}
ItemDO itemDO = (ItemDO) o;
return Objects.equals(domain, itemDO.domain) && Objects.equals(itemId, itemDO.itemId)
&& Objects.equals(name, itemDO.name);
return Objects.equal(domain, itemDO.domain) && Objects.equal(itemId,
itemDO.itemId) && Objects.equal(name, itemDO.name)
&& Objects.equal(bizName, itemDO.bizName) && Objects.equal(
useCnt, itemDO.useCnt);
}
@Override
public int hashCode() {
return Objects.hashCode(domain, itemId, name, bizName, useCnt);
}
}

View File

@@ -0,0 +1,160 @@
package com.tencent.supersonic.common.util.calcite;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.calcite.sql.SqlBasicCall;
import org.apache.calcite.sql.SqlIdentifier;
import org.apache.calcite.sql.SqlKind;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.SqlNodeList;
import org.apache.calcite.sql.SqlOrderBy;
import org.apache.calcite.sql.SqlSelect;
import org.apache.calcite.sql.parser.SqlParseException;
import org.apache.calcite.sql.parser.SqlParser;
/**
* sql parse utils
*/
public class SqlParseUtils {
/**
* get sql parseInfo
*
* @param sql
* @return
*/
public static SqlParserInfo getSqlParseInfo(String sql) {
try {
SqlParser parser = SqlParser.create(sql);
SqlNode sqlNode = parser.parseQuery();
SqlParserInfo sqlParserInfo = new SqlParserInfo();
handlerSQL(sqlNode, sqlParserInfo);
List<String> collect = sqlParserInfo.getAllFields().stream().distinct().collect(Collectors.toList());
sqlParserInfo.setAllFields(collect);
return sqlParserInfo;
} catch (SqlParseException e) {
throw new RuntimeException("getSqlParseInfo", e);
}
}
/**
* hanlder sql
*
* @param sqlNode
* @param sqlParserInfo
*/
public static void handlerSQL(SqlNode sqlNode, SqlParserInfo sqlParserInfo) {
SqlKind kind = sqlNode.getKind();
switch (kind) {
case SELECT:
handlerSelect(sqlNode, sqlParserInfo);
break;
case ORDER_BY:
handlerOrderBy(sqlNode, sqlParserInfo);
break;
}
}
/**
* hanlder order by
*
* @param node
* @param sqlParserInfo
*/
private static void handlerOrderBy(SqlNode node, SqlParserInfo sqlParserInfo) {
SqlOrderBy sqlOrderBy = (SqlOrderBy) node;
SqlNode query = sqlOrderBy.query;
handlerSQL(query, sqlParserInfo);
SqlNodeList orderList = sqlOrderBy.orderList;
handlerField(orderList, sqlParserInfo);
}
/**
* hanlder select
*
* @param select
* @param sqlParserInfo
*/
private static void handlerSelect(SqlNode select, SqlParserInfo sqlParserInfo) {
SqlSelect sqlSelect = (SqlSelect) select;
SqlNodeList selectList = sqlSelect.getSelectList();
selectList.getList().forEach(list -> {
handlerField(list, sqlParserInfo);
});
String tableName = handlerFrom(sqlSelect.getFrom());
sqlParserInfo.setTableName(tableName);
if (sqlSelect.hasWhere()) {
handlerField(sqlSelect.getWhere(), sqlParserInfo);
}
if (sqlSelect.hasOrderBy()) {
handlerField(sqlSelect.getOrderList(), sqlParserInfo);
}
SqlNodeList group = sqlSelect.getGroup();
if (group != null) {
group.forEach(groupField -> {
handlerField(groupField, sqlParserInfo);
});
}
}
/**
* hander from
*
* @param from
* @return
*/
private static String handlerFrom(SqlNode from) {
SqlKind kind = from.getKind();
switch (kind) {
case IDENTIFIER:
SqlIdentifier sqlIdentifier = (SqlIdentifier) from;
return sqlIdentifier.getSimple();
case AS:
SqlBasicCall sqlBasicCall = (SqlBasicCall) from;
SqlNode sqlNode = sqlBasicCall.getOperandList().get(0);
SqlSelect sqlSelect = (SqlSelect) sqlNode;
return handlerFrom(sqlSelect.getFrom());
}
return "";
}
/**
* handler field
*
* @param field
* @param sqlParserInfo
*/
private static void handlerField(SqlNode field, SqlParserInfo sqlParserInfo) {
SqlKind kind = field.getKind();
switch (kind) {
case AS:
List<SqlNode> operandList1 = ((SqlBasicCall) field).getOperandList();
SqlNode left_as = operandList1.get(0);
handlerField(left_as, sqlParserInfo);
break;
case IDENTIFIER:
SqlIdentifier sqlIdentifier = (SqlIdentifier) field;
sqlParserInfo.getAllFields().add(sqlIdentifier.getSimple());
break;
default:
if (field instanceof SqlBasicCall) {
List<SqlNode> operandList2 = ((SqlBasicCall) field).getOperandList();
for (int i = 0; i < operandList2.size(); i++) {
handlerField(operandList2.get(i), sqlParserInfo);
}
}
if (field instanceof SqlNodeList) {
((SqlNodeList) field).getList().forEach(node -> {
handlerField(node, sqlParserInfo);
});
}
break;
}
}
}

View File

@@ -0,0 +1,17 @@
package com.tencent.supersonic.common.util.calcite;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import lombok.Data;
import lombok.ToString;
@Data
@ToString
public class SqlParserInfo implements Serializable {
private String tableName;
private List<String> allFields = new ArrayList<>();
}

View File

@@ -4,6 +4,9 @@ package com.tencent.supersonic.common.util.context;
import lombok.Builder;
import lombok.Data;
import lombok.ToString;
import java.util.Map;
import java.util.Map;
@Builder
@ToString
@@ -16,4 +19,6 @@ public class ThreadContext {
private String token;
private Map<String, String> extendInfo;
}