Skip to content

Commit e25cb91

Browse files
authored
Escape single quotes in source/model column metadata uploads (#77)
Column names, data types, and aggregated column values were interpolated directly into single-quoted SQL literals without escaping, so an apostrophe in any source column name broke the on-run-end metadata INSERT with a SQL compilation error. Route these through the escape_singlequote helper so the fix stays correct across ANSI dialects and BigQuery.
1 parent d87c366 commit e25cb91

2 files changed

Lines changed: 7 additions & 6 deletions

File tree

macros/upload_columns.sql

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,8 @@
166166
(
167167
'{{ invocation_id }}' {# command_invocation_id #}
168168
, '{{ column.model.unique_id }}' {# node_id #}
169-
, '{{ column.name }}' {# column_name #}
170-
, '{{ column.data_type }}' {# data_type #}
169+
, '{{ adapter.dispatch('escape_singlequote', 'dbt_observability')(column.name) }}' {# column_name #}
170+
, '{{ adapter.dispatch('escape_singlequote', 'dbt_observability')(column.data_type) }}' {# data_type #}
171171
{% set column_meta = adapter.dispatch('escape_singlequote', 'dbt_observability')(tojson(column.meta)) %}
172172
{% if target.type == 'bigquery' %}
173173
, {{ '[]' if column.tags is not defined else tojson(column.tags) }} {# tags #}
@@ -189,7 +189,8 @@
189189
, {{ (results and results.columns[column.name ~ '_sum'] and results.columns[column.name ~ '_sum'].values()[0]) or 'null' }} {# row_sum #}
190190
, {{ (results and results.columns[column.name ~ '_stdev'] and results.columns[column.name ~ '_stdev'].values()[0]) or 'null' }} {# row_stdev #}
191191
, '{{ "Y" if isMetric else "N" }}' {# is_metric #}
192-
, '{{ (results and results.columns[column.name ~ '_values'] and results.columns[column.name ~ '_values'].values()[0]) or null }}' {# column_values #}
192+
{% set _colvals = (results and results.columns[column.name ~ '_values'] and results.columns[column.name ~ '_values'].values()[0]) or null %}
193+
, '{{ adapter.dispatch('escape_singlequote', 'dbt_observability')(_colvals) if _colvals else null }}' {# column_values #}
193194
)
194195
{%- if not loop.last %},{%- endif %}
195196
{% endfor %}

macros/upload_source_schema.sql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@
5959

6060
(
6161
'{{ invocation_id }}',
62-
'source.{{ column.source_name }}.{{ column.package_name }}.{{ column.table_name }}',
63-
'{{ column.name }}',
64-
'{{ column.data_type }}',
62+
'source.{{ adapter.dispatch('escape_singlequote', 'dbt_observability')(column.source_name) }}.{{ adapter.dispatch('escape_singlequote', 'dbt_observability')(column.package_name) }}.{{ adapter.dispatch('escape_singlequote', 'dbt_observability')(column.table_name) }}',
63+
'{{ adapter.dispatch('escape_singlequote', 'dbt_observability')(column.name) }}',
64+
'{{ adapter.dispatch('escape_singlequote', 'dbt_observability')(column.data_type) }}',
6565
null,
6666
null,
6767
null,

0 commit comments

Comments
 (0)