/* syntax version 1 */
/* postgres can not */

$json = CAST(@@{
    "key": 123
}@@ as Json);

-- Check all supported types for variables
SELECT
    -- Numeric types
    JSON_VALUE(
        $json,
        "strict $var1 + $var2 + $var3 + $var4 + $var5 + $var6 + $var7 + $var8 + $var9 + $var10"
        PASSING
            CAST(1 as Int8) as var1,
            CAST(2 as Uint8) as var2,
            CAST(3 as Int16) as var3,
            CAST(4 as Uint16) as var4,
            CAST(5 as Int32) as var5,
            CAST(6 as Uint32) as var6,
            CAST(7 as Int64) as var7,
            CAST(8 as Uint64) as var8,
            CAST(9 as Double) as var9,
            CAST(10 as Float) as var10
    ),
    -- Time types
    JSON_VALUE(
        $json,
        "strict $var"
        PASSING
            CAST(1582044622 as Datetime) as var
    ),
    JSON_VALUE(
        $json,
        "strict $var"
        PASSING
            CAST(1582044622 as Timestamp) as var
    ),
    JSON_VALUE(
        $json,
        "strict $var"
        PASSING
            CAST("2020-02-18" as Date) as var
    ),
    -- Utf8
    JSON_VALUE(
        $json,
        "strict $var"
        PASSING
            CAST("привет" as Utf8) as var
    ),
    -- Bool
    JSON_VALUE(
        $json,
        "strict $var"
        PASSING
            true as var
    ),
    -- Json
    JSON_VALUE(
        $json,
        "strict $var.key"
        PASSING
            $json as var
    ),
    -- Nulls
    JSON_VALUE(
        $json,
        "strict $var"
        PASSING
            Nothing(Int64?) as var
    ),
    JSON_VALUE(
        $json,
        "strict $var"
        PASSING
            NULL as var
    );

-- Check various ways to pass variable name
SELECT
    JSON_VALUE(
        $json, "strict $var1"
        PASSING
            123 as var1
    ),
    -- NOTE: VaR1 is not casted to upper-case VAR1 as standard expects
    JSON_VALUE(
        $json, "strict $VaR1"
        PASSING
            123 as VaR1
    ),
    JSON_VALUE(
        $json, "strict $var1"
        PASSING
            123 as "var1"
    ),
    JSON_VALUE(
        $json, "strict $VaR1"
        PASSING
            123 as "VaR1"
    );