The following module was proposed for inclusion in the Module List:
modid: SQL::ObjectModel
DSLIP: cdhOg
description: Unserialized SQL objects, use like XML DOM
userid: DUNCAND (Darren Duncan)
chapterid: 11 (String_Lang_Text_Proc)
communities:
[EMAIL PROTECTED], [EMAIL PROTECTED],
[EMAIL PROTECTED]
similar:
most of the SQL::* modules, some object-to-database mapping tools
rationale:
This module manages objects which are equivalent to SQL statements
and database schema definitions. This is analagous to how XML DOMs
are objects that are equivalent XML strings, and they can be
converted back and forth at will.
But the actual conversion is not handled by this module, but rather
by third party extension modules or code of your choice. This is
analagous to how Perl hashes or arrays store a list of values which
can also be stored in a string with the appropriate encoding.
These objects are intended to represent all kinds of SQL, both DML
and DDL, both ANSI standard and RDBMS vendor extensions. Unlike
basically all of the other SQL generating/parsing modules I know
about, which are limited to basic DML and only support table
definition DML, my module supports arbitrarily complex select
statements, with composite keys and unions, and calls to stored
functions; my module can also define views and stored procedures and
triggers.
Since said items are just described by my module rather than
implemented, other modules can implement the description any way
they want, which could mean either generating and executing SQL, or
generating Perl code that does the same task, should they want to.
My module makes this easy.
It is intended that SQL::ObjectModel objects can be passed around
and used by programs instead of SQL strings, and can be used in all
of the same ways (but different syntax).
The objects don't exactly match an existing SQL dialect, but a new
one which is a normalized superset of existing dialects. Normalized
means that if other dialects have different ways of saying the same
thing, there is only one way to say it in the objects. All
functionality that a database can do is representable, when
reasonable, even if some other databases don't support the feature.
So if you want to use a feature you still can, but that limits which
databases you can use. So you define the object the same way no
matter which database you are using.
These modules are especially suited for use with applications or
modules that make use of data dictionaries to control what they do.
It is common in applications that they interpret their data
dictionaries and generate SQL to accomplish some of their work,
which means making sure generated SQL is in the right dialect or
syntax, and making sure literal values are encoded correctly. By
using my module, they can simply copy appropriate individual
elements in their data dictionaries to my module, including column
names, table names, function names, literal values, and they don't
have to do any string parsing or assembling.
While there is some overlap in functionality, I believe most of the
features in my module have never been provided by another CPAN
module, and that it would be valuable. This is also being
implemented such that many existing CPAN modules could be updated to
use the objects rather than SQL strings or other proprietary
SQL-representing-structures, if they want to.
Please let me know if you need clarification, or you want to
suggest an alternate module name.
I chose "... language text processing ..." as the category for this
module since that is where most of the other SQL::* modules are
located. But this module could conceivably go under "... data types
..." or "... database interfaces ..." instead. I will note, however,
that my module doesn't actually talk to any databases itself, and it
does not require that someone using it would do so; that is just the
common usage.
Thank you.
enteredby: DUNCAND (Darren Duncan)
enteredon: Mon Jun 2 23:31:44 2003 GMT
The resulting entry would be:
SQL::
::ObjectModel cdhOg Unserialized SQL objects, use like XML DOM DUNCAND
Thanks for registering,
--
The PAUSE
PS: The following links are only valid for module list maintainers:
Registration form with editing capabilities:
https://pause.perl.org/pause/authenquery?ACTION=add_mod&USERID=7a400000_5d708721cd38e94e&SUBMIT_pause99_add_mod_preview=1
Immediate (one click) registration:
https://pause.perl.org/pause/authenquery?ACTION=add_mod&USERID=7a400000_5d708721cd38e94e&SUBMIT_pause99_add_mod_insertit=1