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
|
env = require('test_run')
---
...
test_run = env.new()
---
...
--
-- gh-4201: Introduce varbinary field type.
--
s = box.schema.space.create('withdata')
---
...
s:format({{"b", "integer"}})
---
...
_ = s:create_index('pk', {parts = {1, "varbinary"}})
---
- error: Field 1 has type 'integer' in space format, but type 'varbinary' in index
definition
...
s:format({{"b", "varbinary"}})
---
...
_ = s:create_index('pk', {parts = {1, "integer"}})
---
- error: Field 1 has type 'varbinary' in space format, but type 'integer' in index
definition
...
pk = s:create_index('pk', {parts = {1, "varbinary"}})
---
...
buffer = require('buffer')
---
...
ffi = require('ffi')
---
...
test_run:cmd("setopt delimiter ';'")
---
- true
...
function bintuple_insert(space, bytes)
local tmpbuf = buffer.IBUF_SHARED
tmpbuf:reset()
local p = tmpbuf:alloc(3 + #bytes)
p[0] = 0x91
p[1] = 0xC4
p[2] = #bytes
for i, c in pairs(bytes) do p[i + 3 - 1] = c end
ffi.cdef[[int box_insert(uint32_t space_id, const char *tuple, const char *tuple_end, box_tuple_t **result);]]
ffi.C.box_insert(space.id, tmpbuf.rpos, tmpbuf.wpos, nil)
end
test_run:cmd("setopt delimiter ''");
---
...
bintuple_insert(s, {0xDE, 0xAD, 0xBE, 0xAF})
---
...
bintuple_insert(s, {0xFE, 0xED, 0xFA, 0xCE})
---
...
s:select()
---
- - [!!binary 3q2+rw==]
- [!!binary /u36zg==]
...
box.execute("SELECT * FROM \"withdata\" WHERE \"b\" < x'FEEDFACE';")
---
- metadata:
- name: b
type: varbinary
rows:
- [!!binary 3q2+rw==]
...
pk:alter({parts = {1, "scalar"}})
---
...
s:format({{"b", "scalar"}})
---
...
s:insert({11})
---
- [11]
...
s:insert({22})
---
- [22]
...
s:insert({"11"})
---
- ['11']
...
s:insert({"22"})
---
- ['22']
...
s:select()
---
- - [11]
- [22]
- ['11']
- ['22']
- [!!binary 3q2+rw==]
- [!!binary /u36zg==]
...
box.execute("SELECT * FROM \"withdata\" WHERE \"b\" <= x'DEADBEAF';")
---
- metadata:
- name: b
type: scalar
rows:
- [11]
- [22]
- ['11']
- ['22']
- [!!binary 3q2+rw==]
...
pk:alter({parts = {1, "varbinary"}})
---
- error: 'Tuple field 1 type does not match one required by operation: expected varbinary'
...
s:delete({11})
---
- [11]
...
s:delete({22})
---
- [22]
...
s:delete({"11"})
---
- ['11']
...
s:delete({"22"})
---
- ['22']
...
bintuple_insert(s, {0xFA, 0xDE, 0xDE, 0xAD})
---
...
pk:alter({parts = {1, "varbinary"}})
---
...
s:select()
---
- - [!!binary 3q2+rw==]
- [!!binary +t7erQ==]
- [!!binary /u36zg==]
...
s:drop()
---
...
|