Skip to content

Commit ffbe877

Browse files
author
Bernhard Stöcker
committed
update to 5.15.12
1 parent 887b373 commit ffbe877

File tree

1 file changed

+19
-21
lines changed

1 file changed

+19
-21
lines changed

mysql/qsql_mysql.cpp

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ class QMYSQLResultPrivate: public QSqlResultPrivate
223223
struct QMyField
224224
{
225225
char *outField = nullptr;
226-
MYSQL_FIELD *myField = nullptr;
226+
const MYSQL_FIELD *myField = nullptr;
227227
QMetaType::Type type = QMetaType::UnknownType;
228228
my_bool nullIndicator = false;
229229
ulong bufLength = 0ul;
@@ -309,6 +309,7 @@ static QMetaType::Type qDecodeMYSQLType(int mysqltype, uint flags)
309309
case FIELD_TYPE_MEDIUM_BLOB :
310310
case FIELD_TYPE_LONG_BLOB :
311311
case FIELD_TYPE_GEOMETRY :
312+
case MYSQL_TYPE_JSON :
312313
type = (flags & BINARY_FLAG) ? QMetaType::QByteArray : QMetaType::QString;
313314
break;
314315
default:
@@ -347,7 +348,8 @@ static bool qIsBlob(int t)
347348
return t == MYSQL_TYPE_TINY_BLOB
348349
|| t == MYSQL_TYPE_BLOB
349350
|| t == MYSQL_TYPE_MEDIUM_BLOB
350-
|| t == MYSQL_TYPE_LONG_BLOB;
351+
|| t == MYSQL_TYPE_LONG_BLOB
352+
|| t == MYSQL_TYPE_JSON;
351353
}
352354

353355
static bool qIsInteger(int t)
@@ -360,12 +362,9 @@ static bool qIsInteger(int t)
360362

361363
void QMYSQLResultPrivate::bindBlobs()
362364
{
363-
int i;
364-
MYSQL_FIELD *fieldInfo;
365365
MYSQL_BIND *bind;
366-
367-
for(i = 0; i < fields.count(); ++i) {
368-
fieldInfo = fields.at(i).myField;
366+
for (int i = 0; i < fields.count(); ++i) {
367+
const MYSQL_FIELD *fieldInfo = fields.at(i).myField;
369368
if (qIsBlob(inBinds[i].buffer_type) && meta && fieldInfo) {
370369
bind = &inBinds[i];
371370
bind->buffer_length = fieldInfo->max_length;
@@ -378,8 +377,6 @@ void QMYSQLResultPrivate::bindBlobs()
378377

379378
bool QMYSQLResultPrivate::bindInValues()
380379
{
381-
MYSQL_BIND *bind;
382-
char *field;
383380
int i = 0;
384381

385382
if (!meta)
@@ -392,35 +389,34 @@ bool QMYSQLResultPrivate::bindInValues()
392389
inBinds = new MYSQL_BIND[fields.size()];
393390
memset(inBinds, 0, fields.size() * sizeof(MYSQL_BIND));
394391

395-
MYSQL_FIELD *fieldInfo;
392+
const MYSQL_FIELD *fieldInfo;
396393

397394
while((fieldInfo = mysql_fetch_field(meta))) {
395+
MYSQL_BIND *bind = &inBinds[i];
396+
398397
QMyField &f = fields[i];
399398
f.myField = fieldInfo;
400-
399+
bind->buffer_length = f.bufLength = fieldInfo->length + 1;
400+
bind->buffer_type = fieldInfo->type;
401401
f.type = qDecodeMYSQLType(fieldInfo->type, fieldInfo->flags);
402402
if (qIsBlob(fieldInfo->type)) {
403403
// the size of a blob-field is available as soon as we call
404404
// mysql_stmt_store_result()
405405
// after mysql_stmt_exec() in QMYSQLResult::exec()
406-
fieldInfo->length = 0;
406+
bind->buffer_length = f.bufLength = 0;
407407
hasBlobs = true;
408408
} else if (qIsInteger(f.type)) {
409-
fieldInfo->length = 8;
409+
bind->buffer_length = f.bufLength = 8;
410410
} else {
411-
fieldInfo->type = MYSQL_TYPE_STRING;
411+
bind->buffer_type = MYSQL_TYPE_STRING;
412412
}
413-
bind = &inBinds[i];
414-
field = new char[fieldInfo->length + 1];
415-
memset(field, 0, fieldInfo->length + 1);
416413

417-
bind->buffer_type = fieldInfo->type;
418-
bind->buffer = field;
419-
bind->buffer_length = f.bufLength = fieldInfo->length + 1;
420414
bind->is_null = &f.nullIndicator;
421415
bind->length = &f.bufLength;
422416
bind->is_unsigned = fieldInfo->flags & UNSIGNED_FLAG ? 1 : 0;
423-
f.outField=field;
417+
418+
char *field = new char[bind->buffer_length + 1]{};
419+
bind->buffer = f.outField = field;
424420

425421
++i;
426422
}
@@ -1597,3 +1593,5 @@ bool QMYSQLDriver::isIdentifierEscaped(const QString &identifier, IdentifierType
15971593
}
15981594

15991595
QT_END_NAMESPACE
1596+
1597+
#include "moc_qsql_mysql_p.cpp"

0 commit comments

Comments
 (0)