github.com/astrogo/cfitsio@v0.1.0/sqldriver.go (about) 1 package cfitsio 2 3 import ( 4 "database/sql" 5 "database/sql/driver" 6 "fmt" 7 ) 8 9 // fitsdriver adapts a FITS table to the database/sql/driver interface 10 type fitsdriver struct { 11 } 12 13 // Open returns a new connection to the FITS table 14 func (drv *fitsdriver) Open(name string) (driver.Conn, error) { 15 f, err := Open(name, ReadOnly) 16 if err != nil { 17 return nil, err 18 } 19 hdu := f.CHDU() 20 tbl, ok := hdu.(*Table) 21 if !ok { 22 return nil, fmt.Errorf("cfitsio: current HDU isn't a Table") 23 } 24 conn := &fitsconn{ 25 f: f, 26 t: tbl, 27 } 28 return conn, err 29 } 30 31 // fitsconn adapts a FITS table to the database/sql/driver Conn interface 32 type fitsconn struct { 33 f File 34 t *Table 35 } 36 37 // Prepare returns a prepared statement, bound to this connection 38 func (conn *fitsconn) Prepare(query string) (driver.Stmt, error) { 39 var stmt driver.Stmt 40 var err error 41 42 return stmt, err 43 } 44 45 // Close invalidates and potentially stops any current prepared statements 46 // and transactions, marking this connection as no longer in use. 47 func (conn *fitsconn) Close() error { 48 err := conn.t.Close() 49 if err != nil { 50 return err 51 } 52 err = conn.f.Close() 53 return err 54 } 55 56 // Begin starts and returns a new transaction 57 func (conn *fitsconn) Begin() (driver.Tx, error) { 58 var tx driver.Tx = &fitstx{conn} 59 var err error 60 return tx, err 61 } 62 63 // fitstx is a transaction on a FITS table 64 type fitstx struct { 65 conn *fitsconn 66 } 67 68 func (tx *fitstx) Commit() error { 69 if tx.conn == nil { 70 return fmt.Errorf("cfitsio: invalid FITS connection") 71 } 72 panic("not implemented") 73 } 74 75 func (tx *fitstx) Rollback() error { 76 if tx.conn == nil { 77 return fmt.Errorf("cfitsio: invalid FITS connection") 78 } 79 panic("not implemented") 80 } 81 82 func init() { 83 sql.Register("fits", &fitsdriver{}) 84 } 85 86 var _ driver.Driver = (*fitsdriver)(nil) 87 88 // EOF