Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

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

Aberta
#1,566 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
48/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
dart, flutter, sql
Domínio
database

Direção de pesquisa

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.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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.
Linguagem predominante
Dart
Estrelas
23
Forks
1
Merge médio
31min
PRs com merge (30d)
570

Preparar o ambiente

Abrir no Codespaces

Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de QueryaHub/Querya-Desktop

Todas as issues de QueryaHub/Querya-Desktop

Issues semelhantes

Mais issues de Dart

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.