diff options
Diffstat (limited to 'src/plugins/sqldrivers/ibase')
-rw-r--r-- | src/plugins/sqldrivers/ibase/qsql_ibase.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/plugins/sqldrivers/ibase/qsql_ibase.cpp b/src/plugins/sqldrivers/ibase/qsql_ibase.cpp index 1754492fe7..6b7ee8f133 100644 --- a/src/plugins/sqldrivers/ibase/qsql_ibase.cpp +++ b/src/plugins/sqldrivers/ibase/qsql_ibase.cpp @@ -64,6 +64,11 @@ QT_BEGIN_NAMESPACE #define SQLDA_CURRENT_VERSION SQLDA_VERSION1 #endif +// Firebird uses blr_bool and not blr_boolean_dtype which is what Interbase uses +#ifndef blr_boolean_dtype +#define blr_boolean_dtype blr_bool +#endif + enum { QIBaseChunkSize = SHRT_MAX / 2 }; static bool getIBaseError(QString& msg, const ISC_STATUS* status, ISC_LONG &sqlcode) @@ -117,6 +122,7 @@ static void initDA(XSQLDA *sqlda) case SQL_TYPE_DATE: case SQL_TEXT: case SQL_BLOB: + case SQL_BOOLEAN: sqlda->sqlvar[i].sqldata = new char[sqlda->sqlvar[i].sqllen]; break; case SQL_ARRAY: @@ -179,6 +185,8 @@ static QVariant::Type qIBaseTypeName(int iType, bool hasScale) case blr_d_float: case blr_double: return QVariant::Double; + case blr_boolean_dtype: + return QVariant::Bool; } qWarning("qIBaseTypeName: unknown datatype: %d", iType); return QVariant::Invalid; @@ -208,6 +216,8 @@ static QVariant::Type qIBaseTypeName2(int iType, bool hasScale) return QVariant::List; case SQL_BLOB: return QVariant::ByteArray; + case SQL_BOOLEAN: + return QVariant::Bool; default: return QVariant::Invalid; } @@ -378,7 +388,6 @@ public: bool writeBlob(int i, const QByteArray &ba); QVariant fetchArray(int pos, ISC_QUAD *arr); bool writeArray(int i, const QList<QVariant> &list); - public: ISC_STATUS status[20]; isc_tr_handle trans; @@ -549,6 +558,9 @@ static char* readArrayBuffer(QList<QVariant>& list, char *buffer, short curDim, buffer += sizeof(ISC_DATE); } break; + case blr_boolean_dtype: + valList = toList<bool>(&buffer, numElements[dim]); + break; } } if (dim > 0) @@ -739,6 +751,9 @@ static char* createArrayBuffer(char *buffer, const QList<QVariant> &list, buffer += sizeof(ISC_TIMESTAMP); } break; + case QVariant::Bool: + buffer = fillList<bool>(buffer, list); + break; default: break; } @@ -1032,6 +1047,9 @@ bool QIBaseResult::exec() case SQL_ARRAY: ok &= d->writeArray(para, val.toList()); break; + case SQL_BOOLEAN: + *((bool*)d->inda->sqlvar[para].sqldata) = val.toBool(); + break; default: qWarning("QIBaseResult::exec: Unknown datatype %d", d->inda->sqlvar[para].sqltype & ~1); @@ -1184,6 +1202,9 @@ bool QIBaseResult::gotoNext(QSqlCachedResult::ValueCache& row, int rowIdx) case SQL_ARRAY: row[idx] = d->fetchArray(i, (ISC_QUAD*)buf); break; + case SQL_BOOLEAN: + row[idx] = QVariant(bool((*(bool*)buf))); + break; default: // unknown type - don't even try to fetch row[idx] = QVariant(); |