Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
f397f55
Starting on auto generation
Dtenwolde May 7, 2026
2c150b3
Clean up inline_grammar.py
Dtenwolde May 7, 2026
973dd16
Add --write mode to write autogenerated transformer files
Dtenwolde May 7, 2026
6ac4e6b
Add generated subdirectory
Dtenwolde May 7, 2026
b62515f
Add generated header
Dtenwolde May 7, 2026
056c085
Add generated Internal wrapper, fix up written case
Dtenwolde May 7, 2026
270e9a3
Update variable name
Dtenwolde May 7, 2026
512b491
Handle choice rules as well
Dtenwolde May 7, 2026
794e79e
Move DotIdentifier to separate rule
Dtenwolde May 7, 2026
a5ba7cc
Auto generate move of use.gram
Dtenwolde May 7, 2026
ad7fcc8
Remove old TransfomrUseTargetCatalog
Dtenwolde May 7, 2026
8959074
Support List and Parens more explicitly
Dtenwolde May 7, 2026
faf9139
Auto generate parts of transform_transaction
Dtenwolde May 7, 2026
602886c
Update gen to write into class
Dtenwolde May 7, 2026
0c7c697
Add first version of generated file as well
Dtenwolde May 7, 2026
1e27d70
Move excluded rules to yml file
Dtenwolde May 7, 2026
42e4bbd
Auto generate more of transaction
Dtenwolde May 7, 2026
c9b4fa1
Format fix
Dtenwolde May 7, 2026
24f763f
Bump ci
Dtenwolde May 7, 2026
5ac4e26
Bump CI again
Dtenwolde May 8, 2026
3fa616e
Bump CI
Dtenwolde May 8, 2026
42f033d
Merge remote-tracking branch 'upstream/main' into autogen-transformer
Dtenwolde May 8, 2026
06471fb
Remove regex node
Dtenwolde May 8, 2026
336acca
remove negation node
Dtenwolde May 8, 2026
7193b72
Make * and + more like matcher
Dtenwolde May 8, 2026
fe0f62b
Dead code removal
Dtenwolde May 8, 2026
dab3435
Update docstring
Dtenwolde May 8, 2026
4862981
Add transformer generation to build_grammar.sh
Dtenwolde May 8, 2026
bb6c6ba
Move format-venv to .cache/ because build/ is often nuked
smvv May 8, 2026
57083d4
Ignore four more slow hash-zero tests
smvv May 8, 2026
10976d7
Group bwc test jobs by minor version, fix test-utils commit
smvv May 8, 2026
bd3a4b6
Clean up
Dtenwolde May 8, 2026
7b26dcb
Format fix
Dtenwolde May 8, 2026
d967531
Auto generate detach
Dtenwolde May 8, 2026
b937609
Merge remote-tracking branch 'upstream/main' into autogen-transformer
Dtenwolde May 8, 2026
9d42763
Keep stats at unsigned integer cast
dentiny May 9, 2026
6bf693a
fix test
dentiny May 9, 2026
d6ff89d
empty commit to trigger CI: rerun flaky test
dentiny May 10, 2026
d09782b
disallow cast between enums
dentiny May 10, 2026
01eda16
Keep stats at unsigned integer cast (#22537)
May 10, 2026
84e502c
Move verification projection to test config
Mytherin May 10, 2026
263a7b2
Split off debug_verify_column_bindings into a setting as well
Mytherin May 10, 2026
a974dd6
Add to Main.yml
Mytherin May 10, 2026
994592b
Fix bwc test jobs (#22529)
Mytherin May 11, 2026
0761edb
Auto generate export as well
Dtenwolde May 11, 2026
29fc453
Format fix
Dtenwolde May 11, 2026
a697a1c
Move `debug_verify_column_bindings` and `debug_verification_projectio…
May 11, 2026
c1841a3
Make parameters const & if possible
Dtenwolde May 11, 2026
b139b06
Format fix
Dtenwolde May 11, 2026
100399d
add define guard to fix tidy check
Dtenwolde May 11, 2026
77f2a6e
Move generated rules to a single file
Dtenwolde May 11, 2026
b57d8be
Auto register the generated rules
Dtenwolde May 11, 2026
4941c7a
Remove move if not needed
Dtenwolde May 11, 2026
637037d
Remove old declaration
Dtenwolde May 11, 2026
af35978
Add libduckdb_static.a to build artifact in CI
smvv May 11, 2026
a9936bb
Guard against empty subscript expression
Dtenwolde May 11, 2026
7bfa2fc
Add test on empty subscript
Dtenwolde May 11, 2026
d702be2
Change to empty check
Dtenwolde May 11, 2026
5230c02
Bump CI
Dtenwolde May 11, 2026
cfdc4fc
Add libatomic for missing __atomic_is_lock_free
smvv May 11, 2026
2711d2c
Add libduckdb_static.a to build artifact in CI (#22562)
May 12, 2026
118193c
Auto-generate part of transformer (Part 1/N) (#22555)
May 12, 2026
52eae10
Add libatomic for missing __atomic_is_lock_free (#22569)
May 12, 2026
6320f30
Fix fuzzer issue on empty subscript expression (#22566)
May 12, 2026
1c06de8
Add warning log to EvictionQueue::Purge when iterations > 10 or elaps…
krleonid May 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/config/extensions/test-utils.cmake
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
duckdb_extension_load(test_utils
GIT_URL https://github.com/duckdb/bwc-test-utils
GIT_TAG 7074208283523a3af8b5ddd1c890a03abdba3b9b
# Use the commit before "Update extensions" (that contains the binaries of
# the commit before that).
GIT_TAG 5b9c7334949c47cdf69ce11c151139c4c88aa7f8
# For local dev:
# SOURCE_DIR "${EXTENSION_CONFIG_BASE_DIR}/../../../../test-utils"
)
Expand Down
12 changes: 12 additions & 0 deletions .github/workflows/Main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1442,6 +1442,18 @@ jobs:
run: |
python3 scripts/ci/run_tests.py --test-config=test/configs/prefetch_all_parquet_files.json ./build/release/test/unittest

- name: test/configs/verification_projection.json
if: success() || failure()
shell: bash
run: |
python3 scripts/ci/run_tests.py --test-config=test/configs/verification_projection.json ./build/release/test/unittest

- name: test/configs/verify_column_bindings.json
if: success() || failure()
shell: bash
run: |
python3 scripts/ci/run_tests.py --test-config=test/configs/verify_column_bindings.json ./build/release/test/unittest

- name: test/configs/no_local_filesystem.json
if: success() || failure()
shell: bash
Expand Down
96 changes: 54 additions & 42 deletions .github/workflows/NightlyTests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -626,14 +626,23 @@ jobs:
run: make unittest_relassert T="--track-runtime 30 --batch-timeout 120 --test-config=test/configs/hash_zero.json"


bwc_build:
bwc-build:
name: Build DuckDB
runs-on: ubuntu-latest
outputs:
groups: ${{ steps.resolve.outputs.groups }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0

- name: Resolve versions
id: resolve
run: |
groups_json=$(python3 test/bwc/list_versions.py --groups-json)
echo "groups=${groups_json}" >> "$GITHUB_OUTPUT"
echo "Resolved BWC version groups: ${groups_json}"

- name: Install
run: python3 scripts/ci/retry.py -- make toolsci

Expand All @@ -653,28 +662,13 @@ jobs:
path: build/release/duckdb

bwc-test:
name: BWC Test (DuckDB ${{ matrix.old_duckdb_version }})
name: BWC Test (DuckDB ${{ matrix.series.group }})
runs-on: ubuntu-latest
needs: bwc_build
needs: bwc-build
strategy:
fail-fast: false
matrix:
old_duckdb_version:
- v1.1.0
- v1.1.1
- v1.1.2
- v1.1.3
- v1.2.0
- v1.2.1
- v1.2.2
- v1.3.0
- v1.3.1
- v1.3.2
- v1.4.0
- v1.4.1
- v1.4.2
- v1.4.3
- v1.4.4
series: ${{ fromJSON(needs.bwc-build.outputs.groups) }}
steps:
- uses: actions/checkout@v6
with:
Expand All @@ -696,46 +690,64 @@ jobs:
- name: Install Python dependencies
run: python3 scripts/ci/retry.py -- pip install duckdb git+https://github.com/duckdb/duckdb-sqllogictest-python.git

- name: Download BWC cache
if: ${{ vars.ENABLE_BWC_CACHE_DOWNLOAD == 'true' }}
- name: Run BWC series
run: |
VERSION=${{ matrix.old_duckdb_version }}
CACHE_ARCHIVE="runtime_${VERSION}.tar.gz"
versions='${{ toJson(matrix.series.versions) }}'
mapfile -t VERSION_LIST < <(python3 -c 'import json,sys; [print(v) for v in json.loads(sys.argv[1])]' "$versions")
FAILED=0
FAILED_VERSIONS=""
RUNTIME_DIR="duckdb_unittest_tempdir/bwc/runtime"
mkdir -p "${RUNTIME_DIR}"
mkdir -p duckdb_unittest_tempdir/bwc/cache

for VERSION in "${VERSION_LIST[@]}"; do
echo "============================================================"
echo "Running BWC for ${VERSION} (group: ${{ matrix.series.group }})"
echo "============================================================"

if [ "${{ vars.ENABLE_BWC_CACHE_DOWNLOAD }}" = "true" ]; then
CACHE_ARCHIVE="runtime_${VERSION}.tar.gz"
DOWNLOAD_URL="https://raw.githubusercontent.com/duckdb/bwc-test-utils/main/cache/${CACHE_ARCHIVE}"
HTTP_CODE=$(curl -sL -w '%{http_code}' -o "/tmp/${CACHE_ARCHIVE}" "${DOWNLOAD_URL}" || true)
if [ "${HTTP_CODE}" = "200" ]; then
tar xzf "/tmp/${CACHE_ARCHIVE}" -C "${RUNTIME_DIR}"
CACHED=$(find "${RUNTIME_DIR}/${VERSION}" -name "*.plan.bin" | wc -l)
echo "Extracted cache for ${VERSION}: ${CACHED} cached test plans"
else
echo "Failed to download cache for ${VERSION} (HTTP ${HTTP_CODE})"
FAILED=1
FAILED_VERSIONS="${FAILED_VERSIONS} ${VERSION}(cache)"
fi
fi

# Download the cache archive from test-utils repo
DOWNLOAD_URL="https://raw.githubusercontent.com/duckdb/bwc-test-utils/main/cache/${CACHE_ARCHIVE}"
HTTP_CODE=$(curl -sL -w '%{http_code}' -o "/tmp/${CACHE_ARCHIVE}" "${DOWNLOAD_URL}" || true)
if ! python3.11 test/bwc/runner.py --old_duckdb_version="${VERSION}"; then
FAILED=1
FAILED_VERSIONS="${FAILED_VERSIONS} ${VERSION}(tests)"
fi

if [ "${HTTP_CODE}" != "200" ]; then
echo "Failed to download cache for ${VERSION} (HTTP ${HTTP_CODE})"
if ! python3.11 test/bwc/export_cache.py --version "${VERSION}" --output-dir duckdb_unittest_tempdir/bwc/cache; then
FAILED=1
FAILED_VERSIONS="${FAILED_VERSIONS} ${VERSION}(export)"
fi
done

if [ "$FAILED" -ne 0 ]; then
echo "BWC series had failures:${FAILED_VERSIONS}"
exit 1
fi

tar xzf "/tmp/${CACHE_ARCHIVE}" -C "${RUNTIME_DIR}"
CACHED=$(find "${RUNTIME_DIR}/${VERSION}" -name "*.plan.bin" | wc -l)
echo "Extracted cache for ${VERSION}: ${CACHED} cached test plans"

- name: Run BWC tests
run: python3.11 test/bwc/runner.py --old_duckdb_version=${{ matrix.old_duckdb_version }}

- name: Export BWC cache
if: always()
run: python3.11 test/bwc/export_cache.py --version ${{ matrix.old_duckdb_version }} --output-dir duckdb_unittest_tempdir/bwc/cache

- name: Upload BWC cache
if: always()
uses: actions/upload-artifact@v7
with:
name: bwc-cache-${{ matrix.old_duckdb_version }}
path: duckdb_unittest_tempdir/bwc/cache/runtime_${{ matrix.old_duckdb_version }}.tar.gz
name: bwc-cache-${{ matrix.series.group }}
path: duckdb_unittest_tempdir/bwc/cache/runtime_*.tar.gz

- name: Upload test artifacts
if: always()
uses: actions/upload-artifact@v7
with:
name: bwc-test-results-${{ matrix.old_duckdb_version }}
name: bwc-test-results-${{ matrix.series.group }}
path: |
duckdb_unittest_tempdir/bwc/tests_summary_*.txt
duckdb_unittest_tempdir/bwc/reports/test_report_*.duckdb
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ MKFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
PROJ_DIR := $(dir $(MKFILE_PATH))

PYTHON ?= python3
FORMAT_VENV ?= build/format-venv
FORMAT_VENV ?= .cache/format-venv
FORMAT_PYTHON := $(FORMAT_VENV)/bin/python
FORMAT_SETUP_DEPS := format_venv

Expand Down
2 changes: 1 addition & 1 deletion extension/json/json_functions/json_serialize_plan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ static void JsonSerializePlanFunction(DataChunk &args, ExpressionState &state, V
}

ColumnBindingResolver resolver;
resolver.Verify(*plan);
resolver.Verify(context, *plan);
resolver.VisitOperator(*plan);
plan->ResolveOperatorTypes();

Expand Down
15 changes: 14 additions & 1 deletion scripts/parser/build_grammar.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,17 @@ fi
python "$GRAMMAR_FILE" --grammar-file
python "$GRAMMAR_FILE"

echo "Successfully build grammar files"
echo "Successfully built grammar files"

# Generate Internal transformer wrappers for auto-generatable grammar rules
GEN_TRANSFORMER_FILE="scripts/parser/gen_transformer_v2.py"
if [[ ! -f "$GEN_TRANSFORMER_FILE" ]]; then
echo "Error: $GEN_TRANSFORMER_FILE not found"
exit 1
fi

python "$GEN_TRANSFORMER_FILE" --write

echo "Successfully generated transformer wrappers"

make format-fix
Loading
Loading