@@ -1925,3 +1925,64 @@ fn parse_multi_table_insert_when_clauses(
19251925
19261926 Ok ( ( when_clauses, else_clause) )
19271927}
1928+
1929+ #[ cfg( test) ]
1930+ mod tests {
1931+ use super :: SnowflakeDialect ;
1932+ use crate :: ast:: { DataType , ObjectName } ;
1933+ use crate :: parser:: Parser ;
1934+
1935+ #[ test]
1936+ fn parses_cast_to_text_with_size_in_snowflake ( ) {
1937+ Parser :: parse_sql (
1938+ & SnowflakeDialect ,
1939+ r#"SELECT
1940+ _ID::TEXT(16777216) AS _ID,
1941+ TO_TIMESTAMP_NTZ(CREATED_ON) AS CREATED_ON,
1942+ DEPARTMENT::TEXT(16777216) AS DEPARTMENT,
1943+ DOB::TEXT(16777216) AS DOB,
1944+ FIRST_NAME::TEXT(16777216) AS FIRST_NAME,
1945+ GENDER::TEXT(16777216) AS GENDER,
1946+ IS_ACTIVE::BOOLEAN AS IS_ACTIVE,
1947+ LAST_NAME::TEXT(16777216) AS LAST_NAME,
1948+ MIDDLE_NAME::TEXT(16777216) AS MIDDLE_NAME,
1949+ ORGANIZATION::TEXT(16777216) AS ORGANIZATION,
1950+ STATUS::TEXT(16777216) AS STATUS,
1951+ TO_TIMESTAMP_NTZ(UPDATED_ON) AS UPDATED_ON,
1952+ USER_ID::TEXT(16777216) AS USER_ID,
1953+ EMAIL::TEXT(16777216) AS EMAIL,
1954+ JOB_TITLE::TEXT(16777216) AS JOB_TITLE
1955+ FROM INCARE_ANALYTICS.USER_DETAILS;"# ,
1956+ )
1957+ . unwrap ( ) ;
1958+ }
1959+
1960+ #[ test]
1961+ fn parses_text_with_size_as_custom_data_type ( ) {
1962+ let data_type = Parser :: new ( & SnowflakeDialect )
1963+ . try_with_sql ( "TEXT(16777216)" )
1964+ . unwrap ( )
1965+ . parse_data_type ( )
1966+ . unwrap ( ) ;
1967+
1968+ assert_eq ! (
1969+ data_type,
1970+ DataType :: Custom (
1971+ ObjectName :: from( vec![ "TEXT" . into( ) ] ) ,
1972+ vec![ "16777216" . to_string( ) ] ,
1973+ )
1974+ ) ;
1975+ assert_eq ! ( data_type. to_string( ) , "TEXT(16777216)" ) ;
1976+ }
1977+
1978+ #[ test]
1979+ fn preserves_bare_text_data_type ( ) {
1980+ let data_type = Parser :: new ( & SnowflakeDialect )
1981+ . try_with_sql ( "TEXT" )
1982+ . unwrap ( )
1983+ . parse_data_type ( )
1984+ . unwrap ( ) ;
1985+
1986+ assert_eq ! ( data_type, DataType :: Text ) ;
1987+ }
1988+ }
0 commit comments