{"id":13412183,"url":"https://github.com/go-the-way/sg","last_synced_at":"2026-01-29T02:48:27.986Z","repository":{"id":57626734,"uuid":"401622246","full_name":"go-the-way/sg","owner":"go-the-way","description":"sg: A simple standard SQL generator written in Go.","archived":false,"fork":false,"pushed_at":"2022-05-11T07:33:32.000Z","size":120,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-07-31T20:49:57.626Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/go-the-way.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":"2021-08-31T08:05:06.000Z","updated_at":"2024-05-10T21:55:52.000Z","dependencies_parsed_at":"2022-08-31T09:12:42.746Z","dependency_job_id":null,"html_url":"https://github.com/go-the-way/sg","commit_stats":null,"previous_names":["billcoding/sgen"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/go-the-way/sg","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-the-way%2Fsg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-the-way%2Fsg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-the-way%2Fsg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-the-way%2Fsg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/go-the-way","download_url":"https://codeload.github.com/go-the-way/sg/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-the-way%2Fsg/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28861398,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T22:56:21.783Z","status":"online","status_checked_at":"2026-01-29T02:00:06.714Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2024-07-30T20:01:21.878Z","updated_at":"2026-01-29T02:48:27.939Z","avatar_url":"https://github.com/go-the-way.png","language":"Go","funding_links":[],"categories":["Database","数据库","Generators","Data Integration Frameworks"],"sub_categories":["SQL Query Builders","SQL查询生成器"],"readme":"# sg\n\nsg: A simple standard SQL generator written in Go.\n\n[![CircleCI](https://circleci.com/gh/go-the-way/sg/tree/main.svg?style=shield)](https://circleci.com/gh/go-the-way/sg/tree/main)\n![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/go-the-way/sg)\n[![codecov](https://codecov.io/gh/go-the-way/sg/branch/main/graph/badge.svg?token=8MAR3J959H)](https://codecov.io/gh/go-the-way/sg)\n[![Go Report Card](https://goreportcard.com/badge/github.com/go-the-way/sg)](https://goreportcard.com/report/github.com/go-the-way/sg)\n[![GoDoc](https://pkg.go.dev/badge/github.com/go-the-way/sg?status.svg)](https://pkg.go.dev/github.com/go-the-way/sg?tab=doc)\n[![Mentioned in Awesome Go](https://awesome.re/mentioned-badge.svg)](https://github.com/avelino/awesome-go#sql-query-builders)\n\n## Overview\n- [Builders](#builders)\n  - [Insert](#insert-builder)\n  - [Delete](#delete-builder)\n  - [Update](#update-builder)\n  - [Select](#select-builder)\n- [Generators](#generators)\n  - [Create view](#create-view)\n  - [Create index](#create-index)\n  - [Create unique index](#create-unique-index)\n  - [Index definition](#index-definition)\n  - [Column definition](#column-definition)\n  - [Primary key](#primary-key)\n  - [Default](#default)\n  - [Delete](#delete)\n  - [Delete from](#delete-from)\n  - [Drop table](#drop-table)\n  - [Drop view](#drop-view)\n  - [Drop event](#drop-event)\n  - [Drop procedure](#drop-procedure)\n  - [Insert](#insert)\n  - [Values](#values)\n  - [Alias](#alias)\n  - [Arg](#arg)\n  - [From](#from)\n  - [Left join](#left-join)\n  - [Right join](#right-join)\n  - [Inner join](#inner-join)\n  - [On](#on)\n  - [Select](#select)\n  - [Order by](#order-by)\n  - [Asc](#asc)\n  - [Desc](#desc)\n  - [Asc group](#asc-group)\n  - [Desc group](#desc-group)\n  - [Group by](#group-by)\n  - [Having](#having)\n  - [Update](#update)\n  - [Set](#set)\n  - [Set eq](#set-eq)\n  - [Where](#where)\n  - [And](#and)\n  - [Or](#or)\n  - [Not](#not)\n  - [And group](#and-group)\n  - [Or group](#or-group)\n  - [Eq](#eq)\n  - [Not eq](#not-eq)\n  - [Gt](#gt)\n  - [Gt eq](#gt-eq)\n  - [Lt](#lt)\n  - [Lt eq](#lt-eq)\n  - [Like](#like)\n  - [Left like](#left-like)\n  - [Right like](#right-like)\n  - [Instr](#instr)\n  - [In](#in)\n  - [Between and](#between-and)\n\n###  Builders\n\n#### Insert Builder\n\n```go\npackage main\n\nimport (\n  \"fmt\"\n  . \"github.com/go-the-way/sg\"\n)\n\nfunc main() {\n  builder := InsertBuilder().\n    Table(T(\"table_person\")).\n    Column(C(\"col1\"), C(\"col2\")).\n    Value(Arg(100), Arg(200))\n  fmt.Println(builder.Build())\n  // Output:\n  // INSERT INTO table_person (col1, col2) VALUES (?, ?) [100 200]\n}\n```\n\n#### Delete Builder\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t. \"github.com/go-the-way/sg\"\n)\n\nfunc main() {\n\tbuilder := DeleteBuilder().\n\t\tDelete(T(\"t1.*\")).\n\t\tFrom(As(C(\"table1\"), \"t1\"), As(C(\"table2\"), \"t2\")).\n\t\tWhere(AndGroup(Gt(\"t1.col1\", 100), Gt(\"t2.col2\", 200)))\n\tfmt.Println(builder.Build())\n\t// Output:\n\t// DELETE t1.* FROM table1 AS t1, table2 AS t2 WHERE ((t1.col1 \u003e ?) AND (t2.col2 \u003e ?)) [100 200]\n}\n```\n\n#### Update Builder\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t. \"github.com/go-the-way/sg\"\n)\n\nfunc main() {\n\tbuilder := UpdateBuilder().\n\t\tUpdate(As(T(\"table_person\"), \"t\")).\n\t\tJoin(LeftJoin(As(T(\"table_a\"), \"ta\"), On(C(\"t.col1 = ta.col1\")))).\n\t\tSet(SetEq(\"col1\", 100), SetEq(\"col2\", 200)).\n\t\tWhere(AndGroup(Eq(\"a\", 100), Eq(\"b\", 200)))\n\tfmt.Println(builder.Build())\n\t// Output:\n\t// UPDATE table_person AS t LEFT JOIN table_a AS ta ON (t.col1 = ta.col1) SET col1 = ?, col2 = ? WHERE ((a = ?) AND (b = ?)) [100 200 100 200]\n}\n```\n\n#### Select Builder\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t. \"github.com/go-the-way/sg\"\n)\n\nfunc main() {\n\tbuilder := SelectBuilder().\n\t\tSelect(C(\"a\"), C(\"b\")).\n\t\tFrom(T(\"table_person\")).\n\t\tJoin(LeftJoin(As(T(\"table_a\"), \"ta\"), On(C(\"ta.col1 = tb.col1\")))).\n\t\tWhere(AndGroup(Eq(\"a\", 100), Eq(\"b\", 200))).\n\t\tOrderBy(DescGroup(C(\"a\"), C(\"b\")))\n\tfmt.Println(builder.Build())\n\t// Output:\n\t// SELECT a, b FROM table_person LEFT JOIN table_a AS ta ON (ta.col1 = tb.col1) WHERE ((a = ?) AND (b = ?)) ORDER BY a DESC, b DESC [100 200]\n}\n```\n\n###  Generators\n\n#### Create view\n\n```\nCreateView(P(\"vm_nowTime\"), P(`select NOW() AS t`)\n```\n\n#### Create index\n\n```\nCreateIndex(false, P(\"idx_name\"), T(\"table\"), C(\"name\"))\n```\n\n#### Create unique index\n\n```\nCreateUniqueIndex(P(\"idx_name\"), T(\"table\"), C(\"name\"))\n```\n\n#### Index definition\n\n```\nIndexDefinition(false, P(\"idx_name\"), C(\"name\"))\n```\n\n#### Column definition\n\n```\nColumnDefinition(P(\"id\"), P(\"int\"), false, true, false, \"\", \"ID\")\n```\n\n#### Primary key\n\n```\nPrimaryKey(C(\"id\"))\n```\n\n#### Default\n\n```\nDefault(C(\"1\"))\n```\n\n#### Delete\n\n```\nDelete([]Ge{}, T(\"table_a\"))\n```\n\n#### Delete from\n\n```\nDeleteFrom(T(\"table_a\"))\n```\n\n#### Drop table\n\n```\nDropTable(T(\"table\"))\n```\n\n#### Drop view\n\n```\nDropView(T(\"view\"))\n```\n\n#### Drop event\n\n```\nDropEvent(T(\"event\"))\n```\n\n#### Drop procedure\n\n```\nDropProcedure(T(\"procedure\"))\n```\n\n#### Insert\n\n```\nInsert(C(\"table\"), C(\"aa\"))\n```\n\n#### Values\n\n```\nValues(Arg(100))\n```\n\n#### Alias\n\n```\nAlias(C(\"hello\"), \"hello_lo\")\n```\n\n#### Arg\n\n```\nArg(100)\n```\n\n#### From\n\n```\nFrom(T(\"table_a\"), T(\"table_b\"))\n```\n\n#### Left join\n\n```\nLeftJoin(As(T(\"table_a\"), \"ta\"), On(C(\"ta.col1 = tb.col1\"))\n```\n\n#### Right join\n\n```\nRightJoin(As(T(\"table_a\"), \"ta\"), On(C(\"ta.col1 = tb.col1\"))\n```\n\n#### Inner join\n\n```\nInnerJoin(As(T(\"table_a\"), \"ta\"), On(C(\"ta.col1 = tb.col1\"))\n```\n\n#### On\n\n```\nOn(C(\"ta.col1 = tb.col1\"))\n```\n\n#### Select\n\n```\nSelect(C(\"t.col_a\"))\n```\n\n#### Order by\n\n```\nOrderBy(AscGroup(C(\"t.abc\"), C(\"t.xxx\")))\n```\n\n#### Asc\n\n```\nAsc(C(\"t.abc\"))\n```\n\n#### Desc\n\n```\nDesc(C(\"t.abc\"))\n```\n\n#### Asc group\n\n```\nAscGroup(C(\"t.abc\"), C(\"t.xxx\"))\n```\n\n#### Desc group\n\n```\nDescGroup(C(\"t.abc\"), C(\"t.xxx\"))\n```\n\n#### Group by\n\n```\nGroupBy(C(\"t.abc\"), C(\"t.xyz\"))\n```\n\n#### Having\n\n```\nHaving(AndGroup(Eq(\"a\", 1)))\n```\n\n#### Update\n\n```\nUpdate(T(\"table_a\"))\n```\n\n#### Set\n\n```\nSet(C(\"t.a = t.b\"))\n```\n\n#### Set eq\n\n```\nSetEq(\"col1\", 100)\n```\n\n#### Where\n\n```\nWhere(AndGroup(Eq(\"a\", 1)))\n```\n\n#### And\n\n```\nAnd(Eq(\"c\", 100))\n```\n\n#### Or\n\n```\nOr(Eq(\"c\", 100))\n```\n\n#### Not\n\n```\nNot(Eq(\"c\", 100))\n```\n\n#### And group\n\n```\nAndGroup(Gt(\"t1.col1\", 100), Gt(\"t2.col2\", 200))\n```\n\n#### Or group\n\n```\nOrGroup(Eq(\"a\", 1), Eq(\"b\", 100))\n```\n\n#### Eq\n\n```\nEq(\"a\", 1))\n```\n\n#### Not eq\n\n```\nNotEq(\"a\", 1))\n```\n\n#### Gt\n\n```\nGt(\"a\", 1))\n```\n\n#### Gt eq\n\n```\nLt(\"a\", 1))\n```\n\n#### Lt\n\n```\nLt(\"a\", 1))\n```\n\n#### Lt eq\n\n```\nLtEq(\"a\", 1))\n```\n\n#### Like\n\n```\nLike(\"a\", 1)\n```\n\n#### Left like\n\n```\nLeftLike(\"a\", 1)\n```\n\n#### Right like\n\n```\nRightLike(\"a\", 1)\n```\n\n#### Instr\n\n```\nInstr(\"a\", 1)\n```\n\n#### In\n\n```\nIn(\"a\", 1)\n```\n\n#### Between and\n\n```\nBetweenAnd(c, rune(100), rune(100))\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgo-the-way%2Fsg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgo-the-way%2Fsg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgo-the-way%2Fsg/lists"}