File: test092.cxx

package info (click to toggle)
libpqxx 4.0.1%2Bdfsg3-8
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 16,012 kB
  • ctags: 9,469
  • sloc: sh: 11,289; cpp: 10,801; xml: 1,256; makefile: 287; ansic: 195; python: 159
file content (61 lines) | stat: -rw-r--r-- 1,964 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <cstring>
#include <iostream>
#include <list>

#include "test_helpers.hxx"


using namespace PGSTD;
using namespace pqxx;

// Test program for libpqxx.  Test binary parameters to prepared statements.

namespace
{
void test_092(transaction_base &T)
{
  const char databuf[] = "Test\0data";
  const string data(databuf, sizeof(databuf));
  PQXX_CHECK(data.size() > strlen(databuf), "Unknown data length problem.");

  const string Table = "pqxxbin", Field = "binfield", Stat = "nully";
  T.exec("CREATE TEMP TABLE " + Table + " (" + Field + " BYTEA)");

  T.conn().prepare(Stat, "INSERT INTO " + Table + " VALUES ($1)");
  T.prepared(Stat)(binarystring(data)).exec();

  const result L( T.exec("SELECT length("+Field+") FROM " + Table) );
  PQXX_CHECK_EQUAL(L[0][0].as<size_t>(),
	data.size(),
	"Length of field in database does not match original length.");

  const result R( T.exec("SELECT " + Field + " FROM " + Table) );

  const binarystring roundtrip(R[0][0]);

  PQXX_CHECK_EQUAL(string(roundtrip.str()), data, "Data came back different.");

  PQXX_CHECK_EQUAL(roundtrip.size(),
	data.size(),
	"Binary string reports wrong size.");

  // People seem to like the multi-line invocation style, where you get your
  // invocation object first, then add parameters in separate C++ statements.
  // As John Mudd found, that used to break the code.  Let's test it.
  T.exec("CREATE TEMP TABLE tuple (one INTEGER, two VARCHAR)");
  T.conn().prepare("maketuple", "INSERT INTO tuple VALUES ($1, $2)");

  pqxx::prepare::invocation i( T.prepared("maketuple") );
  const string f = "frobnalicious";
  i(6);
  i(f);
  i.exec();

  const result t( T.exec("SELECT * FROM tuple") );
  PQXX_CHECK_EQUAL(t.size(), 1u, "Wrong result size.");
  PQXX_CHECK_EQUAL(t[0][0].as<string>(), "6", "Unexpected result value.");
  PQXX_CHECK_EQUAL(t[0][1].c_str(), f, "Unexpected string result.");
}
} // namespace

PQXX_REGISTER_TEST_CT(test_092, lazyconnection, nontransaction)