Skip to content

Fix bare VALUES queries showing 0 rows in Execute SQL - #4243

Open
deepsidhu1313 wants to merge 1 commit into
sqlitebrowser:masterfrom
deepsidhu1313:fix/values-query-limit
Open

deepsidhu1313 wants to merge 1 commit into
sqlitebrowser:masterfrom
deepsidhu1313:fix/values-query-limit

Conversation

@deepsidhu1313

Copy link
Copy Markdown
Contributor

RowLoader appends LIMIT/OFFSET for lazy population, which SQLite rejects directly after a VALUES list, so for example VALUES (3),(1),(2) showed 0 rows. Queries starting with VALUES are now wrapped as SELECT * FROM () LIMIT .. OFFSET ... Other query shapes are unchanged.

New test-row-loader (27 cases; 12 failed before). Not handled: WITH ... VALUES.

The row loader appends a LIMIT/OFFSET clause to a query to load its rows in
chunks. SQLite does not accept a LIMIT clause directly after a VALUES clause,
so a statement like "VALUES (3),(1),(2)" could not be prepared and showed
0 rows without reporting any error. Use such a statement as a sub-query
("SELECT * FROM (VALUES ...) LIMIT n OFFSET m") instead, which keeps the lazy
population. Queries which already contain a LIMIT clause or a compound
operator and all other queries are loaded exactly as before.

Add test-row-loader which runs queries through SqliteTableModel and checks the
loaded rows, the row count and the statements which are used for the other
kinds of queries.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants