From fa2f68544dd39035a6325ec11398349105cd35cd Mon Sep 17 00:00:00 2001 From: jacobfi Date: Tue, 13 Dec 2022 14:13:49 +0100 Subject: [PATCH] fix: issue #2 Join fails due to type confusion for String --- .gitignore | 1 + build.sbt | 6 +++--- project/build.properties | 2 +- .../audienceproject/crossbow/expr/package.scala | 15 +++++++++++++++ .../crossbow/algorithms/SortMergeJoinTest.scala | 8 ++++++++ 5 files changed, 28 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 92322c4..e1fbb87 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ +.bsp/ .idea/ target/ diff --git a/build.sbt b/build.sbt index 6c000e6..1f1e9a3 100644 --- a/build.sbt +++ b/build.sbt @@ -4,10 +4,10 @@ name := "crossbow" version := "0.1.5" -scalaVersion := "2.13.3" +scalaVersion := "2.13.6" crossScalaVersions := Seq(scalaVersion.value, "2.12.12", "2.11.12") -scalacOptions += "-deprecation" +scalacOptions ++= Seq("-deprecation", "-feature", "-language:existentials") libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaVersion.value libraryDependencies += "org.scalatest" %% "scalatest-funsuite" % "3.2.0" % "test" @@ -16,7 +16,7 @@ libraryDependencies += "org.scalatest" %% "scalatest-funsuite" % "3.2.0" % "test * Maven specific settings for publishing to Maven central. */ publishMavenStyle := true -publishArtifact in Test := false +Test / publishArtifact := false pomIncludeRepository := { _ => false } publishTo := { val nexus = "https://oss.sonatype.org/" diff --git a/project/build.properties b/project/build.properties index 302b6be..f6acff8 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version = 1.3.13 \ No newline at end of file +sbt.version = 1.6.2 diff --git a/src/main/scala/com/audienceproject/crossbow/expr/package.scala b/src/main/scala/com/audienceproject/crossbow/expr/package.scala index e0a07aa..f906586 100644 --- a/src/main/scala/com/audienceproject/crossbow/expr/package.scala +++ b/src/main/scala/com/audienceproject/crossbow/expr/package.scala @@ -24,14 +24,29 @@ package object expr { case class AnyType(runtimeType: ru.Type) extends Type { override def toString: String = runtimeType.toString + + override def equals(obj: Any): Boolean = obj match { + case AnyType(otherRuntimeType) => runtimeType =:= otherRuntimeType + case _ => false + } } case class ProductType(elementTypes: Type*) extends Type { override def toString: String = s"(${elementTypes.mkString(",")})" + + override def equals(obj: Any): Boolean = obj match { + case ProductType(otherElementTypes@_*) => elementTypes == otherElementTypes + case _ => false + } } case class ListType(elementType: Type) extends Type { override def toString: String = s"List($elementType)" + + override def equals(obj: Any): Boolean = obj match { + case ListType(otherElementType) => elementType == otherElementType + case _ => false + } } } diff --git a/src/test/scala/com/audienceproject/crossbow/algorithms/SortMergeJoinTest.scala b/src/test/scala/com/audienceproject/crossbow/algorithms/SortMergeJoinTest.scala index a855c2a..a2c27a5 100644 --- a/src/test/scala/com/audienceproject/crossbow/algorithms/SortMergeJoinTest.scala +++ b/src/test/scala/com/audienceproject/crossbow/algorithms/SortMergeJoinTest.scala @@ -46,4 +46,12 @@ class SortMergeJoinTest extends AnyFunSuite { assert(joined == expected) } + test("Join on scala.Predef.String and java.lang.String") { + case class Score(name: String, points: Int) + val scores = Seq(Score("abc", 20), Score("def", 40)).flatMap(Score.unapply).toDataFrame("name", "points") + val names = Seq("abc", "def").toDataFrame("name") + val joined = scores.join(names, $"name") + assert(joined.rowCount == 2) + } + }