Browse Source

removed neko.db and most of php.db

Simon Krajewski 12 years ago
parent
commit
78577a0874

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

@@ -1,26 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package neko.db;
-
-#if old_spod
-typedef Connection = sys.db.Connection;
-#end

+ 0 - 543
std/neko/db/Manager.hx

@@ -1,543 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package neko.db;
-
-#if !old_spod
-
-#else
-
-import Reflect;
-import neko.db.Connection;
-
-/**
-	Record Manager : the persistent object database manager. See the tutorial on
-	haXe website to learn how to use Record.
-**/
-@:unifyMinDynamic
-class Manager<T : Object> {
-
-	/* ----------------------------- STATICS ------------------------------ */
-	public static var cnx(default,set) : Connection;
-	private static var object_cache : haxe.ds.StringMap<Object> = new haxe.ds.StringMap();
-	private static var init_list : List<Manager<Object>> = new List();
-	private static var cache_field = "__cache__";
-	private static var no_update : Dynamic = function() { throw "Cannot update not locked object"; }
-	private static var LOCKS = ["","",""];
-	private static var KEYWORDS = {
-		var h = new haxe.ds.StringMap();
-		for( k in ["read","write","desc","out","group","version","option",
-				"primary","exists","from","key","keys","limit","lock","use",
-				"create","order","range"] )
-			h.set(k,true);
-		h;
-	}
-
-	private static function set_cnx( c : Connection ) {
-		Reflect.setField(Manager,"cnx",c);
-		if( c != null ) {
-			if( c.dbName() == "MySQL" ) {
-				LOCKS[1] = " LOCK IN SHARE MODE";
-				LOCKS[2] = " FOR UPDATE";
-			} else {
-				LOCKS[1] = "";
-				LOCKS[2] = "";
-			}
-		}
-		return c;
-	}
-
-	/* ---------------------------- BASIC API ----------------------------- */
-	var table_name : String;
-	var table_fields : List<String>;
-	var table_keys : Array<String>;
-	var class_proto : { prototype : Dynamic };
-	var lock_mode : Int;
-
-	public function new( classval : Class<T> ) {
-		var cl : Dynamic = classval;
-
-		// get basic infos
-		var cname : Array<String> = cl.__name__;
-		table_name = quoteField(if( cl.TABLE_NAME != null ) cl.TABLE_NAME else cname[cname.length-1]);
-		table_keys = if( cl.TABLE_IDS != null ) cl.TABLE_IDS else ["id"];
-		class_proto = cl;
-		lock_mode = 2;
-
-		// get the list of private fields
-		var apriv : Array<String> = cl.PRIVATE_FIELDS;
-		apriv = if( apriv == null ) new Array() else apriv.copy();
-		apriv.push("local_manager");
-		apriv.push("__class__");
-		apriv.push("__properties__");
-
-		// get the proto fields not marked private (excluding methods)
-		table_fields = new List();
-		var proto : { local_manager : neko.db.Manager<T> } = class_proto.prototype;
-		for( f in Reflect.fields(proto) ) {
-			var isfield = !Reflect.isFunction(Reflect.field(proto,f));
-			if( isfield )
-				for( f2 in apriv )
-					if( f == f2 ) {
-						isfield = false;
-						break;
-					}
-			if( isfield )
-				table_fields.add(f);
-		}
-
-		// set the manager and ready for further init
-		proto.local_manager = this;
-		init_list.add(cast this);
-	}
-
-	public function get( id : Int, ?lock : Bool ) : T {
-		if( lock == null )
-			lock = true;
-		if( table_keys.length != 1 )
-			throw "Invalid number of keys";
-		if( id == null )
-			return null;
-		var x : Dynamic = getFromCacheKey(id + table_name);
-		if( x != null && (!lock || x.update != no_update) )
-			return x;
-		var s = new StringBuf();
-		s.add("SELECT * FROM ");
-		s.add(table_name);
-		s.add(" WHERE ");
-		s.add(quoteField(table_keys[0]));
-		s.add(" = ");
-		cnx.addValue(s,id);
-		if( lock )
-			s.add(getLockMode());
-		return object(s.toString(),lock);
-	}
-
-	public function getWithKeys( keys : {}, ?lock : Bool ) : T {
-		if( lock == null )
-			lock = true;
-		var x : Dynamic = getFromCacheKey(makeCacheKey(cast keys));
-		if( x != null && (!lock || x.update != no_update) )
-			return x;
-		var s = new StringBuf();
-		s.add("SELECT * FROM ");
-		s.add(table_name);
-		s.add(" WHERE ");
-		addKeys(s,keys);
-		if( lock )
-			s.add(getLockMode());
-		return object(s.toString(),lock);
-	}
-
-	public function delete( x : {} ) {
-		var s = new StringBuf();
-		s.add("DELETE FROM ");
-		s.add(table_name);
-		s.add(" WHERE ");
-		addCondition(s,x);
-		execute(s.toString());
-	}
-
-	public function search( x : {}, ?lock : Bool ) : List<T> {
-		if( lock == null )
-			lock = true;
-		var s = new StringBuf();
-		s.add("SELECT * FROM ");
-		s.add(table_name);
-		s.add(" WHERE ");
-		addCondition(s,x);
-		if( lock )
-			s.add(getLockMode());
-		return objects(s.toString(),lock);
-	}
-
-	function addCondition(s : StringBuf,x) {
-		var first = true;
-		if( x != null )
-			for( f in Reflect.fields(x) ) {
-				if( first )
-					first = false;
-				else
-					s.add(" AND ");
-				s.add(quoteField(f));
-				var d = Reflect.field(x,f);
-				if( d == null )
-					s.add(" IS NULL");
-				else {
-					s.add(" = ");
-					cnx.addValue(s,d);
-				}
-			}
-		if( first )
-			s.add("1");
-	}
-
-	public function all( ?lock: Bool ) : List<T> {
-		if( lock == null )
-			lock = true;
-		return objects("SELECT * FROM " + table_name + if( lock ) getLockMode() else "",lock);
-	}
-
-	public function count( ?x : {} ) : Int {
-		var s = new StringBuf();
-		s.add("SELECT COUNT(*) FROM ");
-		s.add(table_name);
-		s.add(" WHERE ");
-		addCondition(s,x);
-		return execute(s.toString()).getIntResult(0);
-	}
-
-	public function quote( s : String ) : String {
-		return cnx.quote( s );
-	}
-
-	public function result( sql : String ) : Dynamic {
-		return cnx.request(sql).next();
-	}
-
-	public function results<T>( sql : String ) : List<T> {
-		return cast cnx.request(sql).results();
-	}
-
-	/* -------------------------- RECORDOBJECT API -------------------------- */
-
-	function doInsert( x : T ) {
-		unmake(x);
-		var s = new StringBuf();
-		var fields = new List();
-		var values = new List();
-		for( f in table_fields ) {
-			var v = Reflect.field(x,f);
-			if( v != null ) {
-				fields.add(quoteField(f));
-				values.add(v);
-			}
-		}
-		s.add("INSERT INTO ");
-		s.add(table_name);
-		s.add(" (");
-		s.add(fields.join(","));
-		s.add(") VALUES (");
-		var first = true;
-		for( v in values ) {
-			if( first )
-				first = false;
-			else
-				s.add(", ");
-			cnx.addValue(s,v);
-		}
-		s.add(")");
-		execute(s.toString());
-		// table with one key not defined : suppose autoincrement
-		if( table_keys.length == 1 && Reflect.field(x,table_keys[0]) == null )
-			Reflect.setField(x,table_keys[0],cnx.lastInsertId());
-		addToCache(x);
-	}
-
-	function doUpdate( x : T ) {
-		unmake(x);
-		var s = new StringBuf();
-		s.add("UPDATE ");
-		s.add(table_name);
-		s.add(" SET ");
-		var cache = Reflect.field(x,cache_field);
-		var mod = false;
-		for( f in table_fields ) {
-			var v = Reflect.field(x,f);
-			var vc = Reflect.field(cache,f);
-			if( v != vc ) {
-				if( mod )
-					s.add(", ");
-				else
-					mod = true;
-				s.add(quoteField(f));
-				s.add(" = ");
-				cnx.addValue(s,v);
-				Reflect.setField(cache,f,v);
-			}
-		}
-		if( !mod )
-			return;
-		s.add(" WHERE ");
-		addKeys(s,x);
-		execute(s.toString());
-	}
-
-	function doDelete( x : T ) {
-		var s = new StringBuf();
-		s.add("DELETE FROM ");
-		s.add(table_name);
-		s.add(" WHERE ");
-		addKeys(s,x);
-		execute(s.toString());
-		removeFromCache(x);
-	}
-
-
-	function doSync( i : T ) {
-		object_cache.remove(makeCacheKey(i));
-		var i2 = getWithKeys(i,(cast i).update != no_update);
-		// delete all fields
-		for( f in Reflect.fields(i) )
-			Reflect.deleteField(i,f);
-		// copy fields from new object
-		for( f in Reflect.fields(i2) )
-			Reflect.setField(i,f,Reflect.field(i2,f));
-		// set same field-cache
-		Reflect.setField(i,cache_field,Reflect.field(i2,cache_field));
-		// rebuild in case it's needed
-		make(i);
-		addToCache(i);
-	}
-
-	function objectToString( it : T ) : String {
-		var s = new StringBuf();
-		s.add(table_name);
-		if( table_keys.length == 1 ) {
-			s.add("#");
-			s.add(Reflect.field(it,table_keys[0]));
-		} else {
-			s.add("(");
-			var first = true;
-			for( f in table_keys ) {
-				if( first )
-					first = false;
-				else
-					s.add(",");
-				s.add(quoteField(f));
-				s.add(":");
-				s.add(Reflect.field(it,f));
-			}
-			s.add(")");
-		}
-		return s.toString();
-	}
-
-	/* ---------------------------- INTERNAL API -------------------------- */
-
-	function cacheObject( x : T, lock : Bool ) {
-		addToCache(x);
-		untyped __dollar__objsetproto(x,class_proto.prototype);
-		Reflect.setField(x,cache_field,untyped __dollar__new(x));
-		if( !lock )
-			x.update = no_update;
-	}
-
-	function make( x : T ) {
-	}
-
-	function unmake( x : T ) {
-	}
-
-	function quoteField(f : String) {
-		return KEYWORDS.exists(f.toLowerCase()) ? "`"+f+"`" : f;
-	}
-
-	function addKeys( s : StringBuf, x : {} ) {
-		var first = true;
-		for( k in table_keys ) {
-			if( first )
-				first = false;
-			else
-				s.add(" AND ");
-			s.add(quoteField(k));
-			s.add(" = ");
-			var f = Reflect.field(x,k);
-			if( f == null )
-				throw ("Missing key "+k);
-			cnx.addValue(s,f);
-		}
-	}
-
-	function execute( sql : String ) {
-		return cnx.request(sql);
-	}
-
-	function select( cond : String ) {
-		var s = new StringBuf();
-		s.add("SELECT * FROM ");
-		s.add(table_name);
-		s.add(" WHERE ");
-		s.add(cond);
-		s.add(getLockMode());
-		return s.toString();
-	}
-
-	function selectReadOnly( cond : String ) {
-		var s = new StringBuf();
-		s.add("SELECT * FROM ");
-		s.add(table_name);
-		s.add(" WHERE ");
-		s.add(cond);
-		return s.toString();
-	}
-
-	public function object( sql : String, lock : Bool ) : T {
-		var r = cnx.request(sql).next();
-		if( r == null )
-			return null;
-		var c = getFromCache(r,lock);
-		if( c != null )
-			return c;
-		cacheObject(r,lock);
-		make(r);
-		return r;
-	}
-
-	public function objects( sql : String, lock : Bool ) : List<T> {
-		var me = this;
-		var l = cnx.request(sql).results();
-		var l2 = new List<T>();
-		for( x in l ) {
-			var c = getFromCache(x,lock);
-			if( c != null )
-				l2.add(c);
-			else {
-				cacheObject(x,lock);
-				make(x);
-				l2.add(x);
-			}
-		}
-		return l2;
-	}
-
-	/* --------------------------- MISC API  ------------------------------ */
-
-	inline function getLockMode() {
-		return LOCKS[lock_mode];
-	}
-
-	public function setLockMode( exclusive, readShared ) {
-		lock_mode = exclusive ? 2 : (readShared ? 1 : 0);
-	}
-
-	public function dbClass() : Class<Dynamic> {
-		return cast class_proto;
-	}
-
-	/* --------------------------- INIT / CLEANUP ------------------------- */
-
-	public static function initialize() {
-		var l = init_list;
-		init_list = new List();
-		for( m in l ) {
-			var rl : Void -> Array<Dynamic> = (cast m.class_proto).RELATIONS;
-			if( rl != null )
-				for( r in rl() )
-					m.initRelation(r);
-		}
-	}
-
-	public static function cleanup() {
-		object_cache = new haxe.ds.StringMap();
-	}
-
-	function initRelation(r : { prop : String, key : String, manager : Manager<Object>, lock : Bool } ) {
-		// setup getter/setter
-		var manager = r.manager;
-		var hprop = "__"+r.prop;
-		var hkey = r.key;
-		var lock = r.lock;
-		if( lock == null ) lock = true;
-		if( manager == null || manager.table_keys == null ) throw ("Invalid manager for relation "+table_name+":"+r.prop);
-		if( manager.table_keys.length != 1 ) throw ("Relation "+r.prop+"("+r.key+") on a multiple key table");
-		Reflect.setField(class_proto.prototype,"get_"+r.prop,function() {
-			var othis = untyped __this__;
-			var f = Reflect.field(othis,hprop);
-			if( f != null )
-				return f;
-			var id = Reflect.field(othis,hkey);
-			f = manager.get(id,lock);
-			// it's highly possible that in that case the object has been inserted
-			// after we started our transaction : in that case, let's lock it, since
-			// it's still better than returning 'null' while it exists
-			if( f == null && id != null && !lock )
-				f = manager.get(id,true);
-			Reflect.setField(othis,hprop,f);
-			return f;
-		});
-		Reflect.setField(class_proto.prototype,"set_"+r.prop,function(f) {
-			var othis = untyped __this__;
-			Reflect.setField(othis,hprop,f);
-			Reflect.setField(othis,hkey,Reflect.field(f,manager.table_keys[0]));
-			return f;
-		});
-		// remove prop from precomputed table_fields
-		// always add key to table fields (even if not declared)
-		table_fields.remove(r.prop);
-		table_fields.remove(r.key);
-		table_fields.add(r.key);
-	}
-
-	/* ---------------------------- OBJECT CACHE -------------------------- */
-
-	function makeCacheKey( x : T ) : String {
-		if( table_keys.length == 1 ) {
-			var k = Reflect.field(x,table_keys[0]);
-			if( k == null )
-				throw("Missing key "+table_keys[0]);
-			return Std.string(k)+table_name;
-		}
-		var s = new StringBuf();
-		for( k in table_keys ) {
-			var v = Reflect.field(x,k);
-			if( k == null )
-				throw("Missing key "+k);
-			s.add(v);
-			s.add("#");
-		}
-		s.add(table_name);
-		return s.toString();
-	}
-
-	function addToCache( x : T ) {
-		object_cache.set(makeCacheKey(x),x);
-	}
-
-	function removeFromCache( x : T ) {
-		object_cache.remove(makeCacheKey(x));
-	}
-
-	function getFromCacheKey( key : String ) : T {
-		return cast object_cache.get(key);
-	}
-
-	function getFromCache( x : T, lock : Bool ) : T {
-		var c : Dynamic = object_cache.get(makeCacheKey(x));
-		if( c != null && lock && c.update == no_update ) {
-			// restore update method since now the object is locked
-			c.update = class_proto.prototype.update;
-			// and synchronize the fields since our result is up-to-date !
-			for( f in Reflect.fields(c) )
-				Reflect.deleteField(c,f);
-			for( f in Reflect.fields(x) )
-				Reflect.setField(c,f,Reflect.field(x,f));
-			// use the new object as our cache of fields
-			Reflect.setField(c,cache_field,x);
-			// remake object
-			make(c);
-		}
-		return c;
-	}
-
-}
-
-#end

