function sqlite_data_seek($result, $numrow) { if ($numrow == 0) { return sql_rewind($result); } else { return sql_seek($result, $numrow); } }
/** * Implémentation sécurisée du saut en avant. * * Ne dépend pas de la disponibilité de la fonction `sql_seek()`. * Ne fait rien pour une valeur négative ou nulle de `$saut`. * Retourne la position après le saut * * @see sql_seek() * * @param resource $res * Ressource issue d'une selection sql_select * @param int $pos * position courante * @param int $saut * saut demande * @param int $count * position maximale * (nombre de resultat de la requete OU position qu'on ne veut pas depasser) * @param string $serveur * Nom du connecteur * @param bool|string $option * Peut avoir 2 valeurs : * - true -> executer la requete * - continue -> ne pas echouer en cas de serveur sql indisponible * * @return int * Position apres le saut. */ function sql_skip($res, $pos, $saut, $count, $serveur = '', $option = true) { // pas de saut en arriere qu'on ne sait pas faire sans sql_seek if (($saut = intval($saut)) <= 0) { return $pos; } $seek = $pos + $saut; // si le saut fait depasser le maxi, on libere la resource // et on sort if ($seek >= $count) { sql_free($res, $serveur, $option); return $count; } if (sql_seek($res, $seek)) { $pos = $seek; } else { while ($pos < $seek and sql_fetch($res, $serveur, $option)) { $pos++; } } return $pos; }
/** * Implementation securisee du saut en avant * pour la balise #SAUTER * * @param resource $res * @param int $pos * @param int $nb * @param int $total */ function spip_bonux_sauter(&$res, &$pos, $nb, $total){ // pas de saut en arriere qu'on ne sait pas faire sans sql_seek if (($nb=intval($nb))<=0) return; $saut = $pos + $nb; // si le saut fait depasser le maxi, on libere et on sort if ($saut>=$total) {sql_free($res); return;} if (sql_seek($res, $saut)) $pos += $nb; else while ($pos<$saut AND sql_fetch($res)) $pos++; return; }
/** * Sauter a une position absolue * * @param int $n * @param null|string $continue * @return bool */ public function seek($n = 0, $continue = null) { if (!sql_seek($this->sqlresult, $n, $this->command['connect'], $continue)) { // SQLite ne sait pas seek(), il faut relancer la query // si la position courante est apres la position visee // il faut relancer la requete if ($this->pos > $n) { $this->free(); $this->select(); $this->valid(); } // et utiliser la methode par defaut pour se deplacer au bon endroit // (sera fait en cas d'echec de cette fonction) return false; } $this->row = sql_fetch($this->sqlresult, $this->command['connect']); $this->pos = min($n, $this->count()); return true; }