22
22
/*****************************************************************************
24
Copyright (C) 2000, 2009, MySQL AB & Innobase Oy. All Rights Reserved.
25
Copyright (C) 2008, 2009 Google Inc.
24
Copyright (c) 2000, 2009, MySQL AB & Innobase Oy. All Rights Reserved.
25
Copyright (c) 2008, 2009 Google Inc.
27
27
Portions of this file contain modifications contributed and copyrighted by
28
28
Google, Inc. Those modifications are gratefully acknowledged and are described
45
45
*****************************************************************************/
46
46
/***********************************************************************
48
Copyright (C) 1995, 2009, Innobase Oy. All Rights Reserved.
49
Copyright (C) 2009, Percona Inc.
48
Copyright (c) 1995, 2009, Innobase Oy. All Rights Reserved.
49
Copyright (c) 2009, Percona Inc.
51
51
Portions of this file contain modifications contributed and copyrighted
52
52
by Percona Inc.. Those modifications are
71
71
***********************************************************************/
75
75
#include <drizzled/table.h>
76
76
#include <drizzled/error.h>
77
#include <drizzled/internal/my_pthread.h>
77
#include "drizzled/internal/my_pthread.h"
78
78
#include <drizzled/plugin/transactional_storage_engine.h>
79
79
#include <drizzled/plugin/error_message.h>
90
90
#include <drizzled/message/table.pb.h>
91
#include <drizzled/internal/m_string.h>
91
#include "drizzled/internal/m_string.h"
93
#include <drizzled/global_charset_info.h>
93
#include "drizzled/global_charset_info.h"
95
95
#include "haildb_datadict_dump_func.h"
96
96
#include "config_table_function.h"
101
101
#include "haildb_engine.h"
103
103
#include <drizzled/field.h>
104
#include <drizzled/field/blob.h>
105
#include <drizzled/field/enum.h>
104
#include "drizzled/field/timestamp.h" // needed for UPDATE NOW()
105
#include "drizzled/field/blob.h"
106
#include "drizzled/field/enum.h"
106
107
#include <drizzled/session.h>
108
#include <boost/program_options.hpp>
107
109
#include <drizzled/module/option_map.h>
108
111
#include <drizzled/charset.h>
109
#include <drizzled/current_session.h>
113
113
namespace po= boost::program_options;
114
#include <boost/program_options.hpp>
115
114
#include <boost/algorithm/string.hpp>
117
116
using namespace std;
118
117
using namespace google;
119
118
using namespace drizzled;
121
int read_row_from_haildb(Session *session, unsigned char* buf, ib_crsr_t cursor, ib_tpl_t tuple, Table* table, bool has_hidden_primary_key, uint64_t *hidden_pkey, drizzled::memory::Root **blobroot= NULL);
120
int read_row_from_haildb(unsigned char* buf, ib_crsr_t cursor, ib_tpl_t tuple, Table* table, bool has_hidden_primary_key, uint64_t *hidden_pkey, drizzled::memory::Root **blobroot= NULL);
122
121
static void fill_ib_search_tpl_from_drizzle_key(ib_tpl_t search_tuple,
123
122
const drizzled::KeyInfo *key_info,
124
123
const unsigned char *key_ptr,
168
167
int doCreateTable(Session&,
169
168
Table& table_arg,
170
const drizzled::identifier::Table &identifier,
169
const drizzled::TableIdentifier &identifier,
171
170
drizzled::message::Table& proto);
173
int doDropTable(Session&, const identifier::Table &identifier);
172
int doDropTable(Session&, const TableIdentifier &identifier);
175
174
int doRenameTable(drizzled::Session&,
176
const drizzled::identifier::Table&,
177
const drizzled::identifier::Table&);
175
const drizzled::TableIdentifier&,
176
const drizzled::TableIdentifier&);
179
178
int doGetTableDefinition(Session& session,
180
const identifier::Table &identifier,
179
const TableIdentifier &identifier,
181
180
drizzled::message::Table &table_proto);
183
bool doDoesTableExist(Session&, const identifier::Table &identifier);
182
bool doDoesTableExist(Session&, const TableIdentifier &identifier);
186
void getTableNamesInSchemaFromHailDB(const drizzled::identifier::Schema &schema,
185
void getTableNamesInSchemaFromHailDB(const drizzled::SchemaIdentifier &schema,
187
186
drizzled::plugin::TableNameList *set_of_names,
188
drizzled::identifier::Table::vector *identifiers);
187
drizzled::TableIdentifier::vector *identifiers);
191
190
void doGetTableIdentifiers(drizzled::CachedDirectory &,
192
const drizzled::identifier::Schema &schema,
193
drizzled::identifier::Table::vector &identifiers);
191
const drizzled::SchemaIdentifier &schema,
192
drizzled::TableIdentifier::vector &identifiers);
195
194
/* The following defines can be increased if necessary */
196
195
uint32_t max_supported_keys() const { return 1000; }
271
270
return HA_ERR_NO_ACTIVE_RECORD;
273
272
case DB_DEADLOCK:
274
/* HailDB will roll back a transaction itself due to DB_DEADLOCK.
275
This means we have to tell Drizzle about it */
276
session->markTransactionForRollback(true);
277
273
return HA_ERR_LOCK_DEADLOCK;
279
275
case DB_LOCK_WAIT_TIMEOUT:
280
session->markTransactionForRollback(false);
281
276
return HA_ERR_LOCK_WAIT_TIMEOUT;
283
278
case DB_NO_REFERENCED_ROW:
358
353
transaction= get_trx(session);
359
isolation_level= tx_isolation_to_ib_trx_level(session->getTxIsolation());
354
isolation_level= tx_isolation_to_ib_trx_level((enum_tx_isolation)session_tx_isolation(session));
360
355
*transaction= ib_trx_begin(isolation_level);
362
return *transaction == NULL;
365
360
void HailDBEngine::doStartStatement(Session *session)
393
388
err= ib_savepoint_rollback(*transaction, savepoint.getName().c_str(),
394
389
savepoint.getName().length());
396
return ib_err_t_to_drizzle_error(session, err);
391
return ib_err_t_to_drizzle_error(err);
399
394
int HailDBEngine::doReleaseSavepoint(Session* session,
434
429
ib_trx_t *transaction= get_trx(session);
431
if (all || !session_test_options(session, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
438
if (ib_trx_state(*transaction) == IB_TRX_NOT_STARTED)
439
err= ib_trx_release(*transaction);
441
err= ib_trx_rollback(*transaction);
433
err= ib_trx_rollback(*transaction);
443
435
if (err != DB_SUCCESS)
444
return ib_err_t_to_drizzle_error(session, err);
436
return ib_err_t_to_drizzle_error(err);
446
438
*transaction= NULL;
450
if (ib_trx_state(*transaction) == IB_TRX_NOT_STARTED)
453
442
err= ib_savepoint_rollback(*transaction, statement_savepoint_name.c_str(),
454
443
statement_savepoint_name.length());
455
444
if (err != DB_SUCCESS)
456
return ib_err_t_to_drizzle_error(session, err);
445
return ib_err_t_to_drizzle_error(err);
832
821
int HailDBCursor::open(const char *name, int, uint32_t)
834
823
const char* haildb_table_name= table_path_to_haildb_name(name);
835
ib_err_t err= ib_table_get_id(haildb_table_name, &table_id);
824
ib_err_t err= ib_cursor_open_table(haildb_table_name, NULL, &cursor);
836
825
bool has_hidden_primary_key= false;
839
828
if (err != DB_SUCCESS)
840
return ib_err_t_to_drizzle_error(getTable()->getSession(), err);
842
err= ib_cursor_open_table_using_id(table_id, NULL, &cursor);
843
cursor_is_sec_index= false;
845
if (err != DB_SUCCESS)
846
return ib_err_t_to_drizzle_error(getTable()->getSession(), err);
829
return ib_err_t_to_drizzle_error(err);
848
831
err= ib_index_get_id(haildb_table_name, "HIDDEN_PRIMARY", &idx_id);
938
921
*err= ib_table_schema_add_col(schema, field.name().c_str(), IB_INT,
939
922
column_attr, 0, 4);
941
case message::Table::Field::EPOCH:
924
case message::Table::Field::TIMESTAMP:
942
925
*err= ib_table_schema_add_col(schema, field.name().c_str(), IB_INT,
943
926
column_attr, 0, 8);
1039
1022
int HailDBEngine::doCreateTable(Session &session,
1040
1023
Table& table_obj,
1041
const drizzled::identifier::Table &identifier,
1024
const drizzled::TableIdentifier &identifier,
1042
1025
drizzled::message::Table& table_message)
1044
1027
ib_tbl_sch_t haildb_table_schema= NULL;
1082
1065
ER_CANT_CREATE_TABLE,
1083
1066
_("Cannot create table %s. HailDB Error %d (%s)\n"),
1084
1067
haildb_table_name.c_str(), haildb_err, ib_strerror(haildb_err));
1085
return ib_err_t_to_drizzle_error(&session, haildb_err);
1068
return ib_err_t_to_drizzle_error(haildb_err);
1088
1071
for (int colnr= 0; colnr < table_message.field_size() ; colnr++)
1103
1086
" HailDB Error %d (%s)\n"),
1104
1087
field.name().c_str(), haildb_table_name.c_str(),
1105
1088
haildb_err, ib_strerror(haildb_err));
1106
return ib_err_t_to_drizzle_error(&session, haildb_err);
1089
return ib_err_t_to_drizzle_error(haildb_err);
1108
1091
if (field_err != 0)
1109
1092
return field_err;
1251
1234
_("Cannot create table %s. HailDB Error %d (%s)\n"),
1252
1235
haildb_table_name.c_str(),
1253
1236
haildb_err, ib_strerror(haildb_err));
1254
return ib_err_t_to_drizzle_error(&session, haildb_err);
1237
return ib_err_t_to_drizzle_error(haildb_err);
1469
1452
int HailDBEngine::doRenameTable(drizzled::Session &session,
1470
const drizzled::identifier::Table &from,
1471
const drizzled::identifier::Table &to)
1453
const drizzled::TableIdentifier &from,
1454
const drizzled::TableIdentifier &to)
1473
1456
ib_trx_t haildb_schema_transaction;
1518
1501
assert(rollback_err == DB_SUCCESS);
1519
1502
rollback_err= ib_trx_rollback(haildb_schema_transaction);
1520
1503
assert(rollback_err == DB_SUCCESS);
1521
return ib_err_t_to_drizzle_error(&session, err);
1504
return ib_err_t_to_drizzle_error(err);
1524
1507
void HailDBEngine::getTableNamesInSchemaFromHailDB(
1525
const drizzled::identifier::Schema &schema,
1508
const drizzled::SchemaIdentifier &schema,
1526
1509
drizzled::plugin::TableNameList *set_of_names,
1527
drizzled::identifier::Table::vector *identifiers)
1510
drizzled::TableIdentifier::vector *identifiers)
1529
1512
ib_trx_t transaction;
1530
1513
ib_crsr_t cursor;
1618
1601
void HailDBEngine::doGetTableIdentifiers(drizzled::CachedDirectory &,
1619
const drizzled::identifier::Schema &schema,
1620
drizzled::identifier::Table::vector &identifiers)
1602
const drizzled::SchemaIdentifier &schema,
1603
drizzled::TableIdentifier::vector &identifiers)
1622
1605
getTableNamesInSchemaFromHailDB(schema, NULL, &identifiers);
1744
1727
int HailDBEngine::doGetTableDefinition(Session &session,
1745
const identifier::Table &identifier,
1728
const TableIdentifier &identifier,
1746
1729
drizzled::message::Table &table)
1748
1731
ib_crsr_t haildb_cursor= NULL;
1906
1889
tuple= ib_clust_read_tuple_create(cursor);
1908
if (cursor_is_sec_index)
1910
err= ib_cursor_close(cursor);
1911
assert(err == DB_SUCCESS);
1913
err= ib_cursor_open_table_using_id(table_id, transaction, &cursor);
1915
if (err != DB_SUCCESS)
1916
return ib_err_t_to_drizzle_error(getTable()->getSession(), err);
1918
cursor_is_sec_index= false;
1922
ib_cursor_attach_trx(cursor, transaction);
1891
ib_cursor_attach_trx(cursor, transaction);
1925
1893
err= ib_cursor_first(cursor);
1926
if (current_session->getLex()->sql_command == SQLCOM_CREATE_TABLE
1894
if (current_session->lex->sql_command == SQLCOM_CREATE_TABLE
1927
1895
&& err == DB_MISSING_HISTORY)
1929
1897
/* See https://bugs.launchpad.net/drizzle/+bug/556978
1984
1952
if (share->has_hidden_primary_key)
1986
err= ib_tuple_write_u64(tuple, getTable()->getShare()->sizeFields(),
1987
share->hidden_pkey_auto_increment_value.fetch_and_increment());
1954
err= ib_tuple_write_u64(tuple, getTable()->getShare()->fields, share->hidden_pkey_auto_increment_value.fetch_and_increment());
1990
1957
err= ib_cursor_insert_row(cursor, tuple);
2044
2011
if (tuple == NULL)
2046
2013
ib_trx_t transaction= *get_trx(getTable()->in_use);
2048
if (cursor_is_sec_index)
2050
err= ib_cursor_close(cursor);
2051
assert(err == DB_SUCCESS);
2053
err= ib_cursor_open_table_using_id(table_id, transaction, &cursor);
2055
if (err != DB_SUCCESS)
2056
return ib_err_t_to_drizzle_error(getTable()->getSession(), err);
2057
cursor_is_sec_index= false;
2061
ib_cursor_attach_trx(cursor, transaction);
2014
ib_cursor_attach_trx(cursor, transaction);
2064
2016
store_key_value_from_haildb(getTable()->key_info + getTable()->getShare()->getPrimaryKey(),
2065
2017
ref, ref_length, old_data);
2106
2058
advance_cursor= true;
2108
return ib_err_t_to_drizzle_error(getTable()->getSession(), err);
2060
if (err == DB_SUCCESS)
2062
else if (err == DB_DUPLICATE_KEY)
2063
return HA_ERR_FOUND_DUPP_KEY;
2111
2068
int HailDBCursor::doDeleteRecord(const unsigned char *)
2115
assert(ib_cursor_is_positioned(cursor) == IB_TRUE);
2116
2072
err= ib_cursor_delete_row(cursor);
2073
if (err != DB_SUCCESS)
2118
2076
advance_cursor= true;
2120
return ib_err_t_to_drizzle_error(getTable()->getSession(), err);
2123
2080
int HailDBCursor::delete_all_rows(void)
2125
2082
/* I *think* ib_truncate is non-transactional....
2126
2083
so only support TRUNCATE and not DELETE FROM t;
2127
(this is what ha_innodb does)
2084
(this is what ha_haildb does)
2129
if (getTable()->in_use->getSqlCommand() != SQLCOM_TRUNCATE)
2086
if (session_sql_command(getTable()->in_use) != SQLCOM_TRUNCATE)
2130
2087
return HA_ERR_WRONG_COMMAND;
2135
2092
ib_trx_t transaction= ib_trx_begin(IB_TRX_REPEATABLE_READ);
2137
if (cursor_is_sec_index)
2139
err= ib_cursor_close(cursor);
2140
assert(err == DB_SUCCESS);
2142
err= ib_cursor_open_table_using_id(table_id, transaction, &cursor);
2144
if (err != DB_SUCCESS)
2145
return ib_err_t_to_drizzle_error(getTable()->getSession(), err);
2146
cursor_is_sec_index= false;
2150
ib_cursor_attach_trx(cursor, transaction);
2094
ib_cursor_attach_trx(cursor, transaction);
2153
2096
err= ib_schema_lock_exclusive(transaction);
2154
2097
if (err != DB_SUCCESS)
2184
2127
ib_schema_unlock(transaction);
2185
2128
ib_err_t rollback_err= ib_trx_rollback(transaction);
2186
2129
assert(rollback_err == DB_SUCCESS);
2187
return ib_err_t_to_drizzle_error(getTable()->getSession(), err);
2190
2133
int HailDBCursor::doStartTableScan(bool)
2192
ib_err_t err= DB_SUCCESS;
2193
2136
ib_trx_t transaction;
2195
2138
if (in_table_scan)
2201
2144
assert(transaction != NULL);
2203
if (cursor_is_sec_index)
2205
err= ib_cursor_close(cursor);
2206
assert(err == DB_SUCCESS);
2208
err= ib_cursor_open_table_using_id(table_id, transaction, &cursor);
2209
cursor_is_sec_index= false;
2213
ib_cursor_attach_trx(cursor, transaction);
2216
if (err != DB_SUCCESS)
2217
return ib_err_t_to_drizzle_error(getTable()->getSession(), err);
2146
ib_cursor_attach_trx(cursor, transaction);
2219
2148
err= ib_cursor_set_lock_mode(cursor, ib_lock_mode);
2220
2149
assert(err == DB_SUCCESS); // FIXME
2224
2153
err= ib_cursor_first(cursor);
2225
2154
if (err != DB_SUCCESS && err != DB_END_OF_INDEX)
2227
int reset_err= ib_cursor_reset(cursor);
2228
assert(reset_err == DB_SUCCESS);
2229
return ib_err_t_to_drizzle_error(getTable()->getSession(), err);
2156
previous_error= ib_err_t_to_drizzle_error(err);
2157
err= ib_cursor_reset(cursor);
2158
return previous_error;
2232
2161
advance_cursor= false;
2237
int read_row_from_haildb(Session *session, unsigned char* buf, ib_crsr_t cursor, ib_tpl_t tuple, Table* table, bool has_hidden_primary_key, uint64_t *hidden_pkey, drizzled::memory::Root **blobroot)
2167
int read_row_from_haildb(unsigned char* buf, ib_crsr_t cursor, ib_tpl_t tuple, Table* table, bool has_hidden_primary_key, uint64_t *hidden_pkey, drizzled::memory::Root **blobroot)
2240
2170
ptrdiff_t row_offset= buf - table->getInsertRecord();
2242
2172
err= ib_cursor_read_row(cursor, tuple);
2244
if (err == DB_RECORD_NOT_FOUND)
2174
if (err != DB_SUCCESS) // FIXME
2245
2175
return HA_ERR_END_OF_FILE;
2246
if (err != DB_SUCCESS)
2247
return ib_err_t_to_drizzle_error(session, err);
2256
return previous_error;
2329
2258
if (advance_cursor)
2331
2259
err= ib_cursor_next(cursor);
2332
if (err != DB_SUCCESS)
2333
return ib_err_t_to_drizzle_error(getTable()->getSession(), err);
2336
2261
tuple= ib_tuple_clear(tuple);
2337
ret= read_row_from_haildb(getTable()->getSession(), buf, cursor, tuple,
2262
ret= read_row_from_haildb(buf, cursor, tuple, getTable(),
2339
2263
share->has_hidden_primary_key,
2340
2264
&hidden_autoinc_pkey_position);
2395
2317
tuple= ib_tuple_clear(tuple);
2398
ret= read_row_from_haildb(getTable()->getSession(), buf, cursor, tuple,
2320
ret= read_row_from_haildb(buf, cursor, tuple, getTable(),
2400
2321
share->has_hidden_primary_key,
2401
2322
&hidden_autoinc_pkey_position);
2538
if (flag & HA_STATUS_CONST)
2540
for (unsigned int i = 0; i < getTable()->getShare()->sizeKeys(); i++)
2542
const char* index_name= getTable()->key_info[i].name;
2545
ha_rows rec_per_key;
2547
err= ib_get_index_stat_n_diff_key_vals(cursor, index_name,
2550
if (err != DB_SUCCESS)
2551
return ib_err_t_to_drizzle_error(getTable()->getSession(), err);
2553
for (unsigned int j=0; j < getTable()->key_info[i].key_parts; j++)
2555
if (n_diff[j+1] == 0)
2556
rec_per_key= stats.records;
2558
rec_per_key= stats.records / n_diff[j+1];
2560
/* We import this heuristic from ha_innodb, which says
2561
that MySQL favours table scans too much over index searches,
2562
so we pretend our index selectivity is 2 times better. */
2564
rec_per_key= rec_per_key / 2;
2566
if (rec_per_key == 0)
2569
getTable()->key_info[i].rec_per_key[j]=
2570
rec_per_key >= ~(ulong) 0 ? ~(ulong) 0 :
2571
(ulong) rec_per_key;
2581
2462
int HailDBCursor::doStartIndexScan(uint32_t keynr, bool)
2584
2464
ib_trx_t transaction= *get_trx(getTable()->in_use);
2586
2466
active_index= keynr;
2468
ib_cursor_attach_trx(cursor, transaction);
2588
2470
if (active_index == 0 && ! share->has_hidden_primary_key)
2590
if (cursor_is_sec_index)
2592
err= ib_cursor_close(cursor);
2593
assert(err == DB_SUCCESS);
2595
err= ib_cursor_open_table_using_id(table_id, transaction, &cursor);
2597
if (err != DB_SUCCESS)
2598
return ib_err_t_to_drizzle_error(getTable()->getSession(), err);
2603
ib_cursor_attach_trx(cursor, transaction);
2606
cursor_is_sec_index= false;
2607
2472
tuple= ib_clust_read_tuple_create(cursor);
2611
2477
ib_id_t index_id;
2612
2478
err= ib_index_get_id(table_path_to_haildb_name(getShare()->getPath()),
2613
2479
getShare()->getKeyInfo(keynr).name,
2615
2481
if (err != DB_SUCCESS)
2616
return ib_err_t_to_drizzle_error(getTable()->getSession(), err);
2618
2484
err= ib_cursor_close(cursor);
2619
2485
assert(err == DB_SUCCESS);
2621
2486
err= ib_cursor_open_index_using_id(index_id, transaction, &cursor);
2623
2488
if (err != DB_SUCCESS)
2624
return ib_err_t_to_drizzle_error(getTable()->getSession(), err);
2626
cursor_is_sec_index= true;
2628
2491
tuple= ib_clust_read_tuple_create(cursor);
2629
2492
ib_cursor_set_cluster_access(cursor);
2632
err= ib_cursor_set_lock_mode(cursor, ib_lock_mode);
2495
ib_err_t err= ib_cursor_set_lock_mode(cursor, ib_lock_mode);
2633
2496
assert(err == DB_SUCCESS);
2635
2498
advance_cursor= false;
2775
2638
if (err != DB_SUCCESS)
2777
return ib_err_t_to_drizzle_error(getTable()->getSession(), err);
2640
return ib_err_t_to_drizzle_error(err);
2780
2643
tuple= ib_tuple_clear(tuple);
2781
ret= read_row_from_haildb(getTable()->getSession(), buf, cursor, tuple,
2644
ret= read_row_from_haildb(buf, cursor, tuple, getTable(),
2783
2645
share->has_hidden_primary_key,
2784
2646
&hidden_autoinc_pkey_position,
2785
2647
(allocate_blobs)? &blobroot : NULL);
2879
2732
tuple= ib_tuple_clear(tuple);
2880
ret= read_row_from_haildb(getTable()->getSession(), buf, cursor, tuple,
2733
ret= read_row_from_haildb(buf, cursor, tuple, getTable(),
2882
2734
share->has_hidden_primary_key,
2883
2735
&hidden_autoinc_pkey_position);
2906
2758
if (err == DB_END_OF_INDEX)
2907
2759
return HA_ERR_END_OF_FILE;
2909
return ib_err_t_to_drizzle_error(getTable()->getSession(), err);
2913
2765
tuple= ib_tuple_clear(tuple);
2914
ret= read_row_from_haildb(getTable()->getSession(), buf, cursor, tuple,
2766
ret= read_row_from_haildb(buf, cursor, tuple, getTable(),
2916
2767
share->has_hidden_primary_key,
2917
2768
&hidden_autoinc_pkey_position);
2930
2781
err= ib_cursor_first(cursor);
2931
2782
if (err != DB_SUCCESS)
2932
return ib_err_t_to_drizzle_error(getTable()->getSession(), err);
2783
return ib_err_t_to_drizzle_error(err);
2934
2785
tuple= ib_tuple_clear(tuple);
2935
ret= read_row_from_haildb(getTable()->getSession(), buf, cursor, tuple,
2786
ret= read_row_from_haildb(buf, cursor, tuple, getTable(),
2937
2787
share->has_hidden_primary_key,
2938
2788
&hidden_autoinc_pkey_position);
2951
2801
err= ib_cursor_last(cursor);
2952
2802
if (err != DB_SUCCESS)
2953
return ib_err_t_to_drizzle_error(getTable()->getSession(), err);
2803
return ib_err_t_to_drizzle_error(err);
2955
2805
tuple= ib_tuple_clear(tuple);
2956
ret= read_row_from_haildb(getTable()->getSession(), buf, cursor, tuple,
2806
ret= read_row_from_haildb(buf, cursor, tuple, getTable(),
2958
2807
share->has_hidden_primary_key,
2959
2808
&hidden_autoinc_pkey_position);
2960
2809
advance_cursor= true;
3149
2998
va_start(args, fmt);
3150
if (not shutdown_in_progress)
3152
r= plugin::ErrorMessage::vprintf(error::WARN, fmt, args);
2999
if (! shutdown_in_progress)
3000
r= plugin::ErrorMessage::vprintf(NULL, ERRMSG_LVL_WARN, fmt, args);
3156
3002
vfprintf(stderr, fmt, args);
3160
3005
return (! r==true);
3539
3384
"Transactional Storage Engine using the HailDB Library",
3540
3385
PLUGIN_LICENSE_GPL,
3541
3386
haildb_init, /* Plugin Init */
3387
NULL, /* system variables */
3543
3388
init_options /* config options */
3545
3390
DRIZZLE_DECLARE_PLUGIN_END;