I thought that I read somewhere that TIMESTAMPADD was supposed to take
the integer part of its count argument. I think that I was wrong. The
Microsoft ODBC documentation says "Arguments denoted as /integer_exp/
can be the name of a column, the result of another scalar function, or a
/numericliteral/, where the underlying data type can be represented as
SQL_TINYINT, SQL_SMALLINT, SQL_INTEGER, or SQL_BIGINT". I will change
the timestampAddBind method to check that the count argument is an
integer type.
Jack
Satheesh Bandaram wrote:
> TimestampAdd seems to allow adding noninteger intervals, but the
> behavior doesn't seem right. Either the result should be "10:10:20.9"
> or the statement should error. Though JDBC documenation is not very
> clear, I thought the "count" intervals need to be an integer?
>
> ij> values {fn timestampadd(SQL_TSI_SECOND, 10.9, time('10:10:10'))};
> 1
> 
> 20050518 10:10:20.0
>
> If we only allow integers for count, then the following needs to change:
>
> + if( ! bindParameter( rightOperand, Types.INTEGER))
> + {
> + if( ! rightOperand.getTypeId().isNumericTypeId())
> + throw
> StandardException.newException(SQLState.LANG_INVALID_FUNCTION_ARG_TYPE,
> +
> rightOperand.getTypeId().getSQLTypeName(),
> +
> ReuseFactory.getInteger(2),
> + operator);
> + }
>
> Satheesh
>
