Elizabeth Thompson
09c9410bdc
address review feedback: don't let a rollback failure escape retry contract
...
get_query's backoff decorator only retries on SqlLabException. If
db.session.rollback() itself raises (e.g. the connection is fully
dead), that new exception would replace the intended SqlLabException
and bypass the retry contract. Swallow rollback failures so the
original lookup error is always what gets raised.
Co-Authored-By: Claude <noreply@anthropic.com >
2026-08-02 18:18:31 +00:00
Elizabeth Thompson
7d5e8ad785
fix(sqllab): roll back session before retrying get_query after a broken transaction
...
`get_query` catches any exception from the ORM lookup and relies on the
`backoff` decorator to retry up to 5 times. When the underlying failure is
(or causes) a SQLAlchemy `PendingRollbackError` - e.g. a `PendingRollbackError`
chained under an `OperationalError`/`QueryCanceled` from a dropped connection
or statement timeout - the session is left in a broken state that SQLAlchemy
refuses to use again until `.rollback()` is called explicitly. Since the
session was never rolled back, every one of the 5 retries reused the same
poisoned session and failed identically, so the retry loop never had a
chance to recover from what may be a transient connection blip.
Roll back the session in the except block before raising `SqlLabException`
so each `backoff` retry starts from a clean session. The exception raised
and logged is unchanged.
Fixes SUPERSET-PYTHON-WDZ
Co-Authored-By: Claude <noreply@anthropic.com >
2026-08-01 15:12:43 +00:00
Evan Rusackas
b3757870cc
fix(sqllab): apply SQL_QUERY_MUTATOR in SQL Lab when MUTATE_AFTER_SPLIT is set ( #41127 )
...
Co-authored-by: Lucas Wolkersdorfer <lucas.wolkersdorfer@rise-world.com >
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-20 15:36:45 -07:00
Daniel Vaz Gaspar
2f71771b56
fix(sqllab): prevent corrupted query state from blocking SQL Lab access ( #40580 )
...
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
Co-authored-by: Joe Li <joe@preset.io >
2026-06-09 10:51:45 +01:00
Mehmet Salih Yavuz
8b0e63b58c
fix(rls): prevent double-apply when converting physical dataset to virtual ( #39725 )
...
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-14 18:05:48 +03:00
Beto Dealmeida
cb53745d43
feat: semantic layer extension ( #37815 )
2026-05-05 12:07:46 -04:00
Yuriy Krasilnikov
09e9c6a522
fix(embedded): prevent double RLS application in virtual datasets ( #37395 )
2026-03-12 14:12:59 +01:00
Beto Dealmeida
5d20dc57d7
feat(oauth2): add PKCE support for database OAuth2 authentication ( #37067 )
2026-01-30 23:28:10 -05:00
Enzo Martellucci
ea90d1f141
refactor(db-engine-specs): use standard OAuth 2.0 params in base class ( #37010 )
2026-01-09 17:44:32 +01:00
Maxime Beauchemin
cb27d5fe8d
chore: proper current_app.config proxy usage ( #34345 )
...
Co-authored-by: Claude <noreply@anthropic.com >
2025-07-31 19:27:42 -07:00
Beto Dealmeida
122bb68e5a
fix: subquery alias in RLS ( #34374 )
2025-07-28 22:58:15 -04:00
Maxime Beauchemin
3f8472ca7b
chore: move some rules from ruff -> pylint ( #34292 )
2025-07-24 09:40:49 -07:00
Beto Dealmeida
a26e1d822a
chore: remove sqlparse ( #33564 )
2025-06-04 19:31:41 -04:00
Beto Dealmeida
401ce56fa1
feat: use sqlglot to validate adhoc subquery ( #33560 )
2025-05-30 18:09:19 -04:00
Beto Dealmeida
cf315388f2
feat(sqllab): use sqlglot instead of sqlparse ( #33542 )
2025-05-30 17:08:19 -04:00
Beto Dealmeida
8de58b9848
feat: use sqlglot to set limit ( #33473 )
2025-05-27 15:20:02 -04:00
Beto Dealmeida
8013b32f0e
chore: remove is_select_query ( #33457 )
2025-05-22 20:53:22 -04:00
Maxime Beauchemin
e51b95ffa8
chore: enforce more ruff rules ( #31447 )
...
Co-authored-by: Elizabeth Thompson <eschutho@gmail.com >
2024-12-18 17:41:34 -08:00
anamitraadhikari
6ede3271ff
fix(SQL Lab): hang when result set size is too big ( #30522 )
...
Co-authored-by: aadhikari <aadhikari@apple.com >
Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com >
2024-10-14 18:03:28 -07:00
Beto Dealmeida
0415ed34ce
feat: allow create/update OAuth2 DB ( #30071 )
2024-09-03 19:22:38 -04:00
Beto Dealmeida
d5c0506faa
fix: OAuth2 in async DBs ( #29461 )
2024-07-02 21:12:07 -04:00
Beto Dealmeida
5660f8e554
feat: OAuth2 client initial work ( #29109 )
2024-06-09 22:11:18 -04:00
Maxime Beauchemin
cfc440c56c
feat: improve event logging for queries + refactor ( #27943 )
...
Co-authored-by: Beto Dealmeida <roberto@dealmeida.net >
2024-04-22 16:30:50 -07:00
Beto Dealmeida
9022f5c519
feat(SIP-85): OAuth2 for databases ( #27631 )
2024-04-02 22:05:33 -04:00
John Bodley
847ed3f5b0
refactor: Ensure Flask framework leverages the Flask-SQLAlchemy session (Phase II) ( #26909 )
2024-02-14 06:20:15 +13:00
John Bodley
7af82ae87d
refactor: Ensure Celery leverages the Flask-SQLAlchemy session ( #26186 )
2024-01-17 17:06:22 +13:00
Beto Dealmeida
2bd611916d
feat: safer insert RLS ( #20323 )
2023-11-08 22:52:25 -05:00
Rob Moore
4e94fc4cff
fix(sqllab): reinstate "Force trino client async execution" ( #25680 )
2023-10-19 16:38:13 +03:00
Ville Brofeldt
e56e0de458
fix: revert fix(sqllab): Force trino client async execution ( #24859 ) ( #25541 )
2023-10-13 11:58:20 +00:00
Rob Moore
cfda30c81a
fix(sqllab): Force trino client async execution ( #24859 )
2023-09-06 14:20:26 -07:00
Jesse Yang
7e836e9b04
test: autouse app_context in unit tests ( #20911 )
2022-08-02 15:42:50 -07:00
Daniel Vaz Gaspar
60eb1094a4
feat: add name, description and non null tables to RLS ( #20432 )
...
* feat: add name, description and non null tables to RLS
* add validation
* add and fix tests
* fix sqlite migration
* improve default value for name
2022-06-20 13:52:05 +01:00
John Bodley
449d08b25e
fix: Refactor SQL username logic ( #19914 )
...
Co-authored-by: John Bodley <john.bodley@airbnb.com >
2022-05-12 21:03:05 -07:00
Beto Dealmeida
f2881e5bbd
feat: RLS for SQL Lab ( #19999 )
...
* feat: RLS for SQL Lab
* Small fixes
* Pass username to security manager
* Update docstrings
* Add tests
* Remove type from docstring
2022-05-12 11:03:01 -07:00