Skip to content

Commit 241dc4c

Browse files
committed
fix: withHeaders when using wildcard path
1 parent 1d50b14 commit 241dc4c

File tree

4 files changed

+41
-1
lines changed

4 files changed

+41
-1
lines changed

src/SQLLoader.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,16 @@ public function inFile(
438438
public function withHeaders(): static
439439
{
440440
$this->options(['skip=1']);
441-
$headers = CsvFile::make($this->inputFiles[0]->path, 'r')->getHeaders();
441+
442+
$path = $this->inputFiles[0]->path;
443+
if (Str::contains($path, ['*', '?'])) {
444+
$files = File::allFiles(dirname($path));
445+
446+
$headers = CsvFile::make($files[0]->getPathname(), 'r')->getHeaders();
447+
} else {
448+
$headers = CsvFile::make($this->inputFiles[0]->path, 'r')->getHeaders();
449+
}
450+
442451
$this->defaultColumns = $headers;
443452

444453
return $this;

tests/Feature/SQLLoaderTest.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,3 +157,25 @@
157157
assertStringContainsString('"CREATED_AT" DATE', $controlFile);
158158
assertStringContainsString("\"IS_ACTIVE\" \"DECODE(:is_active, '', '1', :is_active)\"\n", $controlFile);
159159
});
160+
161+
test('it accepts withHeader on input file with wildcard', function () {
162+
Process::fake();
163+
164+
$loader = new SQLLoader();
165+
$path = __DIR__.'/../data/wildcard/*.dat';
166+
$loader->inFile($path)
167+
->as('users.ctl')
168+
->withHeaders()
169+
->into('users')
170+
->execute();
171+
172+
$controlFile = $loader->buildControlFile();
173+
assertStringContainsString("INFILE '{$path}'", $controlFile);
174+
assertStringContainsString('INTO TABLE users', $controlFile);
175+
assertStringContainsString('FIELDS TERMINATED BY \',\' OPTIONALLY ENCLOSED BY \'"\'', $controlFile);
176+
assertStringContainsString('TRAILING NULLCOLS', $controlFile);
177+
assertStringContainsString('(', $controlFile);
178+
assertStringContainsString('"NAME",', $controlFile);
179+
assertStringContainsString('"EMAIL"', $controlFile);
180+
assertStringContainsString(')', $controlFile);
181+
});

tests/data/wildcard/users-1.dat

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
NAME,EMAIL
2+
3+
4+
"Mr. ""John"" Doe",[email protected]
5+
"Ms. Doe, Jane", [email protected]

tests/data/wildcard/users-2.dat

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
3+
"Mr. ""John"" Doe",[email protected]
4+
"Ms. Doe, Jane", [email protected]

0 commit comments

Comments
 (0)