src/sql/kernel/qsqlindex.cpp
changeset 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
-1:000000000000 0:1918ee327afb
       
     1 /****************************************************************************
       
     2 **
       
     3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     4 ** All rights reserved.
       
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
       
     6 **
       
     7 ** This file is part of the QtSql module of the Qt Toolkit.
       
     8 **
       
     9 ** $QT_BEGIN_LICENSE:LGPL$
       
    10 ** No Commercial Usage
       
    11 ** This file contains pre-release code and may not be distributed.
       
    12 ** You may use this file in accordance with the terms and conditions
       
    13 ** contained in the Technology Preview License Agreement accompanying
       
    14 ** this package.
       
    15 **
       
    16 ** GNU Lesser General Public License Usage
       
    17 ** Alternatively, this file may be used under the terms of the GNU Lesser
       
    18 ** General Public License version 2.1 as published by the Free Software
       
    19 ** Foundation and appearing in the file LICENSE.LGPL included in the
       
    20 ** packaging of this file.  Please review the following information to
       
    21 ** ensure the GNU Lesser General Public License version 2.1 requirements
       
    22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
       
    23 **
       
    24 ** In addition, as a special exception, Nokia gives you certain additional
       
    25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
       
    26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
       
    27 **
       
    28 ** If you have questions regarding the use of this file, please contact
       
    29 ** Nokia at qt-info@nokia.com.
       
    30 **
       
    31 **
       
    32 **
       
    33 **
       
    34 **
       
    35 **
       
    36 **
       
    37 **
       
    38 ** $QT_END_LICENSE$
       
    39 **
       
    40 ****************************************************************************/
       
    41 
       
    42 #include "qsqlindex.h"
       
    43 
       
    44 #include "qsqlfield.h"
       
    45 #include "qstringlist.h"
       
    46 
       
    47 QT_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 
       
    67 QSqlIndex::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 
       
    76 QSqlIndex::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 
       
    85 QSqlIndex& 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 
       
    98 QSqlIndex::~QSqlIndex()
       
    99 {
       
   100 
       
   101 }
       
   102 
       
   103 /*!
       
   104     Sets the name of the index to \a name.
       
   105 */
       
   106 
       
   107 void 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 
       
   123 void 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 
       
   136 void 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 
       
   148 bool 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 
       
   161 void 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 
       
   183 QString 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 */
       
   212 QStringList 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 
       
   228 QString 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 */
       
   251 void QSqlIndex::setCursorName(const QString& cursorName)
       
   252 {
       
   253     cursor = cursorName;
       
   254 }
       
   255 
       
   256 QT_END_NAMESPACE