Pgjdbc之CopyManager(二)

引入

CopyManager主要用于远程执行数据库的copy命令,主要分为In和Out两方面。

public long copyOut(final String sql, Writer to) 方法开始:

解析

流程

新建一个copyOut,不断读取后端传过来的数据,写到Writer流里。

内部实现
cp = copyOut(sql);

关注一下CopyOperation op = queryExecutor.startCopy(sql, connection.getAutoCommit())的实现:

忽略有关事务的判断部分,关注功能实现:

'Q':Identifies the message as a simple query.

由发送的消息格式可以看出,这部分将该sql以简单查询的格式发出了。

向下看一下:processCopyResults(null, true)部分,该方法在上一篇记录里看过,此部分正常应该进入该判断逻辑中:

与上一篇记录的逻辑一致,剩余的消息在初始化方法中接收,最终执行效果和上篇记录相似:

buf = cp.readFromCopy()

该部分最终的功能执行代码为:

'd':Identifies the message as data.COPY,前后端都可以使用该功能

op.handleCopydata(buf);将该数据放入了op的属性里,该属性:

cp.cancelCopy();

同上篇

总结

同上篇逻辑类似,未细说逻辑

补充


posted @ 2024-08-23 17:11  li-羡鱼  阅读(92)  评论(0)    收藏  举报