func (v Visitor) add(model, table, field, col string) {
	if table == "" {
		table = utils.ToSnakeCase(model)
	}
	if col == "" {
		col = utils.ToSnakeCase(field)
	}
	t, has := v.Models[model]
	if !has {
		t = &Table{Name: table, Fields: sortedmap.New(), initialed: true}
		v.Models[model] = t
	} else if t.Fields.Indexes == nil {
		t.Name = table
		t.Fields = sortedmap.New()
	}
	t.Fields.Set(field, col)
}
add an model and it's field to parse result
package main
import (
	"os"
	"path/filepath"
	"strings"
	"github.com/cosiner/gohper/ds/sortedmap"
	"github.com/cosiner/gohper/utils/ast"
	"github.com/cosiner/gomodel/utils"
)
type Model struct {
	Name       string  
	Self       string
	Unexported string
	Upper      string
	Table      string
	Nocache    string
}
func NewModel(name, table, nocache string) *Model {
	return &Model{
		Name:       name,
		Self:       strings.ToLower(name[:1]),
		Unexported: utils.UnexportedName(name),
		Upper:      strings.ToUpper(name),
		Table:      table,
		Nocache:    nocache,
	}
}
type Field struct {
	Name   string  
	Upper  string  
	Column string
}
func NewField(field, col string) *Field {
	return &Field{
		Name:   field,
		Upper:  strings.ToUpper(field),
		Column: col,
	}
}
type Table struct {
	Name    string
	Nocache string
	Fields  sortedmap.Map
	initialed bool
}
type Visitor struct {
	Models map[string]*Table  
	SQLs   map[string]string  
}
func newVisitor() Visitor {
	return Visitor{
		Models: make(map[string]*Table),
		SQLs:   make(map[string]string),
	}
}