Refactor JSON handling in AllTypesJsonRawMessageResult struct by removing unused fields and updating test cases to validate JSON and Jsonb data retrieval.

This commit is contained in:
Danny Gueta 2026-02-13 09:50:55 +02:00
parent ab3a265a5c
commit d42fc975f9

View file

@ -3,11 +3,7 @@ package postgres
import ( import (
"encoding/json" "encoding/json"
"testing" "testing"
"time"
"github.com/go-jet/jet/v2/tests/.gentestdata/jetdb/test_sample/model"
"github.com/google/uuid"
"github.com/lib/pq"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
. "github.com/go-jet/jet/v2/postgres" . "github.com/go-jet/jet/v2/postgres"
@ -15,82 +11,30 @@ import (
) )
type AllTypesJsonRawMessageResult struct { type AllTypesJsonRawMessageResult struct {
SmallIntPtr *int16 `alias:"all_types.small_int_ptr"`
SmallInt int16 `alias:"all_types.small_int"`
IntegerPtr *int32 `alias:"all_types.integer_ptr"`
Integer int32 `alias:"all_types.integer"`
BigIntPtr *int64 `alias:"all_types.big_int_ptr"`
BigInt int64 `alias:"all_types.big_int"`
DecimalPtr *float64 `alias:"all_types.decimal_ptr"`
Decimal float64 `alias:"all_types.decimal"`
NumericPtr *float64 `alias:"all_types.numeric_ptr"`
Numeric float64 `alias:"all_types.numeric"`
RealPtr *float32 `alias:"all_types.real_ptr"`
Real float32 `alias:"all_types.real"`
DoublePrecisionPtr *float64 `alias:"all_types.double_precision_ptr"`
DoublePrecision float64 `alias:"all_types.double_precision"`
Smallserial int64 `alias:"all_types.smallserial"`
Serial int64 `sql:"primary_key" alias:"all_types.serial"`
Bigserial int64 `alias:"all_types.bigserial"`
VarCharPtr *string `alias:"all_types.var_char_ptr"`
VarChar string `alias:"all_types.var_char"`
CharPtr *string `alias:"all_types.char_ptr"`
Char string `alias:"all_types.char"`
TextPtr *string `alias:"all_types.text_ptr"`
Text string `alias:"all_types.text"`
ByteaPtr *[]byte `alias:"all_types.bytea_ptr"`
Bytea []byte `alias:"all_types.bytea"`
TimestampzPtr *time.Time `alias:"all_types.timestampz_ptr"`
Timestampz time.Time `alias:"all_types.timestampz"`
TimestampPtr *time.Time `alias:"all_types.timestamp_ptr"`
Timestamp time.Time `alias:"all_types.timestamp"`
DatePtr *time.Time `alias:"all_types.date_ptr"`
Date time.Time `alias:"all_types.date"`
TimezPtr *time.Time `alias:"all_types.timez_ptr"`
Timez time.Time `alias:"all_types.timez"`
TimePtr *time.Time `alias:"all_types.time_ptr"`
Time time.Time `alias:"all_types.time"`
IntervalPtr *string `alias:"all_types.interval_ptr"`
Interval string `alias:"all_types.interval"`
BooleanPtr *bool `alias:"all_types.boolean_ptr"`
Boolean bool `alias:"all_types.boolean"`
PointPtr *string `alias:"all_types.point_ptr"`
BitPtr *string `alias:"all_types.bit_ptr"`
Bit string `alias:"all_types.bit"`
BitVaryingPtr *string `alias:"all_types.bit_varying_ptr"`
BitVarying string `alias:"all_types.bit_varying"`
TsvectorPtr *string `alias:"all_types.tsvector_ptr"`
Tsvector string `alias:"all_types.tsvector"`
UUIDPtr *uuid.UUID `alias:"all_types.uuid_ptr"`
UUID uuid.UUID `alias:"all_types.uuid"`
XMLPtr *string `alias:"all_types.xml_ptr"`
XML string `alias:"all_types.xml"`
JSONPtr *string `alias:"all_types.json_ptr"`
JSON string `alias:"all_types.json"` JSON string `alias:"all_types.json"`
JsonbPtr *json.RawMessage `alias:"all_types.jsonb_ptr"` JsonbPtr *json.RawMessage `alias:"all_types.jsonb_ptr"`
Jsonb json.RawMessage `alias:"all_types.jsonb"` Jsonb json.RawMessage `alias:"all_types.jsonb"`
IntegerArrayPtr *pq.Int32Array `alias:"all_types.integer_array_ptr"`
IntegerArray pq.Int32Array `alias:"all_types.integer_array"`
TextArrayPtr *pq.StringArray `alias:"all_types.text_array_ptr"`
TextArray pq.StringArray `alias:"all_types.text_array"`
JsonbArray pq.StringArray `alias:"all_types.jsonb_array"`
TextMultiDimArrayPtr *string `alias:"all_types.text_multi_dim_array_ptr"`
TextMultiDimArray string `alias:"all_types.text_multi_dim_array"`
MoodPtr *model.Mood `alias:"all_types.mood_ptr"`
Mood model.Mood `alias:"all_types.mood"`
} }
func TestJsonRawMessage(t *testing.T) { func TestJsonRawMessage(t *testing.T) {
var dest []AllTypesJsonRawMessageResult var dest []AllTypesJsonRawMessageResult
err := SELECT(AllTypes.AllColumns). err := SELECT(AllTypes.JSON, AllTypes.JsonbPtr, AllTypes.Jsonb).
FROM(AllTypes). FROM(AllTypes).
LIMIT(2). LIMIT(2).
QueryContext(ctx, db, &dest) QueryContext(ctx, db, &dest)
require.NoError(t, err) require.NoError(t, err)
require.Len(t, dest, 2)
for _, row := range dest { // Row 0: JSON, Jsonb, and JsonbPtr all set
t.Logf("%+v", string(row.Jsonb)) require.JSONEq(t, allTypesRow0.JSON, dest[0].JSON)
} require.JSONEq(t, allTypesRow0.Jsonb, string(dest[0].Jsonb))
require.NotNil(t, dest[0].JsonbPtr)
require.JSONEq(t, *allTypesRow0.JsonbPtr, string(*dest[0].JsonbPtr))
// Row 1: JSON and Jsonb set, JsonbPtr is nil
require.JSONEq(t, allTypesRow1.JSON, dest[1].JSON)
require.JSONEq(t, allTypesRow1.Jsonb, string(dest[1].Jsonb))
require.Nil(t, dest[1].JsonbPtr)
} }