summaryrefslogtreecommitdiff
path: root/libmysql
diff options
context:
space:
mode:
authormonty@mishka.local <>2004-12-22 13:54:39 +0200
committermonty@mishka.local <>2004-12-22 13:54:39 +0200
commit4f4bbfc279800923299df1fefeb2fcd299fcde90 (patch)
tree8e5f08b17957f896c2d4e931e60b57d99c260ed6 /libmysql
parent198dc7a8ec6e220c348bb47e59a2ac7532be18b8 (diff)
parent98f2a83539735f1a69680195290adcf02861f073 (diff)
downloadmariadb-git-4f4bbfc279800923299df1fefeb2fcd299fcde90.tar.gz
Merge with 4.1
Diffstat (limited to 'libmysql')
-rw-r--r--libmysql/errmsg.c12
-rw-r--r--libmysql/libmysql.c28
2 files changed, 26 insertions, 14 deletions
diff --git a/libmysql/errmsg.c b/libmysql/errmsg.c
index 710bf4ccd8d..5fa94e5ff0d 100644
--- a/libmysql/errmsg.c
+++ b/libmysql/errmsg.c
@@ -78,7 +78,9 @@ const char *client_errors[]=
"Invalid connection handle",
"Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)",
"Row retrieval was canceled by mysql_stmt_close() call",
- "Attempt to read column without prior row fetch"
+ "Attempt to read column without prior row fetch",
+ "Prepared statement contains no metadata",
+ ""
};
/* Start of code added by Roberto M. Serqueira - martinsc@uol.com.br - 05.24.2001 */
@@ -137,7 +139,9 @@ const char *client_errors[]=
"Invalid connection handle",
"Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)",
"Row retrieval was canceled by mysql_stmt_close() call",
- "Attempt to read column without prior row fetch"
+ "Attempt to read column without prior row fetch",
+ "Prepared statement contains no metadata",
+ ""
};
#else /* ENGLISH */
@@ -194,7 +198,9 @@ const char *client_errors[]=
"Invalid connection handle",
"Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)",
"Row retrieval was canceled by mysql_stmt_close() call",
- "Attempt to read column without prior row fetch"
+ "Attempt to read column without prior row fetch",
+ "Prepared statement contains no metadata",
+ ""
};
#endif
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c
index 4476a42f8ac..388e61fa8aa 100644
--- a/libmysql/libmysql.c
+++ b/libmysql/libmysql.c
@@ -158,7 +158,8 @@ int STDCALL mysql_server_init(int argc __attribute__((unused)),
(void) signal(SIGPIPE, SIG_IGN);
#endif
#ifdef EMBEDDED_LIBRARY
- result= init_embedded_server(argc, argv, groups);
+ if (argc > -1)
+ result= init_embedded_server(argc, argv, groups);
#endif
}
#ifdef THREAD
@@ -2165,12 +2166,12 @@ static void update_stmt_fields(MYSQL_STMT *stmt)
DESCRIPTION
This function should be used after mysql_stmt_execute().
You can safely check that prepared statement has a result set by calling
- mysql_stmt_num_fields(): if number of fields is not zero, you can call
+ mysql_stmt_field_count(): if number of fields is not zero, you can call
this function to get fields metadata.
Next steps you may want to make:
- find out number of columns in result set by calling
mysql_num_fields(res) (the same value is returned by
- mysql_stmt_num_fields)
+ mysql_stmt_field_count())
- fetch metadata for any column with mysql_fetch_field,
mysql_fetch_field_direct, mysql_fetch_fields, mysql_field_seek.
- free returned MYSQL_RES structure with mysql_free_result.
@@ -3875,8 +3876,8 @@ static void fetch_result_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field,
case MYSQL_TYPE_INT24: /* mediumint is sent as 4 bytes int */
case MYSQL_TYPE_LONG:
{
- long value= sint4korr(*row);
- longlong data= field_is_unsigned ? (longlong) (unsigned long) value :
+ int32 value= sint4korr(*row);
+ longlong data= field_is_unsigned ? (longlong) (uint32) value :
(longlong) value;
fetch_long_with_conversion(param, field, data, 0);
*row+= 4;
@@ -4334,11 +4335,10 @@ my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind)
if (!bind_count)
{
- if ((int) stmt->state < (int) MYSQL_STMT_PREPARE_DONE)
- {
- set_stmt_error(stmt, CR_NO_PREPARE_STMT, unknown_sqlstate);
- }
- DBUG_RETURN(0);
+ int errorcode= (int) stmt->state < (int) MYSQL_STMT_PREPARE_DONE ?
+ CR_NO_PREPARE_STMT : CR_NO_STMT_METADATA;
+ set_stmt_error(stmt, errorcode, unknown_sqlstate);
+ DBUG_RETURN(1);
}
/*
@@ -4623,7 +4623,7 @@ static void stmt_update_metadata(MYSQL_STMT *stmt, MYSQL_ROWS *data)
row+= (stmt->field_count+9)/8; /* skip null bits */
bit= 4; /* first 2 bits are reserved */
- /* Go throw all fields and calculate metadata */
+ /* Go through all fields and calculate metadata */
for (bind= stmt->bind, end= bind + stmt->field_count, field= stmt->fields ;
bind < end ;
bind++, field++)
@@ -4758,6 +4758,12 @@ mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong row)
for (; tmp && row; --row, tmp= tmp->next)
;
stmt->data_cursor= tmp;
+ if (!row && tmp)
+ {
+ /* Rewind the counter */
+ stmt->read_row_func= stmt_read_row_buffered;
+ stmt->state= MYSQL_STMT_EXECUTE_DONE;
+ }
DBUG_VOID_RETURN;
}