diff SqliteDBLink.hpp @ 101:6c6f3a5f96ea

Better support for batch operations.
author Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
date Thu, 13 Feb 2014 15:19:37 +0100
parents c7da835ea912
children 6bc013d5788b
line wrap: on
line diff
--- a/SqliteDBLink.hpp	Thu Feb 13 14:55:11 2014 +0100
+++ b/SqliteDBLink.hpp	Thu Feb 13 15:19:37 2014 +0100
@@ -26,13 +26,68 @@
   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);
+				  const QStringList& files,
+				  bool lazy = false);
+  virtual void deleteFileFromDB(const QString& path, bool lazy = false);
   bool commit(const QString& prefix = QString() );
 
 private:
-  typedef enum {None = 0, Add, Update } OperationType;
-  typedef QPair<DBInfo, OperationType> Operation;
+  typedef enum {None = 0, Add, Update, Delete } OperationType;
+  static const char* typeString(OperationType);
+
+  //typedef QPair<DBInfo, OperationType> Operation;
+  class Operation {
+  public:
+    virtual OperationType type() const = 0;
+  };
+
+  class InfoOperation: public Operation {
+  private:
+    DBInfo _info;
+  public:
+    InfoOperation(const DBInfo&info) {
+      this->_info=info;
+    }
+    const DBInfo& info() const {
+      return _info;
+    }
+  };
+
+  class UpdateOperation: public InfoOperation {
+  public:
+    UpdateOperation(const DBInfo&info) : InfoOperation(info) {}
+
+    OperationType type() const
+    {
+      return Update;
+    }
+  };
+
+  class AddOperation: public InfoOperation {
+  public:
+    AddOperation(const DBInfo&info) : InfoOperation(info) {}
+
+    OperationType type() const
+    {
+      return Add;
+    }
+  };
+
+  class DeleteOperation: public Operation {
+  private:
+    QString _path;
+  public:
+    DeleteOperation(const QString& path) {
+      _path=path;
+    }
+    OperationType type() const
+    {
+      return Delete;
+    }
+    const QString& path() const {
+      return _path;
+    }
+  };
 
   void addFile(const DBInfo& info, bool lazy = false);
   bool tryAddFile(const DBInfo& info);
@@ -45,7 +100,8 @@
   QSqlQuery* preparedSizeQuery;
   QSqlQuery* preparedTryAddQuery;
   QSqlQuery* preparedUpdateQuery;
-  QList<Operation> operations;
+  QSqlQuery* preparedDeleteQuery;
+  QList<Operation*> operations;
   void executeOperation(QVariantList& paths, QVariantList& sizes,
 			QVariantList& mtimes, QVariantList& checksums,
 			OperationType operation);