fst@mcgp1.UUCP (Skip Tavakkolian) (04/26/88)
I recently found two ``bugs'' with esqlc preprocessor which took a little
time to figure out.
1) The first bug has to do with the esqlc preprocessor changing the
host variables to all lower case. For example:
$char FooBar[512];
$select foo_bar from boobaz into $FooBar ;
if (FooBar[0] == 'x') do_somthing(); /* c compiler complains about
FooBar not being defined */
The esqlc preprocessor changes the ``FooBar'' to ``foobar''. Also another
point in the above example is that, you can't use somthing like BUFSIZ instead
of hard coded ``512'' for the size of the array for the same reason (i.e
``bufsiz'' is not ``BUFSIZ'').
2) It seems to me that it would be a required ``feature'' for the preprocessor
to compare the number of data elements in a select statement against the
number of host variables for equality. This is very usefull in long
select statements where the programmer sooner or later will make a mistake.
(NOTE: The Informix-SQL and ESQL/C are release 2.10.00C. Same results were
produced on 3B1 and 3B2 machines.)
Thanks in advance.
Skip Tavakkolian
UUCP ...!uw-beaver!tikal!cti3b1!fstfriedl@vsi.UUCP (Stephen J. Friedl) (04/26/88)
In article <1333@mcgp1.UUCP>, fst@mcgp1.UUCP (Skip Tavakkolian) writes: > 1) The first bug has to do with the esqlc preprocessor changing the > host variables to all lower case. For example: > > $char FooBar[512]; > > $select foo_bar from boobaz into $FooBar ; > if (FooBar[0] == 'x') do_somthing(); /* c compiler complains about > FooBar not being defined */ > > The esqlc preprocessor changes the ``FooBar'' to ``foobar''. Also another > point in the above example is that, you can't use somthing like BUFSIZ instead > of hard coded ``512'' for the size of the array for the same reason (i.e > ``bufsiz'' is not ``BUFSIZ''). The preprocessor appears to take neither `BUFSIZ' nor `bufsiz'; array dimensions must be numeric. This is presumably because esqlc doesn't process #include and #define directives, so it has no way of knowing the length without a simple digit string. This is a bummer because it requires magic all throughout the code :-(. As an aside, it's helpful to declare string host variables as: $string foobar[512]; rather than $char foobar[512]; The former asks SQL to strip trailing blanks from the fetched column and insure that a NUL appears at the end. This is really handy; we almost never need to use $char host variables. Does anybody at Informix Corp. read this newsgroup and accept suggestions and bug reports via email? -- Steve Friedl V-Systems, Inc. 3B2 Wizard friedl@vsi.com {backbones}!vsi.com!friedl attmail!vsi!friedl