summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authormonty@narttu.mysql.fi <>2003-06-04 18:28:51 +0300
committermonty@narttu.mysql.fi <>2003-06-04 18:28:51 +0300
commit23145cfed72954c29f5a47e82af22898164be4b0 (patch)
treef2e86edc169afb1fed9cecefdecd9f13561780c9 /client
parent7df5635ff2845bd708711f6b790997a3c68d5f2a (diff)
downloadmariadb-git-23145cfed72954c29f5a47e82af22898164be4b0.tar.gz
Added SQLSTATE to client/server protocol
bmove_allign -> bmove_align Added OLAP function ROLLUP Split mysql_fix_privilege_tables to a script and a .sql data file Added new (MEMROOT*) functions to avoid calling current_thd() when creating some common objects. Added table_alias_charset, for easier --lower-case-table-name handling Better SQL_MODE handling (Setting complex options also sets sub options) New (faster) assembler string functions for x86
Diffstat (limited to 'client')
-rw-r--r--client/mysql.cc39
-rw-r--r--client/mysqltest.c6
2 files changed, 30 insertions, 15 deletions
diff --git a/client/mysql.cc b/client/mysql.cc
index 812673d34c2..c8fed137344 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -200,7 +200,9 @@ static int com_nopager(String *str, char*), com_pager(String *str, char*),
static int read_lines(bool execute_commands);
static int sql_connect(char *host,char *database,char *user,char *password,
uint silent);
-static int put_info(const char *str,INFO_TYPE info,uint error=0);
+static int put_info(const char *str,INFO_TYPE info,uint error=0,
+ const char *sql_state=0);
+static int put_error(MYSQL *mysql);
static void safe_put_field(const char *pos,ulong length);
static void xmlencode_print(const char *src, uint length);
static void init_pager();
@@ -1437,7 +1439,7 @@ int mysql_real_query_for_lazy(const char *buf, int length)
{
if (!mysql_real_query(&mysql,buf,length))
return 0;
- uint error=put_info(mysql_error(&mysql),INFO_ERROR, mysql_errno(&mysql));
+ int error= put_error(&mysql);
if (mysql_errno(&mysql) != CR_SERVER_GONE_ERROR || retry > 1 ||
!opt_reconnect)
return error;
@@ -1452,8 +1454,7 @@ int mysql_store_result_for_lazy(MYSQL_RES **result)
return 0;
if (mysql_error(&mysql)[0])
- return put_info(mysql_error(&mysql),INFO_ERROR,mysql_errno(&mysql));
-
+ return put_error(&mysql);
return 0;
}
@@ -1653,9 +1654,7 @@ com_go(String *buffer,char *line __attribute__((unused)))
if (quick)
{
if (!(result=mysql_use_result(&mysql)) && mysql_field_count(&mysql))
- {
- return put_info(mysql_error(&mysql),INFO_ERROR,mysql_errno(&mysql));
- }
+ return put_error(&mysql);
}
else
{
@@ -1717,7 +1716,7 @@ com_go(String *buffer,char *line __attribute__((unused)))
put_info("",INFO_RESULT); // Empty row
if (result && !mysql_eof(result)) /* Something wrong when using quick */
- error=put_info(mysql_error(&mysql),INFO_ERROR,mysql_errno(&mysql));
+ error= put_error(&mysql);
else if (unbuffered)
fflush(stdout);
mysql_free_result(result);
@@ -2431,12 +2430,12 @@ com_use(String *buffer __attribute__((unused)), char *line)
if (mysql_select_db(&mysql,tmp))
{
if (mysql_errno(&mysql) != CR_SERVER_GONE_ERROR)
- return put_info(mysql_error(&mysql),INFO_ERROR,mysql_errno(&mysql));
+ return put_error(&mysql);
if (reconnect())
return opt_reconnect ? -1 : 1; // Fatal error
if (mysql_select_db(&mysql,tmp))
- return put_info(mysql_error(&mysql),INFO_ERROR,mysql_errno(&mysql));
+ return put_error(&mysql);
}
my_free(current_db,MYF(MY_ALLOW_ZERO_PTR));
current_db=my_strdup(tmp,MYF(MY_WME));
@@ -2557,7 +2556,7 @@ sql_real_connect(char *host,char *database,char *user,char *password,
(mysql_errno(&mysql) != CR_CONN_HOST_ERROR &&
mysql_errno(&mysql) != CR_CONNECTION_ERROR))
{
- put_info(mysql_error(&mysql),INFO_ERROR,mysql_errno(&mysql));
+ (void) put_error(&mysql);
(void) fflush(stdout);
return ignore_errors ? -1 : 1; // Abort
}
@@ -2707,7 +2706,7 @@ select_limit, max_join_size);
static int
-put_info(const char *str,INFO_TYPE info_type,uint error)
+put_info(const char *str,INFO_TYPE info_type, uint error, const char *sqlstate)
{
FILE *file= (info_type == INFO_ERROR ? stderr : stdout);
static int inited=0;
@@ -2752,7 +2751,12 @@ put_info(const char *str,INFO_TYPE info_type,uint error)
putchar('\007'); /* This should make a bell */
vidattr(A_STANDOUT);
if (error)
- (void) tee_fprintf(file, "ERROR %d: ", error);
+ {
+ if (sqlstate)
+ (void) tee_fprintf(file, "ERROR %d (%s): ", error, sqlstate);
+ else
+ (void) tee_fprintf(file, "ERROR %d: ", error);
+ }
else
tee_puts("ERROR: ", file);
}
@@ -2767,6 +2771,14 @@ put_info(const char *str,INFO_TYPE info_type,uint error)
}
+static int
+put_error(MYSQL *mysql)
+{
+ return put_info(mysql_error(mysql), INFO_ERROR, mysql_errno(mysql),
+ mysql_sqlstate(mysql));
+}
+
+
static void remove_cntrl(String &buffer)
{
char *start,*end;
@@ -3085,4 +3097,3 @@ void sql_element_free(void *ptr)
my_free((gptr) ptr,MYF(0));
}
#endif /* EMBEDDED_LIBRARY */
-
diff --git a/client/mysqltest.c b/client/mysqltest.c
index 9889d365335..84ff41d73a6 100644
--- a/client/mysqltest.c
+++ b/client/mysqltest.c
@@ -42,7 +42,7 @@
**********************************************************************/
-#define MTEST_VERSION "1.27"
+#define MTEST_VERSION "1.28"
#include <my_global.h>
#include <mysql_embed.h>
@@ -2147,6 +2147,10 @@ int run_query(MYSQL* mysql, struct st_query* q, int flags)
if (i == 0 && q->expected_errors == 1)
{
/* Only log error if there is one possible error */
+ dynstr_append_mem(ds,"ERROR ",6);
+ replace_dynstr_append_mem(ds, mysql_sqlstate(mysql),
+ strlen(mysql_sqlstate(mysql)));
+ dynstr_append_mem(ds,": ",2);
replace_dynstr_append_mem(ds,mysql_error(mysql),
strlen(mysql_error(mysql)));
dynstr_append_mem(ds,"\n",1);