Browse Source

- delegated startTransaction, commit and rollback actions to database drivers

Laurent Bedubourg 19 years ago
parent
commit
6b3194c37b
4 changed files with 33 additions and 6 deletions
  1. 3 0
      std/neko/db/Connection.hx
  2. 13 1
      std/neko/db/Mysql.hx
  3. 12 0
      std/neko/db/Sqlite.hx
  4. 5 5
      std/neko/db/Transaction.hx

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

@@ -38,4 +38,7 @@ interface Connection {
 
 
 	function hasFeature( f : Feature ) : Bool;
 	function hasFeature( f : Feature ) : Bool;
 
 
+	function startTransaction() : Void;
+	function commit() : Void;
+	function rollback() : Void;
 }
 }

+ 13 - 1
std/neko/db/Mysql.hx

@@ -147,6 +147,18 @@ private class MysqlConnection implements Connection {
 		return false;
 		return false;
 	}
 	}
 
 
+	public function startTransaction() {
+		request("START TRANSACTION");
+	}
+
+	public function commit() {
+		request("COMMIT");
+	}
+
+	public function rollback() {
+		request("ROLLBACK");
+	}
+
 	private static var __use_date = Date;
 	private static var __use_date = Date;
 	private static var sql_request = neko.Lib.load("mysql","request",2);
 	private static var sql_request = neko.Lib.load("mysql","request",2);
 	private static var sql_close = neko.Lib.load("mysql","close",1);
 	private static var sql_close = neko.Lib.load("mysql","close",1);
@@ -178,4 +190,4 @@ class Mysql {
 	static var sql_connect = neko.Lib.load("mysql","connect",1);
 	static var sql_connect = neko.Lib.load("mysql","connect",1);
 	private static var sql_select_db = neko.Lib.load("mysql","select_db",2);
 	private static var sql_select_db = neko.Lib.load("mysql","select_db",2);
 
 
-}
+}

+ 12 - 0
std/neko/db/Sqlite.hx

@@ -61,6 +61,18 @@ private class SqliteConnection implements Connection {
 		return false;
 		return false;
 	}
 	}
 
 
+	public function startTransaction() {
+		request("BEGIN TRANSACTION");
+	}
+
+	public function commit() {
+		request("COMMIT");
+	}
+
+	public function rollback() {
+		request("ROLLBACK");
+	}
+
 	static var _connect = neko.Lib.load("sqlite","connect",1);
 	static var _connect = neko.Lib.load("sqlite","connect",1);
 	static var _close = neko.Lib.load("sqlite","close",1);
 	static var _close = neko.Lib.load("sqlite","close",1);
 	static var _request = neko.Lib.load("sqlite","request",2);
 	static var _request = neko.Lib.load("sqlite","request",2);

+ 5 - 5
std/neko/db/Transaction.hx

@@ -37,13 +37,13 @@ class Transaction {
 			mainFun();
 			mainFun();
 		} catch( e : Dynamic ) {
 		} catch( e : Dynamic ) {
 			if( count > 0 && isDeadlock(e) ) {
 			if( count > 0 && isDeadlock(e) ) {
-				Manager.cnx.request("ROLLBACK"); // should be already done, but in case...
-				Manager.cnx.request("START TRANSACTION");
+				Manager.cnx.rollback(); // should be already done, but in case...
+				Manager.cnx.startTransaction();
 				runMainLoop(mainFun,logError,count-1);
 				runMainLoop(mainFun,logError,count-1);
 				return;
 				return;
 			}
 			}
 			if( logError == null ) {
 			if( logError == null ) {
-				Manager.cnx.request("ROLLBACK");
+				Manager.cnx.rollback();
 				neko.Lib.rethrow(e);
 				neko.Lib.rethrow(e);
 			}
 			}
 			logError(e); // should ROLLBACK if needed
 			logError(e); // should ROLLBACK if needed
@@ -53,9 +53,9 @@ class Transaction {
 	public static function main( cnx, mainFun : Void -> Void, logError : Dynamic -> Void ) {
 	public static function main( cnx, mainFun : Void -> Void, logError : Dynamic -> Void ) {
 		Manager.initialize();
 		Manager.initialize();
 		Manager.cnx = cnx;
 		Manager.cnx = cnx;
-		Manager.cnx.request("START TRANSACTION");
+		Manager.cnx.startTransaction();
 		runMainLoop(mainFun,logError,3);
 		runMainLoop(mainFun,logError,3);
-		Manager.cnx.request("COMMIT");
+		Manager.cnx.commit();
 		Manager.cnx.close();
 		Manager.cnx.close();
 		Manager.cnx = null;
 		Manager.cnx = null;
 		Manager.cleanup();
 		Manager.cleanup();