Skip to content

Add switch expression syntax #586

Open

Description

@antonmedv
image I see the point!

But implementing it as function not the best solution. As it will require to evaluate all conditions and cases before choosing a correct one.

We need to create a proper switch syntax in Expr.

Originally posted by @antonmedv in #579 (comment)

Activity

  1. vmihailenco commented on Aug 10, 2024

    @vmihailenco

    I have nothing against having a switch statement, but ClickHouse also has multiIf function with short-circuit-function-evaluation. It is often more readable than a switch and addresses your concerns about "evaluate all conditions and cases before choosing a correct one".

  2. antonmedv commented on Aug 10, 2024

    @antonmedv
    MemberAuthor

    While switch statement is easy to understand and implement, maybe we need to consider adding "match" expression instead.

    Or to make expr closer to golang and implement switch in the exact same semantics.

  3. vmihailenco commented on Aug 10, 2024

    @vmihailenco

    Or to make expr closer to golang and implement switch in the exact same semantics.

    I very much would like to see multi-line expressions happen, so it would make sense to have switches to be an expression as well, e.g. in Ruby:

    case x
    when 1..5
      "It's between 1 and 5"
    when 6
      "It's 6"
    when "foo", "bar"
      "It's either foo or bar"
    else
      "You gave me #{x} -- I have no idea what to do with that."
    end
    

    The key point is that it evaluates to an expression. The syntax does not matter.

  4. antonmedv commented on Aug 10, 2024

    @antonmedv
    MemberAuthor

    I see. This makes sense. 👍🏻

  5. tinboxw commented on Feb 8, 2025

    @tinboxw

    When can it be achieved approximately?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions