summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
508c30e)
The only difference is the scalar values are no longer encoded as an
array, but just the value itself. As a result, PHP localisation cache
files are about 2/3rds of their previous size and become slightly
smaller than CDB files.
Bug: T99740
Change-Id: Iaa5e32830dc1bb710b9e0f1a681afe91e521ece9
* Encodes a value into an array format
*
* @param mixed $value
* Encodes a value into an array format
*
* @param mixed $value
* @throws RuntimeException
*/
public static function encode( $value ) {
* @throws RuntimeException
*/
public static function encode( $value ) {
- if ( is_scalar( $value ) || $value === null ) {
- // [V]alue
- return [ 'v', $value ];
+ if ( is_array( $value ) ) {
+ // [a]rray
+ return [ 'a', array_map( 'LCStoreStaticArray::encode', $value ) ];
}
if ( is_object( $value ) ) {
}
if ( is_object( $value ) ) {
return [ 's', serialize( $value ) ];
}
return [ 's', serialize( $value ) ];
}
- if ( is_array( $value ) ) {
- // [A]rray
- return [ 'a', array_map( 'LCStoreStaticArray::encode', $value ) ];
+ if ( is_scalar( $value ) || $value === null ) {
+ // Scalar value, written directly without array
+ return $value;
}
throw new RuntimeException( 'Cannot encode ' . var_export( $value, true ) );
}
throw new RuntimeException( 'Cannot encode ' . var_export( $value, true ) );
/**
* Decode something that was encoded with encode
*
/**
* Decode something that was encoded with encode
*
- * @param array $encoded
+ * @param mixed $encoded
* @return array|mixed
* @throws RuntimeException
*/
* @return array|mixed
* @throws RuntimeException
*/
- public static function decode( array $encoded ) {
+ public static function decode( $encoded ) {
+ if ( !is_array( $encoded ) ) {
+ // Scalar values are written directly without array
+ return $encoded;
+ }
+
$type = $encoded[0];
$data = $encoded[1];
switch ( $type ) {
$type = $encoded[0];
$data = $encoded[1];
switch ( $type ) {
- case 'v':
- return $data;
- case 's':
- return unserialize( $data );
case 'a':
return array_map( 'LCStoreStaticArray::decode', $data );
case 'a':
return array_map( 'LCStoreStaticArray::decode', $data );
+ case 's':
+ return unserialize( $data );
+ case 'v':
+ // Support: MediaWiki 1.32 and earlier
+ // Backward compatibility with older file format
+ return $data;
default:
throw new RuntimeException(
'Unable to decode ' . var_export( $encoded, true ) );
default:
throw new RuntimeException(
'Unable to decode ' . var_export( $encoded, true ) );