From 4d2e4d403bb78241e823e28e012b10f7c23d07d0 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Sat, 25 Apr 2009 12:14:54 +0000
Subject: [PATCH] introduction de sql_seek qui permet de deplacer le pointeur
 dans les resultats d'une requet sql versions pg et sqlite a tester

---
 ecrire/base/abstract_sql.php    |  5 +++++
 ecrire/req/mysql.php            |  5 +++++
 ecrire/req/pg.php               | 10 ++++++++--
 ecrire/req/sqlite_generique.php | 22 ++++++++++++++++++++++
 4 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/ecrire/base/abstract_sql.php b/ecrire/base/abstract_sql.php
index e5612f7428..dc3a8c2594 100644
--- a/ecrire/base/abstract_sql.php
+++ b/ecrire/base/abstract_sql.php
@@ -126,6 +126,11 @@ function sql_fetch_all($res, $serveur='', $option=true){
 	return $rows;
 }
 
+function sql_seek($res, $row_number, $serveur='', $option=true) {
+	$f = sql_serveur('seek', $serveur,  $option==='continue' OR $option===false);
+	if (!is_string($f) OR !$f) return false;
+	return $f($res, $row_number, $serveur, $option!==false);
+}
 
 // http://doc.spip.org/@sql_listdbs
 function sql_listdbs($serveur='', $option=true) {
diff --git a/ecrire/req/mysql.php b/ecrire/req/mysql.php
index fd6992187d..1a75d6ddcf 100644
--- a/ecrire/req/mysql.php
+++ b/ecrire/req/mysql.php
@@ -55,6 +55,7 @@ $GLOBALS['spip_mysql_functions_1'] = array(
 		'error' => 'spip_mysql_error',
 		'explain' => 'spip_mysql_explain',
 		'fetch' => 'spip_mysql_fetch',
+		'seek' => 'spip_mysql_seek',
 		'free' => 'spip_mysql_free',
 		'hex' => 'spip_mysql_hex',
 		'in' => 'spip_mysql_in', 
@@ -486,6 +487,10 @@ function spip_mysql_fetch($r, $t='', $serveur='',$requeter=true) {
 	if ($r) return mysql_fetch_array($r, $t);
 }
 
+function spip_mysql_seek($r, $row_number, $serveur='',$requeter=true) {
+	if ($r) return mysql_data_seek($r,$row_number);
+}
+
 
 // http://doc.spip.org/@spip_mysql_countsel
 function spip_mysql_countsel($from = array(), $where = array(),
diff --git a/ecrire/req/pg.php b/ecrire/req/pg.php
index 9f287e717d..a6e7cc3405 100644
--- a/ecrire/req/pg.php
+++ b/ecrire/req/pg.php
@@ -80,6 +80,7 @@ $GLOBALS['spip_pg_functions_1'] = array(
 		'error' => 'spip_pg_error',
 		'explain' => 'spip_pg_explain',
 		'fetch' => 'spip_pg_fetch',
+		'seek' => 'spip_pg_seek',
 		'free' => 'spip_pg_free',
 		'hex' => 'spip_pg_hex',
 		'in' => 'spip_pg_in',
@@ -451,7 +452,7 @@ function spip_pg_select($select, $from, $where='',
 	  . (!$limit ? '' : (" LIMIT $count" . (!$offset ? '' : " OFFSET $offset")));
 
 	// Erreur ? C'est du debug, ou une erreur du serveur
-	// il faudrait mettre ici le déclenchement du message SQL
+	// il faudrait mettre ici le d�clenchement du message SQL
 	// actuellement dans erreur_requete_boucle
 
 	if ($requeter && $GLOBALS['var_mode'] == 'debug') {
@@ -705,6 +706,11 @@ function spip_pg_fetch($res, $t='', $serveur='',$requeter=true) {
 	return $res;
 }
 
+function spip_pg_seek($r, $row_number, $serveur='',$requeter=true) {
+	if ($r) return pg_result_seek($r,$row_number);
+}
+
+
 // http://doc.spip.org/@spip_pg_countsel
 function spip_pg_countsel($from = array(), $where = array(), $groupby=array(),
 			  $having = array(), $serveur='',$requeter=true) 
@@ -724,7 +730,7 @@ function spip_pg_count($res, $serveur='',$requeter=true) {
   
 // http://doc.spip.org/@spip_pg_free
 function spip_pg_free($res, $serveur='',$requeter=true) {
-  // rien à faire en postgres
+  // rien � faire en postgres
 }
 
 // http://doc.spip.org/@spip_pg_delete
diff --git a/ecrire/req/sqlite_generique.php b/ecrire/req/sqlite_generique.php
index 53b9b5af75..f5ca191ed0 100644
--- a/ecrire/req/sqlite_generique.php
+++ b/ecrire/req/sqlite_generique.php
@@ -617,6 +617,27 @@ function spip_sqlite_fetch($r, $t='', $serveur='',$requeter=true) {
 }
 
 
+function spip_sqlite_seek($r, $row_number, $serveur='',$requeter=true) {
+	if ($r){
+		$link = _sqlite_link($serveur);
+		if (_sqlite_is_version(3, $link)){
+			if ($numrow==0) {
+				return $r->rewind();
+			} else {
+				return $r->seek($numrow);
+			}
+		}
+		else {
+			if ($numrow==0) {
+				return sql_rewind($result);
+			} else {
+				return sql_seek($result, $numrow);
+			}
+		}
+	}
+}
+
+
 // http://doc.spip.org/@spip_sqlite_free
 function spip_sqlite_free(&$r, $serveur='',$requeter=true) {
 	unset($r);
@@ -1363,6 +1384,7 @@ function _sqlite_ref_fonctions(){
 		'error' => 'spip_sqlite_error',
 		'explain' => 'spip_sqlite_explain',
 		'fetch' => 'spip_sqlite_fetch',
+		'seek' => 'spip_sqlite_seek',
 		'free' => 'spip_sqlite_free',
 		'hex' => 'spip_sqlite_hex',
 		'in' => 'spip_sqlite_in', 
-- 
GitLab