+/****************************************************************************
+**
+** 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