Skip to content

Commit

Permalink
s/Traversable/Iterable/
Browse files Browse the repository at this point in the history
  • Loading branch information
xuwei-k committed May 28, 2018
1 parent bdd62ac commit f79d5f1
Show file tree
Hide file tree
Showing 15 changed files with 172 additions and 92 deletions.
6 changes: 6 additions & 0 deletions build.sbt
Expand Up @@ -136,6 +136,12 @@ lazy val scalikejdbcLibrary = Project(
baseSettings,
mimaSettings,
name := "scalikejdbc",
(sourceGenerators in Compile) += task{
val dir = (sourceManaged in Compile).value
val file = dir / "scalikejdbc" / "DeprecatedOneToManiesTraversable.scala"
IO.write(file, GenerateDeprecatedOneToManiesTraversable.value)
Seq(file)
},
libraryDependencies ++= scalaTestDependenciesInTestScope.value ++
Seq("com.h2database" % "h2" % _h2Version % "test")
).dependsOn(scalikejdbcCore, scalikejdbcInterpolation).disablePlugins(ScriptedPlugin)
Expand Down
39 changes: 39 additions & 0 deletions project/GenerateDeprecatedOneToManiesTraversable.scala
@@ -0,0 +1,39 @@
object GenerateDeprecatedOneToManiesTraversable {

private[this] def generate: Int => String = { n =>
val B = (1 to n).map("B" + _).mkString(", ")
val newName = s"OneToManies${n}SQLToIterable"
val oldName = s"OneToManies${n}SQLToTraversable"
s"""
@deprecated(message = "use $newName instead", since = "3.3.0")
type $oldName[A, $B, E <: WithExtractor, Z] = $newName[A, $B, E, Z]
@deprecated(message = "use $newName instead", since = "3.3.0")
val $oldName = $newName
"""
}

val value: String = {
s"""/*
* Copyright 2013 - 2018 scalikejdbc.org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package scalikejdbc

private[scalikejdbc] trait DeprecatedOneToManiesTraversable {
${(2 to 21).map(generate).mkString("")}
}
"""
}

}
26 changes: 13 additions & 13 deletions project/GenerateOneToManies.scala
Expand Up @@ -72,7 +72,7 @@ s" to$i.map(t => Vector(t)).getOrElse(Vector.empty)"
}
}