+ 0 - 231
std/neko/db/Mysql.hx

@@ -1,231 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package neko.db;
-#if old_spod
-
-import neko.db.Connection;
-
-private class D {
-
-	static function load(fun,args) : Dynamic {
-		return neko.Lib.load(lib,fun,args);
-	}
-
-	static var lib = try { neko.Lib.load("mysql5","connect",1); "mysql5"; } catch( e : Dynamic ) "mysql";
-	public static var connect = load("connect",1);
-	public static var select_db = load("select_db",2);
-	public static var request = load("request",2);
-	public static var close = load("close",1);
-	public static var escape = load("escape",2);
-	public static var result_get_length = load("result_get_length",1);
-	public static var result_get_nfields = load("result_get_nfields",1);
-	public static var result_next = load("result_next",1);
-	public static var result_get = load("result_get",2);
-	public static var result_get_int = load("result_get_int",2);
-	public static var result_get_float = load("result_get_float",2);
-	public static var result_set_conv_date = load("result_set_conv_date",2);
-	public static var result_fields_names = neko.Lib.loadLazy(lib,"result_get_fields_names",1);
-
-}
-
-private class MysqlResultSet implements ResultSet {
-
-	public var length(get,null) : Int;
-	public var nfields(get,null) : Int;
-	private var __r : Dynamic;
-	private var cache : Dynamic;
-
-	public function new(r) {
-		__r = r;
-	}
-
-	private function get_length() {
-		return D.result_get_length(__r);
-	}
-
-	private function get_nfields() {
-		return D.result_get_nfields(__r);
-	}
-
-	public function hasNext() {
-		if( cache == null )
-			cache = next();
-		return (cache != null);
-	}
-
-	public function next() : Dynamic {
-		var c = cache;
-		if( c != null ) {
-			cache = null;
-			return c;
-		}
-		c = D.result_next(__r);
-		if( c == null )
-			return null;
-		untyped {
-			var f = __dollar__objfields(c);
-			var i = 0;
-			var l = __dollar__asize(f);
-			while( i < l ) {
-				var v = __dollar__objget(c,f[i]);
-				if( __dollar__typeof(v) == __dollar__tstring )
-					__dollar__objset(c,f[i],new String(v));
-				i = i + 1;
-			}
-		}
-		return c;
-	}
-
-	public function results() : List<Dynamic> {
-		var l = new List();
-		while( hasNext() )
-			l.add(next());
-		return l;
-	}
-
-	public function getResult( n : Int ) {
-		return new String(D.result_get(__r,n));
-	}
-
-	public function getIntResult( n : Int ) : Int {
-		return D.result_get_int(__r,n);
-	}
-
-	public function getFloatResult( n : Int ) : Float {
-		return D.result_get_float(__r,n);
-	}
-
-	public function getFieldsNames() : Array<String> {
-		var a = D.result_fields_names(__r);
-		untyped {
-			var i = 0;
-			var l = __dollar__asize(a);
-			while( i < l ) {
-				a[i] = new String(a[i]);
-				i += 1;
-			}
-			a = Array.new1(cast a,l);
-		}
-		return a;
-	}
-
-}
-
-private class MysqlConnection implements Connection {
-
-	private var __c : Dynamic;
-
-	public function new(c) {
-		__c = c;
-	}
-
-	public function request( s : String ) : ResultSet {
-		try {
-			var r = D.request(this.__c,untyped s.__s);
-			D.result_set_conv_date(r,function(d) { return untyped Date.new1(d); });
-			return new MysqlResultSet(r);
-		} catch( e : Dynamic ) {
-			untyped if( __dollar__typeof(e) == __dollar__tobject && __dollar__typeof(e.msg) == __dollar__tstring )
-				e = e.msg;
-			untyped __dollar__rethrow(e);
-			return null;
-		}
-	}
-
-	public function close() {
-		D.close(__c);
-	}
-
-	public function escape( s : String ) {
-		return new String(D.escape(__c,untyped s.__s));
-	}
-
-	public function quote( s : String ) {
-		return "'"+escape(s)+"'";
-	}
-
-	public function addValue( s : StringBuf, v : Dynamic ) {
-		var t = untyped __dollar__typeof(v);
-		if( untyped (t == __dollar__tint || t == __dollar__tnull) )
-			s.add(v);
-		else if( untyped t == __dollar__tbool )
-			s.addChar(if( v ) "1".code else "0".code);
-		else {
-			s.addChar("'".code);
-			s.add(escape(Std.string(v)));
-			s.addChar("'".code);
-		}
-	}
-
-	public function lastInsertId() {
-		return request("SELECT LAST_INSERT_ID()").getIntResult(0);
-	}
-
-	public function dbName() {
-		return "MySQL";
-	}
-
-	public function startTransaction() {
-		request("START TRANSACTION");
-	}
-
-	public function commit() {
-		request("COMMIT");
-	}
-
-	public function rollback() {
-		request("ROLLBACK");
-	}
-
-	private static var __use_date = Date;
-}
-
-class Mysql {
-
-	public static function connect( params : {
-		host : String,
-		port : Int,
-		user : String,
-		pass : String,
-		socket : String,
-		database : String
-	} ) : neko.db.Connection {
-		var o = untyped {
-			host : params.host.__s,
-			port : params.port,
-			user : params.user.__s,
-			pass : params.pass.__s,
-			socket : if( params.socket == null ) null else params.socket.__s
-		};
-		var c = D.connect(o);
-		try {
-			D.select_db(c,untyped params.database.__s);
-		} catch( e : Dynamic ) {
-			D.close(c);
-			neko.Lib.rethrow(e);
-		}
-		return new MysqlConnection(c);
-	}
-
-}
-
-#end

