blob: 736b2665b12d2d6a4e6a51d870503f9af88aa188 [file] [log] [blame]
Mickey Sweatt7f177902015-06-10 17:20:19 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Davide Pesaventob10024c2017-09-22 01:36:44 -04002/*
3 * Copyright (c) 2013-2017 Regents of the University of California.
Mickey Sweatt7f177902015-06-10 17:20:19 -07004 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
6 *
7 * ndn-cxx library is free software: you can redistribute it and/or modify it under the
8 * terms of the GNU Lesser General Public License as published by the Free Software
9 * Foundation, either version 3 of the License, or (at your option) any later version.
10 *
11 * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
12 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
14 *
15 * You should have received copies of the GNU General Public License and GNU Lesser
16 * General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
17 * <http://www.gnu.org/licenses/>.
18 *
19 * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
20 */
21
22#include "sqlite3-statement.hpp"
23
24#include <sqlite3.h>
25
26namespace ndn {
27namespace util {
28
29Sqlite3Statement::~Sqlite3Statement()
30{
31 sqlite3_finalize(m_stmt);
32}
33
34Sqlite3Statement::Sqlite3Statement(sqlite3* database, const std::string& statement)
35{
Davide Pesaventob10024c2017-09-22 01:36:44 -040036 int res = sqlite3_prepare_v2(database, statement.data(), -1, &m_stmt, nullptr);
Mickey Sweatt7f177902015-06-10 17:20:19 -070037 if (res != SQLITE_OK)
Spyridon Mastorakis0d2ed2e2015-07-27 19:09:12 -070038 BOOST_THROW_EXCEPTION(std::domain_error("bad SQL statement: " + statement));
Mickey Sweatt7f177902015-06-10 17:20:19 -070039}
40
41int
42Sqlite3Statement::bind(int index, const char* value, size_t size, void(*destructor)(void*))
43{
44 return sqlite3_bind_text(m_stmt, index, value, size, destructor);
45}
46
47int
48Sqlite3Statement::bind(int index, const std::string& value, void(*destructor)(void*))
49{
50 return sqlite3_bind_text(m_stmt, index, value.c_str(), value.size(), destructor);
51}
52
53int
54Sqlite3Statement::bind(int index, const void* buf, size_t size, void(*destructor)(void*))
55{
56 return sqlite3_bind_blob(m_stmt, index, buf, size, destructor);
57}
58
59int
60Sqlite3Statement::bind(int index, const Block& block, void(*destructor)(void*))
61{
62 return sqlite3_bind_blob(m_stmt, index, block.wire(), block.size(), destructor);
63}
64
65int
66Sqlite3Statement::bind(int index, int number)
67{
68 return sqlite3_bind_int(m_stmt, index, number);
69}
70
71std::string
72Sqlite3Statement::getString(int column)
73{
74 return std::string(reinterpret_cast<const char*>(sqlite3_column_text(m_stmt, column)),
75 sqlite3_column_bytes(m_stmt, column));
76}
77
78Block
79Sqlite3Statement::getBlock(int column)
80{
Davide Pesaventob10024c2017-09-22 01:36:44 -040081 return Block(reinterpret_cast<const uint8_t*>(sqlite3_column_blob(m_stmt, column)),
82 sqlite3_column_bytes(m_stmt, column));
Mickey Sweatt7f177902015-06-10 17:20:19 -070083}
84
85int
86Sqlite3Statement::getInt(int column)
87{
88 return sqlite3_column_int(m_stmt, column);
89}
90
91
92const uint8_t*
93Sqlite3Statement::getBlob(int column)
94{
95 return static_cast<const uint8_t*>(sqlite3_column_blob(m_stmt, column));
96}
97
98int
99Sqlite3Statement::getSize(int column)
100{
101 return sqlite3_column_bytes(m_stmt, column);
102}
103
104int
105Sqlite3Statement::step()
106{
107 return sqlite3_step(m_stmt);
108}
109
110Sqlite3Statement::operator sqlite3_stmt*()
111{
112 return m_stmt;
113}
114
115} // namespace util
116} // namespace ndn