Merge 'Added 'likelihood' scalar function' from Sachin Kumar Singh

The `likelihood(X,Y)` function returns argument X unchanged. The value Y
in likelihood(X,Y) must be a floating point constant between 0.0 and
1.0, inclusive.
```
sqlite> explain SELECT likelihood(42, 0.0);
addr  opcode         p1    p2    p3    p4             p5  comment
----  -------------  ----  ----  ----  -------------  --  -------------
0     Init           0     6     0                    0   Start at 6
1     Once           0     3     0                    0
2     Integer        42    2     0                    0   r[2]=42
3     Copy           2     1     0                    0   r[1]=r[2]
4     ResultRow      1     1     0                    0   output=r[1]
5     Halt           0     0     0                    0
6     Goto           0     1     0                    0
```
```
limbo> explain SELECT likelihood(42, 0.0);
addr  opcode             p1    p2    p3    p4             p5  comment
----  -----------------  ----  ----  ----  -------------  --  -------
0     Init               0     4     0                    0   Start at 4
1     Copy               2     1     0                    0   r[1]=r[2]
2     ResultRow          1     1     0                    0   output=r[1]
3     Halt               0     0     0                    0
4     Integer            42    2     0                    0   r[2]=42
5     Goto               0     1     0                    0
```

Closes #1303
This commit is contained in:
Pekka Enberg
2025-04-11 09:34:36 +03:00
5 changed files with 134 additions and 2 deletions

View File

@@ -211,6 +211,38 @@ do_execsql_test likely-null {
select likely(NULL)
} {}
do_execsql_test likelihood-string {
SELECT likelihood('limbo', 0.5);
} {limbo}
do_execsql_test likelihood-string-high-probability {
SELECT likelihood('database', 0.9375);
} {database}
do_execsql_test likelihood-integer {
SELECT likelihood(100, 0.0625);
} {100}
do_execsql_test likelihood-integer-probability-1 {
SELECT likelihood(42, 1.0);
} {42}
do_execsql_test likelihood-decimal {
SELECT likelihood(12.34, 0.5);
} {12.34}
do_execsql_test likelihood-null {
SELECT likelihood(NULL, 0.5);
} {}
do_execsql_test likelihood-blob {
SELECT hex(likelihood(x'01020304', 0.5));
} {01020304}
do_execsql_test likelihood-zero-probability {
SELECT likelihood(999, 0.0);
} {999}
do_execsql_test unhex-str-ab {
SELECT unhex('6162');
} {ab}