in fe/src/main/java/org/apache/impala/service/Frontend.java [625:952]
private void createCatalogOpRequest(AnalysisResult analysis, TExecRequest result)
throws InternalException {
TCatalogOpRequest ddl = new TCatalogOpRequest();
TResultSetMetadata metadata = new TResultSetMetadata();
if (analysis.isUseStmt()) {
ddl.op_type = TCatalogOpType.USE;
ddl.setUse_db_params(analysis.getUseStmt().toThrift());
metadata.setColumns(Collections.<TColumn>emptyList());
} else if (analysis.isShowTablesStmt()) {
ddl.op_type = TCatalogOpType.SHOW_TABLES;
ddl.setShow_tables_params(analysis.getShowTablesStmt().toThrift());
metadata.setColumns(Arrays.asList(
new TColumn("name", Type.STRING.toThrift())));
} else if (analysis.isShowMetadataTablesStmt()) {
ddl.op_type = TCatalogOpType.SHOW_METADATA_TABLES;
ddl.setShow_tables_params(analysis.getShowMetadataTablesStmt().toThrift());
metadata.setColumns(Arrays.asList(
new TColumn("name", Type.STRING.toThrift())));
} else if (analysis.isShowViewsStmt()) {
ddl.op_type = TCatalogOpType.SHOW_VIEWS;
ddl.setShow_tables_params(analysis.getShowViewsStmt().toThrift());
metadata.setColumns(Arrays.asList(
new TColumn("name", Type.STRING.toThrift())));
} else if (analysis.isShowDbsStmt()) {
ddl.op_type = TCatalogOpType.SHOW_DBS;
ddl.setShow_dbs_params(analysis.getShowDbsStmt().toThrift());
metadata.setColumns(Arrays.asList(
new TColumn("name", Type.STRING.toThrift()),
new TColumn("comment", Type.STRING.toThrift())));
} else if (analysis.isShowDataSrcsStmt()) {
ddl.op_type = TCatalogOpType.SHOW_DATA_SRCS;
ddl.setShow_data_srcs_params(analysis.getShowDataSrcsStmt().toThrift());
metadata.setColumns(Arrays.asList(
new TColumn("name", Type.STRING.toThrift()),
new TColumn("location", Type.STRING.toThrift()),
new TColumn("class name", Type.STRING.toThrift()),
new TColumn("api version", Type.STRING.toThrift())));
} else if (analysis.isShowStatsStmt()) {
ddl.op_type = TCatalogOpType.SHOW_STATS;
ddl.setShow_stats_params(analysis.getShowStatsStmt().toThrift());
metadata.setColumns(Arrays.asList(
new TColumn("name", Type.STRING.toThrift())));
} else if (analysis.isShowFunctionsStmt()) {
ddl.op_type = TCatalogOpType.SHOW_FUNCTIONS;
ShowFunctionsStmt stmt = (ShowFunctionsStmt)analysis.getStmt();
ddl.setShow_fns_params(stmt.toThrift());
metadata.setColumns(Arrays.asList(
new TColumn("return type", Type.STRING.toThrift()),
new TColumn("signature", Type.STRING.toThrift()),
new TColumn("binary type", Type.STRING.toThrift()),
new TColumn("is persistent", Type.STRING.toThrift())));
} else if (analysis.isShowCreateTableStmt()) {
ddl.op_type = TCatalogOpType.SHOW_CREATE_TABLE;
ddl.setShow_create_table_params(analysis.getShowCreateTableStmt().toThrift());
metadata.setColumns(Arrays.asList(
new TColumn("result", Type.STRING.toThrift())));
} else if (analysis.isShowCreateFunctionStmt()) {
ddl.op_type = TCatalogOpType.SHOW_CREATE_FUNCTION;
ddl.setShow_create_function_params(analysis.getShowCreateFunctionStmt().toThrift());
metadata.setColumns(Arrays.asList(
new TColumn("result", Type.STRING.toThrift())));
} else if (analysis.isShowFilesStmt()) {
ddl.op_type = TCatalogOpType.SHOW_FILES;
ddl.setShow_files_params(analysis.getShowFilesStmt().toThrift());
metadata.setColumns(Collections.<TColumn>emptyList());
} else if (analysis.isDescribeHistoryStmt()) {
ddl.op_type = TCatalogOpType.DESCRIBE_HISTORY;
ddl.setDescribe_history_params(analysis.getDescribeHistoryStmt().toThrift());
metadata.setColumns(Arrays.asList(
new TColumn("creation_time", Type.STRING.toThrift()),
new TColumn("snapshot_id", Type.STRING.toThrift()),
new TColumn("parent_id", Type.STRING.toThrift()),
new TColumn("is_current_ancestor", Type.STRING.toThrift())));
} else if (analysis.isDescribeDbStmt()) {
ddl.op_type = TCatalogOpType.DESCRIBE_DB;
ddl.setDescribe_db_params(analysis.getDescribeDbStmt().toThrift());
metadata.setColumns(Arrays.asList(
new TColumn("name", Type.STRING.toThrift()),
new TColumn("location", Type.STRING.toThrift()),
new TColumn("comment", Type.STRING.toThrift())));
} else if (analysis.isDescribeTableStmt()) {
ddl.op_type = TCatalogOpType.DESCRIBE_TABLE;
DescribeTableStmt descStmt = analysis.getDescribeTableStmt();
ddl.setDescribe_table_params(descStmt.toThrift());
List<TColumn> columns = Lists.newArrayList(
new TColumn("name", Type.STRING.toThrift()),
new TColumn("type", Type.STRING.toThrift()),
new TColumn("comment", Type.STRING.toThrift()));
if (descStmt.targetsTable()
&& descStmt.getOutputStyle() == TDescribeOutputStyle.MINIMAL) {
if (descStmt.getTable() instanceof FeKuduTable) {
columns.add(new TColumn("primary_key", Type.STRING.toThrift()));
columns.add(new TColumn("key_unique", Type.STRING.toThrift()));
columns.add(new TColumn("nullable", Type.STRING.toThrift()));
columns.add(new TColumn("default_value", Type.STRING.toThrift()));
columns.add(new TColumn("encoding", Type.STRING.toThrift()));
columns.add(new TColumn("compression", Type.STRING.toThrift()));
columns.add(new TColumn("block_size", Type.STRING.toThrift()));
} else if ((descStmt.getTable() instanceof FeIcebergTable
|| descStmt.getTable() instanceof IcebergMetadataTable)) {
columns.add(new TColumn("nullable", Type.STRING.toThrift()));
}
}
metadata.setColumns(columns);
} else if (analysis.isAlterTableStmt()) {
ddl.op_type = TCatalogOpType.DDL;
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(TDdlType.ALTER_TABLE);
req.setAlter_table_params(analysis.getAlterTableStmt().toThrift());
ddl.setDdl_params(req);
} else if (analysis.isAlterViewStmt()) {
ddl.op_type = TCatalogOpType.DDL;
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(TDdlType.ALTER_VIEW);
req.setAlter_view_params(analysis.getAlterViewStmt().toThrift());
ddl.setDdl_params(req);
} else if (analysis.isCreateTableStmt()) {
ddl.op_type = TCatalogOpType.DDL;
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(TDdlType.CREATE_TABLE);
req.setCreate_table_params(analysis.getCreateTableStmt().toThrift());
ddl.setDdl_params(req);
} else if (analysis.isCreateTableAsSelectStmt()) {
ddl.op_type = TCatalogOpType.DDL;
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(TDdlType.CREATE_TABLE_AS_SELECT);
req.setCreate_table_params(
analysis.getCreateTableAsSelectStmt().getCreateStmt().toThrift());
ddl.setDdl_params(req);
} else if (analysis.isCreateTableLikeStmt()) {
ddl.op_type = TCatalogOpType.DDL;
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(TDdlType.CREATE_TABLE_LIKE);
req.setCreate_table_like_params(analysis.getCreateTableLikeStmt().toThrift());
ddl.setDdl_params(req);
} else if (analysis.isCreateViewStmt()) {
ddl.op_type = TCatalogOpType.DDL;
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(TDdlType.CREATE_VIEW);
req.setCreate_view_params(analysis.getCreateViewStmt().toThrift());
ddl.setDdl_params(req);
} else if (analysis.isCreateDbStmt()) {
ddl.op_type = TCatalogOpType.DDL;
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(TDdlType.CREATE_DATABASE);
req.setCreate_db_params(analysis.getCreateDbStmt().toThrift());
ddl.setDdl_params(req);
} else if (analysis.isCreateUdfStmt()) {
ddl.op_type = TCatalogOpType.DDL;
CreateUdfStmt stmt = (CreateUdfStmt) analysis.getStmt();
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(TDdlType.CREATE_FUNCTION);
req.setCreate_fn_params(stmt.toThrift());
ddl.setDdl_params(req);
} else if (analysis.isCreateUdaStmt()) {
ddl.op_type = TCatalogOpType.DDL;
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(TDdlType.CREATE_FUNCTION);
CreateUdaStmt stmt = (CreateUdaStmt)analysis.getStmt();
req.setCreate_fn_params(stmt.toThrift());
ddl.setDdl_params(req);
} else if (analysis.isCreateDataSrcStmt()) {
ddl.op_type = TCatalogOpType.DDL;
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(TDdlType.CREATE_DATA_SOURCE);
CreateDataSrcStmt stmt = (CreateDataSrcStmt)analysis.getStmt();
req.setCreate_data_source_params(stmt.toThrift());
ddl.setDdl_params(req);
} else if (analysis.isComputeStatsStmt()) {
ddl.op_type = TCatalogOpType.DDL;
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(TDdlType.COMPUTE_STATS);
req.setCompute_stats_params(analysis.getComputeStatsStmt().toThrift());
ddl.setDdl_params(req);
} else if (analysis.isDropDbStmt()) {
ddl.op_type = TCatalogOpType.DDL;
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(TDdlType.DROP_DATABASE);
req.setDrop_db_params(analysis.getDropDbStmt().toThrift());
ddl.setDdl_params(req);
} else if (analysis.isDropTableOrViewStmt()) {
ddl.op_type = TCatalogOpType.DDL;
TDdlExecRequest req = new TDdlExecRequest();
DropTableOrViewStmt stmt = analysis.getDropTableOrViewStmt();
req.setDdl_type(stmt.isDropTable() ? TDdlType.DROP_TABLE : TDdlType.DROP_VIEW);
req.setDrop_table_or_view_params(stmt.toThrift());
ddl.setDdl_params(req);
} else if (analysis.isTruncateStmt()) {
ddl.op_type = TCatalogOpType.DDL;
TDdlExecRequest req = new TDdlExecRequest();
TruncateStmt stmt = analysis.getTruncateStmt();
req.setDdl_type(TDdlType.TRUNCATE_TABLE);
TTruncateParams truncateParams = stmt.toThrift();
TQueryOptions queryOptions = result.getQuery_options();
// if DELETE_STATS_IN_TRUNCATE option is unset forward it to catalogd
// so that it can skip deleting the statistics during truncate execution
if (!queryOptions.isDelete_stats_in_truncate()) {
truncateParams.setDelete_stats(false);
}
req.setTruncate_params(truncateParams);
ddl.setDdl_params(req);
} else if (analysis.isDropFunctionStmt()) {
ddl.op_type = TCatalogOpType.DDL;
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(TDdlType.DROP_FUNCTION);
DropFunctionStmt stmt = (DropFunctionStmt)analysis.getStmt();
req.setDrop_fn_params(stmt.toThrift());
ddl.setDdl_params(req);
} else if (analysis.isDropDataSrcStmt()) {
ddl.op_type = TCatalogOpType.DDL;
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(TDdlType.DROP_DATA_SOURCE);
DropDataSrcStmt stmt = (DropDataSrcStmt)analysis.getStmt();
req.setDrop_data_source_params(stmt.toThrift());
ddl.setDdl_params(req);
} else if (analysis.isDropStatsStmt()) {
ddl.op_type = TCatalogOpType.DDL;
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(TDdlType.DROP_STATS);
DropStatsStmt stmt = (DropStatsStmt) analysis.getStmt();
req.setDrop_stats_params(stmt.toThrift());
ddl.setDdl_params(req);
} else if (analysis.isResetMetadataStmt()) {
ddl.op_type = TCatalogOpType.RESET_METADATA;
ResetMetadataStmt resetMetadataStmt = (ResetMetadataStmt) analysis.getStmt();
TResetMetadataRequest req = resetMetadataStmt.toThrift();
ddl.setReset_metadata_params(req);
metadata.setColumns(Collections.emptyList());
} else if (analysis.isShowRolesStmt()) {
ddl.op_type = TCatalogOpType.SHOW_ROLES;
ShowRolesStmt showRolesStmt = (ShowRolesStmt) analysis.getStmt();
ddl.setShow_roles_params(showRolesStmt.toThrift());
metadata.setColumns(Arrays.asList(
new TColumn("role_name", Type.STRING.toThrift())));
} else if (analysis.isShowGrantPrincipalStmt()) {
ddl.op_type = TCatalogOpType.SHOW_GRANT_PRINCIPAL;
ShowGrantPrincipalStmt showGrantPrincipalStmt =
(ShowGrantPrincipalStmt) analysis.getStmt();
ddl.setShow_grant_principal_params(showGrantPrincipalStmt.toThrift());
metadata.setColumns(Arrays.asList(new TColumn("name", Type.STRING.toThrift())));
} else if (analysis.isCreateDropRoleStmt()) {
CreateDropRoleStmt createDropRoleStmt = (CreateDropRoleStmt) analysis.getStmt();
TCreateDropRoleParams params = createDropRoleStmt.toThrift();
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(params.isIs_drop() ? TDdlType.DROP_ROLE : TDdlType.CREATE_ROLE);
req.setCreate_drop_role_params(params);
ddl.op_type = TCatalogOpType.DDL;
ddl.setDdl_params(req);
} else if (analysis.isGrantRevokeRoleStmt()) {
GrantRevokeRoleStmt grantRoleStmt = (GrantRevokeRoleStmt) analysis.getStmt();
TGrantRevokeRoleParams params = grantRoleStmt.toThrift();
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(params.isIs_grant() ? TDdlType.GRANT_ROLE : TDdlType.REVOKE_ROLE);
req.setGrant_revoke_role_params(params);
ddl.op_type = TCatalogOpType.DDL;
ddl.setDdl_params(req);
} else if (analysis.isGrantRevokePrivStmt()) {
GrantRevokePrivStmt grantRevokePrivStmt = (GrantRevokePrivStmt) analysis.getStmt();
TGrantRevokePrivParams params = grantRevokePrivStmt.toThrift();
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(params.isIs_grant() ?
TDdlType.GRANT_PRIVILEGE : TDdlType.REVOKE_PRIVILEGE);
req.setGrant_revoke_priv_params(params);
ddl.op_type = TCatalogOpType.DDL;
ddl.setDdl_params(req);
} else if (analysis.isCommentOnStmt()) {
CommentOnStmt commentOnStmt = analysis.getCommentOnStmt();
TCommentOnParams params = commentOnStmt.toThrift();
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(TDdlType.COMMENT_ON);
req.setComment_on_params(params);
ddl.op_type = TCatalogOpType.DDL;
ddl.setDdl_params(req);
} else if (analysis.isAlterDbStmt()) {
AlterDbStmt alterDbStmt = analysis.getAlterDbStmt();
TAlterDbParams params = alterDbStmt.toThrift();
TDdlExecRequest req = new TDdlExecRequest();
req.setDdl_type(TDdlType.ALTER_DATABASE);
req.setAlter_db_params(params);
ddl.op_type = TCatalogOpType.DDL;
ddl.setDdl_params(req);
} else if (analysis.isTestCaseStmt()){
CopyTestCaseStmt stmt = (CopyTestCaseStmt) analysis.getStmt();
TCopyTestCaseReq req = new TCopyTestCaseReq(stmt.getHdfsPath());
TDdlExecRequest ddlReq = new TDdlExecRequest();
ddlReq.setCopy_test_case_params(req);
ddlReq.setDdl_type(TDdlType.COPY_TESTCASE);
ddl.op_type = TCatalogOpType.DDL;
ddl.setDdl_params(ddlReq);
} else {
throw new IllegalStateException("Unexpected CatalogOp statement type.");
}
// All DDL commands return a string summarizing the outcome of the DDL.
if (ddl.op_type == TCatalogOpType.DDL) {
metadata.setColumns(Arrays.asList(new TColumn("summary", Type.STRING.toThrift())));
}
result.setResult_set_metadata(metadata);
ddl.setSync_ddl(result.getQuery_options().isSync_ddl());
result.setCatalog_op_request(ddl);
if (ddl.getOp_type() == TCatalogOpType.DDL) {
TCatalogServiceRequestHeader header = createCatalogServiceRequestHeader(
analysis.getAnalyzer().getUser().getName(),
analysis.getAnalyzer().getQueryCtx());
ddl.getDdl_params().setHeader(header);
// Forward relevant query options to the catalogd.
TDdlQueryOptions ddlQueryOpts = new TDdlQueryOptions();
ddlQueryOpts.setSync_ddl(result.getQuery_options().isSync_ddl());
if (result.getQuery_options().isSetDebug_action()) {
ddlQueryOpts.setDebug_action(result.getQuery_options().getDebug_action());
}
ddlQueryOpts.setLock_max_wait_time_s(
result.getQuery_options().lock_max_wait_time_s);
ddlQueryOpts.setKudu_table_reserve_seconds(
result.getQuery_options().kudu_table_reserve_seconds);
ddl.getDdl_params().setQuery_options(ddlQueryOpts);
} else if (ddl.getOp_type() == TCatalogOpType.RESET_METADATA) {
ddl.getReset_metadata_params().setSync_ddl(ddl.isSync_ddl());
ddl.getReset_metadata_params().setRefresh_updated_hms_partitions(
result.getQuery_options().isRefresh_updated_hms_partitions());
ddl.getReset_metadata_params().getHeader().setWant_minimal_response(
BackendConfig.INSTANCE.getBackendCfg().use_local_catalog);
// forward debug_actions to the catalogd
if (result.getQuery_options().isSetDebug_action()) {
ddl.getReset_metadata_params()
.setDebug_action(result.getQuery_options().getDebug_action());
}
}
}