(Finally) reach the point where we have some useful, if basic, functionality.
[cfb.git] / prod / net / jaekl / cfb / db / Column.java
index bd06570dd2bfdfbe8560ca47f5ec60d0efd857a5..be9fb65729e7501e23d8fc25932f07700c4096d2 100644 (file)
@@ -1,8 +1,16 @@
 package net.jaekl.cfb.db;
 
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.util.Date;
+
+import net.jaekl.cfb.util.Util;
+
+// Copyright (C) 2015 Christian Jaekl
+
 public class Column {
        public enum Type {
-               CHAR, INTEGER, TIMESTAMP, TIMESTAMPTZ, VARCHAR 
+               CHAR, INTEGER, TIMESTAMPTZ, VARCHAR 
        };
        public enum Null {
                NOT_NULL, NULL
@@ -43,4 +51,56 @@ public class Column {
                
                return new Column(name, type, width.intValue(), canBeNull);
        }
+       
+       // Wrapper around PreparedStatement.setObject().
+       // Note that indices start at 1, not at zero.
+       public void setObject(PreparedStatement ps, int idx, Object obj) throws SQLException
+       {
+               if (this.getType().equals(Type.TIMESTAMPTZ)) {
+                       // Special case:  because there's no good way to read a TIMESTAMPTZ from 
+                       // the database using JDBC, we store it as an integer (milliseconds since
+                       // the epoch, 01.01.1970 00:00:00.000 UTC).
+                       Date date = (Date)obj;
+                       ps.setLong(idx, date.getTime());
+               }
+               else {
+                       ps.setObject(idx, obj);
+               }
+       }
+       
+       @Override 
+       public boolean equals(Object obj) 
+       {
+               if (null == obj) {
+                       return false;
+               }
+               if (! (obj instanceof Column)) {
+                       return false;
+               }
+               Column other = (Column)obj;
+
+               if (! Util.objsAreEqual(this.getName(), other.getName())) {
+                       return false;
+               }
+               if (! Util.objsAreEqual(this.getType(), other.getType())) {
+                       return false;
+               }
+               if (this.getWidth() != other.getWidth()) {
+                       return false;
+               }
+               if (! Util.objsAreEqual(this.getNull(), other.getNull())) {
+                       return false;
+               }
+               
+               return true;
+       }
+       
+       @Override
+       public int hashCode() {
+               int code = Util.objHashCode(getName())
+                                ^ Util.objHashCode(getType())
+                                ^ getWidth()
+                                ^ Util.objHashCode(getNull());
+               return code;
+       }
 }