Skip to content
This repository was archived by the owner on Aug 30, 2025. It is now read-only.

Commit 8d0e5ac

Browse files
author
alishakawaguchi
authored
Add postgres automapper support for time datatypes (#3456)
1 parent f719df9 commit 8d0e5ac

1 file changed

Lines changed: 112 additions & 18 deletions

File tree

internal/benthos/benthos-builder/builders/sql-util.go

Lines changed: 112 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -865,24 +865,118 @@ func getJmTransformerByPostgresDataType(
865865
},
866866
}, nil
867867
// case "bytea": // todo https://www.postgresql.org/docs/current/datatype-binary.html
868-
// case "date":
869-
// return &mgmtv1alpha1.JobMappingTransformer{}
870-
871-
// case "time without time zone":
872-
// return &mgmtv1alpha1.JobMappingTransformer{}
873-
874-
// case "time with time zone":
875-
// return &mgmtv1alpha1.JobMappingTransformer{}
876-
877-
// case "interval":
878-
// return &mgmtv1alpha1.JobMappingTransformer{}
879-
880-
// case "timestamp without time zone":
881-
// return &mgmtv1alpha1.JobMappingTransformer{}
882-
883-
// case "timestamp with time zone":
884-
// return &mgmtv1alpha1.JobMappingTransformer{}
885-
868+
case "date":
869+
return &mgmtv1alpha1.JobMappingTransformer{
870+
Config: &mgmtv1alpha1.TransformerConfig{
871+
Config: &mgmtv1alpha1.TransformerConfig_GenerateJavascriptConfig{
872+
GenerateJavascriptConfig: &mgmtv1alpha1.GenerateJavascript{
873+
Code: `
874+
const date = new Date();
875+
const year = date.getFullYear();
876+
const month = String(date.getMonth() + 1).padStart(2, '0');
877+
const day = String(date.getDate()).padStart(2, '0');
878+
return year + "-" + month + "-" + day;
879+
`,
880+
},
881+
},
882+
},
883+
}, nil
884+
case "time without time zone":
885+
return &mgmtv1alpha1.JobMappingTransformer{
886+
Config: &mgmtv1alpha1.TransformerConfig{
887+
Config: &mgmtv1alpha1.TransformerConfig_GenerateJavascriptConfig{
888+
GenerateJavascriptConfig: &mgmtv1alpha1.GenerateJavascript{
889+
Code: `
890+
const date = new Date();
891+
const hours = String(date.getHours()).padStart(2, '0');
892+
const minutes = String(date.getMinutes()).padStart(2, '0');
893+
const seconds = String(date.getSeconds()).padStart(2, '0');
894+
return hours + ":" + minutes + ":" + seconds;
895+
`,
896+
},
897+
},
898+
},
899+
}, nil
900+
case "time with time zone":
901+
return &mgmtv1alpha1.JobMappingTransformer{
902+
Config: &mgmtv1alpha1.TransformerConfig{
903+
Config: &mgmtv1alpha1.TransformerConfig_GenerateJavascriptConfig{
904+
GenerateJavascriptConfig: &mgmtv1alpha1.GenerateJavascript{
905+
Code: `
906+
const date = new Date();
907+
const hours = String(date.getUTCHours()).padStart(2, '0');
908+
const minutes = String(date.getUTCMinutes()).padStart(2, '0');
909+
const seconds = String(date.getUTCSeconds()).padStart(2, '0');
910+
const timezoneOffset = -date.getTimezoneOffset();
911+
const absOffset = Math.abs(timezoneOffset);
912+
const offsetHours = String(Math.floor(absOffset / 60)).padStart(2, '0');
913+
const offsetMinutes = String(absOffset % 60).padStart(2, '0');
914+
const offsetSign = timezoneOffset >= 0 ? '+' : '-';
915+
return hours + ":" + minutes + ":" + seconds + offsetSign + offsetHours + ":" + offsetMinutes;
916+
`,
917+
},
918+
},
919+
},
920+
}, nil
921+
case "interval":
922+
return &mgmtv1alpha1.JobMappingTransformer{
923+
Config: &mgmtv1alpha1.TransformerConfig{
924+
Config: &mgmtv1alpha1.TransformerConfig_GenerateJavascriptConfig{
925+
GenerateJavascriptConfig: &mgmtv1alpha1.GenerateJavascript{
926+
Code: `
927+
const date = new Date();
928+
const hours = String(date.getUTCHours()).padStart(2, '0');
929+
const minutes = String(date.getUTCMinutes()).padStart(2, '0');
930+
const seconds = String(date.getUTCSeconds()).padStart(2, '0');
931+
return hours + ":" + minutes + ":" + seconds;
932+
`,
933+
},
934+
},
935+
},
936+
}, nil
937+
case "timestamp without time zone":
938+
return &mgmtv1alpha1.JobMappingTransformer{
939+
Config: &mgmtv1alpha1.TransformerConfig{
940+
Config: &mgmtv1alpha1.TransformerConfig_GenerateJavascriptConfig{
941+
GenerateJavascriptConfig: &mgmtv1alpha1.GenerateJavascript{
942+
Code: `
943+
const date = new Date();
944+
const year = date.getFullYear();
945+
const month = String(date.getMonth() + 1).padStart(2, '0');
946+
const day = String(date.getDate()).padStart(2, '0');
947+
const hours = String(date.getHours()).padStart(2, '0');
948+
const minutes = String(date.getMinutes()).padStart(2, '0');
949+
const seconds = String(date.getSeconds()).padStart(2, '0');
950+
return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
951+
`,
952+
},
953+
},
954+
},
955+
}, nil
956+
case "timestamp with time zone":
957+
return &mgmtv1alpha1.JobMappingTransformer{
958+
Config: &mgmtv1alpha1.TransformerConfig{
959+
Config: &mgmtv1alpha1.TransformerConfig_GenerateJavascriptConfig{
960+
GenerateJavascriptConfig: &mgmtv1alpha1.GenerateJavascript{
961+
Code: `
962+
const date = new Date();
963+
const year = date.getUTCFullYear();
964+
const month = String(date.getUTCMonth() + 1).padStart(2, '0');
965+
const day = String(date.getUTCDate()).padStart(2, '0');
966+
const hours = String(date.getUTCHours()).padStart(2, '0');
967+
const minutes = String(date.getUTCMinutes()).padStart(2, '0');
968+
const seconds = String(date.getUTCSeconds()).padStart(2, '0');
969+
const timezoneOffset = -date.getTimezoneOffset();
970+
const absOffset = Math.abs(timezoneOffset);
971+
const offsetHours = String(Math.floor(absOffset / 60)).padStart(2, '0');
972+
const offsetMinutes = String(absOffset % 60).padStart(2, '0');
973+
const offsetSign = timezoneOffset >= 0 ? '+' : '-';
974+
return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds + offsetSign + offsetHours + ":" + offsetMinutes;
975+
`,
976+
},
977+
},
978+
},
979+
}, nil
886980
case "boolean":
887981
return &mgmtv1alpha1.JobMappingTransformer{
888982
Config: &mgmtv1alpha1.TransformerConfig{

0 commit comments

Comments
 (0)