Skip to content

Commit 805b93e

Browse files
committed
Fix: should render result set at last of select.
1 parent 8ee640d commit 805b93e

File tree

5 files changed

+21
-7
lines changed

5 files changed

+21
-7
lines changed

src/query/service/src/interpreters/interpreter_insert_v2.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,12 +204,15 @@ impl InsertInterpreterV2 {
204204
catalog: String,
205205
table: Arc<dyn Table>,
206206
) -> Result<SendableDataBlockStream> {
207-
let inner_plan = match plan {
207+
let (inner_plan, select_column_bindings) = match plan {
208208
Plan::Query {
209-
s_expr, metadata, ..
209+
s_expr,
210+
metadata,
211+
bind_context,
212+
..
210213
} => {
211214
let builder = PhysicalPlanBuilder::new(metadata.clone(), self.ctx.clone());
212-
builder.build(s_expr).await?
215+
(builder.build(s_expr).await?, bind_context.columns.clone())
213216
}
214217
_ => unreachable!(),
215218
};
@@ -222,6 +225,7 @@ impl InsertInterpreterV2 {
222225
catalog,
223226
table_info: table.get_table_info().clone(),
224227
select_schema: plan.schema(),
228+
select_column_bindings,
225229
insert_schema: self.plan.schema(),
226230
cast_needed: self.check_schema_cast(plan)?,
227231
}));

src/query/service/src/sql/executor/physical_plan.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ use super::AggregateFunctionDesc;
3434
use super::SortDesc;
3535
use crate::sql::optimizer::ColumnSet;
3636
use crate::sql::plans::JoinType;
37+
use crate::sql::ColumnBinding;
3738
use crate::sql::IndexType;
3839

3940
pub type ColumnID = String;
@@ -312,6 +313,7 @@ pub struct DistributedInsertSelect {
312313
pub table_info: TableInfo,
313314
pub insert_schema: DataSchemaRef,
314315
pub select_schema: DataSchemaRef,
316+
pub select_column_bindings: Vec<ColumnBinding>,
315317
pub cast_needed: bool,
316318
}
317319

src/query/service/src/sql/executor/physical_plan_visitor.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ pub trait PhysicalPlanReplacer {
187187
table_info: plan.table_info.clone(),
188188
select_schema: plan.select_schema.clone(),
189189
insert_schema: plan.insert_schema.clone(),
190+
select_column_bindings: plan.select_column_bindings.clone(),
190191
cast_needed: plan.cast_needed,
191192
},
192193
)))

src/query/service/src/sql/executor/pipeline_builder.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -540,10 +540,17 @@ impl PipelineBuilder {
540540
let insert_schema = &insert_select.insert_schema;
541541

542542
self.build_pipeline(&insert_select.input)?;
543+
544+
// should render result for select
545+
PipelineBuilder::render_result_set(
546+
insert_select.input.output_schema()?,
547+
&insert_select.select_column_bindings,
548+
&mut self.main_pipeline,
549+
)?;
550+
543551
if insert_select.cast_needed {
544552
let mut functions = Vec::with_capacity(insert_schema.fields().len());
545-
for (target_field, original_field) in insert_select
546-
.insert_schema
553+
for (target_field, original_field) in insert_schema
547554
.fields()
548555
.iter()
549556
.zip(select_schema.fields().iter())

src/query/service/src/sql/planner/binder/bind_context.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ use crate::sql::optimizer::SExpr;
3434
use crate::sql::plans::Scalar;
3535
use crate::sql::NameResolutionContext;
3636

37-
#[derive(Clone, Debug, Eq, PartialEq)]
37+
#[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
3838
pub enum Visibility {
3939
// Default for a column
4040
Visible,
@@ -46,7 +46,7 @@ pub enum Visibility {
4646
UnqualifiedWildcardInVisible,
4747
}
4848

49-
#[derive(Clone, Debug)]
49+
#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
5050
pub struct ColumnBinding {
5151
/// Database name of this `ColumnBinding` in current context
5252
pub database_name: Option<String>,

0 commit comments

Comments
 (0)