From: Martin Hansson Date: May 18 2011 12:15pm Subject: bzr commit into mysql-trunk branch (martin.hansson:3100) List-Archive: http://lists.mysql.com/commits/137534 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1553007005==" --===============1553007005== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///data0/martin/bzrroot/bug11746628/mysql-trunk-to-bar/ based on revid:tor.didriksen@stripped 3100 Martin Hansson 2011-05-18 Preliminary refactoring patch for set_time(). modified: sql/field.cc sql/item_timefunc.cc sql/item_timefunc.h === modified file 'sql/field.cc' --- a/sql/field.cc 2011-05-12 12:50:11 +0000 +++ b/sql/field.cc 2011-05-18 12:15:35 +0000 @@ -5032,10 +5032,7 @@ void Field_timestamp::sql_type(String &r void Field_timestamp::set_time() { - THD *thd= table ? table->in_use : current_thd; - long tmp= (long) thd->query_start(); - set_notnull(); - store_timestamp(tmp); + Item_func_now_local::store_in(this); } /**************************************************************************** === modified file 'sql/item_timefunc.cc' --- a/sql/item_timefunc.cc 2011-05-18 07:07:52 +0000 +++ b/sql/item_timefunc.cc 2011-05-18 12:15:35 +0000 @@ -1727,15 +1727,59 @@ void Item_func_now::fix_length_and_dec() /** + Stores the current time as defined by + Item_func_now_local::get_query_start_time() in the field. + + @see Item_func_now_local::get_query_start_time() + */ +void Item_func_now_local::store_in(Field *field) +{ + THD *thd= field->table != NULL ? field->table->in_use : current_thd; + /* + Optimization for the case when the field's storage format is the same as + THD::query_start(). + */ + if (field->type() == MYSQL_TYPE_TIMESTAMP) + { + long timestamp= (long) thd->query_start(); + field->set_notnull(); + static_cast(field)->store_timestamp(timestamp); + return; + } + MYSQL_TIME now_time; + get_query_start_time(&now_time); + field->set_notnull(); + const int error= field->store_time(&now_time, MYSQL_TIMESTAMP_DATETIME); + DBUG_ASSERT(error == 0); +} + + +/** + The start time of the current query in the session's current time zone. + + The current session is asked for the start time of the current query, the + time is then converted to the current time zone. + + @note It is unclear exactly what 'start time' is since there is no + documentation. + + @param[out] now_time Where the result is stored. + */ +void Item_func_now_local::get_query_start_time(MYSQL_TIME *now_time) +{ + THD *thd= current_thd; + my_time_t query_start= static_cast(thd->query_start()); + thd->variables.time_zone->gmt_sec_to_TIME(now_time, query_start); + thd->time_zone_used= true; +} + +/** Converts current time in my_time_t to MYSQL_TIME represenatation for local time zone. Defines time zone (local) used for whole NOW function. */ void Item_func_now_local::store_now_in_TIME(MYSQL_TIME *now_time) { - THD *thd= current_thd; - thd->variables.time_zone->gmt_sec_to_TIME(now_time, - (my_time_t)thd->query_start()); - thd->time_zone_used= 1; + get_query_start_time(now_time); } === modified file 'sql/item_timefunc.h' --- a/sql/item_timefunc.h 2011-03-30 07:42:03 +0000 +++ b/sql/item_timefunc.h 2011-05-18 12:15:35 +0000 @@ -627,6 +627,8 @@ public: class Item_func_now_local :public Item_func_now { public: + static void store_in(Field *field); + static void get_query_start_time(MYSQL_TIME *now_time); Item_func_now_local() :Item_func_now() {} Item_func_now_local(Item *a) :Item_func_now(a) {} const char *func_name() const { return "now"; } --===============1553007005== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/martin.hansson@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: martin.hansson@stripped\ # p11x0xvxwdbvizy1 # target_branch: file:///data0/martin/bzrroot/bug11746628/mysql-trunk-\ # to-bar/ # testament_sha1: 55879e7e6804573b7271a8526b88abc25194bd8a # timestamp: 2011-05-18 14:15:45 +0200 # base_revision_id: tor.didriksen@stripped\ # h2oxanu2lqthr64c # # Begin bundle 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 I02DU1EBENwN+Yu5IpwoSH/gQLKA --===============1553007005==--