> 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

Reply via email to