tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_binding_arrays.cpp (5993B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
      2 * vim: sw=2 ts=2 et lcs=trail\:.,tab\:>~ :
      3 * This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #include "storage_test_harness.h"
      8 
      9 #include "mozStorageHelper.h"
     10 
     11 using namespace mozilla;
     12 
     13 /**
     14 * This file tests binding and reading out array parameters through the
     15 * mozIStorageStatement API.
     16 */
     17 
     18 TEST(storage_binding_arrays, Integers)
     19 {
     20  nsCOMPtr<mozIStorageConnection> db(getMemoryDatabase());
     21 
     22  (void)db->ExecuteSimpleSQL("CREATE TABLE test (val BLOB)"_ns);
     23 
     24  nsCOMPtr<mozIStorageStatement> insert, select;
     25  (void)db->CreateStatement(
     26      "INSERT INTO test (val) SELECT value FROM carray(?1)"_ns,
     27      getter_AddRefs(insert));
     28  (void)db->CreateStatement("SELECT val FROM test WHERE val IN carray(?1)"_ns,
     29                            getter_AddRefs(select));
     30 
     31  nsTArray<int64_t> inserted = {1, 2};
     32  {
     33    mozStorageStatementScoper scoper(insert);
     34    bool hasResult;
     35    do_check_true(
     36        NS_SUCCEEDED(insert->BindArrayOfIntegersByIndex(0, inserted)));
     37    do_check_true(NS_SUCCEEDED(insert->ExecuteStep(&hasResult)));
     38    do_check_false(hasResult);
     39  }
     40 
     41  nsAutoCString result;
     42  {
     43    mozStorageStatementScoper scoper(select);
     44    do_check_true(
     45        NS_SUCCEEDED(select->BindArrayOfIntegersByIndex(0, inserted)));
     46    bool hasResult;
     47    for (auto expected : inserted) {
     48      do_check_true(NS_SUCCEEDED(select->ExecuteStep(&hasResult)));
     49      do_check_true(hasResult);
     50      int64_t result;
     51      do_check_true(NS_SUCCEEDED(select->GetInt64(0, &result)));
     52      do_check_true(result == expected);
     53    }
     54  }
     55 }
     56 
     57 TEST(storage_binding_arrays, Doubles)
     58 {
     59  nsCOMPtr<mozIStorageConnection> db(getMemoryDatabase());
     60 
     61  (void)db->ExecuteSimpleSQL("CREATE TABLE test (val BLOB)"_ns);
     62 
     63  nsCOMPtr<mozIStorageStatement> insert, select;
     64  (void)db->CreateStatement(
     65      "INSERT INTO test (val) SELECT value FROM carray(?1)"_ns,
     66      getter_AddRefs(insert));
     67  (void)db->CreateStatement("SELECT val FROM test WHERE val IN carray(?1)"_ns,
     68                            getter_AddRefs(select));
     69 
     70  nsTArray<double> inserted = {1.1, 2.2};
     71  {
     72    mozStorageStatementScoper scoper(insert);
     73    bool hasResult;
     74    do_check_true(NS_SUCCEEDED(insert->BindArrayOfDoublesByIndex(0, inserted)));
     75    do_check_true(NS_SUCCEEDED(insert->ExecuteStep(&hasResult)));
     76    do_check_false(hasResult);
     77  }
     78 
     79  nsAutoCString result;
     80  {
     81    mozStorageStatementScoper scoper(select);
     82    do_check_true(NS_SUCCEEDED(select->BindArrayOfDoublesByIndex(0, inserted)));
     83    bool hasResult;
     84    for (auto expected : inserted) {
     85      do_check_true(NS_SUCCEEDED(select->ExecuteStep(&hasResult)));
     86      do_check_true(hasResult);
     87      double result;
     88      do_check_true(NS_SUCCEEDED(select->GetDouble(0, &result)));
     89      do_check_true(result == expected);
     90    }
     91  }
     92 }
     93 
     94 TEST(storage_binding_arrays, UTF8Strings)
     95 {
     96  nsCOMPtr<mozIStorageConnection> db(getMemoryDatabase());
     97 
     98  (void)db->ExecuteSimpleSQL("CREATE TABLE test (val BLOB)"_ns);
     99 
    100  nsCOMPtr<mozIStorageStatement> insert, select;
    101  (void)db->CreateStatement(
    102      "INSERT INTO test (val) SELECT value FROM carray(?1)"_ns,
    103      getter_AddRefs(insert));
    104  (void)db->CreateStatement("SELECT val FROM test WHERE val IN carray(?1)"_ns,
    105                            getter_AddRefs(select));
    106 
    107  nsTArray<nsCString> inserted = {"test1"_ns, "test2"_ns};
    108  {
    109    mozStorageStatementScoper scoper(insert);
    110    bool hasResult;
    111    do_check_true(
    112        NS_SUCCEEDED(insert->BindArrayOfUTF8StringsByIndex(0, inserted)));
    113    do_check_true(NS_SUCCEEDED(insert->ExecuteStep(&hasResult)));
    114    do_check_false(hasResult);
    115  }
    116 
    117  nsAutoCString result;
    118  {
    119    mozStorageStatementScoper scoper(select);
    120    bool hasResult;
    121    do_check_true(
    122        NS_SUCCEEDED(select->BindArrayOfUTF8StringsByIndex(0, inserted)));
    123    for (const auto& expected : inserted) {
    124      do_check_true(NS_SUCCEEDED(select->ExecuteStep(&hasResult)));
    125      do_check_true(hasResult);
    126      nsCString result;
    127      do_check_true(NS_SUCCEEDED(select->GetUTF8String(0, result)));
    128      do_check_true(result.Equals(expected));
    129    }
    130  }
    131 }
    132 
    133 TEST(storage_binding_arrays, AsyncStatement_BindingParamsArray)
    134 {
    135  nsCOMPtr<mozIStorageConnection> db(getMemoryDatabase());
    136 
    137  (void)db->ExecuteSimpleSQL("CREATE TABLE test (val BLOB)"_ns);
    138 
    139  nsCOMPtr<mozIStorageAsyncStatement> insert;
    140  (void)db->CreateAsyncStatement(
    141      "INSERT INTO test (val) SELECT value FROM carray(:values)"_ns,
    142      getter_AddRefs(insert));
    143  nsTArray<int64_t> insertedIntegers = {1, 2};
    144  nsTArray<nsCString> insertedStrings = {"test1"_ns, "test2"_ns};
    145  nsCOMPtr<mozIStorageBindingParamsArray> paramsArray;
    146  insert->NewBindingParamsArray(getter_AddRefs(paramsArray));
    147  nsCOMPtr<mozIStorageBindingParams> intParams;
    148  paramsArray->NewBindingParams(getter_AddRefs(intParams));
    149  do_check_true(NS_SUCCEEDED(
    150      intParams->BindArrayOfIntegersByName("values"_ns, insertedIntegers)));
    151  do_check_true(NS_SUCCEEDED(paramsArray->AddParams(intParams)));
    152  intParams = nullptr;
    153  nsCOMPtr<mozIStorageBindingParams> strParams;
    154  paramsArray->NewBindingParams(getter_AddRefs(strParams));
    155  do_check_true(NS_SUCCEEDED(
    156      strParams->BindArrayOfUTF8StringsByName("values"_ns, insertedStrings)));
    157  do_check_true(NS_SUCCEEDED(paramsArray->AddParams(strParams)));
    158  strParams = nullptr;
    159  do_check_true(NS_SUCCEEDED(insert->BindParameters(paramsArray)));
    160  paramsArray = nullptr;
    161  blocking_async_execute(insert);
    162  insert->Finalize();
    163 
    164  nsCOMPtr<mozIStorageStatement> select;
    165  (void)db->CreateStatement("SELECT count(*) FROM test"_ns,
    166                            getter_AddRefs(select));
    167  bool hasResult;
    168  do_check_true(NS_SUCCEEDED(select->ExecuteStep(&hasResult)));
    169  do_check_true(hasResult);
    170  do_check_true(select->AsInt64(0) == 4);
    171  select->Finalize();
    172 
    173  blocking_async_close(db);
    174 }