I will write full working implementation of ReflectiveSchema and "select count(*) from emps"; query execution to help you Give me one moment please
On Sat, Feb 19, 2022 at 8:52 AM xiaobo <[email protected]> wrote: > 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";<[email protected]>; > Send time: Saturday, Feb 19, 2022 0:37 AM > To: "dev"<[email protected]>; > > 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 <[email protected]> > 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";<[email protected]>; > > Send time: Sunday, Feb 13, 2022 10:25 AM > > To: "dev"<[email protected]>; > > > > 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 <[email protected]> > > 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";<[email protected]>; > > > Send time: Sunday, Feb 13, 2022 1:43 AM > > > To: "dev"<[email protected]>; > > > > > > 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 <[email protected]> > > > 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 ";<[email protected]>; > > > > Send time: Friday, Feb 11, 2022 11:20 PM > > > > To: "dev"<[email protected]>; > > > > > > > > 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"); > > > > Properties > > info > > > = > > > > new Properties(); > > > > > > > > info.setProperty("lex", "JAVA"); > > > > > > > > > info.setProperty(CalciteConnectionProperty.CASE_SENSITIVE.camelName(), > > > > "false"); > > > > > > > > info.setProperty("defaultSchema", "hr"); > > > > try { > > > > > > > > Connection connection = > > > > > > > > > > > > DriverManager.getConnection("jdbc:calcite:", info); > > > > > > > > CalciteConnection conn = > > > > > > > > > > > > connection.unwrap(CalciteConnection.class); > > > > > > > > SchemaPlus rootSchema = conn.getRootSchema(); > > > >
