2016-03-29 12 views
3

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?

cevap

0

Neredeyse işe yaramalıydı, JdbcSchema'u kullanarak bazı şeylerle aynı şeyi yaptım. Benim önsezim kıvılcım şemasını kullanmaya çalışıyor ve sadece Calcite'deki sürüm numaralarına göre yargılamak, çok iyi bakıldığını düşünmüyorum. Yansıtıcı İK biri veya JDBC şeması gibi daha basit bir şema kullanmayı deneyin ve sahip olmanız gereken bazı küçük değişikliklerle birlikte çalışmalıdır.