Revision: eff6bbd2586c
Author:   Alexander Dejanovski <[email protected]>
Date:     Mon Jan 19 14:10:24 2015 UTC
Log:      Fix issue 101 : correct handling of timestamp types in collections

https://code.google.com/a/apache-extras.org/p/cassandra-jdbc/source/detail?r=eff6bbd2586c

Modified:
 /build.properties.default
 /src/main/java/org/apache/cassandra/cql/jdbc/CassandraDriver.java
 /src/main/java/org/apache/cassandra/cql/jdbc/CassandraResultSet.java
 /src/main/java/org/apache/cassandra/cql/jdbc/MetadataResultSets.java
 /src/main/java/org/apache/cassandra/cql/jdbc/TypedColumn.java
 /src/test/java/org/apache/cassandra/cql/jdbc/CollectionsTest.java

=======================================
--- /build.properties.default   Tue Nov  1 16:05:39 2011 UTC
+++ /build.properties.default   Mon Jan 19 14:10:24 2015 UTC
@@ -3,5 +3,5 @@

 # Cassandra database to test with
 cassandra.host=localhost
-cassandra.rpc.port=9170
+cassandra.rpc.port=9160

=======================================
--- /src/main/java/org/apache/cassandra/cql/jdbc/CassandraDriver.java Thu Apr 18 19:21:03 2013 UTC +++ /src/main/java/org/apache/cassandra/cql/jdbc/CassandraDriver.java Mon Jan 19 14:10:24 2015 UTC
@@ -41,11 +41,11 @@
  */
 public class CassandraDriver implements Driver
 {
-    public static final int DVR_MAJOR_VERSION = 1;
+    public static final int DVR_MAJOR_VERSION = 2;

-    public static final int DVR_MINOR_VERSION = 2;
+    public static final int DVR_MINOR_VERSION = 1;

-    public static final int DVR_PATCH_VERSION = 4;
+    public static final int DVR_PATCH_VERSION = 1;

     public static final String DVR_NAME = "Cassandra JDBC Driver";

=======================================
--- /src/main/java/org/apache/cassandra/cql/jdbc/CassandraResultSet.java Wed Oct 15 10:03:58 2014 UTC +++ /src/main/java/org/apache/cassandra/cql/jdbc/CassandraResultSet.java Mon Jan 19 14:10:24 2015 UTC
@@ -1174,10 +1174,26 @@
String[] split = valueType.substring(index + 1, valueType.length() - 1).split(",");
                    if (split.length > 1)
                    {
-                       keyType = TypesMap.getTypeForComparator(split[0]);
-                       validator = TypesMap.getTypeForComparator(split[1]);
+ if(split[0].equals("org.apache.cassandra.db.marshal.TimestampType")){ + keyType = TypesMap.getTypeForComparator("org.apache.cassandra.db.marshal.DateType");
+                       }else{
+                               keyType = 
TypesMap.getTypeForComparator(split[0]);
+                       }
+
+ if(split[1].equals("org.apache.cassandra.db.marshal.TimestampType")){ + validator = TypesMap.getTypeForComparator("org.apache.cassandra.db.marshal.DateType");
+                       }else{
+                               validator = 
TypesMap.getTypeForComparator(split[1]);
+                       }
+
+                   }
+                   else {
+ if(split[0].equals("org.apache.cassandra.db.marshal.TimestampType")){ + validator = TypesMap.getTypeForComparator("org.apache.cassandra.db.marshal.DateType");
+                       }else{
+                               validator = 
TypesMap.getTypeForComparator(split[0]);
+                       }
                    }
-                   else validator = TypesMap.getTypeForComparator(split[0]);
                }

         }
=======================================
--- /src/main/java/org/apache/cassandra/cql/jdbc/TypedColumn.java Thu Apr 18 19:21:03 2013 UTC +++ /src/main/java/org/apache/cassandra/cql/jdbc/TypedColumn.java Mon Jan 19 14:10:24 2015 UTC
@@ -70,7 +70,7 @@
             case SET:
value = SetMaker.getInstance(valueType).compose(column.value);
                 break;
-            case MAP:
+            case MAP:
value = MapMaker.getInstance(keyType, valueType).compose(column.value);
                 break;
            default:
=======================================
--- /src/test/java/org/apache/cassandra/cql/jdbc/CollectionsTest.java Wed Oct 15 10:03:58 2014 UTC +++ /src/test/java/org/apache/cassandra/cql/jdbc/CollectionsTest.java Mon Jan 19 14:10:24 2015 UTC
@@ -23,6 +23,7 @@
 import static org.junit.Assert.*;

 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
@@ -103,7 +104,7 @@


         // Create the target Table (CF)
- String createTable = "CREATE TABLE testcollection (" + " k int PRIMARY KEY," + " L list<bigint>," + " M map<double, boolean>," + " S set<text>" + ") ;"; + String createTable = "CREATE TABLE testcollection (" + " k int PRIMARY KEY," + " L list<bigint>," + " M map<double, boolean>, M2 map<text, timestamp>, S set<text>" + ") ;"; if (LOG.isDebugEnabled()) LOG.debug("createTable = '{}'", createTable);

         stmt.execute(createTable);
@@ -379,6 +380,40 @@

         if (LOG.isDebugEnabled()) LOG.debug("m (prepared)= '{}'\n", myObj);
     }
+
+    @Test
+    public void testWriteReadTimestampMap() throws Exception
+    {
+ if (LOG.isDebugEnabled()) LOG.debug("Test: 'testWriteReadTimestampMap'\n");
+
+        Statement statement = con.createStatement();
+
+        // add some items to the set
+        String sql = "insert into testcollection(k,M2) values(?,?)" ;
+        Map<String,Date> is = new HashMap<String, Date>();
+        is.put("K"+System.currentTimeMillis(),new Date());
+        PreparedStatement ps = con.prepareStatement(sql);
+
+        {
+               ps.setInt(1,1);
+               ps.setObject(2,is, java.sql.Types.OTHER);
+               ps.executeUpdate();
+        }
+ ResultSet result = statement.executeQuery("SELECT * FROM testcollection WHERE k = 1;");
+        result.next();
+
+        assertEquals(1, result.getInt("k"));
+        //Object myObj = result.getObject("m");
+        Map<String,Date> map = (Map<String,Date>)result.getObject("m2");
+        //Map<Double,Boolean> myMap = (Map<Double,Boolean>) myObj;
+        assertEquals(1, map.size());
+        if (LOG.isDebugEnabled()) LOG.debug("map key : " + map);
+
+
+
+
+    }
+


private CassandraResultSetExtras extras(ResultSet result) throws Exception

Reply via email to