source: trunk/src/sql/kernel/qsqlindex.cpp@ 353

Last change on this file since 353 was 2, checked in by Dmitry A. Kuminov, 16 years ago

Initially imported qt-all-opensource-src-4.5.1 from Trolltech.

File size: 6.7 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4** Contact: Qt Software Information ([email protected])
5**
6** This file is part of the QtSql module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial Usage
10** Licensees holding valid Qt Commercial licenses may use this file in
11** accordance with the Qt Commercial License Agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and Nokia.
14**
15** GNU Lesser General Public License Usage
16** Alternatively, this file may be used under the terms of the GNU Lesser
17** General Public License version 2.1 as published by the Free Software
18** Foundation and appearing in the file LICENSE.LGPL included in the
19** packaging of this file. Please review the following information to
20** ensure the GNU Lesser General Public License version 2.1 requirements
21** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
22**
23** In addition, as a special exception, Nokia gives you certain
24** additional rights. These rights are described in the Nokia Qt LGPL
25** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
26** package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you are unsure which license is appropriate for your use, please
37** contact the sales department at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#include "qsqlindex.h"
43
44#include "qsqlfield.h"
45#include "qstringlist.h"
46
47QT_BEGIN_NAMESPACE
48
49/*!
50 \class QSqlIndex
51 \brief The QSqlIndex class provides functions to manipulate and
52 describe database indexes.
53
54 \ingroup database
55 \inmodule QtSql
56
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.
60*/
61
62/*!
63 Constructs an empty index using the cursor name \a cursorname and
64 index name \a name.
65*/
66
67QSqlIndex::QSqlIndex(const QString& cursorname, const QString& name)
68 : cursor(cursorname), nm(name)
69{
70}
71
72/*!
73 Constructs a copy of \a other.
74*/
75
76QSqlIndex::QSqlIndex(const QSqlIndex& other)
77 : QSqlRecord(other), cursor(other.cursor), nm(other.nm), sorts(other.sorts)
78{
79}
80
81/*!
82 Sets the index equal to \a other.
83*/
84
85QSqlIndex& QSqlIndex::operator=(const QSqlIndex& other)
86{
87 cursor = other.cursor;
88 nm = other.nm;
89 sorts = other.sorts;
90 QSqlRecord::operator=(other);
91 return *this;
92}
93
94/*!
95 Destroys the object and frees any allocated resources.
96*/
97
98QSqlIndex::~QSqlIndex()
99{
100
101}
102
103/*!
104 Sets the name of the index to \a name.
105*/
106
107void QSqlIndex::setName(const QString& name)
108{
109 nm = name;
110}
111
112/*!
113 \fn QString QSqlIndex::name() const
114
115 Returns the name of the index.
116*/
117
118/*!
119 Appends the field \a field to the list of indexed fields. The
120 field is appended with an ascending sort order.
121*/
122
123void QSqlIndex::append(const QSqlField& field)
124{
125 append(field, false);
126}
127
128/*!
129 \overload
130
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
133 true.
134*/
135
136void QSqlIndex::append(const QSqlField& field, bool desc)
137{
138 sorts.append(desc);
139 QSqlRecord::append(field);
140}
141
142
143/*!
144 Returns true if field \a i in the index is sorted in descending
145 order; otherwise returns false.
146*/
147
148bool QSqlIndex::isDescending(int i) const
149{
150 if (i >= 0 && i < sorts.size())
151 return sorts[i];
152 return false;
153}
154
155/*!
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.
159*/
160
161void QSqlIndex::setDescending(int i, bool desc)
162{
163 if (i >= 0 && i < sorts.size())
164 sorts[i] = desc;
165}
166
167#ifdef QT3_SUPPORT
168
169/*!
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:
175
176 "\a{prefix}.<fieldname>"
177
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.
181*/
182
183QString QSqlIndex::toString(const QString& prefix, const QString& sep, bool verbose) const
184{
185 QString s;
186 bool comma = false;
187 for (int i = 0; i < count(); ++i) {
188 if(comma)
189 s += sep + QLatin1Char(' ');
190 s += createField(i, prefix, verbose);
191 comma = true;
192 }
193 return s;
194}
195
196/*!
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
200 the form:
201
202 "\a{prefix}.<fieldname>"
203
204 If \a verbose is true (the default), each field contains a suffix
205 indicating an ASCending or DESCending sort order.
206
207 Note that if you want to iterate over the list, you should iterate
208 over a copy, e.g.
209 \snippet doc/src/snippets/code/src_sql_kernel_qsqlindex.cpp 0
210
211*/
212QStringList QSqlIndex::toStringList(const QString& prefix, bool verbose) const
213{
214 QStringList s;
215 for (int i = 0; i < count(); ++i)
216 s += createField(i, prefix, verbose);
217 return s;
218}
219#endif
220
221/*! \internal
222
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.
226*/
227
228QString QSqlIndex::createField(int i, const QString& prefix, bool verbose) const
229{
230 QString f;
231 if (!prefix.isEmpty())
232 f += prefix + QLatin1Char('.');
233 f += field(i).name();
234 if (verbose)
235 f += QLatin1Char(' ') + QString((isDescending(i)
236 ? QLatin1String("DESC") : QLatin1String("ASC")));
237 return f;
238}
239
240/*!
241 \fn QString QSqlIndex::cursorName() const
242
243 Returns the name of the cursor which the index is associated with.
244*/
245
246
247/*!
248 Sets the name of the cursor that the index is associated with to
249 \a cursorName.
250*/
251void QSqlIndex::setCursorName(const QString& cursorName)
252{
253 cursor = cursorName;
254}
255
256QT_END_NAMESPACE
Note: See TracBrowser for help on using the repository browser.