Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

MergeActionClause object has wrong FirstTokenIndex value

Abierto
#118 0 comentarios 5 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
45/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Estancado
Stack tecnológico
sql

Línea de trabajo

Comienza reproduciendo la sentencia MERGE proporcionada y localizando dónde se asignan los índices de tokens de MergeActionClause. Compara las dos primeras cláusulas y, a continuación, añade una prueba de regresión que muestre que cada MergeActionClause.FirstTokenIndex apunta a su palabra clave WHEN; la corrección estará terminada cuando los valores informados reflejen esas posiciones.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

ScriptDom version: 161.9142.1
Compatibility level: 150

After parsing a MERGE statement MergeActionClause instance has the same FirstTokenIndex as it's property - Action (for example, ValuesInsertSource instance); in case if there is a SearchCondition then the clause's FirstTokenIndex will equal to SearchCondition.FirstTokenIndex value. This seems to be inaccurate. MergeActionClause is the object containing Condition, SearchCondition and Action properties which makes me believe that the MergeActionClause instance is supposed to match the whole clause starting with WHEN keyword which occurs way earlier in a script than the merge action (or search condition).

Here is a sample script:

MERGE t WITH (HOLDLOCK) AS trg
USING (SELECT * FROM @src) AS src
ON trg.id = src.id
WHEN NOT MATCHED AND (1=1) THEN
    INSERT (title)
    VALUES (src.title)
WHEN NOT MATCHED BY SOURCE THEN
    DELETE
WHEN MATCHED THEN
    UPDATE SET
        title = src.title,
        lastmod = SYSDATETIME()
OUTPUT DELETED.title AS old_title, $action AS act
INTO @log(old_title, act);

for the first clause WHEN NOT MATCHED AND (1=1) THEN INSERT clause:

MergeActionClause.SearchCondition.FirstTokenIndex = 50
MergeActionClause.Action.FirstTokenIndex = 59
MergeActionClause.FirstTokenIndex = 50 (same as for SearchCondition)

Image

for the second clause WHEN NOT MATCHED BY SOURCE THEN DELETE without SearchCondition:

MergeActionClause.Action.FirstTokenIndex = 87
MergeActionClause.FirstTokenIndex = 87 (same as for Action)

Image

and this makes it hard to work with such clauses in code - the beginning of each WHEN has to be located manually by iterating tokens backwards.

MergeActionClause.FirstTokenIndex should always point to the WHEN keyword.


See also token-index related bug-reports: #90 , #91

Lenguaje dominante
GAP
Estrellas
277
Forks
43
Merge medio
6 d 17 h
PR fusionados (30 d)
3

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de microsoft/SqlScriptDOM

Todos los issues de microsoft/SqlScriptDOM

Issues similares

Más issues de Compilers

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.