Hi Florian, did it work now? I saw you added the a case for SO.DateTime. Could you test it or is there sill a problem with the ISS example?
If you need help and describe what to do, I can also test it locally on my computer? Philipp > On 21. Jun 2020, at 18:41, Florian Micklich <[email protected]> wrote: > > Hi, > > I already found the reason why it is not working. > The reason is that "s" represents the runtime type and not the domain > type. > > So I think I have to move into the JDBC class itself and check for > domain type or create a second parameter for the getFromUri-method. > > I would like to do option 2, because it is much nicer. > > > I forgot to mention the code; I am working in [1]. > > [1] > https://github.com/apache/incubator-streampipes-extensions/blob/feature/jdbc_rewrite/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/jdbcclient/SqlAttribute.java > > Am Sonntag, den 21.06.2020, 17:02 +0200 schrieb Florian Micklich: >> Hi all, >> >> I am still working on the JDBC sinks. This time on implementing >> timestamps. >> >> Like in the MySQL sink implemented by Philipp,I am trying to get an >> universal approach. >> >> I would like to test it but there is a problem. >> I am using the ISS adapter and the random adapter and in both cases >> the >> timestamp is not running under SO.DateTime domain.It is running under >> FLOAT! I checked the ISS adapter and timestamp is set as timestamp >> with >> the correct DateTime domain. >> Can someone reproduce this? >> >> >> >> For the implementation I added some extras in the enum SQLAttribute >> enum >> First I added a new enum field with >> >> TIMESTAMP("TIMESTAMP"). >> >> Then I also added in the getFromUri a case for SO.DateTime >> >> public static SqlAttribute getFromUri(final String s) { >> SqlAttribute r; >> if (s.equals(XSD._integer.toString())) { >> r = SqlAttribute.INTEGER; >> } else if (s.equals(XSD._long.toString())) { >> r = SqlAttribute.LONG; >> } else if (s.equals(XSD._float.toString())) { >> r = SqlAttribute.FLOAT; >> } else if (s.equals(XSD._double.toString())) { >> r = SqlAttribute.DOUBLE; >> } else if (s.equals(XSD._boolean.toString())) { >> r = SqlAttribute.BOOLEAN; >> } else if (s.equals(SO.DateTime)) { >> r = SqlAttribute.TIMESTAMP; >> } else { >> r = SqlAttribute.STRING; >> } >> return r; >> } >> >> >> The value transformation from Unix Timestamp to timestamp format is >> done in the setValue method >> >> public static void setValue(Parameterinfo p, Object value, >> PreparedStatement ps) >> throws SQLException, SpRuntimeException { >> switch (p.type) { >> case INTEGER: >> ps.setInt(p.index, (Integer) value); >> break; >> case LONG: >> ps.setLong(p.index, (Long) value); >> break; >> case FLOAT: >> ps.setFloat(p.index, (Float) value); >> break; >> case DOUBLE: >> ps.setDouble(p.index, (Double) value); >> break; >> case BOOLEAN: >> ps.setBoolean(p.index, (Boolean) value); >> break; >> case STRING: >> ps.setString(p.index, value.toString()); >> break; >> case TIMESTAMP: >> java.sql.Timestamp sqlTimestamp = new >> java.sql.Timestamp((Long) >> value); >> ps.setString(p.index, sqlTimestamp.toString()); >> default: >> throw new SpRuntimeException("Unknown SQL datatype"); >> } >> } >> >> Greetings >> Florian >> >
