77 "context"
88 "fmt"
99 "reflect"
10+ "strings"
1011 "time"
1112
1213 "cloud.google.com/go/spanner"
@@ -28,7 +29,7 @@ func init() {
2829
2930func LoadWorkflows (ctx context.Context ) ([]* Workflow , error ) {
3031 return selectAll [Workflow ](ctx , spanner.Statement {
31- SQL : `SELECT * FROM Workflows` ,
32+ SQL : selectWorkflows () ,
3233 })
3334}
3435
@@ -113,7 +114,7 @@ func StartJob(ctx context.Context, req *dashapi.AIJobPollReq) (*Job, error) {
113114 _ , err = client .ReadWriteTransaction (ctx , func (ctx context.Context , txn * spanner.ReadWriteTransaction ) error {
114115 {
115116 iter := txn .Query (ctx , spanner.Statement {
116- SQL : `SELECT * FROM Jobs WHERE Workflow IN UNNEST(@workflows)
117+ SQL : selectJobs () + ` WHERE Workflow IN UNNEST(@workflows)
117118 AND Started IS NULL
118119 ORDER BY Created ASC LIMIT 1` ,
119120 Params : map [string ]any {
@@ -144,7 +145,7 @@ func StartJob(ctx context.Context, req *dashapi.AIJobPollReq) (*Job, error) {
144145
145146func LoadNamespaceJobs (ctx context.Context , ns string ) ([]* Job , error ) {
146147 return selectAll [Job ](ctx , spanner.Statement {
147- SQL : `SELECT * FROM Jobs WHERE Namespace = @ns ORDER BY Created DESC` ,
148+ SQL : selectJobs () + ` WHERE Namespace = @ns ORDER BY Created DESC` ,
148149 Params : map [string ]any {
149150 "ns" : ns ,
150151 },
@@ -153,7 +154,7 @@ func LoadNamespaceJobs(ctx context.Context, ns string) ([]*Job, error) {
153154
154155func LoadBugJobs (ctx context.Context , bugID string ) ([]* Job , error ) {
155156 return selectAll [Job ](ctx , spanner.Statement {
156- SQL : `SELECT * FROM Jobs WHERE BugID = @bugID ORDER BY Created DESC` ,
157+ SQL : selectJobs () + ` WHERE BugID = @bugID ORDER BY Created DESC` ,
157158 Params : map [string ]any {
158159 "bugID" : bugID ,
159160 },
@@ -162,7 +163,7 @@ func LoadBugJobs(ctx context.Context, bugID string) ([]*Job, error) {
162163
163164func LoadJob (ctx context.Context , id string ) (* Job , error ) {
164165 return selectOne [Job ](ctx , spanner.Statement {
165- SQL : `SELECT * FROM Jobs WHERE ID = @id` ,
166+ SQL : selectJobs () + ` WHERE ID = @id` ,
166167 Params : map [string ]any {
167168 "id" : id ,
168169 },
@@ -201,7 +202,7 @@ func StoreTrajectorySpan(ctx context.Context, jobID string, span *trajectory.Spa
201202
202203func LoadTrajectory (ctx context.Context , jobID string ) ([]* TrajectorySpan , error ) {
203204 return selectAll [TrajectorySpan ](ctx , spanner.Statement {
204- SQL : `SELECT * FROM TrajectorySpans WHERE JobID = @job_id ORDER BY Seq ASC` ,
205+ SQL : selectTrajectorySpans () + ` WHERE JobID = @job_id ORDER BY Seq ASC` ,
205206 Params : map [string ]any {
206207 "job_id" : jobID ,
207208 },
@@ -252,6 +253,26 @@ var TimeNow = func(ctx context.Context) time.Time {
252253 return time .Now ()
253254}
254255
256+ func selectWorkflows () string {
257+ return selectAllFrom [Workflow ]("Workflows" )
258+ }
259+
260+ func selectJobs () string {
261+ return selectAllFrom [Job ]("Jobs" )
262+ }
263+
264+ func selectTrajectorySpans () string {
265+ return selectAllFrom [TrajectorySpan ]("TrajectorySpans" )
266+ }
267+
268+ func selectAllFrom [T any ](table string ) string {
269+ var fields []string
270+ for _ , field := range reflect .VisibleFields (reflect .TypeFor [T ]()) {
271+ fields = append (fields , field .Name )
272+ }
273+ return fmt .Sprintf ("SELECT %v FROM %v " , strings .Join (fields , ", " ), table )
274+ }
275+
255276func toNullJSON (v map [string ]any ) spanner.NullJSON {
256277 if v == nil {
257278 return spanner.NullJSON {}
0 commit comments