+ 0 - 81
std/neko/db/Object.hx

@@ -1,81 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package neko.db;
-
-/**
-	Record Object : the persistent object base type. See the tutorial on haXe
-	website to learn how to use Record.
-**/
-#if old_spod
-
-#if spod-rtti
-@:rtti
-#end
-class Object {
-
-/*
-	(optional)
-	static var TABLE_NAME = "TableName";
-	static var TABLE_IDS = ["id"];
-	static var PRIVATE_FIELDS = ["my_priv_field"];
-	static function RELATIONS() {
-		return [{ key : "uid", prop : "user", manager : User.manager }];
-	}
-
-	static var manager = new neko.db.Manager();
-*/
-
-	var local_manager : {
-		private function doUpdate( o : Object ) : Void;
-		private function doInsert( o : Object ) : Void;
-		private function doSync( o : Object ) : Void;
-		private function doDelete( o : Object ) : Void;
-		private function objectToString( o : Object ) : String;
-	};
-
-
-	public function new() {
-	}
-
-	public function insert() {
-		local_manager.doInsert(this);
-	}
-
-	public dynamic function update() {
-		local_manager.doUpdate(this);
-	}
-
-	public function sync() {
-		local_manager.doSync(this);
-	}
-
-	public function delete() {
-		local_manager.doDelete(this);
-	}
-
-	public function toString() {
-		return local_manager.objectToString(this);
-	}
-
-}
-
-#end

