~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sys_var.cc

  • Committer: Lee Bieber
  • Date: 2011-02-11 20:30:05 UTC
  • mfrom: (2157.1.3 build)
  • Revision ID: kalebral@gmail.com-20110211203005-757o1y2yf78dxzqr
Merge Stewart - 716848: drizzleimport displays wrong program_name
Merge Stewart - update README file
Merge Andrew and Joe - Exposes the InnoDB SYS_REPLICATION_LOG to data_dictionary so that it is fast and fixes many issues we have been having

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
 
39
39
*/
40
40
 
41
 
#include <config.h>
42
 
#include <drizzled/option.h>
43
 
#include <drizzled/error.h>
44
 
#include <drizzled/gettext.h>
45
 
#include <drizzled/tztime.h>
46
 
#include <drizzled/data_home.h>
47
 
#include <drizzled/set_var.h>
48
 
#include <drizzled/session.h>
49
 
#include <drizzled/sql_base.h>
50
 
#include <drizzled/lock.h>
51
 
#include <drizzled/item/uint.h>
52
 
#include <drizzled/item/null.h>
53
 
#include <drizzled/item/float.h>
54
 
#include <drizzled/item/string.h>
55
 
#include <drizzled/plugin.h>
56
 
#include <drizzled/version.h>
57
 
#include <drizzled/strfunc.h>
58
 
#include <drizzled/internal/m_string.h>
59
 
#include <drizzled/pthread_globals.h>
60
 
#include <drizzled/charset.h>
61
 
#include <drizzled/transaction_services.h>
62
 
#include <drizzled/constrained_value.h>
63
 
#include <drizzled/visibility.h>
64
 
#include <drizzled/typelib.h>
65
 
#include <drizzled/plugin/storage_engine.h>
 
41
#include "config.h"
 
42
#include "drizzled/option.h"
 
43
#include "drizzled/error.h"
 
44
#include "drizzled/gettext.h"
 
45
#include "drizzled/tztime.h"
 
46
#include "drizzled/data_home.h"
 
47
#include "drizzled/set_var.h"
 
48
#include "drizzled/session.h"
 
49
#include "drizzled/sql_base.h"
 
50
#include "drizzled/lock.h"
 
51
#include "drizzled/item/uint.h"
 
52
#include "drizzled/item/null.h"
 
53
#include "drizzled/item/float.h"
 
54
#include "drizzled/item/string.h"
 
55
#include "drizzled/plugin.h"
 
56
#include "drizzled/version.h"
 
57
#include "drizzled/strfunc.h"
 
58
#include "drizzled/internal/m_string.h"
 
59
#include "drizzled/pthread_globals.h"
 
60
#include "drizzled/charset.h"
 
61
#include "drizzled/transaction_services.h"
 
62
#include "drizzled/constrained_value.h"
 
63
#include "drizzled/visibility.h"
66
64
 
67
65
#include <cstdio>
68
66
#include <map>
92
90
 
93
91
extern TYPELIB tx_isolation_typelib;
94
92
 
95
 
namespace
96
 
