@@ -301,49 +301,68 @@ func (table *table) CreateSQL() (string, error) {
301
301
return tableSQL .String , nil
302
302
}
303
303
304
- func (table * table ) Init () (err error ) {
305
- if len (table .values ) != 0 {
306
- return errors .New ("can't init twice" )
307
- }
308
-
309
- var columns []string
310
-
304
+ func (table * table ) getColumnsToDump () ([]string , error ) {
311
305
colInfo , err := table .data .tx .Query ("SHOW COLUMNS FROM " + table .NameEsc ())
312
306
if err != nil {
313
- return err
307
+ return nil , err
314
308
}
315
309
310
+ var result []string
311
+
316
312
for colInfo .Next () {
317
313
cols , err := colInfo .Columns ()
318
314
if err != nil {
319
- return err
315
+ return nil , err
320
316
}
321
317
318
+ // Allocate and link space to scan to this must be done every iteration
322
319
info := make ([]sql.NullString , len (cols ))
323
320
scans := make ([]interface {}, len (cols ))
324
321
for i := range info {
325
322
scans [i ] = & info [i ]
326
323
}
327
324
325
+ // Read into the pointers to the info marker
328
326
if err := colInfo .Scan (scans ... ); err != nil {
329
- return err
327
+ return nil , err
330
328
}
331
329
332
- // ignore all extras with VIRTUAL
330
+ // Find the the fields we care about
331
+ var field , extra * sql.NullString
332
+ for i , col := range cols {
333
+ switch col {
334
+ case "Field" , "field" :
335
+ field = & info [i ]
336
+ case "Extra" , "extra" :
337
+ extra = & info [i ]
338
+ }
339
+ if field != nil && extra != nil {
340
+ break
341
+ }
342
+ }
333
343
334
- if info [ 0 ]. String == "cert_blob_lookup_hash" {
335
- fmt . Println ( "this is a thing " )
344
+ if ! extra . Valid || ! strings . Contains ( extra . String , "VIRTUAL" ) {
345
+ result = append ( result , "`" + field . String + "` " )
336
346
}
347
+ }
348
+ return result , nil
349
+ }
350
+
351
+ func (table * table ) Init () error {
352
+ if len (table .values ) != 0 {
353
+ return errors .New ("can't init twice" )
354
+ }
337
355
338
- columns = append (columns , "`" + info [0 ].String + "`" )
356
+ columns , err := table .getColumnsToDump ()
357
+ if err != nil {
358
+ return err
339
359
}
340
360
341
361
if len (columns ) == 0 {
342
- return errors .New ("No columns in table " + table .Name + "." )
362
+ // No data to dump since this is a virtual table
363
+ return nil
343
364
}
344
365
345
- // Total query plus sanitization
346
-
347
366
table .rows , err = table .data .tx .Query ("SELECT " + strings .Join (columns , "," ) + " FROM " + table .NameEsc ())
348
367
if err != nil {
349
368
return err
0 commit comments