func (stmt *SelectClause) walkStmt(v Visitor) Statement {
	ret := stmt

	for i, expr := range stmt.Exprs {
		e, changed := WalkExpr(v, expr.Expr)
		if changed {
			if ret == stmt {
				ret = stmt.copyNode()
			}
			ret.Exprs[i].Expr = e
		}
	}

	if stmt.From.AsOf.Expr != nil {
		e, changed := WalkExpr(v, stmt.From.AsOf.Expr)
		if changed {
			if ret == stmt {
				ret = stmt.copyNode()
			}
			ret.From.AsOf.Expr = e
		}
	}

	if stmt.Where != nil {
		e, changed := WalkExpr(v, stmt.Where.Expr)
		if changed {
			if ret == stmt {
				ret = stmt.copyNode()
			}
			ret.Where.Expr = e
		}
	}

	for i, expr := range stmt.GroupBy {
		e, changed := WalkExpr(v, expr)
		if changed {
			if ret == stmt {
				ret = stmt.copyNode()
			}
			ret.GroupBy[i] = e
		}
	}

	if stmt.Having != nil {
		e, changed := WalkExpr(v, stmt.Having.Expr)
		if changed {
			if ret == stmt {
				ret = stmt.copyNode()
			}
			ret.Having.Expr = e
		}
	}

	for i := range stmt.Window {
		w, changed := walkWindowDef(v, stmt.Window[i])
		if changed {
			if ret == stmt {
				ret = stmt.copyNode()
			}
			ret.Window[i] = w
		}
	}

	return ret
}
// walkStmt is part of the walkableStmt interface.
walkStmt is part of the walkableStmt interface.
// walkStmt is part of the walkableStmt interface .
func (stmt *SelectClause) walkStmt(v Visitor) Statement {
	ret := stmt
	for i, expr := range stmt.Exprs {
		e, changed := WalkExpr(v, expr.Expr)
		if changed {
			if ret == stmt {
				ret = stmt.copyNode()
			}
			ret.Exprs[i].Expr = e
		}
	}
	if stmt.From.AsOf.Expr != nil {
		e, changed := WalkExpr(v, stmt.From.AsOf.Expr)
		if changed {
			if ret == stmt {
				ret = stmt.copyNode()
			}
			ret.From.AsOf.Expr = e
		}
	}
	if stmt.Where != nil {
		e, changed := WalkExpr(v, stmt.Where.Expr)
		if changed {
			if ret == stmt {
				ret = stmt.copyNode()
			}
			ret.Where.Expr = e
		}
	}
	for i, expr := range stmt.GroupBy {
		e, changed := WalkExpr(v, expr)
		if changed {
			if ret == stmt {
				ret = stmt.copyNode()
			}
			ret.GroupBy[i] = e
		}
	}
	if stmt.Having != nil {
		e, changed := WalkExpr(v, stmt.Having.Expr)
		if changed {
			if ret == stmt {
				ret = stmt.copyNode()
			}
			ret.Having.Expr = e
		}
	}
	for i := range stmt.Window {
		w, changed := walkWindowDef(v, stmt.Window[i])
		if changed {
			if ret == stmt {
				ret = stmt.copyNode()
			}
			ret.Window[i] = w
		}
	}
	return ret
}
func ( stmt * SelectClause ) walkStmt ( v Visitor ) Statement { ret := stmt for i , expr := range stmt . Exprs { e , changed := WalkExpr ( v , expr . Expr ) if changed { if ret == stmt { ret = stmt . copyNode ( ) } ret . Exprs [ i ] . Expr = e } } if stmt . From . AsOf . Expr != nil { e , changed := WalkExpr ( v , stmt . From . AsOf . Expr ) if changed { if ret == stmt { ret = stmt . copyNode ( ) } ret . From . AsOf . Expr = e } } if stmt . Where != nil { e , changed := WalkExpr ( v , stmt . Where . Expr ) if changed { if ret == stmt { ret = stmt . copyNode ( ) } ret . Where . Expr = e } } for i , expr := range stmt . GroupBy { e , changed := WalkExpr ( v , expr ) if changed { if ret == stmt { ret = stmt . copyNode ( ) } ret . GroupBy [ i ] = e } } if stmt . Having != nil { e , changed := WalkExpr ( v , stmt . Having . Expr ) if changed { if ret == stmt { ret = stmt . copyNode ( ) } ret . Having . Expr = e } } for i := range stmt . Window { w , changed := walkWindowDef ( v , stmt . Window [ i ] ) if changed { if ret == stmt { ret = stmt . copyNode ( ) } ret . Window [ i ] = w } } return ret }
walkStmt is part of the walkableStmt interface.
walkStmt is part of the walkableStmt interface .