From 8f0749ddeea0d16e3ed68966f611893a7f2d58ca Mon Sep 17 00:00:00 2001 From: qAison <77456702@qq.com> Date: Fri, 27 May 2016 13:51:49 +0800 Subject: [PATCH 1/2] fix fk field null value --- orm/orm_raw.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/orm/orm_raw.go b/orm/orm_raw.go index 5f88121c..3b945833 100644 --- a/orm/orm_raw.go +++ b/orm/orm_raw.go @@ -342,7 +342,13 @@ func (o *rawSet) QueryRow(containers ...interface{}) error { for _, col := range columns { if fi := sMi.fields.GetByColumn(col); fi != nil { value := reflect.ValueOf(columnsMp[col]).Elem().Interface() - o.setFieldValue(ind.FieldByIndex(fi.fieldIndex), value) + field := ind.FieldByIndex(fi.fieldIndex) + if fi.fieldType&IsRelField > 0 { + mf := reflect.New(fi.relModelInfo.addrField.Elem().Type()) + field.Set(mf) + field = mf.Elem().FieldByIndex(fi.relModelInfo.fields.pk.fieldIndex) + } + o.setFieldValue(field, value) } } } else { @@ -480,7 +486,13 @@ func (o *rawSet) QueryRows(containers ...interface{}) (int64, error) { for _, col := range columns { if fi := sMi.fields.GetByColumn(col); fi != nil { value := reflect.ValueOf(columnsMp[col]).Elem().Interface() - o.setFieldValue(ind.FieldByIndex(fi.fieldIndex), value) + field := ind.FieldByIndex(fi.fieldIndex) + if fi.fieldType&IsRelField > 0 { + mf := reflect.New(fi.relModelInfo.addrField.Elem().Type()) + field.Set(mf) + field = mf.Elem().FieldByIndex(fi.relModelInfo.fields.pk.fieldIndex) + } + o.setFieldValue(field, value) } } } else { From 761b6c129cee9c2a2582d8d8b4dfe2300c9308d4 Mon Sep 17 00:00:00 2001 From: qAison <77456702@qq.com> Date: Fri, 27 May 2016 14:34:22 +0800 Subject: [PATCH 2/2] count func add support group by --- orm/db.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/orm/db.go b/orm/db.go index 314c3535..d5951f45 100644 --- a/orm/db.go +++ b/orm/db.go @@ -927,12 +927,17 @@ func (d *dbBase) Count(q dbQuerier, qs *querySet, mi *modelInfo, cond *Condition tables.parseRelated(qs.related, qs.relDepth) where, args := tables.getCondSQL(cond, false, tz) + groupBy := tables.getGroupSQL(qs.groups) tables.getOrderSQL(qs.orders) join := tables.getJoinSQL() Q := d.ins.TableQuote() - query := fmt.Sprintf("SELECT COUNT(*) FROM %s%s%s T0 %s%s", Q, mi.table, Q, join, where) + query := fmt.Sprintf("SELECT COUNT(*) FROM %s%s%s T0 %s%s%s", Q, mi.table, Q, join, where, groupBy) + + if groupBy != "" { + query = fmt.Sprintf("SELECT COUNT(*) FROM (%s) AS T", query) + } d.ins.ReplaceMarks(&query)