summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <gluh@gluh.mysql.r18.ru>2003-06-19 14:02:19 +0500
committerunknown <gluh@gluh.mysql.r18.ru>2003-06-19 14:02:19 +0500
commitc77b461566b287a0ee93ae0fc0eb690adbc7ab04 (patch)
treee791f002cd3e313d2564441aa8afebf1b8b6ce0d
parent346f424d501d850688fa708976c1d567bd6367a0 (diff)
downloadmariadb-git-c77b461566b287a0ee93ae0fc0eb690adbc7ab04.tar.gz
SCRUM
Task ID 894: Backport default_week_format variable to 4.0 mysql-test/r/func_time.result: Backport default_week_format variable to 4.0 mysql-test/t/func_time.test: Backport default_week_format variable to 4.0 sql/mysqld.cc: Backport default_week_format variable to 4.0 sql/set_var.cc: Backport default_week_format variable to 4.0 sql/sql_class.h: Backport default_week_format variable to 4.0 sql/sql_yacc.yy: Backport default_week_format variable to 4.0
-rw-r--r--mysql-test/r/func_time.result5
-rw-r--r--mysql-test/t/func_time.test4
-rw-r--r--sql/mysqld.cc8
-rw-r--r--sql/set_var.cc4
-rw-r--r--sql/sql_class.h1
-rw-r--r--sql/sql_yacc.yy6
6 files changed, 26 insertions, 2 deletions
diff --git a/mysql-test/r/func_time.result b/mysql-test/r/func_time.result
index 06c0be86667..58a05a2336f 100644
--- a/mysql-test/r/func_time.result
+++ b/mysql-test/r/func_time.result
@@ -96,6 +96,11 @@ week(19981231,2) week(19981231,3) week(20000101,2) week(20000101,3)
select week(20001231,2),week(20001231,3);
week(20001231,2) week(20001231,3)
1 52
+set default_week_format = 2;
+select week(20001231),week(20001231,2),week(20001231,0);
+week(20001231) week(20001231,2) week(20001231,0)
+1 1 53
+set default_week_format = 0;
select date_format('1998-12-31','%x-%v'),date_format('1999-01-01','%x-%v');
date_format('1998-12-31','%x-%v') date_format('1999-01-01','%x-%v')
1998-53 1998-53
diff --git a/mysql-test/t/func_time.test b/mysql-test/t/func_time.test
index 3057729ab96..a51869e7d76 100644
--- a/mysql-test/t/func_time.test
+++ b/mysql-test/t/func_time.test
@@ -39,6 +39,10 @@ select yearweek("2000-01-06",1) as '2000', yearweek("2001-01-06",1) as '2001', y
select week(19981231,2), week(19981231,3), week(20000101,2), week(20000101,3);
select week(20001231,2),week(20001231,3);
+set default_week_format = 2;
+select week(20001231),week(20001231,2),week(20001231,0);
+set default_week_format = 0;
+
select date_format('1998-12-31','%x-%v'),date_format('1999-01-01','%x-%v');
select date_format('1999-12-31','%x-%v'),date_format('2000-01-01','%x-%v');
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 0f3500248c0..2e6e226b18e 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -3179,7 +3179,8 @@ enum options {
OPT_BDB_CACHE_SIZE,
OPT_BDB_LOG_BUFFER_SIZE,
OPT_BDB_MAX_LOCK,
- OPT_ERROR_LOG_FILE
+ OPT_ERROR_LOG_FILE,
+ OPT_DEFAULT_WEEK_FORMAT
};
@@ -3988,6 +3989,11 @@ replicating a LOAD DATA INFILE command",
(gptr*) &global_system_variables.net_wait_timeout,
(gptr*) &max_system_variables.net_wait_timeout, 0, GET_ULONG,
REQUIRED_ARG, NET_WAIT_TIMEOUT, 1, LONG_TIMEOUT, 0, 1, 0},
+ { "default-week-format", OPT_DEFAULT_WEEK_FORMAT,
+ "The default week format used by WEEK() functions.",
+ (gptr*) &global_system_variables.default_week_format,
+ (gptr*) &max_system_variables.default_week_format,
+ 0, GET_ULONG, REQUIRED_ARG, 0, 0, 3L, 0, 1, 0},
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
};
diff --git a/sql/set_var.cc b/sql/set_var.cc
index 1da187598c4..32603ec51d9 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -296,6 +296,8 @@ static sys_var_slave_skip_counter sys_slave_skip_counter("sql_slave_skip_counter
static sys_var_rand_seed1 sys_rand_seed1("rand_seed1");
static sys_var_rand_seed2 sys_rand_seed2("rand_seed2");
+static sys_var_thd_ulong sys_default_week_format("default_week_format",
+ &SV::default_week_format);
/*
List of all variables for initialisation and storage in hash
@@ -316,6 +318,7 @@ sys_var *sys_variables[]=
&sys_bulk_insert_buff_size,
&sys_concurrent_insert,
&sys_connect_timeout,
+ &sys_default_week_format,
&sys_convert_charset,
&sys_delay_key_write,
&sys_delayed_insert_limit,
@@ -421,6 +424,7 @@ struct show_var_st init_vars[]= {
{sys_connect_timeout.name, (char*) &sys_connect_timeout, SHOW_SYS},
{sys_convert_charset.name, (char*) &sys_convert_charset, SHOW_SYS},
{"datadir", mysql_real_data_home, SHOW_CHAR},
+ {"default_week_format", (char*) &sys_default_week_format, SHOW_SYS},
{sys_delay_key_write.name, (char*) &sys_delay_key_write, SHOW_SYS},
{sys_delayed_insert_limit.name, (char*) &sys_delayed_insert_limit,SHOW_SYS},
{sys_delayed_insert_timeout.name, (char*) &sys_delayed_insert_timeout, SHOW_SYS},
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 9857774fb84..a8a24451ecc 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -309,6 +309,7 @@ struct system_variables
ulong tmp_table_size;
ulong tx_isolation;
ulong table_type;
+ ulong default_week_format;
my_bool log_warnings;
my_bool low_priority_updates;
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 4a41ad32dcc..0ff09a52a9e 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -2002,7 +2002,11 @@ simple_expr:
| USER '(' ')'
{ $$= new Item_func_user(); current_thd->safe_to_cache_query=0; }
| WEEK_SYM '(' expr ')'
- { $$= new Item_func_week($3,new Item_int((char*) "0",0,1)); }
+ {
+ LEX *lex=Lex;
+ $$= new Item_func_week($3,new Item_int((char*) "0",
+ lex->thd->variables.default_week_format,1));
+ }
| WEEK_SYM '(' expr ',' expr ')'
{ $$= new Item_func_week($3,$5); }
| YEAR_SYM '(' expr ')'