uses criteria for session::find methods
This commit is contained in:
@@ -14,6 +14,8 @@ std::string orm_category_impl::message(const int ev) const {
|
||||
return "No connection available";
|
||||
case error_code::UnknownType:
|
||||
return "Unknown type";
|
||||
case error_code::NoPrimaryKey:
|
||||
return "No primary key";
|
||||
case error_code::FailedToBuildQuery:
|
||||
return "Failed to build query";
|
||||
case error_code::FailedToFindObject:
|
||||
|
||||
@@ -3,6 +3,50 @@
|
||||
#include <iostream>
|
||||
|
||||
namespace matador::orm {
|
||||
criteria_transformer::criteria_transformer(const object::repository& repo, const std::unordered_map<std::string, std::shared_ptr<sql::table>>& tables_by_name)
|
||||
: repo_(repo)
|
||||
, tables_by_name_(tables_by_name) {}
|
||||
|
||||
void criteria_transformer::visit( const query::between_criteria& node ) {
|
||||
update_criteria_column(node);
|
||||
}
|
||||
|
||||
void criteria_transformer::visit( const query::binary_criteria& node ) {
|
||||
update_criteria_column(node);
|
||||
}
|
||||
|
||||
void criteria_transformer::visit( const query::binary_column_criteria& node ) {}
|
||||
|
||||
void criteria_transformer::visit( const query::collection_criteria& node ) {
|
||||
update_criteria_column(node);
|
||||
}
|
||||
|
||||
void criteria_transformer::visit( const query::collection_query_criteria& node ) {
|
||||
update_criteria_column(node);
|
||||
}
|
||||
|
||||
void criteria_transformer::visit( const query::like_criteria& node ) {
|
||||
update_criteria_column(node);
|
||||
}
|
||||
|
||||
void criteria_transformer::visit( const query::logical_criteria& node ) {
|
||||
node.left_clause()->accept(*this);
|
||||
node.right_clause()->accept(*this);
|
||||
}
|
||||
|
||||
void criteria_transformer::visit( const query::not_criteria& node ) {
|
||||
node.clause()->accept(*this);
|
||||
}
|
||||
|
||||
void criteria_transformer::update_criteria_column(const query::abstract_column_criteria& node) const {
|
||||
const auto it = tables_by_name_.find(node.column().table()->name);
|
||||
if (it == tables_by_name_.end()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const_cast<sql::column&>(node.column()).table_ = it->second;
|
||||
}
|
||||
|
||||
void session_query_builder::on_revision(const char *id, uint64_t &/*rev*/) {
|
||||
push(id);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user