Обсуждение: ecpg idea

Поиск
Список
Период
Сортировка

ecpg idea

От
Michael Meskes
Дата:
James just asked me about a new feature in ecpg that I certainly not heard
about yet. However, I think it is a good idea.

Let's say we have the following statement:

exec sql select name into :stringvar from address;

Then stringvar has to be a variable with enough room to store the string. In
contrast to Oracle we allow stringvar to be either an array of char or a
pointer (and the varchar alternatives). However, if you provide a char * you
have to make sure it has memory allocated yourself. James now asked me to to
the correct malloc() inside libecpg if that poointer is NULL.

I never heard about a feature like this on other DBMS but I like the idea.
It should be pretty easy to implement too. Unless it is strictly against
standard I would like to implement it.

Comments anyone?

Michael
--
Michael Meskes                         | Go SF 49ers!
Th.-Heuss-Str. 61, D-41812 Erkelenz    | Go Rhein Fire!
Tel.: (+49) 2431/72651                 | Use Debian GNU/Linux!
Email: Michael.Meskes@gmx.net          | Use PostgreSQL!

Re: [INTERFACES] ecpg idea

От
"Thomas G. Lockhart"
Дата:
> ... if you provide a char * you have to make sure it has memory
> allocated yourself. James now asked me to do the correct malloc()
> inside libecpg if that poointer is NULL.
> I never heard about a feature like this on other DBMS but I like the
> idea. It should be pretty easy to implement too. Unless it is strictly
> against standard I would like to implement it.
> Comments anyone?

How do you get back the handle for the newly malloc'd storage?

                     - Tom

Re: [INTERFACES] ecpg idea

От
James Thompson
Дата:
On Sat, 20 Feb 1999, Michael Meskes wrote:

>
> I never heard about a feature like this on other DBMS but I like the idea.
> It should be pretty easy to implement too. Unless it is strictly against
> standard I would like to implement it.
>
> Comments anyone?

You know you have my vote! :-)

I'll retract my previous private statement about compatibility with Oracle
being important.  After thinking about it some more I'd much rather have a
superiour free product than compatiblility with a comercial product.

The only issue I can forsee is when virtual memory is exhausted, would
this require additional error code defined that would violate some sql
standard?  And would a NULL pointer on return siginfy a null column value
in the table or a failed malloc?

->->->->->->->->->->->->->->->->->->---<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<
James Thompson 138 Cardwell Hall Manhattan, Ks 66506 785-532-0561 Kansas
State University Department of Mathematics
->->->->->->->->->->->->->->->->->->---<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<



Re: [INTERFACES] ecpg idea

От
James Thompson
Дата:
On Sat, 20 Feb 1999, Thomas G. Lockhart wrote:

> > ... if you provide a char * you have to make sure it has memory
> > allocated yourself. James now asked me to do the correct malloc()
> > inside libecpg if that poointer is NULL.
> > I never heard about a feature like this on other DBMS but I like the
> > idea. It should be pretty easy to implement too. Unless it is strictly
> > against standard I would like to implement it.
> > Comments anyone?
>
> How do you get back the handle for the newly malloc'd storage?
>

I'm not sure I understand.  Are your talking about the pointer value?
This was my original idea converted into code.  I was hoping to reduce the
amount of possible buffer overflows due to field size changes in a
database table, plus reduce client code maintenance.

exec sql begin declare
  char *name;
exec sql end declare

name = NULL;

exec sql select first_name
      into :name
      from customer;

if (name){
printf("The value is %s",name);
free(name);
}

If this doesn't fly is there a way to get table field lengths at run time.
I just don't like hard coded array sizes linked to table fields.  I'd
rather malloc the memory prior to the fetch.

->->->->->->->->->->->->->->->->->->---<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<
James Thompson    138 Cardwell Hall  Manhattan, Ks   66506    785-532-0561
Kansas State University                          Department of Mathematics
->->->->->->->->->->->->->->->->->->---<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<




Re: [INTERFACES] ecpg idea

От
Michael Meskes
Дата:
On Sat, Feb 20, 1999 at 12:45:27PM -0600, James Thompson wrote:
> The only issue I can forsee is when virtual memory is exhausted, would
> this require additional error code defined that would violate some sql

I don't see that. There is already an OUT_OF_MEMORY error message.

> standard?  And would a NULL pointer on return siginfy a null column value
> in the table or a failed malloc?

A failed malloc. Null values are only transfered via indicators.

Michael

--
Michael Meskes                         | Go SF 49ers!
Th.-Heuss-Str. 61, D-41812 Erkelenz    | Go Rhein Fire!
Tel.: (+49) 2431/72651                 | Use Debian GNU/Linux!
Email: Michael.Meskes@gmx.net          | Use PostgreSQL!

Re: [INTERFACES] ecpg idea

От
Michael Meskes
Дата:
On Sat, Feb 20, 1999 at 12:56:28PM -0600, James Thompson wrote:
> I just don't like hard coded array sizes linked to table fields.  I'd
> rather malloc the memory prior to the fetch.

Hard coded array sizes have one huge advantage: libecpg will know how many
bytes fit in. Thus there won't be a buffer overflow.

Michael
--
Michael Meskes                         | Go SF 49ers!
Th.-Heuss-Str. 61, D-41812 Erkelenz    | Go Rhein Fire!
Tel.: (+49) 2431/72651                 | Use Debian GNU/Linux!
Email: Michael.Meskes@gmx.net          | Use PostgreSQL!