56 #define WS_SET_FOUND_DELETED(mop) WS_SET_DELETED(mop) 57 #define MAX_FETCH_SIZE 64 116 #if defined(CUBRID_DEBUG) 130 int (*fun) (
LC_LOCKSET * req,
void *args),
void *args);
141 void (*fun) (
MOP mop,
MOBJ object,
void *args),
void *args);
145 bool decache,
bool isone_mflush);
249 if (class_mop ==
NULL)
253 bool error_saved =
false;
328 lock = cache_lock->
lock;
547 if (found ==
false && class_mop !=
NULL)
619 #if defined(CUBRID_DEBUG) 658 cache_lock.
oid = oid;
659 cache_lock.
lock = lock;
679 else if (class_mop !=
NULL)
730 if (class_mop ==
NULL)
742 class_oid =
ws_oid (class_mop);
750 class_chn =
ws_chn (class_obj);
787 if (
locator_fetch (oid, chn, lock, fetch_version_type, class_oid, class_chn, is_prefetch, &fetch_area) !=
NO_ERROR)
794 if (fetch_area !=
NULL)
814 if (class_mop !=
NULL)
910 for (i = 0; i < num_mops; i++)
951 if (
mht_put (htbl, oid, mop) != mop)
982 if (j < lockset->num_reqobjs)
990 lock = reqobj_class_lock;
994 lock = reqobj_inst_lock;
999 if (quit_on_errors ==
false)
1013 #if defined (SA_MODE) && !defined (CUBRID_DEBUG) 1051 if (quit_on_errors ==
false)
1083 if (class_mop ==
NULL)
1090 class_oid =
ws_oid (class_mop);
1093 if (quit_on_errors ==
false)
1203 if (quit_on_errors ==
false)
1206 mop = vector_mop[0];
1220 lock = reqobj_class_lock;
1224 lock = reqobj_inst_lock;
1249 if (lockset !=
NULL)
1345 if (fetch_ptr ==
NULL)
1357 fetch_ptr[idx] =
NULL;
1363 if (fetch_ptr[idx] ==
NULL)
1375 for (i = 0; i < idx; i++)
1377 if (fetch_ptr[i] !=
NULL)
1390 if (fetch_ptr != fetch_copyarea)
1453 #if defined(CUBRID_DEBUG) 1480 conv_lock =
lock_Conv[lock][current_lock];
1487 if (level <= 0 || level >= prune_level)
1513 if (class_mop ==
NULL)
1522 class_oid =
ws_oid (class_mop);
1529 class_chn =
ws_chn (class_obj);
1612 error_code = (*fun) (lockset, args);
1616 if (lockset !=
NULL)
1621 if (quit_on_errors ==
false)
1640 conv_lock =
lock_Conv[lock][current_lock];
1643 if (current_lock ==
NULL_LOCK || conv_lock != current_lock)
1692 inst_oid =
ws_oid (inst_mop);
1706 #if defined(CUBRID_DEBUG) 1712 "locator_lock_class_of_instance: ** SYSTEM ERROR don't know how to fetch virtual objects. ");
1720 #if defined (SA_MODE) && !defined (CUBRID_DEBUG) 1721 if (*class_mop !=
NULL && class_obj !=
NULL)
1740 if (*class_mop ==
NULL)
1747 class_oid =
ws_oid (*class_mop);
1748 class_chn =
ws_chn (class_obj);
1751 if (class_obj !=
NULL && class_oid !=
NULL)
1760 if (lock == current_lock ||
OID_ISTEMP (class_oid))
1769 if (class_oid ==
NULL)
1771 class_oid = &tmp_oid;
1783 if (fetch_area !=
NULL)
1799 if (*class_mop ==
NULL)
1804 if (*class_mop !=
NULL)
1881 #if defined (SA_MODE) && !defined (CUBRID_DEBUG) 1910 cache_lock.
oid = oid;
1911 cache_lock.
lock = lock;
1938 if (class_mop ==
NULL)
1964 class_oid =
ws_oid (class_mop);
1970 class_chn =
ws_chn (class_obj);
2003 is_prefetch =
false;
2006 locator_does_exist (oid, chn, lock, class_oid, class_chn,
true, is_prefetch, &fetch_area,
2012 if (fetch_area !=
NULL)
2032 if (class_mop !=
NULL)
2072 #if defined(CUBRID_DEBUG) 2078 "locator_fetch_mode_to_lock: *** SYSTEM ERROR Fetching instance with incorrect " 2079 "fetch purpose mode = %d ... assume READ_FETCMODE...***\n", purpose);
2180 if (class_mop ==
NULL)
2243 if (class_mop ==
NULL)
2298 if (class_mop ==
NULL)
2303 #if defined(CUBRID_DEBUG) 2310 oid =
ws_oid (class_mop);
2312 "locator_fetch_class: ***SYSTEM ERROR Incorrect" 2313 " use of function.\n Object OID %d|%d%d associated " 2314 "with argument class_mop is not a class.\n.." 2315 " Calling... locator_fetch_instance instead...***\n", oid->
volid, oid->
pageid, oid->
slotid);
2398 #if defined(CUBRID_DEBUG) 2407 "locator_fetch_instance: SYSTEM ERROR Incorrect" 2408 " use of function.\n Object OID %d|%d|%d associated" 2409 " with argument mop is not an instance.\n Calling... locator_fetch_class instead..\n",
2467 LOCK reqobj_class_lock;
2468 LOCK reqobj_inst_lock;
2478 MOP first = mop_set[0];
2554 #if defined(CUBRID_DEBUG) 2563 "locator_fetch_nested: SYSTEM ERROR Incorrect use of function.\n " 2564 "Object OID %d|%d|%d associated with argument mop is " 2565 "not an instance.\n Calling locator_fetch_class instead..\n", oid->
volid, oid->
pageid,
2612 if (((*keep_mops->
fun) (
object)) ==
false)
2657 int estimate_nobjects;
2663 class_oid =
ws_oid (class_mop);
2665 if (class_obj ==
NULL)
2688 keep_mops.
fun = fun;
2708 estimate_nobjects = -1;
2726 if (force_fetch_version_type ==
NULL)
2739 fetch_version_type = *force_fetch_version_type;
2744 while (nobjects != nfetched)
2751 locator_fetch_all (hfid, &lock, fetch_version_type, class_oid, &nobjects, &nfetched, &last_oid, &fetch_area);
2769 if (fetch_area ==
NULL)
2779 if (estimate_nobjects < nobjects)
2781 estimate_nobjects = nobjects;
2782 size =
sizeof (*keep_mops.
list) + (nobjects *
sizeof (
MOP *));
2819 return keep_mops.
list;
2908 #if defined (ENABLE_UNUSED_FUNCTION) 2931 locator_get_all_nested_mops (
MOP mop,
int prune_level,
DB_FETCH_MODE inst_purpose)
2936 #if defined(CUBRID_DEBUG) 2945 "locator_get_all_nested_mops: SYSTEM ERROR Incorrect use of function.\n Object OID %d|%d|%d" 2946 " associated with argument mop is not an instance.\n" 2947 " Calling locator_fetch_class instead..\n", oid->
volid, oid->
pageid, oid->
slotid);
2988 for (i = 0; i < mops->
num; i++)
3086 if (classname ==
NULL)
3099 if (*class_mop ==
NULL)
3171 if (for_update ==
false)
3188 #if defined (ENABLE_UNUSED_FUNCTION) 3213 locator_find_query_class (
const char *classname,
DB_FETCH_MODE purpose,
MOP * class_mop)
3249 if (class_mop ==
NULL)
3327 if (*object_p ==
NULL)
3359 if (*object_p ==
NULL)
3377 #if defined(CUBRID_DEBUG) 3379 "locator_cache: ** SYSTEM ERROR unknown fetch state operation for object = %d|%d|%d",
3415 if (class_mop != *hint_class_mop_p)
3418 if (*hint_class_p ==
NULL)
3427 *hint_class_mop_p = class_mop;
3432 if (*object_p ==
NULL)
3439 ws_cache (*object_p, mop, class_mop);
3450 if (*object_p ==
NULL)
3461 ws_cache (*object_p, mop, class_mop);
3468 #if defined(CUBRID_DEBUG) 3470 "locator_cache: ** SYSTEM ERROR unknown fetch state operation for object = %d|%d|%d",
3560 #if defined(CUBRID_DEBUG) 3562 "locator_cache: ** SYSTEM ERROR fetch operation without the content of the" 3601 #if defined(CUBRID_DEBUG) 3634 *hint_class_mop_p = *mop_p;
3635 *hint_class_p = *object_p;
3641 if (class_mop ==
NULL)
3653 #if defined(CUBRID_DEBUG) 3673 && (*object_p ==
NULL 3708 void (*fun) (
MOP mop,
MOBJ object,
void *args),
void *args)
3723 if (hint_class_mop && hint_class ==
NULL)
3725 hint_class_mop =
NULL;
3729 for (i = 0; i < mobjs->
num_objs; i++)
3763 if (call_fun ==
true)
3767 (*fun) (
mop, object, args);
3816 mflush->
hfid = hfid;
3906 while (mop_toid !=
NULL)
3908 next_mop_toid = mop_toid->
next;
3911 mop_toid = next_mop_toid;
3919 while (mop_toid !=
NULL)
3921 next_mop_toid = mop_toid->
next;
3924 mop_toid = next_mop_toid;
3935 #if defined(CUBRID_DEBUG) 3948 fprintf (out_fp,
"\n***Dumping mflush area ***\n");
3950 fprintf (out_fp,
"Num_objects = %d, Area = %p, Area Size = %d, Available_area_at = %p, Available area size = %d\n",
3954 locator_dump_copy_area (out_fp, mflush->
copy_area,
false);
3960 fprintf (stdout,
"Bad mflush structure");
4018 if (reply_copy_area !=
NULL)
4046 for (i = 0; i < mobjs->
num_objs; i++)
4049 content_ptr = reply_copyarea->
mem + obj->
offset;
4075 int content_size = 0;
4092 while (mop_toid !=
NULL)
4104 mop_toid = mop_toid->
next;
4109 assert (content_size >= 0);
4119 while (mop_toid !=
NULL)
4121 next_mop_toid = mop_toid->
next;
4128 mop_toid = next_mop_toid;
4133 while (mop_toid !=
NULL)
4135 next_mop_toid = mop_toid->
next;
4142 mop_toid = next_mop_toid;
4155 while (mop_toid !=
NULL)
4169 next_mop_toid = mop_toid->
next;
4176 mop_toid = next_mop_toid;
4184 while (mop_toid !=
NULL)
4201 next_mop_toid = mop_toid->
next;
4209 mop_toid = next_mop_toid;
4277 bool enable_class_to_disk;
4291 enable_class_to_disk =
false;
4294 if (isalone ==
true)
4296 enable_class_to_disk =
true;
4303 enable_class_to_disk =
true;
4308 if (enable_class_to_disk)
4351 if (*round_length_p <= mflush->copy_area->
length && isalone ==
true)
4401 bool enable_mem_to_disk;
4408 enable_mem_to_disk =
false;
4411 if (isalone ==
true)
4413 enable_mem_to_disk =
true;
4420 enable_mem_to_disk =
true;
4425 if (enable_mem_to_disk)
4464 if (*round_length_p <= mflush->copy_area->
length && isalone ==
true)
4518 bool has_unique_index;
4548 if (mop_toid->
mop == mop)
4579 #if defined(CUBRID_DEBUG) 4583 "locator_mflush: SYSTEM ERROR OID %d|%d|%d in the workspace is a NULL_OID. It cannot be...\n",
4594 #if defined(CUBRID_DEBUG) 4596 "locator_mflush: SYSTEM ERROR Unable to flush.\n Workspace does not know class_mop for object " 4602 if (
WS_ISDIRTY (class_mop) && class_mop != mop)
4657 has_unique_index =
false;
4678 hfid = mflush->
hfid;
4687 else if (
object ==
NULL)
4691 #if defined(CUBRID_DEBUG) 4693 "locator_mflush: SYSTEM ERROR, The MOP of object OID %d|%d|%d is dirty, is not marked as\n" 4694 " deleted and does not have the object\n", oid->
volid, oid->
pageid, oid->
slotid);
4728 has_unique_index =
false;
4758 hfid = mflush->
hfid;
4790 if (mop_toid ==
NULL)
4835 if (mop_uoid ==
NULL)
4876 if (has_unique_index)
4912 #if !defined (NDEBUG) 4918 hole_size = MIN (wasted_length, mflush->
recdes.
area_size - round_length);
4921 memset (mflush->
recdes.
data + round_length, 0, hole_size);
4926 round_length = round_length + wasted_length;
4956 int required_length;
4957 int key_length, round_length, wasted_length;
4958 char *ptr, *obj_start_p;
4963 if (repl_obj ==
NULL)
5039 #if !defined(NDEBUG) 5041 memset (obj_start_p + mflush->
obj->
length, 0,
5044 round_length = mflush->
obj->
length + wasted_length;
5045 mflush->
recdes.
data = obj_start_p + round_length;
5075 if (class_mop ==
NULL)
5141 int retry_count = 0;
5144 if (inst_mop ==
NULL)
5185 if (retry_count < 2)
5203 else if (decache ==
true)
5213 if (error_code ==
NO_ERROR && retry_count > 1)
5241 #if defined (ENABLE_UNUSED_FUNCTION) 5257 locator_flush_and_decache_instance (
MOP mop)
5287 bool is_partitioned =
false;
5289 if (class_mop ==
NULL)
5295 if (class_obj ==
NULL)
5305 class_list.
op = class_mop;
5313 is_partitioned =
true;
5338 for (obj = &class_list; obj !=
NULL && error_code ==
NO_ERROR; obj = obj->
next)
5377 for (obj = &class_list; obj !=
NULL; obj = obj->
next)
5410 if (class_obj ==
NULL)
5504 bool continued_on_error =
false;
5515 continued_on_error =
true;
5523 if (error ==
NO_ERROR && continued_on_error ==
true)
5556 if (root_mop ==
NULL)
5561 ws_cache (class_root, root_mop, root_mop);
5601 if (classname ==
NULL)
5669 if (class_mop !=
NULL)
5701 if (class_obj ==
NULL)
5718 if (class_obj ==
NULL)
5723 oid =
ws_oid (class_mop);
5730 oid =
ws_oid (class_mop);
5861 const char *classname;
5866 if (class_obj ==
NULL)
5943 if (class_obj !=
NULL)
5982 if (new_classname ==
NULL)
5988 if (new_classname !=
NULL && tmp_class_mop !=
NULL && tmp_class_mop != class_mop
5997 if (class_obj !=
NULL)
6048 #if defined (ENABLE_UNUSED_FUNCTION) 6087 int expected_length;
6114 if (
object !=
NULL && class_obj !=
NULL)
6117 if (expected_length < (
int)
sizeof (
OID))
6119 expected_length = (int)
sizeof (
OID);
6124 expected_length = (int)
sizeof (
OID);
6184 if (fetch_area ==
NULL)
6222 if (class_mop !=
NULL)
6269 bool need_call_server;
6273 OID *guessmany_class_oids =
NULL;
6274 int *guessmany_class_chns =
NULL;
6278 need_call_server = need_flush =
false;
6284 for (i = 0; i < num_classes && (need_call_server ==
false || need_flush ==
false); i++)
6286 if (many_classnames[i])
6293 if (class_mop ==
NULL)
6295 need_call_server =
true;
6301 || (class_obj !=
NULL &&
WS_CHN (class_obj) <= 1)))
6306 if (need_call_server ==
true)
6317 need_call_server =
true;
6327 conv_lock =
lock_Conv[many_locks[
i]][current_lock];
6330 if (current_lock ==
NULL_LOCK || current_lock != conv_lock)
6332 need_call_server =
true;
6342 if (!need_call_server)
6347 guessmany_class_oids = (
OID *) malloc (
sizeof (*guessmany_class_oids) * num_classes);
6348 if (guessmany_class_oids ==
NULL)
6351 sizeof (*guessmany_class_oids) * num_classes);
6355 guessmany_class_chns = (
int *) malloc (
sizeof (*guessmany_class_chns) * num_classes);
6356 if (guessmany_class_chns ==
NULL)
6358 if (guessmany_class_oids !=
NULL)
6364 sizeof (*guessmany_class_chns) * num_classes);
6368 for (i = 0; i < num_classes; i++)
6370 if (many_classnames[i] && (class_mop =
ws_find_class (many_classnames[i])) !=
NULL)
6376 if (need_flush ==
true)
6383 || (class_obj !=
NULL &&
WS_CHN (class_obj) <= 1)))
6389 if (guessmany_class_oids !=
NULL)
6397 guessmany_class_chns[
i] =
ws_chn (class_obj);
6408 if (guessmany_class_oids !=
NULL)
6418 guessmany_class_oids, guessmany_class_chns, quit_on_errors, lock_rr_tran,
6419 &lockhint, &fetch_area);
6421 if (guessmany_class_oids !=
NULL)
6426 if (guessmany_class_chns !=
NULL)
6459 if (fetch_area !=
NULL)
6472 quit_on_errors =
true;
6489 if (fetch_ptr ==
NULL)
6498 fetch_ptr[idx] =
NULL;
6502 if (fetch_ptr[idx] !=
NULL)
6505 fetch_ptr[idx] =
NULL;
6512 for (i = 0; i < idx; i++)
6514 if (fetch_ptr[i] !=
NULL)
6521 if (fetch_ptr != fetch_copyarea)
6536 if (lockhint !=
NULL)
6614 *out_class_mop = class_mop;
6641 if (oid_map_p ==
NULL)
6649 oid_map_p->
mop = (
void *) obj_mop;
6713 for (class_oidset = oidset->
classes; class_oidset !=
NULL; class_oidset = class_oidset->
next)
6715 for (oid = class_oidset->
oids; oid !=
NULL; oid = oid->
next)
6723 if (callback !=
NULL)
6767 if (class_mop !=
NULL)
6838 int error_code =
NO_ERROR, map_status;
6910 (void)
ws_find (mop, &
object);
bool sm_has_indexes(MOBJ classobj)
enum ws_map_status WS_MAP_STATUS
int locator_does_exist(OID *oidp, int chn, LOCK lock, OID *class_oid, int class_chn, int need_fetching, int prefetch, LC_COPYAREA **fetch_copyarea, LC_FETCH_VERSION_TYPE fetch_version_type)
#define ER_LK_UNILATERALLY_ABORTED
#define ER_HEAP_UNKNOWN_CLASS_OF_INSTANCE
static void locator_mflush_set_dirty(MOP mop, MOBJ ignore_object, void *ignore_argument)
WS_REPL_OBJ * ws_get_repl_obj_from_list(void)
static int locator_mflush_initialize(LOCATOR_MFLUSH_CACHE *mflush, MOP class_mop, MOBJ clazz, HFID *hfid, bool decache, bool isone_mflush)
LC_LOCKSET_CLASSOF * classes
#define WS_IS_DELETED(mop)
#define WS_MOP_SET_PRUNE_LEVEL(mop, value)
int repl_set_info(REPL_INFO *repl_info)
int locator_get_append_lsa(struct log_lsa *lsa)
static int locator_mflush_force(LOCATOR_MFLUSH_CACHE *mflush)
LOCATOR_MFLUSH_TEMP_OID * mop_toids
static int locator_internal_flush_instance(MOP inst_mop, bool decache)
LC_FIND_CLASSNAME locator_find_lockhint_class_oids(int num_classes, const char **many_classnames, LOCK *many_locks, int *many_need_subclasses, LC_PREFETCH_FLAGS *many_flags, OID *guessed_class_oids, int *guessed_class_chns, int quit_on_errors, LOCK lock_rr_tran, LC_LOCKHINT **lockhint, LC_COPYAREA **fetch_copyarea)
#define WS_SET_FOUND_DELETED(mop)
static int locator_lock_class_of_instance(MOP inst_mop, MOP *class_mop, LOCK lock)
static int locator_class_to_disk(LOCATOR_MFLUSH_CACHE *mflush, MOBJ object, bool *has_index, int *round_length_p, WS_MAP_STATUS *map_status)
MOP ws_mop(const OID *oid, MOP class_mop)
int sm_decache_mop(MOP mop, void *info)
int locator_notify_isolation_incons(LC_COPYAREA **synch_copyarea)
DB_OBJECT * db_real_instance(DB_OBJECT *obj)
#define LC_PRIOR_ONEOBJ_PTR_IN_COPYAREA(oneobj_ptr)
void ws_set_class(MOP inst, MOP class_mop)
int sm_mark_system_class(MOP classop, int on_or_off)
MOBJ locator_fetch_set(int num_mops, MOP *mop_set, DB_FETCH_MODE inst_purpose, DB_FETCH_MODE class_purpose, int quit_on_errors)
void locator_free_copy_area(LC_COPYAREA *copyarea)
int locator_assign_oid_batch(LC_OIDSET *oidset)
static volatile sig_atomic_t lc_Is_siginterrupt
MOBJ locator_create_heap_if_needed(MOP class_mop, bool reuse_oid)
int locator_fetch_lockset(LC_LOCKSET *lockset, LC_COPYAREA **fetch_copyarea)
void ws_mark_deleted(MOP mop)
int ws_map_class_dirty(MOP class_op, MAPFUNC function, void *args)
#define OID_ASSIGN_TEMPOID(oidp)
#define LC_START_ONEOBJ_PTR_IN_COPYAREA(manyobjs_ptr)
static int locator_cache(LC_COPYAREA *copy_area, MOP hint_class_mop, MOBJ hint_class, void(*fun)(MOP mop, MOBJ object, void *args), void *args)
void locator_manyobj_flag_set(LC_COPYAREA_MANYOBJS *copyarea, enum MULTI_UPDATE_FLAG muf)
int locator_repl_force(LC_COPYAREA *copy_area, LC_COPYAREA **reply_copy_area)
const void * mht_put(MHT_TABLE *ht, const void *key, void *data)
#define LC_FETCH_IS_DIRTY_VERSION_NEEDED(fetch_type)
#define ASSERT_ERROR_AND_SET(error_code)
int num_classes_processed
static LC_FIND_CLASSNAME locator_find_class_by_oid(MOP *class_mop, const char *classname, OID *class_oid, LOCK lock)
enum ws_find_mop_status WS_FIND_MOP_STATUS
int ws_Error_ignore_count
#define LC_FIND_ONEOBJ_PTR_IN_COPYAREA(manyobjs_ptr, obj_num)
MOP locator_add_root(OID *root_oid, MOBJ class_root)
#define BOOT_IS_CLIENT_RESTARTED()
static int class_type(DB_OBJECT *class_obj)
void locator_clear_oid_set(THREAD_ENTRY *thread_p, LC_OIDSET *oidset)
void(* LC_OIDMAP_CALLBACK)(LC_OIDMAP *map)
int locator_get_reserved_class_name_oid(const char *classname, OID *class_oid)
int locator_get_cache_coherency_number(MOP mop)
int locator_fetch_lockhint_classes(LC_LOCKHINT *lockhint, LC_COPYAREA **fetch_copyarea)
#define OID_SET_NULL(oidp)
void locator_free_lockhint(LC_LOCKHINT *lockhint)
void ws_set_mop_fetched_with_current_snapshot(MOP mop)
void locator_synch_isolation_incons(void)
int locator_fetch(OID *oidp, int chn, LOCK lock, LC_FETCH_VERSION_TYPE fetch_version_type, OID *class_oid, int class_chn, int prefetch, LC_COPYAREA **fetch_copyarea)
void log_set_interrupt(int set)
MOP locator_find_class(const char *classname)
int ws_update_oid_and_class(MOP mop, OID *new_oid, OID *new_class_oid)
MOBJ locator_fetch_class_of_instance(MOP inst_mop, MOP *class_mop, DB_FETCH_MODE purpose)
enum lc_prefetch_flags LC_PREFETCH_FLAGS
static int locator_instance_decache(MOP mop, void *ignore)
MOBJ locator_has_heap(MOP class_mop)
LC_LOCKSET_REQOBJ * objects
#define PTR_ALIGN(addr, boundary)
#define WS_MOP_SET_COMPOSITION_FETCH(mop)
void locator_free_lockset(LC_LOCKSET *lockset)
int locator_update_tree_classes(MOP *classes_mop_set, int num_classes)
void locator_free_list_mops(LIST_MOPS *mops)
#define er_log_debug(...)
LIST_MOPS * locator_get_all_mops(MOP class_mop, DB_FETCH_MODE purpose, LC_FETCH_VERSION_TYPE *force_fetch_version_type)
MOBJ locator_prepare_rename_class(MOP class_mop, const char *old_classname, const char *new_classname)
MOP locator_add_instance(MOBJ instance, MOP class_mop)
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
static int locator_lock_nested(MOP mop, LOCK lock, int prune_level, int quit_on_errors, int(*fun)(LC_LOCKSET *req, void *args), void *args)
#define COPY_OID(dest_oid_ptr, src_oid_ptr)
static int locator_lock_set(int num_mops, MOP *vector_mop, LOCK reqobj_inst_lock, LOCK reqobj_class_lock, int quit_on_errors)
LC_OIDMAP * locator_add_oid_set(THREAD_ENTRY *thread_p, LC_OIDSET *set, HFID *heap, OID *class_oid, OID *obj_oid)
#define OR_MVCC_MAX_HEADER_SIZE
#define LC_UPDATE_OPERATION_TYPE(p)
LC_FETCH_VERSION_TYPE fetch_version_type
int heap_destroy_newly_created(const HFID *hfid, const OID *class_oid)
LOCATOR_MFLUSH_TEMP_OID * mop_uoids
LC_OIDMAP * locator_add_oidset_object(LC_OIDSET *oidset, MOP obj_mop)
LC_CLASS_OIDSET * classes
static void locator_keep_mops(MOP mop, MOBJ object, void *kmops)
MOP ws_cache_with_oid(MOBJ obj, OID *oid, MOP class_mop)
static int locator_save_nested_mops(LC_LOCKSET *lockset, void *save_mops)
LOCK locator_fetch_mode_to_lock(DB_FETCH_MODE purpose, LC_OBJTYPE type, LC_FETCH_VERSION_TYPE fetch_version_type)
void er_stack_pop_and_keep_error(void)
static int locator_get_rest_objects_classes(LC_LOCKSET *lockset, MOP class_mop, MOBJ class_obj)
LC_FIND_CLASSNAME locator_find_class_oid(const char *class_name, OID *class_oid, LOCK lock)
MOBJ locator_fetch_class(MOP class_mop, DB_FETCH_MODE purpose)
void ws_add_classname(MOBJ classobj, MOP classmop, const char *cl_name)
#define OID_INIT_TEMPID()
static void locator_mflush_reset(LOCATOR_MFLUSH_CACHE *mflush)
MOBJ locator_fetch_object(MOP mop, DB_FETCH_MODE purpose, LC_FETCH_VERSION_TYPE fetch_version_type)
void mht_destroy(MHT_TABLE *ht)
#define LC_RECDES_TO_GET_ONEOBJ(copy_area_ptr, oneobj_ptr, recdes_ptr)
void er_set(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
void ws_set_repl_error_into_error_link(LC_COPYAREA_ONEOBJ *obj, char *content_ptr)
const char * sm_ch_name(const MOBJ clobj)
static bool locator_can_skip_fetch_from_server(MOP mop, LOCK *lock, LC_FETCH_VERSION_TYPE fetch_version_type)
#define ER_LC_PARTIALLY_FAILED_TO_FLUSH
static int locator_mem_to_disk(LOCATOR_MFLUSH_CACHE *mflush, MOBJ object, bool *has_index, int *round_length_p, WS_MAP_STATUS *map_status)
#define ER_LC_UNKNOWN_CLASSNAME
int au_fetch_class(MOP op, SM_CLASS **class_ptr, AU_FETCHMODE fetchmode, DB_AUTH type)
#define OID_IS_ROOTOID(oidp)
struct db_object * class_mop
void ws_free_repl_obj(WS_REPL_OBJ *obj)
void ws_cache(MOBJ obj, MOP mop, MOP class_mop)
#define ER_OUT_OF_VIRTUAL_MEMORY
int or_chn(RECDES *record)
static int locator_decache_lock(MOP mop, void *ignore)
HFID * sm_ch_heap(MOBJ clobj)
void locator_set_sig_interrupt(int set)
LC_COPYAREA * locator_allocate_copy_area_by_length(int min_length)
static int locator_add_to_oidset_when_temp_oid(MOP mop, void *data)
int locator_flush_class(MOP class_mop)
static void locator_cache_lock(MOP mop, MOBJ ignore_notgiven_object, void *xcache_lock)
#define HFID_SET_NULL(hfid)
#define OID_EQ(oidp1, oidp2)
MOP ws_class_mop(MOP mop)
int locator_flush_replication_info(REPL_INFO *repl_info)
void locator_remove_instance(MOP mop)
int tran_abort_only_client(bool is_server_down)
#define OR_MVCC_INSERT_HEADER_SIZE
int locator_assign_all_permanent_oids(void)
#define WS_SET_DELETED(mop)
void * mht_get(MHT_TABLE *ht, const void *key)
int locator_assign_oidset(LC_OIDSET *oidset, LC_OIDMAP_CALLBACK callback)
int heap_create(HFID *hfid, const OID *class_oid, bool reuse_oid)
LOCK ws_get_lock(MOP mop)
#define LC_NEXT_ONEOBJ_PTR_IN_COPYAREA(oneobj_ptr)
int vid_flush_all_instances(MOP class_mop, bool decache)
OID * sm_ch_rep_dir(MOBJ clobj)
struct lc_class_oidset * next
#define TM_TRAN_READ_FETCH_VERSION()
LC_OIDSET * locator_make_oid_set(void)
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))
int locator_assign_oid(const HFID *hfid, OID *perm_oid, int expected_length, OID *class_oid, const char *class_name)
static int locator_mflush_reallocate_copy_area(LOCATOR_MFLUSH_CACHE *mflush, int minsize)
MOBJ locator_fetch_nested(MOP mop, DB_FETCH_MODE purpose, int prune_level, int quit_on_errors)
unsigned int oid_hash(const void *key_oid, unsigned int htsize)
MOBJ locator_fetch_instance(MOP mop, DB_FETCH_MODE purpose, LC_FETCH_VERSION_TYPE fetch_version_type)
#define WS_MOP_GET_PRUNE_LEVEL(mop)
static int locator_lock(MOP mop, LC_OBJTYPE isclass, LOCK lock, LC_FETCH_VERSION_TYPE fetch_version_type)
static int locator_check_object_and_get_class(MOP obj_mop, MOP *out_class_mop)
LC_FIND_CLASSNAME locator_reserve_class_names(const int num_classes, const char **class_names, OID *class_oids)
static int locator_cache_not_have_object(MOP *mop_p, MOBJ *object_p, bool *call_fun, LC_COPYAREA_ONEOBJ *obj)
void ws_disconnect_deleted_instances(MOP classop)
MOBJ locator_update_instance(MOP mop)
static LC_FIND_CLASSNAME locator_find_class_by_name(const char *classname, LOCK lock, MOP *class_mop)
void ws_update_oid(MOP mop, OID *newoid)
static LIST_MOPS * locator_fun_get_all_mops(MOP class_mop, DB_FETCH_MODE purpose, int(*fun)(MOBJ class_obj), LC_FETCH_VERSION_TYPE *force_fetch_version_type)
void locator_free_oid_set(THREAD_ENTRY *thread_p, LC_OIDSET *oidset)
static void locator_cache_lock_set(MOP mop, MOBJ ignore_notgiven_object, void *xlockset)
void ws_drop_classname(MOBJ classobj)
#define LC_RECDES_IN_COPYAREA(copy_area_ptr, recdes_ptr)
int oid_compare_equals(const void *key_oid1, const void *key_oid2)
int ws_Error_ignore_list[-ER_LAST_ERROR]
int ws_mop_compare(MOP mop1, MOP mop2)
int locator_flush_instance(MOP mop)
int locator_get_class(OID *class_oid, int class_chn, const OID *oid, LOCK lock, int prefetching, LC_COPYAREA **fetch_copyarea)
MOP locator_find_class_with_purpose(const char *classname, bool for_update)
LIST_MOPS * locator_get_all_class_mops(DB_FETCH_MODE purpose, int(*fun)(MOBJ class_obj))
static void error(const char *msg)
void ws_set_lock(MOP mop, LOCK lock)
static void locator_mflush_end(LOCATOR_MFLUSH_CACHE *mflush)
int locator_repl_flush_all(void)
entry_workpool * instance
int locator_decache_all_lock_instances(MOP class_mop)
#define HFID_IS_NULL(hfid)
int locator_does_exist_object(MOP mop, DB_FETCH_MODE purpose)
OID * locator_assign_permanent_oid(MOP mop)
#define ER_LC_CLASSNAME_EXIST
int sm_partitioned_class_type(DB_OBJECT *classop, int *partition_type, char *keyattr, MOP **partitions)
int locator_remove_class(MOP class_mop)
int locator_all_flush(void)
LC_FIND_CLASSNAME locator_lockhint_classes(int num_classes, const char **many_classnames, LOCK *many_locks, int *need_subclasses, LC_PREFETCH_FLAGS *flags, int quit_on_errors, LOCK lock_rr_tran)
int sm_class_has_unique_constraint(MOBJ classobj, MOP classop, bool check_subclasses, bool *has_unique)
int(* fun)(MOBJ class_obj)
int vid_flush_instance(MOP mop, void *arg)
#define free_and_init(ptr)
unsigned char pruning_type
#define LC_ONEOBJ_SET_HAS_INDEX(obj)
bool sm_is_reuse_oid_class(MOP op)
LC_FIND_CLASSNAME locator_reserve_class_name(const char *class_name, OID *class_oid)
#define ER_OBJ_INVALID_ARGUMENTS
static void locator_cache_lock_lockhint_classes(LC_LOCKHINT *lockhint)
#define DB_WASTED_ALIGN(offset, align)
int ws_map_dirty(MAPFUNC function, void *args)
#define ER_HEAP_UNKNOWN_OBJECT
#define LC_MANYOBJS_PTR_IN_COPYAREA(copy_areaptr)
MOP ws_find_class(const char *name)
int locator_force(LC_COPYAREA *copy_area, int num_ignore_error_list, int *ignore_error_list, int content_size)
LOCATOR_MFLUSH_TEMP_OID * next
LC_FIND_CLASSNAME locator_delete_class_name(const char *class_name)
LC_FIND_CLASSNAME locator_rename_class_name(const char *old_name, const char *new_name, OID *class_oid)
#define IS_WRITE_EXCLUSIVE_LOCK(lock)
int locator_fetch_all(const HFID *hfid, LOCK *lock, LC_FETCH_VERSION_TYPE fetch_version_type, OID *class_oidp, int *nobjects, int *nfetched, OID *last_oidp, LC_COPYAREA **fetch_copyarea)
int locator_flush_for_multi_update(MOP class_mop)
int locator_fetch_all_reference_lockset(OID *oid, int chn, OID *class_oid, int class_chn, LOCK lock, int quit_on_errors, int prune_level, LC_LOCKSET **lockset, LC_COPYAREA **fetch_copyarea)
int locator_flush_all_instances(MOP class_mop, bool decache)
#define ER_LC_LOCK_CACHE_ERROR
static int locator_cache_object_instance(MOP mop, MOP class_mop, MOP *hint_class_mop_p, MOBJ *hint_class_p, LC_COPYAREA_ONEOBJ *obj, MOBJ *object_p, RECDES *recdes_p, bool *call_fun)
static int locator_set_chn_classes_objects(LC_LOCKSET *lockset)
MOBJ locator_update_class(MOP mop)
static LOCK locator_to_prefetched_lock(LOCK class_lock)
static int locator_lock_and_doesexist(MOP mop, LOCK lock, LC_OBJTYPE isclass)
LC_COPYAREA_MANYOBJS * mobjs
static int locator_repl_mflush(LOCATOR_MFLUSH_CACHE *mflush)
int repl_log_get_append_lsa(LOG_LSA *lsa)
int num_classes_of_reqobjs_processed
#define LC_INSERT_OPERATION_TYPE(p)
int locator_is_class(MOP mop, DB_FETCH_MODE hint_purpose)
int num_classes_of_reqobjs
#define LC_ONEOBJ_SET_HAS_UNIQUE_INDEX(obj)
bool locator_is_root(MOP mop)
bool ws_is_mop_fetched_with_current_snapshot(MOP mop)
#define LC_IS_FLUSH_INSERT(operation)
int num_reqobjs_processed
static int locator_repl_mflush_force(LOCATOR_MFLUSH_CACHE *mflush)
LC_LOCKSET * locator_allocate_lockset(int max_reqobjs, LOCK reqobj_inst_lock, LOCK reqobj_class_lock, int quit_on_errors)
int ws_find(MOP mop, MOBJ *obj)
static void locator_repl_mflush_check_error(LC_COPYAREA *mflush)
#define WS_MOP_GET_COMPOSITION_FETCH(mop)
static int locator_mflush(MOP mop, void *mf)
static int locator_cache_have_object(MOP *mop_p, MOBJ *object_p, RECDES *recdes_p, MOP *hint_class_mop_p, MOBJ *hint_class_p, bool *call_fun, LC_COPYAREA_ONEOBJ *obj)
#define HFID_COPY(hfid_ptr1, hfid_ptr2)
LC_COPYAREA_OPERATION operation
int last_classof_reqobjs_cached
LC_LOCKHINT_CLASS * classes
static int locator_cache_object_class(MOP mop, LC_COPYAREA_ONEOBJ *obj, MOBJ *object_p, RECDES *recdes_p, bool *call_fun)
#define TM_TRAN_ISOLATION()
MOP locator_add_class(MOBJ class_obj, const char *classname)
HFID * sm_Root_class_hfid
#define ER_LC_UNEXPECTED_PERM_OID