File schema_manager.h¶
File List > cubrid > src > object > schema_manager.h
Go to the documentation of this file
/*
* Copyright 2008 Search Solution Corporation
* Copyright 2016 CUBRID Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/*
* schema_manager.h - External definitions for the schema manager
*/
#ifndef _SCHEMA_MANAGER_H_
#define _SCHEMA_MANAGER_H_
#ident "$Id$"
#if defined (SERVER_MODE)
#error Does not belong to server module
#endif /* defined (SERVER_MODE) */
#include "language_support.h" /* for international string functions */
#include "storage_common.h" /* for HFID */
#include "object_domain.h" /* for TP_DOMAIN */
#include "work_space.h" /* for MOP */
#include "class_object.h" /* for SM_CLASS */
#include "schema_template.h" /* template interface */
#include "schema_system_catalog.hpp" /* for comparing system catalog name */
#include "trigger_manager.h" /* for TR_EVENT_TYPE */
#include "tde.h"
/*
* This is NOT the "object" class but rather functions more like
* the meta-class of class objects.
* This formerly stored the list of classes that had no super classes,
* in that way it was kind of like the root "object" of the class
* hierarchy. Unfortunately, maintaining this list caused contention
* problems on the the root object so it was removed. The list
* of base classes is now generated manually by examining all classes.
*/
/*
* Use full SM_CLASS definition for ROOT_CLASS, instead of just SM_CLASS_HEADER.
* This avoids to handle particular case of sm_Root_class object in many usage of 'au_fetch_class_..' functions.
* However serialization functions will use only the header part of the object.
*/
typedef SM_CLASS ROOT_CLASS;
/*
* Structure used when truncating a class and changing an attribute.
* During these operations, indexes are dropped and recreated.
* The information needed to recreate the constraints (indexes) are saved in
* this structure.
*/
typedef struct sm_constraint_info SM_CONSTRAINT_INFO;
struct sm_constraint_info
{
struct sm_constraint_info *next;
char *name;
char **att_names;
int *asc_desc;
int *prefix_length;
SM_PREDICATE_INFO *filter_predicate;
char *ref_cls_name;
char **ref_attrs;
SM_FUNCTION_INFO *func_index_info;
SM_FOREIGN_KEY_ACTION fk_delete_action;
SM_FOREIGN_KEY_ACTION fk_update_action;
DB_CONSTRAINT_TYPE constraint_type;
const char *comment;
SM_INDEX_STATUS index_status; // Used to save index_status in case of rebuild or moving the constraint
};
extern ROOT_CLASS sm_Root_class;
extern const char TEXT_CONSTRAINT_PREFIX[];
extern MOP sm_Root_class_mop;
extern HFID *sm_Root_class_hfid;
extern const char *sm_Root_class_name;
extern int sm_finish_class (SM_TEMPLATE * template_, MOP * classmop);
extern int sm_update_class (SM_TEMPLATE * template_, MOP * classmop);
extern int sm_update_class_with_auth (SM_TEMPLATE * template_, MOP * classmop, DB_AUTH auth, bool lock_hierarchy);
extern int sm_update_class_auto (SM_TEMPLATE * template_, MOP * classmop);
extern int sm_delete_class_mop (MOP op, bool is_cascade_constraints);
extern int ib_get_thread_count ();
#if defined(ENABLE_UNUSED_FUNCTION)
extern int sm_delete_class (const char *name);
#endif
extern int sm_get_index (MOP classop, const char *attname, BTID * index);
extern char *sm_produce_constraint_name (const char *class_name, DB_CONSTRAINT_TYPE constraint_type,
const char **att_names, const int *asc_desc, const char *given_name);
extern char *sm_produce_constraint_name_mop (MOP classop, DB_CONSTRAINT_TYPE constraint_type, const char **att_names,
const int *asc_desc, const char *given_name);
extern char *sm_produce_constraint_name_tmpl (SM_TEMPLATE * tmpl, DB_CONSTRAINT_TYPE constraint_type,
const char **att_names, const int *asc_desc, const char *given_name);
extern int sm_add_constraint (MOP classop, DB_CONSTRAINT_TYPE constraint_type, const char *constraint_name,
const char **att_names, const int *asc_desc, const int *attrs_prefix_length,
int class_attributes, SM_PREDICATE_INFO * predicate_info, SM_FUNCTION_INFO * fi_info,
const char *comment, SM_INDEX_STATUS index_status);
extern int sm_drop_constraint (MOP classop, DB_CONSTRAINT_TYPE constraint_type, const char *constraint_name,
const char **att_names, bool class_attributes, bool mysql_index_name);
extern int sm_drop_index (MOP classop, const char *constraint_name);
extern int sm_exist_index (MOP classop, const char *idxname, BTID * btid);
/* Misc schema operations */
extern int sm_rename_class (MOP op, const char *new_name);
extern int sm_update_all_catalog_statistics (bool with_fullscan);
extern int sm_update_catalog_statistics (const char *class_name, bool with_fullscan);
extern int sm_force_write_all_classes (void);
#ifdef SA_MODE
extern void sm_mark_system_class_for_catalog (void);
#endif /* SA_MODE */
extern int sm_mark_system_class (MOP classop, int on_or_off);
extern int sm_is_system_class (MOP op);
extern bool sm_is_reuse_oid_class (MOP op);
extern int sm_check_reuse_oid_class (MOP op);
extern int sm_is_partitioned_class (MOP op);
extern int sm_partitioned_class_type (DB_OBJECT * classop, int *partition_type, char *keyattr, MOP ** partitions);
extern int sm_set_class_flag (MOP classop, SM_CLASS_FLAG flag, int onoff);
extern int sm_set_class_tde_algorithm (MOP classop, TDE_ALGORITHM tde_algo);
extern int sm_get_class_tde_algorithm (MOP classop, TDE_ALGORITHM * tde_algo);
extern int sm_get_class_flag (MOP op, SM_CLASS_FLAG flag);
extern int sm_set_class_collation (MOP classop, int collation_id);
extern int sm_get_class_collation (MOP classop, int *collation_id);
extern int sm_set_class_comment (MOP classop, const char *comment);
extern int sm_destroy_representations (MOP op);
extern void sm_add_static_method (const char *name, void (*function) ());
extern void sm_delete_static_method (const char *name);
extern void sm_flush_static_methods (void);
extern int sm_link_method (SM_CLASS * class_, SM_METHOD * method);
extern int sm_prelink_methods (DB_OBJLIST * classes);
extern int sm_force_method_link (MOP obj);
extern char *sm_get_method_source_file (MOP obj, const char *name);
extern int sm_truncate_class (MOP class_mop, const bool is_cascade);
extern int sm_truncate_using_delete (MOP class_mop);
extern int sm_truncate_using_destroy_heap (MOP class_mop);
bool sm_is_possible_to_recreate_constraint (MOP class_mop, const SM_CLASS * const class_,
const SM_CLASS_CONSTRAINT * const constraint);
extern int sm_save_constraint_info (SM_CONSTRAINT_INFO ** save_info, const SM_CLASS_CONSTRAINT * const c);
extern int sm_save_function_index_info (SM_FUNCTION_INFO ** save_info, SM_FUNCTION_INFO * func_index_info);
extern int sm_save_filter_index_info (SM_PREDICATE_INFO ** save_info, SM_PREDICATE_INFO * filter_index_info);
extern void sm_free_constraint_info (SM_CONSTRAINT_INFO ** save_info);
/* Utility functions */
extern int sm_check_name (const char *name);
extern int sm_check_catalog_rep_dir (MOP classmop, SM_CLASS * class_);
extern SM_NAME_SPACE sm_resolution_space (SM_NAME_SPACE name_space);
/* Class location functions */
extern MOP sm_get_class (MOP obj);
extern SM_CLASS_TYPE sm_get_class_type (SM_CLASS * class_);
extern DB_OBJLIST *sm_fetch_all_classes (int external_list, DB_FETCH_MODE purpose);
extern DB_OBJLIST *sm_fetch_all_base_classes (int external_list, DB_FETCH_MODE purpose);
extern DB_OBJLIST *sm_fetch_all_objects (DB_OBJECT * op, DB_FETCH_MODE purpose);
extern DB_OBJLIST *sm_fetch_all_objects_of_dirty_version (DB_OBJECT * op, DB_FETCH_MODE purpose);
/* Domain maintenance */
extern int sm_filter_domain (TP_DOMAIN * domain, int *changes);
extern int sm_check_class_domain (TP_DOMAIN * domain, MOP class_);
extern int sm_check_object_domain (TP_DOMAIN * domain, MOP object);
extern int sm_coerce_object_domain (TP_DOMAIN * domain, MOP object, MOP * dest_object);
/* Extra cached state */
extern int sm_clean_class (MOP classmop, SM_CLASS * class_);
extern int sm_touch_class (MOP classmop);
/* Statistics functions */
extern SM_CLASS *sm_get_class_with_statistics (MOP classop);
extern CLASS_STATS *sm_get_statistics_force (MOP classop);
extern int sm_update_statistics (MOP classop, bool with_fullscan);
extern int sm_update_all_statistics (bool with_fullscan);
/* Misc information functions */
extern const char *sm_get_ch_name (MOP op);
extern HFID *sm_get_ch_heap (MOP classmop);
#if 0 /* TODO - do not use */
extern OID *sm_get_ch_rep_dir (MOP classmop);
#endif
extern int sm_is_subclass (MOP classmop, MOP supermop);
extern int sm_is_partition (MOP classmop, MOP supermop);
extern int sm_object_size_quick (SM_CLASS * class_, MOBJ obj);
extern SM_CLASS_CONSTRAINT *sm_class_constraints (MOP classop);
/* Locator support functions */
extern const char *sm_ch_name (const MOBJ clobj);
extern HFID *sm_ch_heap (MOBJ clobj);
extern OID *sm_ch_rep_dir (MOBJ clobj);
extern bool sm_has_indexes (MOBJ class_);
/* Interpreter support functions */
extern char *sm_downcase_name (const char *name, char *buf, int buf_size);
extern char *sm_user_specified_name (const char *name, char *buf, int buf_size);
extern char *sm_user_specified_name_for_serial (const char *name, char *buf, int buf_size);
extern char *sm_qualifier_name (const char *name, char *buf, int buf_size);
extern const char *sm_remove_qualifier_name (const char *name);
extern MOP sm_find_class (const char *name);
extern MOP sm_find_class_with_purpose (const char *name, bool for_update);
extern MOP sm_find_synonym (const char *name);
extern char *sm_get_synonym_target_name (MOP synonym, char *buf, int buf_size);
extern const char *sm_get_att_name (MOP classop, int id);
extern int sm_att_id (MOP classop, const char *name);
extern DB_TYPE sm_att_type_id (MOP classop, const char *name);
extern MOP sm_att_class (MOP classop, const char *name);
extern int sm_att_info (MOP classop, const char *name, int *idp, TP_DOMAIN ** domainp, int *sharedp, int class_attr);
extern int sm_att_constrained (MOP classop, const char *name, SM_ATTRIBUTE_FLAG cons);
extern bool sm_att_auto_increment (MOP classop, const char *name);
extern int sm_att_default_value (MOP classop, const char *name, DB_VALUE * value, DB_DEFAULT_EXPR ** default_expr,
DB_DEFAULT_EXPR_TYPE ** on_update_expr);
extern int sm_class_check_uniques (MOP classop);
extern BTID *sm_find_index (MOP classop, char **att_names, int num_atts, bool unique_index_only,
bool skip_prefix_length_index, BTID * btid);
/* Query processor support functions */
extern int sm_get_class_repid (MOP classop);
extern unsigned int sm_local_schema_version (void);
extern void sm_bump_local_schema_version (void);
extern unsigned int sm_global_schema_version (void);
extern void sm_bump_global_schema_version (void);
extern struct parser_context *sm_virtual_queries (struct parser_context *parser, DB_OBJECT * class_object);
extern int sm_flush_objects (MOP obj);
extern int sm_decache_mop (MOP mop, void *info);
extern int sm_decache_instances_after_query_executed_with_commit (MOP class_mop);
extern int sm_flush_and_decache_objects (MOP obj, int decache);
extern int sm_flush_for_multi_update (MOP class_mop);
/* Workspace & Garbage collection functions */
extern int sm_issystem (SM_CLASS * class_);
/* Trigger support */
extern int sm_class_has_triggers (DB_OBJECT * classop, int *status, DB_TRIGGER_EVENT event_type);
extern int sm_get_trigger_cache (DB_OBJECT * class_, const char *attribute, int class_attribute, void **cache);
extern int sm_invalidate_trigger_cache (DB_OBJECT * classop);
extern int sm_add_trigger (DB_OBJECT * classop, const char *attribute, int class_attribute, DB_OBJECT * trigger);
extern int sm_drop_trigger (DB_OBJECT * classop, const char *attribute, int class_attribute, DB_OBJECT * trigger);
/* Optimized trigger checker for the object manager */
extern int sm_active_triggers (MOP class_mop, SM_CLASS * class_, DB_TRIGGER_EVENT event_type);
/* Attribute & Method descriptors */
extern int sm_get_attribute_descriptor (DB_OBJECT * op, const char *name, int class_attribute, int for_update,
SM_DESCRIPTOR ** desc);
extern int sm_get_method_descriptor (DB_OBJECT * op, const char *name, int class_method, SM_DESCRIPTOR ** desc);
extern void sm_free_descriptor (SM_DESCRIPTOR * desc);
extern int sm_get_descriptor_component (MOP op, SM_DESCRIPTOR * desc, int for_update, SM_CLASS ** class_ptr,
SM_COMPONENT ** comp_ptr);
extern void sm_fee_resident_classes_virtual_query_cache (void);
/* Module control */
extern void sm_final (void);
extern void sm_transaction_boundary (void);
extern void sm_create_root (OID * rootclass_oid, HFID * rootclass_hfid);
extern void sm_init (OID * rootclass_oid, HFID * rootclass_hfid);
#if defined (ENABLE_UNUSED_FUNCTION) /* to disable TEXT */
extern int sm_has_text_domain (DB_ATTRIBUTE * attributes, int check_all);
#endif /* ENABLE_UNUSED_FUNCTION */
extern int sm_class_has_unique_constraint (MOBJ classobj, MOP classop, bool check_subclasses, bool * has_unique);
extern int sm_att_unique_constrained (MOP classop, const char *name);
extern int sm_att_in_unique_filter_constraint_predicate (MOP classop, const char *name);
extern int sm_att_fk_constrained (MOP classop, const char *name);
extern bool classobj_is_exist_foreign_key_ref (MOP refop, SM_FOREIGN_KEY_INFO * fk_info);
extern int classobj_put_foreign_key_ref (DB_SEQ ** properties, SM_FOREIGN_KEY_INFO * fk_info);
#if defined (ENABLE_RENAME_CONSTRAINT)
extern int classobj_rename_foreign_key_ref (DB_SEQ ** properties, const BTID * btid, const char *old_name,
const char *new_name);
#endif
extern int classobj_drop_foreign_key_ref (DB_SEQ ** properties, const BTID * btid, const char *name);
/* currently this is a private function to be called only by AU_SET_USER */
extern int sc_set_current_schema (MOP user);
extern const char *sc_current_schema_name (void);
extern MOP sc_current_schema_owner (void);
/* Obtain (pointer to) current schema name. */
extern int sm_has_non_null_attribute (SM_ATTRIBUTE ** attrs);
extern void sm_free_function_index_info (SM_FUNCTION_INFO * func_index_info);
extern void sm_free_filter_index_info (SM_PREDICATE_INFO * filter_index_info);
extern int sm_is_global_only_constraint (MOP classmop, SM_CLASS_CONSTRAINT * constraint, int *is_global,
SM_TEMPLATE * template_);
#if defined (ENABLE_RENAME_CONSTRAINT)
extern int sm_rename_foreign_key_ref (MOP ref_clsop, const BTID * btid, const char *old_name, const char *new_name);
#endif
extern int sm_find_subclass_in_hierarchy (MOP hierarchy, MOP class_mop, bool * found);
extern bool sm_is_index_visible (SM_CLASS_CONSTRAINT * constraint_list, BTID btid);
SM_DOMAIN *sm_domain_alloc ();
void sm_domain_free (SM_DOMAIN * ptr);
SM_DOMAIN *sm_domain_copy (SM_DOMAIN * ptr);
#endif /* _SCHEMA_MANAGER_H_ */