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