[KLF Application][KLF Tools][KLF Backend][KLF Home]
KLatexFormula Project
klflibdbengine.h
Go to the documentation of this file.
1 /***************************************************************************
2  * file klflibdbengine.h
3  * This file is part of the KLatexFormula Project.
4  * Copyright (C) 2011 by Philippe Faist
5  * philippe.faist at bluewin.ch
6  * *
7  * This program is free software; you can redistribute it and/or modify *
8  * it under the terms of the GNU General Public License as published by *
9  * the Free Software Foundation; either version 2 of the License, or *
10  * (at your option) any later version. *
11  * *
12  * This program is distributed in the hope that it will be useful, *
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15  * GNU General Public License for more details. *
16  * *
17  * You should have received a copy of the GNU General Public License *
18  * along with this program; if not, write to the *
19  * Free Software Foundation, Inc., *
20  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
21  ***************************************************************************/
22 /* $Id: klflibdbengine.h 603 2011-02-26 23:14:55Z phfaist $ */
23 
24 #ifndef KLFLIBDBENGINE_H
25 #define KLFLIBDBENGINE_H
26 
27 #include <QSqlDatabase>
28 #include <QSqlQuery>
29 
30 #include <klfdefs.h>
31 #include <klflib.h>
32 #include <klflibview.h> // KLFLibLocalFileSchemeGuesser
33 
35 
40 class KLF_EXPORT KLFLibDBConnectionClassUser {
41 public:
43  virtual ~KLFLibDBConnectionClassUser();
44 
45  inline bool autoDisconnectDB() const { return pAutoDisconnectDB; }
46  inline void setAutoDisconnectDB(bool autodisconnectDB) { pAutoDisconnectDB = autodisconnectDB; }
47  inline QString dbConnectionName() const { return pDBConnectionName; }
48  inline void setDBConnectionName(const QString& name) { pDBConnectionName = name; }
49 
50 protected:
53 };
54 
55 
57 
73 {
74  Q_OBJECT
75 
76 public:
83  static KLFLibDBEngine * openUrl(const QUrl& url, QObject *parent = NULL);
84 
96  static KLFLibDBEngine * createSqlite(const QString& fileName, const QString& subresourcename,
97  const QString& subresourcetitle, QObject *parent = NULL);
98 
99 
102  virtual ~KLFLibDBEngine();
103 
104  virtual uint compareUrlTo(const QUrl& other, uint interestFlags = 0xfffffff) const;
105 
106  virtual bool compareDefaultSubResourceEquals(const QString& subResourceName) const;
107 
108  virtual bool canModifyData(const QString& subRes, ModifyType modifytype) const;
109  virtual bool canModifyProp(int propid) const;
110  virtual bool canRegisterProperty(const QString& propName) const;
111 
114  virtual bool validDatabase() const;
116  virtual void setDatabase(const QSqlDatabase& db_connection);
117 
118 
119  virtual QList<KLFLib::entryId> allIds(const QString& subResource);
120  virtual bool hasEntry(const QString&, entryId id);
121  virtual QList<KLFLibEntryWithId> entries(const QString&, const QList<KLFLib::entryId>& idList,
122  const QList<int>& wantedEntryProperties = QList<int>());
123 
124  virtual int query(const QString& subResource, const Query& query, QueryResult *result);
125  virtual QList<QVariant> queryValues(const QString& subResource, int entryPropId);
126 
127  virtual KLFLibEntry entry(const QString& subRes, entryId id);
128  virtual QList<KLFLibEntryWithId> allEntries(const QString& subRes,
129  const QList<int>& wantedEntryProperties = QList<int>());
130 
131  virtual bool canCreateSubResource() const;
132  virtual bool canRenameSubResource() const { return false; }
133  virtual bool canDeleteSubResource(const QString& subResource) const;
134 
135  virtual QVariant subResourceProperty(const QString& subResource, int propId) const;
136 
138  { return QList<int>() << SubResPropTitle << SubResPropViewType << SubResPropLocked; }
139 
140  virtual bool hasSubResource(const QString& subRes) const;
141  virtual QStringList subResourceList() const;
142 
143 public slots:
144 
145  virtual bool createSubResource(const QString& subResource, const QString& subResourceTitle);
146  virtual bool deleteSubResource(const QString& subResource);
147 
148  virtual QList<entryId> insertEntries(const QString& subRes, const KLFLibEntryList& entries);
149  virtual bool changeEntries(const QString& subRes, const QList<entryId>& idlist,
150  const QList<int>& properties, const QList<QVariant>& values);
151  virtual bool deleteEntries(const QString& subRes, const QList<entryId>& idlist);
152 
153  virtual bool saveTo(const QUrl& newPath);
154 
155  virtual bool setSubResourceProperty(const QString& subResource, int propId, const QVariant& value);
156 
157 protected:
158  virtual bool saveResourceProperty(int propId, const QVariant& value);
159 
160 private slots:
163  void resourcePropertyUpdate(int propId);
166  void subResourcePropertyUpdate(const QString& subResource, int propId);
167 
169 
170  void readResourceProperty(int propId);
171 
172  void readDbMetaInfo();
173 
174  void readAvailColumns(const QString& subResource);
175 
176 private:
177  KLFLibDBEngine(const QSqlDatabase& db, bool autoDisconnectDB, const QUrl& url,
178  bool accessshared, QObject *parent);
179 
180  QSqlDatabase pDB;
181 
182  int pDBVersion;
183 
185  QMap<QString,QStringList> pDBAvailColumns;
186 
187  QStringList columnNameList(const QString& subResource, const QList<int>& entryPropList,
188  bool wantIdFirst = true);
189  QStringList detectEntryColumns(const QSqlQuery& q);
190  KLFLibEntry readEntry(const QSqlQuery& q, const QStringList& columns);
191 
192  QVariant dbMakeEntryPropertyValue(const QVariant& entryValue, int entryPropertyId);
193  QVariant dbReadEntryPropertyValue(const QVariant& dbdata, int entryPropertyId);
194 
195  QVariant convertVariantToDBData(const QVariant& value) const;
196  QVariant convertVariantFromDBData(const QVariant& dbdata) const;
197  QVariant encaps(const char *ts, const QString& data) const;
198  QVariant encaps(const char *ts, const QByteArray& data) const;
199  QVariant decaps(const QString& string) const;
200  QVariant decaps(const QByteArray& data) const;
201 
202  bool ensureDataTableColumnsExist(const QString& subResource, const QStringList& columnList);
205  bool ensureDataTableColumnsExist(const QString& subResource);
206 
208  static bool initFreshDatabase(QSqlDatabase db);
211  static bool createFreshDataTable(QSqlDatabase db, const QString& subresource);
212 
213  bool tableExists(const QString& subResource) const;
214 
215  static QString dataTableName(const QString& subResource);
216  static QString quotedDataTableName(const QString& subResource);
217 
218  static QMap<QString,KLFLibDBEnginePropertyChangeNotifier*> pDBPropertyNotifiers;
219  static KLFLibDBEnginePropertyChangeNotifier *dbPropertyNotifierInstance(const QString& dbname);
220 };
221 
222 
223 
225 {
226 public:
228 
229  QString guessScheme(const QString& fileName) const;
230 };
231 
232 
235 {
236  Q_OBJECT
237 public:
238  KLFLibDBEngineFactory(QObject *parent = NULL);
240 
241  virtual QStringList supportedTypes() const;
242  virtual QString schemeTitle(const QString& scheme) const ;
243  virtual uint schemeFunctions(const QString& scheme) const ;
244 
245  virtual QString correspondingWidgetType(const QString& scheme) const;
246  virtual KLFLibResourceEngine *openResource(const QUrl& location, QObject *parent = NULL);
247 
248  virtual KLFLibResourceEngine *createResource(const QString& scheme, const Parameters& parameters,
249  QObject *parent = NULL);
250 };
251 
252 
253 
254 #endif
virtual bool saveTo(const QUrl &newPath)
Definition: klflib.cpp:704
virtual uint schemeFunctions(const QString &scheme) const
What this factory is capable of doing.
Definition: klflib.cpp:1158
virtual ~KLFLibDBEngineFactory()
virtual bool createSubResource(const QString &subResource, const QString &subResourceTitle)
Create a new sub-resource.
Definition: klflib.cpp:599
virtual QVariant subResourceProperty(const QString &subResource, int propId) const
Definition: klflib.cpp:528
A structure that describes a query for query()
Definition: klflib.h:933
virtual uint compareUrlTo(const QUrl &other, uint interestFlags=0xfffffff) const =0
Compare this resource's URL with another's.
QString dbConnectionName() const
KLFLib::entryId entryId
Definition: klflib.h:444
virtual QList< KLFLibEntryWithId > entries(const QString &subResource, const QList< KLFLib::entryId > &idList, const QList< int > &wantedEntryProperties=QList< int >())=0
query multiple entries in this resource
virtual bool canRegisterProperty(const QString &propName) const
Definition: klflib.cpp:491
virtual bool hasEntry(const QString &subResource, entryId id)=0
query the existence of an entry in this resource
virtual bool setSubResourceProperty(const QString &subResource, int propId, const QVariant &value)
Definition: klflib.cpp:593
virtual KLFLibResourceEngine * openResource(const QUrl &location, QObject *parent=NULL)=0
virtual KLFLibEntry entry(const QString &subResource, entryId id)=0
query an entry in this resource
virtual QList< QVariant > queryValues(const QString &subResource, int entryPropId)=0
List all distinct values that a property takes in all entries.
A utility class to automatically disconnect a database after use.
virtual bool deleteSubResource(const QString &subResource)
Definition: klflib.cpp:612
virtual QStringList supportedTypes() const =0
A list of supported URL schemes this factory can open.
KLFLibDBLocalFileSchemeGuesser(QObject *parent)
virtual bool compareDefaultSubResourceEquals(const QString &subResourceName) const
Compare our sub-resource name to another.
Definition: klflib.cpp:509
virtual QList< KLFLib::entryId > allIds()
Returns all IDs in this resource (and the default sub-resource)
Definition: klflib.cpp:642
virtual int query(const QString &subResource, const Query &query, QueryResult *result)=0
query entries in this resource with specified property values
void setDBConnectionName(const QString &name)
virtual bool saveResourceProperty(int propId, const QVariant &value)=0
Save a resource property to the backend resource data.
virtual KLFLibResourceEngine * createResource(const QString &scheme, const Parameters &parameters, QObject *parent=NULL)
Create a new resource of given type and parameters.
Definition: klflib.cpp:1178
virtual bool canCreateSubResource() const
Definition: klflib.cpp:514
virtual bool deleteEntries(const QString &subResource, const QList< entryId > &idlist)=0
Delete some entries in this resource.
virtual QList< int > subResourcePropertyIdList() const
virtual bool canModifyData(const QString &subResource, ModifyType modifytype) const
Definition: klflib.cpp:472
virtual QList< entryId > insertEntries(const QString &subResource, const KLFLibEntryList &entrylist)=0
Insert new entries in this resource.
virtual QStringList subResourceList() const
Definition: klflib.h:722
void setAutoDisconnectDB(bool autodisconnectDB)
virtual bool canRenameSubResource() const
Interface for guessing file schemes.
Definition: klflibview.h:1096
virtual QString correspondingWidgetType(const QString &scheme) const =0
A structure that will hold the result of a query() query.
Definition: klflib.h:970
An entry (single formula) in the library.
Definition: klflib.h:55
virtual bool hasSubResource(const QString &subResource) const
Definition: klflib.cpp:496
virtual bool changeEntries(const QString &subResource, const QList< entryId > &idlist, const QList< int > &properties, const QList< QVariant > &values)=0
Change some entries in this resource.
virtual QList< KLFLibEntryWithId > allEntries(const QString &subResource, const QList< int > &wantedEntryProperties=QList< int >())=0
query all entries in this resource
An abstract resource engine.
Definition: klflib.h:440
virtual bool canDeleteSubResource(const QString &subResource) const
Definition: klflib.cpp:523
virtual bool canModifyProp(int propId) const
Definition: klflib.cpp:485
virtual QString guessScheme(const QString &fileName) const =0
Guess the appropriate scheme for handling the given file.
virtual QString schemeTitle(const QString &scheme) const =0

Generated by doxygen 1.8.6