We now have a current svn snapshot of libqxt in our contrib dir, and
[quassel.git] / src / contrib / libqxt-2007-10-24 / src / sql / qxtsqlpackage.h
diff --git a/src/contrib/libqxt-2007-10-24/src/sql/qxtsqlpackage.h b/src/contrib/libqxt-2007-10-24/src/sql/qxtsqlpackage.h
new file mode 100644 (file)
index 0000000..c8c0b18
--- /dev/null
@@ -0,0 +1,122 @@
+/****************************************************************************
+**
+** Copyright (C) Qxt Foundation. Some rights reserved.
+**
+** This file is part of the QxtSql module of the Qt eXTension library
+**
+** This library is free software; you can redistribute it and/or modify it
+** under the terms of th Common Public License, version 1.0, as published by
+** IBM.
+**
+** This file is provided "AS IS", without WARRANTIES OR CONDITIONS OF ANY
+** KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
+** WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR
+** FITNESS FOR A PARTICULAR PURPOSE.
+**
+** You should have received a copy of the CPL along with this file.
+** See the LICENSE file and the cpl1.0.txt file included with the source
+** distribution for more information. If you did not receive a copy of the
+** license, contact the Qxt Foundation.
+**
+** <http://libqxt.sourceforge.net>  <foundation@libqxt.org>
+**
+****************************************************************************/
+
+
+/**
+\class QxtSqlPackage QxtSqlPackage
+
+\ingroup QxtSql
+
+\brief full serialiseable QSqlQuery storage
+
+
+Sometimes you want to set sql results over network or store them into files. QxtSqlPackage can provide you a storage that is still valid after the actual QSqlQuery has been destroyed
+for confidence the interface is similiar to QSqlQuery.
+*/
+
+#ifndef QXTSQLPACKAGE_H
+#define QXTSQLPACKAGE_H
+#include <QObject>
+#include <QHash>
+#include <QList>
+#include <QtSql>
+#include <qxtglobal.h>
+
+class QXT_SQL_EXPORT QxtSqlPackage : public  QObject
+{
+    Q_OBJECT
+
+public:
+    QxtSqlPackage(QObject *parent = 0);
+    QxtSqlPackage(const QxtSqlPackage & other,QObject *parent = 0);
+
+    ///determinates if the package curently points to a valid row
+    bool isValid();
+
+    ///curent pointer position
+    int at();
+
+    /** \brief point to next entry
+
+    returns false if there is no next entry.\n
+    provided for easy porting from QSqlQuery.
+
+    \code      
+    while (query.next())
+       {
+       }
+    \endcode 
+    */
+    bool next();
+
+    ///point to last entry in storage
+    bool last();
+
+    ///point to first entry in storage
+    bool first();
+
+    /** \brief return a cloumn in curent row
+
+    in contrast to QSqlQuery you have to provide the name of the key.
+
+    the entry is returned as QString becouse in most cases you need QString anyway, and converting to needed data type is easy.
+    \code
+    QString name = query.value("name");        
+    \endcode 
+    */
+    QString value(const QString& key);
+
+    /** \brief read from QSqlQuery
+
+    read out a QSqlQuery and store the result. you may close the query after reading, the data will stay.
+
+    \code
+    QxSqlPackage::insert(QSqlQuery::exec("select name,foo,bar from table;"));
+    \endcode 
+    */
+    void insert(QSqlQuery query);
+
+    ///Returns the number of rows stored
+    int count() const;
+
+    ///serialise Data
+    QByteArray data() const;
+
+    ///deserialise data
+    void setData(const QByteArray& data);
+
+    ///return a specific row as Hash
+    QHash<QString,QString> hash(int index);
+    ///return the curent row as Hash
+    QHash<QString,QString> hash();
+    QxtSqlPackage& operator= (const QxtSqlPackage& other);
+
+private:
+    QList<QHash<QString,QString> > map;
+    int record;
+};
+
+
+
+#endif