view SqliteDBLink.hpp @ 93:308a718812ba

Small refactoring to allow lazy commits.
author Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
date Tue, 22 Oct 2013 11:53:54 +0200
parents f49023c61dac
children 93981e675d67
line wrap: on
line source

#ifndef SQLITEDBLINK_HPP
#define SQLITEDBLINK_HPP
#include "FileDBLink.hpp"

#include <QtSql/QSqlDatabase>
#include <QtCore/QPair>

class SqliteDBLink : public FileDBLink {
public:
  SqliteDBLink(const QString& dbpath);
  ~SqliteDBLink();

  virtual void addFile(const QString& path, quint64 size,
		       const QDateTime& dtime, const QByteArray& hash,
		       bool lazy = false);
  virtual void updateFile(const QString& path, quint64 size,
			  const QDateTime& dtime, const QByteArray& hash,
			  bool lazy = false);
  bool exists(const QString& path);
  DBStatus existsWithMtime(const QString& path, const QDateTime& mtime);

  virtual const QList<dbinf_ptr_t> filesWithSize(quint64 size, const QString& prefix = QString()) const;


  QStringList toStringList();
  const QList<dbinf_ptr_t > values(const QString& prefix = QString() ) const;
  virtual void keepOnlyFromPrefix(const QString& prefix,
				  const QStringList& files);
  virtual void deleteFileFromDB(const QString& path);
  bool commit();

private:
  typedef enum {Add, Update } OperationType;
  typedef QPair<DBInfo, OperationType> Operation;

  void addFile(const DBInfo& info, bool lazy = false);
  bool tryAddFile(const DBInfo& info);
  void updateFile(const DBInfo& dbinfo, bool lazy = false);

  QSqlDatabase db;
  static const QString connectionName;

  QSqlQuery* preparedSizePrefixQuery;
  QSqlQuery* preparedSizeQuery;
  QSqlQuery* preparedTryAddQuery;
  QList<Operation> operations;
};

#endif //MEMORYDBLINK_HPP