fixed postgres tests
This commit is contained in:
@@ -30,13 +30,20 @@ utils::result<void, utils::error> session::create_schema() const {
|
||||
return utils::ok<void>();
|
||||
}
|
||||
|
||||
void session::drop_table(const std::string &table_name) const {
|
||||
utils::result<void, utils::error> session::drop_table(const std::string &table_name) const {
|
||||
auto c = pool_.acquire();
|
||||
if (!c.valid()) {
|
||||
throw std::logic_error("no database connection available");
|
||||
}
|
||||
|
||||
// c->query(*schema_).drop().table(table_name).execute();
|
||||
auto result = query::query::drop()
|
||||
.table(table_name)
|
||||
.execute(*c);
|
||||
if (result.is_error()) {
|
||||
return utils::failure(result.err());
|
||||
}
|
||||
|
||||
return utils::ok<void>();
|
||||
}
|
||||
|
||||
utils::result<sql::query_result<sql::record>, utils::error> session::fetch(const sql::query_context &q) const
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user