読者です 読者をやめる 読者になる 読者になる

gormでNOTの中でOR/AND条件を書くとpqエラーが出るが動くっぽい

ざっくり以下の様な感じのコードを書くと

func main() {
    db := Database()// return *gorm.DB
    foo := Foo{}
    db.Not("a = ? AND b = ?", 'foo', 'bar').Debug().First(&foo)
}

なんかエラーが出てるっぽいけど実行されるっぽい。 psqlデバッグで出ているSQL文を直接たたくと結果は返ってくる。

[2016-07-01 00:03:48]  pq: syntax error at or near ")" 

[2016-07-01 00:03:48]  [5.44ms]  SELECT * FROM "foos"  WHERE "foos".deleted_at IS NULL AND (NOT (a = 'foo' AND b = 'bar')) ORDER BY "foos"."id" ASC LIMIT 1

ちなみに以下のような感じにANDとかを抜かして条件を1つにすると特にエラーは出ない

    db.Not("a = ?", 'foo').Debug().First(&foo)

気持ち悪いので時間があるときに調べたいということでメモ