0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQLBuilderの仕様を考える UPDATE仕様検討編

Posted at

目的

GolangのSQLBuilerを作ってみたくて、仕様を考える。
今回はUPDATE文の仕様を考える。

目指す形

ここではusersというTableに対応したUserというTableモデル構造体がある場合とする。
宣言としては、

CREATE TABLE users (
  id int,
  name varchar(10)
)

CREATE TABLE tokens (
  id int,
  user_id int REFERENCES users.id,
  token varchar(10)
)

を想定する

Update

パッケージ名は仮でpkとして

pk.Update(pk.Table("users")).Set("name", "test")

// UPDATE users set name = 'test'

とすることを考えている。

複数カラムに関しては

pk.Update(pk.Table("users")).Set("id", 2).Set("name", "test")

// UPDATE users set id = 2, name = 'test'

また、以下のような連想配列も許可する

um := map[string]interface{}
um["id"] = 2
um["name"] = "test"

pk.Update(pk.Table("users")).SetMap(um)

// UPDATE users set id = 2, name = 'test'

Where句の利用

利用としては以下を想定

pk.Update(pk.Table("users")).Set("name", "test").Where(pk.Eq("id", 1))

// UPDATE users set name = 'test' where id = 1

また、以下のようにも利用できるようにする。

user := pk.Table("users")

pk.Update(users).Set(user.Col("name"), "test").Where(pk.Eq(user.Col("id"), 1))

// UPDATE users set users.name = 'test' where users.id = 1

AS句が利用されても適応される想定はSELECT文の時と同じ

user := pk.Table("users").AS("u")

pk.Update(users).Set(user.Col("name"), "test").Where(pk.Eq(user.Col("id"), 1))

// UPDATE users AS u set u.name = 'test' where u.id = 1
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?