@@ -230,3 +230,160 @@ to extract or compare the index key values.
230
230
key_def = require('key_def')
231
231
k = key_def.new({{type = 'string', fieldno = 3}})
232
232
k:totable()
233
+
234
+ .. _key_validate_key :
235
+
236
+ .. method :: validate_key(key)
237
+
238
+ Since version :doc: `3.1.0 </release/3.1.0 >`
239
+
240
+ Validates all parts of the specified key match the key definition. Partial keys are considered valid.
241
+ Returns nothing on success.
242
+
243
+ If the key fails the validation, a ``box.error `` type exception is raised.
244
+
245
+ **Example: **
246
+
247
+ .. code-block :: tarantoolsession
248
+
249
+ -- Create a rule: key = {1 ('unsigned'), 2 (string)}
250
+ -- Validate key {1001} (only id data type). Returns nothing
251
+ -- Validate key {'x'}. ER_KEY_PART_TYPE is raised
252
+ -- Validate key ({1000, 2000}). ER_KEY_PART_TYPE is raised
253
+ -- Validate key ({1000, 'abc', 'xyz'}). ER_KEY_PART_COUNT is raised
254
+
255
+ tarantool> key_def = require('key_def').new({{fieldno = 1, type = 'unsigned'},
256
+ > {fieldno = 2, type = 'string'}})
257
+ ---
258
+ ...
259
+
260
+ tarantool> key_def:validate_key({1001})
261
+ ---
262
+ ...
263
+
264
+ tarantool> key_def:validate_key({'x'})
265
+ ---
266
+ - error: 'Supplied key type of part 0 does not match index part type: expected unsigned'
267
+ ...
268
+
269
+ tarantool> key_def:validate_key({1000, 2000})
270
+ ---
271
+ - error: 'Supplied key type of part 1 does not match index part type: expected string'
272
+ ...
273
+
274
+ tarantool> key_def:validate_key({1000, 'abc', 'xyz'})
275
+ ---
276
+ - error: 'Invalid key part count: (expected [0..2], got 3)
277
+ ...
278
+
279
+ .. _key_validate_full_key :
280
+
281
+ .. method :: validate_full_key(key)
282
+
283
+ Since version :doc: `3.1.0 </release/3.1.0 >`
284
+
285
+ Validates whether they input ``key `` contains all fields and mathces the rules of the key definition object.
286
+ Returns nothing on success.
287
+
288
+ If the key fails the validation, a ``box.error `` type exception is raised.
289
+
290
+ **Example: **
291
+
292
+ .. code-block :: tarantoolsession
293
+
294
+ -- Create a rule: key = {1 ('unsigned'), 2 (string)}
295
+ -- Validate key {100, "Testuser"}. Returns nothing
296
+ -- Validate key ({100}). ER_EXACT_MATCH is raised
297
+
298
+ tarantool> key_def = require('key_def').new({{fieldno = 1, type = 'unsigned'},
299
+ > {fieldno = 2, type = 'string'}})
300
+ ---
301
+ ...
302
+
303
+ tarantool> key_def:validate_full_key({100, "Testuser"})
304
+ ---
305
+ ...
306
+
307
+ tarantool> key_def:validate_full_key({100})
308
+ ---
309
+ - error: 'Invalid key part count in an exact match: (expected 2, got 1)
310
+ ...
311
+
312
+ .. _key_validate_tuple :
313
+
314
+ .. method :: validate_tuple(tuple)
315
+
316
+ Since version :doc: `3.1.0 </release/3.1.0 >`
317
+
318
+ Validates whether the ``tuple `` matches the rules of the key definition object
319
+ Returns nothing on success.
320
+
321
+ If the key fails the validation, a ``box.error `` type exception is raised.
322
+
323
+ **Example: **
324
+
325
+ .. code-block :: tarantoolsession
326
+
327
+ -- Create a rule: tuple = {id (number), name (string), age (number)}
328
+ -- Validate tuple {1001, "Testuser", 28}. Returns nothing
329
+
330
+ tarantool> key_def = require('key_def').new({
331
+ > {fieldno = 1, type = 'number'},
332
+ > {fieldno = 2, type = 'string'},
333
+ > {fieldno = 3, type = 'number'})
334
+ ---
335
+ ...
336
+
337
+ tarantool> key_def:validate_tuple({1001, "Testuser", 28})
338
+ ---
339
+ ...
340
+
341
+ .. _key_compare_keys :
342
+
343
+ .. method :: compare_keys(key_a, key_b)
344
+
345
+ Since version :doc: `3.1.0 </release/3.1.0 >`
346
+
347
+ Compares two keys against each other and according to the key definition object.
348
+ On success, returns:
349
+
350
+ * ``<0 `` if ``key_a `` parts are less than ``key_b `` parts
351
+ * ``0 `` if ``key_a `` parts are equal to ``key_b `` parts
352
+ * ``>0 `` if ``key_a `` parts are greater than ``key_b `` parts
353
+
354
+ If any key does not match the key definition rules, a ``box.error `` type exception is raised.
355
+
356
+ **Example: **
357
+
358
+ .. code-block :: tarantoolsession
359
+
360
+ -- Create a rule: key = {1 ('unsigned'), 2 (string)}
361
+ -- Validate keys ({1000, 'x'}, {1000, 'y'}). Returns -1
362
+ -- Validate keys ({1000, 'x'}, {1000, 'x'}). Returns 0
363
+ -- Validate keys ({1000, 'x'}, {1000}). Returns 0
364
+ -- Validate keys ({2000, 'x'}, {1000, 'x'}). Returns 1
365
+
366
+ tarantool> key_def = require('key_def').new({{fieldno = 1, type = 'unsigned'},
367
+ > {fieldno = 2, type = 'string'}})
368
+ ---
369
+ ...
370
+
371
+ tarantool> key_def:compare_keys({1000, 'x'}, {1000, 'y'})
372
+ ---
373
+ - -1
374
+ ...
375
+
376
+ tarantool> key_def:compare_keys({1000, 'x'}, {1000, 'x'})
377
+ ---
378
+ - 0
379
+ ...
380
+
381
+ tarantool> key_def:compare_keys({1000, 'x'}, {1000})
382
+ ---
383
+ - 0
384
+ ...
385
+
386
+ tarantool> key_def:compare_keys({2000, 'x'}, {1000, 'x'})
387
+ ---
388
+ - 1
389
+ ...
0 commit comments