Heya, I actually wrote quite a long tutorial on how to connect to Calcite via SQuirreL/DBeaver or similar tools. It's not a simple process.
Here is the guide: Making Apache Calcite work in SQuirreL SQL Client (github.com) <https://gist.github.com/GavinRay97/44fcd0f17e5c62ed6e7880fed0b0042e> On Wed, Nov 8, 2023 at 1:55 PM TJ Banghart <tjbangh...@google.com.invalid> wrote: > Hello Raja and welcome to Calcite! > > I have found it helpful to think of an Avatica server in terms of its main > interfaces Service > < > https://github.com/apache/calcite-avatica/blob/519d1ceeb04cd99530bceb60c1a8e0966c413541/core/src/main/java/org/apache/calcite/avatica/remote/Service.java#L59C7-L59C7 > > > and Meta > < > https://github.com/apache/calcite-avatica/blob/519d1ceeb04cd99530bceb60c1a8e0966c413541/core/src/main/java/org/apache/calcite/avatica/Meta.java#L53 > >. > The service implementation determines what RPC message format to use as > well as what RPCs are available. The meta implementation determines how the > server retrieves metadata, executes queries, etc. > When starting the server we can supply both the service and meta > implementations we want to use. In this case we want the server to access > Calcite locally while using the generic Avatica driver from a JDBC client > like DBeaver. For example (in Kotlin): > > class MyJdbcServer(port: Int) { > val meta: Meta = MyCalciteMetaFactory().create() > val service: Service = LocalService(meta) > val server: HttpServer = HttpServer(port, AvaticaJsonHandler(service)) > > ... methods to start/stop server etc... > } > > class MyCalciteMetaFactory() : Meta.Factory { > override fun create(args: List<String?>?): Meta { > val info: Properties = ...some method to generate Calcite > connection props... > val driver: Driver = Driver() > val connection: AvaticaConnection = driver.connect("jdbc:calcite:", > info) as AvaticaConnection? > > return driver.createMeta(connection) > } > } > > > All RPCs from the JDBC client using the generic Avatica driver should be > handled by the local CalciteMetaImpl > < > https://github.com/apache/calcite/blob/main/core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java > > > instance > associated with the server. This is the same as if you had a local Calcite > connection. Note that this will not work behind a load-balancer as local > Calcite connections are "stateful" (see CALCITE-668 > <https://issues.apache.org/jira/browse/CALCITE-668>). > I'm sure others might have a better way but this has worked for us so far! > > On Wed, Nov 8, 2023 at 9:00 AM Raja Ranjan Senapati <raja.ran...@gmail.com > > > wrote: > > > Team, > > I am a newbie to Calcite and am excited about its potential. I have a > > question. According to the status section on the docs page > > <https://calcite.apache.org/docs/>, calcite supports Local and remote > JDBC > > drivers using Avatica. My interpretation of that statement is we can > wrap > > any data source using Calcite and expose the data by creating a JDBC > > server. This JDBC server can be accessed remotely using the remote > Calcite > > JDBC driver, from tools such as DBeaver/DataGrip. > > > > I can create a local JDBC wrapper on my data source and use it from the > > same JVM. However, I cannot find any sample code that would create a JDBC > > server and serve remote clients using a remote JDBC server. I explored > > concepts like Avatica Http Server > > < > > > https://calcite.apache.org/avatica/javadocAggregate/org/apache/calcite/avatica/server/HttpServer.html > > >but > > could not find any concrete implementation using Calcite. Can you please > > point me to some references/samples? I think it would be awesome if you > > could add this to some FAQ/Tutorial page in Calcite as well. > > > > Thanks, > > Raja Senapati > > > > > -- > > TJ >