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 >
