github.com/altipla-consulting/ravendb-go-client@v0.1.3/maintenance_operation_executor.go (about) 1 package ravendb 2 3 import "strings" 4 5 type MaintenanceOperationExecutor struct { 6 store *DocumentStore 7 databaseName string 8 requestExecutor *RequestExecutor 9 serverOperationExecutor *ServerOperationExecutor 10 } 11 12 func NewMaintenanceOperationExecutor(store *DocumentStore, databaseName string) *MaintenanceOperationExecutor { 13 14 res := &MaintenanceOperationExecutor{ 15 store: store, 16 databaseName: firstNonEmptyString(databaseName, store.GetDatabase()), 17 } 18 if res.databaseName != "" { 19 res.requestExecutor = store.GetRequestExecutor(res.databaseName) 20 } 21 return res 22 } 23 24 func (e *MaintenanceOperationExecutor) GetRequestExecutor() *RequestExecutor { 25 if e.requestExecutor != nil { 26 return e.requestExecutor 27 } 28 if e.databaseName != "" { 29 e.requestExecutor = e.store.GetRequestExecutor(e.databaseName) 30 } 31 return e.requestExecutor 32 } 33 34 func (e *MaintenanceOperationExecutor) Server() *ServerOperationExecutor { 35 if e.serverOperationExecutor == nil { 36 e.serverOperationExecutor = NewServerOperationExecutor(e.store) 37 } 38 return e.serverOperationExecutor 39 } 40 41 func (e *MaintenanceOperationExecutor) ForDatabase(databaseName string) *MaintenanceOperationExecutor { 42 if strings.EqualFold(e.databaseName, databaseName) { 43 return e 44 } 45 return NewMaintenanceOperationExecutor(e.store, databaseName) 46 } 47 48 func (e *MaintenanceOperationExecutor) Send(operation IMaintenanceOperation) error { 49 if err := e.assertDatabaseNameSet(); err != nil { 50 return err 51 } 52 command, err := operation.GetCommand(e.GetRequestExecutor().GetConventions()) 53 if err != nil { 54 return err 55 } 56 return e.GetRequestExecutor().ExecuteCommand(command, nil) 57 } 58 59 func (e *MaintenanceOperationExecutor) SendAsync(operation IMaintenanceOperation) (*Operation, error) { 60 if err := e.assertDatabaseNameSet(); err != nil { 61 return nil, err 62 } 63 command, err := operation.GetCommand(e.GetRequestExecutor().GetConventions()) 64 if err != nil { 65 return nil, err 66 } 67 if err = e.GetRequestExecutor().ExecuteCommand(command, nil); err != nil { 68 return nil, err 69 } 70 fn := func() *DatabaseChanges { 71 return e.store.Changes("") 72 } 73 re := e.GetRequestExecutor() 74 id := getCommandOperationIDResult(command) 75 return NewOperation(re, fn, re.GetConventions(), id.OperationID), nil 76 } 77 78 func (e *MaintenanceOperationExecutor) assertDatabaseNameSet() error { 79 if e.databaseName == "" { 80 return newIllegalStateError("Cannot use maintenance without a database defined, did you forget to call forDatabase?") 81 } 82 return nil 83 }