1 /****************************************************************************
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
7 ** This file is part of the QtSql module of the Qt Toolkit.
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
40 ****************************************************************************/
42 #include "qsqlindex.h"
44 #include "qsqlfield.h"
45 #include "qstringlist.h"
51 \brief The QSqlIndex class provides functions to manipulate and
52 describe database indexes.
57 An \e index refers to a single table or view in a database.
58 Information about the fields that comprise the index can be used
59 to generate SQL statements.
63 Constructs an empty index using the cursor name \a cursorname and
67 QSqlIndex::QSqlIndex(const QString& cursorname, const QString& name)
68 : cursor(cursorname), nm(name)
73 Constructs a copy of \a other.
76 QSqlIndex::QSqlIndex(const QSqlIndex& other)
77 : QSqlRecord(other), cursor(other.cursor), nm(other.nm), sorts(other.sorts)
82 Sets the index equal to \a other.
85 QSqlIndex& QSqlIndex::operator=(const QSqlIndex& other)
87 cursor = other.cursor;
90 QSqlRecord::operator=(other);
95 Destroys the object and frees any allocated resources.
98 QSqlIndex::~QSqlIndex()
104 Sets the name of the index to \a name.
107 void QSqlIndex::setName(const QString& name)
113 \fn QString QSqlIndex::name() const
115 Returns the name of the index.
119 Appends the field \a field to the list of indexed fields. The
120 field is appended with an ascending sort order.
123 void QSqlIndex::append(const QSqlField& field)
125 append(field, false);
131 Appends the field \a field to the list of indexed fields. The
132 field is appended with an ascending sort order, unless \a desc is
136 void QSqlIndex::append(const QSqlField& field, bool desc)
139 QSqlRecord::append(field);
144 Returns true if field \a i in the index is sorted in descending
145 order; otherwise returns false.
148 bool QSqlIndex::isDescending(int i) const
150 if (i >= 0 && i < sorts.size())
156 If \a desc is true, field \a i is sorted in descending order.
157 Otherwise, field \a i is sorted in ascending order (the default).
158 If the field does not exist, nothing happens.
161 void QSqlIndex::setDescending(int i, bool desc)
163 if (i >= 0 && i < sorts.size())
170 Returns a comma-separated list of all the index's field names as a
171 string. This string is suitable, for example, for generating a
172 SQL SELECT statement. Only generated fields are included in the
173 list (see \l{isGenerated()}). If a \a prefix is specified, e.g. a
174 table name, it is prepended before all field names in the form:
176 "\a{prefix}.<fieldname>"
178 If \a sep is specified, each field is separated by \a sep. If \a
179 verbose is true (the default), each field contains a suffix
180 indicating an ASCending or DESCending sort order.
183 QString QSqlIndex::toString(const QString& prefix, const QString& sep, bool verbose) const
187 for (int i = 0; i < count(); ++i) {
189 s += sep + QLatin1Char(' ');
190 s += createField(i, prefix, verbose);
197 Returns a list of all the index's field names. Only generated
198 fields are included in the list (see \l{isGenerated()}). If a \a
199 prefix is specified, e.g. a table name, all fields are prefixed in
202 "\a{prefix}.<fieldname>"
204 If \a verbose is true (the default), each field contains a suffix
205 indicating an ASCending or DESCending sort order.
207 Note that if you want to iterate over the list, you should iterate
209 \snippet doc/src/snippets/code/src_sql_kernel_qsqlindex.cpp 0
212 QStringList QSqlIndex::toStringList(const QString& prefix, bool verbose) const
215 for (int i = 0; i < count(); ++i)
216 s += createField(i, prefix, verbose);
223 Creates a string representing the field number \a i using prefix \a
224 prefix. If \a verbose is true, ASC or DESC is included in the field
225 description if the field is sorted in ASCending or DESCending order.
228 QString QSqlIndex::createField(int i, const QString& prefix, bool verbose) const
231 if (!prefix.isEmpty())
232 f += prefix + QLatin1Char('.');
233 f += field(i).name();
235 f += QLatin1Char(' ') + QString((isDescending(i)
236 ? QLatin1String("DESC") : QLatin1String("ASC")));
241 \fn QString QSqlIndex::cursorName() const
243 Returns the name of the cursor which the index is associated with.
248 Sets the name of the cursor that the index is associated with to
251 void QSqlIndex::setCursorName(const QString& cursorName)