You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Daniel John Debrunner (JIRA)" <ji...@apache.org> on 2008/01/11 19:32:34 UTC

[jira] Commented: (DERBY-3314) RAND(SEED INTEGER) builtin function always returns the same random value for a given seed.

    [ https://issues.apache.org/jira/browse/DERBY-3314?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12558059#action_12558059 ] 

Daniel John Debrunner commented on DERBY-3314:
----------------------------------------------

ODBC has the RAND function optionally taking a seed value, JDBC doesn't. The optional seed value makes sense for the next example I found where RAND(seed) sets the seed value for subsequent calls to RAND() [no seed] within the same statement. Ie. the sequence of random numbers is within a statement.

Basically these two statements would return the same set of values (three random numbers) since the statement starts a new random sequence and RAND(3) sets the seed of that sequence to be 3..

VALUES RAND(3), RAND(), RAND();
VALUES RAND(3), RAND(), RAND();

Though that does imply some ordering in expression evaluation which I didn't think SQL guarantees.


> RAND(SEED INTEGER) builtin function always returns the same random value for a given seed.
> ------------------------------------------------------------------------------------------
>
>                 Key: DERBY-3314
>                 URL: https://issues.apache.org/jira/browse/DERBY-3314
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.3.1.4, 10.3.2.1, 10.4.0.0
>            Reporter: Daniel John Debrunner
>            Priority: Minor
>
> RAND or {fn RAND(seed)} exists to match the JDBC specification (section C.1)
>    RAND(integer) Random floating point for seed integer
> Trouble is that Derby creates a new Random() instance for every call leading to the same return value for the same seed. Seems to be useful, the function should return a new random number even when handed the same seed.
> Some more specification is probably needed, when does a sequence based upon a seed start?
>    - first call by any connection
>    - sequence within a connection
>    - sequence within a sql context (e.g. procedure call, statement etc.)
> Also need to be wary of memory leaks if the engine needs to hold onto Random objects beyond the lifetime of the RAND call.
> ij> values rand(3);
> 1
> ----------------------
> 0.731057369148862
> 1 row selected
> ij> values rand(3);
> 1
> ----------------------
> 0.731057369148862
> 1 row selected
> ij> values {fn rand(3)};
> 1
> ----------------------
> 0.731057369148862
> 1 row selected

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.