File indexing completed on 2024-12-01 04:19:08

0001 /* This file is part of the KDE project
0002    Copyright (C) 2003-2016 Jarosław Staniek <staniek@kde.org>
0003 
0004    This program is free software; you can redistribute it and/or
0005    modify it under the terms of the GNU Library General Public
0006    License as published by the Free Software Foundation; either
0007    version 2 of the License, or (at your option) any later version.
0008 
0009    This program is distributed in the hope that it will be useful,
0010    but WITHOUT ANY WARRANTY; without even the implied warranty of
0011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0012    Library General Public License for more details.
0013 
0014    You should have received a copy of the GNU Library General Public License
0015    along with this program; see the file COPYING.  If not, write to
0016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0017  * Boston, MA 02110-1301, USA.
0018 */
0019 
0020 #ifndef KDB_CONNECTIONOPTIONS_H
0021 #define KDB_CONNECTIONOPTIONS_H
0022 
0023 #include <QCoreApplication>
0024 #include "KDbUtils.h"
0025 
0026 class KDbConnectionPrivate;
0027 class KDbConnection;
0028 
0029 /*! @brief Generic options for a single connection.
0030     The options are accessible using key/value pairs. This enables extensibility
0031     depending on driver's type and version.
0032     @see KDbDriver::createConnection(const KDbConnectionData&, const KDbConnectionOptions&)
0033     @see KDbConnection::options()
0034 */
0035 class KDB_EXPORT KDbConnectionOptions : public KDbUtils::PropertySet
0036 {
0037     Q_DECLARE_TR_FUNCTIONS(KDbConnectionOptions)
0038 public:
0039     KDbConnectionOptions();
0040 
0041     KDbConnectionOptions(const KDbConnectionOptions &other);
0042 
0043     ~KDbConnectionOptions();
0044 
0045     KDbConnectionOptions& operator=(const KDbConnectionOptions &other);
0046 
0047     //! @return true if these options have exactly the same values as @a other
0048     //! @since 3.1
0049     bool operator==(const KDbConnectionOptions &other) const;
0050 
0051     //! @return true if these options differs in at least one value from @a other
0052     //! @since 3.1
0053     bool operator!=(const KDbConnectionOptions &other) const { return !operator==(other); }
0054 
0055     /*! @return true for read-only connection. Used especially for file-based drivers.
0056      Can be implemented in a driver to provide real read-only flag of the connection
0057      (sqlite driver does this). */
0058     bool isReadOnly() const;
0059 
0060     /*! @internal used by KDbDriver::createConnection().
0061      Only works if connection is not yet established. */
0062     void setReadOnly(bool set);
0063 
0064     //! Inserts option with a given @a name, @a value and @a caption.
0065     //! If such option exists, value is updated but caption only if existing caption is empty.
0066     //! @a name must be a valid identifier (see KDb::isIdentifier()).
0067     void insert(const QByteArray &name, const QVariant &value, const QString &caption = QString());
0068 
0069     //! Sets caption for option @a name to @a caption.
0070     //! If such option does not exist, does nothing.
0071     void setCaption(const QByteArray &name, const QString &caption);
0072 
0073     //! Sets value for option @a name to @a value.
0074     //! If such option does not exist, does nothing.
0075     //! @since 3.1
0076     void setValue(const QByteArray &name, const QVariant &value);
0077 
0078     //! Removes option with a given @a name if exists.
0079     void remove(const QByteArray &name);
0080 
0081 private:
0082     void setConnection(KDbConnection *connection);
0083 
0084     friend class KDbConnectionPrivate;
0085 
0086     class Private;
0087     Private * const d;
0088 };
0089 
0090 #endif