1#include "duckdb/parser/expression/collate_expression.hpp"
2#include "duckdb/planner/expression/bound_parameter_expression.hpp"
3#include "duckdb/planner/expression_binder.hpp"
4
5namespace duckdb {
6
7BindResult ExpressionBinder::BindExpression(CollateExpression &expr, idx_t depth) {
8 // first try to bind the child of the cast expression
9 string error = Bind(expr&: expr.child, depth);
10 if (!error.empty()) {
11 return BindResult(error);
12 }
13 auto &child = BoundExpression::GetExpression(expr&: *expr.child);
14 if (child->HasParameter()) {
15 throw ParameterNotResolvedException();
16 }
17 if (child->return_type.id() != LogicalTypeId::VARCHAR) {
18 throw BinderException("collations are only supported for type varchar");
19 }
20 // Validate the collation, but don't use it
21 PushCollation(context, source: child->Copy(), collation: expr.collation, equality_only: false);
22 child->return_type = LogicalType::VARCHAR_COLLATION(collation: expr.collation);
23 return BindResult(std::move(child));
24}
25
26} // namespace duckdb
27