diff options
author | jasplin <qt-info@nokia.com> | 2010-02-03 10:53:27 +0100 |
---|---|---|
committer | jasplin <qt-info@nokia.com> | 2010-02-03 10:53:27 +0100 |
commit | 380ec39f9865f1ab2abe4ae0539b3b84cb84304c (patch) | |
tree | 3cc397909caa3f96a5ca51736a15f648d83a41f3 /src/bmserver | |
parent | 9375dc74f7e1df769e8bb61ca814462af335816e (diff) |
Restructured the database schema.
The most important change of this patch
is a restructring of the database schema
in order to better support current
and future use cases.
In particular, the 'result' table has been reduced
in size (which is important since this table is
the one that will grow on a regular basis), and
a 'bmcontext' table has been introduced as an extra
structural level that is expected to make certain
queries faster than they would have otherwise been
(due to reduced need for complex join expressions
etc.).
Diffstat (limited to 'src/bmserver')
-rw-r--r-- | src/bmserver/main.cpp | 81 |
1 files changed, 42 insertions, 39 deletions
diff --git a/src/bmserver/main.cpp b/src/bmserver/main.cpp index ed042f8..a5431b5 100644 --- a/src/bmserver/main.cpp +++ b/src/bmserver/main.cpp @@ -47,13 +47,6 @@ static bool initDatabase(const QString &dbfile, QString *error) // *** Create tables *** - // benchmark - ok = query.exec( - "CREATE TABLE benchmark(id INTEGER PRIMARY KEY AUTOINCREMENT" - ", testCase TEXT NOT NULL, testFunction TEXT NOT NULL, dataTag TEXT NOT NULL" - ", UNIQUE(testCase, testFunction, dataTag));"); - Q_ASSERT(ok); - // metric ok = query.exec( "CREATE TABLE metric(id INTEGER PRIMARY KEY AUTOINCREMENT" @@ -82,6 +75,31 @@ static bool initDatabase(const QString &dbfile, QString *error) ", UNIQUE(gitRepo, gitBranch));"); Q_ASSERT(ok); + // context + ok = query.exec( + "CREATE TABLE context(id INTEGER PRIMARY KEY AUTOINCREMENT" + ", metricId INTEGER REFERENCES metric(id)" + ", platformId INTEGER REFERENCES platform(id)" + ", hostId INTEGER REFERENCES host(id)" + ", branchId INTEGER REFERENCES branch(id)" + ", UNIQUE(metricId, platformId, hostId, branchId));"); + Q_ASSERT(ok); + + // benchmark + ok = query.exec( + "CREATE TABLE benchmark(id INTEGER PRIMARY KEY AUTOINCREMENT" + ", testCase TEXT NOT NULL, testFunction TEXT NOT NULL, dataTag TEXT NOT NULL" + ", UNIQUE(testCase, testFunction, dataTag));"); + Q_ASSERT(ok); + + // bmcontext + ok = query.exec( + "CREATE TABLE bmcontext(id INTEGER PRIMARY KEY AUTOINCREMENT" + ", contextId INTEGER REFERENCES context(id)" + ", benchmarkId INTEGER REFERENCES benchmark(id)" + ", UNIQUE(contextId, benchmarkId));"); + Q_ASSERT(ok); + // snapshot ok = query.exec( "CREATE TABLE snapshot(id INTEGER PRIMARY KEY AUTOINCREMENT" @@ -92,67 +110,52 @@ static bool initDatabase(const QString &dbfile, QString *error) // result ok = query.exec( "CREATE TABLE result(id INTEGER PRIMARY KEY AUTOINCREMENT" - ", benchmarkId INTEGER REFERENCES benchmark(id)" - ", metricId INTEGER REFERENCES metric(id)" - ", platformId INTEGER REFERENCES platform(id)" - ", hostId INTEGER REFERENCES host(id)" - ", branchId INTEGER REFERENCES branch(id)" + ", bmcontextId INTEGER REFERENCES bmcontext(id)" ", snapshotId INTEGER REFERENCES snapshot(id)" ", value REAL NOT NULL" - ", UNIQUE(benchmarkId, metricId, platformId, hostId, branchId, snapshotId));"); - Q_ASSERT(ok); - - // context - ok = query.exec( - "CREATE TABLE context(id INTEGER PRIMARY KEY AUTOINCREMENT" - ", metricId INTEGER REFERENCES metric(id)" - ", platformId INTEGER REFERENCES platform(id)" - ", hostId INTEGER REFERENCES host(id)" - ", branchId INTEGER REFERENCES branch(id)" - ", UNIQUE(metricId, platformId, hostId, branchId));"); + ", UNIQUE(bmcontextId, snapshotId));"); Q_ASSERT(ok); - // *** Create indexes *** - ok = query.exec("CREATE INDEX index_result_benchmarkId ON result(benchmarkId);"); - Q_ASSERT(ok); - - ok = query.exec("CREATE INDEX index_result_metricId ON result(metricId);"); + ok = query.exec("CREATE INDEX index_metric_name ON metric(name);"); Q_ASSERT(ok); - ok = query.exec("CREATE INDEX index_result_platformId ON result(platformId);"); + ok = query.exec("CREATE INDEX index_platform_name ON platform(name);"); Q_ASSERT(ok); - ok = query.exec("CREATE INDEX index_result_hostId ON result(hostId);"); + ok = query.exec("CREATE INDEX index_host_name ON host(name);"); Q_ASSERT(ok); - ok = query.exec("CREATE INDEX index_result_branchId ON result(branchId);"); + ok = query.exec("CREATE INDEX index_branch_name ON branch(gitRepo, gitBranch);"); Q_ASSERT(ok); - ok = query.exec("CREATE INDEX index_result_snapshotId ON result(snapshotId);"); + ok = query.exec( + "CREATE INDEX index_context_all ON context(metricId, platformId, hostId, branchId);"); Q_ASSERT(ok); ok = query.exec( "CREATE INDEX index_benchmark_name ON benchmark(testCase, testFunction, dataTag);"); Q_ASSERT(ok); - ok = query.exec("CREATE INDEX index_metric_name ON metric(name);"); + ok = query.exec("CREATE INDEX index_bmcontext_contextId ON bmcontext(contextId);"); Q_ASSERT(ok); - ok = query.exec("CREATE INDEX index_platform_name ON platform(name);"); + ok = query.exec("CREATE INDEX index_bmcontext_benchmarkId ON bmcontext(benchmarkId);"); Q_ASSERT(ok); - ok = query.exec("CREATE INDEX index_host_name ON host(name);"); + ok = query.exec("CREATE INDEX index_bmcontext_all ON bmcontext(contextId, benchmarkId);"); Q_ASSERT(ok); - ok = query.exec("CREATE INDEX index_branch_name ON branch(gitRepo, gitBranch);"); + ok = query.exec("CREATE INDEX index_snapshot_timestamp ON snapshot(timestamp);"); Q_ASSERT(ok); - ok = query.exec("CREATE INDEX index_snapshot_timestamp ON snapshot(timestamp);"); + ok = query.exec("CREATE INDEX index_result_snapshotId ON result(snapshotId);"); Q_ASSERT(ok); - ok = query.exec( - "CREATE INDEX index_context_all ON context(metricId, platformId, hostId, branchId);"); + ok = query.exec("CREATE INDEX index_result_bmcontextId ON result(bmcontextId);"); + Q_ASSERT(ok); + + ok = query.exec("CREATE INDEX index_result_all ON result(snapshotId, bmcontextId);"); Q_ASSERT(ok); return true; |