+ 0 - 26
std/neko/db/ResultSet.hx

@@ -1,26 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package neko.db;
-
-#if old_spod
-typedef ResultSet = sys.db.ResultSet;
-#end

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

@@ -1,206 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package neko.db;
-
-#if old_spod
-import neko.db.Connection;
-#else
-import sys.db.Connection;
-import sys.db.ResultSet;
-#end
-
-private class SqliteConnection implements Connection {
-
-	var c : Dynamic;
-
-	public function new( file : String ) {
-		c = _connect(untyped file.__s);
-	}
-
-	public function close() {
-		_close(c);
-	}
-
-	public function request( s : String ) : ResultSet {
-		try {
-			return new SqliteResultSet(_request(c,untyped s.__s));
-		} catch( e : String ) {
-			throw "Error while executing "+s+" ("+e+")";
-		}
-	}
-
-	public function escape( s : String ) {
-		return s.split("'").join("''");
-	}
-
-	public function quote( s : String ) {
-		if( s.indexOf("\000") >= 0 )
-			return "x'"+new String(untyped _encode(s.__s,"0123456789ABCDEF".__s))+"'";
-		return "'"+s.split("'").join("''")+"'";
-	}
-
-	public function addValue( s : StringBuf, v : Dynamic ) {
-		var t = untyped __dollar__typeof(v);
-		if( untyped (t == __dollar__tint || t == __dollar__tnull) )
-			s.add(v);
-		else if( untyped t == __dollar__tbool )
-			s.add(if( v ) 1 else 0);
-		else
-			s.add(quote(Std.string(v)));
-	}
-
-	public function lastInsertId() {
-		return _last_id(c);
-	}
-
-	public function dbName() {
-		return "SQLite";
-	}
-
-	public function startTransaction() {
-		request("BEGIN TRANSACTION");
-	}
-
-	public function commit() {
-		request("COMMIT");
-		startTransaction(); // match mysql usage
-	}
-
-	public function rollback() {
-		request("ROLLBACK");
-		startTransaction(); // match mysql usage
-	}
-
-	static var _encode = neko.Lib.load("std","base_encode",2);
-	static var _connect = neko.Lib.load("sqlite","connect",1);
-	static var _close = neko.Lib.load("sqlite","close",1);
-	static var _request = neko.Lib.load("sqlite","request",2);
-	static var _last_id = neko.Lib.load("sqlite","last_insert_id",1);
-}
-
-
-private class SqliteResultSet implements ResultSet {
-
-	public var length(get,null) : Int;
-	public var nfields(get,null) : Int;
-	var r : Dynamic;
-	var cache : List<Dynamic>;
-
-	public function new( r ) {
-		cache = new List();
-		this.r = r;
-		hasNext(); // execute the request
-	}
-
-	function get_length() {
-		if( nfields != 0 ) {
-			while( true ) {
-				var c = doNext();
-				if( c == null )
-					break;
-				cache.add(c);
-			}
-			return cache.length;
-		}
-		return result_get_length(r);
-	}
-
-	function get_nfields() {
-		return result_get_nfields(r);
-	}
-
-	public function hasNext() {
-		var c = next();
-		if( c == null )
-			return false;
-		cache.push(c);
-		return true;
-	}
-
-	public function next() : Dynamic {
-		var c = cache.pop();
-		if( c != null )
-			return c;
-		return doNext();
-	}
-
-	private function doNext() : Dynamic {
-		var c = result_next(r);
-		if( c == null )
-			return null;
-		untyped {
-			var f = __dollar__objfields(c);
-			var i = 0;
-			var l = __dollar__asize(f);
-			while( i < l ) {
-				var v = __dollar__objget(c,f[i]);
-				if( __dollar__typeof(v) == __dollar__tstring )
-					__dollar__objset(c,f[i],new String(v));
-				i = i + 1;
-			}
-		}
-		return c;
-	}
-
-	public function results() : List<Dynamic> {
-		var l = new List();
-		while( true ) {
-			var c = next();
-			if( c == null )
-				break;
-			l.add(c);
-		}
-		return l;
-	}
-
-	public function getResult( n : Int ) {
-		return new String(result_get(r,n));
-	}
-
-	public function getIntResult( n : Int ) : Int {
-		return result_get_int(r,n);
-	}
-
-	public function getFloatResult( n : Int ) : Float {
-		return result_get_float(r,n);
-	}
-
-	public function getFieldsNames() : Array<String> {
-		return null;
-	}
-
-	static var result_next = neko.Lib.load("sqlite","result_next",1);
-	static var result_get_length = neko.Lib.load("sqlite","result_get_length",1);
-	static var result_get_nfields = neko.Lib.load("sqlite","result_get_nfields",1);
-	static var result_get = neko.Lib.load("sqlite","result_get",2);
-	static var result_get_int = neko.Lib.load("sqlite","result_get_int",2);
-	static var result_get_float = neko.Lib.load("sqlite","result_get_float",2);
-
-}
-
-class Sqlite {
-
-	public static function open( file : String ) : Connection {
-		return new SqliteConnection(file);
-	}
-
-}

+ 0 - 68
std/neko/db/Transaction.hx

@@ -1,68 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package neko.db;
-#if old_spod
-
-class Transaction {
-
-	public static function isDeadlock(e : Dynamic) {
-		return Std.is(e,String) && (~/Deadlock found/.match(e) || ~/Lock wait timeout/.match(e));
-	}
-
-	private static function runMainLoop(mainFun,logError,count) {
-		try {
-			mainFun();
-		} catch( e : Dynamic ) {
-			if( count > 0 && isDeadlock(e) ) {
-				Manager.cleanup();
-				Manager.cnx.rollback(); // should be already done, but in case...
-				Manager.cnx.startTransaction();
-				runMainLoop(mainFun,logError,count-1);
-				return;
-			}
-			if( logError == null ) {
-				Manager.cnx.rollback();
-				neko.Lib.rethrow(e);
-			}
-			logError(e); // should ROLLBACK if needed
-		}
-	}
-
-	public static function main( cnx, mainFun : Void -> Void, logError : Dynamic -> Void ) {
-		Manager.initialize();
-		Manager.cnx = cnx;
-		Manager.cnx.startTransaction();
-		runMainLoop(mainFun,logError,3);
-		try {
-			Manager.cnx.commit();
-		} catch( e : String ) {
-			// sqlite can have errors on commit
-			if( ~/Database is busy/.match(e) )
-				logError(e);
-		}
-		Manager.cnx.close();
-		Manager.cnx = null;
-		Manager.cleanup();
-	}
-
-}
-#end

