mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2024-12-28 16:58:51 +00:00
be7ce4110e
This reverts commit e96515433d
.
62 lines
1.5 KiB
C++
62 lines
1.5 KiB
C++
#include <cstring>
|
|
#include <iostream>
|
|
|
|
#include <pqxx/transaction>
|
|
|
|
#include "test_helpers.hxx"
|
|
|
|
|
|
using namespace pqxx;
|
|
|
|
|
|
// Example program for libpqxx. Test binary string functionality.
|
|
namespace
|
|
{
|
|
void test_062()
|
|
{
|
|
connection conn;
|
|
work tx{conn};
|
|
|
|
std::string const TestStr{
|
|
"Nasty\n\030Test\n\t String with \200\277 weird bytes "
|
|
"\r\0 and Trailer\\\\\0"};
|
|
|
|
tx.exec0("CREATE TEMP TABLE pqxxbin (binfield bytea)");
|
|
|
|
std::string const Esc{tx.esc_raw(std::basic_string<std::byte>{
|
|
reinterpret_cast<std::byte const *>(std::data(TestStr)),
|
|
std::size(TestStr)})};
|
|
|
|
tx.exec0("INSERT INTO pqxxbin VALUES ('" + Esc + "')");
|
|
|
|
result R{tx.exec("SELECT * from pqxxbin")};
|
|
tx.exec0("DELETE FROM pqxxbin");
|
|
|
|
auto const B{R.at(0).at(0).as<std::basic_string<std::byte>>()};
|
|
|
|
PQXX_CHECK(not std::empty(B), "Binary string became empty in conversion.");
|
|
|
|
PQXX_CHECK_EQUAL(
|
|
std::size(B), std::size(TestStr), "Binary string was mangled.");
|
|
|
|
std::basic_string<std::byte>::const_iterator c;
|
|
std::basic_string<std::byte>::size_type i;
|
|
for (i = 0, c = std::begin(B); i < std::size(B); ++i, ++c)
|
|
{
|
|
PQXX_CHECK(c != std::end(B), "Premature end to binary string.");
|
|
|
|
char const x{TestStr.at(i)}, y{char(B.at(i))}, z{char(std::data(B)[i])};
|
|
|
|
PQXX_CHECK_EQUAL(
|
|
std::string(&x, 1), std::string(&y, 1), "Binary string byte changed.");
|
|
|
|
PQXX_CHECK_EQUAL(
|
|
std::string(&y, 1), std::string(&z, 1),
|
|
"Inconsistent byte at offset " + to_string(i) + ".");
|
|
}
|
|
}
|
|
|
|
|
|
PQXX_REGISTER_TEST(test_062);
|
|
} // namespace
|