> On Jul 17, 2026, at 18:16, Daniel Gustafsson <[email protected]> wrote: > > >> The attached patch fixes this by using pg_strtoint32_safe() in the same way >> as the core scanner. > > Yes, but I think we need a bit more since we otherwise accept this case: > > postgres=# set pg_plan_advice.advice = 'SEQ_SCAN(x#1_0_)'; > SET > postgres=# explain (plan_advice) select 1; > QUERY PLAN > ------------------------------------------ > Result (cost=0.00..0.01 rows=1 width=4) > Supplied Plan Advice: > SEQ_SCAN(x#10) /* not matched */ > SEQ_SCAN(_) /* not matched */ > Generated Plan Advice: > NO_GATHER("*RESULT*") > (6 rows) > > If we also match on integerjunk like in the attached v2 we instead get the > below which I think is more correct: > > postgres=# set pg_plan_advice.advice = 'SEQ_SCAN(x#1_0_)'; > ERROR: invalid value for parameter "pg_plan_advice.advice": > "SEQ_SCAN(x#1_0_)" > DETAIL: Could not parse advice: trailing junk after numeric literal at or > near "1_0_" > > AFAICT this shouldn't break parsing for any legitimate cases, but I've only > had > a quick look (the tests still pass though). > > -- > Daniel Gustafsson > > <v2-0001-Fix-parsing-of-underscores-in-pg_plan_advice-occu.patch>
Agreed, v2 is more correct. I missed the integerjunk part. I also added a test case for 1_0_. There is already a syntax-error section in the test script, so I added the case there. PFA v3, which only adds this test case. Best regards, -- Chao Li (Evan) HighGo Software Co., Ltd. https://www.highgo.com/
v3-0001-Fix-parsing-of-underscores-in-pg_plan_advice-occu.patch
Description: Binary data
