diff --git a/dingo-calcite/src/main/codegen/includes/parserImpls.ftl b/dingo-calcite/src/main/codegen/includes/parserImpls.ftl index 4e8cb07e12..3bfd9674ad 100644 --- a/dingo-calcite/src/main/codegen/includes/parserImpls.ftl +++ b/dingo-calcite/src/main/codegen/includes/parserImpls.ftl @@ -242,6 +242,9 @@ void TableElement(List list) : list.add(new DingoSqlKeyConstraint(s.end(columnList), name, columnList)); } [ ] + [ + {replica = Integer.parseInt(getNextToken().image);} + ] | { s.add(this); } columnList = ParenthesizedSimpleIdentifierList() { @@ -633,6 +636,7 @@ SqlCreate SqlCreateIndex(Span s, boolean replace) : SqlIdentifier table; SqlIdentifier column; List columns; + int replica = 0; SqlNode create = null; Boolean ifNotExists = false; } @@ -648,8 +652,11 @@ SqlCreate SqlCreateIndex(Span s, boolean replace) : column = SimpleIdentifier() { columns.add(column); } )* + [ + {replica = Integer.parseInt(getNextToken().image);} + ] { - return new SqlCreateIndex(s.end(this), replace, ifNotExists, index, table, columns, isUnique); + return new SqlCreateIndex(s.end(this), replace, ifNotExists, index, table, columns, isUnique, replica); } } diff --git a/dingo-calcite/src/main/java/io/dingodb/calcite/DingoDdlExecutor.java b/dingo-calcite/src/main/java/io/dingodb/calcite/DingoDdlExecutor.java index eb9806b454..07cc2bec48 100644 --- a/dingo-calcite/src/main/java/io/dingodb/calcite/DingoDdlExecutor.java +++ b/dingo-calcite/src/main/java/io/dingodb/calcite/DingoDdlExecutor.java @@ -848,7 +848,7 @@ public void execute(@NonNull SqlCreateIndex sqlCreateIndex, CalcitePrepare.Conte null, null, null, - 0, + sqlCreateIndex.replica, "scalar", "TXN_LSM" ); diff --git a/dingo-calcite/src/main/java/io/dingodb/calcite/grammar/ddl/SqlCreateIndex.java b/dingo-calcite/src/main/java/io/dingodb/calcite/grammar/ddl/SqlCreateIndex.java index 4f9a83e9e8..f442c6e16a 100644 --- a/dingo-calcite/src/main/java/io/dingodb/calcite/grammar/ddl/SqlCreateIndex.java +++ b/dingo-calcite/src/main/java/io/dingodb/calcite/grammar/ddl/SqlCreateIndex.java @@ -38,6 +38,8 @@ public class SqlCreateIndex extends SqlCreate { public boolean isUnique; + public int replica; + private static final SqlOperator OPERATOR = new SqlSpecialOperator("CREATE INDEX", SqlKind.OTHER_DDL); @@ -45,7 +47,7 @@ public SqlCreateIndex(SqlParserPos pos, boolean replace, boolean ifNotExists, String index, SqlIdentifier table, List columns, - boolean isUnique) { + boolean isUnique, int replica) { super(OPERATOR, pos, replace, ifNotExists); this.index = index; this.table = table; @@ -53,6 +55,7 @@ public SqlCreateIndex(SqlParserPos pos, boolean replace, boolean ifNotExists, .map(SqlIdentifier::getSimple) .map(String::toUpperCase).collect(Collectors.toList()); this.isUnique = isUnique; + this.replica = replica; } @Override diff --git a/dingo-exec/src/main/java/io/dingodb/exec/fun/mysql/VersionFun.java b/dingo-exec/src/main/java/io/dingodb/exec/fun/mysql/VersionFun.java index 9954c9ea19..b12ce00dcc 100644 --- a/dingo-exec/src/main/java/io/dingodb/exec/fun/mysql/VersionFun.java +++ b/dingo-exec/src/main/java/io/dingodb/exec/fun/mysql/VersionFun.java @@ -17,6 +17,7 @@ package io.dingodb.exec.fun.mysql; import com.ibm.icu.impl.data.ResourceReader; +import io.dingodb.common.log.LogUtils; import io.dingodb.expr.runtime.EvalContext; import io.dingodb.expr.runtime.ExprConfig; import io.dingodb.expr.runtime.op.NullaryOp; @@ -34,28 +35,34 @@ public class VersionFun extends NullaryOp { public static final VersionFun INSTANCE = new VersionFun(); public static final String NAME = "version"; + public static final String PRE = "5.7.41-DingoDB-"; + + public static String version = "UNKNOWN"; private static final long serialVersionUID = -4130064040675181327L; - @Override - public Object eval(EvalContext context, ExprConfig config) { - String version; - InputStream inputStream = ResourceReader.class.getResourceAsStream("/versiontmp.properties"); - if (inputStream != null) { - try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { + static { + try { + InputStream inputStream = ResourceReader.class.getResourceAsStream("/versiontmp.properties"); + if (inputStream != null) { + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String line; while ((line = reader.readLine()) != null) { - if(line.contains("=")){ - version = line.split("=")[1].toString(); - return version; - }; + if(line.contains("=")){ + version = PRE + line.split("=")[1].toString(); + break; + } } - } catch (IOException e) { - e.printStackTrace(); + } else { + LogUtils.debug(log, "Failed to get current release version"); } - } else { - log.debug("Failed to get current release version"); + } catch (Exception e) { + LogUtils.error(log, e.getMessage(), e); } - return null; + } + + @Override + public Object eval(EvalContext context, ExprConfig config) { + return version; } @Override diff --git a/dingo-executor/src/main/java/io/dingodb/server/executor/prepare/PrepareMeta.java b/dingo-executor/src/main/java/io/dingodb/server/executor/prepare/PrepareMeta.java index 74549ae33b..0348158b44 100644 --- a/dingo-executor/src/main/java/io/dingodb/server/executor/prepare/PrepareMeta.java +++ b/dingo-executor/src/main/java/io/dingodb/server/executor/prepare/PrepareMeta.java @@ -33,6 +33,7 @@ import io.dingodb.common.table.TableDefinition; import io.dingodb.common.tenant.TenantConstant; import io.dingodb.common.util.ByteArrayUtils; +import io.dingodb.exec.fun.mysql.VersionFun; import io.dingodb.partition.DingoPartitionServiceProvider; import io.dingodb.sdk.service.VersionService; import io.dingodb.sdk.service.entity.meta.DingoCommonId; @@ -252,7 +253,7 @@ public static List getGlobalVariablesList() { values.add(new Object[]{"net_write_timeout", "60"}); values.add(new Object[]{"net_read_timeout", "60"}); values.add(new Object[]{"lower_case_table_names", "0"}); - values.add(new Object[]{"version", "5.7.24"}); + values.add(new Object[]{"version", VersionFun.version}); values.add(new Object[]{"version_compile_os", "Linux"}); values.add(new Object[]{"version_compile_machine", "x86_64"}); values.add(new Object[]{"init_connect", ""});