github.com/rjgonzale/pop/v5@v5.1.3-dev/pop.go (about)

     1  package pop
     2  
     3  import "strings"
     4  
     5  // EagerMode type for all eager modes supported in pop.
     6  type EagerMode uint8
     7  
     8  const (
     9  	eagerModeNil EagerMode = iota
    10  	// EagerDefault is the current implementation, the default
    11  	// behavior of pop. This one introduce N+1 problem and will be used as
    12  	// default value for backward compatibility.
    13  	EagerDefault
    14  
    15  	// EagerPreload mode works similar to Preload mode used in Rails ActiveRecord.
    16  	// Avoid N+1 problem by reducing the number of hits to the database but
    17  	// increase memory use to process and link associations to parent.
    18  	EagerPreload
    19  
    20  	// EagerInclude This mode works similar to Include mode used in rails ActiveRecord.
    21  	// Use Left Join clauses to load associations. Not working yet.
    22  	EagerInclude
    23  )
    24  
    25  // default loading Association Strategy definition.
    26  var loadingAssociationsStrategy = EagerDefault
    27  
    28  // SetEagerMode changes overall mode when eager loading.
    29  // this will change the default loading associations strategy for all Eager queries.
    30  // This will affect all queries when eager loading is used.
    31  func SetEagerMode(eagerMode EagerMode) {
    32  	loadingAssociationsStrategy = eagerMode
    33  }
    34  
    35  // AvailableDialects lists the available database dialects
    36  var AvailableDialects []string
    37  
    38  var dialectSynonyms = make(map[string]string)
    39  
    40  // map of dialect specific url parsers
    41  var urlParser = make(map[string]func(*ConnectionDetails) error)
    42  
    43  // map of dialect specific connection details finalizers
    44  var finalizer = make(map[string]func(*ConnectionDetails))
    45  
    46  // map of connection creators
    47  var newConnection = make(map[string]func(*ConnectionDetails) (dialect, error))
    48  
    49  // DialectSupported checks support for the given database dialect
    50  func DialectSupported(d string) bool {
    51  	for _, ad := range AvailableDialects {
    52  		if ad == d {
    53  			return true
    54  		}
    55  	}
    56  	return false
    57  }
    58  
    59  func normalizeSynonyms(dialect string) string {
    60  	d := strings.ToLower(dialect)
    61  	if syn, ok := dialectSynonyms[d]; ok {
    62  		d = syn
    63  	}
    64  	return d
    65  }