forked from alibaba/AliSQL
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathobject_table_impl.h
More file actions
133 lines (102 loc) · 4.43 KB
/
object_table_impl.h
File metadata and controls
133 lines (102 loc) · 4.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/* Copyright (c) 2014, 2025, Oracle and/or its affiliates.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 2.0,
as published by the Free Software Foundation.
This program is designed to work with certain software (including
but not limited to OpenSSL) that is licensed under separate terms,
as designated in a particular file or component or in included license
documentation. The authors of MySQL hereby grant you an additional
permission to link the program and your derivative works with the
separately licensed software that they have either included with
the program or referenced in the documentation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License, version 2.0, for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
#ifndef DD__OBJECT_TABLE_IMPL_INCLUDED
#define DD__OBJECT_TABLE_IMPL_INCLUDED
#include "sql/dd/impl/types/object_table_definition_impl.h" // Object_table_def
#include "sql/dd/types/object_table.h" // Object_table
class THD;
namespace dd {
///////////////////////////////////////////////////////////////////////////
class Object_table_impl : virtual public Object_table {
protected:
mutable uint m_last_dd_version;
Object_table_definition_impl m_target_def;
mutable bool m_actual_present;
mutable Object_table_definition_impl m_actual_def;
bool m_hidden;
public:
// Enumeration of options that are used by all DD table subclasses.
enum class Common_option {
ENGINE,
CHARSET,
COLLATION,
ROW_FORMAT,
STATS_PERSISTENT,
TABLESPACE
};
/*
Enumeration of indexes that are used by several DD table subclasses.
Some object keys will implicitly expect these indexes to have a
certain predefined ordinal position. Note that the enumeration is
the positional index of each index (starting at 0), not the ordinal
position of the index (starting at 1).
*/
enum class Common_index { PK_ID, UK_NAME };
/*
Enumeration of fields that are expected by some object keys to have
the same ordinal position for most DD tables. The enumeration is the
positional index of the field (starting at 0).
*/
enum class Common_field { ID };
/*
Constructor used for tables required by plugins. Common options are
not used for those.
*/
Object_table_impl(const String_type &schema_name,
const String_type &table_name,
const String_type &ddl_statement)
: m_last_dd_version(0),
m_target_def(schema_name, table_name, ddl_statement),
m_actual_present(false),
m_actual_def(),
m_hidden(false) {}
/*
Constructor used by DD table subclasses. These will all use the
common options.
*/
Object_table_impl();
const String_type &name() const override {
return m_target_def.get_table_name();
}
Object_table_definition_impl *target_table_definition() override {
return (m_last_dd_version != 0 ? nullptr : &m_target_def);
}
const Object_table_definition_impl *target_table_definition() const override {
return (m_last_dd_version != 0 ? nullptr : &m_target_def);
}
void set_abandoned(uint last_dd_version) const override {
m_last_dd_version = last_dd_version;
}
bool is_abandoned() const override { return (m_last_dd_version != 0); }
const Object_table_definition_impl *actual_table_definition() const override {
return (m_actual_present ? &m_actual_def : nullptr);
}
bool set_actual_table_definition(
const Properties &table_def_properties) const override;
virtual int field_number(int target_field_number,
const String_type &field_label) const;
int field_number(const String_type &field_label) const override;
bool populate(THD *) const override { return false; }
bool is_hidden() const override { return m_hidden; }
void set_hidden(bool hidden) override { m_hidden = hidden; }
~Object_table_impl() override = default;
};
///////////////////////////////////////////////////////////////////////////
} // namespace dd
#endif // DD__OBJECT_TABLE_IMPL_INCLUDED