diff options
author | unknown <tim@cane.mysql.fi> | 2000-12-15 13:18:52 +0200 |
---|---|---|
committer | unknown <tim@cane.mysql.fi> | 2000-12-15 13:18:52 +0200 |
commit | e9f0fabfc967275b5c117d90865bf1c9c754fa49 (patch) | |
tree | 60af6194bb76d20a5cf1cc6232b95621041e1e9e /sql/ha_berkeley.cc | |
parent | 4a063ba73bc659f29810b1e5961bd4ce819daa7d (diff) | |
download | mariadb-git-e9f0fabfc967275b5c117d90865bf1c9c754fa49.tar.gz |
Add SHOW LOGS command.
sql/ha_berkeley.cc:
- add berkeley_show_logs()
sql/ha_berkeley.h:
- add berkeley_show_logs()
sql/mysql_priv.h:
- add show_logs()
sql/sql_lex.h:
- add show_logs()
sql/sql_parse.cc:
- add show_logs()
sql/sql_show.cc:
- add show_logs()
sql/sql_yacc.yy:
- add show_logs()
Docs/manual.texi:
- add show_logs()
BitKeeper/etc/logging_ok:
Logging to logging@openlogging.org accepted
Diffstat (limited to 'sql/ha_berkeley.cc')
-rw-r--r-- | sql/ha_berkeley.cc | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/sql/ha_berkeley.cc b/sql/ha_berkeley.cc index 0436b16fddc..ac0c7aa0113 100644 --- a/sql/ha_berkeley.cc +++ b/sql/ha_berkeley.cc @@ -93,6 +93,7 @@ u_int32_t berkeley_lock_types[]= { DB_LOCK_DEFAULT, DB_LOCK_OLDEST, DB_LOCK_RANDOM }; TYPELIB berkeley_lock_typelib= {array_elements(berkeley_lock_names),"", berkeley_lock_names}; +static MEM_ROOT show_logs_root; static void berkeley_print_error(const char *db_errpfx, char *buffer); static byte* bdb_get_key(BDB_SHARE *share,uint *length, @@ -210,6 +211,46 @@ int berkeley_rollback(THD *thd, void *trans) DBUG_RETURN(error); } +static void *show_logs_alloc(size_t size) +{ + return alloc_root(&show_logs_root, size); +} + +int berkeley_show_logs(THD *thd) +{ + char **all_logs, **free_logs; + String *packet= &thd->packet; + int error; + DBUG_ENTER("berkeley_show_logs"); + + init_alloc_root(&show_logs_root, 1024, 1024); + if ((error= log_archive(db_env, &all_logs, DB_ARCH_ABS|DB_ARCH_LOG, show_logs_alloc)) || + (error= log_archive(db_env, &free_logs, DB_ARCH_ABS, show_logs_alloc))) + { + DBUG_PRINT("error", ("log_archive failed (error %d)", error)); + db_env->err(db_env, error, "log_archive: DB_ARCH_ABS"); + DBUG_RETURN(1); + } + + for (char **a = all_logs, **f = free_logs; *a; ++a) + { + packet->length(0); + net_store_data(packet,*a); + net_store_data(packet,"BDB"); + if (f && strcmp(*a, *f) == 0) + { + net_store_data(packet, SHOW_LOG_STATUS_FREE); + ++f; + } + else + net_store_data(packet, SHOW_LOG_STATUS_INUSE); + + if (my_net_write(&thd->net,(char*) packet->ptr(),packet->length())) + DBUG_RETURN(1); /* purecov: inspected */ + } + free_root(&show_logs_root,MYF(0)); + DBUG_RETURN(0); +} static void berkeley_print_error(const char *db_errpfx, char *buffer) { |