Hi,

There is a documented "schema" parameter for the jdbc connection string 
parameters at page:
https://calcite.apache.org/docs/adapter.html
the question is : is a init schema the default schema, if not , can you add a 
defaultSchema paramter for the jdbc connection string?

Regards 





------------------ 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