{"id":17746638,"url":"https://github.com/trivigy/squl","last_synced_at":"2025-03-14T21:32:55.350Z","repository":{"id":85591043,"uuid":"193395471","full_name":"trivigy/squl","owner":"trivigy","description":"SQL query builder library using Go structs","archived":false,"fork":false,"pushed_at":"2020-09-06T18:12:54.000Z","size":53,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-06-20T17:41:01.214Z","etag":null,"topics":["builder","database","query","sql"],"latest_commit_sha":null,"homepage":"","language":"Go","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/trivigy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2019-06-23T21:05:56.000Z","updated_at":"2022-05-09T13:01:38.000Z","dependencies_parsed_at":null,"dependency_job_id":"8cd7f8ba-9294-4f75-853c-7a80ee933666","html_url":"https://github.com/trivigy/squl","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trivigy%2Fsqul","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trivigy%2Fsqul/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trivigy%2Fsqul/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trivigy%2Fsqul/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trivigy","download_url":"https://codeload.github.com/trivigy/squl/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221511813,"owners_count":16835340,"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":["builder","database","query","sql"],"created_at":"2024-10-26T08:08:07.628Z","updated_at":"2024-10-26T08:08:08.173Z","avatar_url":"https://github.com/trivigy.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SQuL\n[![CircleCI](https://img.shields.io/circleci/project/github/trivigy/squl/master.svg?label=master\u0026logo=circleci)](https://circleci.com/gh/trivigy/workflows/squl)\n[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE.md)\n[![go.dev](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go\u0026logoColor=white)](https://pkg.go.dev/github.com/trivigy/squl)\n[![SemVer](https://img.shields.io/github/tag/trivigy/squl.svg?style=flat\u0026color=e36397\u0026label=release)](https://github.com/trivigy/squl/releases/latest)\n[![CodeCov](https://codecov.io/gh/trivigy/squl/branch/master/graph/badge.svg)](https://codecov.io/gh/trivigy/squl)\n\nUnlike all the other sql query builder tools that I have encountered out there \nin the golang ecosystem, this tool does not introduce a new custom designed \nfluent set of methods. Instead the goal is to provide golang structs which can \nbe then built into custom queries. It's almost like writing the queries by hand \nexcept that you construct them using golang structs.\n\n## Installation\nTo get the latest version of the library simply run:\n```bash\ngo get -u github.com/trivigy/squl\n```\n\n## Usage\nFor a whole lot more examples please make sure to explore the unittest files.\n\n### `INSERT`\n\u003e `INSERT INTO contacts (last_name,first_name) SELECT last_name,first_name FROM customers WHERE customer_id \u003e 4000`\n```\npackage main\n\nimport (\n    \"github.com/trivigy/squl\"\n)\n\nfunc main() {\n\tquery, args, err := squl.Build(\u0026squl.Insert{\n\t\tRelation: \u0026squl.RangeVar{\n\t\t\tName: \"contacts\",\n\t\t},\n\t\tColumns: \u0026squl.List{\n\t\t\t\u0026squl.ResTarget{\n\t\t\t\tValue: \u0026squl.ColumnRef{Fields: \"last_name\"},\n\t\t\t},\n\t\t\t\u0026squl.ResTarget{\n\t\t\t\tValue: \u0026squl.ColumnRef{Fields: \"first_name\"},\n\t\t\t},\n\t\t},\n\t\tSelect: \u0026squl.Select{\n\t\t\tTargets: \u0026squl.List{\n\t\t\t\t\u0026squl.ResTarget{\n\t\t\t\t\tValue: \u0026squl.ColumnRef{Fields: \"last_name\"},\n\t\t\t\t},\n\t\t\t\t\u0026squl.ResTarget{\n\t\t\t\t\tValue: \u0026squl.ColumnRef{Fields: \"first_name\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\tFrom: \u0026squl.RangeVar{\n\t\t\t\tName: \"customers\",\n\t\t\t},\n\t\t\tWhere: \u0026squl.Expr{\n\t\t\t\tType: squl.ExprTypeOp,\n\t\t\t\tName: \"\u003e\",\n\t\t\t\tLHS:  \u0026squl.ColumnRef{Fields: \"customer_id\"},\n\t\t\t\tRHS:  \u0026squl.Const{Value: 4000},\n\t\t\t},\n\t\t},\n\t})\n}\n```\n\n### `SELECT`\n\u003e `SELECT a.id,first_name,last_name FROM customer AS a,laptops AS l INNER JOIN payment ON payment.id = a.id LEFT JOIN people ON people.id = a.id RIGHT JOIN cars ON cars.id = a.id`\n```\npackage main\n\nimport (\n\t\"github.com/trivigy/squl\"\n)\n\nfunc main() {\n\tquery, args, err := squl.Build(\u0026squl.Select{\n        Targets: \u0026squl.List{\n            \u0026squl.ResTarget{\n                Value: \u0026squl.ColumnRef{Fields: []string{\"a\", \"id\"}},\n            },\n            \u0026squl.ResTarget{\n                Value: \u0026squl.ColumnRef{Fields: \"first_name\"},\n            },\n            \u0026squl.ResTarget{\n                Value: \u0026squl.ColumnRef{Fields: \"last_name\"},\n            },\n        },\n        From: \u0026squl.List{\n            \u0026squl.RangeVar{\n                Name:  \"customer\",\n                Alias: \"a\",\n            },\n            \u0026squl.JoinExpr{\n                Type: squl.JoinTypeRight,\n                LHS: \u0026squl.JoinExpr{\n                    Type: squl.JoinTypeLeft,\n                    LHS: \u0026squl.JoinExpr{\n                        Type: squl.JoinTypeInner,\n                        LHS: \u0026squl.RangeVar{\n                            Name:  \"laptops\",\n                            Alias: \"l\",\n                        },\n                        RHS: \u0026squl.RangeVar{Name: \"payment\"},\n                        Qualifiers: \u0026squl.Expr{\n                            Type: squl.ExprTypeOp,\n                            Name: \"=\",\n                            LHS:  \u0026squl.ColumnRef{Fields: []string{\"payment\", \"id\"}},\n                            RHS:  \u0026squl.ColumnRef{Fields: []string{\"a\", \"id\"}},\n                        },\n                    },\n                    RHS: \u0026squl.RangeVar{Name: \"people\"},\n                    Qualifiers: \u0026squl.Expr{\n                        Type: squl.ExprTypeOp,\n                        Name: \"=\",\n                        LHS:  \u0026squl.ColumnRef{Fields: []string{\"people\", \"id\"}},\n                        RHS:  \u0026squl.ColumnRef{Fields: []string{\"a\", \"id\"}},\n                    },\n                },\n                RHS: \u0026squl.RangeVar{Name: \"cars\"},\n                Qualifiers: \u0026squl.Expr{\n                    Type: squl.ExprTypeOp,\n                    Name: \"=\",\n                    LHS:  \u0026squl.ColumnRef{Fields: []string{\"cars\", \"id\"}},\n                    RHS:  \u0026squl.ColumnRef{Fields: []string{\"a\", \"id\"}},\n                },\n            },\n        },\n    })\n}\n```\n\n### `UPDATE`\n\u003e `UPDATE stock SET retail = stock_backup.retail FROM stock_backup WHERE stock.isbn = stock_backup.isbn`\n```\npackage main\n\nimport (\n    \"github.com/trivigy/squl\"\n)\n\nfunc main() {\n\tquery, args, err := squl.Build(\u0026squl.Update{\n        Relation: \u0026squl.RangeVar{\n            Name: \"stock\",\n        },\n        Targets: \u0026squl.ResTarget{\n            Name:  \u0026squl.ColumnRef{Fields: \"retail\"},\n            Value: \u0026squl.ColumnRef{Fields: []string{\"stock_backup\", \"retail\"}},\n        },\n        From: \u0026squl.RangeVar{\n            Name: \"stock_backup\",\n        },\n        Where: \u0026squl.Expr{\n            Type: squl.ExprTypeOp,\n            Name: \"=\",\n            LHS:  \u0026squl.ColumnRef{Fields: []string{\"stock\", \"isbn\"}},\n            RHS:  \u0026squl.ColumnRef{Fields: []string{\"stock_backup\", \"isbn\"}},\n        },\n    })\n}\n```\n\n### `DELETE`\n\u003e `DELETE FROM products WHERE obsoletion_date = 'today' RETURNING *`\n```\npackage main\n\nimport (\n    \"github.com/trivigy/squl\"\n)\n\nfunc main() {\n\tquery, args, err := squl.Build(\u0026squl.Delete{\n        Relation: \u0026squl.RangeVar{\n            Name: \"products\",\n        },\n        Where: \u0026squl.Expr{\n            Type: squl.ExprTypeOp,\n            Name: \"=\",\n            LHS:  \u0026squl.ColumnRef{Fields: \"obsoletion_date\"},\n            RHS:  \u0026squl.Const{Value: \"today\"},\n        },\n        Returning: \u0026squl.ResTarget{\n            Value: \u0026squl.ColumnRef{Fields: \"*\"},\n        },\n    })\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrivigy%2Fsqul","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrivigy%2Fsqul","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrivigy%2Fsqul/lists"}