func ExtractColumns(expr Expression) (cols []*Column) {
	switch v := expr.(type) {
	case *Column:
		return []*Column{v}
	case *ScalarFunction:
		for _, arg := range v.Args {
			cols = append(cols, ExtractColumns(arg)...)
		}
	}
	return
}
// ExtractColumns extracts all columns from an expression.
ExtractColumns extracts all columns from an expression.
// ExtractColumns extracts all columns from an expression .
func ExtractColumns(expr Expression) (cols []*Column) {
	switch v := expr.(type) {
	case *Column:
		return []*Column{v}
	case *ScalarFunction:
		for _, arg := range v.Args {
			cols = append(cols, ExtractColumns(arg)...)
		}
	}
	return
}
func ExtractColumns ( expr Expression ) ( cols [ ] * Column ) { switch v := expr . ( type ) { case * Column : return [ ] * Column { v } case * ScalarFunction : for _ , arg := range v . Args { cols = append ( cols , ExtractColumns ( arg ) ... ) } } return }
ExtractColumns extracts all columns from an expression.
ExtractColumns extracts all columns from an expression .