+ 0 - 26
std/php/db/Connection.hx

@@ -1,26 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package php.db;
-
-#if old_spod
-typedef Connection = sys.db.Connection;
-#end

+ 0 - 504
std/php/db/Manager.hx

@@ -1,504 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package php.db;
-
-#if !old_spod
-
-#else
-
-import Reflect;
-import php.db.Connection;
-
-/**
-	Record Manager : the persistent object database manager. See the tutorial on
-	haXe website to learn how to use Record.
-**/
-class Manager<T : Object> {
-
-	/* ----------------------------- STATICS ------------------------------ */
-	public static var cnx(default,set) : Connection;
-	private static var object_cache : haxe.ds.StringMap<Object> = new haxe.ds.StringMap();
-	private static var cache_field = "__cache__";
-	private static var FOR_UPDATE = "";
-
-	public static var managers = new haxe.ds.StringMap<Manager<Dynamic>>();
-
-	private static dynamic function set_cnx( c : Connection ) {
-		Reflect.setField(Manager,"cnx",c);
-		if( c != null )
-			FOR_UPDATE = if( c.dbName() == "MySQL" ) " FOR UPDATE" else "";
-		return c;
-	}
-
-	/* ---------------------------- BASIC API ----------------------------- */
-	var table_name : String;
-	var table_fields : List<String>;
-	var table_keys : Array<String>;
-	var cls : Dynamic; //Class<php.db.Object>;
-
-	public function new( classval : Class<php.db.Object> ) {
-		cls = classval;
-		var clname = Type.getClassName(cls);
-		// get basic infos
-		table_name = quoteField((cls.TABLE_NAME != null ) ? cls.TABLE_NAME : clname.split('.').pop());
-		table_keys = if( cls.TABLE_IDS != null ) cls.TABLE_IDS else ["id"];
-
-		// get the list of private fields
-		var apriv : Array<String> = cls.PRIVATE_FIELDS;
-		apriv = if( apriv == null ) new Array() else apriv.copy();
-		apriv.push("__cache__");
-		apriv.push("__noupdate__");
-		apriv.push("__manager__");
-		apriv.push("update");
-
-		// get the proto fields not marked private (excluding methods)
-		table_fields = new List();
-		var stub = Type.createEmptyInstance(cls);
-
-		var instance_fields = Type.getInstanceFields(cls);
-		var scls = Type.getSuperClass(cls);
-		while(scls != null) {
-			for(remove in Type.getInstanceFields(scls))
-				instance_fields.remove(remove);
-			scls = Type.getSuperClass(scls);
-		}
-
-		for( f in instance_fields ) {
-			var isfield = !Reflect.isFunction(Reflect.field(stub,f));
-			if( isfield )
-				for( f2 in apriv ) {
-					if(f == f2 ) {
-						isfield = false;
-						break;
-					}
-				}
-			if( isfield ) {
-				table_fields.add(f);
-			}
-		}
-
-		// set the manager and ready for further init
-		managers.set(clname, this);
-
-		var rl : Array<Dynamic>;
-		try {
-		  rl = untyped cls.RELATIONS();
-		} catch(e : Dynamic) { return; }
-		for(r in rl) {
-			// remove prop from precomputed table_fields
-			// always add key to table fields (even if not declared)
-			table_fields.remove(r.prop);
-			table_fields.remove("get_" + r.prop);
-			table_fields.remove("set_" + r.prop);
-			table_fields.remove(r.key);
-			table_fields.add(r.key);
-		}
-	}
-
-	public function get( id : Int, ?lock : Bool ) : T {
-		if( lock == null )
-			lock = true;
-		if( table_keys.length != 1 )
-			throw "Invalid number of keys";
-		if( id == null )
-			return null;
-		var x : Dynamic = untyped object_cache.get(id + table_name);
-		if( x != null && (!lock || !x.__noupdate__) )
-			return x;
-		var s = new StringBuf();
-		s.add("SELECT * FROM ");
-		s.add(table_name);
-		s.add(" WHERE ");
-		s.add(quoteField(table_keys[0]));
-		s.add(" = ");
-		cnx.addValue(s,id);
-		if( lock )
-			s.add(FOR_UPDATE);
-		return object(s.toString(),lock);
-	}
-
-	public function getWithKeys( keys : {}, ?lock : Bool ) : T {
-		if( lock == null )
-			lock = true;
-		var x : Dynamic = getFromCache(untyped keys,false);
-		if( x != null && (!lock || !x.__noupdate__) )
-			return x;
-		var s = new StringBuf();
-		s.add("SELECT * FROM ");
-		s.add(table_name);
-		s.add(" WHERE ");
-		addKeys(s,keys);
-		if( lock )
-			s.add(FOR_UPDATE);
-		return object(s.toString(),lock);
-	}
-
-	public function delete( x : {} ) {
-		var s = new StringBuf();
-		s.add("DELETE FROM ");
-		s.add(table_name);
-		s.add(" WHERE ");
-		addCondition(s,x);
-		execute(s.toString());
-	}
-
-	public function search( x : {}, ?lock : Bool ) : List<T> {
-		if( lock == null )
-			lock = true;
-		var s = new StringBuf();
-		s.add("SELECT * FROM ");
-		s.add(table_name);
-		s.add(" WHERE ");
-		addCondition(s,x);
-		if( lock )
-			s.add(FOR_UPDATE);
-		return objects(s.toString(),lock);
-	}
-
-	function addCondition(s : StringBuf,x) {
-		var first = true;
-		if( x != null )
-			for( f in Reflect.fields(x) ) {
-				if( first )
-					first = false;
-				else
-					s.add(" AND ");
-				s.add(quoteField(f));
-				var d = Reflect.field(x,f);
-				if( d == null )
-					s.add(" IS NULL");
-				else {
-					s.add(" = ");
-					cnx.addValue(s,d);
-				}
-			}
-		if( first )
-			s.add("1");
-	}
-
-	public function all( ?lock: Bool ) : List<T> {
-		if( lock == null )
-			lock = true;
-		return objects("SELECT * FROM " + table_name + if( lock ) FOR_UPDATE else "",lock);
-	}
-
-	public function count( ?x : {} ) : Int {
-		var s = new StringBuf();
-		s.add("SELECT COUNT(*) FROM ");
-		s.add(table_name);
-		s.add(" WHERE ");
-		addCondition(s,x);
-		return execute(s.toString()).getIntResult(0);
-	}
-
-	public function quote( s : String ) : String {
-		return cnx.quote( s );
-	}
-
-	public function result( sql : String ) : Dynamic {
-		return cnx.request(sql).next();
-	}
-
-	public function results<T>( sql : String ) : List<T> {
-		return cast cnx.request(sql).results();
-	}
-
-	/* -------------------------- RECORDOBJECT API -------------------------- */
-
-	function doInsert( x : T ) {
-		unmake(x);
-		var s = new StringBuf();
-		var fields = new List();
-		var values = new List();
-		for( f in table_fields ) {
-			var v = Reflect.field(x,f);
-			if( v != null ) {
-				fields.add(quoteField(f));
-				values.add(v);
-			}
-		}
-		s.add("INSERT INTO ");
-		s.add(table_name);
-		s.add(" (");
-		s.add(fields.join(","));
-		s.add(") VALUES (");
-		var first = true;
-		for( v in values ) {
-			if( first )
-				first = false;
-			else
-				s.add(", ");
-			cnx.addValue(s,v);
-		}
-		s.add(")");
-		execute(s.toString());
-		// table with one key not defined : suppose autoincrement
-		if( table_keys.length == 1 && Reflect.field(x,table_keys[0]) == null )
-			Reflect.setField(x,table_keys[0],cnx.lastInsertId());
-		addToCache(x);
-	}
-
-	function doUpdate( x : T ) {
-		unmake(x);
-		var s = new StringBuf();
-		s.add("UPDATE ");
-		s.add(table_name);
-		s.add(" SET ");
-		var cache = Reflect.field(x, cache_field);
-		if (null == cache)
-		{
-			cache = cacheObject(x, false);
-			Reflect.setField(x, cache_field, cache);
-		}
-		var mod = false;
-		for( f in table_fields ) {
-			var v = Reflect.field(x,f);
-			var vc = Reflect.field(cache,f);
-			if( v != vc ) {
-				if( mod )
-					s.add(", ");
-				else
-					mod = true;
-				s.add(quoteField(f));
-				s.add(" = ");
-				cnx.addValue(s,v);
-				Reflect.setField(cache,f,v);
-			}
-		}
-		if( !mod )
-			return;
-		s.add(" WHERE ");
-		addKeys(s,x);
-		execute(s.toString());
-	}
-
-	function doDelete( x : T ) {
-		var s = new StringBuf();
-		s.add("DELETE FROM ");
-		s.add(table_name);
-		s.add(" WHERE ");
-		addKeys(s,x);
-		execute(s.toString());
-	}
-
-
-	function doSync( i : T ) {
-		object_cache.remove(makeCacheKey(i));
-		var i2 = getWithKeys(i, untyped !i.__noupdate__);
-		// delete all fields
-		for( f in Reflect.fields(i) )
-			Reflect.deleteField(i,f);
-		// copy fields from new object
-		for( f in Reflect.fields(i2) )
-			Reflect.setField(i,f,Reflect.field(i2,f));
-		// set same field-cache
-		Reflect.setField(i,cache_field,Reflect.field(i2,cache_field));
-		addToCache(i);
-	}
-
-	function objectToString( it : T ) : String {
-		var s = new StringBuf();
-		s.add(table_name);
-		if( table_keys.length == 1 ) {
-			s.add("#");
-			s.add(Reflect.field(it,table_keys[0]));
-		} else {
-			s.add("(");
-			var first = true;
-			for( f in table_keys ) {
-				if( first )
-					first = false;
-				else
-					s.add(",");
-				s.add(quoteField(f));
-				s.add(":");
-				s.add(Reflect.field(it,f));
-			}
-			s.add(")");
-		}
-		return s.toString();
-	}
-
-	/* ---------------------------- INTERNAL API -------------------------- */
-
-	function cacheObject( x : T, lock : Bool ) {
-		var o : T = Type.createEmptyInstance(cls);
-		for(field in Reflect.fields(x)) {
-			Reflect.setField(o, field, Reflect.field(x, field));
-		}
-		untyped o.__init_object();
-		addToCache(o);
-		Reflect.setField(o, cache_field, Type.createEmptyInstance(cls));
-		if( !lock )
-			untyped o.__noupdate__ = true;
-		return o;
-	}
-
-	function make( x : T ) {
-	}
-
-	function unmake( x : T ) {
-	}
-
-	function quoteField(f : String) {
-		var fsmall = f.toLowerCase();
-		if( fsmall == "read" || fsmall == "desc" || fsmall == "out" || fsmall == "group" || fsmall == "version" || fsmall == "option" )
-			return "`"+f+"`";
-		return f;
-	}
-
-	function addKeys( s : StringBuf, x : {} ) {
-		var first = true;
-		for( k in table_keys ) {
-			if( first )
-				first = false;
-			else
-				s.add(" AND ");
-			s.add(quoteField(k));
-			s.add(" = ");
-			var f = Reflect.field(x,k);
-			if( f == null )
-				throw ("Missing key "+k);
-			cnx.addValue(s,f);
-		}
-	}
-
-	function execute( sql : String ) {
-		return cnx.request(sql);
-	}
-
-	function select( cond : String ) {
-		var s = new StringBuf();
-		s.add("SELECT * FROM ");
-		s.add(table_name);
-		s.add(" WHERE ");
-		s.add(cond);
-		s.add(FOR_UPDATE);
-		return s.toString();
-	}
-
-	function selectReadOnly( cond : String ) {
-		var s = new StringBuf();
-		s.add("SELECT * FROM ");
-		s.add(table_name);
-		s.add(" WHERE ");
-		s.add(cond);
-		return s.toString();
-	}
-
-	public function object( sql : String, lock : Bool ) : T {
-		var r = cnx.request(sql).next();
-		if( r == null )
-			return null;
-		var c = getFromCache(r,lock);
-		if( c != null )
-			return c;
-		var o = cacheObject(r,lock);
-		make(o);
-		return o;
-	}
-
-	public function objects( sql : String, lock : Bool ) : List<T> {
-		var me = this;
-		var l = cnx.request(sql).results();
-		var l2 = new List<T>();
-		for( x in l ) {
-			var c = getFromCache(x,lock);
-			if( c != null ) {
-				l2.add(c);
-			} else {
-				var o = cacheObject(x,lock);
-				make(o);
-				l2.add(o);
-			}
-		}
-		return l2;
-	}
-
-	public function dbClass() : Class<Dynamic> {
-		return cls;
-	}
-
-	/* --------------------------- INIT / CLEANUP ------------------------- */
-
-	/**
-	* Left for compability with neko Record
-	*/
-	public static function initialize() {
-
-	}
-
-	public static function cleanup() {
-		object_cache = new haxe.ds.StringMap();
-	}
-
-	function initRelation(o : Dynamic, r : { prop : String, key : String, manager : Manager<Object>, lock : Bool } ) {
-		// setup getter/setter
-		var manager = r.manager;
-		var hkey = r.key;
-		var lock = r.lock;
-		if( lock == null ) lock = true;
-		if( manager == null || manager.table_keys == null ) throw ("Invalid manager for relation "+table_name+":"+r.prop);
-		if( manager.table_keys.length != 1 ) throw ("Relation "+r.prop+"("+r.key+") on a multiple key table");
-		Reflect.setField(o,"get_"+r.prop,function() {
-			return manager.get(Reflect.field(o,hkey), lock);
-		});
-		Reflect.setField(o,"set_"+r.prop,function(f) {
-			Reflect.setField(o, hkey, Reflect.field(f, manager.table_keys[0]));
-			return f;
-		});
-	}
-
-	/* ---------------------------- OBJECT CACHE -------------------------- */
-
-	function makeCacheKey( x : T ) : String {
-		if( table_keys.length == 1 ) {
-			var k = Reflect.field(x,table_keys[0]);
-			if( k == null )
-				throw("Missing key "+table_keys[0]);
-			return Std.string(k)+table_name;
-		}
-		var s = new StringBuf();
-		for( k in table_keys ) {
-			var v = Reflect.field(x,k);
-			if( k == null )
-				throw("Missing key "+k);
-			s.add(v);
-			s.add("#");
-		}
-		s.add(table_name);
-		return s.toString();
-	}
-
-	function addToCache( x : T ) {
-		object_cache.set(makeCacheKey(x),x);
-	}
-
-	function getFromCache( x : T, lock : Bool ) : T {
-		var c : Dynamic = object_cache.get(makeCacheKey(x));
-		// restore update method since now the object is locked
-		if( c != null && lock && c.__noupdate__)
-			c.__noupdate__ = false;
-		return c;
-	}
-}
-#end

