File indexing completed on 2024-04-14 14:53:32

0001 /* This file is part of the KDE project
0002    Copyright (C) 2003-2017 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 #include "KDbQueryAsterisk.h"
0021 #include "KDbQuerySchema.h"
0022 #include "KDbTableSchema.h"
0023 
0024 class KDbQueryAsterisk::Private
0025 {
0026 public:
0027     Private(const KDbTableSchema *t) : table(t) {}
0028 
0029     /*! Table schema for this asterisk */
0030     const KDbTableSchema* table;
0031 };
0032 
0033 // ----
0034 
0035 KDbQueryAsterisk::KDbQueryAsterisk(KDbQuerySchema *query)
0036     : KDbQueryAsterisk(query, nullptr)
0037 {
0038 }
0039 
0040 KDbQueryAsterisk::KDbQueryAsterisk(KDbQuerySchema *query, const KDbTableSchema &table)
0041     : KDbQueryAsterisk(query, &table)
0042 {
0043 }
0044 
0045 KDbQueryAsterisk::KDbQueryAsterisk(KDbQuerySchema *query, const KDbTableSchema *table)
0046     : KDbField(query, -1)
0047     , d(new Private(table))
0048 {
0049     setType(KDbField::Asterisk);
0050 }
0051 
0052 KDbQueryAsterisk::KDbQueryAsterisk(const KDbQueryAsterisk &asterisk)
0053         : KDbField(asterisk)
0054         , d(new Private(asterisk.table()))
0055 {
0056 }
0057 
0058 KDbQueryAsterisk::~KDbQueryAsterisk()
0059 {
0060     delete d;
0061 }
0062 
0063 bool KDbQueryAsterisk::operator==(const KDbQueryAsterisk& other) const
0064 {
0065     return d->table == other.d->table && parent() == other.parent();
0066 }
0067 
0068 KDbQuerySchema *KDbQueryAsterisk::query()
0069 {
0070     return static_cast<KDbQuerySchema*>(parent());
0071 }
0072 
0073 const KDbQuerySchema *KDbQueryAsterisk::query() const
0074 {
0075     return static_cast<const KDbQuerySchema*>(parent());
0076 }
0077 
0078 const KDbTableSchema* KDbQueryAsterisk::table() const
0079 {
0080     return d->table;
0081 }
0082 
0083 KDbField* KDbQueryAsterisk::copy()
0084 {
0085     return new KDbQueryAsterisk(*this);
0086 }
0087 
0088 void KDbQueryAsterisk::setTable(const KDbTableSchema *table)
0089 {
0090     d->table = table;
0091 }
0092 
0093 bool KDbQueryAsterisk::isSingleTableAsterisk() const
0094 {
0095     return d->table;
0096 }
0097 
0098 bool KDbQueryAsterisk::isAllTableAsterisk() const
0099 {
0100     return !d->table;
0101 }
0102 
0103 QDebug operator<<(QDebug dbg, const KDbQueryAsterisk& asterisk)
0104 {
0105     if (asterisk.isAllTableAsterisk()) {
0106         dbg.nospace() << "ALL-TABLES ASTERISK (*) ON TABLES(";
0107         bool first = true;
0108         foreach(KDbTableSchema *table, *asterisk.query()->tables()) {
0109             if (first)
0110                 first = false;
0111             else
0112                 dbg.nospace() << ',';
0113             dbg.space() << table->name();
0114         }
0115         dbg.space() << ')';
0116     } else {
0117         dbg.nospace() << "SINGLE-TABLE ASTERISK (" << asterisk.table()->name() << ".*)";
0118     }
0119     return dbg.space();
0120 }