diff options
Diffstat (limited to 'sql-common')
-rw-r--r-- | sql-common/client.c | 79 | ||||
-rw-r--r-- | sql-common/my_time.c | 9 |
2 files changed, 51 insertions, 37 deletions
diff --git a/sql-common/client.c b/sql-common/client.c index da35c12730c..a26207038cf 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -289,8 +289,8 @@ void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate) DBUG_ASSERT(mysql != 0); net= &mysql->net; - net->last_errno= errcode; - strmov(net->last_error, ER(errcode)); + net->client_last_errno= errcode; + strmov(net->client_last_error, ER(errcode)); strmov(net->sqlstate, sqlstate); DBUG_VOID_RETURN; @@ -304,8 +304,8 @@ void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate) void net_clear_error(NET *net) { - net->last_errno= 0; - net->last_error[0]= '\0'; + net->client_last_errno= 0; + net->client_last_error[0]= '\0'; strmov(net->sqlstate, not_error_sqlstate); } @@ -331,9 +331,9 @@ static void set_mysql_extended_error(MYSQL *mysql, int errcode, DBUG_ASSERT(mysql != 0); net= &mysql->net; - net->last_errno= errcode; + net->client_last_errno= errcode; va_start(args, format); - my_vsnprintf(net->last_error, sizeof(net->last_error)-1, + my_vsnprintf(net->client_last_error, sizeof(net->client_last_error)-1, format, args); va_end(args); strmov(net->sqlstate, sqlstate); @@ -667,7 +667,7 @@ cli_safe_read(MYSQL *mysql) return (packet_error); #endif /*MYSQL_SERVER*/ end_server(mysql); - set_mysql_error(mysql, net->last_errno == ER_NET_PACKET_TOO_LARGE ? + set_mysql_error(mysql, net->client_last_errno == ER_NET_PACKET_TOO_LARGE ? CR_NET_PACKET_TOO_LARGE: CR_SERVER_LOST, unknown_sqlstate); return (packet_error); } @@ -676,7 +676,7 @@ cli_safe_read(MYSQL *mysql) if (len > 3) { char *pos=(char*) net->read_pos+1; - net->last_errno=uint2korr(pos); + net->client_last_errno=uint2korr(pos); pos+=2; len-=2; if (protocol_41(mysql) && pos[0] == '#') @@ -684,8 +684,8 @@ cli_safe_read(MYSQL *mysql) strmake(net->sqlstate, pos+1, SQLSTATE_LENGTH); pos+= SQLSTATE_LENGTH+1; } - (void) strmake(net->last_error,(char*) pos, - min((uint) len,(uint) sizeof(net->last_error)-1)); + (void) strmake(net->client_last_error,(char*) pos, + min((uint) len,(uint) sizeof(net->client_last_error)-1)); } else set_mysql_error(mysql, CR_UNKNOWN_ERROR, unknown_sqlstate); @@ -701,7 +701,9 @@ cli_safe_read(MYSQL *mysql) mysql->server_status&= ~SERVER_MORE_RESULTS_EXISTS; DBUG_PRINT("error",("Got error: %d/%s (%s)", - net->last_errno, net->sqlstate, net->last_error)); + net->client_last_errno, + net->sqlstate, + net->client_last_error)); return(packet_error); } return len; @@ -744,7 +746,6 @@ cli_advanced_command(MYSQL *mysql, enum enum_server_command command, } net_clear_error(net); - net->report_error=0; mysql->info=0; mysql->affected_rows= ~(my_ulonglong) 0; /* @@ -759,7 +760,7 @@ cli_advanced_command(MYSQL *mysql, enum enum_server_command command, { DBUG_PRINT("error",("Can't send command to server. Error: %d", socket_errno)); - if (net->last_errno == ER_NET_PACKET_TOO_LARGE) + if (net->client_last_errno == ER_NET_PACKET_TOO_LARGE) { set_mysql_error(mysql, CR_NET_PACKET_TOO_LARGE, unknown_sqlstate); goto end; @@ -836,16 +837,15 @@ static my_bool is_NT(void) #ifdef CHECK_LICENSE -/* +/** Check server side variable 'license'. - If the variable does not exist or does not contain 'Commercial', + + If the variable does not exist or does not contain 'Commercial', we're talking to non-commercial server from commercial client. - SYNOPSIS - check_license() - RETURN VALUE - 0 success - !0 network error or the server is not commercial. - Error code is saved in mysql->net.last_errno. + + @retval 0 success + @retval !0 network error or the server is not commercial. + Error code is saved in mysql->net.client_last_errno. */ static int check_license(MYSQL *mysql) @@ -858,7 +858,7 @@ static int check_license(MYSQL *mysql) if (mysql_real_query(mysql, query, sizeof(query)-1)) { - if (net->last_errno == ER_UNKNOWN_SYSTEM_VARIABLE) + if (net->client_last_errno == ER_UNKNOWN_SYSTEM_VARIABLE) { set_mysql_extended_error(mysql, CR_WRONG_LICENSE, unknown_sqlstate, ER(CR_WRONG_LICENSE), required_license); @@ -873,7 +873,7 @@ static int check_license(MYSQL *mysql) two is ever true for server variables now), or column value mismatch, set wrong license error. */ - if (!net->last_errno && + if (!net->client_last_errno && (!row || !row[0] || strncmp(row[0], required_license, sizeof(required_license)))) { @@ -881,7 +881,7 @@ static int check_license(MYSQL *mysql) ER(CR_WRONG_LICENSE), required_license); } mysql_free_result(res); - return net->last_errno; + return net->client_last_errno; } #endif /* CHECK_LICENSE */ @@ -1097,11 +1097,16 @@ void mysql_read_default_options(struct st_mysql_options *options, my_free(options->ssl_capath, MYF(MY_ALLOW_ZERO_PTR)); options->ssl_capath = my_strdup(opt_arg, MYF(MY_WME)); break; + case 26: /* ssl_cipher */ + my_free(options->ssl_cipher, MYF(MY_ALLOW_ZERO_PTR)); + options->ssl_cipher= my_strdup(opt_arg, MYF(MY_WME)); + break; #else case 13: /* Ignore SSL options */ case 14: case 15: case 16: + case 26: break; #endif /* HAVE_OPENSSL */ case 17: /* charset-lib */ @@ -2085,7 +2090,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user, if ((pkt_length=cli_safe_read(mysql)) == packet_error) { - if (mysql->net.last_errno == CR_SERVER_LOST) + if (mysql->net.client_last_errno == CR_SERVER_LOST) set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate, ER(CR_SERVER_LOST_EXTENDED), "reading initial communication packet", @@ -2319,7 +2324,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user, if ((pkt_length=cli_safe_read(mysql)) == packet_error) { - if (mysql->net.last_errno == CR_SERVER_LOST) + if (mysql->net.client_last_errno == CR_SERVER_LOST) set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate, ER(CR_SERVER_LOST_EXTENDED), "reading authorization packet", @@ -2347,7 +2352,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user, /* Read what server thinks about out new auth message report */ if (cli_safe_read(mysql) == packet_error) { - if (mysql->net.last_errno == CR_SERVER_LOST) + if (mysql->net.client_last_errno == CR_SERVER_LOST) set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate, ER(CR_SERVER_LOST_EXTENDED), "reading final connect information", @@ -2366,7 +2371,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user, if (db && mysql_select_db(mysql, db)) { - if (mysql->net.last_errno == CR_SERVER_LOST) + if (mysql->net.client_last_errno == CR_SERVER_LOST) set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate, ER(CR_SERVER_LOST_EXTENDED), "Setting intital database", @@ -2410,7 +2415,9 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user, error: reset_sigpipe(mysql); DBUG_PRINT("error",("message: %u/%s (%s)", - net->last_errno, net->sqlstate, net->last_error)); + net->client_last_errno, + net->sqlstate, + net->client_last_error)); { /* Free alloced memory */ end_server(mysql); @@ -2468,8 +2475,8 @@ my_bool mysql_reconnect(MYSQL *mysql) mysql->db, mysql->port, mysql->unix_socket, mysql->client_flag | CLIENT_REMEMBER_OPTIONS)) { - mysql->net.last_errno= tmp_mysql.net.last_errno; - strmov(mysql->net.last_error, tmp_mysql.net.last_error); + mysql->net.client_last_errno= tmp_mysql.net.client_last_errno; + strmov(mysql->net.client_last_error, tmp_mysql.net.client_last_error); strmov(mysql->net.sqlstate, tmp_mysql.net.sqlstate); DBUG_RETURN(1); } @@ -2478,8 +2485,8 @@ my_bool mysql_reconnect(MYSQL *mysql) DBUG_PRINT("error", ("mysql_set_character_set() failed")); bzero((char*) &tmp_mysql.options,sizeof(tmp_mysql.options)); mysql_close(&tmp_mysql); - mysql->net.last_errno= tmp_mysql.net.last_errno; - strmov(mysql->net.last_error, tmp_mysql.net.last_error); + mysql->net.client_last_errno= tmp_mysql.net.client_last_errno; + strmov(mysql->net.client_last_error, tmp_mysql.net.client_last_error); strmov(mysql->net.sqlstate, tmp_mysql.net.sqlstate); DBUG_RETURN(1); } @@ -3072,13 +3079,13 @@ unsigned int STDCALL mysql_num_fields(MYSQL_RES *res) uint STDCALL mysql_errno(MYSQL *mysql) { - return mysql->net.last_errno; + return mysql->net.client_last_errno; } const char * STDCALL mysql_error(MYSQL *mysql) { - return mysql->net.last_error; + return mysql->net.client_last_error; } @@ -3147,7 +3154,7 @@ int STDCALL mysql_set_character_set(MYSQL *mysql, const char *cs_name) ER(CR_CANT_READ_CHARSET), cs_name, cs_dir_name); } charsets_dir= save_csdir; - return mysql->net.last_errno; + return mysql->net.client_last_errno; } diff --git a/sql-common/my_time.c b/sql-common/my_time.c index 48d1b198dfc..543a925681b 100644 --- a/sql-common/my_time.c +++ b/sql-common/my_time.c @@ -1105,9 +1105,14 @@ longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res, long part1,part2; *was_cut= 0; + bzero((char*) time_res, sizeof(*time_res)); + time_res->time_type=MYSQL_TIMESTAMP_DATE; if (nr == LL(0) || nr >= LL(10000101000000)) + { + time_res->time_type=MYSQL_TIMESTAMP_DATETIME; goto ok; + } if (nr < 101) goto err; if (nr <= (YY_PART_YEAR-1)*10000L+1231L) @@ -1131,6 +1136,9 @@ longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res, } if (nr < 101000000L) goto err; + + time_res->time_type=MYSQL_TIMESTAMP_DATETIME; + if (nr <= (YY_PART_YEAR-1)*LL(10000000000)+LL(1231235959)) { nr= nr+LL(20000000000000); /* YYMMDDHHMMSS, 2000-2069 */ @@ -1144,7 +1152,6 @@ longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res, ok: part1=(long) (nr/LL(1000000)); part2=(long) (nr - (longlong) part1*LL(1000000)); - bzero((char*) time_res, sizeof(*time_res)); time_res->year= (int) (part1/10000L); part1%=10000L; time_res->month= (int) part1 / 100; time_res->day= (int) part1 % 100; |