{"id":17914190,"url":"https://github.com/knadh/yesqlr","last_synced_at":"2025-08-15T08:33:20.661Z","repository":{"id":257812404,"uuid":"868447173","full_name":"knadh/yesqlr","owner":"knadh","description":"Parse SQL files with multiple named queries into a map for easy organisation and management of SQL queries. Port of goyesql.","archived":false,"fork":false,"pushed_at":"2024-10-31T13:03:02.000Z","size":19,"stargazers_count":25,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-11-29T07:10:22.631Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/knadh.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-06T12:12:29.000Z","updated_at":"2024-11-14T17:32:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"2f75d357-399e-4f06-bcc8-6c1dcd056464","html_url":"https://github.com/knadh/yesqlr","commit_stats":null,"previous_names":["knadh/yesqlr"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/knadh%2Fyesqlr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/knadh%2Fyesqlr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/knadh%2Fyesqlr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/knadh%2Fyesqlr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/knadh","download_url":"https://codeload.github.com/knadh/yesqlr/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229903296,"owners_count":18142031,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-10-28T19:56:41.619Z","updated_at":"2025-08-15T08:33:20.651Z","avatar_url":"https://github.com/knadh.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# yesqlr\n\nyesqlr is a Rust port of the [goyesql](https://github.com/knadh/goyesql) Go library.\nIt allows multiple SQL queries to be defined in an `.sql` file, each separated by a specially formatted `--name: $name`\naccompanying every query, which the library then parses to a HashMap\u003c$name, Query{}\u003e.\nIn addition, it also supports attaching arbitrary --$key: $value tags with every query.\nThis allows better organization and handling of SQL code in Rust projects.\n\n\n## Usage\n\nCreate a `.sql` file with multiple queries, each preceded by a `-- name: query_name` tag. Additional tags can be added as needed.\n\n```sql\n-- name: get_user\n-- raw: true\nSELECT * FROM users WHERE id = $1;\n\n-- name: create_user\nINSERT INTO users (name, email) VALUES ($1, $2);\n```\n\n\n### Parsing SQL files\n\nUse the `parse_file()` function to read and parse the `.sql` file.\n\n```rust\nuse yesqlr::parse_file;\n\nfn main() -\u003e Result\u003c(), yesqlr::ParseError\u003e {\n    let queries = parse_file(\"test.sql\").expect(\"error parsing file\");\n    let q = \u0026queries[\"simple\"].query;\n    println!(\"the query is: {}\", q);\n    Ok(())\n}\n```\n\n\n### Parsing bytes / Reader\n\nAlternatively, parse SQL queries from a byte stream using the `parse()` function.\n\n```rust\nuse yesqlr::parse;\n\nfn main() -\u003e Result\u003c(), yesqlr::ParseError\u003e {\n    let raq = b\"-- name: list_users\\nSELECT * FROM users;\";\n    let queries = parse(\u0026raq[..])?;\n    let list_users_query = \u0026queries[\"list_users\"].query;\n    println!(\"user query is: {}\", list_users_query);\n    Ok(())\n}\n```\n\n### Parsing into a struct\n\n```rust\nuse yesqlr::parse;\n\nfn main() -\u003e Result\u003c(), yesqlr::ParseError\u003e {\n    // Parse queries from bytes or file first.\n    let result = parse(\"--name: simple\\nSELECT * FROM simple;\\n--name: simple2\\nSELECT * FROM simple2;\").as_bytes();\n\n    // Define the struct. 'name' can be overridden.\n    #[derive(Default, ScanQueries)]\n    struct Q {\n        simple: Query,\n\n        #[name = \"simple2\"]\n        simple_two: Query,\n\n        another: Query,\n    }\n\n    let q: Q = Q::try_from(result.unwrap()).expect(\"Failed to convert queries to Q\");\n}\n```\n\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fknadh%2Fyesqlr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fknadh%2Fyesqlr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fknadh%2Fyesqlr/lists"}