Documentation
¶
Index ¶
Examples ¶
Constants ¶
const (
// CDBM_CONFIG is the default enviroment variable that should point to config file
CDBM_CONFIG = "CDBM_CONFIG"
)
Variables ¶
var DefaultRootNameCfg = RootNameConfig{ DBProtocol: FlagName{ LongHand: "db-protocol", ShortHand: "b", }, Env: FlagName{ LongHand: "env", ShortHand: "e", }, Database: FlagName{ LongHand: "database", ShortHand: "d", }, Host: FlagName{ LongHand: "host", ShortHand: "h", }, User: FlagName{ LongHand: "user", ShortHand: "u", }, Password: FlagName{ LongHand: "password", ShortHand: "w", }, Port: FlagName{ LongHand: "port", ShortHand: "p", }, SSLMode: FlagName{ LongHand: "ssl-mode", ShortHand: "m", }, SSLRootCert: FlagName{ LongHand: "ssl-root-cert", ShortHand: "r", }, SSLKey: FlagName{ LongHand: "ssl-key", ShortHand: "k", }, SSLCert: FlagName{ LongHand: "ssl-cert", ShortHand: "c", }, SSL: FlagName{ LongHand: "ssl", ShortHand: "s", }, UseFileOnFail: FlagName{ LongHand: "use-file-on-fail", ShortHand: "f", }, }
Functions ¶
Types ¶
type CDBM ¶
type CDBM struct {
// DB is database connection used
//
// This will be set in NewCDBM
DB *sqlx.DB
// DBProtocolCfg is config used for different database settings based
// on database being used
//
// This will be set in NewCDBM
DBProtocolCfg cdbmutil.DBProtocolConfig `yaml:"-" mapstructure:"-"`
// MigrateFlags represents the flags for migrate command
MigrateFlags MigrateFlagsConfig `yaml:"migrate_flags" mapstructure:"migrate_flags"`
// RootFlags represents the flags for root command
RootFlags RootFlagsConfig `yaml:"root_flags" mapstructure:"root_flags"`
// DropFlags represents the flags for drop command
DropFlags DropFlagsConfig `yaml:"drop_flags" mapstructure:"drop_flags"`
// LogFlags represents the flags for log command
LogFlags LogFlagsConfig `yaml:"log_flags" mapstructure:"log_flags"`
// DatabaseConfig is map with different db connections to database to be used
// if one or more fail
DatabaseConfig map[string][]webutil.DatabaseSetting `yaml:"database_config" mapstructure:"database_config"`
// contains filtered or unexported fields
}
CDBM is main struct for app and is used for all commands
func GetCDBMConfig ¶
func NewCDBM ¶
func NewCDBM(cfg RootFlagsConfig, driverCfg interface{}) (*CDBM, error)
NewCDBM initiates a new *CDBM instance
RootFlagsConfig#DBProtocol is a required if not read from file as it intiates what type of database we are working with
func NewTestCDBM ¶
func NewTestCDBM(db *sqlx.DB, dbProtocol cdbmutil.DBProtocol, migCfg MigrateFlagsConfig) (*CDBM, error)
NewTestCDBM will initiate a new *CDBM instance with the bare minimum fields required to run CDBM#Migrate
This function should only be used for tests
func (*CDBM) GetCurrentDBSettings ¶
func (cdbm *CDBM) GetCurrentDBSettings() webutil.DatabaseSetting
func (*CDBM) Migrate ¶
func (cdbm *CDBM) Migrate( getMigFunc cdbmutil.GetMigrationFunc, fMigFunc cdbmutil.FileMigrationFunc, cMigrations map[int]cdbmutil.CustomMigration, ) error
Migrate migrates database based on given settings
func (*CDBM) Status ¶
Status will print out to stdout the current database migration table status
Example (A) ¶
utilSettings, err := cdbmutil.GetCDBMUtilSettings("")
if err != nil {
fmt.Printf("%+v", err)
return
}
settings, err := GetCDBMConfig("")
if err != nil {
fmt.Printf("%+v", err)
return
}
utilSettings.DBSetup.FileServerSetup = nil
utilSettings.DBSetup.BaseSchemaFile = ""
db, dbName, err := cdbmutil.GetNewDatabase(
utilSettings,
cdbmutil.DefaultExecCmd,
cdbmutil.DefaultGetDB,
)
if err != nil {
fmt.Printf("%+v", err)
return
}
defer exec.Command("/bin/sh", "-c", fmt.Sprintf(utilSettings.DBAction.DropDB, dbName)).Start()
cdbm := &CDBM{
DB: db,
DBProtocolCfg: cdbmutil.DefaultProtocolMap[cdbmutil.DBProtocol(settings.RootFlags.DBProtocol)],
}
if err = cdbm.Status(); err != nil {
fmt.Printf("%+v", err)
return
}
Output: No migration entry
Example (B) ¶
utilSettings, err := cdbmutil.GetCDBMUtilSettings("")
if err != nil {
fmt.Printf("%+v", err)
return
}
settings, err := GetCDBMConfig("")
if err != nil {
fmt.Printf("%+v", err)
return
}
utilSettings.DBSetup.FileServerSetup = nil
utilSettings.DBSetup.BaseSchemaFile = ""
db, dbName, err := cdbmutil.GetNewDatabase(
utilSettings,
cdbmutil.DefaultExecCmd,
cdbmutil.DefaultGetDB,
)
if err != nil {
fmt.Printf("%+v", err)
return
}
defer exec.Command("/bin/sh", "-c", fmt.Sprintf(utilSettings.DBAction.DropDB, dbName)).Start()
cdbm := &CDBM{
DB: db,
DBProtocolCfg: cdbmutil.DefaultProtocolMap[cdbmutil.DBProtocol(settings.RootFlags.DBProtocol)],
}
if _, err = db.Exec(
`
CREATE TABLE public.schema_migrations (
version INT8 NOT NULL primary key,
dirty boolean not null,
dirty_state text
);
`,
); err != nil {
fmt.Printf("%+v", err)
return
}
if _, err = db.Exec(
`
insert into schema_migrations(version, dirty, dirty_state)
values(2, true, 'Up');
`,
); err != nil {
fmt.Printf("%+v", err)
return
}
if err = cdbm.Status(); err != nil {
fmt.Printf("%+v", err)
return
}
Output: migration state - version:2 / dirty:true / dirty state:Up
type DropFlagsConfig ¶
type DropFlagsConfig struct {
Confirm bool `yaml:"confirm" mapstructure:"confirm"`
}
DropFlagsConfig is config settings used for CDBM#Drop function
type FlagName ¶
type FlagName struct {
// LongHand is long hand form of flag ie. --name
LongHand string
// Shoartnad is short hand form of flag ie. -n
ShortHand string
}
FlagName is config struct to determine the long and short hand flag names
type LogFlagsConfig ¶
type LogFlagsConfig struct {
// LogFile should the the directory
LogFile string `yaml:"log_file" mapstructure:"log_file"`
}
LogFlagsConfig is config struct used for logging settings for CDBM#Logs function
type MigrateFlagsConfig ¶
type MigrateFlagsConfig struct {
// TargetVersion should be the version you wish to set the database at
// If set below 0 than the latest version is used by default
TargetVersion int `yaml:"target_version" mapstructure:"target_version"`
// RollbackOnFailure gives user ability to rollback a migration to starting state
// if it fails on migration when set
//
// This only works when migrating up
RollbackOnFailure bool `yaml:"rollback_on_failure" mapstructure:"rollback_on_failure"`
// ResetDirtyFlag must be set if migration is in a dirty state to reset dirty state
// or error will be returned without running anything
//
// This is used as a "saftey switch" to remind user that database is in dirty state
ResetDirtyFlag bool `yaml:"reset_dirty_flag" mapstructure:"reset_dirty_flag"`
// MigrationsProtocol is protocol used to retrieve migration files
MigrationsProtocol cdbmutil.MigrationsProtocol `yaml:"migrations_protocol" mapstructure:"migrations_protocol"`
// MigrationsDir is directory where migration files are stored whether locally or remotely
MigrationsDir string `yaml:"migrations_dir" mapstructure:"migrations_dir"`
}
MigrateFlagsConfig is flag config struct for migrate command set by command line or set in code if used a library
type RootFlagsConfig ¶
type RootFlagsConfig struct {
DBProtocol string `yaml:"db_protocol" mapstructure:"db_protocol"`
EnvVar string `yaml:"env_var" mapstructure:"env_var"`
Database string `yaml:"database" mapstructure:"database"`
Host string `yaml:"host" mapstructure:"host"`
User string `yaml:"user" mapstructure:"user"`
Password string `yaml:"password" mapstructure:"password"`
SSLMode string `yaml:"ssl_mode" mapstructure:"ssl_mode"`
SSLRootCert string `yaml:"ssl_root_cert" mapstructure:"ssl_root_cert"`
SSLKey string `yaml:"ssl_key" mapstructure:"ssl_key"`
SSLCert string `yaml:"ssl_cert" mapstructure:"ssl_cert"`
Port int `yaml:"port" mapstructure:"port"`
SSL bool `yaml:"ssl" mapstructure:"ssl"`
UseFileOnFail bool `yaml:"use_file_on_fail" mapstructure:"use_file_on_fail"`
}