go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/projects/nodes/pkg/model/gen/expression.go (about)

     1  // File generated by nodegen. DO NOT EDIT.
     2  package gen
     3  
     4  import (
     5  	"fmt"
     6  	"time"
     7  
     8  	"github.com/wcharczuk/go-incr"
     9  	"go.charczuk.com/projects/nodes/pkg/funcs"
    10  	"go.charczuk.com/projects/nodes/pkg/incrutil"
    11  	"go.charczuk.com/projects/nodes/pkg/types"
    12  )
    13  
    14  func ExpressionForNode(graph *incr.Graph, n *types.Node) (output incr.INode, err error) {
    15  	switch n.Metadata.InputType {
    16  	case "table":
    17  		switch n.Metadata.OutputType {
    18  		case "table":
    19  			output = incrutil.MapN(graph, funcs.Expression[*types.Table, *types.Table](n.Metadata.Expression))
    20  			return
    21  		case "[]bool":
    22  			output = incrutil.MapN(graph, funcs.Expression[*types.Table, []bool](n.Metadata.Expression))
    23  			return
    24  		case "[]float64":
    25  			output = incrutil.MapN(graph, funcs.Expression[*types.Table, []float64](n.Metadata.Expression))
    26  			return
    27  		case "[]int64":
    28  			output = incrutil.MapN(graph, funcs.Expression[*types.Table, []int64](n.Metadata.Expression))
    29  			return
    30  		case "[]string":
    31  			output = incrutil.MapN(graph, funcs.Expression[*types.Table, []string](n.Metadata.Expression))
    32  			return
    33  		case "[]duration":
    34  			output = incrutil.MapN(graph, funcs.Expression[*types.Table, []time.Duration](n.Metadata.Expression))
    35  			return
    36  		case "[]timestamp":
    37  			output = incrutil.MapN(graph, funcs.Expression[*types.Table, []time.Time](n.Metadata.Expression))
    38  			return
    39  		case "bool":
    40  			output = incrutil.MapN(graph, funcs.Expression[*types.Table, bool](n.Metadata.Expression))
    41  			return
    42  		case "float64":
    43  			output = incrutil.MapN(graph, funcs.Expression[*types.Table, float64](n.Metadata.Expression))
    44  			return
    45  		case "int64":
    46  			output = incrutil.MapN(graph, funcs.Expression[*types.Table, int64](n.Metadata.Expression))
    47  			return
    48  		case "string":
    49  			output = incrutil.MapN(graph, funcs.Expression[*types.Table, string](n.Metadata.Expression))
    50  			return
    51  		case "duration":
    52  			output = incrutil.MapN(graph, funcs.Expression[*types.Table, time.Duration](n.Metadata.Expression))
    53  			return
    54  		case "timestamp":
    55  			output = incrutil.MapN(graph, funcs.Expression[*types.Table, time.Time](n.Metadata.Expression))
    56  			return
    57  		default:
    58  			err = fmt.Errorf("invalid expression output type %v for input type %v", n.Metadata.OutputType, n.Metadata.InputType)
    59  			return
    60  		}
    61  
    62  	case "[]any":
    63  		switch n.Metadata.OutputType {
    64  		case "table":
    65  			output = incrutil.MapN(graph, funcs.Expression[[]any, *types.Table](n.Metadata.Expression))
    66  			return
    67  		case "[]bool":
    68  			output = incrutil.MapN(graph, funcs.Expression[[]any, []bool](n.Metadata.Expression))
    69  			return
    70  		case "[]float64":
    71  			output = incrutil.MapN(graph, funcs.Expression[[]any, []float64](n.Metadata.Expression))
    72  			return
    73  		case "[]int64":
    74  			output = incrutil.MapN(graph, funcs.Expression[[]any, []int64](n.Metadata.Expression))
    75  			return
    76  		case "[]string":
    77  			output = incrutil.MapN(graph, funcs.Expression[[]any, []string](n.Metadata.Expression))
    78  			return
    79  		case "[]duration":
    80  			output = incrutil.MapN(graph, funcs.Expression[[]any, []time.Duration](n.Metadata.Expression))
    81  			return
    82  		case "[]timestamp":
    83  			output = incrutil.MapN(graph, funcs.Expression[[]any, []time.Time](n.Metadata.Expression))
    84  			return
    85  		case "bool":
    86  			output = incrutil.MapN(graph, funcs.Expression[[]any, bool](n.Metadata.Expression))
    87  			return
    88  		case "float64":
    89  			output = incrutil.MapN(graph, funcs.Expression[[]any, float64](n.Metadata.Expression))
    90  			return
    91  		case "int64":
    92  			output = incrutil.MapN(graph, funcs.Expression[[]any, int64](n.Metadata.Expression))
    93  			return
    94  		case "string":
    95  			output = incrutil.MapN(graph, funcs.Expression[[]any, string](n.Metadata.Expression))
    96  			return
    97  		case "duration":
    98  			output = incrutil.MapN(graph, funcs.Expression[[]any, time.Duration](n.Metadata.Expression))
    99  			return
   100  		case "timestamp":
   101  			output = incrutil.MapN(graph, funcs.Expression[[]any, time.Time](n.Metadata.Expression))
   102  			return
   103  		default:
   104  			err = fmt.Errorf("invalid expression output type %v for input type %v", n.Metadata.OutputType, n.Metadata.InputType)
   105  			return
   106  		}
   107  
   108  	case "[]bool":
   109  		switch n.Metadata.OutputType {
   110  		case "table":
   111  			output = incrutil.MapN(graph, funcs.Expression[[]bool, *types.Table](n.Metadata.Expression))
   112  			return
   113  		case "[]bool":
   114  			output = incrutil.MapN(graph, funcs.Expression[[]bool, []bool](n.Metadata.Expression))
   115  			return
   116  		case "[]float64":
   117  			output = incrutil.MapN(graph, funcs.Expression[[]bool, []float64](n.Metadata.Expression))
   118  			return
   119  		case "[]int64":
   120  			output = incrutil.MapN(graph, funcs.Expression[[]bool, []int64](n.Metadata.Expression))
   121  			return
   122  		case "[]string":
   123  			output = incrutil.MapN(graph, funcs.Expression[[]bool, []string](n.Metadata.Expression))
   124  			return
   125  		case "[]duration":
   126  			output = incrutil.MapN(graph, funcs.Expression[[]bool, []time.Duration](n.Metadata.Expression))
   127  			return
   128  		case "[]timestamp":
   129  			output = incrutil.MapN(graph, funcs.Expression[[]bool, []time.Time](n.Metadata.Expression))
   130  			return
   131  		case "bool":
   132  			output = incrutil.MapN(graph, funcs.Expression[[]bool, bool](n.Metadata.Expression))
   133  			return
   134  		case "float64":
   135  			output = incrutil.MapN(graph, funcs.Expression[[]bool, float64](n.Metadata.Expression))
   136  			return
   137  		case "int64":
   138  			output = incrutil.MapN(graph, funcs.Expression[[]bool, int64](n.Metadata.Expression))
   139  			return
   140  		case "string":
   141  			output = incrutil.MapN(graph, funcs.Expression[[]bool, string](n.Metadata.Expression))
   142  			return
   143  		case "duration":
   144  			output = incrutil.MapN(graph, funcs.Expression[[]bool, time.Duration](n.Metadata.Expression))
   145  			return
   146  		case "timestamp":
   147  			output = incrutil.MapN(graph, funcs.Expression[[]bool, time.Time](n.Metadata.Expression))
   148  			return
   149  		default:
   150  			err = fmt.Errorf("invalid expression output type %v for input type %v", n.Metadata.OutputType, n.Metadata.InputType)
   151  			return
   152  		}
   153  
   154  	case "[]float64":
   155  		switch n.Metadata.OutputType {
   156  		case "table":
   157  			output = incrutil.MapN(graph, funcs.Expression[[]float64, *types.Table](n.Metadata.Expression))
   158  			return
   159  		case "[]bool":
   160  			output = incrutil.MapN(graph, funcs.Expression[[]float64, []bool](n.Metadata.Expression))
   161  			return
   162  		case "[]float64":
   163  			output = incrutil.MapN(graph, funcs.Expression[[]float64, []float64](n.Metadata.Expression))
   164  			return
   165  		case "[]int64":
   166  			output = incrutil.MapN(graph, funcs.Expression[[]float64, []int64](n.Metadata.Expression))
   167  			return
   168  		case "[]string":
   169  			output = incrutil.MapN(graph, funcs.Expression[[]float64, []string](n.Metadata.Expression))
   170  			return
   171  		case "[]duration":
   172  			output = incrutil.MapN(graph, funcs.Expression[[]float64, []time.Duration](n.Metadata.Expression))
   173  			return
   174  		case "[]timestamp":
   175  			output = incrutil.MapN(graph, funcs.Expression[[]float64, []time.Time](n.Metadata.Expression))
   176  			return
   177  		case "bool":
   178  			output = incrutil.MapN(graph, funcs.Expression[[]float64, bool](n.Metadata.Expression))
   179  			return
   180  		case "float64":
   181  			output = incrutil.MapN(graph, funcs.Expression[[]float64, float64](n.Metadata.Expression))
   182  			return
   183  		case "int64":
   184  			output = incrutil.MapN(graph, funcs.Expression[[]float64, int64](n.Metadata.Expression))
   185  			return
   186  		case "string":
   187  			output = incrutil.MapN(graph, funcs.Expression[[]float64, string](n.Metadata.Expression))
   188  			return
   189  		case "duration":
   190  			output = incrutil.MapN(graph, funcs.Expression[[]float64, time.Duration](n.Metadata.Expression))
   191  			return
   192  		case "timestamp":
   193  			output = incrutil.MapN(graph, funcs.Expression[[]float64, time.Time](n.Metadata.Expression))
   194  			return
   195  		default:
   196  			err = fmt.Errorf("invalid expression output type %v for input type %v", n.Metadata.OutputType, n.Metadata.InputType)
   197  			return
   198  		}
   199  
   200  	case "[]int64":
   201  		switch n.Metadata.OutputType {
   202  		case "table":
   203  			output = incrutil.MapN(graph, funcs.Expression[[]int64, *types.Table](n.Metadata.Expression))
   204  			return
   205  		case "[]bool":
   206  			output = incrutil.MapN(graph, funcs.Expression[[]int64, []bool](n.Metadata.Expression))
   207  			return
   208  		case "[]float64":
   209  			output = incrutil.MapN(graph, funcs.Expression[[]int64, []float64](n.Metadata.Expression))
   210  			return
   211  		case "[]int64":
   212  			output = incrutil.MapN(graph, funcs.Expression[[]int64, []int64](n.Metadata.Expression))
   213  			return
   214  		case "[]string":
   215  			output = incrutil.MapN(graph, funcs.Expression[[]int64, []string](n.Metadata.Expression))
   216  			return
   217  		case "[]duration":
   218  			output = incrutil.MapN(graph, funcs.Expression[[]int64, []time.Duration](n.Metadata.Expression))
   219  			return
   220  		case "[]timestamp":
   221  			output = incrutil.MapN(graph, funcs.Expression[[]int64, []time.Time](n.Metadata.Expression))
   222  			return
   223  		case "bool":
   224  			output = incrutil.MapN(graph, funcs.Expression[[]int64, bool](n.Metadata.Expression))
   225  			return
   226  		case "float64":
   227  			output = incrutil.MapN(graph, funcs.Expression[[]int64, float64](n.Metadata.Expression))
   228  			return
   229  		case "int64":
   230  			output = incrutil.MapN(graph, funcs.Expression[[]int64, int64](n.Metadata.Expression))
   231  			return
   232  		case "string":
   233  			output = incrutil.MapN(graph, funcs.Expression[[]int64, string](n.Metadata.Expression))
   234  			return
   235  		case "duration":
   236  			output = incrutil.MapN(graph, funcs.Expression[[]int64, time.Duration](n.Metadata.Expression))
   237  			return
   238  		case "timestamp":
   239  			output = incrutil.MapN(graph, funcs.Expression[[]int64, time.Time](n.Metadata.Expression))
   240  			return
   241  		default:
   242  			err = fmt.Errorf("invalid expression output type %v for input type %v", n.Metadata.OutputType, n.Metadata.InputType)
   243  			return
   244  		}
   245  
   246  	case "[]string":
   247  		switch n.Metadata.OutputType {
   248  		case "table":
   249  			output = incrutil.MapN(graph, funcs.Expression[[]string, *types.Table](n.Metadata.Expression))
   250  			return
   251  		case "[]bool":
   252  			output = incrutil.MapN(graph, funcs.Expression[[]string, []bool](n.Metadata.Expression))
   253  			return
   254  		case "[]float64":
   255  			output = incrutil.MapN(graph, funcs.Expression[[]string, []float64](n.Metadata.Expression))
   256  			return
   257  		case "[]int64":
   258  			output = incrutil.MapN(graph, funcs.Expression[[]string, []int64](n.Metadata.Expression))
   259  			return
   260  		case "[]string":
   261  			output = incrutil.MapN(graph, funcs.Expression[[]string, []string](n.Metadata.Expression))
   262  			return
   263  		case "[]duration":
   264  			output = incrutil.MapN(graph, funcs.Expression[[]string, []time.Duration](n.Metadata.Expression))
   265  			return
   266  		case "[]timestamp":
   267  			output = incrutil.MapN(graph, funcs.Expression[[]string, []time.Time](n.Metadata.Expression))
   268  			return
   269  		case "bool":
   270  			output = incrutil.MapN(graph, funcs.Expression[[]string, bool](n.Metadata.Expression))
   271  			return
   272  		case "float64":
   273  			output = incrutil.MapN(graph, funcs.Expression[[]string, float64](n.Metadata.Expression))
   274  			return
   275  		case "int64":
   276  			output = incrutil.MapN(graph, funcs.Expression[[]string, int64](n.Metadata.Expression))
   277  			return
   278  		case "string":
   279  			output = incrutil.MapN(graph, funcs.Expression[[]string, string](n.Metadata.Expression))
   280  			return
   281  		case "duration":
   282  			output = incrutil.MapN(graph, funcs.Expression[[]string, time.Duration](n.Metadata.Expression))
   283  			return
   284  		case "timestamp":
   285  			output = incrutil.MapN(graph, funcs.Expression[[]string, time.Time](n.Metadata.Expression))
   286  			return
   287  		default:
   288  			err = fmt.Errorf("invalid expression output type %v for input type %v", n.Metadata.OutputType, n.Metadata.InputType)
   289  			return
   290  		}
   291  
   292  	case "[]duration":
   293  		switch n.Metadata.OutputType {
   294  		case "table":
   295  			output = incrutil.MapN(graph, funcs.Expression[[]time.Duration, *types.Table](n.Metadata.Expression))
   296  			return
   297  		case "[]bool":
   298  			output = incrutil.MapN(graph, funcs.Expression[[]time.Duration, []bool](n.Metadata.Expression))
   299  			return
   300  		case "[]float64":
   301  			output = incrutil.MapN(graph, funcs.Expression[[]time.Duration, []float64](n.Metadata.Expression))
   302  			return
   303  		case "[]int64":
   304  			output = incrutil.MapN(graph, funcs.Expression[[]time.Duration, []int64](n.Metadata.Expression))
   305  			return
   306  		case "[]string":
   307  			output = incrutil.MapN(graph, funcs.Expression[[]time.Duration, []string](n.Metadata.Expression))
   308  			return
   309  		case "[]duration":
   310  			output = incrutil.MapN(graph, funcs.Expression[[]time.Duration, []time.Duration](n.Metadata.Expression))
   311  			return
   312  		case "[]timestamp":
   313  			output = incrutil.MapN(graph, funcs.Expression[[]time.Duration, []time.Time](n.Metadata.Expression))
   314  			return
   315  		case "bool":
   316  			output = incrutil.MapN(graph, funcs.Expression[[]time.Duration, bool](n.Metadata.Expression))
   317  			return
   318  		case "float64":
   319  			output = incrutil.MapN(graph, funcs.Expression[[]time.Duration, float64](n.Metadata.Expression))
   320  			return
   321  		case "int64":
   322  			output = incrutil.MapN(graph, funcs.Expression[[]time.Duration, int64](n.Metadata.Expression))
   323  			return
   324  		case "string":
   325  			output = incrutil.MapN(graph, funcs.Expression[[]time.Duration, string](n.Metadata.Expression))
   326  			return
   327  		case "duration":
   328  			output = incrutil.MapN(graph, funcs.Expression[[]time.Duration, time.Duration](n.Metadata.Expression))
   329  			return
   330  		case "timestamp":
   331  			output = incrutil.MapN(graph, funcs.Expression[[]time.Duration, time.Time](n.Metadata.Expression))
   332  			return
   333  		default:
   334  			err = fmt.Errorf("invalid expression output type %v for input type %v", n.Metadata.OutputType, n.Metadata.InputType)
   335  			return
   336  		}
   337  
   338  	case "[]timestamp":
   339  		switch n.Metadata.OutputType {
   340  		case "table":
   341  			output = incrutil.MapN(graph, funcs.Expression[[]time.Time, *types.Table](n.Metadata.Expression))
   342  			return
   343  		case "[]bool":
   344  			output = incrutil.MapN(graph, funcs.Expression[[]time.Time, []bool](n.Metadata.Expression))
   345  			return
   346  		case "[]float64":
   347  			output = incrutil.MapN(graph, funcs.Expression[[]time.Time, []float64](n.Metadata.Expression))
   348  			return
   349  		case "[]int64":
   350  			output = incrutil.MapN(graph, funcs.Expression[[]time.Time, []int64](n.Metadata.Expression))
   351  			return
   352  		case "[]string":
   353  			output = incrutil.MapN(graph, funcs.Expression[[]time.Time, []string](n.Metadata.Expression))
   354  			return
   355  		case "[]duration":
   356  			output = incrutil.MapN(graph, funcs.Expression[[]time.Time, []time.Duration](n.Metadata.Expression))
   357  			return
   358  		case "[]timestamp":
   359  			output = incrutil.MapN(graph, funcs.Expression[[]time.Time, []time.Time](n.Metadata.Expression))
   360  			return
   361  		case "bool":
   362  			output = incrutil.MapN(graph, funcs.Expression[[]time.Time, bool](n.Metadata.Expression))
   363  			return
   364  		case "float64":
   365  			output = incrutil.MapN(graph, funcs.Expression[[]time.Time, float64](n.Metadata.Expression))
   366  			return
   367  		case "int64":
   368  			output = incrutil.MapN(graph, funcs.Expression[[]time.Time, int64](n.Metadata.Expression))
   369  			return
   370  		case "string":
   371  			output = incrutil.MapN(graph, funcs.Expression[[]time.Time, string](n.Metadata.Expression))
   372  			return
   373  		case "duration":
   374  			output = incrutil.MapN(graph, funcs.Expression[[]time.Time, time.Duration](n.Metadata.Expression))
   375  			return
   376  		case "timestamp":
   377  			output = incrutil.MapN(graph, funcs.Expression[[]time.Time, time.Time](n.Metadata.Expression))
   378  			return
   379  		default:
   380  			err = fmt.Errorf("invalid expression output type %v for input type %v", n.Metadata.OutputType, n.Metadata.InputType)
   381  			return
   382  		}
   383  
   384  	case "any":
   385  		switch n.Metadata.OutputType {
   386  		case "table":
   387  			output = incrutil.MapN(graph, funcs.Expression[any, *types.Table](n.Metadata.Expression))
   388  			return
   389  		case "[]bool":
   390  			output = incrutil.MapN(graph, funcs.Expression[any, []bool](n.Metadata.Expression))
   391  			return
   392  		case "[]float64":
   393  			output = incrutil.MapN(graph, funcs.Expression[any, []float64](n.Metadata.Expression))
   394  			return
   395  		case "[]int64":
   396  			output = incrutil.MapN(graph, funcs.Expression[any, []int64](n.Metadata.Expression))
   397  			return
   398  		case "[]string":
   399  			output = incrutil.MapN(graph, funcs.Expression[any, []string](n.Metadata.Expression))
   400  			return
   401  		case "[]duration":
   402  			output = incrutil.MapN(graph, funcs.Expression[any, []time.Duration](n.Metadata.Expression))
   403  			return
   404  		case "[]timestamp":
   405  			output = incrutil.MapN(graph, funcs.Expression[any, []time.Time](n.Metadata.Expression))
   406  			return
   407  		case "bool":
   408  			output = incrutil.MapN(graph, funcs.Expression[any, bool](n.Metadata.Expression))
   409  			return
   410  		case "float64":
   411  			output = incrutil.MapN(graph, funcs.Expression[any, float64](n.Metadata.Expression))
   412  			return
   413  		case "int64":
   414  			output = incrutil.MapN(graph, funcs.Expression[any, int64](n.Metadata.Expression))
   415  			return
   416  		case "string":
   417  			output = incrutil.MapN(graph, funcs.Expression[any, string](n.Metadata.Expression))
   418  			return
   419  		case "duration":
   420  			output = incrutil.MapN(graph, funcs.Expression[any, time.Duration](n.Metadata.Expression))
   421  			return
   422  		case "timestamp":
   423  			output = incrutil.MapN(graph, funcs.Expression[any, time.Time](n.Metadata.Expression))
   424  			return
   425  		default:
   426  			err = fmt.Errorf("invalid expression output type %v for input type %v", n.Metadata.OutputType, n.Metadata.InputType)
   427  			return
   428  		}
   429  
   430  	case "bool":
   431  		switch n.Metadata.OutputType {
   432  		case "table":
   433  			output = incrutil.MapN(graph, funcs.Expression[bool, *types.Table](n.Metadata.Expression))
   434  			return
   435  		case "[]bool":
   436  			output = incrutil.MapN(graph, funcs.Expression[bool, []bool](n.Metadata.Expression))
   437  			return
   438  		case "[]float64":
   439  			output = incrutil.MapN(graph, funcs.Expression[bool, []float64](n.Metadata.Expression))
   440  			return
   441  		case "[]int64":
   442  			output = incrutil.MapN(graph, funcs.Expression[bool, []int64](n.Metadata.Expression))
   443  			return
   444  		case "[]string":
   445  			output = incrutil.MapN(graph, funcs.Expression[bool, []string](n.Metadata.Expression))
   446  			return
   447  		case "[]duration":
   448  			output = incrutil.MapN(graph, funcs.Expression[bool, []time.Duration](n.Metadata.Expression))
   449  			return
   450  		case "[]timestamp":
   451  			output = incrutil.MapN(graph, funcs.Expression[bool, []time.Time](n.Metadata.Expression))
   452  			return
   453  		case "bool":
   454  			output = incrutil.MapN(graph, funcs.Expression[bool, bool](n.Metadata.Expression))
   455  			return
   456  		case "float64":
   457  			output = incrutil.MapN(graph, funcs.Expression[bool, float64](n.Metadata.Expression))
   458  			return
   459  		case "int64":
   460  			output = incrutil.MapN(graph, funcs.Expression[bool, int64](n.Metadata.Expression))
   461  			return
   462  		case "string":
   463  			output = incrutil.MapN(graph, funcs.Expression[bool, string](n.Metadata.Expression))
   464  			return
   465  		case "duration":
   466  			output = incrutil.MapN(graph, funcs.Expression[bool, time.Duration](n.Metadata.Expression))
   467  			return
   468  		case "timestamp":
   469  			output = incrutil.MapN(graph, funcs.Expression[bool, time.Time](n.Metadata.Expression))
   470  			return
   471  		default:
   472  			err = fmt.Errorf("invalid expression output type %v for input type %v", n.Metadata.OutputType, n.Metadata.InputType)
   473  			return
   474  		}
   475  
   476  	case "float64":
   477  		switch n.Metadata.OutputType {
   478  		case "table":
   479  			output = incrutil.MapN(graph, funcs.Expression[float64, *types.Table](n.Metadata.Expression))
   480  			return
   481  		case "[]bool":
   482  			output = incrutil.MapN(graph, funcs.Expression[float64, []bool](n.Metadata.Expression))
   483  			return
   484  		case "[]float64":
   485  			output = incrutil.MapN(graph, funcs.Expression[float64, []float64](n.Metadata.Expression))
   486  			return
   487  		case "[]int64":
   488  			output = incrutil.MapN(graph, funcs.Expression[float64, []int64](n.Metadata.Expression))
   489  			return
   490  		case "[]string":
   491  			output = incrutil.MapN(graph, funcs.Expression[float64, []string](n.Metadata.Expression))
   492  			return
   493  		case "[]duration":
   494  			output = incrutil.MapN(graph, funcs.Expression[float64, []time.Duration](n.Metadata.Expression))
   495  			return
   496  		case "[]timestamp":
   497  			output = incrutil.MapN(graph, funcs.Expression[float64, []time.Time](n.Metadata.Expression))
   498  			return
   499  		case "bool":
   500  			output = incrutil.MapN(graph, funcs.Expression[float64, bool](n.Metadata.Expression))
   501  			return
   502  		case "float64":
   503  			output = incrutil.MapN(graph, funcs.Expression[float64, float64](n.Metadata.Expression))
   504  			return
   505  		case "int64":
   506  			output = incrutil.MapN(graph, funcs.Expression[float64, int64](n.Metadata.Expression))
   507  			return
   508  		case "string":
   509  			output = incrutil.MapN(graph, funcs.Expression[float64, string](n.Metadata.Expression))
   510  			return
   511  		case "duration":
   512  			output = incrutil.MapN(graph, funcs.Expression[float64, time.Duration](n.Metadata.Expression))
   513  			return
   514  		case "timestamp":
   515  			output = incrutil.MapN(graph, funcs.Expression[float64, time.Time](n.Metadata.Expression))
   516  			return
   517  		default:
   518  			err = fmt.Errorf("invalid expression output type %v for input type %v", n.Metadata.OutputType, n.Metadata.InputType)
   519  			return
   520  		}
   521  
   522  	case "int64":
   523  		switch n.Metadata.OutputType {
   524  		case "table":
   525  			output = incrutil.MapN(graph, funcs.Expression[int64, *types.Table](n.Metadata.Expression))
   526  			return
   527  		case "[]bool":
   528  			output = incrutil.MapN(graph, funcs.Expression[int64, []bool](n.Metadata.Expression))
   529  			return
   530  		case "[]float64":
   531  			output = incrutil.MapN(graph, funcs.Expression[int64, []float64](n.Metadata.Expression))
   532  			return
   533  		case "[]int64":
   534  			output = incrutil.MapN(graph, funcs.Expression[int64, []int64](n.Metadata.Expression))
   535  			return
   536  		case "[]string":
   537  			output = incrutil.MapN(graph, funcs.Expression[int64, []string](n.Metadata.Expression))
   538  			return
   539  		case "[]duration":
   540  			output = incrutil.MapN(graph, funcs.Expression[int64, []time.Duration](n.Metadata.Expression))
   541  			return
   542  		case "[]timestamp":
   543  			output = incrutil.MapN(graph, funcs.Expression[int64, []time.Time](n.Metadata.Expression))
   544  			return
   545  		case "bool":
   546  			output = incrutil.MapN(graph, funcs.Expression[int64, bool](n.Metadata.Expression))
   547  			return
   548  		case "float64":
   549  			output = incrutil.MapN(graph, funcs.Expression[int64, float64](n.Metadata.Expression))
   550  			return
   551  		case "int64":
   552  			output = incrutil.MapN(graph, funcs.Expression[int64, int64](n.Metadata.Expression))
   553  			return
   554  		case "string":
   555  			output = incrutil.MapN(graph, funcs.Expression[int64, string](n.Metadata.Expression))
   556  			return
   557  		case "duration":
   558  			output = incrutil.MapN(graph, funcs.Expression[int64, time.Duration](n.Metadata.Expression))
   559  			return
   560  		case "timestamp":
   561  			output = incrutil.MapN(graph, funcs.Expression[int64, time.Time](n.Metadata.Expression))
   562  			return
   563  		default:
   564  			err = fmt.Errorf("invalid expression output type %v for input type %v", n.Metadata.OutputType, n.Metadata.InputType)
   565  			return
   566  		}
   567  
   568  	case "string":
   569  		switch n.Metadata.OutputType {
   570  		case "table":
   571  			output = incrutil.MapN(graph, funcs.Expression[string, *types.Table](n.Metadata.Expression))
   572  			return
   573  		case "[]bool":
   574  			output = incrutil.MapN(graph, funcs.Expression[string, []bool](n.Metadata.Expression))
   575  			return
   576  		case "[]float64":
   577  			output = incrutil.MapN(graph, funcs.Expression[string, []float64](n.Metadata.Expression))
   578  			return
   579  		case "[]int64":
   580  			output = incrutil.MapN(graph, funcs.Expression[string, []int64](n.Metadata.Expression))
   581  			return
   582  		case "[]string":
   583  			output = incrutil.MapN(graph, funcs.Expression[string, []string](n.Metadata.Expression))
   584  			return
   585  		case "[]duration":
   586  			output = incrutil.MapN(graph, funcs.Expression[string, []time.Duration](n.Metadata.Expression))
   587  			return
   588  		case "[]timestamp":
   589  			output = incrutil.MapN(graph, funcs.Expression[string, []time.Time](n.Metadata.Expression))
   590  			return
   591  		case "bool":
   592  			output = incrutil.MapN(graph, funcs.Expression[string, bool](n.Metadata.Expression))
   593  			return
   594  		case "float64":
   595  			output = incrutil.MapN(graph, funcs.Expression[string, float64](n.Metadata.Expression))
   596  			return
   597  		case "int64":
   598  			output = incrutil.MapN(graph, funcs.Expression[string, int64](n.Metadata.Expression))
   599  			return
   600  		case "string":
   601  			output = incrutil.MapN(graph, funcs.Expression[string, string](n.Metadata.Expression))
   602  			return
   603  		case "duration":
   604  			output = incrutil.MapN(graph, funcs.Expression[string, time.Duration](n.Metadata.Expression))
   605  			return
   606  		case "timestamp":
   607  			output = incrutil.MapN(graph, funcs.Expression[string, time.Time](n.Metadata.Expression))
   608  			return
   609  		default:
   610  			err = fmt.Errorf("invalid expression output type %v for input type %v", n.Metadata.OutputType, n.Metadata.InputType)
   611  			return
   612  		}
   613  
   614  	case "duration":
   615  		switch n.Metadata.OutputType {
   616  		case "table":
   617  			output = incrutil.MapN(graph, funcs.Expression[time.Duration, *types.Table](n.Metadata.Expression))
   618  			return
   619  		case "[]bool":
   620  			output = incrutil.MapN(graph, funcs.Expression[time.Duration, []bool](n.Metadata.Expression))
   621  			return
   622  		case "[]float64":
   623  			output = incrutil.MapN(graph, funcs.Expression[time.Duration, []float64](n.Metadata.Expression))
   624  			return
   625  		case "[]int64":
   626  			output = incrutil.MapN(graph, funcs.Expression[time.Duration, []int64](n.Metadata.Expression))
   627  			return
   628  		case "[]string":
   629  			output = incrutil.MapN(graph, funcs.Expression[time.Duration, []string](n.Metadata.Expression))
   630  			return
   631  		case "[]duration":
   632  			output = incrutil.MapN(graph, funcs.Expression[time.Duration, []time.Duration](n.Metadata.Expression))
   633  			return
   634  		case "[]timestamp":
   635  			output = incrutil.MapN(graph, funcs.Expression[time.Duration, []time.Time](n.Metadata.Expression))
   636  			return
   637  		case "bool":
   638  			output = incrutil.MapN(graph, funcs.Expression[time.Duration, bool](n.Metadata.Expression))
   639  			return
   640  		case "float64":
   641  			output = incrutil.MapN(graph, funcs.Expression[time.Duration, float64](n.Metadata.Expression))
   642  			return
   643  		case "int64":
   644  			output = incrutil.MapN(graph, funcs.Expression[time.Duration, int64](n.Metadata.Expression))
   645  			return
   646  		case "string":
   647  			output = incrutil.MapN(graph, funcs.Expression[time.Duration, string](n.Metadata.Expression))
   648  			return
   649  		case "duration":
   650  			output = incrutil.MapN(graph, funcs.Expression[time.Duration, time.Duration](n.Metadata.Expression))
   651  			return
   652  		case "timestamp":
   653  			output = incrutil.MapN(graph, funcs.Expression[time.Duration, time.Time](n.Metadata.Expression))
   654  			return
   655  		default:
   656  			err = fmt.Errorf("invalid expression output type %v for input type %v", n.Metadata.OutputType, n.Metadata.InputType)
   657  			return
   658  		}
   659  
   660  	case "timestamp":
   661  		switch n.Metadata.OutputType {
   662  		case "table":
   663  			output = incrutil.MapN(graph, funcs.Expression[time.Time, *types.Table](n.Metadata.Expression))
   664  			return
   665  		case "[]bool":
   666  			output = incrutil.MapN(graph, funcs.Expression[time.Time, []bool](n.Metadata.Expression))
   667  			return
   668  		case "[]float64":
   669  			output = incrutil.MapN(graph, funcs.Expression[time.Time, []float64](n.Metadata.Expression))
   670  			return
   671  		case "[]int64":
   672  			output = incrutil.MapN(graph, funcs.Expression[time.Time, []int64](n.Metadata.Expression))
   673  			return
   674  		case "[]string":
   675  			output = incrutil.MapN(graph, funcs.Expression[time.Time, []string](n.Metadata.Expression))
   676  			return
   677  		case "[]duration":
   678  			output = incrutil.MapN(graph, funcs.Expression[time.Time, []time.Duration](n.Metadata.Expression))
   679  			return
   680  		case "[]timestamp":
   681  			output = incrutil.MapN(graph, funcs.Expression[time.Time, []time.Time](n.Metadata.Expression))
   682  			return
   683  		case "bool":
   684  			output = incrutil.MapN(graph, funcs.Expression[time.Time, bool](n.Metadata.Expression))
   685  			return
   686  		case "float64":
   687  			output = incrutil.MapN(graph, funcs.Expression[time.Time, float64](n.Metadata.Expression))
   688  			return
   689  		case "int64":
   690  			output = incrutil.MapN(graph, funcs.Expression[time.Time, int64](n.Metadata.Expression))
   691  			return
   692  		case "string":
   693  			output = incrutil.MapN(graph, funcs.Expression[time.Time, string](n.Metadata.Expression))
   694  			return
   695  		case "duration":
   696  			output = incrutil.MapN(graph, funcs.Expression[time.Time, time.Duration](n.Metadata.Expression))
   697  			return
   698  		case "timestamp":
   699  			output = incrutil.MapN(graph, funcs.Expression[time.Time, time.Time](n.Metadata.Expression))
   700  			return
   701  		default:
   702  			err = fmt.Errorf("invalid expression output type %v for input type %v", n.Metadata.OutputType, n.Metadata.InputType)
   703  			return
   704  		}
   705  
   706  	default:
   707  		err = fmt.Errorf("invalid expression input type %v", n.Metadata.InputType)
   708  		return
   709  	}
   710  }