jdbc bağlantıları kullanmadan apache calcite api raw kullanmak istiyorum. Jdbc api'yi gayet iyi kullanabilirim ama api'yi kullanmaya çalışırken null ptr istisnaları alıyorum.apache calcite, jdbc api kullanmadan sorgulama
package calcite.examples
import java.util.Properties
import calcite.demo.DemoSchema
import org.apache.calcite.DataContext
import org.apache.calcite.config.CalciteConnectionConfigImpl
import org.apache.calcite.jdbc.CalcitePrepare.Query
import org.apache.calcite.jdbc.{CalcitePrepare, CalciteSchema, JavaTypeFactoryImpl}
import org.apache.calcite.prepare.CalcitePrepareImpl
import scala.collection.JavaConverters._
object TryIt extends App
{
val ctx = new AdapterContext
val sql = Query.of[Any]("SELECT * FROM dep")
// assert(sql.rel != null)
val elementType = classOf[Array[Object]]
val prepared = new CalcitePrepareImpl().prepareSql(ctx, sql, elementType, -1)
val enumerable = prepared.enumerable(new MyDataContext)
}
class AdapterContext extends CalcitePrepare.Context
{
private val properties = new Properties
private val rootSchema = CalciteSchema.createRootSchema(true)
rootSchema.add("default", new DemoSchema)
// default schema names
override def getDefaultSchemaPath = List("default").asJava
override def spark() = {
val enable = config.spark
CalcitePrepare.Dummy.getSparkHandler(enable)
}
override val config = new CalciteConnectionConfigImpl(properties)
override val getTypeFactory = new JavaTypeFactoryImpl
override def getRootSchema = rootSchema
override def getDataContext = new MyDataContext
}
class MyDataContext extends DataContext
{
override def get(name: String) = {
println(s"MyDataContext name=$name")
null
}
override def getTypeFactory = ???
override def getQueryProvider = ???
override def getRootSchema = ???
}
Ama bu çalıştırdığınızda o bağlamdan v0stashed almak çalıştığı
MyDataContext name = v0stashed
Exception in thread "main" java.lang.NullPointerException
at org.apache.calcite.interpreter.Interpreter.<init>(Interpreter.java:71)
at Baz.bind(Unknown Source)
at org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:327)
at calcite.examples.TryIt$.delayedEndpoint$calcite$examples$TryIt$1(TryIt.scala:26)
at calcite.examples.TryIt$delayedInit$body.apply(TryIt.scala:18)
at scala.Function0$class.apply$mcV$sp(Function0.scala:34)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App$$anonfun$main$1.apply(App.scala:76)
at scala.App$$anonfun$main$1.apply(App.scala:76)
at scala.collection.immutable.List.foreach(List.scala:381)
at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35)
at scala.App$class.main(App.scala:76)
at calcite.examples.TryIt$.main(TryIt.scala:18)
at calcite.examples.TryIt.main(TryIt.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Bildirimi, ben don olsun: Şimdiye kadar ne yaptılar olduğunu ne olması gerektiğini bilmiyorum. Gördüğüm tek CalcitePrepare.Context impl, kullanmaktan kaçınmaya çalıştığım CalciteConnection kullanan bir tanesidir. Ayrıca, kalsit belgelerindeki kod parçacıklarını da aldım ancak kalsitle doluydu 1.7
Fikirler?