fixed postgres tests

This commit is contained in:
2025-02-15 12:36:21 +01:00
parent 6e64ba99de
commit ec96c15905
16 changed files with 89 additions and 58 deletions
+24 -10
View File
@@ -183,6 +183,7 @@ std::string query_compiler::determine_value(value_visitor &visitor, const std::v
query_.bind_vars.emplace_back(std::string("value_") + std::to_string(query_.bind_vars.size() + 1));
return dialect_->next_placeholder(query_.bind_vars);
}
void query_compiler::visit(internal::query_values_part &values_part) {
query_.sql += " " + dialect_->token_at(sql::dialect_token::VALUES);
@@ -289,32 +290,45 @@ void query_compiler::visit(internal::query_drop_part &/*drop_part*/)
query_.sql = dialect_->token_at(sql::dialect_token::DROP);
}
std::string query_compiler::determine_set_value(internal::basic_type_to_string_visitor &visitor, const utils::database_type &val) {
if (data_->mode == query_mode::Direct) {
std::visit(visitor, val);
return visitor.result;
}
query_.bind_vars.emplace_back(std::string("value_") + std::to_string(query_.bind_vars.size() + 1));
return dialect_->next_placeholder(query_.bind_vars);
}
void query_compiler::visit(internal::query_set_part &set_part)
{
query_.sql += " " + dialect_->token_at(sql::dialect_token::SET) + " ";
attribute_string_writer writer(*dialect_, connection_);
internal::basic_type_to_string_visitor value_to_string(writer, query_);
internal::basic_type_to_string_visitor visitor(writer, query_);
std::string result;
if (set_part.key_values().size() < 2) {
for (const auto &col: set_part.key_values()) {
result.append(dialect_->prepare_identifier_string(col.name()) + "=");
auto var = col.value();
std::visit(value_to_string, var);
result.append(value_to_string.result);
result.append(determine_set_value(visitor, col.value()));
// auto var = col.value();
// std::visit(visitor, var);
// result.append(visitor.result);
}
} else {
auto it = set_part.key_values().begin();
result.append(dialect_->prepare_identifier_string(it->name()) + "=");
auto var = (it++)->value();
std::visit(value_to_string, var);
result.append(value_to_string.result);
result.append(determine_set_value(visitor, (it++)->value()));
// auto var = (it++)->value();
// std::visit(visitor, var);
// result.append(visitor.result);
for (; it != set_part.key_values().end(); ++it) {
result.append(", ");
result.append(dialect_->prepare_identifier_string(it->name()) + "=");
var = it->value();
std::visit(value_to_string, var);
result.append(value_to_string.result);
result.append(determine_set_value(visitor, it->value()));
// var = it->value();
// std::visit(visitor, var);
// result.append(visitor.result);
}
}