Skip to content

Commit 871ee87

Browse files
committed
fix: cluster key use wrong index.
1 parent 95f1e61 commit 871ee87

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

src/query/sql/src/planner/expression_parser.rs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,30 @@ pub fn parse_cluster_keys(
395395
table_meta: Arc<dyn Table>,
396396
ast_exprs: Vec<AExpr>,
397397
) -> Result<Vec<Expr>> {
398-
let exprs = parse_ast_exprs(ctx, table_meta, ast_exprs)?;
398+
let schema = table_meta.schema();
399+
let (mut bind_context, metadata) = bind_table(table_meta)?;
400+
let settings = ctx.get_settings();
401+
let name_resolution_ctx = NameResolutionContext::try_from(settings.as_ref())?;
402+
let mut type_checker = TypeChecker::try_create(
403+
&mut bind_context,
404+
ctx,
405+
&name_resolution_ctx,
406+
metadata,
407+
&[],
408+
false,
409+
)?;
410+
411+
let exprs: Vec<Expr> = ast_exprs
412+
.iter()
413+
.map(|ast| {
414+
let (scalar, _) = *type_checker.resolve(ast)?;
415+
let expr = scalar
416+
.as_expr()?
417+
.project_column_ref(|col| schema.index_of(&col.column_name).unwrap());
418+
Ok(expr)
419+
})
420+
.collect::<Result<_>>()?;
421+
399422
let mut res = Vec::with_capacity(exprs.len());
400423
for expr in exprs {
401424
let inner_type = expr.data_type().remove_nullable();

src/query/storages/orc/src/copy_into_table/processors/decoder.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ impl StripeDecoderForCopy {
106106
display_name, id, ..
107107
} = expr
108108
{
109-
if display_name.starts_with("#!") {
109+
if let Some(display_name) = display_name.strip_prefix("#!") {
110110
let typs = match field.data_type() {
111111
DataType::Nullable(box DataType::Array(box DataType::Nullable(
112112
box DataType::Tuple(v),
@@ -116,7 +116,7 @@ impl StripeDecoderForCopy {
116116
unreachable!("expect value: array of tuple")
117117
}
118118
};
119-
let positions = display_name[2..]
119+
let positions = display_name
120120
.split(',')
121121
.map(|s| s.parse::<i32>().unwrap())
122122
.collect::<Vec<i32>>();

0 commit comments

Comments
 (0)