Skip to content

Instantly share code, notes, and snippets.

View gakuzzzz's full-sized avatar

Manabu Nakamura gakuzzzz

View GitHub Profile
@gakuzzzz
gakuzzzz / 1_Table.scala
Created February 22, 2013 06:28
ScalikeJDBC String Interpolation で join を楽に書けないか?
trait Table[A] {
def tableName: String
def columns: Seq[String]
def c(columnName: String): SQLSyntax = SQLSyntax(columnNameWithTableName(columnName))
def t(table: Table[_]): SQLSyntax = SQLSyntax(table.tableName)
private def columnNameWithTableName(columnName: String): String = s"${columnName}__ON__${tableName}"
@gakuzzzz
gakuzzzz / SQLInterpolation.scala
Last active December 14, 2015 08:19
現状は無理だけど、ちょっとだけ手を加えればコレくらいなら簡単にできそうだなー
def findUsers(name: Option[String], offset: Option[Long])(implicit session: DBSession = DBSession.AutoSession): Seq[User] = {
val u = User.syntax
sql"""
select
${u.id}, ${u.name}
from
${User.as(u)}
${name.map(n => stx"where ${u.name} like '%${n}%'").getOrElse(stx"")}
limit 25
${offset.map(o => stx"offset ${o}").getOrElse(stx"")}
@gakuzzzz
gakuzzzz / SQLInterpolation.scala
Last active December 14, 2015 08:19
Nested Interpolation
object SQLInterpolation {
... snip
case class SQLSyntax(value: String, parameters: Seq[Any] = Vector())
... snip
@inline implicit def interpolation(s: StringContext) = new SQLInterpolation(s)
@inline implicit def syntaxInterpolation(s: StringContext) = new SyntaxInterpolation(s)
@gakuzzzz
gakuzzzz / ScalikeJDBC_intoroduction.md
Last active December 14, 2015 10:49
ScalikeJDBC sample

Schema

CREATE TABLE users (
    id    INTEGER       PRIMARY KEY,
    name  VARCHAR(256)  NOT NULL
)
CREATE TABLE groups (
    id    INTEGER       PRIMARY KEY,
 name VARCHAR(256) NOT NULL
@gakuzzzz
gakuzzzz / sample.scala
Last active December 15, 2015 03:19
ScalikeJDBC aggregate
case class Article(id: Long, title: String)
object Article extends SQLSyntaxSupport[Article]
case class ArticlePageView(articleId: Long, total: Long, avarage: Long, maxDwellTimeSec: Long, minDwellTimeSec: Long)
object ArticlePageView SQLSyntaxSupport[ArticlePageView]
case class Traslation(articleId: Long, body: String)
object Traslation SQLSyntaxSupport[Traslation]
val (a, t, apv) = (Article.syntax("a"), Traslation.syntax("t"), ArticlePageView.syntax("apv"))
@gakuzzzz
gakuzzzz / 1.md
Created May 21, 2013 09:14
ScalikeJDBC つれづれ
  def cond[A](value: A)(f: PartialFunction[A, SQLBuilder => SQLBuilder]): SQLBuilder

こんな感じの(実際にはSQLBuilderはサブクラス型にしないとだけど)あれば下みたいに書けるかなー

  val id: Option[Int] = ...
  val name: Option[String] = ...
@gakuzzzz
gakuzzzz / gist:5632577
Last active December 17, 2015 15:29
色んなSQLをScalikeJDBCで書くと?
scala> val l = List((1, Some("a")), (1, Some("b")), (2, None))
l: List[(Int, Option[String])] = List((1,Some(a)), (1,Some(b)), (2,None))
scala> l.foldRight(List.empty[(Int, List[String])]) {
| case ((t1y, Some(t2y)), r@((t1x, t2x) :: xs)) if t1x == t1y => (t1x, t2y :: t2x) :: xs
| case ((t1y, None), r@((t1x, t2x) :: xs)) if t1x == t1y => r
| case ((t1y, Some(t2y)), r) => (t1y, t2y :: Nil) :: r
| case ((t1y, None), r) => (t1y, Nil) :: r
| }
res13: List[(Int, List[String])] = List((1,List(a, b)), (2,List()))
@gakuzzzz
gakuzzzz / 1_disample.scala
Created July 29, 2013 03:26
cake と cake じゃない所と
package disample
case class DiSampleConfig(foo: Int, bar: String)
object DiSampleConfig {
implicit val configs: Configs[DiSampleConfig] = Configs { c =>
DiSampleConfig(
foo = c.get[Int]("foo"),
bar = c.get[String]("bar")
)
}
@gakuzzzz
gakuzzzz / RetryUtil.scala
Last active December 21, 2015 08:49
Future版リトライ
import scala.concurrent.{Future, ExecutionContext}
import scala.util.{Success, Failure}
object RetryUtil {
case class RetryException(throwables: Seq[Throwable]) extends Exception
def retry[T](retryLimit: Int, retryInterval: Int, shouldCatch: Throwable => Boolean)(f: => Future[T])(implicit ctx: ExecutionContext = ExecutionContext.Implicits.global): Future[T] =
retry(Stream.fill(retryLimit)(retryInterval), shouldCatch)(f)