1# forge lake query runs SQL over the lake and only reads: writes, COPY,2# ATTACH, settings and files outside the lake are refused, and the lake is3# the same afterwards.4. "$(dirname "$0")/../lib.sh"5user dami6repo dami/greet7fails_with 'no lake yet' forge lake query "SELECT 1"8clone dami dami/greet "$T/w/d"9at "$T/w/d" commit "first"10push_as dami "$T/w/d" origin main11at "$T/w/d" commit "second"12push_as dami "$T/w/d" origin main13ok forge lake14ok forge lake query "SELECT repo, count(*) AS pushes FROM events GROUP BY repo"15has "$T_LOG" '^repo +pushes$'16has "$T_LOG" '^dami/greet +2$'17has "$T_LOG" '^\(1 row\)$'18ok forge lake query "SELECT type FROM events LIMIT 1" --json19has "$T_LOG" '^\{"type":"push"\}$'20# Tables of the lake are there to read, and DuckLake's own functions.21ok forge lake query "SHOW TABLES"22has "$T_LOG" '^review_ends$'23ok forge lake query "SELECT count(*) > 0 AS ok FROM lake.snapshots()"24has "$T_LOG" '^true$'25sum=$(cksum <"$FORGE_ROOT/.forge/lake/catalog.sqlite")26fails_with 'only reads: INSERT' forge lake query "INSERT INTO events (type) VALUES ('x')"27fails_with 'only reads: DELETE' forge lake query "DELETE FROM events"28fails_with 'only reads: CREATE' forge lake query "CREATE TABLE x (a INT)"29fails_with 'only reads: COPY|Permission Error' forge lake query "COPY (SELECT 1) TO '$T/out.csv'"30fails_with 'only reads: ATTACH|Permission Error' forge lake query "ATTACH '$T/other.db' AS other"31fails_with 'only reads: SET' forge lake query "SET enable_external_access = true"32fails_with 'only reads: DELETE' forge lake query "SELECT 1; DELETE FROM events"33fails_with 'Permission Error' forge lake query "SELECT * FROM read_text('$FORGE_ROOT/.forge/keys')"34fails_with 'Permission Error' forge lake query "SELECT * FROM read_csv('$FORGE_ROOT/.forge/events.jsonl')"35fails_with 'only reads: SET' forge lake query "PRAGMA memory_limit = '1GB'"36missing "$T/out.csv"37missing "$T/other.db"38eq "$(cksum <"$FORGE_ROOT/.forge/lake/catalog.sqlite")" "$sum"39eq "$(lq "SELECT count(*) FROM events")" 2