owncloud源码分析2--数据库增删改查

数据库增删改查方法

把到目前位置整理的一起放在这里

以下都是在这个中进行的操作:E:\wamp\www\owncloud\lib\private\files\cache\cache.php

1、增加

put方法中的如下图位置插入数据


插入正确返回最新一条的id即插入的数据的id。(实现在E:\wamp\www\owncloud\lib\private\db\adapter.php中)

 

在这里用这个链接插入数据

E:\wamp\www\owncloud\3rdparty\doctrine\dbal\lib\Doctrine\DBAL\Connection.php

 

2、删除

remove方法,从数据库移除数据


上面只是移除方法,具体删除会先调用put方法,插入一条标识为已经删除的本地数据,之后再调用上面的删除方法,如果是有缩略图也会一并删除。删除时已经把文件放到本地附带删除标记。如果恢复,会将本地文件再上传到服务器,需要把删除并保存本地功能去掉。待解决:

E:\wamp\www\owncloud\lib\private\preview.php中有一个addPathToDeleteFileMapper方法

其中删除之前还有个prepare_delete方法

E:\wamp\www\owncloud\lib\private\files\view.php中的basicOperation中的runPostProxies方法

E:\wamp\www\owncloud\apps\activity\lib\hooksstatic.php中的fileDelete删除文件

 ↓↓↓

E:\wamp\www\owncloud\apps\activity\lib\hooks.php中的fileDelete方法

  ↓↓↓

E:\wamp\www\owncloud\apps\activity\lib\hooks.php中的addNotificationsForFileAction

 ↓↓↓

E:\wamp\www\owncloud\apps\files_trashbin\lib\storage.php中的unlink方法请求删除"ccc"文件夹

  ↓↓↓

E:\wamp\www\owncloud\apps\files_trashbin\lib\storage.php的doDelete方法进行进一步删除

  ↓↓↓

E:\wamp\www\owncloud\apps\files_trashbin\lib\trashbin.php中的move2trash方法调用将文件复制移动到本地位置留着恢复

  ↓↓↓

E:\wamp\www\owncloud\owncloud\lib\private\files\view.php得rename方法用来重命名或者移动文件其中使用了文件流复制到本地位置,之后删除远程文件

加个判断如果path1="/files/FTP/1.jpg"包含FTP(是否是自己命名的待定)那么直接删除


就是以上的复制到本地并删除文件(红线部分)修改之后可用,但是会存储到files_trash表中,文件没有,files_cache也没有。已删除文件处也不会显示。

3、更改

(1)以更新文件名字为例

E:\wamp\www\owncloud\apps\files\lib\app.php中的rename方法

  ↓↓↓

E:\wamp\www\owncloud\lib\private\files\view.php这里的rename方法来重命名文件

  ↓↓↓

E:\wamp\www\owncloud\apps\files_trashbin\lib\storage.php中的rename调用

E:\wamp\www\owncloud\apps\files_external\lib\streamwrapper.php的rename方法重命名ftp的文件

  ↓↓↓

E:\wamp\www\owncloud\lib\private\files\cache\updater.php中的rename方法重命名数据库中数据

  ↓↓↓

E:\wamp\www\owncloud\lib\private\files\cache\cache.php中的move方法中的


这条sql执行更新命令,over!!!!!!!!!

 

更新完还会change一大堆信息,fuck!

 

rename完了回到view的rename方法,从第二道红线继续运行

最后返回数据到

E:\wamp\www\owncloud\apps\files\lib\app.php中的rename方法

  ↓↓↓

这下真over了算是!!!!

(2)修改更新txt文件

E:\wamp\www\owncloud\apps\files_texteditor\ajax\savefile.php中的


上面红线中的方法,修改内容。

4、查询

查询列表list.php为例

E:\wamp\www\owncloud\lib\private\files\cache\cache.php的getFolderContentsById($fileId)方法从数据库选取数据

以上,over


数据库连接处

E:\wamp\www\owncloud\lib\private\db.php的prepare方法


E:\wamp\www\owncloud\lib\private\server.php中的getDatabaseConnection方法

判断是否是写操作但是没卵用啊,和数据库分离又没关系

E:\wamp\www\owncloud\3rdparty\doctrine\dbal\lib\Doctrine\DBAL\Connection.php的prepare方法

  ↓↓↓

E:\wamp\www\owncloud\3rdparty\doctrine\dbal\lib\Doctrine\DBAL\Connection.php的connection方法

 ↓↓↓

还有个E:\wamp\www\owncloud\3rdparty\doctrine\dbal\lib\Doctrine\DBAL\Driver\PDOConnection.php类

 

另起,以下准备修改主从,只是一个想法,没实现:


以上可见,通过register方法将对象注册到server对象中

根据以上修改如下:

 

E:\wamp\www\owncloud\lib\private\db\connectionfactory.php中加入了一个

/**
 * 设置从数据库服务器
 * @param \OC\SystemConfig $config
 * @return array
 */
public function createFConnectionParams($config) {

方法用来生成从服务器的链接

在server.php的注册方法中加入了如下方法:

$this->registerService('FDatabaseConnection', function (Server $c) {
   $factory = new \OC\DB\ConnectionFactory();
   $systemConfig = $c->getSystemConfig();
   $type = $systemConfig->getValue('dbtype', 'sqlite');
   if (!$factory->isValidType($type)) {
      throw new \OC\DatabaseException('Invalid database type');
   }
   $connectionParams = $factory->createFConnectionParams($systemConfig);
   $connection = $factory->getConnection($type, $connectionParams);
   $connection->getConfiguration()->setSQLLogger($c->getQueryLogger());
   return $connection;
});

注册了一个从服务器链接

继续加入了

/**
 * 返回从服务器的链接session
 * @return \OCP\IDBConnection
 */
function getFDatabaseConnection() {
   return $this->query('FDatabaseConnection');
}

获取链接方法

以及注册Fdb方法


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值