Help-Site Computer Manuals
Software
Hardware
Programming
Networking
  Algorithms & Data Structures   Programming Languages   Revision Control
  Protocols
  Cameras   Computers   Displays   Keyboards & Mice   Motherboards   Networking   Printers & Scanners   Storage
  Windows   Linux & Unix   Mac

DBD::ADO::Const
ADO Constants

DBD::ADO::Const - ADO Constants


NAME

DBD::ADO::Const - ADO Constants


SYNOPSIS


  use DBD::ADO::Const();

  $\ = "\n";

  my $Enums = DBD::ADO::Const->Enums;

  for my $Enum ( sort keys %$Enums )

  {

    print $Enum;

    for my $Const ( sort keys %{$Enums->{$Enum}} )

    {

      printf "  %-35s 0x%X\n", $Const, $Enums->{$Enum}{$Const};

    }

  }


DESCRIPTION

In the OLE type library, many constants are defined as members of enums. It's easy to lookup DBD::ADO constants by name, e.g.:


  $ado_consts->{adChar} == 129

Unfortunately, Win32::OLE::Const does not preserve the namespace of the enums. It's a matter of taste, but I think


  $ado_consts->{DataTypeEnum}{adChar} == 129

makes the code more self-documenting.

Furthermore, many DBD::ADO methods return numeric codes. Transforming these codes into human readable strings requires an inverse lookup by value. Building the reverse hash for e.g. all datatypes requires that datatype constants can be distinguished from other constants, i.e. we need the namespace preserved.

The Enums() method of this package return a hash of hashes for exactly this purpose.


BENCHMARK

The drawback of the Enums() method is its poor performance, as the following benchmark shows:


  require DBD::ADO::Const;     # 0.50 CPU

  DBD::ADO::Const->Enums;      # 0.30 CPU

                               # 0.80 CPU

However, the previous alternative didn't perform better:


  require Win32::OLE::Const;   # 0.89 CPU

  Win32::OLE::Const->Load(...) # 0.03 CPU

                               # 0.92 CPU

It seems that all available type libraries are checked (for whatever reason). In a networking environment, the performance may be unacceptable.

A more general version (parameterized by TypeLib), implemented in XS (similar to Win32::OLE::Const::_Constants), looks promising:


  require Win32::OLE;          # 0.24 CPU

  $TypeLib->Enums;             # 0.04 CPU

                               # 0.28 CPU

where


  $TypeLib = Win32::OLE->new('ADODB.Connection')

               ->GetTypeInfo->GetContainingTypeLib;

Hopefully, this implementation (see ex/Enums.patch) finds its way into Win32::OLE some day ...


AUTHOR

Steffen Goeldner (sgoeldner@cpan.org)


COPYRIGHT

Copyright (c) 2002-2005 Steffen Goeldner. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

Programminig
Wy
Wy
yW
Wy
Programming
Wy
Wy
Wy
Wy