1<?php
2
3namespace dokuwiki\plugin\struct\test;
4
5use dokuwiki\plugin\struct\meta\QueryBuilder;
6use dokuwiki\plugin\struct\meta\StructException;
7
8/**
9 * @group plugin_struct
10 * @group plugins
11 */
12class QueryBuilderSelectTest extends StructTest
13{
14
15    /**
16     * @noinspection SqlDialectInspection
17     * @noinspection SqlNoDataSourceInspection
18     */
19    public function test_simple_select()
20    {
21        $qb = new QueryBuilder();
22
23        $qb->addTable('first', 'T1');
24        $qb->addSelectColumn('T1', 'colbar', 'asAlias');
25
26
27        $expectedSQL = '
28            SELECT T1.colbar AS asAlias FROM first AS T1 WHERE
29        ';
30
31        list($actual_sql, $actual_opts) = $qb->getSQL();
32        $this->assertEquals($this->cleanWS($expectedSQL), $this->cleanWS($actual_sql));
33        $this->assertEquals(array(), $actual_opts);
34    }
35
36    /**
37     * @noinspection SqlDialectInspection
38     * @noinspection SqlNoDataSourceInspection
39     */
40    public function test_overwrite_selects()
41    {
42        $qb = new QueryBuilder();
43
44        $qb->addTable('first', 'T1');
45        $qb->addSelectColumn('T1', 'colbar_original', 'colAlias');
46        $qb->addSelectColumn('T1', 'colfoo_overwritten', 'colAlias');
47
48        $expectedSQL = 'SELECT T1.colfoo_overwritten AS colAlias FROM first AS T1 WHERE';
49        list($actual_sql, $actual_opts) = $qb->getSQL();
50        $this->assertEquals($this->cleanWS($expectedSQL), $this->cleanWS($actual_sql));
51        $this->assertEquals(array(), $actual_opts);
52    }
53
54    /**
55     * @noinspection SqlDialectInspection
56     * @noinspection SqlNoDataSourceInspection
57     */
58    public function test_arbitrary_selects()
59    {
60        $qb = new QueryBuilder();
61
62        $qb->addSelectStatement('a.b', 'C');
63
64        $expectedSQL = 'SELECT a.b AS C FROM WHERE';
65        list($actual_sql, $actual_opts) = $qb->getSQL();
66        $this->assertEquals($this->cleanWS($expectedSQL), $this->cleanWS($actual_sql));
67        $this->assertEquals(array(), $actual_opts);
68    }
69
70    public function test_missing_alias()
71    {
72        $this->expectException(StructException::class);
73        $qb = new QueryBuilder();
74
75        $qb->addTable('first', 'T1');
76        $qb->addSelectColumn('WrongAlias', 'colbar', 'colAlias');
77    }
78
79}
80