summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhaslersn <sebastian.hasler@gmx.net>2019-07-06 17:56:42 +0200
committerhaslersn <sebastian.hasler@gmx.net>2019-07-08 00:39:02 +0200
commit1dae51bbba6ea3edc6550c8954353cea37dda88f (patch)
tree8b484e36d614b853c47d973d0da0766069a08e07
parent2777ca1413361bbc78f22b16ec1e62e30a119a7c (diff)
enginelibrary: Use 1 db connection handling both sqlite files
This is achieved using the `ATTACH` command. See `djinterop/enginelibrary/el_storage.cpp`.
-rw-r--r--src/djinterop/enginelibrary.cpp14
-rw-r--r--src/djinterop/enginelibrary/el_crate_impl.cpp61
-rw-r--r--src/djinterop/enginelibrary/el_database_impl.cpp87
-rw-r--r--src/djinterop/enginelibrary/el_storage.cpp16
-rw-r--r--src/djinterop/enginelibrary/el_storage.hpp11
-rw-r--r--src/djinterop/enginelibrary/el_track_impl.cpp75
-rw-r--r--src/djinterop/enginelibrary/el_track_impl.hpp33
-rw-r--r--src/djinterop/enginelibrary/schema_1_6_0.cpp198
-rw-r--r--src/djinterop/enginelibrary/schema_1_7_1.cpp212
-rw-r--r--test/enginelibrary/schema_test.cpp12
10 files changed, 362 insertions, 357 deletions
diff --git a/src/djinterop/enginelibrary.cpp b/src/djinterop/enginelibrary.cpp
index 373344d..f0253d6 100644
--- a/src/djinterop/enginelibrary.cpp
+++ b/src/djinterop/enginelibrary.cpp
@@ -55,13 +55,13 @@ database make_database(
"Failed to create directory to hold new database"};
}
}
- sqlite::database m_db{music_db_path};
- create_music_schema(m_db, default_version);
- verify_music_schema(m_db);
- sqlite::database p_db{perfdata_db_path};
- create_performance_schema(p_db, default_version);
- verify_performance_schema(p_db);
- break;
+ auto storage = std::make_shared<el_storage>(std::move(directory));
+ create_music_schema(storage->db, default_version);
+ verify_music_schema(storage->db);
+ create_performance_schema(storage->db, default_version);
+ verify_performance_schema(storage->db);
+ return database{
+ std::make_shared<el_database_impl>(std::move(storage))};
}
default: // both exist, so we do nothing
break;
diff --git a/src/djinterop/enginelibrary/el_crate_impl.cpp b/src/djinterop/enginelibrary/el_crate_impl.cpp
index 4ea8934..f755790 100644
--- a/src/djinterop/enginelibrary/el_crate_impl.cpp
+++ b/src/djinterop/enginelibrary/el_crate_impl.cpp
@@ -38,25 +38,24 @@ el_crate_impl::el_crate_impl(std::shared_ptr<el_storage> storage, int64_t id)
void el_crate_impl::add_track(track tr)
{
- storage_->music_db << "BEGIN";
+ storage_->db << "BEGIN";
- storage_->music_db
+ storage_->db
<< "DELETE FROM CrateTrackList WHERE crateId = ? AND trackId = ?"
<< id() << tr.id();
- storage_->music_db
+ storage_->db
<< "INSERT INTO CrateTrackList (crateId, trackId) VALUES (?, ?)" << id()
<< tr.id();
- storage_->music_db << "COMMIT";
+ storage_->db << "COMMIT";
}
std::vector<crate> el_crate_impl::children()
{
std::vector<crate> results;
- storage_->music_db
- << "SELECT crateIdChild FROM CrateHierarchy WHERE crateId = ?"
- << id() >>
+ storage_->db << "SELECT crateIdChild FROM CrateHierarchy WHERE crateId = ?"
+ << id() >>
[&](int64_t crate_id_child) {
results.emplace_back(
std::make_shared<el_crate_impl>(storage_, crate_id_child));
@@ -66,8 +65,7 @@ std::vector<crate> el_crate_impl::children()
void el_crate_impl::clear_tracks()
{
- storage_->music_db << "DELETE FROM CrateTrackList WHERE crateId = ?"
- << id();
+ storage_->db << "DELETE FROM CrateTrackList WHERE crateId = ?" << id();
}
database el_crate_impl::db()
@@ -78,7 +76,7 @@ database el_crate_impl::db()
std::vector<crate> el_crate_impl::descendants()
{
std::vector<crate> results;
- storage_->music_db
+ storage_->db
<< "SELECT crateOriginId FROM CrateParentList WHERE crateParentId "
"= ? AND crateOriginId <> crateParentId"
<< id() >>
@@ -92,7 +90,7 @@ std::vector<crate> el_crate_impl::descendants()
bool el_crate_impl::is_valid()
{
bool valid = false;
- storage_->music_db << "SELECT COUNT(*) FROM Crate WHERE id = ?" << id() >>
+ storage_->db << "SELECT COUNT(*) FROM Crate WHERE id = ?" << id() >>
[&](int count) {
if (count == 1)
{
@@ -110,7 +108,7 @@ bool el_crate_impl::is_valid()
std::string el_crate_impl::name()
{
boost::optional<std::string> name;
- storage_->music_db << "SELECT title FROM Crate WHERE id = ?" << id() >>
+ storage_->db << "SELECT title FROM Crate WHERE id = ?" << id() >>
[&](std::string title) {
if (!name)
{
@@ -132,7 +130,7 @@ std::string el_crate_impl::name()
boost::optional<crate> el_crate_impl::parent()
{
boost::optional<crate> parent;
- storage_->music_db
+ storage_->db
<< "SELECT crateParentId FROM CrateParentList WHERE crateOriginId "
"= ? AND crateParentId <> crateOriginId"
<< id() >>
@@ -153,18 +151,18 @@ boost::optional<crate> el_crate_impl::parent()
void el_crate_impl::remove_track(track tr)
{
- storage_->music_db
+ storage_->db
<< "DELETE FROM CrateTrackList WHERE crateId = ? AND trackId = ?"
<< id() << tr.id();
}
void el_crate_impl::set_name(boost::string_view name)
{
- storage_->music_db << "BEGIN";
+ storage_->db << "BEGIN";
// obtain parent's `path`
std::string parent_path;
- storage_->music_db
+ storage_->db
<< "SELECT path FROM Crate c JOIN CrateParentList cpl ON c.id = "
"cpl.crateParentId WHERE cpl.crateOriginId = ? AND "
"cpl.crateOriginId <> cpl.crateParentId"
@@ -183,49 +181,48 @@ void el_crate_impl::set_name(boost::string_view name)
// update name and path
std::string path = std::move(parent_path) + name.data() + ';';
- storage_->music_db << "UPDATE Crate SET title = ?, path = ? WHERE id = ?"
- << name.data() << path << id();
+ storage_->db << "UPDATE Crate SET title = ?, path = ? WHERE id = ?"
+ << name.data() << path << id();
// call the lambda in order to update the path of direct children
for (crate cr : children())
{
- update_path(storage_->music_db, cr, path);
+ update_path(storage_->db, cr, path);
}
- storage_->music_db << "COMMIT";
+ storage_->db << "COMMIT";
}
void el_crate_impl::set_parent(boost::optional<crate> parent)
{
- storage_->music_db << "BEGIN";
+ storage_->db << "BEGIN";
- storage_->music_db << "DELETE FROM CrateParentList WHERE crateOriginId = ?"
- << id();
+ storage_->db << "DELETE FROM CrateParentList WHERE crateOriginId = ?"
+ << id();
- storage_->music_db << "INSERT INTO CrateParentList (crateOriginId, "
- "crateParentId) VALUES (?, ?)"
- << id() << (parent ? parent->id() : id());
+ storage_->db << "INSERT INTO CrateParentList (crateOriginId, "
+ "crateParentId) VALUES (?, ?)"
+ << id() << (parent ? parent->id() : id());
- storage_->music_db << "DELETE FROM CrateHierarchy WHERE crateIdChild = ?"
- << id();
+ storage_->db << "DELETE FROM CrateHierarchy WHERE crateIdChild = ?" << id();
if (parent)
{
- storage_->music_db
+ storage_->db
<< "INSERT INTO CrateHierarchy (crateId, crateIdChild) SELECT "
"crateId, ? FROM CrateHierarchy WHERE crateIdChild = ? UNION "
"SELECT ? AS crateId, ? AS crateIdChild"
<< id() << parent->id() << parent->id() << id();
}
- storage_->music_db << "COMMIT";
+ storage_->db << "COMMIT";
}
std::vector<track> el_crate_impl::tracks()
{
std::vector<track> results;
- storage_->music_db << "SELECT trackId FROM CrateTrackList WHERE crateId = ?"
- << id() >>
+ storage_->db << "SELECT trackId FROM CrateTrackList WHERE crateId = ?"
+ << id() >>
[&](int64_t track_id) {
results.emplace_back(
std::make_shared<el_track_impl>(storage_, track_id));
diff --git a/src/djinterop/enginelibrary/el_database_impl.cpp b/src/djinterop/enginelibrary/el_database_impl.cpp
index 8dfb6d7..04e57de 100644
--- a/src/djinterop/enginelibrary/el_database_impl.cpp
+++ b/src/djinterop/enginelibrary/el_database_impl.cpp
@@ -29,7 +29,7 @@ el_database_impl::el_database_impl(std::shared_ptr<el_storage> storage)
boost::optional<crate> el_database_impl::crate_by_id(int64_t id)
{
boost::optional<crate> cr;
- storage_->music_db << "SELECT COUNT(*) FROM Crate WHERE id = ?" << id >>
+ storage_->db << "SELECT COUNT(*) FROM Crate WHERE id = ?" << id >>
[&](int64_t count) {
if (count == 1)
{
@@ -47,19 +47,17 @@ boost::optional<crate> el_database_impl::crate_by_id(int64_t id)
std::vector<crate> el_database_impl::crates()
{
std::vector<crate> results;
- storage_->music_db << "SELECT id FROM Crate ORDER BY id" >>
- [&](int64_t id) {
- results.push_back(
- crate{std::make_shared<el_crate_impl>(storage_, id)});
- };
+ storage_->db << "SELECT id FROM Crate ORDER BY id" >> [&](int64_t id) {
+ results.push_back(crate{std::make_shared<el_crate_impl>(storage_, id)});
+ };
return results;
}
std::vector<crate> el_database_impl::crates_by_name(boost::string_view name)
{
std::vector<crate> results;
- storage_->music_db << "SELECT id FROM Crate WHERE title = ? ORDER BY id"
- << name.data() >>
+ storage_->db << "SELECT id FROM Crate WHERE title = ? ORDER BY id"
+ << name.data() >>
[&](int64_t id) {
results.push_back(
crate{std::make_shared<el_crate_impl>(storage_, id)});
@@ -69,18 +67,18 @@ std::vector<crate> el_database_impl::crates_by_name(boost::string_view name)
crate el_database_impl::create_crate(boost::string_view name)
{
- storage_->music_db << "BEGIN";
+ storage_->db << "BEGIN";
- storage_->music_db << "INSERT INTO Crate (title, path) VALUES (?, ?)"
- << name.data() << std::string{name} + ';';
+ storage_->db << "INSERT INTO Crate (title, path) VALUES (?, ?)"
+ << name.data() << std::string{name} + ';';
- int64_t id = storage_->music_db.last_insert_rowid();
+ int64_t id = storage_->db.last_insert_rowid();
- storage_->music_db << "INSERT INTO CrateParentList (crateOriginId, "
- "crateParentId) VALUES (?, ?)"
- << id << id;
+ storage_->db << "INSERT INTO CrateParentList (crateOriginId, "
+ "crateParentId) VALUES (?, ?)"
+ << id << id;
- storage_->music_db << "COMMIT";
+ storage_->db << "COMMIT";
return crate{std::make_shared<el_crate_impl>(storage_, id)};
}
@@ -92,29 +90,28 @@ track el_database_impl::create_track(boost::string_view relative_path)
auto filename = get_filename(relative_path);
- storage_->music_db << "BEGIN";
+ storage_->db << "BEGIN";
// Insert a new entry in the track table
- storage_->music_db << "INSERT INTO Track (path, filename, trackType, "
- "isExternalTrack, idAlbumArt) VALUES (?,?,?,?,?)"
- << relative_path.data() //
- << std::string{filename} //
- << 1 // trackType
- << 0 // isExternalTrack
- << 1; // idAlbumArt
+ storage_->db << "INSERT INTO Track (path, filename, trackType, "
+ "isExternalTrack, idAlbumArt) VALUES (?,?,?,?,?)"
+ << relative_path.data() //
+ << std::string{filename} //
+ << 1 // trackType
+ << 0 // isExternalTrack
+ << 1; // idAlbumArt
- auto id = storage_->music_db.last_insert_rowid();
+ auto id = storage_->db.last_insert_rowid();
if (version() >= version_1_7_1)
{
- storage_->music_db << "UPDATE Track SET pdbImportKey = 0 WHERE id = ?"
- << id;
+ storage_->db << "UPDATE Track SET pdbImportKey = 0 WHERE id = ?" << id;
}
{
auto extension = get_file_extension(filename);
auto metadata_str_inserter =
- storage_->music_db
+ storage_->db
<< "REPLACE INTO MetaData (id, type, text) VALUES (?, ?, ?)";
for (int64_t type : {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 15, 16})
{
@@ -144,7 +141,7 @@ track el_database_impl::create_track(boost::string_view relative_path)
}
{
- auto metadata_int_inserter = storage_->music_db
+ auto metadata_int_inserter = storage_->db
<< "REPLACE INTO MetaDataInteger (id, "
"type, value) VALUES (?, ?, ?)";
for (int64_t type = 1; type <= 11 /* 12 */; ++type)
@@ -163,7 +160,7 @@ track el_database_impl::create_track(boost::string_view relative_path)
}
}
- storage_->music_db << "COMMIT";
+ storage_->db << "COMMIT";
return track{std::make_shared<el_track_impl>(storage_, id)};
}
@@ -181,20 +178,20 @@ bool el_database_impl::is_supported()
void el_database_impl::verify()
{
// Verify music schema
- verify_music_schema(storage_->music_db);
+ verify_music_schema(storage_->db);
// Verify performance schema
- verify_performance_schema(storage_->perfdata_db);
+ verify_performance_schema(storage_->db);
}
void el_database_impl::remove_crate(crate cr)
{
- storage_->music_db << "DELETE FROM Crate WHERE id = ?" << cr.id();
+ storage_->db << "DELETE FROM Crate WHERE id = ?" << cr.id();
}
void el_database_impl::remove_track(track tr)
{
- storage_->music_db << "DELETE FROM Track WHERE id = ?" << tr.id();
+ storage_->db << "DELETE FROM Track WHERE id = ?" << tr.id();
// All other references to the track should automatically be cleared by
// "ON DELETE CASCADE"
}
@@ -202,7 +199,7 @@ void el_database_impl::remove_track(track tr)
std::vector<crate> el_database_impl::root_crates()
{
std::vector<crate> results;
- storage_->music_db
+ storage_->db
<< "SELECT crateOriginId FROM CrateParentList WHERE crateParentId "
"= crateOriginId ORDER BY crateOriginId" >>
[&](int64_t id) {
@@ -215,7 +212,7 @@ std::vector<crate> el_database_impl::root_crates()
boost::optional<track> el_database_impl::track_by_id(int64_t id)
{
boost::optional<track> tr;
- storage_->music_db << "SELECT COUNT(*) FROM Track WHERE id = ?" << id >>
+ storage_->db << "SELECT COUNT(*) FROM Track WHERE id = ?" << id >>
[&](int64_t count) {
if (count == 1)
{
@@ -233,11 +230,9 @@ boost::optional<track> el_database_impl::track_by_id(int64_t id)
std::vector<track> el_database_impl::tracks()
{
std::vector<track> results;
- storage_->music_db << "SELECT id FROM Track ORDER BY id" >>
- [&](int64_t id) {
- results.push_back(
- track{std::make_shared<el_track_impl>(storage_, id)});
- };
+ storage_->db << "SELECT id FROM Track ORDER BY id" >> [&](int64_t id) {
+ results.push_back(track{std::make_shared<el_track_impl>(storage_, id)});
+ };
return results;
}
@@ -245,8 +240,8 @@ std::vector<track> el_database_impl::tracks_by_relative_path(
boost::string_view relative_path)
{
std::vector<track> results;
- storage_->music_db << "SELECT id FROM Track WHERE path = ? ORDER BY id"
- << relative_path.data() >>
+ storage_->db << "SELECT id FROM Track WHERE path = ? ORDER BY id"
+ << relative_path.data() >>
[&](int64_t id) {
results.push_back(
track{std::make_shared<el_track_impl>(storage_, id)});
@@ -257,15 +252,15 @@ std::vector<track> el_database_impl::tracks_by_relative_path(
std::string el_database_impl::uuid()
{
std::string uuid;
- storage_->music_db << "SELECT uuid FROM Information" >> uuid;
+ storage_->db << "SELECT uuid FROM Information" >> uuid;
return uuid;
}
semantic_version el_database_impl::version()
{
semantic_version version;
- storage_->music_db << "SELECT schemaVersionMajor, schemaVersionMinor, "
- "schemaVersionPatch FROM Information" >>
+ storage_->db << "SELECT schemaVersionMajor, schemaVersionMinor, "
+ "schemaVersionPatch FROM Information" >>
std::tie(version.maj, version.min, version.pat);
return version;
}
diff --git a/src/djinterop/enginelibrary/el_storage.cpp b/src/djinterop/enginelibrary/el_storage.cpp
index e69de29..2ede572 100644
--- a/src/djinterop/enginelibrary/el_storage.cpp
+++ b/src/djinterop/enginelibrary/el_storage.cpp
@@ -0,0 +1,16 @@
+#include <djinterop/enginelibrary/el_storage.hpp>
+
+namespace djinterop
+{
+namespace enginelibrary
+{
+el_storage::el_storage(std::string directory)
+ : directory{directory}, db{":memory:"}
+{
+ // TODO (haslersn): Should we check that directory is an absolute path?
+ db << "ATTACH ? as 'music'" << (directory + "/m.db");
+ db << "ATTACH ? as 'perfdata'" << (directory + "/p.db");
+}
+
+} // namespace enginelibrary
+} // namespace djinterop
diff --git a/src/djinterop/enginelibrary/el_storage.hpp b/src/djinterop/enginelibrary/el_storage.hpp
index ca828ed..0d4c652 100644
--- a/src/djinterop/enginelibrary/el_storage.hpp
+++ b/src/djinterop/enginelibrary/el_storage.hpp
@@ -11,17 +11,10 @@ namespace enginelibrary
class el_storage
{
public:
- el_storage(std::string directory)
- : directory{directory},
- music_db{directory + "/m.db"},
- perfdata_db{directory + "/p.db"}
- {
- // TODO (haslersn): Should we check that directory is an absolute path?
- }
+ el_storage(std::string directory);
std::string directory;
- sqlite::database music_db;
- sqlite::database perfdata_db;
+ sqlite::database db;
};
} // namespace enginelibrary
diff --git a/src/djinterop/enginelibrary/el_track_impl.cpp b/src/djinterop/enginelibrary/el_track_impl.cpp
index 5f9d589..3702080 100644
--- a/src/djinterop/enginelibrary/el_track_impl.cpp
+++ b/src/djinterop/enginelibrary/el_track_impl.cpp
@@ -49,9 +49,9 @@ boost::optional<std::string> el_track_impl::get_metadata_str(
metadata_str_type type)
{
boost::optional<std::string> result;
- storage_->music_db << "SELECT text FROM MetaData WHERE id = ? AND "
- "type = ? AND text IS NOT NULL"
- << id() << static_cast<int64_t>(type) >>
+ storage_->db << "SELECT text FROM MetaData WHERE id = ? AND "
+ "type = ? AND text IS NOT NULL"
+ << id() << static_cast<int64_t>(type) >>
[&](std::string text) {
if (!result)
{
@@ -77,7 +77,7 @@ void el_track_impl::set_metadata_str(
}
else
{
- storage_->music_db
+ storage_->db
<< "REPLACE INTO MetaData (id, type, text) VALUES (?, ?, ?)" << id()
<< static_cast<int64_t>(type) << nullptr;
}
@@ -86,17 +86,16 @@ void el_track_impl::set_metadata_str(
void el_track_impl::set_metadata_str(
metadata_str_type type, const std::string& content)
{
- storage_->music_db
- << "REPLACE INTO MetaData (id, type, text) VALUES (?, ?, ?)" << id()
- << static_cast<int64_t>(type) << content;
+ storage_->db << "REPLACE INTO MetaData (id, type, text) VALUES (?, ?, ?)"
+ << id() << static_cast<int64_t>(type) << content;
}
boost::optional<int64_t> el_track_impl::get_metadata_int(metadata_int_type type)
{
boost::optional<int64_t> result;
- storage_->music_db << "SELECT value FROM MetaDataInteger WHERE id = "
- "? AND type = ? AND value IS NOT NULL"
- << id() << static_cast<int64_t>(type) >>
+ storage_->db << "SELECT value FROM MetaDataInteger WHERE id = "
+ "? AND type = ? AND value IS NOT NULL"
+ << id() << static_cast<int64_t>(type) >>
[&](int64_t value) {
if (!result)
{
@@ -116,7 +115,7 @@ boost::optional<int64_t> el_track_impl::get_metadata_int(metadata_int_type type)
void el_track_impl::set_metadata_int(
metadata_int_type type, boost::optional<int64_t> content)
{
- storage_->music_db
+ storage_->db
<< "REPLACE INTO MetaDataInteger (id, type, value) VALUES (?, ?, ?)"
<< id() << static_cast<int64_t>(type) << content;
}
@@ -189,11 +188,11 @@ std::vector<beatgrid_marker> el_track_impl::adjusted_beatgrid()
void el_track_impl::set_adjusted_beatgrid(std::vector<beatgrid_marker> beatgrid)
{
- storage_->perfdata_db << "BEGIN";
+ storage_->db << "BEGIN";
auto beat_d = get_beat_data();
beat_d.adjusted_beatgrid = std::move(beatgrid);
set_beat_data(std::move(beat_d));
- storage_->perfdata_db << "COMMIT";
+ storage_->db << "COMMIT";
}
double el_track_impl::adjusted_main_cue()
@@ -203,11 +202,11 @@ double el_track_impl::adjusted_main_cue()
void el_track_impl::set_adjusted_main_cue(double sample_offset)
{
- storage_->perfdata_db << "BEGIN";
+ storage_->db << "BEGIN";
auto quick_cues_d = get_quick_cues_data();
quick_cues_d.adjusted_main_cue = sample_offset;
set_quick_cues_data(std::move(quick_cues_d));
- storage_->perfdata_db << "COMMIT";
+ storage_->db << "COMMIT";
}
boost::optional<std::string> el_track_impl::album()
@@ -263,11 +262,11 @@ boost::optional<double> el_track_impl::average_loudness()
void el_track_impl::set_average_loudness(
boost::optional<double> average_loudness)
{
- storage_->perfdata_db << "BEGIN";
+ storage_->db << "BEGIN";
auto track_d = get_track_data();
track_d.average_loudness = average_loudness;
set_track_data(track_d);
- storage_->perfdata_db << "COMMIT";
+ storage_->db << "COMMIT";
}
boost::optional<int64_t> el_track_impl::bitrate()
@@ -324,8 +323,8 @@ database el_track_impl::db()
std::vector<crate> el_track_impl::containing_crates()
{
std::vector<crate> results;
- storage_->music_db << "SELECT crateId FROM CrateTrackList WHERE trackId = ?"
- << id() >>
+ storage_->db << "SELECT crateId FROM CrateTrackList WHERE trackId = ?"
+ << id() >>
[&](int64_t id) {
results.push_back(
crate{std::make_shared<el_crate_impl>(storage_, id)});
@@ -341,11 +340,11 @@ std::vector<beatgrid_marker> el_track_impl::default_beatgrid()
void el_track_impl::set_default_beatgrid(std::vector<beatgrid_marker> beatgrid)
{
- storage_->perfdata_db << "BEGIN";
+ storage_->db << "BEGIN";
auto beat_d = get_beat_data();
beat_d.default_beatgrid = std::move(beatgrid);
set_beat_data(std::move(beat_d));
- storage_->perfdata_db << "COMMIT";
+ storage_->db << "COMMIT";
}
double el_track_impl::default_main_cue()
@@ -355,11 +354,11 @@ double el_track_impl::default_main_cue()
void el_track_impl::set_default_main_cue(double sample_offset)
{
- storage_->perfdata_db << "BEGIN";
+ storage_->db << "BEGIN";
auto quick_cues_d = get_quick_cues_data();
quick_cues_d.default_main_cue = sample_offset;
set_quick_cues_data(std::move(quick_cues_d));
- storage_->perfdata_db << "COMMIT";
+ storage_->db << "COMMIT";
}
boost::optional<milliseconds> el_track_impl::duration()
@@ -411,11 +410,11 @@ boost::optional<hot_cue> el_track_impl::hot_cue_at(int32_t index)
void el_track_impl::set_hot_cue_at(int32_t index, boost::optional<hot_cue> cue)
{
- storage_->perfdata_db << "BEGIN";
+ storage_->db << "BEGIN";
auto quick_cues_d = get_quick_cues_data();
quick_cues_d.hot_cues[index] = std::move(cue);
set_quick_cues_data(std::move(quick_cues_d));
- storage_->perfdata_db << "END";
+ storage_->db << "END";
}
std::array<boost::optional<hot_cue>, 8> el_track_impl::hot_cues()
@@ -426,13 +425,13 @@ std::array<boost::optional<hot_cue>, 8> el_track_impl::hot_cues()
void el_track_impl::set_hot_cues(std::array<boost::optional<hot_cue>, 8> cues)
{
- storage_->perfdata_db << "BEGIN";
+ storage_->db << "BEGIN";
// TODO (haslersn): The following can be optimized because in this case we
// overwrite all hot_cues
auto quick_cues_d = get_quick_cues_data();
quick_cues_d.hot_cues = std::move(cues);
set_quick_cues_data(std::move(quick_cues_d));
- storage_->perfdata_db << "END";
+ storage_->db << "END";
}
boost::optional<track_import_info> el_track_impl::import_info()
@@ -467,7 +466,7 @@ void el_track_impl::set_import_info(
bool el_track_impl::is_valid()
{
bool valid = false;
- storage_->music_db << "SELECT COUNT(*) FROM Track WHERE id = ?" << id() >>
+ storage_->db << "SELECT COUNT(*) FROM Track WHERE id = ?" << id() >>
[&](int count) {
if (count == 1)
{
@@ -501,11 +500,11 @@ void el_track_impl::set_key(boost::optional<musical_key> key)
key_num = static_cast<int64_t>(*key);
}
- storage_->perfdata_db << "BEGIN";
+ storage_->db << "BEGIN";
auto track_d = get_track_data();
track_d.key = key;
set_track_data(track_d);
- storage_->perfdata_db << "COMMIT";
+ storage_->db << "COMMIT";
// TODO (haslersn): atomic?
set_metadata_int(metadata_int_type::musical_key, key_num);
@@ -591,11 +590,11 @@ boost::optional<loop> el_track_impl::loop_at(int32_t index)
void el_track_impl::set_loop_at(int32_t index, boost::optional<loop> l)
{
- storage_->perfdata_db << "BEGIN";
+ storage_->db << "BEGIN";
auto loops_d = get_loops_data();
loops_d.loops[index] = std::move(l);
set_loops_data(std::move(loops_d));
- storage_->perfdata_db << "END";
+ storage_->db << "END";
}
std::array<boost::optional<loop>, 8> el_track_impl::loops()
@@ -606,11 +605,11 @@ std::array<boost::optional<loop>, 8> el_track_impl::loops()
void el_track_impl::set_loops(std::array<boost::optional<loop>, 8> cues)
{
- storage_->perfdata_db << "BEGIN";
+ storage_->db << "BEGIN";
loops_data loops_d;
loops_d.loops = std::move(cues);
set_loops_data(std::move(loops_d));
- storage_->perfdata_db << "END";
+ storage_->db << "END";
}
std::vector<waveform_entry> el_track_impl::overview_waveform()
@@ -696,7 +695,7 @@ void el_track_impl::set_sampling(boost::optional<sampling_info> sampling)
set_cell("length", secs);
set_cell("lengthCalculated", secs);
- storage_->perfdata_db << "BEGIN";
+ storage_->db << "BEGIN";
// read old data
auto track_d = get_track_data();
@@ -725,7 +724,7 @@ void el_track_impl::set_sampling(boost::optional<sampling_info> sampling)
set_overview_waveform_data(std::move(overview_waveform_d));
}
- storage_->perfdata_db << "COMMIT";
+ storage_->db << "COMMIT";
}
boost::optional<std::string> el_track_impl::title()
@@ -775,10 +774,10 @@ void el_track_impl::set_waveform(std::vector<waveform_entry> waveform)
high_res_waveform_d.waveform = std::move(waveform);
}
- storage_->perfdata_db << "BEGIN";
+ storage_->db << "BEGIN";
set_overview_waveform_data(std::move(overview_waveform_d));
set_high_res_waveform_data(std::move(high_res_waveform_d));
- storage_->perfdata_db << "END";
+ storage_->db << "END";
}
boost::optional<int32_t> el_track_impl::year()
diff --git a/src/djinterop/enginelibrary/el_track_impl.hpp b/src/djinterop/enginelibrary/el_track_impl.hpp
index 445c0ce..10f4e9f 100644
--- a/src/djinterop/enginelibrary/el_track_impl.hpp
+++ b/src/djinterop/enginelibrary/el_track_impl.hpp
@@ -68,9 +68,9 @@ public:
T get_cell(const char* column_name)
{
boost::optional<T> result;
- storage_->music_db << (std::string{"SELECT "} + column_name +
- " FROM Track WHERE id = ?")
- << id() >>
+ storage_->db << (std::string{"SELECT "} + column_name +
+ " FROM Track WHERE id = ?")
+ << id() >>
[&](T cell) {
if (!result)
{
@@ -92,18 +92,18 @@ public:
template <typename T>
void set_cell(const char* column_name, const T& content)
{
- storage_->music_db << (std::string{"UPDATE Track SET "} + column_name +
- " = ? WHERE id = ?")
- << content << id();
+ storage_->db << (std::string{"UPDATE Track SET "} + column_name +
+ " = ? WHERE id = ?")
+ << content << id();
}
template <typename T>
T get_perfdata(const char* column_name)
{
boost::optional<T> result;
- storage_->perfdata_db << (std::string{"SELECT "} + column_name +
- " From PerformanceData WHERE id = ?")
- << id() >>
+ storage_->db << (std::string{"SELECT "} + column_name +
+ " From PerformanceData WHERE id = ?")
+ << id() >>
[&](const std::vector<char>& encoded_data) {
if (!result)
{
@@ -125,9 +125,8 @@ public:
void set_perfdata(const char* column_name, const T& content)
{
bool found = false;
- storage_->perfdata_db
- << "SELECT COUNT(*) FROM PerformanceData WHERE id = ?"
- << id() >>
+ storage_->db << "SELECT COUNT(*) FROM PerformanceData WHERE id = ?"
+ << id() >>
[&](int32_t count) {
if (count == 1)
{
@@ -144,7 +143,7 @@ public:
if (!found)
{
- storage_->perfdata_db
+ storage_->db
<< "INSERT INTO PerformanceData (id, isAnalyzed, isRendered, "
"trackData, highResolutionWaveFormData, "
"overviewWaveFormData, beatData, quickCues, loops, "
@@ -163,16 +162,16 @@ public:
// TODO (haslersn): Don't allocate during the version() call
if (db().version() >= version_1_7_1)
{
- storage_->perfdata_db
+ storage_->db
<< "UPDATE PerformanceData SET hasRekordboxValues = 0 "
"WHERE id = ?"
<< id();
}
}
- storage_->perfdata_db << (std::string{"UPDATE PerformanceData SET "} +
- column_name + " = ? WHERE id = ?")
- << content.encode() << id();
+ storage_->db << (std::string{"UPDATE PerformanceData SET "} +
+ column_name + " = ? WHERE id = ?")
+ << content.encode() << id();
}
beat_data get_beat_data();
diff --git a/src/djinterop/enginelibrary/schema_1_6_0.cpp b/src/djinterop/enginelibrary/schema_1_6_0.cpp
index 8672b4b..cc5f793 100644
--- a/src/djinterop/enginelibrary/schema_1_6_0.cpp
+++ b/src/djinterop/enginelibrary/schema_1_6_0.cpp
@@ -822,147 +822,148 @@ void create_music_schema_1_6_0(sqlite::database &db)
// by a real hardware player.
// Track
- db << "CREATE TABLE Track ( [id] INTEGER, [playOrder] INTEGER , "
+ db << "CREATE TABLE music.Track ( [id] INTEGER, [playOrder] INTEGER , "
"[length] INTEGER , [lengthCalculated] INTEGER , [bpm] INTEGER , "
- "[year] INTEGER , [path] TEXT , [filename] TEXT , "
- "[bitrate] INTEGER , [bpmAnalyzed] REAL , [trackType] INTEGER , "
- "[isExternalTrack] NUMERIC , [uuidOfExternalDatabase] TEXT , "
+ "[year] INTEGER , [path] TEXT , [filename] TEXT , [bitrate] INTEGER "
+ ", [bpmAnalyzed] REAL , [trackType] INTEGER , [isExternalTrack] "
+ "NUMERIC , [uuidOfExternalDatabase] TEXT , "
"[idTrackInExternalDatabase] INTEGER , [idAlbumArt] INTEGER "
"REFERENCES AlbumArt ( id ) ON DELETE RESTRICT, PRIMARY KEY ( [id] "
") )";
- db << "CREATE INDEX index_Track_id ON Track ( id )";
- db << "CREATE INDEX index_Track_path ON Track ( path )";
- db << "CREATE INDEX index_Track_filename ON Track ( filename )";
- db << "CREATE INDEX index_Track_isExternalTrack ON Track ( isExternalTrack "
- ")";
- db << "CREATE INDEX index_Track_uuidOfExternalDatabase ON "
- "Track ( uuidOfExternalDatabase )";
- db << "CREATE INDEX index_Track_idTrackInExternalDatabase ON "
- "Track ( idTrackInExternalDatabase )";
- db << "CREATE INDEX index_Track_idAlbumArt ON Track ( idAlbumArt )";
+ db << "CREATE INDEX music.index_Track_id ON Track ( id )";
+ db << "CREATE INDEX music.index_Track_path ON Track ( path )";
+ db << "CREATE INDEX music.index_Track_filename ON Track ( filename )";
+ db << "CREATE INDEX music.index_Track_isExternalTrack ON Track ( "
+ "isExternalTrack )";
+ db << "CREATE INDEX music.i