MySQL  8.0.27
Source Code Documentation
DTCollation Class Reference

#include <item.h>

Public Member Functions

void set_repertoire_from_charset (const CHARSET_INFO *cs)
 DTCollation ()
 DTCollation (const CHARSET_INFO *collation_arg, Derivation derivation_arg)
void set (const DTCollation &dt)
void set (const CHARSET_INFO *collation_arg, Derivation derivation_arg)
void set (const CHARSET_INFO *collation_arg, Derivation derivation_arg, uint repertoire_arg)
void set_numeric ()
void set (const CHARSET_INFO *collation_arg)
void set (Derivation derivation_arg)
void set_repertoire (uint repertoire_arg)
bool aggregate (DTCollation &dt, uint flags=0)
 Aggregate two collations together taking into account their coercibility (aka derivation):. More...
bool set (DTCollation &dt1, DTCollation &dt2, uint flags=0)
const char * derivation_name () const

Public Attributes

const CHARSET_INFOcollation
Derivation derivation {DERIVATION_NONE}
uint repertoire

Constructor & Destructor Documentation

◆ DTCollation() [1/2]

DTCollation::DTCollation ( )

◆ DTCollation() [2/2]

DTCollation::DTCollation ( const CHARSET_INFO collation_arg,
Derivation  derivation_arg 

Member Function Documentation

◆ aggregate()

bool DTCollation::aggregate ( DTCollation dt,
uint  flags = 0 

Aggregate two collations together taking into account their coercibility (aka derivation):.

0 == DERIVATION_EXPLICIT - an explicitly written COLLATE clause
1 == DERIVATION_NONE - a mix of two different collations
3 == DERIVATION_COERCIBLE - a string constant.

The most important rules are:

  1. If collations are the same: chose this collation, and the strongest derivation.
  2. If collations are different:
  • Character sets may differ, but only if conversion without data loss is possible. The caller provides flags whether character set conversion attempts should be done. If no flags are substituted, then the character sets must be the same. Currently processed flags are: MY_COLL_ALLOW_SUPERSET_CONV - allow conversion to a superset MY_COLL_ALLOW_COERCIBLE_CONV - allow conversion of a coercible value
  • two EXPLICIT collations produce an error, e.g. this is wrong: CONCAT(expr1 collate latin1_swedish_ci, expr2 collate latin1_german_ci)
  • the side with smaller derivation value wins, i.e. a column is stronger than a string constant, an explicit COLLATE clause is stronger than a column.
  • if derivations are the same, we have DERIVATION_NONE, we'll wait for an explicit COLLATE clause which possibly can come from another argument later: for example, this is valid, but we don't know yet when collecting the first two arguments:
    expr COLLATE latin1_german2_ci)
Return values
trueIf the two collations are incompatible and cannot be aggregated.
falseIf the two collations can be aggregated, possibly with DERIVATION_NONE to indicate that they need a third explicit collation as a tiebreaker.

◆ derivation_name()

const char* DTCollation::derivation_name ( ) const

◆ set() [1/6]

void DTCollation::set ( const CHARSET_INFO collation_arg)

◆ set() [2/6]

void DTCollation::set ( const CHARSET_INFO collation_arg,
Derivation  derivation_arg 

◆ set() [3/6]

void DTCollation::set ( const CHARSET_INFO collation_arg,
Derivation  derivation_arg,
uint  repertoire_arg 

◆ set() [4/6]

void DTCollation::set ( const DTCollation dt)

◆ set() [5/6]

void DTCollation::set ( Derivation  derivation_arg)

◆ set() [6/6]

bool DTCollation::set ( DTCollation dt1,
DTCollation dt2,
uint  flags = 0 

◆ set_numeric()

void DTCollation::set_numeric ( )

◆ set_repertoire()

void DTCollation::set_repertoire ( uint  repertoire_arg)

◆ set_repertoire_from_charset()

void DTCollation::set_repertoire_from_charset ( const CHARSET_INFO cs)

Member Data Documentation

◆ collation

const CHARSET_INFO* DTCollation::collation

◆ derivation

Derivation DTCollation::derivation {DERIVATION_NONE}

◆ repertoire

uint DTCollation::repertoire

The documentation for this class was generated from the following files: