> Tom, what's your opinion? Can we use the FieldAttributeEnum's or > should we add %DBCOLUMNFLAGS to DBD::ADO?
My opinion is to use FieldAttritueEnum. Two reasons: It's supported in TypeLib, and inherit to ADO. Less problems with changes in the future. Tom On Fri, Nov 30, 2001 at 11:26:14AM +0100, Steffen Goeldner wrote: > Steffen Goeldner wrote: > > > > From the COLUMNS Rowset (adSchemaColumns), we'll need: > > > > - DATA_TYPE ! > > - IS_NULLABLE ? see COLUMN_FLAGS > > - COLUMN_FLAGS ! not all flags, but: > > - DBCOLUMNFLAGS_ISFIXEDLENGTH ! > > - DBCOLUMNFLAGS_ISLONG ! > > - DBCOLUMNFLAGS_ISNULLABLE ? see IS_NULLABLE > > - DBCOLUMNFLAGS_MAYBENULL ? see DBCOLUMNFLAGS_ISNULLABLE > > - ... ? e.g. DBCOLUMNFLAGS_ISROWID > > > > DBCOLUMNFLAGS are defined in oledb.h and (AFAIK) not available via > TypeLib. However, there is a quite good match between DBCOLUMNFLAGS > and ADO's FieldAttributeEnum's: > > %DBCOLUMNFLAGS = # oledb.h # %FieldAttributeEnum = # adoint.h > ( # ( > ISBOOKMARK => 0x1 # > , MAYDEFER => 0x2 # adFldMayDefer => 0x2 > , WRITE => 0x4 # , adFldUpdatable => 0x4 > , WRITEUNKNOWN => 0x8 # , adFldUnknownUpdatable => 0x8 > , ISFIXEDLENGTH => 0x10 # , adFldFixed => 0x10 > , ISNULLABLE => 0x20 # , adFldIsNullable => 0x20 > , MAYBENULL => 0x40 # , adFldMayBeNull => 0x40 > , ISLONG => 0x80 # , adFldLong => 0x80 > , ISROWID => 0x100 # , adFldRowID => 0x100 > , ISROWVER => 0x200 # , adFldRowVersion => 0x200 > , CACHEDEFERRED => 0x1000 # , adFldCacheDeferred => 0x1000 > , ISCHAPTER => 0x2000 # , adFldIsChapter => 0x2000 > , SCALEISNEGATIVE => 0x4000 # , adFldNegativeScale => 0x4000 > , RESERVED => 0x8000 # , adFldKeyColumn => 0x8000 > , ISROWURL => 0x10000 # , adFldIsRowURL => 0x10000 > , ISDEFAULTSTREAM => 0x20000 # , adFldIsDefaultStream => 0x20000 > , ISCOLLECTION => 0x40000 # , adFldIsCollection => 0x40000 > , ISSTREAM => 0x80000 # > , ISROWSET => 0x100000 # > , ISROW => 0x200000 # > , ROWSPECIFICCOLUMN => 0x400000 # > # , adFldUnspecified => -1 > }; # }; > > > Thus, a DBD::ADO method (to be written!) like: > > > > $sql_type = ado2sql( $ado_type, $is_fix, $is_long ) > > > > should give us an appropriate SQL DATA_TYPE (in most cases). > > Finding the TYPE_NAME seems much harder (I think we'll need > > adSchemaProviderType). > > > > Unfortunately, every source (COLUMNS Rowset, PROVIDER_TYPES Rowset, > > Field object) returns the type info in a slightly different way :-( -- Thomas A. Lowery See DBI/FAQ http://tlowery.hypermart.net _________________________________________________________ Do You Yahoo!? Get your free @yahoo.com address at http://mail.yahoo.com
