mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-18 15:33:15 +00:00
PHRAS-2161_coll-id-in-log-docs_MASTER
wip
This commit is contained in:
@@ -193,8 +193,7 @@ class FixAutoincrements extends Command
|
|||||||
$databox,
|
$databox,
|
||||||
'coll',
|
'coll',
|
||||||
[
|
[
|
||||||
'collusr' => 'coll_id',
|
'collusr' => 'coll_id',
|
||||||
'log_colls' => 'coll_id',
|
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@@ -67,14 +67,15 @@ class Session_Logger
|
|||||||
public function log(record_adapter $record, $action, $final, $comment)
|
public function log(record_adapter $record, $action, $final, $comment)
|
||||||
{
|
{
|
||||||
$sql = 'INSERT INTO log_docs
|
$sql = 'INSERT INTO log_docs
|
||||||
(id, log_id, date, record_id, action, final, comment)
|
(id, log_id, date, record_id, coll_id, action, final, comment)
|
||||||
VALUES (null, :log_id, NOW(), :record_id, :action, :final, :comm)';
|
VALUES (null, :log_id, NOW(), :record_id, :coll_id, :action, :final, :comm)';
|
||||||
|
|
||||||
$stmt = $this->databox->get_connection()->prepare($sql);
|
$stmt = $this->databox->get_connection()->prepare($sql);
|
||||||
|
|
||||||
$params = [
|
$params = [
|
||||||
':log_id' => $this->get_id(),
|
':log_id' => $this->get_id(),
|
||||||
':record_id' => $record->getRecordId(),
|
':record_id' => $record->getRecordId(),
|
||||||
|
':coll_id' => $record->getCollectionId(),
|
||||||
':action' => $action,
|
':action' => $action,
|
||||||
':final' => $final,
|
':final' => $final,
|
||||||
':comm' => $comment,
|
':comm' => $comment,
|
||||||
@@ -139,17 +140,6 @@ class Session_Logger
|
|||||||
$log_id = $conn->lastInsertId();
|
$log_id = $conn->lastInsertId();
|
||||||
$stmt->closeCursor();
|
$stmt->closeCursor();
|
||||||
|
|
||||||
$sql = "INSERT INTO log_colls (id, log_id, coll_id) VALUES (null, :log_id, :coll_id)";
|
|
||||||
$stmt = $conn->prepare($sql);
|
|
||||||
|
|
||||||
foreach ($colls as $collId) {
|
|
||||||
$stmt->execute([
|
|
||||||
':log_id' => $log_id,
|
|
||||||
':coll_id' => $collId
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$stmt->closeCursor();
|
|
||||||
unset($stmt, $conn);
|
unset($stmt, $conn);
|
||||||
|
|
||||||
return new Session_Logger($databox, $log_id);
|
return new Session_Logger($databox, $log_id);
|
||||||
|
@@ -1202,7 +1202,7 @@ class databox extends base implements ThumbnailedElement
|
|||||||
|
|
||||||
public function clear_logs()
|
public function clear_logs()
|
||||||
{
|
{
|
||||||
foreach (['log', 'log_colls', 'log_docs', 'log_search', 'log_view', 'log_thumb'] as $table) {
|
foreach (['log', 'log_docs', 'log_search', 'log_view', 'log_thumb'] as $table) {
|
||||||
$this->get_connection()->delete($table, []);
|
$this->get_connection()->delete($table, []);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -13,11 +13,11 @@ use Alchemy\Phrasea\Application;
|
|||||||
|
|
||||||
class patch_410alpha12a implements patchInterface
|
class patch_410alpha12a implements patchInterface
|
||||||
{
|
{
|
||||||
/** @var string */
|
/** @var string */
|
||||||
private $release = '4.1.0-alpha.12';
|
private $release = '4.1.0-alpha.12';
|
||||||
|
|
||||||
// source : https://www.npmjs.com/package/mime-db
|
// source : https://www.npmjs.com/package/mime-db
|
||||||
private $mimes = '{
|
private $mimes = '{
|
||||||
"application/1d-interleaved-parityfec": {
|
"application/1d-interleaved-parityfec": {
|
||||||
"source": "iana"
|
"source": "iana"
|
||||||
},
|
},
|
||||||
@@ -7703,84 +7703,84 @@ class patch_410alpha12a implements patchInterface
|
|||||||
}';
|
}';
|
||||||
|
|
||||||
|
|
||||||
/** @var array */
|
/** @var array */
|
||||||
private $concern = [base::DATA_BOX];
|
private $concern = [base::DATA_BOX];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function get_release()
|
public function get_release()
|
||||||
{
|
{
|
||||||
return $this->release;
|
return $this->release;
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function getDoctrineMigrations()
|
|
||||||
{
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function require_all_upgrades()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function concern()
|
|
||||||
{
|
|
||||||
return $this->concern;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function apply(base $databox, Application $app)
|
|
||||||
{
|
|
||||||
$sql = "DROP TABLE IF EXISTS `ext2mime`";
|
|
||||||
$databox->get_connection()->executeQuery($sql);
|
|
||||||
|
|
||||||
$sql = "CREATE TEMPORARY TABLE `ext2mime` (\n"
|
|
||||||
. " `ext` char(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',\n"
|
|
||||||
. " `mime` varchar(256) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,\n"
|
|
||||||
. " PRIMARY KEY (`ext`)\n"
|
|
||||||
. ") ENGINE=InnoDB DEFAULT CHARSET=latin1";
|
|
||||||
$databox->get_connection()->executeQuery($sql);
|
|
||||||
|
|
||||||
// some mimes give the same ext (conflict), we use the first one.
|
|
||||||
$sql = "INSERT IGNORE INTO `ext2mime` (`ext`, `mime`) VALUES (:ext, :mime)";
|
|
||||||
$stmt = $databox->get_connection()->prepare($sql);
|
|
||||||
|
|
||||||
$mimes = json_decode($this->mimes, true); // as assoc
|
|
||||||
foreach($mimes as $mime=>$m) {
|
|
||||||
if(array_key_exists('extensions', $m) && is_array($m['extensions'])) {
|
|
||||||
foreach($m['extensions'] as $ext) {
|
|
||||||
$stmt->execute([':ext'=>$ext, ':mime'=>$mime]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
$stmt->closeCursor();
|
|
||||||
|
|
||||||
// patch the tables only for truncated values
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getDoctrineMigrations()
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
// record.mime was char(40) ; subdef 64
|
/**
|
||||||
$sql = "UPDATE `record` AS `r` INNER JOIN `ext2mime` AS `e` ON `e`.`ext` = RIGHT(`r`.`originalname`, LOCATE('.', REVERSE(`r`.`originalname`))-1)\n"
|
* {@inheritdoc}
|
||||||
. "SET `r`.`mime`=`e`.`mime` WHERE LENGTH(`r`.`mime`)>39";
|
*/
|
||||||
$databox->get_connection()->executeQuery($sql);
|
public function require_all_upgrades()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// subdef.mime was char(64)
|
/**
|
||||||
$sql = "UPDATE `subdef` AS `s` INNER JOIN `ext2mime` AS `e` ON `e`.`ext` = RIGHT(`s`.`name`, LOCATE('.', REVERSE(`s`.`name`))-1)\n"
|
* {@inheritdoc}
|
||||||
. "SET `s`.`mime`=`e`.`mime` WHERE LENGTH(`s`.`mime`)>63";
|
*/
|
||||||
$databox->get_connection()->executeQuery($sql);
|
public function concern()
|
||||||
|
{
|
||||||
|
return $this->concern;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function apply(base $databox, Application $app)
|
||||||
|
{
|
||||||
|
$sql = "DROP TABLE IF EXISTS `ext2mime`";
|
||||||
|
$databox->get_connection()->executeQuery($sql);
|
||||||
|
|
||||||
|
$sql = "CREATE TEMPORARY TABLE `ext2mime` (\n"
|
||||||
|
. " `ext` char(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',\n"
|
||||||
|
. " `mime` varchar(256) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,\n"
|
||||||
|
. " PRIMARY KEY (`ext`)\n"
|
||||||
|
. ") ENGINE=InnoDB DEFAULT CHARSET=latin1";
|
||||||
|
$databox->get_connection()->executeQuery($sql);
|
||||||
|
|
||||||
|
// some mimes give the same ext (conflict), we use the first one.
|
||||||
|
$sql = "INSERT IGNORE INTO `ext2mime` (`ext`, `mime`) VALUES (:ext, :mime)";
|
||||||
|
$stmt = $databox->get_connection()->prepare($sql);
|
||||||
|
|
||||||
|
$mimes = json_decode($this->mimes, true); // as assoc
|
||||||
|
foreach($mimes as $mime=>$m) {
|
||||||
|
if(array_key_exists('extensions', $m) && is_array($m['extensions'])) {
|
||||||
|
foreach($m['extensions'] as $ext) {
|
||||||
|
$stmt->execute([':ext'=>$ext, ':mime'=>$mime]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$stmt->closeCursor();
|
||||||
|
|
||||||
|
// patch the tables only for truncated values
|
||||||
|
|
||||||
|
// record.mime was char(40) ; subdef 64
|
||||||
|
$sql = "UPDATE `record` AS `r` INNER JOIN `ext2mime` AS `e` ON `e`.`ext` = RIGHT(`r`.`originalname`, LOCATE('.', REVERSE(`r`.`originalname`))-1)\n"
|
||||||
|
. "SET `r`.`mime`=`e`.`mime` WHERE LENGTH(`r`.`mime`)>39";
|
||||||
|
$databox->get_connection()->executeQuery($sql);
|
||||||
|
|
||||||
|
// subdef.mime was char(64)
|
||||||
|
$sql = "UPDATE `subdef` AS `s` INNER JOIN `ext2mime` AS `e` ON `e`.`ext` = RIGHT(`s`.`name`, LOCATE('.', REVERSE(`s`.`name`))-1)\n"
|
||||||
|
. "SET `s`.`mime`=`e`.`mime` WHERE LENGTH(`s`.`mime`)>63";
|
||||||
|
$databox->get_connection()->executeQuery($sql);
|
||||||
|
|
||||||
|
|
||||||
$sql = "DROP TABLE IF EXISTS `ext2mime`";
|
$sql = "DROP TABLE IF EXISTS `ext2mime`";
|
||||||
$databox->get_connection()->executeQuery($sql);
|
$databox->get_connection()->executeQuery($sql);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
124
lib/classes/patch/410alpha13a.php
Normal file
124
lib/classes/patch/410alpha13a.php
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This file is part of Phraseanet
|
||||||
|
*
|
||||||
|
* (c) 2005-2016 Alchemy
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
use Alchemy\Phrasea\Application;
|
||||||
|
|
||||||
|
|
||||||
|
class patch_410alpha13a implements patchInterface
|
||||||
|
{
|
||||||
|
/** @var string */
|
||||||
|
private $release = '4.1.0-alpha.13';
|
||||||
|
|
||||||
|
/** @var array */
|
||||||
|
private $concern = [base::DATA_BOX];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function get_release()
|
||||||
|
{
|
||||||
|
return $this->release;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getDoctrineMigrations()
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function require_all_upgrades()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function concern()
|
||||||
|
{
|
||||||
|
return $this->concern;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function apply(base $databox, Application $app)
|
||||||
|
{
|
||||||
|
$sql = "DROP TABLE IF EXISTS `log_colls`";
|
||||||
|
$databox->get_connection()->prepare($sql)->execute();
|
||||||
|
|
||||||
|
$sql = "ALTER TABLE `log_docs` ADD `coll_id` INT(11) UNSIGNED NULL DEFAULT NULL, ADD INDEX(coll_id)";
|
||||||
|
try {
|
||||||
|
$databox->get_connection()->prepare($sql)->execute();
|
||||||
|
}
|
||||||
|
catch(\Exception $e) {
|
||||||
|
// no-op
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = "CREATE TEMPORARY TABLE `tmp_colls` (\n"
|
||||||
|
. " `id` int(11) unsigned NOT NULL,\n"
|
||||||
|
. " `coll_id` int(11) unsigned NOT NULL,\n"
|
||||||
|
. " PRIMARY KEY (`id`)\n"
|
||||||
|
. ")";
|
||||||
|
$databox->get_connection()->prepare($sql)->execute();
|
||||||
|
|
||||||
|
$tsql = [
|
||||||
|
[
|
||||||
|
'sql' => "TRUNCATE tmp_colls",
|
||||||
|
'stmt' => null,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'sql' => "INSERT INTO tmp_colls\n"
|
||||||
|
. " SELECT id, COALESCE(SUBSTRING_INDEX(GROUP_CONCAT(final ORDER BY r2_id DESC), ',', 1), 0) AS coll_id FROM\n"
|
||||||
|
. " (\n"
|
||||||
|
. " SELECT r1.record_id, r1.id, r2.id AS r2_id, r2.final FROM\n"
|
||||||
|
. " (select id, record_id FROM log_docs WHERE ISNULL(coll_id) LIMIT 1000000) AS r1\n"
|
||||||
|
. " LEFT JOIN log_docs AS r2\n"
|
||||||
|
. " ON r2.record_id=r1.record_id AND r2.action IN('add', 'collection') AND r2.id<=r1.id\n"
|
||||||
|
. " )\n"
|
||||||
|
. " AS t GROUP BY id",
|
||||||
|
'stmt' => null,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'sql' => "UPDATE tmp_colls INNER JOIN log_docs USING(id) SET log_docs.coll_id=tmp_colls.coll_id",
|
||||||
|
'stmt' => null,
|
||||||
|
]
|
||||||
|
];
|
||||||
|
foreach($tsql as $k => $v) {
|
||||||
|
$tsql[$k]['stmt'] = $databox->get_connection()->prepare($v['sql']);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$nchanged = 0;
|
||||||
|
do {
|
||||||
|
foreach($tsql as $k => $v) {
|
||||||
|
printf("%s\n\n", $v['sql']);
|
||||||
|
/** @var \Doctrine\DBAL\Driver\Statement $stmt */
|
||||||
|
$stmt = $v['stmt'];
|
||||||
|
$stmt->execute();
|
||||||
|
$nchanged = $stmt->rowCount();
|
||||||
|
$stmt->closeCursor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while($nchanged != 0);
|
||||||
|
|
||||||
|
|
||||||
|
$sql = "DROP TABLE `tmp_colls`";
|
||||||
|
$databox->get_connection()->prepare($sql)->execute();
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@@ -1208,13 +1208,14 @@ class record_adapter implements RecordInterface, cache_cacheableInterface
|
|||||||
try {
|
try {
|
||||||
$log_id = $app['phraseanet.logger']($collection->get_databox())->get_id();
|
$log_id = $app['phraseanet.logger']($collection->get_databox())->get_id();
|
||||||
|
|
||||||
$sql = 'INSERT INTO log_docs (id, log_id, date, record_id, action, final, comment)'
|
$sql = 'INSERT INTO log_docs (id, log_id, date, record_id, coll_id, action, final, comment)'
|
||||||
. ' VALUES (null, :log_id, now(), :record_id, "add", :coll_id,"")';
|
. ' VALUES (null, :log_id, now(), :record_id, :coll_id, "add", :final, "")';
|
||||||
$stmt = $connection->prepare($sql);
|
$stmt = $connection->prepare($sql);
|
||||||
$stmt->execute([
|
$stmt->execute([
|
||||||
':log_id' => $log_id,
|
':log_id' => $log_id,
|
||||||
':record_id' => $story_id,
|
':record_id' => $story_id,
|
||||||
':coll_id' => $collection->get_coll_id(),
|
':coll_id' => $collection->get_coll_id(),
|
||||||
|
':final' => $collection->get_coll_id(),
|
||||||
]);
|
]);
|
||||||
$stmt->closeCursor();
|
$stmt->closeCursor();
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
@@ -1261,14 +1262,15 @@ class record_adapter implements RecordInterface, cache_cacheableInterface
|
|||||||
try {
|
try {
|
||||||
$log_id = $app['phraseanet.logger']($databox)->get_id();
|
$log_id = $app['phraseanet.logger']($databox)->get_id();
|
||||||
|
|
||||||
$sql = "INSERT INTO log_docs (id, log_id, date, record_id, action, final, comment)"
|
$sql = "INSERT INTO log_docs (id, log_id, date, record_id, coll_id, action, final, comment)"
|
||||||
. " VALUES (null, :log_id, now(), :record_id, 'add', :coll_id, '')";
|
. " VALUES (null, :log_id, now(), :record_id, :coll_id, 'add', :final, '')";
|
||||||
|
|
||||||
$stmt = $databox->get_connection()->prepare($sql);
|
$stmt = $databox->get_connection()->prepare($sql);
|
||||||
$stmt->execute([
|
$stmt->execute([
|
||||||
':log_id' => $log_id,
|
':log_id' => $log_id,
|
||||||
':record_id' => $record_id,
|
':record_id' => $record_id,
|
||||||
':coll_id' => $file->getCollection()->get_coll_id(),
|
':coll_id' => $file->getCollection()->get_coll_id(),
|
||||||
|
':final' => $file->getCollection()->get_coll_id(),
|
||||||
]);
|
]);
|
||||||
$stmt->closeCursor();
|
$stmt->closeCursor();
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
|
@@ -2385,67 +2385,6 @@
|
|||||||
<engine>InnoDB</engine>
|
<engine>InnoDB</engine>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<table name="log_colls">
|
|
||||||
<fields>
|
|
||||||
<field>
|
|
||||||
<name>id</name>
|
|
||||||
<type>int(11) unsigned</type>
|
|
||||||
<null></null>
|
|
||||||
<extra>auto_increment</extra>
|
|
||||||
<default></default>
|
|
||||||
<comment></comment>
|
|
||||||
</field>
|
|
||||||
<field>
|
|
||||||
<name>log_id</name>
|
|
||||||
<type>int(11) unsigned</type>
|
|
||||||
<null></null>
|
|
||||||
<extra></extra>
|
|
||||||
<default></default>
|
|
||||||
<comment></comment>
|
|
||||||
</field>
|
|
||||||
<field>
|
|
||||||
<name>coll_id</name>
|
|
||||||
<type>int(11) unsigned</type>
|
|
||||||
<null></null>
|
|
||||||
<extra></extra>
|
|
||||||
<default></default>
|
|
||||||
<comment></comment>
|
|
||||||
</field>
|
|
||||||
</fields>
|
|
||||||
<indexes>
|
|
||||||
<index>
|
|
||||||
<name>PRIMARY</name>
|
|
||||||
<type>PRIMARY</type>
|
|
||||||
<fields>
|
|
||||||
<field>id</field>
|
|
||||||
</fields>
|
|
||||||
</index>
|
|
||||||
<index>
|
|
||||||
<name>couple</name>
|
|
||||||
<type>UNIQUE</type>
|
|
||||||
<fields>
|
|
||||||
<field>log_id</field>
|
|
||||||
<field>coll_id</field>
|
|
||||||
</fields>
|
|
||||||
</index>
|
|
||||||
<index>
|
|
||||||
<name>log_id</name>
|
|
||||||
<type>INDEX</type>
|
|
||||||
<fields>
|
|
||||||
<field>log_id</field>
|
|
||||||
</fields>
|
|
||||||
</index>
|
|
||||||
<index>
|
|
||||||
<name>coll_id</name>
|
|
||||||
<type>INDEX</type>
|
|
||||||
<fields>
|
|
||||||
<field>coll_id</field>
|
|
||||||
</fields>
|
|
||||||
</index>
|
|
||||||
</indexes>
|
|
||||||
<engine>InnoDB</engine>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<table name="log_search">
|
<table name="log_search">
|
||||||
<fields>
|
<fields>
|
||||||
<field>
|
<field>
|
||||||
@@ -2570,6 +2509,14 @@
|
|||||||
<default></default>
|
<default></default>
|
||||||
<comment></comment>
|
<comment></comment>
|
||||||
</field>
|
</field>
|
||||||
|
<field>
|
||||||
|
<name>coll_id</name>
|
||||||
|
<type>int(11) unsigned</type>
|
||||||
|
<null></null>
|
||||||
|
<extra></extra>
|
||||||
|
<default>null</default>
|
||||||
|
<comment></comment>
|
||||||
|
</field>
|
||||||
<field>
|
<field>
|
||||||
<name>action</name>
|
<name>action</name>
|
||||||
<type>enum('push','add','validate','edit','collection','status','print','substit','publish','download','mail','ftp','delete')</type>
|
<type>enum('push','add','validate','edit','collection','status','print','substit','publish','download','mail','ftp','delete')</type>
|
||||||
@@ -2618,6 +2565,13 @@
|
|||||||
<field>record_id</field>
|
<field>record_id</field>
|
||||||
</fields>
|
</fields>
|
||||||
</index>
|
</index>
|
||||||
|
<index>
|
||||||
|
<name>coll_id</name>
|
||||||
|
<type>INDEX</type>
|
||||||
|
<fields>
|
||||||
|
<field>coll_id</field>
|
||||||
|
</fields>
|
||||||
|
</index>
|
||||||
<index>
|
<index>
|
||||||
<name>action</name>
|
<name>action</name>
|
||||||
<type>INDEX</type>
|
<type>INDEX</type>
|
||||||
|
Reference in New Issue
Block a user