summaryrefslogtreecommitdiff
path: root/innobase/row/row0ins.c
diff options
context:
space:
mode:
authorunknown <marko@hundin.mysql.fi>2004-04-06 16:14:43 +0300
committerunknown <marko@hundin.mysql.fi>2004-04-06 16:14:43 +0300
commit80fe399fee3a7752aecdfc888edfcf56a2be7b0a (patch)
treef7bc427aa7ce4a54802d6e8931ca1dfe64c7bfa8 /innobase/row/row0ins.c
parentd809c4413e9f991bde407690aafdaaa3eaae9232 (diff)
downloadmariadb-git-80fe399fee3a7752aecdfc888edfcf56a2be7b0a.tar.gz
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers innobase/btr/btr0btr.c: Output to stderr; quote table and index names innobase/btr/btr0cur.c: Output to stderr; quote table and index names innobase/btr/btr0sea.c: Output to stderr innobase/buf/buf0buf.c: Output to stderr; quote table and index names innobase/buf/buf0flu.c: Output to stderr innobase/buf/buf0lru.c: Output to stderr innobase/buf/buf0rea.c: Output to stderr innobase/data/data0data.c: Remove dtuple_validate() unless #ifdef UNIV_DEBUG Remove unnecessary sprintf() calls Output to stderr innobase/data/data0type.c: Output to stderr innobase/dict/dict0boot.c: Remove dummy call to printf() innobase/dict/dict0crea.c: Output diagnostic information to stream, not to memory innobase/dict/dict0dict.c: Output diagnostics to a file, not to a memory buffer innobase/dict/dict0load.c: Output to stderr; quote table and index names innobase/eval/eval0eval.c: Output to stderr innobase/fil/fil0fil.c: Output to stderr innobase/fsp/fsp0fsp.c: Output to stderr Avoid sprintf() innobase/fut/fut0lst.c: Output to stderr innobase/ha/ha0ha.c: Output to stream, not to memory buffer innobase/ibuf/ibuf0ibuf.c: Output to stderr Avoid sprintf() innobase/include/buf0buf.h: Output to stream, not to memory buffer innobase/include/buf0buf.ic: Use %p for displaying pointers innobase/include/data0data.h: Remove dtuple_sprintf() innobase/include/dict0dict.h: Output to stream, not to memory buffer innobase/include/ha0ha.h: Output to stream, not to memory buffer innobase/include/ibuf0ibuf.h: Output to stream, not to memory buffer innobase/include/lock0lock.h: Output to stream, not to memory buffer innobase/include/log0log.h: Output to stream, not to memory buffer innobase/include/mtr0log.ic: Output to stderr Display pointers with %p innobase/include/os0file.h: Output to stream, not to memory buffer innobase/include/rem0rec.h: Remove rec_sprintf() innobase/include/rem0rec.ic: Output to stderr innobase/include/row0sel.ic: Output to stderr innobase/include/row0upd.ic: Quote table and index names innobase/include/srv0srv.h: Remove srv_sprintf_innodb_monitor() innobase/include/sync0arr.h: Output to stream, not to memory buffer innobase/include/sync0sync.h: Output to stream, not to memory buffer innobase/include/trx0sys.h: Output to stderr innobase/include/trx0trx.h: Output to stream, not to memory buffer innobase/include/ut0ut.h: Remove ut_sprintf_buf() Add ut_print_name(), ut_print_namel() and ut_copy_file() innobase/lock/lock0lock.c: Output to stream, not to memory buffer innobase/log/log0log.c: Output to stderr innobase/log/log0recv.c: Output to stderr innobase/mem/mem0dbg.c: Output to stderr innobase/mtr/mtr0log.c: Display pointers with %p innobase/mtr/mtr0mtr.c: Output to stderr innobase/os/os0file.c: Output to stream, not to memory buffer innobase/os/os0proc.c: Output to stderr innobase/os/os0thread.c: Output to stderr innobase/page/page0cur.c: Output to stderr innobase/page/page0page.c: Avoid sprintf() Output to stderr instead of stdout innobase/pars/pars0opt.c: Output to stderr instead of stdout innobase/rem/rem0rec.c: Remove rec_sprintf() Output to stderr instead of stdout innobase/row/row0ins.c: Output diagnostics to stream instead of memory buffer innobase/row/row0mysql.c: Output to stderr instead of stdout Quote table and index names innobase/row/row0purge.c: Output to stderr instead of stdout innobase/row/row0row.c: Quote table and index names innobase/row/row0sel.c: Output to stderr instead of stdout Quote table and index names innobase/row/row0umod.c: Avoid sprintf() Quote table and index names innobase/row/row0undo.c: Output to stderr instead of stdout innobase/row/row0upd.c: Avoid sprintf() innobase/srv/srv0srv.c: Output to stderr instead of stdout innobase/srv/srv0start.c: Handle srv_monitor_file Make some global variables static innobase/sync/sync0arr.c: Output to stderr instead of stdout Output to stream instead of memory buffer innobase/sync/sync0rw.c: Output to stderr instead of stdout innobase/sync/sync0sync.c: Output to stderr instead of stdout Output to stream instead of memory buffer innobase/trx/trx0purge.c: Output to stderr instead of stdout innobase/trx/trx0rec.c: Quote index and table names Avoid sprintf() innobase/trx/trx0roll.c: Quote identifier names Output to stderr instead of stdout innobase/trx/trx0sys.c: Output to stderr instead of stdout innobase/trx/trx0trx.c: Output to stream instead of memory buffer innobase/trx/trx0undo.c: Output to stderr instead of stdout innobase/ut/ut0ut.c: Declare mysql_get_identifier_quote_char() Remove ut_sprintf_buf() Add ut_print_name() and ut_print_namel() Add ut_copy_file() sql/ha_innodb.cc: innobase_mysql_print_thd(): output to stream, not to memory buffer Add mysql_get_identifier_quote_char() Remove unused function innobase_print_error() Display pointers with %p Buffer InnoDB output via files, not via statically allocated memory
Diffstat (limited to 'innobase/row/row0ins.c')
-rw-r--r--innobase/row/row0ins.c168
1 files changed, 75 insertions, 93 deletions
diff --git a/innobase/row/row0ins.c b/innobase/row/row0ins.c
index 590d2b52e07..8bc6c9697c1 100644
--- a/innobase/row/row0ins.c
+++ b/innobase/row/row0ins.c
@@ -528,34 +528,37 @@ row_ins_foreign_report_err(
dtuple_t* entry) /* in: index entry in the parent
table */
{
- char* buf = dict_foreign_err_buf;
+ FILE* ef = dict_foreign_err_file;
mutex_enter(&dict_foreign_err_mutex);
- ut_sprintf_timestamp(buf);
- sprintf(buf + strlen(buf), " Transaction:\n");
- trx_print(buf + strlen(buf), thr_get_trx(thr));
-
- sprintf(buf + strlen(buf),
-"Foreign key constraint fails for table %.500s:\n",
- foreign->foreign_table_name);
- dict_print_info_on_foreign_key_in_create_format(
- foreign, buf + strlen(buf));
- sprintf(buf + strlen(buf), "\n%s", errstr);
- sprintf(buf + strlen(buf),
-" in parent table, in index %.500s tuple:\n",
- foreign->referenced_index->name);
+ rewind(ef);
+ ut_print_timestamp(ef);
+ fputs(" Transaction:\n", ef);
+ trx_print(ef, thr_get_trx(thr));
+
+ fputs("Foreign key constraint fails for table ", ef);
+ ut_print_name(ef, foreign->foreign_table_name);
+ fputs(":\n", ef);
+ dict_print_info_on_foreign_key_in_create_format(ef, foreign);
+ putc('\n', ef);
+ fputs(errstr, ef);
+ fputs(" in parent table, in index ", ef);
+ ut_print_name(ef, foreign->referenced_index->name);
if (entry) {
- dtuple_sprintf(buf + strlen(buf), 1000, entry);
+ fputs(" tuple:\n", ef);
+ dtuple_print(ef, entry);
}
- sprintf(buf + strlen(buf),
-"\nBut in child table %.500s, in index %.500s, there is a record:\n",
- foreign->foreign_table_name, foreign->foreign_index->name);
+ fputs("\nBut in child table ", ef);
+ ut_print_name(ef, foreign->foreign_table_name);
+ fputs(", in index ", ef);
+ ut_print_name(ef, foreign->foreign_index->name);
if (rec) {
- rec_sprintf(buf + strlen(buf), 1000, rec);
+ fputs(", there is a record:\n", ef);
+ rec_print(ef, rec);
+ } else {
+ fputs(", the record is not available\n", ef);
}
- sprintf(buf + strlen(buf), "\n");
-
- ut_a(strlen(buf) < DICT_FOREIGN_ERR_BUF_LEN);
+ putc('\n', ef);
mutex_exit(&dict_foreign_err_mutex);
}
@@ -576,28 +579,28 @@ row_ins_foreign_report_add_err(
dtuple_t* entry) /* in: index entry to insert in the
child table */
{
- char* buf = dict_foreign_err_buf;
+ FILE* ef = dict_foreign_err_file;
mutex_enter(&dict_foreign_err_mutex);
- ut_sprintf_timestamp(buf);
- sprintf(buf + strlen(buf), " Transaction:\n");
- trx_print(buf + strlen(buf), trx);
- sprintf(buf + strlen(buf),
-"Foreign key constraint fails for table %.500s:\n",
- foreign->foreign_table_name);
- dict_print_info_on_foreign_key_in_create_format(
- foreign, buf + strlen(buf));
- sprintf(buf + strlen(buf),
-"\nTrying to add in child table, in index %.500s tuple:\n",
- foreign->foreign_index->name);
+ rewind(ef);
+ ut_print_timestamp(ef);
+ fputs(" Transaction:\n", ef);
+ trx_print(ef, trx);
+ fputs("Foreign key constraint fails for table ", ef);
+ ut_print_name(ef, foreign->foreign_table_name);
+ fputs(":\n", ef);
+ dict_print_info_on_foreign_key_in_create_format(ef, foreign);
+ fputs("\nTrying to add in child table, in index ", ef);
+ ut_print_name(ef, foreign->foreign_index->name);
if (entry) {
- dtuple_sprintf(buf + strlen(buf), 1000, entry);
+ fputs(" tuple:\n", ef);
+ dtuple_print(ef, entry);
}
- sprintf(buf + strlen(buf),
-"\nBut in parent table %.500s, in index %.500s,\n"
-"the closest match we can find is record:\n",
- foreign->referenced_table_name,
- foreign->referenced_index->name);
+ fputs("\nBut in parent table ", ef);
+ ut_print_name(ef, foreign->referenced_table_name);
+ fputs(", in index ", ef);
+ ut_print_name(ef, foreign->referenced_index->name);
+ fputs(",\nthe closest match we can find is record:\n", ef);
if (rec && page_rec_is_supremum(rec)) {
/* If the cursor ended on a supremum record, it is better
to report the previous record in the error message, so that
@@ -606,11 +609,9 @@ row_ins_foreign_report_add_err(
}
if (rec) {
- rec_sprintf(buf + strlen(buf), 1000, rec);
+ rec_print(ef, rec);
}
- sprintf(buf + strlen(buf), "\n");
-
- ut_a(strlen(buf) < DICT_FOREIGN_ERR_BUF_LEN);
+ putc('\n', ef);
mutex_exit(&dict_foreign_err_mutex);
}
@@ -652,7 +653,6 @@ row_ins_foreign_check_on_constraint(
ulint i;
char* ptr;
char table_name_buf[1000];
- char err_buf[1000];
ut_a(thr && foreign && pcur && mtr);
@@ -791,20 +791,20 @@ row_ins_foreign_check_on_constraint(
|| btr_pcur_get_low_match(cascade->pcur)
< dict_index_get_n_unique(clust_index)) {
- fprintf(stderr,
+ fputs(
"InnoDB: error in cascade of a foreign key op\n"
- "InnoDB: index %s table %s\n", index->name,
- index->table->name);
-
- rec_sprintf(err_buf, 900, rec);
- fprintf(stderr, "InnoDB: record %s\n", err_buf);
-
- rec_sprintf(err_buf, 900, clust_rec);
- fprintf(stderr, "InnoDB: clustered record %s\n",
- err_buf);
- fprintf(stderr,
- "InnoDB: Make a detailed bug report and send it\n");
- fprintf(stderr, "InnoDB: to mysql@lists.mysql.com\n");
+ "InnoDB: ", stderr);
+ dict_index_name_print(stderr, index);
+
+ fputs("\n"
+ "InnoDB: record ", stderr);
+ rec_print(stderr, rec);
+ fputs("\n"
+ "InnoDB: clustered record ", stderr);
+ rec_print(stderr, clust_rec);
+ fputs("\n"
+ "InnoDB: Make a detailed bug report and send it\n"
+ "InnoDB: to mysql@lists.mysql.com\n", stderr);
err = DB_SUCCESS;
@@ -834,24 +834,6 @@ row_ins_foreign_check_on_constraint(
/* This can happen if there is a circular reference of
rows such that cascading delete comes to delete a row
already in the process of being delete marked */
-/*
- fprintf(stderr,
- "InnoDB: error 2 in cascade of a foreign key op\n"
- "InnoDB: index %s table %s\n", index->name,
- index->table->name);
-
- rec_sprintf(err_buf, 900, rec);
- fprintf(stderr, "InnoDB: record %s\n", err_buf);
-
- rec_sprintf(err_buf, 900, clust_rec);
- fprintf(stderr, "InnoDB: clustered record %s\n", err_buf);
-
- fprintf(stderr,
- "InnoDB: Make a detailed bug report and send it\n");
- fprintf(stderr, "InnoDB: to mysql@lists.mysql.com\n");
-
- ut_error;
-*/
err = DB_SUCCESS;
goto nonstandard_exit_func;
@@ -1022,7 +1004,6 @@ row_ins_check_foreign_constraint(
int cmp;
ulint err;
ulint i;
- char* buf = dict_foreign_err_buf;
mtr_t mtr;
run_again:
@@ -1085,23 +1066,24 @@ run_again:
if (check_table == NULL) {
if (check_ref) {
+ FILE* ef = dict_foreign_err_file;
mutex_enter(&dict_foreign_err_mutex);
- ut_sprintf_timestamp(buf);
- sprintf(buf + strlen(buf), " Transaction:\n");
- trx_print(buf + strlen(buf), thr_get_trx(thr));
- sprintf(buf + strlen(buf),
-"Foreign key constraint fails for table %.500s:\n",
- foreign->foreign_table_name);
- dict_print_info_on_foreign_key_in_create_format(
- foreign, buf + strlen(buf));
- sprintf(buf + strlen(buf),
-"\nTrying to add to index %.500s tuple:\n", foreign->foreign_index->name);
- dtuple_sprintf(buf + strlen(buf), 1000, entry);
- sprintf(buf + strlen(buf),
-"\nBut the parent table %.500s does not currently exist!\n",
- foreign->referenced_table_name);
-
- ut_a(strlen(buf) < DICT_FOREIGN_ERR_BUF_LEN);
+ rewind(ef);
+ ut_print_timestamp(ef);
+ fputs(" Transaction:\n", ef);
+ trx_print(ef, thr_get_trx(thr));
+ fputs("Foreign key constraint fails for table ", ef);
+ ut_print_name(ef, foreign->foreign_table_name);
+ fputs(":\n", ef);
+ dict_print_info_on_foreign_key_in_create_format(ef,
+ foreign);
+ fputs("\nTrying to add to index ", ef);
+ ut_print_name(ef, foreign->foreign_index->name);
+ fputs(" tuple:\n", ef);
+ dtuple_print(ef, entry);
+ fputs("\nBut the parent table ", ef);
+ ut_print_name(ef, foreign->referenced_table_name);
+ fputs(" does not currently exist!\n", ef);
mutex_exit(&dict_foreign_err_mutex);
return(DB_NO_REFERENCED_ROW);