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