@@ -2708,6 +2708,298 @@ def test_show_interval_formatting(session):
27082708 """
27092709 )
27102710
2711+ # Year-month intervals with dash format
2712+ df = session .sql ("SELECT INTERVAL '1-6' YEAR TO MONTH as year_to_month" )
2713+ assert df ._show_string_spark (truncate = False ) == dedent (
2714+ """\
2715+ +----------------------------+
2716+ |"YEAR_TO_MONTH" |
2717+ +----------------------------+
2718+ |INTERVAL '1-6' YEAR TO MONTH|
2719+ +----------------------------+
2720+ """
2721+ )
2722+
2723+ # Negative year-month intervals
2724+ df = session .sql ("SELECT INTERVAL '-2-3' YEAR TO MONTH as negative_year_month" )
2725+ assert df ._show_string_spark (truncate = False ) == dedent (
2726+ """\
2727+ +-----------------------------+
2728+ |"NEGATIVE_YEAR_MONTH" |
2729+ +-----------------------------+
2730+ |INTERVAL '-2-3' YEAR TO MONTH|
2731+ +-----------------------------+
2732+ """
2733+ )
2734+
2735+ # Single year intervals (not YEAR TO MONTH)
2736+ df = session .sql ("SELECT INTERVAL '5' YEAR as single_year" )
2737+ assert df ._show_string_spark (truncate = False ) == dedent (
2738+ """\
2739+ +-----------------+
2740+ |"SINGLE_YEAR" |
2741+ +-----------------+
2742+ |INTERVAL '5' YEAR|
2743+ +-----------------+
2744+ """
2745+ )
2746+
2747+ # Single month intervals (not YEAR TO MONTH)
2748+ df = session .sql ("SELECT INTERVAL '8' MONTH as single_month" )
2749+ assert df ._show_string_spark (truncate = False ) == dedent (
2750+ """\
2751+ +------------------+
2752+ |"SINGLE_MONTH" |
2753+ +------------------+
2754+ |INTERVAL '8' MONTH|
2755+ +------------------+
2756+ """
2757+ )
2758+
2759+ # Zero year-month intervals
2760+ df = session .sql ("SELECT INTERVAL '0-0' YEAR TO MONTH as zero_year_month" )
2761+ assert df ._show_string_spark (truncate = False ) == dedent (
2762+ """\
2763+ +----------------------------+
2764+ |"ZERO_YEAR_MONTH" |
2765+ +----------------------------+
2766+ |INTERVAL '0-0' YEAR TO MONTH|
2767+ +----------------------------+
2768+ """
2769+ )
2770+
2771+ # Very large day intervals
2772+ df = session .sql ("SELECT INTERVAL '999' DAY as large_day" )
2773+ assert df ._show_string_spark (truncate = False ) == dedent (
2774+ """\
2775+ +------------------+
2776+ |"LARGE_DAY" |
2777+ +------------------+
2778+ |INTERVAL '999' DAY|
2779+ +------------------+
2780+ """
2781+ )
2782+
2783+ # Minute to second with large minutes
2784+ df = session .sql (
2785+ "SELECT INTERVAL '150:30' MINUTE TO SECOND as large_minute_to_second"
2786+ )
2787+ assert df ._show_string_spark (truncate = False ) == dedent (
2788+ """\
2789+ +----------------------------------+
2790+ |"LARGE_MINUTE_TO_SECOND" |
2791+ +----------------------------------+
2792+ |INTERVAL '150:30' MINUTE TO SECOND|
2793+ +----------------------------------+
2794+ """
2795+ )
2796+
2797+ # Day to second with fractional seconds
2798+ df = session .sql (
2799+ "SELECT INTERVAL '5 10:20:30.123' DAY TO SECOND as day_to_second_frac"
2800+ )
2801+ assert df ._show_string_spark (truncate = False ) == dedent (
2802+ """\
2803+ +---------------------------------------+
2804+ |"DAY_TO_SECOND_FRAC" |
2805+ +---------------------------------------+
2806+ |INTERVAL '5 10:20:30.123' DAY TO SECOND|
2807+ +---------------------------------------+
2808+ """
2809+ )
2810+
2811+ # Hour to second with zero padding in multi-field
2812+ df = session .sql ("SELECT INTERVAL '05:00:00' HOUR TO SECOND as hour_zero_padded" )
2813+ assert df ._show_string_spark (truncate = False ) == dedent (
2814+ """\
2815+ +----------------------------------+
2816+ |"HOUR_ZERO_PADDED" |
2817+ +----------------------------------+
2818+ |INTERVAL '05:00:00' HOUR TO SECOND|
2819+ +----------------------------------+
2820+ """
2821+ )
2822+
2823+ # Negative day-time intervals
2824+ df = session .sql ("SELECT INTERVAL '-3 05:30:45' DAY TO SECOND as negative_complex" )
2825+ assert df ._show_string_spark (truncate = False ) == dedent (
2826+ """\
2827+ +------------------------------------+
2828+ |"NEGATIVE_COMPLEX" |
2829+ +------------------------------------+
2830+ |INTERVAL '-3 05:30:45' DAY TO SECOND|
2831+ +------------------------------------+
2832+ """
2833+ )
2834+
2835+ # Additional edge cases for complete coverage based on actual Snowflake output
2836+
2837+ # Year-month compound intervals
2838+ df = session .sql ("SELECT INTERVAL '1-6' YEAR TO MONTH as year_to_month" )
2839+ assert df ._show_string_spark (truncate = False ) == dedent (
2840+ """\
2841+ +----------------------------+
2842+ |"YEAR_TO_MONTH" |
2843+ +----------------------------+
2844+ |INTERVAL '1-6' YEAR TO MONTH|
2845+ +----------------------------+
2846+ """
2847+ )
2848+
2849+ df = session .sql ("SELECT INTERVAL '-2-3' YEAR TO MONTH as negative_year_month" )
2850+ assert df ._show_string_spark (truncate = False ) == dedent (
2851+ """\
2852+ +-----------------------------+
2853+ |"NEGATIVE_YEAR_MONTH" |
2854+ +-----------------------------+
2855+ |INTERVAL '-2-3' YEAR TO MONTH|
2856+ +-----------------------------+
2857+ """
2858+ )
2859+
2860+ # Single field intervals
2861+ df = session .sql ("SELECT INTERVAL '5' YEAR as single_year" )
2862+ assert df ._show_string_spark (truncate = False ) == dedent (
2863+ """\
2864+ +-----------------+
2865+ |"SINGLE_YEAR" |
2866+ +-----------------+
2867+ |INTERVAL '5' YEAR|
2868+ +-----------------+
2869+ """
2870+ )
2871+
2872+ df = session .sql ("SELECT INTERVAL '8' MONTH as single_month" )
2873+ assert df ._show_string_spark (truncate = False ) == dedent (
2874+ """\
2875+ +------------------+
2876+ |"SINGLE_MONTH" |
2877+ +------------------+
2878+ |INTERVAL '8' MONTH|
2879+ +------------------+
2880+ """
2881+ )
2882+
2883+ df = session .sql ("SELECT INTERVAL '0-0' YEAR TO MONTH as zero_year_month" )
2884+ assert df ._show_string_spark (truncate = False ) == dedent (
2885+ """\
2886+ +----------------------------+
2887+ |"ZERO_YEAR_MONTH" |
2888+ +----------------------------+
2889+ |INTERVAL '0-0' YEAR TO MONTH|
2890+ +----------------------------+
2891+ """
2892+ )
2893+
2894+ # Large day interval
2895+ df = session .sql ("SELECT INTERVAL '999' DAY as large_day" )
2896+ assert df ._show_string_spark (truncate = False ) == dedent (
2897+ """\
2898+ +------------------+
2899+ |"LARGE_DAY" |
2900+ +------------------+
2901+ |INTERVAL '999' DAY|
2902+ +------------------+
2903+ """
2904+ )
2905+
2906+ # Large minute to second interval (tests the bug we just fixed)
2907+ df = session .sql (
2908+ "SELECT INTERVAL '150:30' MINUTE TO SECOND as large_minute_to_second"
2909+ )
2910+ assert df ._show_string_spark (truncate = False ) == dedent (
2911+ """\
2912+ +----------------------------------+
2913+ |"LARGE_MINUTE_TO_SECOND" |
2914+ +----------------------------------+
2915+ |INTERVAL '150:30' MINUTE TO SECOND|
2916+ +----------------------------------+
2917+ """
2918+ )
2919+
2920+ # Day to second with fractional seconds
2921+ df = session .sql (
2922+ "SELECT INTERVAL '5 10:20:30.123' DAY TO SECOND as day_to_second_frac"
2923+ )
2924+ assert df ._show_string_spark (truncate = False ) == dedent (
2925+ """\
2926+ +---------------------------------------+
2927+ |"DAY_TO_SECOND_FRAC" |
2928+ +---------------------------------------+
2929+ |INTERVAL '5 10:20:30.123' DAY TO SECOND|
2930+ +---------------------------------------+
2931+ """
2932+ )
2933+
2934+ # Hour to second with zero padding
2935+ df = session .sql ("SELECT INTERVAL '05:00:00' HOUR TO SECOND as hour_zero_padded" )
2936+ assert df ._show_string_spark (truncate = False ) == dedent (
2937+ """\
2938+ +----------------------------------+
2939+ |"HOUR_ZERO_PADDED" |
2940+ +----------------------------------+
2941+ |INTERVAL '05:00:00' HOUR TO SECOND|
2942+ +----------------------------------+
2943+ """
2944+ )
2945+
2946+ # Negative complex interval
2947+ df = session .sql ("SELECT INTERVAL '-3 05:30:45' DAY TO SECOND as negative_complex" )
2948+ assert df ._show_string_spark (truncate = False ) == dedent (
2949+ """\
2950+ +------------------------------------+
2951+ |"NEGATIVE_COMPLEX" |
2952+ +------------------------------------+
2953+ |INTERVAL '-3 05:30:45' DAY TO SECOND|
2954+ +------------------------------------+
2955+ """
2956+ )
2957+
2958+ # Positive prefix intervals
2959+ df = session .sql ("SELECT INTERVAL '+2-5' YEAR TO MONTH as positive_year_month" )
2960+ assert df ._show_string_spark (truncate = False ) == dedent (
2961+ """\
2962+ +----------------------------+
2963+ |"POSITIVE_YEAR_MONTH" |
2964+ +----------------------------+
2965+ |INTERVAL '2-5' YEAR TO MONTH|
2966+ +----------------------------+
2967+ """
2968+ )
2969+
2970+ df = session .sql ("SELECT INTERVAL '+3' YEAR as positive_year" )
2971+ assert df ._show_string_spark (truncate = False ) == dedent (
2972+ """\
2973+ +-----------------+
2974+ |"POSITIVE_YEAR" |
2975+ +-----------------+
2976+ |INTERVAL '3' YEAR|
2977+ +-----------------+
2978+ """
2979+ )
2980+
2981+ df = session .sql ("SELECT INTERVAL '+15' MONTH as positive_month" )
2982+ assert df ._show_string_spark (truncate = False ) == dedent (
2983+ """\
2984+ +-------------------+
2985+ |"POSITIVE_MONTH" |
2986+ +-------------------+
2987+ |INTERVAL '15' MONTH|
2988+ +-------------------+
2989+ """
2990+ )
2991+
2992+ df = session .sql ("SELECT INTERVAL '-5' YEAR as negative_single_year" )
2993+ assert df ._show_string_spark (truncate = False ) == dedent (
2994+ """\
2995+ +----------------------+
2996+ |"NEGATIVE_SINGLE_YEAR"|
2997+ +----------------------+
2998+ |INTERVAL '-5' YEAR |
2999+ +----------------------+
3000+ """
3001+ )
3002+
27113003
27123004@pytest .mark .parametrize ("data" , [[0 , 1 , 2 , 3 ], ["" , "a" ], [False , True ], [None ]])
27133005def test_create_dataframe_with_single_value (session , data ):
0 commit comments