musikcube/src/core/db/Statement.h
casey langen 2dac91c429 Added SDK support for plugins that can index their own audio content.
- 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.
2017-03-31 21:45:14 -07:00

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;
};
} } }