X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=classes%2FMemcached_DataObject.php;h=b5057ba22043463f5c06dae96879564b1f69cb8c;hb=d6b28c64830f632bb2f4b6f3c9369b9e56ad217a;hp=445b29e77c053a5e6c35f25c4be9de22ea09669d;hpb=1535ae5e3b2cc3a6c5dda39c26119377e856aeb6;p=quix0rs-gnu-social.git diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php index 445b29e77c..b5057ba220 100644 --- a/classes/Memcached_DataObject.php +++ b/classes/Memcached_DataObject.php @@ -34,7 +34,7 @@ class Memcached_DataObject extends Safe_DataObject { if (is_null($v)) { $v = $k; - $keys = self::pkeyCols($cls); + $keys = static::pkeyCols(); if (count($keys) > 1) { // FIXME: maybe call pkeyGetClass() ourselves? throw new Exception('Use pkeyGetClass() for compound primary keys'); @@ -67,27 +67,35 @@ class Memcached_DataObject extends Safe_DataObject * @param string $cls Class to fetch * @param string $keyCol name of column for key * @param array $keyVals key values to fetch - * @param boolean $skipNulls return only non-null results? * * @return array Array of objects, in order */ - static function multiGetClass($cls, $keyCol, array $keyVals, $skipNulls=true) + static function multiGetClass($cls, $keyCol, array $keyVals) { - $result = self::pivotGetClass($cls, $keyCol, $keyVals); + $obj = new $cls; - $values = array_values($result); + // PHP compatible datatype for settype() below + $colType = $obj->columnType($keyCol); - if ($skipNulls) { - $tmp = array(); - foreach ($values as $value) { - if (!empty($value)) { - $tmp[] = $value; - } - } - $values = $tmp; + if (!in_array($colType, array('integer', 'int'))) { + // This is because I'm afraid to escape strings incorrectly + // in the way we use them below in FIND_IN_SET for MariaDB + throw new ServerException('Cannot do multiGet on anything but integer columns'); + } + + $obj->whereAddIn($keyCol, $keyVals, $colType); + + // Since we're inputting straight to a query: format and escape + foreach ($keyVals as $key=>$val) { + settype($val, $colType); + $keyVals[$key] = $obj->escape($val); } - return new ArrayWrapper($values); + // FIND_IN_SET will make sure we keep the desired order + $obj->orderBy(sprintf("FIND_IN_SET(%s, '%s')", $keyCol, implode(',', $keyVals))); + $obj->find(); + + return $obj; } /** @@ -238,7 +246,7 @@ class Memcached_DataObject extends Safe_DataObject return $query; } - static function pkeyCols($cls) + static function pkeyColsClass($cls) { $i = new $cls; $types = $i->keyTypes(); @@ -271,7 +279,7 @@ class Memcached_DataObject extends Safe_DataObject $pkeyMap = array_fill_keys($keyVals, array()); $result = array_fill_keys($keyVals, array()); - $pkeyCols = self::pkeyCols($cls); + $pkeyCols = static::pkeyCols(); $toFetch = array(); $allPkeys = array(); @@ -453,11 +461,11 @@ class Memcached_DataObject extends Safe_DataObject } global $_DB_DATAOBJECT; - if (!isset($_DB_DATAOBJECT['INI'][$this->_database][$this->__table."__keys"])) { + if (!isset($_DB_DATAOBJECT['INI'][$this->_database][$this->tableName()."__keys"])) { $this->databaseStructure(); } - return $_DB_DATAOBJECT['INI'][$this->_database][$this->__table."__keys"]; + return $_DB_DATAOBJECT['INI'][$this->_database][$this->tableName()."__keys"]; } function encache() @@ -642,7 +650,7 @@ class Memcached_DataObject extends Safe_DataObject } else { $msg = sprintf("DB query (%0.3fs): %s", $delta, $clean); } - common_log(LOG_DEBUG, $msg); + common_debug($msg); } if ($fail) { @@ -726,7 +734,7 @@ class Memcached_DataObject extends Safe_DataObject return $string; } - // We overload so that 'SET NAMES "utf8"' is called for + // We overload so that 'SET NAMES "utf8mb4"' is called for // each connection function _connect() @@ -776,9 +784,9 @@ class Memcached_DataObject extends Safe_DataObject $conn = $DB->connection; if (!empty($conn)) { if ($DB instanceof DB_mysqli || $DB instanceof MDB2_Driver_mysqli) { - mysqli_set_charset($conn, 'utf8'); + mysqli_set_charset($conn, 'utf8mb4'); } else if ($DB instanceof DB_mysql || $DB instanceof MDB2_Driver_mysql) { - mysql_set_charset('utf8', $conn); + mysql_set_charset('utf8mb4', $conn); } } } @@ -816,7 +824,7 @@ class Memcached_DataObject extends Safe_DataObject global $_DB_DATAOBJECT; if (empty($_DB_DATAOBJECT['CONFIG'])) { - DB_DataObject::_loadConfig(); + self::_loadConfig(); } $options = &$_DB_DATAOBJECT['CONFIG']; @@ -828,7 +836,7 @@ class Memcached_DataObject extends Safe_DataObject if (!$dsn) { if (!$this->_database) { - $this->_database = isset($options["table_{$this->__table}"]) ? $options["table_{$this->__table}"] : null; + $this->_database = isset($options["table_{$this->tableName()}"]) ? $options["table_{$this->tableName()}"] : null; } if ($this->_database && !empty($options["database_{$this->_database}"])) {