S2JDBC用のTeradataDialect調査

中の人はstandardDialectで問題ないって言ってたけど、折角だからそれっぽく作ってみる。
2008-07-29追記

convertGetCountSql order by句対策が必要
convertLimitSql distinct, order by句対策が必要
getDefaultGenerationType GenerationType#IDENTITY
getIdentitySelectString null(default)
isInsertIdentityColumn false(default)
isUniqueConstraintViolation ベンダーコード=2801{2801, 2802, 2803}なら一意制約違反*1
needsParameterForResultSet false(default)。複数ResultSetはどうするんだろう?
supportsCursor true(default)
supportsForUpdate 常にfalse
supportsGetGeneratedKeys true
supportsIdentity true
supportsLimit true
supportsLockHint false(default)
supportsOffset false
supportsOffsetWithoutLimit false(default)
supportsOuterJoinForUpdate false
supportsSequence false(default)
  • SEQUENCE, FOR UPDATE文は無し。*2
  • TOP句はあるけど、OFFSETに対応するものは無し。
  • TOPとDISTINCTは併用不可。
  • ORDER BY句はサブクエリーに適用不可。

TOPとDISTINCTは同じレベルで書けないだけみたいです。

select distinct * from emp order by id

を、こんな感じに書き換えれば問題ありませんでした。(nはlimit + offset)

select top n * from (select distinct * from emp) temp_ order by id

*1:2008-10-12追記。PIとSI(Unique制約等)でエラーコードが異なる。2802はどういうタイミングで発生するか不明ですが、やはり一意制約違反の模様。

*2:ただし、java.sql.DatabaseMetaData#supportsSelectForUpdate()はtrue