MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:Marc Alff Date:February 24 2010 12:45am
Subject:bzr commit into mysql-next-mr-bugfixing branch (marc.alff:2982) Bug#10143
View as plain text  
#At file:///home/malff/BZR_TREE/mysql-next-mr-bugfixing/ based on revid:wlad@stripped

 2982 Marc Alff	2010-02-23
      Bug#10143 Perror not showing error description
      
      Backport to 5.5.99

    modified:
      client/mysqltest.cc
      extra/comp_err.c
      extra/perror.c
      mysql-test/r/perror.result
      mysql-test/suite/ndb/r/ndb_basic.result
      mysql-test/t/perror.test
=== modified file 'client/mysqltest.cc'
--- a/client/mysqltest.cc	2010-02-20 10:23:12 +0000
+++ b/client/mysqltest.cc	2010-02-24 00:45:49 +0000
@@ -4460,12 +4460,13 @@ typedef struct
 {
   const char *name;
   uint        code;
+  const char *text;
 } st_error;
 
 static st_error global_error_names[] =
 {
 #include <mysqld_ername.h>
-  { 0, 0 }
+  { 0, 0, 0 }
 };
 
 uint get_errcode_from_name(char *error_name, char *error_end)

=== modified file 'extra/comp_err.c'
--- a/extra/comp_err.c	2009-12-12 20:38:59 +0000
+++ b/extra/comp_err.c	2010-02-24 00:45:49 +0000
@@ -199,11 +199,34 @@ int main(int argc, char *argv[])
 }
 
 
+static void print_escaped_string(FILE *f, const char *str)
+{
+  const char *tmp = str;
+
+  while (tmp[0] != 0)
+  {
+    switch (tmp[0])
+    {
+      case '\\': fprintf(f, "\\\\"); break;
+      case '\'': fprintf(f, "\\\'"); break;
+      case '\"': fprintf(f, "\\\""); break;
+      case '\n': fprintf(f, "\\n"); break;
+      case '\r': fprintf(f, "\\r"); break;
+      default: fprintf(f, "%c", tmp[0]);
+    }
+    tmp++;
+  }
+}
+
+
 static int create_header_files(struct errors *error_head)
 {
   uint er_last;
   FILE *er_definef, *sql_statef, *er_namef;
   struct errors *tmp_error;
+  struct message *er_msg;
+  const char *er_text;
+
   DBUG_ENTER("create_header_files");
   LINT_INIT(er_last);
 
@@ -245,9 +268,12 @@ static int create_header_files(struct er
 	      "{ %-40s,\"%s\", \"%s\" },\n", tmp_error->er_name,
 	      tmp_error->sql_code1, tmp_error->sql_code2);
     /*generating er_name file */
-    fprintf(er_namef, "{ \"%s\", %d },\n", tmp_error->er_name,
-	    tmp_error->d_code);
-
+    er_msg= find_message(tmp_error, default_language, 0);
+    er_text = (er_msg ? er_msg->text : "");
+    fprintf(er_namef, "{ \"%s\", %d, \"", tmp_error->er_name,
+            tmp_error->d_code);
+    print_escaped_string(er_namef, er_text);
+    fprintf(er_namef, "\" },\n");
   }
   /* finishing off with mysqld_error.h */
   fprintf(er_definef, "#define ER_ERROR_LAST %d\n", er_last);

=== modified file 'extra/perror.c'
--- a/extra/perror.c	2009-07-24 06:45:06 +0000
+++ b/extra/perror.c	2010-02-24 00:45:49 +0000
@@ -184,6 +184,45 @@ static const char *get_ha_error_msg(int
   return NullS;
 }
 
