summaryrefslogtreecommitdiff
path: root/ext/pdo_mysql/mysql_statement.c
diff options
context:
space:
mode:
authorAndrey Hristov <andrey@php.net>2005-07-10 02:49:14 +0000
committerAndrey Hristov <andrey@php.net>2005-07-10 02:49:14 +0000
commit55ab9b75a689d26f5c8d9c628ec390921a0754ef (patch)
tree620280b7acdd7eb9c7838b77758c8fab62226f53 /ext/pdo_mysql/mysql_statement.c
parent2711d70d334ada1f971ea07163e365d951182606 (diff)
downloadphp-git-55ab9b75a689d26f5c8d9c628ec390921a0754ef.tar.gz
ok, calculate max_length only in case of a blob (normal, medium, long).
in case of a varchar lets allocate 255 bytes and be quick without asking libmysql to update max_length
Diffstat (limited to 'ext/pdo_mysql/mysql_statement.c')
-rwxr-xr-xext/pdo_mysql/mysql_statement.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/ext/pdo_mysql/mysql_statement.c b/ext/pdo_mysql/mysql_statement.c
index c778fe874f..bfade370fb 100755
--- a/ext/pdo_mysql/mysql_statement.c
+++ b/ext/pdo_mysql/mysql_statement.c
@@ -94,7 +94,25 @@ static int pdo_mysql_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC)
/* if buffered, pre-fetch all the data */
if (H->buffered) {
my_bool on = 1;
- mysql_stmt_attr_set(S->stmt, STMT_ATTR_UPDATE_MAX_LENGTH, &on);
+ /* if we have bound the buffers don't set the attribute again */
+ if (!S->result) {
+ for (i= 0; i < stmt->column_count; i++) {
+ /*
+ FIXME: using directly internal structs - but for now cleaner
+ then calling 2 times result_metadata.
+ */
+ switch (S->fields[i].type) {
+ case MYSQL_TYPE_MEDIUM_BLOB:
+ case MYSQL_TYPE_LONG_BLOB:
+ case MYSQL_TYPE_BLOB:
+ mysql_stmt_attr_set(S->stmt, STMT_ATTR_UPDATE_MAX_LENGTH, &on);
+ i= stmt->column_count;
+ break;
+ default:
+ break;
+ }
+ }
+ }
mysql_stmt_store_result(S->stmt);
}