Loading Docs/changelog-5.0.xml 0 → 100755 +18 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"> <!-- This is a dummy changelog file. Don't use it yet. It merges upward without conflict. --> <appendix id="news-5.0-x"> <title> Changes in release 5.0.x </title> <para> This is a dummy changelog file. Don't use it yet. </para> </appendix> client/mysql.cc +7 −2 Original line number Diff line number Diff line Loading @@ -44,7 +44,7 @@ #include <locale.h> #endif const char *VER= "14.8"; const char *VER= "14.9"; /* Don't try to make a nice table if the data is too big */ #define MAX_COLUMN_LENGTH 1024 Loading Loading @@ -1045,7 +1045,12 @@ static COMMANDS *find_command (char *name,char cmd_char) { while (my_isspace(charset_info,*name)) name++; if (strstr(name, delimiter) || strstr(name, "\\g")) /* As special case we allow row that starts with word delimiter to be able to change delimiter if someone has delimiter 'delimiter'. */ if (strstr(name, "\\g") || (strstr(name, delimiter) && strncmp(name, "delimiter", 9))) return ((COMMANDS *) 0); if ((end=strcont(name," \t"))) { Loading innobase/include/row0vers.h +4 −0 Original line number Diff line number Diff line Loading @@ -79,7 +79,11 @@ row_vers_build_for_consistent_read( mtr_t* mtr, /* in: mtr holding the latch on rec; it will also hold the latch on purge_view */ dict_index_t* index, /* in: the clustered index */ ulint** offsets,/* in/out: offsets returned by rec_get_offsets(rec, index) */ read_view_t* view, /* in: the consistent read view */ mem_heap_t** offset_heap,/* in/out: memory heap from which the offsets are allocated */ mem_heap_t* in_heap,/* in: memory heap from which the memory for old_vers is allocated; memory for possible intermediate versions is allocated and freed Loading innobase/include/srv0srv.h +5 −4 Original line number Diff line number Diff line Loading @@ -93,7 +93,7 @@ extern ulint srv_max_n_open_files; extern ulint srv_max_dirty_pages_pct; extern ulint srv_force_recovery; extern ulint srv_thread_concurrency; extern ulong srv_thread_concurrency; extern ulint srv_max_n_threads; Loading @@ -112,6 +112,7 @@ extern ibool srv_use_checksums; extern ibool srv_set_thread_priorities; extern int srv_query_thread_priority; extern ulong srv_max_buf_pool_modified_pct; extern ulong srv_max_purge_lag; extern ibool srv_use_awe; extern ibool srv_use_adaptive_hash_indexes; Loading @@ -131,9 +132,9 @@ extern ibool srv_print_innodb_table_monitor; extern ibool srv_lock_timeout_and_monitor_active; extern ibool srv_error_monitor_active; extern ulint srv_n_spin_wait_rounds; extern ulint srv_n_free_tickets_to_enter; extern ulint srv_thread_sleep_delay; extern ulong srv_n_spin_wait_rounds; extern ulong srv_n_free_tickets_to_enter; extern ulong srv_thread_sleep_delay; extern ulint srv_spin_wait_delay; extern ibool srv_priority_boost; Loading innobase/row/row0sel.c +50 −31 Original line number Diff line number Diff line Loading @@ -510,6 +510,10 @@ row_sel_build_prev_vers( read_view_t* read_view, /* in: read view */ plan_t* plan, /* in: plan node for table */ rec_t* rec, /* in: record in a clustered index */ ulint** offsets, /* in/out: offsets returned by rec_get_offsets(rec, plan->index) */ mem_heap_t** offset_heap, /* in/out: memory heap from which the offsets are allocated */ rec_t** old_vers, /* out: old version, or NULL if the record does not exist in the view: i.e., it was freshly inserted Loading @@ -525,8 +529,8 @@ row_sel_build_prev_vers( } err = row_vers_build_for_consistent_read(rec, mtr, plan->index, read_view, plan->old_vers_heap, old_vers); offsets, read_view, offset_heap, plan->old_vers_heap, old_vers); return(err); } Loading Loading @@ -697,7 +701,8 @@ row_sel_get_clust_rec( node->read_view)) { err = row_sel_build_prev_vers(node->read_view, plan, clust_rec, &old_vers, mtr); clust_rec, &offsets, &heap, &old_vers, mtr); if (err != DB_SUCCESS) { goto err_exit; Loading Loading @@ -1396,14 +1401,18 @@ row_sel( node->read_view)) { err = row_sel_build_prev_vers(node->read_view, plan, rec, &old_vers, &mtr); plan, rec, &offsets, &heap, &old_vers, &mtr); if (err != DB_SUCCESS) { goto lock_wait_or_error; } if (old_vers == NULL) { offsets = rec_get_offsets( rec, index, offsets, ULINT_UNDEFINED, &heap); row_sel_fetch_columns(index, rec, offsets, UT_LIST_GET_FIRST(plan->columns)); Loading @@ -1417,8 +1426,6 @@ row_sel( } rec = old_vers; offsets = rec_get_offsets(rec, index, offsets, ULINT_UNDEFINED, &heap); } } else if (!lock_sec_rec_cons_read_sees(rec, index, node->read_view)) { Loading Loading @@ -2535,6 +2542,10 @@ row_sel_build_prev_vers_for_mysql( dict_index_t* clust_index, /* in: clustered index */ row_prebuilt_t* prebuilt, /* in: prebuilt struct */ rec_t* rec, /* in: record in a clustered index */ ulint** offsets, /* in/out: offsets returned by rec_get_offsets(rec, clust_index) */ mem_heap_t** offset_heap, /* in/out: memory heap from which the offsets are allocated */ rec_t** old_vers, /* out: old version, or NULL if the record does not exist in the view: i.e., it was freshly inserted Loading @@ -2550,8 +2561,8 @@ row_sel_build_prev_vers_for_mysql( } err = row_vers_build_for_consistent_read(rec, mtr, clust_index, read_view, prebuilt->old_vers_heap, old_vers); offsets, read_view, offset_heap, prebuilt->old_vers_heap, old_vers); return(err); } Loading @@ -2575,6 +2586,10 @@ row_sel_get_clust_rec_for_mysql( it, NULL if the old version did not exist in the read view, i.e., it was a fresh inserted version */ ulint** offsets,/* out: offsets returned by rec_get_offsets(out_rec, clust_index) */ mem_heap_t** offset_heap,/* in/out: memory heap from which the offsets are allocated */ mtr_t* mtr) /* in: mtr used to get access to the non-clustered record; the same mtr is used to access the clustered index */ Loading @@ -2584,9 +2599,6 @@ row_sel_get_clust_rec_for_mysql( rec_t* old_vers; ulint err; trx_t* trx; mem_heap_t* heap = NULL; ulint offsets_[100] = { 100, }; ulint* offsets = offsets_; *out_rec = NULL; trx = thr_get_trx(thr); Loading Loading @@ -2642,8 +2654,8 @@ row_sel_get_clust_rec_for_mysql( goto func_exit; } offsets = rec_get_offsets(clust_rec, clust_index, offsets, ULINT_UNDEFINED, &heap); *offsets = rec_get_offsets(clust_rec, clust_index, *offsets, ULINT_UNDEFINED, offset_heap); if (prebuilt->select_lock_type != LOCK_NONE) { /* Try to place a lock on the index record; we are searching Loading @@ -2651,7 +2663,7 @@ row_sel_get_clust_rec_for_mysql( we set a LOCK_REC_NOT_GAP type lock */ err = lock_clust_rec_read_check_and_lock(0, clust_rec, clust_index, offsets, clust_index, *offsets, prebuilt->select_lock_type, LOCK_REC_NOT_GAP, thr); if (err != DB_SUCCESS) { Loading @@ -2669,11 +2681,12 @@ row_sel_get_clust_rec_for_mysql( if (trx->isolation_level > TRX_ISO_READ_UNCOMMITTED && !lock_clust_rec_cons_read_sees(clust_rec, clust_index, offsets, trx->read_view)) { *offsets, trx->read_view)) { err = row_sel_build_prev_vers_for_mysql( trx->read_view, clust_index, prebuilt, clust_rec, offsets, offset_heap, &old_vers, mtr); if (err != DB_SUCCESS) { Loading Loading @@ -2722,9 +2735,6 @@ row_sel_get_clust_rec_for_mysql( err = DB_SUCCESS; err_exit: if (heap) { mem_heap_free(heap); } return(err); } Loading Loading @@ -3671,6 +3681,7 @@ row_search_for_mysql( err = row_sel_build_prev_vers_for_mysql( trx->read_view, clust_index, prebuilt, rec, &offsets, &heap, &old_vers, &mtr); if (err != DB_SUCCESS) { Loading Loading @@ -3714,6 +3725,12 @@ row_search_for_mysql( index_rec = rec; /* Before and after the following "if" block, "offsets" will be related to "rec", which may be in "index", a secondary index or the clustered index ("clust_index"). However, after this "if" block, "rec" may be pointing to "clust_rec" of "clust_index". */ ut_ad(rec_offs_validate(rec, index, offsets)); if (index != clust_index && (cons_read_requires_clust_rec || prebuilt->need_to_access_clustered)) { Loading @@ -3723,7 +3740,8 @@ row_search_for_mysql( mtr_has_extra_clust_latch = TRUE; err = row_sel_get_clust_rec_for_mysql(prebuilt, index, rec, thr, &clust_rec, &mtr); thr, &clust_rec, &offsets, &heap, &mtr); if (err != DB_SUCCESS) { goto lock_wait_or_error; Loading @@ -3745,19 +3763,17 @@ row_search_for_mysql( if (prebuilt->need_to_access_clustered) { rec = clust_rec; } } if (prebuilt->need_to_access_clustered) { ut_ad(rec == clust_rec || index == clust_index); offsets = rec_get_offsets(rec, clust_index, offsets, ULINT_UNDEFINED, &heap); ut_ad(rec_offs_validate(rec, clust_index, offsets)); } else { offsets = rec_get_offsets(rec, index, offsets, ULINT_UNDEFINED, &heap); } } /* We found a qualifying row */ ut_ad(rec_offs_validate(rec, rec == clust_rec ? clust_index : index, offsets)); if (prebuilt->n_rows_fetched >= MYSQL_FETCH_CACHE_THRESHOLD && prebuilt->select_lock_type == LOCK_NONE Loading Loading @@ -3800,8 +3816,11 @@ row_search_for_mysql( } if (prebuilt->clust_index_was_generated) { offsets = rec_get_offsets(index_rec, index, offsets, if (rec != index_rec) { offsets = rec_get_offsets( index_rec, index, offsets, ULINT_UNDEFINED, &heap); } row_sel_store_row_id_to_prebuilt(prebuilt, index_rec, index, offsets); } Loading Loading
Docs/changelog-5.0.xml 0 → 100755 +18 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"> <!-- This is a dummy changelog file. Don't use it yet. It merges upward without conflict. --> <appendix id="news-5.0-x"> <title> Changes in release 5.0.x </title> <para> This is a dummy changelog file. Don't use it yet. </para> </appendix>
client/mysql.cc +7 −2 Original line number Diff line number Diff line Loading @@ -44,7 +44,7 @@ #include <locale.h> #endif const char *VER= "14.8"; const char *VER= "14.9"; /* Don't try to make a nice table if the data is too big */ #define MAX_COLUMN_LENGTH 1024 Loading Loading @@ -1045,7 +1045,12 @@ static COMMANDS *find_command (char *name,char cmd_char) { while (my_isspace(charset_info,*name)) name++; if (strstr(name, delimiter) || strstr(name, "\\g")) /* As special case we allow row that starts with word delimiter to be able to change delimiter if someone has delimiter 'delimiter'. */ if (strstr(name, "\\g") || (strstr(name, delimiter) && strncmp(name, "delimiter", 9))) return ((COMMANDS *) 0); if ((end=strcont(name," \t"))) { Loading
innobase/include/row0vers.h +4 −0 Original line number Diff line number Diff line Loading @@ -79,7 +79,11 @@ row_vers_build_for_consistent_read( mtr_t* mtr, /* in: mtr holding the latch on rec; it will also hold the latch on purge_view */ dict_index_t* index, /* in: the clustered index */ ulint** offsets,/* in/out: offsets returned by rec_get_offsets(rec, index) */ read_view_t* view, /* in: the consistent read view */ mem_heap_t** offset_heap,/* in/out: memory heap from which the offsets are allocated */ mem_heap_t* in_heap,/* in: memory heap from which the memory for old_vers is allocated; memory for possible intermediate versions is allocated and freed Loading
innobase/include/srv0srv.h +5 −4 Original line number Diff line number Diff line Loading @@ -93,7 +93,7 @@ extern ulint srv_max_n_open_files; extern ulint srv_max_dirty_pages_pct; extern ulint srv_force_recovery; extern ulint srv_thread_concurrency; extern ulong srv_thread_concurrency; extern ulint srv_max_n_threads; Loading @@ -112,6 +112,7 @@ extern ibool srv_use_checksums; extern ibool srv_set_thread_priorities; extern int srv_query_thread_priority; extern ulong srv_max_buf_pool_modified_pct; extern ulong srv_max_purge_lag; extern ibool srv_use_awe; extern ibool srv_use_adaptive_hash_indexes; Loading @@ -131,9 +132,9 @@ extern ibool srv_print_innodb_table_monitor; extern ibool srv_lock_timeout_and_monitor_active; extern ibool srv_error_monitor_active; extern ulint srv_n_spin_wait_rounds; extern ulint srv_n_free_tickets_to_enter; extern ulint srv_thread_sleep_delay; extern ulong srv_n_spin_wait_rounds; extern ulong srv_n_free_tickets_to_enter; extern ulong srv_thread_sleep_delay; extern ulint srv_spin_wait_delay; extern ibool srv_priority_boost; Loading
innobase/row/row0sel.c +50 −31 Original line number Diff line number Diff line Loading @@ -510,6 +510,10 @@ row_sel_build_prev_vers( read_view_t* read_view, /* in: read view */ plan_t* plan, /* in: plan node for table */ rec_t* rec, /* in: record in a clustered index */ ulint** offsets, /* in/out: offsets returned by rec_get_offsets(rec, plan->index) */ mem_heap_t** offset_heap, /* in/out: memory heap from which the offsets are allocated */ rec_t** old_vers, /* out: old version, or NULL if the record does not exist in the view: i.e., it was freshly inserted Loading @@ -525,8 +529,8 @@ row_sel_build_prev_vers( } err = row_vers_build_for_consistent_read(rec, mtr, plan->index, read_view, plan->old_vers_heap, old_vers); offsets, read_view, offset_heap, plan->old_vers_heap, old_vers); return(err); } Loading Loading @@ -697,7 +701,8 @@ row_sel_get_clust_rec( node->read_view)) { err = row_sel_build_prev_vers(node->read_view, plan, clust_rec, &old_vers, mtr); clust_rec, &offsets, &heap, &old_vers, mtr); if (err != DB_SUCCESS) { goto err_exit; Loading Loading @@ -1396,14 +1401,18 @@ row_sel( node->read_view)) { err = row_sel_build_prev_vers(node->read_view, plan, rec, &old_vers, &mtr); plan, rec, &offsets, &heap, &old_vers, &mtr); if (err != DB_SUCCESS) { goto lock_wait_or_error; } if (old_vers == NULL) { offsets = rec_get_offsets( rec, index, offsets, ULINT_UNDEFINED, &heap); row_sel_fetch_columns(index, rec, offsets, UT_LIST_GET_FIRST(plan->columns)); Loading @@ -1417,8 +1426,6 @@ row_sel( } rec = old_vers; offsets = rec_get_offsets(rec, index, offsets, ULINT_UNDEFINED, &heap); } } else if (!lock_sec_rec_cons_read_sees(rec, index, node->read_view)) { Loading Loading @@ -2535,6 +2542,10 @@ row_sel_build_prev_vers_for_mysql( dict_index_t* clust_index, /* in: clustered index */ row_prebuilt_t* prebuilt, /* in: prebuilt struct */ rec_t* rec, /* in: record in a clustered index */ ulint** offsets, /* in/out: offsets returned by rec_get_offsets(rec, clust_index) */ mem_heap_t** offset_heap, /* in/out: memory heap from which the offsets are allocated */ rec_t** old_vers, /* out: old version, or NULL if the record does not exist in the view: i.e., it was freshly inserted Loading @@ -2550,8 +2561,8 @@ row_sel_build_prev_vers_for_mysql( } err = row_vers_build_for_consistent_read(rec, mtr, clust_index, read_view, prebuilt->old_vers_heap, old_vers); offsets, read_view, offset_heap, prebuilt->old_vers_heap, old_vers); return(err); } Loading @@ -2575,6 +2586,10 @@ row_sel_get_clust_rec_for_mysql( it, NULL if the old version did not exist in the read view, i.e., it was a fresh inserted version */ ulint** offsets,/* out: offsets returned by rec_get_offsets(out_rec, clust_index) */ mem_heap_t** offset_heap,/* in/out: memory heap from which the offsets are allocated */ mtr_t* mtr) /* in: mtr used to get access to the non-clustered record; the same mtr is used to access the clustered index */ Loading @@ -2584,9 +2599,6 @@ row_sel_get_clust_rec_for_mysql( rec_t* old_vers; ulint err; trx_t* trx; mem_heap_t* heap = NULL; ulint offsets_[100] = { 100, }; ulint* offsets = offsets_; *out_rec = NULL; trx = thr_get_trx(thr); Loading Loading @@ -2642,8 +2654,8 @@ row_sel_get_clust_rec_for_mysql( goto func_exit; } offsets = rec_get_offsets(clust_rec, clust_index, offsets, ULINT_UNDEFINED, &heap); *offsets = rec_get_offsets(clust_rec, clust_index, *offsets, ULINT_UNDEFINED, offset_heap); if (prebuilt->select_lock_type != LOCK_NONE) { /* Try to place a lock on the index record; we are searching Loading @@ -2651,7 +2663,7 @@ row_sel_get_clust_rec_for_mysql( we set a LOCK_REC_NOT_GAP type lock */ err = lock_clust_rec_read_check_and_lock(0, clust_rec, clust_index, offsets, clust_index, *offsets, prebuilt->select_lock_type, LOCK_REC_NOT_GAP, thr); if (err != DB_SUCCESS) { Loading @@ -2669,11 +2681,12 @@ row_sel_get_clust_rec_for_mysql( if (trx->isolation_level > TRX_ISO_READ_UNCOMMITTED && !lock_clust_rec_cons_read_sees(clust_rec, clust_index, offsets, trx->read_view)) { *offsets, trx->read_view)) { err = row_sel_build_prev_vers_for_mysql( trx->read_view, clust_index, prebuilt, clust_rec, offsets, offset_heap, &old_vers, mtr); if (err != DB_SUCCESS) { Loading Loading @@ -2722,9 +2735,6 @@ row_sel_get_clust_rec_for_mysql( err = DB_SUCCESS; err_exit: if (heap) { mem_heap_free(heap); } return(err); } Loading Loading @@ -3671,6 +3681,7 @@ row_search_for_mysql( err = row_sel_build_prev_vers_for_mysql( trx->read_view, clust_index, prebuilt, rec, &offsets, &heap, &old_vers, &mtr); if (err != DB_SUCCESS) { Loading Loading @@ -3714,6 +3725,12 @@ row_search_for_mysql( index_rec = rec; /* Before and after the following "if" block, "offsets" will be related to "rec", which may be in "index", a secondary index or the clustered index ("clust_index"). However, after this "if" block, "rec" may be pointing to "clust_rec" of "clust_index". */ ut_ad(rec_offs_validate(rec, index, offsets)); if (index != clust_index && (cons_read_requires_clust_rec || prebuilt->need_to_access_clustered)) { Loading @@ -3723,7 +3740,8 @@ row_search_for_mysql( mtr_has_extra_clust_latch = TRUE; err = row_sel_get_clust_rec_for_mysql(prebuilt, index, rec, thr, &clust_rec, &mtr); thr, &clust_rec, &offsets, &heap, &mtr); if (err != DB_SUCCESS) { goto lock_wait_or_error; Loading @@ -3745,19 +3763,17 @@ row_search_for_mysql( if (prebuilt->need_to_access_clustered) { rec = clust_rec; } } if (prebuilt->need_to_access_clustered) { ut_ad(rec == clust_rec || index == clust_index); offsets = rec_get_offsets(rec, clust_index, offsets, ULINT_UNDEFINED, &heap); ut_ad(rec_offs_validate(rec, clust_index, offsets)); } else { offsets = rec_get_offsets(rec, index, offsets, ULINT_UNDEFINED, &heap); } } /* We found a qualifying row */ ut_ad(rec_offs_validate(rec, rec == clust_rec ? clust_index : index, offsets)); if (prebuilt->n_rows_fetched >= MYSQL_FETCH_CACHE_THRESHOLD && prebuilt->select_lock_type == LOCK_NONE Loading Loading @@ -3800,8 +3816,11 @@ row_search_for_mysql( } if (prebuilt->clust_index_was_generated) { offsets = rec_get_offsets(index_rec, index, offsets, if (rec != index_rec) { offsets = rec_get_offsets( index_rec, index, offsets, ULINT_UNDEFINED, &heap); } row_sel_store_row_id_to_prebuilt(prebuilt, index_rec, index, offsets); } Loading