26#ifndef ROUTER_SRC_MYSQL_REST_SERVICE_SRC_MRS_DATABASE_ENTRY_OBJECT_H_
27#define ROUTER_SRC_MYSQL_REST_SERVICE_SRC_MRS_DATABASE_ENTRY_OBJECT_H_
147 std::vector<std::shared_ptr<ObjectField>>
fields;
170 bool updatable =
false;
172 foreach_field<Column, bool>([&updatable](
const Column &column) {
200 inline std::shared_ptr<ObjectField>
get_field(std::string_view name)
const {
201 for (
const auto &f :
fields) {
202 if (f->name ==
name)
return f;
208 std::string_view name)
const {
209 for (
const auto &f :
fields) {
210 if (f->name ==
name)
return f;
212 throw std::invalid_argument(
"Invalid object field reference " +
218 for (
const auto &f :
fields) {
219 if (
auto df = std::dynamic_pointer_cast<Column>(f); df) {
220 if (df->id ==
id)
return df;
227 std::string_view column_name)
const {
228 for (
const auto &f :
fields) {
229 if (
auto df = std::dynamic_pointer_cast<Column>(f); df) {
230 if (df->column_name == column_name)
return df;
237 std::string_view column_name)
const {
238 for (
const auto &f :
fields) {
239 if (
auto df = std::dynamic_pointer_cast<Column>(f); df) {
240 if (df->column_name == column_name)
return df;
243 throw std::invalid_argument(
"Invalid column reference " +
244 std::string(column_name));
250 const std::string &name)
const {
251 for (
const auto &c :
fields) {
252 if (c->name ==
name)
return std::dynamic_pointer_cast<Column>(c);
258 std::vector<const Column *> cols;
259 foreach_field<Column, bool>([&cols](
const Column &column) {
260 if (column.
is_primary) cols.push_back(&column);
267 return foreach_field<Column, const Column *>(
275 return foreach_field<Column, const Column *>(
282 template <
typename T,
typename R>
284 for (
auto &field :
fields) {
285 if (
auto df = std::dynamic_pointer_cast<T>(field)) {
286 if (
auto r = fn(*df)) {
294 template <
typename T,
typename R>
296 for (
const auto &field :
fields) {
297 if (
auto df = std::dynamic_pointer_cast<T>(field)) {
298 if (
auto r = fn(*df)) {
306 template <
typename R>
309 for (
const auto &field :
fields) {
310 if (
auto df = std::dynamic_pointer_cast<Column>(field)) {
311 if (
auto r = column_fn(*df)) {
315 std::dynamic_pointer_cast<ForeignKeyReference>(field)) {
316 if (
auto r = fk_fn(*df)) {
325 const Table &parent)
const {
329 if (
ref.to_many &&
ref.ref_table.get() ==
this) {
335 if (!fk)
throw std::logic_error(
"FK to parent not found");
344 std::string
as_graphql(
int depth,
bool extended)
const;
354 std::string
as_graphql(
bool extended =
false)
const;
bool is_foreign
Definition: object.h:101
std::string column_name
Definition: object.h:93
Column & operator=(const Column &)=default
bool not_null
Definition: object.h:97
bool is_generated
Definition: object.h:100
IdGenerationType id_generation
Definition: object.h:96
uint32_t srid
Definition: object.h:105
bool is_unique
Definition: object.h:99
std::string datatype
Definition: object.h:94
bool is_auto_generated_id() const
Definition: object.h:107
std::optional< bool > with_update
Definition: object.h:104
bool is_row_owner
Definition: object.h:102
bool is_primary
Definition: object.h:98
std::optional< bool > with_check
Definition: object.h:103
Column(const Column &f)=default
ColumnType type
Definition: object.h:95
bool to_many
Definition: object.h:124
ColumnMapping column_mapping
Definition: object.h:123
std::vector< std::pair< std::string, std::string > > ColumnMapping
Definition: object.h:120
std::shared_ptr< Table > ref_table
Definition: object.h:122
ForeignKeyReference & operator=(const ForeignKeyReference &)=default
ForeignKeyReference()=default
bool unnest
Definition: object.h:125
ForeignKeyReference(const ForeignKeyReference &)=default
bool allow_filtering
Definition: object.h:79
int position
Definition: object.h:77
bool allow_sorting
Definition: object.h:80
entry::UniversalId id
Definition: object.h:75
bool enabled
Definition: object.h:78
virtual ~ObjectField()=default
ObjectField(const ObjectField &)=default
std::string name
Definition: object.h:76
ObjectField & operator=(const ObjectField &)=default
KindType kind
Definition: object.h:350
std::string as_graphql(bool extended=false) const
Definition: object.cc:182
std::string name
Definition: object.h:349
bool is_read_only() const
Definition: object.cc:175
std::shared_ptr< Column > field
Definition: object.h:65
UniversalId uid
Definition: object.h:64
ParameterField(const ParameterField &f)=default
ModeType mode
Definition: object.h:135
ParameterField & operator=(const ParameterField &)=default
std::shared_ptr< Column > get_column(std::string_view column_name) const
Definition: object.h:226
R foreach_field(std::function< R(T &)> fn) const
Definition: object.h:283
R foreach_field(std::function< R(const T &)> fn) const
Definition: object.h:295
std::vector< std::shared_ptr< ObjectField > > fields
Definition: object.h:147
Operation::ValueType crud_operations
Definition: object.h:150
const ForeignKeyReference & get_reference_to_parent(const Table &parent) const
Definition: object.h:324
std::optional< OwnerUserField > user_ownership_field
Definition: object.h:148
bool with_update() const
Definition: object.h:157
bool with_insert() const
Definition: object.h:153
bool with_check_
Definition: object.h:151
std::vector< const Column * > primary_key() const
Definition: object.h:257
std::shared_ptr< Column > get_column_or_throw(std::string_view column_name) const
Definition: object.h:236
std::string table_key() const
Definition: object.h:247
std::string schema
Definition: object.h:142
bool with_check(const Column &column) const
Definition: object.h:187
std::string table_alias
Definition: object.h:145
bool needs_etag() const
Definition: object.cc:126
R foreach_field(std::function< R(const Column &)> column_fn, std::function< R(const ForeignKeyReference &)> fk_fn) const
Definition: object.h:307
bool unnests_to_value
Definition: object.h:198
std::shared_ptr< ObjectField > get_field(std::string_view name) const
Definition: object.h:200
std::shared_ptr< Column > get_column(const entry::UniversalId &id) const
Definition: object.h:216
bool with_update_any_column() const
Definition: object.h:167
std::string table
Definition: object.h:143
bool is_editable(bool &has_unnested_1n) const
Definition: object.cc:150
const Column * try_get_generated_id_column() const
Definition: object.h:266
std::shared_ptr< ObjectField > get_field_or_throw(std::string_view name) const
Definition: object.h:207
std::shared_ptr< Column > get_column_with_field_name(const std::string &name) const
Definition: object.h:249
bool with_update(const Column &column) const
Definition: object.h:161
const Column * try_get_row_ownership_column() const
Definition: object.h:274
std::optional< bool > needs_etag_
Definition: object.h:343
std::string as_graphql(int depth, bool extended) const
Definition: object.cc:32
bool with_delete() const
Definition: object.h:183
#define T
Definition: jit_executor_value.cc:373
MysqlCacheManager::Object Object
Definition: mysql_cache_manager.cc:101
PT & ref(PT *tp)
Definition: tablespace_impl.cc:359
ColumnType
Definition: column_type.h:48
IdGenerationType
Definition: object.h:48
ModeType
Definition: object.h:56
KindType
Definition: object.h:54
entry::ForeignKeyReference ForeignKeyReference
Definition: object_checksum.cc:47
entry::Table Table
Definition: object_checksum.cc:48
Definition: authorize_manager.h:48
mrs::database::entry::UniversalId UniversalId
Definition: universal_id.h:33
const mysql_service_registry_t * r
Definition: pfs_example_plugin_employee.cc:86
case opt name
Definition: sslopt-case.h:29
Definition: completion_hash.h:35
int ValueType
Definition: set_operation.h:34
Definition: universal_id.h:45