Hi Thomas, BLOBs/CLOBs are a difficult issue. In the Track+ application we have gotten around the problems with BLOBS by not using them. Particularly the Oracle JDBC drivers used to give a lot of problems when trying to use BLOBs.
Please allow me to point out some issues in this context: we have used VARCHAR for our description fields. The maximum size of VARCHAR depends on the DBMS used. For example, in MySQL a VARCHAR may be up to 255 characters long, in Oracle 4000 and in Interbase/Firebird 32000, to name just a few. So how do you define your database scheme such that it works on all supported database systems? Actually you really can't and you have to patch your output. Using BLOBs instead may not always work since BLOBs behave differently on some database systems when trying to include them in the where or sort clause of select statements. So BLOBs and CLOBs are nice, but from what I have seen they are the least portable datatype in the DBMS world. How could you get around this? I think the only way is to be able to define user data types and let the user do the mapping. For example, I could define a type <Description> and map it to TEXT in MySQL, VARCHAR2(4000) in Oracle, and VARCHAR(32000) for Firebird. The definition could be part of the schema.xml file, which would then have to include mapping information (beyond the default mapping which can work as is) for the database systems you care about in your project. With regard to mapping, there is another problem with date, datetime and timestamp, particularly with newer versions of MySQL which have a very peculiar handling of these types. Even though there is no DATETIME data type in the JDBC interface we may have to provide the possibility to define such in the schema.xml file, since some DBMS use it and clearly distinguish between timestamp, date, and datetime. Regards, Joerg -----Ursprüngliche Nachricht----- Von: Thomas Fischer [mailto:[EMAIL PROTECTED] Gesendet: Sonntag, 8. Mai 2005 21:47 An: torque-dev@db.apache.org Betreff: BLOB and CLOB Torque datatypes Hi, I am pondering about which datatypes should be mapped to the Torque BLOB and CLOB types, and which should not. Background is that "real" Blob and CLOB data types are handled differently by the jdbc drivers than other types, in the sense that for a CLOB or BLOB column, one does not get the value directly, but a stream from which one can read (or into which one can write). So, in a sense, for "normal" datatypes, you get the value directly, for BLOB/CLOB, you get a reference. Torque hides this different behaviour from the user. So I would suggest that we define a minimum length for which we assume that a column is a "large object". For the columns that I have in mind to change (Postgresql BYTEA-> Blob, HSQLDB LONGVARBINARY -> BLOB, HSQLDB LONGVARCHAR -> CLOB) these objects can be up to 2^32 bytes/characters long. But if a data type in a database meets this length criterium, we do not care whether it can be accessed in a blob-scpecific way or not, we just map the BLOB/CLOB Torque types to these values. Any comments, objections etc ? Thomas --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]