-
Notifications
You must be signed in to change notification settings - Fork 590
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
fix(sqlparser): array of struct of struct #19483
Conversation
@@ -74,3 +74,6 @@ | |||
sql parser error: expected an expression, found: [ | |||
LINE 1: SELECT [1,2] | |||
^ | |||
- input: CREATE TABLE t (params STRUCT<a STRUCT<b int>>[]) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This test case seems to work in current version. Did I miss something?
dev=> CREATE TABLE t (params STRUCT<a STRUCT<b int>>[])
dev-> ;
CREATE_TABLE
dev=> describe t;
┌───────────────────┬─────────────────────┬───────────┬─────────────┐
│ Name │ Type │ Is Hidden │ Description │
├───────────────────┼─────────────────────┼───────────┼─────────────┤
│ params │ │ false │ ∅ │
│ params.a │ struct<b integer>[] │ false │ ∅ │
│ _row_id │ serial │ true │ ∅ │
│ primary key │ _row_id │ ∅ │ ∅ │
│ distribution key │ _row_id │ ∅ │ ∅ │
│ table description │ t │ ∅ │ ∅ │
└───────────────────┴─────────────────────┴───────────┴─────────────┘
(6 rows)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh, it's wrong
dev=> show create table t;
┌──────────┬───────────────────────────────────────────────────┐
│ Name │ Create Sql │
├──────────┼───────────────────────────────────────────────────┤
│ public.t │ CREATE TABLE t (params STRUCT<a STRUCT<b INT>[]>) │
└──────────┴───────────────────────────────────────────────────┘
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How did you find the bug? Is it related with other bugs?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See the linked issue. It was causing a schema mismatch panic when sink into table
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh, I didn't notice there's linked issue since there's no fix #xx
in body 😄
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM for the fix. But agree that not sure whether it's universal.
Curious how did you generated this graph and what did you use it for? 👀 |
|
Co-authored-by: xiangjinwu <[email protected]> Co-authored-by: Xiangjin <[email protected]>
Co-authored-by: xiangjinwu <[email protected]> Co-authored-by: Xiangjin <[email protected]>
I hereby agree to the terms of the RisingWave Labs, Inc. Contributor License Agreement.
What's changed and what's your intention?
When parsing
>>[]
, whose token stream contains[ShiftRight, LBracket, RBracket]
, the parser first consumesShiftRight
and sets internal stateremaining_close = true
. At this stage, it shall consider the next token as effectivelyGt
rather than peeking atLBracket
from the stream. In the latter case it would be wrongly parsed as>[]>
dot
Limitations:
remaining_close
first as if it was the next token. But I cannot find a good way to ensure such a virtual stream is followed (mutating input stream is not an option as it breaks backtrack and location reporting). The current fix only applies to array syntax[]
as suffix. Hopefully no future syntax extensions hit the same problem.Checklist
./risedev check
(or alias,./risedev c
)Documentation
Release note
If this PR includes changes that directly affect users or other significant modifications relevant to the community, kindly draft a release note to provide a concise summary of these changes. Please prioritize highlighting the impact these changes will have on users.