Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

素材库文件夹 CRUD 和文件 CRUD #15

Closed
web3nomad opened this issue Mar 15, 2024 · 3 comments
Closed

素材库文件夹 CRUD 和文件 CRUD #15

web3nomad opened this issue Mar 15, 2024 · 3 comments
Assignees
Labels
feature New features
Milestone

Comments

@web3nomad
Copy link
Member

No description provided.

@web3nomad web3nomad added the enhancement Improvements label Mar 15, 2024
@web3nomad web3nomad added this to the Alpha milestone Mar 15, 2024
@web3nomad web3nomad self-assigned this Mar 15, 2024
@web3nomad
Copy link
Member Author

web3nomad commented Mar 16, 2024

重命名文件夹的算法是一次性更新 materializedPath 的前缀。是可行的。

UPDATE "FilePath"
SET "materializedPath" = REPLACE("materializedPath", "/a/aa/", "/a/ab/")
WHERE "materializedPath" LIKE "/a/ab/%";

关于 REPLACE 函数的说明: 对于 /a/aa/a/aa/ 这种路径,如果是把 /a/aa/ 修改成 /a/ab/,
下面的 SQL 只会把 /a/aa/a/aa/ 变成 /a/ab/a/aa/ 而不会变成 /a/ab/a/ab/,因为 REPLACE 只替换第一个找到的字符串
另外,也不会把 /xxx/a/aa/ 替换成 /xxx/a/ab/,因为 LIKE 语句确保选择的 file_path 的前缀都是 /a/aa/,所以 /xxx/a/aa/ 不会被更新

@web3nomad
Copy link
Member Author

web3nomad commented Mar 16, 2024

注意: 对于 /a/aa/a/aa/ 这种路径,如果是把 /a/aa/ 修改成 /a/ab/, 下面的 SQL 只会把 /a/aa/a/aa/ 变成 /a/ab/a/aa/ 而不会变成 /a/ab/a/ab/,因为 REPLACE 只替换第一个找到的字符串 另外,也不会把 /xxx/a/aa/ 替换成 /xxx/a/ab/,因为 LIKE 语句确保选择的 file_path 的前缀都是 /a/aa/,所以 /xxx/a/aa/ 不会被更新

事实证明这样不对,/a/aa/a/aa/ 不是一个好的例子因为 /a/aa/ 是一个 occurrence,剩下的部分只有 a/aa/,确实是匹配不到的。如果例子是这样 /a/aa/x/a/aa/x/,重命名 /a/aa/ 成 /a/ab/ 的时候,最终会导致 /a/ab/x/a/ab/x/。

所以,不能用 REPLACE,而改用 前缀拼接是靠谱的。

UPDATE FilePath
SET materializedPath = "/a/ab/" || SUBSTR(materializedPath, LENGTH("/a/aa/") + 1)
WHERE materializedPath LIKE "/a/aa/%"

@web3nomad
Copy link
Member Author

删除 file_path 以后要检查一下 assetobject 是否还有其他引用,如果没有的话,要删除 assetobject,进一步的,删除 filehandlertask

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature New features
Projects
None yet
Development

No branches or pull requests

1 participant