sqlite-parquet-vtable/tests/test-queries

65 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
# For each files in tests/queries/*, mount that parquet file, run the query, and compare
# its output.
run_query() {
file=${1:?must provide testcase file}
query=${2:?must provide query to run}
basename=$(basename "$file")
cat <<EOF
.load parquet/libparquet
.testcase $basename
.bail on
CREATE VIRTUAL TABLE nulls1 USING parquet('$root/parquet-generator/99-rows-nulls-1.parquet');
CREATE VIRTUAL TABLE nulls2 USING parquet('$root/parquet-generator/99-rows-nulls-10.parquet');
CREATE VIRTUAL TABLE nulls3 USING parquet('$root/parquet-generator/99-rows-nulls-99.parquet');
CREATE VIRTUAL TABLE no_nulls1 USING parquet('$root/parquet-generator/99-rows-1.parquet');
CREATE VIRTUAL TABLE no_nulls2 USING parquet('$root/parquet-generator/99-rows-10.parquet');
CREATE VIRTUAL TABLE no_nulls3 USING parquet('$root/parquet-generator/99-rows-99.parquet');
$query;
.output
EOF
}
main() {
root=$(dirname "${BASH_SOURCE[0]}")/..
root=$(readlink -f "$root")
cd "$root"
find_cmd=(find tests/queries -type f -name '*.sql')
debug=0
if [ -n "${1:-""}" ]; then
find_cmd+=(-regex ".*$1.*")
debug=1
fi
"${find_cmd[@]}" | sort > testcases.txt
if [ ! -s testcases.txt ]; then
echo "no matching testcases found"
exit 1
fi
if [ ! -v NO_DEBUG ] && [ "$(cat testcases.txt | wc -l)" == "1" ]; then
set -x
gdb -ex run --args "$root"/sqlite/sqlite3 -init testcase-cmds.txt
else
while read -r file; do
echo "Testing: $file"
query=$(head -n1 "$file" | tail -n1)
tail -n+2 "$file" > testcase-expected.txt
run_query "$file" "$query" > testcase-cmds.txt
if ! "$root"/sqlite/sqlite3 -init testcase-cmds.txt < /dev/null > testcase-stdout.txt 2> testcase-stderr.txt; then
echo "...FAILED; check testcase-{out,err}.txt" >&2
exit 1
fi
diff testcase-out.txt testcase-expected.txt
done < testcases.txt
fi
}
main "$@"