func NewHintsEngine(handle dbadmin.DbAdmin, largeTableThreshold uint64) Engine {
	he := &hintsEngine{
		handle:               handle,
		operationToProcessor: make(map[string]processorFunc),
		largeTableThreshold:  largeTableThreshold,
	}
	engineInstance := reflect.ValueOf(he)
	engineType := reflect.TypeOf(he)
	for i := 0; i < engineType.NumMethod(); i++ {
		method := engineType.Method(i)
		boundMethod := engineInstance.Method(i)
		if processor, ok := boundMethod.Interface().(func(dba.DatabaseMigrationSchemaHint, bool) ([]dba.ManagedDatabaseError, error)); ok {
			he.operationToProcessor[strcase.ToLowerCamel(method.Name)] = processorFunc(processor)
		}
	}
	return he
}
NewHintsEngine creates an instace of the Engine bound to a specific database.
package hints
import (
	"fmt"
	"reflect"
	dba "github.com/app-sre/dba-operator/api/v1alpha1"
	"github.com/app-sre/dba-operator/pkg/dbadmin"
	"github.com/iancoleman/strcase"
)
const (
	addColumnTableTooLarge        = "Attempting to add a column to a large table (%s)"
	addBlockingIndextableTooLarge = "Attempting to create an index (type=%s) to a large table (%s)"
	addNotNullableColumnNoDefault = "Attempting to add a NOT NULL column (%s) to an existing table (%s) without specifying a server default"
	addNotNullConstraintWillFail  = "Attempting to convert a column (%s) to NOT NULL on a table (%s) when null data is present"
	addUniqueIndexWillFail        = "Attempting to add a unique index to a table (%s) which contains non-unique data over the specified columns (%v)"
)
type Engine interface {
	ProcessHints([]dba.DatabaseMigrationSchemaHint) ([]dba.ManagedDatabaseError, error)
}