+ 0 - 223
std/php/db/Mysql.hx

@@ -1,223 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package php.db;
-
-#if old_spod
-import php.db.Connection;
-#else
-import sys.db.Connection;
-import sys.db.ResultSet;
-#end
-
-private class MysqlConnection implements Connection {
-
-	var c : Dynamic;
-
-	public function new( c : Dynamic ) {
-		this.c = c;
-	}
-
-	public function close() {
-		untyped __call__("mysql_close", c);
-		untyped __call__("unset", c);
-	}
-
-	public function request( s : String ) : ResultSet {
-		var h = untyped __call__("mysql_query", s, c);
-		if(untyped __physeq__(h, false))
-			throw "Error while executing "+s+" ("+untyped __call__("mysql_error", c)+")";
-		return new MysqlResultSet(cast h, cast c);
-	}
-
-	public function escape( s : String ) {
-		return untyped __call__("mysql_real_escape_string", s, c);
-	}
-
-	public function quote( s : String ) {
-		return "'" + untyped __call__("mysql_real_escape_string", s, c) + "'";
-	}
-
-	public function addValue( s : StringBuf, v : Dynamic ) {
-		if( untyped __call__("is_int", v) || __call__("is_null", v))
-			s.add(v);
-		else if( untyped __call__("is_bool", v) )
-			s.add(if( v ) 1 else 0);
-		else
-			s.add(quote(Std.string(v)));
-	}
-
-	public function lastInsertId() {
-		return untyped __call__("mysql_insert_id", c);
-	}
-
-	public function dbName() {
-		return "MySQL";
-	}
-
-	public function startTransaction() {
-		request("START TRANSACTION");
-	}
-
-	public function commit() {
-		request("COMMIT");
-	}
-
-	public function rollback() {
-		request("ROLLBACK");
-	}
-}
-
-
-private class MysqlResultSet implements ResultSet {
-	public var length(get,null) : Int;
-	public var nfields(get,null) : Int;
-	private var __r : Dynamic;
-	private var __c : Dynamic;
-	private var cache : Dynamic;
-
-	public function new(r, c) {
-		__r = r;
-		__c = c;
-	}
-
-	private function get_length() {
-		if(untyped __physeq__(__r, true))
-			return untyped __call__("mysql_affected_rows", __c);
-		else if (untyped __physeq__(__r, false))
-			return 0;
-		return untyped __call__("mysql_num_rows", __r);
-	}
-
-	private var _nfields : Int;
-	private function get_nfields() {
-		if(_nfields == null)
-			_nfields = untyped __call__("mysql_num_fields", __r);
-		return _nfields;
-	}
-
-	private var _fieldsDesc : Array<Dynamic>;
-	private function getFieldsDescription() {
-		if(_fieldsDesc == null) {
-			_fieldsDesc = [];
-			for (i in 0...nfields) {
-				var item = {
-					name : untyped __call__("mysql_field_name", __r, i),
-					type : untyped __call__("mysql_field_type", __r, i)
-				};
-				_fieldsDesc.push(item);
-			}
-		}
-		return _fieldsDesc;
-	}
-
-	private function convert(v : Dynamic, type : String) : Dynamic {
-		if (v == null) return v;
-		switch(type) {
-			case "int", "year":
-				return untyped __call__("intval", v);
-			case "real":
-				return untyped __call__("floatval", v);
-			case "datetime", "date":
-				return Date.fromString(v);
-			default:
-				return v;
-		}
-	}
-
-	public function hasNext() {
-		if( cache == null )
-			cache = next();
-		return (cache != null);
-	}
-
-	private var cRow : ArrayAccess<String>;
-	private function fetchRow() : Bool {
-		cRow = untyped __call__("mysql_fetch_array", __r, __php__("MYSQL_NUM"));
-		return ! untyped __physeq__(cRow, false);
-	}
-
-	public function next() : Dynamic {
-		if( cache != null ) {
-			var t = cache;
-			cache = null;
-			return t;
-		}
-		if(!fetchRow()) return null;
-
-		var o : Dynamic = {};
-		var descriptions = getFieldsDescription();
-		for(i in 0...nfields)
-			Reflect.setField(o, descriptions[i].name, convert(cRow[i], descriptions[i].type));
-		return o;
-	}
-
-	public function results() : List<Dynamic> {
-		var l = new List();
-		while( hasNext() )
-			l.add(next());
-		return l;
-	}
-
-	public function getResult( n : Int ) : String {
-		if(cRow == null)
-			if(!fetchRow())
-				return null;
-		return cRow[n];
-	}
-
-	public function getIntResult( n : Int ) : Int {
-		return untyped __call__("intval", getResult(n));
-	}
-
-	public function getFloatResult( n : Int ) : Float {
-		return untyped __call__("floatval", getResult(n));
-	}
-
-	public function getFieldsNames() : Array<String> {
-		var fields = [];
-		for( i in 0...nfields )
-			fields.push(untyped __call__("mysql_field_name", __r, i));
-		return fields;
-	}
-
-}
-
-class Mysql {
-
-	public static function connect( params : {
-		host : String,
-		port : Int,
-		user : String,
-		pass : String,
-		socket : String,
-		database : String
-	} ) : Connection {
-		var c = untyped __call__("mysql_connect",
-			params.host + (params.port == null ? '' : ':'+params.port) + (params.socket == null ? '' : ':'+params.socket),
-			params.user,
-			params.pass);
-		if(!untyped __call__("mysql_select_db", params.database, c))
-			throw "Unable to connect to " + params.database;
-		return new MysqlConnection(c);
-	}
-
-}

