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
> 

Reply via email to