Skip to content

Commit 4b8d429

Browse files
authored
Fix: iceberg tables have linebreaks that mess up column descriptions (#1677)
1 parent 89d36ac commit 4b8d429

File tree

6 files changed

+14
-5
lines changed

6 files changed

+14
-5
lines changed

sqlmesh/core/engine_adapter/base.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,7 @@ def columns(
740740
lambda t: not t[0].startswith("#"),
741741
describe_output,
742742
)
743+
if column_name and column_name.strip() and column_type and column_type.strip()
743744
}
744745

745746
@set_catalog()

sqlmesh/core/model/definition.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1779,7 +1779,6 @@ def _create_model(
17791779
physical_schema_override: t.Optional[t.Dict[str, str]] = None,
17801780
**kwargs: t.Any,
17811781
) -> Model:
1782-
17831782
_validate_model_fields(klass, {"name", *kwargs} - {"grain"}, path)
17841783

17851784
dialect = dialect or ""

sqlmesh/utils/pydantic.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ def _expression_encoder(e: exp.Expression) -> str:
7272

7373
class PydanticModel(pydantic.BaseModel):
7474
if PYDANTIC_MAJOR_VERSION >= 2:
75-
7675
model_config = pydantic.ConfigDict( # type: ignore
7776
arbitrary_types_allowed=True,
7877
extra="forbid", # type: ignore
@@ -239,7 +238,6 @@ def positive_int_validator(v: t.Any) -> int:
239238
SQLGlotBool = Annotated[bool, BeforeValidator(bool_validator)]
240239
SQLGlotPositiveInt = Annotated[int, BeforeValidator(positive_int_validator)]
241240
else:
242-
243241
T = t.TypeVar("T")
244242

245243
class PydanticTypeProxy(t.Generic[T]):

tests/core/engine_adapter/test_base.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,18 @@ def test_columns(make_mocked_engine_adapter: t.Callable):
134134
adapter.cursor.execute.assert_called_once_with('DESCRIBE "test_table"')
135135

136136

137+
def test_iceberg_corrupt(make_mocked_engine_adapter: t.Callable):
138+
adapter = make_mocked_engine_adapter(EngineAdapter)
139+
adapter.cursor.fetchall.return_value = [
140+
("id", "int"),
141+
(" ", ""),
142+
("", b"\n"),
143+
]
144+
assert adapter.columns("test_table") == {
145+
"id": exp.DataType.build("int"),
146+
}
147+
148+
137149
def test_table_exists(make_mocked_engine_adapter: t.Callable):
138150
adapter = make_mocked_engine_adapter(EngineAdapter)
139151
assert adapter.table_exists("test_table")

tests/core/test_scheduler.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def test_interval_params(scheduler: Scheduler, sushi_context_fixed_date: Context
3131
start_ds = "2022-01-01"
3232
end_ds = "2022-02-05"
3333

34-
assert compute_interval_params([orders, waiter_revenue], start=start_ds, end=end_ds,) == {
34+
assert compute_interval_params([orders, waiter_revenue], start=start_ds, end=end_ds) == {
3535
orders: [
3636
(to_datetime(start_ds), to_datetime("2022-01-31")),
3737
(to_datetime("2022-01-31"), to_datetime("2022-02-06")),

tests/core/test_snapshot.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,6 @@ def test_fingerprint_seed_model():
586586

587587

588588
def test_fingerprint_jinja_macros(model: Model):
589-
590589
model = SqlModel(
591590
**{
592591
**model.dict(),

0 commit comments

Comments
 (0)