Skip to content

Commit e0580b8

Browse files
MisterWheatleyStuffbyYuki
authored andcommitted
Updated code and added unit test
Signed-off-by: Bjarke Enkelund <47357343+MisterWheatley@users.noreply.github.com>
1 parent 11a563b commit e0580b8

2 files changed

Lines changed: 48 additions & 4 deletions

File tree

sqlmesh/core/engine_adapter/databricks.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,4 @@ def columns(
431431

432432
result = self.cursor.fetchall(query)
433433

434-
return {
435-
row.column_name: exp.DataType.build(row.full_data_type, dialect=self.dialect)
436-
for row in result
437-
}
434+
return {row[0]: exp.DataType.build(row[1], dialect=self.dialect) for row in result}

tests/core/engine_adapter/test_databricks.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)