diff --git a/mysql/collection.go b/mysql/collection.go index 8e8cf4847fb8c27208d6d1fb6abde4ee08a63b78..95a1146250bf23dab4be176e44fd2ab9921b1ca8 100644 --- a/mysql/collection.go +++ b/mysql/collection.go @@ -33,7 +33,7 @@ import ( type table struct { sqlutil.T - *source + *database names []string } @@ -58,7 +58,7 @@ func (t *table) Find(terms ...interface{}) db.Result { // Truncate deletes all rows from the table. func (t *table) Truncate() error { - _, err := t.source.Exec(sqlgen.Statement{ + _, err := t.database.Exec(sqlgen.Statement{ Type: sqlgen.Truncate, Table: sqlgen.TableWithName(t.tableN(0)), }) @@ -107,7 +107,7 @@ func (t *table) Append(item interface{}) (interface{}, error) { } } - if pKey, err = t.source.getPrimaryKey(t.tableN(0)); err != nil { + if pKey, err = t.database.getPrimaryKey(t.tableN(0)); err != nil { if err != sql.ErrNoRows { // Can't tell primary key. return nil, err @@ -122,7 +122,7 @@ func (t *table) Append(item interface{}) (interface{}, error) { } var res sql.Result - if res, err = t.source.Exec(stmt, arguments...); err != nil { + if res, err = t.database.Exec(stmt, arguments...); err != nil { return nil, err } @@ -177,7 +177,7 @@ func (t *table) Append(item interface{}) (interface{}, error) { // Returns true if the collection exists. func (t *table) Exists() bool { - if err := t.source.tableExists(t.names...); err != nil { + if err := t.database.tableExists(t.names...); err != nil { return false } return true diff --git a/mysql/database.go b/mysql/database.go index 84bd8533d9f21492bc14cc296f5a5a851a8fb186..11e5e5de03ea7539786c7fa7ff5ab88329c0657a 100644 --- a/mysql/database.go +++ b/mysql/database.go @@ -39,7 +39,7 @@ var ( sqlPlaceholder = sqlgen.RawValue(`?`) ) -type source struct { +type database struct { connURL db.ConnectionURL session *sqlx.DB tx *sqltx.Tx @@ -48,11 +48,11 @@ type source struct { type tx struct { *sqltx.Tx - *source + *database } var ( - _ = db.Database(&source{}) + _ = db.Database(&database{}) _ = db.Tx(&tx{}) ) @@ -61,17 +61,17 @@ type columnSchemaT struct { } // Driver returns the underlying *sqlx.DB instance. -func (s *source) Driver() interface{} { - return s.session +func (d *database) Driver() interface{} { + return d.session } // Open attempts to connect to the database server using already stored settings. -func (s *source) Open() error { +func (d *database) Open() error { var err error // Before db.ConnectionURL we used a unified db.Settings struct. This // condition checks for that type and provides backwards compatibility. - if settings, ok := s.connURL.(db.Settings); ok { + if settings, ok := d.connURL.(db.Settings); ok { // User is providing a db.Settings struct, let's translate it into a // ConnectionURL{}. @@ -101,17 +101,17 @@ func (s *source) Open() error { conn.Address = db.HostPort(settings.Host, uint(settings.Port)) } - // Replace original s.connURL - s.connURL = conn + // Replace original d.connURL + d.connURL = conn } - if s.session, err = sqlx.Open(`mysql`, s.connURL.String()); err != nil { + if d.session, err = sqlx.Open(`mysql`, d.connURL.String()); err != nil { return err } - s.session.Mapper = sqlutil.NewMapper() + d.session.Mapper = sqlutil.NewMapper() - if err = s.populateSchema(); err != nil { + if err = d.populateSchema(); err != nil { return err } @@ -120,13 +120,13 @@ func (s *source) Open() error { // Clone returns a cloned db.Database session, this is typically used for // transactions. -func (s *source) Clone() (db.Database, error) { - return s.clone() +func (d *database) Clone() (db.Database, error) { + return d.clone() } -func (s *source) clone() (*source, error) { - src := &source{} - src.Setup(s.connURL) +func (d *database) clone() (*database, error) { + src := &database{} + src.Setup(d.connURL) if err := src.Open(); err != nil { return nil, err @@ -137,35 +137,35 @@ func (s *source) clone() (*source, error) { // Ping checks whether a connection to the database is still alive by pinging // it, establishing a connection if necessary. -func (s *source) Ping() error { - return s.session.Ping() +func (d *database) Ping() error { + return d.session.Ping() } // Close terminates the current database session. -func (s *source) Close() error { - if s.session != nil { - return s.session.Close() +func (d *database) Close() error { + if d.session != nil { + return d.session.Close() } return nil } // Collection returns a table by name. -func (s *source) Collection(names ...string) (db.Collection, error) { +func (d *database) Collection(names ...string) (db.Collection, error) { var err error if len(names) == 0 { return nil, db.ErrMissingCollectionName } - if s.tx != nil { - if s.tx.Done() { + if d.tx != nil { + if d.tx.Done() { return nil, sql.ErrTxDone } } col := &table{ - source: s, - names: names, + database: d, + names: names, } for _, name := range names { @@ -177,11 +177,11 @@ func (s *source) Collection(names ...string) (db.Collection, error) { tableName := chunks[0] - if err := s.tableExists(tableName); err != nil { + if err := d.tableExists(tableName); err != nil { return nil, err } - if col.Columns, err = s.tableColumns(tableName); err != nil { + if col.Columns, err = d.tableColumns(tableName); err != nil { return nil, err } } @@ -190,14 +190,14 @@ func (s *source) Collection(names ...string) (db.Collection, error) { } // Collections returns a list of non-system tables from the database. -func (s *source) Collections() (collections []string, err error) { +func (d *database) Collections() (collections []string, err error) { - tablesInSchema := len(s.schema.Tables) + tablesInSchema := len(d.schema.Tables) // Is schema already populated? if tablesInSchema > 0 { // Pulling table names from schema. - return s.schema.Tables, nil + return d.schema.Tables, nil } stmt := sqlgen.Statement{ @@ -217,7 +217,7 @@ func (s *source) Collections() (collections []string, err error) { // Executing statement. var rows *sqlx.Rows - if rows, err = s.Query(stmt, s.schema.Name); err != nil { + if rows, err = d.Query(stmt, d.schema.Name); err != nil { return nil, err } @@ -234,7 +234,7 @@ func (s *source) Collections() (collections []string, err error) { } // Adding table entry to schema. - s.schema.AddTable(name) + d.schema.AddTable(name) // Adding table to collections array. collections = append(collections, name) @@ -244,64 +244,64 @@ func (s *source) Collections() (collections []string, err error) { } // Use changes the active database. -func (s *source) Use(database string) (err error) { +func (d *database) Use(database string) (err error) { var conn ConnectionURL - if conn, err = ParseURL(s.connURL.String()); err != nil { + if conn, err = ParseURL(d.connURL.String()); err != nil { return err } conn.Database = database - s.connURL = conn + d.connURL = conn - return s.Open() + return d.Open() } // Drop removes all tables from the current database. -func (s *source) Drop() error { +func (d *database) Drop() error { - _, err := s.Query(sqlgen.Statement{ + _, err := d.Query(sqlgen.Statement{ Type: sqlgen.DropDatabase, - Database: sqlgen.DatabaseWithName(s.schema.Name), + Database: sqlgen.DatabaseWithName(d.schema.Name), }) return err } // Setup stores database settings. -func (s *source) Setup(connURL db.ConnectionURL) error { - s.connURL = connURL - return s.Open() +func (d *database) Setup(connURL db.ConnectionURL) error { + d.connURL = connURL + return d.Open() } // Name returns the name of the database. -func (s *source) Name() string { - return s.schema.Name +func (d *database) Name() string { + return d.schema.Name } // Transaction starts a transaction block and returns a db.Tx struct that can // be used to issue transactional queries. -func (s *source) Transaction() (db.Tx, error) { +func (d *database) Transaction() (db.Tx, error) { var err error - var clone *source + var clone *database var sqlTx *sqlx.Tx - if sqlTx, err = s.session.Beginx(); err != nil { + if sqlTx, err = d.session.Beginx(); err != nil { return nil, err } - if clone, err = s.clone(); err != nil { + if clone, err = d.clone(); err != nil { return nil, err } clone.tx = sqltx.New(sqlTx) - return tx{Tx: clone.tx, source: clone}, nil + return tx{Tx: clone.tx, database: clone}, nil } // Exec compiles and executes a statement that does not return any rows. -func (s *source) Exec(stmt sqlgen.Statement, args ...interface{}) (sql.Result, error) { +func (d *database) Exec(stmt sqlgen.Statement, args ...interface{}) (sql.Result, error) { var query string var res sql.Result var err error @@ -314,23 +314,23 @@ func (s *source) Exec(stmt sqlgen.Statement, args ...interface{}) (sql.Result, e sqlutil.Log(query, args, err, start, end) }() - if s.session == nil { + if d.session == nil { return nil, db.ErrNotConnected } query = stmt.Compile(template) - if s.tx != nil { - res, err = s.tx.Exec(query, args...) + if d.tx != nil { + res, err = d.tx.Exec(query, args...) } else { - res, err = s.session.Exec(query, args...) + res, err = d.session.Exec(query, args...) } return res, err } // Query compiles and executes a statement that returns rows. -func (s *source) Query(stmt sqlgen.Statement, args ...interface{}) (*sqlx.Rows, error) { +func (d *database) Query(stmt sqlgen.Statement, args ...interface{}) (*sqlx.Rows, error) { var rows *sqlx.Rows var query string var err error @@ -343,23 +343,23 @@ func (s *source) Query(stmt sqlgen.Statement, args ...interface{}) (*sqlx.Rows, sqlutil.Log(query, args, err, start, end) }() - if s.session == nil { + if d.session == nil { return nil, db.ErrNotConnected } query = stmt.Compile(template) - if s.tx != nil { - rows, err = s.tx.Queryx(query, args...) + if d.tx != nil { + rows, err = d.tx.Queryx(query, args...) } else { - rows, err = s.session.Queryx(query, args...) + rows, err = d.session.Queryx(query, args...) } return rows, err } // QueryRow compiles and executes a statement that returns at most one row. -func (s *source) QueryRow(stmt sqlgen.Statement, args ...interface{}) (*sqlx.Row, error) { +func (d *database) QueryRow(stmt sqlgen.Statement, args ...interface{}) (*sqlx.Row, error) { var query string var row *sqlx.Row var err error @@ -372,16 +372,16 @@ func (s *source) QueryRow(stmt sqlgen.Statement, args ...interface{}) (*sqlx.Row sqlutil.Log(query, args, err, start, end) }() - if s.session == nil { + if d.session == nil { return nil, db.ErrNotConnected } query = stmt.Compile(template) - if s.tx != nil { - row = s.tx.QueryRowx(query, args...) + if d.tx != nil { + row = d.tx.QueryRowx(query, args...) } else { - row = s.session.QueryRowx(query, args...) + row = d.session.QueryRowx(query, args...) } return row, err @@ -389,10 +389,10 @@ func (s *source) QueryRow(stmt sqlgen.Statement, args ...interface{}) (*sqlx.Row // populateSchema looks up for the table info in the database and populates its // schema for internal use. -func (s *source) populateSchema() (err error) { +func (d *database) populateSchema() (err error) { var collections []string - s.schema = schema.NewDatabaseSchema() + d.schema = schema.NewDatabaseSchema() // Get database name. stmt := sqlgen.Statement{ @@ -404,22 +404,22 @@ func (s *source) populateSchema() (err error) { var row *sqlx.Row - if row, err = s.QueryRow(stmt); err != nil { + if row, err = d.QueryRow(stmt); err != nil { return err } - if err = row.Scan(&s.schema.Name); err != nil { + if err = row.Scan(&d.schema.Name); err != nil { return err } // The Collections() call will populate schema if its nil. - if collections, err = s.Collections(); err != nil { + if collections, err = d.Collections(); err != nil { return err } for i := range collections { // Populate each collection. - if _, err = s.Collection(collections[i]); err != nil { + if _, err = d.Collection(collections[i]); err != nil { return err } } @@ -427,14 +427,14 @@ func (s *source) populateSchema() (err error) { return err } -func (s *source) tableExists(names ...string) error { +func (d *database) tableExists(names ...string) error { var stmt sqlgen.Statement var err error var rows *sqlx.Rows for i := range names { - if s.schema.HasTable(names[i]) { + if d.schema.HasTable(names[i]) { // We already know this table exists. continue } @@ -459,7 +459,7 @@ func (s *source) tableExists(names ...string) error { ), } - if rows, err = s.Query(stmt, s.schema.Name, names[i]); err != nil { + if rows, err = d.Query(stmt, d.schema.Name, names[i]); err != nil { return db.ErrCollectionDoesNotExist } @@ -473,10 +473,10 @@ func (s *source) tableExists(names ...string) error { return nil } -func (s *source) tableColumns(tableName string) ([]string, error) { +func (d *database) tableColumns(tableName string) ([]string, error) { // Making sure this table is allocated. - tableSchema := s.schema.Table(tableName) + tableSchema := d.schema.Table(tableName) if len(tableSchema.Columns) > 0 { return tableSchema.Columns, nil @@ -506,7 +506,7 @@ func (s *source) tableColumns(tableName string) ([]string, error) { var rows *sqlx.Rows var err error - if rows, err = s.Query(stmt, s.schema.Name, tableName); err != nil { + if rows, err = d.Query(stmt, d.schema.Name, tableName); err != nil { return nil, err } @@ -516,18 +516,18 @@ func (s *source) tableColumns(tableName string) ([]string, error) { return nil, err } - s.schema.TableInfo[tableName].Columns = make([]string, 0, len(tableFields)) + d.schema.TableInfo[tableName].Columns = make([]string, 0, len(tableFields)) for i := range tableFields { - s.schema.TableInfo[tableName].Columns = append(s.schema.TableInfo[tableName].Columns, tableFields[i].Name) + d.schema.TableInfo[tableName].Columns = append(d.schema.TableInfo[tableName].Columns, tableFields[i].Name) } - return s.schema.TableInfo[tableName].Columns, nil + return d.schema.TableInfo[tableName].Columns, nil } -func (s *source) getPrimaryKey(tableName string) ([]string, error) { +func (d *database) getPrimaryKey(tableName string) ([]string, error) { - tableSchema := s.schema.Table(tableName) + tableSchema := d.schema.Table(tableName) if len(tableSchema.PrimaryKey) != 0 { return tableSchema.PrimaryKey, nil @@ -573,7 +573,7 @@ func (s *source) getPrimaryKey(tableName string) ([]string, error) { var rows *sqlx.Rows var err error - if rows, err = s.Query(stmt, s.schema.Name, tableName); err != nil { + if rows, err = d.Query(stmt, d.schema.Name, tableName); err != nil { return nil, err } diff --git a/mysql/database_test.go b/mysql/database_test.go index bda28252950b806086046028666c945384924c63..e0e4d3ae1b9abfcb8a3832fe7315fbc2354b48ce 100644 --- a/mysql/database_test.go +++ b/mysql/database_test.go @@ -40,9 +40,9 @@ import ( ) const ( - database = "upperio_tests" - username = "upperio" - password = "upperio" + databaseName = "upperio_tests" + username = "upperio" + password = "upperio" ) const ( @@ -50,7 +50,7 @@ const ( ) var settings = ConnectionURL{ - Database: database, + Database: databaseName, User: username, Password: password, Options: map[string]string{ @@ -179,7 +179,7 @@ func TestOpenWithWrongData(t *testing.T) { // Attempt to open with safe settings. rightSettings = db.Settings{ - Database: database, + Database: databaseName, Host: host, User: username, Password: password, @@ -193,7 +193,7 @@ func TestOpenWithWrongData(t *testing.T) { // Attempt to open with wrong password. wrongSettings = db.Settings{ - Database: database, + Database: databaseName, Host: host, User: username, Password: "fail", @@ -217,7 +217,7 @@ func TestOpenWithWrongData(t *testing.T) { // Attempt to open with wrong username. wrongSettings = db.Settings{ - Database: database, + Database: databaseName, Host: host, User: "fail", Password: password, @@ -234,7 +234,7 @@ func TestOldSettings(t *testing.T) { var sess db.Database oldSettings := db.Settings{ - Database: database, + Database: databaseName, User: username, Password: password, Host: host, diff --git a/mysql/mysql.go b/mysql/mysql.go index 58e2a9ee8aa7f09a19eb84c108b0b5cbfb88fc31..c0141dadff36125a4483c0d2b51d340f062dd6d5 100644 --- a/mysql/mysql.go +++ b/mysql/mysql.go @@ -65,5 +65,5 @@ func init() { Cache: cache.NewCache(), } - db.Register(Adapter, &source{}) + db.Register(Adapter, &database{}) }