@@ -2161,6 +2161,134 @@ public void testElementAt()
21612161 .isEqualTo (decimal ("2.22222222222222222" , createDecimalType (18 , 17 )));
21622162 }
21632163
2164+ @ Test
2165+ public void testElementFirst ()
2166+ {
2167+ assertThat (assertions .function ("element_first" , "ARRAY[]" ))
2168+ .isNull (UNKNOWN );
2169+
2170+ assertThat (assertions .function ("element_first" , "ARRAY[NULL]" ))
2171+ .isNull (UNKNOWN );
2172+
2173+ assertThat (assertions .function ("element_first" , "ARRAY[2, 1, 3]" ))
2174+ .isEqualTo (2 );
2175+
2176+ assertThat (assertions .function ("element_first" , "ARRAY[NULL, 1]" ))
2177+ .isNull (INTEGER );
2178+
2179+ assertThat (assertions .function ("element_first" , "ARRAY[BIGINT '2', 1, 3]" ))
2180+ .isEqualTo (2L );
2181+
2182+ assertThat (assertions .function ("element_first" , "ARRAY[1.0E0, 2.5E0, 3.5E0]" ))
2183+ .isEqualTo (1.0 );
2184+
2185+ assertThat (assertions .function ("element_first" , "ARRAY[ARRAY[1, 2], ARRAY[3]]" ))
2186+ .hasType (new ArrayType (INTEGER ))
2187+ .isEqualTo (ImmutableList .of (1 , 2 ));
2188+
2189+ assertThat (assertions .function ("element_first" , "ARRAY[NULL, ARRAY[1, 2], ARRAY[3]]" ))
2190+ .isNull (new ArrayType (INTEGER ));
2191+
2192+ assertThat (assertions .function ("element_first" , "ARRAY['puppies', 'kittens']" ))
2193+ .hasType (createVarcharType (7 ))
2194+ .isEqualTo ("puppies" );
2195+
2196+ assertThat (assertions .function ("element_first" , "ARRAY[NULL, 'puppies', 'kittens']" ))
2197+ .isNull (createVarcharType (7 ));
2198+
2199+ assertThat (assertions .function ("element_first" , "ARRAY[TRUE, FALSE]" ))
2200+ .isEqualTo (true );
2201+
2202+ assertThat (assertions .function ("element_first" , "ARRAY[NULL, FALSE]" ))
2203+ .isNull (BOOLEAN );
2204+
2205+ assertThat (assertions .function ("element_first" , "ARRAY[TIMESTAMP '1970-01-01 00:00:01', TIMESTAMP '1973-07-08 22:00:01']" ))
2206+ .hasType (createTimestampType (0 ))
2207+ .isEqualTo (sqlTimestampOf (0 , 1970 , 1 , 1 , 0 , 0 , 1 , 0 ));
2208+
2209+ assertThat (assertions .function ("element_first" , "ARRAY[infinity()]" ))
2210+ .isEqualTo (POSITIVE_INFINITY );
2211+
2212+ assertThat (assertions .function ("element_first" , "ARRAY[-infinity()]" ))
2213+ .isEqualTo (NEGATIVE_INFINITY );
2214+
2215+ assertThat (assertions .function ("element_first" , "ARRAY[sqrt(-1)]" ))
2216+ .isEqualTo (NaN );
2217+
2218+ assertThat (assertions .function ("element_first" , "ARRAY[2.1, 2.2, 2.3]" ))
2219+ .isEqualTo (decimal ("2.1" , createDecimalType (2 , 1 )));
2220+
2221+ assertThat (assertions .function ("element_first" , "ARRAY[2.111111222111111114111, 2.22222222222222222, 2.222222222222223]" ))
2222+ .isEqualTo (decimal ("2.111111222111111114111" , createDecimalType (22 , 21 )));
2223+
2224+ assertThat (assertions .function ("element_first" , "ARRAY[1.9, 2, 2.3]" ))
2225+ .isEqualTo (decimal ("0000000001.9" , createDecimalType (11 , 1 )));
2226+ }
2227+
2228+ @ Test
2229+ public void testElementLast ()
2230+ {
2231+ assertThat (assertions .function ("element_last" , "ARRAY[]" ))
2232+ .isNull (UNKNOWN );
2233+
2234+ assertThat (assertions .function ("element_last" , "ARRAY[NULL]" ))
2235+ .isNull (UNKNOWN );
2236+
2237+ assertThat (assertions .function ("element_last" , "ARRAY[2, 1, 3]" ))
2238+ .isEqualTo (3 );
2239+
2240+ assertThat (assertions .function ("element_last" , "ARRAY[1, NULL]" ))
2241+ .isNull (INTEGER );
2242+
2243+ assertThat (assertions .function ("element_last" , "ARRAY[BIGINT '2', 1, 3]" ))
2244+ .isEqualTo (3L );
2245+
2246+ assertThat (assertions .function ("element_last" , "ARRAY[1.0E0, 2.5E0, 3.5E0]" ))
2247+ .isEqualTo (3.5 );
2248+
2249+ assertThat (assertions .function ("element_last" , "ARRAY[ARRAY[1, 2], ARRAY[3]]" ))
2250+ .hasType (new ArrayType (INTEGER ))
2251+ .isEqualTo (ImmutableList .of (3 ));
2252+
2253+ assertThat (assertions .function ("element_last" , "ARRAY[ARRAY[1, 2], ARRAY[3], NULL]" ))
2254+ .isNull (new ArrayType (INTEGER ));
2255+
2256+ assertThat (assertions .function ("element_last" , "ARRAY['puppies', 'kittens']" ))
2257+ .hasType (createVarcharType (7 ))
2258+ .isEqualTo ("kittens" );
2259+
2260+ assertThat (assertions .function ("element_last" , "ARRAY['puppies', 'kittens', NULL]" ))
2261+ .isNull (createVarcharType (7 ));
2262+
2263+ assertThat (assertions .function ("element_last" , "ARRAY[TRUE, FALSE]" ))
2264+ .isEqualTo (false );
2265+
2266+ assertThat (assertions .function ("element_last" , "ARRAY[FALSE, NULL]" ))
2267+ .isNull (BOOLEAN );
2268+
2269+ assertThat (assertions .function ("element_last" , "ARRAY[TIMESTAMP '1970-01-01 00:00:01', TIMESTAMP '1973-07-08 22:00:01']" ))
2270+ .hasType (createTimestampType (0 ))
2271+ .isEqualTo (sqlTimestampOf (0 , 1973 , 7 , 8 , 22 , 0 , 1 , 0 ));
2272+
2273+ assertThat (assertions .function ("element_last" , "ARRAY[infinity()]" ))
2274+ .isEqualTo (POSITIVE_INFINITY );
2275+
2276+ assertThat (assertions .function ("element_last" , "ARRAY[-infinity()]" ))
2277+ .isEqualTo (NEGATIVE_INFINITY );
2278+
2279+ assertThat (assertions .function ("element_last" , "ARRAY[sqrt(-1)]" ))
2280+ .isEqualTo (NaN );
2281+
2282+ assertThat (assertions .function ("element_last" , "ARRAY[2.1, 2.2, 2.3]" ))
2283+ .isEqualTo (decimal ("2.3" , createDecimalType (2 , 1 )));
2284+
2285+ assertThat (assertions .function ("element_last" , "ARRAY[2.111111222111111114111, 2.22222222222222222, 2.222222222222223]" ))
2286+ .isEqualTo (decimal ("2.222222222222223000000" , createDecimalType (22 , 21 )));
2287+
2288+ assertThat (assertions .function ("element_last" , "ARRAY[1.9, 2, 2.3]" ))
2289+ .isEqualTo (decimal ("0000000002.3" , createDecimalType (11 , 1 )));
2290+ }
2291+
21642292 @ Test
21652293 public void testSort ()
21662294 {
0 commit comments