Support of utf8mb4
This commit is contained in:
parent
21b2bfc806
commit
efd574ab83
1 changed files with 37 additions and 23 deletions
|
@ -79,7 +79,11 @@ function table_structure($table) {
|
|||
continue;
|
||||
|
||||
$column = $index["Column_name"];
|
||||
if ($index["Sub_part"] != "")
|
||||
// On utf8mb4 a varchar index can only have a length of 191
|
||||
// To avoid the need to add this to every index definition we just ignore it here.
|
||||
// Exception are primary indexes
|
||||
// Since there are some combindex primary indexes we use the limit of 180 here.
|
||||
if (($index["Sub_part"] != "") AND (($index["Sub_part"] < 180) OR ($index["Key_name"] == "PRIMARY")))
|
||||
$column .= "(".$index["Sub_part"].")";
|
||||
|
||||
$indexdata[$index["Key_name"]][] = $column;
|
||||
|
@ -104,7 +108,7 @@ function table_structure($table) {
|
|||
return(array("fields"=>$fielddata, "indexes"=>$indexdata));
|
||||
}
|
||||
|
||||
function print_structure($database) {
|
||||
function print_structure($database, $charset) {
|
||||
echo "-- ------------------------------------------\n";
|
||||
echo "-- ".FRIENDICA_PLATFORM." ".FRIENDICA_VERSION." (".FRIENDICA_CODENAME,")\n";
|
||||
echo "-- DB_UPDATE_VERSION ".DB_UPDATE_VERSION."\n";
|
||||
|
@ -113,7 +117,7 @@ function print_structure($database) {
|
|||
echo "--\n";
|
||||
echo "-- TABLE $name\n";
|
||||
echo "--\n";
|
||||
db_create_table($name, $structure['fields'], true, false, $structure["indexes"]);
|
||||
db_create_table($name, $structure['fields'], $charset, true, false, $structure["indexes"]);
|
||||
|
||||
echo "\n";
|
||||
}
|
||||
|
@ -122,6 +126,11 @@ function print_structure($database) {
|
|||
function update_structure($verbose, $action, $tables=null, $definition=null) {
|
||||
global $a, $db;
|
||||
|
||||
if (isset($a->config["system"]["db_charset"]))
|
||||
$charset = $a->config["system"]["db_charset"];
|
||||
else
|
||||
$charset = "utf8";
|
||||
|
||||
$errors = false;
|
||||
|
||||
logger('updating structure', LOGGER_DEBUG);
|
||||
|
@ -140,7 +149,7 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
|
|||
|
||||
// Get the definition
|
||||
if (is_null($definition))
|
||||
$definition = db_definition();
|
||||
$definition = db_definition($charset);
|
||||
|
||||
|
||||
// Compare it
|
||||
|
@ -148,7 +157,7 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
|
|||
$is_new_table = False;
|
||||
$sql3="";
|
||||
if (!isset($database[$name])) {
|
||||
$r = db_create_table($name, $structure["fields"], $verbose, $action, $structure['indexes']);
|
||||
$r = db_create_table($name, $structure["fields"], $charset, $verbose, $action, $structure['indexes']);
|
||||
if(false === $r) {
|
||||
$errors .= t('Errors encountered creating database tables.').$name.EOL;
|
||||
}
|
||||
|
@ -257,16 +266,9 @@ function db_field_command($parameters, $create = true) {
|
|||
return($fieldstruct);
|
||||
}
|
||||
|
||||
function db_create_table($name, $fields, $verbose, $action, $indexes=null) {
|
||||
function db_create_table($name, $fields, $charset, $verbose, $action, $indexes=null) {
|
||||
global $a, $db;
|
||||
|
||||
if (isset($a->config["system"]["db_charset"]))
|
||||
$charset = $a->config["system"]["db_charset"];
|
||||
elseif (!$action) // Used for dumpsql
|
||||
$charset = "utf8mb4";
|
||||
else
|
||||
$charset = "utf8";
|
||||
|
||||
$r = true;
|
||||
|
||||
$sql = "";
|
||||
|
@ -322,11 +324,6 @@ function db_create_index($indexname, $fieldnames, $method="ADD") {
|
|||
killme();
|
||||
}
|
||||
|
||||
|
||||
if ($indexname == "PRIMARY") {
|
||||
return sprintf("%s PRIMARY KEY(`%s`)", $method, implode("`,`", $fieldnames));
|
||||
}
|
||||
|
||||
$names = "";
|
||||
foreach ($fieldnames AS $fieldname) {
|
||||
if ($names != "")
|
||||
|
@ -338,12 +335,27 @@ function db_create_index($indexname, $fieldnames, $method="ADD") {
|
|||
$names .= "`".dbesc($fieldname)."`";
|
||||
}
|
||||
|
||||
if ($indexname == "PRIMARY") {
|
||||
//return sprintf("%s PRIMARY KEY(`%s`)", $method, implode("`,`", $fieldnames));
|
||||
return sprintf("%s PRIMARY KEY(%s)", $method, $names);
|
||||
}
|
||||
|
||||
|
||||
$sql = sprintf("%s INDEX `%s` (%s)", $method, dbesc($indexname), $names);
|
||||
return($sql);
|
||||
}
|
||||
|
||||
function db_definition() {
|
||||
function db_index_suffix($charset, $reduce = 0) {
|
||||
if ($charset != "utf8mb4")
|
||||
return "";
|
||||
|
||||
// On utf8mb4 indexes can only have a length of 191
|
||||
$indexlength = 191 - $reduce;
|
||||
|
||||
return "(".$indexlength.")";
|
||||
}
|
||||
|
||||
function db_definition($charset) {
|
||||
|
||||
$database = array();
|
||||
|
||||
|
@ -401,7 +413,7 @@ function db_definition() {
|
|||
"updated" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
|
||||
),
|
||||
"indexes" => array(
|
||||
"PRIMARY" => array("k"),
|
||||
"PRIMARY" => array("k".db_index_suffix($charset)),
|
||||
"updated" => array("updated"),
|
||||
)
|
||||
);
|
||||
|
@ -1022,7 +1034,7 @@ function db_definition() {
|
|||
"created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
|
||||
),
|
||||
"indexes" => array(
|
||||
"PRIMARY" => array("url"),
|
||||
"PRIMARY" => array("url".db_index_suffix($charset)),
|
||||
"created" => array("created"),
|
||||
)
|
||||
);
|
||||
|
@ -1035,7 +1047,7 @@ function db_definition() {
|
|||
"created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
|
||||
),
|
||||
"indexes" => array(
|
||||
"PRIMARY" => array("url", "guessing", "oembed"),
|
||||
"PRIMARY" => array("url".db_index_suffix($charset), "guessing", "oembed"),
|
||||
"created" => array("created"),
|
||||
)
|
||||
);
|
||||
|
@ -1478,7 +1490,9 @@ function dbstructure_run(&$argv, &$argc) {
|
|||
set_config('system','build',DB_UPDATE_VERSION);
|
||||
return;
|
||||
case "dumpsql":
|
||||
print_structure(db_definition());
|
||||
// For the dump that is used to create the database.sql we always assume utfmb4
|
||||
$charset = "utf8mb4";
|
||||
print_structure(db_definition($charset), $charset);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue