These are chat archives for scalikejdbc/ja

3rd
May 2016
Kazuhiro Sera
@seratch
May 03 2016 01:25

Any で受け取る SQL Interpolation の仕組みの上で静的チェックを行うための ParameterBinderFactory なので、さらにその上に ParameterBinder を バイパスして Any で通す仕組みを作るのはアレゲな気がしてきました。

がくぞさんの考えとして微妙であるというのは理解できますが、そういうことをしたいというニーズは一定数あると思っていて(少なくとも私はあってこれがないとリリースできない) 2.3 までと同様にそういう使い方もできるようにしたいので bypass する手段を入れたいです。

一般論として、私は注意しなくても理想的な使い方をできるようになっていればイレギュラーな使い方も許容する自由度を残したい考えです。先ほどの commit で「分かって使うならご自由に、かつ、初心者が間違って使わないような命名になっている」という改善が一定できているのではないかと。

私の中で「bypass するもの自体を入れない」という選択肢は(今の所)ないと思っていますので、入れるならせめてこうした方がいいというアイデアをいただければと。

Kazuhiro Sera
@seratch
May 03 2016 01:34
ちなみに bypass できるという話でいうと k が SQLSyntax の tuple を k -> v ではなく (k, v) でつくると ParameterBinderFactory を bypass できるので、今の実装において抜け道が完全に存在しないわけではなかったりします。
Manabu Nakamura
@gakuzzzz
May 03 2016 03:12

あれ? FactoryGirl の奴とか 全部 k -> value を k -> AsIsParameterBinder(value) にすればいけませんか?

最初、がくぞさんのやっているものに近かったですが、これでは私が書いているニーズは満たせないです。

をもう少し詳しく。

in がうまくいかないですかね?

Kazuhiro Sera
@seratch
May 03 2016 03:14

k -> AsIsParameterBinder(value)

これは ParameterBinderFactory[ParmaeterBinder] を要求してくるのとオーバーヘッドも増えるし、ちょっと嫌だなと。今は (k, v) で回避する方向です。

Manabu Nakamura
@gakuzzzz
May 03 2016 03:15
いや、僕の奴だと要求されないはずです
自分の奴を publish local したいけど mapper\SbtPlugin が謎のエラーを出していて publish できない......
Kazuhiro Sera
@seratch
May 03 2016 03:17

最初、がくぞさんのやっているものに近かったですが、これでは私が書いているニーズは満たせないです。
をもう少し詳しく。

ParameterBinderWithValue[ParameterBinder] が必要になる場面があって、そうすると ParameterBinder がネストしている、かつ、トップレベルは bypass じゃないんだけど nest した内部に bypass があってその場合はトップレベルで普通の ParameterBinder でないことを認識しないと ParameterBinder を値として JDBC まで突っ込んでしまってハマります。この事象を解決する案として私は ParameterBinder#bypass: Boolean を提案しています。

Manabu Nakamura
@gakuzzzz
May 03 2016 03:18
僕の奴、そもそもネストしたParameterBinderが必要になるケースが起きないようになってるはずなんですけど......
Kazuhiro Sera
@seratch
May 03 2016 03:18
def -> (value: ParameterBinder): (SQLSyntax, ParameterBinder) = (this, value) ならという感じ?
Manabu Nakamura
@gakuzzzz
May 03 2016 03:19
と、 AsIsParameterBinder.apply ですね
Kazuhiro Sera
@seratch
May 03 2016 03:19
sql.eq とかあらゆるところで bypass をスムーズにしたいんですよね。今の QueryInterfaceSpec は十分なケースをカバーしてないです。
Manabu Nakamura
@gakuzzzz
May 03 2016 03:19
ふむ、、、
Kazuhiro Sera
@seratch
May 03 2016 03:20
ただ、がくぞさんの実装をベースに再トライはしてみます。
実際に試してはいないので。
Manabu Nakamura
@gakuzzzz
May 03 2016 03:21
こちらも skinny側いじってみます
Kazuhiro Sera
@seratch
May 03 2016 03:21
あと、確かに sql.in で Seq[Any] とかも扱ってるんでそういうのもつらみが。
Manabu Nakamura
@gakuzzzz
May 03 2016 03:22
in は確かに僕の奴だけじゃダメそうな気がしますね......。
Kazuhiro Sera
@seratch
May 03 2016 03:22
がくぞさんの実装で基本的に起こり得なくなったとしても ParameterBinder がネストしてしまうことを完全にガードできないと思ってるんですよね。
Manabu Nakamura
@gakuzzzz
May 03 2016 03:22
えっ
明示的に作らない限り起きないのでは?
Kazuhiro Sera
@seratch
May 03 2016 03:23
あ、明示的に作ったらということです。
Manabu Nakamura
@gakuzzzz
May 03 2016 03:23
なるほど
Kazuhiro Sera
@seratch
May 03 2016 03:23
明示的につくらせないようにしてないので。
Manabu Nakamura
@gakuzzzz
May 03 2016 03:32
sqls.eq は -> と同じように overload すればいいかもしれません。 in も overload でいけないことも無いけど組み合わせ爆発で死ぬ......
あ、そんな事ないか
Kazuhiro Sera
@seratch
May 03 2016 03:35
Manabu Nakamura
@gakuzzzz
May 03 2016 03:36
ですよね。 AsIsParameterBinder を WithValue のサブクラスにすればいけるかなー
Kazuhiro Sera
@seratch
May 03 2016 03:36
それは私のやつがそうだと思うんですが、それとは違う形?
Manabu Nakamura
@gakuzzzz
May 03 2016 03:37
違う形ですねー
Manabu Nakamura
@gakuzzzz
May 03 2016 03:59
This message was deleted
This message was deleted
This message was deleted
Manabu Nakamura
@gakuzzzz
May 03 2016 04:05
あ、ぜんぜん嘘つきました。まちがい
gakuzzzz/skinny-framework@78d903d
こんな感じになりました。
Kazuhiro Sera
@seratch
May 03 2016 05:29
お、ありがとうございます。fork の方 travis 有効になってなさそうですが orm 以外もこのままでテスト pass してます?factory-girl と framework プロジェクトとか。
Manabu Nakamura
@gakuzzzz
May 03 2016 05:30
sass が入ってないのでその辺は全部こけてます
あと migration にこけてるのがありますね
Kazuhiro Sera
@seratch
May 03 2016 05:32
framework project ですよね、あれはまあ skinny session だけなので。factory-girl は orm のテスト用のに手が入ってるのと同様に対応すればよさそう。
insert dsl はこうしているけど update.set とかどうなんでしょうね。
Manabu Nakamura
@gakuzzzz
May 03 2016 05:33
あ、でもなんかテストおかしそう......
Kazuhiro Sera
@seratch
May 03 2016 05:34
これを有効にしてもらえると https://travis-ci.org/gakuzzzz/skinny-framework
Manabu Nakamura
@gakuzzzz
May 03 2016 05:35
お、有効にしてみました
update.set で map を避けるなら 別名で (SQLSyntax, ParameterBinder)* のやつ作らないと厳しそうですね……
Manabu Nakamura
@gakuzzzz
May 03 2016 05:43
あ、というか travis 有効にしても scalikejdbc が存在してないのでコンパイルが通らないですね
Kazuhiro Sera
@seratch
May 03 2016 05:45
map { case (k ,v) => k -> AsIsParameterBinder(v) } で対応できるならそれでいいと思います。insert の回避策が namedValues 避けるだけだったりするとよくないんでしょうけど。
AsIsParameterBinder の使い方、ちょっとおまじない感があって微妙な気がしているが、誰もがつかうようなものではないので許容範囲かな。
Manabu Nakamura
@gakuzzzz
May 03 2016 05:51
FactoryGirl の式埋め込みがバグっている模様?
Kazuhiro Sera
@seratch
May 03 2016 05:54
いや、多分実装と新しいやつがマッチしていないんじゃないかと。
Manabu Nakamura
@gakuzzzz
May 03 2016 05:54
ふむむむ
Kazuhiro Sera
@seratch
May 03 2016 05:54
私がいじってたときも順序の問題があったので。
Manabu Nakamura
@gakuzzzz
May 03 2016 05:54
なるほど
Kazuhiro Sera
@seratch
May 03 2016 05:55
ただ AsIsParameterBinder.apply を任意のタイミングで呼べる今の実装なら大丈夫なはずです。
Manabu Nakamura
@gakuzzzz
May 03 2016 05:56
:)
oh, 気付いたら15:00
すみません、ちょっと僕これから実家に戻るのでしばらくコード弄れなそうです。。。申し訳ない……
Kazuhiro Sera
@seratch
May 03 2016 05:58
ありがとうございます!あとは引き継いでやります。
(今日は家に一人なので様々な活動がはかどっています)
Manabu Nakamura
@gakuzzzz
May 03 2016 05:59
:fire:
Kazuhiro Sera
@seratch
May 03 2016 09:36
さすがのがくぞ先生やで(merge しました) #さくがく scalikejdbc/scalikejdbc#515