Module: Tarantool::UnpackTuples
- Included in:
- Response
- Defined in:
- lib/tarantool/response.rb,
ext/tarantool/response_c.c
Constant Summary collapse
- UTF8 =
'utf-8'.freeze
Constants included from Tarantool::Util::Packer
Tarantool::Util::Packer::INT16, Tarantool::Util::Packer::INT32, Tarantool::Util::Packer::INT64, Tarantool::Util::Packer::INT8, Tarantool::Util::Packer::MAX_INT16, Tarantool::Util::Packer::MAX_INT32, Tarantool::Util::Packer::MAX_INT64, Tarantool::Util::Packer::MAX_INT8, Tarantool::Util::Packer::MAX_SINT16, Tarantool::Util::Packer::MAX_SINT32, Tarantool::Util::Packer::MAX_SINT64, Tarantool::Util::Packer::MAX_SINT8, Tarantool::Util::Packer::MIN_INT, Tarantool::Util::Packer::MIN_SINT16, Tarantool::Util::Packer::MIN_SINT32, Tarantool::Util::Packer::MIN_SINT64, Tarantool::Util::Packer::MIN_SINT8, Tarantool::Util::Packer::SINT16, Tarantool::Util::Packer::SINT32, Tarantool::Util::Packer::SINT64, Tarantool::Util::Packer::SINT8
Instance Method Summary collapse
Instance Method Details
#_unpack_field(data, field, i_o, realfield_o, serializers) ⇒ Object
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 |
# File 'ext/tarantool/response_c.c', line 102 def _unpack_field(tuple_str, field, i, realfield, serializers) field_size = ::BinUtils.slice_ber!(tuple_str) return nil if field_size == 0 case field when :int, :integer if field_size != 4 raise ValueError, "Bad field size #{field_size} for integer field ##{i}" end ::BinUtils.slice_int32_le!(tuple_str) when :string, :str str = tuple_str.slice!(0, field_size) str[0,1] = EMPTY if str < ONE str.force_encoding(UTF8) when :int64 if field_size != 8 raise ValueError, "Bad field size #{field_size} for 64bit integer field ##{i}" end ::BinUtils.slice_int64_le!(tuple_str) when :bytes tuple_str.slice!(0, field_size) when :int16 if field_size != 2 raise ValueError, "Bad field size #{field_size} for 16bit integer field ##{i}" end ::BinUtils.slice_int16_le!(tuple_str) when :int8 if field_size != 1 raise ValueError, "Bad field size #{field_size} for 8bit integer field ##{i}" end ::BinUtils.slice_int8!(tuple_str) when :sint if field_size != 4 raise ValueError, "Bad field size #{field_size} for integer field ##{i}" end ::BinUtils.slice_sint32_le!(tuple_str) when :sint64 if field_size != 8 raise ValueError, "Bad field size #{field_size} for 64bit integer field ##{i}" end ::BinUtils.slice_sint64_le!(tuple_str) when :sint16 if field_size != 2 raise ValueError, "Bad field size #{field_size} for 16bit integer field ##{i}" end ::BinUtils.slice_sint16_le!(tuple_str) when :sint8 if field_size != 1 raise ValueError, "Bad field size #{field_size} for 8bit integer field ##{i}" end ::BinUtils.slice_sint8!(tuple_str) when :varint case field_size when 8 ::BinUtils.slice_int64_le!(tuple_str) when 4 ::BinUtils.slice_int32_le!(tuple_str) when 2 ::BinUtils.slice_int16_le!(tuple_str) else raise ValueError, "Bad field size #{field_size} for integer field ##{i}" end when :auto str = tuple_str.slice!(0, field_size).force_encoding('utf-8') case field_size when 8, 4, 2 Util::AutoType.new(str) else str end else (serializers[realfield] ||= get_serializer(field)).decode(tuple_str.slice!(0, field_size)) end end |