105 WS_STATISTICS ws_Stats = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
163 #define OBJLIST_AREA_COUNT 4096 179 #if defined (CUBRID_DEBUG) 180 static int ws_describe_mop (
MOP mop,
void *args);
186 #if !defined (NDEBUG) 218 fprintf (stdout,
"CUBRID cannot allocate main memory and must halt execution.\n");
219 fprintf (stdout,
"The current transaction has been aborted.\n");
220 fprintf (stdout,
"Data integrity has been preserved.\n");
372 head = ws_Mop_table[slot].
head;
373 tail = ws_Mop_table[slot].
tail;
384 assert (head == p && tail == p);
422 p = ws_Mop_table[slot].
tail;
432 ws_Mop_table[slot].
tail = mop;
443 for (p = ws_Mop_table[slot].head; p !=
NULL; prev =
p, p = p->
hash_link)
462 if (p->class_mop !=
NULL)
464 if (p->class_mop->class_link !=
NULL)
471 p->class_link =
NULL;
487 ws_Mop_table[slot].
tail = mop;
493 ws_Mop_table[slot].
head = mop;
521 if (ws_Mop_table[slot].tail ==
NULL)
524 ws_Mop_table[slot].
tail = mop;
527 ws_Mop_table[slot].
head = mop;
534 ws_Mop_table[slot].
tail = mop;
567 mop = ws_Mop_table[slot].
tail;
584 for (mop = ws_Mop_table[slot].head; mop !=
NULL; mop = mop->
hash_link)
616 MOP mop, new_mop, prev;
635 mop = ws_Mop_table[slot].
tail;
643 prev = ws_Mop_table[slot].
tail;
652 for (mop = ws_Mop_table[slot].head; mop !=
NULL; prev = mop, mop = mop->
hash_link)
671 if (mop->class_mop !=
NULL)
677 mop->class_mop = mop->class_link =
NULL;
678 if (class_mop !=
NULL)
703 if (class_mop !=
NULL)
737 if (vid_info ==
NULL)
742 *flags = vid_info->
flags;
743 return &vid_info->
keys;
757 int slot, is_vclass = 0;
825 for (mop = ws_Mop_table[slot].head; mop !=
NULL; mop = mop->
hash_link)
855 if (vid_info ==
NULL)
861 vid_info->
flags = flags;
930 keys = &vid_info->
keys;
934 for (found = ws_Mop_table[slot].head, prev =
NULL; found != mop && found !=
NULL; found = found->
hash_link)
958 for (key_index = 0; key_index < no_keys; ++key_index)
965 if (att_seq_val == key_index)
1007 if (ws_Mop_table[slot].tail == mop)
1010 ws_Mop_table[slot].
tail = prev;
1062 if (class_mop !=
NULL)
1099 bool relink =
false;
1105 if (class_mop !=
NULL)
1111 if (class_mop ==
NULL)
1166 mops = ws_Mop_table[slot].
head;
1188 if (ws_Mop_table[slot].tail == mop)
1191 ws_Mop_table[slot].
tail = prev;
1283 ml_remove (&ws_Resident_classes, classop);
1344 MOP mop, prev,
next, to_be_next;
1367 assert (ws_Commit_mops == mop);
1369 ws_Commit_mops = to_be_next;
1412 for (m = ws_Resident_classes; m !=
NULL; m = m->
next)
1415 for (mops = m->
op->
class_link; mops !=
NULL && mops != Null_object; mops = next)
1442 for (mops = ws_Mop_table[slot].head; mops !=
NULL; mops =
next)
1482 if (ws_Mop_table[slot].tail == mops)
1485 ws_Mop_table[slot].
tail = prev;
1719 MOP op, op2,
next, prev, class_mop;
1722 int collected_num_dirty_mop = 0;
1733 collected_num_dirty_mop++;
1738 if (
function !=
NULL)
1740 status = (*function) (class_mop, args);
1751 for (op = class_mop->
dirty_link; op != Null_object && op->
dirty == 0; op = next)
1756 class_mop->dirty_link = op;
1773 collected_num_dirty_mop++;
1778 if (
function !=
NULL)
1782 status = (*function) (op, args);
1787 status = (*function) (op, args);
1810 for (op2 = next; op2 != Null_object && op2->
dirty == 0; op2 =
next)
1904 error =
ml_add (&ws_Resident_classes, obj,
NULL);
1968 if (o == Null_object)
2032 status = (*function) (l->
op, args);
2039 for (op = class_op->
dirty_link, next = Null_object; op != Null_object && op->
dirty == 0; op = next)
2054 if (
function !=
NULL)
2056 status = (*function) (op, args);
2078 for (op2 = next; op2 != Null_object && op2->
dirty == 0; op2 =
next)
2130 status = (*function) (l->
op, args);
2145 status = (*function) (op, args);
2216 if (classobj ==
NULL || classmop ==
NULL)
2223 if (current ==
NULL)
2225 mht_put (Classname_cache, cl_name, classmop);
2229 if (current != classmop)
2232 mht_put (Classname_cache, cl_name, classmop);
2249 const char *class_name =
NULL;
2251 if (classobj ==
NULL)
2257 if (class_name ==
NULL)
2282 class_mop = (
MOP)
mht_get (Classname_cache, name);
2306 if (ws_Mop_table !=
NULL)
2353 if (ws_Mop_table ==
NULL)
2368 if (Null_object ==
NULL)
2381 if (Classname_cache ==
NULL)
2388 ws_Resident_classes =
NULL;
2401 if (ws_Mop_table !=
NULL)
2403 free (ws_Mop_table);
2404 ws_Mop_table =
NULL;
2407 if (Null_object !=
NULL)
2413 if (Classname_cache !=
NULL)
2416 Classname_cache =
NULL;
2439 fprintf (stdout,
"*** Database client statistics before shutdown ***\n");
2452 if (Classname_cache !=
NULL)
2455 Classname_cache =
NULL;
2459 ml_free (ws_Resident_classes);
2460 ws_Resident_classes =
NULL;
2463 if (ws_Mop_table !=
NULL)
2467 for (mop = ws_Mop_table[slot].head, next =
NULL; mop !=
NULL; mop =
next)
2480 ws_Mop_table =
NULL;
2502 for (mop = ws_Mop_table[slot].head; mop !=
NULL; mop = mop->
hash_link)
2516 ws_Commit_mops =
NULL;
2679 mop =
ws_mop (oid, class_mop);
2773 for (l = ws_Resident_classes; l !=
NULL; l = l->
next)
2782 for (obj = mop->
class_link; obj != Null_object; obj = save_class_link)
2845 if (check_non_referable)
3168 if (class_mop !=
NULL)
3195 #if defined (CUBRID_DEBUG) 3207 ws_map (
MAPFUNC function,
void *args)
3212 int num_ws_continue_on_error = 0;
3214 if (ws_Mop_table !=
NULL)
3220 status = (*(
function)) (mop, args);
3221 if (status == WS_MAP_CONTINUE_ON_ERROR)
3223 num_ws_continue_on_error++;
3334 ws_Commit_mops =
NULL;
3337 #if !defined (NDEBUG) 3372 if (!only_unpinned || !mop->
pinned)
3400 ws_Commit_mops =
NULL;
3403 #if !defined (NDEBUG) 3433 for (mop = ws_Mop_table[slot].head; mop !=
NULL; mop = save_hash_link)
3467 strcpy ((
char *) copy, (
char *) str);
3503 fprintf (stdout,
"%d/%d/%d", (
int) oid->
volid, (
int) oid->
pageid, (
int) oid->
slotid);
3506 #if defined (CUBRID_DEBUG) 3514 ws_describe_mop (
MOP mop,
void *args)
3517 fprintf (stdout,
" ");
3520 fprintf (stdout,
"Root class ");
3526 fprintf (stdout,
"class MOP not available\n");
3532 fprintf (stdout,
"class ");
3535 fprintf (stdout,
"not cached ");
3544 fprintf (stdout,
"instance of ");
3547 fprintf (stdout,
"uncached class ");
3558 fprintf (stdout,
" dirty");
3562 fprintf (stdout,
" deleted");
3566 fprintf (stdout,
" pinned");
3570 fprintf (stdout,
" no_objects");
3573 fprintf (stdout,
"\n");
3584 fprintf (stdout,
"WORKSPACE MOP TABLE:\n\n");
3585 (void) ws_map (ws_describe_mop,
NULL);
3586 fprintf (stdout,
"\n");
3602 int mops, root, unknown, classes, cached_classes, instances, cached_instances;
3603 int count, actual, decached, weird;
3605 int classtotal, insttotal, size, isize, icount, deleted;
3610 mops = root = unknown = classes = cached_classes = instances = cached_instances = 0;
3614 for (mop = ws_Mop_table[slot].head; mop !=
NULL; mop = mop->
hash_link)
3651 fprintf (fpp,
"%d mops in the workspace (including one rootclass mop)\n", mops);
3652 fprintf (fpp,
"%d class mops (%d cached, %d uncached)\n", classes, cached_classes, classes - cached_classes);
3653 fprintf (fpp,
"%d instance mops (%d cached, %d uncached)\n", instances, cached_instances,
3654 instances - cached_instances);
3656 fprintf (fpp,
"%d unknown mops\n", unknown);
3659 fprintf (fpp,
"*** %d unknown mops with cached objects\n", weird);
3661 fprintf (fpp,
"%d attempts to clean pinned mops\n", ws_Stats.
pinned_cleanings);
3667 fprintf (fpp,
"%d dirty list emergencies, %d uncached classes, %d corruptions\n", ws_Stats.
dirty_list_emergencies,
3672 fprintf (fpp,
"%d total set mops allocated, %d total set mops freed\n", ws_Stats.
set_mops_allocated,
3677 for (m = ws_Resident_classes; m !=
NULL; m = m->
next)
3688 fprintf (fpp,
"%d dirty objects, %d clean objects in dirty list\n", actual, count - actual);
3691 fprintf (fpp,
"RESIDENT INSTANCE TOTALS: \n");
3692 count = classtotal = insttotal = deleted = 0;
3693 for (m = ws_Resident_classes; m !=
NULL; m = m->
next)
3707 icount = isize = decached = 0;
3720 fprintf (fpp,
" %-20s : %d instances, %d decached, %d bytes used\n",
sm_ch_name ((
MOBJ) (mop->
object)),
3721 icount, decached, isize);
3728 fprintf (fpp,
"*** %d deleted MOPs in the resident class list \n", deleted);
3732 if (count != cached_classes)
3734 fprintf (fpp,
"*** Mops claiming to be classes %d, resident class list length %d\n", cached_classes, count);
3737 fprintf (fpp,
"Total bytes for class storage %d\n", classtotal);
3738 fprintf (fpp,
"Total bytes for instance storage %d\n", insttotal);
3739 fprintf (fpp,
"Total bytes for object storage %d\n", classtotal + insttotal);
3741 fprintf (fpp,
"WORKSPACE AREAS:\n");
3826 if (Objlist_area ==
NULL)
3842 if (Objlist_area !=
NULL)
3845 Objlist_area =
NULL;
3897 for (el = *root, prev =
NULL; el !=
NULL && el != element; el = el->
next)
3908 *root = element->
next;
3930 for (el = list; el !=
NULL; el = el->
next)
3949 for (link = list, next =
NULL; link !=
NULL; link =
next)
3969 for (el = list; el !=
NULL; el = el->
next)
3971 total += (*function) (el);
3990 for (; src !=
NULL; src = src->
next)
3992 new_ = (
DB_LIST *) (*copier) (src);
4077 for (el = list; el !=
NULL && found ==
NULL; el = el->
next)
4079 if ((el->
name == name) || ((el->
name !=
NULL) && (name !=
NULL) && (*fcn) (el->
name, name) == 0))
4113 if ((el->
name == name) || ((el->
name !=
NULL) && (name !=
NULL) && (*fcn) (el->
name, name) == 0))
4127 *root = found->
next;
4181 if (added_ptr !=
NULL)
4183 *added_ptr = status;
4216 for (el = *list; el !=
NULL && found ==
NULL; el = el->
next)
4218 if ((el->
name == name) || ((el->
name !=
NULL) && (name !=
NULL) && (*fcn) (el->
name, name) == 0))
4260 if (added_ptr !=
NULL)
4262 *added_ptr = status;
4269 #if defined (ENABLE_UNUSED_FUNCTION) 4291 found = last =
NULL;
4292 for (el = *list, psn = 0; el !=
NULL && found ==
NULL; el = el->
next)
4294 if ((el->
name == name) || ((el->
name !=
NULL) && (*fcn) (el->
name, name) == 0))
4366 first = last =
NULL;
4367 for (el = list; el !=
NULL; el = el->
next)
4425 if ((el->
name == name) || ((el->
name !=
NULL) && (name !=
NULL) && (*fcn) (el->
name, name) == 0))
4470 for (l = list; l !=
NULL && !found; l = l->
next)
4532 if (added_ptr !=
NULL)
4598 if (added_ptr !=
NULL)
4635 *list = found->
next;
4675 first = last =
NULL;
4676 for (l = list; l !=
NULL; l = l->
next)
4720 #if defined (ENABLE_UNUSED_FUNCTION) 4740 for (l = *list; l !=
NULL; l =
next)
4743 keep = (*filter) (l->
op, args);
4795 (void)
area_free (Objlist_area, (
void *) link);
4839 for (l = list; l !=
NULL; l = l->
next)
4913 if (added_ptr !=
NULL)
4929 if (error_count > 0)
4950 if (flush_err ==
NULL)
4965 ws_Repl_error_link = flush_err;
5067 return (mop1 == mop2);
5080 if (flush_err ==
NULL)
5100 for (flush_err = ws_Repl_error_link; flush_err; flush_err =
next)
5105 ws_Repl_error_link =
NULL;
5142 if (dest_mop ==
NULL || src_mop ==
NULL)
5157 value_node = value_node->
next;
5197 prev_value_node =
NULL;
5199 while (value_node !=
NULL)
5201 if (value_node->
val == val)
5206 prev_value_node = value_node;
5207 value_node = value_node->
next;
5210 if (value_node ==
NULL)
5223 prev_value_node->
next = value_node->
next;
5247 if (value_node ==
NULL)
5253 value_node->
val = val;
5269 #if !defined (NDEBUG) 5277 for (m = ws_Resident_classes; m !=
NULL; m = m->
next)
5287 for (mop = ws_Mop_table[slot].head; mop !=
NULL; mop = mop->
hash_link)
5306 while (value_node !=
NULL)
5308 next_value_node = value_node->
next;
5311 value_node = next_value_node;
5339 repl_obj = ws_Repl_objs.
head;
5340 if (repl_obj !=
NULL)
5342 ws_Repl_objs.
head = repl_obj->
next;
5381 obj = ws_Repl_objs.
head;
5384 next_obj = obj->
next;
5409 int operation,
bool has_index)
5414 if (repl_obj ==
NULL)
5421 assert (packed_pkey_value !=
NULL && 0 < packed_pkey_value_length);
5433 memcpy (repl_obj->
packed_pkey_value, packed_pkey_value, packed_pkey_value_length);
5435 repl_obj->
recdes = recdes;
5442 ws_Repl_objs.
head = repl_obj;
5443 ws_Repl_objs.
tail = repl_obj;
5447 ws_Repl_objs.
tail->
next = repl_obj;
5448 ws_Repl_objs.
tail = repl_obj;
MOP ws_vmop(MOP class_mop, int flags, DB_VALUE *keys)
void ws_clear_hints(MOP mop, bool leave_pinned)
int ml_append(DB_OBJLIST **list, MOP mop, int *added_ptr)
WS_REPL_OBJ * ws_get_repl_obj_from_list(void)
#define WS_IS_DELETED(mop)
struct ws_mop_table_entry WS_MOP_TABLE_ENTRY
void au_reset_authorization_caches(void)
DB_COLLECTION * db_get_set(const DB_VALUE *value)
MOBJ vid_fetch_instance(MOP mop, DB_FETCH_MODE purpose, LC_FETCH_VERSION_TYPE read_fetch_version_type)
void ws_class_has_object_dependencies(MOP class_mop)
bool ws_has_updated(void)
#define ER_WS_PIN_VIOLATION
void ws_set_deleted(MOP mop)
unsigned int mht_1strhash(const void *key, const unsigned int ht_size)
MOP ws_mop(const OID *oid, MOP class_mop)
void ws_clear_all_repl_objs(void)
struct db_object * dirty_link
#define ER_MVCC_SERIALIZABLE_CONFLICT
int tran_unilaterally_abort(void)
DB_OBJECT * db_real_instance(DB_OBJECT *obj)
void area_destroy(AREA *area)
int dirty_list_emergencies
void ws_set_class(MOP inst, MOP class_mop)
void ws_release_user_instance(MOP mop)
int db_get_int(const DB_VALUE *value)
int db_is_vclass(DB_OBJECT *op)
void *(* LCOPIER)(void *)
int classobj_area_init(void)
int tp_value_equal(const DB_VALUE *value1, const DB_VALUE *value2, int do_coercion)
void ws_mark_deleted(MOP mop)
int instance_list_emergencies
int ws_map_class_dirty(MOP class_op, MAPFUNC function, void *args)
void ws_move_label_value_list(MOP dest_mop, MOP src_mop)
void obt_area_final(void)
int ws_add_to_repl_obj_list(OID *class_oid, char *packed_pkey_value, int packed_pkey_value_length, RECDES *recdes, int operation, bool has_index)
char * or_unpack_string_alloc(char *ptr, char **string)
int mht_rem(MHT_TABLE *ht, const void *key, int(*rem_func)(const void *key, void *data, void *args), void *func_args)
int ws_is_deleted(MOP mop)
DB_NAMELIST * nlist_filter(DB_NAMELIST **root, const char *name, NLSEARCHER fcn)
int classobj_get_prop(DB_SEQ *properties, const char *name, DB_VALUE *pvalue)
DB_OBJLIST * ml_ext_alloc_link(void)
SM_ATTRIBUTE * attributes
const void * mht_put(MHT_TABLE *ht, const void *key, void *data)
void nlist_free(DB_NAMELIST *list)
DB_OBJLIST * ml_ext_copy(DB_OBJLIST *list)
int classobj_class_size(SM_CLASS *class_)
static void ws_clear_internal(bool clear_vmop_keys)
int db_make_object(DB_VALUE *value, DB_C_OBJECT *obj)
DB_COLLECTION * set_create_sequence(int size)
void ws_clear_all_repl_errors_of_error_link(void)
int ws_Error_ignore_count
static int class_type(DB_OBJECT *class_obj)
OID * ws_identifier(MOP mop)
struct sm_component * next
#define OID_SET_NULL(oidp)
#define SM_PROPERTY_VID_KEY
void ws_decache_allxlockmops_but_norealclasses(void)
int ignored_class_assignments
void ws_set_mop_fetched_with_current_snapshot(MOP mop)
void ws_mark_instances_deleted(MOP class_op)
int(* MOPFILTER)(MOP op, void *args)
int db_make_sequence(DB_VALUE *value, DB_C_SET *set)
int ws_update_oid_and_class(MOP mop, OID *new_oid, OID *new_class_oid)
void db_destroy_workspace_heap(void)
void ws_free_temp_mop(MOP op)
unsigned int ws_get_mvcc_snapshot_version(void)
#define WS_SET_DIRTY(mop)
#define OBJLIST_AREA_COUNT
#define ER_WS_MOP_NOT_FOUND
int getmem(void *memptr, const tp_domain *domain, DB_VALUE *value, bool copy=true) const
HL_HEAPID db_create_workspace_heap(void)
void db_ws_free(void *ptr)
bool ws_is_same_object(MOP mop1, MOP mop2)
int ws_map_class(MOP class_op, MAPFUNC function, void *args)
int packed_pkey_value_length
int ml_find(DB_OBJLIST *list, MOP mop)
void ws_increment_mvcc_snapshot_version(void)
MOP ws_new_mop(OID *oid, MOP class_mop)
WS_VALUE_LIST * label_value_list
void classobj_area_final(void)
static WS_REPL_LIST ws_Repl_objs
AREA * area_create(const char *name, size_t element_size, size_t alloc_count)
static int ws_map_dirty_internal(MAPFUNC function, void *args, bool classes_only)
#define COPY_OID(dest_oid_ptr, src_oid_ptr)
struct tr_schema_cache * next
void ws_free_string(const char *str)
MOP ws_mop_if_exists(OID *oid)
static MHT_TABLE * Classname_cache
MOP ws_cache_with_oid(MOBJ obj, OID *oid, MOP class_mop)
unsigned int mvcc_snapshot_version
static DB_OBJECT * is_class(OID *obj_oid, OID *class_oid)
void ws_add_classname(MOBJ classobj, MOP classmop, const char *cl_name)
#define OID_PSEUDO_KEY(oidp)
void mht_destroy(MHT_TABLE *ht)
#define ER_WS_CLASS_NOT_CACHED
struct ws_value_list * next
int(* MAPFUNC)(MOP mop, void *args)
void er_set(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
static void remove_class_object(MOP class_mop, MOP obj)
DB_NAMELIST * nlist_copy(DB_NAMELIST *list)
int area_validate(AREA *area, const void *address)
static WS_REPL_FLUSH_ERR * ws_Repl_error_link
void ws_set_repl_error_into_error_link(LC_COPYAREA_ONEOBJ *obj, char *content_ptr)
const char * sm_ch_name(const MOBJ clobj)
WS_MOP_TABLE_ENTRY * ws_Mop_table
#define ER_WS_GC_DIRTY_MOP
static int add_class_object(MOP class_mop, MOP obj)
int prm_get_integer_value(PARAM_ID prm_id)
void ws_list_free(DB_LIST *list, LFREEER function)
int sm_object_size_quick(SM_CLASS *class_, MOBJ obj)
static void ws_unlink_from_commit_mops_list(MOP op)
int ws_pin(MOP mop, int pin)
static AREA * Objlist_area
struct db_object * class_mop
void ws_free_repl_obj(WS_REPL_OBJ *obj)
void ws_cache(MOBJ obj, MOP mop, MOP class_mop)
void obj_free_memory(SM_CLASS *class_, MOBJ obj)
#define ER_OUT_OF_VIRTUAL_MEMORY
void classobj_free_class(SM_CLASS *class_)
struct db_object * commit_link
DB_LIST * ws_list_nconc(DB_LIST *list1, DB_LIST *list2)
static MOP ws_make_mop(const OID *oid)
#define WS_PUT_COMMIT_MOP(mop)
DB_NAMELIST * nlist_remove(DB_NAMELIST **root, const char *name, NLSEARCHER fcn)
#define DB_VALUE_DOMAIN_TYPE(value)
#define WS_RESET_DIRTY(mop)
static void ws_print_oid(OID *oid)
int db_Disable_modifications
void ws_pin_instance_and_class(MOP obj, int *opin, int *cpin)
void ws_list_append(DB_LIST **root, DB_LIST *element)
void ws_restore_pin(MOP obj, int opin, int cpin)
const char * sm_get_ch_name(MOP op)
DB_OBJECT * db_get_object(const DB_VALUE *value)
unsigned int mht_valhash(const void *key, const unsigned int ht_size)
#define OID_EQ(oidp1, oidp2)
MOP ws_class_mop(MOP mop)
static void ws_insert_mop_on_hash_link_with_position(MOP mop, int slot, MOP prev)
#define WS_SET_DELETED(mop)
void * mht_get(MHT_TABLE *ht, const void *key)
struct db_namelist * next
static void ws_insert_mop_on_hash_link(MOP mop, int slot)
LOCK ws_get_lock(MOP mop)
DB_OBJLIST * ws_Resident_classes
int ml_remove(DB_OBJLIST **list, MOP mop)
#define TM_TRAN_READ_FETCH_VERSION()
MHT_TABLE * mht_create(const char *name, int est_size, unsigned int(*hash_func)(const void *key, unsigned int ht_size), int(*cmp_func)(const void *key1, const void *key2))
char * or_unpack_int(char *ptr, int *number)
int ml_ext_add(DB_OBJLIST **list, MOP mop, int *added_ptr)
static int mark_instance_deleted(MOP op, void *args)
void ml_free(DB_OBJLIST *list)
int db_is_system_class(MOP op)
void ws_disconnect_deleted_instances(MOP classop)
int count(int &result, const cub_regex_object ®, const std::string &src, const int position, const INTL_CODESET codeset)
int pr_clear_value(DB_VALUE *value)
void ws_update_oid(MOP mop, OID *newoid)
char * or_unpack_mem_value(char *buf, DB_VALUE *value)
int nlist_append(DB_NAMELIST **list, const char *name, NLSEARCHER fcn, int *added_ptr)
DB_NAMELIST * nlist_find(DB_NAMELIST *list, const char *name, NLSEARCHER fcn)
int ws_class_has_cached_objects(MOP class_mop)
void ws_init_repl_objs(void)
void ws_drop_classname(MOBJ classobj)
void set_area_final(void)
int ws_Error_ignore_list[-ER_LAST_ERROR]
int ws_mop_compare(MOP mop1, MOP mop2)
int locator_flush_instance(MOP mop)
int set_put_element(DB_COLLECTION *set, int index, DB_VALUE *value)
static void error(const char *msg)
void ws_set_lock(MOP mop, LOCK lock)
void ws_clear_all_hints(bool retain_lock)
int ml_add(DB_OBJLIST **list, MOP mop, int *added_ptr)
bool vid_is_updatable(MOP mop)
static void ws_examine_no_mop_has_cached_lock(void)
#define ER_WS_CHANGING_OBJECT_CLASS
DB_OBJLIST * ml_copy(DB_OBJLIST *list)
static unsigned int ws_MVCC_snapshot_version
MOP ws_make_temp_mop(void)
void er_print_callstack(const char *file_name, const int line_no, const char *fmt,...)
int pr_clone_value(const DB_VALUE *src, DB_VALUE *dest)
static void ws_free_mop(MOP op)
int ws_list_remove(DB_LIST **root, DB_LIST *element)
unsigned char composition_fetch
int nlist_add(DB_NAMELIST **list, const char *name, NLSEARCHER fcn, int *added_ptr)
#define ER_WS_CANT_INSTALL_NULL_OID
WS_REPL_FLUSH_ERR * ws_get_repl_error_from_error_link(void)
#define free_and_init(ptr)
unsigned char pruning_type
bool sm_is_reuse_oid_class(MOP op)
int oid_compare(const void *a, const void *b)
struct db_object * hash_link
int nlist_find_or_append(DB_NAMELIST **list, const char *name, NLSEARCHER fcn, int *position)
int ws_map_dirty(MAPFUNC function, void *args)
DB_C_INT(* NLSEARCHER)(const void *, const void *)
void ws_clean_label_value_list(MOP mop)
void ml_ext_free(DB_OBJLIST *list)
void * area_alloc(AREA *area)
bool prm_get_bool_value(PARAM_ID prm_id)
void ws_intern_instances(MOP class_mop)
OID * ws_identifier_with_check(MOP mop, const bool check_non_referable)
MOP ws_find_class(const char *name)
struct db_object * class_link
void ws_decache_all_instances(MOP mop)
void * db_ws_alloc(size_t size)
#define IS_WRITE_EXCLUSIVE_LOCK(lock)
int area_free(AREA *area, void *ptr)
#define DB_VALUE_TYPE(value)
void ws_remove_resident_class(MOP classop)
int locator_flush_all_instances(MOP class_mop, bool decache)
int db_make_null(DB_VALUE *value)
DB_VALUE * ws_keys(MOP vid, unsigned int *flags)
MOP vid_base_instance(MOP mop)
void ws_unhide_new_old_trigger_obj(MOP op)
int ws_hide_new_old_trigger_obj(MOP op)
static void emergency_remove_dirty(MOP op)
struct ws_repl_flush_err * error_link
int ws_list_length(DB_LIST *list)
void ws_filter_dirty(void)
int db_value_clear(DB_VALUE *value)
void ws_abort_mops(bool only_unpinned)
int locator_is_class(MOP mop, DB_FETCH_MODE hint_purpose)
unsigned int db_on_server
int ml_size(DB_OBJLIST *list)
struct db_objlist DB_OBJLIST
char * ws_copy_string(const char *str)
void ws_release_instance(MOP mop)
DB_LIST * ws_list_copy(DB_LIST *src, LCOPIER copier, LFREEER freeer)
bool ws_is_mop_fetched_with_current_snapshot(MOP mop)
int ws_add_label_value_to_mop(MOP mop, DB_VALUE *val)
#define WS_SET_LOCK(mop, lock)
int ws_find(MOP mop, MOBJ *obj)
void ws_remove_label_value_from_mop(MOP mop, DB_VALUE *val)
static int ws_check_hash_link(int slot)
void ws_abort_transaction(void)
struct ws_repl_obj * next
int mht_compare_strings_are_equal(const void *key1, const void *key2)
int ws_set_ignore_error_list_for_mflush(int error_count, int *error_list)
int ws_list_total(DB_LIST *list, LTOTALER function)
int ws_has_dirty_objects(MOP op, int *isvirt)
LC_COPYAREA_OPERATION operation
unsigned int ws_Mop_table_size
bool ws_rehash_vmop(MOP mop, MOBJ classobj, DB_VALUE *newkey)
int au_fetch_class_force(MOP op, SM_CLASS **class_, AU_FETCHMODE fetchmode)
DB_CONST_C_CHAR db_get_string(const DB_VALUE *value)
void ml_ext_free_link(DB_OBJLIST *link)
int db_value_domain_init(DB_VALUE *value, const DB_TYPE type, const int precision, const int scale)
void ws_free_repl_flush_error(WS_REPL_FLUSH_ERR *flush_err)