1<?php 2 3namespace dokuwiki\plugin\struct\test; 4 5use dokuwiki\plugin\struct\meta\Search; 6 7/** 8 * Tests for the building of SQL-Queries for the struct plugin 9 * 10 * @group plugin_struct 11 * @group plugins 12 * 13 */ 14class AccessTableDataSQLTest extends StructTest 15{ 16 17 /** 18 * @return array 19 * @see schemaDataSQL_struct_test::test_buildGetDataSQL 20 * @noinspection SqlDialectInspection 21 * @noinspection SqlNoDataSourceInspection 22 */ 23 public static function buildGetDataSQL_testdata() 24 { 25 $schemadata = new mock\AccessTableDataNoDB('testtable', 'pagename', 27); 26 27 /** @noinspection SqlResolve */ 28 return [ 29 [ 30 [ 31 'obj' => $schemadata, 32 'singles' => ['dokuwiki\\plugin\\struct\\types\\Text', 'dokuwiki\\plugin\\struct\\types\\Text'], 33 'multis' => [], 34 ], 35 "SELECT DATA.pid AS PID, 36 DATA.col1 AS out1, 37 DATA.col2 AS out2 38 FROM data_testtable AS DATA 39 WHERE (DATA.pid = ? 40 AND DATA.rev = ?) 41 GROUP BY DATA.pid,out1,out2", 42 ['pagename', 27], 43 'no multis, with ts', 44 ], 45 [ 46 [ 47 'obj' => $schemadata, 48 'singles' => ['dokuwiki\\plugin\\struct\\types\\Text', 'dokuwiki\\plugin\\struct\\types\\Text'], 49 'multis' => ['dokuwiki\\plugin\\struct\\types\\Text'], 50 ], 51 "SELECT DATA.pid AS PID, 52 DATA.col1 AS out1, 53 DATA.col2 AS out2, 54 GROUP_CONCAT_DISTINCT(M3.value,'" . Search::CONCAT_SEPARATOR . "') AS out3 55 FROM data_testtable AS DATA 56 LEFT OUTER JOIN multi_testtable AS M3 57 ON DATA.pid = M3.pid 58 AND DATA.rev = M3.rev 59 AND M3.colref = 3 60 WHERE (DATA.pid = ? 61 AND DATA.rev = ?) 62 GROUP BY DATA.pid,out1,out2", 63 ['pagename', 27,], 64 'one multi, with ts', 65 ], 66 [ 67 [ 68 'obj' => $schemadata, 69 'singles' => [], 70 'multis' => ['dokuwiki\\plugin\\struct\\types\\Text', 'dokuwiki\\plugin\\struct\\types\\Text'] 71 ], 72 "SELECT DATA.pid AS PID, 73 GROUP_CONCAT_DISTINCT(M1.value,'" . Search::CONCAT_SEPARATOR . "') AS out1, 74 GROUP_CONCAT_DISTINCT(M2.value,'" . Search::CONCAT_SEPARATOR . "') AS out2 75 FROM data_testtable AS DATA 76 LEFT OUTER JOIN multi_testtable AS M2 77 ON DATA.pid = M2.pid 78 AND DATA.rev = M2.rev 79 AND M2.colref = 2 80 LEFT OUTER JOIN multi_testtable AS M1 81 ON DATA.pid = M1.pid 82 AND DATA.rev = M1.rev 83 AND M1.colref = 1 84 WHERE (DATA.pid = ? 85 AND DATA.rev = ?) 86 GROUP BY DATA.pid", 87 ['pagename', 27,], 88 "only two multis" 89 ] 90 ]; 91 } 92 93 /** 94 * @dataProvider buildGetDataSQL_testdata 95 * 96 * @covers \dokuwiki\plugin\struct\meta\SchemaData::buildGetDataSQL 97 * 98 * @param $testvals 99 * @param string $expected_sql 100 * @param array $expected_opt 101 * @param string $msg 102 */ 103 public function test_buildGetDataSQL($testvals, $expected_sql, $expected_opt, $msg) 104 { 105 /** @var mock\AccessTableDataNoDB $obj */ 106 $obj = $testvals['obj']; 107 $obj->setColumns($testvals['singles'], $testvals['multis']); 108 109 list($actual_sql, $actual_opt) = $obj->buildGetDataSQL(); 110 111 $this->assertSame($this->cleanWS($expected_sql), $this->cleanWS($actual_sql), $msg); 112 $this->assertEquals($expected_opt, $actual_opt, $msg); 113 } 114 115} 116