[ 
https://issues.apache.org/jira/browse/CALCITE-6613?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Caican Cai updated CALCITE-6613:
--------------------------------
    Description: 
{code:java}
public static class HrSchema {
  public final Employee[] emps = 0;
  public final Department[] depts = 0;
}
Class.forName("org.apache.calcite.jdbc.Driver");
Properties info = new Properties();
info.setProperty("lex", "JAVA");
Connection connection =
    DriverManager.getConnection("jdbc:calcite:", info);
CalciteConnection calciteConnection =
    connection.unwrap(CalciteConnection.class);
SchemaPlus rootSchema = calciteConnection.getRootSchema();
Schema schema = new ReflectiveSchema(new HrSchema());
rootSchema.add("hr", schema);
Statement statement = calciteConnection.createStatement();
ResultSet resultSet = statement.executeQuery(
    "select d.deptno, min(e.empid)\n"
    + "from hr.emps as e\n"
    + "join hr.depts as d\n"
    + "  on e.deptno = d.deptno\n"
    + "group by d.deptno\n"
    + "having count(*) > 1");
print(resultSet);
resultSet.close();
statement.close();
connection.close();
{code}

Currently, the data of emps and depts are both 0, and it is not reasonable to 
not create a new object. We can create new Employee[0] and add some data, which 
may be more reasonable.


  was:

{code:java}
public static class HrSchema {
  public final Employee[] emps = 0;
  public final Department[] depts = 0;
}
Class.forName("org.apache.calcite.jdbc.Driver");
Properties info = new Properties();
info.setProperty("lex", "JAVA");
Connection connection =
    DriverManager.getConnection("jdbc:calcite:", info);
CalciteConnection calciteConnection =
    connection.unwrap(CalciteConnection.class);
SchemaPlus rootSchema = calciteConnection.getRootSchema();
Schema schema = new ReflectiveSchema(new HrSchema());
rootSchema.add("hr", schema);
Statement statement = calciteConnection.createStatement();
ResultSet resultSet = statement.executeQuery(
    "select d.deptno, min(e.empid)\n"
    + "from hr.emps as e\n"
    + "join hr.depts as d\n"
    + "  on e.deptno = d.deptno\n"
    + "group by d.deptno\n"
    + "having count(*) > 1");
print(resultSet);
resultSet.close();
statement.close();
connection.close();
Where is the database? There is no database. The connection is completely empty 
until new ReflectiveSchema registers a Java object as a schema and its 
collection fields emps and depts as tables.

Calcite does not want to own data; it does not even have a favorite data 
format. This example used in-memory data sets, and processed them using 
operators such as groupBy and join from the linq4j library. But Calcite can 
also process data in other data formats, such as JDBC. In the first example, 
replace

Schema schema = new ReflectiveSchema(new HrSchema());
with

Class.forName("com.mysql.jdbc.Driver");
BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl("jdbc:mysql://localhost");
dataSource.setUsername("username");
dataSource.setPassword("password");
Schema schema = JdbcSchema.create(rootSchema, "hr", dataSource,
    null, "name");
{code}

Currently, the data of emps and depts are both 0, and it is not reasonable to 
not create a new object. We can create new Employee[0] and add some data, which 
may be more reasonable.



> Make the Background code examples in Calcite official documentation clearer
> ---------------------------------------------------------------------------
>
>                 Key: CALCITE-6613
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6613
>             Project: Calcite
>          Issue Type: Improvement
>            Reporter: Caican Cai
>            Priority: Minor
>
> {code:java}
> public static class HrSchema {
>   public final Employee[] emps = 0;
>   public final Department[] depts = 0;
> }
> Class.forName("org.apache.calcite.jdbc.Driver");
> Properties info = new Properties();
> info.setProperty("lex", "JAVA");
> Connection connection =
>     DriverManager.getConnection("jdbc:calcite:", info);
> CalciteConnection calciteConnection =
>     connection.unwrap(CalciteConnection.class);
> SchemaPlus rootSchema = calciteConnection.getRootSchema();
> Schema schema = new ReflectiveSchema(new HrSchema());
> rootSchema.add("hr", schema);
> Statement statement = calciteConnection.createStatement();
> ResultSet resultSet = statement.executeQuery(
>     "select d.deptno, min(e.empid)\n"
>     + "from hr.emps as e\n"
>     + "join hr.depts as d\n"
>     + "  on e.deptno = d.deptno\n"
>     + "group by d.deptno\n"
>     + "having count(*) > 1");
> print(resultSet);
> resultSet.close();
> statement.close();
> connection.close();
> {code}
> Currently, the data of emps and depts are both 0, and it is not reasonable to 
> not create a new object. We can create new Employee[0] and add some data, 
> which may be more reasonable.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to