1 1.1 jmmv // Copyright 2011 Google Inc. 2 1.1 jmmv // All rights reserved. 3 1.1 jmmv // 4 1.1 jmmv // Redistribution and use in source and binary forms, with or without 5 1.1 jmmv // modification, are permitted provided that the following conditions are 6 1.1 jmmv // met: 7 1.1 jmmv // 8 1.1 jmmv // * Redistributions of source code must retain the above copyright 9 1.1 jmmv // notice, this list of conditions and the following disclaimer. 10 1.1 jmmv // * Redistributions in binary form must reproduce the above copyright 11 1.1 jmmv // notice, this list of conditions and the following disclaimer in the 12 1.1 jmmv // documentation and/or other materials provided with the distribution. 13 1.1 jmmv // * Neither the name of Google Inc. nor the names of its contributors 14 1.1 jmmv // may be used to endorse or promote products derived from this software 15 1.1 jmmv // without specific prior written permission. 16 1.1 jmmv // 17 1.1 jmmv // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 1.1 jmmv // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19 1.1 jmmv // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20 1.1 jmmv // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21 1.1 jmmv // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22 1.1 jmmv // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 1.1 jmmv // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 1.1 jmmv // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 1.1 jmmv // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 1.1 jmmv // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 1.1 jmmv // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 1.1 jmmv 29 1.1 jmmv #include "utils/sqlite/statement.ipp" 30 1.1 jmmv 31 1.1 jmmv extern "C" { 32 1.1 jmmv #include <stdint.h> 33 1.1 jmmv } 34 1.1 jmmv 35 1.1 jmmv #include <cstring> 36 1.1 jmmv #include <iostream> 37 1.1 jmmv 38 1.1 jmmv #include <atf-c++.hpp> 39 1.1 jmmv 40 1.1 jmmv #include "utils/sqlite/database.hpp" 41 1.1 jmmv #include "utils/sqlite/test_utils.hpp" 42 1.1 jmmv 43 1.1 jmmv namespace sqlite = utils::sqlite; 44 1.1 jmmv 45 1.1 jmmv 46 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(step__ok); 47 1.1 jmmv ATF_TEST_CASE_BODY(step__ok) 48 1.1 jmmv { 49 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 50 1.1 jmmv sqlite::statement stmt = db.create_statement( 51 1.1 jmmv "CREATE TABLE foo (a INTEGER PRIMARY KEY)"); 52 1.1 jmmv ATF_REQUIRE_THROW(sqlite::error, db.exec("SELECT * FROM foo")); 53 1.1 jmmv ATF_REQUIRE(!stmt.step()); 54 1.1 jmmv db.exec("SELECT * FROM foo"); 55 1.1 jmmv } 56 1.1 jmmv 57 1.1 jmmv 58 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(step__many); 59 1.1 jmmv ATF_TEST_CASE_BODY(step__many) 60 1.1 jmmv { 61 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 62 1.1 jmmv create_test_table(raw(db)); 63 1.1 jmmv sqlite::statement stmt = db.create_statement( 64 1.1 jmmv "SELECT prime FROM test ORDER BY prime"); 65 1.1 jmmv for (int i = 0; i < 5; i++) 66 1.1 jmmv ATF_REQUIRE(stmt.step()); 67 1.1 jmmv ATF_REQUIRE(!stmt.step()); 68 1.1 jmmv } 69 1.1 jmmv 70 1.1 jmmv 71 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(step__fail); 72 1.1 jmmv ATF_TEST_CASE_BODY(step__fail) 73 1.1 jmmv { 74 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 75 1.1 jmmv sqlite::statement stmt = db.create_statement( 76 1.1 jmmv "CREATE TABLE foo (a INTEGER PRIMARY KEY)"); 77 1.1 jmmv ATF_REQUIRE(!stmt.step()); 78 1.1 jmmv REQUIRE_API_ERROR("sqlite3_step", stmt.step()); 79 1.1 jmmv } 80 1.1 jmmv 81 1.1 jmmv 82 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(step_without_results__ok); 83 1.1 jmmv ATF_TEST_CASE_BODY(step_without_results__ok) 84 1.1 jmmv { 85 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 86 1.1 jmmv sqlite::statement stmt = db.create_statement( 87 1.1 jmmv "CREATE TABLE foo (a INTEGER PRIMARY KEY)"); 88 1.1 jmmv ATF_REQUIRE_THROW(sqlite::error, db.exec("SELECT * FROM foo")); 89 1.1 jmmv stmt.step_without_results(); 90 1.1 jmmv db.exec("SELECT * FROM foo"); 91 1.1 jmmv } 92 1.1 jmmv 93 1.1 jmmv 94 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(step_without_results__fail); 95 1.1 jmmv ATF_TEST_CASE_BODY(step_without_results__fail) 96 1.1 jmmv { 97 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 98 1.1 jmmv db.exec("CREATE TABLE foo (a INTEGER PRIMARY KEY)"); 99 1.1 jmmv db.exec("INSERT INTO foo VALUES (3)"); 100 1.1 jmmv sqlite::statement stmt = db.create_statement( 101 1.1 jmmv "INSERT INTO foo VALUES (3)"); 102 1.1 jmmv REQUIRE_API_ERROR("sqlite3_step", stmt.step_without_results()); 103 1.1 jmmv } 104 1.1 jmmv 105 1.1 jmmv 106 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(column_count); 107 1.1 jmmv ATF_TEST_CASE_BODY(column_count) 108 1.1 jmmv { 109 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 110 1.1 jmmv db.exec("CREATE TABLE foo (a INTEGER PRIMARY KEY, b INTEGER, c TEXT);" 111 1.1 jmmv "INSERT INTO foo VALUES (5, 3, 'foo');"); 112 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 113 1.1 jmmv ATF_REQUIRE(stmt.step()); 114 1.1 jmmv ATF_REQUIRE_EQ(3, stmt.column_count()); 115 1.1 jmmv ATF_REQUIRE(!stmt.step()); 116 1.1 jmmv } 117 1.1 jmmv 118 1.1 jmmv 119 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(column_name__ok); 120 1.1 jmmv ATF_TEST_CASE_BODY(column_name__ok) 121 1.1 jmmv { 122 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 123 1.1 jmmv db.exec("CREATE TABLE foo (first INTEGER PRIMARY KEY, second TEXT);" 124 1.1 jmmv "INSERT INTO foo VALUES (5, 'foo');"); 125 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 126 1.1 jmmv ATF_REQUIRE(stmt.step()); 127 1.1 jmmv ATF_REQUIRE_EQ("first", stmt.column_name(0)); 128 1.1 jmmv ATF_REQUIRE_EQ("second", stmt.column_name(1)); 129 1.1 jmmv ATF_REQUIRE(!stmt.step()); 130 1.1 jmmv } 131 1.1 jmmv 132 1.1 jmmv 133 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(column_name__fail); 134 1.1 jmmv ATF_TEST_CASE_BODY(column_name__fail) 135 1.1 jmmv { 136 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 137 1.1 jmmv db.exec("CREATE TABLE foo (first INTEGER PRIMARY KEY);" 138 1.1 jmmv "INSERT INTO foo VALUES (5);"); 139 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 140 1.1 jmmv ATF_REQUIRE(stmt.step()); 141 1.1 jmmv ATF_REQUIRE_EQ("first", stmt.column_name(0)); 142 1.1 jmmv REQUIRE_API_ERROR("sqlite3_column_name", stmt.column_name(1)); 143 1.1 jmmv ATF_REQUIRE(!stmt.step()); 144 1.1 jmmv } 145 1.1 jmmv 146 1.1 jmmv 147 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(column_type__ok); 148 1.1 jmmv ATF_TEST_CASE_BODY(column_type__ok) 149 1.1 jmmv { 150 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 151 1.1 jmmv db.exec("CREATE TABLE foo (a_blob BLOB," 152 1.1 jmmv " a_float FLOAT," 153 1.1 jmmv " an_integer INTEGER," 154 1.1 jmmv " a_null BLOB," 155 1.1 jmmv " a_text TEXT);" 156 1.1 jmmv "INSERT INTO foo VALUES (x'0102', 0.3, 5, NULL, 'foo bar');" 157 1.1 jmmv "INSERT INTO foo VALUES (NULL, NULL, NULL, NULL, NULL);"); 158 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 159 1.1 jmmv ATF_REQUIRE(stmt.step()); 160 1.1 jmmv ATF_REQUIRE(sqlite::type_blob == stmt.column_type(0)); 161 1.1 jmmv ATF_REQUIRE(sqlite::type_float == stmt.column_type(1)); 162 1.1 jmmv ATF_REQUIRE(sqlite::type_integer == stmt.column_type(2)); 163 1.1 jmmv ATF_REQUIRE(sqlite::type_null == stmt.column_type(3)); 164 1.1 jmmv ATF_REQUIRE(sqlite::type_text == stmt.column_type(4)); 165 1.1 jmmv ATF_REQUIRE(stmt.step()); 166 1.1 jmmv for (int i = 0; i < stmt.column_count(); i++) 167 1.1 jmmv ATF_REQUIRE(sqlite::type_null == stmt.column_type(i)); 168 1.1 jmmv ATF_REQUIRE(!stmt.step()); 169 1.1 jmmv } 170 1.1 jmmv 171 1.1 jmmv 172 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(column_type__out_of_range); 173 1.1 jmmv ATF_TEST_CASE_BODY(column_type__out_of_range) 174 1.1 jmmv { 175 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 176 1.1 jmmv db.exec("CREATE TABLE foo (a INTEGER PRIMARY KEY);" 177 1.1 jmmv "INSERT INTO foo VALUES (1);"); 178 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 179 1.1 jmmv ATF_REQUIRE(stmt.step()); 180 1.1 jmmv ATF_REQUIRE(sqlite::type_integer == stmt.column_type(0)); 181 1.1 jmmv ATF_REQUIRE(sqlite::type_null == stmt.column_type(1)); 182 1.1 jmmv ATF_REQUIRE(sqlite::type_null == stmt.column_type(512)); 183 1.1 jmmv ATF_REQUIRE(!stmt.step()); 184 1.1 jmmv } 185 1.1 jmmv 186 1.1 jmmv 187 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(column_id__ok); 188 1.1 jmmv ATF_TEST_CASE_BODY(column_id__ok) 189 1.1 jmmv { 190 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 191 1.1 jmmv db.exec("CREATE TABLE foo (bar INTEGER PRIMARY KEY, " 192 1.1 jmmv " baz INTEGER);" 193 1.1 jmmv "INSERT INTO foo VALUES (1, 2);"); 194 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 195 1.1 jmmv ATF_REQUIRE(stmt.step()); 196 1.1 jmmv ATF_REQUIRE_EQ(0, stmt.column_id("bar")); 197 1.1 jmmv ATF_REQUIRE_EQ(1, stmt.column_id("baz")); 198 1.1 jmmv ATF_REQUIRE_EQ(0, stmt.column_id("bar")); 199 1.1 jmmv ATF_REQUIRE_EQ(1, stmt.column_id("baz")); 200 1.1 jmmv ATF_REQUIRE(!stmt.step()); 201 1.1 jmmv } 202 1.1 jmmv 203 1.1 jmmv 204 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(column_id__missing); 205 1.1 jmmv ATF_TEST_CASE_BODY(column_id__missing) 206 1.1 jmmv { 207 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 208 1.1 jmmv db.exec("CREATE TABLE foo (bar INTEGER PRIMARY KEY, " 209 1.1 jmmv " baz INTEGER);" 210 1.1 jmmv "INSERT INTO foo VALUES (1, 2);"); 211 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 212 1.1 jmmv ATF_REQUIRE(stmt.step()); 213 1.1 jmmv ATF_REQUIRE_EQ(0, stmt.column_id("bar")); 214 1.1 jmmv try { 215 1.1 jmmv stmt.column_id("bazo"); 216 1.1 jmmv fail("invalid_column_error not raised"); 217 1.1 jmmv } catch (const sqlite::invalid_column_error& e) { 218 1.1 jmmv ATF_REQUIRE_EQ("bazo", e.column_name()); 219 1.1 jmmv } 220 1.1 jmmv ATF_REQUIRE(!stmt.step()); 221 1.1 jmmv } 222 1.1 jmmv 223 1.1 jmmv 224 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(column_blob); 225 1.1 jmmv ATF_TEST_CASE_BODY(column_blob) 226 1.1 jmmv { 227 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 228 1.1 jmmv db.exec("CREATE TABLE foo (a INTEGER, b BLOB, c INTEGER);" 229 1.1 jmmv "INSERT INTO foo VALUES (NULL, x'cafe', NULL);"); 230 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 231 1.1 jmmv ATF_REQUIRE(stmt.step()); 232 1.1 jmmv const sqlite::blob blob = stmt.column_blob(1); 233 1.1 jmmv ATF_REQUIRE_EQ(0xca, static_cast< const uint8_t* >(blob.memory)[0]); 234 1.1 jmmv ATF_REQUIRE_EQ(0xfe, static_cast< const uint8_t* >(blob.memory)[1]); 235 1.1 jmmv ATF_REQUIRE(!stmt.step()); 236 1.1 jmmv } 237 1.1 jmmv 238 1.1 jmmv 239 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(column_double); 240 1.1 jmmv ATF_TEST_CASE_BODY(column_double) 241 1.1 jmmv { 242 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 243 1.1 jmmv db.exec("CREATE TABLE foo (a INTEGER, b DOUBLE, c INTEGER);" 244 1.1 jmmv "INSERT INTO foo VALUES (NULL, 0.5, NULL);"); 245 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 246 1.1 jmmv ATF_REQUIRE(stmt.step()); 247 1.1 jmmv ATF_REQUIRE_EQ(0.5, stmt.column_double(1)); 248 1.1 jmmv ATF_REQUIRE(!stmt.step()); 249 1.1 jmmv } 250 1.1 jmmv 251 1.1 jmmv 252 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(column_int__ok); 253 1.1 jmmv ATF_TEST_CASE_BODY(column_int__ok) 254 1.1 jmmv { 255 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 256 1.1 jmmv db.exec("CREATE TABLE foo (a TEXT, b INTEGER, c TEXT);" 257 1.1 jmmv "INSERT INTO foo VALUES (NULL, 987, NULL);"); 258 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 259 1.1 jmmv ATF_REQUIRE(stmt.step()); 260 1.1 jmmv ATF_REQUIRE_EQ(987, stmt.column_int(1)); 261 1.1 jmmv ATF_REQUIRE(!stmt.step()); 262 1.1 jmmv } 263 1.1 jmmv 264 1.1 jmmv 265 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(column_int__overflow); 266 1.1 jmmv ATF_TEST_CASE_BODY(column_int__overflow) 267 1.1 jmmv { 268 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 269 1.1 jmmv db.exec("CREATE TABLE foo (a TEXT, b INTEGER, c TEXT);" 270 1.1 jmmv "INSERT INTO foo VALUES (NULL, 4294967419, NULL);"); 271 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 272 1.1 jmmv ATF_REQUIRE(stmt.step()); 273 1.1 jmmv ATF_REQUIRE_EQ(123, stmt.column_int(1)); 274 1.1 jmmv ATF_REQUIRE(!stmt.step()); 275 1.1 jmmv } 276 1.1 jmmv 277 1.1 jmmv 278 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(column_int64); 279 1.1 jmmv ATF_TEST_CASE_BODY(column_int64) 280 1.1 jmmv { 281 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 282 1.1 jmmv db.exec("CREATE TABLE foo (a TEXT, b INTEGER, c TEXT);" 283 1.1 jmmv "INSERT INTO foo VALUES (NULL, 4294967419, NULL);"); 284 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 285 1.1 jmmv ATF_REQUIRE(stmt.step()); 286 1.1 jmmv ATF_REQUIRE_EQ(4294967419LL, stmt.column_int64(1)); 287 1.1 jmmv ATF_REQUIRE(!stmt.step()); 288 1.1 jmmv } 289 1.1 jmmv 290 1.1 jmmv 291 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(column_text); 292 1.1 jmmv ATF_TEST_CASE_BODY(column_text) 293 1.1 jmmv { 294 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 295 1.1 jmmv db.exec("CREATE TABLE foo (a INTEGER, b TEXT, c INTEGER);" 296 1.1 jmmv "INSERT INTO foo VALUES (NULL, 'foo bar', NULL);"); 297 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 298 1.1 jmmv ATF_REQUIRE(stmt.step()); 299 1.1 jmmv ATF_REQUIRE_EQ("foo bar", stmt.column_text(1)); 300 1.1 jmmv ATF_REQUIRE(!stmt.step()); 301 1.1 jmmv } 302 1.1 jmmv 303 1.1 jmmv 304 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(column_bytes__blob); 305 1.1 jmmv ATF_TEST_CASE_BODY(column_bytes__blob) 306 1.1 jmmv { 307 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 308 1.1 jmmv db.exec("CREATE TABLE foo (a BLOB);" 309 1.1 jmmv "INSERT INTO foo VALUES (x'12345678');"); 310 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 311 1.1 jmmv ATF_REQUIRE(stmt.step()); 312 1.1 jmmv ATF_REQUIRE_EQ(4, stmt.column_bytes(0)); 313 1.1 jmmv ATF_REQUIRE(!stmt.step()); 314 1.1 jmmv } 315 1.1 jmmv 316 1.1 jmmv 317 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(column_bytes__text); 318 1.1 jmmv ATF_TEST_CASE_BODY(column_bytes__text) 319 1.1 jmmv { 320 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 321 1.1 jmmv db.exec("CREATE TABLE foo (a TEXT);" 322 1.1 jmmv "INSERT INTO foo VALUES ('foo bar');"); 323 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 324 1.1 jmmv ATF_REQUIRE(stmt.step()); 325 1.1 jmmv ATF_REQUIRE_EQ(7, stmt.column_bytes(0)); 326 1.1 jmmv ATF_REQUIRE(!stmt.step()); 327 1.1 jmmv } 328 1.1 jmmv 329 1.1 jmmv 330 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(safe_column_blob__ok); 331 1.1 jmmv ATF_TEST_CASE_BODY(safe_column_blob__ok) 332 1.1 jmmv { 333 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 334 1.1 jmmv db.exec("CREATE TABLE foo (a INTEGER, b BLOB, c INTEGER);" 335 1.1 jmmv "INSERT INTO foo VALUES (NULL, x'cafe', NULL);"); 336 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 337 1.1 jmmv ATF_REQUIRE(stmt.step()); 338 1.1 jmmv const sqlite::blob blob = stmt.safe_column_blob("b"); 339 1.1 jmmv ATF_REQUIRE_EQ(0xca, static_cast< const uint8_t* >(blob.memory)[0]); 340 1.1 jmmv ATF_REQUIRE_EQ(0xfe, static_cast< const uint8_t* >(blob.memory)[1]); 341 1.1 jmmv ATF_REQUIRE(!stmt.step()); 342 1.1 jmmv } 343 1.1 jmmv 344 1.1 jmmv 345 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(safe_column_blob__fail); 346 1.1 jmmv ATF_TEST_CASE_BODY(safe_column_blob__fail) 347 1.1 jmmv { 348 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 349 1.1 jmmv db.exec("CREATE TABLE foo (a INTEGER);" 350 1.1 jmmv "INSERT INTO foo VALUES (123);"); 351 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 352 1.1 jmmv ATF_REQUIRE(stmt.step()); 353 1.1 jmmv ATF_REQUIRE_THROW(sqlite::invalid_column_error, 354 1.1 jmmv stmt.safe_column_blob("b")); 355 1.1 jmmv ATF_REQUIRE_THROW_RE(sqlite::error, "not a blob", 356 1.1 jmmv stmt.safe_column_blob("a")); 357 1.1 jmmv ATF_REQUIRE(!stmt.step()); 358 1.1 jmmv } 359 1.1 jmmv 360 1.1 jmmv 361 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(safe_column_double__ok); 362 1.1 jmmv ATF_TEST_CASE_BODY(safe_column_double__ok) 363 1.1 jmmv { 364 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 365 1.1 jmmv db.exec("CREATE TABLE foo (a INTEGER, b DOUBLE, c INTEGER);" 366 1.1 jmmv "INSERT INTO foo VALUES (NULL, 0.5, NULL);"); 367 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 368 1.1 jmmv ATF_REQUIRE(stmt.step()); 369 1.1 jmmv ATF_REQUIRE_EQ(0.5, stmt.safe_column_double("b")); 370 1.1 jmmv ATF_REQUIRE(!stmt.step()); 371 1.1 jmmv } 372 1.1 jmmv 373 1.1 jmmv 374 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(safe_column_double__fail); 375 1.1 jmmv ATF_TEST_CASE_BODY(safe_column_double__fail) 376 1.1 jmmv { 377 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 378 1.1 jmmv db.exec("CREATE TABLE foo (a INTEGER);" 379 1.1 jmmv "INSERT INTO foo VALUES (NULL);"); 380 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 381 1.1 jmmv ATF_REQUIRE(stmt.step()); 382 1.1 jmmv ATF_REQUIRE_THROW(sqlite::invalid_column_error, 383 1.1 jmmv stmt.safe_column_double("b")); 384 1.1 jmmv ATF_REQUIRE_THROW_RE(sqlite::error, "not a float", 385 1.1 jmmv stmt.safe_column_double("a")); 386 1.1 jmmv ATF_REQUIRE(!stmt.step()); 387 1.1 jmmv } 388 1.1 jmmv 389 1.1 jmmv 390 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(safe_column_int__ok); 391 1.1 jmmv ATF_TEST_CASE_BODY(safe_column_int__ok) 392 1.1 jmmv { 393 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 394 1.1 jmmv db.exec("CREATE TABLE foo (a TEXT, b INTEGER, c TEXT);" 395 1.1 jmmv "INSERT INTO foo VALUES (NULL, 987, NULL);"); 396 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 397 1.1 jmmv ATF_REQUIRE(stmt.step()); 398 1.1 jmmv ATF_REQUIRE_EQ(987, stmt.safe_column_int("b")); 399 1.1 jmmv ATF_REQUIRE(!stmt.step()); 400 1.1 jmmv } 401 1.1 jmmv 402 1.1 jmmv 403 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(safe_column_int__fail); 404 1.1 jmmv ATF_TEST_CASE_BODY(safe_column_int__fail) 405 1.1 jmmv { 406 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 407 1.1 jmmv db.exec("CREATE TABLE foo (a TEXT);" 408 1.1 jmmv "INSERT INTO foo VALUES ('def');"); 409 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 410 1.1 jmmv ATF_REQUIRE(stmt.step()); 411 1.1 jmmv ATF_REQUIRE_THROW(sqlite::invalid_column_error, 412 1.1 jmmv stmt.safe_column_int("b")); 413 1.1 jmmv ATF_REQUIRE_THROW_RE(sqlite::error, "not an integer", 414 1.1 jmmv stmt.safe_column_int("a")); 415 1.1 jmmv ATF_REQUIRE(!stmt.step()); 416 1.1 jmmv } 417 1.1 jmmv 418 1.1 jmmv 419 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(safe_column_int64__ok); 420 1.1 jmmv ATF_TEST_CASE_BODY(safe_column_int64__ok) 421 1.1 jmmv { 422 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 423 1.1 jmmv db.exec("CREATE TABLE foo (a TEXT, b INTEGER, c TEXT);" 424 1.1 jmmv "INSERT INTO foo VALUES (NULL, 4294967419, NULL);"); 425 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 426 1.1 jmmv ATF_REQUIRE(stmt.step()); 427 1.1 jmmv ATF_REQUIRE_EQ(4294967419LL, stmt.safe_column_int64("b")); 428 1.1 jmmv ATF_REQUIRE(!stmt.step()); 429 1.1 jmmv } 430 1.1 jmmv 431 1.1 jmmv 432 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(safe_column_int64__fail); 433 1.1 jmmv ATF_TEST_CASE_BODY(safe_column_int64__fail) 434 1.1 jmmv { 435 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 436 1.1 jmmv db.exec("CREATE TABLE foo (a TEXT);" 437 1.1 jmmv "INSERT INTO foo VALUES ('abc');"); 438 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 439 1.1 jmmv ATF_REQUIRE(stmt.step()); 440 1.1 jmmv ATF_REQUIRE_THROW(sqlite::invalid_column_error, 441 1.1 jmmv stmt.safe_column_int64("b")); 442 1.1 jmmv ATF_REQUIRE_THROW_RE(sqlite::error, "not an integer", 443 1.1 jmmv stmt.safe_column_int64("a")); 444 1.1 jmmv ATF_REQUIRE(!stmt.step()); 445 1.1 jmmv } 446 1.1 jmmv 447 1.1 jmmv 448 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(safe_column_text__ok); 449 1.1 jmmv ATF_TEST_CASE_BODY(safe_column_text__ok) 450 1.1 jmmv { 451 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 452 1.1 jmmv db.exec("CREATE TABLE foo (a INTEGER, b TEXT, c INTEGER);" 453 1.1 jmmv "INSERT INTO foo VALUES (NULL, 'foo bar', NULL);"); 454 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 455 1.1 jmmv ATF_REQUIRE(stmt.step()); 456 1.1 jmmv ATF_REQUIRE_EQ("foo bar", stmt.safe_column_text("b")); 457 1.1 jmmv ATF_REQUIRE(!stmt.step()); 458 1.1 jmmv } 459 1.1 jmmv 460 1.1 jmmv 461 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(safe_column_text__fail); 462 1.1 jmmv ATF_TEST_CASE_BODY(safe_column_text__fail) 463 1.1 jmmv { 464 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 465 1.1 jmmv db.exec("CREATE TABLE foo (a INTEGER);" 466 1.1 jmmv "INSERT INTO foo VALUES (NULL);"); 467 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 468 1.1 jmmv ATF_REQUIRE(stmt.step()); 469 1.1 jmmv ATF_REQUIRE_THROW(sqlite::invalid_column_error, 470 1.1 jmmv stmt.safe_column_text("b")); 471 1.1 jmmv ATF_REQUIRE_THROW_RE(sqlite::error, "not a string", 472 1.1 jmmv stmt.safe_column_text("a")); 473 1.1 jmmv ATF_REQUIRE(!stmt.step()); 474 1.1 jmmv } 475 1.1 jmmv 476 1.1 jmmv 477 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(safe_column_bytes__ok__blob); 478 1.1 jmmv ATF_TEST_CASE_BODY(safe_column_bytes__ok__blob) 479 1.1 jmmv { 480 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 481 1.1 jmmv db.exec("CREATE TABLE foo (a BLOB);" 482 1.1 jmmv "INSERT INTO foo VALUES (x'12345678');"); 483 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 484 1.1 jmmv ATF_REQUIRE(stmt.step()); 485 1.1 jmmv ATF_REQUIRE_EQ(4, stmt.safe_column_bytes("a")); 486 1.1 jmmv ATF_REQUIRE(!stmt.step()); 487 1.1 jmmv } 488 1.1 jmmv 489 1.1 jmmv 490 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(safe_column_bytes__ok__text); 491 1.1 jmmv ATF_TEST_CASE_BODY(safe_column_bytes__ok__text) 492 1.1 jmmv { 493 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 494 1.1 jmmv db.exec("CREATE TABLE foo (a TEXT);" 495 1.1 jmmv "INSERT INTO foo VALUES ('foo bar');"); 496 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 497 1.1 jmmv ATF_REQUIRE(stmt.step()); 498 1.1 jmmv ATF_REQUIRE_EQ(7, stmt.safe_column_bytes("a")); 499 1.1 jmmv ATF_REQUIRE(!stmt.step()); 500 1.1 jmmv } 501 1.1 jmmv 502 1.1 jmmv 503 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(safe_column_bytes__fail); 504 1.1 jmmv ATF_TEST_CASE_BODY(safe_column_bytes__fail) 505 1.1 jmmv { 506 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 507 1.1 jmmv db.exec("CREATE TABLE foo (a TEXT);" 508 1.1 jmmv "INSERT INTO foo VALUES (NULL);"); 509 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 510 1.1 jmmv ATF_REQUIRE(stmt.step()); 511 1.1 jmmv ATF_REQUIRE_THROW(sqlite::invalid_column_error, 512 1.1 jmmv stmt.safe_column_bytes("b")); 513 1.1 jmmv ATF_REQUIRE_THROW_RE(sqlite::error, "not a blob or a string", 514 1.1 jmmv stmt.safe_column_bytes("a")); 515 1.1 jmmv ATF_REQUIRE(!stmt.step()); 516 1.1 jmmv } 517 1.1 jmmv 518 1.1 jmmv 519 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(reset); 520 1.1 jmmv ATF_TEST_CASE_BODY(reset) 521 1.1 jmmv { 522 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 523 1.1 jmmv db.exec("CREATE TABLE foo (a TEXT);" 524 1.1 jmmv "INSERT INTO foo VALUES ('foo bar');"); 525 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT * FROM foo"); 526 1.1 jmmv ATF_REQUIRE(stmt.step()); 527 1.1 jmmv ATF_REQUIRE(!stmt.step()); 528 1.1 jmmv stmt.reset(); 529 1.1 jmmv ATF_REQUIRE(stmt.step()); 530 1.1 jmmv ATF_REQUIRE(!stmt.step()); 531 1.1 jmmv } 532 1.1 jmmv 533 1.1 jmmv 534 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(bind__blob); 535 1.1 jmmv ATF_TEST_CASE_BODY(bind__blob) 536 1.1 jmmv { 537 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 538 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT 3, ?"); 539 1.1 jmmv 540 1.1 jmmv const unsigned char blob[] = {0xca, 0xfe}; 541 1.1 jmmv stmt.bind(1, sqlite::blob(static_cast< const void* >(blob), 2)); 542 1.1 jmmv ATF_REQUIRE(stmt.step()); 543 1.1 jmmv ATF_REQUIRE(sqlite::type_integer == stmt.column_type(0)); 544 1.1 jmmv ATF_REQUIRE_EQ(3, stmt.column_int(0)); 545 1.1 jmmv ATF_REQUIRE(sqlite::type_blob == stmt.column_type(1)); 546 1.1 jmmv const unsigned char* ret_blob = 547 1.1 jmmv static_cast< const unsigned char* >(stmt.column_blob(1).memory); 548 1.1 jmmv ATF_REQUIRE(std::memcmp(blob, ret_blob, 2) == 0); 549 1.1 jmmv ATF_REQUIRE(!stmt.step()); 550 1.1 jmmv } 551 1.1 jmmv 552 1.1 jmmv 553 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(bind__double); 554 1.1 jmmv ATF_TEST_CASE_BODY(bind__double) 555 1.1 jmmv { 556 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 557 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT 3, ?"); 558 1.1 jmmv 559 1.1 jmmv stmt.bind(1, 0.5); 560 1.1 jmmv ATF_REQUIRE(stmt.step()); 561 1.1 jmmv ATF_REQUIRE(sqlite::type_integer == stmt.column_type(0)); 562 1.1 jmmv ATF_REQUIRE_EQ(3, stmt.column_int(0)); 563 1.1 jmmv ATF_REQUIRE(sqlite::type_float == stmt.column_type(1)); 564 1.1 jmmv ATF_REQUIRE_EQ(0.5, stmt.column_double(1)); 565 1.1 jmmv ATF_REQUIRE(!stmt.step()); 566 1.1 jmmv } 567 1.1 jmmv 568 1.1 jmmv 569 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(bind__int); 570 1.1 jmmv ATF_TEST_CASE_BODY(bind__int) 571 1.1 jmmv { 572 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 573 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT 3, ?"); 574 1.1 jmmv 575 1.1 jmmv stmt.bind(1, 123); 576 1.1 jmmv ATF_REQUIRE(stmt.step()); 577 1.1 jmmv ATF_REQUIRE(sqlite::type_integer == stmt.column_type(0)); 578 1.1 jmmv ATF_REQUIRE_EQ(3, stmt.column_int(0)); 579 1.1 jmmv ATF_REQUIRE(sqlite::type_integer == stmt.column_type(1)); 580 1.1 jmmv ATF_REQUIRE_EQ(123, stmt.column_int(1)); 581 1.1 jmmv ATF_REQUIRE(!stmt.step()); 582 1.1 jmmv } 583 1.1 jmmv 584 1.1 jmmv 585 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(bind__int64); 586 1.1 jmmv ATF_TEST_CASE_BODY(bind__int64) 587 1.1 jmmv { 588 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 589 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT 3, ?"); 590 1.1 jmmv 591 1.1 jmmv stmt.bind(1, static_cast< int64_t >(4294967419LL)); 592 1.1 jmmv ATF_REQUIRE(stmt.step()); 593 1.1 jmmv ATF_REQUIRE(sqlite::type_integer == stmt.column_type(0)); 594 1.1 jmmv ATF_REQUIRE_EQ(3, stmt.column_int(0)); 595 1.1 jmmv ATF_REQUIRE(sqlite::type_integer == stmt.column_type(1)); 596 1.1 jmmv ATF_REQUIRE_EQ(4294967419LL, stmt.column_int64(1)); 597 1.1 jmmv ATF_REQUIRE(!stmt.step()); 598 1.1 jmmv } 599 1.1 jmmv 600 1.1 jmmv 601 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(bind__null); 602 1.1 jmmv ATF_TEST_CASE_BODY(bind__null) 603 1.1 jmmv { 604 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 605 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT 3, ?"); 606 1.1 jmmv 607 1.1 jmmv stmt.bind(1, sqlite::null()); 608 1.1 jmmv ATF_REQUIRE(stmt.step()); 609 1.1 jmmv ATF_REQUIRE(sqlite::type_integer == stmt.column_type(0)); 610 1.1 jmmv ATF_REQUIRE_EQ(3, stmt.column_int(0)); 611 1.1 jmmv ATF_REQUIRE(sqlite::type_null == stmt.column_type(1)); 612 1.1 jmmv ATF_REQUIRE(!stmt.step()); 613 1.1 jmmv } 614 1.1 jmmv 615 1.1 jmmv 616 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(bind__text); 617 1.1 jmmv ATF_TEST_CASE_BODY(bind__text) 618 1.1 jmmv { 619 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 620 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT 3, ?"); 621 1.1 jmmv 622 1.1 jmmv const std::string str = "Hello"; 623 1.1 jmmv stmt.bind(1, str); 624 1.1 jmmv ATF_REQUIRE(stmt.step()); 625 1.1 jmmv ATF_REQUIRE(sqlite::type_integer == stmt.column_type(0)); 626 1.1 jmmv ATF_REQUIRE_EQ(3, stmt.column_int(0)); 627 1.1 jmmv ATF_REQUIRE(sqlite::type_text == stmt.column_type(1)); 628 1.1 jmmv ATF_REQUIRE_EQ(str, stmt.column_text(1)); 629 1.1 jmmv ATF_REQUIRE(!stmt.step()); 630 1.1 jmmv } 631 1.1 jmmv 632 1.1 jmmv 633 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(bind__text__transient); 634 1.1 jmmv ATF_TEST_CASE_BODY(bind__text__transient) 635 1.1 jmmv { 636 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 637 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT 3, :foo"); 638 1.1 jmmv 639 1.1 jmmv { 640 1.1 jmmv const std::string str = "Hello"; 641 1.1 jmmv stmt.bind(":foo", str); 642 1.1 jmmv } 643 1.1 jmmv 644 1.1 jmmv ATF_REQUIRE(stmt.step()); 645 1.1 jmmv ATF_REQUIRE(sqlite::type_integer == stmt.column_type(0)); 646 1.1 jmmv ATF_REQUIRE_EQ(3, stmt.column_int(0)); 647 1.1 jmmv ATF_REQUIRE(sqlite::type_text == stmt.column_type(1)); 648 1.1 jmmv ATF_REQUIRE_EQ(std::string("Hello"), stmt.column_text(1)); 649 1.1 jmmv ATF_REQUIRE(!stmt.step()); 650 1.1 jmmv } 651 1.1 jmmv 652 1.1 jmmv 653 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(bind__by_name); 654 1.1 jmmv ATF_TEST_CASE_BODY(bind__by_name) 655 1.1 jmmv { 656 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 657 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT 3, :foo"); 658 1.1 jmmv 659 1.1 jmmv const std::string str = "Hello"; 660 1.1 jmmv stmt.bind(":foo", str); 661 1.1 jmmv ATF_REQUIRE(stmt.step()); 662 1.1 jmmv ATF_REQUIRE(sqlite::type_integer == stmt.column_type(0)); 663 1.1 jmmv ATF_REQUIRE_EQ(3, stmt.column_int(0)); 664 1.1 jmmv ATF_REQUIRE(sqlite::type_text == stmt.column_type(1)); 665 1.1 jmmv ATF_REQUIRE_EQ(str, stmt.column_text(1)); 666 1.1 jmmv ATF_REQUIRE(!stmt.step()); 667 1.1 jmmv } 668 1.1 jmmv 669 1.1 jmmv 670 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(bind_parameter_count); 671 1.1 jmmv ATF_TEST_CASE_BODY(bind_parameter_count) 672 1.1 jmmv { 673 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 674 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT 3, ?, ?"); 675 1.1 jmmv ATF_REQUIRE_EQ(2, stmt.bind_parameter_count()); 676 1.1 jmmv } 677 1.1 jmmv 678 1.1 jmmv 679 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(bind_parameter_index); 680 1.1 jmmv ATF_TEST_CASE_BODY(bind_parameter_index) 681 1.1 jmmv { 682 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 683 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT 3, :foo, ?, :bar"); 684 1.1 jmmv ATF_REQUIRE_EQ(1, stmt.bind_parameter_index(":foo")); 685 1.1 jmmv ATF_REQUIRE_EQ(3, stmt.bind_parameter_index(":bar")); 686 1.1 jmmv } 687 1.1 jmmv 688 1.1 jmmv 689 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(bind_parameter_name); 690 1.1 jmmv ATF_TEST_CASE_BODY(bind_parameter_name) 691 1.1 jmmv { 692 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 693 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT 3, :foo, ?, :bar"); 694 1.1 jmmv ATF_REQUIRE_EQ(":foo", stmt.bind_parameter_name(1)); 695 1.1 jmmv ATF_REQUIRE_EQ(":bar", stmt.bind_parameter_name(3)); 696 1.1 jmmv } 697 1.1 jmmv 698 1.1 jmmv 699 1.1 jmmv ATF_TEST_CASE_WITHOUT_HEAD(clear_bindings); 700 1.1 jmmv ATF_TEST_CASE_BODY(clear_bindings) 701 1.1 jmmv { 702 1.1 jmmv sqlite::database db = sqlite::database::in_memory(); 703 1.1 jmmv sqlite::statement stmt = db.create_statement("SELECT 3, ?"); 704 1.1 jmmv 705 1.1 jmmv stmt.bind(1, 5); 706 1.1 jmmv ATF_REQUIRE(stmt.step()); 707 1.1 jmmv ATF_REQUIRE(sqlite::type_integer == stmt.column_type(0)); 708 1.1 jmmv ATF_REQUIRE_EQ(3, stmt.column_int(0)); 709 1.1 jmmv ATF_REQUIRE(sqlite::type_integer == stmt.column_type(1)); 710 1.1 jmmv ATF_REQUIRE_EQ(5, stmt.column_int(1)); 711 1.1 jmmv stmt.clear_bindings(); 712 1.1 jmmv stmt.reset(); 713 1.1 jmmv 714 1.1 jmmv ATF_REQUIRE(stmt.step()); 715 1.1 jmmv ATF_REQUIRE(sqlite::type_integer == stmt.column_type(0)); 716 1.1 jmmv ATF_REQUIRE_EQ(3, stmt.column_int(0)); 717 1.1 jmmv ATF_REQUIRE(sqlite::type_null == stmt.column_type(1)); 718 1.1 jmmv 719 1.1 jmmv ATF_REQUIRE(!stmt.step()); 720 1.1 jmmv } 721 1.1 jmmv 722 1.1 jmmv 723 1.1 jmmv ATF_INIT_TEST_CASES(tcs) 724 1.1 jmmv { 725 1.1 jmmv ATF_ADD_TEST_CASE(tcs, step__ok); 726 1.1 jmmv ATF_ADD_TEST_CASE(tcs, step__many); 727 1.1 jmmv ATF_ADD_TEST_CASE(tcs, step__fail); 728 1.1 jmmv 729 1.1 jmmv ATF_ADD_TEST_CASE(tcs, step_without_results__ok); 730 1.1 jmmv ATF_ADD_TEST_CASE(tcs, step_without_results__fail); 731 1.1 jmmv 732 1.1 jmmv ATF_ADD_TEST_CASE(tcs, column_count); 733 1.1 jmmv 734 1.1 jmmv ATF_ADD_TEST_CASE(tcs, column_name__ok); 735 1.1 jmmv ATF_ADD_TEST_CASE(tcs, column_name__fail); 736 1.1 jmmv 737 1.1 jmmv ATF_ADD_TEST_CASE(tcs, column_type__ok); 738 1.1 jmmv ATF_ADD_TEST_CASE(tcs, column_type__out_of_range); 739 1.1 jmmv 740 1.1 jmmv ATF_ADD_TEST_CASE(tcs, column_id__ok); 741 1.1 jmmv ATF_ADD_TEST_CASE(tcs, column_id__missing); 742 1.1 jmmv 743 1.1 jmmv ATF_ADD_TEST_CASE(tcs, column_blob); 744 1.1 jmmv ATF_ADD_TEST_CASE(tcs, column_double); 745 1.1 jmmv ATF_ADD_TEST_CASE(tcs, column_int__ok); 746 1.1 jmmv ATF_ADD_TEST_CASE(tcs, column_int__overflow); 747 1.1 jmmv ATF_ADD_TEST_CASE(tcs, column_int64); 748 1.1 jmmv ATF_ADD_TEST_CASE(tcs, column_text); 749 1.1 jmmv 750 1.1 jmmv ATF_ADD_TEST_CASE(tcs, column_bytes__blob); 751 1.1 jmmv ATF_ADD_TEST_CASE(tcs, column_bytes__text); 752 1.1 jmmv 753 1.1 jmmv ATF_ADD_TEST_CASE(tcs, safe_column_blob__ok); 754 1.1 jmmv ATF_ADD_TEST_CASE(tcs, safe_column_blob__fail); 755 1.1 jmmv ATF_ADD_TEST_CASE(tcs, safe_column_double__ok); 756 1.1 jmmv ATF_ADD_TEST_CASE(tcs, safe_column_double__fail); 757 1.1 jmmv ATF_ADD_TEST_CASE(tcs, safe_column_int__ok); 758 1.1 jmmv ATF_ADD_TEST_CASE(tcs, safe_column_int__fail); 759 1.1 jmmv ATF_ADD_TEST_CASE(tcs, safe_column_int64__ok); 760 1.1 jmmv ATF_ADD_TEST_CASE(tcs, safe_column_int64__fail); 761 1.1 jmmv ATF_ADD_TEST_CASE(tcs, safe_column_text__ok); 762 1.1 jmmv ATF_ADD_TEST_CASE(tcs, safe_column_text__fail); 763 1.1 jmmv 764 1.1 jmmv ATF_ADD_TEST_CASE(tcs, safe_column_bytes__ok__blob); 765 1.1 jmmv ATF_ADD_TEST_CASE(tcs, safe_column_bytes__ok__text); 766 1.1 jmmv ATF_ADD_TEST_CASE(tcs, safe_column_bytes__fail); 767 1.1 jmmv 768 1.1 jmmv ATF_ADD_TEST_CASE(tcs, reset); 769 1.1 jmmv 770 1.1 jmmv ATF_ADD_TEST_CASE(tcs, bind__blob); 771 1.1 jmmv ATF_ADD_TEST_CASE(tcs, bind__double); 772 1.1 jmmv ATF_ADD_TEST_CASE(tcs, bind__int64); 773 1.1 jmmv ATF_ADD_TEST_CASE(tcs, bind__int); 774 1.1 jmmv ATF_ADD_TEST_CASE(tcs, bind__null); 775 1.1 jmmv ATF_ADD_TEST_CASE(tcs, bind__text); 776 1.1 jmmv ATF_ADD_TEST_CASE(tcs, bind__text__transient); 777 1.1 jmmv ATF_ADD_TEST_CASE(tcs, bind__by_name); 778 1.1 jmmv 779 1.1 jmmv ATF_ADD_TEST_CASE(tcs, bind_parameter_count); 780 1.1 jmmv ATF_ADD_TEST_CASE(tcs, bind_parameter_index); 781 1.1 jmmv ATF_ADD_TEST_CASE(tcs, bind_parameter_name); 782 1.1 jmmv 783 1.1 jmmv ATF_ADD_TEST_CASE(tcs, clear_bindings); 784 1.1 jmmv } 785