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
hc-github-team-secure-boundary a5d51c602d
backport of commit 9e71bcb3f9 (#6296)
2 months ago
..
assert [COMPLIANCE] License changes (#3567) 3 years ago
common [COMPLIANCE] License changes (#3567) 3 years ago
db_test feat(plugins): Add IBM Key Protect (IBM Cloud KMS) wrapper (#6112) 4 months ago
sanitize [COMPLIANCE] License changes (#3567) 3 years ago
schema backport of commit 9e71bcb3f9 (#6296) 2 months ago
sentinel [COMPLIANCE] License changes (#3567) 3 years ago
sqltest chore(sqltest): update readme (#6228) 3 months ago
timestamp feat(plugins): Add IBM Key Protect (IBM Cloud KMS) wrapper (#6112) 4 months ago
README.md fix: properly handle rows.Err() (#4261) 2 years ago
backoff.go Fix linter warnings 2 years ago
changesafe_reader_writer.go refact: to use go-dbw CreateItems, DeleteItems (#4974) 2 years ago
clause.go [COMPLIANCE] License changes (#3567) 3 years ago
db.go Fix linter warnings 2 years ago
db_test.go [COMPLIANCE] License changes (#3567) 3 years ago
domains_test.go fix: properly handle rows.Err() (#4261) 2 years ago
id.go [COMPLIANCE] License changes (#3567) 3 years ago
id_test.go [COMPLIANCE] License changes (#3567) 3 years ago
option.go feat (cache): impl. soft-delete of users in cache (#5173) 1 year ago
option_test.go feat (cache): impl. soft-delete of users in cache (#5173) 1 year ago
package_registration.go [COMPLIANCE] License changes (#3567) 3 years ago
read_writer.go feat (cache): impl. soft-delete of users in cache (#5173) 1 year ago
read_writer_ext_test.go refact: to use go-dbw CreateItems, DeleteItems (#4974) 2 years ago
read_writer_oplog.go refact: to use go-dbw CreateItems, DeleteItems (#4974) 2 years ago
read_writer_test.go refact: to use go-dbw CreateItems, DeleteItems (#4974) 2 years ago
sqlite_darwin.go Add client daemon repo, server, and cmd 2 years ago
sqlite_freebsd.go Add client daemon repo, server, and cmd 2 years ago
sqlite_linux.go Add client daemon repo, server, and cmd 2 years ago
sqlite_windows.go Add client daemon repo, server, and cmd 2 years ago
testing.go fix (kms): move oplog DEK into its own internal kms (#3665) 2 years ago
testing_test.go fix (kms): move oplog DEK into its own internal kms (#3665) 2 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
    }
    if err := rows.Err(); err != nil {
        // do something with the err
    }

    // 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"},
                    },
                ),
            )
        })