mirror of
https://github.com/outline/outline.git
synced 2026-06-13 11:25:03 +03:00
perf: Add missing indexes on foreign keys referencing documents (#12473)
* perf: Add missing indexes on foreign keys referencing documents Cascade deletes on the documents table were forced into sequential scans on file_operations, share_subscriptions, and access_requests because their documentId columns lacked a usable single-column index. Also fixes lint-staged to skip oxlint when every staged file matches an .oxlintrc.json ignore pattern, since oxlint exits 1 in that case. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Handle oxlint no-files exit instead of mirroring ignorePatterns Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -1,12 +1,15 @@
|
|||||||
|
// oxlint exits 1 when every input matches .oxlintrc.json ignorePatterns
|
||||||
|
// (e.g. migration-only commits). Swallow that specific case so the hook
|
||||||
|
// passes, while still surfacing real lint failures.
|
||||||
|
const oxlint = (files) =>
|
||||||
|
`bash -c 'out=$(oxlint ${files.join(" ")} --fix --type-aware 2>&1); rc=$?; printf "%s\\n" "$out"; if [ $rc -ne 0 ] && ! printf "%s" "$out" | grep -q "No files found to lint"; then exit $rc; fi'`;
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
// Run prettier first for formatting, then oxlint for linting, and translation updates on changes to JS and
|
// Run prettier first for formatting, then oxlint for linting, and translation updates on changes to JS and
|
||||||
// TypeScript files
|
// TypeScript files
|
||||||
"**/*.[tj]s?(x)": [
|
"**/*.[tj]s?(x)": [
|
||||||
(f) => `prettier --write ${f.join(" ")}`,
|
(f) => `prettier --write ${f.join(" ")}`,
|
||||||
(f) =>
|
(f) => (f.length > 20 ? `yarn lint --fix` : oxlint(f)),
|
||||||
f.length > 20
|
|
||||||
? `yarn lint --fix`
|
|
||||||
: `oxlint ${f.join(" ")} --fix --type-aware`,
|
|
||||||
() => `yarn build:i18n`,
|
() => `yarn build:i18n`,
|
||||||
() => "git add shared/i18n/locales/en_US/translation.json",
|
() => "git add shared/i18n/locales/en_US/translation.json",
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
/** @type {import('sequelize-cli').Migration} */
|
||||||
|
module.exports = {
|
||||||
|
async up(queryInterface) {
|
||||||
|
await queryInterface.addIndex("file_operations", ["documentId"], {
|
||||||
|
concurrently: true,
|
||||||
|
});
|
||||||
|
await queryInterface.addIndex("share_subscriptions", ["documentId"], {
|
||||||
|
concurrently: true,
|
||||||
|
});
|
||||||
|
await queryInterface.addIndex("access_requests", ["documentId"], {
|
||||||
|
concurrently: true,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
async down(queryInterface) {
|
||||||
|
await queryInterface.removeIndex("access_requests", ["documentId"]);
|
||||||
|
await queryInterface.removeIndex("share_subscriptions", ["documentId"]);
|
||||||
|
await queryInterface.removeIndex("file_operations", ["documentId"]);
|
||||||
|
},
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user