summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2018-09-04 10:19:43 +0200
committerErich Eckner <git@eckner.net>2018-09-04 10:19:43 +0200
commit114200a9c3b183cae9c9ea3bb2aacf8ae6a3cb3c (patch)
treecf38c5435b46dcbe0d6cde1978076a0ae4b1c6e1
parenta39e5b93ef6eae11c76d34e800eda64ce9e36bca (diff)
downloadbuilder-114200a9c3b183cae9c9ea3bb2aacf8ae6a3cb3c.tar.xz
lib/mysql-functions: mysql_run_query() if a query containing "LOAD DATA LOCAL INFILE ..." failed, save those files for furhter inspection
-rwxr-xr-xlib/mysql-functions28
1 files changed, 17 insertions, 11 deletions
diff --git a/lib/mysql-functions b/lib/mysql-functions
index e0715c3..d38169b 100755
--- a/lib/mysql-functions
+++ b/lib/mysql-functions
@@ -22,9 +22,6 @@ base64_encode_each() {
done
}
-# TODO: if a query containing 'LOAD DATA LOCAL INFILE ...' failed, save
-# those files for furhter inspection!
-
# mysql_run_query
# wrapper function to query mysql
mysql_run_query() {
@@ -34,6 +31,8 @@ mysql_run_query() {
local file_name_extra
local file
+ local files
+ loval number
file_name_extra=''
if [ "x$1" = 'xunimportant' ]; then
@@ -62,6 +61,18 @@ mysql_run_query() {
# a present query_file means there was an error
if [ -f "${query_stdin}" ]; then
>&2 printf 'I could not complete a mysql query!\n'
+ files="${query_stdin} ${query_stdout} ${query_stderr}$(
+ sed -n '
+ s/^.*INFILE "\(\S\+\)".*$/\1/
+ T
+ p
+ ' "${query_stdin}" | \
+ cat -n | \
+ while read -r number file; do
+ cp "${file}" "${query_stdin%.stdin}.infile.${number}"
+ printf ' %s' "${query_stdin%.stdin}.infile.${number}"
+ done
+ )"
if ${i_am_the_master}; then
if [ ! -s "${work_dir}/build-master-sanity" ] && \
[ -z "${file_name_extra}" ]; then
@@ -69,10 +80,7 @@ mysql_run_query() {
"${query_stdin##*/}" \
| irc_say
fi
- for file in \
- "${query_stdin}" \
- "${query_stdout}" \
- "${query_stderr}"; do
+ for file in ${files}; do
cp "${file}" "${webserver_directory}/mysql-queries/${file##*/}.txt"
chmod go+r "${webserver_directory}/mysql-queries/${file##*/}.txt"
done
@@ -81,10 +89,8 @@ mysql_run_query() {
echo 'A mysql query failed.' > \
"${work_dir}/build-master-sanity"
else
- rm -f \
- "${query_stdin}" \
- "${query_stdout}" \
- "${query_stderr}"
+ # shellcheck disable=SC2086
+ rm -f ${files}
fi
return 2
fi