Gorp SQLのINとPreInser , PreUpdate やってもやっても(´Д`)ハァ…編
問題片付いたら備忘録とかおもったらこの時間ですわ。
まったく、初物の苦しみは・・・楽しい(変態)。
Gorp SQL内にINを使うと sql: converting Exec argument #0's type: unsupported type map[string]interface {}, a map と怒られる
これ、そのままググると出てくる出てくる。
私のSQLはこうです
DELETE table WHERE id IN ( SELECT id FROM table WHERE condis = :x )
_, err := c.Txn.Exec(sql, map[string]interface{}{"x": condis01})
見たいな事してたんだけど、エラる。
そもそも、ググった先のSQLは、SELECT内のお話で、ワシとは関係ないと思えたんだけど・・・。
仕方なく、SQLに値を埋めてやってExecの第二引数消すと上手くいった_| ̄|○
これは・・・バグか・・・?
多分、どっかのリリースで改善するとおもふ。どっかのですよ。多分。
PreInsert PreUpdateは、当然AD HOCには適用されない。
https://github.com/coopernurse/gorp
// implement the PreInsert and PreUpdate hooks func (i *Invoice) PreInsert(s gorp.SqlExecutor) error { i.Created = time.Now().UnixNano() i.Updated = i.Created return nil } func (i *Invoice) PreUpdate(s gorp.SqlExecutor) error { i.Updated = time.Now().UnixNano() return nil } // You can use the SqlExecutor to cascade additional SQL // Take care to avoid cycles. gorp won't prevent them. // // Here's an example of a cascading delete // func (p *Person) PreDelete(s gorp.SqlExecutor) error { query := "delete from invoice_test where PersonId=?" err := s.Exec(query, p.Id); if err != nil { return err } return nil }
当たり前といえば当たり前だけど、同じソース内に書いているからと勝手に解釈したのが運の尽き。
気がつくまで右往左往。
ついでに、Railsライクにcreated_at, updated_atは自動更新とかできません。
モデル一個一個に必要です。
あー面倒臭い!!
だいぶん、プログラムに目処立ってきたんで、年内にデモサイト立ち上げたい。。。
まぁ来年のことじゃないから、鬼は笑わないでしょう。