This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch AdminCommand in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit c2965cefd84768d64662c4b735910005cfe5abc8 Author: JackieTien97 <[email protected]> AuthorDate: Fri Oct 25 16:24:34 2024 +0800 Add show current_user/current_database/current_sql_dialect/version/variables for table model --- .../common/header/ColumnHeaderConstant.java | 15 +++++ .../common/header/DatasetHeaderFactory.java | 12 ++++ .../iotdb/db/queryengine/plan/Coordinator.java | 12 +++- .../execution/config/TableConfigTaskVisitor.java | 48 ++++++++++++-- .../config/executor/ClusterConfigTaskExecutor.java | 32 +++++++++ .../config/executor/IConfigTaskExecutor.java | 8 +++ .../config/session/ShowCurrentDatabaseTask.java | 77 ++++++++++++++++++++++ .../config/session/ShowCurrentSqlDialectTask.java | 71 ++++++++++++++++++++ .../config/session/ShowCurrentUserTask.java | 72 ++++++++++++++++++++ .../execution/config/session/ShowVersionTask.java | 52 +++++++++++++++ .../memory/StatementMemorySourceVisitor.java | 9 ++- .../plan/relational/sql/ast/AstVisitor.java | 20 ++++++ .../relational/sql/ast/ShowCurrentDatabase.java | 66 +++++++++++++++++++ .../relational/sql/ast/ShowCurrentSqlDialect.java | 66 +++++++++++++++++++ .../plan/relational/sql/ast/ShowCurrentUser.java | 66 +++++++++++++++++++ .../plan/relational/sql/ast/ShowVariables.java | 66 +++++++++++++++++++ .../plan/relational/sql/ast/ShowVersion.java | 66 +++++++++++++++++++ .../plan/relational/sql/parser/AstBuilder.java | 28 ++++++-- .../plan/relational/sql/util/SqlFormatter.java | 35 ++++++++++ .../db/relational/grammar/sql/RelationalSql.g4 | 16 +++++ 20 files changed, 823 insertions(+), 14 deletions(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/header/ColumnHeaderConstant.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/header/ColumnHeaderConstant.java index d2fa82f9feb..c0301362130 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/header/ColumnHeaderConstant.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/header/ColumnHeaderConstant.java @@ -224,6 +224,12 @@ public class ColumnHeaderConstant { public static final String GRANT_OPTION = "GrantOption"; + public static final String CURRENT_USER = "CurrentUser"; + + public static final String CURRENT_DATABASE = "CurrentDatabase"; + + public static final String CURRENT_SQL_DIALECT = "CurrentSqlDialect"; + public static final List<ColumnHeader> lastQueryColumnHeaders = ImmutableList.of( new ColumnHeader(TIMESERIES, TSDataType.TEXT), @@ -577,4 +583,13 @@ public class ColumnHeaderConstant { new ColumnHeader(PATH, TSDataType.TEXT), new ColumnHeader(PRIVILEGES, TSDataType.TEXT), new ColumnHeader(GRANT_OPTION, TSDataType.BOOLEAN)); + + public static final List<ColumnHeader> SHOW_CURRENT_USER_COLUMN_HEADERS = + ImmutableList.of(new ColumnHeader(CURRENT_USER, TSDataType.STRING)); + + public static final List<ColumnHeader> SHOW_CURRENT_DATABASE_COLUMN_HEADERS = + ImmutableList.of(new ColumnHeader(CURRENT_DATABASE, TSDataType.STRING)); + + public static final List<ColumnHeader> SHOW_CURRENT_SQL_DIALECT_COLUMN_HEADERS = + ImmutableList.of(new ColumnHeader(CURRENT_SQL_DIALECT, TSDataType.STRING)); } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/header/DatasetHeaderFactory.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/header/DatasetHeaderFactory.java index 3b85268bc13..8ccdbfd34c0 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/header/DatasetHeaderFactory.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/header/DatasetHeaderFactory.java @@ -236,4 +236,16 @@ public class DatasetHeaderFactory { public static DatasetHeader getShowTablesDetailsHeader() { return new DatasetHeader(ColumnHeaderConstant.showTablesDetailsColumnHeaders, true); } + + public static DatasetHeader getShowCurrentUserHeader() { + return new DatasetHeader(ColumnHeaderConstant.SHOW_CURRENT_USER_COLUMN_HEADERS, true); + } + + public static DatasetHeader getShowCurrentDatabaseHeader() { + return new DatasetHeader(ColumnHeaderConstant.SHOW_CURRENT_DATABASE_COLUMN_HEADERS, true); + } + + public static DatasetHeader getShowCurrentSqlDialectHeader() { + return new DatasetHeader(ColumnHeaderConstant.SHOW_CURRENT_SQL_DIALECT_COLUMN_HEADERS, true); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java index 37f72bd5aba..4684b49d18f 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java @@ -61,10 +61,15 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SetProperties; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowAINodes; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowCluster; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowConfigNodes; +import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowCurrentDatabase; +import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowCurrentSqlDialect; +import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowCurrentUser; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDB; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDataNodes; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowRegions; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowTables; +import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowVariables; +import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowVersion; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Use; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WrappedInsertStatement; import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser; @@ -336,7 +341,12 @@ public class Coordinator { || statement instanceof Flush || statement instanceof ClearCache || statement instanceof SetConfiguration - || statement instanceof PipeStatement) { + || statement instanceof PipeStatement + || statement instanceof ShowCurrentSqlDialect + || statement instanceof ShowCurrentUser + || statement instanceof ShowCurrentDatabase + || statement instanceof ShowVersion + || statement instanceof ShowVariables) { return new ConfigExecution( queryContext, null, diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java index 59918c25265..7e921625ffa 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java @@ -34,6 +34,7 @@ import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.DropPipePl import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowClusterTask; import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowPipePluginsTask; import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowRegionTask; +import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.ShowVariablesTask; import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational.AlterTableAddColumnTask; import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational.AlterTableDropColumnTask; import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational.AlterTableRenameColumnTask; @@ -52,6 +53,10 @@ import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational.ShowTablesDetailsTask; import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational.ShowTablesTask; import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational.UseDBTask; +import org.apache.iotdb.db.queryengine.plan.execution.config.session.ShowCurrentDatabaseTask; +import org.apache.iotdb.db.queryengine.plan.execution.config.session.ShowCurrentSqlDialectTask; +import org.apache.iotdb.db.queryengine.plan.execution.config.session.ShowCurrentUserTask; +import org.apache.iotdb.db.queryengine.plan.execution.config.session.ShowVersionTask; import org.apache.iotdb.db.queryengine.plan.execution.config.sys.FlushTask; import org.apache.iotdb.db.queryengine.plan.execution.config.sys.SetConfigurationTask; import org.apache.iotdb.db.queryengine.plan.execution.config.sys.pipe.AlterPipeTask; @@ -71,7 +76,6 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.CreateDB; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.CreatePipe; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.CreatePipePlugin; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.CreateTable; -import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.CurrentDatabase; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DataType; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DescribeTable; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DropColumn; @@ -93,12 +97,17 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SetProperties; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowAINodes; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowCluster; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowConfigNodes; +import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowCurrentDatabase; +import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowCurrentSqlDialect; +import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowCurrentUser; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDB; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDataNodes; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowPipePlugins; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowPipes; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowRegions; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowTables; +import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowVariables; +import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowVersion; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StartPipe; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StopPipe; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Use; @@ -493,11 +502,6 @@ public class TableConfigTaskVisitor extends AstVisitor<IConfigTask, MPPQueryCont return new DescribeTableTask(database, node.getTable().getSuffix()); } - @Override - protected IConfigTask visitCurrentDatabase(CurrentDatabase node, MPPQueryContext context) { - return super.visitCurrentDatabase(node, context); - } - @Override protected IConfigTask visitFlush(Flush node, MPPQueryContext context) { context.setQueryType(QueryType.WRITE); @@ -605,4 +609,36 @@ public class TableConfigTaskVisitor extends AstVisitor<IConfigTask, MPPQueryCont context.setQueryType(QueryType.READ); return new ShowPipePluginsTask(); } + + @Override + protected IConfigTask visitShowCurrentUser(ShowCurrentUser node, MPPQueryContext context) { + context.setQueryType(QueryType.READ); + return new ShowCurrentUserTask(context.getSession().getUserName()); + } + + @Override + protected IConfigTask visitShowCurrentSqlDialect( + ShowCurrentSqlDialect node, MPPQueryContext context) { + context.setQueryType(QueryType.READ); + return new ShowCurrentSqlDialectTask(context.getSession().getSqlDialect().name()); + } + + @Override + protected IConfigTask visitShowCurrentDatabase( + ShowCurrentDatabase node, MPPQueryContext context) { + context.setQueryType(QueryType.READ); + return new ShowCurrentDatabaseTask(context.getSession().getDatabaseName().orElse(null)); + } + + @Override + protected IConfigTask visitShowVersion(ShowVersion node, MPPQueryContext context) { + context.setQueryType(QueryType.READ); + return new ShowVersionTask(); + } + + @Override + protected IConfigTask visitShowVariables(ShowVariables node, MPPQueryContext context) { + context.setQueryType(QueryType.READ); + return new ShowVariablesTask(); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java index 66617ec3ef0..343fb4e44d6 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java @@ -177,6 +177,10 @@ import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.relational import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.template.ShowNodesInSchemaTemplateTask; import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.template.ShowPathSetTemplateTask; import org.apache.iotdb.db.queryengine.plan.execution.config.metadata.template.ShowSchemaTemplateTask; +import org.apache.iotdb.db.queryengine.plan.execution.config.session.ShowCurrentDatabaseTask; +import org.apache.iotdb.db.queryengine.plan.execution.config.session.ShowCurrentSqlDialectTask; +import org.apache.iotdb.db.queryengine.plan.execution.config.session.ShowCurrentUserTask; +import org.apache.iotdb.db.queryengine.plan.execution.config.session.ShowVersionTask; import org.apache.iotdb.db.queryengine.plan.execution.config.sys.TestConnectionTask; import org.apache.iotdb.db.queryengine.plan.execution.config.sys.pipe.ShowPipeTask; import org.apache.iotdb.db.queryengine.plan.execution.config.sys.quota.ShowSpaceQuotaTask; @@ -1353,6 +1357,34 @@ public class ClusterConfigTaskExecutor implements IConfigTaskExecutor { return future; } + @Override + public SettableFuture<ConfigTaskResult> showVersion() { + SettableFuture<ConfigTaskResult> future = SettableFuture.create(); + ShowVersionTask.buildTsBlock(future); + return future; + } + + @Override + public SettableFuture<ConfigTaskResult> showCurrentSqlDialect(String sqlDialect) { + SettableFuture<ConfigTaskResult> future = SettableFuture.create(); + ShowCurrentSqlDialectTask.buildTsBlock(sqlDialect, future); + return future; + } + + @Override + public SettableFuture<ConfigTaskResult> showCurrentDatabase(String currentDatabase) { + SettableFuture<ConfigTaskResult> future = SettableFuture.create(); + ShowCurrentDatabaseTask.buildTsBlock(currentDatabase, future); + return future; + } + + @Override + public SettableFuture<ConfigTaskResult> showCurrentUser(String currentUser) { + SettableFuture<ConfigTaskResult> future = SettableFuture.create(); + ShowCurrentUserTask.buildTsBlock(currentUser, future); + return future; + } + @Override public SettableFuture<ConfigTaskResult> testConnection(boolean needDetails) { SettableFuture<ConfigTaskResult> future = SettableFuture.create(); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/IConfigTaskExecutor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/IConfigTaskExecutor.java index 4f0b48ba675..db2167e3658 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/IConfigTaskExecutor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/IConfigTaskExecutor.java @@ -333,4 +333,12 @@ public interface IConfigTaskExecutor { SettableFuture<ConfigTaskResult> dropTable( final String database, final String tableName, final String queryId, final boolean ifExists); + + SettableFuture<ConfigTaskResult> showVersion(); + + SettableFuture<ConfigTaskResult> showCurrentSqlDialect(String sqlDialect); + + SettableFuture<ConfigTaskResult> showCurrentUser(String currentUser); + + SettableFuture<ConfigTaskResult> showCurrentDatabase(String currentDatabase); } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/session/ShowCurrentDatabaseTask.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/session/ShowCurrentDatabaseTask.java new file mode 100644 index 00000000000..d6e9cf78fb1 --- /dev/null +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/session/ShowCurrentDatabaseTask.java @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.iotdb.db.queryengine.plan.execution.config.session; + +import org.apache.iotdb.db.queryengine.common.header.ColumnHeader; +import org.apache.iotdb.db.queryengine.common.header.ColumnHeaderConstant; +import org.apache.iotdb.db.queryengine.common.header.DatasetHeaderFactory; +import org.apache.iotdb.db.queryengine.plan.execution.config.ConfigTaskResult; +import org.apache.iotdb.db.queryengine.plan.execution.config.IConfigTask; +import org.apache.iotdb.db.queryengine.plan.execution.config.executor.IConfigTaskExecutor; +import org.apache.iotdb.rpc.TSStatusCode; + +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.SettableFuture; +import org.apache.tsfile.common.conf.TSFileConfig; +import org.apache.tsfile.enums.TSDataType; +import org.apache.tsfile.read.common.block.TsBlockBuilder; +import org.apache.tsfile.utils.Binary; + +import java.util.List; +import java.util.stream.Collectors; + +public class ShowCurrentDatabaseTask implements IConfigTask { + + private final String database; + + public ShowCurrentDatabaseTask(String database) { + this.database = database; + } + + public static void buildTsBlock(String database, SettableFuture<ConfigTaskResult> future) { + List<TSDataType> outputDataTypes = + ColumnHeaderConstant.SHOW_CURRENT_DATABASE_COLUMN_HEADERS.stream() + .map(ColumnHeader::getColumnType) + .collect(Collectors.toList()); + TsBlockBuilder tsBlockBuilder = new TsBlockBuilder(outputDataTypes); + tsBlockBuilder.getTimeColumnBuilder().writeLong(0L); + if (database == null) { + tsBlockBuilder.getColumnBuilder(0).appendNull(); + } else { + tsBlockBuilder + .getColumnBuilder(0) + .writeBinary(new Binary(database, TSFileConfig.STRING_CHARSET)); + } + + tsBlockBuilder.declarePosition(); + + future.set( + new ConfigTaskResult( + TSStatusCode.SUCCESS_STATUS, + tsBlockBuilder.build(), + DatasetHeaderFactory.getShowCurrentDatabaseHeader())); + } + + @Override + public ListenableFuture<ConfigTaskResult> execute(IConfigTaskExecutor configTaskExecutor) + throws InterruptedException { + return configTaskExecutor.showCurrentDatabase(database); + } +} diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/session/ShowCurrentSqlDialectTask.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/session/ShowCurrentSqlDialectTask.java new file mode 100644 index 00000000000..26cac2b9cbd --- /dev/null +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/session/ShowCurrentSqlDialectTask.java @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.iotdb.db.queryengine.plan.execution.config.session; + +import org.apache.iotdb.db.queryengine.common.header.ColumnHeader; +import org.apache.iotdb.db.queryengine.common.header.ColumnHeaderConstant; +import org.apache.iotdb.db.queryengine.common.header.DatasetHeaderFactory; +import org.apache.iotdb.db.queryengine.plan.execution.config.ConfigTaskResult; +import org.apache.iotdb.db.queryengine.plan.execution.config.IConfigTask; +import org.apache.iotdb.db.queryengine.plan.execution.config.executor.IConfigTaskExecutor; +import org.apache.iotdb.rpc.TSStatusCode; + +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.SettableFuture; +import org.apache.tsfile.common.conf.TSFileConfig; +import org.apache.tsfile.enums.TSDataType; +import org.apache.tsfile.read.common.block.TsBlockBuilder; +import org.apache.tsfile.utils.Binary; + +import java.util.List; +import java.util.stream.Collectors; + +public class ShowCurrentSqlDialectTask implements IConfigTask { + private final String sqlDialect; + + public ShowCurrentSqlDialectTask(String sqlDialect) { + this.sqlDialect = sqlDialect; + } + + public static void buildTsBlock(String sqlDialect, SettableFuture<ConfigTaskResult> future) { + List<TSDataType> outputDataTypes = + ColumnHeaderConstant.SHOW_CURRENT_SQL_DIALECT_COLUMN_HEADERS.stream() + .map(ColumnHeader::getColumnType) + .collect(Collectors.toList()); + TsBlockBuilder tsBlockBuilder = new TsBlockBuilder(outputDataTypes); + tsBlockBuilder.getTimeColumnBuilder().writeLong(0L); + tsBlockBuilder + .getColumnBuilder(0) + .writeBinary(new Binary(sqlDialect, TSFileConfig.STRING_CHARSET)); + tsBlockBuilder.declarePosition(); + + future.set( + new ConfigTaskResult( + TSStatusCode.SUCCESS_STATUS, + tsBlockBuilder.build(), + DatasetHeaderFactory.getShowCurrentSqlDialectHeader())); + } + + @Override + public ListenableFuture<ConfigTaskResult> execute(IConfigTaskExecutor configTaskExecutor) + throws InterruptedException { + return configTaskExecutor.showCurrentSqlDialect(sqlDialect); + } +} diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/session/ShowCurrentUserTask.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/session/ShowCurrentUserTask.java new file mode 100644 index 00000000000..ee8c23aa3e6 --- /dev/null +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/session/ShowCurrentUserTask.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.iotdb.db.queryengine.plan.execution.config.session; + +import org.apache.iotdb.db.queryengine.common.header.ColumnHeader; +import org.apache.iotdb.db.queryengine.common.header.ColumnHeaderConstant; +import org.apache.iotdb.db.queryengine.common.header.DatasetHeaderFactory; +import org.apache.iotdb.db.queryengine.plan.execution.config.ConfigTaskResult; +import org.apache.iotdb.db.queryengine.plan.execution.config.IConfigTask; +import org.apache.iotdb.db.queryengine.plan.execution.config.executor.IConfigTaskExecutor; +import org.apache.iotdb.rpc.TSStatusCode; + +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.SettableFuture; +import org.apache.tsfile.common.conf.TSFileConfig; +import org.apache.tsfile.enums.TSDataType; +import org.apache.tsfile.read.common.block.TsBlockBuilder; +import org.apache.tsfile.utils.Binary; + +import java.util.List; +import java.util.stream.Collectors; + +public class ShowCurrentUserTask implements IConfigTask { + + private final String currentUser; + + public ShowCurrentUserTask(String currentUser) { + this.currentUser = currentUser; + } + + public static void buildTsBlock(String currentUser, SettableFuture<ConfigTaskResult> future) { + List<TSDataType> outputDataTypes = + ColumnHeaderConstant.SHOW_CURRENT_USER_COLUMN_HEADERS.stream() + .map(ColumnHeader::getColumnType) + .collect(Collectors.toList()); + TsBlockBuilder tsBlockBuilder = new TsBlockBuilder(outputDataTypes); + tsBlockBuilder.getTimeColumnBuilder().writeLong(0L); + tsBlockBuilder + .getColumnBuilder(0) + .writeBinary(new Binary(currentUser, TSFileConfig.STRING_CHARSET)); + tsBlockBuilder.declarePosition(); + + future.set( + new ConfigTaskResult( + TSStatusCode.SUCCESS_STATUS, + tsBlockBuilder.build(), + DatasetHeaderFactory.getShowCurrentUserHeader())); + } + + @Override + public ListenableFuture<ConfigTaskResult> execute(IConfigTaskExecutor configTaskExecutor) + throws InterruptedException { + return configTaskExecutor.showCurrentUser(currentUser); + } +} diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/session/ShowVersionTask.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/session/ShowVersionTask.java new file mode 100644 index 00000000000..8f009c68883 --- /dev/null +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/session/ShowVersionTask.java @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.iotdb.db.queryengine.plan.execution.config.session; + +import org.apache.iotdb.db.queryengine.common.header.DatasetHeaderFactory; +import org.apache.iotdb.db.queryengine.plan.execution.config.ConfigTaskResult; +import org.apache.iotdb.db.queryengine.plan.execution.config.IConfigTask; +import org.apache.iotdb.db.queryengine.plan.execution.config.executor.IConfigTaskExecutor; +import org.apache.iotdb.rpc.TSStatusCode; + +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.SettableFuture; + +import static org.apache.iotdb.db.queryengine.plan.execution.memory.StatementMemorySourceVisitor.getVersionResult; + +public class ShowVersionTask implements IConfigTask { + + public ShowVersionTask() { + // Empty constructor + } + + public static void buildTsBlock(SettableFuture<ConfigTaskResult> future) { + future.set( + new ConfigTaskResult( + TSStatusCode.SUCCESS_STATUS, + getVersionResult(), + DatasetHeaderFactory.getShowVersionHeader())); + } + + @Override + public ListenableFuture<ConfigTaskResult> execute(IConfigTaskExecutor configTaskExecutor) + throws InterruptedException { + return configTaskExecutor.showVersion(); + } +} diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/StatementMemorySourceVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/StatementMemorySourceVisitor.java index c19bd14b6de..b358da1ee69 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/StatementMemorySourceVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/StatementMemorySourceVisitor.java @@ -187,6 +187,12 @@ public class StatementMemorySourceVisitor @Override public StatementMemorySource visitShowVersion( ShowVersionStatement showVersionStatement, StatementMemorySourceContext context) { + + return new StatementMemorySource( + getVersionResult(), context.getAnalysis().getRespDatasetHeader()); + } + + public static TsBlock getVersionResult() { List<TSDataType> outputDataTypes = ColumnHeaderConstant.showVersionColumnHeaders.stream() .map(ColumnHeader::getColumnType) @@ -200,8 +206,7 @@ public class StatementMemorySourceVisitor .getColumnBuilder(1) .writeBinary(new Binary(IoTDBConstant.BUILD_INFO, TSFileConfig.STRING_CHARSET)); tsBlockBuilder.declarePosition(); - return new StatementMemorySource( - tsBlockBuilder.build(), context.getAnalysis().getRespDatasetHeader()); + return tsBlockBuilder.build(); } @Override diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java index 32de4cb6a95..88e293fe873 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java @@ -554,4 +554,24 @@ public abstract class AstVisitor<R, C> { protected R visitPipeEnriched(PipeEnriched node, C context) { return visitStatement(node, context); } + + protected R visitShowVersion(ShowVersion node, C context) { + return visitStatement(node, context); + } + + protected R visitShowCurrentUser(ShowCurrentUser node, C context) { + return visitStatement(node, context); + } + + protected R visitShowCurrentDatabase(ShowCurrentDatabase node, C context) { + return visitStatement(node, context); + } + + protected R visitShowCurrentSqlDialect(ShowCurrentSqlDialect node, C context) { + return visitStatement(node, context); + } + + protected R visitShowVariables(ShowVariables node, C context) { + return visitStatement(node, context); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentDatabase.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentDatabase.java new file mode 100644 index 00000000000..caeb4d0eee8 --- /dev/null +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentDatabase.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; + +import com.google.common.collect.ImmutableList; + +import javax.annotation.Nullable; + +import java.util.List; + +public class ShowCurrentDatabase extends Statement { + + public ShowCurrentDatabase(@Nullable NodeLocation location) { + super(location); + } + + @Override + public List<Node> getChildren() { + return ImmutableList.of(); + } + + @Override + public <R, C> R accept(AstVisitor<R, C> visitor, C context) { + return visitor.visitShowCurrentDatabase(this, context); + } + + @Override + public int hashCode() { + return getClass().hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return (obj != null) && (getClass() == obj.getClass()); + } + + @Override + public boolean shallowEquals(Node other) { + return sameClass(this, other); + } + + @Override + public String toString() { + return "SHOW CURRENT_DATABASE"; + } +} diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentSqlDialect.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentSqlDialect.java new file mode 100644 index 00000000000..b4054b0ca69 --- /dev/null +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentSqlDialect.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; + +import com.google.common.collect.ImmutableList; + +import javax.annotation.Nullable; + +import java.util.List; + +public class ShowCurrentSqlDialect extends Statement { + + public ShowCurrentSqlDialect(@Nullable NodeLocation location) { + super(location); + } + + @Override + public List<Node> getChildren() { + return ImmutableList.of(); + } + + @Override + public <R, C> R accept(AstVisitor<R, C> visitor, C context) { + return visitor.visitShowCurrentSqlDialect(this, context); + } + + @Override + public int hashCode() { + return getClass().hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return (obj != null) && (getClass() == obj.getClass()); + } + + @Override + public boolean shallowEquals(Node other) { + return sameClass(this, other); + } + + @Override + public String toString() { + return "SHOW CURRENT_SQL_DIALECT"; + } +} diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentUser.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentUser.java new file mode 100644 index 00000000000..d6e9400ed43 --- /dev/null +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentUser.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; + +import com.google.common.collect.ImmutableList; + +import javax.annotation.Nullable; + +import java.util.List; + +public class ShowCurrentUser extends Statement { + + public ShowCurrentUser(@Nullable NodeLocation location) { + super(location); + } + + @Override + public List<Node> getChildren() { + return ImmutableList.of(); + } + + @Override + public <R, C> R accept(AstVisitor<R, C> visitor, C context) { + return visitor.visitShowCurrentUser(this, context); + } + + @Override + public int hashCode() { + return getClass().hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return (obj != null) && (getClass() == obj.getClass()); + } + + @Override + public boolean shallowEquals(Node other) { + return sameClass(this, other); + } + + @Override + public String toString() { + return "SHOW CURRENT_USER"; + } +} diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowVariables.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowVariables.java new file mode 100644 index 00000000000..0bd8c46202c --- /dev/null +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowVariables.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; + +import com.google.common.collect.ImmutableList; + +import javax.annotation.Nullable; + +import java.util.List; + +public class ShowVariables extends Statement { + + public ShowVariables(@Nullable NodeLocation location) { + super(location); + } + + @Override + public List<Node> getChildren() { + return ImmutableList.of(); + } + + @Override + public <R, C> R accept(AstVisitor<R, C> visitor, C context) { + return visitor.visitShowVariables(this, context); + } + + @Override + public int hashCode() { + return getClass().hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return (obj != null) && (getClass() == obj.getClass()); + } + + @Override + public boolean shallowEquals(Node other) { + return sameClass(this, other); + } + + @Override + public String toString() { + return "SHOW VARIABLES"; + } +} diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowVersion.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowVersion.java new file mode 100644 index 00000000000..a3522295ca8 --- /dev/null +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowVersion.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; + +import com.google.common.collect.ImmutableList; + +import javax.annotation.Nullable; + +import java.util.List; + +public class ShowVersion extends Statement { + + public ShowVersion(@Nullable NodeLocation location) { + super(location); + } + + @Override + public List<Node> getChildren() { + return ImmutableList.of(); + } + + @Override + public <R, C> R accept(AstVisitor<R, C> visitor, C context) { + return visitor.visitShowVersion(this, context); + } + + @Override + public int hashCode() { + return getClass().hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return (obj != null) && (getClass() == obj.getClass()); + } + + @Override + public boolean shallowEquals(Node other) { + return sameClass(this, other); + } + + @Override + public String toString() { + return ""; + } +} diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java index 282ef4554dc..1b8a9e78253 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java @@ -892,11 +892,6 @@ public class AstBuilder extends RelationalSqlBaseVisitor<Node> { return super.visitMigrateRegionStatement(ctx); } - @Override - public Node visitShowVariablesStatement(RelationalSqlParser.ShowVariablesStatementContext ctx) { - return super.visitShowVariablesStatement(ctx); - } - @Override public Node visitFlushStatement(RelationalSqlParser.FlushStatementContext ctx) { FlushStatement flushStatement = new FlushStatement(StatementType.FLUSH); @@ -962,6 +957,29 @@ public class AstBuilder extends RelationalSqlBaseVisitor<Node> { return super.visitShowVersionStatement(ctx); } + @Override + public Node visitShowCurrentSqlDialectStatement( + RelationalSqlParser.ShowCurrentSqlDialectStatementContext ctx) { + return super.visitShowCurrentSqlDialectStatement(ctx); + } + + @Override + public Node visitShowCurrentDatabaseStatement( + RelationalSqlParser.ShowCurrentDatabaseStatementContext ctx) { + return super.visitShowCurrentDatabaseStatement(ctx); + } + + @Override + public Node visitShowCurrentUserStatement( + RelationalSqlParser.ShowCurrentUserStatementContext ctx) { + return super.visitShowCurrentUserStatement(ctx); + } + + @Override + public Node visitShowVariablesStatement(RelationalSqlParser.ShowVariablesStatementContext ctx) { + return super.visitShowVariablesStatement(ctx); + } + @Override public Node visitShowQueriesStatement(RelationalSqlParser.ShowQueriesStatementContext ctx) { return super.visitShowQueriesStatement(ctx); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/SqlFormatter.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/SqlFormatter.java index 97a898d26a2..c73059d681b 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/SqlFormatter.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/SqlFormatter.java @@ -66,11 +66,16 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Row; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Select; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SelectItem; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SetProperties; +import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowCurrentDatabase; +import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowCurrentSqlDialect; +import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowCurrentUser; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDB; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowFunctions; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowPipePlugins; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowPipes; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowTables; +import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowVariables; +import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowVersion; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SingleColumn; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StartPipe; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StopPipe; @@ -529,6 +534,36 @@ public final class SqlFormatter { return null; } + @Override + protected Void visitShowCurrentSqlDialect(ShowCurrentSqlDialect node, Integer context) { + builder.append(node.toString()); + return null; + } + + @Override + protected Void visitShowCurrentDatabase(ShowCurrentDatabase node, Integer context) { + builder.append(node.toString()); + return null; + } + + @Override + protected Void visitShowCurrentUser(ShowCurrentUser node, Integer context) { + builder.append(node.toString()); + return null; + } + + @Override + protected Void visitShowVersion(ShowVersion node, Integer context) { + builder.append(node.toString()); + return null; + } + + @Override + protected Void visitShowVariables(ShowVariables node, Integer context) { + builder.append(node.toString()); + return null; + } + @Override protected Void visitDelete(Delete node, Integer indent) { builder.append("DELETE FROM ").append(formatName(node.getTable().getName())); diff --git a/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4 b/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4 index 6acfcf01657..4e207a98a19 100644 --- a/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4 +++ b/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4 @@ -112,6 +112,9 @@ statement | killQueryStatement | loadConfigurationStatement | setConfigurationStatement + | showCurrentSqlDialectStatement + | showCurrentUserStatement + | showCurrentDatabaseStatement // auth Statement @@ -479,6 +482,18 @@ localOrClusterMode : (ON (LOCAL | CLUSTER)) ; +showCurrentSqlDialectStatement + : SHOW CURRENT_SQL_DIALECT + ; + +showCurrentUserStatement + : SHOW CURRENT_USER + ; + +showCurrentDatabaseStatement + : SHOW CURRENT_DATABASE + ; + @@ -958,6 +973,7 @@ CURRENT_DATE: 'CURRENT_DATE'; CURRENT_PATH: 'CURRENT_PATH'; CURRENT_ROLE: 'CURRENT_ROLE'; CURRENT_SCHEMA: 'CURRENT_SCHEMA'; +CURRENT_SQL_DIALECT: 'CURRENT_SQL_DIALECT'; CURRENT_TIME: 'CURRENT_TIME'; CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP'; CURRENT_USER: 'CURRENT_USER';
