blob: eb2cb165747006dbd5f19c2ffc034002f5f8f112 [file] [log] [blame]
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013-2018 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
* ndn-cxx library is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* ndn-cxx library 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 Lesser General Public License for more details.
*
* You should have received copies of the GNU General Public License and GNU Lesser
* General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
* <http://www.gnu.org/licenses/>.
*
* See AUTHORS.md for complete list of ndn-cxx authors and contributors.
*/
#ifndef NDN_UTIL_SQLITE3_STATEMENT_HPP
#define NDN_UTIL_SQLITE3_STATEMENT_HPP
#include "../encoding/block.hpp"
#include <string>
struct sqlite3;
struct sqlite3_stmt;
namespace ndn {
namespace util {
/**
* @brief wrap an SQLite3 prepared statement
* @warning This class is implementation detail of ndn-cxx library.
*/
class Sqlite3Statement : noncopyable
{
public:
/**
* @brief initialize and prepare Sqlite3 statement
* @param database handler to open sqlite3 database
* @param statement SQL statement
* @throw std::domain_error SQL statement is bad
*/
Sqlite3Statement(sqlite3* database, const std::string& statement);
/**
* @brief finalize the statement
*/
~Sqlite3Statement();
/**
* @brief bind a string to the statement
*
* @param index The binding position
* @param value The pointer of the binding string
* @param size The size of the binding string
* @param destructor SQLite3 destructor, e.g., SQLITE_TRANSIENT
* @return SQLite result value.
*/
int
bind(int index, const char* value, size_t size, void(*destructor)(void*));
/**
* @brief bind a string to the statement
*
* @param index The binding position
* @param value The binding string
* @param destructor SQLite3 destructor, e.g., SQLITE_TRANSIENT
* @return SQLite result value.
*/
int
bind(int index, const std::string& value, void(*destructor)(void*));
/**
* @brief bind a byte blob to the statement
*
* @param index The binding position
* @param value The pointer of the blob
* @param size The size of the blob
* @param destructor SQLite3 destructor, e.g., SQLITE_TRANSIENT
* @return SQLite result value.
*/
int
bind(int index, const void* value, size_t size, void(*destructor)(void*));
/**
* @brief bind a byte blob to the statement
*
* @param index The binding position
* @param block The binding block
* @param destructor SQLite3 destructor, e.g., SQLITE_TRANSIENT
* @return SQLite result value
*/
int
bind(int index, const Block& block, void(*destructor)(void*));
/**
* @brief bind an integer to the statement
*
* @param index The binding position
* @param number The binding integer
* @return SQLite result value
*/
int
bind(int index, int number);
/**
* @brief get a string from @p column.
*/
std::string
getString(int column);
/**
* @brief get a block from @p column.
*/
Block
getBlock(int column);
/**
* @brief get an integer from @p column.
*/
int
getInt(int column);
/**
* @brief get a pointer of byte blob from @p column.
*/
const uint8_t*
getBlob(int column);
/**
* @brief get the size of @p column.
*/
int
getSize(int column);
/**
* @brief wrapper of sqlite3_step
*/
int
step();
/**
* @brief implicitly converts to sqlite3_stmt* to be used in SQLite C API
*/
operator sqlite3_stmt*();
private:
sqlite3_stmt* m_stmt;
};
} // namespace util
} // namespace ndn
#endif // NDN_UTIL_SQLITE3_STATEMENT_HPP