SQL/OCI: do not shadow QSqlCachedResultPrivate::sql

Rename QOCIResultPrivate::sql to QOCIResultPrivate::stmtp to avoid
shadowing of the sql member from base class.
Remove some useless casts as a drive-by.

Task-number: QTBUG-136024
Change-Id: I2a5951991039c4de7aecc29f9161dede7b4f3473
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit 3208ad494c7c03b964487787e246aedc444397dc)
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
This commit is contained in:
Christian Ehrlicher 2025-04-18 21:16:41 +02:00
parent 54d6769456
commit 4a8350da23
2 changed files with 54 additions and 56 deletions

View File

@ -218,13 +218,13 @@ public:
OCIEnv *env;
OCIError *err = nullptr;
OCISvcCtx *&svc;
OCIStmt *sql = nullptr;
OCIStmt *stmtp = nullptr;
bool transaction;
int serverVersion;
int prefetchRows, prefetchMem;
void setStatementAttributes();
int bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, int pos,
int bindValue(OCIStmt *stmtp, OCIBind **hbnd, OCIError *err, int pos,
const QVariant &val, dvoid *indPtr, ub4 *tmpSize, TempStorage &tmpStorage);
int bindValues(QVariantList &values, IndicatorArray &indicators, SizeArray &tmpSizes,
TempStorage &tmpStorage);
@ -273,12 +273,12 @@ public:
void QOCIResultPrivate::setStatementAttributes()
{
Q_ASSERT(sql);
Q_ASSERT(stmtp);
int r = 0;
if (prefetchRows >= 0) {
r = OCIAttrSet(sql,
r = OCIAttrSet(stmtp,
OCI_HTYPE_STMT,
&prefetchRows,
0,
@ -289,7 +289,7 @@ void QOCIResultPrivate::setStatementAttributes()
" Couldn't set OCI_ATTR_PREFETCH_ROWS: ", err);
}
if (prefetchMem >= 0) {
r = OCIAttrSet(sql,
r = OCIAttrSet(stmtp,
OCI_HTYPE_STMT,
&prefetchMem,
0,
@ -301,7 +301,7 @@ void QOCIResultPrivate::setStatementAttributes()
}
}
int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, int pos,
int QOCIResultPrivate::bindValue(OCIStmt *stmtp, OCIBind **hbnd, OCIError *err, int pos,
const QVariant &val, dvoid *indPtr, ub4 *tmpSize, TempStorage &tmpStorage)
{
int r = OCI_SUCCESS;
@ -309,7 +309,7 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
switch (val.typeId()) {
case QMetaType::QByteArray:
r = OCIBindByPos2(sql, hbnd, err,
r = OCIBindByPos2(stmtp, hbnd, err,
pos + 1,
isOutValue(pos)
? const_cast<char *>(reinterpret_cast<QByteArray *>(data)->constData())
@ -321,7 +321,7 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
case QMetaType::QDate:
case QMetaType::QDateTime: {
QOCIDateTime *ptr = new QOCIDateTime(env, err, val.toDateTime());
r = OCIBindByPos2(sql, hbnd, err,
r = OCIBindByPos2(stmtp, hbnd, err,
pos + 1,
&ptr->dateTime,
sizeof(OCIDateTime *),
@ -330,7 +330,7 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
break;
}
case QMetaType::Int:
r = OCIBindByPos2(sql, hbnd, err,
r = OCIBindByPos2(stmtp, hbnd, err,
pos + 1,
// if it's an out value, the data is already detached
// so the const cast is safe.
@ -339,7 +339,7 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
SQLT_INT, indPtr, 0, 0, 0, 0, OCI_DEFAULT);
break;
case QMetaType::UInt:
r = OCIBindByPos2(sql, hbnd, err,
r = OCIBindByPos2(stmtp, hbnd, err,
pos + 1,
// if it's an out value, the data is already detached
// so the const cast is safe.
@ -350,7 +350,7 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
case QMetaType::LongLong:
{
QByteArray ba = qMakeOCINumber(val.toLongLong(), err);
r = OCIBindByPos2(sql, hbnd, err,
r = OCIBindByPos2(stmtp, hbnd, err,
pos + 1,
ba.data(),
ba.size(),
@ -361,7 +361,7 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
case QMetaType::ULongLong:
{
QByteArray ba = qMakeOCINumber(val.toULongLong(), err);
r = OCIBindByPos2(sql, hbnd, err,
r = OCIBindByPos2(stmtp, hbnd, err,
pos + 1,
ba.data(),
ba.size(),
@ -370,7 +370,7 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
break;
}
case QMetaType::Double:
r = OCIBindByPos2(sql, hbnd, err,
r = OCIBindByPos2(stmtp, hbnd, err,
pos + 1,
// if it's an out value, the data is already detached
// so the const cast is safe.
@ -381,7 +381,7 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
case QMetaType::QString: {
const QString s = val.toString();
if (isBinaryValue(pos)) {
r = OCIBindByPos2(sql, hbnd, err,
r = OCIBindByPos2(stmtp, hbnd, err,
pos + 1,
const_cast<ushort *>(s.utf16()),
s.length() * sizeof(QChar),
@ -389,7 +389,7 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
break;
} else if (!isOutValue(pos)) {
// don't detach the string
r = OCIBindByPos2(sql, hbnd, err,
r = OCIBindByPos2(stmtp, hbnd, err,
pos + 1,
// safe since oracle doesn't touch OUT values
const_cast<ushort *>(s.utf16()),
@ -406,7 +406,7 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
if (val.canConvert<QOCIRowIdPointer>() && !isOutValue(pos)) {
// use a const pointer to prevent a detach
const QOCIRowIdPointer rptr = qvariant_cast<QOCIRowIdPointer>(val);
r = OCIBindByPos2(sql, hbnd, err,
r = OCIBindByPos2(stmtp, hbnd, err,
pos + 1,
// it's an IN value, so const_cast is ok
const_cast<OCIRowid **>(&rptr->id),
@ -417,9 +417,9 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
QOCIResultPrivate *resPrivate = static_cast<QOCIResultPrivate *>(res->d_ptr);
if (res->internal_prepare()) {
r = OCIBindByPos2(sql, hbnd, err,
r = OCIBindByPos2(stmtp, hbnd, err,
pos + 1,
&resPrivate->sql,
&resPrivate->stmtp,
(sb4)0,
SQLT_RSET, indPtr, 0, 0, 0, 0, OCI_DEFAULT);
@ -436,13 +436,13 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
if (isOutValue(pos)) {
ba.reserve((s.capacity() + 1) * sizeof(QChar));
*tmpSize = ba.size();
r = OCIBindByPos2(sql, hbnd, err,
r = OCIBindByPos2(stmtp, hbnd, err,
pos + 1,
ba.data(),
ba.capacity(),
SQLT_STR, indPtr, tmpSize, 0, 0, 0, OCI_DEFAULT);
} else {
r = OCIBindByPos2(sql, hbnd, err,
r = OCIBindByPos2(stmtp, hbnd, err,
pos + 1,
ba.data(),
ba.size(),
@ -473,7 +473,7 @@ int QOCIResultPrivate::bindValues(QVariantList &values, IndicatorArray &indicato
sb2 *indPtr = &indicators[i];
*indPtr = QSqlResultPrivate::isVariantNull(val) ? -1 : 0;
bindValue(sql, &hbnd, err, i, val, indPtr, &tmpSizes[i], tmpStorage);
bindValue(stmtp, &hbnd, err, i, val, indPtr, &tmpSizes[i], tmpStorage);
}
return r;
}
@ -851,7 +851,7 @@ QOCICols::QOCICols(qsizetype size, QOCIResultPrivate* dp)
sb4 parmStatus = 0;
ub4 count = 1;
int idx = 0;
parmStatus = OCIParamGet(d->sql,
parmStatus = OCIParamGet(d->stmtp,
OCI_HTYPE_STMT,
d->err,
reinterpret_cast<void **>(&param),
@ -889,7 +889,7 @@ QOCICols::QOCICols(qsizetype size, QOCIResultPrivate* dp)
qCWarning(lcOci, "QOCICols: Unable to allocate the OCIDateTime descriptor");
break;
}
r = OCIDefineByPos(d->sql,
r = OCIDefineByPos(d->stmtp,
&dfn,
d->err,
count,
@ -900,7 +900,7 @@ QOCICols::QOCICols(qsizetype size, QOCIResultPrivate* dp)
0, 0, OCI_DEFAULT);
break;
case QMetaType::Double:
r = OCIDefineByPos(d->sql,
r = OCIDefineByPos(d->stmtp,
&dfn,
d->err,
count,
@ -911,7 +911,7 @@ QOCICols::QOCICols(qsizetype size, QOCIResultPrivate* dp)
0, 0, OCI_DEFAULT);
break;
case QMetaType::Int:
r = OCIDefineByPos(d->sql,
r = OCIDefineByPos(d->stmtp,
&dfn,
d->err,
count,
@ -922,7 +922,7 @@ QOCICols::QOCICols(qsizetype size, QOCIResultPrivate* dp)
0, 0, OCI_DEFAULT);
break;
case QMetaType::LongLong:
r = OCIDefineByPos(d->sql,
r = OCIDefineByPos(d->stmtp,
&dfn,
d->err,
count,
@ -936,7 +936,7 @@ QOCICols::QOCICols(qsizetype size, QOCIResultPrivate* dp)
// RAW and LONG RAW fields can't be bound to LOB locators
if (ofi.oraType == SQLT_BIN) {
// qDebug("binding SQLT_BIN");
r = OCIDefineByPos(d->sql,
r = OCIDefineByPos(d->stmtp,
&dfn,
d->err,
count,
@ -947,7 +947,7 @@ QOCICols::QOCICols(qsizetype size, QOCIResultPrivate* dp)
0, 0, OCI_DYNAMIC_FETCH);
} else if (ofi.oraType == SQLT_LBI) {
// qDebug("binding SQLT_LBI");
r = OCIDefineByPos(d->sql,
r = OCIDefineByPos(d->stmtp,
&dfn,
d->err,
count,
@ -957,7 +957,7 @@ QOCICols::QOCICols(qsizetype size, QOCIResultPrivate* dp)
&(fieldInf[idx].ind),
0, 0, OCI_DYNAMIC_FETCH);
} else if (ofi.oraType == SQLT_CLOB) {
r = OCIDefineByPos(d->sql,
r = OCIDefineByPos(d->stmtp,
&dfn,
d->err,
count,
@ -968,7 +968,7 @@ QOCICols::QOCICols(qsizetype size, QOCIResultPrivate* dp)
0, 0, OCI_DEFAULT);
} else {
// qDebug("binding SQLT_BLOB");
r = OCIDefineByPos(d->sql,
r = OCIDefineByPos(d->stmtp,
&dfn,
d->err,
count,
@ -981,7 +981,7 @@ QOCICols::QOCICols(qsizetype size, QOCIResultPrivate* dp)
break;
case QMetaType::QString:
if (ofi.oraType == SQLT_LNG) {
r = OCIDefineByPos(d->sql,
r = OCIDefineByPos(d->stmtp,
&dfn,
d->err,
count,
@ -993,7 +993,7 @@ QOCICols::QOCICols(qsizetype size, QOCIResultPrivate* dp)
} else {
dataSize += dataSize + sizeof(QChar);
//qDebug("OCIDefineByPosStr(%d): %d", count, dataSize);
r = OCIDefineByPos(d->sql,
r = OCIDefineByPos(d->stmtp,
&dfn,
d->err,
count,
@ -1010,7 +1010,7 @@ QOCICols::QOCICols(qsizetype size, QOCIResultPrivate* dp)
// this should make enough space even with character encoding
dataSize = (dataSize + 1) * sizeof(utext) ;
//qDebug("OCIDefineByPosDef(%d): %d", count, dataSize);
r = OCIDefineByPos(d->sql,
r = OCIDefineByPos(d->stmtp,
&dfn,
d->err,
count,
@ -1026,7 +1026,7 @@ QOCICols::QOCICols(qsizetype size, QOCIResultPrivate* dp)
fieldInf[idx].def = dfn;
++count;
++idx;
parmStatus = OCIParamGet(d->sql,
parmStatus = OCIParamGet(d->stmtp,
OCI_HTYPE_STMT,
d->err,
reinterpret_cast<void **>(&param),
@ -1073,7 +1073,7 @@ int QOCICols::readPiecewise(QVariantList &values, int index)
bool nullField;
do {
r = OCIStmtGetPieceInfo(d->sql, d->err, reinterpret_cast<void **>(&dfn), &typep,
r = OCIStmtGetPieceInfo(d->stmtp, d->err, reinterpret_cast<void **>(&dfn), &typep,
&in_outp, &iterp, &idxp, &piecep);
if (r != OCI_SUCCESS)
qOraWarning("OCIResultPrivate::readPiecewise: unable to get piece info:", d->err);
@ -1086,7 +1086,7 @@ int QOCICols::readPiecewise(QVariantList &values, int index)
&chunkSize, piecep, NULL, NULL);
if (r != OCI_SUCCESS)
qOraWarning("OCIResultPrivate::readPiecewise: unable to set piece info:", d->err);
status = OCIStmtFetch (d->sql, d->err, 1, OCI_FETCH_NEXT, OCI_DEFAULT);
status = OCIStmtFetch (d->stmtp, d->err, 1, OCI_FETCH_NEXT, OCI_DEFAULT);
if (status == -1) {
sb4 errcode;
OCIErrorGet(d->err, 1, 0, &errcode, 0, 0,OCI_HTYPE_ERROR);
@ -1311,7 +1311,7 @@ bool QOCICols::execBatch(QOCIResultPrivate *d, QVariantList &boundValues, bool a
singleCol.indicators = new sb2[1];
*singleCol.indicators = QSqlResultPrivate::isVariantNull(boundValues.at(i)) ? -1 : 0;
r = d->bindValue(d->sql, &singleCol.bindh, d->err, i,
r = d->bindValue(d->stmtp, &singleCol.bindh, d->err, i,
boundValues.at(i), singleCol.indicators, &tmpSizes[i], tmpStorage);
if (r != OCI_SUCCESS && r != OCI_SUCCESS_WITH_INFO) {
@ -1483,7 +1483,7 @@ bool QOCICols::execBatch(QOCIResultPrivate *d, QVariantList &boundValues, bool a
#ifdef QOCI_DEBUG
qCDebug(lcOci, "OCIBindByPos2(%p, %p, %p, %d, %p, %d, %d, %p, %p, 0, %d, %p, OCI_DEFAULT)",
d->sql, &bindColumn.bindh, d->err, i + 1, bindColumn.data,
d->stmtp, &bindColumn.bindh, d->err, i + 1, bindColumn.data,
bindColumn.maxLen, bindColumn.bindAs, bindColumn.indicators, bindColumn.lengths,
arrayBind ? bindColumn.maxarr_len : 0, arrayBind ? &bindColumn.curelep : 0);
@ -1496,7 +1496,7 @@ bool QOCICols::execBatch(QOCIResultPrivate *d, QVariantList &boundValues, bool a
// binding the column
r = OCIBindByPos2(
d->sql, &bindColumn.bindh, d->err, i + 1,
d->stmtp, &bindColumn.bindh, d->err, i + 1,
bindColumn.data,
bindColumn.maxLen,
bindColumn.bindAs,
@ -1536,7 +1536,7 @@ bool QOCICols::execBatch(QOCIResultPrivate *d, QVariantList &boundValues, bool a
}
//finally we can execute
r = OCIStmtExecute(d->svc, d->sql, d->err,
r = OCIStmtExecute(d->svc, d->stmtp, d->err,
arrayBind ? 1 : columns[0].recordCount,
0, NULL, NULL,
d->transaction ? OCI_DEFAULT : OCI_COMMIT_ON_SUCCESS);
@ -1777,7 +1777,7 @@ void QOCICols::getValues(QVariantList &v, int index)
QOCIResultPrivate::QOCIResultPrivate(QOCIResult *q, const QOCIDriver *drv)
: QSqlCachedResultPrivate(q, drv),
env(drv_d_func()->env),
svc(const_cast<OCISvcCtx*&>(drv_d_func()->svc)),
svc(drv_d_func()->svc),
transaction(drv_d_func()->transaction),
serverVersion(drv_d_func()->serverVersion),
prefetchRows(drv_d_func()->prefetchRows),
@ -1796,7 +1796,7 @@ QOCIResultPrivate::~QOCIResultPrivate()
{
delete cols;
if (sql && OCIHandleFree(sql, OCI_HTYPE_STMT) != OCI_SUCCESS)
if (stmtp && OCIHandleFree(stmtp, OCI_HTYPE_STMT) != OCI_SUCCESS)
qCWarning(lcOci, "~QOCIResult: unable to free statement handle");
if (OCIHandleFree(err, OCI_HTYPE_ERROR) != OCI_SUCCESS)
@ -1819,7 +1819,7 @@ QOCIResult::~QOCIResult()
QVariant QOCIResult::handle() const
{
Q_D(const QOCIResult);
return QVariant::fromValue(d->sql);
return QVariant::fromValue(d->stmtp);
}
bool QOCIResult::reset (const QString& query)
@ -1837,7 +1837,7 @@ bool QOCIResult::gotoNext(QSqlCachedResult::ValueCache &values, int index)
bool piecewise = false;
int r = OCI_SUCCESS;
r = OCIStmtFetch(d->sql, d->err, 1, OCI_FETCH_NEXT, OCI_DEFAULT);
r = OCIStmtFetch(d->stmtp, d->err, 1, OCI_FETCH_NEXT, OCI_DEFAULT);
if (index < 0) //not interested in values
return r == OCI_SUCCESS || r == OCI_SUCCESS_WITH_INFO;
@ -1893,7 +1893,7 @@ int QOCIResult::numRowsAffected()
{
Q_D(QOCIResult);
int rowCount;
OCIAttrGet(d->sql,
OCIAttrGet(d->stmtp,
OCI_HTYPE_STMT,
&rowCount,
NULL,
@ -1913,16 +1913,16 @@ bool QOCIResult::internal_prepare()
d->cols = nullptr;
QSqlCachedResult::cleanup();
if (d->sql) {
r = OCIHandleFree(d->sql, OCI_HTYPE_STMT);
if (d->stmtp) {
r = OCIHandleFree(d->stmtp, OCI_HTYPE_STMT);
if (r == OCI_SUCCESS)
d->sql = nullptr;
d->stmtp = nullptr;
else
qOraWarning("QOCIResult::prepare: unable to free statement handle:", d->err);
}
r = OCIHandleAlloc(d->env,
reinterpret_cast<void **>(&d->sql),
reinterpret_cast<void **>(&d->stmtp),
OCI_HTYPE_STMT,
0, nullptr);
if (r != OCI_SUCCESS) {
@ -1948,7 +1948,7 @@ bool QOCIResult::prepare(const QString& query)
const OraText *txt = reinterpret_cast<const OraText *>(query.utf16());
const auto len = ub4(query.length() * sizeof(QChar));
Q_D(QOCIResult);
r = OCIStmtPrepare(d->sql,
r = OCIStmtPrepare(d->stmtp,
d->err,
txt,
len,
@ -1974,7 +1974,7 @@ bool QOCIResult::exec()
IndicatorArray indicators(boundValueCount());
SizeArray tmpSizes(boundValueCount());
r = OCIAttrGet(d->sql,
r = OCIAttrGet(d->stmtp,
OCI_HTYPE_STMT,
&stmtType,
NULL,
@ -2009,7 +2009,7 @@ bool QOCIResult::exec()
if (!isCursor) {
// execute
r = OCIStmtExecute(d->svc,
d->sql,
d->stmtp,
d->err,
iters,
0,
@ -2029,7 +2029,7 @@ bool QOCIResult::exec()
if (stmtType == OCI_STMT_SELECT) {
ub4 parmCount = 0;
int r = OCIAttrGet(d->sql, OCI_HTYPE_STMT, reinterpret_cast<void **>(&parmCount),
int r = OCIAttrGet(d->stmtp, OCI_HTYPE_STMT, reinterpret_cast<void **>(&parmCount),
0, OCI_ATTR_PARAM_COUNT, d->err);
if (r == 0 && !d->cols)
d->cols = new QOCICols(parmCount, d);
@ -2062,7 +2062,7 @@ QVariant QOCIResult::lastInsertId() const
if (isActive()) {
QOCIRowIdPointer ptr(new QOCIRowId(d->env));
int r = OCIAttrGet(d->sql, OCI_HTYPE_STMT, ptr.constData()->id,
int r = OCIAttrGet(d->stmtp, OCI_HTYPE_STMT, ptr.constData()->id,
0, OCI_ATTR_ROWID, d->err);
if (r == OCI_SUCCESS)
return QVariant::fromValue(ptr);

View File

@ -70,8 +70,6 @@ protected:
class Q_EXPORT_SQLDRIVER_OCI QOCIResult : public QSqlCachedResult
{
friend class QOCIDriver;
friend class QOCIResultPrivate;
friend class QOCICols;
public:
explicit QOCIResult(const QOCIDriver * db);