private[scalikejdbc] def toTraversable(session: DBSession, sql: String, params: scala.collection.Seq[_], zExtractor: (A, $seq) => Z): Traversable[Z] = {
private[scalikejdbc] def toIterable(session: DBSession, sql: String, params: scala.collection.Seq[_], zExtractor: (A, $seq) => Z): Iterable[Z] = {
val attributesSwitcher = createDBSessionAttributesSwitcher()
DBSessionWrapper(session, attributesSwitcher).foldLeft(statement, rawParameters.toSeq: _*)(LinkedHashMap[A, ($seq)]())(processResultSet _).map {
case (one, (${(1 to n).map("t" + _).mkString(", ")})) => zExtractor(one, ${(1 to n).map("t" + _).mkString(", ")})
Expand All @@ -90,8 +90,8 @@ class OneToManies${n}SQL[A, $bs, E <: WithExtractor, Z](
def map(zExtractor: (A, $seq) => Z): OneToManies${n}SQL[A, $bs, HasExtractor, Z] = {
new OneToManies${n}SQL(statement, rawParameters)(one)($to)(zExtractor)
}
override def toTraversable(): OneToManies${n}SQLToTraversable[A, $bs, E, Z] = {
new OneToManies${n}SQLToTraversable[A, $bs, E, Z](statement, rawParameters)(one)($to)(zExtractor)
override def toIterable(): OneToManies${n}SQLToIterable[A, $bs, E, Z] = {
new OneToManies${n}SQLToIterable[A, $bs, E, Z](statement, rawParameters)(one)($to)(zExtractor)
}
override def toList(): OneToManies${n}SQLToList[A, $bs, E, Z] = {
new OneToManies${n}SQLToList[A, $bs, E, Z](statement, rawParameters)(one)($to)(zExtractor)
Expand All @@ -109,7 +109,7 @@ class OneToManies${n}SQL[A, $bs, E <: WithExtractor, Z](
override def single(): OneToManies${n}SQLToOption[A, $bs, E, Z] = toOption()
override def first(): OneToManies${n}SQLToOption[A, $bs, E, Z] = headOption()
override def list(): OneToManies${n}SQLToList[A, $bs, E, Z] = toList()
override def traversable(): OneToManies${n}SQLToTraversable[A, $bs, E, Z] = toTraversable()
override def iterable(): OneToManies${n}SQLToIterable[A, $bs, E, Z] = toIterable()
override def collection: OneToManies${n}SQLToCollection[A, $bs, E, Z] = toCollection
}

Expand All @@ -130,7 +130,7 @@ class OneToManies${n}SQLToList[A, $bs, E <: WithExtractor, Z](
import GeneralizedTypeConstraintsForWithExtractor._

override def apply()(implicit session: DBSession, context: ConnectionPoolContext = NoConnectionPoolContext, hasExtractor: ThisSQL =:= SQLWithExtractor): List[Z] = {
executeQuery[List](session, (session: DBSession) => toTraversable(session, statement, rawParameters, zExtractor).toList)
executeQuery[List](session, (session: DBSession) => toIterable(session, statement, rawParameters, zExtractor).toList)
}

$extractOne
Expand All @@ -155,7 +155,7 @@ final class OneToManies${n}SQLToCollection[A, $bs, E <: WithExtractor, Z] privat
import GeneralizedTypeConstraintsForWithExtractor._

override def apply[C[_]]()(implicit session: DBSession, context: ConnectionPoolContext = NoConnectionPoolContext, hasExtractor: ThisSQL =:= SQLWithExtractor, f: Factory[Z, C[Z]]): C[Z] = {
executeQuery(session, (session: DBSession) => f.fromSpecific(toTraversable(session, statement, rawParameters, zExtractor)))
executeQuery(session, (session: DBSession) => f.fromSpecific(toIterable(session, statement, rawParameters, zExtractor)))
}

$extractOne
Expand All @@ -169,27 +169,27 @@ object OneToManies${n}SQLToCollection {
}
}

class OneToManies${n}SQLToTraversable[A, $bs, E <: WithExtractor, Z](
class OneToManies${n}SQLToIterable[A, $bs, E <: WithExtractor, Z](
override val statement: String,
override val rawParameters: scala.collection.Seq[Any])(val one: WrappedResultSet => A)($resultSetToOptions)(val zExtractor: (A, $seq) => Z)
extends SQL[Z, E](statement, rawParameters)(SQL.noExtractor[Z]("one-to-many extractor(one(RS => A).toMany(RS => Option[B1])) is specified, use #map((A,B) =>Z) instead."))
with SQLToTraversable[Z, E]
with SQLToIterable[Z, E]
with AllOutputDecisionsUnsupported[Z, E]
with OneToManies${n}Extractor[A, $bs, E, Z] {

import GeneralizedTypeConstraintsForWithExtractor._

override def apply()(implicit session: DBSession, context: ConnectionPoolContext = NoConnectionPoolContext, hasExtractor: ThisSQL =:= SQLWithExtractor): Traversable[Z] = {
executeQuery[Traversable](session, (session: DBSession) => toTraversable(session, statement, rawParameters, zExtractor))
override def apply()(implicit session: DBSession, context: ConnectionPoolContext = NoConnectionPoolContext, hasExtractor: ThisSQL =:= SQLWithExtractor): Iterable[Z] = {
executeQuery[Iterable](session, (session: DBSession) => toIterable(session, statement, rawParameters, zExtractor))
}

$extractOne
$extractToN
$transform
}

object OneToManies${n}SQLToTraversable {
def unapply[A, $bs, E <: WithExtractor, Z](sqlObject: OneToManies${n}SQLToTraversable[A, $bs, E, Z]): Option[(String, scala.collection.Seq[Any], WrappedResultSet => A, ($resultSetToOptionsType), (A, $seq) => Z)] = {
object OneToManies${n}SQLToIterable {
def unapply[A, $bs, E <: WithExtractor, Z](sqlObject: OneToManies${n}SQLToIterable[A, $bs, E, Z]): Option[(String, scala.collection.Seq[Any], WrappedResultSet => A, ($resultSetToOptionsType), (A, $seq) => Z)] = {
Some((sqlObject.statement, sqlObject.rawParameters, sqlObject.one, ($sqlTo), sqlObject.zExtractor))
}
}
Expand All @@ -204,7 +204,7 @@ class OneToManies${n}SQLToOption[A, $bs, E <: WithExtractor, Z](

import GeneralizedTypeConstraintsForWithExtractor._
override def apply()(implicit session: DBSession, context: ConnectionPoolContext = NoConnectionPoolContext, hasExtractor: ThisSQL =:= SQLWithExtractor): Option[Z] = {
executeQuery[Option](session, (session: DBSession) => toSingle(toTraversable(session, statement, rawParameters, zExtractor)))
executeQuery[Option](session, (session: DBSession) => toSingle(toIterable(session, statement, rawParameters, zExtractor)))
}

$extractOne
Expand Down
14 changes: 9 additions & 5 deletions scalikejdbc-core/src/main/scala/scalikejdbc/DBSession.scala
Expand Up @@ -279,7 +279,7 @@ trait DBSession extends LogSupport with LoanPattern with AutoCloseable {
* @return result optionally
*/
def first[A](template: String, params: Any*)(extract: WrappedResultSet => A): Option[A] = {
traversable(template, params: _*)(extract).headOption
iterable(template, params: _*)(extract).headOption
}

/**
Expand Down Expand Up @@ -347,18 +347,22 @@ trait DBSession extends LogSupport with LoanPattern with AutoCloseable {
}

/**
* Returns query result as scala.collection.Traversable object.
* Returns query result as scala.collection.Iterable object.
*
* @param template SQL template
* @param params parameters
* @param extract extract function
* @tparam A return type
* @return result as traversable
* @return result as iterable
*/
def traversable[A](template: String, params: Any*)(extract: WrappedResultSet => A): Traversable[A] = {
collection[A, Traversable](template, params: _*)(extract)
def iterable[A](template: String, params: Any*)(extract: WrappedResultSet => A): Iterable[A] = {
collection[A, Iterable](template, params: _*)(extract)
}

@deprecated(message = "will be removed. use iterable instead", since = "3.3.0")
def traversable[A](template: String, params: Any*)(extract: WrappedResultSet => A): Iterable[A] =
iterable[A](template, params: _*)(extract)

/**
* Executes java.sql.PreparedStatement#execute().
*
Expand Down
Expand Up @@ -60,8 +60,8 @@ private[scalikejdbc] final class DBSessionWrapper(
override def foldLeft[A](template: String, params: Any*)(z: A)(op: (A, WrappedResultSet) => A): A = {
withAttributesSwitchedDBSession(_.foldLeft(template, params: _*)(z)(op))
}
override def traversable[A](template: String, params: Any*)(extract: (WrappedResultSet) => A): Traversable[A] = {
withAttributesSwitchedDBSession(_.traversable(template, params: _*)(extract))
override def iterable[A](template: String, params: Any*)(extract: (WrappedResultSet) => A): Iterable[A] = {
withAttributesSwitchedDBSession(_.iterable(template, params: _*)(extract))
}

override def execute(template: String, params: Any*): Boolean = {
Expand Down
26 changes: 13 additions & 13 deletions scalikejdbc-core/src/main/scala/scalikejdbc/OneToManies2SQL.scala
Expand Up @@ -28,7 +28,7 @@ private[scalikejdbc] trait OneToManies2Extractor[A, B1, B2, E <: WithExtractor,
}
}

private[scalikejdbc] def toTraversable(session: DBSession, sql: String, params: scala.collection.Seq[_], zExtractor: (A, scala.collection.Seq[B1], scala.collection.Seq[B2]) => Z): Traversable[Z] = {
private[scalikejdbc] def toIterable(session: DBSession, sql: String, params: scala.collection.Seq[_], zExtractor: (A, scala.collection.Seq[B1], scala.collection.Seq[B2]) => Z): Iterable[Z] = {
val attributesSwitcher = createDBSessionAttributesSwitcher()
DBSessionWrapper(session, attributesSwitcher)
.foldLeft(statement, rawParameters.toSeq: _*)(LinkedHashMap[A, (Seq[B1], scala.collection.Seq[B2])]())(processResultSet).map {
Expand All @@ -47,8 +47,8 @@ class OneToManies2SQL[A, B1, B2, E <: WithExtractor, Z](
def map(zExtractor: (A, scala.collection.Seq[B1], scala.collection.Seq[B2]) => Z): OneToManies2SQL[A, B1, B2, HasExtractor, Z] = {
new OneToManies2SQL(statement, rawParameters)(one)(to1, to2)(zExtractor)
}
override def toTraversable(): OneToManies2SQLToTraversable[A, B1, B2, E, Z] = {
new OneToManies2SQLToTraversable[A, B1, B2, E, Z](statement, rawParameters)(one)(to1, to2)(zExtractor)
override def toIterable(): OneToManies2SQLToIterable[A, B1, B2, E, Z] = {
new OneToManies2SQLToIterable[A, B1, B2, E, Z](statement, rawParameters)(one)(to1, to2)(zExtractor)
}
override def toList(): OneToManies2SQLToList[A, B1, B2, E, Z] = {
new OneToManies2SQLToList[A, B1, B2, E, Z](statement, rawParameters)(one)(to1, to2)(zExtractor)
Expand All @@ -65,7 +65,7 @@ class OneToManies2SQL[A, B1, B2, E <: WithExtractor, Z](
override def single(): OneToManies2SQLToOption[A, B1, B2, E, Z] = toOption()
override def first(): OneToManies2SQLToOption[A, B1, B2, E, Z] = headOption()
override def list(): OneToManies2SQLToList[A, B1, B2, E, Z] = toList()
override def traversable(): OneToManies2SQLToTraversable[A, B1, B2, E, Z] = toTraversable()
override def iterable(): OneToManies2SQLToIterable[A, B1, B2, E, Z] = toIterable()
override def collection: OneToManies2SQLToCollection[A, B1, B2, E, Z] = toCollection

}
Expand All @@ -86,7 +86,7 @@ class OneToManies2SQLToList[A, B1, B2, E <: WithExtractor, Z](
import GeneralizedTypeConstraintsForWithExtractor._

override def apply()(implicit session: DBSession, context: ConnectionPoolContext = NoConnectionPoolContext, hasExtractor: ThisSQL =:= SQLWithExtractor): List[Z] = {
executeQuery[List](session, (session: DBSession) => toTraversable(session, statement, rawParameters, zExtractor).toList)
executeQuery[List](session, (session: DBSession) => toIterable(session, statement, rawParameters, zExtractor).toList)
}

private[scalikejdbc] def extractOne: WrappedResultSet => A = one
Expand All @@ -111,7 +111,7 @@ final class OneToManies2SQLToCollection[A, B1, B2, E <: WithExtractor, Z] privat
import GeneralizedTypeConstraintsForWithExtractor._

override def apply[C[_]]()(implicit session: DBSession, context: ConnectionPoolContext = NoConnectionPoolContext, hasExtractor: ThisSQL =:= SQLWithExtractor, f: Factory[Z, C[Z]]): C[Z] = {
executeQuery(session, (session: DBSession) => f.fromSpecific(toTraversable(session, statement, rawParameters, zExtractor)))
executeQuery(session, (session: DBSession) => f.fromSpecific(toIterable(session, statement, rawParameters, zExtractor)))
}

private[scalikejdbc] def extractOne: WrappedResultSet => A = one
Expand All @@ -126,18 +126,18 @@ object OneToManies2SQLToCollection {
}
}

class OneToManies2SQLToTraversable[A, B1, B2, E <: WithExtractor, Z](
class OneToManies2SQLToIterable[A, B1, B2, E <: WithExtractor, Z](
override val statement: String,
override val rawParameters: scala.collection.Seq[Any])(val one: WrappedResultSet => A)(val to1: WrappedResultSet => Option[B1], val to2: WrappedResultSet => Option[B2])(val zExtractor: (A, scala.collection.Seq[B1], scala.collection.Seq[B2]) => Z)
extends SQL[Z, E](statement, rawParameters)(SQL.noExtractor[Z]("one-to-many extractor(one(RS => A).toMany(RS => Option[B1])) is specified, use #map((A,B) =>Z) instead."))
with SQLToTraversable[Z, E]
with SQLToIterable[Z, E]
with AllOutputDecisionsUnsupported[Z, E]
with OneToManies2Extractor[A, B1, B2, E, Z] {

import GeneralizedTypeConstraintsForWithExtractor._

override def apply()(implicit session: DBSession, context: ConnectionPoolContext = NoConnectionPoolContext, hasExtractor: ThisSQL =:= SQLWithExtractor): Traversable[Z] = {
executeQuery[Traversable](session, (session: DBSession) => toTraversable(session, statement, rawParameters, zExtractor))
override def apply()(implicit session: DBSession, context: ConnectionPoolContext = NoConnectionPoolContext, hasExtractor: ThisSQL =:= SQLWithExtractor): Iterable[Z] = {
executeQuery[Iterable](session, (session: DBSession) => toIterable(session, statement, rawParameters, zExtractor))
}

private[scalikejdbc] def extractOne: WrappedResultSet => A = one
Expand All @@ -146,8 +146,8 @@ class OneToManies2SQLToTraversable[A, B1, B2, E <: WithExtractor, Z](
private[scalikejdbc] def transform: (A, scala.collection.Seq[B1], scala.collection.Seq[B2]) => Z = zExtractor
}

object OneToManies2SQLToTraversable {
def unapply[A, B1, B2, E <: WithExtractor, Z](sqlObject: OneToManies2SQLToTraversable[A, B1, B2, E, Z]): Option[(String, scala.collection.Seq[Any], WrappedResultSet => A, WrappedResultSet => Option[B1], WrappedResultSet => Option[B2], (A, scala.collection.Seq[B1], scala.collection.Seq[B2]) => Z)] = {
object OneToManies2SQLToIterable {
def unapply[A, B1, B2, E <: WithExtractor, Z](sqlObject: OneToManies2SQLToIterable[A, B1, B2, E, Z]): Option[(String, scala.collection.Seq[Any], WrappedResultSet => A, WrappedResultSet => Option[B1], WrappedResultSet => Option[B2], (A, scala.collection.Seq[B1], scala.collection.Seq[B2]) => Z)] = {
Some((sqlObject.statement, sqlObject.rawParameters, sqlObject.one, sqlObject.to1, sqlObject.to2, sqlObject.zExtractor))
}
}
Expand All @@ -162,7 +162,7 @@ class OneToManies2SQLToOption[A, B1, B2, E <: WithExtractor, Z](

import GeneralizedTypeConstraintsForWithExtractor._
override def apply()(implicit session: DBSession, context: ConnectionPoolContext = NoConnectionPoolContext, hasExtractor: ThisSQL =:= SQLWithExtractor): Option[Z] = {
executeQuery[Option](session, (session: DBSession) => toSingle(toTraversable(session, statement, rawParameters, zExtractor)))
executeQuery[Option](session, (session: DBSession) => toSingle(toIterable(session, statement, rawParameters, zExtractor)))
}

private[scalikejdbc] def extractOne: WrappedResultSet => A = one
Expand Down

0 comments on commit f79d5f1

Please sign in to comment.