#include <item.h>
◆ DTCollation() [1/2]
DTCollation::DTCollation |
( |
| ) |
|
|
inline |
◆ DTCollation() [2/2]
◆ aggregate()
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
2 == DERIVATION_IMPLICIT - a column
3 == DERIVATION_COERCIBLE - a string constant.
The most important rules are:
- If collations are the same: chose this collation, and the strongest derivation.
- 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:
CONCAT(latin1_swedish_ci_column,
latin1_german1_ci_column,
expr COLLATE latin1_german2_ci)
- Return values
-
true | If the two collations are incompatible and cannot be aggregated. |
false | If 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 |
|
inline |
◆ set() [1/6]
◆ set() [2/6]
◆ set() [3/6]
◆ set() [4/6]
◆ set() [5/6]
void DTCollation::set |
( |
Derivation |
derivation_arg | ) |
|
|
inline |
◆ set() [6/6]
◆ set_numeric()
void DTCollation::set_numeric |
( |
| ) |
|
|
inline |
◆ set_repertoire()
void DTCollation::set_repertoire |
( |
uint |
repertoire_arg | ) |
|
|
inline |
◆ set_repertoire_from_charset()
void DTCollation::set_repertoire_from_charset |
( |
const CHARSET_INFO * |
cs | ) |
|
|
inline |
◆ collation
◆ derivation
◆ repertoire
uint DTCollation::repertoire |
The documentation for this class was generated from the following files: