session and insert query builder progress
This commit is contained in:
@@ -114,10 +114,24 @@ utils::result<object::object_ptr<Type>, utils::error> session::insert(object::ob
|
||||
|
||||
// Execute all steps; for Identity steps read RETURNING and write pk back into the object
|
||||
for (query::insert_step &step : *steps) {
|
||||
if (step.pk_generator == utils::generator_type::Sequence || step.pk_generator == utils::generator_type::Table) {
|
||||
auto result = it->second.pk_generator().next_id(*this);
|
||||
if (!result.is_ok()) {
|
||||
return utils::failure(result.err());
|
||||
}
|
||||
step.apply_primary_key(utils::identifier{*result});
|
||||
}
|
||||
|
||||
auto stmt = cache_.acquire(step.ctx);
|
||||
if (!stmt.is_ok()) {
|
||||
return utils::failure(stmt.err());
|
||||
}
|
||||
|
||||
auto result = step.acquire_and_bind(cache_);
|
||||
if (!result.is_ok()) {
|
||||
return utils::failure(result.err());
|
||||
}
|
||||
|
||||
if (step.pk_generator == utils::generator_type::Identity) {
|
||||
// insert and read RETURNING
|
||||
auto record = stmt->fetch_one();
|
||||
@@ -128,20 +142,7 @@ utils::result<object::object_ptr<Type>, utils::error> session::insert(object::ob
|
||||
return utils::failure(make_error(error_code::FailedToFindObject, "Failed to insert object and retrieve identity."));
|
||||
}
|
||||
step.apply_returning(*record.value());
|
||||
} else if (step.pk_generator == utils::generator_type::Sequence || step.pk_generator == utils::generator_type::Table) {
|
||||
auto result = it->second.pk_generator().next_id(*this);
|
||||
if (!result.is_ok()) {
|
||||
return utils::failure(result.err());
|
||||
}
|
||||
step.apply_primary_key(utils::identifier{*result});
|
||||
}
|
||||
|
||||
auto result = step.acquire_and_bind(cache_);
|
||||
if (!result.is_ok()) {
|
||||
return utils::failure(result.err());
|
||||
}
|
||||
|
||||
if (const auto exec_result = result->execute(); !exec_result.is_ok()) {
|
||||
} else if (const auto exec_result = result->execute(); !exec_result.is_ok()) {
|
||||
return utils::failure(exec_result.err());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user