summaryrefslogtreecommitdiff
path: root/sql/set_var.cc
diff options
context:
space:
mode:
authorunknown <jani@hynda.mysql.fi>2007-09-27 17:05:07 +0300
committerunknown <jani@hynda.mysql.fi>2007-09-27 17:05:07 +0300
commitf4afcec393e9c75531220c1fe1f5d387891549fa (patch)
treef199672f3b02bf9f3109ee96272febb917f2e036 /sql/set_var.cc
parent9a640f848e465f2bebd27072fa651a230e9632f9 (diff)
parent8b5dddbc006afe8f6dae8408cea7481c17dade72 (diff)
downloadmariadb-git-f4afcec393e9c75531220c1fe1f5d387891549fa.tar.gz
Merge hynda.mysql.fi:/home/my/mysql-5.1-main
into hynda.mysql.fi:/home/my/mysql-maria BitKeeper/etc/ignore: auto-union BUILD/SETUP.sh: Auto merged BitKeeper/deleted/.del-CMakeLists.txt~99a50df6: Auto merged Makefile.am: Auto merged client/mysqldump.c: Auto merged configure.in: Auto merged include/Makefile.am: Auto merged include/keycache.h: Auto merged include/m_string.h: Auto merged include/my_sys.h: Auto merged libmysqld/Makefile.am: Auto merged mysql-test/extra/rpl_tests/rpl_insert_delayed.test: Auto merged mysql-test/lib/mtr_cases.pl: Auto merged mysql-test/lib/mtr_misc.pl: Auto merged mysql-test/lib/mtr_process.pl: Auto merged mysql-test/lib/mtr_report.pl: Auto merged mysql-test/lib/mtr_timer.pl: Auto merged mysql-test/mysql-test-run.pl: Auto merged mysql-test/r/alter_table.result: Auto merged mysql-test/r/merge.result: Auto merged mysql-test/r/mysqldump.result: Auto merged mysql-test/r/query_cache.result: Auto merged mysql-test/r/subselect.result: Auto merged mysql-test/r/view.result: Auto merged mysql-test/suite/ndb/r/ps_7ndb.result: Auto merged mysql-test/suite/rpl/r/rpl_events.result: Auto merged mysql-test/suite/rpl/r/rpl_insert.result: Auto merged mysql-test/suite/rpl/r/rpl_row_insert_delayed.result: Auto merged mysql-test/suite/rpl/r/rpl_stm_flsh_tbls.result: Auto merged mysql-test/suite/rpl/r/rpl_stm_insert_delayed.result: Auto merged mysql-test/suite/rpl/r/rpl_switch_stm_row_mixed.result: Auto merged mysql-test/suite/rpl/t/rpl_insert.test: Auto merged mysql-test/suite/rpl/t/rpl_stm_flsh_tbls.test: Auto merged mysql-test/suite/rpl/t/rpl_switch_stm_row_mixed.test: Auto merged mysql-test/t/alter_table.test: Auto merged mysql-test/t/myisam.test: Auto merged mysql-test/t/mysqldump.test: Auto merged mysql-test/t/query_cache.test: Auto merged mysql-test/t/subselect.test: Auto merged mysql-test/t/view.test: Auto merged mysys/array.c: Auto merged mysys/mf_keycache.c: Auto merged mysys/my_init.c: Auto merged mysys/my_symlink2.c: Auto merged mysys/safemalloc.c: Auto merged mysys/thr_lock.c: Auto merged sql/Makefile.am: Auto merged sql/filesort.cc: Auto merged sql/ha_ndbcluster.cc: Auto merged sql/ha_partition.cc: Auto merged sql/ha_partition.h: Auto merged sql/handler.h: Auto merged sql/item_func.cc: Auto merged sql/item_func.h: Auto merged sql/item_xmlfunc.cc: Auto merged sql/lock.cc: Auto merged sql/log.cc: Auto merged sql/mysql_priv.h: Auto merged sql/mysqld.cc: Auto merged sql/net_serv.cc: Auto merged sql/opt_range.cc: Auto merged sql/set_var.cc: Auto merged sql/slave.cc: Auto merged sql/slave.h: Auto merged sql/sql_class.cc: Auto merged sql/sql_delete.cc: Auto merged sql/sql_insert.cc: Auto merged sql/sql_parse.cc: Auto merged sql/sql_select.cc: Auto merged sql/sql_table.cc: Auto merged sql/share/errmsg.txt: Auto merged sql/sql_test.cc: Auto merged sql/table.h: Auto merged sql/udf_example.c: Auto merged sql/uniques.cc: Auto merged sql/unireg.cc: Auto merged storage/csv/ha_tina.h: Auto merged storage/myisam/ft_boolean_search.c: Auto merged storage/myisam/ft_nlq_search.c: Auto merged storage/myisam/ft_parser.c: Auto merged storage/myisam/ft_stopwords.c: Auto merged storage/myisam/ha_myisam.cc: Auto merged storage/myisam/ha_myisam.h: Auto merged storage/myisam/mi_check.c: Auto merged storage/myisam/mi_create.c: Auto merged storage/myisam/mi_delete.c: Auto merged storage/myisam/mi_dynrec.c: Auto merged storage/myisam/mi_extra.c: Auto merged storage/myisam/mi_key.c: Auto merged storage/myisam/mi_locking.c: Auto merged storage/myisam/mi_log.c: Auto merged storage/myisam/mi_packrec.c: Auto merged storage/myisam/mi_rkey.c: Auto merged storage/myisam/mi_search.c: Auto merged storage/myisam/mi_test1.c: Auto merged storage/myisam/mi_test2.c: Auto merged storage/myisam/mi_update.c: Auto merged storage/myisam/mi_write.c: Auto merged storage/myisam/myisamchk.c: Auto merged storage/myisam/myisamlog.c: Auto merged storage/myisam/myisampack.c: Auto merged storage/myisam/sort.c: Auto merged storage/myisam/sp_test.c: Auto merged storage/myisammrg/ha_myisammrg.cc: Auto merged storage/myisammrg/ha_myisammrg.h: Auto merged storage/ndb/src/mgmapi/mgmapi.cpp: Auto merged support-files/compiler_warnings.supp: Auto merged client/mysqltest.c: Manual merge between mysql-5.1 and mysql-maria include/my_base.h: Manual merge between mysql-5.1 and mysql-maria include/my_global.h: Manual merge between mysql-5.1 and mysql-maria include/myisam.h: Manual merge between mysql-5.1 and mysql-maria libmysql/Makefile.shared: Manual merge between mysql-5.1 and mysql-maria mysql-test/r/events_logs_tests.result: Manual merge between mysql-5.1 and mysql-maria mysql-test/suite/rpl/r/rpl_row_flsh_tbls.result: Manual merge between mysql-5.1 and mysql-maria mysql-test/suite/rpl/t/rpl_row_flsh_tbls.test: Manual merge between mysql-5.1 and mysql-maria mysql-test/t/disabled.def: Manual merge between mysql-5.1 and mysql-maria mysql-test/t/events_logs_tests.test: Manual merge between mysql-5.1 and mysql-maria mysys/my_compress.c: Manual merge between mysql-5.1 and mysql-maria mysys/my_getsystime.c: Manual merge between mysql-5.1 and mysql-maria mysys/my_open.c: Manual merge between mysql-5.1 and mysql-maria sql/handler.cc: Manual merge between mysql-5.1 and mysql-maria sql/set_var.h: Manual merge between mysql-5.1 and mysql-maria sql/sql_class.h: Manual merge between mysql-5.1 and mysql-maria sql/sql_show.cc: Manual merge between mysql-5.1 and mysql-maria sql/sql_sort.h: Manual merge between mysql-5.1 and mysql-maria sql/sql_yacc.yy: Manual merge between mysql-5.1 and mysql-maria sql/table.cc: Manual merge between mysql-5.1 and mysql-maria storage/csv/ha_tina.cc: Manual merge between mysql-5.1 and mysql-maria storage/myisam/mi_open.c: Manual merge between mysql-5.1 and mysql-maria storage/myisam/myisamdef.h: Manual merge between mysql-5.1 and mysql-maria unittest/mysys/my_atomic-t.c: Manual merge between mysql-5.1 and mysql-maria
Diffstat (limited to 'sql/set_var.cc')
-rw-r--r--sql/set_var.cc192
1 files changed, 190 insertions, 2 deletions
diff --git a/sql/set_var.cc b/sql/set_var.cc
index 697de9cda97..29cb66f16a6 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -54,6 +54,9 @@
#include <thr_alarm.h>
#include <myisam.h>
#include <my_dir.h>
+#ifdef WITH_MARIA_STORAGE_ENGINE
+#include <maria.h>
+#endif
#include "events.h"
@@ -113,6 +116,7 @@ static void fix_max_join_size(THD *thd, enum_var_type type);
static void fix_query_cache_size(THD *thd, enum_var_type type);
static void fix_query_cache_min_res_unit(THD *thd, enum_var_type type);
static void fix_myisam_max_sort_file_size(THD *thd, enum_var_type type);
+static void fix_maria_max_sort_file_size(THD *thd, enum_var_type type);
static void fix_max_binlog_size(THD *thd, enum_var_type type);
static void fix_max_relay_log_size(THD *thd, enum_var_type type);
static void fix_max_connections(THD *thd, enum_var_type type);
@@ -121,6 +125,9 @@ static void fix_thd_mem_root(THD *thd, enum_var_type type);
static void fix_trans_mem_root(THD *thd, enum_var_type type);
static void fix_server_id(THD *thd, enum_var_type type);
static KEY_CACHE *create_key_cache(const char *name, uint length);
+#ifdef WITH_MARIA_STORAGE_ENGINE
+static PAGECACHE *create_pagecache(const char *name, uint length);
+#endif /* WITH_MARIA_STORAGE_ENGINE */
void fix_sql_mode_var(THD *thd, enum_var_type type);
static uchar *get_error_count(THD *thd);
static uchar *get_warning_count(THD *thd);
@@ -238,6 +245,14 @@ static sys_var_key_cache_long sys_key_cache_division_limit(&vars, "key_cache_div
static sys_var_key_cache_long sys_key_cache_age_threshold(&vars, "key_cache_age_threshold",
offsetof(KEY_CACHE,
param_age_threshold));
+#ifdef WITH_MARIA_STORAGE_ENGINE
+sys_var_pagecache_long sys_pagecache_division_limit("pagecache_division_limit",
+ offsetof(PAGECACHE,
+ param_division_limit));
+sys_var_pagecache_long sys_pagecache_age_threshold("pagecache_age_threshold",
+ offsetof(KEY_CACHE,
+ param_age_threshold));
+#endif /* WITH_MARIA_STORAGE_ENGINE */
static sys_var_bool_ptr sys_local_infile(&vars, "local_infile",
&opt_local_infile);
static sys_var_trust_routine_creators
@@ -332,6 +347,14 @@ static sys_var_thd_enum sys_myisam_stats_method(&vars, "myisam_stats_met
&myisam_stats_method_typelib,
NULL);
+static sys_var_thd_ulonglong sys_maria_max_sort_file_size(&vars, "maria_max_sort_file_size", &SV::maria_max_sort_file_size, fix_maria_max_sort_file_size, 1);
+static sys_var_thd_ulong sys_maria_repair_threads(&vars, "maria_repair_threads", &SV::maria_repair_threads);
+static sys_var_thd_ulong sys_maria_sort_buffer_size(&vars, "maria_sort_buffer_size", &SV::maria_sort_buff_size);
+static sys_var_thd_enum sys_maria_stats_method(&vars, "maria_stats_method",
+ &SV::maria_stats_method,
+ &myisam_stats_method_typelib,
+ NULL);
+
static sys_var_thd_ulong sys_net_buffer_length(&vars, "net_buffer_length",
&SV::net_buffer_length);
static sys_var_thd_ulong sys_net_read_timeout(&vars, "net_read_timeout",
@@ -628,6 +651,7 @@ static sys_var_have_plugin sys_have_csv(&vars, "have_csv", C_STRING_WITH_LEN("cs
static sys_var_have_variable sys_have_dlopen(&vars, "have_dynamic_loading", &have_dlopen);
static sys_var_have_variable sys_have_geometry(&vars, "have_geometry", &have_geometry);
static sys_var_have_plugin sys_have_innodb(&vars, "have_innodb", C_STRING_WITH_LEN("innodb"), MYSQL_STORAGE_ENGINE_PLUGIN);
+static sys_var_have_variable sys_have_maria_db(&vars, "have_maria", &have_maria_db);
static sys_var_have_plugin sys_have_ndbcluster(&vars, "have_ndbcluster", C_STRING_WITH_LEN("ndbcluster"), MYSQL_STORAGE_ENGINE_PLUGIN);
static sys_var_have_variable sys_have_openssl(&vars, "have_openssl", &have_ssl);
static sys_var_have_variable sys_have_ssl(&vars, "have_ssl", &have_ssl);
@@ -706,7 +730,7 @@ static SHOW_VAR fixed_vars[]= {
#ifdef HAVE_THR_SETCONCURRENCY
{"thread_concurrency", (char*) &concurrency, SHOW_LONG},
#endif
- {"thread_stack", (char*) &thread_stack, SHOW_LONG},
+ {"thread_stack", (char*) &my_thread_stack_size, SHOW_LONG},
};
@@ -843,6 +867,16 @@ fix_myisam_max_sort_file_size(THD *thd, enum_var_type type)
(my_off_t) global_system_variables.myisam_max_sort_file_size;
}
+static void
+fix_maria_max_sort_file_size(THD *thd, enum_var_type type)
+{
+#ifdef WITH_MARIA_STORAGE_ENGINE
+ maria_max_temp_length=
+ (my_off_t) global_system_variables.myisam_max_sort_file_size;
+#endif
+}
+
+
/*
Set the OPTION_BIG_SELECTS flag if max_join_size == HA_POS_ERROR
*/
@@ -1906,15 +1940,30 @@ LEX_STRING default_key_cache_base= {(char *) "default", 7 };
static KEY_CACHE zero_key_cache;
+#ifdef WITH_MARIA_STORAGE_ENGINE
+LEX_STRING maria_pagecache_base= {(char *) "default", 7 };
+static PAGECACHE zero_pagecache;
+#endif /* WITH_MARIA_STORAGE_ENGINE */
+
KEY_CACHE *get_key_cache(LEX_STRING *cache_name)
{
safe_mutex_assert_owner(&LOCK_global_system_variables);
if (!cache_name || ! cache_name->length)
cache_name= &default_key_cache_base;
return ((KEY_CACHE*) find_named(&key_caches,
- cache_name->str, cache_name->length, 0));
+ cache_name->str, cache_name->length, 0));
}
+#ifdef WITH_MARIA_STORAGE_ENGINE
+PAGECACHE *get_pagecache(LEX_STRING *cache_name)
+{
+ safe_mutex_assert_owner(&LOCK_global_system_variables);
+ if (!cache_name || ! cache_name->length)
+ cache_name= &default_key_cache_base;
+ return ((PAGECACHE*) find_named(&pagecaches,
+ cache_name->str, cache_name->length, 0));
+}
+#endif /* WITH_MARIA_STORAGE_ENGINE */
uchar *sys_var_key_cache_param::value_ptr(THD *thd, enum_var_type type,
LEX_STRING *base)
@@ -1926,6 +1975,18 @@ uchar *sys_var_key_cache_param::value_ptr(THD *thd, enum_var_type type,
}
+#ifdef WITH_MARIA_STORAGE_ENGINE
+uchar *sys_var_pagecache_param::value_ptr(THD *thd, enum_var_type type,
+ LEX_STRING *base)
+{
+ PAGECACHE *pagecache= get_pagecache(base);
+ if (!pagecache)
+ pagecache= &zero_pagecache;
+ return (uchar*) pagecache + offset ;
+}
+#endif /* WITH_MARIA_STORAGE_ENGINE */
+
+
bool sys_var_key_buffer_size::update(THD *thd, set_var *var)
{
ulonglong tmp= var->save_result.ulonglong_value;
@@ -2062,6 +2123,60 @@ end:
}
+#ifdef WITH_MARIA_STORAGE_ENGINE
+bool sys_var_pagecache_long::update(THD *thd, set_var *var)
+{
+ ulong tmp= (ulong) var->value->val_int();
+ LEX_STRING *base_name= &var->base;
+ bool error= 0;
+
+ if (!base_name->length)
+ base_name= &maria_pagecache_base;
+
+ pthread_mutex_lock(&LOCK_global_system_variables);
+ PAGECACHE *pagecache= get_pagecache(base_name);
+
+ if (!pagecache && !(pagecache= create_pagecache(base_name->str,
+ base_name->length)))
+ {
+ error= 1;
+ goto end;
+ }
+
+ /*
+ Abort if some other thread is changing the key cache
+ TODO: This should be changed so that we wait until the previous
+ assignment is done and then do the new assign
+ */
+ if (pagecache->in_init)
+ goto end;
+
+ *((ulong*) (((char*) pagecache) + offset))=
+ (ulong) getopt_ull_limit_value(tmp, option_limits);
+
+ /*
+ Don't create a new key cache if it didn't exist
+ (pagecaches are created only when the user sets block_size)
+ */
+ pagecache->in_init= 1;
+
+ pthread_mutex_unlock(&LOCK_global_system_variables);
+
+ /*
+ TODO: uncomment whan it will be implemented
+ error= (bool) (ha_resize_pagecache(pagecache));
+ */
+
+ pthread_mutex_lock(&LOCK_global_system_variables);
+ pagecache->in_init= 0;
+
+end:
+ pthread_mutex_unlock(&LOCK_global_system_variables);
+ return error;
+}
+#endif /* WITH_MARIA_STORAGE_ENGINE */
+
+
bool sys_var_log_state::update(THD *thd, set_var *var)
{
bool res;
@@ -3600,12 +3715,85 @@ bool process_key_caches(process_key_cache_t func)
}
+#ifdef WITH_MARIA_STORAGE_ENGINE
+
+static PAGECACHE *create_pagecache(const char *name, uint length)
+{
+ PAGECACHE *pagecache;
+ DBUG_ENTER("create_pagecache");
+ DBUG_PRINT("enter",("name: %.*s", length, name));
+
+ if ((pagecache= (PAGECACHE*) my_malloc(sizeof(PAGECACHE),
+ MYF(MY_ZEROFILL | MY_WME))))
+ {
+ if (!new NAMED_LIST(&pagecaches, name, length, (uchar*) pagecache))
+ {
+ my_free((char*) pagecache, MYF(0));
+ pagecache= 0;
+ }
+ else
+ {
+ /*
+ Set default values for a key cache
+ The values in maria_pagecache_var is set by my_getopt() at startup
+ We don't set 'buff_size' as this is used to enable the key cache
+ */
+ pagecache->param_buff_size= (maria_pagecache_var.param_buff_size ?
+ maria_pagecache_var.param_buff_size:
+ KEY_CACHE_SIZE);
+ pagecache->param_division_limit= maria_pagecache_var.param_division_limit;
+ pagecache->param_age_threshold= maria_pagecache_var.param_age_threshold;
+ }
+ }
+ DBUG_RETURN(pagecache);
+}
+
+
+PAGECACHE *get_or_create_pagecache(const char *name, uint length)
+{
+ LEX_STRING pagecache_name;
+ PAGECACHE *pagecache;
+
+ pagecache_name.str= (char *) name;
+ pagecache_name.length= length;
+ pthread_mutex_lock(&LOCK_global_system_variables);
+ if (!(pagecache= get_pagecache(&pagecache_name)))
+ pagecache= create_pagecache(name, length);
+ pthread_mutex_unlock(&LOCK_global_system_variables);
+ return pagecache;
+}
+
+
+void free_pagecache(const char *name, PAGECACHE *pagecache)
+{
+ ha_end_pagecache(pagecache);
+ my_free((char*) pagecache, MYF(0));
+}
+
+
+bool process_pagecaches(int (* func) (const char *name, PAGECACHE *))
+{
+ I_List_iterator<NAMED_LIST> it(pagecaches);
+ NAMED_LIST *element;
+
+ while ((element= it++))
+ {
+ PAGECACHE *pagecache= (PAGECACHE *) element->data;
+ func(element->name, pagecache);
+ }
+ return 0;
+}
+
+#endif /* WITH_MARIA_STORAGE_ENGINE */
+
+
void sys_var_trust_routine_creators::warn_deprecated(THD *thd)
{
WARN_DEPRECATED(thd, "5.2", "log_bin_trust_routine_creators",
"'log_bin_trust_function_creators'");
}
+
void sys_var_trust_routine_creators::set_default(THD *thd, enum_var_type type)
{
warn_deprecated(thd);