-
Notifications
You must be signed in to change notification settings - Fork 19
/
Meta_Procedure.h
293 lines (198 loc) · 11.3 KB
/
Meta_Procedure.h
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
// Copyright (c) 2008
//
// CIYAM Pty. Ltd.
// ACN 093 704 539
//
// ALL RIGHTS RESERVED
//
// Permission to use this software for non-commercial purposes is hereby granted. Permission to
// distribute this software privately is granted provided that the source code is unaltered and
// complete or that any alterations and omissions have been first approved by CIYAM. Commercial
// usage of this software is not permitted without first obtaining a license for such a purpose
// from CIYAM. This software may not be publicly distributed unless written permission to do so
// has been obtained from CIYAM.
#ifndef META_PROCEDURE_H
# define META_PROCEDURE_H
# ifndef HAS_PRECOMPILED_STD_HEADERS
# include <string>
# endif
# include "class_base.h"
# ifdef MODULE_META_IMPL
# define META_PROCEDURE_DECL_SPEC DYNAMIC_EXPORT
# else
# define META_PROCEDURE_DECL_SPEC DYNAMIC_IMPORT
# endif
class Meta_Specification_Content_Page;
class Meta_Specification;
class Meta_List_Field;
class Meta_Procedure_Arg;
class Meta_Class;
class Meta_Procedure;
class META_PROCEDURE_DECL_SPEC Meta_Procedure : public class_base
{
friend class Meta_Specification_Content_Page;
friend class Meta_Specification;
friend class Meta_List_Field;
friend class Meta_Procedure_Arg;
friend class Meta_Class;
public:
typedef Meta_Procedure class_type;
enum field_id
{
e_field_id_none = 0,
e_field_id_Class = 1,
e_field_id_Id = 2,
e_field_id_Internal = 3,
e_field_id_Name = 4,
e_field_id_Source_Procedure = 5
};
Meta_Procedure( );
~Meta_Procedure( );
const std::string& Id( ) const;
void Id( const std::string& Id );
bool Internal( ) const;
void Internal( bool Internal );
const std::string& Name( ) const;
void Name( const std::string& Name );
Meta_Class& Class( );
const Meta_Class& Class( ) const;
void Class( const std::string& key );
Meta_Procedure& Source_Procedure( );
const Meta_Procedure& Source_Procedure( ) const;
void Source_Procedure( const std::string& key );
Meta_Specification_Content_Page& child_Specification_Content_Page_Create_Copy( );
const Meta_Specification_Content_Page& child_Specification_Content_Page_Create_Copy( ) const;
Meta_Specification_Content_Page& child_Specification_Content_Page_Generate( );
const Meta_Specification_Content_Page& child_Specification_Content_Page_Generate( ) const;
Meta_Specification& child_Specification_Other_Procedure_2( );
const Meta_Specification& child_Specification_Other_Procedure_2( ) const;
Meta_Specification& child_Specification_Other( );
const Meta_Specification& child_Specification_Other( ) const;
Meta_Procedure& child_Procedure_Source( );
const Meta_Procedure& child_Procedure_Source( ) const;
Meta_List_Field& child_List_Field( );
const Meta_List_Field& child_List_Field( ) const;
Meta_Procedure_Arg& child_Procedure_Arg( );
const Meta_Procedure_Arg& child_Procedure_Arg( ) const;
Meta_Specification& child_Specification( );
const Meta_Specification& child_Specification( ) const;
std::string get_field_value( int field ) const;
void set_field_value( int field, const std::string& value );
bool has_field_changed( const std::string& field ) const;
bool is_field_transient( int field ) const;
bool is_field_transient( field_id id ) const { return static_is_field_transient( id ); }
std::string get_field_name( int field ) const;
int get_field_num( const std::string& field ) const;
uint64_t get_state( ) const;
const std::string& execute( const std::string& cmd_and_args );
void clear( );
void validate( unsigned state, bool is_internal );
void after_fetch( );
void finalise_fetch( );
void at_create( );
void to_store( bool is_create, bool is_internal );
void for_store( bool is_create, bool is_internal );
void after_store( bool is_create, bool is_internal );
bool can_destroy( bool is_internal );
void for_destroy( bool is_internal );
void after_destroy( bool is_internal );
void set_default_values( );
bool is_filtered( ) const;
const char* class_id( ) const;
const char* class_name( ) const;
const char* plural_name( ) const;
const char* module_id( ) const;
const char* module_name( ) const;
const char* resolved_module_id( ) const { return static_resolved_module_id( ); }
const char* resolved_module_name( ) const { return static_resolved_module_name( ); }
const char* lock_class_id( ) const { return static_lock_class_id( ); }
const char* check_class_name( ) const { return static_check_class_name( ); }
std::string get_display_name( bool plural = false ) const;
bool get_is_alias( ) const;
void get_alias_base_info( std::pair< std::string, std::string >& alias_base_info ) const;
void get_base_class_info( std::vector< std::pair< std::string, std::string > >& base_class_info ) const;
class_base& get_or_create_graph_child( const std::string& context );
void clear_foreign_key( const std::string& field );
void set_foreign_key_value( const std::string& field, const std::string& value );
const std::string& get_foreign_key_value( const std::string& field );
void get_class_info( class_info_container& class_info ) const { static_get_class_info( class_info ); }
void get_field_info( field_info_container& field_info ) const { return static_get_field_info( field_info ); }
void get_foreign_key_info( foreign_key_info_container& foreign_key_info ) const { static_get_foreign_key_info( foreign_key_info ); }
int get_num_fields( bool* p_done = 0, const std::string* p_class_name = 0 ) const { return static_get_num_fields( p_done, p_class_name ); }
const procedure_info_container& get_procedure_info( ) const { return static_get_procedure_info( ); }
void get_text_search_fields( std::vector< std::string >& fields ) const { return static_get_text_search_fields( fields ); }
void get_all_enum_pairs( std::vector< std::pair< std::string, std::string > >& pairs ) const { return static_get_all_enum_pairs( pairs ); }
std::string get_sql_columns( ) const { return static_get_sql_columns( ); }
void get_sql_indexes( std::vector< std::string >& indexes ) const { static_get_sql_indexes( indexes ); }
void get_sql_unique_indexes( std::vector< std::string >& indexes ) const { static_get_sql_unique_indexes( indexes ); }
void get_sql_column_names( std::vector< std::string >& names, bool* p_done, const std::string* p_class_name ) const;
void get_sql_column_values( std::vector< std::string >& values, bool* p_done, const std::string* p_class_name ) const;
void get_required_field_names( std::set< std::string >& names,
bool required_transients, std::set< std::string >* p_dependents = 0 ) const;
void get_always_required_field_names( std::set< std::string >& names,
bool required_transients, std::set< std::string >& dependents ) const;
void get_transient_replacement_field_names( const std::string& name, std::vector< std::string >& names ) const;
void do_generate_sql( generate_sql_type type, std::vector< std::string >& sql_stmts ) const;
static void static_class_init( const char* p_module_name );
static void static_class_term( const char* p_module_name );
static const char* static_class_id( ) { return "111100"; }
static const char* static_class_name( ) { return "Procedure"; }
static const char* static_plural_name( ) { return "Procedures"; }
static const char* static_module_id( ) { return "100"; }
static const char* static_module_name( ) { return "Meta"; }
static const char* static_resolved_module_id( );
static const char* static_resolved_module_name( );
static const char* static_lock_class_id( );
static const char* static_check_class_name( );
static bool static_has_derivations( );
static void static_get_class_info( class_info_container& class_info );
static void static_get_field_info( field_info_container& all_field_info );
static void static_get_foreign_key_info( foreign_key_info_container& foreign_key_info );
static int static_get_num_fields( bool* p_done = 0, const std::string* p_class_name = 0 );
static bool static_is_field_transient( field_id id );
static const char* static_get_field_id( field_id id );
static const char* static_get_field_name( field_id id );
static int static_get_field_num( const std::string& field );
static procedure_info_container& static_get_procedure_info( );
static void static_get_all_enum_pairs( std::vector< std::pair< std::string, std::string > >& pairs );
static void static_get_text_search_fields( std::vector< std::string >& fields );
static std::string static_get_sql_columns( );
static void static_get_sql_indexes( std::vector< std::string >& indexes );
static void static_get_sql_unique_indexes( std::vector< std::string >& indexes );
static void static_insert_derivation( const std::string& module_and_class_id );
static void static_remove_derivation( const std::string& module_and_class_id );
static void static_insert_external_alias( const std::string& module_and_class_id, Meta_Procedure* p_instance );
static void static_remove_external_alias( const std::string& module_and_class_id );
private:
Meta_Procedure( const Meta_Procedure& );
Meta_Procedure& operator =( const Meta_Procedure& );
struct impl;
friend struct impl;
impl* p_impl;
protected:
const char* get_field_id( const std::string& name, bool* p_sql_numeric = 0, std::string* p_type_name = 0 ) const;
const char* get_field_name( const std::string& id, bool* p_sql_numeric = 0, std::string* p_type_name = 0 ) const;
std::string get_field_display_name( const std::string& id ) const;
void get_foreign_key_values( foreign_key_data_container& foreign_key_values ) const;
virtual void setup_foreign_key( Meta_Class& o, const std::string& value );
virtual void setup_foreign_key( Meta_Procedure& o, const std::string& value );
virtual void setup_graph_parent( Meta_Specification_Content_Page& o, const std::string& foreign_key_field );
virtual void setup_graph_parent( Meta_Specification& o, const std::string& foreign_key_field );
virtual void setup_graph_parent( Meta_Procedure& o, const std::string& foreign_key_field );
virtual void setup_graph_parent( Meta_List_Field& o, const std::string& foreign_key_field );
virtual void setup_graph_parent( Meta_Procedure_Arg& o, const std::string& foreign_key_field );
virtual void setup_graph_parent( Meta_Class& o,
const std::string& foreign_key_field, const std::string& init_value );
virtual void setup_graph_parent( Meta_Procedure& o,
const std::string& foreign_key_field, const std::string& init_value );
size_t get_total_child_relationships( ) const;
void set_total_child_relationships( size_t new_total_child_relationships ) const;
size_t get_num_foreign_key_children( bool is_internal = false ) const;
class_base* get_next_foreign_key_child( size_t child_num,
std::string& next_child_field, cascade_op op, bool is_internal = false );
};
inline std::string to_string( const Meta_Procedure& c ) { return c.get_key( ); }
inline bool is_null( const Meta_Procedure& c ) { return c.get_key( ).empty( ); }
inline bool check_equal( const Meta_Procedure& c, const char* p ) { return c.get_key( ) == p; }
inline bool check_not_equal( const Meta_Procedure& c, const char* p ) { return !( c.get_key( ) == p ); }
#endif