R6�W# � @ s� d d l Z d d l Td d l m Z e j d d k rU d d l m Z d d � Z d d d � Z d d � Z d d � Z d d d d d d d d d d � Z d d d � Z Gd d � d e � Z d S)� N)�*)�Node� )�Callablec C s t | t � S)N)� isinstancer )�c� r � /shortcuts.py�<lambda> s r c C s� t d � g } | d k } | r. | j | � x9 | D]1 \ } } | j t d � | t d � | f � q5 W| d k r� | j t d � | f � | j t d � � t | � S)a& CASE statement builder. Example CASE statements: SELECT foo, CASE WHEN foo = 1 THEN "one" WHEN foo = 2 THEN "two" ELSE "?" END -- will be in column named "case" in postgres -- FROM bar; -- equivalent to above -- SELECT foo, CASE foo WHEN 1 THEN "one" WHEN 2 THEN "two" ELSE "?" END Corresponding peewee: # No predicate, use expressions. Bar.select(Bar.foo, case(None, ( (Bar.foo == 1, "one"), (Bar.foo == 2, "two")), "?")) # Predicate, will test for equality. Bar.select(Bar.foo, case(Bar.foo, ( (1, "one"), (2, "two")), "?")) ZCASENZWHENZTHEN�ELSEZEND)�SQL�append�extend�Clause)� predicateZexpression_tuples�defaultZclausesZsimple_case�expr�valuer r r �case s " )r c C s t j t | t d | � � � S)NzAS %s)�fnZCASTr r )ZnodeZas_typer r r �cast<