~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/innobase/dict/dict0crea.c

Merge initial InnoDB+ import.

This was applied by generating a patch between MySQL 5.1.50 InnoDB plugin and
the just-merged innodb+ from mysql-trunk revision-id: vasil.dimov@oracle.com-20100422110752-1zowoqxel5xx3z2e

Then, some manual merge resolving and it worked. This should make it much
easier to merge the rest of InnoDB 1.1 and 1.2 from the mysql tree using
my bzr-reapply script.

This takes us to InnoDB 1.1.1(ish).

Show diffs side-by-side

added added

removed removed

Lines of Context:
239
239
        const char*     path_or_name;
240
240
        ibool           is_path;
241
241
        mtr_t           mtr;
242
 
        ulint           space = 0;
243
 
        ibool           file_per_table;
244
242
 
245
243
        ut_ad(mutex_own(&(dict_sys->mutex)));
246
244
 
247
245
        table = node->table;
248
246
 
249
 
        /* Cache the global variable "srv_file_per_table" to
250
 
        a local variable before using it. Please note
251
 
        "srv_file_per_table" is not under dict_sys mutex
252
 
        protection, and could be changed while executing
253
 
        this function. So better to cache the current value
254
 
        to a local variable, and all future reference to
255
 
        "srv_file_per_table" should use this local variable. */
256
 
        file_per_table = srv_file_per_table;
257
 
 
258
 
        dict_hdr_get_new_id(&table->id, NULL, NULL);
 
247
        table->id = dict_hdr_get_new_id(DICT_HDR_TABLE_ID);
259
248
 
260
249
        thr_get_trx(thr)->table_id = table->id;
261
250
 
262
 
        if (file_per_table) {
263
 
                /* Get a new space id if srv_file_per_table is set */
264
 
                dict_hdr_get_new_id(NULL, NULL, &space);
265
 
 
266
 
                if (UNIV_UNLIKELY(space == ULINT_UNDEFINED)) {
267
 
                        return(DB_ERROR);
268
 
                }
269
 
 
 
251
        if (srv_file_per_table) {
270
252
                /* We create a new single-table tablespace for the table.
271
253
                We initially let it be 4 pages:
272
254
                - page 0 is the fsp header and an extent descriptor page,
275
257
                - page 3 will contain the root of the clustered index of the
276
258
                table we create here. */
277
259
 
 
260
                ulint   space = 0;      /* reset to zero for the call below */
 
261
 
278
262
                if (table->dir_path_of_temp_table) {
279
263
                        /* We place tables created with CREATE TEMPORARY
280
264
                        TABLE in the tmp dir of mysqld server */
292
276
 
293
277
                flags = table->flags & ~(~0 << DICT_TF_BITS);
294
278
                error = fil_create_new_single_table_tablespace(
295
 
                        space, path_or_name, is_path,
 
279
                        &space, path_or_name, is_path,
296
280
                        flags == DICT_TF_COMPACT ? 0 : flags,
297
281
                        FIL_IBD_FILE_INITIAL_SIZE);
298
282
                table->space = (unsigned int) space;
577
561
        ut_ad((UT_LIST_GET_LEN(table->indexes) > 0)
578
562
              || dict_index_is_clust(index));
579
563
 
580
 
        dict_hdr_get_new_id(NULL, &index->id, NULL);
 
564
        index->id = dict_hdr_get_new_id(DICT_HDR_INDEX_ID);
581
565
 
582
566
        /* Inherit the space id from the table; we store all indexes of a
583
567
        table in the same tablespace */
1121
1105
 
1122
1106
                dulint  index_id = node->index->id;
1123
1107
 
1124
 
                err = dict_index_add_to_cache(
1125
 
                        node->table, node->index, FIL_NULL,
1126
 
                        trx_is_strict(trx)
1127
 
                        || dict_table_get_format(node->table)
1128
 
                        >= DICT_TF_FORMAT_ZIP);
 
1108
                err = dict_index_add_to_cache(node->table, node->index,
 
1109
                                              FIL_NULL, TRUE);
1129
1110
 
1130
1111
                node->index = dict_index_get_if_in_cache_low(index_id);
1131
1112
                ut_a(!node->index == (err != DB_SUCCESS));