{"id":32627921,"url":"https://github.com/wseaton/jinjasql-rs","last_synced_at":"2026-04-16T01:32:41.311Z","repository":{"id":44916734,"uuid":"444180441","full_name":"wseaton/jinjasql-rs","owner":"wseaton","description":"SQL Extension API for Rust MiniJinja templates","archived":false,"fork":false,"pushed_at":"2022-01-18T18:49:33.000Z","size":28,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-30T21:55:17.215Z","etag":null,"topics":["jinja","python","rust","sql"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wseaton.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-01-03T19:44:43.000Z","updated_at":"2022-01-05T04:05:51.000Z","dependencies_parsed_at":"2022-08-28T05:20:27.594Z","dependency_job_id":null,"html_url":"https://github.com/wseaton/jinjasql-rs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/wseaton/jinjasql-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wseaton%2Fjinjasql-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wseaton%2Fjinjasql-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wseaton%2Fjinjasql-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wseaton%2Fjinjasql-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wseaton","download_url":"https://codeload.github.com/wseaton/jinjasql-rs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wseaton%2Fjinjasql-rs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31867710,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"ssl_error","status_checked_at":"2026-04-15T15:24:39.138Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jinja","python","rust","sql"],"created_at":"2025-10-30T21:53:51.198Z","updated_at":"2026-04-16T01:32:41.300Z","avatar_url":"https://github.com/wseaton.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# jinjasql-rs\n\nWIP Rust port of the [JinjaSQL Python extension](https://github.com/sripathikrishnan/jinjasql) for Jinja2, powered by `minijinja`.\n\n## Usage\n\nThe `inclause` and `bind` filters are the main attraction here, as they allow us to keep track of the variables injected into the SQL statement and stash them for passing into the client at query time via params.\n\n```rust\nlet j = JinjaSqlBuilder::new().build();\nlet query_string = indoc! {\"\nselect{% for col in columns %}\n    {{ col }}{%- if not loop.last %},{% endif %}{% endfor %}\nfrom\n    (\n    select {% for col in columns %}\n    {{ col }}{%- if not loop.last %},{% endif %}{% endfor %} from {{ table_name | upper }}\n    where sku in {{ skus | inclause }}\n)a\nwhere \n    tag in {{ tags | reverse | inclause }}\n    and stock_date = {{ baz | bind }}\n\"};\n\nlet (res, params) = j\n    .render_query(\n        Some(query_string),\n        None,\n        context!(\n            columns =\u003e vec![\"apple\", \"lettuce\", \"lemon\"],\n            table_name =\u003e \"orders.stock_data\",\n            tags =\u003e vec![\"moldy\", \"sweet\", \"fresh\"],\n            skus =\u003e vec![\"EE-001\", \"EA-001\", \"BA-001\"],\n            baz =\u003e \"2022-01-01\"\n        ),\n    )\n    .unwrap();\n```\n\nreturns:\n\n```sql\nselect\n    apple,\n    lettuce,\n    lemon\nfrom\n    (\n    select \n    apple,\n    lettuce,\n    lemon from ORDERS.STOCK_DATA\n    where sku in ($1, $2, $3)\n)a\nwhere \n    tag in ($4, $5, $6)\n    and stock_date = $7\n\n-- [\"EE-001\", \"EA-001\", \"BA-001\", \"fresh\", \"sweet\", \"moldy\", \"2022-01-01\"]\n```\n\n## TODO\n\n- [x] alternate param styles\n- [ ] automatic `bind` filtering (depends on the ability to modify the parser stream, a-la `jinja2.Extension`)\n- [ ] benchmarks\n- [x] better state encapsulation\n  - solved for now until a solution for [mutable filter state](https://github.com/mitsuhiko/minijinja/issues/42) stabilizes\n- [ ] better tests\n- [ ] publish to crates.io\n  - [ ] docs\n- [ ] python bindings?\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwseaton%2Fjinjasql-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwseaton%2Fjinjasql-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwseaton%2Fjinjasql-rs/lists"}