+ 0 - 93
std/php/db/Object.hx

@@ -1,93 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package php.db;
-
-/**
-	Record Object : the persistent object base type. See the tutorial on haXe
-	website to learn how to use Record.
-**/
-#if old_spod
-#if spod_rtti
-@:rtti
-#end
-class Object {
-
-/*
-	(optional)
-	static var TABLE_NAME = "TableName";
-	static var TABLE_IDS = ["id"];
-	static var PRIVATE_FIELDS = ["my_priv_field"];
-	static function RELATIONS() {
-		return [{ key : "uid", prop : "user", manager : User.manager }];
-	}
-
-	static var manager = new php.db.Manager();
-*/
-
-	var __cache__ : Object;
-	var __noupdate__ : Bool;
-	var __manager__ : {
-		private function doUpdate( o : Object ) : Void;
-		private function doInsert( o : Object ) : Void;
-		private function doSync( o : Object ) : Void;
-		private function doDelete( o : Object ) : Void;
-		private function objectToString( o : Object ) : String;
-	};
-
-	public function new() {
-		__init_object();
-	}
-
-	private function __init_object() {
-		__noupdate__ = false;
-		__manager__ = Manager.managers.get(Type.getClassName(Type.getClass(this)));
-		var rl : Array<Dynamic>;
-		try {
-			rl = untyped __manager__.cls.RELATIONS();
-		} catch(e : Dynamic) { return; }
-		for(r in rl)
-			untyped __manager__.initRelation(this, r);
-	}
-
-	public function insert() {
-		__manager__.doInsert(this);
-	}
-
-	public function update() {
-		if( __noupdate__ ) throw "Cannot update not locked object";
-		__manager__.doUpdate(this);
-	}
-
-	public function sync() {
-		__manager__.doSync(this);
-	}
-
-	public function delete() {
-		__manager__.doDelete(this);
-	}
-
-	public function toString() {
-		return __manager__.objectToString(this);
-	}
-
-}
-#end

