Skip to content

Commit b202135

Browse files
authored
Merge pull request #163 from keboola/PST-1473-ondra-conversion-datatype-table
Snowflake: conversion table for aliases
2 parents f9154ea + 660b8c0 commit b202135

2 files changed

Lines changed: 100 additions & 0 deletions

File tree

src/Definition/Snowflake.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,44 @@ public static function getTypeByBasetype(string $basetype): string
435435
throw new LogicException(sprintf('Definition for base type "%s" is missing.', $basetype));
436436
}
437437

438+
public function getBackendBasetype(): string
439+
{
440+
return match (strtoupper($this->type)) {
441+
self::TYPE_NVARCHAR => self::TYPE_VARCHAR,
442+
self::TYPE_NVARCHAR2 => self::TYPE_VARCHAR,
443+
self::TYPE_CHAR => self::TYPE_VARCHAR,
444+
self::TYPE_CHARACTER => self::TYPE_VARCHAR,
445+
self::TYPE_CHAR_VARYING => self::TYPE_VARCHAR,
446+
self::TYPE_CHARACTER_VARYING => self::TYPE_VARCHAR,
447+
self::TYPE_NCHAR_VARYING => self::TYPE_VARCHAR,
448+
self::TYPE_NCHAR => self::TYPE_VARCHAR,
449+
self::TYPE_STRING => self::TYPE_VARCHAR,
450+
self::TYPE_TEXT => self::TYPE_VARCHAR,
451+
452+
self::TYPE_VARBINARY => self::TYPE_BINARY,
453+
454+
self::TYPE_DEC => self::TYPE_NUMBER,
455+
self::TYPE_DECIMAL => self::TYPE_NUMBER,
456+
self::TYPE_NUMERIC => self::TYPE_NUMBER,
457+
self::TYPE_INT => self::TYPE_NUMBER,
458+
self::TYPE_INTEGER => self::TYPE_NUMBER,
459+
self::TYPE_BIGINT => self::TYPE_NUMBER,
460+
self::TYPE_SMALLINT => self::TYPE_NUMBER,
461+
self::TYPE_TINYINT => self::TYPE_NUMBER,
462+
self::TYPE_BYTEINT => self::TYPE_NUMBER,
463+
464+
self::TYPE_FLOAT => self::TYPE_FLOAT,
465+
self::TYPE_FLOAT4 => self::TYPE_FLOAT,
466+
self::TYPE_FLOAT8 => self::TYPE_FLOAT,
467+
self::TYPE_DOUBLE => self::TYPE_FLOAT,
468+
self::TYPE_DOUBLE_PRECISION => self::TYPE_FLOAT,
469+
self::TYPE_REAL => self::TYPE_FLOAT,
470+
471+
self::TYPE_DATETIME => self::TYPE_TIMESTAMP_NTZ,
472+
default => $this->type
473+
};
474+
}
475+
438476
public static function getDefinitionForBasetype(string $basetype): self
439477
{
440478
$basetype = strtoupper($basetype);

tests/SnowflakeDatatypeTest.php

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,15 @@ public function testArrayFromLength(string $type, ?string $length, array $expect
479479
$this->assertSame($expectedArray, $definition->getArrayFromLength());
480480
}
481481

482+
/**
483+
* @dataProvider provideTestGetTypeFromAlias
484+
*/
485+
public function testBackendBasetypeFromAlias(string $type, string $expectedType): void
486+
{
487+
$definition = new Snowflake($type);
488+
$this->assertSame($expectedType, $definition->getBackendBasetype());
489+
}
490+
482491
public function arrayFromLengthProvider(): Generator
483492
{
484493
yield 'simple' => [
@@ -507,4 +516,57 @@ public function arrayFromLengthProvider(): Generator
507516
['numeric_precision' => 10, 'numeric_scale' => 0],
508517
];
509518
}
519+
520+
public function provideTestGetTypeFromAlias(): Generator
521+
{
522+
foreach (Snowflake::TYPES as $type) {
523+
switch ($type) {
524+
case Snowflake::TYPE_NVARCHAR:
525+
case Snowflake::TYPE_NVARCHAR2:
526+
case Snowflake::TYPE_CHAR:
527+
case Snowflake::TYPE_CHARACTER:
528+
case Snowflake::TYPE_CHAR_VARYING:
529+
case Snowflake::TYPE_CHARACTER_VARYING:
530+
case Snowflake::TYPE_NCHAR_VARYING:
531+
case Snowflake::TYPE_NCHAR:
532+
case Snowflake::TYPE_STRING:
533+
case Snowflake::TYPE_TEXT:
534+
$expectedType = Snowflake::TYPE_VARCHAR;
535+
break;
536+
case Snowflake::TYPE_DEC:
537+
case Snowflake::TYPE_DECIMAL:
538+
case Snowflake::TYPE_NUMERIC:
539+
case Snowflake::TYPE_INT:
540+
case Snowflake::TYPE_INTEGER:
541+
case Snowflake::TYPE_BIGINT:
542+
case Snowflake::TYPE_SMALLINT:
543+
case Snowflake::TYPE_TINYINT:
544+
case Snowflake::TYPE_BYTEINT:
545+
$expectedType = Snowflake::TYPE_NUMBER;
546+
break;
547+
case Snowflake::TYPE_FLOAT:
548+
case Snowflake::TYPE_FLOAT4:
549+
case Snowflake::TYPE_FLOAT8:
550+
case Snowflake::TYPE_DOUBLE:
551+
case Snowflake::TYPE_DOUBLE_PRECISION:
552+
case Snowflake::TYPE_REAL:
553+
$expectedType = Snowflake::TYPE_FLOAT;
554+
break;
555+
case Snowflake::TYPE_VARBINARY:
556+
$expectedType = Snowflake::TYPE_BINARY;
557+
break;
558+
case Snowflake::TYPE_DATETIME:
559+
$expectedType = Snowflake::TYPE_TIMESTAMP_NTZ;
560+
break;
561+
default:
562+
$expectedType = $type;
563+
break;
564+
}
565+
566+
yield $type => [
567+
'type' => $type,
568+
'expectedType' => $expectedType,
569+
];
570+
}
571+
}
510572
}

0 commit comments

Comments
 (0)