@@ -526,3 +526,50 @@ def test_drop_data_object_materialized_view_calls_correct_drop(mocker: MockFixtu
526526 drop_view_mock .assert_called_once_with (
527527 mv_data_object .to_table (), ignore_if_not_exists = True , materialized = True
528528 )
529+
530+
531+ def test_columns (mocker : MockFixture , make_mocked_engine_adapter : t .Callable ):
532+ adapter = make_mocked_engine_adapter (DatabricksEngineAdapter , default_catalog = "test_catalog" )
533+
534+ # create long struct columns datatype
535+ long_struct_cols = [f"a_{ i } :int" for i in range (50 )]
536+ adapter .cursor .fetchall .return_value = [
537+ ("bigint_col" , "bigint" ),
538+ ("binary_col" , "binary" ),
539+ ("boolean_col" , "boolean" ),
540+ ("date_col" , "date" ),
541+ ("decimal_col" , "decimal(38,4)" ),
542+ ("double_col" , "double" ),
543+ ("float_col" , "float" ),
544+ ("int_col" , "int" ),
545+ ("small_int" , "smallint" ),
546+ ("string_col" , "string" ),
547+ ("timestamp_col" , "timestamp" ),
548+ ("timestamp_ntz_col" , "timestamp_ntz" ),
549+ ("tinyint_col" , "tinyint" ),
550+ ("array_col" , "array<int>" ),
551+ ("simple_struct_col" , "struct<a:int,b:string>" ),
552+ ("long_struct_col" , f"struct<{ ',' .join (long_struct_cols )} >" ),
553+ ]
554+
555+ resp = adapter .columns ("test_db.test_table" )
556+ assert resp == {
557+ "bigint_col" : exp .DataType .build ("bigint" , dialect = adapter .dialect ),
558+ "binary_col" : exp .DataType .build ("binary" , dialect = adapter .dialect ),
559+ "boolean_col" : exp .DataType .build ("boolean" , dialect = adapter .dialect ),
560+ "date_col" : exp .DataType .build ("date" , dialect = adapter .dialect ),
561+ "decimal_col" : exp .DataType .build ("decimal(38,4)" , dialect = adapter .dialect ),
562+ "double_col" : exp .DataType .build ("double" , dialect = adapter .dialect ),
563+ "float_col" : exp .DataType .build ("float" , dialect = adapter .dialect ),
564+ "int_col" : exp .DataType .build ("int" , dialect = adapter .dialect ),
565+ "small_int" : exp .DataType .build ("smallint" , dialect = adapter .dialect ),
566+ "string_col" : exp .DataType .build ("string" , dialect = adapter .dialect ),
567+ "timestamp_col" : exp .DataType .build ("timestamp" , dialect = adapter .dialect ),
568+ "timestamp_ntz_col" : exp .DataType .build ("timestamp_ntz" , dialect = adapter .dialect ),
569+ "tinyint_col" : exp .DataType .build ("tinyint" , dialect = adapter .dialect ),
570+ "array_col" : exp .DataType .build ("array<int>" , dialect = adapter .dialect ),
571+ "simple_struct_col" : exp .DataType .build ("struct<a:int,b:string>" , dialect = adapter .dialect ),
572+ "long_struct_col" : exp .DataType .build (
573+ f"struct<{ ',' .join (long_struct_cols )} >" , dialect = adapter .dialect
574+ ),
575+ }
0 commit comments