diff --git a/clients/redshift/dialect/dialect_test.go b/clients/redshift/dialect/dialect_test.go index d0496eed4..dfd845eec 100644 --- a/clients/redshift/dialect/dialect_test.go +++ b/clients/redshift/dialect/dialect_test.go @@ -29,6 +29,25 @@ func TestRedshiftDialect_DataTypeForKind(t *testing.T) { assert.Equal(t, "VARCHAR(12345)", RedshiftDialect{}.DataTypeForKind(typing.KindDetails{Kind: typing.String.Kind, OptionalStringPrecision: typing.ToPtr(int32(12345))}, false)) } } + { + // Integers + { + // Small int + assert.Equal(t, "INT2", RedshiftDialect{}.DataTypeForKind(typing.KindDetails{Kind: typing.Integer.Kind, OptionalIntKind: typing.SmallIntegerKind}, false)) + } + { + // Integer + assert.Equal(t, "INT4", RedshiftDialect{}.DataTypeForKind(typing.KindDetails{Kind: typing.Integer.Kind, OptionalIntKind: typing.IntegerKind}, false)) + } + { + // Big integer + assert.Equal(t, "INT8", RedshiftDialect{}.DataTypeForKind(typing.KindDetails{Kind: typing.Integer.Kind, OptionalIntKind: typing.BigIntegerKind}, false)) + } + { + // Not specified + assert.Equal(t, "INT8", RedshiftDialect{}.DataTypeForKind(typing.Integer, false)) + } + } } func TestRedshiftDialect_KindForDataType(t *testing.T) { diff --git a/lib/optimization/table_data.go b/lib/optimization/table_data.go index 4d6cc3d2e..b737f2786 100644 --- a/lib/optimization/table_data.go +++ b/lib/optimization/table_data.go @@ -282,6 +282,9 @@ func (t *TableData) MergeColumnsFromDestination(destCols ...columns.Column) erro inMemoryCol.KindDetails.OptionalStringPrecision = foundColumn.KindDetails.OptionalStringPrecision } + // Copy over optional integer kind + inMemoryCol.KindDetails.OptionalIntKind = foundColumn.KindDetails.OptionalIntKind + // Copy over the time details if foundColumn.KindDetails.ExtendedTimeDetails != nil { if inMemoryCol.KindDetails.ExtendedTimeDetails == nil {