1
1
/*****************************************************************************
3
Copyright (C) 1996, 2010, Innobase Oy. All Rights Reserved.
3
Copyright (c) 1996, 2009, Innobase Oy. All Rights Reserved.
5
5
This program is free software; you can redistribute it and/or modify it under
6
6
the terms of the GNU General Public License as published by the Free Software
40
40
#define DICT_HEAP_SIZE 100 /*!< initial memory heap size when
41
41
creating a table or index object */
44
/* Key to register autoinc_mutex with performance schema */
45
UNIV_INTERN mysql_pfs_key_t autoinc_mutex_key;
46
#endif /* UNIV_PFS_MUTEX */
48
43
/**********************************************************************//**
49
44
Creates a table memory object.
50
45
@return own: table object */
67
ut_a(!(flags & (SIZE_MAX << DICT_TF2_BITS)));
62
ut_a(!(flags & (~0 << DICT_TF2_BITS)));
69
64
heap = mem_heap_create(DICT_HEAP_SIZE);
71
table = static_cast<dict_table_struct *>(mem_heap_zalloc(heap, sizeof(dict_table_t)));
66
table = mem_heap_zalloc(heap, sizeof(dict_table_t));
73
68
table->heap = heap;
75
70
table->flags = (unsigned int) flags;
76
table->name = static_cast<char *>(ut_malloc(strlen(name) + 1));
77
memcpy(table->name, name, strlen(name) + 1);
71
table->name = mem_heap_strdup(heap, name);
78
72
table->space = (unsigned int) space;
79
73
table->n_cols = (unsigned int) (n_cols + DATA_N_SYS_COLS);
81
table->cols = static_cast<dict_col_t *>(mem_heap_alloc(heap, (n_cols + DATA_N_SYS_COLS)
82
* sizeof(dict_col_t)));
75
table->cols = mem_heap_alloc(heap, (n_cols + DATA_N_SYS_COLS)
76
* sizeof(dict_col_t));
84
78
#ifndef UNIV_HOTBACKUP
85
table->autoinc_lock = static_cast<lock_t *>(mem_heap_alloc(heap, lock_get_size()));
79
table->autoinc_lock = mem_heap_alloc(heap, lock_get_size());
87
mutex_create(autoinc_mutex_key,
88
&table->autoinc_mutex, SYNC_DICT_AUTOINC_MUTEX);
81
mutex_create(&table->autoinc_mutex, SYNC_DICT_AUTOINC_MUTEX);
90
83
table->autoinc = 0;
154
146
new_len = strlen(name) + 1;
155
147
total_len = old_len + new_len;
157
res = static_cast<char *>(mem_heap_alloc(heap, total_len));
149
res = mem_heap_alloc(heap, total_len);
159
151
if (old_len > 0) {
160
152
memcpy(res, col_names, old_len);
194
190
if (UNIV_LIKELY(i) && UNIV_UNLIKELY(!table->col_names)) {
195
191
/* All preceding column names are empty. */
196
char* s = static_cast<char *>(mem_heap_zalloc(heap, table->n_def));
192
char* s = mem_heap_zalloc(heap, table->n_def);
197
193
table->col_names = s;
204
200
col = dict_table_get_nth_col(table, i);
206
dict_mem_fill_column_struct(col, i, mtype, prtype, len);
210
/**********************************************************************//**
211
This function populates a dict_col_t memory structure with
212
supplied information. */
215
dict_mem_fill_column_struct(
216
/*========================*/
217
dict_col_t* column, /*!< out: column struct to be
219
ulint col_pos, /*!< in: column position */
220
ulint mtype, /*!< in: main data type */
221
ulint prtype, /*!< in: precise type */
222
ulint col_len) /*!< in: column length */
224
#ifndef UNIV_HOTBACKUP
227
#endif /* !UNIV_HOTBACKUP */
229
column->ind = (unsigned int) col_pos;
230
column->ord_part = 0;
231
column->mtype = (unsigned int) mtype;
232
column->prtype = (unsigned int) prtype;
233
column->len = (unsigned int) col_len;
234
#ifndef UNIV_HOTBACKUP
235
dtype_get_mblen(mtype, prtype, &mbminlen, &mbmaxlen);
236
dict_col_set_mbminmaxlen(column, mbminlen, mbmaxlen);
202
col->ind = (unsigned int) i;
205
col->mtype = (unsigned int) mtype;
206
col->prtype = (unsigned int) prtype;
207
col->len = (unsigned int) len;
209
#ifndef UNIV_HOTBACKUP
210
dtype_get_mblen(mtype, prtype, &mbminlen, &mbmaxlen);
212
col->mbminlen = (unsigned int) mbminlen;
213
col->mbmaxlen = (unsigned int) mbmaxlen;
237
214
#endif /* !UNIV_HOTBACKUP */
259
236
ut_ad(table_name && index_name);
261
238
heap = mem_heap_create(DICT_HEAP_SIZE);
262
index = static_cast<dict_index_t *>(mem_heap_zalloc(heap, sizeof(dict_index_t)));
264
dict_mem_fill_index_struct(index, heap, table_name, index_name,
265
space, type, n_fields);
239
index = mem_heap_zalloc(heap, sizeof(dict_index_t));
244
#ifndef UNIV_HOTBACKUP
245
index->space = (unsigned int) space;
246
#endif /* !UNIV_HOTBACKUP */
247
index->name = mem_heap_strdup(heap, index_name);
248
index->table_name = table_name;
249
index->n_fields = (unsigned int) n_fields;
250
index->fields = mem_heap_alloc(heap, 1 + n_fields
251
* sizeof(dict_field_t));
252
/* The '1 +' above prevents allocation
253
of an empty mem block */
255
index->magic_n = DICT_INDEX_MAGIC_N;
256
#endif /* UNIV_DEBUG */