diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
commit | 8362bf63dea22bbf6736609b0f49c152f975eb63 (patch) | |
tree | 0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kexi/kexidb/indexschema.h | |
download | koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip |
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kexi/kexidb/indexschema.h')
-rw-r--r-- | kexi/kexidb/indexschema.h | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/kexi/kexidb/indexschema.h b/kexi/kexidb/indexschema.h new file mode 100644 index 00000000..a8bec433 --- /dev/null +++ b/kexi/kexidb/indexschema.h @@ -0,0 +1,209 @@ +/* This file is part of the KDE project + Copyright (C) 2003-2004 Jaroslaw Staniek <[email protected]> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#ifndef KEXIDB_INDEX_H +#define KEXIDB_INDEX_H + +#include <qvaluelist.h> +#include <qstring.h> + +#include <kexidb/fieldlist.h> +#include <kexidb/schemadata.h> +#include <kexidb/relationship.h> + +namespace KexiDB { + +class Connection; +class TableSchema; +class QuerySchema; +class Relationship; + +/*! @short Provides information about database index that can be created for a database table. + + IndexSchema object stores information about table fields that + defines this index and additional properties like: whether index is unique + or primary key (requires unique). Single-field index can be also auto generated. +*/ +class KEXI_DB_EXPORT IndexSchema : public FieldList, public SchemaData +{ + public: + typedef QPtrList<IndexSchema> List; + typedef QPtrListIterator<IndexSchema> ListIterator; + + /*! Constructs empty index schema object + that is assigned to \a table, and will be owned by this table. + Any fields added with addField() won't be owned by index, + but by its table. Do not forget to add these fields to table, + because adding these to IndexSchema is not enough. + */ + IndexSchema(TableSchema *tableSchema); + + /*! Copy constructor. Copies all attributes from index \a idx, and + fields assigned with it but the fields are taken (by name) from + \a parentTable, not from \a idx itself, so it's possible to copy of index + for a copy of table. + + To copy an index within the same table it's enough to call: + \code + new IndexSchema(idx, *idx.table()); + \endcode + @todo All relationships should be also copied + */ + IndexSchema(const IndexSchema& idx, TableSchema& parentTable); + + /*! Destroys the index. Field objects are not deleted. + All Relationship objects listed in masterRelationships() list + are destroyed (these are also detached from + detail-side indices before destruction). + Relationship objects listed in detailsRelationships() are not touched. */ + virtual ~IndexSchema(); + + /*! Adds field at the end of field list. + Field will not be owned by index. Field must belong to a table + the index is bulit on, otherwise field couldn't be added. */ + virtual FieldList& addField(Field *field); + + /*! \return table that index is defined for. */ + TableSchema* table() const; + + /*! \return list of relationships from the table (of this index), + i.e. any such relationship in which this table is at 'master' side. + See Relationship class documentation for more information. + All objects listed here will be automatically destroyed on this IndexSchema object destruction. */ + Relationship::List* masterRelationships() { return &m_master_rels; } + + /*! \return list of relationships to the table (of this index), + i.e. any such relationship in which this table is at 'details' side. + See Relationship class documentation for more information. */ + Relationship::List* detailsRelationships() { return &m_details_rels; } + + /*! Attaches relationship definition \a rel to this IndexSchema object. + If \a rel relationship has this IndexSchema defined at the master-side, + \a rel is added to the list of master relationships (available with masterRelationships()). + If \a rel relationship has this IndexSchema defined at the details-side, + \a rel is added to the list of details relationships (available with detailsRelationships()). + For the former case, attached \a rel object is now owned by this IndexSchema object. + + Note: call detachRelationship() for IndexSchema object that \a rel + was previously attached to, if any. */ + void attachRelationship(Relationship *rel); + + /*! Detaches relationship definition \a rel for this IndexSchema object + from the list of master relationships (available with masterRelationships()), + or from details relationships list, depending for which side of the relationship + is this IndexSchem object assigned. + + Note: If \a rel was detached from masterRelationships() list, + this object now has no parent, so you need to attach it to somewhere or destruct it. + */ + void detachRelationship(Relationship *rel); + + /*! \return true if index is auto-generated. + Auto-generated index is one-field index + that was automatically generated + for CREATE TABLE statement when the field has + UNIQUE or PRIMARY KEY constraint enabled. + + Any newly created IndexSchema object + has this flag set to false. + + This flag is handled internally by TableSchema. + It can be usable for GUI application if we do not + want display implicity/auto generated indices + on the indices list or we if want to show these + indices to the user in a special way. + */ + bool isAutoGenerated() const; + + /*! \return true if this index is primary key of its table. + This can be one or multifield. */ + bool isPrimaryKey() const; + + /*! Sets PRIMARY KEY flag. \sa isPrimary(). + Note: Setting PRIMARY KEY on (true), + UNIQUE flag will be also implicity set. */ + void setPrimaryKey(bool set); + + /*! \return true if this is unique index. + This can be one or multifield. */ + bool isUnique() const; + + /*! Sets UNIQUE flag. \sa isUnique(). + Note: Setting UNIQUE off (false), PRIMARY KEY flag will + be also implicity set off, because this UNIQUE + is the requirement for PRIMARY KEYS. */ + void setUnique(bool set); + + /*! \return String for debugging purposes. */ + virtual QString debugString(); + protected: + + /*! Internal constructor for convenience. + Constructs a new index schema object + that is assigned, and adds one \a field to it. + The field must be assigned to a table. + This results in the implicit index that is usually used interanlly + to declare foreign keys, used in relationships. + */ +// IndexSchema(Field* singleField); + + /*! Sets auto-generated flag. This method should be called only + from TableSchema code + \sa isAutoGenerated(). */ + void setAutoGenerated(bool set); + + /*! If \a set is true, declares that the index defines a foreign key, + created implicity for Relationship object. Setting this to true, implies + clearing 'primary key', 'unique' and 'auto generated' flags. + If this index contains just single field, it's 'foreign field' + flag will be set to true as well. */ + void setForeignKey(bool set); + + /*! Internal version of attachRelationship(). If \a ownedByMaster is true, + attached \a rel object will be owned by this index. */ + void attachRelationship(Relationship *rel, bool ownedByMaster); + + TableSchema *m_tableSchema; //! table on that index is built + + /*! a list of master relationships for the table (of this index), + this index is a master key for these relationships + and therefore - owner of these */ + + Relationship::List m_master_owned_rels; + + /*! a list of master relationships that are not owned by this schema */ + Relationship::List m_master_rels; + + /*! a list of relationships to table (of this index) */ + Relationship::List m_details_rels; + + bool m_primary : 1; + bool m_unique : 1; + bool m_isAutoGenerated : 1; + bool m_isForeignKey : 1; + + friend class Connection; + friend class TableSchema; + friend class QuerySchema; + friend class Relationship; +}; + +} //namespace KexiDB + +#endif |