code: func MsQueryColumns(args *internal.ArgType, inspect []string) ([]*models.Column, error) {
  	var err error
  
  	// process inspect -- cannot have 'order by' in a CREATE VIEW
  	ins := []string{}
  	for _, l := range inspect {
  		if !strings.HasPrefix(strings.ToUpper(l), "ORDER BY ") {
  			ins = append(ins, l)
  		}
  	}
  
  	// create temporary view xoid
  	xoid := "_xo_" + internal.GenRandomID()
  	viewq := `CREATE VIEW ` + xoid + ` AS ` + strings.Join(ins, "\n")
  	models.XOLog(viewq)
  	_, err = args.DB.Exec(viewq)
  	if err != nil {
  		return nil, err
  	}
  
  	// load columns
  	cols, err := models.MsTableColumns(args.DB, args.Schema, xoid)
  
  	// drop inspect view
  	dropq := `DROP VIEW ` + xoid
  	models.XOLog(dropq)
  	_, _ = args.DB.Exec(dropq)
  
  	// load column information
  	return cols, err
  }
docs: // MsQueryColumns parses the query and generates a type for it.