code: func (n *InsertStmt) Accept(v Visitor) (Node, bool) {
  	newNode, skipChildren := v.Enter(n)
  	if skipChildren {
  		return v.Leave(newNode)
  	}
  
  	n = newNode.(*InsertStmt)
  	if n.Select != nil {
  		node, ok := n.Select.Accept(v)
  		if !ok {
  			return n, false
  		}
  		n.Select = node.(ResultSetNode)
  	}
  
  	node, ok := n.Table.Accept(v)
  	if !ok {
  		return n, false
  	}
  	n.Table = node.(*TableRefsClause)
  
  	for i, val := range n.Columns {
  		node, ok := val.Accept(v)
  		if !ok {
  			return n, false
  		}
  		n.Columns[i] = node.(*ColumnName)
  	}
  	for i, list := range n.Lists {
  		for j, val := range list {
  			node, ok := val.Accept(v)
  			if !ok {
  				return n, false
  			}
  			n.Lists[i][j] = node.(ExprNode)
  		}
  	}
  	for i, val := range n.Setlist {
  		node, ok := val.Accept(v)
  		if !ok {
  			return n, false
  		}
  		n.Setlist[i] = node.(*Assignment)
  	}
  	for i, val := range n.OnDuplicate {
  		node, ok := val.Accept(v)
  		if !ok {
  			return n, false
  		}
  		n.OnDuplicate[i] = node.(*Assignment)
  	}
  	return v.Leave(n)
  }
docs: // Accept implements Node Accept interface.