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

feat: add unique constrait for offsets #36

Merged
merged 2 commits into from
Aug 29, 2024
Merged

Conversation

Enter-tainer
Copy link
Member

No description provided.

@Enter-tainer
Copy link
Member Author

思考,会不会有两个range,本来的start end是不同的,结果一通edit之后,他俩的range变得相同了。现在的处理是怎么样的呀

@shaokeyibb
Copy link
Member

shaokeyibb commented Aug 29, 2024

思考,会不会有两个range,本来的start end是不同的,结果一通edit之后,他俩的range变得相同了。现在的处理是怎么样的呀

我理解可能性不大,如果有的话,会正常处理的

@Enter-tainer
Copy link
Member Author

啊我是说如果我加了这个constraint,这个case是不是就爆了

@shaokeyibb
Copy link
Member

啊我是说如果我加了这个constraint,这个case是不是就爆了

ummm,这个倒不会,目前确实可以保证 page_id, start, end 是唯一的

@Enter-tainer
Copy link
Member Author

Enter-tainer commented Aug 29, 2024

okk,那我们merge一把这个吧。我找gpt老师学习了一把,我们这里的七条sql应该可以简化成三条(需要加上这个constrait)。这里分别是三个 get or insert的逻辑。

export async function postComment(env: Env, req: PostComment) {
    const db = env.DB;

    // 插入页面(如果不存在)并返回 ID
    const pageResult = await db.prepare(`
        INSERT INTO pages (path) VALUES (?)
        ON CONFLICT (path) DO UPDATE SET id = id
        RETURNING id
    `).bind(req.path).first();

    const pageId = pageResult.id;

    // 插入偏移量(如果不存在)并返回 ID
    const offsetResult = await db.prepare(`
        INSERT INTO offsets (page_id, start, end) 
        VALUES (?, ?, ?)
        ON CONFLICT (page_id, start, end) DO UPDATE SET id = id
        RETURNING id
    `).bind(pageId, req.offset.start, req.offset.end).first();

    const offsetId = offsetResult.id;

    // 插入评论
    await db.prepare(`
        INSERT INTO comments (offset_id, commenter_id, comment, created_time)
        VALUES (
            ?,
            (SELECT id FROM commenters WHERE oauth_provider = ? AND oauth_user_id = ?),
            ?,
            ?
        )
    `).bind(
        offsetId,
        req.commenter.oauth_provider,
        req.commenter.oauth_user_id,
        req.comment,
        new Date().toISOString()
    ).run();
}

@Enter-tainer Enter-tainer merged commit cee4e84 into master Aug 29, 2024
5 checks passed
@Enter-tainer
Copy link
Member Author

@shaokeyibb 我有点担心现在加入unique约束之后会没法处理这样的case。假如之前有两个offset,它们是不同的。经过一番修改之后,他俩变得一样了。
由于我们在提交更改的时候,只改了offset表,所以这里应该一定会打架。

@shaokeyibb
Copy link
Member

@shaokeyibb 我有点担心现在加入unique约束之后会没法处理这样的case。假如之前有两个offset,它们是不同的。经过一番修改之后,他俩变得一样了。 由于我们在提交更改的时候,只改了offset表,所以这里应该一定会打架。

ummm,如果有这个情况那确实会打架...但是真的会有吗

@Enter-tainer Enter-tainer deleted the Enter-tainer-patch-2 branch September 5, 2024 03:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants