This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new a6d25ef8d0 [Enhancement](Backup) support show create repository
(#17299)
a6d25ef8d0 is described below
commit a6d25ef8d04dccea407450bbd8451c8e822a2db8
Author: GoGoWen <[email protected]>
AuthorDate: Tue Apr 11 00:11:00 2023 +0800
[Enhancement](Backup) support show create repository (#17299)
support show create repository stmt.
---
fe/fe-core/src/main/cup/sql_parser.cup | 11 ++++-
.../doris/analysis/ShowCreateRepositoryStmt.java | 53 ++++++++++++++++++++++
.../java/org/apache/doris/backup/Repository.java | 33 ++++++++++++++
.../java/org/apache/doris/qe/ShowExecutor.java | 17 +++++++
fe/fe-core/src/main/jflex/sql_scanner.flex | 1 +
5 files changed, 114 insertions(+), 1 deletion(-)
diff --git a/fe/fe-core/src/main/cup/sql_parser.cup
b/fe/fe-core/src/main/cup/sql_parser.cup
index fbda3f252a..fcb6f53e49 100644
--- a/fe/fe-core/src/main/cup/sql_parser.cup
+++ b/fe/fe-core/src/main/cup/sql_parser.cup
@@ -646,7 +646,7 @@ terminal String COMMENTED_PLAN_HINTS;
nonterminal List<StatementBase> stmts;
nonterminal StatementBase stmt, show_stmt, show_param, help_stmt, load_stmt,
create_routine_load_stmt, pause_routine_load_stmt,
resume_routine_load_stmt, stop_routine_load_stmt,
- show_routine_load_stmt, show_routine_load_task_stmt,
show_create_routine_load_stmt, show_create_load_stmt,
+ show_routine_load_stmt, show_routine_load_task_stmt,
show_create_routine_load_stmt, show_create_load_stmt,
show_create_reporitory_stmt,
describe_stmt, alter_stmt,
use_stmt, kill_stmt, drop_stmt, recover_stmt, grant_stmt, revoke_stmt,
create_stmt, set_stmt, sync_stmt, cancel_stmt, cancel_param, delete_stmt,
link_stmt, migrate_stmt, switch_stmt, enter_stmt, transaction_stmt,
unsupported_stmt, export_stmt, admin_stmt, truncate_stmt,
@@ -1109,6 +1109,8 @@ stmt ::=
{: RESULT = stmt; :}
| show_create_load_stmt : stmt
{: RESULT = stmt; :}
+ | show_create_reporitory_stmt : stmt
+ {: RESULT = stmt; :}
| cancel_stmt : stmt
{: RESULT = stmt; :}
| delete_stmt : stmt
@@ -2798,6 +2800,13 @@ show_create_load_stmt ::=
:}
;
+show_create_reporitory_stmt ::=
+ KW_SHOW KW_CREATE KW_REPOSITORY KW_FOR ident:repoName
+ {:
+ RESULT = new ShowCreateRepositoryStmt(repoName);
+ :}
+ ;
+
// analyze statment
analyze_stmt ::=
KW_ANALYZE KW_TABLE table_name:tbl opt_col_list:cols
opt_partition_names:partitionNames opt_properties:properties
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowCreateRepositoryStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowCreateRepositoryStmt.java
new file mode 100644
index 0000000000..f11a022536
--- /dev/null
+++
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowCreateRepositoryStmt.java
@@ -0,0 +1,53 @@
+// 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.doris.analysis;
+
+import org.apache.doris.catalog.Column;
+import org.apache.doris.catalog.ScalarType;
+import org.apache.doris.common.AnalysisException;
+import org.apache.doris.qe.ShowResultSetMetaData;
+
+// SHOW CREATE REPOSITORY statement
+public class ShowCreateRepositoryStmt extends ShowStmt {
+
+ private static final ShowResultSetMetaData META_DATA =
+ ShowResultSetMetaData.builder()
+ .addColumn(new Column("RepoName",
ScalarType.createVarchar(128)))
+ .addColumn(new Column("CreateStmt",
ScalarType.createVarchar(65535)))
+ .build();
+
+ private final String repoName;
+
+ public ShowCreateRepositoryStmt(String repoName) {
+ this.repoName = repoName;
+ }
+
+ public String getRepoName() {
+ return this.repoName;
+ }
+
+ @Override
+ public void analyze(Analyzer analyzer) throws AnalysisException {
+
+ }
+
+ @Override
+ public ShowResultSetMetaData getMetaData() {
+ return META_DATA;
+ }
+}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/backup/Repository.java
b/fe/fe-core/src/main/java/org/apache/doris/backup/Repository.java
index fc0d45b155..ba25f892c0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/backup/Repository.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/backup/Repository.java
@@ -26,6 +26,7 @@ import org.apache.doris.common.FeConstants;
import org.apache.doris.common.Pair;
import org.apache.doris.common.io.Text;
import org.apache.doris.common.io.Writable;
+import org.apache.doris.common.util.PrintableMap;
import org.apache.doris.common.util.TimeUtils;
import org.apache.doris.system.Backend;
@@ -630,6 +631,38 @@ public class Repository implements Writable {
return snapshotInfos;
}
+ public String getCreateStatement() {
+ StringBuilder stmtBuilder = new StringBuilder();
+ stmtBuilder.append("CREATE ");
+ if (this.isReadOnly) {
+ stmtBuilder.append("READ ONLY ");
+ }
+ stmtBuilder.append("REPOSITORY ");
+ stmtBuilder.append(this.name);
+ stmtBuilder.append(" \nWITH ");
+ StorageBackend.StorageType storageType = this.storage.getStorageType();
+ if (storageType == StorageBackend.StorageType.S3) {
+ stmtBuilder.append(" S3 ");
+ } else if (storageType == StorageBackend.StorageType.HDFS) {
+ stmtBuilder.append(" HDFS ");
+ } else if (storageType == StorageBackend.StorageType.BROKER) {
+ stmtBuilder.append(" BROKER ");
+ stmtBuilder.append(this.storage.getName());
+ } else {
+ // should never reach here
+ throw new UnsupportedOperationException(storageType.toString() + "
backend is not implemented");
+ }
+ stmtBuilder.append(" \nON LOCATION \"");
+ stmtBuilder.append(this.location);
+ stmtBuilder.append("\"");
+
+ stmtBuilder.append("\nPROPERTIES\n(");
+ stmtBuilder.append(new
PrintableMap<>(this.getStorage().getProperties(), " = ",
+ true, true));
+ stmtBuilder.append("\n)");
+ return stmtBuilder.toString();
+ }
+
private List<String> getSnapshotInfo(String snapshotName, String
timestamp) {
List<String> info = Lists.newArrayList();
if (Strings.isNullOrEmpty(timestamp)) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
index 0ce5bcd054..5c5ee09f11 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
@@ -43,6 +43,7 @@ import org.apache.doris.analysis.ShowCreateDbStmt;
import org.apache.doris.analysis.ShowCreateFunctionStmt;
import org.apache.doris.analysis.ShowCreateLoadStmt;
import org.apache.doris.analysis.ShowCreateMaterializedViewStmt;
+import org.apache.doris.analysis.ShowCreateRepositoryStmt;
import org.apache.doris.analysis.ShowCreateRoutineLoadStmt;
import org.apache.doris.analysis.ShowCreateTableStmt;
import org.apache.doris.analysis.ShowDataSkewStmt;
@@ -297,6 +298,8 @@ public class ShowExecutor {
handleShowCreateRoutineLoad();
} else if (stmt instanceof ShowCreateLoadStmt) {
handleShowCreateLoad();
+ } else if (stmt instanceof ShowCreateRepositoryStmt) {
+ handleShowCreateRepository();
} else if (stmt instanceof ShowDeleteStmt) {
handleShowDelete();
} else if (stmt instanceof ShowAlterStmt) {
@@ -2199,6 +2202,20 @@ public class ShowExecutor {
resultSet = new ShowResultSet(showStmt.getMetaData(), rows);
}
+ private void handleShowCreateRepository() throws AnalysisException {
+ ShowCreateRepositoryStmt showCreateRepositoryStmt =
(ShowCreateRepositoryStmt) stmt;
+
+ String repoName = showCreateRepositoryStmt.getRepoName();
+ List<List<String>> rows = Lists.newArrayList();
+
+ Repository repo =
Env.getCurrentEnv().getBackupHandler().getRepoMgr().getRepo(repoName);
+ if (repo == null) {
+ throw new AnalysisException("repository not exist.");
+ }
+ rows.add(Lists.newArrayList(repoName, repo.getCreateStatement()));
+ resultSet = new ShowResultSet(showCreateRepositoryStmt.getMetaData(),
rows);
+ }
+
private void handleShowCreateRoutineLoad() throws AnalysisException {
ShowCreateRoutineLoadStmt showCreateRoutineLoadStmt =
(ShowCreateRoutineLoadStmt) stmt;
List<List<String>> rows = Lists.newArrayList();
diff --git a/fe/fe-core/src/main/jflex/sql_scanner.flex
b/fe/fe-core/src/main/jflex/sql_scanner.flex
index 85cad5f058..41fb69a8f1 100644
--- a/fe/fe-core/src/main/jflex/sql_scanner.flex
+++ b/fe/fe-core/src/main/jflex/sql_scanner.flex
@@ -392,6 +392,7 @@ import org.apache.doris.qe.SqlModeHelper;
keywordMap.put("revoke", new Integer(SqlParserSymbols.KW_REVOKE));
keywordMap.put("right", new Integer(SqlParserSymbols.KW_RIGHT));
keywordMap.put("rlike", new Integer(SqlParserSymbols.KW_REGEXP));
+ keywordMap.put("repository", new
Integer(SqlParserSymbols.KW_REPOSITORY));
keywordMap.put("role", new Integer(SqlParserSymbols.KW_ROLE));
keywordMap.put("roles", new Integer(SqlParserSymbols.KW_ROLES));
keywordMap.put("rollback", new Integer(SqlParserSymbols.KW_ROLLBACK));
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]