MCPcopy Create free account
hub / github.com/uptrace/bun / TestPostgresTimeArray

Function TestPostgresTimeArray

internal/dbtest/pg_test.go:464–520  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

462}
463
464func TestPostgresTimeArray(t *testing.T) {
465 type Model struct {
466 ID int64 `bun:",pk,autoincrement"`
467 Array1 []time.Time `bun:",array"`
468 Array2 *[]time.Time `bun:",array"`
469 Array3 *[]time.Time `bun:",array"`
470 Array4 []*time.Time `bun:",array"`
471 }
472
473 db := pg(t)
474 t.Cleanup(func() { db.Close() })
475
476 mustResetModel(t, ctx, db, (*Model)(nil))
477
478 time1 := time.Now()
479 time2 := time.Now().Add(time.Hour)
480 time3 := time.Now().AddDate(0, 0, 1)
481
482 model1 := &Model{
483 ID: 123,
484 Array1: []time.Time{time1, time2, time3},
485 Array2: &[]time.Time{time1, time2, time3},
486 Array4: []*time.Time{&time1, &time2, &time3},
487 }
488 _, err := db.NewInsert().Model(model1).Exec(ctx)
489 require.NoError(t, err)
490
491 model2 := new(Model)
492 err = db.NewSelect().Model(model2).Scan(ctx)
493 require.NoError(t, err)
494 require.Equal(t, len(model1.Array1), len(model2.Array1))
495
496 var times []time.Time
497 err = db.NewSelect().Model((*Model)(nil)).
498 Column("array1").
499 Scan(ctx, pgdialect.Array(&times))
500 require.NoError(t, err)
501 require.Equal(t, len(times), len(model1.Array1))
502
503 err = db.NewSelect().Model((*Model)(nil)).
504 Column("array2").
505 Scan(ctx, pgdialect.Array(&times))
506 require.NoError(t, err)
507 require.Equal(t, 3, len(*model1.Array2))
508
509 err = db.NewSelect().Model((*Model)(nil)).
510 Column("array3").
511 Scan(ctx, pgdialect.Array(&times))
512 require.NoError(t, err)
513 require.Nil(t, times)
514
515 err = db.NewSelect().Model((*Model)(nil)).
516 Column("array4").
517 Scan(ctx, pgdialect.Array(&times))
518 require.NoError(t, err)
519 require.Equal(t, 3, len(model1.Array4))
520}
521

Callers

nothing calls this directly

Calls 11

ArrayFunction · 0.92
pgFunction · 0.85
mustResetModelFunction · 0.85
CloseMethod · 0.65
NewInsertMethod · 0.65
NewSelectMethod · 0.65
AddMethod · 0.45
ExecMethod · 0.45
ModelMethod · 0.45
ScanMethod · 0.45
ColumnMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…