@@ -117,6 +117,24 @@ function encodeTuple(value, type) {
117
117
return res ;
118
118
}
119
119
120
+ /**
121
+ * Encodes UDT into QueryParameterWrapper
122
+ * @param {Object } value
123
+ * @param {rust.ComplexType } complexType
124
+ * @returns {Array }
125
+ */
126
+ function encodeUdt ( value , complexType ) {
127
+ let names = [ ] ;
128
+ let values = [ ] ;
129
+ while ( complexType ) {
130
+ let name = complexType . getFieldName ( ) ;
131
+ names . push ( name ) ;
132
+ values . push ( getWrapped ( complexType . getFirstSupportType ( ) , value [ name ] ) ) ;
133
+ complexType = complexType . getSecondSupportType ( ) ;
134
+ }
135
+ return [ names , values ] ;
136
+ }
137
+
120
138
/**
121
139
* Wrap value into MaybeUnsetQueryParameterWrapper based on the type
122
140
* @param {rust.ComplexType } type
@@ -143,7 +161,7 @@ function getWrapped(type, value) {
143
161
* @returns {rust.QueryParameterWrapper }
144
162
*/
145
163
function wrapValueBasedOnType ( type , value ) {
146
- let encodedElement ;
164
+ let encodedElement , name , keyspace , names , values ;
147
165
let tmpElement ;
148
166
// To increase clarity of the error messages, in case value is of different type then expected,
149
167
// when we call some methods on value variable, type is checked explicitly.
@@ -198,6 +216,18 @@ function wrapValueBasedOnType(type, value) {
198
216
} */
199
217
encodedElement = encodeListLike ( value , type . getFirstSupportType ( ) ) ;
200
218
return rust . QueryParameterWrapper . fromSet ( encodedElement ) ;
219
+ case rust . CqlType . UserDefinedType :
220
+ name = type . getUdtName ( ) ;
221
+ keyspace = type . getUdtKeyspace ( ) ;
222
+ encodedElement = encodeUdt ( value , type ) ;
223
+ names = encodedElement [ 0 ] ;
224
+ values = encodedElement [ 1 ] ;
225
+ return rust . QueryParameterWrapper . fromUdt (
226
+ name ,
227
+ keyspace ,
228
+ names ,
229
+ values ,
230
+ ) ;
201
231
case rust . CqlType . Text :
202
232
return rust . QueryParameterWrapper . fromText ( value ) ;
203
233
case rust . CqlType . Timestamp :
@@ -293,7 +323,7 @@ function wrapValueBasedOnType(type, value) {
293
323
default :
294
324
// Or not yet implemented type
295
325
throw new ReferenceError (
296
- `[INTERNAL DRIVER ERROR] Unknown type: ${ type } ` ,
326
+ `[INTERNAL DRIVER ERROR] Unknown type: ${ type . baseType } ` ,
297
327
) ;
298
328
}
299
329
}
0 commit comments