File indexing completed on 2024-12-01 07:25:00
0001 /* This file is part of the KDE project 0002 Copyright (C) 2004-2015 Jarosław Staniek <staniek@kde.org> 0003 0004 This library 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 library 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 library; see the file COPYING.LIB. 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 KDBTABLEORQUERYSCHEMA_H 0021 #define KDBTABLEORQUERYSCHEMA_H 0022 0023 #include <QByteArray> 0024 0025 #include "KDbQueryColumnInfo.h" 0026 0027 class KDbConnection; 0028 class KDbFieldList; 0029 class KDbTableSchema; 0030 class KDbQuerySchema; 0031 0032 /*! Variant class providing a pointer to table or query. */ 0033 class KDB_EXPORT KDbTableOrQuerySchema 0034 { 0035 public: 0036 //! Type of object: table or query 0037 //! @since 3.1 0038 enum class Type { 0039 Table, 0040 Query 0041 }; 0042 0043 /*! Creates a new KDbTableOrQuerySchema variant object, retrieving table or query schema 0044 using @a conn connection and @a name. If both table and query exists for @a name, 0045 table has priority over query. 0046 Check whether a query or table has been found by testing (query() || table()) expression. */ 0047 KDbTableOrQuerySchema(KDbConnection *conn, const QByteArray& name); 0048 0049 /*! Creates a new KDbTableOrQuerySchema variant object, retrieving table or query schema 0050 using @a conn connection and @a name. If @a type is Table, @a name is assumed 0051 to be a table name, otherwise @a name is assumed to be a query name. 0052 Check whether a query or table has been found by testing (query() || table()) expression. 0053 @since 3.1 */ 0054 KDbTableOrQuerySchema(KDbConnection *conn, const QByteArray &name, Type type); 0055 0056 /*! Creates a new KDbTableOrQuerySchema variant object. @a tableOrQuery should be of 0057 class KDbTableSchema or KDbQuerySchema. 0058 Check whether a query or table has been found by testing (query() || table()) expression. */ 0059 explicit KDbTableOrQuerySchema(KDbFieldList *tableOrQuery); 0060 0061 /*! Creates a new KDbTableOrQuerySchema variant object, retrieving table or query schema 0062 using @a conn connection and @a id. 0063 Check whether a query or table has been found by testing (query() || table()) expression. */ 0064 KDbTableOrQuerySchema(KDbConnection *conn, int id); 0065 0066 /*! Creates a new KDbTableOrQuerySchema variant object, keeping a pointer to @a table 0067 object. */ 0068 explicit KDbTableOrQuerySchema(KDbTableSchema* table); 0069 0070 /*! Creates a new KDbTableOrQuerySchema variant object, keeping a pointer to @a query 0071 object. */ 0072 explicit KDbTableOrQuerySchema(KDbQuerySchema* query); 0073 0074 ~KDbTableOrQuerySchema(); 0075 0076 //! @return a pointer to the query if it's provided 0077 KDbQuerySchema* query() const; 0078 0079 //! @return a pointer to the table if it's provided 0080 KDbTableSchema* table() const; 0081 0082 //! @return name of a query or table 0083 QByteArray name() const; 0084 0085 //! @return caption (if present) or name of the table/query 0086 QString captionOrName() const; 0087 0088 /** 0089 * @brief Returns number of columns within record set returned from specified table or query 0090 * 0091 * In case of query expanded fields list is counted. 0092 * For tables @a conn is not required. 0093 * Returns -1 if the object has neither table or query assigned. 0094 * Returns -1 if the object has query assigned but @a conn is @c nullptr. 0095 */ 0096 int fieldCount(KDbConnection *conn) const; 0097 0098 /*! Mode for columns(). */ 0099 enum class ColumnsMode { 0100 NonUnique, //!< Non-unique columns are returned 0101 Unique //!< Unique columns are returned 0102 }; 0103 0104 //! @return all columns for the table or the query 0105 const KDbQueryColumnInfo::Vector columns(KDbConnection *conn, ColumnsMode mode = ColumnsMode::NonUnique); 0106 0107 /*! @return a field of the table or the query schema for name @a name 0108 or 0 if there is no such field. */ 0109 KDbField* field(const QString& name); 0110 0111 /*! Like KDbField* field(const QString& name); 0112 but returns all information associated with field/column @a name. */ 0113 KDbQueryColumnInfo* columnInfo(KDbConnection *conn, const QString& name); 0114 0115 private: 0116 class Private; 0117 Private * const d; 0118 0119 Q_DISABLE_COPY(KDbTableOrQuerySchema) 0120 }; 0121 0122 //! A pair (connection, table-or-schema) for QDebug operator<< 0123 //! @since 3.1 0124 typedef std::tuple<KDbConnection*, const KDbTableOrQuerySchema&> KDbConnectionAndSchema; 0125 0126 //! Sends information about table or query schema and connection @a connectionAndSchema to debug output @a dbg. 0127 //! @since 3.1 0128 KDB_EXPORT QDebug operator<<(QDebug dbg, const KDbConnectionAndSchema &connectionAndSchema); 0129 0130 #endif