mirror of
https://github.com/clangen/musikcube.git
synced 2025-03-29 19:20:28 +00:00
- Added IIndexerSource interface: plugins will be able to implement this interface to add tracks to the library that will be indexed and maintained like all other tracks - Added IIndexerWriter interface: IIndexerSource plugins will use this interface to add/remove/update track info with the main app - Added IIndexerNotifier: interface used to notify the app that it needs to be re-indexed. - Added "source_id" , "external_id", and "visible" column to the tracks table, with appropriate indexes. - Updated all queries to take "source_id" and "visible" into account - Extracted TrackMetadataQuery from TrackList. Never should have been there to begin with, but was due to some technical limitations that no longer exist. - Fixed a really old indexer bug where the reported number of file scanned was not accurate. Strange this wasn't noticed before. - Added "SetIndexerNotifier" injection method - Fixed a bug in TrackMetadataQuery -- it was unnecessarily relying upon the paths table, which was causing query errors when the table was empty. - Use a cache for local file paths instead of requiring an async round trip when adding/removing - Remove use of manual "ANALYZE", it was causing strange performance degradation issues. Instead, move to a set of PRAGMAs that instructs sqlite to run these optimizations when necessary. - Updated ::GetInt32 and ::GetUint32 return types to be explicit as to play more nicely with clang -- may as well, we're updating the SDK version anyway.
83 lines
3.0 KiB
C++
83 lines
3.0 KiB
C++
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (c) 2007-2016 musikcube team
|
|
//
|
|
// All rights reserved.
|
|
//
|
|
// Redistribution and use in source and binary forms, with or without
|
|
// modification, are permitted provided that the following conditions are met:
|
|
//
|
|
// * Redistributions of source code must retain the above copyright notice,
|
|
// this list of conditions and the following disclaimer.
|
|
//
|
|
// * Redistributions in binary form must reproduce the above copyright
|
|
// notice, this list of conditions and the following disclaimer in the
|
|
// documentation and/or other materials provided with the distribution.
|
|
//
|
|
// * Neither the name of the author nor the names of other contributors may
|
|
// be used to endorse or promote products derived from this software
|
|
// without specific prior written permission.
|
|
//
|
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
// POSSIBILITY OF SUCH DAMAGE.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
#pragma once
|
|
|
|
#include <core/config.h>
|
|
#include <map>
|
|
#include <boost/utility.hpp>
|
|
#include <boost/shared_ptr.hpp>
|
|
|
|
struct sqlite3_stmt;
|
|
|
|
namespace musik { namespace core { namespace db {
|
|
|
|
class Connection;
|
|
|
|
class Statement : boost::noncopyable {
|
|
public:
|
|
Statement(const char* sql,Connection &connection);
|
|
virtual ~Statement();
|
|
|
|
void Reset();
|
|
int Step();
|
|
|
|
void BindInt(int position, int bindInt);
|
|
void BindInt(int position, uint64 bindInt);
|
|
void BindText(int position, const char* bindText);
|
|
void BindText(int position, const std::string &bindText);
|
|
void BindTextW(int position, const wchar_t* bindText);
|
|
void BindTextW(int position, const std::wstring &bindText);
|
|
void BindNull(int position);
|
|
|
|
int ColumnInt(int column);
|
|
uint64 ColumnInt64(int column);
|
|
const char* ColumnText(int column);
|
|
const wchar_t* ColumnTextW(int column);
|
|
|
|
void UnbindAll();
|
|
|
|
private:
|
|
friend class Connection;
|
|
|
|
Statement(Connection &connection);
|
|
|
|
sqlite3_stmt *stmt;
|
|
Connection *connection;
|
|
int modifiedRows;
|
|
};
|
|
|
|
} } }
|
|
|