mirror of
https://github.com/silverqx/TinyORM.git
synced 2026-05-07 17:19:37 -05:00
78 lines
2.8 KiB
C++
78 lines
2.8 KiB
C++
#pragma once
|
|
#ifndef ORM_SCHEMA_FOREIGNIDCOLUMNDEFINITIONREFERENCE_HPP
|
|
#define ORM_SCHEMA_FOREIGNIDCOLUMNDEFINITIONREFERENCE_HPP
|
|
|
|
#include "orm/macros/systemheader.hpp"
|
|
TINY_SYSTEM_HEADER
|
|
|
|
#include "orm/constants.hpp"
|
|
#include "orm/schema/columndefinitionreference.hpp"
|
|
#include "orm/schema/foreignkeydefinitionreference.hpp"
|
|
|
|
TINYORM_BEGIN_COMMON_NAMESPACE
|
|
|
|
namespace Orm::SchemaNs
|
|
{
|
|
|
|
class Blueprint;
|
|
|
|
/*! Reference class to the ColumnDefinition provides setters with a nice API using
|
|
terser syntax for the foreign key column. */
|
|
class SHAREDLIB_EXPORT ForeignIdColumnDefinitionReference :
|
|
public ColumnDefinitionReference<ForeignIdColumnDefinitionReference>
|
|
{
|
|
public:
|
|
/*! Constructor. */
|
|
ForeignIdColumnDefinitionReference( // NOLINT(google-explicit-constructor)
|
|
Blueprint &blueprint,
|
|
ColumnDefinitionReference<> columnDefinitionReference);
|
|
/*! Default destructor. */
|
|
~ForeignIdColumnDefinitionReference() = default;
|
|
|
|
/*! Copy constructor. */
|
|
ForeignIdColumnDefinitionReference(
|
|
const ForeignIdColumnDefinitionReference &) = default;
|
|
/*! Move constructor. */
|
|
ForeignIdColumnDefinitionReference(
|
|
ForeignIdColumnDefinitionReference &&) noexcept = default;
|
|
|
|
/*! Deleted copy assignment operator. */
|
|
ForeignIdColumnDefinitionReference &
|
|
operator=(const ForeignIdColumnDefinitionReference &) = delete;
|
|
/*! Deleted move assignment operator. */
|
|
ForeignIdColumnDefinitionReference &
|
|
operator=(ForeignIdColumnDefinitionReference &&) = delete;
|
|
|
|
/*! Create a foreign key constraint on this column referencing the "id" column
|
|
of the conventionally related table. */
|
|
ForeignKeyDefinitionReference
|
|
constrained(const QString &table = Orm::Constants::EMPTY,
|
|
const QString &column = Orm::Constants::ID);
|
|
|
|
/*! Specify the referenced columns. */
|
|
ForeignKeyDefinitionReference references(const QVector<QString> &columns);
|
|
/*! Specify the referenced column. */
|
|
template<typename = void>
|
|
ForeignKeyDefinitionReference references(const QString &column);
|
|
|
|
private:
|
|
/*! Reference to the schema builder blueprint instance. */
|
|
std::reference_wrapper<Blueprint> m_blueprint;
|
|
/*! Reference to a column definition. */
|
|
std::optional<ForeignKeyDefinitionReference>
|
|
m_foreignKeyDefinitionReference = std::nullopt;
|
|
};
|
|
|
|
template<typename>
|
|
ForeignKeyDefinitionReference
|
|
ForeignIdColumnDefinitionReference::references(const QString &column)
|
|
{
|
|
return references(QVector<QString> {column});
|
|
}
|
|
|
|
} // namespace Orm::SchemaNs
|
|
|
|
TINYORM_END_COMMON_NAMESPACE
|
|
|
|
#endif // ORM_SCHEMA_FOREIGNIDCOLUMNDEFINITIONREFERENCE_HPP
|