From 478e9537000d9b8384579f9c010238d2ccecb6c4 Mon Sep 17 00:00:00 2001 From: Pablo Martin Date: Thu, 20 Mar 2025 12:37:47 +0100 Subject: [PATCH] add sqlfluff dep and script and config --- ci/.sqlfluff | 3 +++ ci/ci-requirements.txt | 1 + ci/sqlfluff-check.sh | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 ci/.sqlfluff create mode 100644 ci/ci-requirements.txt create mode 100644 ci/sqlfluff-check.sh diff --git a/ci/.sqlfluff b/ci/.sqlfluff new file mode 100644 index 0000000..bb8be3d --- /dev/null +++ b/ci/.sqlfluff @@ -0,0 +1,3 @@ +[sqlfluff] +large_file_skip_char_limit = 0 +large_file_skip_byte_limit = 0 \ No newline at end of file diff --git a/ci/ci-requirements.txt b/ci/ci-requirements.txt new file mode 100644 index 0000000..c147689 --- /dev/null +++ b/ci/ci-requirements.txt @@ -0,0 +1 @@ +sqlfluff==3.3.1 \ No newline at end of file diff --git a/ci/sqlfluff-check.sh b/ci/sqlfluff-check.sh new file mode 100644 index 0000000..e2e73db --- /dev/null +++ b/ci/sqlfluff-check.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# This script gets all the .sql files in a path and checks if they are valid +# as defined by the PostgreSQL dialect. The script exits with 1 if any single +# file has an issue. The script exits with 0 if all files are valid. + +# The script takes one arg, which is the directory where the .sql files are. + +# Ensure a directory is provided +if [ -z "$1" ]; then + echo "Usage: $0 " + exit 1 +fi + +SQL_DIR=$1 + +EXIT_CODE=0 + +echo "Starting sqlfluff checks on ${SQL_DIR}" + +while read -r sql_file; do + + echo "Parsing $sql_file" + # Run sqlfluff parse on the file and capture the output + OUTPUT=$(sqlfluff parse --dialect postgres "$sql_file" 2>&1) + + + # Check if the output contains a parsing error + if echo "$OUTPUT" | grep -q "==== parsing violations ===="; then + echo "Error in file: $sql_file" + echo "$OUTPUT" | awk '/==== parsing violations ====/{flag=1; next} /Complete/{flag=0} flag' + EXIT_CODE=1 + fi +done < <(find "$SQL_DIR" -type f -name "*.sql") + +echo "Exit code: ${EXIT_CODE}" +exit $EXIT_CODE \ No newline at end of file