Pārlūkot izejas kodu

Result => ResulSet (Iterator).
Date support.

Nicolas Cannasse 19 gadi atpakaļ
vecāks
revīzija
a93cafe389
2 mainītis faili ar 21 papildinājumiem un 17 dzēšanām
  1. 3 3
      std/neko/db/Connection.hx
  2. 18 14
      std/neko/db/ResultSet.hx

+ 3 - 3
std/neko/db/Connection.hx

@@ -12,10 +12,10 @@ class Connection {
 		sql_select_db(this.__c,untyped db.__s);
 	}
 
-	public function request( s : String ) : Result {
+	public function request( s : String ) : ResultSet {
 		var r = sql_request(this.__c,untyped s.__s);
-		//Result.set_conv_date(r,function(d) { return new Date(d); });
-		return untyped new Result(r);
+		untyped ResultSet.result_set_conv_date(r,function(d) { return Date.new1(d); });
+		return untyped new ResultSet(r);
 	}
 
 	public function close() {

+ 18 - 14
std/neko/db/Result.hx → std/neko/db/ResultSet.hx

@@ -1,22 +1,33 @@
 package neko.db;
 
-class Result {
+class ResultSet implements Iterator<Dynamic> {
 
 	public var length : Int;
 	public var nfields : Int;
-	public var current : { };
 	private var __r : Void;
+	private var cache : Dynamic;
 
 	private function new(r) {
 		__r = r;
+		length = result_get_length(r);
+		nfields = result_get_nfields(r);
 	}
 
+	public function hasNext() {
+		if( cache == null )
+			cache = next();
+		return (cache != null);
+	}
 
-	public function next() : Bool {
-		var c = result_next(__r);
-		current = c;
+	public function next() : Dynamic {
+		var c = cache;
+		if( c != null ) {
+			cache = null;
+			return c;
+		}
+		c = result_next(__r);
 		if( c == null )
-			return false;
+			return null;
 		untyped {
 			var f = __dollar__objfields(c);
 			var i = 0;
@@ -28,7 +39,7 @@ class Result {
 				i = i + 1;
 			}
 		}
-		return true;
+		return c;
 	}
 
 	public function getResult( n : Int ) {
@@ -43,13 +54,6 @@ class Result {
 		return result_get_float(__r,n);
 	}
 
-	public function results() : Array<{}> {
-		var a = new Array();
-		while( next() )
-			a.push(current);
-		return a;
-	}
-
 	private static var result_get_length = neko.Lib.load("mysql","result_get_length",1);
 	private static var result_get_nfields = neko.Lib.load("mysql","result_get_nfields",1);
 	private static var result_next = neko.Lib.load("mysql","result_next",1);