+typedef struct
+{
+  const char *name;
+  uint        code;
+  const char *text;
+} st_error;
+
+static st_error global_error_names[] =
+{
+#include <mysqld_ername.h>
+  { 0, 0, 0 }
+};
+
+/**
+  Lookup an error by code in the global_error_names array.
+  @param code the code to lookup
+  @param [out] name_ptr the error name, when found
+  @param [out] msg_ptr the error text, when found
+  @return 1 when found, otherwise 0
+*/
+int get_ER_error_msg(uint code, const char **name_ptr, const char **msg_ptr)
+{
+  st_error *tmp_error;
+
+  tmp_error= & global_error_names[0];
+
+  while (tmp_error->name != NULL)
+  {
+    if (tmp_error->code == code)
+    {
+      *name_ptr= tmp_error->name;
+      *msg_ptr= tmp_error->text;
+      return 1;
+    }
+    tmp_error++;
+  }
+
+  return 0;
+}
 
 #if defined(__WIN__)
 static my_bool print_win_error_msg(DWORD error, my_bool verbose)
@@ -211,6 +250,7 @@ int main(int argc,char *argv[])
 {
   int error,code,found;
   const char *msg;
+  const char *name;
   char *unknown_error = 0;
 #if defined(__WIN__)
   my_bool skip_win_message= 0;
@@ -316,6 +356,14 @@ int main(int argc,char *argv[])
         else
           puts(msg);
       }
+      if (get_ER_error_msg(code, & name, & msg))
+      {
+        found= 1;
+        if (verbose)
+          printf("MySQL error code %3d (%s): %s\n", code, name, msg);
+        else
+          puts(msg);
+      }
       if (!found)
       {
 #if defined(__WIN__)

=== modified file 'mysql-test/r/perror.result'
--- a/mysql-test/r/perror.result	2006-08-01 09:29:10 +0000
+++ b/mysql-test/r/perror.result	2010-02-24 00:45:49 +0000
@@ -1 +1,6 @@
 Illegal error code: 10000
+MySQL error code 1062 (ER_DUP_ENTRY): Duplicate entry '%-.192s' for key %d
+MySQL error code 1076 (ER_READY): %s: ready for connections.
+Version: '%s'  socket: '%s'  port: %d
+MySQL error code 1459 (ER_TABLE_NEEDS_UPGRADE): Table upgrade required. Please do "REPAIR TABLE `%-.32s`" or dump/reload to fix it!
+MySQL error code 1461 (ER_MAX_PREPARED_STMT_COUNT_REACHED): Can't create more than max_prepared_stmt_count statements (current value: %lu)

=== modified file 'mysql-test/suite/ndb/r/ndb_basic.result'
--- a/mysql-test/suite/ndb/r/ndb_basic.result	2010-02-20 10:07:32 +0000
+++ b/mysql-test/suite/ndb/r/ndb_basic.result	2010-02-24 00:45:49 +0000
@@ -787,6 +787,7 @@ f1	f2	f3
 222222	bbbbbb	2
 drop table t1;
 Illegal ndb error code: 1186
+MySQL error code 1186 (ER_FLUSH_MASTER_BINLOG_CLOSED): Binlog closed, cannot RESET MASTER
 CREATE TABLE t1 (
 a VARBINARY(40) NOT NULL,
 b VARCHAR (256) CHARACTER SET UTF8 NOT NULL,

=== modified file 'mysql-test/t/perror.test'
--- a/mysql-test/t/perror.test	2006-08-01 09:29:10 +0000
+++ b/mysql-test/t/perror.test	2010-02-24 00:45:49 +0000
@@ -17,3 +17,17 @@ enable_query_log;
 # As there is no error code defined for 10000, expect error
 --error 1
 --exec $MY_PERROR 10000 2>&1
+
+#
+# Bug#10143 (Perror not showing error description)
+#
+
+# test reported case
+--exec $MY_PERROR 1062 2>&1
+
+# test errors that contain characters to escape in the text.
+--exec $MY_PERROR 1076 2>&1
+--exec $MY_PERROR 1459 2>&1
+--exec $MY_PERROR 1461 2>&1
+
+


Attachment: [text/bzr-bundle] bzr/marc.alff@sun.com-20100224004549-wpv0qvxcs2h2pzki.bundle
Thread
bzr commit into mysql-next-mr-bugfixing branch (marc.alff:2982) Bug#10143Marc Alff24 Feb