Merge pull request #24 from cking-vonix/feature/pgsql-uuid-pk-fix-develop
Fix issue with using UUID primary keys in complex return types
This commit is contained in:
commit
2891cc71be
2 changed files with 151 additions and 1 deletions
|
|
@ -170,7 +170,9 @@ func isSimpleModelType(objType reflect.Type) bool {
|
|||
case reflect.Slice:
|
||||
return objType.Elem().Kind() == reflect.Uint8 //[]byte
|
||||
case reflect.Struct:
|
||||
return objType == timeType || objType == uuidType // time.Time || uuid.UUID
|
||||
return objType == timeType
|
||||
case reflect.Array:
|
||||
return objType == uuidType // uuid.UUID returns reflect.Array kind
|
||||
}
|
||||
|
||||
return false
|
||||
|
|
|
|||
|
|
@ -30,6 +30,154 @@ WHERE all_types.uuid = 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11';
|
|||
assert.DeepEqual(t, result.UUIDPtr, UUIDPtr("a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11"))
|
||||
}
|
||||
|
||||
func TestUUIDComplex(t *testing.T) {
|
||||
query := Person.INNER_JOIN(PersonPhone, PersonPhone.PersonID.EQ(Person.PersonID)).
|
||||
SELECT(Person.AllColumns, PersonPhone.AllColumns).
|
||||
ORDER_BY(Person.PersonID.ASC(), PersonPhone.PhoneID.ASC())
|
||||
|
||||
t.Run("slice of structs", func(t *testing.T) {
|
||||
|
||||
var dest []struct {
|
||||
model.Person
|
||||
Phones []struct {
|
||||
model.PersonPhone
|
||||
}
|
||||
}
|
||||
|
||||
err := query.Query(db, &dest)
|
||||
|
||||
assert.NilError(t, err)
|
||||
assert.Equal(t, len(dest), 2)
|
||||
testutils.AssertJSON(t, dest, `
|
||||
[
|
||||
{
|
||||
"PersonID": "b68dbff4-a87d-11e9-a7f2-98ded00c39c6",
|
||||
"FirstName": "Sad",
|
||||
"LastName": "John",
|
||||
"Mood": "sad",
|
||||
"Phones": [
|
||||
{
|
||||
"PhoneID": "02b61cc4-d500-4847-bd36-111eccbc7a51",
|
||||
"PhoneNumber": "212-555-1211",
|
||||
"PersonID": "b68dbff4-a87d-11e9-a7f2-98ded00c39c6"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"PersonID": "b68dbff6-a87d-11e9-a7f2-98ded00c39c8",
|
||||
"FirstName": "Ok",
|
||||
"LastName": "John",
|
||||
"Mood": "ok",
|
||||
"Phones": [
|
||||
{
|
||||
"PhoneID": "02b61cc4-d500-4847-bd36-111eccbc7a52",
|
||||
"PhoneNumber": "212-555-1212",
|
||||
"PersonID": "b68dbff6-a87d-11e9-a7f2-98ded00c39c8"
|
||||
},
|
||||
{
|
||||
"PhoneID": "02b61cc4-d500-4847-bd36-111eccbc7a53",
|
||||
"PhoneNumber": "212-555-1213",
|
||||
"PersonID": "b68dbff6-a87d-11e9-a7f2-98ded00c39c8"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
`)
|
||||
|
||||
})
|
||||
|
||||
t.Run("single struct", func(t *testing.T) {
|
||||
singleQuery := query.WHERE(Person.PersonID.EQ(String("b68dbff6-a87d-11e9-a7f2-98ded00c39c8")))
|
||||
|
||||
var dest struct {
|
||||
model.Person
|
||||
Phones []struct {
|
||||
model.PersonPhone
|
||||
}
|
||||
}
|
||||
err := singleQuery.Query(db, &dest)
|
||||
assert.NilError(t, err)
|
||||
|
||||
testutils.AssertJSON(t, dest, `
|
||||
{
|
||||
"PersonID": "b68dbff6-a87d-11e9-a7f2-98ded00c39c8",
|
||||
"FirstName": "Ok",
|
||||
"LastName": "John",
|
||||
"Mood": "ok",
|
||||
"Phones": [
|
||||
{
|
||||
"PhoneID": "02b61cc4-d500-4847-bd36-111eccbc7a52",
|
||||
"PhoneNumber": "212-555-1212",
|
||||
"PersonID": "b68dbff6-a87d-11e9-a7f2-98ded00c39c8"
|
||||
},
|
||||
{
|
||||
"PhoneID": "02b61cc4-d500-4847-bd36-111eccbc7a53",
|
||||
"PhoneNumber": "212-555-1213",
|
||||
"PersonID": "b68dbff6-a87d-11e9-a7f2-98ded00c39c8"
|
||||
}
|
||||
]
|
||||
}
|
||||
`)
|
||||
})
|
||||
|
||||
t.Run("slice of structs left join", func(t *testing.T) {
|
||||
leftQuery := Person.LEFT_JOIN(PersonPhone, PersonPhone.PersonID.EQ(Person.PersonID)).
|
||||
SELECT(Person.AllColumns, PersonPhone.AllColumns).
|
||||
ORDER_BY(Person.PersonID.ASC(), PersonPhone.PhoneID.ASC())
|
||||
var dest []struct {
|
||||
model.Person
|
||||
Phones []struct {
|
||||
model.PersonPhone
|
||||
}
|
||||
}
|
||||
err := leftQuery.Query(db, &dest)
|
||||
|
||||
assert.NilError(t, err)
|
||||
testutils.AssertJSON(t, dest, `
|
||||
[
|
||||
{
|
||||
"PersonID": "b68dbff4-a87d-11e9-a7f2-98ded00c39c6",
|
||||
"FirstName": "Sad",
|
||||
"LastName": "John",
|
||||
"Mood": "sad",
|
||||
"Phones": [
|
||||
{
|
||||
"PhoneID": "02b61cc4-d500-4847-bd36-111eccbc7a51",
|
||||
"PhoneNumber": "212-555-1211",
|
||||
"PersonID": "b68dbff4-a87d-11e9-a7f2-98ded00c39c6"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"PersonID": "b68dbff5-a87d-11e9-a7f2-98ded00c39c7",
|
||||
"FirstName": "Ok",
|
||||
"LastName": "John",
|
||||
"Mood": "ok",
|
||||
"Phones": null
|
||||
},
|
||||
{
|
||||
"PersonID": "b68dbff6-a87d-11e9-a7f2-98ded00c39c8",
|
||||
"FirstName": "Ok",
|
||||
"LastName": "John",
|
||||
"Mood": "ok",
|
||||
"Phones": [
|
||||
{
|
||||
"PhoneID": "02b61cc4-d500-4847-bd36-111eccbc7a52",
|
||||
"PhoneNumber": "212-555-1212",
|
||||
"PersonID": "b68dbff6-a87d-11e9-a7f2-98ded00c39c8"
|
||||
},
|
||||
{
|
||||
"PhoneID": "02b61cc4-d500-4847-bd36-111eccbc7a53",
|
||||
"PhoneNumber": "212-555-1213",
|
||||
"PersonID": "b68dbff6-a87d-11e9-a7f2-98ded00c39c8"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
`)
|
||||
})
|
||||
|
||||
}
|
||||
func TestEnumType(t *testing.T) {
|
||||
query := Person.
|
||||
SELECT(Person.AllColumns)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue