~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sys_var.cc

  • Committer: Monty Taylor
  • Date: 2011-02-13 17:26:39 UTC
  • mfrom: (2157.2.2 give-in-to-pkg-config)
  • mto: This revision was merged to the branch mainline in revision 2166.
  • Revision ID: mordred@inaugust.com-20110213172639-nhy7i72sfhoq13ms
Merged in pkg-config fixes.

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"
 
64
#include "drizzled/plugin/storage_engine.h"
66
65
 
67
66
#include <cstdio>
68
67
#include <map>
92
91
 
93
92
extern TYPELIB tx_isolation_typelib;
94
93
 
95
 
namespace
96
 
{
97
 
static size_t revno= DRIZZLE7_VC_REVNO;
98
 
static size_t release_id= DRIZZLE7_RELEASE_ID;
99
 
}
100
 
 
101
94
const char *bool_type_names[]= { "OFF", "ON", NULL };
102
95
TYPELIB bool_typelib=
103
96
{
225
218
 
226
219
static sys_var_session_storage_engine sys_storage_engine("storage_engine",
227
220
                                       &drizzle_system_variables::storage_engine);
 
221
static sys_var_const_str        sys_system_time_zone("system_time_zone",
 
222
                                             system_time_zone);
228
223
static sys_var_size_t_ptr       sys_table_def_size("table_definition_cache",
229
224
                                             &table_def_size);
230
225
static sys_var_uint64_t_ptr     sys_table_cache_size("table_open_cache",
313
308
sys_var_session_uint64_t sys_group_concat_max_len("group_concat_max_len",
314
309
                                                  &drizzle_system_variables::group_concat_max_len);
315
310
 
 
311
sys_var_session_time_zone sys_time_zone("time_zone");
 
312
 
316
313
/* 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);
 
314
static sys_var_const_str        sys_hostname("hostname", glob_hostname);
323
315
 
324
316
bool sys_var::check(Session *session, set_var *var)
325
317
{
867
859
      goto err;
868
860
    }
869
861
 
870
 
    uint64_t tmp_val= enum_names->find_type(res->ptr(), res->length(), true);
 
862
    uint64_t tmp_val= find_type(enum_names, res->ptr(), res->length(),1);
871
863
    if (tmp_val == 0)
872
864
    {
873
865
      value= res->c_ptr();
1169
1161
  return (unsigned char*) &session->sys_var_tmp.uint64_t_value;
1170
1162
}
1171
1163
 
 
1164
 
 
1165
bool sys_var_session_time_zone::update(Session *session, set_var *var)
 
1166
{
 
1167
  char buff[MAX_TIME_ZONE_NAME_LENGTH];
 
1168
  String str(buff, sizeof(buff), &my_charset_utf8_general_ci);
 
1169
  String *res= var->value->val_str(&str);
 
1170
 
 
1171
  Time_zone *tmp= my_tz_find(session, res);
 
1172
  if (tmp == NULL)
 
1173
  {
 
1174
    boost::throw_exception(invalid_option_value(var->var->getName()) << invalid_value(std::string(res ? res->c_ptr() : "NULL")));
 
1175
    return 1;
 
1176
  }
 
1177
  /* We are using Time_zone object found during check() phase. */
 
1178
  if (var->type == OPT_GLOBAL)
 
1179
  {
 
1180
    boost::mutex::scoped_lock scopedLock(session->catalog().systemVariableLock());
 
1181
    global_system_variables.time_zone= tmp;
 
1182
  }
 
1183
  else
 
1184
  {
 
1185
    session->variables.time_zone= tmp;
 
1186
  }
 
1187
 
 
1188
  return 0;
 
1189
}
 
1190
 
 
1191
 
 
1192
unsigned char *sys_var_session_time_zone::value_ptr(Session *session,
 
1193
                                                    sql_var_t type,
 
1194
                                                    const LEX_STRING *)
 
1195
{
 
1196
  /*
 
1197
    We can use ptr() instead of c_ptr() here because String contaning
 
1198
    time zone name is guaranteed to be zero ended.
 
1199
  */
 
1200
  if (type == OPT_GLOBAL)
 
1201
    return (unsigned char *)(global_system_variables.time_zone->get_name()->ptr());
 
1202
  else
 
1203
  {
 
1204
    /*
 
1205
      This is an ugly fix for replication: we don't replicate properly queries
 
1206
      invoking system variables' values to update tables; but
 
1207
      CONVERT_TZ(,,@@session.time_zone) is so popular that we make it
 
1208
      replicable (i.e. we tell the binlog code to store the session
 
1209
      timezone). If it's the global value which was used we can't replicate
 
1210
      (binlog code stores session value only).
 
1211
    */
 
1212
    return (unsigned char *)(session->variables.time_zone->get_name()->ptr());
 
1213
  }
 
1214
}
 
1215
 
 
1216
 
 
1217
void sys_var_session_time_zone::set_default(Session *session, sql_var_t type)
 
1218
{
 
1219
  boost::mutex::scoped_lock scopedLock(session->catalog().systemVariableLock());
 
1220
  if (type == OPT_GLOBAL)
 
1221
  {
 
1222
    if (default_tz_name)
 
1223
    {
 
1224
      String str(default_tz_name, &my_charset_utf8_general_ci);
 
1225
      /*
 
1226
        We are guaranteed to find this time zone since its existence
 
1227
        is checked during start-up.
 
1228
      */
 
1229
      global_system_variables.time_zone= my_tz_find(session, &str);
 
1230
    }
 
1231
    else
 
1232
      global_system_variables.time_zone= my_tz_SYSTEM;
 
1233
  }
 
1234
  else
 
1235
    session->variables.time_zone= global_system_variables.time_zone;
 
1236
}
 
1237
 
 
1238
 
 
1239
 
1172
1240
bool sys_var_session_lc_time_names::update(Session *session, set_var *var)
1173
1241
{
1174
1242
  MY_LOCALE *locale_match;
1498
1566
    add_sys_var_to_list(&sys_back_log, my_long_options);
1499
1567
    add_sys_var_to_list(&sys_basedir, my_long_options);
1500
1568
    add_sys_var_to_list(&sys_big_selects, my_long_options);
1501
 
    add_sys_var_to_list(&sys_branch, my_long_options);
1502
1569
    add_sys_var_to_list(&sys_buffer_results, my_long_options);
1503
1570
    add_sys_var_to_list(&sys_bulk_insert_buff_size, my_long_options);
1504
1571
    add_sys_var_to_list(&sys_collation_server, my_long_options);
1533
1600
    add_sys_var_to_list(&sys_range_alloc_block_size, my_long_options);
1534
1601
    add_sys_var_to_list(&sys_read_buff_size, my_long_options);
1535
1602
    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
1603
    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
1604
    add_sys_var_to_list(&sys_scheduler, my_long_options);
1541
1605
    add_sys_var_to_list(&sys_secure_file_priv, my_long_options);
1542
1606
    add_sys_var_to_list(&sys_select_limit, my_long_options);
1545
1609
    add_sys_var_to_list(&sys_sql_notes, my_long_options);
1546
1610
    add_sys_var_to_list(&sys_sql_warnings, my_long_options);
1547
1611
    add_sys_var_to_list(&sys_storage_engine, my_long_options);
 
1612
    add_sys_var_to_list(&sys_system_time_zone, my_long_options);
1548
1613
    add_sys_var_to_list(&sys_table_cache_size, my_long_options);
1549
1614
    add_sys_var_to_list(&sys_table_def_size, my_long_options);
1550
1615
    add_sys_var_to_list(&sys_table_lock_wait_timeout, my_long_options);
1551
1616
    add_sys_var_to_list(&sys_thread_stack_size, my_long_options);
 
1617
    add_sys_var_to_list(&sys_time_zone, my_long_options);
1552
1618
    add_sys_var_to_list(&sys_timed_mutexes, my_long_options);
1553
1619
    add_sys_var_to_list(&sys_timestamp, my_long_options);
1554
1620
    add_sys_var_to_list(&sys_tmp_table_size, my_long_options);