1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
/* Copyright (C) 2003-2010 Jesper K. Pedersen <blackie@kde.org>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "SQLImageDateCollection.h"
#include <qvariant.h>
#include <qmap.h>
#include "QueryHelper.h"
using namespace SQLDB;
SQLImageDateCollection::SQLImageDateCollection(QueryHelper& queryHelper):
_qh(queryHelper)
{
}
DB::ImageCount SQLImageDateCollection::count( const DB::ImageDate& range )
{
// In a perfect world, we should check that the db hasn't changed, but
// as we will get a new instance of this class each time the search
// changes, it is really not that important, esp. because it is only
// for the datebar, where a bit out of sync doesn't matter too much.
static QMap<DB::ImageDate, DB::ImageCount> cache;
if ( cache.contains( range ) )
return cache[range];
int exact =
_qh.executeQuery(
"SELECT COUNT(*) FROM file "
"WHERE ?<=time_start AND time_end<=?",
QueryHelper::Bindings() << range.start() << range.end()
).firstItem().toInt();
int rng =
_qh.executeQuery(
"SELECT COUNT(*) FROM file "
"WHERE ?<=time_end AND time_start<=?",
QueryHelper::Bindings() << range.start() << range.end()
).firstItem().toInt() - exact;
DB::ImageCount result( exact, rng );
cache.insert( range, result );
return result;
}
QDateTime SQLImageDateCollection::lowerLimit() const
{
static QDateTime cachedLower;
if (cachedLower.isNull())
cachedLower = _qh.executeQuery(
"SELECT MIN(time_start) FROM file"
).firstItem().toDateTime();
return cachedLower;
}
QDateTime SQLImageDateCollection::upperLimit() const
{
static QDateTime cachedUpper;
if (cachedUpper.isNull())
cachedUpper = _qh.executeQuery(
"SELECT MAX(time_end) FROM file"
).firstItem().toDateTime();
return cachedUpper;
}
|