diff options
| author | 2015-04-19 22:30:43 -0400 | |
|---|---|---|
| committer | 2015-04-19 22:30:43 -0400 | |
| commit | 094918f048c81474b22f9ba2940c96dc4033d753 (patch) | |
| tree | 2b89c77ad7dc9c55e9ba383f23f9f25b82df358e /SQLiteStudio3/coreSQLiteStudio/schemaresolver.h | |
| parent | 640fff60ceecde402131937dddb3458f7a003e9c (diff) | |
| parent | a308f430f694423064ebc86fd0506c8c6fdb3d93 (diff) | |
Merge tag 'upstream/3.0.5'
Upstream version 3.0.5
# gpg: Signature made Sun 19 Apr 2015 10:30:41 PM EDT using RSA key ID EBE9BD91
# gpg: Good signature from "Unit 193 <unit193@gmail.com>"
# gpg: aka "Unit 193 <unit193@ninthfloor.org>"
# gpg: aka "Unit 193 <unit193@ubuntu.com>"
# gpg: aka "Unit 193 <unit193@ninthfloor.com>"
Diffstat (limited to 'SQLiteStudio3/coreSQLiteStudio/schemaresolver.h')
| -rw-r--r-- | SQLiteStudio3/coreSQLiteStudio/schemaresolver.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/SQLiteStudio3/coreSQLiteStudio/schemaresolver.h b/SQLiteStudio3/coreSQLiteStudio/schemaresolver.h index 5316f5a..5d325d8 100644 --- a/SQLiteStudio3/coreSQLiteStudio/schemaresolver.h +++ b/SQLiteStudio3/coreSQLiteStudio/schemaresolver.h @@ -14,6 +14,7 @@ #include "db/sqlquery.h" #include "db/db.h" #include "common/strhash.h" +#include "common/expiringcache.h" #include <QStringList> class SqliteCreateTable; @@ -38,6 +39,24 @@ class API_EXPORT SchemaResolver QString ddl; }; + struct ObjectCacheKey + { + enum Type + { + OBJECT_NAMES, + OBJECT_DETAILS, + OBJECT_DDL + }; + + ObjectCacheKey(Type type, Db* db, const QString& value1 = QString(), const QString& value2 = QString(), const QString& value3 = QString()); + + Type type; + Db* db; + QString value1; + QString value2; + QString value3; + }; + explicit SchemaResolver(Db* db); virtual ~SchemaResolver(); @@ -164,8 +183,12 @@ class API_EXPORT SchemaResolver static QString objectTypeToString(ObjectType type); static ObjectType stringToObjectType(const QString& type); + static void staticInit(); + + static_char* USE_SCHEMA_CACHING = "useSchemaCaching"; private: + bool usesCache(); SqliteQueryPtr getParsedDdl(const QString& ddl); SqliteCreateTablePtr virtualTableAsRegularTable(const QString& database, const QString& table); StrHash< QStringList> getGroupedObjects(const QString &database, const QStringList& inputList, SqliteQueryType type); @@ -180,8 +203,13 @@ class API_EXPORT SchemaResolver Parser* parser = nullptr; bool ignoreSystemObjects = false; Db::Flags dbFlags; + + static ExpiringCache<ObjectCacheKey,QVariant> cache; }; +int qHash(const SchemaResolver::ObjectCacheKey& key); +int operator==(const SchemaResolver::ObjectCacheKey& k1, const SchemaResolver::ObjectCacheKey& k2); + template <class T> StrHash<QSharedPointer<T>> SchemaResolver::getAllParsedObjectsForType(const QString& database, const QString& type) { |
