mirror of https://github.com/VinGarcia/ksql.git
Ignore structs not tagged with tablename on joined structs
parent
402a9e98ac
commit
5fffde3d34
15
ksql.go
15
ksql.go
|
@ -985,6 +985,10 @@ func scanRowsFromType(
|
||||||
func getScanArgsForNestedStructs(dialect Dialect, rows Rows, t reflect.Type, v reflect.Value, info kstructs.StructInfo) ([]interface{}, error) {
|
func getScanArgsForNestedStructs(dialect Dialect, rows Rows, t reflect.Type, v reflect.Value, info kstructs.StructInfo) ([]interface{}, error) {
|
||||||
scanArgs := []interface{}{}
|
scanArgs := []interface{}{}
|
||||||
for i := 0; i < v.NumField(); i++ {
|
for i := 0; i < v.NumField(); i++ {
|
||||||
|
if !info.ByIndex(i).Valid {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
// TODO(vingarcia00): Handle case where type is pointer
|
// TODO(vingarcia00): Handle case where type is pointer
|
||||||
nestedStructInfo, err := kstructs.GetTagInfo(t.Field(i).Type)
|
nestedStructInfo, err := kstructs.GetTagInfo(t.Field(i).Type)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -1151,7 +1155,12 @@ func buildSelectQueryForNestedStructs(
|
||||||
) (string, error) {
|
) (string, error) {
|
||||||
var fields []string
|
var fields []string
|
||||||
for i := 0; i < structType.NumField(); i++ {
|
for i := 0; i < structType.NumField(); i++ {
|
||||||
nestedStructName := info.ByIndex(i).Name
|
nestedStructInfo := info.ByIndex(i)
|
||||||
|
if !nestedStructInfo.Valid {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
nestedStructName := nestedStructInfo.Name
|
||||||
nestedStructType := structType.Field(i).Type
|
nestedStructType := structType.Field(i).Type
|
||||||
if nestedStructType.Kind() != reflect.Struct {
|
if nestedStructType.Kind() != reflect.Struct {
|
||||||
return "", fmt.Errorf(
|
return "", fmt.Errorf(
|
||||||
|
@ -1160,13 +1169,13 @@ func buildSelectQueryForNestedStructs(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
nestedStructInfo, err := kstructs.GetTagInfo(nestedStructType)
|
nestedStructTagInfo, err := kstructs.GetTagInfo(nestedStructType)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
for j := 0; j < structType.Field(i).Type.NumField(); j++ {
|
for j := 0; j < structType.Field(i).Type.NumField(); j++ {
|
||||||
fieldInfo := nestedStructInfo.ByIndex(j)
|
fieldInfo := nestedStructTagInfo.ByIndex(j)
|
||||||
if !fieldInfo.Valid {
|
if !fieldInfo.Valid {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
|
@ -192,6 +192,11 @@ func TestQuery(t *testing.T) {
|
||||||
var rows []struct {
|
var rows []struct {
|
||||||
User User `tablename:"u"`
|
User User `tablename:"u"`
|
||||||
Post Post `tablename:"p"`
|
Post Post `tablename:"p"`
|
||||||
|
|
||||||
|
// This one has no ksql or tablename tag,
|
||||||
|
// so it should just be ignored to avoid strange
|
||||||
|
// unexpected errors:
|
||||||
|
ExtraStructThatShouldBeIgnored User
|
||||||
}
|
}
|
||||||
err = c.Query(ctx, &rows, fmt.Sprint(
|
err = c.Query(ctx, &rows, fmt.Sprint(
|
||||||
`FROM users u JOIN posts p ON p.user_id = u.id`,
|
`FROM users u JOIN posts p ON p.user_id = u.id`,
|
||||||
|
|
Loading…
Reference in New Issue