github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/internal/query/options/execute_script.go (about)

     1  package options
     2  
     3  import (
     4  	"github.com/ydb-platform/ydb-go-genproto/protos/Ydb_Query"
     5  	"google.golang.org/protobuf/types/known/anypb"
     6  
     7  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/query/result"
     8  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/stats"
     9  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/types"
    10  	"github.com/ydb-platform/ydb-go-sdk/v3/trace"
    11  )
    12  
    13  type (
    14  	FetchScriptResultsRequest struct {
    15  		Ydb_Query.FetchScriptResultsRequest
    16  
    17  		Trace *trace.Query
    18  	}
    19  	FetchScriptOption      func(request *FetchScriptResultsRequest)
    20  	ExecuteScriptOperation struct {
    21  		ID            string
    22  		ConsumedUnits float64
    23  		Metadata      *MetadataExecuteQuery
    24  	}
    25  	FetchScriptResult struct {
    26  		ResultSetIndex int64
    27  		ResultSet      result.Set
    28  		NextToken      string
    29  	}
    30  	MetadataExecuteQuery struct {
    31  		ID     string
    32  		Script struct {
    33  			Syntax Syntax
    34  			Query  string
    35  		}
    36  		Mode           ExecMode
    37  		Stats          stats.QueryStats
    38  		ResultSetsMeta []struct {
    39  			Columns []struct {
    40  				Name string
    41  				Type types.Type
    42  			}
    43  		}
    44  	}
    45  )
    46  
    47  func WithFetchToken(fetchToken string) FetchScriptOption {
    48  	return func(request *FetchScriptResultsRequest) {
    49  		request.FetchToken = fetchToken
    50  	}
    51  }
    52  
    53  func WithResultSetIndex(resultSetIndex int64) FetchScriptOption {
    54  	return func(request *FetchScriptResultsRequest) {
    55  		request.ResultSetIndex = resultSetIndex
    56  	}
    57  }
    58  
    59  func WithRowsLimit(rowsLimit int64) FetchScriptOption {
    60  	return func(request *FetchScriptResultsRequest) {
    61  		request.RowsLimit = rowsLimit
    62  	}
    63  }
    64  
    65  func ToMetadataExecuteQuery(metadata *anypb.Any) *MetadataExecuteQuery {
    66  	var pb Ydb_Query.ExecuteScriptMetadata
    67  	if err := metadata.UnmarshalTo(&pb); err != nil {
    68  		panic(err)
    69  	}
    70  
    71  	return &MetadataExecuteQuery{
    72  		ID: pb.GetExecutionId(),
    73  		Script: struct {
    74  			Syntax Syntax
    75  			Query  string
    76  		}{
    77  			Syntax: Syntax(pb.GetScriptContent().GetSyntax()),
    78  			Query:  pb.GetScriptContent().GetText(),
    79  		},
    80  		Mode:  ExecMode(pb.GetExecMode()),
    81  		Stats: stats.FromQueryStats(pb.GetExecStats()),
    82  		ResultSetsMeta: func() (
    83  			resultSetsMeta []struct {
    84  				Columns []struct {
    85  					Name string
    86  					Type types.Type
    87  				}
    88  			},
    89  		) {
    90  			for _, rs := range pb.GetResultSetsMeta() {
    91  				resultSetsMeta = append(resultSetsMeta, struct {
    92  					Columns []struct {
    93  						Name string
    94  						Type types.Type
    95  					}
    96  				}{
    97  					Columns: func() (
    98  						columns []struct {
    99  							Name string
   100  							Type types.Type
   101  						},
   102  					) {
   103  						for _, c := range rs.GetColumns() {
   104  							columns = append(columns, struct {
   105  								Name string
   106  								Type types.Type
   107  							}{
   108  								Name: c.GetName(),
   109  								Type: types.TypeFromYDB(c.GetType()),
   110  							})
   111  						}
   112  
   113  						return columns
   114  					}(),
   115  				})
   116  			}
   117  
   118  			return resultSetsMeta
   119  		}(),
   120  	}
   121  }