// Path: src/main/java/com/jajja/jorm/Composite.java
// public static class Value {
//     private Composite composite;
//     private Object[] values;
// 
//     private Value(Composite composite, Object ... values) {
//         this.composite = composite;
//         this.values = values;
//     }
// 
//     public Composite getComposite() {
//         return composite;
//     }
// 
//     public Object[] getValues() {
//         return values;
//     }
// 
//     public Object getValue() {
//         if (!isSingle()) {
//             throw new RuntimeException("Not a single column key");
//         }
//         return values[0];
//     }
// 
//     private int getOffset(String column) {
//         for (int i = 0; i < composite.columns.length; i++) {
//             if (composite.columns[i].equals(column)) {
//                 return i;
//             }
//         }
//         return -1;
//     }
// 
//     @SuppressWarnings("unchecked")
//     public <T> T get(String column, Class<T> clazz) {
//         int offset = getOffset(column);
//         if (offset < 0) {
//             throw new IllegalArgumentException("No such column " + column);
//         }
//         Object value = values[offset];
//         if (value == null) {
//             return null;
//         }
//         return (T)value;
//     }
// 
//     public boolean isSingle() {
//         return values.length == 1;
//     }
// 
//     @Override
//     public int hashCode() {
//         int hashCode = 0;
//         for (Object value : values) {
//             if (value != null) {
//                 hashCode += value.hashCode();
//             }
//         }
//         return hashCode;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (obj instanceof Value) {
//             Value v = (Value)obj;
//             if (values.length != v.values.length) {
//                 return false;
//             }
//             for (int i = 0; i < values.length; i++) {
//                 if (!((values[i] == v.values[i]) || (values[i] != null && values[i].equals(v.values[i])))) {
//                     return false;
//                 }
//             }
//             return true;
//         }
//         return false;
//     }
// 
//     @Override
//     public String toString() {
//         StringBuilder sb = new StringBuilder(16 * values.length);
//         sb.append("{");
//         boolean isFirst = true;
//         for (Object value : values) {
//             if (!isFirst) {
//                 sb.append(", ");
//             } else {
//                 isFirst = false;
//             }
//             sb.append(value);
//         }
//         sb.append("}");
//         return sb.toString();
//     }
// }


import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import com.jajja.jorm.Composite.Value;
        flag(FLAG_REF_FETCH, false);
    }

    void put(String column, Object value) {
        Field field = field(column);
        if (field == null) {
            field = new Field();
            column = StringPool.get(column);
        }

        field.setChanged(true);
        field.setValue(value);

        fields.put(column, field);
    }

    /**
     * Sets the specified column to value.
     *
     * If the value refers to a {@link Record} it is stored as a reference,
     * and the column is assigned the value of the Record's primary key.
     *
     * @param column the column name
     * @param value  the value
     */
    public void set(String column, Object value) {
        assertNotReadOnly();
        put(column, value);
    }

// Path: src/main/java/com/jajja/jorm/Composite.java
// public static class Value {
//     private Composite composite;
//     private Object[] values;
// 
//     private Value(Composite composite, Object ... values) {
//         this.composite = composite;
//         this.values = values;
//     }
// 
//     public Composite getComposite() {
//         return composite;
//     }
// 
//     public Object[] getValues() {
//         return values;
//     }
// 
//     public Object getValue() {
//         if (!isSingle()) {
//             throw new RuntimeException("Not a single column key");
//         }
//         return values[0];
//     }
// 
//     private int getOffset(String column) {
//         for (int i = 0; i < composite.columns.length; i++) {
//             if (composite.columns[i].equals(column)) {
//                 return i;
//             }
//         }
//         return -1;
//     }
// 
//     @SuppressWarnings("unchecked")
//     public <T> T get(String column, Class<T> clazz) {
//         int offset = getOffset(column);
//         if (offset < 0) {
//             throw new IllegalArgumentException("No such column " + column);
//         }
//         Object value = values[offset];
//         if (value == null) {
//             return null;
//         }
//         return (T)value;
//     }
// 
//     public boolean isSingle() {
//         return values.length == 1;
//     }
// 
//     @Override
//     public int hashCode() {
//         int hashCode = 0;
//         for (Object value : values) {
//             if (value != null) {
//                 hashCode += value.hashCode();
//             }
//         }
//         return hashCode;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (obj instanceof Value) {
//             Value v = (Value)obj;
//             if (values.length != v.values.length) {
//                 return false;
//             }
//             for (int i = 0; i < values.length; i++) {
//                 if (!((values[i] == v.values[i]) || (values[i] != null && values[i].equals(v.values[i])))) {
//                     return false;
//                 }
//             }
//             return true;
//         }
//         return false;
//     }
// 
//     @Override
//     public String toString() {
//         StringBuilder sb = new StringBuilder(16 * values.length);
//         sb.append("{");
//         boolean isFirst = true;
//         for (Object value : values) {
//             if (!isFirst) {
//                 sb.append(", ");
//             } else {
//                 isFirst = false;
//             }
//             sb.append(value);
//         }
//         sb.append("}");
//         return sb.toString();
//     }
// }


// Path: src/main/java/com/jajja/jorm/Row.java
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import com.jajja.jorm.Composite.Value;

        flag(FLAG_REF_FETCH, false);
    }

    void put(String column, Object value) {
        Field field = field(column);
        if (field == null) {
            field = new Field();
            column = StringPool.get(column);
        }

        field.setChanged(true);
        field.setValue(value);

        fields.put(column, field);
    }

    /**
     * Sets the specified column to value.
     *
     * If the value refers to a {@link Record} it is stored as a reference,
     * and the column is assigned the value of the Record's primary key.
     *
     * @param column the column name
     * @param value  the value
     */
    public void set(String column, Object value) {
        assertNotReadOnly();
        put(column, value);
    }

    public void set(Composite.Value value) {