bug: Plugin fails to parse modern SQL syntax including CTEs and ON CONFLICT clauses.
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 38/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Área
- database, mobile-dev
Línea de trabajo
Empieza reproduciendo el problema mediante execute o executeSet con los ejemplos de INSERT/UPSERT y CTE. Lee las rutas de análisis relevantes en android/src/main/java/com/getcapacitor/community/database/sqlite/SQLite/Database.java y UtilsSQLStatement.java. El trabajo estará terminado cuando RETURNING se elimine sin truncar las expresiones ON CONFLICT ni descartar las definiciones de CTE, manteniendo intacta la compatibilidad con dispositivos antiguos.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Plugin version:
7.0.2
Platform(s):
Android, Web
Current behavior:
- When an INSERT or UPSERT statement contains an ON CONFLICT clause with its own parenthesized expressions (e.g. conflict targets or column-name-lists), the plugin incorrectly splits the statement when detecting RETURNING.
For example a valid statement like:
INSERT INTO table (col1, col2) VALUES (1,2), (3,4)
ON CONFLICT (col1) DO UPDATE SET col2 = 0
RETURNING *;
is transformed into the invalid
INSERT INTO table (col1, col2) VALUES (1,2), (3,4)
ON CONFLICT (col1);
- The Common Table Expression used for "UPDATE" or "DELETE" is ignored by the getUpdDelReturnedValues and the resulting statement may be invalid.
An update statement with a CTE likeWITH new_data (col1, col2) AS ( VALUES (1,2),(3,4),(5,6) ) SELECT * FROM table WHERE col1 IN (SELECT col1 FROM new_data);would becomeSELECT (col1, col2) FROM table WHERE col1 IN (SELECT col1 FROM new_data);with the CTE definition missing.
Expected behavior:
Since the returning clause is always last in the grammar for the statements INSERT, UPDATE and DELETE, the parsing should just remove the associated part. I understand that the altering of the statement is performed in order to maintain retro-compatibility with older devices running older versions of SQLite, although it was not immediately clear to me while debugging the issue that this was happening behind the scenes.
Resources:
- https://sqlite.org/syntax/insert-stmt.html
- https://sqlite.org/syntax/upsert-clause.html
- https://sqlite.org/syntax/update-stmt.html
- https://sqlite.org/lang_delete.html
Steps to reproduce:
Run a query like the above using the plugin methods "execute" or "executeSet", observe the error in response.
Related code:
The methods responsible for this behaviour are in the Java implementation:
android\src\main\java\com\getcapacitor\community\database\sqlite\SQLite\Database.java and
android\src\main\java\com\getcapacitor\community\database\sqlite\SQLite\UtilsSQLStatement.java
Other information:
The issue has been isolated, verified and debugged in Android Studio. An attempt for a resolution will be shown in an associated draft PR.
Capacitor doctor:
Capacitor Doctor
Latest Dependencies:
@capacitor/cli: 7.4.4
@capacitor/core: 7.4.4
@capacitor/android: 7.4.4
@capacitor/ios: 7.4.4
Installed Dependencies:
@capacitor/core: 7.4.3
@capacitor/android: 7.4.3
@capacitor/ios: 7.4.3
@capacitor/cli: 7.4.3
[success] Android looking great! 👌
[error] Xcode is not installed
- Lenguaje dominante
- Swift
- Estrellas
- 663
- Forks
- 159
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la 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 capacitor-community/sqlite
-
Dificultad 3/5 1-2 días Aptitud para principiantes 72/100
capacitor-community/sqlite#700 · 1 comentario · 1 reacción ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
capacitor-community/sqlite#693 · 7 reacciones ·
-
bug/fix needs: triage
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
capacitor-community/sqlite#690 ·
-
feature needs: triage
Dificultad 3/5 1-2 días Aptitud para principiantes 55/100
capacitor-community/sqlite#689 ·
-
bug/fix needs: triage
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
capacitor-community/sqlite#685 ·
Todos los issues de capacitor-community/sqlite
Issues similares
-
area: agents area: cli bug difficulty:2 help wanted S3: minor
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
manaflow-ai/cmux#15718 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
mozilla-mobile/firefox-ios#35850 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
chattymin/PokeTokenBar#385 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
appandflow/stim#1941 ·
Los mantenedores suelen responder en 1 día
-
product / avatars product / self-hosted product / storage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
appwrite/appwrite#13985 · 1 comentario ·
Los mantenedores suelen responder en 1 día