code: func (n *ShowStmt) Accept(v Visitor) (Node, bool) {
  	newNode, skipChildren := v.Enter(n)
  	if skipChildren {
  		return v.Leave(newNode)
  	}
  	n = newNode.(*ShowStmt)
  	if n.Table != nil {
  		node, ok := n.Table.Accept(v)
  		if !ok {
  			return n, false
  		}
  		n.Table = node.(*TableName)
  	}
  	if n.Column != nil {
  		node, ok := n.Column.Accept(v)
  		if !ok {
  			return n, false
  		}
  		n.Column = node.(*ColumnName)
  	}
  	if n.Pattern != nil {
  		node, ok := n.Pattern.Accept(v)
  		if !ok {
  			return n, false
  		}
  		n.Pattern = node.(*PatternLikeExpr)
  	}
  
  	switch n.Tp {
  	case ShowTriggers, ShowProcedureStatus, ShowProcessList, ShowEvents:
  		// We don't have any data to return for those types,
  		// but visiting Where may cause resolving error, so return here to avoid error.
  		return v.Leave(n)
  	}
  
  	if n.Where != nil {
  		node, ok := n.Where.Accept(v)
  		if !ok {
  			return n, false
  		}
  		n.Where = node.(ExprNode)
  	}
  	return v.Leave(n)
  }
docs: // Accept implements Node Accept interface.