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  }