Skip to content

Commit c869241

Browse files
authored
Merge pull request #164 from keboola/PST-1474-ondra-conversion-datatype-table
Bigquery: conversion table for aliases
2 parents b202135 + 1c775a4 commit c869241

2 files changed

Lines changed: 54 additions & 0 deletions

File tree

src/Definition/Bigquery.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,21 @@ public static function getTypeByBasetype(string $basetype): string
284284
throw new LogicException(sprintf('Definition for base type "%s" is missing.', $basetype));
285285
}
286286

287+
public function getBackendBasetype(): string
288+
{
289+
return match (strtoupper($this->type)) {
290+
self::TYPE_INT => self::TYPE_INT64,
291+
self::TYPE_SMALLINT => self::TYPE_INT64,
292+
self::TYPE_INTEGER => self::TYPE_INT64,
293+
self::TYPE_BIGINT => self::TYPE_INT64,
294+
self::TYPE_TINYINT => self::TYPE_INT64,
295+
self::TYPE_BYTEINT => self::TYPE_INT64,
296+
self::TYPE_DECIMAL => self::TYPE_NUMERIC,
297+
self::TYPE_BIGDECIMAL => self::TYPE_BIGNUMERIC,
298+
default => $this->type
299+
};
300+
}
301+
287302
public static function getDefinitionForBasetype(string $basetype): self
288303
{
289304
$type = self::getTypeByBasetype($basetype);

tests/BigqueryDatatypeTest.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,15 @@ public function testFieldAsArray(): void
384384
], $def->getFieldAsArray());
385385
}
386386

387+
/**
388+
* @dataProvider provideTestGetTypeFromAlias
389+
*/
390+
public function testBackendBasetypeFromAlias(string $type, string $expectedType): void
391+
{
392+
$definition = new Bigquery($type);
393+
$this->assertSame($expectedType, $definition->getBackendBasetype());
394+
}
395+
387396
public static function getTestedClass(): string
388397
{
389398
return Bigquery::class;
@@ -476,4 +485,34 @@ public static function provideTestGetDefinitionForBasetype(): Generator
476485
'expectToFail' => true,
477486
];
478487
}
488+
489+
public function provideTestGetTypeFromAlias(): Generator
490+
{
491+
foreach (Bigquery::TYPES as $type) {
492+
switch ($type) {
493+
case Bigquery::TYPE_INT:
494+
case Bigquery::TYPE_SMALLINT:
495+
case Bigquery::TYPE_INTEGER:
496+
case Bigquery::TYPE_BIGINT:
497+
case Bigquery::TYPE_TINYINT:
498+
case Bigquery::TYPE_BYTEINT:
499+
$expectedType = Bigquery::TYPE_INT64;
500+
break;
501+
case Bigquery::TYPE_DECIMAL:
502+
$expectedType = Bigquery::TYPE_NUMERIC;
503+
break;
504+
case Bigquery::TYPE_BIGDECIMAL:
505+
$expectedType = Bigquery::TYPE_BIGNUMERIC;
506+
break;
507+
default:
508+
$expectedType = $type;
509+
break;
510+
}
511+
512+
yield $type => [
513+
'type' => $type,
514+
'expectedType' => $expectedType,
515+
];
516+
}
517+
}
479518
}

0 commit comments

Comments
 (0)