Skip to main content

Database support

Right now uadmin supports only sqlite, postgres databases, but it's easy to provide adapters for another databases, we just need to write implementation of the interface. For non sqlite adapter, please build your package with corresponding tag: for postgres - with postgres.

type IDbAdapter interface {    Equals(name interface{}, args ...interface{})    GetDb(alias string, dryRun bool) (*gorm.DB, error)    GetStringToExtractYearFromField(filterOptionField string) string    GetStringToExtractMonthFromField(filterOptionField string) string    Exact(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    IExact(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    Contains(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    IContains(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    In(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    Gt(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    Gte(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    Lt(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    Lte(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    StartsWith(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    IStartsWith(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    EndsWith(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    IEndsWith(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    Range(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    Date(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    Year(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    Month(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    Day(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    Week(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    WeekDay(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    Quarter(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    Time(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    Hour(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    Minute(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    Second(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    IsNull(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    Regex(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    IRegex(operatorContext *GormOperatorContext, field *Field, value interface{}, SQLConditionBuilder ISQLConditionBuilder)    BuildDeleteString(table string, cond string, values ...interface{}) *DeleteRowStructure    SetIsolationLevelForTests(db *gorm.DB)    Close(db *gorm.DB)    ClearTestDatabase()    SetTimeZone(db *gorm.DB, timezone string)    InitializeDatabaseForTests(databaseSettings *DBSettings)    StartDBShell(databaseSettings *DBSettings) error    GetLastError() error}

Please also create ci-cd job for new database type you are adding to the framework. And don't forget to handle this database type in the core.NewDbAdapter function.
You can get instance of the uadminDatabase using function:

type UadminDatabase struct {    Db      *gorm.DB    Adapter IDbAdapter}
func (uad *UadminDatabase) Close() {    db, _ := uad.Db.DB()    db.Close()}func NewUadminDatabase(alias1 ...string) *UadminDatabase {    var alias string    if len(alias1) == 0 {        alias = "default"    } else {        alias = alias1[0]    }    adapter := GetAdapterForDb(alias)    Db, _ = adapter.GetDb(        alias, false,    )    return &UadminDatabase{Db: Db, Adapter: adapter}}DBInstance := NewUadminDatabase()defer DBInstance.Close()// do whatever you want with database