From 3e9746c84275346073a2b6b888518fdea71a3549 Mon Sep 17 00:00:00 2001 From: sjcsjc123 <1401189096@qq.com> Date: Tue, 11 Jul 2023 14:13:18 +0800 Subject: [PATCH] =?UTF-8?q?sql=E8=A7=A3=E6=9E=90=E5=BA=93=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E8=A7=A3=E6=9E=90update=E8=AF=AD=E5=8F=A5=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E8=A6=81=E6=94=B9=E5=8F=98=E7=9A=84=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=EF=BC=8C=E5=8F=AF=E9=80=9A=E8=BF=87=E5=AD=97=E6=AE=B5=E6=94=B9?= =?UTF-8?q?=E5=8F=98=E5=90=8E=E7=9A=84=E5=AD=97=E6=AE=B5=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E5=88=A4=E6=96=AD=EF=BC=8C=E6=9D=A5=E5=86=B3?= =?UTF-8?q?=E5=AE=9A=E8=A6=81=E4=B8=8D=E8=A6=81=E7=BB=A7=E7=BB=AD=E5=BE=80?= =?UTF-8?q?=E4=B8=8B=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 5 +++++ go.sum | 2 ++ main.go | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..79e96ce --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module sql_prase_demo + +go 1.20 + +require github.com/xwb1989/sqlparser v0.0.0-20180606152119-120387863bf2 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..6354a21 --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/xwb1989/sqlparser v0.0.0-20180606152119-120387863bf2 h1:zzrxE1FKn5ryBNl9eKOeqQ58Y/Qpo3Q9QNxKHX5uzzQ= +github.com/xwb1989/sqlparser v0.0.0-20180606152119-120387863bf2/go.mod h1:hzfGeIUDq/j97IG+FhNqkowIyEcD88LrW6fyU3K3WqY= diff --git a/main.go b/main.go new file mode 100644 index 0000000..c931f7f --- /dev/null +++ b/main.go @@ -0,0 +1,34 @@ +package main + +import ( + "fmt" + + "github.com/xwb1989/sqlparser" +) + +func main() { + sql := "UPDATE orders, inventory SET orders.status = 'Processed', inventory.stock = inventory.stock - orders.quantity WHERE orders.product_id = inventory.product_id AND orders.id = 1 AND inventory.stock >= orders.quantity" + + stmt, err := sqlparser.Parse(sql) + if err != nil { + fmt.Println("Parse error: ", err.Error()) + return + } + + update, ok := stmt.(*sqlparser.Update) + if !ok { + fmt.Println("Not an UPDATE statement") + return + } + + for _, table := range update.TableExprs { + switch t := table.(type) { + case *sqlparser.AliasedTableExpr: + fmt.Println("Table: ", sqlparser.String(t.Expr)) + } + } + + for _, expr := range update.Exprs { + fmt.Printf("Column: %s, New value: %s\n", expr.Name.Name, sqlparser.String(expr.Expr)) + } +} -- 2.45.2