Lightweight 0.20250627.0
|
Main API for mapping records to and from the database using high level C++ syntax. More...
#include <DataMapper.hpp>
Public Member Functions | |
DataMapper () | |
Constructs a new data mapper, using the default connection. | |
DataMapper (SqlConnection &&connection) | |
Constructs a new data mapper, using the given connection. | |
DataMapper (SqlConnectionString connectionString) | |
Constructs a new data mapper, using the given connection string. | |
DataMapper (DataMapper const &)=delete | |
DataMapper (DataMapper &&) noexcept=default | |
DataMapper & | operator= (DataMapper const &)=delete |
DataMapper & | operator= (DataMapper &&) noexcept=default |
SqlConnection const & | Connection () const noexcept |
Returns the connection reference used by this data mapper. | |
SqlConnection & | Connection () noexcept |
Returns the mutable connection reference used by this data mapper. | |
template<typename Record > | |
std::vector< std::string > | CreateTableString (SqlServerType serverType) |
Constructs a string list of SQL queries to create the table for the given record type. | |
template<typename FirstRecord , typename... MoreRecords> | |
std::vector< std::string > | CreateTablesString (SqlServerType serverType) |
Constructs a string list of SQL queries to create the tables for the given record types. | |
template<typename Record > | |
void | CreateTable () |
Creates the table for the given record type. | |
template<typename FirstRecord , typename... MoreRecords> | |
void | CreateTables () |
Creates the tables for the given record types. | |
template<typename Record > | |
RecordPrimaryKeyType< Record > | Create (Record &record) |
Creates a new record in the database. | |
template<typename Record > | |
RecordPrimaryKeyType< Record > | CreateExplicit (Record const &record) |
Creates a new record in the database. | |
template<typename Record , typename... Args> | |
std::optional< Record > | QuerySingle (SqlSelectQueryBuilder selectQuery, Args &&... args) |
Queries a single record from the database based on the given query. | |
template<typename Record , typename... PrimaryKeyTypes> | |
std::optional< Record > | QuerySingle (PrimaryKeyTypes &&... primaryKeys) |
Queries a single record (based on primary key) from the database. | |
template<typename Record , typename... PrimaryKeyTypes> | |
std::optional< Record > | QuerySingleWithoutRelationAutoLoading (PrimaryKeyTypes &&... primaryKeys) |
Queries a single record (based on primary key) from the database without auto-loading relations. | |
template<typename Record > | |
SqlQuerySingleBuilder< Record > | QuerySingle () |
Queries a single record from the database. | |
template<typename Record , typename ColumnName , typename T > | |
std::optional< Record > | QuerySingleBy (ColumnName const &columnName, T const &value) |
Queries a single record by the given column name and value. | |
template<typename Record , typename... InputParameters> | |
std::vector< Record > | Query (SqlSelectQueryBuilder::ComposedQuery const &selectQuery, InputParameters &&... inputParameters) |
Queries multiple records from the database, based on the given query. | |
template<typename Record , typename... InputParameters> | |
std::vector< Record > | Query (std::string_view sqlQueryString, InputParameters &&... inputParameters) |
Queries multiple records from the database, based on the given query. | |
template<typename ElementMask , typename Record , typename... InputParameters> | |
std::vector< Record > | Query (SqlSelectQueryBuilder::ComposedQuery const &selectQuery, InputParameters &&... inputParameters) |
template<typename Record > | |
SqlAllFieldsQueryBuilder< Record > | Query () |
template<typename Record , auto... ReferencedFields> | |
SqlSparseFieldQueryBuilder< Record, ReferencedFields... > | QuerySparse () |
template<typename Record > | |
bool | IsModified (Record const &record) const noexcept |
Checks if the record has any modified fields. | |
template<typename Record > | |
void | Update (Record &record) |
Updates the record in the database. | |
template<typename Record > | |
std::size_t | Delete (Record const &record) |
Deletes the record from the database. | |
template<typename Record > | |
std::size_t | Count () |
Counts the total number of records in the database for the given record type. | |
template<typename Record > | |
std::vector< Record > | All () |
Loads all records from the database for the given record type. | |
template<typename Record > | |
auto | BuildQuery () -> SqlQueryBuilder |
Constructs an SQL query builder for the given record type. | |
SqlQueryBuilder | FromTable (std::string_view tableName) |
Constructs an SQL query builder for the given table name. | |
template<typename Record > | |
void | ClearModifiedState (Record &record) noexcept |
Clears the modified state of the record. | |
template<typename Record > | |
void | LoadRelations (Record &record) |
Loads all direct relations to this record. | |
template<typename Record > | |
void | ConfigureRelationAutoLoading (Record &record) |
template<typename Record > | |
size_t | Count () |
template<typename Record , typename... InputParameters> | |
LIGHTWEIGHT_FORCE_INLINE std::vector< Record > | Query (SqlSelectQueryBuilder::ComposedQuery const &selectQuery, InputParameters &&... inputParameters) |
template<typename FirstRecord , typename SecondRecord , typename... InputParameters> requires DataMapperRecord<FirstRecord> && DataMapperRecord<SecondRecord> | |
std::vector< std::tuple< FirstRecord, SecondRecord > > | Query (SqlSelectQueryBuilder::ComposedQuery const &selectQuery, InputParameters &&... inputParameters) |
template<typename Record , typename ValueType > | |
LIGHTWEIGHT_FORCE_INLINE void | SetId (Record &record, ValueType &&id) |
template<typename Record , size_t InitialOffset> | |
LIGHTWEIGHT_FORCE_INLINE Record & | BindOutputColumns (Record &record) |
template<typename ElementMask , typename Record , size_t InitialOffset> | |
LIGHTWEIGHT_FORCE_INLINE Record & | BindOutputColumns (Record &record) |
Static Public Member Functions | |
template<typename Record > | |
static std::string | Inspect (Record const &record) |
Constructs a human readable string representation of the given record. | |
Main API for mapping records to and from the database using high level C++ syntax.
A DataMapper instances operates on a single SQL connection and provides methods to create, read, update and delete records in the database.
Definition at line 558 of file DataMapper.hpp.
|
inline |
Constructs a new data mapper, using the default connection.
Definition at line 562 of file DataMapper.hpp.
|
inlineexplicit |
Constructs a new data mapper, using the given connection.
Definition at line 569 of file DataMapper.hpp.
|
inlineexplicit |
Constructs a new data mapper, using the given connection string.
Definition at line 576 of file DataMapper.hpp.
|
inlinenoexcept |
Returns the connection reference used by this data mapper.
Definition at line 589 of file DataMapper.hpp.
|
inlinenoexcept |
Returns the mutable connection reference used by this data mapper.
Definition at line 595 of file DataMapper.hpp.
|
static |
Constructs a human readable string representation of the given record.
Definition at line 932 of file DataMapper.hpp.
std::vector< std::string > DataMapper::CreateTableString | ( | SqlServerType | serverType | ) |
Constructs a string list of SQL queries to create the table for the given record type.
Definition at line 973 of file DataMapper.hpp.
References SqlMigrationQueryBuilder::CreateTable(), SqlQueryFormatter::Get(), SqlQueryBuilder::Migration(), and SqlForeignKeyReferenceDefinition::tableName.
std::vector< std::string > DataMapper::CreateTablesString | ( | SqlServerType | serverType | ) |
Constructs a string list of SQL queries to create the tables for the given record types.
Definition at line 1022 of file DataMapper.hpp.
void DataMapper::CreateTable | ( | ) |
Creates the table for the given record type.
Definition at line 1034 of file DataMapper.hpp.
References SqlStatement::ExecuteDirect(), and SqlConnection::ServerType().
void DataMapper::CreateTables | ( | ) |
Creates the tables for the given record types.
Definition at line 1044 of file DataMapper.hpp.
RecordPrimaryKeyType< Record > DataMapper::Create | ( | Record & | record | ) |
Creates a new record in the database.
The record is inserted into the database and the primary key is set on this record.
Definition at line 1092 of file DataMapper.hpp.
References ClearModifiedState(), ConfigureRelationAutoLoading(), SqlGuid::Create(), CreateExplicit(), GetPrimaryKeyField(), and SqlStatement::LastInsertId().
RecordPrimaryKeyType< Record > DataMapper::CreateExplicit | ( | Record const & | record | ) |
Creates a new record in the database.
Definition at line 1051 of file DataMapper.hpp.
References SqlStatement::Execute(), SqlQueryBuilder::Insert(), SqlStatement::LastInsertId(), SqlStatement::Prepare(), and SqlConnection::Query().
Referenced by Create().
std::optional< Record > DataMapper::QuerySingle | ( | SqlSelectQueryBuilder | selectQuery, |
Args &&... | args | ||
) |
Queries a single record from the database based on the given query.
selectQuery | The SQL select query to execute. |
args | The input parameters for the query. |
Definition at line 1272 of file DataMapper.hpp.
References SqlStatement::Connection(), SqlStatement::Execute(), SqlSelectQueryBuilder::Field(), SqlSelectQueryBuilder::First(), SqlStatement::GetResultCursor(), SqlStatement::Prepare(), and SqlConnection::ServerType().
std::optional< Record > DataMapper::QuerySingle | ( | PrimaryKeyTypes &&... | primaryKeys | ) |
Queries a single record (based on primary key) from the database.
The primary key(s) are used to identify the record to load. If the record is not found, std::nullopt is returned.
Definition at line 1263 of file DataMapper.hpp.
References ConfigureRelationAutoLoading().
std::optional< Record > DataMapper::QuerySingleWithoutRelationAutoLoading | ( | PrimaryKeyTypes &&... | primaryKeys | ) |
Queries a single record (based on primary key) from the database without auto-loading relations.
The primary key(s) are used to identify the record to load.
Main goal of this function is to load record without relationships to decrease compilation time and work around some limitations of template instantiation depth on MSVC compiler.
Definition at line 1235 of file DataMapper.hpp.
References SqlStatement::Connection(), SqlStatement::Execute(), SqlStatement::GetResultCursor(), SqlStatement::Prepare(), SqlConnection::Query(), SqlQueryBuilder::Select(), and SqlConnection::ServerType().
|
inline |
Queries a single record from the database.
Definition at line 674 of file DataMapper.hpp.
std::optional< Record > DataMapper::QuerySingleBy | ( | ColumnName const & | columnName, |
T const & | value | ||
) |
Queries a single record by the given column name and value.
columnName | The name of the column to search. |
value | The value to search for. |
std::vector< Record > DataMapper::Query | ( | std::string_view | sqlQueryString, |
InputParameters &&... | inputParameters | ||
) |
Queries multiple records from the database, based on the given query.
Definition at line 1302 of file DataMapper.hpp.
References ConfigureRelationAutoLoading(), SqlStatement::Execute(), SqlStatement::FetchRow(), SqlStatement::GetColumn(), SqlStatement::NumColumnsAffected(), and SqlStatement::Prepare().
std::vector< Record > DataMapper::Query | ( | SqlSelectQueryBuilder::ComposedQuery const & | selectQuery, |
InputParameters &&... | inputParameters | ||
) |
Queries records from the database, based on the given query and can be used to retrieve only part of the record by specifying the ElementMask.
example:
Definition at line 1374 of file DataMapper.hpp.
References ConfigureRelationAutoLoading(), SqlStatement::Connection(), SqlStatement::Execute(), SqlResultCursor::FetchRow(), SqlStatement::GetResultCursor(), SqlStatement::Prepare(), and SqlConnection::ServerType().
|
inline |
Queries records of different types from the database, based on the given query. User can constructed query that selects columns from the multiple tables this function is uset to get result of the
example:
Definition at line 796 of file DataMapper.hpp.
|
inline |
Queries select fields from the given Record type.
The fields are given in form of &Record::field1, &Record::field2, ...
Definition at line 825 of file DataMapper.hpp.
|
noexcept |
Checks if the record has any modified fields.
Definition at line 1133 of file DataMapper.hpp.
References Field< T, P1, P2 >::IsModified().
void DataMapper::Update | ( | Record & | record | ) |
Updates the record in the database.
Definition at line 1150 of file DataMapper.hpp.
References ClearModifiedState(), SqlStatement::Execute(), SqlStatement::Prepare(), SqlConnection::Query(), and SqlQueryBuilder::Update().
std::size_t DataMapper::Delete | ( | Record const & | record | ) |
Deletes the record from the database.
Definition at line 1188 of file DataMapper.hpp.
References SqlQueryBuilder::Delete(), SqlStatement::Execute(), SqlStatement::NumRowsAffected(), SqlStatement::Prepare(), SqlConnection::Query(), and Field< T, P1, P2 >::Value().
std::vector< Record > DataMapper::All | ( | ) |
Loads all records from the database for the given record type.
Definition at line 1229 of file DataMapper.hpp.
References SqlSelectQueryBuilder::All(), SqlConnection::Query(), and SqlQueryBuilder::Select().
|
inline |
Constructs an SQL query builder for the given record type.
Definition at line 865 of file DataMapper.hpp.
References SqlConnection::Query().
|
inline |
Constructs an SQL query builder for the given table name.
Definition at line 871 of file DataMapper.hpp.
References SqlConnection::Query().
|
noexcept |
Clears the modified state of the record.
Definition at line 1413 of file DataMapper.hpp.
void DataMapper::LoadRelations | ( | Record & | record | ) |
Loads all direct relations to this record.
Definition at line 1641 of file DataMapper.hpp.
void DataMapper::ConfigureRelationAutoLoading | ( | Record & | record | ) |
Configures the auto loading of relations for the given record.
This means, that no explicit loading of relations is required. The relations are automatically loaded when accessed.
Definition at line 1728 of file DataMapper.hpp.
References SqlSelectQueryBuilder::All(), SqlStatement::CloseCursor(), ConfigureRelationAutoLoading(), SqlSelectQueryBuilder::Count(), SqlStatement::Execute(), SqlStatement::FetchRow(), SqlStatement::GetColumn(), SqlStatement::Prepare(), HasOneThrough< OtherTable, ThroughTable >::SetAutoLoader(), HasMany< OtherRecord >::SetAutoLoader(), and HasManyThrough< ReferencedRecordT, ThroughRecordT >::SetAutoLoader().
Referenced by ConfigureRelationAutoLoading(), Create(), Query(), Query(), and QuerySingle().
size_t DataMapper::Count | ( | ) |
Definition at line 1216 of file DataMapper.hpp.
|
inline |
Definition at line 1293 of file DataMapper.hpp.
std::vector< std::tuple< FirstRecord, SecondRecord > > DataMapper::Query | ( | SqlSelectQueryBuilder::ComposedQuery const & | selectQuery, |
InputParameters &&... | inputParameters | ||
) |
Definition at line 1343 of file DataMapper.hpp.
|
inline |
Definition at line 1667 of file DataMapper.hpp.
|
inline |
Definition at line 1684 of file DataMapper.hpp.
|
inline |
Definition at line 1699 of file DataMapper.hpp.