SQL/MySQL: merge toMySqlDate (which returned MYSQL_TIME) into exec()

It was the only place that called it. Makes the code slightly uglier,
but removes a function that returned a raw pointer. More importantly, it
gets the actual type from QVariant, without relying on it internally
converting from QDateTime to QDate and QTime, or failing to do so in
some cases. This is going to be needed for the next commit.

Pick-to: 6.6 6.5
Change-Id: I6818d78a57394e37857bfffd17bbcd3f5057eadc
Reviewed-by: Christian Ehrlicher <ch.ehrlicher@gmx.de>
(cherry picked from commit b5d73636d27f1bba87980cf1bac6feb1ebd6360b)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Thiago Macieira 2024-03-11 12:42:34 -07:00 committed by Qt Cherry-pick Bot
parent af41847af5
commit 10c7706656

View File

@ -832,28 +832,6 @@ void QMYSQLResult::virtual_hook(int id, void *data)
QSqlResult::virtual_hook(id, data);
}
static QT_MYSQL_TIME *toMySqlDate(QDate date, QTime time, int type)
{
Q_ASSERT(type == QMetaType::QTime || type == QMetaType::QDate
|| type == QMetaType::QDateTime);
auto myTime = new QT_MYSQL_TIME{};
if (type == QMetaType::QTime || type == QMetaType::QDateTime) {
myTime->hour = time.hour();
myTime->minute = time.minute();
myTime->second = time.second();
myTime->second_part = time.msec() * 1000;
}
if (type == QMetaType::QDate || type == QMetaType::QDateTime) {
myTime->year = date.year();
myTime->month = date.month();
myTime->day = date.day();
}
return myTime;
}
bool QMYSQLResult::prepare(const QString& query)
{
Q_D(QMYSQLResult);
@ -943,25 +921,39 @@ bool QMYSQLResult::exec()
case QMetaType::QTime:
case QMetaType::QDate:
case QMetaType::QDateTime: {
QT_MYSQL_TIME *myTime = toMySqlDate(val.toDate(), val.toTime(), val.userType());
auto myTime = new QT_MYSQL_TIME{};
timeVector.append(myTime);
currBind->buffer = myTime;
switch (val.userType()) {
case QMetaType::QTime:
QDate date;
QTime time;
int type = val.userType();
if (type == QMetaType::QTime) {
time = val.toTime();
currBind->buffer_type = MYSQL_TYPE_TIME;
myTime->time_type = MYSQL_TIMESTAMP_TIME;
break;
case QMetaType::QDate:
} else if (type == QMetaType::QDate) {
date = val.toDate();
currBind->buffer_type = MYSQL_TYPE_DATE;
myTime->time_type = MYSQL_TIMESTAMP_DATE;
break;
case QMetaType::QDateTime:
} else {
QDateTime dt = val.toDateTime();
date = dt.date();
time = dt.time();
currBind->buffer_type = MYSQL_TYPE_DATETIME;
myTime->time_type = MYSQL_TIMESTAMP_DATETIME;
break;
default:
break;
}
if (type == QMetaType::QTime || type == QMetaType::QDateTime) {
myTime->hour = time.hour();
myTime->minute = time.minute();
myTime->second = time.second();
myTime->second_part = time.msec() * 1000;
}
if (type == QMetaType::QDate || type == QMetaType::QDateTime) {
myTime->year = date.year();
myTime->month = date.month();
myTime->day = date.day();
}
currBind->buffer_length = sizeof(QT_MYSQL_TIME);
currBind->length = 0;