@@ -1094,3 +1094,82 @@ def test_get_columns_new_logic(self, mock_get_columns, adapter, unity_relation):
10941094 assert result [0 ].column == "col1"
10951095 assert result [0 ].dtype == "string"
10961096 assert result [0 ].comment == "comment1"
1097+
1098+ @patch (
1099+ "dbt.adapters.databricks.behaviors.columns.GetColumnsByDescribe._get_columns_with_comments"
1100+ )
1101+ def test_get_columns_streaming_table_legacy_logic (
1102+ self , mock_get_columns , adapter , unity_relation
1103+ ):
1104+ streaming_relation = DatabricksRelation .create (
1105+ database = unity_relation .database ,
1106+ schema = unity_relation .schema ,
1107+ identifier = unity_relation .identifier ,
1108+ type = DatabricksRelation .StreamingTable ,
1109+ )
1110+ # Return value less than 0 means version is older than 17.1
1111+ with patch .object (adapter , "compare_dbr_version" , return_value = - 1 ):
1112+ mock_get_columns .return_value = [
1113+ {"col_name" : "stream_col" , "data_type" : "int" , "comment" : "streaming col" },
1114+ ]
1115+ result = adapter .get_columns_in_relation (streaming_relation )
1116+ mock_get_columns .assert_called_with (adapter , streaming_relation , "get_columns_comments" )
1117+ assert len (result ) == 1
1118+ assert result [0 ].column == "stream_col"
1119+ assert result [0 ].dtype == "int"
1120+ assert result [0 ].comment == "streaming col"
1121+
1122+ @patch (
1123+ "dbt.adapters.databricks.behaviors.columns.GetColumnsByDescribe._get_columns_with_comments"
1124+ )
1125+ def test_get_columns_streaming_table_new_logic (self , mock_get_columns , adapter , unity_relation ):
1126+ streaming_relation = DatabricksRelation .create (
1127+ database = unity_relation .database ,
1128+ schema = unity_relation .schema ,
1129+ identifier = unity_relation .identifier ,
1130+ type = DatabricksRelation .StreamingTable ,
1131+ )
1132+ # Return value 0 means version is 17.1
1133+ with patch .object (adapter , "compare_dbr_version" , return_value = 0 ):
1134+ json_data = """
1135+ {
1136+ "columns": [
1137+ {
1138+ "name": "stream_col",
1139+ "type": {"name": "int"},
1140+ "comment": "streaming col"
1141+ }
1142+ ]
1143+ }
1144+ """
1145+ mock_get_columns .return_value = [{"json_metadata" : json_data }]
1146+ result = adapter .get_columns_in_relation (streaming_relation )
1147+ mock_get_columns .assert_called_with (
1148+ adapter , streaming_relation , "get_columns_comments_as_json"
1149+ )
1150+ assert len (result ) == 1
1151+ assert result [0 ].column == "stream_col"
1152+ assert result [0 ].dtype == "int"
1153+ assert result [0 ].comment == "streaming col"
1154+
1155+ @patch (
1156+ "dbt.adapters.databricks.behaviors.columns.GetColumnsByDescribe._get_columns_with_comments"
1157+ )
1158+ def test_get_columns_materialized_view (self , mock_get_columns , adapter , unity_relation ):
1159+ mv_relation = DatabricksRelation .create (
1160+ database = unity_relation .database ,
1161+ schema = unity_relation .schema ,
1162+ identifier = unity_relation .identifier ,
1163+ type = DatabricksRelation .MaterializedView ,
1164+ )
1165+ # For MVs, always use legacy logic, regardless of DBR version
1166+ with patch .object (adapter , "compare_dbr_version" , return_value = 1 ):
1167+ mock_get_columns .return_value = [
1168+ {"col_name" : "mv_col" , "data_type" : "string" , "comment" : "mv col" },
1169+ ]
1170+ result = adapter .get_columns_in_relation (mv_relation )
1171+ mock_get_columns .assert_called_with (adapter , mv_relation , "get_columns_comments" )
1172+ assert len (result ) == 1
1173+ assert result [0 ].column == "mv_col"
1174+ assert result [0 ].dtype == "string"
1175+ assert result [0 ].comment == "mv col"
0 commit comments