You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@toree.apache.org by lr...@apache.org on 2018/09/28 14:48:46 UTC

incubator-toree git commit: [TOREE-475] Resolve variables in sql statement

Repository: incubator-toree
Updated Branches:
  refs/heads/master 33b545740 -> 106d6f11e


[TOREE-475] Resolve variables in sql statement

Closes #155


Project: http://git-wip-us.apache.org/repos/asf/incubator-toree/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-toree/commit/106d6f11
Tree: http://git-wip-us.apache.org/repos/asf/incubator-toree/tree/106d6f11
Diff: http://git-wip-us.apache.org/repos/asf/incubator-toree/diff/106d6f11

Branch: refs/heads/master
Commit: 106d6f11e8f87d99a42b1fea25f93f0d4b4b8b8d
Parents: 33b5457
Author: huafengw <fv...@gmail.com>
Authored: Thu May 24 15:50:35 2018 +0800
Committer: Luciano Resende <lr...@apache.org>
Committed: Fri Sep 28 07:47:36 2018 -0700

----------------------------------------------------------------------
 build.sbt                                       |  3 +--
 .../scala/ScalaInterpreterSpecific.scala        |  2 +-
 .../org/apache/toree/magic/builtin/Sql.scala    | 25 +++++++++++++-------
 3 files changed, 19 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-toree/blob/106d6f11/build.sbt
----------------------------------------------------------------------
diff --git a/build.sbt b/build.sbt
index f76d466..1bafcf2 100644
--- a/build.sbt
+++ b/build.sbt
@@ -70,7 +70,6 @@ javaOptions in ThisBuild ++= Seq(
 )
 // Add additional test option to show time taken per test
 testOptions in (ThisBuild, Test) += Tests.Argument("-oDF")
-
 // Build-wide dependencies
 resolvers in ThisBuild  ++= Seq(
   "Apache Snapshots" at "http://repository.apache.org/snapshots/",
@@ -186,7 +185,7 @@ lazy val scalaInterpreter = (project in file("scala-interpreter"))
 */
 lazy val sqlInterpreter = (project in file("sql-interpreter"))
   .settings(name := "toree-sql-interpreter")
-  .dependsOn(plugins, protocol, kernelApi)
+  .dependsOn(plugins, protocol, kernelApi, scalaInterpreter)
 
 /**
 * Project represents the Python interpreter used by the Spark Kernel.

http://git-wip-us.apache.org/repos/asf/incubator-toree/blob/106d6f11/scala-interpreter/src/main/scala-2.11/org/apache/toree/kernel/interpreter/scala/ScalaInterpreterSpecific.scala
----------------------------------------------------------------------
diff --git a/scala-interpreter/src/main/scala-2.11/org/apache/toree/kernel/interpreter/scala/ScalaInterpreterSpecific.scala b/scala-interpreter/src/main/scala-2.11/org/apache/toree/kernel/interpreter/scala/ScalaInterpreterSpecific.scala
index fa667b9..1bde367 100644
--- a/scala-interpreter/src/main/scala-2.11/org/apache/toree/kernel/interpreter/scala/ScalaInterpreterSpecific.scala
+++ b/scala-interpreter/src/main/scala-2.11/org/apache/toree/kernel/interpreter/scala/ScalaInterpreterSpecific.scala
@@ -31,7 +31,7 @@ import scala.util.Try
 trait ScalaInterpreterSpecific extends SettingsProducerLike { this: ScalaInterpreter =>
   private val ExecutionExceptionName = "lastException"
 
-  private var iMain: IMain = _
+  private[toree] var iMain: IMain = _
   private var completer: PresentationCompilerCompleter = _
   private val exceptionHack = new ExceptionHack()
 

http://git-wip-us.apache.org/repos/asf/incubator-toree/blob/106d6f11/sql-interpreter/src/main/scala/org/apache/toree/magic/builtin/Sql.scala
----------------------------------------------------------------------
diff --git a/sql-interpreter/src/main/scala/org/apache/toree/magic/builtin/Sql.scala b/sql-interpreter/src/main/scala/org/apache/toree/magic/builtin/Sql.scala
index 3dcf7e7..1d96494 100644
--- a/sql-interpreter/src/main/scala/org/apache/toree/magic/builtin/Sql.scala
+++ b/sql-interpreter/src/main/scala/org/apache/toree/magic/builtin/Sql.scala
@@ -16,9 +16,10 @@
  */
 package org.apache.toree.magic.builtin
 
-import org.apache.toree.interpreter.{ExecuteError, ExecuteAborted}
-import org.apache.toree.kernel.interpreter.sql.{SqlInterpreter, SqlException}
-import org.apache.toree.magic.{MagicOutput, CellMagic}
+import org.apache.toree.interpreter.{ExecuteAborted, ExecuteError}
+import org.apache.toree.kernel.interpreter.scala.ScalaInterpreter
+import org.apache.toree.kernel.interpreter.sql.{SqlException, SqlInterpreter}
+import org.apache.toree.magic.{CellMagic, MagicOutput}
 import org.apache.toree.magic.dependencies.IncludeKernel
 import org.apache.toree.plugins.annotations.Event
 
@@ -29,14 +30,22 @@ class Sql extends CellMagic with IncludeKernel {
 
   @Event(name = "sql")
   override def execute(code: String): MagicOutput = {
-    val sparkSQL = kernel.interpreter("SQL")
+    val sparkSql = kernel.interpreter("SQL")
 
-    if (sparkSQL.isEmpty || sparkSQL.get == null)
+    if (sparkSql.isEmpty || sparkSql.get == null)
       throw new SqlException("SQL is not available!")
 
-    sparkSQL.get match {
-      case sparkSQLInterpreter: SqlInterpreter =>
-        val (_, output) = sparkSQLInterpreter.interpret(code)
+    val scala = kernel.interpreter("Scala")
+    val evaluated = if (scala.nonEmpty && scala.get != null) {
+      val scalaInterpreter = scala.get.asInstanceOf[ScalaInterpreter]
+      scalaInterpreter.iMain.eval("s\"" + code.replace("\n", " ") + "\"").asInstanceOf[String]
+    } else {
+      code
+    }
+
+    sparkSql.get match {
+      case sqlInterpreter: SqlInterpreter =>
+        val (_, output) = sqlInterpreter.interpret(evaluated)
         output match {
           case Left(executeOutput) =>
             MagicOutput(executeOutput.toSeq:_*)