diff --git a/internal/cmd/gtrace/writer.go b/internal/cmd/gtrace/writer.go index 463f544f8..ffa748791 100644 --- a/internal/cmd/gtrace/writer.go +++ b/internal/cmd/gtrace/writer.go @@ -337,6 +337,11 @@ func (w *Writer) compose(trace *Trace) { w.code(`func (`, t, ` *`, trace.Name, `) Compose(`, x, ` *`, trace.Name, `, opts ...`+trace.Name+`ComposeOption) `) w.line(`*`, trace.Name, ` {`) w.block(func() { + w.line(`if `, t, ` == nil {`) + w.block(func() { + w.line(`return x`) + }) + w.line(`}`) w.line(`var `, ret, ` `, trace.Name, ``) if len(trace.Hooks) > 0 { w.line(`options := `, unexported(trace.Name), `ComposeOptions{}`) diff --git a/trace/coordination_gtrace.go b/trace/coordination_gtrace.go index 422f61153..96c025c82 100644 --- a/trace/coordination_gtrace.go +++ b/trace/coordination_gtrace.go @@ -29,6 +29,9 @@ func WithCoordinationPanicCallback(cb func(e interface{})) CoordinationComposeOp // Compose returns a new Coordination which has functional fields composed both from t and x. // Internals: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#internals func (t *Coordination) Compose(x *Coordination, opts ...CoordinationComposeOption) *Coordination { + if t == nil { + return x + } var ret Coordination options := coordinationComposeOptions{} for _, opt := range opts { diff --git a/trace/discovery_gtrace.go b/trace/discovery_gtrace.go index 20d40ebda..0d5aca55f 100644 --- a/trace/discovery_gtrace.go +++ b/trace/discovery_gtrace.go @@ -26,6 +26,9 @@ func WithDiscoveryPanicCallback(cb func(e interface{})) DiscoveryComposeOption { // Compose returns a new Discovery which has functional fields composed both from t and x. // Internals: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#internals func (t *Discovery) Compose(x *Discovery, opts ...DiscoveryComposeOption) *Discovery { + if t == nil { + return x + } var ret Discovery options := discoveryComposeOptions{} for _, opt := range opts { diff --git a/trace/driver_gtrace.go b/trace/driver_gtrace.go index 4abf7ef74..fa217f4a5 100644 --- a/trace/driver_gtrace.go +++ b/trace/driver_gtrace.go @@ -26,6 +26,9 @@ func WithDriverPanicCallback(cb func(e interface{})) DriverComposeOption { // Compose returns a new Driver which has functional fields composed both from t and x. // Internals: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#internals func (t *Driver) Compose(x *Driver, opts ...DriverComposeOption) *Driver { + if t == nil { + return x + } var ret Driver options := driverComposeOptions{} for _, opt := range opts { diff --git a/trace/query_gtrace.go b/trace/query_gtrace.go index 890c81f2b..e7e93a3e6 100644 --- a/trace/query_gtrace.go +++ b/trace/query_gtrace.go @@ -28,6 +28,9 @@ func WithQueryPanicCallback(cb func(e interface{})) QueryComposeOption { // Compose returns a new Query which has functional fields composed both from t and x. // Internals: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#internals func (t *Query) Compose(x *Query, opts ...QueryComposeOption) *Query { + if t == nil { + return x + } var ret Query options := queryComposeOptions{} for _, opt := range opts { diff --git a/trace/ratelimiter_gtrace.go b/trace/ratelimiter_gtrace.go index 607e8a33d..6f97a8343 100644 --- a/trace/ratelimiter_gtrace.go +++ b/trace/ratelimiter_gtrace.go @@ -22,6 +22,9 @@ func WithRatelimiterPanicCallback(cb func(e interface{})) RatelimiterComposeOpti // Compose returns a new Ratelimiter which has functional fields composed both from t and x. // Internals: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#internals func (t *Ratelimiter) Compose(x *Ratelimiter, opts ...RatelimiterComposeOption) *Ratelimiter { + if t == nil { + return x + } var ret Ratelimiter return &ret } diff --git a/trace/retry_gtrace.go b/trace/retry_gtrace.go index a8a6ba50e..784ef4275 100644 --- a/trace/retry_gtrace.go +++ b/trace/retry_gtrace.go @@ -26,6 +26,9 @@ func WithRetryPanicCallback(cb func(e interface{})) RetryComposeOption { // Compose returns a new Retry which has functional fields composed both from t and x. // Internals: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#internals func (t *Retry) Compose(x *Retry, opts ...RetryComposeOption) *Retry { + if t == nil { + return x + } var ret Retry options := retryComposeOptions{} for _, opt := range opts { diff --git a/trace/scheme_gtrace.go b/trace/scheme_gtrace.go index e960696ca..dab48b9be 100644 --- a/trace/scheme_gtrace.go +++ b/trace/scheme_gtrace.go @@ -26,6 +26,9 @@ func WithSchemePanicCallback(cb func(e interface{})) SchemeComposeOption { // Compose returns a new Scheme which has functional fields composed both from t and x. // Internals: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#internals func (t *Scheme) Compose(x *Scheme, opts ...SchemeComposeOption) *Scheme { + if t == nil { + return x + } var ret Scheme options := schemeComposeOptions{} for _, opt := range opts { diff --git a/trace/scripting_gtrace.go b/trace/scripting_gtrace.go index c3de7b27f..83abc5f53 100644 --- a/trace/scripting_gtrace.go +++ b/trace/scripting_gtrace.go @@ -26,6 +26,9 @@ func WithScriptingPanicCallback(cb func(e interface{})) ScriptingComposeOption { // Compose returns a new Scripting which has functional fields composed both from t and x. // Internals: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#internals func (t *Scripting) Compose(x *Scripting, opts ...ScriptingComposeOption) *Scripting { + if t == nil { + return x + } var ret Scripting options := scriptingComposeOptions{} for _, opt := range opts { diff --git a/trace/sql_gtrace.go b/trace/sql_gtrace.go index f90054629..618984641 100644 --- a/trace/sql_gtrace.go +++ b/trace/sql_gtrace.go @@ -27,6 +27,9 @@ func WithDatabaseSQLPanicCallback(cb func(e interface{})) DatabaseSQLComposeOpti // Compose returns a new DatabaseSQL which has functional fields composed both from t and x. // Internals: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#internals func (t *DatabaseSQL) Compose(x *DatabaseSQL, opts ...DatabaseSQLComposeOption) *DatabaseSQL { + if t == nil { + return x + } var ret DatabaseSQL options := databaseSQLComposeOptions{} for _, opt := range opts { diff --git a/trace/table_gtrace.go b/trace/table_gtrace.go index ef197a33b..cf63d54dd 100644 --- a/trace/table_gtrace.go +++ b/trace/table_gtrace.go @@ -26,6 +26,9 @@ func WithTablePanicCallback(cb func(e interface{})) TableComposeOption { // Compose returns a new Table which has functional fields composed both from t and x. // Internals: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#internals func (t *Table) Compose(x *Table, opts ...TableComposeOption) *Table { + if t == nil { + return x + } var ret Table options := tableComposeOptions{} for _, opt := range opts { diff --git a/trace/topic_gtrace.go b/trace/topic_gtrace.go index 1f4709892..34d5560c9 100644 --- a/trace/topic_gtrace.go +++ b/trace/topic_gtrace.go @@ -26,6 +26,9 @@ func WithTopicPanicCallback(cb func(e interface{})) TopicComposeOption { // Compose returns a new Topic which has functional fields composed both from t and x. // Internals: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#internals func (t *Topic) Compose(x *Topic, opts ...TopicComposeOption) *Topic { + if t == nil { + return x + } var ret Topic options := topicComposeOptions{} for _, opt := range opts {