packages/ztd-query-mysql/tests/Unit/Rewrite/LoadData/InputFormatTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Rewrite\LoadData;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use ZtdQuery\Platform\MySql\Rewrite\LoadData\InputFormat;
10
11#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\MySql\Sql\MySqlLexerProfile::class)]
12#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\MySql\Rewrite\LoadData\ColumnMapping::class)]
13#[CoversClass(InputFormat::class)]
14final class InputFormatTest extends TestCase
15{
16 public function testFromStatementDefaults(): void
17 {
18 $sql = "LOAD DATA INFILE 'input.csv' INTO TABLE t";
19 $statement = (new \PhpMyAdmin\SqlParser\Parser($sql))->statements[0];
20 self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\LoadStatement::class, $statement);
21 $format = InputFormat::fromStatement($statement, $sql);
22 self::assertSame("\t", $format->fieldTerminator);
23 self::assertSame('', $format->enclosure);
24 self::assertSame('\\', $format->escape);
25 self::assertSame('', $format->linePrefix);
26 self::assertSame("\n", $format->lineTerminator);
27 }
28
29 public function testFromStatementCustomSeparators(): void
30 {
31 $sql = 'LOAD DATA INFILE \'input.csv\' INTO TABLE t FIELDS TERMINATED BY \',\' ENCLOSED BY \'"\' ESCAPED BY \'!\' LINES STARTING BY \'#\' TERMINATED BY \';\'';
32 $statement = (new \PhpMyAdmin\SqlParser\Parser($sql))->statements[0];
33 self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\LoadStatement::class, $statement);
34 $format = InputFormat::fromStatement($statement, $sql);
35 self::assertSame(',', $format->fieldTerminator);
36 self::assertSame('"', $format->enclosure);
37 self::assertSame('!', $format->escape);
38 self::assertSame('#', $format->linePrefix);
39 self::assertSame(';', $format->lineTerminator);
40 }
41
42 public function testFromStatementRejectsFixedRows(): void
43 {
44 $sql = "LOAD DATA INFILE 'input.csv' INTO TABLE t FIELDS TERMINATED BY ''";
45 $statement = (new \PhpMyAdmin\SqlParser\Parser($sql))->statements[0];
46 self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\LoadStatement::class, $statement);
47 $this->expectException(\ZtdQuery\Exception\UnsupportedSqlException::class);
48 InputFormat::fromStatement($statement, $sql);
49 }
50
51}
52