【问题标题】:Where can I find code responsible for SQL query execution on engine level for HyperSQL?我在哪里可以找到负责 HyperSQL 引擎级别 SQL 查询执行的代码?
【发布时间】:2020-12-31 10:31:09
【问题描述】:

我找到了下一个带有HyperSQL 的git repo。我正在检查JDBC interfaces 的数据库使用情况。

比如我想和DB建立连接,执行一些语句:

Connection connection = ...
Statement statement = connection.createStatement();
String query = "CREATE TABLE mytable (id IDENTITY , value VARCHAR)";
statement.executeUpdate(query);

如我所见,内部 JDBC 驱动程序类调用的下一个序列发生了:

JDBCDriver -> JDBCConnection -> JDBCStatement -> Session -> Result (?) -> ? -> HSQLDB  

对于JDBCStatement

public synchronized ResultSet executeQuery(
            String sql) throws SQLException {

        fetchResult(sql, StatementTypes.RETURN_RESULT,
                    JDBCStatementBase.NO_GENERATED_KEYS, null, null);

        return getResultSet();
}

对于fetchResult

private void fetchResult(String sql, int statementRetType,
                             int generatedKeys, int[] generatedIndexes,
                             String[] generatedNames) throws SQLException {
   ...
   resultIn = connection.sessionProxy.execute(resultOut);
   ...
}

下一步 - Session 调用。

但是我在哪里可以找到负责通过 DBMS 引擎执行 SQL 语句的代码?

【问题讨论】:

    标签: java jdbc hsqldb


    【解决方案1】:

    HSQLDB 源代码位于 SourceForge.net 上托管的 Subversion(不是 Git)存储库中:https://sourceforge.net/p/hsqldb/svn/HEAD/tree/base/trunk/

    如果你从 Session.execute(Result ...) 方法,找到 EXECDIRECT 的情况,你会看到语句首先被编译,然后被执行。您可以从那里开始学习,其中包括大量负责编译和执行不同类型 SQL 语句的类。

    【讨论】:

    • 但是为什么先是executeDirectStatement,然后再performPostExecute得到同样的结果呢?
    • performPostExecute 涵盖了除实际查询之外需要完成的任何工作。 SQL执行不是简单的创建一个结果,还要处理事务、资源等。
    猜你喜欢
    • 2015-08-15
    • 1970-01-01
    • 2021-01-12
    • 2011-08-31
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多