Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
242 commits
Select commit Hold shift + click to select a range
efe5bec
data tables settings ui
diegoimbert Nov 14, 2025
39b93d0
Merge remote-tracking branch 'origin/main' into di/data-tables
diegoimbert Nov 14, 2025
22fda5b
Merge remote-tracking branch 'origin/main' into di/data-tables
diegoimbert Nov 21, 2025
6d4f650
install runed
diegoimbert Nov 21, 2025
4834b36
zod 4 fixes
diegoimbert Nov 21, 2025
042d403
use new toJSONSchema
diegoimbert Nov 21, 2025
fddff1b
Migrate ducklake catalogs to more generic custom instance databases
diegoimbert Nov 21, 2025
9ece307
fix compilation
diegoimbert Nov 21, 2025
371c275
Safety conversion for old duckdb ffi
diegoimbert Nov 21, 2025
7bb6c96
data tables settings
diegoimbert Nov 21, 2025
aabd194
ts client basis
diegoimbert Nov 24, 2025
bc04f80
inline run works
diegoimbert Nov 25, 2025
6e1588d
datatables work
diegoimbert Nov 25, 2025
4c7fac7
Revert "datatables work"
diegoimbert Nov 25, 2025
0e6ed2a
datatables work (without leaking pg credentials)
diegoimbert Nov 25, 2025
24bfa41
println
diegoimbert Nov 26, 2025
fe5c890
separate sqlUtils.ts
diegoimbert Nov 26, 2025
e91f9cd
nit
diegoimbert Nov 26, 2025
69e33f8
Separate custom instance db Select and Wizard components
diegoimbert Nov 26, 2025
9c75eeb
nit
diegoimbert Nov 26, 2025
14fd6c4
nit wording
diegoimbert Nov 26, 2025
77f84ec
add tags to custom instance dbs
diegoimbert Nov 26, 2025
20409a2
error when trying to use ducklake as datatable or opposite
diegoimbert Nov 26, 2025
808bbc7
show status in dropdown
diegoimbert Nov 26, 2025
1f66aea
data table instance setup works
diegoimbert Nov 26, 2025
fdd3eb3
sqk function for ducklake
diegoimbert Nov 26, 2025
4013124
factorize logic
diegoimbert Nov 26, 2025
c42bc39
fix temp reactivity
diegoimbert Nov 26, 2025
1dd002e
Data table assetexplore
diegoimbert Nov 26, 2025
0631d03
Migrate S3 permissions to modal
diegoimbert Nov 26, 2025
ff70cfb
Revert "Migrate S3 permissions to modal"
diegoimbert Nov 26, 2025
e298824
nit query -> fetch
diegoimbert Nov 27, 2025
005867a
Custom instance setup new look
diegoimbert Nov 27, 2025
cc92c15
run_language_executor separate fn
diegoimbert Nov 27, 2025
1ffccba
run_inline param
diegoimbert Nov 27, 2025
5897964
nit wording
diegoimbert Nov 27, 2025
7b3f3ac
Better typed client
diegoimbert Nov 27, 2025
7cc6964
Data tables display as assets in frontend
diegoimbert Nov 27, 2025
8e78627
asset db icon
diegoimbert Nov 27, 2025
d005e0f
nit
diegoimbert Nov 27, 2025
e63f39f
cleaner errors
diegoimbert Nov 27, 2025
711c5ac
nit
diegoimbert Nov 27, 2025
5d64ad3
Fix sed calls in mac
diegoimbert Nov 27, 2025
ced2117
run_inline_script_preview in python client
diegoimbert Nov 27, 2025
0af48fc
basic python datatable client
diegoimbert Nov 27, 2025
a58c093
datatable and datalake parser in python
diegoimbert Nov 27, 2025
6e70b8d
Merge branch 'main' into di/data-tables
diegoimbert Nov 27, 2025
1de0e7d
ducklake client python
diegoimbert Nov 27, 2025
76ce9d9
nit fix
diegoimbert Nov 28, 2025
f5ea5e2
Fix migration producing NULL instead of {} when no custom databases
diegoimbert Nov 28, 2025
f7fe83d
merge conflict fail
diegoimbert Nov 28, 2025
b65b7cd
python ducklake client arg fix
diegoimbert Nov 28, 2025
152abad
parse or infer sql types in ts client
diegoimbert Nov 28, 2025
29de8e3
ts asset parser, detect datatable & ducklake R/W
diegoimbert Nov 28, 2025
9f10251
fix sql repl for other read ops than select
diegoimbert Nov 28, 2025
4003cf0
export type SqlTemplateFunction
diegoimbert Dec 1, 2025
5439cd1
rename list_custom_instance_pg_databases
diegoimbert Dec 1, 2025
f3dea5d
typecheck datatable and ducklake name in Typescript
diegoimbert Dec 1, 2025
a893f9c
Fix typecheck datatable and ducklake in TS
diegoimbert Dec 1, 2025
7cbeb23
declare module overriding instead of extending
diegoimbert Dec 1, 2025
e957f2b
infer_sql_type in python client
diegoimbert Dec 1, 2025
e62794b
SqlQuery object in python
diegoimbert Dec 1, 2025
0e52c40
Merge remote-tracking branch 'origin/main' into di/data-tables
diegoimbert Dec 1, 2025
9ad0083
fix merge conflicts
diegoimbert Dec 1, 2025
1299145
update const_format
diegoimbert Dec 1, 2025
71d417b
CI fix
diegoimbert Dec 1, 2025
5ea3753
factor out to var_identifiers
diegoimbert Dec 1, 2025
9cc8edd
sqlx prepare
diegoimbert Dec 1, 2025
10f7b00
unnecessary security (admin is required)
diegoimbert Dec 1, 2025
f18085b
clearer comment
diegoimbert Dec 1, 2025
8349aaf
ee repo ref
diegoimbert Dec 1, 2025
f80fdeb
nit snake case
diegoimbert Dec 1, 2025
f866f48
claude step 1: detect var declarations
diegoimbert Dec 2, 2025
20ffb3a
move detect_sql_access_type to common mod
diegoimbert Dec 2, 2025
1e1f930
claude step 2: detect when saved vars are queried
diegoimbert Dec 2, 2025
cbd634b
Revert "claude step 2: detect when saved vars are queried"
diegoimbert Dec 2, 2025
7e98d4f
Revert "claude step 1: detect var declarations"
diegoimbert Dec 2, 2025
53feb92
remove ducklake/datatable and default
diegoimbert Dec 2, 2025
da0302a
detect data table assigns in var_identifiers
diegoimbert Dec 2, 2025
fe8dbc2
Python parser successfully infers R/W/RW from ducklake / datatable
diegoimbert Dec 2, 2025
01bd5ef
still register ducklake/datatable if not used as unknown R/W
diegoimbert Dec 2, 2025
06aec14
Go to settings button in Assets Dropdown on not found
diegoimbert Dec 2, 2025
813080f
nit
diegoimbert Dec 2, 2025
5fb3f03
sqlx prepare fail
diegoimbert Dec 2, 2025
8812016
Merge remote-tracking branch 'origin/main' into di/data-tables
diegoimbert Dec 2, 2025
f4b3986
manual fix, somehow sqlx prepare won't do it
diegoimbert Dec 2, 2025
4386b52
fix frontend ci
diegoimbert Dec 2, 2025
5fc5a95
ee repo ref
diegoimbert Dec 2, 2025
634bfd9
Merge remote-tracking branch 'origin/main' into di/data-tables
diegoimbert Dec 3, 2025
4b779b6
ducklake_user doesnt exist in unit tests
diegoimbert Dec 3, 2025
48293f8
nit fix
diegoimbert Dec 3, 2025
63c5d13
ui nit
diegoimbert Dec 3, 2025
6237d54
nit
diegoimbert Dec 3, 2025
aed78af
nit missing clone
diegoimbert Dec 3, 2025
0010df8
fork ducklakes and datatables
diegoimbert Dec 3, 2025
79ddaa2
fix surface hover bug
diegoimbert Dec 3, 2025
016002f
stupid mistake
diegoimbert Dec 3, 2025
5befaa3
better deeply reactive mutable derived
diegoimbert Dec 3, 2025
95340b5
Ducklake picker
diegoimbert Dec 3, 2025
e968cb6
Editor bar data tables
diegoimbert Dec 3, 2025
80270b7
DuckDB supports datatables
diegoimbert Dec 3, 2025
8ae9455
datatable in duckdb asset parser
diegoimbert Dec 3, 2025
88068b1
duckdb asset parser var_identifiers
diegoimbert Dec 3, 2025
4f604b3
Revert "duckdb asset parser var_identifiers"
diegoimbert Dec 3, 2025
62c4e73
sqlx prepare
diegoimbert Dec 3, 2025
ea8d493
Box pin in test_workflow_as_code to fix stack overflow
diegoimbert Dec 3, 2025
e936890
Merge branch 'main' into di/data-tables
diegoimbert Dec 3, 2025
60c5f40
stash
diegoimbert Dec 5, 2025
699331d
Merge remote-tracking branch 'origin/main' into di/new-duckdb-asset-p…
diegoimbert Dec 8, 2025
57bfacf
sql asset parser parses most s3 literals
diegoimbert Dec 8, 2025
e158c98
nit
diegoimbert Dec 8, 2025
9a5a1ef
Detect attach + handle returning RW
diegoimbert Dec 8, 2025
64bf7a4
detect assets used with dot notation
diegoimbert Dec 8, 2025
f2dc0e6
detect implicit access with USE dl; syntax
diegoimbert Dec 8, 2025
28b3be3
Add assets as unknown if var was never used
diegoimbert Dec 8, 2025
3a698bf
Support default ducklake/datatable main in parser
diegoimbert Dec 8, 2025
3489e24
ignore asset parsing errors in frontend (avoid flow layout shift)
diegoimbert Dec 8, 2025
a68f710
Merge remote-tracking branch 'origin/main' into di/new-duckdb-asset-p…
diegoimbert Dec 8, 2025
957e37e
super weird duplication (merge conflict ?)
diegoimbert Dec 9, 2025
a0ac932
nits
diegoimbert Dec 9, 2025
fe29234
fix duckdb parser detecting too much as asset when RW ctx is unknown
diegoimbert Dec 9, 2025
f823e7c
fix transparent assets btn
diegoimbert Dec 9, 2025
aedc05a
missing arg
diegoimbert Dec 9, 2025
50cf9b7
nit styling
diegoimbert Dec 9, 2025
4e88bf5
asset parser specific table parsing
diegoimbert Dec 9, 2025
110b935
fix resource specific table parsing
diegoimbert Dec 9, 2025
5d42910
More concise asset display in flows + better icons
diegoimbert Dec 9, 2025
eb856f9
fix assets page filtering out resources with added table
diegoimbert Dec 9, 2025
37cae14
Fix frontend to support specific table assets
diegoimbert Dec 9, 2025
16303e3
Merge branch 'main' into di/specific-asset-tables-2
diegoimbert Dec 9, 2025
81dd586
Open DB Manager to specific table
diegoimbert Dec 9, 2025
e244fec
Specific table parser in Python and TS + unit tests
diegoimbert Dec 10, 2025
06a5741
Fix UPDATE setting access to None
diegoimbert Dec 10, 2025
c1bd0ac
fix flow edge rendering on top of output picker
diegoimbert Dec 10, 2025
672704d
python parser fix var override bug
diegoimbert Dec 10, 2025
c64286b
Merge branch 'main' into di/specific-asset-tables-2
diegoimbert Dec 10, 2025
a6ec516
add ts test
diegoimbert Dec 10, 2025
f2b0c92
fix compilation
diegoimbert Dec 10, 2025
c9eee04
sqlx prepare
diegoimbert Dec 10, 2025
59215d3
Merge branch 'main' into di/specific-asset-tables-2
diegoimbert Dec 10, 2025
038606a
update parsers version
diegoimbert Dec 10, 2025
1b27be0
Merge branch 'main' into di/specific-asset-tables-2
diegoimbert Dec 10, 2025
a18dab4
Merge branch 'main' into di/specific-asset-tables-2
diegoimbert Dec 10, 2025
3bc9c35
Merge branch 'main' into di/specific-asset-tables-2
diegoimbert Dec 11, 2025
c694d49
fix missing schema key onDelete
diegoimbert Dec 11, 2025
61c4087
Grant permission to create schemas in custom instance databases
diegoimbert Dec 11, 2025
00daec1
Update pg query to return empty schemas
diegoimbert Dec 12, 2025
26b2578
Create schema
diegoimbert Dec 12, 2025
fda74cb
Select nits
diegoimbert Dec 12, 2025
a712658
Merge remote-tracking branch 'origin/main' into di/datatable-schemas
diegoimbert Dec 12, 2025
a27c86c
support schemas in sql parser
diegoimbert Dec 12, 2025
b2bb54f
ts parser handle schema with sql parser result
diegoimbert Dec 12, 2025
4f96299
detect .schema() syntax
diegoimbert Dec 12, 2025
08f6aba
detect schema syntax in python
diegoimbert Dec 12, 2025
f9a0d8c
support .schema() in ts and py SDK
diegoimbert Dec 12, 2025
edeee1c
open db manager to specific schema
diegoimbert Dec 12, 2025
5d83818
support reassignment in ts parser
diegoimbert Dec 12, 2025
a321bdd
nit better unitest
diegoimbert Dec 12, 2025
8312d22
: syntax in ts
diegoimbert Dec 12, 2025
3b11d43
datatable:schema syntax in python
diegoimbert Dec 12, 2025
7eb5be2
fix client py
diegoimbert Dec 12, 2025
b1267b2
nit select dropdown darkmode
diegoimbert Dec 12, 2025
afaf93b
object | null fetchOne
diegoimbert Dec 12, 2025
d82dba4
ts client nits
diegoimbert Dec 12, 2025
a168969
Merge remote-tracking branch 'origin/main' into di/datatable-schemas
diegoimbert Dec 12, 2025
de2e5ed
Merge remote-tracking branch 'origin/main' into di/datatable-schemas
diegoimbert Dec 15, 2025
8621f9c
parse_sql_client_name fn
diegoimbert Dec 15, 2025
447b8fc
getImportWmillTsStatement refactor in EditorBar
diegoimbert Dec 15, 2025
c7f2697
text to json() in python client
diegoimbert Dec 15, 2025
18b793c
update parser versions
diegoimbert Dec 15, 2025
b95b84f
pkg lock
diegoimbert Dec 15, 2025
469f4d8
Sql query details in TS asset parser
diegoimbert Dec 15, 2025
70b00dd
code transformation with type parameter in Editor
diegoimbert Dec 15, 2025
db3aa92
Custom Language Worker, code substition works !
diegoimbert Dec 15, 2025
62e799e
Error marker mapping works
diegoimbert Dec 15, 2025
5b144e3
hover info is correct
diegoimbert Dec 15, 2025
29e4414
completions work correctly
diegoimbert Dec 15, 2025
09f1419
other overrides
diegoimbert Dec 15, 2025
f7c9329
type inference kinda works
diegoimbert Dec 15, 2025
3ceba31
Position mapping tests
diegoimbert Dec 16, 2025
c28b490
refactor prepare_queries
diegoimbert Dec 16, 2025
5660414
Refactor PgDatabase to share common code
diegoimbert Dec 16, 2025
b17911a
Pgdatabase in prepare_queries
diegoimbert Dec 16, 2025
0dc78fe
TokioPgConnection refactor
diegoimbert Dec 16, 2025
495e111
refactor prepare_queries
diegoimbert Dec 16, 2025
ac592b6
type parameter to sql function
diegoimbert Dec 16, 2025
3e70f61
Fix deadlock
diegoimbert Dec 16, 2025
3306519
nit fix
diegoimbert Dec 16, 2025
317397f
Fix worker async call freezing because of svelte Proxy
diegoimbert Dec 16, 2025
a3af568
Force worker to recompute when we set queries
diegoimbert Dec 16, 2025
b1a2399
nit refactor
diegoimbert Dec 16, 2025
a765370
nits console logs
diegoimbert Dec 16, 2025
bf899c2
wait that ts worker initialize
diegoimbert Dec 16, 2025
752da3d
monaco change file version
diegoimbert Dec 16, 2025
dca5a23
update diagnostics
diegoimbert Dec 16, 2025
221d18f
Refactor for errors
diegoimbert Dec 16, 2025
148bb7c
Show SQL errors in Monaco
diegoimbert Dec 16, 2025
c90ee64
improve sdk
diegoimbert Dec 16, 2025
af48fcc
Merge remote-tracking branch 'origin/main' into di/typechecked-datata…
diegoimbert Dec 17, 2025
496ac07
Merge remote-tracking branch 'origin/main' into di/typechecked-datata…
diegoimbert Dec 17, 2025
161e006
cleaning refactor + MapResource + usePreparedAssetSqlQueries
diegoimbert Dec 18, 2025
68e2c27
Fixes
diegoimbert Dec 18, 2025
4359e6f
Fix error position mapping
diegoimbert Dec 18, 2025
8fee891
cache in typescript worker
diegoimbert Dec 18, 2025
4b5a51c
fix insert no values
diegoimbert Dec 18, 2025
a1cb8d7
don't inject type if already present
diegoimbert Dec 18, 2025
a5175ec
Support schema in prepare queries
diegoimbert Dec 18, 2025
bb100de
update parsers
diegoimbert Dec 18, 2025
29a11bf
ChangeOnDeepInequality
diegoimbert Dec 19, 2025
f48132c
inferAsset ScriptEditor usage refactor
diegoimbert Dec 19, 2025
47ae33a
sql query typecheck work in flow editor
diegoimbert Dec 19, 2025
228b5c7
Assets and SQL Query check in Raw App Inline Editor
diegoimbert Dec 19, 2025
95608a1
pkg lock
diegoimbert Dec 19, 2025
1592f2f
Fix DatatableSqlTemplateFunction nit
diegoimbert Dec 19, 2025
022e767
prepare query schema nit
diegoimbert Dec 19, 2025
4c7c328
duplicate diagnostics
diegoimbert Dec 19, 2025
1ad92cb
nit getScriptVersion mock
diegoimbert Dec 19, 2025
087a191
Reprepare queries when switching workspaces
diegoimbert Dec 19, 2025
03e0231
nit fix
diegoimbert Dec 19, 2025
b8fe67f
nit fix
diegoimbert Dec 19, 2025
53b6b53
fetch_one_scalar and execute in python client
diegoimbert Dec 19, 2025
23b679b
Merge branch 'main' into di/typechecked-datatables
diegoimbert Dec 19, 2025
0183333
limit pg_connections
diegoimbert Dec 19, 2025
24ce3bc
-- prepare flag in postgres
diegoimbert Dec 19, 2025
5ad2d81
skip serializing
diegoimbert Dec 19, 2025
5d7f80d
fix destructuring undefined
diegoimbert Dec 19, 2025
37713c1
Prepare queries in workers instead of backend
diegoimbert Dec 19, 2025
aa95c9a
nit
diegoimbert Dec 19, 2025
dfa4954
Execute search_path instructions normally
diegoimbert Dec 19, 2025
1d2d69c
nit fix
diegoimbert Dec 19, 2025
65ae496
Fix SET search_path issue in prepare
diegoimbert Dec 19, 2025
390abf6
only support preparing single-statement queries for now
diegoimbert Dec 19, 2025
2af9455
Merge remote-tracking branch 'origin/main' into di/typechecked-datata…
diegoimbert Dec 19, 2025
8721856
update parsers
diegoimbert Dec 19, 2025
2970f35
safety
diegoimbert Dec 19, 2025
a398c46
better remove_comments
diegoimbert Dec 19, 2025
a64d834
Fix getQueryStmtCountHeuristic
diegoimbert Dec 19, 2025
1ba1ce2
getQueryStmtCountHeuristic tests
diegoimbert Dec 19, 2025
9dbcd8b
comment out failing tests
diegoimbert Dec 19, 2025
f2a670e
Fix getQueryStmtCountHeuristic impl
diegoimbert Dec 19, 2025
10c0f8b
only datatable
diegoimbert Dec 19, 2025
d6dc702
Merge branch 'main' into di/typechecked-datatables
diegoimbert Dec 19, 2025
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
30 changes: 15 additions & 15 deletions backend/parsers/windmill-parser-py/src/asset_parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ use rustpython_parser::{ast::Suite, Parse};
use std::collections::HashMap;
use windmill_parser::asset_parser::{
asset_was_used, merge_assets, parse_asset_syntax, AssetKind, AssetUsageAccessType,
ParseAssetsResult,
ParseAssetsOutput, ParseAssetsResult,
};
use AssetUsageAccessType::*;

