test fixups
[m6w6/pq-gateway] / tests / setup.inc
1 <?php
2
3 const PQ_TEST_DSN = "";
4
5 const PQ_TEST_SETUP_SQL = <<<SQL
6 drop table if exists test cascade;
7 create table test (
8 id serial primary key,
9 created timestamp,
10 counter int,
11 number decimal,
12 data text
13 );
14
15 drop table if exists reftest cascade;
16 create table reftest (
17 test_id integer not null references test on delete cascade,
18 another_test_id integer not null references test on delete cascade
19 );
20
21 insert into test values (default, 'yesterday', -1, -1.1, 'yesterday');
22 insert into test values (default, 'today', 0, 0, 'today');
23 insert into test values (default, 'tomorrow', 1, 1.1, 'tomorrow');
24
25 insert into reftest values (1,3);
26 insert into reftest values (2,2);
27 insert into reftest values (3,1);
28 SQL;
29
30 const PQ_TEST_TEARDOWN_SQL = <<<SQL
31 drop table if exists test cascade;
32 drop table if exists reftest cascade;
33 SQL;
34
35 include_once __DIR__ . "/../lib/autoload.php";
36
37 function executeInConcurrentTransaction(\pq\Query\ExecutorInterface $exec, $sql, array $params = null) {
38 $conn = $exec->getConnection();
39 $exec->setConnection(new pq\Connection(PQ_TEST_DSN));
40 $exec->execute(new \pq\Query\Writer($sql, $params), function(){});
41 $exec->setConnection($conn);
42 }
43
44 class QueryLogger implements \SplObserver
45 {
46 protected $fp;
47
48 function __construct($logfile = null) {
49 if (!isset($logfile)) {
50 $logfile = __DIR__."/query.log";
51 }
52 if (!$this->fp = @fopen($logfile, "a")) {
53 throw new \RuntimeException(error_get_last()["message"]);
54 }
55 }
56
57 function __destruct() {
58 if (is_resource($this->fp)) {
59 fclose($this->fp);
60 }
61 }
62
63 function update(\SplSubject $executor) {
64 $result = $executor->getResult();
65 if (isset($result)) {
66 fprintf($this->fp, "[%s] R %s\n",
67 date_create()->format("Y-m-d H:i:s"),
68 json_encode($result));
69 } elseif (($query = $executor->getQuery())) {
70 fprintf($this->fp, "[%s] Q %s %% %s\n",
71 date_create()->format("Y-m-d H:i:s"),
72 preg_replace("/\s+/", " ", $query),
73 json_encode($query->getParams()));
74 }
75 }
76 }