Kaynağa Gözat

initialize null fields after insert()

Nicolas Cannasse 14 yıl önce
ebeveyn
işleme
9c0cd7b7a6
1 değiştirilmiş dosya ile 20 ekleme ve 0 silme
  1. 20 0
      std/sys/db/Manager.hx

+ 20 - 0
std/sys/db/Manager.hx

@@ -129,12 +129,32 @@ class Manager<T : Object> {
 		var s = new StringBuf();
 		var fields = new List();
 		var values = new List();
+		var pos = 0;
 		for( f in table_fields ) {
 			var v = Reflect.field(x,f);
 			if( v != null ) {
 				fields.add(quoteField(f));
 				values.add(v);
+			} else {
+				var inf = table_infos.fields[pos];
+				// if the field is not defined, give it a default value on insert
+				if( !inf.isNull )
+					switch( inf.t ) {
+					case DUInt, DTinyInt, DInt, DSingle, DFloat, DFlags(_), DBigInt:
+						Reflect.setField(x, f, 0);
+					case DBool:
+						Reflect.setField(x, f, false);
+					case DTinyText, DText, DString(_), DSmallText, DSerialized:
+						Reflect.setField(x, f, "");
+					case DSmallBinary, DNekoSerialized, DLongBinary, DBytes(_), DBinary:
+						Reflect.setField(x, f, haxe.io.Bytes.alloc(0));
+					case DDate, DDateTime:
+						// default date might depend on database
+					case DId, DUId, DBigId, DNull, DInterval, DEncoded:
+						// no default value for these
+					}
 			}
+			pos++;
 		}
 		s.add("INSERT INTO ");
 		s.add(table_name);