pub fn parse_assets(input: &str) -> anyhow::Result<Vec<ParseAssetsResult>> {
pub fn parse_assets(input: &str) -> anyhow::Result<ParseAssetsOutput> {
let ast = Suite::parse(input, "main.py")
.map_err(|e| anyhow::anyhow!("Error parsing code: {}", e.to_string()))?;

Expand All @@ -25,7 +25,7 @@ pub fn parse_assets(input: &str) -> anyhow::Result<Vec<ParseAssetsResult>> {
}
}

Ok(merge_assets(assets_finder.assets))
Ok(ParseAssetsOutput { assets: merge_assets(assets_finder.assets), ..Default::default() })
}

type VarAssetName = String;
Expand Down Expand Up @@ -216,7 +216,7 @@ impl AssetsFinder {
match windmill_parser_sql::parse_assets(&sql) {
Ok(mut sql_assets) => {
if let Some(schema_name) = schema {
for asset in &mut sql_assets {
for asset in &mut sql_assets.assets {
if asset.kind == *kind && asset.path.starts_with(path.as_str()) {
asset.path = format!(
"{}/{}.{}",
Expand All @@ -227,7 +227,7 @@ impl AssetsFinder {
}
}
}
self.assets.extend(sql_assets);
self.assets.extend(sql_assets.assets);
}
_ => {}
}
Expand Down Expand Up @@ -290,7 +290,7 @@ import wmill
def main():
wmill.load_s3_file('s3:///test.csv')
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|o| o.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand All @@ -308,7 +308,7 @@ import wmill
def main():
db = wmill.datatable()
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|o| o.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand All @@ -327,7 +327,7 @@ def main(x: int):
db = wmill.datatable('dt')
return db.query('SELECT * FROM friends WHERE age = $1', x).fetch()
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|o| o.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand All @@ -348,7 +348,7 @@ def main(x: int):
db.query('SELECT * FROM friends WHERE age = $1', x).fetch_one()
db.query('SELECT * FROM analytics').fetch()
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|o| o.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![
Expand Down Expand Up @@ -380,7 +380,7 @@ def main():
def g():
db = wmill.ducklake('another2')
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|o| o.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![
Expand Down Expand Up @@ -412,7 +412,7 @@ def main():
def g():
db = wmill.ducklake()
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|o| o.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![
Expand All @@ -438,7 +438,7 @@ def main(x: int):
db = wmill.datatable('dt:public')
return db.query('SELECT * FROM friends WHERE age = $1', x).fetch()
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|o| o.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand All @@ -457,7 +457,7 @@ def main():
db = wmill.ducklake('lake1:analytics')
return db.query('SELECT * FROM metrics').fetch()
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|o| o.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand All @@ -477,7 +477,7 @@ def main(x: int):
db.query('INSERT INTO users VALUES ($1)', x).fetch()
return db.query('SELECT * FROM users').fetch()
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|o| o.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand All @@ -495,7 +495,7 @@ import wmill
def main():
db = wmill.datatable('dt:public')
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|o| o.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand Down
36 changes: 18 additions & 18 deletions backend/parsers/windmill-parser-sql/src/asset_parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ use sqlparser::{
};
use windmill_parser::asset_parser::{
asset_was_used, merge_assets, parse_asset_syntax, AssetKind, AssetUsageAccessType,
ParseAssetsResult,
ParseAssetsOutput, ParseAssetsResult,
};
use AssetUsageAccessType::*;

pub fn parse_assets(input: &str) -> anyhow::Result<Vec<ParseAssetsResult>> {
pub fn parse_assets(input: &str) -> anyhow::Result<ParseAssetsOutput> {
let statements = Parser::parse_sql(&DuckDbDialect, input)?;

let mut collector = AssetCollector::new();
Expand All @@ -30,7 +30,7 @@ pub fn parse_assets(input: &str) -> anyhow::Result<Vec<ParseAssetsResult>> {
}
}

Ok(merge_assets(collector.assets))
Ok(ParseAssetsOutput { assets: merge_assets(collector.assets), ..Default::default() })
}

/// Visitor that collects S3 asset literals from SQL statements
Expand Down Expand Up @@ -402,7 +402,7 @@ mod tests {
SELECT * FROM read_parquet('s3:///a.parquet');
COPY (SELECT * FROM 's3://snd/b.parquet') TO 's3:///c.parquet';
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|s| s.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![
Expand Down Expand Up @@ -432,7 +432,7 @@ mod tests {
SELECT 2;
USE dl;
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|s| s.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand All @@ -449,7 +449,7 @@ mod tests {
ATTACH 'ducklake://my_dl' AS dl;
SELECT * FROM dl.table1;
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|s| s.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand All @@ -467,7 +467,7 @@ mod tests {
SELECT dt.read_bait FROM unrelated_table; -- dt. doesn't access the asset
INSERT INTO dt.table1 VALUES ('test');
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|s| s.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand All @@ -485,7 +485,7 @@ mod tests {
DETACH dl;
SELECT * FROM dl.table1;
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|s| s.assets);
assert_eq!(s.map_err(|e| e.to_string()), Ok(vec![]));
}

Expand All @@ -498,7 +498,7 @@ mod tests {
USE memory;
SELECT * FROM table1;
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|s| s.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand All @@ -515,7 +515,7 @@ mod tests {
ATTACH 'datatable' AS dl;
INSERT INTO dl.table1 VALUES ('test');
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|s| s.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand All @@ -537,7 +537,7 @@ mod tests {
INSERT INTO friends VALUES ($name, $age);
SELECT * FROM friends;
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|s| s.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand All @@ -555,7 +555,7 @@ mod tests {
ATTACH 'ducklake' AS dl; USE dl;
SELECT * FROM a_function('');
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|s| s.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand All @@ -573,7 +573,7 @@ mod tests {
USE dl;
DELETE FROM table1;
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|s| s.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand All @@ -591,7 +591,7 @@ mod tests {
USE dl;
UPDATE table1 SET id = NULL;
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|s| s.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand All @@ -609,7 +609,7 @@ mod tests {
USE db;
SELECT * FROM table1;
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|s| s.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand All @@ -626,7 +626,7 @@ mod tests {
ATTACH 'ducklake' AS dl;
UPDATE dl.table1 SET id = NULL;
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|s| s.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand All @@ -644,7 +644,7 @@ mod tests {
UPDATE dl.sch.table1 SET id = NULL;
SELECT * FROM dl.sch.table1;
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|s| s.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand All @@ -663,7 +663,7 @@ mod tests {
UPDATE sch.table1 SET id = NULL;
SELECT * FROM sch.table1;
"#;
let s = parse_assets(input);
let s = parse_assets(input).map(|s| s.assets);
assert_eq!(
s.map_err(|e| e.to_string()),
Ok(vec![ParseAssetsResult {
Expand Down
Loading