mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-06-02 13:20:40 +00:00
refactor: remove session from common meta (#7698)
* refactor: remove session dependency from common-meta * chore: add udeps * chore: format * fix: lint issues * chore: update oneshot * chore: update unused deps
This commit is contained in:
@@ -849,6 +849,15 @@ pub enum Error {
|
||||
location: Location,
|
||||
},
|
||||
|
||||
#[snafu(display("Invalid timezone: {}", timezone))]
|
||||
InvalidTimezone {
|
||||
timezone: String,
|
||||
#[snafu(source)]
|
||||
source: common_time::error::Error,
|
||||
#[snafu(implicit)]
|
||||
location: Location,
|
||||
},
|
||||
|
||||
#[snafu(display("Invalid process id: {}", id))]
|
||||
InvalidProcessId { id: String },
|
||||
|
||||
@@ -1031,7 +1040,9 @@ impl ErrorExt for Error {
|
||||
Error::ColumnOptions { source, .. } => source.status_code(),
|
||||
Error::DecodeFlightData { source, .. } => source.status_code(),
|
||||
Error::ComputeArrow { .. } => StatusCode::Internal,
|
||||
Error::InvalidTimeIndexType { .. } => StatusCode::InvalidArguments,
|
||||
Error::InvalidTimeIndexType { .. } | Error::InvalidTimezone { .. } => {
|
||||
StatusCode::InvalidArguments
|
||||
}
|
||||
Error::InvalidProcessId { .. } => StatusCode::InvalidArguments,
|
||||
Error::ProcessManagerMissing { .. } => StatusCode::Unexpected,
|
||||
Error::PathNotFound { .. } => StatusCode::InvalidArguments,
|
||||
|
||||
@@ -25,6 +25,8 @@ use futures::stream::FuturesUnordered;
|
||||
use session::context::QueryContextRef;
|
||||
use snafu::{OptionExt, ResultExt};
|
||||
|
||||
use crate::utils::to_meta_query_context;
|
||||
|
||||
/// The operator for flow service which implements [`FlowServiceHandler`].
|
||||
pub struct FlowServiceOperator {
|
||||
flow_metadata_manager: FlowMetadataManagerRef,
|
||||
@@ -105,9 +107,7 @@ impl FlowServiceOperator {
|
||||
let flush_req = FlowRequest {
|
||||
header: Some(FlowRequestHeader {
|
||||
tracing_context: TracingContext::from_current_span().to_w3c(),
|
||||
query_context: Some(
|
||||
common_meta::rpc::ddl::QueryContext::from(ctx.clone()).into(),
|
||||
),
|
||||
query_context: Some(to_meta_query_context(ctx.clone()).into()),
|
||||
}),
|
||||
body: Some(flow_request::Body::Flush(FlushFlow {
|
||||
flow_id: Some(api::v1::FlowId { id }),
|
||||
|
||||
@@ -30,3 +30,4 @@ pub mod statement;
|
||||
pub mod table;
|
||||
#[cfg(test)]
|
||||
pub(crate) mod tests;
|
||||
pub mod utils;
|
||||
|
||||
@@ -25,6 +25,7 @@ use sql::statements::comment::{Comment, CommentObject};
|
||||
|
||||
use crate::error::{ExecuteDdlSnafu, ExternalSnafu, InvalidSqlSnafu, Result};
|
||||
use crate::statement::StatementExecutor;
|
||||
use crate::utils::to_meta_query_context;
|
||||
|
||||
impl StatementExecutor {
|
||||
/// Adds a comment to a database object (table, column, or flow).
|
||||
@@ -40,8 +41,10 @@ impl StatementExecutor {
|
||||
pub async fn comment(&self, stmt: Comment, query_ctx: QueryContextRef) -> Result<Output> {
|
||||
let comment_on_task = self.create_comment_on_task_from_stmt(stmt, &query_ctx)?;
|
||||
|
||||
let request =
|
||||
SubmitDdlTaskRequest::new(query_ctx, DdlTask::new_comment_on(comment_on_task));
|
||||
let request = SubmitDdlTaskRequest::new(
|
||||
to_meta_query_context(query_ctx),
|
||||
DdlTask::new_comment_on(comment_on_task),
|
||||
);
|
||||
|
||||
self.procedure_executor
|
||||
.submit_ddl_task(&ExecutorContext::default(), request)
|
||||
@@ -57,8 +60,10 @@ impl StatementExecutor {
|
||||
) -> Result<Output> {
|
||||
let comment_on_task = self.create_comment_on_task_from_expr(expr)?;
|
||||
|
||||
let request =
|
||||
SubmitDdlTaskRequest::new(query_ctx, DdlTask::new_comment_on(comment_on_task));
|
||||
let request = SubmitDdlTaskRequest::new(
|
||||
to_meta_query_context(query_ctx),
|
||||
DdlTask::new_comment_on(comment_on_task),
|
||||
);
|
||||
|
||||
self.procedure_executor
|
||||
.submit_ddl_task(&ExecutorContext::default(), request)
|
||||
|
||||
@@ -104,6 +104,7 @@ use crate::error::{
|
||||
use crate::expr_helper::{self, RepartitionRequest};
|
||||
use crate::statement::StatementExecutor;
|
||||
use crate::statement::show::create_partitions_stmt;
|
||||
use crate::utils::to_meta_query_context;
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
struct DdlSubmitOptions {
|
||||
@@ -590,7 +591,10 @@ impl StatementExecutor {
|
||||
})
|
||||
.context(error::InvalidExprSnafu)?;
|
||||
|
||||
let request = SubmitDdlTaskRequest::new(query_context, DdlTask::new_create_trigger(task));
|
||||
let request = SubmitDdlTaskRequest::new(
|
||||
to_meta_query_context(query_context),
|
||||
DdlTask::new_create_trigger(task),
|
||||
);
|
||||
|
||||
self.procedure_executor
|
||||
.submit_ddl_task(&ExecutorContext::default(), request)
|
||||
@@ -640,7 +644,10 @@ impl StatementExecutor {
|
||||
create_flow: Some(expr),
|
||||
})
|
||||
.context(error::InvalidExprSnafu)?;
|
||||
let request = SubmitDdlTaskRequest::new(query_context, DdlTask::new_create_flow(task));
|
||||
let request = SubmitDdlTaskRequest::new(
|
||||
to_meta_query_context(query_context),
|
||||
DdlTask::new_create_flow(task),
|
||||
);
|
||||
|
||||
self.procedure_executor
|
||||
.submit_ddl_task(&ExecutorContext::default(), request)
|
||||
@@ -935,8 +942,10 @@ impl StatementExecutor {
|
||||
table_type: TableType::View,
|
||||
};
|
||||
|
||||
let request =
|
||||
SubmitDdlTaskRequest::new(ctx, DdlTask::new_create_view(expr, view_info.clone()));
|
||||
let request = SubmitDdlTaskRequest::new(
|
||||
to_meta_query_context(ctx),
|
||||
DdlTask::new_create_view(expr, view_info.clone()),
|
||||
);
|
||||
|
||||
let resp = self
|
||||
.procedure_executor
|
||||
@@ -1019,7 +1028,10 @@ impl StatementExecutor {
|
||||
expr: DropFlowTask,
|
||||
query_context: QueryContextRef,
|
||||
) -> Result<SubmitDdlTaskResponse> {
|
||||
let request = SubmitDdlTaskRequest::new(query_context, DdlTask::new_drop_flow(expr));
|
||||
let request = SubmitDdlTaskRequest::new(
|
||||
to_meta_query_context(query_context),
|
||||
DdlTask::new_drop_flow(expr),
|
||||
);
|
||||
|
||||
self.procedure_executor
|
||||
.submit_ddl_task(&ExecutorContext::default(), request)
|
||||
@@ -1051,7 +1063,10 @@ impl StatementExecutor {
|
||||
expr: DropTriggerTask,
|
||||
query_context: QueryContextRef,
|
||||
) -> Result<SubmitDdlTaskResponse> {
|
||||
let request = SubmitDdlTaskRequest::new(query_context, DdlTask::new_drop_trigger(expr));
|
||||
let request = SubmitDdlTaskRequest::new(
|
||||
to_meta_query_context(query_context),
|
||||
DdlTask::new_drop_trigger(expr),
|
||||
);
|
||||
|
||||
self.procedure_executor
|
||||
.submit_ddl_task(&ExecutorContext::default(), request)
|
||||
@@ -1116,7 +1131,10 @@ impl StatementExecutor {
|
||||
expr: DropViewTask,
|
||||
query_context: QueryContextRef,
|
||||
) -> Result<SubmitDdlTaskResponse> {
|
||||
let request = SubmitDdlTaskRequest::new(query_context, DdlTask::new_drop_view(expr));
|
||||
let request = SubmitDdlTaskRequest::new(
|
||||
to_meta_query_context(query_context),
|
||||
DdlTask::new_drop_view(expr),
|
||||
);
|
||||
|
||||
self.procedure_executor
|
||||
.submit_ddl_task(&ExecutorContext::default(), request)
|
||||
@@ -1499,7 +1517,7 @@ impl StatementExecutor {
|
||||
let from_partition_exprs_json = serialize_exprs(from_partition_exprs)?;
|
||||
let into_partition_exprs_json = serialize_exprs(into_partition_exprs)?;
|
||||
let mut req = SubmitDdlTaskRequest::new(
|
||||
query_context.clone(),
|
||||
to_meta_query_context(query_context.clone()),
|
||||
DdlTask::new_alter_table(AlterTableExpr {
|
||||
catalog_name: request.catalog_name.clone(),
|
||||
schema_name: request.schema_name.clone(),
|
||||
@@ -1613,7 +1631,10 @@ impl StatementExecutor {
|
||||
|
||||
let (req, invalidate_keys) = if physical_table_id == table_id {
|
||||
// This is physical table
|
||||
let req = SubmitDdlTaskRequest::new(query_context, DdlTask::new_alter_table(expr));
|
||||
let req = SubmitDdlTaskRequest::new(
|
||||
to_meta_query_context(query_context),
|
||||
DdlTask::new_alter_table(expr),
|
||||
);
|
||||
|
||||
let invalidate_keys = vec![
|
||||
CacheIdent::TableId(table_id),
|
||||
@@ -1624,7 +1645,7 @@ impl StatementExecutor {
|
||||
} else {
|
||||
// This is logical table
|
||||
let req = SubmitDdlTaskRequest::new(
|
||||
query_context,
|
||||
to_meta_query_context(query_context),
|
||||
DdlTask::new_alter_logical_tables(vec![expr]),
|
||||
);
|
||||
|
||||
@@ -1745,7 +1766,7 @@ impl StatementExecutor {
|
||||
.collect::<Result<Vec<_>>>()?;
|
||||
|
||||
let request = SubmitDdlTaskRequest::new(
|
||||
query_context,
|
||||
to_meta_query_context(query_context),
|
||||
DdlTask::new_create_table(create_table, partitions, table_info),
|
||||
);
|
||||
|
||||
@@ -1761,7 +1782,7 @@ impl StatementExecutor {
|
||||
query_context: QueryContextRef,
|
||||
) -> Result<SubmitDdlTaskResponse> {
|
||||
let request = SubmitDdlTaskRequest::new(
|
||||
query_context,
|
||||
to_meta_query_context(query_context),
|
||||
DdlTask::new_create_logical_tables(tables_data),
|
||||
);
|
||||
|
||||
@@ -1777,7 +1798,7 @@ impl StatementExecutor {
|
||||
query_context: QueryContextRef,
|
||||
) -> Result<SubmitDdlTaskResponse> {
|
||||
let request = SubmitDdlTaskRequest::new(
|
||||
query_context,
|
||||
to_meta_query_context(query_context),
|
||||
DdlTask::new_alter_logical_tables(tables_data),
|
||||
);
|
||||
|
||||
@@ -1795,7 +1816,7 @@ impl StatementExecutor {
|
||||
query_context: QueryContextRef,
|
||||
) -> Result<SubmitDdlTaskResponse> {
|
||||
let request = SubmitDdlTaskRequest::new(
|
||||
query_context,
|
||||
to_meta_query_context(query_context),
|
||||
DdlTask::new_drop_table(
|
||||
table_name.catalog_name.clone(),
|
||||
table_name.schema_name.clone(),
|
||||
@@ -1819,7 +1840,7 @@ impl StatementExecutor {
|
||||
query_context: QueryContextRef,
|
||||
) -> Result<SubmitDdlTaskResponse> {
|
||||
let request = SubmitDdlTaskRequest::new(
|
||||
query_context,
|
||||
to_meta_query_context(query_context),
|
||||
DdlTask::new_drop_database(catalog, schema, drop_if_exists),
|
||||
);
|
||||
|
||||
@@ -1834,8 +1855,10 @@ impl StatementExecutor {
|
||||
alter_expr: AlterDatabaseExpr,
|
||||
query_context: QueryContextRef,
|
||||
) -> Result<SubmitDdlTaskResponse> {
|
||||
let request =
|
||||
SubmitDdlTaskRequest::new(query_context, DdlTask::new_alter_database(alter_expr));
|
||||
let request = SubmitDdlTaskRequest::new(
|
||||
to_meta_query_context(query_context),
|
||||
DdlTask::new_alter_database(alter_expr),
|
||||
);
|
||||
|
||||
self.procedure_executor
|
||||
.submit_ddl_task(&ExecutorContext::default(), request)
|
||||
@@ -1851,7 +1874,7 @@ impl StatementExecutor {
|
||||
query_context: QueryContextRef,
|
||||
) -> Result<SubmitDdlTaskResponse> {
|
||||
let request = SubmitDdlTaskRequest::new(
|
||||
query_context,
|
||||
to_meta_query_context(query_context),
|
||||
DdlTask::new_truncate_table(
|
||||
table_name.catalog_name.clone(),
|
||||
table_name.schema_name.clone(),
|
||||
@@ -1923,7 +1946,7 @@ impl StatementExecutor {
|
||||
query_context: QueryContextRef,
|
||||
) -> Result<SubmitDdlTaskResponse> {
|
||||
let request = SubmitDdlTaskRequest::new(
|
||||
query_context,
|
||||
to_meta_query_context(query_context),
|
||||
DdlTask::new_create_database(catalog, database, create_if_not_exists, options),
|
||||
);
|
||||
|
||||
|
||||
47
src/operator/src/utils.rs
Normal file
47
src/operator/src/utils.rs
Normal file
@@ -0,0 +1,47 @@
|
||||
// Copyright 2023 Greptime Team
|
||||
//
|
||||
// Licensed 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.
|
||||
|
||||
use common_time::Timezone;
|
||||
use session::context::{QueryContextBuilder, QueryContextRef};
|
||||
use snafu::ResultExt;
|
||||
|
||||
use crate::error::{Error, InvalidTimezoneSnafu};
|
||||
|
||||
pub fn to_meta_query_context(
|
||||
query_context: QueryContextRef,
|
||||
) -> common_meta::rpc::ddl::QueryContext {
|
||||
common_meta::rpc::ddl::QueryContext {
|
||||
current_catalog: query_context.current_catalog().to_string(),
|
||||
current_schema: query_context.current_schema().clone(),
|
||||
timezone: query_context.timezone().to_string(),
|
||||
extensions: query_context.extensions(),
|
||||
channel: query_context.channel() as u8,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn try_to_session_query_context(
|
||||
value: common_meta::rpc::ddl::QueryContext,
|
||||
) -> Result<session::context::QueryContext, Error> {
|
||||
Ok(QueryContextBuilder::default()
|
||||
.current_catalog(value.current_catalog)
|
||||
.current_schema(value.current_schema)
|
||||
.timezone(
|
||||
Timezone::from_tz_string(&value.timezone).context(InvalidTimezoneSnafu {
|
||||
timezone: value.timezone,
|
||||
})?,
|
||||
)
|
||||
.extensions(value.extensions)
|
||||
.channel((value.channel as u32).into())
|
||||
.build())
|
||||
}
|
||||
Reference in New Issue
Block a user