@@ -381,4 +381,109 @@ func TestNullCivilTypesParameterEncoding(t *testing.T) {
381381 t .Errorf ("Expected Scale 7 for NULL NullTime, got %v" , param .ti .Scale )
382382 }
383383 })
384+
385+ // Test pointer types (as used in OUT parameters)
386+ t .Run ("Pointer NullDate parameter encoding" , func (t * testing.T ) {
387+ // Test valid *NullDate
388+ validDate := & NullDate {Date : civil.Date {Year : 2023 , Month : time .December , Day : 25 }, Valid : true }
389+ param , err := s .makeParam (validDate )
390+ if err != nil {
391+ t .Errorf ("Unexpected error for valid *NullDate: %v" , err )
392+ }
393+ if param .ti .TypeId != typeDateN {
394+ t .Errorf ("Expected TypeId %v for valid *NullDate, got %v" , typeDateN , param .ti .TypeId )
395+ }
396+ if len (param .buffer ) == 0 {
397+ t .Error ("Expected non-empty buffer for valid *NullDate" )
398+ }
399+
400+ // Test invalid *NullDate (NULL)
401+ nullDate := & NullDate {Valid : false }
402+ param , err = s .makeParam (nullDate )
403+ if err != nil {
404+ t .Errorf ("Unexpected error for NULL *NullDate: %v" , err )
405+ }
406+ if param .ti .TypeId != typeDateN {
407+ t .Errorf ("Expected TypeId %v for NULL *NullDate, got %v" , typeDateN , param .ti .TypeId )
408+ }
409+ if param .ti .TypeId == typeNull {
410+ t .Error ("NULL *NullDate should not use untyped NULL (typeNull)" )
411+ }
412+ if len (param .buffer ) != 0 {
413+ t .Error ("Expected empty buffer for NULL *NullDate" )
414+ }
415+ if param .ti .Size != 3 {
416+ t .Errorf ("Expected Size 3 for NULL *NullDate, got %v" , param .ti .Size )
417+ }
418+ })
419+
420+ t .Run ("Pointer NullDateTime parameter encoding" , func (t * testing.T ) {
421+ // Test valid *NullDateTime
422+ testTime := time .Date (2023 , time .December , 25 , 14 , 30 , 45 , 0 , time .UTC )
423+ validDateTime := & NullDateTime {DateTime : civil .DateTimeOf (testTime ), Valid : true }
424+ param , err := s .makeParam (validDateTime )
425+ if err != nil {
426+ t .Errorf ("Unexpected error for valid *NullDateTime: %v" , err )
427+ }
428+ if param .ti .TypeId != typeDateTime2N {
429+ t .Errorf ("Expected TypeId %v for valid *NullDateTime, got %v" , typeDateTime2N , param .ti .TypeId )
430+ }
431+ if len (param .buffer ) == 0 {
432+ t .Error ("Expected non-empty buffer for valid *NullDateTime" )
433+ }
434+
435+ // Test invalid *NullDateTime (NULL)
436+ nullDateTime := & NullDateTime {Valid : false }
437+ param , err = s .makeParam (nullDateTime )
438+ if err != nil {
439+ t .Errorf ("Unexpected error for NULL *NullDateTime: %v" , err )
440+ }
441+ if param .ti .TypeId != typeDateTime2N {
442+ t .Errorf ("Expected TypeId %v for NULL *NullDateTime, got %v" , typeDateTime2N , param .ti .TypeId )
443+ }
444+ if param .ti .TypeId == typeNull {
445+ t .Error ("NULL *NullDateTime should not use untyped NULL (typeNull)" )
446+ }
447+ if len (param .buffer ) != 0 {
448+ t .Error ("Expected empty buffer for NULL *NullDateTime" )
449+ }
450+ if param .ti .Scale != 7 {
451+ t .Errorf ("Expected Scale 7 for NULL *NullDateTime, got %v" , param .ti .Scale )
452+ }
453+ })
454+
455+ t .Run ("Pointer NullTime parameter encoding" , func (t * testing.T ) {
456+ // Test valid *NullTime
457+ testTime := time .Date (2023 , time .December , 25 , 14 , 30 , 45 , 0 , time .UTC )
458+ validTime := & NullTime {Time : civil .TimeOf (testTime ), Valid : true }
459+ param , err := s .makeParam (validTime )
460+ if err != nil {
461+ t .Errorf ("Unexpected error for valid *NullTime: %v" , err )
462+ }
463+ if param .ti .TypeId != typeTimeN {
464+ t .Errorf ("Expected TypeId %v for valid *NullTime, got %v" , typeTimeN , param .ti .TypeId )
465+ }
466+ if len (param .buffer ) == 0 {
467+ t .Error ("Expected non-empty buffer for valid *NullTime" )
468+ }
469+
470+ // Test invalid *NullTime (NULL)
471+ nullTime := & NullTime {Valid : false }
472+ param , err = s .makeParam (nullTime )
473+ if err != nil {
474+ t .Errorf ("Unexpected error for NULL *NullTime: %v" , err )
475+ }
476+ if param .ti .TypeId != typeTimeN {
477+ t .Errorf ("Expected TypeId %v for NULL *NullTime, got %v" , typeTimeN , param .ti .TypeId )
478+ }
479+ if param .ti .TypeId == typeNull {
480+ t .Error ("NULL *NullTime should not use untyped NULL (typeNull)" )
481+ }
482+ if len (param .buffer ) != 0 {
483+ t .Error ("Expected empty buffer for NULL *NullTime" )
484+ }
485+ if param .ti .Scale != 7 {
486+ t .Errorf ("Expected Scale 7 for NULL *NullTime, got %v" , param .ti .Scale )
487+ }
488+ })
384489}
0 commit comments