diff --git a/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/ParseInfoFormatProcessor.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/ParseInfoFormatProcessor.java index dbc013ebd..1fb11ce45 100644 --- a/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/ParseInfoFormatProcessor.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/ParseInfoFormatProcessor.java @@ -96,7 +96,7 @@ public class ParseInfoFormatProcessor implements ParseResultProcessor { // extract date filter from S2SQL try { - if (parseInfo.getDateInfo() == null && !CollectionUtils.isEmpty(expressions)) { + if (!CollectionUtils.isEmpty(expressions)) { parseInfo.setDateInfo(extractDateFilter(expressions, dsSchema)); } } catch (Exception e) { diff --git a/common/src/main/java/com/tencent/supersonic/common/jsqlparser/SqlSelectHelper.java b/common/src/main/java/com/tencent/supersonic/common/jsqlparser/SqlSelectHelper.java index a6bb93055..d7b4085bd 100644 --- a/common/src/main/java/com/tencent/supersonic/common/jsqlparser/SqlSelectHelper.java +++ b/common/src/main/java/com/tencent/supersonic/common/jsqlparser/SqlSelectHelper.java @@ -144,6 +144,15 @@ public class SqlSelectHelper { return result; } + public static Set getAliasFields(String sql) { + List plainSelects = getPlainSelects(getPlainSelect(sql)); + Set aliasFields = new HashSet<>(); + plainSelects.forEach(select -> { + aliasFields.addAll(getAliasFields(select)); + }); + return aliasFields; + } + public static List getPlainSelect(Select selectStatement) { if (selectStatement == null) { return null; diff --git a/common/src/main/java/com/tencent/supersonic/common/pojo/DateConf.java b/common/src/main/java/com/tencent/supersonic/common/pojo/DateConf.java index 790f2ec72..ad26bcecd 100644 --- a/common/src/main/java/com/tencent/supersonic/common/pojo/DateConf.java +++ b/common/src/main/java/com/tencent/supersonic/common/pojo/DateConf.java @@ -59,9 +59,15 @@ public class DateConf { return false; } DateConf dateConf = (DateConf) o; - return dateMode == dateConf.dateMode && Objects.equals(startDate, dateConf.startDate) - && Objects.equals(endDate, dateConf.endDate) && Objects.equals(unit, dateConf.unit) - && Objects.equals(period, dateConf.period); + if (dateMode != dateConf.dateMode) { + return false; + } + if (dateMode == DateMode.RECENT) { + return Objects.equals(unit, dateConf.unit) && Objects.equals(period, dateConf.period); + } else { + return Objects.equals(startDate, dateConf.startDate) + && Objects.equals(endDate, dateConf.endDate); + } } @Override diff --git a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/PromptHelper.java b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/PromptHelper.java index 09ca0c58f..2677458ac 100644 --- a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/PromptHelper.java +++ b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/PromptHelper.java @@ -114,7 +114,7 @@ public class PromptHelper { dimensionStr.append(dimension.getName()); if (!CollectionUtils.isEmpty(dimension.getAlias())) { StringBuilder alias = new StringBuilder(); - dimension.getAlias().stream().forEach(a -> alias.append(a + ",")); + dimension.getAlias().stream().forEach(a -> alias.append(a + ";")); dimensionStr.append(" ALIAS '" + alias + "'"); } if (StringUtils.isNotEmpty(dimension.getTimeFormat())) { diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/JdbcExecutor.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/JdbcExecutor.java index 947fa58ab..f76ab1df8 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/JdbcExecutor.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/JdbcExecutor.java @@ -45,7 +45,7 @@ public class JdbcExecutor implements QueryExecutor { sqlUtil.queryInternal(queryStatement.getSql(), queryResultWithColumns); queryResultWithColumns.setSql(sql); } catch (Exception e) { - log.error("queryInternal error [{}]", StringUtils.normalizeSpace(e.toString())); + log.error("queryInternal with error [{}]", StringUtils.normalizeSpace(e.getMessage())); queryResultWithColumns.setErrorMsg(e.getMessage()); } return queryResultWithColumns; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java index 76df6f42e..e4c523c23 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java @@ -45,6 +45,8 @@ public class SqlQueryParser implements QueryParser { // build ontologyQuery SqlQuery sqlQuery = queryStatement.getSqlQuery(); List queryFields = SqlSelectHelper.getAllSelectFields(sqlQuery.getSql()); + Set queryAliases = SqlSelectHelper.getAliasFields(sqlQuery.getSql()); + queryFields.removeAll(queryAliases); Ontology ontology = queryStatement.getOntology(); OntologyQuery ontologyQuery = buildOntologyQuery(ontology, queryFields); // check if there are fields not matched with any metric or dimension diff --git a/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2BaseDemo.java b/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2BaseDemo.java index d2fa45153..6a568c235 100644 --- a/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2BaseDemo.java +++ b/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2BaseDemo.java @@ -98,6 +98,9 @@ public abstract class S2BaseDemo implements CommandLineRunner { @Value("${s2.demo.names:S2VisitsDemo}") protected List demoList; + @Value("${spring.datasource.driver-class-name}") + protected String driverClassName; + public void run(String... args) { demoDatabase = addDatabaseIfNotExist(); demoChatModel = addChatModelIfNotExist(); @@ -122,10 +125,10 @@ public abstract class S2BaseDemo implements CommandLineRunner { databaseReq.setName("S2数据库DEMO"); databaseReq.setDescription("样例数据库实例仅用于体验"); databaseReq.setType(DataType.H2.getFeature()); - String profile = System.getProperty("spring.profiles.active"); - if ("postgres".equalsIgnoreCase(profile)) { + if ("org.postgresql.Driver".equals(driverClassName)) { databaseReq.setType(DataType.POSTGRESQL.getFeature()); - } else if ("mysql".equalsIgnoreCase(profile)) { + } else if ("com.mysql.cj.jdbc.Driver".equals(driverClassName) + || "com.mysql.jdbc.Driver".equals(driverClassName)) { databaseReq.setType(DataType.MYSQL.getFeature()); } databaseReq.setUrl(url); diff --git a/launchers/standalone/src/main/resources/application-mysql.yaml b/launchers/standalone/src/main/resources/application-mysql.yaml index 787841ea4..8636f9167 100644 --- a/launchers/standalone/src/main/resources/application-mysql.yaml +++ b/launchers/standalone/src/main/resources/application-mysql.yaml @@ -1,6 +1,6 @@ spring: datasource: - driver-class-name: com.mysql.cj.jdbc.Driver + driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true username: root password: diff --git a/launchers/standalone/src/main/resources/application-postgres.yaml b/launchers/standalone/src/main/resources/application-postgres.yaml index a9f4f82f3..627374dfc 100644 --- a/launchers/standalone/src/main/resources/application-postgres.yaml +++ b/launchers/standalone/src/main/resources/application-postgres.yaml @@ -6,21 +6,20 @@ spring: password: postgres sql: init: - enabled: false - mode: always + mode: never username: postgres password: postgres schema-locations: classpath:db/schema-postgres.sql,classpath:db/schema-postgres-demo.sql data-locations: classpath:db/data-postgres.sql,classpath:db/data-postgres-demo.sql -#s2: -# embedding: -# store: -# provider: PGVECTOR -# base: -# url: 127.0.0.1 -# port: 5432 -# databaseName: postgres -# user: postgres -# password: postgres -# dimension: 512 \ No newline at end of file +s2: + embedding: + store: + provider: PGVECTOR + base: + url: 127.0.0.1 + port: 5432 + databaseName: postgres + user: postgres + password: postgres + dimension: 512 \ No newline at end of file diff --git a/launchers/standalone/src/main/resources/db/schema-postgres-demo.sql b/launchers/standalone/src/main/resources/db/schema-postgres-demo.sql index 8932fa924..d96eef076 100644 --- a/launchers/standalone/src/main/resources/db/schema-postgres-demo.sql +++ b/launchers/standalone/src/main/resources/db/schema-postgres-demo.sql @@ -5,13 +5,13 @@ CREATE TABLE IF NOT EXISTS s2_user_department ( ); CREATE TABLE IF NOT EXISTS s2_pv_uv_statis ( - imp_date varchar(200) NOT NULL, + imp_date DATE NOT NULL, user_name varchar(200) NOT NULL, page varchar(200) NOT NULL ); CREATE TABLE IF NOT EXISTS s2_stay_time_statis ( - imp_date varchar(200) NOT NULL, + imp_date DATE NOT NULL, user_name varchar(200) NOT NULL, stay_hours double precision NOT NULL, page varchar(200) NOT NULL