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