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
>> 
> 

Reply via email to