354
309
For single line insert, generate an error if try to set a NOT NULL field
357
session->count_cuted_fields= ignore ? CHECK_FIELD_WARN : CHECK_FIELD_ERROR_FOR_NULL;
312
session->count_cuted_fields= ((values_list.elements == 1 &&
314
CHECK_FIELD_ERROR_FOR_NULL :
359
316
session->cuted_fields = 0L;
360
317
table->next_number_field=table->found_next_number_field;
363
320
session->set_proc_info("update");
364
321
if (duplic == DUP_REPLACE)
365
table->cursor->extra(HA_EXTRA_WRITE_CAN_REPLACE);
322
table->file->extra(HA_EXTRA_WRITE_CAN_REPLACE);
366
323
if (duplic == DUP_UPDATE)
367
table->cursor->extra(HA_EXTRA_INSERT_WITH_UPDATE);
324
table->file->extra(HA_EXTRA_INSERT_WITH_UPDATE);
369
326
if (duplic != DUP_ERROR || ignore)
370
table->cursor->extra(HA_EXTRA_IGNORE_DUP_KEY);
371
table->cursor->ha_start_bulk_insert(values_list.elements);
327
table->file->extra(HA_EXTRA_IGNORE_DUP_KEY);
328
table->file->ha_start_bulk_insert(values_list.elements);
375
session->setAbortOnWarning(not ignore);
332
session->abort_on_warning= !ignore;
377
334
table->mark_columns_needed_for_insert();
434
400
Do not do this release if this is a delayed insert, it would steal
435
401
auto_inc values from the delayed_insert thread as they share Table.
437
table->cursor->ha_release_auto_increment();
438
if (table->cursor->ha_end_bulk_insert() && !error)
403
table->file->ha_release_auto_increment();
404
if (table->file->ha_end_bulk_insert() && !error)
440
table->print_error(errno,MYF(0));
406
table->file->print_error(my_errno,MYF(0));
443
409
if (duplic != DUP_ERROR || ignore)
444
table->cursor->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
410
table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
446
transactional_table= table->cursor->has_transactions();
412
transactional_table= table->file->has_transactions();
448
414
changed= (info.copied || info.deleted || info.updated);
449
if ((changed && error <= 0) || session->transaction.stmt.hasModifiedNonTransData())
415
if ((changed && error <= 0) || session->transaction.stmt.modified_non_trans_table)
451
if (session->transaction.stmt.hasModifiedNonTransData())
452
session->transaction.all.markModifiedNonTransData();
417
if (session->transaction.stmt.modified_non_trans_table)
418
session->transaction.all.modified_non_trans_table= true;
454
assert(transactional_table || !changed || session->transaction.stmt.hasModifiedNonTransData());
420
assert(transactional_table || !changed || session->transaction.stmt.modified_non_trans_table);
457
423
session->set_proc_info("end");
475
441
session->count_cuted_fields= CHECK_FIELD_IGNORE;
476
442
table->auto_increment_field_not_null= false;
477
443
if (duplic == DUP_REPLACE)
478
table->cursor->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
444
table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
483
table->cursor->ha_release_auto_increment();
485
free_underlaid_joins(session, &session->lex->select_lex);
486
session->setAbortOnWarning(false);
487
DRIZZLE_INSERT_DONE(1, 0);
491
448
if (values_list.elements == 1 && (!(session->options & OPTION_WARNINGS) ||
492
449
!session->cuted_fields))
494
session->row_count_func= info.copied + info.deleted + info.updated;
495
session->my_ok((ulong) session->rowCount(),
496
info.copied + info.deleted + info.touched, id);
451
session->row_count_func= info.copied + info.deleted +
452
((session->client_capabilities & CLIENT_FOUND_ROWS) ?
453
info.touched : info.updated);
454
session->my_ok((ulong) session->row_count_func, id);
459
ha_rows updated=((session->client_capabilities & CLIENT_FOUND_ROWS) ?
460
info.touched : info.updated);
502
snprintf(buff, sizeof(buff), ER(ER_INSERT_INFO), (ulong) info.records,
462
sprintf(buff, ER(ER_INSERT_INFO), (ulong) info.records,
503
463
(ulong) (info.records - info.copied), (ulong) session->cuted_fields);
505
snprintf(buff, sizeof(buff), ER(ER_INSERT_INFO), (ulong) info.records,
506
(ulong) (info.deleted + info.updated), (ulong) session->cuted_fields);
507
session->row_count_func= info.copied + info.deleted + info.updated;
508
session->my_ok((ulong) session->rowCount(),
509
info.copied + info.deleted + info.touched, id, buff);
465
sprintf(buff, ER(ER_INSERT_INFO), (ulong) info.records,
466
(ulong) (info.deleted + updated), (ulong) session->cuted_fields);
467
session->row_count_func= info.copied + info.deleted + updated;
468
session->my_ok((ulong) session->row_count_func, id, buff);
511
session->status_var.inserted_row_count+= session->rowCount();
512
session->setAbortOnWarning(false);
513
DRIZZLE_INSERT_DONE(0, session->rowCount());
470
session->abort_on_warning= 0;
471
DRIZZLE_INSERT_END();
476
table->file->ha_release_auto_increment();
478
free_underlaid_joins(session, &session->lex->select_lex);
479
session->abort_on_warning= 0;
480
DRIZZLE_INSERT_END();
801
763
if (info->handle_duplicates == DUP_REPLACE &&
802
764
table->next_number_field &&
803
key_nr == table->getShare()->next_number_index &&
765
key_nr == table->s->next_number_index &&
804
766
(insert_id_for_cur_row > 0))
806
if (table->cursor->getEngine()->check_flag(HTON_BIT_DUPLICATE_POS))
768
if (table->file->ha_table_flags() & HA_DUPLICATE_POS)
808
if (table->cursor->rnd_pos(table->getUpdateRecord(),table->cursor->dup_ref))
770
if (table->file->rnd_pos(table->record[1],table->file->dup_ref))
813
if (table->cursor->extra(HA_EXTRA_FLUSH_CACHE)) /* Not needed with NISAM */
775
if (table->file->extra(HA_EXTRA_FLUSH_CACHE)) /* Not needed with NISAM */
821
key.resize(table->getShare()->max_unique_length);
783
if (!(key=(char*) malloc(table->s->max_unique_length)))
823
key_copy(&key[0], table->getInsertRecord(), table->key_info+key_nr, 0);
824
if ((error=(table->cursor->index_read_idx_map(table->getUpdateRecord(),key_nr,
825
&key[0], HA_WHOLE_KEY,
789
key_copy((unsigned char*) key,table->record[0],table->key_info+key_nr,0);
790
if ((error=(table->file->index_read_idx_map(table->record[1],key_nr,
791
(unsigned char*) key, HA_WHOLE_KEY,
826
792
HA_READ_KEY_EXACT))))
926
if ((error=table->cursor->deleteRecord(table->getUpdateRecord())))
893
if ((error=table->file->ha_delete_row(table->record[1])))
929
if (!table->cursor->has_transactions())
930
session->transaction.stmt.markModifiedNonTransData();
896
if (!table->file->has_transactions())
897
session->transaction.stmt.modified_non_trans_table= true;
931
898
/* Let us attempt do write_row() once more */
935
session->record_first_successful_insert_id_in_cur_stmt(table->cursor->insert_id_for_cur_row);
902
session->record_first_successful_insert_id_in_cur_stmt(table->file->insert_id_for_cur_row);
937
904
Restore column maps if they where replaced during an duplicate key
940
907
if (table->read_set != save_read_set ||
941
908
table->write_set != save_write_set)
942
table->column_bitmaps_set(*save_read_set, *save_write_set);
909
table->column_bitmaps_set(save_read_set, save_write_set);
944
else if ((error=table->cursor->insertRecord(table->getInsertRecord())))
911
else if ((error=table->file->ha_write_row(table->record[0])))
946
913
if (!info->ignore ||
947
table->cursor->is_fatal_error(error, HA_CHECK_DUP))
914
table->file->is_fatal_error(error, HA_CHECK_DUP))
949
table->cursor->restore_auto_increment(prev_insert_id);
916
table->file->restore_auto_increment(prev_insert_id);
950
917
goto gok_or_after_err;
953
920
after_n_copied_inc:
955
session->record_first_successful_insert_id_in_cur_stmt(table->cursor->insert_id_for_cur_row);
922
session->record_first_successful_insert_id_in_cur_stmt(table->file->insert_id_for_cur_row);
957
924
gok_or_after_err:
958
if (!table->cursor->has_transactions())
959
session->transaction.stmt.markModifiedNonTransData();
927
if (!table->file->has_transactions())
928
session->transaction.stmt.modified_non_trans_table= true;
1070
1041
List<Item> *update_fields,
1071
1042
List<Item> *update_values,
1072
1043
enum_duplicates duplic,
1073
bool ignore_check_option_errors) :
1074
table_list(table_list_par), table(table_par), fields(fields_par),
1075
autoinc_value_of_last_inserted_row(0),
1076
insert_into_view(table_list_par && 0 != 0)
1044
bool ignore_check_option_errors)
1045
:table_list(table_list_par), table(table_par), fields(fields_par),
1046
autoinc_value_of_last_inserted_row(0),
1047
insert_into_view(table_list_par && 0 != 0)
1049
memset(&info, 0, sizeof(info));
1078
1050
info.handle_duplicates= duplic;
1079
1051
info.ignore= ignore_check_option_errors;
1080
1052
info.update_fields= update_fields;
1326
1293
void select_insert::store_values(List<Item> &values)
1328
1295
if (fields->elements)
1329
fill_record(session, *fields, values, true);
1296
fill_record(session, *fields, values, 1);
1331
fill_record(session, table->getFields(), values, true);
1298
fill_record(session, table->field, values, 1);
1334
void select_insert::send_error(drizzled::error_t errcode,const char *err)
1301
void select_insert::send_error(uint32_t errcode,const char *err)
1336
1305
my_message(errcode, err, MYF(0));
1340
1311
bool select_insert::send_eof()
1343
bool const trans_table= table->cursor->has_transactions();
1314
bool const trans_table= table->file->has_transactions();
1347
error= table->cursor->ha_end_bulk_insert();
1348
table->cursor->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
1349
table->cursor->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
1318
error= table->file->ha_end_bulk_insert();
1319
table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
1320
table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
1351
1322
if ((changed= (info.copied || info.deleted || info.updated)))
1354
1325
We must invalidate the table in the query cache before binlog writing
1355
and autocommitOrRollback.
1326
and ha_autocommit_or_rollback.
1357
if (session->transaction.stmt.hasModifiedNonTransData())
1358
session->transaction.all.markModifiedNonTransData();
1328
if (session->transaction.stmt.modified_non_trans_table)
1329
session->transaction.all.modified_non_trans_table= true;
1360
1331
assert(trans_table || !changed ||
1361
session->transaction.stmt.hasModifiedNonTransData());
1332
session->transaction.stmt.modified_non_trans_table);
1363
table->cursor->ha_release_auto_increment();
1334
table->file->ha_release_auto_increment();
1367
table->print_error(error,MYF(0));
1368
DRIZZLE_INSERT_SELECT_DONE(error, 0);
1338
table->file->print_error(error,MYF(0));
1371
1341
char buff[160];
1372
1342
if (info.ignore)
1373
snprintf(buff, sizeof(buff), ER(ER_INSERT_INFO), (ulong) info.records,
1343
sprintf(buff, ER(ER_INSERT_INFO), (ulong) info.records,
1374
1344
(ulong) (info.records - info.copied), (ulong) session->cuted_fields);
1376
snprintf(buff, sizeof(buff), ER(ER_INSERT_INFO), (ulong) info.records,
1346
sprintf(buff, ER(ER_INSERT_INFO), (ulong) info.records,
1377
1347
(ulong) (info.deleted+info.updated), (ulong) session->cuted_fields);
1378
session->row_count_func= info.copied + info.deleted + info.updated;
1348
session->row_count_func= info.copied + info.deleted +
1349
((session->client_capabilities & CLIENT_FOUND_ROWS) ?
1350
info.touched : info.updated);
1380
1352
id= (session->first_successful_insert_id_in_cur_stmt > 0) ?
1381
1353
session->first_successful_insert_id_in_cur_stmt :
1382
1354
(session->arg_of_last_insert_id_function ?
1383
1355
session->first_successful_insert_id_in_prev_stmt :
1384
1356
(info.copied ? autoinc_value_of_last_inserted_row : 0));
1385
session->my_ok((ulong) session->rowCount(),
1386
info.copied + info.deleted + info.touched, id, buff);
1387
session->status_var.inserted_row_count+= session->rowCount();
1388
DRIZZLE_INSERT_SELECT_DONE(0, session->rowCount());
1357
session->my_ok((ulong) session->row_count_func, id, buff);
1392
1361
void select_insert::abort() {
1483
1447
static Table *create_table_from_items(Session *session, HA_CREATE_INFO *create_info,
1484
1448
TableList *create_table,
1485
message::Table &table_proto,
1486
AlterInfo *alter_info,
1449
Alter_info *alter_info,
1487
1450
List<Item> *items,
1488
bool is_if_not_exists,
1490
identifier::Table::const_reference identifier)
1451
DRIZZLE_LOCK **lock)
1492
TableShare share(message::Table::INTERNAL);
1453
Table tmp_table; // Used during 'CreateField()'
1493
1456
uint32_t select_field_count= items->elements;
1494
1457
/* Add selected items to field list */
1495
1458
List_iterator_fast<Item> it(*items);
1497
1460
Field *tmp_field;
1499
if (not (identifier.isTmp()) && create_table->table->db_stat)
1463
if (!(create_info->options & HA_LEX_CREATE_TMP_TABLE) &&
1464
create_table->table->db_stat)
1501
/* Table already exists and was open at openTablesLock() stage. */
1502
if (is_if_not_exists)
1466
/* Table already exists and was open at open_and_lock_tables() stage. */
1467
if (create_info->options & HA_LEX_CREATE_IF_NOT_EXISTS)
1504
1469
create_info->table_existed= 1; // Mark that table existed
1505
1470
push_warning_printf(session, DRIZZLE_ERROR::WARN_LEVEL_NOTE,
1506
1471
ER_TABLE_EXISTS_ERROR, ER(ER_TABLE_EXISTS_ERROR),
1507
create_table->getTableName());
1508
return create_table->table;
1472
create_table->table_name);
1473
return(create_table->table);
1511
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), create_table->getTableName());
1476
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), create_table->table_name);
1481
tmp_table.timestamp_field= 0;
1482
tmp_table.s= &share;
1484
tmp_table.s->db_create_options=0;
1485
tmp_table.s->blob_ptr_size= portable_sizeof_char_ptr;
1486
tmp_table.s->db_low_byte_first=
1487
test(create_info->db_type == myisam_engine ||
1488
create_info->db_type == heap_engine);
1489
tmp_table.null_row= false;
1490
tmp_table.maybe_null= false;
1516
table::Shell tmp_table(share); // Used during 'CreateField()'
1518
if (not table_proto.engine().name().compare("MyISAM"))
1519
tmp_table.getMutableShare()->db_low_byte_first= true;
1520
else if (not table_proto.engine().name().compare("MEMORY"))
1521
tmp_table.getMutableShare()->db_low_byte_first= true;
1523
tmp_table.in_use= session;
1527
CreateField *cr_field;
1528
Field *field, *def_field;
1529
if (item->type() == Item::FUNC_ITEM)
1531
if (item->result_type() != STRING_RESULT)
1533
field= item->tmp_table_field(&tmp_table);
1537
field= item->tmp_table_field_from_field_type(&tmp_table, 0);
1494
CreateField *cr_field;
1495
Field *field, *def_field;
1496
if (item->type() == Item::FUNC_ITEM)
1497
if (item->result_type() != STRING_RESULT)
1498
field= item->tmp_table_field(&tmp_table);
1542
field= create_tmp_field(session, &tmp_table, item, item->type(),
1543
(Item ***) 0, &tmp_field, &def_field, false,
1548
!(cr_field=new CreateField(field,(item->type() == Item::FIELD_ITEM ?
1549
((Item_field *)item)->field :
1555
if (item->maybe_null)
1557
cr_field->flags &= ~NOT_NULL_FLAG;
1560
alter_info->create_list.push_back(cr_field);
1500
field= item->tmp_table_field_from_field_type(&tmp_table, 0);
1502
field= create_tmp_field(session, &tmp_table, item, item->type(),
1503
(Item ***) 0, &tmp_field, &def_field, 0, 0, 0, 0,
1506
!(cr_field=new CreateField(field,(item->type() == Item::FIELD_ITEM ?
1507
((Item_field *)item)->field :
1510
if (item->maybe_null)
1511
cr_field->flags &= ~NOT_NULL_FLAG;
1512
alter_info->create_list.push_back(cr_field);
1568
1519
creating base table on which name we have exclusive lock. So code below
1569
1520
should not cause deadlocks or races.
1573
if (not create_table_no_lock(session,
1523
drizzled::message::Table table_proto;
1524
table_proto.set_name(create_table->table_name);
1525
table_proto.set_type(drizzled::message::Table::STANDARD);
1527
if (!mysql_create_table_no_lock(session, create_table->db,
1528
create_table->table_name,
1532
select_field_count))
1582
if (create_info->table_existed && not identifier.isTmp())
1534
if (create_info->table_existed &&
1535
!(create_info->options & HA_LEX_CREATE_TMP_TABLE))
1585
1538
This means that someone created table underneath server
1586
1539
or it was created via different mysqld front-end to the
1587
1540
cluster. We don't have much options but throw an error.
1589
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), create_table->getTableName());
1542
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), create_table->table_name);
1593
if (not identifier.isTmp())
1546
if (!(create_info->options & HA_LEX_CREATE_TMP_TABLE))
1595
/* CREATE TABLE... has found that the table already exists for insert and is adapting to use it */
1596
boost::mutex::scoped_lock scopedLock(table::Cache::singleton().mutex());
1598
if (create_table->table)
1548
pthread_mutex_lock(&LOCK_open); /* CREATE TABLE... has found that the table already exists for insert and is adapting to use it */
1549
if (reopen_name_locked_table(session, create_table, false))
1600
table::Concurrent *concurrent_table= static_cast<table::Concurrent *>(create_table->table);
1602
if (concurrent_table->reopen_name_locked_table(create_table, session))
1604
(void)plugin::StorageEngine::dropTable(*session, identifier);
1608
table= create_table->table;
1551
quick_rm_table(create_info->db_type, create_table->db,
1552
create_table->table_name, false);
1613
(void)plugin::StorageEngine::dropTable(*session, identifier);
1555
table= create_table->table;
1556
pthread_mutex_unlock(&LOCK_open);
1618
if (not (table= session->openTable(create_table, (bool*) 0,
1619
DRIZZLE_OPEN_TEMPORARY_ONLY)) &&
1620
not create_info->table_existed)
1560
if (!(table= open_table(session, create_table, (bool*) 0,
1561
DRIZZLE_OPEN_TEMPORARY_ONLY)) &&
1562
!create_info->table_existed)
1623
1565
This shouldn't happen as creation of temporary table should make
1624
1566
it preparable for open. But let us do close_temporary_table() here
1627
session->drop_temporary_table(identifier);
1569
drop_temporary_table(session, create_table);
1631
if (not table) // open failed
1573
if (!table) // open failed
1635
1577
table->reginfo.lock_type=TL_WRITE;
1636
if (not ((*lock)= session->lockTables(&table, 1, DRIZZLE_LOCK_IGNORE_FLUSH)))
1578
if (! ((*lock)= mysql_lock_tables(session, &table, 1,
1579
DRIZZLE_LOCK_IGNORE_FLUSH, ¬_used)))
1640
session->unlockTables(*lock);
1583
mysql_unlock_tables(session, *lock);
1644
if (not create_info->table_existed)
1645
session->drop_open_table(table, identifier);
1587
if (!create_info->table_existed)
1588
drop_open_table(session, table, create_table->db, create_table->table_name);
1654
1596
select_create::prepare(List<Item> &values, Select_Lex_Unit *u)
1656
DrizzleLock *extra_lock= NULL;
1598
DRIZZLE_LOCK *extra_lock= NULL;
1658
For replication, the CREATE-SELECT statement is written
1659
in two pieces: the first transaction messsage contains
1660
the CREATE TABLE statement as a CreateTableStatement message
1661
necessary to create the table.
1663
The second transaction message contains all the InsertStatement
1664
and associated InsertRecords that should go into the table.
1600
For row-based replication, the CREATE-SELECT statement is written
1601
in two pieces: the first one contain the CREATE TABLE statement
1602
necessary to create the table and the second part contain the rows
1603
that should go into the table.
1605
For non-temporary tables, the start of the CREATE-SELECT
1606
implicitly commits the previous transaction, and all events
1607
forming the statement will be stored the transaction cache. At end
1608
of the statement, the entire statement is committed as a
1609
transaction, and all events are written to the binary log.
1611
On the master, the table is locked for the duration of the
1612
statement, but since the CREATE part is replicated as a simple
1613
statement, there is no way to lock the table for accesses on the
1614
slave. Hence, we have to hold on to the CREATE part of the
1615
statement until the statement has finished.
1669
if (not (table= create_table_from_items(session, create_info, create_table,
1671
alter_info, &values,
1673
&extra_lock, identifier)))
1621
Start a statement transaction before the create if we are using
1622
row-based replication for the statement. If we are creating a
1623
temporary table, we need to start a statement transaction.
1626
if (!(table= create_table_from_items(session, create_info, create_table,
1627
alter_info, &values,
1675
1629
return(-1); // abort() deletes table
1678
1631
if (extra_lock)
1680
1633
assert(m_plock == NULL);
1682
if (identifier.isTmp())
1635
if (create_info->options & HA_LEX_CREATE_TMP_TABLE)
1683
1636
m_plock= &m_lock;
1685
1638
m_plock= &session->extra_lock;
1709
1660
table->restoreRecordAsDefault(); // Get empty record
1710
1661
session->cuted_fields=0;
1711
1662
if (info.ignore || info.handle_duplicates != DUP_ERROR)
1712
table->cursor->extra(HA_EXTRA_IGNORE_DUP_KEY);
1663
table->file->extra(HA_EXTRA_IGNORE_DUP_KEY);
1714
1664
if (info.handle_duplicates == DUP_REPLACE)
1715
table->cursor->extra(HA_EXTRA_WRITE_CAN_REPLACE);
1665
table->file->extra(HA_EXTRA_WRITE_CAN_REPLACE);
1717
1666
if (info.handle_duplicates == DUP_UPDATE)
1718
table->cursor->extra(HA_EXTRA_INSERT_WITH_UPDATE);
1720
table->cursor->ha_start_bulk_insert((ha_rows) 0);
1721
session->setAbortOnWarning(not info.ignore);
1667
table->file->extra(HA_EXTRA_INSERT_WITH_UPDATE);
1668
table->file->ha_start_bulk_insert((ha_rows) 0);
1669
session->abort_on_warning= !info.ignore;
1722
1670
if (check_that_all_fields_are_given_values(session, table, table_list))
1725
1672
table->mark_columns_needed_for_insert();
1726
table->cursor->extra(HA_EXTRA_WRITE_CACHE);
1673
table->file->extra(HA_EXTRA_WRITE_CACHE);
1730
1677
void select_create::store_values(List<Item> &values)
1732
fill_record(session, field, values, true);
1679
fill_record(session, field, values, 1);
1736
void select_create::send_error(drizzled::error_t errcode,const char *err)
1683
void select_create::send_error(uint32_t errcode,const char *err)
1739
1688
This will execute any rollbacks that are necessary before writing
1740
1689
the transcation cache.
1802
1754
select_insert::abort();
1755
session->transaction.stmt.modified_non_trans_table= false;
1806
session->unlockTables(*m_plock);
1760
mysql_unlock_tables(session, *m_plock);
1807
1761
*m_plock= NULL;
1813
table->cursor->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
1814
table->cursor->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
1815
if (not create_info->table_existed)
1816
session->drop_open_table(table, identifier);
1817
table= NULL; // Safety
1767
table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
1768
table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
1769
if (!create_info->table_existed)
1770
drop_open_table(session, table, create_table->db, create_table->table_name);
1821
} /* namespace drizzled */
1777
/*****************************************************************************
1778
Instansiate templates
1779
*****************************************************************************/
1781
#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION
1782
template class List_iterator_fast<List_item>;
1783
#endif /* HAVE_EXPLICIT_TEMPLATE_INSTANTIATION */