On 9/6/2011 4:04 PM, Morgan, Paul wrote:
Why isn't it suited?  RPG throws errors on file level checks when the
table format changes.  It can't do the same for a missing or changed
column?  Don't you get warning or hard errors with embedded SQL?
RPG already has three native ways of handling file i/o (not counting 
SQL) It has Input/Output specs, externally defined files, and data 
structure I/O.
All of them are based on physical positions within a record. RPG 
requests an entire record from the database, and then splits that record 
into fields using from/to positions.
With externally defined files, the input/output specs are automatically 
generated at compile time -- but they still exist.
Data structure I/O bypasses input/output specs, but it reads a raw 
record buffer (whole record at once) into the data structure.  It does 
not go through the record field-by-field.
What you are suggesting would require RPG to go through the record one 
field at a time, determine the data type of the fields, and convert from 
the file's field type/size to the program's file type/size.
Would that work?  Sure.  But it means RPG has to read the database by 
the field rather than by the record.  To implement it would almost 
certainly require a fourth method of handling files with native i/o. 
Currently new RPG programmers need to learn program-described I/O specs, 
traditional externally defined files, and data structure I/O.  You are 
asking for a fourth method that they'd have to learn, that's field-based 
rather than record-based.  I think that's where the "frankenstein" 
comment comes from -- over the years, it keeps having more functionality 
added on, so programmers need to learn lots of ways of doing everything...
It certainly can be done, but is it worth it?   Is it really that hard 
to recompile a program?  Or, if you truly don't want to, why not use 
embedded SQL that already does what you want?
Catching type errors as soon as possible is the point. At compile
time instead of run time is better if you can do it.  That can be
done with a static typed code variable linked to a static database
column type.
I'm not sure I follow how something like this would catch type errors 
earlier?  Surely you already catch the type errors when you compile?
I'm not really wishing for dynamic typing in RPG.  I want dynamic
data conversion between a current database column type (checked at
compile time and rechecked at run time) to a static code variable
type (set at compile time).
(This is the bit my response, at the top of this message, was responding 
to.)
Isn't embedded SQL a better Frankenstein analogy?  Two different
languages stitched together.
Perhaps, but every language out there uses SQL for database access.  C, 
VB, Java, C#, PHP, you name it...  and embedded SQL is easier to code 
and debug (not to mention more efficient) than using an API-based 
approach like ODBC/CLI or JDBC.  So I think embedded SQL compares 
favorably to the alternative languages.
As an Amazon Associate we earn from qualifying purchases.