public static void Update(FieldInfo fi, SoodaTransaction transaction) { if (!fi.IsDynamic) { throw new InvalidOperationException(fi.Name + " is not a dynamic field"); } ClassInfo ci = fi.ParentClass; SoodaDataSource ds = transaction.OpenDataSource(ci.GetDataSource()); ds.ExecuteNonQuery("update SoodaDynamicField set nullable={0} where class={1} and field={2}", fi.IsNullable ? 1 : 0, ci.Name, fi.Name); }
public static void Remove(FieldInfo fi, SoodaTransaction transaction) { if (!fi.IsDynamic) { throw new InvalidOperationException(fi.Name + " is not a dynamic field"); } ClassInfo ci = fi.ParentClass; SoodaDataSource ds = transaction.OpenDataSource(ci.GetDataSource()); LockCookie lockCookie = LockWrite(transaction); try { ds.ExecuteNonQuery("delete from SoodaDynamicField where class={0} and field={1}", ci.Name, fi.Name); ds.ExecuteNonQuery("drop table " + fi.Table.DBTableName); ci.LocalTables.Remove(fi.Table); Resolve(ci); } finally { transaction.Schema._rwLock.DowngradeFromWriterLock(ref lockCookie); } }