code: func Preprocess(ctx sessionctx.Context, node ast.Node, is infoschema.InfoSchema, preprocessOpt ...PreprocessOpt) error {
  	v := preprocessor{is: is, ctx: ctx, tableAliasInJoin: make([]map[string]interface{}, 0)}
  	for _, optFn := range preprocessOpt {
  		optFn(&v)
  	}
  	node.Accept(&v)
  	return errors.Trace(v.err)
  }
docs: // Preprocess resolves table names of the node, and checks some statements validation.