{"id":20639272,"url":"https://github.com/marianogappa/sqlparser","last_synced_at":"2025-04-05T13:07:22.155Z","repository":{"id":44096344,"uuid":"184928524","full_name":"marianogappa/sqlparser","owner":"marianogappa","description":"Simple SQL parser meant for querying CSV files","archived":false,"fork":false,"pushed_at":"2021-08-02T19:50:49.000Z","size":36,"stargazers_count":422,"open_issues_count":0,"forks_count":77,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-03-29T12:07:19.423Z","etag":null,"topics":["csv","parser","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/marianogappa.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":"2019-05-04T18:04:19.000Z","updated_at":"2025-03-24T22:40:10.000Z","dependencies_parsed_at":"2022-09-02T06:10:46.104Z","dependency_job_id":null,"html_url":"https://github.com/marianogappa/sqlparser","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marianogappa%2Fsqlparser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marianogappa%2Fsqlparser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marianogappa%2Fsqlparser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marianogappa%2Fsqlparser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marianogappa","download_url":"https://codeload.github.com/marianogappa/sqlparser/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247339158,"owners_count":20923014,"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":["csv","parser","sql"],"created_at":"2024-11-16T15:23:17.076Z","updated_at":"2025-04-05T13:07:22.137Z","avatar_url":"https://github.com/marianogappa.png","language":"Go","readme":"# sqlparser - meant for querying csv files\n[![Build Status](https://img.shields.io/travis/marianogappa/sqlparser.svg)](https://travis-ci.org/marianogappa/sqlparser) [![Coverage Status](https://coveralls.io/repos/github/marianogappa/sqlparser/badge.svg?branch=master)](https://coveralls.io/github/MarianoGappa/sqlparser?branch=master) [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/marianogappa/sqlparser/master/LICENSE) [![Go Report Card](https://goreportcard.com/badge/github.com/marianogappa/sqlparser?style=flat-square)](https://goreportcard.com/report/github.com/marianogappa/sqlparser) [![GoDoc](https://godoc.org/github.com/marianogappa/sqlparser?status.svg)](https://godoc.org/github.com/marianogappa/sqlparser)\n### Usage\n\n```\npackage main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/marianogappa/sqlparser\"\n)\n\nfunc main() {\n\tquery, err := sqlparser.Parse(\"SELECT a, b, c FROM 'd' WHERE e = '1' AND f \u003e '2'\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tfmt.Printf(\"%+#v\", query)\n}\n```\n\n\n### Example: SELECT works\n\n```\nquery, err := sqlparser.Parse(`SELECT a FROM 'b'`)\n\nquery.Query {\n\tType: Select\n\tTableName: b\n\tConditions: []\n\tUpdates: map[]\n\tInserts: []\n\tFields: [a]\n\tAliases: map[]\n}\n```\n\n### Example: SELECT works with lowercase\n\n```\nquery, err := sqlparser.Parse(`select a fRoM 'b'`)\n\nquery.Query {\n\tType: Select\n\tTableName: b\n\tConditions: []\n\tUpdates: map[]\n\tInserts: []\n\tFields: [a]\n\tAliases: map[]\n}\n```\n\n### Example: SELECT many fields works\n\n```\nquery, err := sqlparser.Parse(`SELECT a, c, d FROM 'b'`)\n\nquery.Query {\n\tType: Select\n\tTableName: b\n\tConditions: []\n\tUpdates: map[]\n\tInserts: []\n\tFields: [a c d]\n\tAliases: map[]\n}\n```\n\n### Example: SELECT with alias works\n\n```\nquery, err := sqlparser.Parse(`SELECT a as z, b as y, c FROM 'b'`)\n\nquery.Query {\n\tType: Select\n\tTableName: b\n\tConditions: []\n\tUpdates: map[]\n\tInserts: []\n\tFields: [a b c]\n\tAliases: map[a:z b:y]\n}\n```\n\n### Example: SELECT with WHERE with = works\n\n```\nquery, err := sqlparser.Parse(`SELECT a, c, d FROM 'b' WHERE a = ''`)\n\nquery.Query {\n\tType: Select\n\tTableName: b\n\tConditions: [\n        {\n            Operand1: a,\n            Operand1IsField: true,\n            Operator: Eq,\n            Operand2: ,\n            Operand2IsField: false,\n        }]\n\tUpdates: map[]\n\tInserts: []\n\tFields: [a c d]\n\tAliases: map[]\n}\n```\n\n### Example: SELECT with WHERE with \u003c works\n\n```\nquery, err := sqlparser.Parse(`SELECT a, c, d FROM 'b' WHERE a \u003c '1'`)\n\nquery.Query {\n\tType: Select\n\tTableName: b\n\tConditions: [\n        {\n            Operand1: a,\n            Operand1IsField: true,\n            Operator: Lt,\n            Operand2: 1,\n            Operand2IsField: false,\n        }]\n\tUpdates: map[]\n\tInserts: []\n\tFields: [a c d]\n\tAliases: map[]\n}\n```\n\n### Example: SELECT with WHERE with \u003c= works\n\n```\nquery, err := sqlparser.Parse(`SELECT a, c, d FROM 'b' WHERE a \u003c= '1'`)\n\nquery.Query {\n\tType: Select\n\tTableName: b\n\tConditions: [\n        {\n            Operand1: a,\n            Operand1IsField: true,\n            Operator: Lte,\n            Operand2: 1,\n            Operand2IsField: false,\n        }]\n\tUpdates: map[]\n\tInserts: []\n\tFields: [a c d]\n\tAliases: map[]\n}\n```\n\n### Example: SELECT with WHERE with \u003e works\n\n```\nquery, err := sqlparser.Parse(`SELECT a, c, d FROM 'b' WHERE a \u003e '1'`)\n\nquery.Query {\n\tType: Select\n\tTableName: b\n\tConditions: [\n        {\n            Operand1: a,\n            Operand1IsField: true,\n            Operator: Gt,\n            Operand2: 1,\n            Operand2IsField: false,\n        }]\n\tUpdates: map[]\n\tInserts: []\n\tFields: [a c d]\n\tAliases: map[]\n}\n```\n\n### Example: SELECT with WHERE with \u003e= works\n\n```\nquery, err := sqlparser.Parse(`SELECT a, c, d FROM 'b' WHERE a \u003e= '1'`)\n\nquery.Query {\n\tType: Select\n\tTableName: b\n\tConditions: [\n        {\n            Operand1: a,\n            Operand1IsField: true,\n            Operator: Gte,\n            Operand2: 1,\n            Operand2IsField: false,\n        }]\n\tUpdates: map[]\n\tInserts: []\n\tFields: [a c d]\n\tAliases: map[]\n}\n```\n\n### Example: SELECT with WHERE with != works\n\n```\nquery, err := sqlparser.Parse(`SELECT a, c, d FROM 'b' WHERE a != '1'`)\n\nquery.Query {\n\tType: Select\n\tTableName: b\n\tConditions: [\n        {\n            Operand1: a,\n            Operand1IsField: true,\n            Operator: Ne,\n            Operand2: 1,\n            Operand2IsField: false,\n        }]\n\tUpdates: map[]\n\tInserts: []\n\tFields: [a c d]\n\tAliases: map[]\n}\n```\n\n### Example: SELECT with WHERE with != works (comparing field against another field)\n\n```\nquery, err := sqlparser.Parse(`SELECT a, c, d FROM 'b' WHERE a != b`)\n\nquery.Query {\n\tType: Select\n\tTableName: b\n\tConditions: [\n        {\n            Operand1: a,\n            Operand1IsField: true,\n            Operator: Ne,\n            Operand2: b,\n            Operand2IsField: true,\n        }]\n\tUpdates: map[]\n\tInserts: []\n\tFields: [a c d]\n\tAliases: map[]\n}\n```\n\n### Example: SELECT * works\n\n```\nquery, err := sqlparser.Parse(`SELECT * FROM 'b'`)\n\nquery.Query {\n\tType: Select\n\tTableName: b\n\tConditions: []\n\tUpdates: map[]\n\tInserts: []\n\tFields: [*]\n\tAliases: map[]\n}\n```\n\n### Example: SELECT a, * works\n\n```\nquery, err := sqlparser.Parse(`SELECT a, * FROM 'b'`)\n\nquery.Query {\n\tType: Select\n\tTableName: b\n\tConditions: []\n\tUpdates: map[]\n\tInserts: []\n\tFields: [a *]\n\tAliases: map[]\n}\n```\n\n### Example: SELECT with WHERE with two conditions using AND works\n\n```\nquery, err := sqlparser.Parse(`SELECT a, c, d FROM 'b' WHERE a != '1' AND b = '2'`)\n\nquery.Query {\n\tType: Select\n\tTableName: b\n\tConditions: [\n        {\n            Operand1: a,\n            Operand1IsField: true,\n            Operator: Ne,\n            Operand2: 1,\n            Operand2IsField: false,\n        }\n        {\n            Operand1: b,\n            Operand1IsField: true,\n            Operator: Eq,\n            Operand2: 2,\n            Operand2IsField: false,\n        }]\n\tUpdates: map[]\n\tInserts: []\n\tFields: [a c d]\n\tAliases: map[]\n}\n```\n\n### Example: UPDATE works\n\n```\nquery, err := sqlparser.Parse(`UPDATE 'a' SET b = 'hello' WHERE a = '1'`)\n\nquery.Query {\n\tType: Update\n\tTableName: a\n\tConditions: [\n        {\n            Operand1: a,\n            Operand1IsField: true,\n            Operator: Eq,\n            Operand2: 1,\n            Operand2IsField: false,\n        }]\n\tUpdates: map[b:hello]\n\tInserts: []\n\tFields: []\n\tAliases: map[]\n}\n```\n\n### Example: UPDATE works with simple quote inside\n\n```\nquery, err := sqlparser.Parse(`UPDATE 'a' SET b = 'hello\\'world' WHERE a = '1'`)\n\nquery.Query {\n\tType: Update\n\tTableName: a\n\tConditions: [\n        {\n            Operand1: a,\n            Operand1IsField: true,\n            Operator: Eq,\n            Operand2: 1,\n            Operand2IsField: false,\n        }]\n\tUpdates: map[b:hello\\'world]\n\tInserts: []\n\tFields: []\n\tAliases: map[]\n}\n```\n\n### Example: UPDATE with multiple SETs works\n\n```\nquery, err := sqlparser.Parse(`UPDATE 'a' SET b = 'hello', c = 'bye' WHERE a = '1'`)\n\nquery.Query {\n\tType: Update\n\tTableName: a\n\tConditions: [\n        {\n            Operand1: a,\n            Operand1IsField: true,\n            Operator: Eq,\n            Operand2: 1,\n            Operand2IsField: false,\n        }]\n\tUpdates: map[b:hello c:bye]\n\tInserts: []\n\tFields: []\n\tAliases: map[]\n}\n```\n\n### Example: UPDATE with multiple SETs and multiple conditions works\n\n```\nquery, err := sqlparser.Parse(`UPDATE 'a' SET b = 'hello', c = 'bye' WHERE a = '1' AND b = '789'`)\n\nquery.Query {\n\tType: Update\n\tTableName: a\n\tConditions: [\n        {\n            Operand1: a,\n            Operand1IsField: true,\n            Operator: Eq,\n            Operand2: 1,\n            Operand2IsField: false,\n        }\n        {\n            Operand1: b,\n            Operand1IsField: true,\n            Operator: Eq,\n            Operand2: 789,\n            Operand2IsField: false,\n        }]\n\tUpdates: map[b:hello c:bye]\n\tInserts: []\n\tFields: []\n\tAliases: map[]\n}\n```\n\n### Example: DELETE with WHERE works\n\n```\nquery, err := sqlparser.Parse(`DELETE FROM 'a' WHERE b = '1'`)\n\nquery.Query {\n\tType: Delete\n\tTableName: a\n\tConditions: [\n        {\n            Operand1: b,\n            Operand1IsField: true,\n            Operator: Eq,\n            Operand2: 1,\n            Operand2IsField: false,\n        }]\n\tUpdates: map[]\n\tInserts: []\n\tFields: []\n\tAliases: map[]\n}\n```\n\n### Example: INSERT works\n\n```\nquery, err := sqlparser.Parse(`INSERT INTO 'a' (b) VALUES ('1')`)\n\nquery.Query {\n\tType: Insert\n\tTableName: a\n\tConditions: []\n\tUpdates: map[]\n\tInserts: [[1]]\n\tFields: [b]\n\tAliases: map[]\n}\n```\n\n### Example: INSERT with multiple fields works\n\n```\nquery, err := sqlparser.Parse(`INSERT INTO 'a' (b,c,    d) VALUES ('1','2' ,  '3' )`)\n\nquery.Query {\n\tType: Insert\n\tTableName: a\n\tConditions: []\n\tUpdates: map[]\n\tInserts: [[1 2 3]]\n\tFields: [b c d]\n\tAliases: map[]\n}\n```\n\n### Example: INSERT with multiple fields and multiple values works\n\n```\nquery, err := sqlparser.Parse(`INSERT INTO 'a' (b,c,    d) VALUES ('1','2' ,  '3' ),('4','5' ,'6' )`)\n\nquery.Query {\n\tType: Insert\n\tTableName: a\n\tConditions: []\n\tUpdates: map[]\n\tInserts: [[1 2 3] [4 5 6]]\n\tFields: [b c d]\n\tAliases: map[]\n}\n```\n\n\n\n### Example: empty query fails\n\n```\nquery, err := sqlparser.Parse(``)\n\nquery type cannot be empty\n```\n\n### Example: SELECT without FROM fails\n\n```\nquery, err := sqlparser.Parse(`SELECT`)\n\ntable name cannot be empty\n```\n\n### Example: SELECT without fields fails\n\n```\nquery, err := sqlparser.Parse(`SELECT FROM 'a'`)\n\nat SELECT: expected field to SELECT\n```\n\n### Example: SELECT with comma and empty field fails\n\n```\nquery, err := sqlparser.Parse(`SELECT b, FROM 'a'`)\n\nat SELECT: expected field to SELECT\n```\n\n### Example: SELECT with empty WHERE fails\n\n```\nquery, err := sqlparser.Parse(`SELECT a, c, d FROM 'b' WHERE`)\n\nat WHERE: empty WHERE clause\n```\n\n### Example: SELECT with WHERE with only operand fails\n\n```\nquery, err := sqlparser.Parse(`SELECT a, c, d FROM 'b' WHERE a`)\n\nat WHERE: condition without operator\n```\n\n### Example: Empty UPDATE fails\n\n```\nquery, err := sqlparser.Parse(`UPDATE`)\n\ntable name cannot be empty\n```\n\n### Example: Incomplete UPDATE with table name fails\n\n```\nquery, err := sqlparser.Parse(`UPDATE 'a'`)\n\nat WHERE: WHERE clause is mandatory for UPDATE \u0026 DELETE\n```\n\n### Example: Incomplete UPDATE with table name and SET fails\n\n```\nquery, err := sqlparser.Parse(`UPDATE 'a' SET`)\n\nat WHERE: WHERE clause is mandatory for UPDATE \u0026 DELETE\n```\n\n### Example: Incomplete UPDATE with table name, SET with a field but no value and WHERE fails\n\n```\nquery, err := sqlparser.Parse(`UPDATE 'a' SET b WHERE`)\n\nat UPDATE: expected '='\n```\n\n### Example: Incomplete UPDATE with table name, SET with a field and = but no value and WHERE fails\n\n```\nquery, err := sqlparser.Parse(`UPDATE 'a' SET b = WHERE`)\n\nat UPDATE: expected quoted value\n```\n\n### Example: Incomplete UPDATE due to no WHERE clause fails\n\n```\nquery, err := sqlparser.Parse(`UPDATE 'a' SET b = 'hello' WHERE`)\n\nat WHERE: empty WHERE clause\n```\n\n### Example: Incomplete UPDATE due incomplete WHERE clause fails\n\n```\nquery, err := sqlparser.Parse(`UPDATE 'a' SET b = 'hello' WHERE a`)\n\nat WHERE: condition without operator\n```\n\n### Example: Empty DELETE fails\n\n```\nquery, err := sqlparser.Parse(`DELETE FROM`)\n\ntable name cannot be empty\n```\n\n### Example: DELETE without WHERE fails\n\n```\nquery, err := sqlparser.Parse(`DELETE FROM 'a'`)\n\nat WHERE: WHERE clause is mandatory for UPDATE \u0026 DELETE\n```\n\n### Example: DELETE with empty WHERE fails\n\n```\nquery, err := sqlparser.Parse(`DELETE FROM 'a' WHERE`)\n\nat WHERE: empty WHERE clause\n```\n\n### Example: DELETE with WHERE with field but no operator fails\n\n```\nquery, err := sqlparser.Parse(`DELETE FROM 'a' WHERE b`)\n\nat WHERE: condition without operator\n```\n\n### Example: Empty INSERT fails\n\n```\nquery, err := sqlparser.Parse(`INSERT INTO`)\n\ntable name cannot be empty\n```\n\n### Example: INSERT with no rows to insert fails\n\n```\nquery, err := sqlparser.Parse(`INSERT INTO 'a'`)\n\nat INSERT INTO: need at least one row to insert\n```\n\n### Example: INSERT with incomplete value section fails\n\n```\nquery, err := sqlparser.Parse(`INSERT INTO 'a' (`)\n\nat INSERT INTO: need at least one row to insert\n```\n\n### Example: INSERT with incomplete value section fails #2\n\n```\nquery, err := sqlparser.Parse(`INSERT INTO 'a' (b`)\n\nat INSERT INTO: need at least one row to insert\n```\n\n### Example: INSERT with incomplete value section fails #3\n\n```\nquery, err := sqlparser.Parse(`INSERT INTO 'a' (b)`)\n\nat INSERT INTO: need at least one row to insert\n```\n\n### Example: INSERT with incomplete value section fails #4\n\n```\nquery, err := sqlparser.Parse(`INSERT INTO 'a' (b) VALUES`)\n\nat INSERT INTO: need at least one row to insert\n```\n\n### Example: INSERT with incomplete row fails\n\n```\nquery, err := sqlparser.Parse(`INSERT INTO 'a' (b) VALUES (`)\n\nat INSERT INTO: value count doesn't match field count\n```\n\n### Example: INSERT * fails\n\n```\nquery, err := sqlparser.Parse(`INSERT INTO 'a' (*) VALUES ('1')`)\n\nat INSERT INTO: expected at least one field to insert\n```\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarianogappa%2Fsqlparser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarianogappa%2Fsqlparser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarianogappa%2Fsqlparser/lists"}