code: func ExtendsTagHandler(ctx *tagContext) error {
  	var fieldValue = ctx.fieldValue
  	switch fieldValue.Kind() {
  	case reflect.Ptr:
  		f := fieldValue.Type().Elem()
  		if f.Kind() == reflect.Struct {
  			fieldPtr := fieldValue
  			fieldValue = fieldValue.Elem()
  			if !fieldValue.IsValid() || fieldPtr.IsNil() {
  				fieldValue = reflect.New(f).Elem()
  			}
  		}
  		fallthrough
  	case reflect.Struct:
  		parentTable, err := ctx.engine.mapType(fieldValue)
  		if err != nil {
  			return err
  		}
  		for _, col := range parentTable.Columns() {
  			col.FieldName = fmt.Sprintf("%v.%v", ctx.col.FieldName, col.FieldName)
  			ctx.table.AddColumn(col)
  			for indexName, indexType := range col.Indexes {
  				addIndex(indexName, ctx.table, col, indexType)
  			}
  		}
  	default:
  		//TODO: warning
  	}
  	return nil
  }
docs: // ExtendsTagHandler describes extends tag handler