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