File: gh-4766-wrong-cast-from-blob-to-int.test.lua

package info (click to toggle)
tarantool 2.6.0-1.4
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 85,412 kB
  • sloc: ansic: 513,775; cpp: 69,493; sh: 25,650; python: 19,190; perl: 14,973; makefile: 4,178; yacc: 1,329; sql: 1,074; pascal: 620; ruby: 190; awk: 18; lisp: 7
file content (45 lines) | stat: -rwxr-xr-x 1,557 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/usr/bin/env tarantool
test = require("sqltester")
test:plan(3)

--
-- Make sure that a blob as part of a tuple can be cast to NUMBER,
-- INTEGER and UNSIGNED. Prior to this patch, an error could
-- appear due to the absence of '\0' at the end of the BLOB.
--
test:do_execsql_test(
    "gh-4766-1",
    [[
        CREATE TABLE t1 (a VARBINARY PRIMARY KEY);
        INSERT INTO t1 VALUES (X'33'), (X'372020202020');
        SELECT a, CAST(a AS NUMBER), CAST(a AS INTEGER), CAST(a AS UNSIGNED) FROM t1;
    ]], {
        '3', 3, 3, 3, '7     ', 7, 7, 7
    })

--
-- Make sure that BLOB longer than 12287 bytes cannot be cast to
-- INTEGER.
--
long_str = string.rep('0', 12284)
test:do_execsql_test(
    "gh-4766-2",
    "SELECT CAST('" .. long_str .. "123'" .. " AS INTEGER);", {
        123
    })


test:do_catchsql_test(
    "gh-4766-3",
    "SELECT CAST('" .. long_str .. "1234'" .. " AS INTEGER);", {
        1, "Type mismatch: can not convert 000000000000000000000000000000000" ..
        "0000000000000000000000000000000000000000000000000000000000000000000" ..
        "0000000000000000000000000000000000000000000000000000000000000000000" ..
        "0000000000000000000000000000000000000000000000000000000000000000000" ..
        "0000000000000000000000000000000000000000000000000000000000000000000" ..
        "0000000000000000000000000000000000000000000000000000000000000000000" ..
        "0000000000000000000000000000000000000000000000000000000000000000000" ..
        "000000000000000000000000000000000000000000000"
    })

test:finish_test()