Thanks Gavin,

From the Java example it seems  FrameworkConfig can't be attached to 
calciteconnection something like passing a Property object when opening the 
connection, and in order to make FrameworkConfig work, we must use the relation 
related APIs of calcite(like the executeQuery(RelNode relRoot)  method), but 
can't use the JDBC APIs of calcite connection, are we right?

 




------------------ Original ------------------
From:  "Gavin Ray";<ray.gavi...@gmail.com>;
Send time: Saturday, Feb 19, 2022 0:37 AM
To: "dev"<dev@calcite.apache.org>; 

Subject:  Re: can we set a default schema for calcite connection to avoid 
writing schema names in sql



Sure

Here is a singleton object that uses FrameworkConfig in Kotlin to manage a
single master RootSchema + CalciteConnection:
https://github.com/GavinRay97/GraphQLCalcite/blob/e4ba2426edb546bda9bd5bd87a61764850138348/src/main/kotlin/CalciteSchemaManager.kt#L23-L117

And here is the same in Java:
https://github.com/GavinRay97/GraphQLCalcite/blob/1070d179b67d803f05975cf416c392b010823069/src/main/java/com/example/calcitewrappers/DatabaseManager.java#L22-L60

Hope this is helpful =)

On Fri, Feb 18, 2022 at 10:06 AM xiaobo <guxiaobo1...@qq.com.invalid> wrote:

> Hi Gavin,
>
>               Can you share a complete example of using a FrameworkConfig
> object to open a calcite connection, thanks.
>
>                SchemaPlus rootSchema = Frameworks.createRootSchema(true);
>                 Schema schema = new ReflectiveSchema(new HrSchema2(emps1));
>                 rootSchema.add("hr", schema);
>
>                 FrameworkConfig builder = Frameworks.newConfigBuilder()
>                 .defaultSchema(rootSchema.getSubSchema("hr"))
>                 .parserConfig(SqlParser.config().withCaseSensitive(false))
>                 .build();
>
>
>
>
> ------------------ Original ------------------
> From:  "Gavin Ray";<ray.gavi...@gmail.com>;
> Send time: Sunday, Feb 13, 2022 10:25 AM
> To: "dev"<dev@calcite.apache.org>;
>
> Subject:  Re: can we set a default schema for calcite connection to avoid
> writing schema names in sql
>
>
>
> You can create an empty root schema, add a ReflectiveSchema, and then set
> this as the default schema:
>
> val rootSchema: SchemaPlus = Frameworks.createRootSchema(true)
> val hrReflectiveSchema = ReflectiveSchema(HrSchema())
> rootSchema.add("hr", hrReflectiveSchema)
>
> Frameworks.newConfigBuilder()
>     .defaultSchema(rootSchema.getSubSchema("hr"))
>
> On Sat, Feb 12, 2022 at 9:14 PM xiaobo <guxiaobo1...@qq.com.invalid>
> wrote:
>
> > Hi Gavin,
> > Thanks for your help,
> >
> > the defaultSchema(SchemaPlus defaultSchema) method need a SchemaPlus
> which
> > only can be get after a connection is opened, but we want to set a target
> > subschema such as RelfectiveShcema to be the default one, and we guess
> the
> > default schema setting operation should be done before the connection is
> > opened.
> >
> >
> >
> > ------------------ Original ------------------
> > From:  "Gavin Ray";<ray.gavi...@gmail.com>;
> > Send time: Sunday, Feb 13, 2022 1:43 AM
> > To: "dev"<dev@calcite.apache.org>;
> >
> > Subject:  Re: can we set a default schema for calcite connection to avoid
> > writing schema names in sql
> >
> >
> >
> > Hey Xiabo,
> >
> > You can do this, however it is easiest to do from the "FrameworkConfig"
> > object, like this:
> >
> > import org.apache.calcite.tools.FrameworkConfig
> > // Need to set case-sensitive to false, or else it tries to
> > // look up capitalized table names and fails
> > //
> > // IE: "EMPS" instead of "emps"
> > val frameworkConfig: FrameworkConfig = Frameworks.newConfigBuilder()
> >  .defaultSchema(connection.rootSchema)
> >  .parserConfig(SqlParser.config().withCaseSensitive(false))
> >  .build()
> >
> > Hope this helps =)
> >
> > On Fri, Feb 11, 2022 at 9:09 PM xiaobo <guxiaobo1...@qq.com.invalid>
> > wrote:
> >
> > > sorry for the html escape characters,
> > > we tried the following and it does not work
> > >
> > >         Class.forName("org.apache.calcite.jdbc.Driver");
> > >                 Properties info = new Properties();
> > >                 info.setProperty("lex", "JAVA");
> > >                 info.setProperty(InternalProperty.CASE_SENSITIVE.name
> (),
> > > "false");
> > >                 info.setProperty("defaultSchema", "hr");
> > >                 Connection connection =
> > > DriverManager.getConnection("jdbc:calcite:", info);
> > >                 CalciteConnection conn =
> > > connection.unwrap(CalciteConnection.class);
> > >                 SchemaPlus rootSchema = conn.getRootSchema();
> > >                 Schema schema = new ReflectiveSchema(target);
> > >                 rootSchema.add(schemaName, schema);
> > >                 return conn;
> > >
> > >
> > >
> > >
> > > ------------------ Original ------------------
> > > From:  "xiaobo ";<guxiaobo1...@qq.com.INVALID>;
> > > Send time: Friday, Feb 11, 2022 11:20 PM
> > > To: "dev"<dev@calcite.apache.org>;
> > >
> > > Subject:  can we set a default schema for calcite connection to avoid
> > > writing schema names in sql
> > >
> > >
> > >
> > > we have tried the following and it does not work
> > >
> > >
> > > Class.forName("org.apache.calcite.jdbc.Driver");
> > > &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Properties
> info
> > =
> > > new Properties();
> > > &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
> > > info.setProperty("lex", "JAVA");
> > > &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
> > > info.setProperty(CalciteConnectionProperty.CASE_SENSITIVE.camelName(),
> > > "false");
> > > &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
> > > info.setProperty("defaultSchema", "hr");
> > > &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {
> > > &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
> > > &nbsp;&nbsp;&nbsp; Connection connection =
> > > &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
> > > &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
> > > DriverManager.getConnection("jdbc:calcite:", info);
> > > &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
> > > &nbsp;&nbsp;&nbsp; CalciteConnection conn =
> > > &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
> > > &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
> > > connection.unwrap(CalciteConnection.class);
> > > &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
> > > &nbsp;&nbsp;&nbsp; SchemaPlus rootSchema = conn.getRootSchema();
> > > &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;

Reply via email to