瀏覽代碼

In doUpdate, if cache is null, update all fields

Fixes glitch where:

- existing record has non-null value
- you have a sys.db.Object with no cache (created manually, via remoting etc)
- set the value to null, try to update
- previous value remains.

Please note the private method isBinary() is now no longer used and could
be removed, though it may be useful in future.

(Cache could be null if loaded from )
Jason O'Neil 11 年之前
父節點
當前提交
d896600aa2
共有 1 個文件被更改,包括 6 次插入2 次删除
  1. 6 2
      std/sys/db/Manager.hx

+ 6 - 2
std/sys/db/Manager.hx

@@ -205,8 +205,11 @@ class Manager<T : Object> {
 			var name = f.name;
 			var v : Dynamic = Reflect.field(x,name);
 			var vc : Dynamic = Reflect.field(cache,name);
-			if( v != vc && (!isBinary(f.t) || hasBinaryChanged(v,vc)) ) {
+			if( cache == null || v != vc ) {
 				switch( f.t ) {
+				case DSmallBinary, DNekoSerialized, DLongBinary, DBytes(_), DBinary: 
+					if ( hasBinaryChanged(v,vc) )
+						continue;
 				case DData:
 					v = doUpdateCache(x, name, v);
 					if( !hasBinaryChanged(v,vc) )
@@ -220,7 +223,8 @@ class Manager<T : Object> {
 				s.add(quoteField(name));
 				s.add(" = ");
 				getCnx().addValue(s,v);
-				Reflect.setField(cache,name,v);
+				if ( cache != null )
+					Reflect.setField(cache,name,v);
 			}
 		}
 		if( !mod )