diff --git a/core/translate/aggregation.rs b/core/translate/aggregation.rs index fe38bb606..bf6347a20 100644 --- a/core/translate/aggregation.rs +++ b/core/translate/aggregation.rs @@ -337,17 +337,7 @@ pub fn translate_aggregation_step( } let delimiter_reg = if num_args == 2 { - match &agg_arg_source.arg_at(1) { - ast::Expr::Column { .. } => { - agg_arg_source.translate(program, referenced_tables, resolver, 1)? - } - ast::Expr::Literal(ast::Literal::String(s)) => { - let delimiter_expr = - ast::Expr::Literal(ast::Literal::String(s.to_string())); - translate_const_arg(program, referenced_tables, resolver, &delimiter_expr)? - } - _ => crate::bail_parse_error!("Incorrect delimiter parameter"), - } + agg_arg_source.translate(program, referenced_tables, resolver, 1)? } else { let delimiter_expr = ast::Expr::Literal(ast::Literal::String(String::from("\",\""))); @@ -435,18 +425,9 @@ pub fn translate_aggregation_step( crate::bail_parse_error!("string_agg bad number of arguments"); } - let delimiter_reg = match &agg_arg_source.arg_at(1) { - ast::Expr::Column { .. } => { - agg_arg_source.translate(program, referenced_tables, resolver, 1)? - } - ast::Expr::Literal(ast::Literal::String(s)) => { - let delimiter_expr = ast::Expr::Literal(ast::Literal::String(s.to_string())); - translate_const_arg(program, referenced_tables, resolver, &delimiter_expr)? - } - _ => crate::bail_parse_error!("Incorrect delimiter parameter"), - }; - let expr_reg = agg_arg_source.translate(program, referenced_tables, resolver, 0)?; + let delimiter_reg = + agg_arg_source.translate(program, referenced_tables, resolver, 1)?; program.emit_insn(Insn::AggStep { acc_reg: target_register, diff --git a/testing/agg-functions.test b/testing/agg-functions.test index 67ec65cdd..17732b699 100755 --- a/testing/agg-functions.test +++ b/testing/agg-functions.test @@ -84,6 +84,10 @@ do_execsql_test select-group-concat-with-delimiter { SELECT group_concat(name, ';') FROM products; } {hat;cap;shirt;sweater;sweatshirt;shorts;jeans;sneakers;boots;coat;accessories} +do_execsql_test select-group-concat-with-delimiter-expression { + SELECT group_concat(name, ';' || '|') FROM products; +} {hat;|cap;|shirt;|sweater;|sweatshirt;|shorts;|jeans;|sneakers;|boots;|coat;|accessories} + do_execsql_test select-group-concat-with-column-delimiter { SELECT group_concat(name, id) FROM products; } {hat2cap3shirt4sweater5sweatshirt6shorts7jeans8sneakers9boots10coat11accessories} @@ -96,6 +100,10 @@ do_execsql_test select-string-agg-with-delimiter { SELECT string_agg(name, ',') FROM products; } {hat,cap,shirt,sweater,sweatshirt,shorts,jeans,sneakers,boots,coat,accessories} +do_execsql_test select-string-agg-with-delimiter-expression { + SELECT string_agg(name, ';' || '|') FROM products; +} {hat;|cap;|shirt;|sweater;|sweatshirt;|shorts;|jeans;|sneakers;|boots;|coat;|accessories} + do_execsql_test select-string-agg-with-column-delimiter { SELECT string_agg(name, id) FROM products; } {hat2cap3shirt4sweater5sweatshirt6shorts7jeans8sneakers9boots10coat11accessories}