-
Notifications
You must be signed in to change notification settings - Fork 3.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
sql: incorrect number of rows when we have an offset over a limit #38659
Labels
A-sql-execution
Relating to SQL execution.
C-bug
Code not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior.
Comments
jordanlewis
added
the
C-bug
Code not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior.
label
Jul 3, 2019
Thanks. This looks like a bug in distsql physical planning. Explain plans for your scenario:
Note that the physical plan combines the offset and limit in a bogus way. |
craig bot
pushed a commit
that referenced
this issue
Jul 8, 2019
38667: distsqlplan: bugfix to planning offsets on top of limits r=jordanlewis a=jordanlewis Fixes #38659. DistSQL physical planning removes limitNodes when it can, by pushing the embedded limit and offset into the most recent processor's PostProcessSpec when possible. This was previously buggy, when trying to plan an offset on top of a processor that already had a limit inside, because the code simply set the offset on the processor without regard for the fact that offsets are always applied first at runtime, before limits. Release note (bug fix): correct issue that caused certain plans that contained both offsets and limits to return more rows than desired. Co-authored-by: Jordan Lewis <jordanthelewis@gmail.com>
craig bot
pushed a commit
that referenced
this issue
Jul 9, 2019
38570: opt: fix panic recovery for error handling r=RaduBerinde a=RaduBerinde The major entry points in the optimizer catch all panics that throw an error and converts them to errors. Unfortunately, this also catches runtime errors (in which case we convert them to errors and lose the stack trace). This change adds a `ShouldCatch` helper which determines if we should return a thrown object as an error. If the object is a `runtime.Error`, it gets wrapped by an AssertionFailed error which will cause correct error handling (stack trace, sentry reporting, etc). As part of this change, we are also removing wrappers like `builderError`, which are no longer useful. We fix the opt tester to fail with the full error information (using `%+v`) for assertion errors. Release note: None 38660: opt: push limit into offset r=ridwanmsharif a=ridwanmsharif This change pushes the limit into an offset whenever possible. This shouldn't worsen any plan but does allow the `GetLimitedScans` rule to fire in more scenarios. Fixes #30416. ~~This is currently blocked on #38659.~~ Release note: None 38743: roachtest: skip jepsen/multi-register r=god a=nvanbenschoten There's no use running this every night until #36431 is fixed. Release note: None 38746: roachtest: don't reuse clusters after test failure r=andreimatei a=andreimatei We've had a case where a cluster got messed up somehow and then a bunch of tests that tried to reuse it failed. This patch employes a big hammer and makes it so that we don't reuse a cluster after test failure (which failure can be cluster related or not). Release note: None 38766: scripts/release-notes.py: help the user with --from/--until r=lhirata a=knz Requested by @lhirata Release note: None Co-authored-by: Radu Berinde <radu@cockroachlabs.com> Co-authored-by: Ridwan Sharif <ridwan@cockroachlabs.com> Co-authored-by: Nathan VanBenschoten <nvanbenschoten@gmail.com> Co-authored-by: Andrei Matei <andrei@cockroachlabs.com> Co-authored-by: Raphael 'kena' Poss <knz@cockroachlabs.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
A-sql-execution
Relating to SQL execution.
C-bug
Code not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior.
Out limit doesn't seem to be right when we have an offset above it.
Consider the following table:
And the query:
We expect to see (which is what postgres returns)
But instead we get:
The text was updated successfully, but these errors were encountered: