Igor Sutton > DBIx-Dictionary > DBIx::Dictionary

Download:
DBIx-Dictionary-0.01.tar.gz

Dependencies

Annotate this POD

CPAN RT

Open  0
Report a bug
Module Version: 0.01   Source  

NAME ^

DBIx::Dictionary - Support for query dictionaries in DBI

SYNOPSIS ^

  use DBIx::Dictionary;
  
  my $dbh = DBIx::Dictionary->connect(
      $dsn, $user,
      $password,
      {
          DictionaryFile => 'dictionary.ini',
          DictionaryName => 'mysql',
      }
  ) or die DBIx::Dictionary->errstr;
  
  # Will prepare query 'insert' from dictionary
  my $sth = $dbh->prepare('insert')
    or die $dbh->errstr;
  
  $sth->execute(@bind);

ABSTRACT ^

The DBIx::Dictionary implements a common practice of database development called "query dictionary". It makes the programmer's life easier by adding support to those query dictionaries directly into DBI.

Instead of add common SQL queries inside a program using heredocs or concatenating strings, the programmer can put those queries into a query dictionary and use it all over the application.

This can be also a substitute for underlying smart code, allowing one to construct applications which can be deployed to different database queries without relying on heavy logic to maintain the SQL queries compatible.

With DBIx::Dictionary, one can have a mysql, postgre and oracle sections with specific queries translated to each database dialect.

A typical dictionary.ini content, in Config::General format would be like this:

  <Dictionary mysql>
  
      insert <<SQL
          INSERT INTO sometable VALUES (?, ?)
  SQL

  </Dictionary>

  <Dictionary oracle>

      insert <<SQL
          INSERT INTO sometable VALUES (?, ?)
  SQL

  </Dictionary>

Please be advised that it is planned to support more than one dictionary storage format.

API ^

DBIx::Dictionary

This class provides the necessary glue to add support for query dictionaries on top of DBI.

connect( $dsn, $username, $password, \%attributes )

This method overloads DBI connect method. It can parse two more attributes other than DBI: DictionaryFile which is a valid path to some Config::General file and DictionaryName is the section name we want to load. Default value for DictionaryName is default.

  my $dbh = DBIx::Dictionary->connect(
      $dsn, 
      $username,
      $password,
      {
          DictionaryFile => 'dictionary.ini',
          DictionaryName => 'mysql',
      }
  );

The above example loads the dictionary file dictionary.ini and will look up the named queries in the section mysql.

connect() can also receive a RootClass attribute as DBI does. It will load the module, and make DBIx::Dictionary::db and DBIx::Dictionary::st subclasses of the given RootClass as well.

This is useful for using named placeholders with DBIx::Placeholder::Named, like:

  my $dbh = DBIx::Dictionary->connect(
      $dsn, 
      $username,
      $password,
      {
          DictionaryFile => 'dictionary.ini',
          RootClass      => 'DBIx::Placeholder::Named',
      }
  );

DBIx::Dictionary::db

This is a DBI::db subclass.

prepare( $query )

prepare() accepts the a query name from dictionary as parameter, otherwise will assume it is a SQL query.

  my $sth;
  $sth = $dbh->prepare('insert_customer');
  $sth = $dbh->prepare($some_dynamic_query);

On the above example, both prepare() statements should work as expected.

DBIx::Dictionary::st

This is a DBI::st subclass.

CAVEATS ^

AUTHOR ^

Copyright (c) 2008, Igor Sutton Lopes <IZUT@cpan.org>. All rights reserved.

This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO ^

DBI, Config::General, DBIx::Placeholder::Named