@@ -14,6 +14,7 @@ import (
1414 "strconv"
1515 "strings"
1616 "sync/atomic"
17+ "time"
1718)
1819
1920type HydrolixLowerer struct {
@@ -213,6 +214,18 @@ func defaultForType(t string) interface{} {
213214 }
214215}
215216
217+ func parseFlexibleTime (input string ) (time.Time , error ) {
218+ // First try RFC3339 (with timezone)
219+ t , err := time .Parse (time .RFC3339 , input )
220+ if err == nil {
221+ return t , nil
222+ }
223+
224+ // Fallback: try without timezone and assume UTC
225+ layout := "2006-01-02T15:04:05"
226+ return time .ParseInLocation (layout , input , time .UTC )
227+ }
228+
216229func CastToType (value any , typeName string ) (any , error ) {
217230 switch typeName {
218231 case "string" :
@@ -261,6 +274,17 @@ func CastToType(value any, typeName string) (any, error) {
261274 case string :
262275 return strconv .Atoi (v )
263276 }
277+ case "datetime" :
278+ if v , ok := value .(string ); ok {
279+
280+ parsedTime , err := parseFlexibleTime (v )
281+ if err != nil {
282+ fmt .Println ("Error parsing time:" , err )
283+ return nil , err
284+ }
285+ return parsedTime .Format ("2006-01-02 15:04:05 MST" ), nil
286+
287+ }
264288 default :
265289 return nil , fmt .Errorf ("unsupported target type: %s" , typeName )
266290 }
@@ -416,12 +440,9 @@ func (l *HydrolixLowerer) LowerToDDL(
416440 if _ , exists := events [colName ]; ! exists {
417441 value = defaultForType (typeInfo .Elements [0 ].Name )
418442 } else {
419- if typeInfo .Elements [0 ].Name == "datetime" {
420- value = defaultForType (typeInfo .Elements [0 ].Name )
421- } else {
422- val , _ := CastToType (events [colName ], typeInfo .Elements [0 ].Name )
423- value = val //defaultForType(typeInfo.Elements[0].Name)
424- }
443+ val , _ := CastToType (events [colName ], typeInfo .Elements [0 ].Name )
444+ value = val
445+
425446 }
426447
427448 case ArrayType :
0 commit comments