================================================================================
Standard cast
================================================================================

SELECT CAST(1 AS TEXT);

--------------------------------------------------------------------------------

(program
  (statement
    (select
      (keyword_select)
      (select_expression
        (term
          (cast
            (keyword_cast)
            (literal)
            (keyword_as)
            (keyword_text)))))))

================================================================================
Aliased
================================================================================

SELECT CAST(1 AS TEXT) AS fieldname;

--------------------------------------------------------------------------------

(program
  (statement
    (select
      (keyword_select)
      (select_expression
        (term
          value: (cast
            name: (keyword_cast)
            parameter: (literal)
            (keyword_as)
            (keyword_text))
          (keyword_as)
          alias: (identifier))))))

================================================================================
Postgres shorthand
================================================================================

SELECT
  1::TEXT,
  1::INT4;

--------------------------------------------------------------------------------

(program
  (statement
    (select
      (keyword_select)
      (select_expression
        (term
          (cast
            (literal)
            (keyword_text)))
        (term
          (cast
            (literal)
            (int
              (keyword_int))))))))

================================================================================
Multiple casts
================================================================================

SELECT
  CAST ('100' AS INTEGER),
  '100'::INTEGER,
  '01-OCT-2015'::DATE;

--------------------------------------------------------------------------------

(program
  (statement
    (select
      (keyword_select)
      (select_expression
        (term
          value: (cast
            name: (keyword_cast)
            parameter: (literal)
            (keyword_as)
            (int
              (keyword_int))))
        (term
          value: (cast
            (literal)
            (int
              (keyword_int))))
        (term
          value: (cast
            (literal)
            (keyword_date)))))))

================================================================================
Casts /w precision
================================================================================

SELECT
CAST (100 AS NUMERIC(32)),
     100::FLOAT(32),
     100::FLOAT8;

--------------------------------------------------------------------------------

(program
  (statement
    (select
      (keyword_select)
      (select_expression
        (term
          value: (cast
            name: (keyword_cast)
            parameter: (literal)
            (keyword_as)
            (numeric
              (keyword_numeric)
              precision: (literal))))
        (term
          value: (cast
            (literal)
            (float
              (keyword_float)
              precision: (literal))))
        (term
          value: (cast
            (literal)
            (double)))))))

================================================================================
SELECT AS UNSIGNED
================================================================================

SELECT CAST ("1" AS UNSIGNED INTEGER);

--------------------------------------------------------------------------------

(program
  (statement
    (select
      (keyword_select)
      (select_expression
        (term
          value: (cast
            name: (keyword_cast)
            parameter: (literal)
            (keyword_as)
            (int
              (keyword_unsigned)
              (keyword_int))))))))

================================================================================
Cast intervals
================================================================================

SELECT '1 day 10 seconds'::INTERVAL, CAST('1 month' AS INTERVAL)

--------------------------------------------------------------------------------

(program
  (statement
    (select
      (keyword_select)
      (select_expression
        (term
          value: (cast
            (literal)
            (keyword_interval)))
        (term
          value: (cast
            name: (keyword_cast)
            parameter: (literal)
            (keyword_as)
            (keyword_interval)))))))
