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