Loading Docs/manual.texi +311 −263 File changed.Preview size limit exceeded, changes collapsed. Show changes innobase/dict/dict0dict.c +67 −0 Original line number Diff line number Diff line Loading @@ -235,6 +235,71 @@ dict_table_get_index_noninline( return(dict_table_get_index(table, name)); } /************************************************************************ Initializes the autoinc counter. It is not an error to initialize already initialized counter. */ void dict_table_autoinc_initialize( /*==========================*/ dict_table_t* table, /* in: table */ ib_longlong value) /* in: value which was assigned to a row */ { mutex_enter(&(table->autoinc_mutex)); table->autoinc_inited = TRUE; table->autoinc = value; mutex_exit(&(table->autoinc_mutex)); } /************************************************************************ Gets the next autoinc value, 0 if not yet initialized. */ ib_longlong dict_table_autoinc_get( /*===================*/ /* out: value for a new row, or 0 */ dict_table_t* table) /* in: table */ { ib_longlong value; mutex_enter(&(table->autoinc_mutex)); if (!table->autoinc_inited) { value = 0; } else { table->autoinc = table->autoinc + 1; value = table->autoinc; } mutex_exit(&(table->autoinc_mutex)); return(value); } /************************************************************************ Updates the autoinc counter if the value supplied is bigger than the current value. If not inited, does nothing. */ void dict_table_autoinc_update( /*======================*/ dict_table_t* table, /* in: table */ ib_longlong value) /* in: value which was assigned to a row */ { mutex_enter(&(table->autoinc_mutex)); if (table->autoinc_inited) { if (value > table->autoinc) { table->autoinc = value; } } mutex_exit(&(table->autoinc_mutex)); } /************************************************************************ Looks for column n in an index. */ Loading Loading @@ -568,6 +633,8 @@ dict_table_remove_from_cache( /* Remove table from LRU list of tables */ UT_LIST_REMOVE(table_LRU, dict_sys->table_LRU, table); mutex_free(&(table->autoinc_mutex)); size = mem_heap_get_size(table->heap); ut_ad(dict_sys->size >= size); Loading innobase/dict/dict0mem.c +5 −0 Original line number Diff line number Diff line Loading @@ -71,6 +71,11 @@ dict_mem_table_create( table->stat_modif_counter = 0; mutex_create(&(table->autoinc_mutex)); mutex_set_level(&(table->autoinc_mutex), SYNC_DICT_AUTOINC_MUTEX); table->autoinc_inited = FALSE; table->magic_n = DICT_TABLE_MAGIC_N; return(table); Loading innobase/include/dict0dict.h +26 −0 Original line number Diff line number Diff line Loading @@ -88,6 +88,32 @@ ulint dict_col_get_clust_pos( /*===================*/ dict_col_t* col); /************************************************************************ Initializes the autoinc counter. It is not an error to initialize already initialized counter. */ void dict_table_autoinc_initialize( /*==========================*/ dict_table_t* table, /* in: table */ ib_longlong value); /* in: value which was assigned to a row */ /************************************************************************ Gets the next autoinc value, 0 if not yet initialized. */ ib_longlong dict_table_autoinc_get( /*===================*/ /* out: value for a new row, or 0 */ dict_table_t* table); /* in: table */ /************************************************************************ Updates the autoinc counter if the value supplied is bigger than the current value. If not inited, does nothing. */ void dict_table_autoinc_update( /*======================*/ dict_table_t* table, /* in: table */ ib_longlong value); /* in: value which was assigned to a row */ /************************************************************************** Adds a table object to the dictionary cache. */ Loading innobase/include/dict0mem.h +10 −0 Original line number Diff line number Diff line Loading @@ -302,6 +302,16 @@ struct dict_table_struct{ for MySQL SHOW TABLE STATUS; this counter is not protected by any latch, because this is only used for heuristics */ /*----------------------*/ mutex_t autoinc_mutex; /* mutex protecting the autoincrement counter */ ibool autoinc_inited; /* TRUE if the autoinc counter has been inited; MySQL gets the init value by executing SELECT MAX(auto inc column) */ ib_longlong autoinc;/* autoinc counter value already given to a row */ ulint magic_n;/* magic number */ }; #define DICT_TABLE_MAGIC_N 76333786 Loading Loading
innobase/dict/dict0dict.c +67 −0 Original line number Diff line number Diff line Loading @@ -235,6 +235,71 @@ dict_table_get_index_noninline( return(dict_table_get_index(table, name)); } /************************************************************************ Initializes the autoinc counter. It is not an error to initialize already initialized counter. */ void dict_table_autoinc_initialize( /*==========================*/ dict_table_t* table, /* in: table */ ib_longlong value) /* in: value which was assigned to a row */ { mutex_enter(&(table->autoinc_mutex)); table->autoinc_inited = TRUE; table->autoinc = value; mutex_exit(&(table->autoinc_mutex)); } /************************************************************************ Gets the next autoinc value, 0 if not yet initialized. */ ib_longlong dict_table_autoinc_get( /*===================*/ /* out: value for a new row, or 0 */ dict_table_t* table) /* in: table */ { ib_longlong value; mutex_enter(&(table->autoinc_mutex)); if (!table->autoinc_inited) { value = 0; } else { table->autoinc = table->autoinc + 1; value = table->autoinc; } mutex_exit(&(table->autoinc_mutex)); return(value); } /************************************************************************ Updates the autoinc counter if the value supplied is bigger than the current value. If not inited, does nothing. */ void dict_table_autoinc_update( /*======================*/ dict_table_t* table, /* in: table */ ib_longlong value) /* in: value which was assigned to a row */ { mutex_enter(&(table->autoinc_mutex)); if (table->autoinc_inited) { if (value > table->autoinc) { table->autoinc = value; } } mutex_exit(&(table->autoinc_mutex)); } /************************************************************************ Looks for column n in an index. */ Loading Loading @@ -568,6 +633,8 @@ dict_table_remove_from_cache( /* Remove table from LRU list of tables */ UT_LIST_REMOVE(table_LRU, dict_sys->table_LRU, table); mutex_free(&(table->autoinc_mutex)); size = mem_heap_get_size(table->heap); ut_ad(dict_sys->size >= size); Loading
innobase/dict/dict0mem.c +5 −0 Original line number Diff line number Diff line Loading @@ -71,6 +71,11 @@ dict_mem_table_create( table->stat_modif_counter = 0; mutex_create(&(table->autoinc_mutex)); mutex_set_level(&(table->autoinc_mutex), SYNC_DICT_AUTOINC_MUTEX); table->autoinc_inited = FALSE; table->magic_n = DICT_TABLE_MAGIC_N; return(table); Loading
innobase/include/dict0dict.h +26 −0 Original line number Diff line number Diff line Loading @@ -88,6 +88,32 @@ ulint dict_col_get_clust_pos( /*===================*/ dict_col_t* col); /************************************************************************ Initializes the autoinc counter. It is not an error to initialize already initialized counter. */ void dict_table_autoinc_initialize( /*==========================*/ dict_table_t* table, /* in: table */ ib_longlong value); /* in: value which was assigned to a row */ /************************************************************************ Gets the next autoinc value, 0 if not yet initialized. */ ib_longlong dict_table_autoinc_get( /*===================*/ /* out: value for a new row, or 0 */ dict_table_t* table); /* in: table */ /************************************************************************ Updates the autoinc counter if the value supplied is bigger than the current value. If not inited, does nothing. */ void dict_table_autoinc_update( /*======================*/ dict_table_t* table, /* in: table */ ib_longlong value); /* in: value which was assigned to a row */ /************************************************************************** Adds a table object to the dictionary cache. */ Loading
innobase/include/dict0mem.h +10 −0 Original line number Diff line number Diff line Loading @@ -302,6 +302,16 @@ struct dict_table_struct{ for MySQL SHOW TABLE STATUS; this counter is not protected by any latch, because this is only used for heuristics */ /*----------------------*/ mutex_t autoinc_mutex; /* mutex protecting the autoincrement counter */ ibool autoinc_inited; /* TRUE if the autoinc counter has been inited; MySQL gets the init value by executing SELECT MAX(auto inc column) */ ib_longlong autoinc;/* autoinc counter value already given to a row */ ulint magic_n;/* magic number */ }; #define DICT_TABLE_MAGIC_N 76333786 Loading