mirror of
				https://github.com/cldellow/sqlite-parquet-vtable.git
				synced 2025-11-02 02:29:57 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			68 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.2 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 IF NOT EXISTS nulls1 USING parquet('$root/parquet-generator/99-rows-nulls-1.parquet');
 | 
						|
CREATE VIRTUAL TABLE IF NOT EXISTS nulls2 USING parquet('$root/parquet-generator/99-rows-nulls-10.parquet');
 | 
						|
CREATE VIRTUAL TABLE IF NOT EXISTS nulls3 USING parquet('$root/parquet-generator/99-rows-nulls-99.parquet');
 | 
						|
CREATE VIRTUAL TABLE IF NOT EXISTS no_nulls1 USING parquet('$root/parquet-generator/99-rows-1.parquet');
 | 
						|
CREATE VIRTUAL TABLE IF NOT EXISTS no_nulls2 USING parquet('$root/parquet-generator/99-rows-10.parquet');
 | 
						|
CREATE VIRTUAL TABLE IF NOT EXISTS 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
 | 
						|
 | 
						|
  cat "$root"/parquet-generator/*.sql > "$root"/testcase-bootstrap.sql
 | 
						|
  rm test.db
 | 
						|
  "$root"/sqlite/sqlite3 test.db -init "$root"/testcase-bootstrap.sql < /dev/null
 | 
						|
  if [ ! -v NO_DEBUG ] && [ "$(cat testcases.txt | wc -l)" == "1" ]; then
 | 
						|
    set -x
 | 
						|
    gdb -ex run --args "$root"/sqlite/sqlite3 test.db -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 test.db -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 "$@"
 |