diff options
author | unknown <andrey@lmy004.> | 2006-02-28 14:43:49 +0100 |
---|---|---|
committer | unknown <andrey@lmy004.> | 2006-02-28 14:43:49 +0100 |
commit | b934539d77c1e76d6653a1d03ceaf7c97c9172c0 (patch) | |
tree | 22793abc9db537bef65db7747ef066225a3846c2 | |
parent | f6f5292145d44294bec7f42a78cc8be41b1f33df (diff) | |
download | mariadb-git-b934539d77c1e76d6653a1d03ceaf7c97c9172c0.tar.gz |
fix for bug#16537
(post-review pre-push changes)
coding style (mostly trailing spaces removed)
mysql-test/r/events.result:
fix result file
sql/event.cc:
- remove trailing spaces
- add a missing initializer (gcc warning)
- C++ to C comments
sql/event_executor.cc:
- fix coding style (C++ to C comments, remove trailing spaces)
- fix wrong indexing buggie not found till now (queue indexing is 0 based,
not 1 based)
sql/event_timed.cc:
- fix coding style
-rw-r--r-- | mysql-test/r/events.result | 8 | ||||
-rw-r--r-- | sql/event.cc | 198 | ||||
-rw-r--r-- | sql/event_executor.cc | 119 | ||||
-rw-r--r-- | sql/event_timed.cc | 38 |
4 files changed, 180 insertions, 183 deletions
diff --git a/mysql-test/r/events.result b/mysql-test/r/events.result index cba1685ef32..598454573cf 100644 --- a/mysql-test/r/events.result +++ b/mysql-test/r/events.result @@ -40,7 +40,7 @@ drop event event2; CREATE EVENT event_starts_test ON SCHEDULE EVERY 10 SECOND COMMENT "" DO SELECT 1; SHOW EVENTS; Db Name Definer Type Execute at Interval value Interval field Starts Ends Status -events_test event_starts_test root@localhost RECURRING NULL 10 INTERVAL_SECOND # # ENABLED +events_test event_starts_test root@localhost RECURRING NULL 10 SECOND # # ENABLED SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test'; starts IS NULL ends IS NULL comment 0 1 @@ -69,21 +69,21 @@ DROP EVENT event_starts_test; CREATE EVENT event_starts_test ON SCHEDULE EVERY 20 SECOND STARTS '2020-02-02 20:00:02' ENDS '2022-02-02 20:00:02' DO SELECT 2; SHOW EVENTS; Db Name Definer Type Execute at Interval value Interval field Starts Ends Status -events_test event_starts_test root@localhost RECURRING NULL 20 INTERVAL_SECOND # # ENABLED +events_test event_starts_test root@localhost RECURRING NULL 20 SECOND # # ENABLED SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test'; starts IS NULL ends IS NULL comment 0 0 ALTER EVENT event_starts_test COMMENT "non-empty comment"; SHOW EVENTS; Db Name Definer Type Execute at Interval value Interval field Starts Ends Status -events_test event_starts_test root@localhost RECURRING NULL 20 INTERVAL_SECOND # # ENABLED +events_test event_starts_test root@localhost RECURRING NULL 20 SECOND # # ENABLED SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test'; starts IS NULL ends IS NULL comment 0 0 non-empty comment ALTER EVENT event_starts_test COMMENT ""; SHOW EVENTS; Db Name Definer Type Execute at Interval value Interval field Starts Ends Status -events_test event_starts_test root@localhost RECURRING NULL 20 INTERVAL_SECOND # # ENABLED +events_test event_starts_test root@localhost RECURRING NULL 20 SECOND # # ENABLED DROP EVENT event_starts_test; create event e_43 on schedule every 1 second do set @a = 5; set global event_scheduler = 1; diff --git a/sql/event.cc b/sql/event.cc index 1774bee44f9..7ed3ec8f600 100644 --- a/sql/event.cc +++ b/sql/event.cc @@ -69,7 +69,7 @@ time_t mysql_event_last_create_time= 0L; static TABLE_FIELD_W_TYPE event_table_fields[EVEX_FIELD_COUNT] = { { - {(char *) STRING_WITH_LEN("db")}, + {(char *) STRING_WITH_LEN("db")}, {(char *) STRING_WITH_LEN("char(64)")}, {(char *) STRING_WITH_LEN("utf8")} }, @@ -120,6 +120,7 @@ static TABLE_FIELD_W_TYPE event_table_fields[EVEX_FIELD_COUNT] = { { {(char *) STRING_WITH_LEN("last_executed")}, {(char *) STRING_WITH_LEN("datetime")}, + {NULL, 0} }, { {(char *) STRING_WITH_LEN("starts")}, @@ -162,25 +163,25 @@ static TABLE_FIELD_W_TYPE event_table_fields[EVEX_FIELD_COUNT] = { LEX_STRING interval_type_to_name[] = { - {(char *) STRING_WITH_LEN("YEAR")}, - {(char *) STRING_WITH_LEN("QUARTER")}, - {(char *) STRING_WITH_LEN("MONTH")}, - {(char *) STRING_WITH_LEN("DAY")}, - {(char *) STRING_WITH_LEN("HOUR")}, - {(char *) STRING_WITH_LEN("MINUTE")}, - {(char *) STRING_WITH_LEN("WEEK")}, - {(char *) STRING_WITH_LEN("SECOND")}, - {(char *) STRING_WITH_LEN("MICROSECOND")}, - {(char *) STRING_WITH_LEN("YEAR_MONTH")}, - {(char *) STRING_WITH_LEN("DAY_HOUR")}, - {(char *) STRING_WITH_LEN("DAY_MINUTE")}, - {(char *) STRING_WITH_LEN("DAY_SECOND")}, - {(char *) STRING_WITH_LEN("HOUR_MINUTE")}, - {(char *) STRING_WITH_LEN("HOUR_SECOND")}, - {(char *) STRING_WITH_LEN("MINUTE_SECOND")}, - {(char *) STRING_WITH_LEN("DAY_MICROSECOND")}, - {(char *) STRING_WITH_LEN("HOUR_MICROSECOND")}, - {(char *) STRING_WITH_LEN("MINUTE_MICROSECOND")}, + {(char *) STRING_WITH_LEN("YEAR")}, + {(char *) STRING_WITH_LEN("QUARTER")}, + {(char *) STRING_WITH_LEN("MONTH")}, + {(char *) STRING_WITH_LEN("DAY")}, + {(char *) STRING_WITH_LEN("HOUR")}, + {(char *) STRING_WITH_LEN("MINUTE")}, + {(char *) STRING_WITH_LEN("WEEK")}, + {(char *) STRING_WITH_LEN("SECOND")}, + {(char *) STRING_WITH_LEN("MICROSECOND")}, + {(char *) STRING_WITH_LEN("YEAR_MONTH")}, + {(char *) STRING_WITH_LEN("DAY_HOUR")}, + {(char *) STRING_WITH_LEN("DAY_MINUTE")}, + {(char *) STRING_WITH_LEN("DAY_SECOND")}, + {(char *) STRING_WITH_LEN("HOUR_MINUTE")}, + {(char *) STRING_WITH_LEN("HOUR_SECOND")}, + {(char *) STRING_WITH_LEN("MINUTE_SECOND")}, + {(char *) STRING_WITH_LEN("DAY_MICROSECOND")}, + {(char *) STRING_WITH_LEN("HOUR_MICROSECOND")}, + {(char *) STRING_WITH_LEN("MINUTE_MICROSECOND")}, {(char *) STRING_WITH_LEN("SECOND_MICROSECOND")} }; @@ -188,10 +189,10 @@ LEX_STRING interval_type_to_name[] = { /* Inits the scheduler queue - prioritized queue from mysys/queue.c - + Synopsis evex_queue_init() - + queue - pointer the the memory to be initialized as queue. has to be allocated from the caller @@ -211,10 +212,10 @@ evex_queue_init(EVEX_QUEUE_TYPE *queue) /* Compares 2 LEX strings regarding case. - + Synopsis my_time_compare() - + s - first LEX_STRING t - second LEX_STRING cs - charset @@ -223,7 +224,7 @@ evex_queue_init(EVEX_QUEUE_TYPE *queue) -1 - s < t 0 - s == t 1 - s > t - + Notes TIME.second_part is not considered during comparison */ @@ -237,18 +238,18 @@ int sortcmp_lex_string(LEX_STRING s, LEX_STRING t, CHARSET_INFO *cs) /* Compares 2 TIME structures - + Synopsis my_time_compare() - + a - first TIME b - second time - + RETURNS: -1 - a < b 0 - a == b 1 - a > b - + Notes TIME.second_part is not considered during comparison */ @@ -276,18 +277,18 @@ my_time_compare(TIME *a, TIME *b) /* Compares the execute_at members of 2 event_timed instances - + Synopsis event_timed_compare() - + a - first event_timed object b - second event_timed object - + RETURNS: -1 - a->execute_at < b->execute_at 0 - a->execute_at == b->execute_at 1 - a->execute_at > b->execute_at - + Notes execute_at.second_part is not considered during comparison */ @@ -303,14 +304,14 @@ event_timed_compare(event_timed *a, event_timed *b) Compares the execute_at members of 2 event_timed instances. Used as callback for the prioritized queue when shifting elements inside. - + Synopsis event_timed_compare() vptr - not used (set it to NULL) a - first event_timed object b - second event_timed object - + RETURNS: -1 - a->execute_at < b->execute_at 0 - a->execute_at == b->execute_at @@ -333,18 +334,16 @@ event_timed_compare_q(void *vptr, byte* a, byte *b) For YEAR_MONTH - expression is in months DAY_MINUTE - expression is in minutes - + Synopsis event_reconstruct_interval_expression() buf - preallocated String buffer to add the value to interval - the interval type (for instance YEAR_MONTH) expression - the value in the lowest entity - + RETURNS 0 - OK 1 - Error - - */ int @@ -369,7 +368,7 @@ event_reconstruct_interval_expression(String *buf, goto common_1_lev_code; case INTERVAL_HOUR_MINUTE: case INTERVAL_MINUTE_SECOND: - multipl= 60; + multipl= 60; common_1_lev_code: buf->append('\''); end= longlong10_to_str(expression/multipl, tmp_buff, 10); @@ -473,9 +472,9 @@ common_1_lev_code: table The table pointer RETURN - 1 Cannot lock table + 1 Cannot lock table 2 The table is corrupted - different number of fields - 0 OK + 0 OK */ int @@ -590,11 +589,11 @@ evex_db_find_event_by_name(THD *thd, const LEX_STRING dbname, thd THD table the row to fill out et Event's data - + Returns 0 - ok EVEX_GENERAL_ERROR - bad data - EVEX_GET_FIELD_FAILED - field count does not match. table corrupted? + EVEX_GET_FIELD_FAILED - field count does not match. table corrupted? DESCRIPTION Used both when an event is created and when it is altered. @@ -607,9 +606,9 @@ evex_fill_row(THD *thd, TABLE *table, event_timed *et, my_bool is_update) DBUG_ENTER("evex_fill_row"); - DBUG_PRINT("info", ("dbname=[%s]", et->dbname.str)); - DBUG_PRINT("info", ("name =[%s]", et->name.str)); - DBUG_PRINT("info", ("body =[%s]", et->body.str)); + DBUG_PRINT("info", ("dbname=[%s]", et->dbname.str)); + DBUG_PRINT("info", ("name =[%s]", et->name.str)); + DBUG_PRINT("info", ("body =[%s]", et->body.str)); if (table->field[field_num= EVEX_FIELD_DB]-> store(et->dbname.str, et->dbname.length, system_charset_info)) @@ -619,7 +618,7 @@ evex_fill_row(THD *thd, TABLE *table, event_timed *et, my_bool is_update) store(et->name.str, et->name.length, system_charset_info)) goto trunc_err; - // both ON_COMPLETION and STATUS are NOT NULL thus not calling set_notnull() + /* both ON_COMPLETION and STATUS are NOT NULL thus not calling set_notnull() */ table->field[EVEX_FIELD_ON_COMPLETION]->store((longlong)et->on_completion); table->field[EVEX_FIELD_STATUS]->store((longlong)et->status); @@ -653,7 +652,7 @@ evex_fill_row(THD *thd, TABLE *table, event_timed *et, my_bool is_update) if (!et->starts_null) { - table->field[EVEX_FIELD_STARTS]->set_notnull();// set NULL flag to OFF + table->field[EVEX_FIELD_STARTS]->set_notnull(); table->field[EVEX_FIELD_STARTS]-> store_time(&et->starts, MYSQL_TIMESTAMP_DATETIME); } @@ -674,13 +673,15 @@ evex_fill_row(THD *thd, TABLE *table, event_timed *et, my_bool is_update) table->field[EVEX_FIELD_EXECUTE_AT]->set_notnull(); table->field[EVEX_FIELD_EXECUTE_AT]->store_time(&et->execute_at, - MYSQL_TIMESTAMP_DATETIME); + MYSQL_TIMESTAMP_DATETIME); } else { DBUG_ASSERT(is_update); - // it is normal to be here when the action is update - // this is an error if the action is create. something is borked + /* + it is normal to be here when the action is update + this is an error if the action is create. something is borked + */ } ((Field_timestamp *)table->field[EVEX_FIELD_MODIFIED])->set_time(); @@ -709,12 +710,12 @@ trunc_err: et event_timed object containing information for the event create_if_not - if an warning should be generated in case event exists rows_affected - how many rows were affected - + Return value 0 - OK EVEX_GENERAL_ERROR - Failure DESCRIPTION - Creates an event. Relies on evex_fill_row which is shared with + Creates an event. Relies on evex_fill_row which is shared with db_update_event. The name of the event is inside "et". */ @@ -737,16 +738,16 @@ db_create_event(THD *thd, event_timed *et, my_bool create_if_not, my_error(ER_EVENT_OPEN_TABLE_FAILED, MYF(0)); goto err; } - + DBUG_PRINT("info", ("check existance of an event with the same name")); if (!evex_db_find_event_aux(thd, et, table)) { if (create_if_not) { push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE, - ER_EVENT_ALREADY_EXISTS, ER(ER_EVENT_ALREADY_EXISTS), - et->name.str); - goto ok; + ER_EVENT_ALREADY_EXISTS, ER(ER_EVENT_ALREADY_EXISTS), + et->name.str); + goto ok; } my_error(ER_EVENT_ALREADY_EXISTS, MYF(0), et->name.str); goto err; @@ -758,8 +759,8 @@ db_create_event(THD *thd, event_timed *et, my_bool create_if_not, my_error(ER_BAD_DB_ERROR, MYF(0)); goto err; } - - restore_record(table, s->default_values); // Get default values for fields + + restore_record(table, s->default_values); // Get default values for fields if (system_charset_info->cset->numchars(system_charset_info, et->dbname.str, et->dbname.str + et->dbname.length) @@ -785,7 +786,7 @@ db_create_event(THD *thd, event_timed *et, my_bool create_if_not, if (!(et->expression) && !(et->execute_at.year)) { DBUG_PRINT("error", ("neither expression nor execute_at are set!")); - my_error(ER_EVENT_NEITHER_M_EXPR_NOR_M_AT, MYF(0)); + my_error(ER_EVENT_NEITHER_M_EXPR_NOR_M_AT, MYF(0)); goto err; } @@ -799,7 +800,10 @@ db_create_event(THD *thd, event_timed *et, my_bool create_if_not, ((Field_timestamp *)table->field[EVEX_FIELD_CREATED])->set_time(); - // evex_fill_row() calls my_error() in case of error so no need to handle it here + /* + evex_fill_row() calls my_error() in case of error so no need to + handle it here + */ if ((ret= evex_fill_row(thd, table, et, false))) goto err; @@ -809,16 +813,16 @@ db_create_event(THD *thd, event_timed *et, my_bool create_if_not, goto err; } -#ifdef USE_THIS_CODE_AS_TEMPLATE_WHEN_EVENT_REPLICATION_IS_AGREED +#ifdef USE_THIS_CODE_AS_TEMPLATE_WHEN_EVENT_REPLICATION_IS_AGREED if (mysql_bin_log.is_open()) { thd->clear_error(); - // Such a statement can always go directly to binlog, no trans cache + /* Such a statement can always go directly to binlog, no trans cache */ thd->binlog_query(THD::MYSQL_QUERY_TYPE, thd->query, thd->query_length, FALSE, FALSE); } #endif - + *rows_affected= 1; ok: if (dbchanged) @@ -844,7 +848,7 @@ err: thd THD sp_name the name of the event to alter et event's data - + NOTES sp_name is passed since this is the name of the event to alter in case of RENAME TO. @@ -869,7 +873,7 @@ db_update_event(THD *thd, event_timed *et, sp_name *new_name) goto err; } - // first look whether we overwrite + /* first look whether we overwrite */ if (new_name) { if (!sortcmp_lex_string(et->name, new_name->m_name, system_charset_info) && @@ -895,19 +899,18 @@ db_update_event(THD *thd, event_timed *et, sp_name *new_name) if (EVEX_KEY_NOT_FOUND == evex_db_find_event_aux(thd, et, table)) { my_error(ER_EVENT_DOES_NOT_EXIST, MYF(0), et->name.str); - goto err; + goto err; } - store_record(table,record[1]); - - // Don't update create on row update. + + /* Don't update create on row update. */ table->timestamp_field_type= TIMESTAMP_NO_AUTO_SET; - // evex_fill_row() calls my_error() in case of error so no need to handle it here + /* evex_fill_row() calls my_error() in case of error so no need to handle it here */ if ((ret= evex_fill_row(thd, table, et, true))) goto err; - + if (new_name) { table->field[EVEX_FIELD_DB]-> @@ -922,7 +925,7 @@ db_update_event(THD *thd, event_timed *et, sp_name *new_name) goto err; } - // close mysql.event or we crash later when loading the event from disk + /* close mysql.event or we crash later when loading the event from disk */ close_thread_tables(thd); DBUG_RETURN(0); @@ -944,7 +947,7 @@ err: definer who owns the event ett event's data if event is found tbl TABLE object to use when not NULL - + NOTES 1) Use sp_name for look up, return in **ett if found 2) tbl is not closed at exit @@ -999,7 +1002,7 @@ done: delete et; et= 0; } - // don't close the table if we haven't opened it ourselves + /* don't close the table if we haven't opened it ourselves */ if (!tbl && table) close_thread_tables(thd); *ett= et; @@ -1017,11 +1020,10 @@ done: spn the name of the event to alter definer who is the owner use_lock whether to obtain a lock on LOCK_event_arrays or not - + RETURN VALUE 0 - OK < 0 - error (in this case underlying functions call my_error()). - */ static int @@ -1040,7 +1042,7 @@ evex_load_and_compile_event(THD * thd, sp_name *spn, LEX_STRING definer, thd->mem_root= &evex_mem_root; thd->reset_n_backup_open_tables_state(&backup); - // no need to use my_error() here because db_find_event() has done it + /* no need to use my_error() here because db_find_event() has done it */ ret= db_find_event(thd, spn, &definer, &ett, NULL, NULL); thd->restore_backup_open_tables_state(&backup); if (ret) @@ -1092,7 +1094,7 @@ done: ALTER EVENT. RETURNS - 0 - OK (always) + 0 OK (always) */ static int @@ -1115,7 +1117,7 @@ evex_remove_from_cache(LEX_STRING *db, LEX_STRING *name, bool use_lock, for (i= 0; i < evex_queue_num_elements(EVEX_EQ_NAME); ++i) { event_timed *et= evex_queue_element(&EVEX_EQ_NAME, i, event_timed*); - DBUG_PRINT("info", ("[%s.%s]==[%s.%s]?",db->str,name->str, et->dbname.str, + DBUG_PRINT("info", ("[%s.%s]==[%s.%s]?",db->str,name->str, et->dbname.str, et->name.str)); if (!sortcmp_lex_string(*name, et->name, system_charset_info) && !sortcmp_lex_string(*db, et->dbname, system_charset_info)) @@ -1135,7 +1137,7 @@ evex_remove_from_cache(LEX_STRING *db, LEX_STRING *name, bool use_lock, } DBUG_PRINT("evex_remove_from_cache", ("delete from queue")); evex_queue_delete_element(&EVEX_EQ_NAME, i); - // ok, we have cleaned + /* ok, we have cleaned */ ret= 0; goto done; } @@ -1159,7 +1161,7 @@ done: create_options Options specified when in the query. We are interested whether there is IF NOT EXISTS rows_affected How many rows were affected - + NOTES - in case there is an event with the same name (db) and IF NOT EXISTS is specified, an warning is put into the W stack. @@ -1189,7 +1191,7 @@ evex_create_event(THD *thd, event_timed *et, uint create_options, VOID(pthread_mutex_unlock(&LOCK_evex_running)); done: - // No need to close the table, it will be closed in sql_parse::do_command + /* No need to close the table, it will be closed in sql_parse::do_command */ DBUG_RETURN(ret); } @@ -1203,7 +1205,7 @@ done: thd THD et event's data new_name set in case of RENAME TO. - + NOTES et contains data about dbname and event name. new_name is the new name of the event, if not null (this means @@ -1263,7 +1265,6 @@ done: et event's name drop_if_exists if set and the event not existing => warning onto the stack rows_affected affected number of rows is returned heres - */ int db_drop_event(THD *thd, event_timed *et, bool drop_if_exists, @@ -1296,8 +1297,8 @@ int db_drop_event(THD *thd, event_timed *et, bool drop_if_exists, if (drop_if_exists) { push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE, - ER_SP_DOES_NOT_EXIST, ER(ER_SP_DOES_NOT_EXIST), - "Event", et->name.str); + ER_SP_DOES_NOT_EXIST, ER(ER_SP_DOES_NOT_EXIST), + "Event", et->name.str); ret= 0; } else my_error(ER_EVENT_DOES_NOT_EXIST, MYF(0), et->name.str); @@ -1342,7 +1343,7 @@ evex_drop_event(THD *thd, event_timed *et, bool drop_if_exists, if (evex_is_running) ret= evex_remove_from_cache(&et->dbname, &et->name, true, true); VOID(pthread_mutex_unlock(&LOCK_evex_running)); - + if (ret == 1) ret= 0; else if (ret == 0) @@ -1362,11 +1363,10 @@ evex_drop_event(THD *thd, event_timed *et, bool drop_if_exists, thd THD spn the name of the event (db, name) definer the definer of the event - + RETURNS 0 - OK 1 - Error during writing to the wire - */ int @@ -1384,14 +1384,14 @@ evex_show_create_event(THD *thd, sp_name *spn, LEX_STRING definer) thd->restore_backup_open_tables_state(&backup); if (!ret && et) - { + { Protocol *protocol= thd->protocol; char show_str_buf[768]; String show_str(show_str_buf, sizeof(show_str_buf), system_charset_info); List<Item> field_list; byte *sql_mode_str; ulong sql_mode_len=0; - + show_str.length(0); show_str.set_charset(system_charset_info); @@ -1417,19 +1417,18 @@ evex_show_create_event(THD *thd, sp_name *spn, LEX_STRING definer) protocol->store((char*) sql_mode_str, sql_mode_len, system_charset_info); - protocol->store(show_str.c_ptr(), show_str.length(), system_charset_info); ret= protocol->write(); send_eof(thd); } - + DBUG_RETURN(ret); } /* evex_drop_db_events - Drops all events in the selected database - + thd - Thread db - ASCIIZ the name of the database @@ -1453,7 +1452,6 @@ evex_show_create_event(THD *thd, sp_name *spn, LEX_STRING definer) spawned and can_spawn() is the right method. - event_timed::can_spawn() returns false -> being runned ATM just set the flags so it should drop itself. - */ int @@ -1509,7 +1507,7 @@ evex_drop_db_events(THD *thd, char *db) else if (ret == EVEX_KEY_NOT_FOUND) { sql_print_error("Expected to find event %s.%s of %s on disk-not there.", - et->dbname.str, et->name.str, et->definer.str); + et->dbname.str, et->name.str, et->definer.str); } et->free_sp(); delete et; @@ -1525,7 +1523,7 @@ evex_drop_db_events(THD *thd, char *db) } DBUG_PRINT("info",("%d elements in the queue", evex_queue_num_elements(EVEX_EQ_NAME))); - evex_queue_delete_element(&EVEX_EQ_NAME, i);// 1 is top + evex_queue_delete_element(&EVEX_EQ_NAME, i);// 0 is top DBUG_PRINT("info",("%d elements in the queue", evex_queue_num_elements(EVEX_EQ_NAME))); /* @@ -1602,7 +1600,7 @@ end: VOID(pthread_mutex_unlock(&LOCK_event_arrays)); end_read_record(&read_record_info); - thd->version--; // Force close to free memory + thd->version--; /* Force close to free memory */ close_thread_tables(thd); diff --git a/sql/event_executor.cc b/sql/event_executor.cc index 0718fe7d680..a446f3f8509 100644 --- a/sql/event_executor.cc +++ b/sql/event_executor.cc @@ -38,9 +38,9 @@ extern ulong thread_created; extern const char *my_localhost; extern pthread_attr_t connection_attrib; -pthread_mutex_t LOCK_event_arrays, // mutex for when working with the queue - LOCK_workers_count, // mutex for when inc/dec uint workers_count - LOCK_evex_running; // mutes for managing bool evex_is_running +pthread_mutex_t LOCK_event_arrays, // mutex for when working with the queue + LOCK_workers_count, // mutex for when inc/dec uint workers_count + LOCK_evex_running; // mutes for managing bool evex_is_running bool evex_is_running= false; @@ -135,7 +135,7 @@ evex_check_system_tables() bool not_used; Open_tables_state backup; - // thd is 0x0 during boot of the server. Later it's !=0x0 + /* thd is 0x0 during boot of the server. Later it's !=0x0 */ if (!thd) return; @@ -151,7 +151,7 @@ evex_check_system_tables() else { table_check_intact(tables.table, MYSQL_DB_FIELD_COUNT, mysql_db_table_fields, - &mysql_db_table_last_check,ER_CANNOT_LOAD_FROM_TABLE); + &mysql_db_table_last_check,ER_CANNOT_LOAD_FROM_TABLE); close_thread_tables(thd); } @@ -182,7 +182,7 @@ evex_check_system_tables() SYNOPSIS init_events() - + NOTES Inits the mutexes used by the scheduler. Done at server start. */ @@ -194,7 +194,7 @@ init_events() DBUG_ENTER("init_events"); DBUG_PRINT("info",("Starting events main thread")); - + evex_check_system_tables(); evex_init_mutexes(); @@ -206,7 +206,7 @@ init_events() if (event_executor_running_global_var) { #ifndef DBUG_FAULTY_THR - //TODO Andrey: Change the error code returned! + /* TODO Andrey: Change the error code returned! */ if (pthread_create(&th, &connection_attrib, event_executor_main,(void*)NULL)) DBUG_RETURN(ER_SLAVE_THREAD); #else @@ -223,7 +223,7 @@ init_events() SYNOPSIS shutdown_events() - + NOTES Destroys the mutexes. */ @@ -232,10 +232,10 @@ void shutdown_events() { DBUG_ENTER("shutdown_events"); - + if (evex_mutexes_initted) { - evex_mutexes_initted= FALSE; + evex_mutexes_initted= FALSE; VOID(pthread_mutex_lock(&LOCK_evex_running)); VOID(pthread_mutex_unlock(&LOCK_evex_running)); @@ -253,11 +253,11 @@ shutdown_events() SYNOPSIS init_event_thread() thd - the THD of the thread. Has to be allocated by the caller. - + NOTES 1. The host of the thead is my_localhost 2. thd->net is initted with NULL - no communication. - + Returns 0 - OK -1 - Error @@ -304,7 +304,7 @@ init_event_thread(THD* thd) /* This function waits till the time next event in the queue should be executed. - + Returns WAIT_STATUS_READY There is an event to be executed right now WAIT_STATUS_EMPTY_QUEUE No events or the last event was dropped. @@ -339,14 +339,14 @@ executor_wait_till_next_event_exec(THD *thd) if (et->dropped) et->drop(thd); delete et; - evex_queue_delete_element(&EVEX_EQ_NAME, 1);// 1 is top + evex_queue_delete_element(&EVEX_EQ_NAME, 0);// 0 is top, internally 1 VOID(pthread_mutex_unlock(&LOCK_event_arrays)); sql_print_information("Event found disabled, dropping."); DBUG_RETURN(1); } - + DBUG_PRINT("evex main thread",("computing time to sleep till next exec")); - // set the internal clock of thd + /* set the internal clock of thd */ thd->end_time(); my_tz_UTC->gmt_sec_to_TIME(&time_now, thd->query_start()); t2sleep= evex_time_diff(&et->execute_at, &time_now); @@ -387,8 +387,8 @@ executor_wait_till_next_event_exec(THD *thd) SYNOPSIS event_executor_main() - arg - unused - + arg unused + NOTES 1. The host of the thead is my_localhost 2. thd->net is initted with NULL - no communication. @@ -404,14 +404,13 @@ event_executor_main(void *arg) TIME time_now; DBUG_ENTER("event_executor_main"); - DBUG_PRINT("event_executor_main", ("EVEX thread started")); + DBUG_PRINT("event_executor_main", ("EVEX thread started")); - // init memory root + /* init memory root */ init_alloc_root(&evex_mem_root, MEM_ROOT_BLOCK_SIZE, MEM_ROOT_PREALLOC); - - // needs to call my_thread_init(), otherwise we get a coredump in DBUG_ stuff + /* needs to call my_thread_init(), otherwise we get a coredump in DBUG_ stuff*/ my_thread_init(); if (sizeof(my_time_t) != sizeof(time_t)) @@ -422,14 +421,14 @@ event_executor_main(void *arg) goto err_no_thd; } - //TODO Andrey: Check for NULL - if (!(thd = new THD)) // note that contructor of THD uses DBUG_ ! + /* note that contructor of THD uses DBUG_ ! */ + if (!(thd = new THD)) { sql_print_error("SCHEDULER: Cannot create THD for the main thread."); goto err_no_thd; } - thd->thread_stack = (char*)&thd; // remember where our stack is - + thd->thread_stack = (char*)&thd; // remember where our stack is + pthread_detach_this_thread(); if (init_event_thread(thd)) @@ -472,7 +471,7 @@ event_executor_main(void *arg) { TIME time_now; event_timed *et; - + cnt++; DBUG_PRINT("info", ("EVEX External Loop %d thd->k", cnt)); @@ -488,7 +487,7 @@ event_executor_main(void *arg) my_sleep(1000000);// sleep 1s continue; } - + restart_ticking: switch (executor_wait_till_next_event_exec(thd)) { case WAIT_STATUS_READY: // time to execute the event on top @@ -498,7 +497,7 @@ restart_ticking: DBUG_PRINT("evex main thread",("no more events")); continue; break; - case WAIT_STATUS_NEW_TOP_EVENT: // new event on top in the queue + case WAIT_STATUS_NEW_TOP_EVENT: // new event on top in the queue DBUG_PRINT("evex main thread",("restart ticking")); goto restart_ticking; case WAIT_STATUS_STOP_EXECUTOR: @@ -584,10 +583,10 @@ restart_ticking: } DBUG_PRINT("evex main thread",("unlocking")); VOID(pthread_mutex_unlock(&LOCK_event_arrays)); - }// while + }/* while */ finish: - // First manifest that this thread does not work and then destroy + /* First manifest that this thread does not work and then destroy */ VOID(pthread_mutex_lock(&LOCK_evex_running)); evex_is_running= false; evex_main_thread_id= 0; @@ -611,7 +610,7 @@ finish: break; } VOID(pthread_mutex_unlock(&LOCK_workers_count)); - my_sleep(1000000);// 1s + my_sleep(1000000);// 1s } /* @@ -627,9 +626,9 @@ finish: delete et; } VOID(pthread_mutex_unlock(&LOCK_event_arrays)); - // ... then we can thrash the whole queue at once + /* ... then we can thrash the whole queue at once */ evex_queue_destroy(&EVEX_EQ_NAME); - + thd->proc_info = "Clearing"; DBUG_ASSERT(thd->net.buff != 0); net_end(&thd->net); // destructor will not free it, because we are weird @@ -657,7 +656,7 @@ err_no_thd: my_thread_end(); pthread_exit(0); #endif - DBUG_RETURN(0);// Can't return anything here + DBUG_RETURN(0); // Can't return anything here } @@ -667,7 +666,7 @@ err_no_thd: SYNOPSIS event_executor_worker() - arg - the event_timed object to be processed + arg The event_timed object to be processed */ pthread_handler_t @@ -684,12 +683,12 @@ event_executor_worker(void *event_void) #ifndef DBUG_FAULTY_THR my_thread_init(); - if (!(thd = new THD)) // note that contructor of THD uses DBUG_ ! + if (!(thd = new THD)) /* note that contructor of THD uses DBUG_ ! */ { sql_print_error("SCHEDULER: Cannot create a THD structure in an worker."); goto err_no_thd; } - thd->thread_stack = (char*)&thd; // remember where our stack is + thd->thread_stack = (char*)&thd; // remember where our stack is thd->mem_root= &worker_mem_root; pthread_detach_this_thread(); @@ -699,7 +698,7 @@ event_executor_worker(void *event_void) thd->init_for_queries(); - // make this thread visible it has no vio -> show processlist needs this flag + /* make this thread visible it has no vio -> show processlist needs this flag */ thd->system_thread= 1; VOID(pthread_mutex_lock(&LOCK_thread_count)); @@ -749,7 +748,7 @@ err: DBUG_ASSERT(thd->net.buff != 0); net_end(&thd->net); // destructor will not free it, because we are weird THD_CHECK_SENTRY(thd); - + VOID(pthread_mutex_lock(&LOCK_thread_count)); THD_CHECK_SENTRY(thd); delete thd; @@ -780,9 +779,9 @@ err_no_thd: thd - Thread context. Used for memory allocation in some cases. RETURNS - 0 - OK - !0 - Error - + 0 OK + !0 Error + NOTES Reports the error to the console */ @@ -795,7 +794,7 @@ evex_load_events_from_db(THD *thd) MYSQL_LOCK *lock; int ret= -1; uint count= 0; - + DBUG_ENTER("evex_load_events_from_db"); if ((ret= evex_open_event_table(thd, TL_READ, &table))) @@ -830,7 +829,7 @@ evex_load_events_from_db(THD *thd) delete et; continue; } - + DBUG_PRINT("evex_load_events_from_db", ("Event %s loaded from row. Time to compile", et->name.str)); @@ -846,8 +845,8 @@ evex_load_events_from_db(THD *thd) default: break; } - - // let's find when to be executed + + /* let's find when to be executed */ if (et->compute_next_execution_time()) { sql_print_error("SCHEDULER: Error while computing execution time of %s.%s." @@ -868,8 +867,9 @@ evex_load_events_from_db(THD *thd) end: VOID(pthread_mutex_unlock(&LOCK_event_arrays)); end_read_record(&read_record_info); - - thd->version--; // Force close to free memory + + /* Force close to free memory */ + thd->version--; close_thread_tables(thd); if (!ret) @@ -889,15 +889,15 @@ end: event_executor_worker() thd - Thread context (unused) car - the new value - + Returns - 0 - OK (always) + 0 OK (always) */ bool sys_var_event_executor::update(THD *thd, set_var *var) { - // here start the thread if not running. + /* here start the thread if not running. */ DBUG_ENTER("sys_var_event_executor::update"); VOID(pthread_mutex_lock(&LOCK_evex_running)); *value= var->save_result.ulong_value; @@ -929,12 +929,12 @@ static sql_print_xxx_func sql_print_xxx_handlers[3] = Prints the stack of infos, warnings, errors from thd to the console so it can be fetched by the logs-into-tables and checked later. - + Synopsis evex_print_warnings thd - thread used during the execution of the event et - the event itself - + Returns 0 - OK (always) @@ -942,19 +942,20 @@ static sql_print_xxx_func sql_print_xxx_handlers[3] = bool evex_print_warnings(THD *thd, event_timed *et) -{ +{ MYSQL_ERROR *err; DBUG_ENTER("evex_show_warnings"); char msg_buf[1024]; char prefix_buf[512]; String prefix(prefix_buf, sizeof(prefix_buf), system_charset_info); prefix.length(0); - + List_iterator_fast<MYSQL_ERROR> it(thd->warn_list); while ((err= it++)) { String err_msg(msg_buf, sizeof(msg_buf), system_charset_info); - err_msg.length(0);// set it to 0 or we start adding at the end + /* set it to 0 or we start adding at the end. That's the trick ;) */ + err_msg.length(0); if (!prefix.length()) { prefix.append("SCHEDULER: ["); @@ -968,7 +969,7 @@ evex_print_warnings(THD *thd, event_timed *et) append_identifier(thd,&prefix, et->name.str, et->name.length); prefix.append("] ", 2); } - + err_msg.append(prefix); err_msg.append(err->msg, strlen(err->msg), system_charset_info); err_msg.append("]"); diff --git a/sql/event_timed.cc b/sql/event_timed.cc index f54ca5deeaf..88bc629d110 100644 --- a/sql/event_timed.cc +++ b/sql/event_timed.cc @@ -116,7 +116,7 @@ event_timed::init_body(THD *thd) body_begin, thd->lex->ptr)); body.length= thd->lex->ptr - body_begin; - // Trim nuls at the end + /* Trim nuls at the end */ while (body.length && body_begin[body.length-1] == '\0') body.length--; @@ -161,13 +161,12 @@ event_timed::init_execute_at(THD *thd, Item *expr) /* no starts and/or ends in case of execute_at */ DBUG_PRINT("info", ("starts_null && ends_null should be 1 is %d", - (starts_null && ends_null))) + (starts_null && ends_null))); DBUG_ASSERT(starts_null && ends_null); - // let's check whether time is in the past + /* let's check whether time is in the past */ thd->variables.time_zone->gmt_sec_to_TIME(&time_tmp, - (my_time_t) thd->query_start()); - + (my_time_t) thd->query_start()); if ((not_used= expr->get_date(<ime, TIME_NO_ZERO_DATE))) DBUG_RETURN(ER_WRONG_VALUE); @@ -252,14 +251,14 @@ event_timed::init_interval(THD *thd, Item *expr, interval_type new_interval) case INTERVAL_DAY_MINUTE: expression= (interval.day* 24 + interval.hour) * 60 + interval.minute; break; - case INTERVAL_HOUR_SECOND: // day is anyway 0 + case INTERVAL_HOUR_SECOND: /* day is anyway 0 */ case INTERVAL_DAY_SECOND: /* DAY_SECOND having problems because of leap seconds? */ expression= ((interval.day* 24 + interval.hour) * 60 + interval.minute)*60 + interval.second; break; - case INTERVAL_MINUTE_MICROSECOND: // day and hour are 0 - case INTERVAL_HOUR_MICROSECOND:// day is anyway 0 + case INTERVAL_MINUTE_MICROSECOND: /* day and hour are 0 */ + case INTERVAL_HOUR_MICROSECOND: /* day is anyway 0 */ case INTERVAL_DAY_MICROSECOND: DBUG_RETURN(EVEX_MICROSECOND_UNSUP); expression= ((((interval.day*24) + interval.hour)*60+interval.minute)*60 + @@ -398,7 +397,7 @@ event_timed::init_ends(THD *thd, Item *new_ends) Check whether ENDS is not in the past. */ DBUG_PRINT("info", ("ENDS after NOW?")); - my_tz_UTC->gmt_sec_to_TIME(<ime_now, thd->query_start()); + my_tz_UTC->gmt_sec_to_TIME(<ime_now, thd->query_start()); if (my_time_compare(<ime_now, <ime) == 1) DBUG_RETURN(EVEX_BAD_PARAMS); @@ -534,8 +533,8 @@ event_timed::load_from_row(MEM_ROOT *mem_root, TABLE *table) et->definer_user.str= strmake_root(mem_root, et->definer.str, len); et->definer_user.length= len; - len= et->definer.length - len - 1; //1 is because of @ - et->definer_host.str= strmake_root(mem_root, ptr + 1, len);//1: because of @ + len= et->definer.length - len - 1; //1 is because of @ + et->definer_host.str= strmake_root(mem_root, ptr + 1, len);/* 1:because of @*/ et->definer_host.length= len; et->starts_null= table->field[EVEX_FIELD_STARTS]->is_null(); @@ -597,20 +596,20 @@ event_timed::load_from_row(MEM_ROOT *mem_root, TABLE *table) #endif last_executed_changed= false; - // ToDo : Andrey . Find a way not to allocate ptr on event_mem_root + /* ToDo : Andrey . Find a way not to allocate ptr on event_mem_root */ if ((ptr= get_field(mem_root, table->field[EVEX_FIELD_STATUS])) == NullS) goto error; DBUG_PRINT("load_from_row", ("Event [%s] is [%s]", et->name.str, ptr)); et->status= (ptr[0]=='E'? MYSQL_EVENT_ENABLED:MYSQL_EVENT_DISABLED); - // ToDo : Andrey . Find a way not to allocate ptr on event_mem_root + /* ToDo : Andrey . Find a way not to allocate ptr on event_mem_root */ if ((ptr= get_field(mem_root, table->field[EVEX_FIELD_ON_COMPLETION])) == NullS) goto error; et->on_completion= (ptr[0]=='D'? MYSQL_EVENT_ON_COMPLETION_DROP: - MYSQL_EVENT_ON_COMPLETION_PRESERVE); + MYSQL_EVENT_ON_COMPLETION_PRESERVE); et->comment.str= get_field(mem_root, table->field[EVEX_FIELD_COMMENT]); if (et->comment.str != NullS) @@ -796,7 +795,7 @@ event_timed::compute_next_execution_time() goto ret; } } - + if (!starts_null && !ends_null) { /* @@ -931,7 +930,7 @@ event_timed::mark_last_executed(THD *thd) thd->end_time(); my_tz_UTC->gmt_sec_to_TIME(&time_now, (my_time_t) thd->query_start()); - last_executed= time_now; // was execute_at + last_executed= time_now; /* was execute_at */ #ifdef ANDREY_0 last_executed= execute_at; #endif @@ -1086,7 +1085,7 @@ event_timed::get_create_event(THD *thd, String *buf) } else { - char dtime_buff[20*2+32];// +32 to make my_snprintf_{8bit|ucs2} happy + char dtime_buff[20*2+32];/* +32 to make my_snprintf_{8bit|ucs2} happy */ buf->append(STRING_WITH_LEN("AT '")); /* Pass the buffer and the second param tells fills the buffer and @@ -1427,7 +1426,7 @@ extern pthread_attr_t connection_attrib; /* Checks whether is possible and forks a thread. Passes self as argument. - + Returns EVENT_EXEC_STARTED - OK EVENT_EXEC_ALREADY_EXEC - Thread not forked, already working @@ -1498,7 +1497,6 @@ event_timed::spawn_thread_finish(THD *thd) Returns 0 - ok 1 - not locked by this thread - */ @@ -1524,5 +1522,5 @@ event_timed::spawn_unlock(THD *thd) } } VOID(pthread_mutex_unlock(&this->LOCK_running)); - return ret; + return ret; } |