From ee025d91c29afe765641621c1599f1e9a6f9f5e2 Mon Sep 17 00:00:00 2001 From: sanikadze Date: Wed, 8 Jul 2026 15:53:53 +0000 Subject: [PATCH] fix: propagate TemplateQueryText/TemplatePlanText through MergeQueryInfo MergeQueryInfo copies QueryInfo fields one by one and silently dropped TemplateQueryText/TemplatePlanText, so template texts were lost whenever segment-side QueryInfo was merged on the master. --- internal/storage/group.go | 2 ++ internal/storage/merger_test.go | 63 +++++++++++++++++---------------- 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/internal/storage/group.go b/internal/storage/group.go index 28ef9171..35eaedba 100644 --- a/internal/storage/group.go +++ b/internal/storage/group.go @@ -267,6 +267,8 @@ func MergeQueryInfo(dest *pbc.QueryInfo, source *pbc.QueryInfo) error { dest.DatabaseName = max(dest.DatabaseName, source.DatabaseName) dest.Rsgname = max(dest.Rsgname, source.Rsgname) dest.AnalyzeText = max(dest.AnalyzeText, source.AnalyzeText) + dest.TemplateQueryText = max(dest.TemplateQueryText, source.TemplateQueryText) //nolint:staticcheck + dest.TemplatePlanText = max(dest.TemplatePlanText, source.TemplatePlanText) //nolint:staticcheck dest.SubmitTime = chooseTimestampMin(dest.SubmitTime, source.SubmitTime) dest.StartTime = chooseTimestampMin(dest.StartTime, source.StartTime) dest.EndTime = chooseTimestampMax(dest.EndTime, source.EndTime) diff --git a/internal/storage/merger_test.go b/internal/storage/merger_test.go index e1ce38d8..55d01b41 100644 --- a/internal/storage/merger_test.go +++ b/internal/storage/merger_test.go @@ -145,16 +145,17 @@ func TestQuery42(t *testing.T) { Tmid: int32(1), }, QueryInfo: &pbc.QueryInfo{ - Generator: pbc.PlanGenerator_PLAN_GENERATOR_OPTIMIZER, - QueryId: 3844438981, - PlanId: 1250317044, - UserName: "user1", - DatabaseName: "db1", - PlanText: "Result (cost=0.00..0.00 rows=1 width=4)\n Output: 42\n -> Result (cost=0.00..0.00 rows=1 width=1)\n Output: true\n", - QueryText: "select 42;", - StartTime: timestamppb.New(time.Unix(1763388103, 0)), - EndTime: timestamppb.New(time.Unix(1763388103, 0)), - SubmitTime: timestamppb.New(time.Unix(1763388103, 0)), + Generator: pbc.PlanGenerator_PLAN_GENERATOR_OPTIMIZER, + QueryId: 3844438981, + PlanId: 1250317044, + UserName: "user1", + DatabaseName: "db1", + PlanText: "Result (cost=0.00..0.00 rows=1 width=4)\n Output: 42\n -> Result (cost=0.00..0.00 rows=1 width=1)\n Output: true\n", + TemplatePlanText: "Result (cost=$1..$2rows=$3width=$4)\n Output: $5-> Result (cost=$6..$7rows=$8width=$9)\n Output: true\n", + QueryText: "select 42;", + StartTime: timestamppb.New(time.Unix(1763388103, 0)), + EndTime: timestamppb.New(time.Unix(1763388103, 0)), + SubmitTime: timestamppb.New(time.Unix(1763388103, 0)), }, StatKind: pbm.StatKind_SK_PRECISE, QueryStatus: pbc.QueryStatus_QUERY_STATUS_DONE, @@ -188,16 +189,17 @@ func TestQuery42(t *testing.T) { Segindex: -1, }, QueryInfo: &pbc.QueryInfo{ - Generator: pbc.PlanGenerator_PLAN_GENERATOR_OPTIMIZER, - QueryId: 3844438981, - PlanId: 1250317044, - UserName: "user1", - DatabaseName: "db1", - PlanText: "Result (cost=0.00..0.00 rows=1 width=4)\n Output: 42\n -> Result (cost=0.00..0.00 rows=1 width=1)\n Output: true\n", - QueryText: "select 42;", - StartTime: timestamppb.New(time.Unix(1763388103, 0)), - EndTime: timestamppb.New(time.Unix(1763388103, 0)), - SubmitTime: timestamppb.New(time.Unix(1763388103, 0)), + Generator: pbc.PlanGenerator_PLAN_GENERATOR_OPTIMIZER, + QueryId: 3844438981, + PlanId: 1250317044, + UserName: "user1", + DatabaseName: "db1", + PlanText: "Result (cost=0.00..0.00 rows=1 width=4)\n Output: 42\n -> Result (cost=0.00..0.00 rows=1 width=1)\n Output: true\n", + TemplatePlanText: "Result (cost=$1..$2rows=$3width=$4)\n Output: $5-> Result (cost=$6..$7rows=$8width=$9)\n Output: true\n", + QueryText: "select 42;", + StartTime: timestamppb.New(time.Unix(1763388103, 0)), + EndTime: timestamppb.New(time.Unix(1763388103, 0)), + SubmitTime: timestamppb.New(time.Unix(1763388103, 0)), }, QueryStatus: pbc.QueryStatus_QUERY_STATUS_DONE, StartTime: timestamppb.New(time.Unix(1763388103, 0)), @@ -233,16 +235,17 @@ func TestQuery42(t *testing.T) { Tmid: int32(1), }, QueryInfo: &pbc.QueryInfo{ - Generator: pbc.PlanGenerator_PLAN_GENERATOR_OPTIMIZER, - QueryId: 3844438981, - PlanId: 1250317044, - UserName: "user1", - DatabaseName: "db1", - PlanText: "Result (cost=0.00..0.00 rows=1 width=4)\n Output: 42\n -> Result (cost=0.00..0.00 rows=1 width=1)\n Output: true\n", - QueryText: "select 42;", - StartTime: timestamppb.New(time.Unix(1763388103, 0)), - EndTime: timestamppb.New(time.Unix(1763388103, 0)), - SubmitTime: timestamppb.New(time.Unix(1763388103, 0)), + Generator: pbc.PlanGenerator_PLAN_GENERATOR_OPTIMIZER, + QueryId: 3844438981, + PlanId: 1250317044, + UserName: "user1", + DatabaseName: "db1", + PlanText: "Result (cost=0.00..0.00 rows=1 width=4)\n Output: 42\n -> Result (cost=0.00..0.00 rows=1 width=1)\n Output: true\n", + TemplatePlanText: "Result (cost=$1..$2rows=$3width=$4)\n Output: $5-> Result (cost=$6..$7rows=$8width=$9)\n Output: true\n", + QueryText: "select 42;", + StartTime: timestamppb.New(time.Unix(1763388103, 0)), + EndTime: timestamppb.New(time.Unix(1763388103, 0)), + SubmitTime: timestamppb.New(time.Unix(1763388103, 0)), }, StatKind: pbm.StatKind_SK_PRECISE, QueryStatus: pbc.QueryStatus_QUERY_STATUS_DONE,