diff --git a/pkg/ccl/logictestccl/testdata/logic_test/multi_region_query_behavior b/pkg/ccl/logictestccl/testdata/logic_test/multi_region_query_behavior index 706ba968b868..be03c631defa 100644 --- a/pkg/ccl/logictestccl/testdata/logic_test/multi_region_query_behavior +++ b/pkg/ccl/logictestccl/testdata/logic_test/multi_region_query_behavior @@ -404,7 +404,7 @@ vectorized: true table: orders@orders_pkey spans: [/'ap-southeast-2'/'94e4b847-8f2f-4ac5-83f1-641d6e3df727' - /'ap-southeast-2'/'94e4b847-8f2f-4ac5-83f1-641d6e3df727'] [/'us-east-1'/'94e4b847-8f2f-4ac5-83f1-641d6e3df727' - /'us-east-1'/'94e4b847-8f2f-4ac5-83f1-641d6e3df727'] · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJysVN1uGjsQvj9PYc1NzolM2L8AWSmSoxzaElFIIVIr1Qht1kPiBuyt7W23irjqs_W9qt0lpBsVpKS9ANsz83m-b3bG92A_LyGG_ofL4dlgRP79fzC9mr4b_kem_WH__IpoI9DMpaAkM3ql7VG1bAwyRXI2rTfzr9Ld6tzNq4AH7yER0qY6V64ZWEeRV5Px2zqFJRfjwWiThIwfdkdSLTRhPPe8EDeRte39m_6kv6VHTsnBSYTRdS_qtnqLYNGKkvS41QsXfqsT-aKDoVh0g-4BUFBa4ChZoYX4I0Qwo5AZnaK12pSm-ypgIAqIPQpSZbkrzTMKqTYI8T046ZYIMVwl10ucYCLQtD2gINAlclldWzNl9TLP7vAbUDjXy3ylbNwoqkyRklIRUJhmSeluc2Ac2hw4L04izgss_657rzkveov2xY_vnBcLX3Be-EKdlofuAYe2RxIliE-0u0UDszUFnbtH-tYlNwixv6Yvk-j_XYmlGO9FMndKC3ZKe1Rk0chkSXJVMUTREDVb_6YGI93SWTtoqh_KlXTE30nFe06VB-oLGofiQkuFph02U9WTwOplXtZxLkUBdAvrF5khrLMdE1ZeMM5dTJhPWUBZSFm0k2n4HKYlw007RPtYbtphqPVdnpFPWiqiVUxYCRqPCOs2yW7b5vF1eXg3tp0zQSXQVJoIO6aEBeXvkHV2Koueo2yCNtPK4pN-2PV1ZxRQ3GDdW1bnJsVLo9MqTX0cV7jKINC62hvUh4GqXNUo_gr2_wQc7AWHDbD3FBzuBUf7wdFe8PET8Gz9z88AAAD__y7iIUk= +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJysVF1v0zAUfedXWPdlMLlrvvqxSJM8jQKdSjvaSSDhqsri282stYPjQNDUJ34b_wsl6TpS0UodPLSO770n95ybYz9A-nUBIfQ-XQ3O-0Py8nV_cj35MHhFJr1B7-KaaCPQzKSgJDF6qdOTclkHZIzkfFI9zL5Le6czOysLHrPHRMg01pmy9cKqirwZj95XLVJyOeoP103I6PHpRKq5JoxnjuPjurKKfXzXG_c29MgZOToNMLjpBp1Gd-7NG0EUtxpdf-422oEr2uiLecfrHAEFpQUOoyWmEH6GAKYUEqNjTFNtitBDWdAXOYQOBamSzBbhKYVYG4TwAay0C4QQrqObBY4xEmiaDlAQaCO5KF9bMWXVMkvu8QdQuNCLbKnSsDZUGSMlhSKgMEmiIt3kwDg0OXCenwac51j83XTfcp53583LXz85z-eu4Dx3hTorNp0jDk2HREoQl2h7hwamKwo6s0_0UxvdIoTuij5Povt_JRZinGfJ3CnN2yntSVGKRkYLkqmSIYqaqOnqLzMY6oZOml5d_UAupSXuTirOIVPuq29oLIpLLRWapl9vVZ0EVi2zYo4zKXKgG1gvTwxh7c0xYcULRpkNCXMp8yjzKQt2MvUPYVowXNsh2MdybYeB1vdZQr5oqYhWIWEFaDQkrFMnu7HN0-3yeG9snLMlqEVZm7LOTlnBIbKqT9yqKxqjEmjKnoQFlDCv-B2z1s6erUN6jjFNtEpxy4C77DSlgOIWKzOnOjMxXhkdl22q7ajElQGBqa2yXrXpqzJVnv0_we6_gL29YL8GdrbB_l5wsB8c7AW39oNbe8HtLfB09eJ3AAAA__8C2Vgm # Regression test for #74890. Code should not panic due to distribution already # provided by input. diff --git a/pkg/sql/logictest/testdata/logic_test/pg_catalog b/pkg/sql/logictest/testdata/logic_test/pg_catalog index b1caf0496f1c..15fc9b98a6c6 100644 --- a/pkg/sql/logictest/testdata/logic_test/pg_catalog +++ b/pkg/sql/logictest/testdata/logic_test/pg_catalog @@ -5909,3 +5909,8 @@ WHERE AND t.typname LIKE 'myt%'; ---- 0 + +# Regression test for a panic after physical planning combined rendering steps +# (#95633). +statement ok +SELECT d.datname, pg_catalog.pg_get_userbyid(d.datdba) FROM pg_catalog.pg_database d; diff --git a/pkg/sql/opt/exec/execbuilder/testdata/distsql_merge_join b/pkg/sql/opt/exec/execbuilder/testdata/distsql_merge_join index 1caf90b23760..84d7af4ad2b9 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/distsql_merge_join +++ b/pkg/sql/opt/exec/execbuilder/testdata/distsql_merge_join @@ -830,7 +830,7 @@ vectorized: true table: outer_c1@outer_c1_pkey spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzMll9r4kAUxd_3Uwz3SbcjyeSPtYGFFNcuFqtdtbCwSEmTuyprM9lJhC3F774kqbiGNpMwKr5IMpnf3DnnXDN5hfjPChzo_bgfXPeHpPG1P5lOvg-aZNIb9LpT8pncjEd3hK8TFI8RIzcPgwG5HfWHb0M-Iw-T_vAbaUTLgDWBQsgDHHrPGIPzExhQMICCCRQsoGDDjEIkuI9xzEU65TUD-sFfcHQKyzBaJ-nwjILPBYLzCskyWSE4MPWeVjhGL0ChpesGmHjLVVZmuz13e_EY_cYXoNDlq_VzGDsk3R0lkZeCk8hLhzS9pdnECwPCCE8WKGC2oelSb1vYVX56IQsvXuzXdBnMNjMKceLNERy2oR9I2a3DRYACg-I6F2nh3ax1-N68rFbRkjsUc7zlyxCFdrm_7PQlQiePa_Qw7Y2z0IDCCn8lDZddNL-I5XyRXwKFMYYBCod0R9eD3qTba7iMumaTEtegxLUocW1K3HbBop18s4L8GsKGvMUjjbHCzPdrW3u1WfUuMg7RRXZLY_qR2oidvo06Z9RGRvUozUNEyfSWxo71SjBOn-XVGWVpVs_SOkiWdkszjvW_NE-fJdPPKEyrepj6AcJsaccKsoYQ-z0h_laI_5EQf_trUOLviVKSYXwo40T92D6jdpR8OI4xjngYY6WPCT0VjsEccy9jvhY-3gvuZ2Xy21HGZcdzgHGSP2Vvd_0wf5busAatAlsqcFsF7pTDrAjr_8NGOWyUwmyf1ou0qRSWhFaBJWGVw5KwymFJWJZKWLaS3RJaBZbYXQ5L7C6HJXa3Vey-VLJbQqvAErvLYYnd5bDE7o6K3VdKdktoFVhidzkssbsclr35ax2WRl1cibaU6LYS3ZHQ9U7M2ebTvwAAAP__BTlqQg== +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzEVu9r4koU_f7-iuF-0teRZPLD2sCDFJ99WKz2qYWFRUqa3FVZm8lOImwp_u9LTMTV1YxhjH4Rk8yZc-49J3fyCfGPBTjQ-fLcu-_2Se3f7mg8-r9XJ6NOr9Mek7_Jw3DwRPgyQfEaMfLw0uuRx0G3n9_yGXkZdfv_kVo0D1gdKIQ8wL73jjE4X4EBBQMomEDBAgo2TChEgvsYx1ykSz7XgG7wExydwjyMlkl6e0LB5wLB-YRkniwQHBh7bwscoheg0NJ9A0y8-WJNs5Hnbv68Rt_xAyi0-WL5HsYOSdVREnkpcBR56S1Nb2g28cKAMMKTGQqYrGi6VS5hy_z2QWZePNvldBlMVhMKceJNERy2okdK2e7DRYACg_19blLi7apleGjdmmu_JU8opvjI5yEK7XZ32_FHhE5m1-Bl3BmuTQMKC_yW1Fx2U_9HzKez7C9QGCwTh7iMugZ1Tepa1LWp29zryLZa82i1B1T2eYNHGjN2BQ4xDFA4pD2473VG7U4tZTfrlLgGJa5FiWtTUiDBOqHhJVqZi2zurTzMbe9ws9Nza5wjt3ZDY3pFwWWXD27resGVOJdnwqwyuMbp4THPER6mNzRW1dgzLp-eu-ulR2Jdnh6ryvSYp6fHOkt67IZmVDV7zMunh-nXi4_Euzw-dpXxsU6Pj36G-DS0qqJTohD7UCH-phD_WCH-5tegxN8pSqkM42gZF3oDmtd7ASSm5S8Au9Rn4wEJQ4wjHsZ40kehnrYagylm7sV8KXx8Ftxf02SXgzVu_eERYJxkT5mdXXXD7FmqsARaBazE3FKSLdHN9tH672hjB6zvg41CsFnMbBaC2W0xtaVktQStAlZillgtkS3RbRc2vFnc76aK1bdKZknQKmAlZolZEtkS3a3Cft8Vm3WnYhZTm6IyuBJajVtimEy5THrxKGWSWcqUhin7Y5qWM00CV0KrcctMkyiXSS91jhhl4UpoNe6WmnKZ9OLDhElOE1buOJms_voVAAD__whhgYA= query T EXPLAIN (VERBOSE) SELECT * FROM outer_gc1 FULL OUTER JOIN outer_c1 USING (pid1, cid1, cid2) @@ -891,7 +891,7 @@ vectorized: true table: outer_c1@outer_c1_pkey spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJyckt9um0wQxe-_p1jNlf15InvB6R-kShu5pCIidgpYqlRZEWWnFJWwdBekRpbfvQJax6DYcXuD2LNzht8ZZgvmRw4OuJ_u_CtvyUbvvTAKP_pjFrq-u4jY_-w6WN0yVVek79OEs-u177Oblbf8rSWcrUNv-YGNykxyZMmfpzUGhEJJWsYPZMD5DBwQLmGDUGqVkDFKN_K2LfLkT3BmCFlR1lUjbxASpQmcLVRZlRM4sFQXqpzagCCpirO8LdshqLp6MpkqTgmc-Q4PGvPTjaP4S04BxZL0dNZrD_vgYv92X36nR0BYqLx-KIzDhsGRpd0hTeImc1jGTdkFHIPl_wrLn4Pds56FeiaidRTxiawulJakSQ7_0Mslz-S8JZ3SjcoK0lOrnzN6LMnpNnG1jtyg3UdAyOlrNRJ8gsKaoLAn43c6S7_1JUAIqJCkHbZYXfluuHBHgqN4NcYDwULxuifYKN6MkYk5MnGJTLw9Oim7N6kXVjogU6rC0Fk7PWvGRDKlbuxG1TqhO62S9jPdcdX6WkGSqbrbeXfwiu6qATw085Nmu2fmQ7P1F2ZraLZPmmcD7M3uv18BAAD__7KcfNU= +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJyck1Fvm0AMx9_3KU5-ShZXyQFpO6RJV2V0oqKhC4k0aYoqBh5Doxw7DmlVlO8-AVsaooamfUH4f_6bn7FvA-XvDGxwvt55V-6cDT65wTL44g1Z4HjObMnes-uFf8tkpUndJxFn1yvPYze-O_-nRZytAnf-mQ2KNObIov9PYwgIuYxpHj5QCfY34IAwhTVCoWREZSlVLW-aJDf-A_YEIc2LStfyGiGSisDegE51RmDDXJ7JYmwBQkw6TLMmbYsgK_1kKnWYENjTLe4V5v2Fl-H3jBYUxqTGk0552DUudm_3xS96BISZzKqHvLTZYePIkjZIorDuOSjCOu0MjsHyt8Ly52B3rCehnohoHEV8IqtyqWJSFB9O6OWUZ_q8JZXQjUxzUmOj2-fysSC73UR_tXQWzT4CQkY_9EDwEQpjhMIcDT-qNPnZlQDBr7TNBEdhoDBRWCimKM5RXKC4RPHh6D8wXzOmdlnNLviC8piUzWb-lecEM2dQU5wPcU8wUFx0BBPF5RCZsJCJKbIePqvD98JlWlBZyLykk27TpB4QxQm1Ay9lpSK6UzJqPtOGfuNrhJhK3Z5O28DN26MacN_Me81mx8wPzcYrzMah2ew1W_3YVq95cmBeb9_9DQAA__8XQ7Wb query T EXPLAIN (VERBOSE) SELECT * FROM outer_c1 LEFT OUTER JOIN outer_p1 USING (pid1) WHERE pid1 >= 0 AND pid1 < 40 diff --git a/pkg/sql/opt/exec/execbuilder/testdata/tpch_vec b/pkg/sql/opt/exec/execbuilder/testdata/tpch_vec index acc8041ab65d..6e1e23cf06aa 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/tpch_vec +++ b/pkg/sql/opt/exec/execbuilder/testdata/tpch_vec @@ -578,14 +578,16 @@ EXPLAIN (VEC) SELECT l_orderkey, sum(l_extendedprice * (1 - l_discount)) AS reve └ Node 1 └ *colexec.topKSorter └ *colexec.hashAggregator - └ *rowexec.joinReader - └ *colexecjoin.hashJoiner - ├ *colfetcher.ColBatchScan - └ *colexecjoin.hashJoiner - ├ *colexecsel.selLTInt64Int64ConstOp - │ └ *colfetcher.ColBatchScan - └ *colexecsel.selEQBytesBytesConstOp - └ *colfetcher.ColBatchScan + └ *colexecproj.projMultFloat64Float64Op + └ *colexecproj.projMinusFloat64ConstFloat64Op + └ *rowexec.joinReader + └ *colexecjoin.hashJoiner + ├ *colfetcher.ColBatchScan + └ *colexecjoin.hashJoiner + ├ *colexecsel.selLTInt64Int64ConstOp + │ └ *colfetcher.ColBatchScan + └ *colexecsel.selEQBytesBytesConstOp + └ *colfetcher.ColBatchScan # Query 4 query T diff --git a/pkg/sql/physicalplan/physical_plan.go b/pkg/sql/physicalplan/physical_plan.go index 8c278d14fa51..034cec83c41e 100644 --- a/pkg/sql/physicalplan/physical_plan.go +++ b/pkg/sql/physicalplan/physical_plan.go @@ -607,11 +607,11 @@ func (p *PhysicalPlan) AddRendering( } post := p.GetLastStagePost() - if len(post.RenderExprs) > 0 { + if len(post.RenderExprs) > 0 || len(post.OutputColumns) > 0 { post = execinfrapb.PostProcessSpec{} - // The last stage contains render expressions. The new renders refer to - // the output of these, so we need to add another "no-op" stage to which - // to attach the new rendering. + // The last stage contains render expressions, or is projecting input columns. + // The new renders refer to the output of these in a particular order, so we + // need to add another "no-op" stage to which to attach the new rendering. p.AddNoGroupingStage( execinfrapb.ProcessorCoreUnion{Noop: &execinfrapb.NoopCoreSpec{}}, post, diff --git a/pkg/sql/physicalplan/physical_plan_test.go b/pkg/sql/physicalplan/physical_plan_test.go index c0729ea2900b..a6c7f239968f 100644 --- a/pkg/sql/physicalplan/physical_plan_test.go +++ b/pkg/sql/physicalplan/physical_plan_test.go @@ -160,7 +160,6 @@ func TestProjectionAndRendering(t *testing.T) { ); err != nil { t.Fatal(err) } - }, expPost: execinfrapb.PostProcessSpec{ @@ -169,6 +168,37 @@ func TestProjectionAndRendering(t *testing.T) { }, expResultTypes: "B,D,C", }, + + // Rendering after projection. + { + post: execinfrapb.PostProcessSpec{ + Projection: true, + OutputColumns: []uint32{3, 1, 4, 2}, + }, + resultTypes: "A,B,C,D", + + action: func(p *PhysicalPlan) { + if err := p.AddRendering( + []tree.TypedExpr{ + &tree.IndexedVar{Idx: 0}, + &tree.IndexedVar{Idx: 1}, + &tree.IndexedVar{Idx: 2}, + }, + fakeExprContext{}, + []int{2, 0, 3, 1}, + []*types.T{strToType("C"), strToType("A"), strToType("D")}, + execinfrapb.Ordering{}, + ); err != nil { + t.Fatal(err) + } + }, + + expPost: execinfrapb.PostProcessSpec{ + Projection: true, + OutputColumns: []uint32{4, 3, 2}, + }, + expResultTypes: "C,A,D", + }, } for testIdx, tc := range testCases {