From 1bcd161624534836f3f7c9bdd5cebe4d297b8aaf Mon Sep 17 00:00:00 2001 From: Mantas Kantautas Date: Wed, 28 Oct 2026 20:03:18 +0200 Subject: [PATCH] fix(mysql): format FOR UPDATE as a clause --- src/languages/mysql/mysql.formatter.ts | 1 + test/mysql.test.ts | 27 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/languages/mysql/mysql.formatter.ts b/src/languages/mysql/mysql.formatter.ts index c5e2ff840a..c3264469eb 100644 --- a/src/languages/mysql/mysql.formatter.ts +++ b/src/languages/mysql/mysql.formatter.ts @@ -18,6 +18,7 @@ const reservedClauses = expandPhrases([ 'ORDER BY', 'LIMIT', 'OFFSET', + 'FOR UPDATE', // Data manipulation // - insert: 'INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO]', diff --git a/test/mysql.test.ts b/test/mysql.test.ts index e6bcd37af9..5ed34b4b02 100644 --- a/test/mysql.test.ts +++ b/test/mysql.test.ts @@ -114,4 +114,31 @@ describe('MySqlFormatter', () => { DROP DEFAULT; `); }); + + // Issue #1005 + it('formats FOR UPDATE clause', () => { + expect( + format(` + SELECT * FROM users WHERE id = ? FOR UPDATE; + SELECT * FROM users WHERE id = ? FOR UPDATE SKIP LOCKED; + `) + ).toBe(dedent` + SELECT + * + FROM + users + WHERE + id = ? + FOR UPDATE; + + SELECT + * + FROM + users + WHERE + id = ? + FOR UPDATE + SKIP LOCKED; + `); + }); });