fixed PostgreSQL tests

This commit is contained in:
2026-01-01 17:08:20 +01:00
parent 7cb64515bd
commit a79d50e6e8
17 changed files with 230 additions and 329 deletions
+3 -109
View File
@@ -12,116 +12,10 @@ utils::error make_error(const error_code ec, const std::string &msg) {
return utils::error(ec, msg);
}
session::session(session_context&& ctx)
session::session(session_context&& ctx, const query::schema &scm)
: cache_(ctx.bus, ctx.pool, ctx.cache_size)
, dialect_(sql::backend_provider::instance().connection_dialect(ctx.pool.info().type))
, schema_(std::make_unique<query::schema>(dialect_.default_schema_name())) {
}
utils::result<void, utils::error> session::create_schema() const {
// Step 1: Build dependency graph
// std::unordered_map<std::string, std::vector<std::string> > dependency_graph;
// std::unordered_map<std::string, std::pair<int,object::repository::node_ptr>> in_degree;
// for (const auto &node: *schema_) {
// for (auto it = node->info().endpoint_begin(); it != node->info().endpoint_end(); ++it) {
// dependency_graph[node->name()].push_back(it->second->node().name());
//
// if (const auto dit = in_degree.find(it->second->node().name()); dit == in_degree.end()) {
// in_degree[it->second->node().name()] = std::make_pair(1, it->second->node_ptr());
// } else {
// in_degree[it->second->node().name()].first++;
// }
// }
//
// // Ensure the current node exists in the graph representation
// if (in_degree.find(node->name()) == in_degree.end()) {
// in_degree[node->name()] = std::make_pair(0, node);
// }
// }
//
// for (const auto &it : dependency_graph) {
// std::cout << "Dependency graph " << it.first << std::endl;
// for (const auto &neighbor: it.second) {
// std::cout << " " << neighbor << std::endl;
// }
// std::cout << std::endl;
// }
auto c = cache_.pool().acquire();
for (const auto &node: schema_->repo()) {
auto ctx = query::query::create()
.table(node->name())
.columns(node->info().attributes())
.compile(*c);
std::cout << ctx.sql << std::endl;
if (auto result = c->execute(ctx.sql); !result) {
return utils::failure(result.err());
}
}
// create table constraints
for (const auto &node: schema_->repo()) {
for (const auto& cons : node->info().constraints()) {
auto ctx = build_add_constraint_context(node->name(), cons, c);
std::cout << ctx.sql << std::endl;
if (auto result = c->execute(ctx.sql); !result) {
return utils::failure(result.err());
}
}
}
return utils::ok<void>();
}
sql::query_context session::build_add_constraint_context(const std::string& table_name, const class object::restriction& cons, const sql::connection_ptr &conn) {
if (cons.is_foreign_key_constraint()) {
return query::query::alter()
.table(table_name)
.add_constraint(cons)
.compile(*conn);
}
if (cons.is_primary_key_constraint()) {
return query::query::alter()
.table(table_name)
.add_constraint(cons)
.compile(*conn);
}
return {};
}
utils::result<void, utils::error> session::drop_schema() const {
auto c = cache_.pool().acquire();
// drop table constraints
for (const auto &node: schema_->repo()) {
for (const auto& cons : node->info().constraints()) {
auto ctx = query::query::alter()
.table(node->name())
.drop_constraint(cons)
.compile(*c);
std::cout << ctx.sql << std::endl;
if (auto result = c->execute(ctx.sql); !result) {
return utils::failure(result.err());
}
}
}
// drop table
for (const auto &node: schema_->repo()) {
auto ctx = query::query::drop()
.table(node->name())
.compile(*c);
std::cout << ctx.sql << std::endl;
if (auto result = c->execute(ctx.sql); !result) {
return utils::failure(result.err());
}
}
return utils::ok<void>();
, schema_(scm) {
}
utils::result<void, utils::error> session::drop_table(const std::string &table_name) const {
@@ -191,7 +85,7 @@ const class sql::dialect &session::dialect() const {
}
void session::dump_schema(std::ostream &os) const {
schema_->repo().dump(os);
schema_.repo().dump(os);
}
utils::result<std::unique_ptr<sql::query_result_impl>, utils::error> session::fetch(const sql::query_context& ctx) const {