[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [amarok] /: Refactoring: Create StorageManager to provide SqlStorage
From:       Ralf Engels <ralf-engels () gmx ! de>
Date:       2015-01-17 18:12:19
Message-ID: E1YCXr9-000431-7U () scm ! kde ! org
[Download RAW message or body]

Git commit f4300eeeddbd3d620280779e031d342e03623ac5 by Ralf Engels.
Committed on 19/12/2014 at 14:07.
Pushed by rengels into branch 'master'.

Refactoring: Create StorageManager to provide SqlStorage

A implement a Storage manager that will provide the SqlStorage.

Reason: all parts of Amarok are relying on an SqlStorage.
Currently the collection manager does this job in addition to
it's main job of managing the collections.

Next step: move storage in separate plugin.

Note: deactivate all remainders of switching databases. That
never works and will hit a lot of Services since they suddenly are
without propperly initialized tables.

M  +3    -1    src/App.cpp
M  +8    -0    src/CMakeLists.txt
M  +13   -8    src/PluginManager.cpp
M  +6    -6    src/amarokurls/AmarokUrl.cpp
M  +3    -3    src/amarokurls/AmarokUrlHandler.cpp
M  +8    -8    src/amarokurls/BookmarkGroup.cpp
M  +8    -8    src/amarokurls/BookmarkModel.cpp
M  +3    -2    src/amarokurls/PlayUrlRunner.cpp
M  +1    -1    src/core-impl/collections/db/MountPointManager.cpp
M  +1    -1    src/core-impl/collections/db/sql/DatabaseUpdater.cpp
M  +2    -2    src/core-impl/collections/db/sql/SqlCollection.h
M  +1    -1    src/core-impl/collections/db/sql/SqlCollectionLocation.cpp
M  +1    -1    src/core-impl/collections/db/sql/SqlMeta.cpp
M  +1    -1    src/core-impl/collections/db/sql/SqlQueryMaker.cpp
M  +1    -1    src/core-impl/collections/db/sql/SqlQueryMakerInternal.cpp
M  +1    -1    src/core-impl/collections/db/sql/SqlReadLabelCapability.cpp
M  +1    -1    src/core-impl/collections/db/sql/SqlWriteLabelCapability.cpp
M  +1    -1    src/core-impl/collections/db/sql/device/massstorage/MassStorageDeviceHandler.cpp
 M  +1    -1    src/core-impl/collections/db/sql/device/nfs/NfsDeviceHandler.cpp
M  +1    -1    src/core-impl/collections/db/sql/device/smb/SmbDeviceHandler.cpp
M  +3    -3    src/core-impl/collections/db/sql/mysqlecollection/MySqlEmbeddedCollection.cpp
 M  +1    -1    src/core-impl/collections/db/sql/mysqlservercollection/CMakeLists.txt
M  +1    -113  src/core-impl/collections/db/sql/mysqlservercollection/MySqlServerCollection.cpp
 M  +0    -14   src/core-impl/collections/db/sql/mysqlservercollection/MySqlServerCollection.h
 M  +1    -77   src/core-impl/collections/support/CollectionManager.cpp
M  +0    -8    src/core-impl/collections/support/CollectionManager.h
M  +9    -8    src/core-impl/podcasts/sql/SqlPodcastMeta.cpp
M  +10   -10   src/core-impl/podcasts/sql/SqlPodcastProvider.cpp
A  +168  -0    src/core-impl/storage/StorageManager.cpp     [License: GPL (v2+)]
A  +99   -0    src/core-impl/storage/StorageManager.h     [License: GPL (v2+)]
M  +4    -4    src/core-impl/support/TagStatisticsStore.cpp
M  +4    -4    src/core-impl/support/UrlStatisticsStore.cpp
A  +71   -0    src/core/storage/SqlStorage.h     [License: GPL (v2+)]
M  +10   -10   src/playlistmanager/sql/SqlPlaylist.cpp
M  +6    -6    src/playlistmanager/sql/SqlPlaylistGroup.cpp
M  +6    -6    src/playlistmanager/sql/SqlUserPlaylistProvider.cpp
M  +4    -3    src/scripting/scriptengine/AmarokCollectionScript.cpp
M  +6    -6    src/services/ServiceSqlCollection.cpp
M  +3    -3    src/services/ServiceSqlQueryMaker.cpp
M  +11   -11   src/services/jamendo/JamendoDatabaseHandler.cpp
M  +14   -14   src/services/magnatune/MagnatuneDatabaseHandler.cpp
M  +6    -6    src/services/magnatune/MagnatuneDatabaseWorker.cpp
M  +1    -1    src/services/opmldirectory/OpmlDirectoryDatabaseHandler.cpp
M  +2    -2    tests/core-impl/collections/db/sql/CMakeLists.txt
M  +1    -1    tests/core-impl/collections/db/sql/TestDatabaseUpdater.cpp
M  +1    -1    tests/core-impl/collections/db/sql/TestSqlAlbum.cpp
M  +1    -3    tests/core-impl/collections/db/sql/TestSqlArtist.cpp
M  +1    -1    tests/core-impl/collections/db/sql/TestSqlCollection.cpp
M  +1    -1    tests/core-impl/collections/db/sql/TestSqlCollectionLocation.cpp
M  +1    -1    tests/core-impl/collections/db/sql/TestSqlQueryMaker.cpp
M  +1    -1    tests/core-impl/collections/db/sql/TestSqlScanManager.cpp
M  +1    -2    tests/core-impl/collections/db/sql/TestSqlTrack.cpp
M  +1    -1    tests/mocks/SqlStorageMock.h

http://commits.kde.org/amarok/f4300eeeddbd3d620280779e031d342e03623ac5

diff --git a/src/App.cpp b/src/App.cpp
index ad76f8e..4930354 100644
--- a/src/App.cpp
+++ b/src/App.cpp
@@ -40,6 +40,7 @@
 #include "core/transcoding/TranscodingController.h"
 #include "core-impl/collections/support/CollectionManager.h"
 #include "core-impl/playlists/types/file/PlaylistFileSupport.h"
+#include "core-impl/storage/StorageManager.h"
 #include "covermanager/CoverCache.h"
 #include "covermanager/CoverFetcher.h"
 #include "dbus/CollectionDBusHandler.h"
@@ -238,8 +239,9 @@ App::~App()
     PlaylistManager::destroy();
     CoverFetcher::destroy();
     CoverCache::destroy();
-    CollectionManager::destroy();
     ServicePluginManager::destroy();
+    CollectionManager::destroy();
+    StorageManager::destroy();
     NetworkAccessManagerProxy::destroy();
     Plugins::PluginManager::destroy();
 
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 8c088ca..5c5dbbb 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -258,6 +258,13 @@ set(collection_SRCS
 )
 
 #####################################################################
+# STORAGE
+#####################################################################
+set(storage_SRCS
+    core-impl/storage/StorageManager.cpp
+)
+
+#####################################################################
 # SCANNER
 #####################################################################
 set( scanner_SRCS
@@ -610,6 +617,7 @@ set(amaroklib_LIB_SRCS
     ${core_interfaces_SRCS}
     ${apg_SRCS}
     ${collection_SRCS}
+    ${storage_SRCS}
     ${scanner_SRCS}
     ${mac_SRCS}
     ${network_access_SRCS}
diff --git a/src/PluginManager.cpp b/src/PluginManager.cpp
index a931456..7d7e411 100644
--- a/src/PluginManager.cpp
+++ b/src/PluginManager.cpp
@@ -18,12 +18,13 @@
 
 #include "PluginManager.h"
 
-#include "core/support/Amarok.h"
-#include "core/support/Components.h"
-#include "core/support/Debug.h"
-#include "core-impl/collections/support/CollectionManager.h"
-#include "services/ServicePluginManager.h"
-#include "statsyncing/Controller.h"
+#include <core/support/Amarok.h>
+#include <core/support/Components.h>
+#include <core/support/Debug.h>
+#include <core-impl/collections/support/CollectionManager.h>
+#include <core-impl/storage/StorageManager.h>
+#include <services/ServicePluginManager.h>
+#include <statsyncing/Controller.h>
 
 #include <KLocalizedString>
 #include <KMessageBox>
@@ -72,11 +73,11 @@ Plugins::PluginManager::~PluginManager()
     // tell the managers to get rid of their current factories
     QList<Plugins::PluginFactory*> emptyFactories;
 
-    CollectionManager::instance()->setFactories( emptyFactories );
-    ServicePluginManager::instance()->setFactories( emptyFactories );
     StatSyncing::Controller *controller = \
Amarok::Components::statSyncingController();  if( controller )
         controller->setFactories( emptyFactories );
+    ServicePluginManager::instance()->setFactories( emptyFactories );
+    StorageManager::instance()->setFactories( emptyFactories );
 }
 
 void
@@ -151,6 +152,10 @@ Plugins::PluginManager::checkPluginEnabledStates()
     // - filter out factories not usefull
     // - handle the new list of factories, disabling old ones and enabling new ones.
 
+    PERF_LOG( "Loading storage plugins" )
+    StorageManager::instance()->setFactories( m_factoriesByType.value( Collection ) \
); +    PERF_LOG( "Loaded storage plugins" )
+
     PERF_LOG( "Loading collection plugins" )
     CollectionManager::instance()->setFactories( m_factoriesByType.value( Collection \
) );  PERF_LOG( "Loaded collection plugins" )
diff --git a/src/amarokurls/AmarokUrl.cpp b/src/amarokurls/AmarokUrl.cpp
index cfc5dbf..2981512 100644
--- a/src/amarokurls/AmarokUrl.cpp
+++ b/src/amarokurls/AmarokUrl.cpp
@@ -18,9 +18,9 @@
 
 #include "AmarokUrlHandler.h"
 #include "BookmarkGroup.h"
-#include "core-impl/collections/support/CollectionManager.h"
+#include "core-impl/storage/StorageManager.h"
 #include "core/support/Debug.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 
 #include <QUrl>
 
@@ -144,7 +144,7 @@ bool AmarokUrl::saveToDb()
 
     const int parentId = m_parent ? m_parent->id() : -1;
 
-    SqlStorage * sql =  CollectionManager::instance()->sqlStorage();
+    SqlStorage * sql =  StorageManager::instance()->sqlStorage();
 
     if( m_id != -1 )
     {
@@ -152,7 +152,7 @@ bool AmarokUrl::saveToDb()
         debug() << "Updating bookmark";
         QString query = "UPDATE bookmarks SET parent_id=%1, name='%2', url='%3', \
description='%4', custom='%5' WHERE id=%6;";  query = query.arg( QString::number( \
parentId ) ).arg( sql->escape( m_name ), sql->escape( url() ), sql->escape( \
                m_description ), sql->escape( m_customValue ) , QString::number( m_id \
                ) );
-        CollectionManager::instance()->sqlStorage()->query( query );
+        StorageManager::instance()->sqlStorage()->query( query );
     }
     else
     {
@@ -160,7 +160,7 @@ bool AmarokUrl::saveToDb()
         debug() << "Creating new bookmark in the db";
         QString query = "INSERT INTO bookmarks ( parent_id, name, url, description, \
                custom ) VALUES ( %1, '%2', '%3', '%4', '%5' );";
         query = query.arg( QString::number( parentId ), sql->escape( m_name ), \
                sql->escape( url() ), sql->escape( m_description ), sql->escape( \
                m_customValue ) );
-        m_id = CollectionManager::instance()->sqlStorage()->insert( query, NULL );
+        m_id = StorageManager::instance()->sqlStorage()->insert( query, NULL );
     }
 
     return true;
@@ -190,7 +190,7 @@ void AmarokUrl::removeFromDb()
 {
     QString query = "DELETE FROM bookmarks WHERE id=%1";
     query = query.arg( QString::number( m_id ) );
-    CollectionManager::instance()->sqlStorage()->query( query );
+    StorageManager::instance()->sqlStorage()->query( query );
 }
 
 void AmarokUrl::rename( const QString &name )
diff --git a/src/amarokurls/AmarokUrlHandler.cpp \
b/src/amarokurls/AmarokUrlHandler.cpp index 895724e..637f481 100644
--- a/src/amarokurls/AmarokUrlHandler.cpp
+++ b/src/amarokurls/AmarokUrlHandler.cpp
@@ -24,10 +24,10 @@
 #include "amarokurls/NavigationUrlRunner.h"
 #include "amarokurls/PlayUrlGenerator.h"
 #include "amarokurls/PlayUrlRunner.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 #include "core/meta/Meta.h"
 #include "core/support/Debug.h"
-#include "core-impl/collections/support/CollectionManager.h"
+#include "core-impl/storage/StorageManager.h"
 #include "core-impl/meta/timecode/TimecodeObserver.h"
 #include "playlist/PlaylistViewUrlGenerator.h"
 
@@ -139,7 +139,7 @@ BookmarkList AmarokUrlHandler::urlsByCommand( const QString \
&command )  
     QString query = "SELECT id, parent_id, name, url, description, custom FROM \
bookmarks where url like 'amarok://%1%' ORDER BY name;";  query = query.arg( command \
                );
-    QStringList result = CollectionManager::instance()->sqlStorage()->query( query \
); +    QStringList result = StorageManager::instance()->sqlStorage()->query( query \
);  
     debug() << "Result: " << result;
     int resultRows = result.count() / 6;
diff --git a/src/amarokurls/BookmarkGroup.cpp b/src/amarokurls/BookmarkGroup.cpp
index 74a14c2..a054302 100644
--- a/src/amarokurls/BookmarkGroup.cpp
+++ b/src/amarokurls/BookmarkGroup.cpp
@@ -17,9 +17,9 @@
 #include "BookmarkGroup.h"
 
 #include "AmarokUrl.h"
-#include "core-impl/collections/support/CollectionManager.h"
+#include "core-impl/storage/StorageManager.h"
 #include "core/support/Debug.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 
 #include <typeinfo>
 
@@ -61,7 +61,7 @@ BookmarkGroup::BookmarkGroup( const QString &name, const QString \
                &customType )
     //check if this custom group already exists and if so, just load that data.
     QString query = "SELECT id, parent_id, name, description FROM bookmark_groups \
where custom='%1';";  query = query.arg( customType );
-    QStringList result = CollectionManager::instance()->sqlStorage()->query( query \
); +    QStringList result = StorageManager::instance()->sqlStorage()->query( query \
);  
     if ( result.count() == 4 )
     {
@@ -101,14 +101,14 @@ void BookmarkGroup::save()
         //update existing
         QString query = "UPDATE bookmark_groups SET parent_id=%1, name='%2', \
                description='%3', custom='%4%' WHERE id=%5;";
         query = query.arg( QString::number( parentId ) ).arg( m_name ).arg( \
                m_description ).arg( m_customType ).arg( QString::number( m_dbId ) );
-        CollectionManager::instance()->sqlStorage()->query( query );
+        StorageManager::instance()->sqlStorage()->query( query );
     }
     else
     {
         //insert new
         QString query = "INSERT INTO bookmark_groups ( parent_id, name, description, \
                custom) VALUES ( %1, '%2', '%3', '%4' );";
         query = query.arg( QString::number( parentId ) ).arg( m_name ).arg( \
                m_description ).arg( m_customType );
-        m_dbId = CollectionManager::instance()->sqlStorage()->insert( query, NULL );
+        m_dbId = StorageManager::instance()->sqlStorage()->insert( query, NULL );
 
     }
 }
@@ -121,7 +121,7 @@ BookmarkGroupList BookmarkGroup::childGroups() const
 
         QString query = "SELECT id, parent_id, name, description FROM \
bookmark_groups where parent_id=%1 ORDER BY name;";  query = query.arg( \
                QString::number( m_dbId ) );
-        QStringList result = CollectionManager::instance()->sqlStorage()->query( \
query ); +        QStringList result = \
StorageManager::instance()->sqlStorage()->query( query );  
 
         int resultRows = result.count() / 4;
@@ -147,7 +147,7 @@ BookmarkList BookmarkGroup::childBookmarks() const
     if ( !m_hasFetchedChildPlaylists ) {
         QString query = "SELECT id, parent_id, name, url, description, custom FROM \
bookmarks where parent_id=%1 ORDER BY name;";  query = query.arg( QString::number( \
                m_dbId ) );
-        QStringList result = CollectionManager::instance()->sqlStorage()->query( \
query ); +        QStringList result = \
StorageManager::instance()->sqlStorage()->query( query );  
         //debug() << "Result: " << result;
         int resultRows = result.count() / 6;
@@ -234,7 +234,7 @@ void BookmarkGroup::removeFromDb()
 
     QString query = QString( "DELETE FROM bookmark_groups where id=%1;").arg( \
QString::number( m_dbId ) );  debug() << "query: " << query;
-    QStringList result = CollectionManager::instance()->sqlStorage()->query( query \
); +    QStringList result = StorageManager::instance()->sqlStorage()->query( query \
);  }
 
 void BookmarkGroup::reparent( BookmarkGroupPtr parent )
diff --git a/src/amarokurls/BookmarkModel.cpp b/src/amarokurls/BookmarkModel.cpp
index 716a211..4ab8fa5 100644
--- a/src/amarokurls/BookmarkModel.cpp
+++ b/src/amarokurls/BookmarkModel.cpp
@@ -22,8 +22,8 @@
 #include "BookmarkGroup.h"
 #include "AmarokUrlHandler.h"
 #include "core/support/Debug.h"
-#include "core-impl/collections/support/CollectionManager.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core-impl/storage/StorageManager.h>
+#include <core/storage/SqlStorage.h>
 
 #include <KIcon>
 
@@ -424,7 +424,7 @@ void BookmarkModel::createTables()
 {
     DEBUG_BLOCK
 
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
     if( !sqlStorage )
         return;
 
@@ -449,8 +449,8 @@ void BookmarkModel::deleteTables()
 {
 
     DEBUG_BLOCK
-    
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
     if( !sqlStorage )
         return;
 
@@ -463,8 +463,8 @@ void BookmarkModel::checkTables()
 {
 
     DEBUG_BLOCK
-            
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
     if( !sqlStorage )
         return;
 
@@ -687,7 +687,7 @@ BookmarkModel::renameBookmarkRecursively( BookmarkGroupPtr group, \
const QString&  
 void BookmarkModel::upgradeTables( int from )
 {
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
     if( !sqlStorage )
         return;
     
diff --git a/src/amarokurls/PlayUrlRunner.cpp b/src/amarokurls/PlayUrlRunner.cpp
index 049777f..3bce258 100644
--- a/src/amarokurls/PlayUrlRunner.cpp
+++ b/src/amarokurls/PlayUrlRunner.cpp
@@ -20,12 +20,13 @@
 #include "amarokconfig.h"
 #include "AmarokUrl.h"
 #include "AmarokUrlHandler.h"
+#include "core-impl/storage/StorageManager.h"
 #include "core-impl/collections/support/CollectionManager.h"
 #include "EngineController.h"
 #include "playlist/PlaylistController.h"
 #include "playlist/PlaylistModelStack.h"
 #include "playlist/proxymodels/AbstractModel.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 #include "core/meta/Meta.h"
 
 PlayUrlRunner::PlayUrlRunner() : AmarokUrlRunnerBase()
@@ -104,7 +105,7 @@ BookmarkList PlayUrlRunner::bookmarksFromUrl( KUrl url )
     // the base64 encoded url (minus the '=').
     QString query = "SELECT id, parent_id, name, url, description, custom FROM \
bookmarks WHERE url LIKE '%%1%'";  query = query.arg ( track_encoded );
-    QStringList result = CollectionManager::instance()->sqlStorage()->query ( query \
); +    QStringList result = StorageManager::instance()->sqlStorage()->query ( query \
);  
     int resultRows = result.count() / 6;
 
diff --git a/src/core-impl/collections/db/MountPointManager.cpp \
b/src/core-impl/collections/db/MountPointManager.cpp index accc0ea..77a43c0 100644
--- a/src/core-impl/collections/db/MountPointManager.cpp
+++ b/src/core-impl/collections/db/MountPointManager.cpp
@@ -21,7 +21,7 @@
 #include "MediaDeviceCache.h"
 #include "core/support/Amarok.h"
 #include "core/support/Debug.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 #include "core-impl/collections/db/sql/device/massstorage/MassStorageDeviceHandler.h"
  #include "core-impl/collections/db/sql/device/nfs/NfsDeviceHandler.h"
 #include "core-impl/collections/db/sql/device/smb/SmbDeviceHandler.h"
diff --git a/src/core-impl/collections/db/sql/DatabaseUpdater.cpp \
b/src/core-impl/collections/db/sql/DatabaseUpdater.cpp index c5c274f..59a78f5 100644
--- a/src/core-impl/collections/db/sql/DatabaseUpdater.cpp
+++ b/src/core-impl/collections/db/sql/DatabaseUpdater.cpp
@@ -18,7 +18,7 @@
 
 #include "amarokconfig.h"
 #include "core/support/Debug.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 #include "SqlCollection.h"
 
 #include <QDateTime>
diff --git a/src/core-impl/collections/db/sql/SqlCollection.h \
b/src/core-impl/collections/db/sql/SqlCollection.h index a0b8da1..71f2140 100644
--- a/src/core-impl/collections/db/sql/SqlCollection.h
+++ b/src/core-impl/collections/db/sql/SqlCollection.h
@@ -21,8 +21,8 @@
 
 #include "amarok_sqlcollection_export.h"
 #include "core/capabilities/TranscodeCapability.h"
-#include "core/collections/support/SqlStorage.h"
-#include "core-impl/collections/db/DatabaseCollection.h"
+#include <core/storage/SqlStorage.h>
+#include <core-impl/collections/db/DatabaseCollection.h>
 #include "SqlRegistry.h"
 
 class SqlScanResultProcessor;
diff --git a/src/core-impl/collections/db/sql/SqlCollectionLocation.cpp \
b/src/core-impl/collections/db/sql/SqlCollectionLocation.cpp index d8816d3..8ac22fd \
                100644
--- a/src/core-impl/collections/db/sql/SqlCollectionLocation.cpp
+++ b/src/core-impl/collections/db/sql/SqlCollectionLocation.cpp
@@ -23,7 +23,7 @@
 
 #include "MetaTagLib.h" // for getting the uid
 #include "core/collections/CollectionLocationDelegate.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 #include "core/interfaces/Logger.h"
 #include "core/support/Components.h"
 #include "core/support/Debug.h"
diff --git a/src/core-impl/collections/db/sql/SqlMeta.cpp \
b/src/core-impl/collections/db/sql/SqlMeta.cpp index 7a5bbdd..3968cde 100644
--- a/src/core-impl/collections/db/sql/SqlMeta.cpp
+++ b/src/core-impl/collections/db/sql/SqlMeta.cpp
@@ -32,7 +32,7 @@
 #include "MetaTagLib.h" // for getting an embedded cover
 
 #include "amarokurls/BookmarkMetaActions.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 #include "core/meta/support/MetaUtility.h"
 #include "core/support/Amarok.h"
 #include "core/support/Debug.h"
diff --git a/src/core-impl/collections/db/sql/SqlQueryMaker.cpp \
b/src/core-impl/collections/db/sql/SqlQueryMaker.cpp index 2eddca6..6984b65 100644
--- a/src/core-impl/collections/db/sql/SqlQueryMaker.cpp
+++ b/src/core-impl/collections/db/sql/SqlQueryMaker.cpp
@@ -21,7 +21,7 @@
 
 #include "SqlCollection.h"
 #include "SqlQueryMakerInternal.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 #include "core/support/Debug.h"
 #include "core-impl/collections/db/MountPointManager.h"
 
diff --git a/src/core-impl/collections/db/sql/SqlQueryMakerInternal.cpp \
b/src/core-impl/collections/db/sql/SqlQueryMakerInternal.cpp index 2d624d8..bfb2959 \
                100644
--- a/src/core-impl/collections/db/sql/SqlQueryMakerInternal.cpp
+++ b/src/core-impl/collections/db/sql/SqlQueryMakerInternal.cpp
@@ -16,7 +16,7 @@
 
 #include "SqlQueryMakerInternal.h"
 
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 #include "core/support/Debug.h"
 #include "SqlCollection.h"
 #include "SqlMeta.h"
diff --git a/src/core-impl/collections/db/sql/SqlReadLabelCapability.cpp \
b/src/core-impl/collections/db/sql/SqlReadLabelCapability.cpp index 8784824..55f52f2 \
                100644
--- a/src/core-impl/collections/db/sql/SqlReadLabelCapability.cpp
+++ b/src/core-impl/collections/db/sql/SqlReadLabelCapability.cpp
@@ -20,7 +20,7 @@
 
 #include "core-impl/collections/support/CollectionManager.h"
 #include "core/support/Debug.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 
 namespace Capabilities
 {
diff --git a/src/core-impl/collections/db/sql/SqlWriteLabelCapability.cpp \
b/src/core-impl/collections/db/sql/SqlWriteLabelCapability.cpp index 6689ebf..fad5aa0 \
                100644
--- a/src/core-impl/collections/db/sql/SqlWriteLabelCapability.cpp
+++ b/src/core-impl/collections/db/sql/SqlWriteLabelCapability.cpp
@@ -20,7 +20,7 @@
 
 #include "core-impl/collections/support/CollectionManager.h"
 #include "core/support/Debug.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 
 namespace Capabilities
 {
diff --git a/src/core-impl/collections/db/sql/device/massstorage/MassStorageDeviceHandler.cpp \
b/src/core-impl/collections/db/sql/device/massstorage/MassStorageDeviceHandler.cpp \
                index 3eaff00..c7f1d3d 100644
--- a/src/core-impl/collections/db/sql/device/massstorage/MassStorageDeviceHandler.cpp
                
+++ b/src/core-impl/collections/db/sql/device/massstorage/MassStorageDeviceHandler.cpp
 @@ -19,7 +19,7 @@
 #include "MassStorageDeviceHandler.h"
 
 #include "core/support/Debug.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 
 #include <KUrl>
 #include <Solid/Device>
diff --git a/src/core-impl/collections/db/sql/device/nfs/NfsDeviceHandler.cpp \
b/src/core-impl/collections/db/sql/device/nfs/NfsDeviceHandler.cpp index \
                2684708..cc7ba51 100644
--- a/src/core-impl/collections/db/sql/device/nfs/NfsDeviceHandler.cpp
+++ b/src/core-impl/collections/db/sql/device/nfs/NfsDeviceHandler.cpp
@@ -20,7 +20,7 @@
 #include "NfsDeviceHandler.h"
 
 #include "core/support/Debug.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 
 #include <KUrl>
 #include <Solid/Device>
diff --git a/src/core-impl/collections/db/sql/device/smb/SmbDeviceHandler.cpp \
b/src/core-impl/collections/db/sql/device/smb/SmbDeviceHandler.cpp index \
                900b7b1..a6d8df2 100644
--- a/src/core-impl/collections/db/sql/device/smb/SmbDeviceHandler.cpp
+++ b/src/core-impl/collections/db/sql/device/smb/SmbDeviceHandler.cpp
@@ -20,7 +20,7 @@
 #include "SmbDeviceHandler.h"
 
 #include "core/support/Debug.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 
 #include <KUrl>
 #include <Solid/Device>
diff --git a/src/core-impl/collections/db/sql/mysqlecollection/MySqlEmbeddedCollection.cpp \
b/src/core-impl/collections/db/sql/mysqlecollection/MySqlEmbeddedCollection.cpp index \
                b9872a8..86cbb90 100644
--- a/src/core-impl/collections/db/sql/mysqlecollection/MySqlEmbeddedCollection.cpp
+++ b/src/core-impl/collections/db/sql/mysqlecollection/MySqlEmbeddedCollection.cpp
@@ -17,9 +17,9 @@
 
 #include "MySqlEmbeddedCollection.h"
 
-#include "MySqlEmbeddedStorage.h"
-#include "core-impl/collections/db/sql/SqlCollection.h"
-#include "core-impl/collections/db/sql/SqlCollectionFactory.h"
+#include <core-impl/storage/MySqlEmbeddedStorage.h>
+#include <core-impl/collections/db/sql/SqlCollection.h>
+#include <core-impl/collections/db/sql/SqlCollectionFactory.h>
 
 #include <KLocale>
 
diff --git a/src/core-impl/collections/db/sql/mysqlservercollection/CMakeLists.txt \
b/src/core-impl/collections/db/sql/mysqlservercollection/CMakeLists.txt index \
                afb2ecc..d261217 100644
--- a/src/core-impl/collections/db/sql/mysqlservercollection/CMakeLists.txt
+++ b/src/core-impl/collections/db/sql/mysqlservercollection/CMakeLists.txt
@@ -4,8 +4,8 @@ add_definitions(${MYSQL_CFLAGS})
 
 set( amarok_collection-mysqlservercollection_PART_SRCS
      ../mysql-shared/MySqlStorage.cpp
+     MySqlServerStorage.cpp
      MySqlServerCollection.cpp
-
 )
 
 kde4_add_plugin(amarok_collection-mysqlservercollection \
                ${amarok_collection-mysqlservercollection_PART_SRCS})
diff --git a/src/core-impl/collections/db/sql/mysqlservercollection/MySqlServerCollection.cpp \
b/src/core-impl/collections/db/sql/mysqlservercollection/MySqlServerCollection.cpp \
                index 3763e0f..e168ce3 100644
--- a/src/core-impl/collections/db/sql/mysqlservercollection/MySqlServerCollection.cpp
                
+++ b/src/core-impl/collections/db/sql/mysqlservercollection/MySqlServerCollection.cpp
 @@ -17,6 +17,7 @@
  ****************************************************************************************/
  
 #include "MySqlServerCollection.h"
+#include "MySqlServerStorage.h"
 
 #include "amarokconfig.h"
 #include "core/support/Amarok.h"
@@ -24,12 +25,6 @@
 #include "core-impl/collections/db/sql/SqlCollection.h"
 #include "core-impl/collections/db/sql/SqlCollectionFactory.h"
 
-#include <QMutexLocker>
-#include <QThreadStorage>
-#include <QVarLengthArray>
-
-#include <mysql.h>
-
 using namespace Collections;
 
 AMAROK_EXPORT_COLLECTION( MySqlServerCollectionFactory, mysqlservercollection )
@@ -49,112 +44,5 @@ MySqlServerCollectionFactory::init()
     emit newCollection( collection );
 }
 
-MySqlServerStorage::MySqlServerStorage()
-    : MySqlStorage()
-{
-    DEBUG_BLOCK
-
-    m_debugIdent = "MySQL-server";
-
-    if( mysql_library_init( 0, NULL, NULL ) )
-    {
-        error() << "MySQL library initialization failed!";
-        return;
-    }
-
-    m_db = mysql_init( NULL );
-
-    if( !m_db )
-    {
-        error() << "MySQL initialization failed";
-        return;
-    }
-
-    //first here, the right way for >= 5.1.6
-
-    my_bool reconnect = true;
-    if( mysql_options( m_db, MYSQL_OPT_RECONNECT, &reconnect ) )
-        reportError( "Asking for automatic reconnect did not succeed!" );
-    else
-        debug() << "Automatic reconnect successfully activated";
-
-    if( !mysql_real_connect( m_db,
-                Amarok::config( "MySQL" ).readEntry( "Host", "localhost" ).toUtf8(),
-                Amarok::config( "MySQL" ).readEntry( "User", "amarokuser" \
                ).toUtf8(),
-                Amarok::config( "MySQL" ).readEntry( "Password", "password" \
                ).toUtf8(),
-                NULL,
-                Amarok::config( "MySQL" ).readEntry( "Port", "3306" ).toInt(),
-                NULL,
-                CLIENT_COMPRESS )
-        )
-    {
-        debug() << "connection to mysql failed";
-        error() << "Could not connect to mysql!";
-        reportError( "na" );
-        mysql_close( m_db );
-        m_db = 0;
-    }
-    else
-    {
-        //but in versions prior to 5.1.6, have to call it after every real_connect
-        my_bool reconnect = true;
-        if( mysql_options( m_db, MYSQL_OPT_RECONNECT, &reconnect ) )
-            reportError( "Asking for automatic reconnect did not succeed!" );
-        else
-            debug() << "Automatic reconnect successfully activated";
-
-        QString databaseName = Amarok::config( "MySQL" ).readEntry( "Database", \
                "amarokdb" );
-        sharedInit( databaseName );
-        debug() << "Connected to MySQL server" << mysql_get_server_info( m_db );
-    }
-
-    MySqlServerStorage::initThreadInitializer();
-}
-
-MySqlServerStorage::~MySqlServerStorage()
-{
-    DEBUG_BLOCK
-}
-
-QString
-MySqlServerStorage::type() const
-{
-    return "MySQL";
-}
-
-QStringList
-MySqlServerStorage::query( const QString &query )
-{
-    MySqlStorage::initThreadInitializer();
-    QMutexLocker locker( &m_mutex );
-    if( !m_db )
-    {
-        error() << "Tried to query an uninitialized m_db!";
-        return QStringList();
-    }
-
-    unsigned long tid = mysql_thread_id( m_db );
-
-    int res = mysql_ping( m_db );
-    if( res )
-    {
-        reportError( "mysql_ping failed!" );
-        return QStringList();
-    }
-
-    if( tid != mysql_thread_id( m_db ) )
-    {
-        debug() << "NOTE: MySQL server had gone away, ping reconnected it";
-        QString databaseName = Amarok::config( "MySQL" ).readEntry( "Database", \
                "amarokdb" );
-        if( mysql_query( m_db, QString( "SET NAMES 'utf8'" ).toUtf8() ) )
-            reportError( "SET NAMES 'utf8' died" );
-        if( mysql_query( m_db, QString( "USE %1" ).arg( databaseName ).toUtf8() ) )
-            reportError( "Could not select database" );
-    }
-
-
-    return MySqlStorage::query( query );
-}
-
 #include "MySqlServerCollection.moc"
 
diff --git a/src/core-impl/collections/db/sql/mysqlservercollection/MySqlServerCollection.h \
b/src/core-impl/collections/db/sql/mysqlservercollection/MySqlServerCollection.h \
                index 2da5274..baedfe8 100644
--- a/src/core-impl/collections/db/sql/mysqlservercollection/MySqlServerCollection.h
+++ b/src/core-impl/collections/db/sql/mysqlservercollection/MySqlServerCollection.h
@@ -19,7 +19,6 @@
 #define AMAROK_COLLECTION_MYSQLSERVERCOLLECTION_H
 
 #include "core/collections/Collection.h"
-#include "core-impl/collections/db/sql/mysql-shared/MySqlStorage.h"
 
 namespace Collections {
 
@@ -40,17 +39,4 @@ class MySqlServerCollectionFactory : public \
Collections::CollectionFactory  
 } //namespace Collections
 
-/**
- * Implements a MySqlStorage using a MySQL Server
- */
-class MySqlServerStorage: public MySqlStorage
-{
-    public:
-        MySqlServerStorage();
-        virtual ~MySqlServerStorage();
-
-        virtual QString type() const;
-        virtual QStringList query( const QString &query );
-};
-
 #endif
diff --git a/src/core-impl/collections/support/CollectionManager.cpp \
b/src/core-impl/collections/support/CollectionManager.cpp index 65a8fd3..61c5675 \
                100644
--- a/src/core-impl/collections/support/CollectionManager.cpp
+++ b/src/core-impl/collections/support/CollectionManager.cpp
@@ -21,10 +21,10 @@
 #include "core/capabilities/CollectionScanCapability.h"
 #include "core/collections/Collection.h"
 #include "core/collections/MetaQueryMaker.h"
-#include "core/collections/support/SqlStorage.h"
 #include "core/support/Amarok.h"
 #include "core/support/Debug.h"
 #include "core/support/SmartPointerList.h"
+#include <core/storage/SqlStorage.h>
 #include "core-impl/meta/file/FileTrackProvider.h"
 #include "core-impl/meta/stream/Stream.h"
 #include "core-impl/meta/timecode/TimecodeTrackProvider.h"
@@ -39,38 +39,6 @@
 
 typedef QPair<Collections::Collection*, CollectionManager::CollectionStatus> \
CollectionPair;  
-/** This wrapper will be used by the collection manager to present one static \
                SqlStorage object even when the user switches the actual database.
-On the other hand nobody except the owning collection should hold a reference to the \
                SqlStorage anyway. */
-class SqlStorageWrapper : public SqlStorage
-{
-public:
-    SqlStorageWrapper()
-        : SqlStorage()
-        , m_sqlStorage( 0 )
-    {}
-
-    virtual QString type() const  { return ( m_sqlStorage ? m_sqlStorage->type() : \
                "SqlStorageWrapper" ); }
-    virtual QString escape( const QString &text ) const  { return ( m_sqlStorage ? \
                m_sqlStorage->escape( text ) : text ); }
-    virtual QStringList query( const QString &query )  { return ( m_sqlStorage ? \
                m_sqlStorage->query( query ) : QStringList() ); }
-    virtual int insert( const QString &statement, const QString &table )  { return ( \
                m_sqlStorage ? m_sqlStorage->insert( statement, table ) : 0 ); }
-    virtual QString boolTrue() const  { return ( m_sqlStorage ? \
                m_sqlStorage->boolTrue() : "1" ); }
-    virtual QString boolFalse() const  { return ( m_sqlStorage ? \
                m_sqlStorage->boolFalse() : "0" ); }
-    virtual QString idType() const  { return ( m_sqlStorage ? m_sqlStorage->idType() \
                : "WRAPPER_NOT_IMPLEMENTED" ); }
-    virtual QString textColumnType( int length ) const { return ( m_sqlStorage ? \
                m_sqlStorage->textColumnType( length ) : "WRAPPER_NOT_IMPLEMENTED" ); \
                }
-    virtual QString exactTextColumnType( int length ) const { return ( m_sqlStorage \
                ? m_sqlStorage->exactTextColumnType( length ) : \
                "WRAPPER_NOT_IMPLEMENTED" ); }
-    virtual QString exactIndexableTextColumnType( int length ) const { return ( \
m_sqlStorage ? m_sqlStorage->exactIndexableTextColumnType( length ) : \
                "WRAPPER_NOT_IMPLEMENTED" ); };
-    virtual QString longTextColumnType() const { return ( m_sqlStorage ? \
                m_sqlStorage->longTextColumnType() : "WRAPPER_NOT_IMPLEMENTED" ); }
-    virtual QString randomFunc() const { return ( m_sqlStorage ? \
                m_sqlStorage->randomFunc() : "WRAPPER_NOT_IMPLEMENTED" ); }
-
-    virtual QStringList getLastErrors() const
-    { return m_sqlStorage ? m_sqlStorage->getLastErrors() : QStringList(); }
-    virtual void clearLastErrors()
-    { if( m_sqlStorage ) m_sqlStorage->clearLastErrors(); }
-
-    void setSqlStorage( SqlStorage *sqlStorage ) { m_sqlStorage = sqlStorage; }
-private:
-    SqlStorage *m_sqlStorage;
-};
 
 /** Private structure of the collection manager */
 struct CollectionManager::Private
@@ -78,9 +46,6 @@ struct CollectionManager::Private
     QList<CollectionPair> collections;
     QList<Plugins::PluginFactory*> factories; // factories belong to PluginManager
 
-    SqlStorage *sqlDatabase;
-    SqlStorageWrapper *sqlStorageWrapper;
-
     QList<Collections::Collection*> unmanagedCollections;
 
     QList<Collections::TrackProvider*> trackProviders;
@@ -123,10 +88,7 @@ CollectionManager::CollectionManager()
     Q_ASSERT( thread() == QCoreApplication::instance()->thread() );
 
     setObjectName( "CollectionManager" );
-    qRegisterMetaType<SqlStorage *>( "SqlStorage*" );
-    d->sqlDatabase = 0;
     d->primaryCollection = 0;
-    d->sqlStorageWrapper = new SqlStorageWrapper();
     // special-cased in trackForUrl(), don't add to d->trackProviders yet
     d->fileTrackProvider = new FileTrackProvider();
 }
@@ -138,9 +100,6 @@ CollectionManager::~CollectionManager()
     {
         QWriteLocker locker( &d->lock );
 
-        //not deleting SqlStorageWrapper here as somebody might be caching it
-        //Amarok really needs a proper state management...
-        d->sqlStorageWrapper->setSqlStorage( 0 );
         delete d->timecodeTrackProvider;
         delete d->fileTrackProvider;
         d->collections.clear();
@@ -336,9 +295,7 @@ CollectionManager::slotNewCollection( Collections::Collection* \
newCollection )  {
                 //let's cheat a bit and assume that sqlStorage and the \
primaryCollection are always the same  //it is true for now anyway
-                d->sqlDatabase = sqlStorage;
                 d->primaryCollection = newCollection;
-                d->sqlStorageWrapper->setSqlStorage( sqlStorage );
             }
             else
             {
@@ -367,31 +324,6 @@ CollectionManager::slotRemoveCollection()
             QWriteLocker locker( &d->lock );
             d->collections.removeAll( pair );
             d->trackProviders.removeAll( collection );
-
-            // if the collection had a sql storage, find a new database that could \
                provide
-            // one.
-            QVariant v = collection->property( "sqlStorage" );
-            if( v.isValid() )
-            {
-                SqlStorage *sqlDb = v.value<SqlStorage*>();
-                if( sqlDb && sqlDb == d->sqlDatabase )
-                {
-                    SqlStorage *newSqlDatabase = 0;
-                    foreach( const CollectionPair &pair, d->collections )
-                    {
-                        QVariant variant = pair.first->property( "sqlStorage" );
-                        if( !variant.isValid() )
-                            continue;
-                        SqlStorage *sqlDb = variant.value<SqlStorage*>();
-                        if( sqlDb )
-                        {
-                            newSqlDatabase = sqlDb;
-                        }
-                    }
-                    d->sqlDatabase = newSqlDatabase;
-                    d->sqlStorageWrapper->setSqlStorage( newSqlDatabase );
-                }
-            }
         }
 
         emit collectionRemoved( collection->collectionId() );
@@ -437,14 +369,6 @@ CollectionManager::primaryCollection() const
     return d->primaryCollection;
 }
 
-SqlStorage*
-CollectionManager::sqlStorage() const
-{
-    QReadLocker locker( &d->lock );
-
-    return d->sqlStorageWrapper;
-}
-
 Meta::TrackList
 CollectionManager::tracksForUrls( const KUrl::List &urls )
 {
diff --git a/src/core-impl/collections/support/CollectionManager.h \
b/src/core-impl/collections/support/CollectionManager.h index 48217cf..fbfe5dd 100644
--- a/src/core-impl/collections/support/CollectionManager.h
+++ b/src/core-impl/collections/support/CollectionManager.h
@@ -25,7 +25,6 @@
 #include <QList>
 #include <QObject>
 
-class SqlStorage;
 class CollectionManagerSingleton;
 
 namespace Plugins {
@@ -103,13 +102,6 @@ class AMAROK_EXPORT CollectionManager : public QObject
           */
         Meta::TrackList tracksForUrls( const KUrl::List &urls );
 
-        /**
-            retrieve an interface which allows client-code to store/load data in a \
                relational database.
-            Note: code using this method does NOT take ownership of the pointer, but \
                may cache the pointer
-            Note2: You should never modify the database unless you really really \
                know what you do.
-                   Using the SqlMeta (e.g. SqlRegistry or SqlTrack) is much better.
-        */
-        SqlStorage* sqlStorage() const;
 
         /**
          * add a collection whose lifecycle is not managed by CollectionManager.
diff --git a/src/core-impl/podcasts/sql/SqlPodcastMeta.cpp \
b/src/core-impl/podcasts/sql/SqlPodcastMeta.cpp index 1c6c200..3a3b4e7 100644
--- a/src/core-impl/podcasts/sql/SqlPodcastMeta.cpp
+++ b/src/core-impl/podcasts/sql/SqlPodcastMeta.cpp
@@ -19,12 +19,13 @@
 #include "amarokurls/BookmarkMetaActions.h"
 #include "amarokurls/PlayUrlRunner.h"
 #include "core/capabilities/ActionsCapability.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 #include "core/meta/TrackEditor.h"
 #include "core/support/Debug.h"
 #include "core-impl/capabilities/timecode/TimecodeLoadCapability.h"
 #include "core-impl/capabilities/timecode/TimecodeWriteCapability.h"
 #include "core-impl/collections/support/CollectionManager.h"
+#include "core-impl/storage/StorageManager.h"
 #include "core-impl/meta/proxy/MetaProxy.h"
 #include "core-impl/podcasts/sql/SqlPodcastProvider.h"
 
@@ -117,7 +118,7 @@ SqlPodcastEpisode::SqlPodcastEpisode( const QStringList &result, \
                SqlPodcastChann
     : Podcasts::PodcastEpisode( Podcasts::PodcastChannelPtr::staticCast( sqlChannel \
) )  , m_channel( sqlChannel )
 {
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
     QStringList::ConstIterator iter = result.constBegin();
     m_dbId = (*(iter++)).toInt();
     m_url = KUrl( *(iter++) );
@@ -433,7 +434,7 @@ SqlPodcastEpisode::writeTagsToFile()
 void
 SqlPodcastEpisode::updateInDb()
 {
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
 
     QString boolTrue = sqlStorage->boolTrue();
     QString boolFalse = sqlStorage->boolFalse();
@@ -504,7 +505,7 @@ SqlPodcastEpisode::updateInDb()
 void
 SqlPodcastEpisode::deleteFromDb()
 {
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
     sqlStorage->query(
         QString( "DELETE FROM podcastepisodes WHERE id = %1;" ).arg( dbId() ) );
 }
@@ -530,7 +531,7 @@ SqlPodcastChannel::SqlPodcastChannel( SqlPodcastProvider \
*provider,  , m_trackCacheIsValid( false )
     , m_provider( provider )
 {
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
     QStringList::ConstIterator iter = result.constBegin();
     m_dbId = (*(iter++)).toInt();
     m_url = KUrl( *(iter++) );
@@ -768,7 +769,7 @@ SqlPodcastChannel::applyPurge()
 void
 SqlPodcastChannel::updateInDb()
 {
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
 
     QString boolTrue = sqlStorage->boolTrue();
     QString boolFalse = sqlStorage->boolFalse();
@@ -844,7 +845,7 @@ SqlPodcastChannel::updateInDb()
 void
 SqlPodcastChannel::deleteFromDb()
 {
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
     foreach( SqlPodcastEpisodePtr sqlEpisode, m_episodes )
     {
        sqlEpisode->deleteFromDb();
@@ -861,7 +862,7 @@ SqlPodcastChannel::loadEpisodes()
 {
     m_episodes.clear();
 
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
 
     //If purge is enabled we must limit the number of results
     QString command;
diff --git a/src/core-impl/podcasts/sql/SqlPodcastProvider.cpp \
b/src/core-impl/podcasts/sql/SqlPodcastProvider.cpp index 1bc1349..fcff936 100644
--- a/src/core-impl/podcasts/sql/SqlPodcastProvider.cpp
+++ b/src/core-impl/podcasts/sql/SqlPodcastProvider.cpp
@@ -24,14 +24,14 @@
 #include "browsers/playlistbrowser/PodcastModel.h"
 #include "context/popupdropper/libpud/PopupDropper.h"
 #include "context/popupdropper/libpud/PopupDropperItem.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 #include "core/interfaces/Logger.h"
 #include "core/podcasts/PodcastImageFetcher.h"
 #include "core/podcasts/PodcastReader.h"
 #include "core/support/Amarok.h"
 #include "core/support/Components.h"
 #include "core/support/Debug.h"
-#include "core-impl/collections/support/CollectionManager.h"
+#include "core-impl/storage/StorageManager.h"
 #include "core-impl/podcasts/sql/PodcastSettingsDialog.h"
 #include "playlistmanager/sql/SqlPlaylistGroup.h"
 
@@ -79,7 +79,7 @@ SqlPodcastProvider::SqlPodcastProvider()
 {
     connect( m_updateTimer, SIGNAL(timeout()), SLOT(autoUpdate()) );
 
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
 
     if( !sqlStorage )
     {
@@ -165,7 +165,7 @@ void
 SqlPodcastProvider::loadPodcasts()
 {
     m_channels.clear();
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
     if( !sqlStorage )
         return;
 
@@ -195,7 +195,7 @@ SqlPodcastProvider::sqlEpisodeForString( const QString &string )
     if( string.isEmpty() )
         return SqlPodcastEpisodePtr();
 
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
     if( !sqlStorage )
         return SqlPodcastEpisodePtr();
 
@@ -243,7 +243,7 @@ SqlPodcastProvider::sqlEpisodeForString( const QString &string )
 bool
 SqlPodcastProvider::possiblyContainsTrack( const KUrl &url ) const
 {
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
     if( !sqlStorage )
         return false;
 
@@ -460,7 +460,7 @@ SqlPodcastProvider::addPodcast( const KUrl &url )
     KUrl kurl = KUrl( url );
     debug() << "importing " << kurl.url();
 
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
     if( !sqlStorage )
         return;
 
@@ -577,7 +577,7 @@ SqlPodcastProvider::removeSubscription( \
Podcasts::SqlPodcastChannelPtr sqlChanne  //Remove it when we know it's supposed to \
be empty.  if( m_channels.isEmpty() )
     {
-        SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+        SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
         if( !sqlStorage )
             return;
         debug() << "Unsubscribed from last channel, cleaning out the podcastepisodes \
table."; @@ -1438,7 +1438,7 @@ SqlPodcastProvider::redirected( KIO::Job *job, const \
KUrl &redirectedUrl )  void
 SqlPodcastProvider::createTables() const
 {
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
     if( !sqlStorage )
         return;
 
@@ -1486,7 +1486,7 @@ SqlPodcastProvider::updateDatabase( int fromVersion, int \
                toVersion )
     debug() << QString( "Updating Podcast tables from version %1 to version %2" )
             .arg( fromVersion ).arg( toVersion );
 
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
     if( !sqlStorage )
         return;
 #define escape(x) sqlStorage->escape(x)
diff --git a/src/core-impl/storage/StorageManager.cpp \
b/src/core-impl/storage/StorageManager.cpp new file mode 100644
index 0000000..317d447
--- /dev/null
+++ b/src/core-impl/storage/StorageManager.cpp
@@ -0,0 +1,168 @@
+/****************************************************************************************
 + * Copyright (c) 2014 Ralf Engels <ralf-engels@gmx.de>                              \
* + *                                                                                 \
* + * This program 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 2 of the License, or (at your option) any later      \
* + * version.                                                                        \
* + *                                                                                 \
* + * This program 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    \
* + * this program.  If not, see <http://www.gnu.org/licenses/>.                      \
* + ****************************************************************************************/
 +
+#define DEBUG_PREFIX "StorageManager"
+
+#include "StorageManager.h"
+
+#include <core/storage/SqlStorage.h>
+#include <core/collections/Collection.h>
+
+#include <core/support/Amarok.h>
+#include <core/support/Debug.h>
+
+#include <KConfigGroup>
+
+/** A SqlStorage that doesn't do anything.
+ *
+ *  An object of this type is used whenever we couldn't
+ *  load a better SqlStorage.
+ *
+ *  The reason is that plugins don't have to check for
+ *  a null pointer as SqlStorage every time.
+ */
+class EmptySqlStorage : public SqlStorage
+{
+public:
+    EmptySqlStorage() {}
+    virtual ~EmptySqlStorage() {}
+
+    virtual int sqlDatabasePriority() const
+    { return 10; }
+
+    virtual QString type() const { return QLatin1String("Empty"); }
+
+    virtual QString escape( const QString &text) const { return text; }
+
+    virtual QStringList query( const QString &) { return QStringList(); }
+    virtual int insert( const QString &, const QString &) { return 0; }
+
+    virtual QString boolTrue() const { return QString(); }
+    virtual QString boolFalse() const { return QString(); }
+
+    virtual QString idType() const { return QString(); };
+    virtual QString textColumnType( int ) const { return QString(); }
+    virtual QString exactTextColumnType( int ) const { return QString(); }
+
+    virtual QString exactIndexableTextColumnType( int ) const { return QString(); }
+    virtual QString longTextColumnType() const { return QString(); }
+    virtual QString randomFunc() const { return QString(); }
+
+    virtual QStringList getLastErrors() const  { return QStringList(); }
+
+    /** Clears the list of the last errors. */
+    virtual void clearLastErrors() { }
+
+};
+
+static EmptySqlStorage emptyStorage;
+
+
+struct StorageManager::Private
+{
+    SqlStorage* sqlDatabase;
+};
+
+StorageManager *StorageManager::s_instance = 0;
+
+
+StorageManager *
+StorageManager::instance()
+{
+    if( !s_instance ) {
+        s_instance = new StorageManager();
+        s_instance->init();
+    }
+
+    return s_instance;
+}
+
+void
+StorageManager::destroy()
+{
+    if( s_instance ) {
+        delete s_instance;
+        s_instance = 0;
+    }
+}
+
+StorageManager::StorageManager()
+    : QObject()
+    , d( new Private )
+{
+    DEBUG_BLOCK
+
+    setObjectName( "StorageManager" );
+    qRegisterMetaType<SqlStorage *>( "SqlStorage*" );
+    d->sqlDatabase = &emptyStorage;
+}
+
+StorageManager::~StorageManager()
+{
+    DEBUG_BLOCK
+
+    delete d->sqlDatabase;
+    delete d;
+}
+
+SqlStorage*
+StorageManager::sqlStorage() const
+{
+    return d->sqlDatabase;
+}
+
+void
+StorageManager::init()
+{
+}
+
+
+void
+StorageManager::setFactories( const QList<Plugins::PluginFactory*> &factories )
+{
+    using Collections::CollectionFactory;
+
+    foreach( Plugins::PluginFactory* pFactory, factories )
+    {
+        CollectionFactory *factory = qobject_cast<CollectionFactory*>( pFactory );
+        if( !factory )
+            continue;
+
+        connect( factory, SIGNAL(newStorage(SqlStorage*)),
+                 this, SLOT(slotNewStorage(SqlStorage*)) );
+    }
+}
+
+void
+StorageManager::slotNewStorage( SqlStorage* newStorage )
+{
+    DEBUG_BLOCK
+
+    if( !newStorage )
+    {
+        debug() << "Warning, newStorage in slotNewStorage is 0";
+        return;
+    }
+
+    if( d->sqlDatabase )
+        return; // once we have the database set we can't change it since
+        // plugins might have already created their tables in the old database
+        // or caching data from it.
+
+    d->sqlDatabase = newStorage;
+}
+
+
diff --git a/src/core-impl/storage/StorageManager.h \
b/src/core-impl/storage/StorageManager.h new file mode 100644
index 0000000..4d5fa34
--- /dev/null
+++ b/src/core-impl/storage/StorageManager.h
@@ -0,0 +1,99 @@
+/****************************************************************************************
 + * Copyright (c) 2014 Ralf Engels <ralf-engels@gmx.de>                              \
* + *                                                                                 \
* + * This program 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 2 of the License, or (at your option) any later      \
* + * version.                                                                        \
* + *                                                                                 \
* + * This program 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    \
* + * this program.  If not, see <http://www.gnu.org/licenses/>.                      \
* + ****************************************************************************************/
 +
+#ifndef AMAROK_STORAGEMANAGER_H
+#define AMAROK_STORAGEMANAGER_H
+
+#include "amarok_export.h"
+
+#include <QObject>
+#include <QList>
+
+namespace Plugins {
+    class PluginFactory;
+}
+
+class SqlStorage;
+
+/** Class managing the Amarok SqlStorage
+ *
+ *  This singleton class is the main responsible for providing everybody
+ *  with the current SqlStorage.
+ */
+class AMAROK_EXPORT StorageManager : public QObject
+{
+    Q_OBJECT
+
+    public:
+
+        /** Get THE instance of the storage manager.
+         *
+         * This function will return the storage manager
+         * that returns the sql storage to be used for Amarok.
+         *
+         * In addition to the SqlCollection a lot of other components
+         * use a sql storage to persist data.
+         *
+         */
+        static StorageManager *instance();
+
+        /** Destroys the instance of the StorageManager.
+         */
+        static void destroy();
+
+        /**
+            retrieve an interface which allows client-code to store/load data in a \
relational database. +            Note: code using this method does NOT take \
ownership of the pointer, but may cache the pointer +            Note2: You should \
never modify the database unless you really really know what you do. +                \
Using the SqlMeta (e.g. SqlRegistry or SqlTrack) is much better. +            @return \
Returns a pointer to the amarok wide SqlStorage or +                    to an \
internal dummy SqlStorage if that cannot be found. +                    It never \
returns a null pointer. +        */
+        SqlStorage* sqlStorage() const;
+
+        /**
+         * Set the list of current factories
+         *
+         * For every factory that is a CollectionFactory uses it to create new
+         * collections and register with this manager.
+         */
+        void setFactories( const QList<Plugins::PluginFactory*> &factories );
+
+    private slots:
+
+        /** Will be called whenever a factory emits a newStorage signal.
+         *
+         *  The first factory to emit this signal will get it's storage
+         *  registered as "the" storage.
+         */
+        void slotNewStorage( SqlStorage* newStorage );
+
+    private:
+        static StorageManager* s_instance;
+        StorageManager();
+        ~StorageManager();
+
+        void init();
+
+
+        Q_DISABLE_COPY( StorageManager )
+
+        struct Private;
+        Private * const d;
+};
+
+#endif /* AMAROK_STORAGEMANAGER_H */
diff --git a/src/core-impl/support/TagStatisticsStore.cpp \
b/src/core-impl/support/TagStatisticsStore.cpp index acdace5..d72aced 100644
--- a/src/core-impl/support/TagStatisticsStore.cpp
+++ b/src/core-impl/support/TagStatisticsStore.cpp
@@ -16,9 +16,9 @@
 
 #include "TagStatisticsStore.h"
 
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 #include "core/meta/Meta.h"
-#include "core-impl/collections/support/CollectionManager.h"
+#include "core-impl/storage/StorageManager.h"
 
 TagStatisticsStore::TagStatisticsStore( Meta::Track *track )
     : PersistentStatisticsStore( track )
@@ -26,7 +26,7 @@ TagStatisticsStore::TagStatisticsStore( Meta::Track *track )
     , m_artist( track->artist() ? track->artist()->name() : QString() )
     , m_album( track->album() ? track->album()->name() : QString() )
 {
-    SqlStorage *sql = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sql = StorageManager::instance()->sqlStorage();
 
     const QString query = "SELECT firstPlayed, lastPlayed, score, rating, playcount \
                FROM "
                           "statistics_tag WHERE name = '%1' AND artist = '%2' AND \
album = '%3'"; @@ -46,7 +46,7 @@ TagStatisticsStore::TagStatisticsStore( Meta::Track \
*track )  void
 TagStatisticsStore::save()
 {
-    SqlStorage *sql = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sql = StorageManager::instance()->sqlStorage();
 
     const QString check = "SELECT COUNT(*) FROM statistics_tag WHERE name = '%1' "
                           "AND artist = '%2' AND album = '%3'";
diff --git a/src/core-impl/support/UrlStatisticsStore.cpp \
b/src/core-impl/support/UrlStatisticsStore.cpp index e0bb772..b25c318 100644
--- a/src/core-impl/support/UrlStatisticsStore.cpp
+++ b/src/core-impl/support/UrlStatisticsStore.cpp
@@ -16,10 +16,10 @@
 
 #include "UrlStatisticsStore.h"
 
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 #include "core/meta/Meta.h"
 #include "core/support/Debug.h"
-#include "core-impl/collections/support/CollectionManager.h"
+#include "core-impl/storage/StorageManager.h"
 
 UrlStatisticsStore::UrlStatisticsStore( Meta::Track *track, const QString \
&permanentUrl )  : PersistentStatisticsStore( track )
@@ -27,7 +27,7 @@ UrlStatisticsStore::UrlStatisticsStore( Meta::Track *track, const \
QString &perma  {
     if( m_permanentUrl.isEmpty() )
         m_permanentUrl = track->uidUrl();
-    SqlStorage *sql = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sql = StorageManager::instance()->sqlStorage();
     if( !sql )
     {
         warning() << __PRETTY_FUNCTION__ << "could not get SqlStorage, aborting";
@@ -51,7 +51,7 @@ UrlStatisticsStore::UrlStatisticsStore( Meta::Track *track, const \
QString &perma  void
 UrlStatisticsStore::save()
 {
-    SqlStorage *sql = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sql = StorageManager::instance()->sqlStorage();
     if( !sql )
     {
         warning() << __PRETTY_FUNCTION__ << "could not get SqlStorage, aborting";
diff --git a/src/core/storage/SqlStorage.h b/src/core/storage/SqlStorage.h
new file mode 100644
index 0000000..02e538b
--- /dev/null
+++ b/src/core/storage/SqlStorage.h
@@ -0,0 +1,71 @@
+/****************************************************************************************
 + * Copyright (c) 2007 Maximilian Kossick <maximilian.kossick@googlemail.com>        \
* + *                                                                                 \
* + * This program 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 2 of the License, or (at your option) any later      \
* + * version.                                                                        \
* + *                                                                                 \
* + * This program 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    \
* + * this program.  If not, see <http://www.gnu.org/licenses/>.                      \
* + ****************************************************************************************/
 +
+#ifndef AMAROK_SQLSTORAGE_H
+#define AMAROK_SQLSTORAGE_H
+
+#include "core/amarokcore_export.h"
+
+#include <QMetaType>
+#include <QString>
+#include <QStringList>
+
+/** The abstract SqlStorage engine
+    Only current implementations are in core-impl/collections/db/sql
+*/
+class SqlStorage
+{
+public:
+    SqlStorage() {}
+    virtual ~SqlStorage() {}
+
+    /** Returns e.g. MySQLe */
+    virtual QString type() const = 0;
+
+    virtual QString escape( const QString &text ) const = 0;
+
+    virtual QStringList query( const QString &query ) = 0;
+    virtual int insert( const QString &statement, const QString &table ) = 0;
+
+    virtual QString boolTrue() const = 0;
+    virtual QString boolFalse() const = 0;
+
+    /**
+        use this type for auto incrementing integer primary keys.
+    */
+    virtual QString idType() const = 0;
+
+    virtual QString textColumnType( int length = 255 ) const = 0;
+    virtual QString exactTextColumnType( int length = 1000 ) const = 0;
+    //the below value may have to be decreased even more for different indexes; only \
time will tell +    virtual QString exactIndexableTextColumnType( int length = 324 ) \
const = 0; +    virtual QString longTextColumnType() const = 0;
+    virtual QString randomFunc() const = 0;
+
+    /** Returns a list of the last sql errors.
+      The list might not include every one error if the number
+      is beyond a sensible limit.
+      */
+    virtual QStringList getLastErrors() const = 0;
+
+    /** Clears the list of the last errors. */
+    virtual void clearLastErrors() = 0;
+
+};
+
+Q_DECLARE_METATYPE( SqlStorage * )
+
+#endif
diff --git a/src/playlistmanager/sql/SqlPlaylist.cpp \
b/src/playlistmanager/sql/SqlPlaylist.cpp index 6dfd0d1..4cca330 100644
--- a/src/playlistmanager/sql/SqlPlaylist.cpp
+++ b/src/playlistmanager/sql/SqlPlaylist.cpp
@@ -16,9 +16,9 @@
 
 #include "SqlPlaylist.h"
 
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 #include "core/support/Debug.h"
-#include "core-impl/collections/support/CollectionManager.h"
+#include "core-impl/storage/StorageManager.h"
 #include "core-impl/meta/proxy/MetaProxy.h"
 #include "core-impl/meta/stream/Stream.h"
 #include "core-impl/meta/timecode/TimecodeMeta.h"
@@ -102,7 +102,7 @@ SqlPlaylist::saveToDb( bool tracks )
     if( m_parent )
         parentId = m_parent->id();
 
-    SqlStorage *sql = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sql = StorageManager::instance()->sqlStorage();
 
     //figure out if we have a urlId and if this id is already in the db, if so, \
update it instead of creating a new one.  if( !m_urlId.isEmpty() )
@@ -129,14 +129,14 @@ SqlPlaylist::saveToDb( bool tracks )
         query = query.arg( QString::number( parentId ) )
                 .arg( sql->escape( m_name ) )
                 .arg( QString::number( m_dbId ) );
-        CollectionManager::instance()->sqlStorage()->query( query );
+        StorageManager::instance()->sqlStorage()->query( query );
 
         if( tracks )
         {
             //delete existing tracks and insert all
             query = "DELETE FROM playlist_tracks where playlist_id=%1;";
             query = query.arg( QString::number( m_dbId ) );
-            CollectionManager::instance()->sqlStorage()->query( query );
+            StorageManager::instance()->sqlStorage()->query( query );
             saveTracks();
         }
     }
@@ -148,7 +148,7 @@ SqlPlaylist::saveToDb( bool tracks )
         query = query.arg( QString::number( parentId ) )
                 .arg( sql->escape( m_name ) )
                 .arg( sql->escape( m_urlId ) );
-        m_dbId = CollectionManager::instance()->sqlStorage()->insert( query, \
"playlists" ); +        m_dbId = StorageManager::instance()->sqlStorage()->insert( \
query, "playlists" );  if( tracks )
             saveTracks();
     }
@@ -173,7 +173,7 @@ void
 SqlPlaylist::saveTracks()
 {
     int trackNum = 1;
-    SqlStorage *sql = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sql = StorageManager::instance()->sqlStorage();
 
     foreach( Meta::TrackPtr trackPtr, m_tracks )
     {
@@ -256,7 +256,7 @@ SqlPlaylist::loadTracks()
                     "playlist_tracks WHERE playlist_id=%1 ORDER BY track_num";
     query = query.arg( QString::number( m_dbId ) );
 
-    QStringList result = CollectionManager::instance()->sqlStorage()->query( query \
); +    QStringList result = StorageManager::instance()->sqlStorage()->query( query \
);  
     int resultRows = result.count() / 7;
 
@@ -288,11 +288,11 @@ SqlPlaylist::removeFromDb()
 {
     QString query = "DELETE FROM playlist_tracks WHERE playlist_id=%1";
     query = query.arg( QString::number( m_dbId ) );
-    CollectionManager::instance()->sqlStorage()->query( query );
+    StorageManager::instance()->sqlStorage()->query( query );
 
     query = "DELETE FROM playlists WHERE id=%1";
     query = query.arg( QString::number( m_dbId ) );
-    CollectionManager::instance()->sqlStorage()->query( query );
+    StorageManager::instance()->sqlStorage()->query( query );
 }
 
 } //namespace Playlists
diff --git a/src/playlistmanager/sql/SqlPlaylistGroup.cpp \
b/src/playlistmanager/sql/SqlPlaylistGroup.cpp index d22dcd2..47c6baf 100644
--- a/src/playlistmanager/sql/SqlPlaylistGroup.cpp
+++ b/src/playlistmanager/sql/SqlPlaylistGroup.cpp
@@ -16,9 +16,9 @@
 
 #include "SqlPlaylistGroup.h"
 
-#include "core-impl/collections/support/CollectionManager.h"
+#include "core-impl/storage/StorageManager.h"
 #include "core/support/Debug.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 
 #include <typeinfo>
 
@@ -62,7 +62,7 @@ SqlPlaylistGroup::save()
     if ( m_parent )
         parentId = m_parent->id();
 
-    SqlStorage* sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage* sqlStorage = StorageManager::instance()->sqlStorage();
     if( !sqlStorage )
         return;
 
@@ -103,7 +103,7 @@ SqlPlaylistGroup::setDescription( const QString &description )
 void
 SqlPlaylistGroup::removeFromDb()
 {
-    SqlStorage* sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage* sqlStorage = StorageManager::instance()->sqlStorage();
     if( !sqlStorage )
         return;
 
@@ -140,7 +140,7 @@ SqlPlaylistGroup::setParent( SqlPlaylistGroupPtr parent )
 SqlPlaylistGroupList
 SqlPlaylistGroup::childSqlGroups() const
 {
-    SqlStorage* sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage* sqlStorage = StorageManager::instance()->sqlStorage();
     if( !sqlStorage )
         return SqlPlaylistGroupList();
 
@@ -172,7 +172,7 @@ SqlPlaylistGroup::childSqlGroups() const
 SqlPlaylistList
 SqlPlaylistGroup::childSqlPlaylists() const
 {
-    SqlStorage* sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage* sqlStorage = StorageManager::instance()->sqlStorage();
     if( !sqlStorage )
         return SqlPlaylistList();
 
diff --git a/src/playlistmanager/sql/SqlUserPlaylistProvider.cpp \
b/src/playlistmanager/sql/SqlUserPlaylistProvider.cpp index bfb0f85..f21d412 100644
--- a/src/playlistmanager/sql/SqlUserPlaylistProvider.cpp
+++ b/src/playlistmanager/sql/SqlUserPlaylistProvider.cpp
@@ -19,11 +19,11 @@
 
 #include "SvgHandler.h"
 #include "browsers/playlistbrowser/UserPlaylistModel.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 #include "core/playlists/PlaylistFormat.h"
 #include "core/support/Amarok.h"
 #include "core/support/Debug.h"
-#include "core-impl/collections/support/CollectionManager.h"
+#include "core-impl/storage/StorageManager.h"
 #include "core-impl/playlists/types/file/m3u/M3UPlaylist.h"
 #include "core-impl/playlists/types/file/pls/PLSPlaylist.h"
 #include "core-impl/playlists/types/file/xspf/XSPFPlaylist.h"
@@ -188,7 +188,7 @@ SqlUserPlaylistProvider::createTables()
 {
     DEBUG_BLOCK
 
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
     if( !sqlStorage )
     {
         debug() << "No SQL Storage available!";
@@ -229,7 +229,7 @@ SqlUserPlaylistProvider::deleteTables()
 {
     DEBUG_BLOCK
 
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
 
     if( !sqlStorage )
     {
@@ -253,7 +253,7 @@ SqlUserPlaylistProvider::checkTables()
 {
     DEBUG_BLOCK
 
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
     QStringList values;
 
     //Prevents amarok from crashing on bad DB
@@ -299,7 +299,7 @@ void
 SqlUserPlaylistProvider::upgradeVersion2to3()
 {
     DEBUG_BLOCK
-    SqlStorage *sqlStorage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlStorage = StorageManager::instance()->sqlStorage();
     sqlStorage->query( "ALTER TABLE playlists DROP COLUMN description" );
 }
 
diff --git a/src/scripting/scriptengine/AmarokCollectionScript.cpp \
b/src/scripting/scriptengine/AmarokCollectionScript.cpp index 449dda8..fee3a33 100644
--- a/src/scripting/scriptengine/AmarokCollectionScript.cpp
+++ b/src/scripting/scriptengine/AmarokCollectionScript.cpp
@@ -18,8 +18,9 @@
 
 #include "amarokconfig.h"
 #include "App.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 #include "core-impl/collections/support/CollectionManager.h"
+#include "core-impl/storage/StorageManager.h"
 #include "core/collections/Collection.h"
 #include "core-impl/collections/db/sql/SqlCollectionLocation.h"
 #include "core/collections/QueryMaker.h"
@@ -118,13 +119,13 @@ AmarokCollectionScript::collectionLocation() const
 QStringList
 AmarokCollectionScript::query( const QString& sql ) const
 {
-    return CollectionManager::instance()->sqlStorage()->query( sql );
+    return StorageManager::instance()->sqlStorage()->query( sql );
 }
 
 QString
 AmarokCollectionScript::escape( const QString& sql ) const
 {
-    return CollectionManager::instance()->sqlStorage()->escape( sql );
+    return StorageManager::instance()->sqlStorage()->escape( sql );
 }
 
 void
diff --git a/src/services/ServiceSqlCollection.cpp \
b/src/services/ServiceSqlCollection.cpp index 24f187a..b8e0d77 100644
--- a/src/services/ServiceSqlCollection.cpp
+++ b/src/services/ServiceSqlCollection.cpp
@@ -17,9 +17,9 @@
 
 #include "ServiceSqlCollection.h"
 
-#include "core-impl/collections/support/CollectionManager.h"
 #include "ServiceSqlQueryMaker.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
+#include <core-impl/storage/StorageManager.h>
 
 #include <klocale.h>
 
@@ -59,20 +59,20 @@ ServiceSqlCollection::queryMaker()
 QStringList
 ServiceSqlCollection::query( const QString &statement )
 {
-    return CollectionManager::instance()->sqlStorage()->query( statement );
+    return StorageManager::instance()->sqlStorage()->query( statement );
 }
 
 int
 ServiceSqlCollection::insert( const QString &statement, const QString &table )
 {
-    return CollectionManager::instance()->sqlStorage()->insert( statement, table );
+    return StorageManager::instance()->sqlStorage()->insert( statement, table );
 }
 
 
 QString
 ServiceSqlCollection::escape( QString text ) const
 {
-    return CollectionManager::instance()->sqlStorage()->escape( text );
+    return StorageManager::instance()->sqlStorage()->escape( text );
 }
 
 Meta::TrackPtr
@@ -88,7 +88,7 @@ ServiceSqlCollection::trackForUrl(const KUrl & url)
 
     QString pristineUrl = url.url();
 
-    SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlDb = StorageManager::instance()->sqlStorage();
 
     QString from =  prefix + "_tracks";
     from += " LEFT JOIN " + prefix + "_albums ON " + prefix + "_tracks.album_id = " \
                + prefix + "_albums.id";
diff --git a/src/services/ServiceSqlQueryMaker.cpp \
b/src/services/ServiceSqlQueryMaker.cpp index 64cead7..cfd9377 100644
--- a/src/services/ServiceSqlQueryMaker.cpp
+++ b/src/services/ServiceSqlQueryMaker.cpp
@@ -19,10 +19,10 @@
 
 #include "ServiceSqlQueryMaker.h"
 
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 #include "core/meta/support/MetaConstants.h"
 #include "core/support/Debug.h"
-#include "core-impl/collections/support/CollectionManager.h"
+#include "core-impl/storage/StorageManager.h"
 #include "ServiceSqlCollection.h"
 
 #include <threadweaver/Job.h>
@@ -764,7 +764,7 @@ ServiceSqlQueryMaker::handleYears( const QStringList &result )
 QString
 ServiceSqlQueryMaker::escape( QString text ) const //krazy2:exclude=constref
 {
-    SqlStorage *storage = CollectionManager::instance()->sqlStorage();
+    SqlStorage *storage = StorageManager::instance()->sqlStorage();
     if( storage )
         return storage->escape( text );
     else
diff --git a/src/services/jamendo/JamendoDatabaseHandler.cpp \
b/src/services/jamendo/JamendoDatabaseHandler.cpp index a05cfd0..b44be2c 100644
--- a/src/services/jamendo/JamendoDatabaseHandler.cpp
+++ b/src/services/jamendo/JamendoDatabaseHandler.cpp
@@ -16,9 +16,9 @@
 
 #include "JamendoDatabaseHandler.h"
 
-#include "core-impl/collections/support/CollectionManager.h"
+#include "core-impl/storage/StorageManager.h"
 #include "core/support/Debug.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 
 using namespace Meta;
 
@@ -34,7 +34,7 @@ void
 JamendoDatabaseHandler::createDatabase( )
 {
     //Get database instance
-    SqlStorage *db = CollectionManager::instance()->sqlStorage();
+    SqlStorage *db = StorageManager::instance()->sqlStorage();
 
 
     QString autoIncrement = "AUTO_INCREMENT";
@@ -114,7 +114,7 @@ JamendoDatabaseHandler::destroyDatabase( )
 {
     debug() << "Destroy Jamendo database ";
 
-    SqlStorage *db = CollectionManager::instance()->sqlStorage();
+    SqlStorage *db = StorageManager::instance()->sqlStorage();
 
     QStringList  result = db->query( "DROP INDEX jamendo_tracks_id ON \
                jamendo_tracks;");
     result = db->query( "DROP INDEX jamendo_tracks_artist_id ON jamendo_tracks;");
@@ -143,7 +143,7 @@ JamendoDatabaseHandler::insertTrack( ServiceTrack *track )
     JamendoTrack * jTrack = static_cast<JamendoTrack *> ( track );
     QString numberString;
 
-    SqlStorage *db = CollectionManager::instance()->sqlStorage();
+    SqlStorage *db = StorageManager::instance()->sqlStorage();
     QString queryString = "INSERT INTO jamendo_tracks ( id, name, track_number, \
length, "  "album_id, artist_id, preview_url ) VALUES ( "
                           + QString::number( jTrack->id() ) + ", '"
@@ -180,7 +180,7 @@ JamendoDatabaseHandler::insertAlbum( ServiceAlbum *album )
     JamendoAlbum * jAlbum = static_cast<JamendoAlbum *> ( album );
 
     QString queryString, popularity;
-    SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlDb = StorageManager::instance()->sqlStorage();
 
     popularity = QString::number( jAlbum->popularity() );
     if( popularity == "nan" ) // sometimes this seems to happen, I don't know why
@@ -211,7 +211,7 @@ JamendoDatabaseHandler::insertArtist( ServiceArtist *artist )
 {
     JamendoArtist * jArtist = static_cast<JamendoArtist *> ( artist );
     QString queryString;
-    SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlDb = StorageManager::instance()->sqlStorage();
     queryString = "INSERT INTO jamendo_artists ( id, name, description, "
                   "country, photo_url, jamendo_url, home_url "
                   ") VALUES ( "
@@ -236,7 +236,7 @@ JamendoDatabaseHandler::insertArtist( ServiceArtist *artist )
 int JamendoDatabaseHandler::insertGenre(ServiceGenre * genre)
 {
     QString queryString;
-    SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlDb = StorageManager::instance()->sqlStorage();
     queryString = "INSERT INTO jamendo_genre ( album_id, name "
                   ") VALUES ( "
                   + QString::number ( genre->albumId() ) + ", '"
@@ -250,7 +250,7 @@ int JamendoDatabaseHandler::insertGenre(ServiceGenre * genre)
 void
 JamendoDatabaseHandler::begin( )
 {
-    CollectionManager *mgr = CollectionManager::instance();
+    StorageManager *mgr = StorageManager::instance();
     QString queryString = "BEGIN;";
     mgr->sqlStorage()->query( queryString );
 }
@@ -258,7 +258,7 @@ JamendoDatabaseHandler::begin( )
 void
 JamendoDatabaseHandler::commit( )
 {
-    CollectionManager *mgr = CollectionManager::instance();
+    StorageManager *mgr = StorageManager::instance();
     QString queryString = "COMMIT;";
     mgr->sqlStorage()->query( queryString );
 }
@@ -268,7 +268,7 @@ JamendoDatabaseHandler::trimGenres( int minCount )
 {
     QString query = QString("delete from jamendo_genre where name IN ( SELECT name \
from jamendo_genre GROUP BY jamendo_genre.name HAVING COUNT ( jamendo_genre.name ) < \
%1 );").arg( minCount );  
-    SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlDb = StorageManager::instance()->sqlStorage();
     sqlDb->query( query );
 
     //also trim genre names that have only 1 or 2 chars
diff --git a/src/services/magnatune/MagnatuneDatabaseHandler.cpp \
b/src/services/magnatune/MagnatuneDatabaseHandler.cpp index dd1c75c..c5cdede 100644
--- a/src/services/magnatune/MagnatuneDatabaseHandler.cpp
+++ b/src/services/magnatune/MagnatuneDatabaseHandler.cpp
@@ -16,9 +16,9 @@
 
 #include "MagnatuneDatabaseHandler.h"
 
-#include "core-impl/collections/support/CollectionManager.h"
-#include "core/support/Debug.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core-impl/storage/StorageManager.h>
+#include <core/support/Debug.h>
+#include <core/storage/SqlStorage.h>
 
 using namespace Meta;
 
@@ -33,7 +33,7 @@ void
 MagnatuneDatabaseHandler::createDatabase( )
 {
     //Get database instance
-    SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlDb = StorageManager::instance()->sqlStorage();
 
     QString autoIncrement = "AUTO_INCREMENT";
 
@@ -118,7 +118,7 @@ MagnatuneDatabaseHandler::createDatabase( )
 void
 MagnatuneDatabaseHandler::destroyDatabase( )
 {
-    SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlDb = StorageManager::instance()->sqlStorage();
     QStringList result = sqlDb->query( "DROP TABLE IF EXISTS magnatune_tracks;" );
     result = sqlDb->query( "DROP TABLE IF EXISTS magnatune_albums;" );
     result = sqlDb->query( "DROP TABLE IF EXISTS magnatune_artists;" );
@@ -150,7 +150,7 @@ MagnatuneDatabaseHandler::insertTrack( ServiceTrack *track )
 {
     MagnatuneTrack * mTrack = static_cast<MagnatuneTrack *> ( track );
 
-    SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlDb = StorageManager::instance()->sqlStorage();
     QString queryString = "INSERT INTO magnatune_tracks ( name, track_number, \
                length, "
             "album_id, artist_id, preview_lofi, preview_ogg, preview_url ) VALUES ( \
'"  + sqlDb->escape( mTrack->name()) + "', "
@@ -178,7 +178,7 @@ MagnatuneDatabaseHandler::insertAlbum( ServiceAlbum *album )
     MagnatuneAlbum * mAlbum = static_cast<MagnatuneAlbum *> ( album );
 
     QString queryString;
-    SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlDb = StorageManager::instance()->sqlStorage();
     queryString = "INSERT INTO magnatune_albums ( name, year, artist_id, "
                   "album_code, cover_url, description ) VALUES ( '"
                   + sqlDb->escape( sqlDb->escape( mAlbum->name() ) ) + "', "
@@ -201,7 +201,7 @@ MagnatuneDatabaseHandler::insertArtist( ServiceArtist *artist )
     MagnatuneArtist * mArtist = static_cast<MagnatuneArtist *> ( artist );
 
     QString queryString;
-    SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlDb = StorageManager::instance()->sqlStorage();
     queryString = "INSERT INTO magnatune_artists ( name, artist_page, description, "
                   "photo_url ) VALUES ( '"
                   + sqlDb->escape( mArtist->name() ) + "', '"
@@ -219,7 +219,7 @@ void
 MagnatuneDatabaseHandler::begin( )
 {
 
-    SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlDb = StorageManager::instance()->sqlStorage();
 
     QString queryString = "BEGIN;";
 
@@ -229,7 +229,7 @@ MagnatuneDatabaseHandler::begin( )
 void
 MagnatuneDatabaseHandler::commit( )
 {
-    SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlDb = StorageManager::instance()->sqlStorage();
     QString queryString = "COMMIT;";
 
     sqlDb->query( queryString );
@@ -240,7 +240,7 @@ void MagnatuneDatabaseHandler::insertMoods(int trackId, const \
QStringList &moods  {
 
     QString queryString;
-    SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlDb = StorageManager::instance()->sqlStorage();
 
     foreach( const QString &mood, moods ) {
         queryString = "INSERT INTO magnatune_moods ( track_id, mood ) VALUES ( "
@@ -256,7 +256,7 @@ void MagnatuneDatabaseHandler::insertMoods(int trackId, const \
QStringList &moods  int MagnatuneDatabaseHandler::getArtistIdByExactName(const \
QString & name)  {
 
-    SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlDb = StorageManager::instance()->sqlStorage();
 
     QString queryString = "SELECT id from magnatune_artists WHERE name='" + \
sqlDb->escape( name ) + "';";  QStringList result = sqlDb->query( queryString );
@@ -274,7 +274,7 @@ int MagnatuneDatabaseHandler::getArtistIdByExactName(const \
QString & name)  
 int MagnatuneDatabaseHandler::getAlbumIdByAlbumCode(const QString & albumcode)
 {
-    SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlDb = StorageManager::instance()->sqlStorage();
 
     QString queryString = "SELECT id from magnatune_albums WHERE album_code='" + \
sqlDb->escape( albumcode ) + "';";  QStringList result = sqlDb->query( queryString );
@@ -292,7 +292,7 @@ int MagnatuneDatabaseHandler::getAlbumIdByAlbumCode(const QString \
& albumcode)  int MagnatuneDatabaseHandler::insertGenre(ServiceGenre * genre)
 {
     QString queryString;
-    SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlDb = StorageManager::instance()->sqlStorage();
     queryString = "INSERT INTO magnatune_genre ( album_id, name "
                   ") VALUES ( "
                   + QString::number ( genre->albumId() ) + ", '"
diff --git a/src/services/magnatune/MagnatuneDatabaseWorker.cpp \
b/src/services/magnatune/MagnatuneDatabaseWorker.cpp index 47c672d..f01ac97 100644
--- a/src/services/magnatune/MagnatuneDatabaseWorker.cpp
+++ b/src/services/magnatune/MagnatuneDatabaseWorker.cpp
@@ -16,8 +16,8 @@
  
 #include "MagnatuneDatabaseWorker.h"
 
-#include "core-impl/collections/support/CollectionManager.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core-impl/storage/StorageManager.h>
+#include <core/storage/SqlStorage.h>
 
 MagnatuneDatabaseWorker::MagnatuneDatabaseWorker()
     : ThreadWeaver::Job()
@@ -101,7 +101,7 @@ void MagnatuneDatabaseWorker::fetchAlbumBySku( const QString & \
sku, ServiceSqlRe  
 void MagnatuneDatabaseWorker::doFetchMoodMap()
 {
-    SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlDb = StorageManager::instance()->sqlStorage();
     QString queryString = "select count( mood ), mood from magnatune_moods GROUP BY \
mood;";  debug() << "Querying for moods: " << queryString;
     QStringList result = sqlDb->query( queryString );
@@ -117,7 +117,7 @@ void MagnatuneDatabaseWorker::doFetchMoodMap()
 
 void MagnatuneDatabaseWorker::doFetchTrackswithMood()
 {
-    SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage();
+    SqlStorage *sqlDb = StorageManager::instance()->sqlStorage();
 
 
 
@@ -177,8 +177,8 @@ void MagnatuneDatabaseWorker::doFetchAlbumBySku()
     QString rows = metaFactory->getAlbumSqlRows()
                  + ','
                  + metaFactory->getArtistSqlRows();
-    
-    SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage();
+
+    SqlStorage *sqlDb = StorageManager::instance()->sqlStorage();
     QString queryString = "SELECT " + rows + " FROM magnatune_albums LEFT JOIN \
magnatune_artists ON magnatune_albums.artist_id = magnatune_artists.id WHERE \
album_code = '" + m_sku + "';";  debug() << "Querying for album: " << queryString;
     QStringList result = sqlDb->query( queryString );
diff --git a/src/services/opmldirectory/OpmlDirectoryDatabaseHandler.cpp \
b/src/services/opmldirectory/OpmlDirectoryDatabaseHandler.cpp index 7e66fc8..194291b \
                100644
--- a/src/services/opmldirectory/OpmlDirectoryDatabaseHandler.cpp
+++ b/src/services/opmldirectory/OpmlDirectoryDatabaseHandler.cpp
@@ -18,7 +18,7 @@
 
 #include "core-impl/collections/support/CollectionManager.h"
 #include "core/support/Debug.h"
-#include "core/collections/support/SqlStorage.h"
+#include <core/storage/SqlStorage.h>
 
 using namespace Meta;
 
diff --git a/tests/core-impl/collections/db/sql/CMakeLists.txt \
b/tests/core-impl/collections/db/sql/CMakeLists.txt index 6f27513..8b3b465 100644
--- a/tests/core-impl/collections/db/sql/CMakeLists.txt
+++ b/tests/core-impl/collections/db/sql/CMakeLists.txt
@@ -5,8 +5,8 @@ macro(add_database_test test_target test_sources)
     #one cannot link to plugins on OS X. As a workaround, add anything relevant that \
goes into the mysqle plugin to each test  set( test_sources_internal
                 ${test_sources}
-                ${AMAROK_SOURCE_TREE}/core-impl/collections/db/sql/mysql-shared/MySqlStorage.cpp
                
-                ${AMAROK_SOURCE_TREE}/core-impl/collections/db/sql/mysqlecollection/MySqlEmbeddedStorage.cpp \
) +                ${AMAROK_SOURCE_TREE}/core-impl/storage/MySqlStorage.cpp
+                ${AMAROK_SOURCE_TREE}/core-impl/storage/MySqlEmbeddedStorage.cpp )
     endif(APPLE)
 
 
diff --git a/tests/core-impl/collections/db/sql/TestDatabaseUpdater.cpp \
b/tests/core-impl/collections/db/sql/TestDatabaseUpdater.cpp index ce1e5e4..c1339a1 \
                100644
--- a/tests/core-impl/collections/db/sql/TestDatabaseUpdater.cpp
+++ b/tests/core-impl/collections/db/sql/TestDatabaseUpdater.cpp
@@ -18,7 +18,7 @@
 
 #include "SqlCollection.h"
 #include "DatabaseUpdater.h"
-#include "mysqlecollection/MySqlEmbeddedStorage.h"
+#include "core-impl/storage/MySqlEmbeddedStorage.h"
 
 #include <KTempDir>
 
diff --git a/tests/core-impl/collections/db/sql/TestSqlAlbum.cpp \
b/tests/core-impl/collections/db/sql/TestSqlAlbum.cpp index 607d921..84ed57e 100644
--- a/tests/core-impl/collections/db/sql/TestSqlAlbum.cpp
+++ b/tests/core-impl/collections/db/sql/TestSqlAlbum.cpp
@@ -18,7 +18,7 @@
 #include "TestSqlAlbum.h"
 
 #include "core/meta/Meta.h"
-#include "mysqlecollection/MySqlEmbeddedStorage.h"
+#include "core-impl/storage/MySqlEmbeddedStorage.h"
 #include "SqlCollection.h"
 #include "SqlMountPointManagerMock.h"
 
diff --git a/tests/core-impl/collections/db/sql/TestSqlArtist.cpp \
b/tests/core-impl/collections/db/sql/TestSqlArtist.cpp index faa5699..aee6444 100644
--- a/tests/core-impl/collections/db/sql/TestSqlArtist.cpp
+++ b/tests/core-impl/collections/db/sql/TestSqlArtist.cpp
@@ -16,13 +16,11 @@
 
 #include "TestSqlArtist.h"
 
-#include "core/support/Debug.h"
 #include "DefaultSqlQueryMakerFactory.h"
 #include "core/meta/Meta.h"
-#include "mysqlecollection/MySqlEmbeddedStorage.h"
+#include "core-impl/storage/MySqlEmbeddedStorage.h"
 #include "SqlCollection.h"
 #include "SqlMountPointManagerMock.h"
-// #include "SqlMeta.h"
 
 #include <qtest_kde.h>
 
diff --git a/tests/core-impl/collections/db/sql/TestSqlCollection.cpp \
b/tests/core-impl/collections/db/sql/TestSqlCollection.cpp index 8930102..9a353eb \
                100644
--- a/tests/core-impl/collections/db/sql/TestSqlCollection.cpp
+++ b/tests/core-impl/collections/db/sql/TestSqlCollection.cpp
@@ -19,7 +19,7 @@
 #include <core/collections/Collection.h>
 #include <core-impl/collections/db/sql/SqlCollection.h>
 #include <core-impl/collections/db/sql/DatabaseUpdater.h>
-#include <core-impl/collections/db/sql/mysqlecollection/MySqlEmbeddedStorage.h>
+#include <core-impl/storage/MySqlEmbeddedStorage.h>
 
 #include "SqlMountPointManagerMock.h"
 
diff --git a/tests/core-impl/collections/db/sql/TestSqlCollectionLocation.cpp \
b/tests/core-impl/collections/db/sql/TestSqlCollectionLocation.cpp index \
                4dd28c7..e565d3e 100644
--- a/tests/core-impl/collections/db/sql/TestSqlCollectionLocation.cpp
+++ b/tests/core-impl/collections/db/sql/TestSqlCollectionLocation.cpp
@@ -22,7 +22,7 @@
 #include "core-impl/logger/ProxyLogger.h"
 #include "DefaultSqlQueryMakerFactory.h"
 #include "core/meta/Meta.h"
-#include "mysqlecollection/MySqlEmbeddedStorage.h"
+#include "core-impl/storage/MySqlEmbeddedStorage.h"
 #include "SqlCollection.h"
 #include "SqlCollectionLocation.h"
 #include "SqlRegistry.h"
diff --git a/tests/core-impl/collections/db/sql/TestSqlQueryMaker.cpp \
b/tests/core-impl/collections/db/sql/TestSqlQueryMaker.cpp index 6ce41df..bb0cbba \
                100644
--- a/tests/core-impl/collections/db/sql/TestSqlQueryMaker.cpp
+++ b/tests/core-impl/collections/db/sql/TestSqlQueryMaker.cpp
@@ -22,7 +22,7 @@
 #include "SqlCollection.h"
 #include "SqlQueryMaker.h"
 #include "SqlRegistry.h"
-#include "mysqlecollection/MySqlEmbeddedStorage.h"
+#include "core-impl/storage/MySqlEmbeddedStorage.h"
 
 #include "SqlMountPointManagerMock.h"
 
diff --git a/tests/core-impl/collections/db/sql/TestSqlScanManager.cpp \
b/tests/core-impl/collections/db/sql/TestSqlScanManager.cpp index 506285d..7b81868 \
                100644
--- a/tests/core-impl/collections/db/sql/TestSqlScanManager.cpp
+++ b/tests/core-impl/collections/db/sql/TestSqlScanManager.cpp
@@ -23,7 +23,7 @@
 #include "core-impl/collections/db/sql/SqlCollection.h"
 #include "core-impl/collections/db/sql/SqlQueryMaker.h"
 #include "core-impl/collections/db/sql/SqlRegistry.h"
-#include "core-impl/collections/db/sql/mysqlecollection/MySqlEmbeddedStorage.h"
+#include "core-impl/storage/MySqlEmbeddedStorage.h"
 
 #include "config-amarok-test.h"
 #include "SqlMountPointManagerMock.h"
diff --git a/tests/core-impl/collections/db/sql/TestSqlTrack.cpp \
b/tests/core-impl/collections/db/sql/TestSqlTrack.cpp index c2b9cea..e6b1160 100644
--- a/tests/core-impl/collections/db/sql/TestSqlTrack.cpp
+++ b/tests/core-impl/collections/db/sql/TestSqlTrack.cpp
@@ -16,10 +16,9 @@
 
 #include "TestSqlTrack.h"
 
-#include "core/support/Debug.h"
 #include "DefaultSqlQueryMakerFactory.h"
 #include "core/meta/Meta.h"
-#include "mysqlecollection/MySqlEmbeddedStorage.h"
+#include "core-impl/storage/MySqlEmbeddedStorage.h"
 
 #include "SqlCollection.h"
 #include "SqlMeta.h"
diff --git a/tests/mocks/SqlStorageMock.h b/tests/mocks/SqlStorageMock.h
index db27e2c..bf70eff 100644
--- a/tests/mocks/SqlStorageMock.h
+++ b/tests/mocks/SqlStorageMock.h
@@ -17,7 +17,7 @@
 #ifndef SQLSTORAGEMOCK_H
 #define SQLSTORAGEMOCK_H
 
-#include "core/collections/support/SqlStorage.h"
+#include "core/storage/SqlStorage.h"
 
 #include <QList>
 #include <QPair>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic