Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    jakelizzI
    @jakelizzI
    @seratch さん お答えありがとうございます!
    scalikejdbc関係ないPlayのhikaricp初期化設定とは
    https://www.playframework.com/documentation/2.5.x/SettingsJDBC
    の方法でしょうか?
    Manabu Nakamura
    @gakuzzzz

    IllegalStateException: Connection pool is not yet initialized.

    これが発生する場所がわかればもう少し建設的なコメントができるかもですね。

    もし SQLSyntaxSupport を mixin した object の操作で出ている場合は、connectionPoolName を override して自分でつけた ConnectionPool の名前を指定するとよいかと思います。

    Kazuhiro Sera
    @seratch
    @jakelizzI はい、そうです。それを設定して有効になる DbApi からコネクションを取るように上記のアダプターモジュールを使ってください。
    jakelizzI
    @jakelizzI

    @gakuzzzz さん ありがとうございます!
    おっしゃるとおり、SQLSyntaxSupportをmixinしたobjectへの操作で発生しております。ですので、試してみたいのですが、別のExceptionが発生してしまったので後々試してみようと思います!

    @seratch さん ありがとうございます!enabled += "scalikejdbc.PlayDBApiAdapterModule"←の記述でplay側でのconnectionPoolの設定がDbApiに反映されるということでしょうか?また、defaultの設定のまま行っていた時は特にConnectionを意識していなかったので、どのようにDbApiからコネクションを取得するのかお教えいただけますか?

    Kazuhiro Sera
    @seratch
    ドキュメントに書いてあることで設定できるはずです。
    ponkotuy
    @ponkotuy
    hasMany[]().byDefaultとやったらうまく動かないので、明示的にjoinsしたら動くようになったぜ!ってことがあったんですが、これ仕様ですか?
    Kazuhiro Sera
    @seratch
    これ具体的にはどういう問題ですか? >.byDefaultとやったらうまく動かない
    ponkotuy
    @ponkotuy
    最小構成作って見せよう!と思っていじってたら再現しなくて、色々弄ってみたらどうも循環的にjoinしようとしてて駄目だったみたいです…自己解決で申し訳ない
    そりゃだめだ
    kkismd
    @kkismd
    質問です
    scalikejdbc.scalatest.AutoRollback を使うときはfixture()や各テストに渡される implicit session を使ってDBを操作すると思いますが、この場合 localTx を使って自前でロールバックを行うようなロジックのテストは可能なんでしょうか?
    Kazuhiro Sera
    @seratch
    @kkismd テスト対象のコードの内部で DB.localTx 呼んでいるケースでしょうか?もしそうであれば AutoRollback の影響下に置くことはできないですね。DB.localTx の内部だけをメソッドにしてそれをテストしていただくなどが必要ですね。
    kkismd
    @kkismd
    なるほどです そういう切り方をすれば可能ですね
    ありがとうございます
    kken
    @KentaKomai

    はじめまして、いつもこちらのライブラリ使わせていただいているものです。

    質問させてください。

    db {
      default.driver=com.mysql.jdbc.Driver
      default.url="jdbc:mysql://localhost/dev_db"
      default.username=root
      default.password="root"
    
      test.driver=com.mysql.jdbc.Driver
      test.url="jdbc:mysql://localhost/test_db"
      test.username=root
      test.password="root"
    }

    このようなconfigを記述していて、テストのときだけはtest.*のほうのスキーマを利用したいです。

    http://scalikejdbc.org/documentation/testing.html
    http://stackoverflow.com/questions/34123011/scalikejdbc-connection-pool-is-not-yet-initialized-namedefault

    この辺りを参考にさせていただきつつ、

    override def db = NamedDB('test).toDB

    AutoRollbackを継承しているベースクラスで上記のコードを呼び、
    更にDB初期化で

    DBs.setupAll()

    を呼ぶことで、動作はしたんですが、defaultのほうからデータを取得してしまいます。
    しかしFixtureの引数になっているDBSessionを見るとjdbcのURLはtestのほうを見ています。

    println(this.session.connection)
    > jdbc:mysql://localhost/test_db, UserName=root@localhost, MySQL-AB JDBC Driver

    testを見るために、何か見落としている設定等ありますでしょうか。。。

    kken
    @KentaKomai
    すいません、解決しました。
    テストしているクラスで override val schemaName = Some("dev_db") していました。お騒がせしました。
    KAWACHI Takashi
    @tkawachi
    昨日コード見てて良くわからない箇所があったのですが https://github.com/scalikejdbc/scalikejdbc/blob/master/scalikejdbc-core/src/main/scala/scalikejdbc/SQLTemplateParser.scala#L71-L75 で 11回ループしているところどういう意味なんでしょう? replaceAll(" +", " ") でいいのでは…と思ったのですがどうなんでしょう
    Kazuhiro Sera
    @seratch
    なるほど、確かにその方がよさそうです >replaceAll(" +", " ")
    @tkawachi 忘れそうなので、お時間あるときに PR いただけると。
    KAWACHI Takashi
    @tkawachi
    出しておきましたー scalikejdbc/scalikejdbc#699
    Toshiyuki Takahashi
    @tototoshi
    scalikejdbcのQueryDSLで生成されるSQLで、カラム名をクオートしたりってできますか?
    insert into `table` values (`id`, `name`, .....)`
    みたいな
    Toshiyuki Takahashi
    @tototoshi
    sqls"id" みたいなことやれば一応できた。けれど...
    Toshiyuki Takahashi
    @tototoshi
    scalikejdbc/scalikejdbc#571 すでにissueに上がってた
    kenji yoshida
    @xuwei-k
    scalikejdbcでやるとして、MySQLでは簡単に出来ても、DBの実装毎になんか変えないとうまくいかなかったような気もする?(うろ覚え
    Kazuhiro Sera
    @seratch
    default off で、今までと挙動かえないようにして、設定切り替えたら一律 backquote つきになる、みたいな仕様なら導入しやすいなと思っています。私がやるのはちょっとすぐには無理かも。
    Toshiyuki Takahashi
    @tototoshi
    default offにして、の方針でちょっとコードいじったりしてみてました。うまくいったらプルリクします。
    Toshiyuki Takahashi
    @tototoshi
    scalikejdbc/scalikejdbc@25c41b4 もうちょっとスマートにならないかな...
    Toshiyuki Takahashi
    @tototoshi
    (まだがんばってる)scalikejdbcのSQLSyntaxのコードを最初に整理した方良さそうな気がしてきた。
    harry
    @harry0000
    1点お聞きしたいのですが、skinny-ormでEntityを指定してcreateって出来ますか?ソースコード等を確認した限りでは出来なさそうな気がしました。
    Kazuhiro Sera
    @seratch
    skinny-ormでEntityを指定してcreateって出来ますか
    @harry0000 今のところできないですね。insert 時未設定の auto increment な PK 問題などもあり。 NewEntity みたいなのを別で用意して field を macro でどうにかするとかは考えられますが、ライブラリの機能としては今はないです。
    harry
    @harry0000
    問題点など理解できました。ご回答ありがとうございます!
    katainaka
    @katainaka0503
    ScalikeJDBCのドキュメントを見ると.one.toOptionalOne.map()としたときにmapが受け取る関数の2番めの引数はOption[Hoge]となっているのですが、実際はOptionに包まれてない型の値が渡されてきます。これを修正するPRを送ってもよいですか?
    参照したドキュメントはこちらです(http://scalikejdbc.org/documentation/one-to-x.html)
    katainaka
    @katainaka0503
    Contributors' Guideを読んだのですが互換性がなくなってしまうのでダメだと自己解決しました。
    失礼いたしました。
    Shohei Kamimori
    @jyane
    OneToOneSQL の map の引数の型は場合によって異なるように見えましたが、違うでしょうか。
    kenji yoshida
    @xuwei-k
    もし正当な理由ある変更なら、必ずしも互換壊すのがダメなわけでも
    kenji yoshida
    @xuwei-k
    @katainaka0503 もしくは、もしドキュメントのコード例が現状の最新版の3.1.0でコンパイル通らないなら、ドキュメントか本体かわからないけど、どちらかのバグではあるので、issue報告かpull reqお願いします
    katainaka
    @katainaka0503
    @xuwei-k 了解いたしました
    kenji yoshida
    @xuwei-k
    toOptionalOneがどういうAPIなのかよく知らない(たぶん個人的に使ったことない) が、本体側Optionでくくるだけじゃ意味が謎( = 必ずSomeになる?) だから、
    ドキュメントのサンプルコードの方を直すべき案件なのだろうか?それともOptionにしたところは、現状ではnullが渡ってくるパターンがある、みたいな話?(まぁ @seratch さんとかに任せよう)
    katainaka
    @katainaka0503
    必ずSomeになるのでおそらくSomeでくくったほうがいいですね・・・一応修正します。
    kenji yoshida
    @xuwei-k
    いや、必ずSomeになるなら、Optionで受け取る嬉しさがない(?)から、もしそうなら実装そのままでドキュメントのほう直すべきなのかな?と思ったんですが。 mapがoverrideされてるか何かで、Someの場合もNoneの場合もありえる、なら話は別ですが
    もしくは他のAPIとの整合性とか他の要因がなにかあるとか・・・?(それは考えすぎな気がしなくもない)
    katainaka
    @katainaka0503
    すみません、発言の意図を間違って捉えていました。
    katainaka
    @katainaka0503
    自分が必ずSomeになると発言したのは自分が送ったPRの中でtoOptionalOneの実装において引数として受け取るto: WrappedResultSet => Option[B]の戻り値にOptionをかぶせているところについての発言でした。
    kenji yoshida
    @xuwei-k
    ん、なんか話が噛み合ってるような、噛み合ってないような…。同じことの繰り返しになるけど、そのOptionをかぶせたのって、ドキュメントと実装合わせる以外にどういう嬉しさがあるんですか?
    それとも “実装は変えずに使う側でSomeでくくったほうがいい” と、思い直した、という意味?
    Shohei Kamimori
    @jyane
    map の引数の型が Option でないなら、copy(owner = Some(owner)) にすれば良い、ということにはならず、toOptionalOne の実装を変えたほうがメリットがあるということ(?)
    katainaka
    @katainaka0503
    toOptionalOne()は.one(A(a)).toOptionalOne(B(b)).map().list().apply()というように使用するのですが、現在の実装ではapplyで値を取り出すときに、toOptinalOneの引数の関数がNoneを返す時は、map()の引数の関数の戻り値の型にoneの引数の関数の戻り値をキャストするという実装になっています。
    これはmapの引数の関数が(a, b) => a.copy(b = Some(b))というような形式のときには同じ型であるため問題になりませんが、
    もっと一般の関数を渡すと実行時例外に遭遇することになります。