/* * Copyright (C) 2020 Emeric Poupon * * This file is part of LMS. * * LMS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * LMS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with LMS. If not, see . */ #include "database/Session.hpp" #include "core/Exception.hpp" #include "core/ILogger.hpp" #include "core/ITraceLogger.hpp" #include "database/Artist.hpp" #include "database/AuthToken.hpp" #include "database/Cluster.hpp" #include "database/Db.hpp" #include "database/Directory.hpp" #include "database/Image.hpp" #include "database/Listen.hpp" #include "database/MediaLibrary.hpp" #include "database/RatedArtist.hpp" #include "database/RatedRelease.hpp" #include "database/RatedTrack.hpp" #include "database/Release.hpp" #include "database/ScanSettings.hpp" #include "database/StarredArtist.hpp" #include "database/StarredRelease.hpp" #include "database/StarredTrack.hpp" #include "database/Track.hpp" #include "database/TrackArtistLink.hpp" #include "database/TrackBookmark.hpp" #include "database/TrackFeatures.hpp" #include "database/TrackList.hpp" #include "database/TransactionChecker.hpp" #include "database/UIState.hpp" #include "database/User.hpp" #include "EnumSetTraits.hpp" #include "Migration.hpp" #include "PathTraits.hpp" #include "Utils.hpp" namespace lms::db { WriteTransaction::WriteTransaction(core::RecursiveSharedMutex& mutex, Wt::Dbo::Session& session) : _lock{ mutex } , _transaction{ session } { #if LMS_CHECK_TRANSACTION_ACCESSES TransactionChecker::pushWriteTransaction(_transaction.session()); #endif } WriteTransaction::~WriteTransaction() { #if LMS_CHECK_TRANSACTION_ACCESSES TransactionChecker::popWriteTransaction(_transaction.session()); #endif core::tracing::ScopedTrace _trace{ "Database", core::tracing::Level::Detailed, "Commit" }; _transaction.commit(); } ReadTransaction::ReadTransaction(Wt::Dbo::Session& session) : _transaction{ session } { #if LMS_CHECK_TRANSACTION_ACCESSES TransactionChecker::pushReadTransaction(_transaction.session()); #endif } ReadTransaction::~ReadTransaction() { #if LMS_CHECK_TRANSACTION_ACCESSES TransactionChecker::popReadTransaction(_transaction.session()); #endif } Session::Session(Db& db) : _db{ db } { _session.setConnectionPool(_db.getConnectionPool()); _session.mapClass("version_info"); _session.mapClass("artist"); _session.mapClass("auth_token"); _session.mapClass("cluster"); _session.mapClass("cluster_type"); _session.mapClass("directory"); _session.mapClass("image"); _session.mapClass