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