Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

fix(editor): Format SQL uppercases words inside string literals, quoted identifiers and comments

Open
#1,566 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
48/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
dart, flutter, sql
Domain
database

Research direction

Read lib/core/actions/sql_script_format.dart and the existing scanner in lib/core/database/destructive_sql_detector.dart, then review test/core/actions/sql_script_format_test.dart and SqlQueryTabSession.formatSql in lib/features/workspace/sql_query_tab_session.dart. Coordinate with issue #1511 because it touches the same detector. Done means formatting changes SQL keywords only in code segments, preserves the caret position, and the listed literal, identifier, comment, escape, and unterminated-literal cases are covered by tests.

Written by the indexing model from the issue text.

Description

bug core editor P1 parser

Problem

Format SQL Query (command palette, Shift+Alt+F) calls formatSqlScript (lib/core/actions/sql_script_format.dart:64), which runs one regex over the whole text and uppercases every word found in _kSqlKeywords. It does not know about string literals, quoted identifiers or comments:

Before After Effect
WHERE status = 'not null' WHERE status = 'NOT NULL' query now matches different rows
SELECT "order", "desc" FROM t SELECT "ORDER", "DESC" FROM t PostgreSQL: quoted identifiers are case-sensitive, the query fails (column does not exist)
SELECT `limit` FROM t (MySQL) SELECT `LIMIT` FROM t changes the identifier on case-sensitive table names
$$ ... begin ... end $$ (function body) body rewritten changes stored code
-- set in prod -- SET IN prod cosmetic

The only test (test/core/actions/sql_script_format_test.dart) checks a literal with no keywords inside.

Also in SqlQueryTabSession.formatSql (lib/features/workspace/sql_query_tab_session.dart:102-108) the caret always jumps to the end of the document after formatting.

Fix

  • Format only code segments. Scanning logic already exists in DestructiveSqlDetector.stripCommentsAndStrings (lib/core/database/destructive_sql_detector.dart:213: --, /* */, $tag$, '...'), but it drops the segments and does not know "..." / `...`. Extract one lexical scanner that yields segments (code, string, quoted identifier, comment, dollar-quoted body) and use it in the formatter (and later in the stripper / splitter; coordinate with #1511 which touches the same detector).
  • Keep the caret where it was, mapped onto the new text. Keywords keep their length, so the offset is unchanged.
  • Tests: each row of the table above, plus nested '' escapes and an unterminated literal.
Dominant language
Dart
Stars
23
Forks
1
Avg merge
45m
Merged PRs (30d)
529

Getting set up

Open in Codespaces

Starts the project's dev container in your browser, under your own GitHub account.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from QueryaHub/Querya-Desktop

All issues in QueryaHub/Querya-Desktop

Similar issues

More Dart issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.