{
97
 
static size_t revno= DRIZZLE7_VC_REVNO;
98
 
static size_t release_id= DRIZZLE7_RELEASE_ID;
99
 
}
100
 
 
101
93
const char *bool_type_names[]= { "OFF", "ON", NULL };
102
94
TYPELIB bool_typelib=
103
95
{
225
217
 
226
218
static sys_var_session_storage_engine sys_storage_engine("storage_engine",
227
219
                                       &drizzle_system_variables::storage_engine);
 
220
static sys_var_const_str        sys_system_time_zone("system_time_zone",
 
221
                                             system_time_zone);
228
222
static sys_var_size_t_ptr       sys_table_def_size("table_definition_cache",
229
223
                                             &table_def_size);
230
224
static sys_var_uint64_t_ptr     sys_table_cache_size("table_open_cache",
313
307
sys_var_session_uint64_t sys_group_concat_max_len("group_concat_max_len",
314
308
                                                  &drizzle_system_variables::group_concat_max_len);
315
309
 
 
310
sys_var_session_time_zone sys_time_zone("time_zone");
 
311
 
316
312
/* Global read-only variable containing hostname */
317
 
static sys_var_const_string sys_hostname("hostname", getServerHostname());
318
 
 
319
 
static sys_var_const_str sys_revid("vc_revid", DRIZZLE7_VC_REVID);
320
 
static sys_var_const_str sys_branch("vc_branch", DRIZZLE7_VC_BRANCH);
321
 
static sys_var_size_t_ptr_readonly sys_revno("vc_revno", &revno);
322
 
static sys_var_size_t_ptr_readonly sys_release_id("vc_release_id", &release_id);
 
313
static sys_var_const_str        sys_hostname("hostname", glob_hostname);
323
314
 
324
315
bool sys_var::check(Session *session, set_var *var)
325
316
{
867
858
      goto err;
868
859
    }
869
860
 
870
 
    uint64_t tmp_val= enum_names->find_type(res->ptr(), res->length(), true);
 
861
    uint64_t tmp_val= find_type(enum_names, res->ptr(), res->length(),1);
871
862
    if (tmp_val == 0)
872
863
    {
873
864
      value= res->c_ptr();
1169
1160
  return (unsigned char*) &session->sys_var_tmp.uint64_t_value;
1170
1161
}
1171
1162
 
 
1163
 
 
1164
bool sys_var_session_time_zone::update(Session *session, set_var *var)
 
1165
{
 
1166
  char buff[MAX_TIME_ZONE_NAME_LENGTH];
 
1167
  String str(buff, sizeof(buff), &my_charset_utf8_general_ci);
 
1168
  String *res= var->value->val_str(&str);
 
1169
 
 
1170
  Time_zone *tmp= my_tz_find(session, res);
 
1171
  if (tmp == NULL)
 
1172
  {
 
1173
    boost::throw_exception(invalid_option_value(var->var->getName()) << invalid_value(std::string(res ? res->c_ptr() : "NULL")));
 
1174
    return 1;
 
1175
  }
 
1176
  /* We are using Time_zone object found during check() phase. */
 
1177
  if (var->type == OPT_GLOBAL)
 
1178
  {
 
1179
    boost::mutex::scoped_lock scopedLock(session->catalog().systemVariableLock());
 
1180
    global_system_variables.time_zone= tmp;
 
1181
  }
 
1182
  else
 
1183
  {
 
1184
    session->variables.time_zone= tmp;
 
1185
  }
 
1186
 
 
1187
  return 0;
 
1188
}
 
1189
 
 
1190
 
 
1191
unsigned char *sys_var_session_time_zone::value_ptr(Session *session,
 
1192
                                                    sql_var_t type,
 
1193
                                                    const LEX_STRING *)
 
1194
{
 
1195
  /*
 
1196
    We can use ptr() instead of c_ptr() here because String contaning
 
1197
    time zone name is guaranteed to be zero ended.
 
1198
  */
 
1199
  if (type == OPT_GLOBAL)
 
1200
    return (unsigned char *)(global_system_variables.time_zone->get_name()->ptr());
 
1201
  else
 
1202
  {
 
1203
    /*
 
1204
      This is an ugly fix for replication: we don't replicate properly queries
 
1205
      invoking system variables' values to update tables; but
 
1206
      CONVERT_TZ(,,@@session.time_zone) is so popular that we make it
 
1207
      replicable (i.e. we tell the binlog code to store the session
 
1208
      timezone). If it's the global value which was used we can't replicate
 
1209
      (binlog code stores session value only).
 
1210
    */
 
1211
    return (unsigned char *)(session->variables.time_zone->get_name()->ptr());
 
1212
  }
 
1213
}
 
1214
 
 
1215
 
 
1216
void sys_var_session_time_zone::set_default(Session *session, sql_var_t type)
 
1217
{
 
1218
  boost::mutex::scoped_lock scopedLock(session->catalog().systemVariableLock());
 
1219
  if (type == OPT_GLOBAL)
 
1220
  {
 
1221
    if (default_tz_name)
 
1222
    {
 
1223
      String str(default_tz_name, &my_charset_utf8_general_ci);
 
1224
      /*
 
1225
        We are guaranteed to find this time zone since its existence
 
1226
        is checked during start-up.
 
1227
      */
 
1228
      global_system_variables.time_zone= my_tz_find(session, &str);
 
1229
    }
 
1230
    else
 
1231
      global_system_variables.time_zone= my_tz_SYSTEM;
 
1232
  }
 
1233
  else
 
1234
    session->variables.time_zone= global_system_variables.time_zone;
 
1235
}
 
1236
 
 
1237
 
 
1238
 
1172
1239
bool sys_var_session_lc_time_names::update(Session *session, set_var *var)
1173
1240
{
1174
1241
  MY_LOCALE *locale_match;
1422
1489
drizzle_show_var* enumerate_sys_vars(Session *session)
1423
1490
{
1424
1491
  int size= sizeof(drizzle_show_var) * (system_variable_map.size() + 1);
1425
 
  drizzle_show_var *result= (drizzle_show_var*) session->getMemRoot()->allocate(size);
 
1492
  drizzle_show_var *result= (drizzle_show_var*) session->alloc(size);
1426
1493
 
1427
1494
  if (result)
1428
1495
  {
1498
1565
    add_sys_var_to_list(&sys_back_log, my_long_options);
1499
1566
    add_sys_var_to_list(&sys_basedir, my_long_options);
1500
1567
    add_sys_var_to_list(&sys_big_selects, my_long_options);
1501
 
    add_sys_var_to_list(&sys_branch, my_long_options);
1502
1568
    add_sys_var_to_list(&sys_buffer_results, my_long_options);
1503
1569
    add_sys_var_to_list(&sys_bulk_insert_buff_size, my_long_options);
1504
1570
    add_sys_var_to_list(&sys_collation_server, my_long_options);
1533
1599
    add_sys_var_to_list(&sys_range_alloc_block_size, my_long_options);
1534
1600
    add_sys_var_to_list(&sys_read_buff_size, my_long_options);
1535
1601
    add_sys_var_to_list(&sys_read_rnd_buff_size, my_long_options);
1536
 
    add_sys_var_to_list(&sys_release_id, my_long_options);
1537
1602
    add_sys_var_to_list(&sys_replicate_query, my_long_options);
1538
 
    add_sys_var_to_list(&sys_revid, my_long_options);
1539
 
    add_sys_var_to_list(&sys_revno, my_long_options);
1540
1603
    add_sys_var_to_list(&sys_scheduler, my_long_options);
1541
1604
    add_sys_var_to_list(&sys_secure_file_priv, my_long_options);
1542
1605
    add_sys_var_to_list(&sys_select_limit, my_long_options);
1545
1608
    add_sys_var_to_list(&sys_sql_notes, my_long_options);
1546
1609
    add_sys_var_to_list(&sys_sql_warnings, my_long_options);
1547
1610
    add_sys_var_to_list(&sys_storage_engine, my_long_options);
 
1611
    add_sys_var_to_list(&sys_system_time_zone, my_long_options);
1548
1612
    add_sys_var_to_list(&sys_table_cache_size, my_long_options);
1549
1613
    add_sys_var_to_list(&sys_table_def_size, my_long_options);
1550
1614
    add_sys_var_to_list(&sys_table_lock_wait_timeout, my_long_options);
1551
1615
    add_sys_var_to_list(&sys_thread_stack_size, my_long_options);
 
1616
    add_sys_var_to_list(&sys_time_zone, my_long_options);
1552
1617
    add_sys_var_to_list(&sys_timed_mutexes, my_long_options);
1553
1618
    add_sys_var_to_list(&sys_timestamp, my_long_options);
1554
1619
    add_sys_var_to_list(&sys_tmp_table_size, my_long_options);