+ 0 - 2
std/php/db/PDO.hx

@@ -23,10 +23,8 @@ package php.db;
 
 
 import php.NativeArray;
 import php.NativeArray;
 
 
-#if !old_spod
 import sys.db.Connection;
 import sys.db.Connection;
 import sys.db.ResultSet;
 import sys.db.ResultSet;
-#end
 
 
 import php.Lib;
 import php.Lib;
 
 

+ 0 - 26
std/php/db/ResultSet.hx

@@ -1,26 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package php.db;
-
-#if old_spod
-typedef ResultSet = sys.db.ResultSet;
-#end

+ 0 - 185
std/php/db/Sqlite.hx

@@ -1,185 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package php.db;
-
-#if old_spod
-import php.db.Connection;
-#else
-import sys.db.Connection;
-import sys.db.ResultSet;
-#end
-
-private class SqliteConnection implements Connection {
-
-	var c : Dynamic;
-	var e : Dynamic;
-
-	public function new( file : String ) {
-		c = untyped __call__("sqlite_open", file, 0666, e);
-	}
-
-	public function close() {
-		untyped __call__("sqlite_close", c);
-		untyped __call__("unset", c);
-	}
-
-	public function request( s : String ) : ResultSet {
-		var h = untyped __call__("sqlite_query", c, s, __php__("SQLITE_BOTH"), e);
-		if(untyped __physeq__(h, false))
-			throw "Error while executing "+s+" ("+e+")";
-		return new SqliteResultSet(cast h);
-	}
-
-	public function escape( s : String ) {
-		return untyped __call__("sqlite_escape_string", s);
-	}
-
-	public function quote( s : String ) {
-		if( s.indexOf("\000") >= 0 )
-			return "x'"+base16_encode(s)+"'";
-		return "'" + untyped __call__("sqlite_escape_string", s) + "'";
-	}
-
-	public function addValue( s : StringBuf, v : Dynamic ) {
-		if( untyped __call__("is_int", v) || __call__("is_null", v))
-			s.add(v);
-		else if( untyped __call__("is_bool", v) )
-			s.add(if( v ) 1 else 0);
-		else
-			s.add(quote(Std.string(v)));
-	}
-
-	public function lastInsertId() {
-		return untyped __call__("sqlite_last_insert_rowid", c);
-	}
-
-	public function dbName() {
-		return "SQLite";
-	}
-
-	public function startTransaction() {
-		request("BEGIN TRANSACTION");
-	}
-
-	public function commit() {
-		request("COMMIT");
-		startTransaction(); // match mysql usage
-	}
-
-	public function rollback() {
-		request("ROLLBACK");
-		startTransaction(); // match mysql usage
-	}
-
-	function base16_encode(str : String) {
-		str = untyped __call__("unpack", "H"+(2 * str.length), str);
-		str = untyped __call__("chunk_split", untyped str[1]);
-		return str;
-	}
-}
-
-
-private class SqliteResultSet implements ResultSet {
-
-	public var length(get,null) : Int;
-	public var nfields(get,null) : Int;
-	var r : Dynamic;
-	var cache : Dynamic;
-
-	public function new( r ) {
-		this.r = r;
-	}
-
-	private function get_length() {
-		if(untyped __physeq__(r, true))
-			return untyped __call__("sqlite_changes", r);
-		else if (untyped __physeq__(r, false))
-			return 0;
-		return untyped __call__("sqlite_num_rows", r);
-	}
-
-	private var _nfields : Int;
-	private function get_nfields() {
-		if(_nfields == null)
-			_nfields = untyped __call__("sqlite_num_fields", r);
-		return _nfields;
-	}
-
-	public function hasNext() {
-		if( cache == null )
-			cache = next();
-		return (cache != null);
-	}
-
-	private var cRow : ArrayAccess<String>;
-	private function fetchRow() : Bool {
-		cRow = untyped __call__("sqlite_fetch_array", r, __php__("SQLITE_ASSOC"));
-		return ! untyped __physeq__(cRow, false);
-	}
-
-	public function next() : Dynamic {
-		if( cache != null ) {
-			var t = cache;
-			cache = null;
-			return t;
-		}
-		if(!fetchRow()) return null;
-		return untyped __call__("_hx_anonymous", cRow);
-	}
-
-	public function results() : List<Dynamic> {
-		var l = new List();
-		while( true ) {
-			var c = next();
-			if( c == null )
-				break;
-			l.add(c);
-		}
-		return l;
-	}
-
-	public function getResult( n : Int ) : String {
-		if(cRow == null && !fetchRow())
-			return null;
-		return untyped __call__("array_values", cRow)[n];
-	}
-
-	public function getIntResult( n : Int ) : Int {
-		return untyped __call__("intval", getResult(n));
-	}
-
-	public function getFloatResult( n : Int ) : Float {
-		return untyped __call__("floatval", getResult(n));
-	}
-
-	public function getFieldsNames() : Array<String> {
-		return throw "Not implemented";
-	}
-
-}
-
-class Sqlite {
-	public static function open( file : String ) : Connection {
-		return new SqliteConnection(file);
-	}
-
-}

+ 0 - 68
std/php/db/Transaction.hx

@@ -1,68 +0,0 @@
-/*
- * Copyright (C)2005-2012 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-package php.db;
-
-#if old_spod
-class Transaction {
-
-	public static function isDeadlock(e : Dynamic) {
-		return Std.is(e,String) && (~/Deadlock found/.match(e) || ~/Lock wait timeout/.match(e));
-	}
-
-	private static function runMainLoop(mainFun,logError,count) {
-		try {
-			mainFun();
-		} catch( e : Dynamic ) {
-			if( count > 0 && isDeadlock(e) ) {
-				Manager.cleanup();
-				Manager.cnx.rollback(); // should be already done, but in case...
-				Manager.cnx.startTransaction();
-				runMainLoop(mainFun,logError,count-1);
-				return;
-			}
-			if( logError == null ) {
-				Manager.cnx.rollback();
-				throw e;
-			}
-			logError(e); // should ROLLBACK if needed
-		}
-	}
-
-	public static function main( cnx, mainFun : Void -> Void, logError : Dynamic -> Void ) {
-		Manager.initialize();
-		Manager.cnx = cnx;
-		Manager.cnx.startTransaction();
-		runMainLoop(mainFun,logError,3);
-		try {
-			Manager.cnx.commit();
-		} catch( e : String ) {
-			// sqlite can have errors on commit
-			if( ~/Database is busy/.match(e) )
-				logError(e);
-		}
-		Manager.cnx.close();
-		Manager.cnx = null;
-		Manager.cleanup();
-	}
-
-}
-#end