| 817 | } |
| 818 | |
| 819 | func (s *Session) InsertAlignedRecordsOfOneDevice(deviceId string, timestamps []int64, measurementsSlice [][]string, dataTypesSlice [][]TSDataType, valuesSlice [][]interface{}, sorted bool) error { |
| 820 | length := len(timestamps) |
| 821 | if len(measurementsSlice) != length || len(dataTypesSlice) != length || len(valuesSlice) != length { |
| 822 | return errors.New("timestamps, measurementsSlice and valuesSlice's size should be equal") |
| 823 | } |
| 824 | |
| 825 | if !sorted { |
| 826 | sort.Sort(&deviceData{ |
| 827 | timestamps: timestamps, |
| 828 | measurementsSlice: measurementsSlice, |
| 829 | dataTypesSlice: dataTypesSlice, |
| 830 | valuesSlice: valuesSlice, |
| 831 | }) |
| 832 | } |
| 833 | |
| 834 | var err error |
| 835 | valuesList := make([][]byte, length) |
| 836 | for i := 0; i < length; i++ { |
| 837 | if valuesList[i], err = valuesToBytes(dataTypesSlice[i], valuesSlice[i], measurementsSlice[i]); err != nil { |
| 838 | return err |
| 839 | } |
| 840 | } |
| 841 | isAligned := true |
| 842 | request := &rpc.TSInsertRecordsOfOneDeviceReq{ |
| 843 | SessionId: s.sessionId, |
| 844 | PrefixPath: deviceId, |
| 845 | Timestamps: timestamps, |
| 846 | MeasurementsList: measurementsSlice, |
| 847 | ValuesList: valuesList, |
| 848 | IsAligned: &isAligned, |
| 849 | } |
| 850 | |
| 851 | r, err := s.client.InsertRecordsOfOneDevice(context.Background(), request) |
| 852 | |
| 853 | if err != nil && r == nil { |
| 854 | if s.reconnect() { |
| 855 | request.SessionId = s.sessionId |
| 856 | r, err = s.client.InsertRecordsOfOneDevice(context.Background(), request) |
| 857 | } |
| 858 | } |
| 859 | |
| 860 | if err != nil { |
| 861 | return err |
| 862 | } |
| 863 | return VerifySuccess(r) |
| 864 | } |
| 865 | |
| 866 | /* |
| 867 | *insert multiple rows of data, records are independent to each other, in other words, there's no relationship |