Thread: random escape function

random escape function

From
Kris Jurka
Date:
The escape function {fn rand(param)} isn't working on 8.3 servers because
setseed has been changed to return void and reading the JDBC spec, I'm not
sure it ever worked as required.

We map "SELECT {fn rand(0.5)}" to "SELECT setseed(0.5)*0+random()" which
worked in previous servers because the setseed call returned an int.  Now
we get "ERROR: operator does not exist: void * integer".  So that's our
immediate problem, but looking a little closer at the spec shows that rand
is supposed to take an integer argument, not a float limited to 0->1.  So
at minimum we'd need to remap the parameter range.

Also the spec doesn't say what rand is actually supposed to do.  What is
the purpose of providing a rand function if you have to supply a seed
every single time.  The seed has to be random, so where does that come
from?  Is the idea that you pass the same seed every time and get the next
value from that seed's stream?

Given the above functional and definitional problems I think the easiest
course of action is to simply remove the mapping.

Kris Jurka



Re: random escape function

From
"Xavier Poinsard"
Date:
Ok, you can remove this mapping.

Kris Jurka a écrit :
>
> The escape function {fn rand(param)} isn't working on 8.3 servers
> because setseed has been changed to return void and reading the JDBC
> spec, I'm not sure it ever worked as required.
>
> We map "SELECT {fn rand(0.5)}" to "SELECT setseed(0.5)*0+random()" which
> worked in previous servers because the setseed call returned an int.
> Now we get "ERROR: operator does not exist: void * integer".  So that's
> our immediate problem, but looking a little closer at the spec shows
> that rand is supposed to take an integer argument, not a float limited
> to 0->1.  So at minimum we'd need to remap the parameter range.
>
> Also the spec doesn't say what rand is actually supposed to do.  What is
> the purpose of providing a rand function if you have to supply a seed
> every single time.  The seed has to be random, so where does that come
> from?  Is the idea that you pass the same seed every time and get the
> next value from that seed's stream?
>
> Given the above functional and definitional problems I think the easiest
> course of action is to simply remove the mapping.
>
> Kris Jurka
>
>


Re: random escape function

From
Tom Lane
Date:
Kris Jurka <books@ejurka.com> writes:
> Also the spec doesn't say what rand is actually supposed to do.  What is
> the purpose of providing a rand function if you have to supply a seed
> every single time.

Is it really a seed?  Maybe it's supposed to be the desired range of the
output, or something.

            regards, tom lane

Re: random escape function

From
Kris Jurka
Date:

On Wed, 11 Apr 2007, Tom Lane wrote:

> Kris Jurka <books@ejurka.com> writes:
>> Also the spec doesn't say what rand is actually supposed to do.  What is
>> the purpose of providing a rand function if you have to supply a seed
>> every single time.
>
> Is it really a seed?  Maybe it's supposed to be the desired range of the
> output, or something.
>

All the documentation has to say is "RAND(integer) Random floating point
for seed integer)"  so it clearly thinks it's a seed of some kind.

Kris Jurka