You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
boundary/internal/db
Irena Rindos ab0a2ad689
Fix hcp billing test (#3045)
3 years ago
..
assert chore: Add license headers to all files 3 years ago
common chore: Add license headers to all files 3 years ago
db_test chore: Add license headers to all files 3 years ago
sanitize chore: Add license headers to all files 3 years ago
schema feat(db): Introduce migrations for ssh targets (#2960) 3 years ago
sentinel chore: Add license headers to all files 3 years ago
sqltest Fix hcp billing test (#3045) 3 years ago
timestamp chore: Add license headers to all files 3 years ago
README.md refactor: Update gorm deps (#1591) 4 years ago
backoff.go chore: Add license headers to all files 3 years ago
changesafe_reader_writer.go chore: Add license headers to all files 3 years ago
clause.go chore: Add license headers to all files 3 years ago
db.go chore: Add license headers to all files 3 years ago
db_test.go chore: Add license headers to all files 3 years ago
domains_test.go chore: Add license headers to all files 3 years ago
id.go chore: Add license headers to all files 3 years ago
id_test.go chore: Add license headers to all files 3 years ago
option.go chore: Add license headers to all files 3 years ago
option_test.go chore: Add license headers to all files 3 years ago
package_registration.go chore: Add license headers to all files 3 years ago
read_writer.go chore: Add license headers to all files 3 years ago
read_writer_ext_test.go chore: Add license headers to all files 3 years ago
read_writer_oplog.go chore: Add license headers to all files 3 years ago
read_writer_test.go chore: Add license headers to all files 3 years ago
testing.go chore: Add license headers to all files 3 years ago
testing_test.go chore: Add license headers to all files 3 years ago

README.md

db package

Usage

Just some high-level usage highlights to get you started. Read the godocs for a complete list of capabilities and their documentation.

    dialect = postgres.New(postgres.Config{
			DSN: connectionUrl},
		)
    conn, _ := gorm.Open(dialect, &gorm.Config{})
    
    // Db implements both the Reader and Writer interfaces
    rw := Db{Tx: conn}
    
    // There are writer methods like: Create, Update and Delete
    // that will write Gorm struct to the db.  These writer methods
    // all support options for writing Oplog entries for the 
    // caller: WithOplog(yourWrapper, yourMetadata)
    // the caller is responsible for the transaction life cycle of the writer
    // and if an error is returned the caller must decide what to do with 
    // the transaction, which is almost always a rollback for the caller.
    err = rw.Create(context.Background(), user)
   
    // There are reader methods like: LookupByPublicId,  
    // LookupByName, SearchBy, LookupBy, etc
    // which will lookup resources for you and scan them into your Gorm struct
    err = rw.LookupByPublicId(context.Background(), foundUser)

    // There's reader ScanRows that facilitates scanning rows from 
    // a query into your Gorm struct
    where := "select * from test_users where name in ($1, $2)"
    rows, err := rw.Query(context.Background(), where, []interface{}{"alice", "bob"})
	defer rows.Close()
	for rows.Next() {
        user := db_test.NewTestUser()
        // scan the row into your Gorm struct
		if err := rw.ScanRows(rows, &user); err != nil {
            return err
        }
        // Do something with the Gorm user struct
    }

    // DoTx is a writer function that wraps a TxHandler 
    // in a retryable transaction.  You simply implement a
    // TxHandler that does your writes and hand the handler
    // to DoTx, which will wrap the writes in a retryable 
    // transaction with the retry attempts and backoff
    // strategy you specify via options.
    _, err = w.DoTx(
        context.Background(),
        10,           // ten retries
        ExpBackoff{}, // exponential backoff
        func(w Writer) error {
            // the TxHandler updates the user's friendly name
            return w.Update(context.Background(), user, []string{"FriendlyName"},
                // write oplogs for this update
                WithOplog(
                    InitTestWrapper(t),
                    oplog.Metadata{
                        "key-only":   nil,
                        "deployment": []string{"amex"},
                        "project":    []string{"central-info-systems", "local-info-systems"},
                    },
                ),
            )
        })