SQL/OCI: Compile with MSVC/64bit

Make the oci driver compilable with MSVC 2022 / 64bit. One more reason
to get those drivers checked within the CI.

Pick-to: 6.7 6.5
Change-Id: Iec07adcd4cafde5e028ea306fb88e635a22e2234
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit 2eb66149131b852f687302417cb2f76ef3184dbe)
This commit is contained in:
Christian Ehrlicher 2024-08-17 19:51:32 +02:00
parent cabd94bc67
commit d8c7856312

View File

@ -332,13 +332,13 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
switch (val.typeId()) {
case QMetaType::QByteArray:
r = OCIBindByPos(sql, hbnd, err,
pos + 1,
isOutValue(pos)
r = OCIBindByPos2(sql, hbnd, err,
pos + 1,
isOutValue(pos)
? const_cast<char *>(reinterpret_cast<QByteArray *>(data)->constData())
: reinterpret_cast<QByteArray *>(data)->data(),
reinterpret_cast<QByteArray *>(data)->size(),
SQLT_BIN, indPtr, 0, 0, 0, 0, OCI_DEFAULT);
reinterpret_cast<QByteArray *>(data)->size(),
SQLT_BIN, indPtr, 0, 0, 0, 0, OCI_DEFAULT);
break;
case QMetaType::QTime:
case QMetaType::QDate:
@ -404,20 +404,20 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
case QMetaType::QString: {
const QString s = val.toString();
if (isBinaryValue(pos)) {
r = OCIBindByPos(sql, hbnd, err,
pos + 1,
const_cast<ushort *>(s.utf16()),
s.length() * sizeof(QChar),
SQLT_LNG, indPtr, 0, 0, 0, 0, OCI_DEFAULT);
r = OCIBindByPos2(sql, hbnd, err,
pos + 1,
const_cast<ushort *>(s.utf16()),
s.length() * sizeof(QChar),
SQLT_LNG, indPtr, 0, 0, 0, 0, OCI_DEFAULT);
break;
} else if (!isOutValue(pos)) {
// don't detach the string
r = OCIBindByPos(sql, hbnd, err,
pos + 1,
// safe since oracle doesn't touch OUT values
const_cast<ushort *>(s.utf16()),
(s.length() + 1) * sizeof(QChar),
SQLT_STR, indPtr, 0, 0, 0, 0, OCI_DEFAULT);
r = OCIBindByPos2(sql, hbnd, err,
pos + 1,
// safe since oracle doesn't touch OUT values
const_cast<ushort *>(s.utf16()),
(s.length() + 1) * sizeof(QChar),
SQLT_STR, indPtr, 0, 0, 0, 0, OCI_DEFAULT);
if (r == OCI_SUCCESS)
setCharset(*hbnd, OCI_HTYPE_BIND);
break;
@ -1477,7 +1477,7 @@ bool QOCICols::execBatch(QOCIResultPrivate *d, QVariantList &boundValues, bool a
case QMetaType::QString: {
const QString s = val.toString();
columns[i].lengths[row] = (s.length() + 1) * sizeof(QChar);
columns[i].lengths[row] = ub2((s.length() + 1) * sizeof(QChar));
memcpy(dataPtr, s.utf16(), columns[i].lengths[row]);
break;
}
@ -1954,7 +1954,7 @@ bool QOCIResult::prepare(const QString& query)
}
d->setStatementAttributes();
const OraText *txt = reinterpret_cast<const OraText *>(query.utf16());
const int len = query.length() * sizeof(QChar);
const auto len = ub4(query.length() * sizeof(QChar));
r = OCIStmtPrepare(d->sql,
d->err,
txt,
@ -2246,7 +2246,7 @@ bool QOCIDriver::open(const QString & db,
if (r == OCI_SUCCESS) {
r = OCIServerAttach(d->srvhp, d->err,
reinterpret_cast<const OraText *>(connectionString.utf16()),
connectionString.length() * sizeof(QChar), OCI_DEFAULT);
sb4(connectionString.length() * sizeof(QChar)), OCI_DEFAULT);
}
Q_ASSERT(!d->svc);
if (r == OCI_SUCCESS || r == OCI_SUCCESS_WITH_INFO) {
@ -2262,11 +2262,11 @@ bool QOCIDriver::open(const QString & db,
}
if (r == OCI_SUCCESS) {
r = OCIAttrSet(d->authp, OCI_HTYPE_SESSION, const_cast<ushort *>(user.utf16()),
user.length() * sizeof(QChar), OCI_ATTR_USERNAME, d->err);
ub4(user.length() * sizeof(QChar)), OCI_ATTR_USERNAME, d->err);
}
if (r == OCI_SUCCESS) {
r = OCIAttrSet(d->authp, OCI_HTYPE_SESSION, const_cast<ushort *>(password.utf16()),
password.length() * sizeof(QChar), OCI_ATTR_PASSWORD, d->err);
ub4(password.length() * sizeof(QChar)), OCI_ATTR_PASSWORD, d->err);
}
Q_ASSERT(!d->trans);
if (r == OCI_SUCCESS) {