MergeActionClause object has wrong FirstTokenIndex value
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 45/100
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)
for the second clause WHEN NOT MATCHED BY SOURCE THEN DELETE without SearchCondition:
MergeActionClause.Action.FirstTokenIndex = 87
MergeActionClause.FirstTokenIndex = 87 (same as for Action)
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
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de microsoft/SqlScriptDOM
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
microsoft/SqlScriptDOM#228 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
microsoft/SqlScriptDOM#183 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 56/100
microsoft/SqlScriptDOM#226 · 1 reacción ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
microsoft/SqlScriptDOM#225 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 58/100
microsoft/SqlScriptDOM#224 ·
Todos los issues de microsoft/SqlScriptDOM
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
internal.h中,漏掉了1个定义。 Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 95/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
oxc-project/oxc#26944 ·