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は自動更新とかできません。
モデル一個一個に必要です。
あー面倒臭い!!


だいぶん、プログラムに目処立ってきたんで、年内にデモサイト立ち上げたい。。。
まぁ来年のことじゃないから、鬼は笑わないでしょう。