Simon Willison
58dcedb510
Skip RETURNING tests if SQLite version does not support it
...
https://github.com/simonw/datasette/pull/2763#issuecomment-4588138314
2026-05-31 15:34:01 -07:00
Simon Willison
b4761bab53
Fixed an edge case with exactly 11 results returned
...
We select 11 when we return 10 just to detect if the results were truncated.
We were returning rowcount: 11 in this case when it should have been -1.
2026-05-31 14:14:49 -07:00
Simon Willison
c9e5115044
INSERT ... RETURNING shows rows in /-/execute-write
...
Screenshot: https://github.com/simonw/datasette/issues/2762#issuecomment-4588111545
2026-05-31 14:11:42 -07:00
Simon Willison
9b6f8ce2a7
Return rows/truncated from execute query if it used RETURNING
...
Refs https://github.com/simonw/datasette/issues/2762#issuecomment-4588066704
2026-05-31 14:02:27 -07:00
Simon Willison
1380b90a3f
Close execute_write returning cursor on fetch errors
...
Refs #2762
2026-05-31 12:30:11 -07:00
Simon Willison
1e81be99e4
Add configurable execute_write returning limit
...
Refs #2762
2026-05-31 12:30:11 -07:00
Simon Willison
44e17fa3db
Fix stored write returning rowcount message
...
Refs #2762
2026-05-31 12:30:11 -07:00
Simon Willison
bdfd9d5482
Fix for execute write returning issue #2762
2026-05-31 11:36:34 -07:00
Simon Willison
b7e99b3005
Fix remaining base_url issues
2026-05-30 22:46:45 -07:00
Simon Willison
932e198034
Fix double-prefixed export links with base_url
...
Use the router-stripped route_path when building request-derived export
URLs, so table, row, and query JSON/CSV links do not apply base_url twice.
Keep urls.path() behavior unchanged, and add coverage for both /prefix/
exports and a /data/ base_url with a data database.
Closes #2759
2026-05-30 22:41:07 -07:00
Simon Willison
3db5d1968d
Fix for /-/jump with base_url set, closes #2757
2026-05-30 12:24:28 -07:00
Simon Willison
9e377e8b90
Only show valid SQL write templates
...
Closes #2753
Demo: https://github.com/simonw/datasette/issues/2753#issuecomment-4570071413
2026-05-28 20:01:56 -07:00
Simon Willison
e5b6166fa3
Nicer UI around Execute Write SQL denied
...
Refs https://github.com/simonw/datasette/issues/2753#issuecomment-4569117665
2026-05-28 20:01:56 -07:00
Simon Willison
6a998610ee
datasette inspect now counts 10,000+ tables correctly ( #2752 )
...
Closes #2712
Refs https://github.com/simonw/datasette/pull/2721#issuecomment-4568966383
2026-05-28 15:52:51 -07:00
Simon Willison
b6e9b18990
datasette.yml can no longer set a query to private
...
Private means it has an owner, and the config does not let
you say who the owner is - plus configured queries should
not be possible to edit or delete in the UI so having an
owner makes even less sense.
You can still make configured queries visible to specific
people using regular view-query permissions.
2026-05-28 15:37:48 -07:00
Simon Willison
cd838daef4
Refactor tests a bit
2026-05-28 15:22:21 -07:00
Simon Willison
0b7c26c6c8
Refactored write decision tests
2026-05-28 12:09:20 -07:00
Simon Willison
17f45b884b
Clarify ignored write SQL operation tests
...
Split the combined ignored-operation decision test into separate internal-operation and select-statement cases.
Assert the decision reason for each case instead of checking the shared base class, so the tests document why those operations are ignored.
2026-05-28 12:06:57 -07:00
Simon Willison
51dab16149
Allow SQL functions in SQL write queries
...
Closes #2751
2026-05-28 10:22:28 -07:00
Simon Willison
8bd7e165f4
Refactored for code readability
2026-05-28 09:50:56 -07:00
Simon Willison
2785fd29de
Fix tests I just broke
2026-05-28 09:03:10 -07:00
Simon Willison
aaf00e9ec2
Refactor hidden_table_names() to use new implemenatation
...
Refs https://github.com/simonw/datasette/pull/2749#issuecomment-4565727978
2026-05-28 08:42:06 -07:00
Simon Willison
bcd989f4f8
Detect and disallow insert to virtual/shadow table
...
Refs https://github.com/simonw/datasette/pull/2749#issuecomment-4565727978
2026-05-28 08:36:59 -07:00
Simon Willison
11bddc8919
Deny VACUUM in user-authored SQL
...
Reject VACUUM explicitly during write-query permission analysis so arbitrary write SQL and untrusted stored write queries cannot run it, even when the actor has execute-write-sql.
Refs https://github.com/simonw/datasette/pull/2749#issuecomment-4559073803 (P3)
2026-05-27 17:09:27 -07:00
Simon Willison
951f5a9f30
Detect VACUUM in SQL analysis
...
Refs https://github.com/simonw/datasette/pull/2749#issuecomment-4559073803
2026-05-27 16:30:21 -07:00
Simon Willison
1932f8429f
Deny user-authored schema table reads in write SQL
...
Stop marking sqlite_master and sqlite_schema reads as internal as soon as the SQLite authorizer reports them. The later DDL-aware pass still treats schema catalog access as internal when it accompanies semantic CREATE, ALTER, or DROP operations.
This makes explicit catalog reads in write SQL fall through to the deny-by-default path as unsupported read schema operations, preventing queries from copying private table definitions into writable tables.
Refs https://github.com/simonw/datasette/pull/2749#issuecomment-4559073803
2026-05-27 16:14:56 -07:00
Simon Willison
03b2c66f63
Require full row mutation permissions for raw SQL
...
Raw SQL insert and update statements can have broader effects than their SQLite authorizer callbacks reveal. INSERT OR REPLACE and UPDATE OR REPLACE can delete conflicting rows while only surfacing insert or update operations.
Expand table insert and update operations to require insert-row, update-row, and delete-row together. Keep delete operations mapped to delete-row, and update the analysis UI/API to report and evaluate multiple required permissions for a single operation.
Refs https://github.com/simonw/datasette/pull/2749#issuecomment-4559083539
2026-05-27 15:17:22 -07:00
Simon Willison
86d0e7335f
Deny unsupported write SQL operations by default
...
Require view-table permission for reads discovered inside write SQL analysis, including INSERT ... SELECT and CREATE TABLE ... AS SELECT.
Record additional SQLite authorizer callbacks as Operation values so unsupported functions, savepoints, virtual table DDL, and unknown callbacks are denied unless explicitly handled.
2026-05-27 14:52:52 -07:00
Simon Willison
737ff03efb
Expanded analysis of SQL operations, refs #2748
2026-05-26 22:11:35 -07:00
Simon Willison
b1289a73f9
stored_queries.StoredQuery dataclass
2026-05-26 16:51:00 -07:00
Simon Willison
2fde692a3e
Disallow edits of dangerous decsription_html/on_success_message_sql
...
Refs https://github.com/simonw/datasette/pull/2741#issuecomment-4549891578
2026-05-26 16:34:48 -07:00
Simon Willison
ec438496a9
Get rid of the write/is_write dual properties
2026-05-26 16:31:07 -07:00
Simon Willison
56160e44fc
Trusted queries cannot be updated using the API
...
Refs https://github.com/simonw/datasette/pull/2741#issuecomment-4549620486
2026-05-26 16:25:33 -07:00
Simon Willison
3c29b002ca
Do not document unstable JSON APIs for stored queries
2026-05-26 16:07:53 -07:00
Simon Willison
d6de8e7520
Link to save query from /-/execute-write
2026-05-26 15:52:16 -07:00
Simon Willison
e89ffa0e06
Fixed broken test caused by apply_queries_config() rename
2026-05-26 15:37:21 -07:00
Simon Willison
e2864fc895
test_stored_queries.py
2026-05-26 15:21:09 -07:00
Simon Willison
02a1468f1b
Renamed canned queries to queries / stored queries in docs
...
And a few renames in code and YAML as well.
2026-05-26 15:17:51 -07:00
Simon Willison
b1029acc68
top_canned_query is now top_stored_query, closes #2747
2026-05-26 15:05:41 -07:00
Simon Willison
4bf1c4b065
Rename canned queries to queries/stored queries in docs
2026-05-26 14:54:35 -07:00
Simon Willison
0cadd07187
No need to document QueryCreateAnalyzeView
2026-05-26 14:53:31 -07:00
Simon Willison
24887004cf
Rename insert-query to store-query
...
Also queries/insert to queries/store
Refs https://github.com/simonw/datasette/pull/2741#issuecomment-4549103663
2026-05-26 14:51:59 -07:00
Simon Willison
ac6ee097dd
Disallow update/delete of private queries
...
If a user does not own a private query they cannot update
or delete it either, even if they have global update-query.
https://github.com/simonw/datasette/pull/2741/changes#r3306417463
2026-05-26 14:10:48 -07:00
Simon Willison
f7e9dbc27e
Tweaked design of create query page
2026-05-26 14:02:44 -07:00
Simon Willison
5dca2dc9be
Show query count on database page
2026-05-26 13:54:47 -07:00
Simon Willison
6033bf8e40
Merge branch 'main' into queries
2026-05-26 13:51:51 -07:00
Simon Willison
eb7c25c57c
Major redesign of create saved query UI
...
https://github.com/simonw/datasette/pull/2741#issuecomment-4548707129
2026-05-26 13:48:40 -07:00
Simon Willison
0fcaa5792b
Style query operations on create query
...
Made it consistent with the SQL write page.
2026-05-26 13:12:07 -07:00
Simon Willison
71c76e3853
Better faceting on /-/queries
...
Ref https://github.com/simonw/datasette/pull/2741#issuecomment-4548321815
2026-05-26 13:08:19 -07:00
Simon Willison
1ac4265ffd
Require permissions for untrusted stored query execution, refs #2735
2026-05-26 12:12:59 -07:00