13.13.11 SearchDoc::onlyCount()

Cette méthode permet de ne faire que le décompte des documents.

13.13.11.1 Description

int onlyCount ()

Cette méthode permet d'avoir uniquement le nombre de documents trouvés par la requête sans pour autant récupérer ces documents de la base de données.

13.13.11.1.1 Avertissements

Un nouvel appel à la base de données est effectué à chaque appel et écrase le précédent résultat fait par search() ou le précédent onlyCount.

13.13.11.2 Liste des paramètres

Aucun.

13.13.11.3 Valeur de retour

int
Le nombre de documents trouvés par le searchDoc. Retourne -1 en cas d'erreur.

13.13.11.4 Erreurs / Exceptions

Exception \Dcp\Db\Exception en cas d'erreur de requête sql.

13.13.11.5 Historique

13.13.11.5.1 Release 3.2.18

3.2.18

En cas d'erreur SQL de la requête, la méthode lève une exception de type \Dcp\Db\Exception.

La valeur -1 est retournée pour toute autre erreur logique (e.g. la famille sur laquelle porte la recherche n'existe pas).

13.13.11.5.2 Release 3.2.17

En cas d'erreur de requête, la méthode retourne maintenant -1 au lieu de 0.

13.13.11.5.3 Release 3.2.12

La méthode onlyCount() récupère toujours le résultat en envoyant une requête en base de donnée. Auparavant, si la méthode search() ou onlyCount étaient préalablement exécutée la méthode ne renvoyait pas de requête mais récupéré le dernier compte effectué. Il fallait dans ce cas appeler la méthode reset() pour forcer un recomptage.

13.13.11.6 Exemples

13.13.11.6.1 Exemple de compte :

function testOnlyCount(Action & $action)
{
    header('Content-Type: text/plain');
 
    $searchDoc = new searchDoc();
    var_export($searchDoc->onlyCount());
    print "\n";
    var_export($searchDoc->getSearchInfo());
    print "\n";
    print "\n";
    $searchDoc->addFilter("title = 'toto'");
    var_export($searchDoc->onlyCount());
    print "\n";
    var_export($searchDoc->getSearchInfo());
    print "\n";
    print "\n";
    $searchDoc = new searchDoc();
    $searchDoc->search();
    var_export($searchDoc->onlyCount());
    print "\n";
    var_export($searchDoc->getSearchInfo());
    print "\n";
    print "\n";
    $searchDoc->addFilter("title = 'toto'");
    var_export($searchDoc->onlyCount());
    print "\n";
    var_export($searchDoc->getSearchInfo());
    print "\n";
    print "\n";
 
}
1493
array (
  'query' => 'select count(docread.id) from  docread  where   (docread.archiveid is null) and (docread.doctype != \'Z\') and (docread.doctype != \'T\') and (docread.locked != -1)',
  'delay' => '0.003s',
)
 
0
array (
  'query' => 'select count(docread.id) from  docread  where   (docread.archiveid is null) and (docread.doctype != \'Z\') and (docread.doctype != \'T\') and (docread.locked != -1) and (title = \'toto\')',
  'delay' => '0.001s',
)
 
1493
array (
  'count' => 1493,
  'query' => 'select docread.id, owner, title, revision, version, initid, fromid, doctype, locked, allocated, archiveid, icon, lmodify, profid, usefor, cdate, adate, revdate, comment, classname, state, wid, postitid, domainid, lockdomainid, cvid, name, dprofid, atags, prelid, confidential, ldapdn, values, svalues, attrids  from  docread  where   (docread.archiveid is null) and (docread.doctype != \'Z\') and (docread.doctype != \'T\') and (docread.locked != -1) ORDER BY title LIMIT ALL OFFSET 0;',
  'error' => '',
  'delay' => '0.073s',
)
 
1493
array (
  'count' => 1493,
  'query' => 'select docread.id, owner, title, revision, version, initid, fromid, doctype, locked, allocated, archiveid, icon, lmodify, profid, usefor, cdate, adate, revdate, comment, classname, state, wid, postitid, domainid, lockdomainid, cvid, name, dprofid, atags, prelid, confidential, ldapdn, values, svalues, attrids  from  docread  where   (docread.archiveid is null) and (docread.doctype != \'Z\') and (docread.doctype != \'T\') and (docread.locked != -1) ORDER BY title LIMIT ALL OFFSET 0;',
  'error' => '',
  'delay' => '0.073s',
)

13.13.11.6.2 Exemple traitement d'erreur

$s = new SearchDoc("", "IUSER");
$s->addFilter("myColumn = 3 "); // Ici la colonne n'existe pas dans la famille
try {
    $c = $s->onlyCount();
} catch (\Dcp\Db\Exception $e) {
    print "SQL error:\n";
    print "----------\n";
    print_r($s->getSearchInfo());
    return;
}
if ($c === -1) {
    print "Logical error:\n";
    print "--------------\n";
    print_r($s->getSearchInfo());
    return;
}
printf("Count = %d\n", $c);

Retour :

SQL error:
----------
Array
(
    [query] => select count(doc128.id) from  doc128  where   (doc128.archiveid is null) and (doc128.doctype != 'T')
                 and (doc128.locked != -1) and (myColumn = 3 )
    [error] => ERROR:  column "mycolumn" does not exist
LINE 1: ...28.doctype != 'T') and (doc128.locked != -1) and (myColumn =...
                                                             ^
)

13.13.11.7 Notes

Aucune.

13.13.11.8 Voir aussi

×
mis à jour