diff --git a/auth/api/src/main/java/com/tencent/supersonic/auth/api/authentication/pojo/UserWithPassword.java b/auth/api/src/main/java/com/tencent/supersonic/auth/api/authentication/pojo/UserWithPassword.java index fc5dfbd05..4da31dac0 100644 --- a/auth/api/src/main/java/com/tencent/supersonic/auth/api/authentication/pojo/UserWithPassword.java +++ b/auth/api/src/main/java/com/tencent/supersonic/auth/api/authentication/pojo/UserWithPassword.java @@ -24,7 +24,7 @@ public class UserWithPassword extends User { public UserWithPassword(Long id, String name, String displayName, String email, String password, Integer isAdmin) { - super(id, name, displayName, email, isAdmin); + super(id, name, displayName, email, isAdmin, null); this.password = password; } diff --git a/auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/adaptor/DefaultUserAdaptor.java b/auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/adaptor/DefaultUserAdaptor.java index fb54432a5..9e1064b50 100644 --- a/auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/adaptor/DefaultUserAdaptor.java +++ b/auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/adaptor/DefaultUserAdaptor.java @@ -18,6 +18,7 @@ import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; +import java.sql.Timestamp; import java.util.List; import java.util.Optional; import java.util.Set; @@ -102,7 +103,9 @@ public class DefaultUserAdaptor implements UserAdaptor { TokenService tokenService = ContextUtils.getBean(TokenService.class); try { UserWithPassword user = getUserWithPassword(userReq); - return tokenService.generateToken(UserWithPassword.convert(user), appKey); + String token = tokenService.generateToken(UserWithPassword.convert(user), appKey); + updateLastLogin(userReq.getName()); + return token; } catch (Exception e) { log.error("", e); throw new RuntimeException("password encrypt error, please try again"); @@ -267,4 +270,11 @@ public class DefaultUserAdaptor implements UserAdaptor { userToken.setExpireDate(userTokenDO.getExpireDateTime()); return userToken; } + + private void updateLastLogin(String userName) { + UserRepository userRepository = ContextUtils.getBean(UserRepository.class); + UserDO userDO = userRepository.getUser(userName); + userDO.setLastLogin(new Timestamp(System.currentTimeMillis())); + userRepository.updateUser(userDO); + } } diff --git a/auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/persistence/dataobject/UserDO.java b/auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/persistence/dataobject/UserDO.java index 341119b59..bc5d684ad 100644 --- a/auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/persistence/dataobject/UserDO.java +++ b/auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/persistence/dataobject/UserDO.java @@ -3,7 +3,11 @@ package com.tencent.supersonic.auth.authentication.persistence.dataobject; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import java.sql.Timestamp; + +@Data @TableName("s2_user") public class UserDO { @@ -27,71 +31,25 @@ public class UserDO { /** */ private Integer isAdmin; - /** @return id */ - public Long getId() { - return id; - } - - /** @param id */ - public void setId(Long id) { - this.id = id; - } - - /** @return name */ - public String getName() { - return name; - } + private Timestamp lastLogin; /** @param name */ public void setName(String name) { this.name = name == null ? null : name.trim(); } - /** @return password */ - public String getPassword() { - return password; - } - /** @param password */ public void setPassword(String password) { this.password = password == null ? null : password.trim(); } - public String getSalt() { - return salt; - } - public void setSalt(String salt) { this.salt = salt == null ? null : salt.trim(); } - /** @return display_name */ - public String getDisplayName() { - return displayName; - } - - /** @param displayName */ - public void setDisplayName(String displayName) { - this.displayName = displayName == null ? null : displayName.trim(); - } - - /** @return email */ - public String getEmail() { - return email; - } - /** @param email */ public void setEmail(String email) { this.email = email == null ? null : email.trim(); } - /** @return is_admin */ - public Integer getIsAdmin() { - return isAdmin; - } - - /** @param isAdmin */ - public void setIsAdmin(Integer isAdmin) { - this.isAdmin = isAdmin; - } } diff --git a/auth/authentication/src/main/resources/mapper/UserDOMapper.xml b/auth/authentication/src/main/resources/mapper/UserDOMapper.xml index 4bb7ada14..64f9e7040 100644 --- a/auth/authentication/src/main/resources/mapper/UserDOMapper.xml +++ b/auth/authentication/src/main/resources/mapper/UserDOMapper.xml @@ -136,6 +136,9 @@ is_admin = #{isAdmin,jdbcType=INTEGER}, + + last_login = #{lastLogin,jdbcType=TIMESTAMP}, + where id = #{id,jdbcType=BIGINT} diff --git a/common/src/main/java/com/tencent/supersonic/common/pojo/User.java b/common/src/main/java/com/tencent/supersonic/common/pojo/User.java index b85194984..2d947033d 100644 --- a/common/src/main/java/com/tencent/supersonic/common/pojo/User.java +++ b/common/src/main/java/com/tencent/supersonic/common/pojo/User.java @@ -6,6 +6,7 @@ import lombok.NoArgsConstructor; import org.apache.commons.lang3.StringUtils; import java.io.Serializable; +import java.sql.Timestamp; @Data @NoArgsConstructor @@ -22,26 +23,28 @@ public class User implements Serializable { private Integer isAdmin; + private Timestamp lastLogin; + public static User get(Long id, String name, String displayName, String email, Integer isAdmin) { - return new User(id, name, displayName, email, isAdmin); + return new User(id, name, displayName, email, isAdmin, null); } public static User get(Long id, String name) { - return new User(id, name, name, name, 0); + return new User(id, name, name, name, 0, null); } public static User getDefaultUser() { - return new User(1L, "admin", "admin", "admin@email", 1); + return new User(1L, "admin", "admin", "admin@email", 1, null); } public static User getVisitUser() { - return new User(1L, "visit", "visit", "visit@email", 0); + return new User(1L, "visit", "visit", "visit@email", 0, null); } public static User getAppUser(int appId) { String name = String.format("app_%s", appId); - return new User(1L, name, name, "", 1); + return new User(1L, name, name, "", 1, null); } public String getDisplayName() { diff --git a/common/src/main/java/com/tencent/supersonic/common/service/impl/EmbeddingServiceImpl.java b/common/src/main/java/com/tencent/supersonic/common/service/impl/EmbeddingServiceImpl.java index c486a59c4..9bd6563aa 100644 --- a/common/src/main/java/com/tencent/supersonic/common/service/impl/EmbeddingServiceImpl.java +++ b/common/src/main/java/com/tencent/supersonic/common/service/impl/EmbeddingServiceImpl.java @@ -49,7 +49,8 @@ public class EmbeddingServiceImpl implements EmbeddingService { try { EmbeddingModel embeddingModel = ModelProvider.getEmbeddingModel(); Embedding embedding = embeddingModel.embed(question).content(); - boolean existSegment = existSegment(embeddingStore, query, embedding); + boolean existSegment = + existSegment(collectionName, embeddingStore, query, embedding); if (existSegment) { continue; } @@ -62,14 +63,14 @@ public class EmbeddingServiceImpl implements EmbeddingService { } } - private boolean existSegment(EmbeddingStore embeddingStore, TextSegment query, - Embedding embedding) { + private boolean existSegment(String collectionName, EmbeddingStore embeddingStore, + TextSegment query, Embedding embedding) { String queryId = TextSegmentConvert.getQueryId(query); if (queryId == null) { return false; } // Check cache first - Boolean cachedResult = cache.getIfPresent(queryId); + Boolean cachedResult = cache.getIfPresent(collectionName + queryId); if (cachedResult != null) { return cachedResult; } @@ -82,7 +83,7 @@ public class EmbeddingServiceImpl implements EmbeddingService { EmbeddingSearchResult result = embeddingStore.search(request); List> relevant = result.matches(); boolean exists = CollectionUtils.isNotEmpty(relevant); - cache.put(queryId, exists); + cache.put(collectionName + queryId, exists); return exists; } diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 81e96e3a1..724c28ec2 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -11,8 +11,8 @@ services: POSTGRES_PASSWORD: supersonic_password ports: - "15432:5432" -# volumes: -# - postgres_data:/var/lib/postgresql/data + volumes: + - ./supersonic_pg/data:/var/lib/postgresql/data networks: - supersonic_network dns: @@ -65,7 +65,6 @@ services: # propagation: rprivate # create_host_path: true #volumes: -# postgres_data: # supersonic_data: networks: diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/QueryDataSetReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/QueryDataSetReq.java index f385c73fc..e9efbcf3e 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/QueryDataSetReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/QueryDataSetReq.java @@ -30,6 +30,7 @@ public class QueryDataSetReq { private List metricFilters = new ArrayList<>(); private DateConf dateInfo; private Long limit = 2000L; + private Long offset = 0L; private QueryType queryType = QueryType.DETAIL; private boolean innerLayerNative = false; } diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/QueryStructReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/QueryStructReq.java index 5a6c3816e..03b85f992 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/QueryStructReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/QueryStructReq.java @@ -3,11 +3,7 @@ package com.tencent.supersonic.headless.api.pojo.request; import com.google.common.collect.Lists; import com.tencent.supersonic.common.jsqlparser.SqlAddHelper; import com.tencent.supersonic.common.jsqlparser.SqlReplaceHelper; -import com.tencent.supersonic.common.pojo.Aggregator; -import com.tencent.supersonic.common.pojo.Constants; -import com.tencent.supersonic.common.pojo.DateConf; -import com.tencent.supersonic.common.pojo.Filter; -import com.tencent.supersonic.common.pojo.Order; +import com.tencent.supersonic.common.pojo.*; import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum; import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.common.util.ContextUtils; @@ -25,12 +21,7 @@ import net.sf.jsqlparser.expression.operators.relational.ExpressionList; import net.sf.jsqlparser.parser.CCJSqlParserUtil; import net.sf.jsqlparser.schema.Column; import net.sf.jsqlparser.schema.Table; -import net.sf.jsqlparser.statement.select.GroupByElement; -import net.sf.jsqlparser.statement.select.Limit; -import net.sf.jsqlparser.statement.select.OrderByElement; -import net.sf.jsqlparser.statement.select.ParenthesedSelect; -import net.sf.jsqlparser.statement.select.PlainSelect; -import net.sf.jsqlparser.statement.select.SelectItem; +import net.sf.jsqlparser.statement.select.*; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.util.CollectionUtils; @@ -52,6 +43,7 @@ public class QueryStructReq extends SemanticQueryReq { private List metricFilters = new ArrayList<>(); private DateConf dateInfo; private long limit = Constants.DEFAULT_DETAIL_LIMIT; + private long offset; private QueryType queryType = QueryType.DETAIL; private boolean convertToSql = true; @@ -170,12 +162,15 @@ public class QueryStructReq extends SemanticQueryReq { // 5. Set the limit clause plainSelect.setLimit(buildLimit(queryStructReq)); - // 6. Set having clause + // 6. Set the offset clause + plainSelect.setOffset(buildOffset(queryStructReq)); + + // 7. Set the having clause plainSelect.setHaving(buildHavingClause(queryStructReq)); select.setSelect(plainSelect); - // 6. Set where clause + // 8. Set the where clause return addWhereClauses(select.toString(), queryStructReq, isBizName); } @@ -262,6 +257,15 @@ public class QueryStructReq extends SemanticQueryReq { return limit; } + private Offset buildOffset(QueryStructReq queryStructReq) { + if (Objects.isNull(queryStructReq.getOffset())) { + return null; + } + Offset offset = new Offset(); + offset.setOffset(new LongValue(queryStructReq.getOffset())); + return offset; + } + private String addWhereClauses(String sql, QueryStructReq queryStructReq, boolean isBizName) throws JSQLParserException { SqlFilterUtils sqlFilterUtils = ContextUtils.getBean(SqlFilterUtils.class); diff --git a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/corrector/RuleSqlCorrector.java b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/corrector/RuleSqlCorrector.java index e090265b5..d7c9f058d 100644 --- a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/corrector/RuleSqlCorrector.java +++ b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/corrector/RuleSqlCorrector.java @@ -1,12 +1,16 @@ package com.tencent.supersonic.headless.chat.corrector; +import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo; import com.tencent.supersonic.headless.chat.ChatQueryContext; +import com.tencent.supersonic.headless.chat.parser.ParserConfig; import lombok.extern.slf4j.Slf4j; import java.util.ArrayList; import java.util.List; +import static com.tencent.supersonic.headless.chat.parser.ParserConfig.PARSER_RULE_CORRECTOR_ENABLE; + @Slf4j public class RuleSqlCorrector extends BaseSemanticCorrector { private List correctors; @@ -20,6 +24,11 @@ public class RuleSqlCorrector extends BaseSemanticCorrector { @Override public void doCorrect(ChatQueryContext chatQueryContext, SemanticParseInfo semanticParseInfo) { + ParserConfig parserConfig = ContextUtils.getBean(ParserConfig.class); + if (!Boolean.parseBoolean(parserConfig.getParameterValue(PARSER_RULE_CORRECTOR_ENABLE))) { + return; + } + for (BaseSemanticCorrector corrector : correctors) { corrector.correct(chatQueryContext, semanticParseInfo); } diff --git a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/knowledge/MapResult.java b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/knowledge/MapResult.java index a2583eb88..969a74eca 100644 --- a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/knowledge/MapResult.java +++ b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/knowledge/MapResult.java @@ -22,4 +22,9 @@ public abstract class MapResult implements Serializable { return this.getMapKey().equals(otherResult.getMapKey()) && this.similarity < otherResult.similarity; } + + public Boolean lessOrEqualSimilar(MapResult otherResult) { + return this.getMapKey().equals(otherResult.getMapKey()) + && this.similarity <= otherResult.similarity; + } } diff --git a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/knowledge/MetaEmbeddingService.java b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/knowledge/MetaEmbeddingService.java index e4f48597b..f8ee287c3 100644 --- a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/knowledge/MetaEmbeddingService.java +++ b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/knowledge/MetaEmbeddingService.java @@ -75,6 +75,8 @@ public class MetaEmbeddingService { return dataSetIds.stream().map(dataSetId -> { Retrieval newRetrieval = new Retrieval(); BeanUtils.copyProperties(retrieval, newRetrieval); + HashMap newMetadata = new HashMap<>(retrieval.getMetadata()); + newRetrieval.setMetadata(newMetadata); newRetrieval.getMetadata().putIfAbsent("dataSetId", dataSetId + Constants.UNDERLINE); return newRetrieval; diff --git a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/BaseMatchStrategy.java b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/BaseMatchStrategy.java index 57856ccd4..6c02674f5 100644 --- a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/BaseMatchStrategy.java +++ b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/BaseMatchStrategy.java @@ -56,7 +56,7 @@ public abstract class BaseMatchStrategy implements MatchStr for (T oneRoundResult : oneRoundResults) { if (existResults.contains(oneRoundResult)) { boolean isDeleted = existResults.removeIf(existResult -> { - boolean delete = existResult.lessSimilar(oneRoundResult); + boolean delete = existResult.lessOrEqualSimilar(oneRoundResult); if (delete) { log.debug("deleted existResult:{}", existResult); } diff --git a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/ParserConfig.java b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/ParserConfig.java index 527d04a51..ab8c7a0eb 100644 --- a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/ParserConfig.java +++ b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/ParserConfig.java @@ -17,6 +17,10 @@ public class ParserConfig extends ParameterConfig { "ONE_PASS_SELF_CONSISTENCY: 通过投票方式一步生成sql", "list", "语义解析配置", Lists.newArrayList("ONE_PASS_SELF_CONSISTENCY")); + public static final Parameter PARSER_RULE_CORRECTOR_ENABLE = + new Parameter("s2.parser.rule.corrector.enable", "false", "是否开启规则修正器", + "规则修正器灵活度有限,在大模型能力足够情况下,不必强制做规则修正", "bool", "语义解析配置"); + public static final Parameter PARSER_LINKING_VALUE_ENABLE = new Parameter("s2.parser.linking.value.enable", "true", "是否将Mapper探测识别到的维度值提供给大模型", "为了数据安全考虑, 这里可进行开关选择", "bool", "语义解析配置"); @@ -55,7 +59,8 @@ public class ParserConfig extends ParameterConfig { @Override public List getSysParameters() { - return Lists.newArrayList(PARSER_LINKING_VALUE_ENABLE, PARSER_FEW_SHOT_NUMBER, - PARSER_SELF_CONSISTENCY_NUMBER, PARSER_SHOW_COUNT, PARSER_FIELDS_COUNT_THRESHOLD); + return Lists.newArrayList(PARSER_LINKING_VALUE_ENABLE, PARSER_RULE_CORRECTOR_ENABLE, + PARSER_FEW_SHOT_NUMBER, PARSER_SELF_CONSISTENCY_NUMBER, PARSER_SHOW_COUNT, + PARSER_FIELDS_COUNT_THRESHOLD); } } diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/StructQuery.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/StructQuery.java index f6e9489ef..74b9ce019 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/StructQuery.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/StructQuery.java @@ -20,6 +20,7 @@ public class StructQuery { private List metricFilters = new ArrayList(); private DateConf dateInfo; private Long limit = 2000L; + private Long offset = 0L; private QueryType queryType; private List params = new ArrayList<>(); } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/aspect/DimValueAspect.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/aspect/DimValueAspect.java index 68aabbceb..75a91e969 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/aspect/DimValueAspect.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/aspect/DimValueAspect.java @@ -141,7 +141,7 @@ public class DimValueAspect { List values = JsonUtil.toList(fieldValue, String.class); List revisedValues = new ArrayList<>(); for (int i = 0; i < values.size(); i++) { - Boolean flag = new Boolean(false); + Boolean flag = false; for (DimValueMap dimValueMap : dimension.getDimValueMaps()) { if (!CollectionUtils.isEmpty(dimValueMap.getAlias()) && dimValueMap.getAlias().contains(values.get(i))) { diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DimensionServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DimensionServiceImpl.java index 3bf6a7692..0bd154ccb 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DimensionServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DimensionServiceImpl.java @@ -426,6 +426,9 @@ public class DimensionServiceImpl extends ServiceImpl valeAndMapInfo = dimValueMapList.stream() .collect(Collectors.toMap(DimValueMap::getValue, v -> v, (v1, v2) -> v2)); String value = dimValueMaps.getValue(); diff --git a/launchers/standalone/src/main/resources/config.update/sql-update-mysql.sql b/launchers/standalone/src/main/resources/config.update/sql-update-mysql.sql index 8c4b195bb..b7b6c1b9b 100644 --- a/launchers/standalone/src/main/resources/config.update/sql-update-mysql.sql +++ b/launchers/standalone/src/main/resources/config.update/sql-update-mysql.sql @@ -417,4 +417,7 @@ ALTER TABLE s2_model_rela alter column join_condition type text; --20250310 ALTER TABLE s2_chat_model add column is_open tinyint DEFAULT NULL COMMENT '是否公开'; -ALTER TABLE s2_database add column is_open tinyint DEFAULT NULL COMMENT '是否公开'; \ No newline at end of file +ALTER TABLE s2_database add column is_open tinyint DEFAULT NULL COMMENT '是否公开'; + +--20250321 +ALTER TABLE s2_user add column last_loin datetime DEFAULT NULL; \ No newline at end of file diff --git a/launchers/standalone/src/main/resources/db/schema-h2.sql b/launchers/standalone/src/main/resources/db/schema-h2.sql index d5fc98c5e..13928d300 100644 --- a/launchers/standalone/src/main/resources/db/schema-h2.sql +++ b/launchers/standalone/src/main/resources/db/schema-h2.sql @@ -129,6 +129,7 @@ create table IF NOT EXISTS s2_user salt varchar(256) NULL, email varchar(100) null, is_admin INT null, + last_login TIMESTAMP NULL, PRIMARY KEY (`id`) ); COMMENT ON TABLE s2_user IS 'user information table'; diff --git a/launchers/standalone/src/main/resources/db/schema-mysql.sql b/launchers/standalone/src/main/resources/db/schema-mysql.sql index 1e40d493f..62eae3ac6 100644 --- a/launchers/standalone/src/main/resources/db/schema-mysql.sql +++ b/launchers/standalone/src/main/resources/db/schema-mysql.sql @@ -1,85 +1,85 @@ CREATE TABLE IF NOT EXISTS `s2_agent` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, - `description` TEXT COLLATE utf8_unicode_ci DEFAULT NULL, - `examples` TEXT COLLATE utf8_unicode_ci DEFAULT NULL, + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `description` TEXT COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `examples` TEXT COLLATE utf8mb4_unicode_ci DEFAULT NULL, `status` tinyint DEFAULT NULL, - `model` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, - `tool_config` TEXT COLLATE utf8_unicode_ci DEFAULT NULL, - `llm_config` TEXT COLLATE utf8_unicode_ci DEFAULT NULL, - `chat_model_config` text COLLATE utf8_unicode_ci DEFAULT NULL, - `visual_config` TEXT COLLATE utf8_unicode_ci DEFAULT NULL, + `model` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `tool_config` TEXT COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `llm_config` TEXT COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `chat_model_config` text COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `visual_config` TEXT COLLATE utf8mb4_unicode_ci DEFAULT NULL, `enable_search` tinyint DEFAULT 1, `enable_feedback` tinyint DEFAULT 1, - `created_by` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_by` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_at` datetime DEFAULT NULL, - `updated_by` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `updated_by` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `updated_at` datetime DEFAULT NULL, - `admin` varchar(1000) DEFAULT NULL COMMENT '管理员', - `admin_org` varchar(1000) DEFAULT NULL COMMENT '管理员组织', - `is_open` tinyint DEFAULT NULL COMMENT '是否公开', - `viewer` varchar(1000) DEFAULT NULL COMMENT '可用用户', - `view_org` varchar(1000) DEFAULT NULL COMMENT '可用组织', + `admin` varchar(1000) DEFAULT NULL COMMENT '管理员', + `admin_org` varchar(1000) DEFAULT NULL COMMENT '管理员组织', + `is_open` tinyint DEFAULT NULL COMMENT '是否公开', + `viewer` varchar(1000) DEFAULT NULL COMMENT '可用用户', + `view_org` varchar(1000) DEFAULT NULL COMMENT '可用组织', PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `s2_auth_groups` ( - `group_id` int(11) NOT NULL, - `config` varchar(2048) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - PRIMARY KEY (`group_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + `group_id` int(11) NOT NULL, + `config` varchar(2048) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + PRIMARY KEY (`group_id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `s2_available_date_info` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `item_id` int(11) NOT NULL, - `type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `date_format` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, - `date_period` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `start_date` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `end_date` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `unavailable_date` text COLLATE utf8mb4_unicode_ci, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `created_by` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL, - `updated_at` timestamp NULL, - `updated_by` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL, - `status` tinyint DEFAULT 0, - UNIQUE(`item_id`, `type`), - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + `id` int(11) NOT NULL AUTO_INCREMENT, + `item_id` int(11) NOT NULL, + `type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `date_format` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `date_period` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `start_date` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `end_date` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `unavailable_date` text COLLATE utf8mb4_unicode_ci, + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `created_by` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL, + `updated_at` timestamp NULL, + `updated_by` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL, + `status` tinyint DEFAULT 0, + UNIQUE(`item_id`, `type`), + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `s2_chat` ( - `chat_id` bigint(8) NOT NULL AUTO_INCREMENT, - `agent_id` int(11) DEFAULT NULL, - `chat_name` varchar(300) DEFAULT NULL, - `create_time` datetime DEFAULT NULL, - `last_time` datetime DEFAULT NULL, - `creator` varchar(30) DEFAULT NULL, - `last_question` varchar(200) DEFAULT NULL, - `is_delete` tinyint DEFAULT '0' COMMENT 'is deleted', - `is_top` tinyint DEFAULT '0' COMMENT 'is top', - PRIMARY KEY (`chat_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + `chat_id` bigint(8) NOT NULL AUTO_INCREMENT, + `agent_id` int(11) DEFAULT NULL, + `chat_name` varchar(300) DEFAULT NULL, + `create_time` datetime DEFAULT NULL, + `last_time` datetime DEFAULT NULL, + `creator` varchar(30) DEFAULT NULL, + `last_question` varchar(200) DEFAULT NULL, + `is_delete` tinyint DEFAULT '0' COMMENT 'is deleted', + `is_top` tinyint DEFAULT '0' COMMENT 'is top', + PRIMARY KEY (`chat_id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `s2_chat_config` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `model_id` bigint(20) DEFAULT NULL, - `chat_detail_config` mediumtext COMMENT '明细模式配置信息', - `chat_agg_config` mediumtext COMMENT '指标模式配置信息', - `recommended_questions` mediumtext COMMENT '推荐问题配置', - `created_at` datetime NOT NULL COMMENT '创建时间', - `updated_at` datetime NOT NULL COMMENT '更新时间', - `created_by` varchar(100) NOT NULL COMMENT '创建人', - `updated_by` varchar(100) NOT NULL COMMENT '更新人', - `status` tinyint NOT NULL COMMENT '主题域扩展信息状态, 0-删除,1-生效', - `llm_examples` text COMMENT 'llm examples', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='主题域扩展信息表'; + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `model_id` bigint(20) DEFAULT NULL, + `chat_detail_config` mediumtext COMMENT '明细模式配置信息', + `chat_agg_config` mediumtext COMMENT '指标模式配置信息', + `recommended_questions` mediumtext COMMENT '推荐问题配置', + `created_at` datetime NOT NULL COMMENT '创建时间', + `updated_at` datetime NOT NULL COMMENT '更新时间', + `created_by` varchar(100) NOT NULL COMMENT '创建人', + `updated_by` varchar(100) NOT NULL COMMENT '更新人', + `status` tinyint NOT NULL COMMENT '主题域扩展信息状态, 0-删除,1-生效', + `llm_examples` text COMMENT 'llm examples', + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='主题域扩展信息表'; CREATE TABLE IF NOT EXISTS `s2_chat_memory` ( - `id` INT NOT NULL AUTO_INCREMENT, - `question` varchar(655) COMMENT '用户问题' , + `id` INT NOT NULL AUTO_INCREMENT, + `question` varchar(655) COMMENT '用户问题' , `side_info` TEXT COMMENT '辅助信息' , `query_id` BIGINT COMMENT '问答ID' , `agent_id` INT COMMENT '助理ID' , @@ -95,29 +95,29 @@ CREATE TABLE IF NOT EXISTS `s2_chat_memory` ( `created_by` varchar(100) DEFAULT NULL , `updated_by` varchar(100) DEFAULT NULL , PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `s2_chat_context` ( - `chat_id` bigint(20) NOT NULL COMMENT 'context chat id', - `modified_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'row modify time', - `query_user` varchar(64) DEFAULT NULL COMMENT 'row modify user', - `query_text` text COMMENT 'query text', - `semantic_parse` text COMMENT 'parse data', - `ext_data` text COMMENT 'extend data', - PRIMARY KEY (`chat_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + `chat_id` bigint(20) NOT NULL COMMENT 'context chat id', + `modified_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'row modify time', + `query_user` varchar(64) DEFAULT NULL COMMENT 'row modify user', + `query_text` text COMMENT 'query text', + `semantic_parse` text COMMENT 'parse data', + `ext_data` text COMMENT 'extend data', + PRIMARY KEY (`chat_id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `s2_chat_parse` ( - `question_id` bigint NOT NULL, - `chat_id` int(11) NOT NULL, - `parse_id` int(11) NOT NULL, - `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `query_text` varchar(500) DEFAULT NULL, - `user_name` varchar(150) DEFAULT NULL, - `parse_info` mediumtext NOT NULL, - `is_candidate` int(11) DEFAULT '1' COMMENT '1是candidate,0是selected', - KEY `commonIndex` (`question_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + `question_id` bigint NOT NULL, + `chat_id` int(11) NOT NULL, + `parse_id` int(11) NOT NULL, + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `query_text` varchar(500) DEFAULT NULL, + `user_name` varchar(150) DEFAULT NULL, + `parse_info` mediumtext NOT NULL, + `is_candidate` int(11) DEFAULT '1' COMMENT '1是candidate,0是selected', + KEY `commonIndex` (`question_id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `s2_chat_query` @@ -135,83 +135,83 @@ CREATE TABLE IF NOT EXISTS `s2_chat_query` `similar_queries` varchar(1024) DEFAULT '', `parse_time_cost` varchar(1024) DEFAULT '', PRIMARY KEY (`question_id`) -) ENGINE = InnoDB DEFAULT CHARSET = utf8; + ) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `s2_chat_statistics` ( - `question_id` bigint(20) NOT NULL, - `chat_id` bigint(20) NOT NULL, - `user_name` varchar(150) DEFAULT NULL, - `query_text` varchar(200) DEFAULT NULL, - `interface_name` varchar(100) DEFAULT NULL, - `cost` int(6) DEFAULT '0', - `type` int(11) DEFAULT NULL, - `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - KEY `commonIndex` (`question_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + `question_id` bigint(20) NOT NULL, + `chat_id` bigint(20) NOT NULL, + `user_name` varchar(150) DEFAULT NULL, + `query_text` varchar(200) DEFAULT NULL, + `interface_name` varchar(100) DEFAULT NULL, + `cost` int(6) DEFAULT '0', + `type` int(11) DEFAULT NULL, + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + KEY `commonIndex` (`question_id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `s2_chat_model` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `name` varchar(255) NOT NULL COMMENT '名称', - `description` varchar(500) DEFAULT NULL COMMENT '描述', - `config` text NOT NULL COMMENT '配置信息', - `created_at` datetime NOT NULL COMMENT '创建时间', - `created_by` varchar(100) NOT NULL COMMENT '创建人', - `updated_at` datetime NOT NULL COMMENT '更新时间', - `updated_by` varchar(100) NOT NULL COMMENT '更新人', - `admin` varchar(500) DEFAULT NULL, - `viewer` varchar(500) DEFAULT NULL, - `is_open` tinyint DEFAULT NULL COMMENT '是否公开', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='对话大模型实例表'; + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL COMMENT '名称', + `description` varchar(500) DEFAULT NULL COMMENT '描述', + `config` text NOT NULL COMMENT '配置信息', + `created_at` datetime NOT NULL COMMENT '创建时间', + `created_by` varchar(100) NOT NULL COMMENT '创建人', + `updated_at` datetime NOT NULL COMMENT '更新时间', + `updated_by` varchar(100) NOT NULL COMMENT '更新人', + `admin` varchar(500) DEFAULT NULL, + `viewer` varchar(500) DEFAULT NULL, + `is_open` tinyint DEFAULT NULL COMMENT '是否公开', + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='对话大模型实例表'; CREATE TABLE IF NOT EXISTS `s2_database` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `name` varchar(255) NOT NULL COMMENT '名称', - `description` varchar(500) DEFAULT NULL COMMENT '描述', - `version` varchar(64) DEFAULT NULL, - `type` varchar(20) NOT NULL COMMENT '类型 mysql,clickhouse,tdw', - `config` text NOT NULL COMMENT '配置信息', - `created_at` datetime NOT NULL COMMENT '创建时间', - `created_by` varchar(100) NOT NULL COMMENT '创建人', - `updated_at` datetime NOT NULL COMMENT '更新时间', - `updated_by` varchar(100) NOT NULL COMMENT '更新人', - `admin` varchar(500) DEFAULT NULL, - `viewer` varchar(500) DEFAULT NULL, - `is_open` tinyint DEFAULT NULL COMMENT '是否公开', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='数据库实例表'; + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL COMMENT '名称', + `description` varchar(500) DEFAULT NULL COMMENT '描述', + `version` varchar(64) DEFAULT NULL, + `type` varchar(20) NOT NULL COMMENT '类型 mysql,clickhouse,tdw', + `config` text NOT NULL COMMENT '配置信息', + `created_at` datetime NOT NULL COMMENT '创建时间', + `created_by` varchar(100) NOT NULL COMMENT '创建人', + `updated_at` datetime NOT NULL COMMENT '更新时间', + `updated_by` varchar(100) NOT NULL COMMENT '更新人', + `admin` varchar(500) DEFAULT NULL, + `viewer` varchar(500) DEFAULT NULL, + `is_open` tinyint DEFAULT NULL COMMENT '是否公开', + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='数据库实例表'; CREATE TABLE IF NOT EXISTS `s2_dictionary_conf` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `description` varchar(255) , - `type` varchar(255) NOT NULL , - `item_id` INT NOT NULL , - `config` mediumtext , - `status` varchar(255) NOT NULL , - `created_at` datetime NOT NULL COMMENT '创建时间' , - `created_by` varchar(100) NOT NULL , - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='字典配置信息表'; + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `description` varchar(255) , + `type` varchar(255) NOT NULL , + `item_id` INT NOT NULL , + `config` mediumtext , + `status` varchar(255) NOT NULL , + `created_at` datetime NOT NULL COMMENT '创建时间' , + `created_by` varchar(100) NOT NULL , + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='字典配置信息表'; CREATE TABLE IF NOT EXISTS `s2_dictionary_task` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `name` varchar(255) NOT NULL , - `description` varchar(255) , - `type` varchar(255) NOT NULL , - `item_id` INT NOT NULL , - `config` mediumtext , - `status` varchar(255) NOT NULL , - `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `created_by` varchar(100) NOT NULL , - `elapsed_ms` int(10) DEFAULT NULL , - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='字典运行任务表'; + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL , + `description` varchar(255) , + `type` varchar(255) NOT NULL , + `item_id` INT NOT NULL , + `config` mediumtext , + `status` varchar(255) NOT NULL , + `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `created_by` varchar(100) NOT NULL , + `elapsed_ms` int(10) DEFAULT NULL , + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='字典运行任务表'; CREATE TABLE IF NOT EXISTS `s2_dimension` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '维度ID', + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '维度ID', `model_id` bigint(20) DEFAULT NULL, `name` varchar(255) NOT NULL COMMENT '维度名称', `biz_name` varchar(255) NOT NULL COMMENT '字段名称', @@ -227,32 +227,32 @@ CREATE TABLE IF NOT EXISTS `s2_dimension` ( `updated_at` datetime NOT NULL COMMENT '更新时间', `updated_by` varchar(100) NOT NULL COMMENT '更新人', `semantic_type` varchar(20) NOT NULL COMMENT '语义类型DATE, ID, CATEGORY', - `alias` varchar(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, + `alias` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `default_values` varchar(500) DEFAULT NULL, `dim_value_maps` varchar(5000) DEFAULT NULL, `is_tag` tinyint DEFAULT NULL, `ext` varchar(1000) DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='维度表'; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='维度表'; CREATE TABLE IF NOT EXISTS `s2_domain` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增ID', - `name` varchar(255) DEFAULT NULL COMMENT '主题域名称', - `biz_name` varchar(255) DEFAULT NULL COMMENT '内部名称', - `parent_id` bigint(20) DEFAULT '0' COMMENT '父主题域ID', - `status` tinyint NOT NULL COMMENT '主题域状态', - `created_at` datetime DEFAULT NULL COMMENT '创建时间', - `created_by` varchar(100) DEFAULT NULL COMMENT '创建人', - `updated_at` datetime DEFAULT NULL COMMENT '更新时间', - `updated_by` varchar(100) DEFAULT NULL COMMENT '更新人', - `admin` varchar(3000) DEFAULT NULL COMMENT '主题域管理员', - `admin_org` varchar(3000) DEFAULT NULL COMMENT '主题域管理员组织', - `is_open` tinyint DEFAULT NULL COMMENT '主题域是否公开', - `viewer` varchar(3000) DEFAULT NULL COMMENT '主题域可用用户', - `view_org` varchar(3000) DEFAULT NULL COMMENT '主题域可用组织', - `entity` varchar(500) DEFAULT NULL COMMENT '主题域实体信息', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='主题域基础信息表'; + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增ID', + `name` varchar(255) DEFAULT NULL COMMENT '主题域名称', + `biz_name` varchar(255) DEFAULT NULL COMMENT '内部名称', + `parent_id` bigint(20) DEFAULT '0' COMMENT '父主题域ID', + `status` tinyint NOT NULL COMMENT '主题域状态', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `created_by` varchar(100) DEFAULT NULL COMMENT '创建人', + `updated_at` datetime DEFAULT NULL COMMENT '更新时间', + `updated_by` varchar(100) DEFAULT NULL COMMENT '更新人', + `admin` varchar(3000) DEFAULT NULL COMMENT '主题域管理员', + `admin_org` varchar(3000) DEFAULT NULL COMMENT '主题域管理员组织', + `is_open` tinyint DEFAULT NULL COMMENT '主题域是否公开', + `viewer` varchar(3000) DEFAULT NULL COMMENT '主题域可用用户', + `view_org` varchar(3000) DEFAULT NULL COMMENT '主题域可用组织', + `entity` varchar(500) DEFAULT NULL COMMENT '主题域实体信息', + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='主题域基础信息表'; CREATE TABLE IF NOT EXISTS `s2_metric` @@ -272,35 +272,35 @@ CREATE TABLE IF NOT EXISTS `s2_metric` `updated_by` varchar(100) NOT NULL COMMENT '更新人', `data_format_type` varchar(50) DEFAULT NULL COMMENT '数值类型', `data_format` varchar(500) DEFAULT NULL COMMENT '数值类型参数', - `alias` varchar(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, - `classifications` varchar(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, + `alias` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `classifications` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `relate_dimensions` varchar(500) DEFAULT NULL COMMENT '指标相关维度', `ext` text DEFAULT NULL, `define_type` varchar(50) DEFAULT NULL, -- MEASURE, FIELD, METRIC `is_publish` tinyint DEFAULT NULL COMMENT '是否发布', PRIMARY KEY (`id`) -) ENGINE = InnoDB - DEFAULT CHARSET = utf8 COMMENT ='指标表'; + ) ENGINE = InnoDB + DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT ='指标表'; CREATE TABLE IF NOT EXISTS `s2_model` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, - `biz_name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `biz_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `domain_id` bigint(20) DEFAULT NULL, - `alias` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL, + `alias` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `status` tinyint DEFAULT NULL, `description` varchar(500) DEFAULT NULL, - `viewer` varchar(500) COLLATE utf8_unicode_ci DEFAULT NULL, - `view_org` varchar(500) COLLATE utf8_unicode_ci DEFAULT NULL, - `admin` varchar(500) COLLATE utf8_unicode_ci DEFAULT NULL, - `admin_org` varchar(500) COLLATE utf8_unicode_ci DEFAULT NULL, + `viewer` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `view_org` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `admin` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `admin_org` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `is_open` tinyint DEFAULT NULL, - `created_by` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `created_by` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_at` datetime DEFAULT NULL, - `updated_by` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `updated_by` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `updated_at` datetime DEFAULT NULL, - `entity` text COLLATE utf8_unicode_ci, + `entity` text COLLATE utf8mb4_unicode_ci, `drill_down_dimensions` TEXT DEFAULT NULL, `database_id` INT NOT NULL , `model_detail` text NOT NULL , @@ -310,61 +310,61 @@ CREATE TABLE IF NOT EXISTS `s2_model` ( `tag_object_id` int(11) DEFAULT '0', `ext` varchar(1000) DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `s2_plugin` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `type` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'DASHBOARD,WIDGET,URL', - `data_set` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `pattern` varchar(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, - `parse_mode` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `parse_mode_config` text COLLATE utf8mb4_unicode_ci, - `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, - `created_at` datetime DEFAULT NULL, - `created_by` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, - `updated_at` datetime DEFAULT NULL, - `updated_by` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, - `config` text CHARACTER SET utf8 COLLATE utf8_unicode_ci, - `comment` text COLLATE utf8mb4_unicode_ci, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'DASHBOARD,WIDGET,URL', + `data_set` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `pattern` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `parse_mode` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `parse_mode_config` text COLLATE utf8mb4_unicode_ci, + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `created_by` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `updated_by` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `config` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci, + `comment` text COLLATE utf8mb4_unicode_ci, + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `s2_query_stat_info` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `trace_id` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '查询标识', - `model_id` bigint(20) DEFAULT NULL, - `data_set_id` bigint(20) DEFAULT NULL, - `query_user` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '执行sql的用户', - `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `query_type` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '查询对应的场景', - `query_type_back` int(10) DEFAULT '0' COMMENT '查询类型, 0-正常查询, 1-预刷类型', - `query_sql_cmd` mediumtext COLLATE utf8mb4_unicode_ci COMMENT '对应查询的struct', - `sql_cmd_md5` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'sql md5值', - `query_struct_cmd` mediumtext COLLATE utf8mb4_unicode_ci COMMENT '对应查询的struct', - `struct_cmd_md5` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'sql md5值', - `query_sql` mediumtext COLLATE utf8mb4_unicode_ci COMMENT '对应查询的sql', - `sql_md5` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'sql md5值', - `query_engine` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '查询引擎', - `elapsed_ms` bigint(10) DEFAULT NULL COMMENT '查询耗时', - `query_state` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '查询最终状态', - `native_query` int(10) DEFAULT NULL COMMENT '1-明细查询,0-聚合查询', - `start_date` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'sql开始日期', - `end_date` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'sql结束日期', - `dimensions` mediumtext COLLATE utf8mb4_unicode_ci COMMENT 'sql 涉及的维度', - `metrics` mediumtext COLLATE utf8mb4_unicode_ci COMMENT 'sql 涉及的指标', - `select_cols` mediumtext COLLATE utf8mb4_unicode_ci COMMENT 'sql select部分涉及的标签', - `agg_cols` mediumtext COLLATE utf8mb4_unicode_ci COMMENT 'sql agg部分涉及的标签', - `filter_cols` mediumtext COLLATE utf8mb4_unicode_ci COMMENT 'sql where部分涉及的标签', - `group_by_cols` mediumtext COLLATE utf8mb4_unicode_ci COMMENT 'sql grouy by部分涉及的标签', - `order_by_cols` mediumtext COLLATE utf8mb4_unicode_ci COMMENT 'sql order by部分涉及的标签', - `use_result_cache` tinyint(1) DEFAULT '-1' COMMENT '是否命中sql缓存', - `use_sql_cache` tinyint(1) DEFAULT '-1' COMMENT '是否命中sql缓存', - `sql_cache_key` mediumtext COLLATE utf8mb4_unicode_ci COMMENT '缓存的key', - `result_cache_key` mediumtext COLLATE utf8mb4_unicode_ci COMMENT '缓存的key', - `query_opt_mode` varchar(20) null comment '优化模式', - PRIMARY KEY (`id`), - KEY `domain_index` (`model_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='查询统计信息表'; + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `trace_id` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '查询标识', + `model_id` bigint(20) DEFAULT NULL, + `data_set_id` bigint(20) DEFAULT NULL, + `query_user` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '执行sql的用户', + `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `query_type` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '查询对应的场景', + `query_type_back` int(10) DEFAULT '0' COMMENT '查询类型, 0-正常查询, 1-预刷类型', + `query_sql_cmd` mediumtext COLLATE utf8mb4_unicode_ci COMMENT '对应查询的struct', + `sql_cmd_md5` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'sql md5值', + `query_struct_cmd` mediumtext COLLATE utf8mb4_unicode_ci COMMENT '对应查询的struct', + `struct_cmd_md5` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'sql md5值', + `query_sql` mediumtext COLLATE utf8mb4_unicode_ci COMMENT '对应查询的sql', + `sql_md5` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'sql md5值', + `query_engine` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '查询引擎', + `elapsed_ms` bigint(10) DEFAULT NULL COMMENT '查询耗时', + `query_state` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '查询最终状态', + `native_query` int(10) DEFAULT NULL COMMENT '1-明细查询,0-聚合查询', + `start_date` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'sql开始日期', + `end_date` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'sql结束日期', + `dimensions` mediumtext COLLATE utf8mb4_unicode_ci COMMENT 'sql 涉及的维度', + `metrics` mediumtext COLLATE utf8mb4_unicode_ci COMMENT 'sql 涉及的指标', + `select_cols` mediumtext COLLATE utf8mb4_unicode_ci COMMENT 'sql select部分涉及的标签', + `agg_cols` mediumtext COLLATE utf8mb4_unicode_ci COMMENT 'sql agg部分涉及的标签', + `filter_cols` mediumtext COLLATE utf8mb4_unicode_ci COMMENT 'sql where部分涉及的标签', + `group_by_cols` mediumtext COLLATE utf8mb4_unicode_ci COMMENT 'sql grouy by部分涉及的标签', + `order_by_cols` mediumtext COLLATE utf8mb4_unicode_ci COMMENT 'sql order by部分涉及的标签', + `use_result_cache` tinyint(1) DEFAULT '-1' COMMENT '是否命中sql缓存', + `use_sql_cache` tinyint(1) DEFAULT '-1' COMMENT '是否命中sql缓存', + `sql_cache_key` mediumtext COLLATE utf8mb4_unicode_ci COMMENT '缓存的key', + `result_cache_key` mediumtext COLLATE utf8mb4_unicode_ci COMMENT '缓存的key', + `query_opt_mode` varchar(20) null comment '优化模式', + PRIMARY KEY (`id`), + KEY `domain_index` (`model_id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='查询统计信息表'; CREATE TABLE IF NOT EXISTS `s2_canvas` ( @@ -377,7 +377,7 @@ CREATE TABLE IF NOT EXISTS `s2_canvas` `updated_at` datetime DEFAULT NULL, `updated_by` varchar(100) NOT NULL, PRIMARY KEY (`id`) -) ENGINE = InnoDB DEFAULT CHARSET = utf8; + ) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS s2_user ( @@ -388,16 +388,17 @@ CREATE TABLE IF NOT EXISTS s2_user salt varchar(256) DEFAULT NULL COMMENT 'md5密码盐', email varchar(100) null, is_admin tinyint null, + last_login datetime DEFAULT NULL, UNIQUE (`name`), PRIMARY KEY (`id`) -); + ) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS s2_system_config ( id int primary key AUTO_INCREMENT COMMENT '主键id', admin varchar(500) COMMENT '系统管理员', parameters text null COMMENT '配置项' -)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS s2_model_rela ( @@ -407,27 +408,27 @@ CREATE TABLE IF NOT EXISTS s2_model_rela to_model_id bigint, join_type VARCHAR(255), join_condition text -)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `s2_collect` ( - `id` bigint NOT NULL primary key AUTO_INCREMENT, - `type` varchar(20) NOT NULL, + `id` bigint NOT NULL primary key AUTO_INCREMENT, + `type` varchar(20) NOT NULL, `username` varchar(20) NOT NULL, `collect_id` bigint NOT NULL, `create_time` datetime, `update_time` datetime -)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `s2_metric_query_default_config` ( - `id` bigint NOT NULL PRIMARY KEY AUTO_INCREMENT, - `metric_id` bigint, - `user_name` varchar(255) NOT NULL, + `id` bigint NOT NULL PRIMARY KEY AUTO_INCREMENT, + `metric_id` bigint, + `user_name` varchar(255) NOT NULL, `default_config` varchar(1000) NOT NULL, `created_at` datetime null, `updated_at` datetime null, `created_by` varchar(100) null, `updated_by` varchar(100) null -)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `s2_app` ( @@ -444,7 +445,7 @@ CREATE TABLE IF NOT EXISTS `s2_app` `updated_at` datetime null, `created_by` varchar(255) null, `updated_by` varchar(255) null -)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS s2_data_set ( @@ -463,19 +464,19 @@ CREATE TABLE IF NOT EXISTS s2_data_set query_config VARCHAR(3000), `admin` varchar(3000) DEFAULT NULL, `admin_org` varchar(3000) DEFAULT NULL -)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS s2_tag( - `id` INT NOT NULL AUTO_INCREMENT, - `item_id` INT NOT NULL , - `type` varchar(255) NOT NULL , - `created_at` datetime NOT NULL , - `created_by` varchar(100) NOT NULL , - `updated_at` datetime DEFAULT NULL , - `updated_by` varchar(100) DEFAULT NULL , - `ext` text DEFAULT NULL , - PRIMARY KEY (`id`) -)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + `id` INT NOT NULL AUTO_INCREMENT, + `item_id` INT NOT NULL , + `type` varchar(255) NOT NULL , + `created_at` datetime NOT NULL , + `created_by` varchar(100) NOT NULL , + `updated_at` datetime DEFAULT NULL , + `updated_by` varchar(100) DEFAULT NULL , + `ext` text DEFAULT NULL , + PRIMARY KEY (`id`) + )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `s2_tag_object` ( @@ -492,11 +493,11 @@ CREATE TABLE IF NOT EXISTS `s2_tag_object` `updated_by` varchar(100) NULL COMMENT '更新人', `ext` text DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE = InnoDB -DEFAULT CHARSET = utf8 COMMENT ='标签对象表'; + ) ENGINE = InnoDB + DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT ='标签对象表'; CREATE TABLE IF NOT EXISTS `s2_query_rule` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, + `id` bigint(20) NOT NULL AUTO_INCREMENT, `data_set_id` bigint(20) , `priority` int(10) NOT NULL DEFAULT '1' , `rule_type` varchar(255) NOT NULL , @@ -512,10 +513,10 @@ CREATE TABLE IF NOT EXISTS `s2_query_rule` ( `updated_by` varchar(100) DEFAULT NULL , `ext` text DEFAULT NULL , PRIMARY KEY (`id`) - ) ENGINE = InnoDB DEFAULT CHARSET = utf8 COMMENT ='查询规则表'; + ) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT ='查询规则表'; CREATE TABLE IF NOT EXISTS `s2_term` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, + `id` bigint(20) NOT NULL AUTO_INCREMENT, `domain_id` bigint(20), `name` varchar(255) NOT NULL , `description` varchar(500) DEFAULT NULL , @@ -527,20 +528,20 @@ CREATE TABLE IF NOT EXISTS `s2_term` ( `updated_at` datetime DEFAULT NULL , `updated_by` varchar(100) DEFAULT NULL , PRIMARY KEY (`id`) -) ENGINE = InnoDB DEFAULT CHARSET = utf8 COMMENT ='术语表'; + ) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT ='术语表'; CREATE TABLE IF NOT EXISTS `s2_user_token` ( - `id` bigint NOT NULL AUTO_INCREMENT, - `name` VARCHAR(255) NOT NULL, - `user_name` VARCHAR(255) NOT NULL, - `expire_time` BIGINT(20) NOT NULL, - `token` text NOT NULL, - `salt` VARCHAR(255) default NULL, - `create_time` DATETIME NOT NULL, - `create_by` VARCHAR(255) NOT NULL, - `update_time` DATETIME default NULL, - `update_by` VARCHAR(255) NOT NULL, - `expire_date_time` DATETIME NOT NULL, - unique key name_username (`name`, `user_name`), - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin comment='用户令牌信息表'; + `id` bigint NOT NULL AUTO_INCREMENT, + `name` VARCHAR(255) NOT NULL, + `user_name` VARCHAR(255) NOT NULL, + `expire_time` BIGINT(20) NOT NULL, + `token` text NOT NULL, + `salt` VARCHAR(255) default NULL, + `create_time` DATETIME NOT NULL, + `create_by` VARCHAR(255) NOT NULL, + `update_time` DATETIME default NULL, + `update_by` VARCHAR(255) NOT NULL, + `expire_date_time` DATETIME NOT NULL, + unique key name_username (`name`, `user_name`), + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci comment='用户令牌信息表'; diff --git a/launchers/standalone/src/main/resources/db/schema-postgres.sql b/launchers/standalone/src/main/resources/db/schema-postgres.sql index aac79316e..c5f7e96da 100644 --- a/launchers/standalone/src/main/resources/db/schema-postgres.sql +++ b/launchers/standalone/src/main/resources/db/schema-postgres.sql @@ -498,5 +498,6 @@ CREATE TABLE IF NOT EXISTS s2_user ( salt varchar(256) DEFAULT NULL, email varchar(100) NULL, is_admin smallint NULL, + last_login timestamp NULL, UNIQUE(name) ); \ No newline at end of file