diff --git a/go/logic/inspect.go b/go/logic/inspect.go index 584c56b..fc8d098 100644 --- a/go/logic/inspect.go +++ b/go/logic/inspect.go @@ -181,7 +181,9 @@ func (this *Inspector) inspectOriginalAndGhostTables() (err error) { column := this.migrationContext.SharedColumns.Columns()[i] mappedColumn := this.migrationContext.MappedSharedColumns.Columns()[i] if column.Name == mappedColumn.Name && column.Type == sql.DateTimeColumnType && mappedColumn.Type == sql.TimestampColumnType { - this.migrationContext.MappedSharedColumns.SetConvertDatetimeToTimestamp(column.Name, this.migrationContext.ApplierTimeZone) + this.migrationContext.MappedSharedColumns.SetConvertDatetimeToTimestamp(column.Name, this.migrationContext.ApplierTimeZone, "+00:00") + } else if column.Name == mappedColumn.Name && column.Type == sql.TimestampColumnType && mappedColumn.Type == sql.DateTimeColumnType { + this.migrationContext.MappedSharedColumns.SetConvertDatetimeToTimestamp(column.Name, "+00:00", this.migrationContext.ApplierTimeZone) } } diff --git a/go/sql/builder.go b/go/sql/builder.go index 776a10d..2d1ab2c 100644 --- a/go/sql/builder.go +++ b/go/sql/builder.go @@ -37,7 +37,7 @@ func buildColumnsPreparedValues(columns *ColumnList) []string { for i, column := range columns.Columns() { var token string if column.timezoneConversion != nil { - token = fmt.Sprintf("convert_tz(?, '%s', '%s')", column.timezoneConversion.ToTimezone, "+00:00") + token = fmt.Sprintf("convert_tz(?, '%s', '%s')", column.timezoneConversion.FromTimezone, column.timezoneConversion.ToTimezone) } else if column.Type == JSONColumnType { token = "convert(? using utf8mb4)" } else { @@ -107,7 +107,7 @@ func BuildSetPreparedClause(columns *ColumnList) (result string, err error) { for _, column := range columns.Columns() { var setToken string if column.timezoneConversion != nil { - setToken = fmt.Sprintf("%s=convert_tz(?, '%s', '%s')", EscapeName(column.Name), column.timezoneConversion.ToTimezone, "+00:00") + setToken = fmt.Sprintf("%s=convert_tz(?, '%s', '%s')", EscapeName(column.Name), column.timezoneConversion.FromTimezone, column.timezoneConversion.ToTimezone) } else if column.Type == JSONColumnType { setToken = fmt.Sprintf("%s=convert(? using utf8mb4)", EscapeName(column.Name)) } else { diff --git a/go/sql/types.go b/go/sql/types.go index fa6b74e..2b3fd81 100644 --- a/go/sql/types.go +++ b/go/sql/types.go @@ -29,6 +29,7 @@ const ( const maxMediumintUnsigned int32 = 16777215 type TimezoneConversion struct { + FromTimezone string ToTimezone string } @@ -190,8 +191,12 @@ func (this *ColumnList) GetColumnType(columnName string) ColumnType { return this.GetColumn(columnName).Type } -func (this *ColumnList) SetConvertDatetimeToTimestamp(columnName string, toTimezone string) { - this.GetColumn(columnName).timezoneConversion = &TimezoneConversion{ToTimezone: toTimezone} +func (this *ColumnList) SetConvertDatetimeToTimestamp(columnName string, fromTimezone, toTimezone string) { + this.GetColumn(columnName).timezoneConversion = &TimezoneConversion{FromTimezone: fromTimezone, ToTimezone: toTimezone} +} + +func (this *ColumnList) SetConvertTimestampToDatetime(columnName string, fromTimezone, toTimezone string) { + this.GetColumn(columnName).timezoneConversion = &TimezoneConversion{FromTimezone: fromTimezone, ToTimezone: toTimezone} } func (this *ColumnList) HasTimezoneConversion(columnName string) bool {