Nut/src/query.cpp

94 lines
2.8 KiB
C++

/*!************************************************************************
**
** This file is part of Nut project.
** https://github.com/HamedMasafi/Nut
**
** Nut is free software: you can redistribute it and/or modify
** it under the terms of the GNU Lesser General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Nut 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 Lesser General Public License for more details.
**
** You should have received a copy of the GNU Lesser General Public License
** along with Nut. If not, see <http://www.gnu.org/licenses/>.
**
**************************************************************************/
#include "query.h"
NUT_BEGIN_NAMESPACE
QueryPrivate::QueryPrivate(QueryBase *parent) : q_ptr(parent),
database(nullptr), tableSet(nullptr), skip(-1), take(-1)
{
}
QueryPrivate::~QueryPrivate()
{
}
/*!
* \class Query
* \brief This class hold a query. A query can be used for getting database rows, editing or deleting without row fetching.
* A query can be used for getting data from database.
* \code
* auto q = db.posts()->createQuery();
* q->join(Post::commentsTable());
* q->orderBy(!Post::saveDateField() & Post::bodyField());
* q->setWhere(Post::idField() > 5);
*
* auto posts = q->toList();
* \endcode
* In below code posts is a QList<Post> that contain rows from database from this query:
* \code
* SELECT * FROM post WHERE post.id>5 ORDER BY post.saveDate DESC, post.body
* \endcode
*/
/*!
* \fn QList<T *> Query::toList(int count = -1)
* \param count Total rows must be returned
* \return This function return class itself
* This function return rows
*/
/*!
* \fn Query<T> *Query::setWhere(WherePhrase where)
* Where phrase is a phrase using table's static field methods.
* \code
* q->setWhere(Post::idField() == 4 || Post::titleField().isNull());
* \endcode
* In sql this is like below code:
* \code
* ... WHERE post.id=4 OR post.title IS NULL
* \endcode
* \param where Where phrase
* \return This function return class itself
*/
/*!
* \fn Query<T> *Query::orderBy(WherePhrase phrase)
* \param phrase Order phrase
* \return This function return class itself
* orderBy set a new order for this query. Order can be a hrase like that:
* \code
* query->orderBy(Post::idField());
* \endcode
* If you need more than one order field seprate them by & operator, example:
* \code
* query->orderBy(Post::idField() & Post::bodyField());
* \endcode
* Order can be also DESC, for that put exclamation mark near field
* \code
* query->orderBy(!Post::idField & Post::bodyField());
* \endcode
*/
NUT_END_NAMESPACE