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/i18n/dict.json CHANGED
@@ -103,5 +103,8 @@
103
103
  },
104
104
  "iotany sub vector 不支持非 vector 类型": {
105
105
  "en": "iotany sub vector does not support non-vector types"
106
+ },
107
+ "iotany 的 meta vector 长度至少为 2": {
108
+ "en": "The length of the iotany meta vector is at least 2"
106
109
  }
107
110
  }
package/index.js CHANGED
@@ -822,41 +822,20 @@ export class DdbObj {
822
822
  ];
823
823
  }
824
824
  case DdbType.iotany: {
825
- // 构造 indexes
826
- const dv = new DataView(buf.buffer, buf.byteOffset);
827
- let i_value_start = 0;
828
- const size = Number(dv.getUint32(i_value_start, le));
829
- i_value_start += 4;
830
- const indexes = new Array(size * 2);
831
- for (let i = 0; i < size; i++) {
832
- const type = dv.getUint32(i_value_start, le);
833
- i_value_start += 4;
834
- const idx = dv.getUint32(i_value_start, le);
835
- i_value_start += 4;
836
- indexes[i * 2] = type;
837
- indexes[i * 2 + 1] = idx;
838
- }
839
- // 构造 sub vector
840
- const type_size = dv.getUint32(i_value_start, le);
841
- i_value_start += 4;
842
- const sub_vec = new Map();
843
- for (let i = 0; i < type_size; i++) {
844
- const flag = dv.getUint16(i_value_start, le);
845
- i_value_start += 2;
846
- const form = flag >> 8;
847
- const sub_type = flag & 0xff;
848
- assert(form === DdbForm.vector, t('iotany sub vector 不支持非 vector 类型'));
849
- const sub_size = dv.getUint32(i_value_start, le);
850
- i_value_start += 8; // 同时跳过 sub_size 和 cols
851
- let [len, vector] = this.parse_vector_items(buf.subarray(i_value_start), le, sub_type, sub_size);
852
- vector = converts(sub_type, vector, sub_size, le);
853
- i_value_start += len;
854
- sub_vec.set(sub_type, vector);
825
+ const [len, anys] = this.parse_vector_items(buf, le, DdbType.any, length);
826
+ const metas = anys[0].data();
827
+ assert(metas.length >= 2, t('iotany 的 meta vector 长度至少为 2'));
828
+ const size = metas[0];
829
+ // let sub_vec_count = meta_vec[1]
830
+ let sub_vecs = new Map();
831
+ for (let i = 1; i < length; i++) {
832
+ const sub_vector = anys[i];
833
+ const sub_type = sub_vector.type;
834
+ sub_vecs.set(sub_type, converts(sub_type, sub_vector.data(), sub_vector.length, le));
855
835
  }
856
836
  return [
857
- i_value_start,
858
- // 根据 indexes 数组构建最终的 value 数组
859
- seq(size, i => (sub_vec.get(indexes[i * 2]))[indexes[i * 2 + 1]])
837
+ len,
838
+ seq(size, i => (sub_vecs.get(metas[i + size + 2]))[metas[i + 2]])
860
839
  ];
861
840
  }
862
841
  // 25 01 type = decimal32, form = vector