Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
Loading...
Searching...
No Matches
database::orm::entity_manager Class Reference

Manages entity metadata and provides factory methods. More...

#include <entity.h>

Collaboration diagram for database::orm::entity_manager:
Collaboration graph

Public Member Functions

 entity_manager ()=default
 Default constructor - used by database_context.
 
template<typename EntityType >
std::enable_if_t< is_entity_v< EntityType > > register_entity ()
 
template<typename EntityType >
std::enable_if_t< is_entity_v< EntityType >, const entity_metadata & > get_metadata ()
 
template<typename EntityType >
std::enable_if_t< is_entity_v< EntityType >, query_builder< EntityType > > query (std::shared_ptr< core::database_backend > db)
 
bool create_tables (std::shared_ptr< core::database_backend > db)
 
bool drop_tables (std::shared_ptr< core::database_backend > db)
 
bool sync_schema (std::shared_ptr< core::database_backend > db)
 

Private Attributes

std::unordered_map< std::string, std::unique_ptr< entity_metadata > > metadata_cache_
 

Detailed Description

Manages entity metadata and provides factory methods.

Note
This class uses dependency injection pattern. Access via database_context::get_entity_manager() (Sprint 3, Task 3.1).

Definition at line 246 of file entity.h.

Constructor & Destructor Documentation

◆ entity_manager()

database::orm::entity_manager::entity_manager ( )
default

Member Function Documentation

◆ create_tables()

bool database::orm::entity_manager::create_tables ( std::shared_ptr< core::database_backend > db)
Examples
/home/runner/work/database_system/database_system/database/orm/entity.h.

Definition at line 166 of file entity.cpp.

167 {
168 if (!db) {
169 ORM_LOG_ERROR("create_tables", "Database connection is null");
170 return false;
171 }
172
173 try {
174 for (const auto& [name, metadata] : metadata_cache_) {
175 // Create table
176 std::string create_sql = metadata->create_table_sql();
177 auto result = db->execute_query(create_sql);
178 if (result.is_err()) {
179 ORM_LOG_ERROR("create_tables", "Failed to create table: " + name);
180 return false;
181 }
182
183 // Create indexes
184 std::string index_sql = metadata->create_indexes_sql();
185 if (!index_sql.empty()) {
186 auto index_result = db->execute_query(index_sql);
187 if (index_result.is_err()) {
188 ORM_LOG_ERROR("create_tables", "Failed to create indexes for table: " + name);
189 return false;
190 }
191 }
192 }
193 return true;
194 } catch (const std::exception& e) {
195 ORM_LOG_ERROR("create_tables", std::string("Exception during table creation: ") + e.what());
196 return false;
197 }
198 }
std::unordered_map< std::string, std::unique_ptr< entity_metadata > > metadata_cache_
Definition entity.h:270
#define ORM_LOG_ERROR(context, message)
Definition entity.cpp:14

References metadata_cache_, and ORM_LOG_ERROR.

Referenced by sync_schema().

Here is the caller graph for this function:

◆ drop_tables()

bool database::orm::entity_manager::drop_tables ( std::shared_ptr< core::database_backend > db)
Examples
/home/runner/work/database_system/database_system/database/orm/entity.h.

Definition at line 200 of file entity.cpp.

201 {
202 if (!db) {
203 ORM_LOG_ERROR("drop_tables", "Database connection is null");
204 return false;
205 }
206
207 try {
208 for (const auto& [name, metadata] : metadata_cache_) {
209 std::string drop_sql = "DROP TABLE IF EXISTS " + metadata->table_name();
210 auto result = db->execute_query(drop_sql);
211 if (result.is_err()) {
212 ORM_LOG_ERROR("drop_tables", "Failed to drop table: " + name);
213 return false;
214 }
215 }
216 return true;
217 } catch (const std::exception& e) {
218 ORM_LOG_ERROR("drop_tables", std::string("Exception during table dropping: ") + e.what());
219 return false;
220 }
221 }

References metadata_cache_, and ORM_LOG_ERROR.

Referenced by sync_schema().

Here is the caller graph for this function:

◆ get_metadata()

template<typename EntityType >
std::enable_if_t< is_entity_v< EntityType >, const entity_metadata & > database::orm::entity_manager::get_metadata ( )

◆ query()

template<typename EntityType >
std::enable_if_t< is_entity_v< EntityType >, query_builder< EntityType > > database::orm::entity_manager::query ( std::shared_ptr< core::database_backend > db)

◆ register_entity()

template<typename EntityType >
std::enable_if_t< is_entity_v< EntityType > > database::orm::entity_manager::register_entity ( )

◆ sync_schema()

bool database::orm::entity_manager::sync_schema ( std::shared_ptr< core::database_backend > db)
Examples
/home/runner/work/database_system/database_system/database/orm/entity.h.

Definition at line 223 of file entity.cpp.

224 {
225 if (!db) {
226 ORM_LOG_ERROR("sync_schema", "Database connection is null");
227 return false;
228 }
229
230 try {
231 // For now, just recreate all tables
232 // In a real implementation, this would do schema diffing
233 if (!drop_tables(db)) {
234 ORM_LOG_ERROR("sync_schema", "Failed to drop existing tables");
235 return false;
236 }
237
238 if (!create_tables(db)) {
239 ORM_LOG_ERROR("sync_schema", "Failed to create new tables");
240 return false;
241 }
242
243 return true;
244 } catch (const std::exception& e) {
245 ORM_LOG_ERROR("sync_schema", std::string("Exception during schema sync: ") + e.what());
246 return false;
247 }
248 }
bool drop_tables(std::shared_ptr< core::database_backend > db)
Definition entity.cpp:200
bool create_tables(std::shared_ptr< core::database_backend > db)
Definition entity.cpp:166

References create_tables(), drop_tables(), and ORM_LOG_ERROR.

Here is the call graph for this function:

Member Data Documentation

◆ metadata_cache_

std::unordered_map<std::string, std::unique_ptr<entity_metadata> > database::orm::entity_manager::metadata_cache_
private

The documentation for this class was generated from the following files: