/** * Transforms tracking set for Drizzle, which has no SET type * * Converts int<>string for Drizzle, does nothing for MySQL * * @param int|string $tracking_set * @return int|string */ static private function transformTrackingSet($tracking_set) { if (!PMA_DRIZZLE) { return $tracking_set; } // init conversion array (key 3 doesn't exist in calculated array) if (isset(self::$tracking_set_flags[3])) { // initialize flags $set = self::$tracking_set_flags; $array = array(); for ($i = 0; $i < count($set); $i++) { $flag = 1 << $i; $array[$flag] = $set[$i]; $array[$set[$i]] = $flag; } self::$tracking_set_flags = $array; } if (is_numeric($tracking_set)) { // int > string conversion $aflags = array(); // count/2 - conversion table has both int > string and string > int values for ($i = 0; $i < count(self::$tracking_set_flags)/2; $i++) { $flag = 1 << $i; if ($tracking_set & $flag) { $aflags[] = self::$tracking_set_flags[$flag]; } } $flags = implode(',', $aflags); } else { // string > int conversion $flags = 0; foreach (explode(',', $tracking_set) as $strflag) { if ($strflag == '') { continue; } $flags |= self::$tracking_set_flags[$strflag]; } } return $flags; }