Version 4.3.0
This commit is contained in:
1 parent
96997ddd8e
commit
fe1acf984a
1349 files changed
+116159
-67711
No files matched your search
@@ -95,7 +95,8 @@ class IPSUtf8
|
||||
*/
|
||||
public static function errorHandler( $errno, $errstr, $errfile, $errline, $trace=NULL )
|
||||
{
|
||||
if ( in_array( $errno, array( E_NOTICE ) ) )
|
||||
/* We don't care about these in production */
|
||||
if ( in_array( $errno, array( E_WARNING, E_NOTICE, E_STRICT, E_DEPRECATED ) ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -246,4 +247,11 @@ class IPSUtf8
|
||||
/* Init */
|
||||
IPSUtf8::init();
|
||||
|
||||
|
||||
/* Custom mb_ucfirst() function - eval'd so we can put into global namespace */
|
||||
eval( '
|
||||
function mb_ucfirst()
|
||||
{
|
||||
$text = func_get_arg( 0 );
|
||||
return mb_strtoupper( mb_substr( $text, 0, 1 ) ) . mb_substr( $text, 1 );
|
||||
}
|
||||
');
|
||||
@@ -995,7 +995,7 @@ class Convert
|
||||
{
|
||||
foreach( $tableData['definition']['indexes'] as $key => $index )
|
||||
{
|
||||
if ( $index['type'] === 'unique' )
|
||||
if ( $index['type'] === 'unique' OR $index['type'] === 'primary' )
|
||||
{
|
||||
/* Make sure none of the columns in this index are auto_increment */
|
||||
foreach( $index['columns'] AS $k => $idxcol )
|
||||
@@ -1030,7 +1030,9 @@ class Convert
|
||||
/* Did not work - try the long way */
|
||||
static::$utf->query( "RENAME TABLE `" . static::$db->prefix . $name . "` TO `" . static::$db->prefix . $name . "_temp`" );
|
||||
static::log( $name . " has Unique Index - temp table created from main." );
|
||||
static::$utf->query( "CREATE TABLE `" . static::$db->prefix . $name . "` LIKE `" . static::$db->prefix . $name . "_temp`" );
|
||||
/* Previously we used a raw create table query to create a copy, however this does not check index lengths. Leaving this for reference. */
|
||||
//static::$utf->query( "CREATE TABLE `" . static::$db->prefix . $name . "` LIKE `" . static::$db->prefix . $name . "_temp`" );
|
||||
static::$db->createTable( $this->checkTable( $tableData['definition'] ) );
|
||||
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` CONVERT TO CHARACTER SET " . $charset . " COLLATE " . $collation );
|
||||
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` DEFAULT CHARACTER SET " . $charset . " COLLATE " . $collation );
|
||||
static::log( $name . " created from temp table." );
|
||||
@@ -1280,7 +1282,7 @@ class Convert
|
||||
/* MB4? */
|
||||
$sessionData = \IPSUtf8\Session::i()->json;
|
||||
$length = 0;
|
||||
$multiplier = ( ! empty( $sessionData['use_utf8mb4'] ) ) ? 4 : 3;
|
||||
$multiplier = 4;
|
||||
$needsFixing = array();
|
||||
$maxLen = 1000;
|
||||
|
||||
@@ -1293,30 +1295,44 @@ class Convert
|
||||
{
|
||||
foreach( $definition['indexes'] as $key => $index )
|
||||
{
|
||||
$thisLength = null;
|
||||
$hasText = false;
|
||||
|
||||
foreach( $index['columns'] as $i => $column )
|
||||
{
|
||||
if ( isset( $definition['columns'][ $column ] ) and ( ( ! empty( $definition['columns'][ $column ]['length'] ) or in_array( mb_strtolower( $definition['columns'][ $column ]['type'] ), array( 'longtext', 'mediumtext', 'text' ) ) ) ) )
|
||||
$thisLength = ( isset( $index['length'][ $i ] ) ) ? $index['length'][ $i ] : ( ( (int) $definition['columns'][ $column ]['length'] or empty( $definition['columns'][ $column ]['length'] ) ) ? $definition['columns'][ $column ]['length'] : 250 );
|
||||
|
||||
$isText = in_array( mb_strtolower( $definition['columns'][ $column ]['type'] ), array( 'mediumtext', 'text' ) );
|
||||
|
||||
if ( $hasText === false and $isText === true )
|
||||
{
|
||||
$length += (int) ( $definition['columns'][ $column ]['length'] ) ? $definition['columns'][ $column ]['length'] : 250;
|
||||
$hasText = true;
|
||||
}
|
||||
|
||||
if ( isset( $definition['columns'][ $column ] ) and ( ( ! empty( $thisLength ) or $isText ) ) )
|
||||
{
|
||||
$length += $thisLength;
|
||||
}
|
||||
}
|
||||
|
||||
if ( $length * $multiplier > $maxLen )
|
||||
|
||||
if ( ( $length * $multiplier > $maxLen ) or $hasText )
|
||||
{
|
||||
foreach( $index['columns'] as $i => $column )
|
||||
{
|
||||
if ( isset( $definition['columns'][ $column ] ) and ( ( ! empty( $definition['columns'][ $column ]['length'] ) or in_array( mb_strtolower( $definition['columns'][ $column ]['type'] ), array( 'longtext', 'mediumtext', 'text' ) ) ) ) )
|
||||
$thisLength = ( isset( $index['length'][ $i ] ) ) ? $index['length'][ $i ] : ( (int) $definition['columns'][ $column ]['length'] ? $definition['columns'][ $column ]['length'] : 250 );
|
||||
|
||||
if ( isset( $definition['columns'][ $column ] ) and ( ( ! empty( $thisLength ) or in_array( mb_strtolower( $definition['columns'][ $column ]['type'] ), array( 'mediumtext', 'text' ) ) ) ) )
|
||||
{
|
||||
/* Column name, column length, column type */
|
||||
$needsFixing[ $key ][ $i ] = array( $column, ( (int) $definition['columns'][ $column ]['length'] ) ? $definition['columns'][ $column ]['length'] : 250, $definition['columns'][ $column ]['type'] );
|
||||
$needsFixing[ $key ][ $i ] = array( $column, $thisLength, $definition['columns'][ $column ]['type'] );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$length = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ( count( $needsFixing ) )
|
||||
{
|
||||
foreach( $needsFixing as $key => $i )
|
||||
@@ -1334,21 +1350,23 @@ class Convert
|
||||
/* Check each column can be reduced by the amount we need reducing */
|
||||
$debt = 0;
|
||||
|
||||
$reduceEachBy = ( ( 100 / $totalLength ) * $maxChars ) / 100;
|
||||
|
||||
$reduceEachBy = ( ( 100 / $totalLength ) * $maxChars) / 100;
|
||||
|
||||
/* Apply debt if we have any. We do not reduce integers */
|
||||
foreach( $i as $x => $vals )
|
||||
{
|
||||
if ( array_key_exists( mb_strtolower( $vals[2] ), static::$numericCols ) AND static::$numericCols[ mb_strtolower( $vals[2] ) ] !== NULL )
|
||||
if ( in_array( mb_strtoupper( $vals[2] ), array_keys( static::$numericCols ) ) )
|
||||
{
|
||||
/* Don't go by "display" space, go by storage space, which is static regardless of supplied value ... an INT(4) still uses 11 chars */
|
||||
$debt += static::$numericCols[ mb_strtolower( $vals[2] ) ];
|
||||
$debt += $vals[1];
|
||||
}
|
||||
}
|
||||
|
||||
/* Recalculate value to multiply index sub lengths with (subtracting debt) */
|
||||
$reduceEachBy = ( ( 100 / ( $totalLength - $debt ) ) * ( $maxChars - $debt ) ) / 100;
|
||||
|
||||
if ( $debt < $totalLength )
|
||||
{
|
||||
$reduceEachBy = ( ( 100 / ($totalLength - $debt) ) * ( $maxChars - $debt ) ) / 100;
|
||||
}
|
||||
|
||||
foreach( $i as $x => $vals )
|
||||
{
|
||||
/* No length? */
|
||||
@@ -1357,9 +1375,16 @@ class Convert
|
||||
$vals[1] = 250;
|
||||
}
|
||||
|
||||
if ( array_key_exists( mb_strtolower( $vals[2] ), static::$numericCols ) AND static::$numericCols[ mb_strtolower( $vals[2] ) ] !== NULL )
|
||||
if ( in_array( mb_strtoupper( $vals[2] ), array_keys( static::$numericCols ) ) )
|
||||
{
|
||||
/* Preserve col len */
|
||||
/* Preserve col len where possible but if the column length is greater than subpart allowed, NULL the length
|
||||
otherwise MySQL will complain as you cannot use subpart on non-string column. */
|
||||
if ( $vals[1] > floor( $maxLen / $multiplier ) )
|
||||
{
|
||||
$vals[1] = NULL;
|
||||
$i[ $x ] = $vals;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1370,9 +1395,13 @@ class Convert
|
||||
|
||||
foreach( $i as $x => $vals )
|
||||
{
|
||||
if ( $definition['columns'][ $definition['indexes'][ $key ]['columns'][ $x ] ]['length'] != $vals[1] )
|
||||
if ( in_array( mb_strtolower( $vals[2] ), static::$convertCols ) AND $definition['columns'][ $definition['indexes'][ $key ]['columns'][ $x ] ]['length'] != $vals[1] )
|
||||
{
|
||||
$definition['indexes'][ $key ]['length'][ $x ] = $vals[1];
|
||||
$definition['indexes'][ $key ]['length'][ $x ] = intval( $vals[1] );
|
||||
}
|
||||
else
|
||||
{
|
||||
$definition['indexes'][ $key ]['length'][ $x ] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ abstract class Charset
|
||||
}
|
||||
}
|
||||
|
||||
self::$method = ucfirst( self::$method );
|
||||
self::$method = mb_ucfirst( self::$method );
|
||||
|
||||
if ( ! isset( static::$multitons[ self::$method ] ) )
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user