dolphindb 3.0.123 → 3.0.124

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/browser.js CHANGED
@@ -825,41 +825,20 @@ export class DdbObj {
825
825
  ];
826
826
  }
827
827
  case DdbType.iotany: {
828
- // 构造 indexes
829
- const dv = new DataView(buf.buffer, buf.byteOffset);
830
- let i_value_start = 0;
831
- const size = Number(dv.getUint32(i_value_start, le));
832
- i_value_start += 4;
833
- const indexes = new Array(size * 2);
834
- for (let i = 0; i < size; i++) {
835
- const type = dv.getUint32(i_value_start, le);
836
- i_value_start += 4;
837
- const idx = dv.getUint32(i_value_start, le);
838
- i_value_start += 4;
839
- indexes[i * 2] = type;
840
- indexes[i * 2 + 1] = idx;
841
- }
842
- // 构造 sub vector
843
- const type_size = dv.getUint32(i_value_start, le);
844
- i_value_start += 4;
845
- const sub_vec = new Map();
846
- for (let i = 0; i < type_size; i++) {
847
- const flag = dv.getUint16(i_value_start, le);
848
- i_value_start += 2;
849
- const form = flag >> 8;
850
- const sub_type = flag & 0xff;
851
- assert(form === DdbForm.vector, t('iotany sub vector 不支持非 vector 类型'));
852
- const sub_size = dv.getUint32(i_value_start, le);
853
- i_value_start += 8; // 同时跳过 sub_size 和 cols
854
- let [len, vector] = this.parse_vector_items(buf.subarray(i_value_start), le, sub_type, sub_size);
855
- vector = converts(sub_type, vector, sub_size, le);
856
- i_value_start += len;
857
- sub_vec.set(sub_type, vector);
828
+ const [len, anys] = this.parse_vector_items(buf, le, DdbType.any, length);
829
+ const metas = anys[0].data();
830
+ assert(metas.length >= 2, t('iotany 的 meta vector 长度至少为 2'));
831
+ const size = metas[0];
832
+ // let sub_vec_count = meta_vec[1]
833
+ let sub_vecs = new Map();
834
+ for (let i = 1; i < length; i++) {
835
+ const sub_vector = anys[i];
836
+ const sub_type = sub_vector.type;
837
+ sub_vecs.set(sub_type, converts(sub_type, sub_vector.data(), sub_vector.length, le));
858
838
  }
859
839
  return [
860
- i_value_start,
861
- // 根据 indexes 数组构建最终的 value 数组
862
- seq(size, i => (sub_vec.get(indexes[i * 2]))[indexes[i * 2 + 1]])
840
+ len,
841
+ seq(size, i => (sub_vecs.get(metas[i + size + 2]))[metas[i + 2]])
863
842
  ];
864
843
  }
865
844
  // 25 01 type = decimal32, form = vector