// Path: src/main/java/com/jajja/jorm/Row.java
//     public static class Field {
//         private Object value = null;
//         private boolean isChanged = false;
// 
//         Field() {}
// 
//         public Field(Object value) {
//             setValue(value);
//             setChanged(true);
//         }
// 
//         void setValue(Object value) {
//             this.value = value;
//         }
// 
//         public <T> T value(Class<T> type) {
//             return convert(value, type);
//         }
// 
//         public Object rawValue() {
//             return value;
//         }
// 
//         public Record record() {
//             return (value instanceof Record) ? ((Record)value) : null;
//         }
// 
// //        @SuppressWarnings("unchecked")
// //        public <T extends Record> T ref(Transaction t, Class<T> clazz) throws SQLException {
// //            if (record() == null) {
// //              if (isReferenceCacheOnly) {
// //                  return null;
// //              }
// //              if (!flag(FLAG_REF_FETCH)) {
// //                  throw new IllegalAccessError("Reference fetching is disabled");
// //              }
// //              setValue(t.findById((Class<? extends Record>)clazz, value));
// //            }
// //            return (T)record();
// //        }
// 
//         public Object dereference() {
//             return (value instanceof Record) ? ((Record)value).id() : value;
//         }
// 
//         void setChanged(boolean isChanged) {
//             this.isChanged = isChanged;
//         }
// 
//         public boolean isChanged() {
//             return isChanged;
//         }
// 
//         @Override
//         public String toString() {
//             return String.format("Field [value => %s, isChanged => %s]", value, isChanged);
//         }
// 
//         @Override
//         public boolean equals(Object obj) {
//             if (obj instanceof Field) {
//                 Object v = ((Field)obj).value;
//                 return (value == v || (value != null && value.equals(v)));
//             }
//             return false;
//         }
// 
//         @Override
//         public int hashCode() {
//             return (value != null) ? value.hashCode() : 0;
//         }
//     }
// 
// Path: src/main/java/com/jajja/jorm/Row.java
// public static class NamedField {
//     private String name;
//     private Field field;
// 
//     public NamedField(Entry<String, Field> e) {
//         this.name = e.getKey();
//         this.field = e.getValue();
//     }
// 
//     public String name() {
//         return name;
//     }
// 
//     public Field field() {
//         return field;
//     }
// }


import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Set;
import com.jajja.jorm.Row.Field;
import com.jajja.jorm.Row.NamedField;
        return records;
    }

    public Class<? extends Record> clazz() {
        return template.getClass();
    }

    public int size() {
        return size;
    }

    public Iterable<Slice<T>> slice(int size) {
        return new Slicer<T>(this, records, size);
    }

    public static class Slice<TT extends Record> extends ArrayList<TT> {
        private static final long serialVersionUID = 1L;
        private final RecordBatch<TT> batch;
        private Set<String> columns;
        private Set<String> dirtyColumns;

        public Slice(RecordBatch<TT> batch, int size) {
            super(size);
            this.batch = batch;
        }

        private void complete() {
            columns = new HashSet<String>();
            dirtyColumns = new HashSet<String>();
            for (TT record : this) {
// Path: src/main/java/com/jajja/jorm/Row.java
//     public static class Field {
//         private Object value = null;
//         private boolean isChanged = false;
// 
//         Field() {}
// 
//         public Field(Object value) {
//             setValue(value);
//             setChanged(true);
//         }
// 
//         void setValue(Object value) {
//             this.value = value;
//         }
// 
//         public <T> T value(Class<T> type) {
//             return convert(value, type);
//         }
// 
//         public Object rawValue() {
//             return value;
//         }
// 
//         public Record record() {
//             return (value instanceof Record) ? ((Record)value) : null;
//         }
// 
// //        @SuppressWarnings("unchecked")
// //        public <T extends Record> T ref(Transaction t, Class<T> clazz) throws SQLException {
// //            if (record() == null) {
// //              if (isReferenceCacheOnly) {
// //                  return null;
// //              }
// //              if (!flag(FLAG_REF_FETCH)) {
// //                  throw new IllegalAccessError("Reference fetching is disabled");
// //              }
// //              setValue(t.findById((Class<? extends Record>)clazz, value));
// //            }
// //            return (T)record();
// //        }
// 
//         public Object dereference() {
//             return (value instanceof Record) ? ((Record)value).id() : value;
//         }
// 
//         void setChanged(boolean isChanged) {
//             this.isChanged = isChanged;
//         }
// 
//         public boolean isChanged() {
//             return isChanged;
//         }
// 
//         @Override
//         public String toString() {
//             return String.format("Field [value => %s, isChanged => %s]", value, isChanged);
//         }
// 
//         @Override
//         public boolean equals(Object obj) {
//             if (obj instanceof Field) {
//                 Object v = ((Field)obj).value;
//                 return (value == v || (value != null && value.equals(v)));
//             }
//             return false;
//         }
// 
//         @Override
//         public int hashCode() {
//             return (value != null) ? value.hashCode() : 0;
//         }
//     }
// 
// Path: src/main/java/com/jajja/jorm/Row.java
// public static class NamedField {
//     private String name;
//     private Field field;
// 
//     public NamedField(Entry<String, Field> e) {
//         this.name = e.getKey();
//         this.field = e.getValue();
//     }
// 
//     public String name() {
//         return name;
//     }
// 
//     public Field field() {
//         return field;
//     }
// }


// Path: src/main/java/com/jajja/jorm/RecordBatch.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Set;
import com.jajja.jorm.Row.Field;
import com.jajja.jorm.Row.NamedField;

        return records;
    }

    public Class<? extends Record> clazz() {
        return template.getClass();
    }

    public int size() {
        return size;
    }

    public Iterable<Slice<T>> slice(int size) {
        return new Slicer<T>(this, records, size);
    }

    public static class Slice<TT extends Record> extends ArrayList<TT> {
        private static final long serialVersionUID = 1L;
        private final RecordBatch<TT> batch;
        private Set<String> columns;
        private Set<String> dirtyColumns;

        public Slice(RecordBatch<TT> batch, int size) {
            super(size);
            this.batch = batch;
        }

        private void complete() {
            columns = new HashSet<String>();
            dirtyColumns = new HashSet<String>();
            for (TT record : this) {
                for (NamedField e : record.fields()) {