File: integer-overflow.result

package info (click to toggle)
tarantool 2.6.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 85,364 kB
  • sloc: ansic: 513,760; cpp: 69,489; sh: 25,650; python: 19,190; perl: 14,973; makefile: 4,173; yacc: 1,329; sql: 1,074; pascal: 620; ruby: 190; awk: 18; lisp: 7
file content (178 lines) | stat: -rw-r--r-- 3,944 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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
test_run = require('test_run').new()
---
...
engine = test_run:get_cfg('engine')
---
...
_ = box.space._session_settings:update('sql_default_engine', {{'=', 2, engine}})
---
...
-- gh-3735: make sure that integer overflows errors are
-- handled during VDBE execution.
-- gh-3810: range of integer is extended up to 2^64 - 1.
--
box.execute('SELECT (2147483647 * 2147483647 * 2147483647);')
---
- null
- 'Failed to execute SQL statement: integer is overflowed'
...
box.execute('SELECT (-9223372036854775808 / -1);')
---
- metadata:
  - name: COLUMN_1
    type: integer
  rows:
  - [9223372036854775808]
...
box.execute('SELECT (-9223372036854775808 - 1);')
---
- null
- 'Failed to execute SQL statement: integer is overflowed'
...
box.execute('SELECT (9223372036854775807 + 1);')
---
- metadata:
  - name: COLUMN_1
    type: integer
  rows:
  - [9223372036854775808]
...
box.execute('SELECT (9223372036854775807 + 9223372036854775807 + 2);')
---
- null
- 'Failed to execute SQL statement: integer is overflowed'
...
box.execute('SELECT 18446744073709551615 * 2;')
---
- null
- 'Failed to execute SQL statement: integer is overflowed'
...
box.execute('SELECT (-9223372036854775807 * (-2));')
---
- metadata:
  - name: COLUMN_1
    type: integer
  rows:
  - [18446744073709551614]
...
-- Literals are checked right after parsing.
--
box.execute('SELECT 9223372036854775808;')
---
- metadata:
  - name: COLUMN_1
    type: integer
  rows:
  - [9223372036854775808]
...
box.execute('SELECT -9223372036854775809;')
---
- null
- Integer literal -9223372036854775809 exceeds the supported range [-9223372036854775808,
  18446744073709551615]
...
box.execute('SELECT 9223372036854775808 - 1;')
---
- metadata:
  - name: COLUMN_1
    type: integer
  rows:
  - [9223372036854775807]
...
box.execute('SELECT 18446744073709551615;')
---
- metadata:
  - name: COLUMN_1
    type: integer
  rows:
  - [18446744073709551615]
...
box.execute('SELECT 18446744073709551616;')
---
- null
- Integer literal 18446744073709551616 exceeds the supported range [-9223372036854775808,
  18446744073709551615]
...
-- Test that CAST may also leads to overflow.
--
box.execute('SELECT CAST(\'9223372036854775808\' AS INTEGER);')
---
- metadata:
  - name: COLUMN_1
    type: integer
  rows:
  - [9223372036854775808]
...
box.execute('SELECT CAST(\'18446744073709551616\' AS INTEGER);')
---
- null
- 'Type mismatch: can not convert 18446744073709551616 to integer'
...
-- Due to inexact represantation of large integers in terms of
-- floating point numbers, numerics with value < UINT64_MAX
-- have UINT64_MAX + 1 value in integer representation:
-- float 18446744073709551600 -> int (18446744073709551616),
-- with error due to conversion = 16.
--
box.execute('SELECT CAST(18446744073709551600. AS INTEGER);')
---
- null
- 'Type mismatch: can not convert 1.84467440737096e+19 to integer'
...
-- gh-3810: make sure that if space contains integers in range
-- [INT64_MAX, UINT64_MAX], they are handled inside SQL in a
-- proper way, which now means that an error is raised.
--
box.execute('CREATE TABLE t (id INT PRIMARY KEY);')
---
- row_count: 1
...
box.space.T:insert({9223372036854775809})
---
- [9223372036854775808]
...
box.space.T:insert({18446744073709551615ULL})
---
- [18446744073709551615]
...
box.execute('SELECT * FROM t;')
---
- metadata:
  - name: ID
    type: integer
  rows:
  - [9223372036854775808]
  - [18446744073709551615]
...
box.space.T:drop()
---
...
-- Make sure that integers stored in NUMBER field are converted
-- to floating point properly.
--
box.execute("CREATE TABLE t(id INT PRIMARY KEY, a NUMBER);")
---
- row_count: 1
...
box.space.T:insert({1, 18446744073709551615ULL})
---
- [1, 18446744073709551615]
...
box.space.T:insert({2, -1})
---
- [2, -1]
...
box.execute("SELECT * FROM t;")
---
- metadata:
  - name: ID
    type: integer
  - name: A
    type: number
  rows:
  - [1, 18446744073709551615]
  - [2, -1]
...
box.space.T:drop()
---
...