Support of utf8mb4
This commit is contained in:
parent
21b2bfc806
commit
efd574ab83
|
@ -79,7 +79,11 @@ function table_structure($table) {
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
$column = $index["Column_name"];
|
$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"].")";
|
$column .= "(".$index["Sub_part"].")";
|
||||||
|
|
||||||
$indexdata[$index["Key_name"]][] = $column;
|
$indexdata[$index["Key_name"]][] = $column;
|
||||||
|
@ -104,7 +108,7 @@ function table_structure($table) {
|
||||||
return(array("fields"=>$fielddata, "indexes"=>$indexdata));
|
return(array("fields"=>$fielddata, "indexes"=>$indexdata));
|
||||||
}
|
}
|
||||||
|
|
||||||
function print_structure($database) {
|
function print_structure($database, $charset) {
|
||||||
echo "-- ------------------------------------------\n";
|
echo "-- ------------------------------------------\n";
|
||||||
echo "-- ".FRIENDICA_PLATFORM." ".FRIENDICA_VERSION." (".FRIENDICA_CODENAME,")\n";
|
echo "-- ".FRIENDICA_PLATFORM." ".FRIENDICA_VERSION." (".FRIENDICA_CODENAME,")\n";
|
||||||
echo "-- DB_UPDATE_VERSION ".DB_UPDATE_VERSION."\n";
|
echo "-- DB_UPDATE_VERSION ".DB_UPDATE_VERSION."\n";
|
||||||
|
@ -113,7 +117,7 @@ function print_structure($database) {
|
||||||
echo "--\n";
|
echo "--\n";
|
||||||
echo "-- TABLE $name\n";
|
echo "-- TABLE $name\n";
|
||||||
echo "--\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";
|
echo "\n";
|
||||||
}
|
}
|
||||||
|
@ -122,6 +126,11 @@ function print_structure($database) {
|
||||||
function update_structure($verbose, $action, $tables=null, $definition=null) {
|
function update_structure($verbose, $action, $tables=null, $definition=null) {
|
||||||
global $a, $db;
|
global $a, $db;
|
||||||
|
|
||||||
|
if (isset($a->config["system"]["db_charset"]))
|
||||||
|
$charset = $a->config["system"]["db_charset"];
|
||||||
|
else
|
||||||
|
$charset = "utf8";
|
||||||
|
|
||||||
$errors = false;
|
$errors = false;
|
||||||
|
|
||||||
logger('updating structure', LOGGER_DEBUG);
|
logger('updating structure', LOGGER_DEBUG);
|
||||||
|
@ -140,7 +149,7 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
|
||||||
|
|
||||||
// Get the definition
|
// Get the definition
|
||||||
if (is_null($definition))
|
if (is_null($definition))
|
||||||
$definition = db_definition();
|
$definition = db_definition($charset);
|
||||||
|
|
||||||
|
|
||||||
// Compare it
|
// Compare it
|
||||||
|
@ -148,7 +157,7 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
|
||||||
$is_new_table = False;
|
$is_new_table = False;
|
||||||
$sql3="";
|
$sql3="";
|
||||||
if (!isset($database[$name])) {
|
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) {
|
if(false === $r) {
|
||||||
$errors .= t('Errors encountered creating database tables.').$name.EOL;
|
$errors .= t('Errors encountered creating database tables.').$name.EOL;
|
||||||
}
|
}
|
||||||
|
@ -257,16 +266,9 @@ function db_field_command($parameters, $create = true) {
|
||||||
return($fieldstruct);
|
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;
|
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;
|
$r = true;
|
||||||
|
|
||||||
$sql = "";
|
$sql = "";
|
||||||
|
@ -322,11 +324,6 @@ function db_create_index($indexname, $fieldnames, $method="ADD") {
|
||||||
killme();
|
killme();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ($indexname == "PRIMARY") {
|
|
||||||
return sprintf("%s PRIMARY KEY(`%s`)", $method, implode("`,`", $fieldnames));
|
|
||||||
}
|
|
||||||
|
|
||||||
$names = "";
|
$names = "";
|
||||||
foreach ($fieldnames AS $fieldname) {
|
foreach ($fieldnames AS $fieldname) {
|
||||||
if ($names != "")
|
if ($names != "")
|
||||||
|
@ -338,12 +335,27 @@ function db_create_index($indexname, $fieldnames, $method="ADD") {
|
||||||
$names .= "`".dbesc($fieldname)."`";
|
$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);
|
$sql = sprintf("%s INDEX `%s` (%s)", $method, dbesc($indexname), $names);
|
||||||
return($sql);
|
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();
|
$database = array();
|
||||||
|
|
||||||
|
@ -401,7 +413,7 @@ function db_definition() {
|
||||||
"updated" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
|
"updated" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
|
||||||
),
|
),
|
||||||
"indexes" => array(
|
"indexes" => array(
|
||||||
"PRIMARY" => array("k"),
|
"PRIMARY" => array("k".db_index_suffix($charset)),
|
||||||
"updated" => array("updated"),
|
"updated" => array("updated"),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -1022,7 +1034,7 @@ function db_definition() {
|
||||||
"created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
|
"created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
|
||||||
),
|
),
|
||||||
"indexes" => array(
|
"indexes" => array(
|
||||||
"PRIMARY" => array("url"),
|
"PRIMARY" => array("url".db_index_suffix($charset)),
|
||||||
"created" => array("created"),
|
"created" => array("created"),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -1035,7 +1047,7 @@ function db_definition() {
|
||||||
"created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
|
"created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
|
||||||
),
|
),
|
||||||
"indexes" => array(
|
"indexes" => array(
|
||||||
"PRIMARY" => array("url", "guessing", "oembed"),
|
"PRIMARY" => array("url".db_index_suffix($charset), "guessing", "oembed"),
|
||||||
"created" => array("created"),
|
"created" => array("created"),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -1478,7 +1490,9 @@ function dbstructure_run(&$argv, &$argc) {
|
||||||
set_config('system','build',DB_UPDATE_VERSION);
|
set_config('system','build',DB_UPDATE_VERSION);
|
||||||
return;
|
return;
|
||||||
case "dumpsql":
|
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;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue