diff options
author | haslersn <sebastian.hasler@gmx.net> | 2019-07-06 17:56:42 +0200 |
---|---|---|
committer | haslersn <sebastian.hasler@gmx.net> | 2019-07-08 00:39:02 +0200 |
commit | 1dae51bbba6ea3edc6550c8954353cea37dda88f (patch) | |
tree | 8b484e36d614b853c47d973d0da0766069a08e07 | |
parent | 2777ca1413361bbc78f22b16ec1e62e30a119a7c (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.cpp | 14 | ||||
-rw-r--r-- | src/djinterop/enginelibrary/el_crate_impl.cpp | 61 | ||||
-rw-r--r-- | src/djinterop/enginelibrary/el_database_impl.cpp | 87 | ||||
-rw-r--r-- | src/djinterop/enginelibrary/el_storage.cpp | 16 | ||||
-rw-r--r-- | src/djinterop/enginelibrary/el_storage.hpp | 11 | ||||
-rw-r--r-- | src/djinterop/enginelibrary/el_track_impl.cpp | 75 | ||||
-rw-r--r-- | src/djinterop/enginelibrary/el_track_impl.hpp | 33 | ||||
-rw-r--r-- | src/djinterop/enginelibrary/schema_1_6_0.cpp | 198 | ||||
-rw-r--r-- | src/djinterop/enginelibrary/schema_1_7_1.cpp | 212 | ||||
-rw-r--r-- | test/enginelibrary/schema_test.cpp | 12 |
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 |