protected void discoverBeanMethods() { // break this off? Class<?> ft = field.getType(); if (String.class.equals(ft)) { type = DataType.text(); } else if (int.class.equals(ft)) { type = DataType.cint(); } else if (Integer.class.equals(ft)) { type = DataType.cint(); } else if (int.class.equals(ft)) { type = DataType.cint(); } else if (Long.class.equals(ft)) { type = DataType.bigint(); } else if (long.class.equals(ft)) { type = DataType.bigint(); } else if (Date.class.equals(ft)) { type = DataType.timestamp(); } else if (ByteBuffer.class.equals(ft)) { type = DataType.blob(); } else if (Double.class.equals(ft)) { type = DataType.cdouble(); } else if (double.class.equals(ft)) { type = DataType.cdouble(); } else if (Float.class.equals(ft)) { type = DataType.cfloat(); } else if (float.class.equals(ft)) { type = DataType.cfloat(); } else if (Boolean.class.equals(ft)) { type = DataType.cboolean(); } // how to differentiate type tuuid and uuid else if (UUID.class.equals(ft)) { type = DataType.uuid(); } // java.sql.timestamp is not directly supported // remove it for now /*else if (Timestamp.class.equals(ft)) { type = DataType.timestamp(); }*/ else if (Map.class.isAssignableFrom(ft)) { type = DataType.map(DataType.text(), DataType.text()); } // getter and setter find try { String getMeth = "get" + field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1); String setMeth = "set" + field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1); getter = field.getDeclaringClass().getDeclaredMethod(getMeth); setter = field.getDeclaringClass().getDeclaredMethod(setMeth, field.getType()); } catch (Exception e) { // TODO some useful stuff: warning of non-conformance to java bean conventions } }
@Test public void testAlter() throws Exception { CreateTable desired = TableBuilder.create("test_keyspace", "test_table") .column("col1", "text") .column("col2", "bigint") .column("col3", "int") .column("col4", "text") .primaryKey("col1"); TableMetadata existing = mock(TableMetadata.class); ColumnMetadata col1 = mock(ColumnMetadata.class); when(existing.getColumn(eq("col1"))).thenReturn(col1); when(col1.getType()).thenReturn(DataType.text()); ColumnMetadata col2 = mock(ColumnMetadata.class); when(existing.getColumn(eq("col2"))).thenReturn(col2); when(col2.getType()).thenReturn(DataType.cint()); List<AlterTable> statements = TableBuilder.alter(existing, desired); assertEquals(3, statements.size()); assertEquals( "ALTER TABLE test_keyspace.test_table ALTER col2 TYPE bigint", statements.get(0).toString()); assertEquals("ALTER TABLE test_keyspace.test_table ADD col3 int", statements.get(1).toString()); assertEquals( "ALTER TABLE test_keyspace.test_table ADD col4 text", statements.get(2).toString()); }
private Object getValue(Row row, ColumnMapping mapping, Definition def) { Object value = null; if (DataType.text().equals(mapping.type)) { value = row.getString(def.getName()); } else if (DataType.blob().equals(mapping.type)) { value = row.getBytes(def.getName()); } else if (DataType.map(DataType.text(), DataType.text()).equals(mapping.type)) { value = row.getMap(def.getName(), String.class, String.class); } else if (DataType.cint().equals(mapping.type)) { value = row.getInt(def.getName()); } else if (DataType.bigint().equals(mapping.type)) { value = row.getLong(def.getName()); } else if (DataType.timestamp().equals(mapping.type)) { value = row.getDate(def.getName()); } else if (DataType.blob().equals(mapping.type)) { value = row.getBytes(def.getName()); } else if (DataType.cdouble().equals(mapping.type)) { value = row.getBytes(def.getName()); } else if (DataType.cfloat().equals(mapping.type)) { value = row.getFloat(def.getName()); } else if (DataType.inet().equals(mapping.type)) { value = row.getInet(def.getName()); } else if (DataType.cboolean().equals(mapping.type)) { value = row.getBool(def.getName()); } else if (DataType.uuid().equals(mapping.type)) { value = row.getUUID(def.getName()); } // what if value is null? primitives won't like this return value; }