From 6f8db1bd1cb565ef95aa5cec0c2922719bd9ad64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kirill=20M=C3=BCller?= Date: Sun, 2 Nov 2025 02:35:56 +0100 Subject: [PATCH 1/2] feat: Explicit error with unsupported files --- src/duckdb_read_stat.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/duckdb_read_stat.c b/src/duckdb_read_stat.c index 500d33f..341835f 100644 --- a/src/duckdb_read_stat.c +++ b/src/duckdb_read_stat.c @@ -153,7 +153,7 @@ void duckdb_read_stat_bind(duckdb_bind_info info) data->file_format = DUCKDB_READ_STAT_FILE_FORMAT_SAS; error = readstat_parse_sas7bdat(parser, path, data); } - if (!strcmp(format, "xpt")) + else if (!strcmp(format, "xpt")) { data->file_format = DUCKDB_READ_STAT_FILE_FORMAT_SAS; error = readstat_parse_xport(parser, path, data); @@ -173,6 +173,20 @@ void duckdb_read_stat_bind(duckdb_bind_info info) data->file_format = DUCKDB_READ_STAT_FILE_FORMAT_STATA; error = readstat_parse_dta(parser, path, data); } + else if (!strcmp(format, "sas7cdat")) + { + duckdb_bind_set_error(info, "SAS catalog files (.sas7cdat) are not supported. Only SAS data files (.sas7bdat, .xpt) are supported."); + readstat_parser_free(parser); + duckdb_free(data); + return; + } + else + { + duckdb_bind_set_error(info, "Unsupported format parameter. Supported formats are: sas7bdat, xpt (SAS), sav, zsav, por (SPSS), and dta (Stata)."); + readstat_parser_free(parser); + duckdb_free(data); + return; + } } else if (duckdb_read_stat_ends_with(path, ".sas7bdat")) { @@ -199,6 +213,20 @@ void duckdb_read_stat_bind(duckdb_bind_info info) data->file_format = DUCKDB_READ_STAT_FILE_FORMAT_STATA; error = readstat_parse_dta(parser, path, data); } + else if (duckdb_read_stat_ends_with(path, ".sas7cdat")) + { + duckdb_bind_set_error(info, "SAS catalog files (.sas7cdat) are not supported. Only SAS data files (.sas7bdat, .xpt) are supported."); + readstat_parser_free(parser); + duckdb_free(data); + return; + } + else + { + duckdb_bind_set_error(info, "Unsupported file extension. Supported formats are: .sas7bdat, .xpt (SAS), .sav, .zsav, .por (SPSS), and .dta (Stata). Specify the format parameter explicitly if the file extension is incorrect."); + readstat_parser_free(parser); + duckdb_free(data); + return; + } if (error != READSTAT_OK) { From a0a07cb8fedb13b9a6777b16b37fe41ba2c1c40f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kirill=20M=C3=BCller?= Date: Sun, 9 Nov 2025 10:47:26 +0100 Subject: [PATCH 2/2] Fix extension --- src/duckdb_read_stat.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/duckdb_read_stat.c b/src/duckdb_read_stat.c index 341835f..82ed2e7 100644 --- a/src/duckdb_read_stat.c +++ b/src/duckdb_read_stat.c @@ -173,9 +173,9 @@ void duckdb_read_stat_bind(duckdb_bind_info info) data->file_format = DUCKDB_READ_STAT_FILE_FORMAT_STATA; error = readstat_parse_dta(parser, path, data); } - else if (!strcmp(format, "sas7cdat")) + else if (!strcmp(format, "sas7bcat")) { - duckdb_bind_set_error(info, "SAS catalog files (.sas7cdat) are not supported. Only SAS data files (.sas7bdat, .xpt) are supported."); + duckdb_bind_set_error(info, "SAS catalog files (.sas7bcat) are not supported. Only SAS data files (.sas7bdat, .xpt) are supported."); readstat_parser_free(parser); duckdb_free(data); return; @@ -213,9 +213,9 @@ void duckdb_read_stat_bind(duckdb_bind_info info) data->file_format = DUCKDB_READ_STAT_FILE_FORMAT_STATA; error = readstat_parse_dta(parser, path, data); } - else if (duckdb_read_stat_ends_with(path, ".sas7cdat")) + else if (duckdb_read_stat_ends_with(path, ".sas7bcat")) { - duckdb_bind_set_error(info, "SAS catalog files (.sas7cdat) are not supported. Only SAS data files (.sas7bdat, .xpt) are supported."); + duckdb_bind_set_error(info, "SAS catalog files (.sas7bcat) are not supported. Only SAS data files (.sas7bdat, .xpt) are supported."); readstat_parser_free(parser); duckdb_free(data); return;