The following module was proposed for inclusion in the Module List:

  modid:       SQL::ObjectModel
  DSLIP:       adhOg
  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], [EMAIL PROTECTED]

  similar:
    SQL::Statement, SQL::Translator, SQL::YASP, DBIx::Abstract, others

  rationale:

    Note: This standalone module was uploaded to CPAN today as part of
    my Rosetta-0.15 distribution. Unlike the other files in Rosetta,
    SQL::ObjectModel is code-complete and POD-complete and can be used
    right now (hence the alpha and not pre-alpha dev status). I would
    very much like SQL::ObjectModel to spin off into its own
    distribution, so it is easier for people to download that without
    having to download the other Rosetta framework files (and a
    separation of the docs is just plain logical). But until this module
    is registered I don't want to put it in its own distribution, in
    case I have to rename it for some reason.

    If search.cpan.org hasn't updated to show the new version by the
    time you read this, you can see it on my own server at
    "http://darrenduncan.net/d/perl/Rosetta-0.15.tar.gz"; or
    "http://darrenduncan.net/d/perl/Rosetta-0.15/lib/SQL/ObjectModel.pm";
    (temp urls).

    Following is the "final"/mature DESCRIPTION from my module's POD,
    which should explain what it does and how it compares to other
    similar modules. If you go to the module itself, you can see the
    SYNOPSIS having code examples of use, and other useful documentation
    like the API.

    Thank you in advance for your prompt consideration.

    ---------------- DESCRIPTION

    This Perl 5 object class is intended to be a powerful but easy to
    use replacement for SQL strings (including support for
    placeholders), which you can use to make queries against a database.
    Each SQL::ObjectModel object can represent a non-ambiguous
    structured command for a database to execute, or one can be a
    non-ambiguous structured description of a database schema object.
    This class supports all types of database operations, including both
    data manipulation and schema manipulation, as well as managing
    database instances and users. You typically construct a database
    query by setting appropriate attributes of these objects, and you
    execute a database query by evaluating the same attributes.
    SQL::ObjectModel objects are designed to be equivalent to SQL in
    both the type of information they carry and in their conceptual
    structure. This is analagous to how XML DOMs are objects that are
    equivalent to XML strings, and they can be converted back and forth
    at will. If you know SQL, or even just relational database theory in
    general, then this module should be easy to learn.

    SQL::ObjectModels 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 DDL, this class supports arbitrarily complex select
    statements, with composite keys and unions, and calls to stored
    functions; this class can also define views and stored procedures
    and triggers. Some of the existing modules, even though they
    construct complete SQL, will take/require fragments of SQL as input
    (such as "where" clauses) By contrast, SQL::ObjectModel takes no SQL
    fragments. All of its inputs are atomic, which means it is also
    easier to analyse the objects for implementing a wider range of
    functionality than previously expected; for example, it is much
    easier to analyse any select statement and generate
    update/insert/delete statements for the virtual rows fetched with it
    (a process known as updateable views).

    Considering that each database product has its own dialect of SQL
    which it implements, you would have to code SQL differently
    depending on which database you are using. One common difference is
    the syntax for specifying an outer join in a select query. Another
    common difference is how to specify that a table column is an
    integer or a boolean or a character string. Moreover, each database
    has a distinct feature set, so you may be able to do tasks with one
    database that you can't do with another. In fact, some databases
    don't support SQL at all, but have similar features that are
    accessible thorough alternate interfaces. SQL::ObjectModel is
    designed to represent a normalized superset of all database features
    that one may reasonably want to use. "Superset" means that if even
    one database supports a feature, you will be able to invoke it with
    this class. You can also reference some features which no database
    currently implements, but it would be reasonable for one to do so
    later. "Normalized" means that if multiple databases support the
    same feature but have different syntax for referencing it, there
    will be exactly one way of referring to it with SQL::ObjectModel. So
    by using this class, you will never have to change your
    database-using code when moving between databases, as long as both
    of them support the features you are using (or they are emulated).
    That said, it is generally expected that if a database is missing a
    specific feature that is easy to emulate, then code which evaluates
    SQL::ObjectModels will emulate it (for example, emulating "left()"
    with "substr()"); in such cases, it is expected that when you use
    such features they will work with any database. For example, if you
    want a model-specified boolean data type, you will always get it,
    whether it is implemented on a per-database-basis as a "boolean" or
    an "int(1)" or a "number(1,0)". Or a model-specified "str" data type
    you will always get it, whether it is called "text" or "varchar2" or
    "sql_varchar".

    SQL::ObjectModel is intended to be just a stateless container for
    database query or schema information. It does not talk to any
    databases by itself and it does not generate or parse any SQL;
    rather, it is intended that other third party modules or code of
    your choice will handle this task. In fact, SQL::ObjectModel is
    designed so that many existing database related modules could be
    updated to use it internally for storing state information,
    including SQL generating or translating modules, and schema
    management modules, and modules which implement object persistence
    in a database. Conceptually speaking, the DBI module itself could be
    updated to take SQL::ObjectModel objects as arguments to its
    "prepare" method, as an alternative (optional) to the SQL strings it
    currently takes. Code which implements the things that
    SQL::ObjectModel describes can do this in any way that they want,
    which can mean either generating and executing SQL, or generating
    Perl code that does the same task and evaling it, should they want
    to (the latter can be a means of emulation). This class should make
    all of that easy.

    SQL::ObjectModel is 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 escaped correctly. By
    using this module, applications can simply copy appropriate
    individual elements in their data dictionaries to SQL::ObjectModel
    properties, including column names, table names, function names,
    literal values, bind variable names, and they don't have to do any
    string parsing or assembling.

    Now, I can only imagine why all of the other SQL generating/parsing
    modules that I know about have excluded privileged support for more
    advanced database features like stored procedures. Either the
    authors didn't have a need for it, or they figured that any other
    prospective users wouldn't need it, or they found it too difficult
    to implement so far and maybe planned to do it later. As for me, I
    can see tremendous value in various advanced features, and so I have
    included privileged support for them in SQL::ObjectModel. You simply
    have to work on projects of a significant size to get an idea that
    these features would provide a large speed, reliability, and
    security savings for you. Look at many large corporate or government
    systems, such as those which have hundreds of tables or millions of
    records, and that may have complicated business logic which governs
    whether data is consistent/valid or not. Within reasonable limits,
    the more work you can get the database to do internally, the better.
    I believe that if these features can also be represented in a
    database-neutral format, such as what SQL::ObjectModel attempts to
    do, then users can get the full power of a database without being
    locked into a single vendor due to all their investment in
    vendor-specific SQL stored procedure code. If customers can move a
    lot more easily, it will help encourage database vendors to keep
    improving their products or lower prices to keep their customers,
    and users in general would benefit. So I do have reasons for trying
    to tackle the advanced database features in SQL::ObjectModel.

  enteredby:   DUNCAND (Darren Duncan)
  enteredon:   Tue Jul  8 04:36:56 2003 GMT

The resulting entry would be:

SQL::
::ObjectModel     adhOg 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=0d200000_0a2a41af75e40557&SUBMIT_pause99_add_mod_preview=1
Immediate (one click) registration:
  
https://pause.perl.org/pause/authenquery?ACTION=add_mod&USERID=0d200000_0a2a41af75e40557&SUBMIT_pause99_add_mod_insertit=1

Reply via email to