diff options
Diffstat (limited to 'tqtinterface/qt4/src/sql/drivers/cache/tqsqlcachedresult.cpp')
-rw-r--r-- | tqtinterface/qt4/src/sql/drivers/cache/tqsqlcachedresult.cpp | 259 |
1 files changed, 0 insertions, 259 deletions
diff --git a/tqtinterface/qt4/src/sql/drivers/cache/tqsqlcachedresult.cpp b/tqtinterface/qt4/src/sql/drivers/cache/tqsqlcachedresult.cpp deleted file mode 100644 index 39195e9..0000000 --- a/tqtinterface/qt4/src/sql/drivers/cache/tqsqlcachedresult.cpp +++ /dev/null @@ -1,259 +0,0 @@ -/**************************************************************************** -** -** Implementation of cached TQt SQL result classes -** -** -** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA. -** -** This file is part of the sql module of the TQt GUI Toolkit. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** This file may be used under the terms of the Q Public License as -** defined by Trolltech ASA and appearing in the file LICENSE.TQPL -** included in the packaging of this file. Licensees holding valid TQt -** Commercial licenses may use this file in accordance with the TQt -** Commercial License Agreement provided with the Software. -** -** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, -** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#include "tqsqlcachedresult.h" -#include <tqdatetime.h> - -#ifndef TQT_NO_SQL -static const uint initial_cache_size = 128; - -class TQtSqlCachedResultPrivate -{ -public: - TQtSqlCachedResultPrivate(); - bool seek(int i); - void init(int count, bool fo); - void cleanup(); - TQtSqlCachedResult::RowCache* next(); - void revertLast(); - - TQtSqlCachedResult::RowsetCache *cache; - TQtSqlCachedResult::RowCache *current; - int rowCacheEnd; - int colCount; - bool forwardOnly; -}; - -TQtSqlCachedResultPrivate::TQtSqlCachedResultPrivate(): - cache(0), current(0), rowCacheEnd(0), colCount(0), forwardOnly(FALSE) -{ -} - -void TQtSqlCachedResultPrivate::cleanup() -{ - if (cache) { - for (int i = 0; i < rowCacheEnd; ++i) - delete (*cache)[i]; - delete cache; - cache = 0; - } - if (forwardOnly) - delete current; - current = 0; - forwardOnly = FALSE; - colCount = 0; - rowCacheEnd = 0; -} - -void TQtSqlCachedResultPrivate::init(int count, bool fo) -{ - cleanup(); - forwardOnly = fo; - colCount = count; - if (fo) - current = new TQtSqlCachedResult::RowCache(count); - else - cache = new TQtSqlCachedResult::RowsetCache(initial_cache_size); -} - -TQtSqlCachedResult::RowCache *TQtSqlCachedResultPrivate::next() -{ - if (forwardOnly) - return current; - - TQ_ASSERT(cache); - current = new TQtSqlCachedResult::RowCache(colCount); - if (rowCacheEnd == (int)cache->size()) - cache->resize(cache->size() * 2); - cache->insert(rowCacheEnd++, current); - return current; -} - -bool TQtSqlCachedResultPrivate::seek(int i) -{ - if (forwardOnly || i < 0) - return FALSE; - if (i >= rowCacheEnd) - return FALSE; - current = (*cache)[i]; - return TRUE; -} - -void TQtSqlCachedResultPrivate::revertLast() -{ - if (forwardOnly) - return; - --rowCacheEnd; - delete current; - current = 0; -} - -////////////// - -TQtSqlCachedResult::TQtSqlCachedResult(const TQSqlDriver * db ): TQSqlResult ( db ) -{ - d = new TQtSqlCachedResultPrivate(); -} - -TQtSqlCachedResult::~TQtSqlCachedResult() -{ - delete d; -} - -void TQtSqlCachedResult::init(int colCount) -{ - d->init(colCount, isForwardOnly()); -} - -bool TQtSqlCachedResult::fetch(int i) -{ - if ((!isActive()) || (i < 0)) - return FALSE; - if (at() == i) - return TRUE; - if (d->forwardOnly) { - // speed hack - do not copy values if not needed - if (at() > i || at() == TQSql::AfterLast) - return FALSE; - while(at() < i - 1) { - if (!gotoNext(0)) - return FALSE; - setAt(at() + 1); - } - if (!gotoNext(d->current)) - return FALSE; - setAt(at() + 1); - return TRUE; - } - if (d->seek(i)) { - setAt(i); - return TRUE; - } - setAt(d->rowCacheEnd - 1); - while (at() < i) { - if (!cacheNext()) - return FALSE; - } - return TRUE; -} - -bool TQtSqlCachedResult::fetchNext() -{ - if (d->seek(at() + 1)) { - setAt(at() + 1); - return TRUE; - } - return cacheNext(); -} - -bool TQtSqlCachedResult::fetchPrev() -{ - return fetch(at() - 1); -} - -bool TQtSqlCachedResult::fetchFirst() -{ - if (d->forwardOnly && at() != TQSql::BeforeFirst) { - return FALSE; - } - if (d->seek(0)) { - setAt(0); - return TRUE; - } - return cacheNext(); -} - -bool TQtSqlCachedResult::fetchLast() -{ - if (at() == TQSql::AfterLast) { - if (d->forwardOnly) - return FALSE; - else - return fetch(d->rowCacheEnd - 1); - } - - int i = at(); - while (fetchNext()) - i++; /* brute force */ - if (d->forwardOnly && at() == TQSql::AfterLast) { - setAt(i); - return TRUE; - } else { - return fetch(d->rowCacheEnd - 1); - } -} - -TQVariant TQtSqlCachedResult::data(int i) -{ - if (!d->current || i >= (int)d->current->size() || i < 0) - return TQVariant(); - - return (*d->current)[i]; -} - -bool TQtSqlCachedResult::isNull(int i) -{ - if (!d->current || i >= (int)d->current->size() || i < 0) - return TRUE; - - return (*d->current)[i].isNull(); -} - -void TQtSqlCachedResult::cleanup() -{ - setAt(TQSql::BeforeFirst); - setActive(FALSE); - d->cleanup(); -} - -bool TQtSqlCachedResult::cacheNext() -{ - if (!gotoNext(d->next())) { - d->revertLast(); - return FALSE; - } - setAt(at() + 1); - return TRUE; -} - -int TQtSqlCachedResult::colCount() const -{ - return d->colCount; -} -#endif // TQT_NO_SQL |