{"record":{"id":"4ac1d59061f511de","repo":"SigNoz/signoz","slug":"params-and-builderquery-cannot-be-nil-4ac1d5","errorCode":null,"errorMessage":"params and builderQuery cannot be nil","messagePattern":"params and builderQuery cannot be nil","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/query-service/app/querier/v2/helper.go","lineNumber":31,"sourceCode":"\t\"github.com/SigNoz/signoz/pkg/query-service/common\"\n\t\"github.com/SigNoz/signoz/pkg/query-service/constants\"\n\tv3 \"github.com/SigNoz/signoz/pkg/query-service/model/v3\"\n\t\"github.com/SigNoz/signoz/pkg/query-service/querycache\"\n\t\"github.com/SigNoz/signoz/pkg/valuer\"\n)\n\nfunc prepareLogsQuery(\n\t_ context.Context,\n\tstart,\n\tend int64,\n\tbuilderQuery *v3.BuilderQuery,\n\tparams *v3.QueryRangeParamsV3,\n) (string, error) {\n\tlogsQueryBuilder := logsV4.PrepareLogsQuery\n\tquery := \"\"\n\n\tif params == nil || builderQuery == nil {\n\t\treturn query, fmt.Errorf(\"params and builderQuery cannot be nil\")\n\t}\n\n\t// for ts query with limit replace it as it is already formed\n\tif params.CompositeQuery.PanelType == v3.PanelTypeGraph && builderQuery.Limit > 0 && len(builderQuery.GroupBy) > 0 {\n\t\tlimitQuery, err := logsQueryBuilder(\n\t\t\tstart,\n\t\t\tend,\n\t\t\tparams.CompositeQuery.QueryType,\n\t\t\tparams.CompositeQuery.PanelType,\n\t\t\tbuilderQuery,\n\t\t\tv3.QBOptions{GraphLimitQtype: constants.FirstQueryGraphLimit},\n\t\t)\n\t\tif err != nil {\n\t\t\treturn query, err\n\t\t}\n\t\tplaceholderQuery, err := logsQueryBuilder(\n\t\t\tstart,\n\t\t\tend,","sourceCodeStart":13,"sourceCodeEnd":49,"githubUrl":"https://github.com/SigNoz/signoz/blob/5069bf80b08f1f00d7e014eccc09902f9871004f/pkg/query-service/app/querier/v2/helper.go#L13-L49","documentation":"prepareLogsQuery requires both the request params and the builder query to be non-nil; passing a nil v3.QueryRangeParamsV3 or a nil builderQuery inside the composite query returns this error before any SQL is built.","triggerScenarios":"Programmatic (SDK/internal) calls to runBuilderQuery/prepareLogsQuery where params or the per-query BuilderQuery field is nil — e.g. constructing QueryRangeParamsV3 manually and leaving compositeQuery.queries[i].builder unset.","commonSituations":"Custom integrations building the params struct by hand, partial JSON deserialization leaving builder null, refactors that drop builderQuery population for logs queries.","solutions":["Ensure every query in compositeQuery has a non-nil builder and the top-level params is initialized","If building params from JSON, validate that builder is present for queryType QueryBuilder before calling QueryRange","Add unit-test coverage constructing full params objects to catch nil fields early"],"exampleFix":"// before\nparams := &v3.QueryRangeParamsV3{CompositeQuery: &v3.CompositeQuery{Queries: []*v3.Query{{Name:\"q\", Builder: nil}}}}\n// after\nparams := &v3.QueryRangeParamsV3{CompositeQuery: &v3.CompositeQuery{Queries: []*v3.Query{{Name:\"q\", Builder: &v3.BuilderQuery{...}}}}}","handlingStrategy":"type-guard","validationCode":"if params == nil || params.CompositeQuery == nil { return errors.New(\"params required\") }\nfor _, q := range params.CompositeQuery.Queries {\n    if q.QueryType == v3.QueryTypeQueryBuilder && q.Builder == nil {\n        return fmt.Errorf(\"query %s missing builder\", q.Name)\n    }\n}","typeGuard":"func hasCompleteBuilderQueries(p *v3.QueryRangeParamsV3) bool {\n    if p == nil || p.CompositeQuery == nil { return false }\n    for _, q := range p.CompositeQuery.Queries {\n        if q.QueryType == v3.QueryTypeQueryBuilder && q.Builder == nil { return false }\n    }\n    return true\n}","tryCatchPattern":null,"preventionTips":["Never hand-construct params without initializing Builder","Deserialized payloads should be schema-validated for required nested fields"],"tags":["nil-check","logs","builder-query","validation"],"backgroundTag":"request-validation-failed","analyzedSha":"5069bf80b08f1f00d7e014eccc09902f9871004f","analyzedAt":"2026-08-28T06:22:12.824Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}