From 6e5f632c12a4ee021d38c03cc500d3658e38c8f7 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 26 Apr 2020 16:46:27 +0800 Subject: [PATCH] Fix find with another struct --- integrations/session_find_test.go | 7 +++++++ internal/statements/pk.go | 1 - session_find.go | 7 +++++-- tags/parser.go | 1 + 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/integrations/session_find_test.go b/integrations/session_find_test.go index 00477235..b9d722ba 100644 --- a/integrations/session_find_test.go +++ b/integrations/session_find_test.go @@ -708,6 +708,13 @@ func TestFindExtends(t *testing.T) { err = testEngine.Find(&results) assert.NoError(t, err) assert.EqualValues(t, 2, len(results)) + + results = make([]FindExtendsA, 0, 2) + err = testEngine.Find(&results, &FindExtendsB{ + ID: 1, + }) + assert.NoError(t, err) + assert.EqualValues(t, 1, len(results)) } func TestFindExtends3(t *testing.T) { diff --git a/internal/statements/pk.go b/internal/statements/pk.go index b6ae0f23..d0787719 100644 --- a/internal/statements/pk.go +++ b/internal/statements/pk.go @@ -64,7 +64,6 @@ func (statement *Statement) ProcessIDParam() error { } if len(statement.RefTable.PrimaryKeys) != len(statement.idParam) { - fmt.Println("=====", statement.RefTable.PrimaryKeys, statement.idParam) return fmt.Errorf("ID condition is error, expect %d primarykeys, there are %d", len(statement.RefTable.PrimaryKeys), len(statement.idParam), diff --git a/session_find.go b/session_find.go index 6fbca695..3bc6a642 100644 --- a/session_find.go +++ b/session_find.go @@ -108,8 +108,11 @@ func (session *Session) find(rowsSlicePtr interface{}, condiBean ...interface{}) ) if tp == tpStruct { if !session.statement.NoAutoCondition && len(condiBean) > 0 { - var err error - autoCond, err = session.statement.BuildConds(table, condiBean[0], true, true, false, true, addedTableName) + condTable, err := session.engine.tagParser.Parse(reflect.ValueOf(condiBean[0])) + if err != nil { + return err + } + autoCond, err = session.statement.BuildConds(condTable, condiBean[0], true, true, false, true, addedTableName) if err != nil { return err } diff --git a/tags/parser.go b/tags/parser.go index 236d2d46..add30a13 100644 --- a/tags/parser.go +++ b/tags/parser.go @@ -115,6 +115,7 @@ func (parser *Parser) Parse(v reflect.Value) (*schemas.Table, error) { t := v.Type() if t.Kind() == reflect.Ptr { t = t.Elem() + v = v.Elem() } if t.Kind() != reflect.Struct { return nil, ErrUnsupportedType -- 2.40.1