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