func fields(typ reflect.Type) map[string][]int { num := typ.NumField() dst := make(map[string][]int, num) for i := 0; i < num; i++ { f := typ.Field(i) if f.Anonymous { typ := f.Type if typ.Kind() == reflect.Ptr { typ = typ.Elem() } for name, indx := range fields(typ) { dst[name] = append(f.Index, indx...) } continue } if f.PkgPath != "" { continue } tokens := strings.Split(f.Tag.Get("pg"), ",") name := tokens[0] if name == "-" { continue } if name == "" { name = pgutil.Underscore(f.Name) } dst[name] = f.Index } return dst }
func (t *DBTest) TestFormattingColumnNames(c *C) { c.Assert(pgutil.Underscore("Megacolumn"), Equals, "megacolumn") c.Assert(pgutil.Underscore("MegaColumn"), Equals, "mega_column") c.Assert(pgutil.Underscore("MegaColumn_Id"), Equals, "mega_column__id") c.Assert(pgutil.Underscore("MegaColumn_id"), Equals, "mega_column_id") }