From 0d6f75a0f178d44f161e0fffcfc4104c3126cf0f Mon Sep 17 00:00:00 2001 From: Taksh Date: Sun, 19 Jul 2026 11:57:28 +0300 Subject: [PATCH] fix: escape quotes in duckdb COPY file paths --- mimic-iii/buildmimic/duckdb/import_duckdb.sh | 4 +++- mimic-iv-ed/buildmimic/duckdb/import_duckdb.sh | 4 +++- mimic-iv-note/buildmimic/duckdb/import_duckdb.sh | 4 +++- mimic-iv/buildmimic/duckdb/import_duckdb.sh | 4 +++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/mimic-iii/buildmimic/duckdb/import_duckdb.sh b/mimic-iii/buildmimic/duckdb/import_duckdb.sh index 0a5c8ea1..a433e870 100755 --- a/mimic-iii/buildmimic/duckdb/import_duckdb.sh +++ b/mimic-iii/buildmimic/duckdb/import_duckdb.sh @@ -84,9 +84,11 @@ make_table_name () { # load data into database find "$MIMIC_DIR" -type f -regex '.*\.csv\(.gz\)*' | while IFS= read -r FILE; do make_table_name "$FILE" + # escape single quotes for SQL string literal + FILE_SQL=${FILE//\'/\'\'} echo "Loading $FILE .. \c" try duckdb "$OUTFILE" <<-EOSQL - COPY $TABLE_NAME FROM '$FILE' (HEADER, DELIM ',', QUOTE '"', ESCAPE '"'); + COPY $TABLE_NAME FROM '$FILE_SQL' (HEADER, DELIM ',', QUOTE '"', ESCAPE '"'); EOSQL echo "done!" done && echo "Successfully finished loading data into $OUTFILE." diff --git a/mimic-iv-ed/buildmimic/duckdb/import_duckdb.sh b/mimic-iv-ed/buildmimic/duckdb/import_duckdb.sh index b388a40e..346cae6c 100644 --- a/mimic-iv-ed/buildmimic/duckdb/import_duckdb.sh +++ b/mimic-iv-ed/buildmimic/duckdb/import_duckdb.sh @@ -95,6 +95,8 @@ make_table_name () { # load data into database find "$MIMIC_DIR" -type f -name '*.csv???' | sort | while IFS= read -r FILE; do make_table_name "$FILE" + # escape single quotes for SQL string literal + FILE_SQL=${FILE//\'/\'\'} # skip directories which we do not expect in mimic-iv-ed # avoids syntax errors if mimic-iv in the same dir @@ -104,7 +106,7 @@ find "$MIMIC_DIR" -type f -name '*.csv???' | sort | while IFS= read -r FILE; do esac echo "Loading $FILE .. " try duckdb "$OUTFILE" <<-EOSQL - COPY $TABLE_NAME FROM '$FILE' (HEADER, DELIM ',', QUOTE '"', ESCAPE '"'); + COPY $TABLE_NAME FROM '$FILE_SQL' (HEADER, DELIM ',', QUOTE '"', ESCAPE '"'); EOSQL echo "done!" done && echo "Successfully finished loading data into $OUTFILE." diff --git a/mimic-iv-note/buildmimic/duckdb/import_duckdb.sh b/mimic-iv-note/buildmimic/duckdb/import_duckdb.sh index 6b84b51c..4534558f 100644 --- a/mimic-iv-note/buildmimic/duckdb/import_duckdb.sh +++ b/mimic-iv-note/buildmimic/duckdb/import_duckdb.sh @@ -98,6 +98,8 @@ make_table_name () { # load data into database find "$MIMIC_DIR" -type f -name '*.csv???' | sort | while IFS= read -r FILE; do make_table_name "$FILE" + # escape single quotes for SQL string literal + FILE_SQL=${FILE//\'/\'\'} # skip directories which we do not expect in mimic-iv-note # avoids syntax errors if mimic-iv in the same dir @@ -107,7 +109,7 @@ find "$MIMIC_DIR" -type f -name '*.csv???' | sort | while IFS= read -r FILE; do esac echo "Loading $FILE .." OUTPUT=$(duckdb "$OUTFILE" 2>&1 <<-EOSQL - COPY $TABLE_NAME FROM '$FILE' (HEADER, DELIM ',', QUOTE '"', ESCAPE '"'); + COPY $TABLE_NAME FROM '$FILE_SQL' (HEADER, DELIM ',', QUOTE '"', ESCAPE '"'); EOSQL ) # If the table is missing in the DB, we emit a warning and continue. diff --git a/mimic-iv/buildmimic/duckdb/import_duckdb.sh b/mimic-iv/buildmimic/duckdb/import_duckdb.sh index c0d285db..7621e962 100755 --- a/mimic-iv/buildmimic/duckdb/import_duckdb.sh +++ b/mimic-iv/buildmimic/duckdb/import_duckdb.sh @@ -103,6 +103,8 @@ make_table_name () { # load data into database find "$MIMIC_DIR" -type f -name '*.csv???' | sort | while IFS= read -r FILE; do make_table_name "$FILE" + # escape single quotes for SQL string literal + FILE_SQL=${FILE//\'/\'\'} # skip directories which we do not expect in mimic-iv # avoids syntax errors if mimic-iv-ed in the same dir @@ -112,7 +114,7 @@ find "$MIMIC_DIR" -type f -name '*.csv???' | sort | while IFS= read -r FILE; do esac echo "Loading $FILE .. \c" OUTPUT=$(duckdb "$OUTFILE" 2>&1 <<-EOSQL - COPY $TABLE_NAME FROM '$FILE' (HEADER, DELIM ',', QUOTE '"', ESCAPE '"'); + COPY $TABLE_NAME FROM '$FILE_SQL' (HEADER, DELIM ',', QUOTE '"', ESCAPE '"'); EOSQL ) # If the table is missing in the DB, we emit a warning and continue.