Loading sql/sql_insert.cc +6 −3 Original line number Diff line number Diff line Loading @@ -80,7 +80,8 @@ static int check_insert_fields(THD *thd, TABLE *table, List<Item> &fields, check_grant_all_columns(thd,INSERT_ACL,table)) return -1; #endif *(int*)&table->timestamp_field_type&= ~ (int) TIMESTAMP_AUTO_SET_ON_INSERT; clear_timestamp_auto_bits(table->timestamp_field_type, TIMESTAMP_AUTO_SET_ON_INSERT); } else { // Part field list Loading Loading @@ -110,7 +111,8 @@ static int check_insert_fields(THD *thd, TABLE *table, List<Item> &fields, } if (table->timestamp_field && // Don't set timestamp if used table->timestamp_field->query_id == thd->query_id) *(int*)&table->timestamp_field_type&= ~ (int) TIMESTAMP_AUTO_SET_ON_INSERT; clear_timestamp_auto_bits(table->timestamp_field_type, TIMESTAMP_AUTO_SET_ON_INSERT); } // For the values we need select_priv #ifndef NO_EMBEDDED_ACCESS_CHECKS Loading Loading @@ -167,7 +169,8 @@ static int check_update_fields(THD *thd, TABLE *table, { /* Don't set timestamp column if this is modified. */ if (table->timestamp_field->query_id == thd->query_id) *(int*)&table->timestamp_field_type&= ~ (int) TIMESTAMP_AUTO_SET_ON_UPDATE; clear_timestamp_auto_bits(table->timestamp_field_type, TIMESTAMP_AUTO_SET_ON_UPDATE); else table->timestamp_field->query_id= timestamp_query_id; } Loading sql/table.h +10 −6 Original line number Diff line number Diff line Loading @@ -58,18 +58,22 @@ typedef struct st_filesort_info /* Values in this enum are used to indicate during which operations value of TIMESTAMP field should be set to current timestamp. WARNING: The values are used for bit operations. If you change the enum, you must keep the bitwise relation of the values. For example: (int) TIMESTAMP_AUTO_SET_ON_BOTH == Values in this enum are used to indicate how a tables TIMESTAMP field should be treated. It can be set to the current timestamp on insert or update or both. WARNING: The values are used for bit operations. If you change the enum, you must keep the bitwise relation of the values. For example: (int) TIMESTAMP_AUTO_SET_ON_BOTH must be equal to (int) TIMESTAMP_AUTO_SET_ON_INSERT | (int) TIMESTAMP_AUTO_SET_ON_UPDATE. We use an enum here so that the debugger can display the value names. */ enum timestamp_auto_set_type { TIMESTAMP_NO_AUTO_SET= 0, TIMESTAMP_AUTO_SET_ON_INSERT= 1, TIMESTAMP_AUTO_SET_ON_UPDATE= 2, TIMESTAMP_AUTO_SET_ON_BOTH= 3 }; #define clear_timestamp_auto_bits(_target_, _bits_) \ (_target_)= (enum timestamp_auto_set_type)((int)(_target_) & ~(int)(_bits_)) /* Table cache entry struct */ Loading Loading
sql/sql_insert.cc +6 −3 Original line number Diff line number Diff line Loading @@ -80,7 +80,8 @@ static int check_insert_fields(THD *thd, TABLE *table, List<Item> &fields, check_grant_all_columns(thd,INSERT_ACL,table)) return -1; #endif *(int*)&table->timestamp_field_type&= ~ (int) TIMESTAMP_AUTO_SET_ON_INSERT; clear_timestamp_auto_bits(table->timestamp_field_type, TIMESTAMP_AUTO_SET_ON_INSERT); } else { // Part field list Loading Loading @@ -110,7 +111,8 @@ static int check_insert_fields(THD *thd, TABLE *table, List<Item> &fields, } if (table->timestamp_field && // Don't set timestamp if used table->timestamp_field->query_id == thd->query_id) *(int*)&table->timestamp_field_type&= ~ (int) TIMESTAMP_AUTO_SET_ON_INSERT; clear_timestamp_auto_bits(table->timestamp_field_type, TIMESTAMP_AUTO_SET_ON_INSERT); } // For the values we need select_priv #ifndef NO_EMBEDDED_ACCESS_CHECKS Loading Loading @@ -167,7 +169,8 @@ static int check_update_fields(THD *thd, TABLE *table, { /* Don't set timestamp column if this is modified. */ if (table->timestamp_field->query_id == thd->query_id) *(int*)&table->timestamp_field_type&= ~ (int) TIMESTAMP_AUTO_SET_ON_UPDATE; clear_timestamp_auto_bits(table->timestamp_field_type, TIMESTAMP_AUTO_SET_ON_UPDATE); else table->timestamp_field->query_id= timestamp_query_id; } Loading
sql/table.h +10 −6 Original line number Diff line number Diff line Loading @@ -58,18 +58,22 @@ typedef struct st_filesort_info /* Values in this enum are used to indicate during which operations value of TIMESTAMP field should be set to current timestamp. WARNING: The values are used for bit operations. If you change the enum, you must keep the bitwise relation of the values. For example: (int) TIMESTAMP_AUTO_SET_ON_BOTH == Values in this enum are used to indicate how a tables TIMESTAMP field should be treated. It can be set to the current timestamp on insert or update or both. WARNING: The values are used for bit operations. If you change the enum, you must keep the bitwise relation of the values. For example: (int) TIMESTAMP_AUTO_SET_ON_BOTH must be equal to (int) TIMESTAMP_AUTO_SET_ON_INSERT | (int) TIMESTAMP_AUTO_SET_ON_UPDATE. We use an enum here so that the debugger can display the value names. */ enum timestamp_auto_set_type { TIMESTAMP_NO_AUTO_SET= 0, TIMESTAMP_AUTO_SET_ON_INSERT= 1, TIMESTAMP_AUTO_SET_ON_UPDATE= 2, TIMESTAMP_AUTO_SET_ON_BOTH= 3 }; #define clear_timestamp_auto_bits(_target_, _bits_) \ (_target_)= (enum timestamp_auto_set_type)((int)(_target_) & ~(int)(_bits_)) /* Table cache entry struct */ Loading