diff options
author | SloNN <alex.dmitriev@gmail.com> | 2024-12-25 15:00:02 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-12-25 15:00:02 +0300 |
commit | 65567d39cda1929a30a30b0901dcf416dfba629f (patch) | |
tree | eb15de23c6bf9aa50a66f1c64e6a7eecc8d1f018 | |
parent | d44aeaad9d120090ea6824c76d90184f21bb35bf (diff) | |
download | ydb-65567d39cda1929a30a30b0901dcf416dfba629f.tar.gz |
Tests update (#12946)
Co-authored-by: Alexey Dmitriev <slonnn@yandex-team.ru>
-rw-r--r-- | ydb/tests/sql/canondata/result.json | 4140 | ||||
-rw-r--r-- | ydb/tests/sql/test_base.py | 52 | ||||
-rw-r--r-- | ydb/tests/sql/test_crud.py | 67 | ||||
-rw-r--r-- | ydb/tests/sql/test_inserts.py | 378 | ||||
-rw-r--r-- | ydb/tests/sql/test_sql.py | 115 | ||||
-rw-r--r-- | ydb/tests/sql/ya.make | 3 |
6 files changed, 4683 insertions, 72 deletions
diff --git a/ydb/tests/sql/canondata/result.json b/ydb/tests/sql/canondata/result.json new file mode 100644 index 0000000000..cbef3d18d6 --- /dev/null +++ b/ydb/tests/sql/canondata/result.json @@ -0,0 +1,4140 @@ +{ + "test_inserts.TestYdbInsertsOperations.test_bulk_upsert": [ + { + "id": 0, + "value": "value_0" + }, + { + "id": 1, + "value": "value_1" + }, + { + "id": 2, + "value": "value_2" + }, + { + "id": 3, + "value": "value_3" + }, + { + "id": 4, + "value": "value_4" + }, + { + "id": 5, + "value": "value_5" + }, + { + "id": 6, + "value": "value_6" + }, + { + "id": 7, + "value": "value_7" + }, + { + "id": 8, + "value": "value_8" + }, + { + "id": 9, + "value": "value_9" + }, + { + "id": 10, + "value": "value_10" + }, + { + "id": 11, + "value": "value_11" + }, + { + "id": 12, + "value": "value_12" + }, + { + "id": 13, + "value": "value_13" + }, + { + "id": 14, + "value": "value_14" + }, + { + "id": 15, + "value": "value_15" + }, + { + "id": 16, + "value": "value_16" + }, + { + "id": 17, + "value": "value_17" + }, + { + "id": 18, + "value": "value_18" + }, + { + "id": 19, + "value": "value_19" + }, + { + "id": 20, + "value": "value_20" + }, + { + "id": 21, + "value": "value_21" + }, + { + "id": 22, + "value": "value_22" + }, + { + "id": 23, + "value": "value_23" + }, + { + "id": 24, + "value": "value_24" + }, + { + "id": 25, + "value": "value_25" + }, + { + "id": 26, + "value": "value_26" + }, + { + "id": 27, + "value": "value_27" + }, + { + "id": 28, + "value": "value_28" + }, + { + "id": 29, + "value": "value_29" + }, + { + "id": 30, + "value": "value_30" + }, + { + "id": 31, + "value": "value_31" + }, + { + "id": 32, + "value": "value_32" + }, + { + "id": 33, + "value": "value_33" + }, + { + "id": 34, + "value": "value_34" + }, + { + "id": 35, + "value": "value_35" + }, + { + "id": 36, + "value": "value_36" + }, + { + "id": 37, + "value": "value_37" + }, + { + "id": 38, + "value": "value_38" + }, + { + "id": 39, + "value": "value_39" + }, + { + "id": 40, + "value": "value_40" + }, + { + "id": 41, + "value": "value_41" + }, + { + "id": 42, + "value": "value_42" + }, + { + "id": 43, + "value": "value_43" + }, + { + "id": 44, + "value": "value_44" + }, + { + "id": 45, + "value": "value_45" + }, + { + "id": 46, + "value": "value_46" + }, + { + "id": 47, + "value": "value_47" + }, + { + "id": 48, + "value": "value_48" + }, + { + "id": 49, + "value": "value_49" + }, + { + "id": 50, + "value": "value_50" + }, + { + "id": 51, + "value": "value_51" + }, + { + "id": 52, + "value": "value_52" + }, + { + "id": 53, + "value": "value_53" + }, + { + "id": 54, + "value": "value_54" + }, + { + "id": 55, + "value": "value_55" + }, + { + "id": 56, + "value": "value_56" + }, + { + "id": 57, + "value": "value_57" + }, + { + "id": 58, + "value": "value_58" + }, + { + "id": 59, + "value": "value_59" + }, + { + "id": 60, + "value": "value_60" + }, + { + "id": 61, + "value": "value_61" + }, + { + "id": 62, + "value": "value_62" + }, + { + "id": 63, + "value": "value_63" + }, + { + "id": 64, + "value": "value_64" + }, + { + "id": 65, + "value": "value_65" + }, + { + "id": 66, + "value": "value_66" + }, + { + "id": 67, + "value": "value_67" + }, + { + "id": 68, + "value": "value_68" + }, + { + "id": 69, + "value": "value_69" + }, + { + "id": 70, + "value": "value_70" + }, + { + "id": 71, + "value": "value_71" + }, + { + "id": 72, + "value": "value_72" + }, + { + "id": 73, + "value": "value_73" + }, + { + "id": 74, + "value": "value_74" + }, + { + "id": 75, + "value": "value_75" + }, + { + "id": 76, + "value": "value_76" + }, + { + "id": 77, + "value": "value_77" + }, + { + "id": 78, + "value": "value_78" + }, + { + "id": 79, + "value": "value_79" + }, + { + "id": 80, + "value": "value_80" + }, + { + "id": 81, + "value": "value_81" + }, + { + "id": 82, + "value": "value_82" + }, + { + "id": 83, + "value": "value_83" + }, + { + "id": 84, + "value": "value_84" + }, + { + "id": 85, + "value": "value_85" + }, + { + "id": 86, + "value": "value_86" + }, + { + "id": 87, + "value": "value_87" + }, + { + "id": 88, + "value": "value_88" + }, + { + "id": 89, + "value": "value_89" + }, + { + "id": 90, + "value": "value_90" + }, + { + "id": 91, + "value": "value_91" + }, + { + "id": 92, + "value": "value_92" + }, + { + "id": 93, + "value": "value_93" + }, + { + "id": 94, + "value": "value_94" + }, + { + "id": 95, + "value": "value_95" + }, + { + "id": 96, + "value": "value_96" + }, + { + "id": 97, + "value": "value_97" + }, + { + "id": 98, + "value": "value_98" + }, + { + "id": 99, + "value": "value_99" + }, + { + "id": 100, + "value": "value_100" + }, + { + "id": 101, + "value": "value_101" + }, + { + "id": 102, + "value": "value_102" + }, + { + "id": 103, + "value": "value_103" + }, + { + "id": 104, + "value": "value_104" + }, + { + "id": 105, + "value": "value_105" + }, + { + "id": 106, + "value": "value_106" + }, + { + "id": 107, + "value": "value_107" + }, + { + "id": 108, + "value": "value_108" + }, + { + "id": 109, + "value": "value_109" + }, + { + "id": 110, + "value": "value_110" + }, + { + "id": 111, + "value": "value_111" + }, + { + "id": 112, + "value": "value_112" + }, + { + "id": 113, + "value": "value_113" + }, + { + "id": 114, + "value": "value_114" + }, + { + "id": 115, + "value": "value_115" + }, + { + "id": 116, + "value": "value_116" + }, + { + "id": 117, + "value": "value_117" + }, + { + "id": 118, + "value": "value_118" + }, + { + "id": 119, + "value": "value_119" + }, + { + "id": 120, + "value": "value_120" + }, + { + "id": 121, + "value": "value_121" + }, + { + "id": 122, + "value": "value_122" + }, + { + "id": 123, + "value": "value_123" + }, + { + "id": 124, + "value": "value_124" + }, + { + "id": 125, + "value": "value_125" + }, + { + "id": 126, + "value": "value_126" + }, + { + "id": 127, + "value": "value_127" + }, + { + "id": 128, + "value": "value_128" + }, + { + "id": 129, + "value": "value_129" + }, + { + "id": 130, + "value": "value_130" + }, + { + "id": 131, + "value": "value_131" + }, + { + "id": 132, + "value": "value_132" + }, + { + "id": 133, + "value": "value_133" + }, + { + "id": 134, + "value": "value_134" + }, + { + "id": 135, + "value": "value_135" + }, + { + "id": 136, + "value": "value_136" + }, + { + "id": 137, + "value": "value_137" + }, + { + "id": 138, + "value": "value_138" + }, + { + "id": 139, + "value": "value_139" + }, + { + "id": 140, + "value": "value_140" + }, + { + "id": 141, + "value": "value_141" + }, + { + "id": 142, + "value": "value_142" + }, + { + "id": 143, + "value": "value_143" + }, + { + "id": 144, + "value": "value_144" + }, + { + "id": 145, + "value": "value_145" + }, + { + "id": 146, + "value": "value_146" + }, + { + "id": 147, + "value": "value_147" + }, + { + "id": 148, + "value": "value_148" + }, + { + "id": 149, + "value": "value_149" + }, + { + "id": 150, + "value": "value_150" + }, + { + "id": 151, + "value": "value_151" + }, + { + "id": 152, + "value": "value_152" + }, + { + "id": 153, + "value": "value_153" + }, + { + "id": 154, + "value": "value_154" + }, + { + "id": 155, + "value": "value_155" + }, + { + "id": 156, + "value": "value_156" + }, + { + "id": 157, + "value": "value_157" + }, + { + "id": 158, + "value": "value_158" + }, + { + "id": 159, + "value": "value_159" + }, + { + "id": 160, + "value": "value_160" + }, + { + "id": 161, + "value": "value_161" + }, + { + "id": 162, + "value": "value_162" + }, + { + "id": 163, + "value": "value_163" + }, + { + "id": 164, + "value": "value_164" + }, + { + "id": 165, + "value": "value_165" + }, + { + "id": 166, + "value": "value_166" + }, + { + "id": 167, + "value": "value_167" + }, + { + "id": 168, + "value": "value_168" + }, + { + "id": 169, + "value": "value_169" + }, + { + "id": 170, + "value": "value_170" + }, + { + "id": 171, + "value": "value_171" + }, + { + "id": 172, + "value": "value_172" + }, + { + "id": 173, + "value": "value_173" + }, + { + "id": 174, + "value": "value_174" + }, + { + "id": 175, + "value": "value_175" + }, + { + "id": 176, + "value": "value_176" + }, + { + "id": 177, + "value": "value_177" + }, + { + "id": 178, + "value": "value_178" + }, + { + "id": 179, + "value": "value_179" + }, + { + "id": 180, + "value": "value_180" + }, + { + "id": 181, + "value": "value_181" + }, + { + "id": 182, + "value": "value_182" + }, + { + "id": 183, + "value": "value_183" + }, + { + "id": 184, + "value": "value_184" + }, + { + "id": 185, + "value": "value_185" + }, + { + "id": 186, + "value": "value_186" + }, + { + "id": 187, + "value": "value_187" + }, + { + "id": 188, + "value": "value_188" + }, + { + "id": 189, + "value": "value_189" + }, + { + "id": 190, + "value": "value_190" + }, + { + "id": 191, + "value": "value_191" + }, + { + "id": 192, + "value": "value_192" + }, + { + "id": 193, + "value": "value_193" + }, + { + "id": 194, + "value": "value_194" + }, + { + "id": 195, + "value": "value_195" + }, + { + "id": 196, + "value": "value_196" + }, + { + "id": 197, + "value": "value_197" + }, + { + "id": 198, + "value": "value_198" + }, + { + "id": 199, + "value": "value_199" + }, + { + "id": 200, + "value": "value_200" + }, + { + "id": 201, + "value": "value_201" + }, + { + "id": 202, + "value": "value_202" + }, + { + "id": 203, + "value": "value_203" + }, + { + "id": 204, + "value": "value_204" + }, + { + "id": 205, + "value": "value_205" + }, + { + "id": 206, + "value": "value_206" + }, + { + "id": 207, + "value": "value_207" + }, + { + "id": 208, + "value": "value_208" + }, + { + "id": 209, + "value": "value_209" + }, + { + "id": 210, + "value": "value_210" + }, + { + "id": 211, + "value": "value_211" + }, + { + "id": 212, + "value": "value_212" + }, + { + "id": 213, + "value": "value_213" + }, + { + "id": 214, + "value": "value_214" + }, + { + "id": 215, + "value": "value_215" + }, + { + "id": 216, + "value": "value_216" + }, + { + "id": 217, + "value": "value_217" + }, + { + "id": 218, + "value": "value_218" + }, + { + "id": 219, + "value": "value_219" + }, + { + "id": 220, + "value": "value_220" + }, + { + "id": 221, + "value": "value_221" + }, + { + "id": 222, + "value": "value_222" + }, + { + "id": 223, + "value": "value_223" + }, + { + "id": 224, + "value": "value_224" + }, + { + "id": 225, + "value": "value_225" + }, + { + "id": 226, + "value": "value_226" + }, + { + "id": 227, + "value": "value_227" + }, + { + "id": 228, + "value": "value_228" + }, + { + "id": 229, + "value": "value_229" + }, + { + "id": 230, + "value": "value_230" + }, + { + "id": 231, + "value": "value_231" + }, + { + "id": 232, + "value": "value_232" + }, + { + "id": 233, + "value": "value_233" + }, + { + "id": 234, + "value": "value_234" + }, + { + "id": 235, + "value": "value_235" + }, + { + "id": 236, + "value": "value_236" + }, + { + "id": 237, + "value": "value_237" + }, + { + "id": 238, + "value": "value_238" + }, + { + "id": 239, + "value": "value_239" + }, + { + "id": 240, + "value": "value_240" + }, + { + "id": 241, + "value": "value_241" + }, + { + "id": 242, + "value": "value_242" + }, + { + "id": 243, + "value": "value_243" + }, + { + "id": 244, + "value": "value_244" + }, + { + "id": 245, + "value": "value_245" + }, + { + "id": 246, + "value": "value_246" + }, + { + "id": 247, + "value": "value_247" + }, + { + "id": 248, + "value": "value_248" + }, + { + "id": 249, + "value": "value_249" + }, + { + "id": 250, + "value": "value_250" + }, + { + "id": 251, + "value": "value_251" + }, + { + "id": 252, + "value": "value_252" + }, + { + "id": 253, + "value": "value_253" + }, + { + "id": 254, + "value": "value_254" + }, + { + "id": 255, + "value": "value_255" + }, + { + "id": 256, + "value": "value_256" + }, + { + "id": 257, + "value": "value_257" + }, + { + "id": 258, + "value": "value_258" + }, + { + "id": 259, + "value": "value_259" + }, + { + "id": 260, + "value": "value_260" + }, + { + "id": 261, + "value": "value_261" + }, + { + "id": 262, + "value": "value_262" + }, + { + "id": 263, + "value": "value_263" + }, + { + "id": 264, + "value": "value_264" + }, + { + "id": 265, + "value": "value_265" + }, + { + "id": 266, + "value": "value_266" + }, + { + "id": 267, + "value": "value_267" + }, + { + "id": 268, + "value": "value_268" + }, + { + "id": 269, + "value": "value_269" + }, + { + "id": 270, + "value": "value_270" + }, + { + "id": 271, + "value": "value_271" + }, + { + "id": 272, + "value": "value_272" + }, + { + "id": 273, + "value": "value_273" + }, + { + "id": 274, + "value": "value_274" + }, + { + "id": 275, + "value": "value_275" + }, + { + "id": 276, + "value": "value_276" + }, + { + "id": 277, + "value": "value_277" + }, + { + "id": 278, + "value": "value_278" + }, + { + "id": 279, + "value": "value_279" + }, + { + "id": 280, + "value": "value_280" + }, + { + "id": 281, + "value": "value_281" + }, + { + "id": 282, + "value": "value_282" + }, + { + "id": 283, + "value": "value_283" + }, + { + "id": 284, + "value": "value_284" + }, + { + "id": 285, + "value": "value_285" + }, + { + "id": 286, + "value": "value_286" + }, + { + "id": 287, + "value": "value_287" + }, + { + "id": 288, + "value": "value_288" + }, + { + "id": 289, + "value": "value_289" + }, + { + "id": 290, + "value": "value_290" + }, + { + "id": 291, + "value": "value_291" + }, + { + "id": 292, + "value": "value_292" + }, + { + "id": 293, + "value": "value_293" + }, + { + "id": 294, + "value": "value_294" + }, + { + "id": 295, + "value": "value_295" + }, + { + "id": 296, + "value": "value_296" + }, + { + "id": 297, + "value": "value_297" + }, + { + "id": 298, + "value": "value_298" + }, + { + "id": 299, + "value": "value_299" + }, + { + "id": 300, + "value": "value_300" + }, + { + "id": 301, + "value": "value_301" + }, + { + "id": 302, + "value": "value_302" + }, + { + "id": 303, + "value": "value_303" + }, + { + "id": 304, + "value": "value_304" + }, + { + "id": 305, + "value": "value_305" + }, + { + "id": 306, + "value": "value_306" + }, + { + "id": 307, + "value": "value_307" + }, + { + "id": 308, + "value": "value_308" + }, + { + "id": 309, + "value": "value_309" + }, + { + "id": 310, + "value": "value_310" + }, + { + "id": 311, + "value": "value_311" + }, + { + "id": 312, + "value": "value_312" + }, + { + "id": 313, + "value": "value_313" + }, + { + "id": 314, + "value": "value_314" + }, + { + "id": 315, + "value": "value_315" + }, + { + "id": 316, + "value": "value_316" + }, + { + "id": 317, + "value": "value_317" + }, + { + "id": 318, + "value": "value_318" + }, + { + "id": 319, + "value": "value_319" + }, + { + "id": 320, + "value": "value_320" + }, + { + "id": 321, + "value": "value_321" + }, + { + "id": 322, + "value": "value_322" + }, + { + "id": 323, + "value": "value_323" + }, + { + "id": 324, + "value": "value_324" + }, + { + "id": 325, + "value": "value_325" + }, + { + "id": 326, + "value": "value_326" + }, + { + "id": 327, + "value": "value_327" + }, + { + "id": 328, + "value": "value_328" + }, + { + "id": 329, + "value": "value_329" + }, + { + "id": 330, + "value": "value_330" + }, + { + "id": 331, + "value": "value_331" + }, + { + "id": 332, + "value": "value_332" + }, + { + "id": 333, + "value": "value_333" + }, + { + "id": 334, + "value": "value_334" + }, + { + "id": 335, + "value": "value_335" + }, + { + "id": 336, + "value": "value_336" + }, + { + "id": 337, + "value": "value_337" + }, + { + "id": 338, + "value": "value_338" + }, + { + "id": 339, + "value": "value_339" + }, + { + "id": 340, + "value": "value_340" + }, + { + "id": 341, + "value": "value_341" + }, + { + "id": 342, + "value": "value_342" + }, + { + "id": 343, + "value": "value_343" + }, + { + "id": 344, + "value": "value_344" + }, + { + "id": 345, + "value": "value_345" + }, + { + "id": 346, + "value": "value_346" + }, + { + "id": 347, + "value": "value_347" + }, + { + "id": 348, + "value": "value_348" + }, + { + "id": 349, + "value": "value_349" + }, + { + "id": 350, + "value": "value_350" + }, + { + "id": 351, + "value": "value_351" + }, + { + "id": 352, + "value": "value_352" + }, + { + "id": 353, + "value": "value_353" + }, + { + "id": 354, + "value": "value_354" + }, + { + "id": 355, + "value": "value_355" + }, + { + "id": 356, + "value": "value_356" + }, + { + "id": 357, + "value": "value_357" + }, + { + "id": 358, + "value": "value_358" + }, + { + "id": 359, + "value": "value_359" + }, + { + "id": 360, + "value": "value_360" + }, + { + "id": 361, + "value": "value_361" + }, + { + "id": 362, + "value": "value_362" + }, + { + "id": 363, + "value": "value_363" + }, + { + "id": 364, + "value": "value_364" + }, + { + "id": 365, + "value": "value_365" + }, + { + "id": 366, + "value": "value_366" + }, + { + "id": 367, + "value": "value_367" + }, + { + "id": 368, + "value": "value_368" + }, + { + "id": 369, + "value": "value_369" + }, + { + "id": 370, + "value": "value_370" + }, + { + "id": 371, + "value": "value_371" + }, + { + "id": 372, + "value": "value_372" + }, + { + "id": 373, + "value": "value_373" + }, + { + "id": 374, + "value": "value_374" + }, + { + "id": 375, + "value": "value_375" + }, + { + "id": 376, + "value": "value_376" + }, + { + "id": 377, + "value": "value_377" + }, + { + "id": 378, + "value": "value_378" + }, + { + "id": 379, + "value": "value_379" + }, + { + "id": 380, + "value": "value_380" + }, + { + "id": 381, + "value": "value_381" + }, + { + "id": 382, + "value": "value_382" + }, + { + "id": 383, + "value": "value_383" + }, + { + "id": 384, + "value": "value_384" + }, + { + "id": 385, + "value": "value_385" + }, + { + "id": 386, + "value": "value_386" + }, + { + "id": 387, + "value": "value_387" + }, + { + "id": 388, + "value": "value_388" + }, + { + "id": 389, + "value": "value_389" + }, + { + "id": 390, + "value": "value_390" + }, + { + "id": 391, + "value": "value_391" + }, + { + "id": 392, + "value": "value_392" + }, + { + "id": 393, + "value": "value_393" + }, + { + "id": 394, + "value": "value_394" + }, + { + "id": 395, + "value": "value_395" + }, + { + "id": 396, + "value": "value_396" + }, + { + "id": 397, + "value": "value_397" + }, + { + "id": 398, + "value": "value_398" + }, + { + "id": 399, + "value": "value_399" + }, + { + "id": 400, + "value": "value_400" + }, + { + "id": 401, + "value": "value_401" + }, + { + "id": 402, + "value": "value_402" + }, + { + "id": 403, + "value": "value_403" + }, + { + "id": 404, + "value": "value_404" + }, + { + "id": 405, + "value": "value_405" + }, + { + "id": 406, + "value": "value_406" + }, + { + "id": 407, + "value": "value_407" + }, + { + "id": 408, + "value": "value_408" + }, + { + "id": 409, + "value": "value_409" + }, + { + "id": 410, + "value": "value_410" + }, + { + "id": 411, + "value": "value_411" + }, + { + "id": 412, + "value": "value_412" + }, + { + "id": 413, + "value": "value_413" + }, + { + "id": 414, + "value": "value_414" + }, + { + "id": 415, + "value": "value_415" + }, + { + "id": 416, + "value": "value_416" + }, + { + "id": 417, + "value": "value_417" + }, + { + "id": 418, + "value": "value_418" + }, + { + "id": 419, + "value": "value_419" + }, + { + "id": 420, + "value": "value_420" + }, + { + "id": 421, + "value": "value_421" + }, + { + "id": 422, + "value": "value_422" + }, + { + "id": 423, + "value": "value_423" + }, + { + "id": 424, + "value": "value_424" + }, + { + "id": 425, + "value": "value_425" + }, + { + "id": 426, + "value": "value_426" + }, + { + "id": 427, + "value": "value_427" + }, + { + "id": 428, + "value": "value_428" + }, + { + "id": 429, + "value": "value_429" + }, + { + "id": 430, + "value": "value_430" + }, + { + "id": 431, + "value": "value_431" + }, + { + "id": 432, + "value": "value_432" + }, + { + "id": 433, + "value": "value_433" + }, + { + "id": 434, + "value": "value_434" + }, + { + "id": 435, + "value": "value_435" + }, + { + "id": 436, + "value": "value_436" + }, + { + "id": 437, + "value": "value_437" + }, + { + "id": 438, + "value": "value_438" + }, + { + "id": 439, + "value": "value_439" + }, + { + "id": 440, + "value": "value_440" + }, + { + "id": 441, + "value": "value_441" + }, + { + "id": 442, + "value": "value_442" + }, + { + "id": 443, + "value": "value_443" + }, + { + "id": 444, + "value": "value_444" + }, + { + "id": 445, + "value": "value_445" + }, + { + "id": 446, + "value": "value_446" + }, + { + "id": 447, + "value": "value_447" + }, + { + "id": 448, + "value": "value_448" + }, + { + "id": 449, + "value": "value_449" + }, + { + "id": 450, + "value": "value_450" + }, + { + "id": 451, + "value": "value_451" + }, + { + "id": 452, + "value": "value_452" + }, + { + "id": 453, + "value": "value_453" + }, + { + "id": 454, + "value": "value_454" + }, + { + "id": 455, + "value": "value_455" + }, + { + "id": 456, + "value": "value_456" + }, + { + "id": 457, + "value": "value_457" + }, + { + "id": 458, + "value": "value_458" + }, + { + "id": 459, + "value": "value_459" + }, + { + "id": 460, + "value": "value_460" + }, + { + "id": 461, + "value": "value_461" + }, + { + "id": 462, + "value": "value_462" + }, + { + "id": 463, + "value": "value_463" + }, + { + "id": 464, + "value": "value_464" + }, + { + "id": 465, + "value": "value_465" + }, + { + "id": 466, + "value": "value_466" + }, + { + "id": 467, + "value": "value_467" + }, + { + "id": 468, + "value": "value_468" + }, + { + "id": 469, + "value": "value_469" + }, + { + "id": 470, + "value": "value_470" + }, + { + "id": 471, + "value": "value_471" + }, + { + "id": 472, + "value": "value_472" + }, + { + "id": 473, + "value": "value_473" + }, + { + "id": 474, + "value": "value_474" + }, + { + "id": 475, + "value": "value_475" + }, + { + "id": 476, + "value": "value_476" + }, + { + "id": 477, + "value": "value_477" + }, + { + "id": 478, + "value": "value_478" + }, + { + "id": 479, + "value": "value_479" + }, + { + "id": 480, + "value": "value_480" + }, + { + "id": 481, + "value": "value_481" + }, + { + "id": 482, + "value": "value_482" + }, + { + "id": 483, + "value": "value_483" + }, + { + "id": 484, + "value": "value_484" + }, + { + "id": 485, + "value": "value_485" + }, + { + "id": 486, + "value": "value_486" + }, + { + "id": 487, + "value": "value_487" + }, + { + "id": 488, + "value": "value_488" + }, + { + "id": 489, + "value": "value_489" + }, + { + "id": 490, + "value": "value_490" + }, + { + "id": 491, + "value": "value_491" + }, + { + "id": 492, + "value": "value_492" + }, + { + "id": 493, + "value": "value_493" + }, + { + "id": 494, + "value": "value_494" + }, + { + "id": 495, + "value": "value_495" + }, + { + "id": 496, + "value": "value_496" + }, + { + "id": 497, + "value": "value_497" + }, + { + "id": 498, + "value": "value_498" + }, + { + "id": 499, + "value": "value_499" + }, + { + "id": 500, + "value": "value_500" + }, + { + "id": 501, + "value": "value_501" + }, + { + "id": 502, + "value": "value_502" + }, + { + "id": 503, + "value": "value_503" + }, + { + "id": 504, + "value": "value_504" + }, + { + "id": 505, + "value": "value_505" + }, + { + "id": 506, + "value": "value_506" + }, + { + "id": 507, + "value": "value_507" + }, + { + "id": 508, + "value": "value_508" + }, + { + "id": 509, + "value": "value_509" + }, + { + "id": 510, + "value": "value_510" + }, + { + "id": 511, + "value": "value_511" + }, + { + "id": 512, + "value": "value_512" + }, + { + "id": 513, + "value": "value_513" + }, + { + "id": 514, + "value": "value_514" + }, + { + "id": 515, + "value": "value_515" + }, + { + "id": 516, + "value": "value_516" + }, + { + "id": 517, + "value": "value_517" + }, + { + "id": 518, + "value": "value_518" + }, + { + "id": 519, + "value": "value_519" + }, + { + "id": 520, + "value": "value_520" + }, + { + "id": 521, + "value": "value_521" + }, + { + "id": 522, + "value": "value_522" + }, + { + "id": 523, + "value": "value_523" + }, + { + "id": 524, + "value": "value_524" + }, + { + "id": 525, + "value": "value_525" + }, + { + "id": 526, + "value": "value_526" + }, + { + "id": 527, + "value": "value_527" + }, + { + "id": 528, + "value": "value_528" + }, + { + "id": 529, + "value": "value_529" + }, + { + "id": 530, + "value": "value_530" + }, + { + "id": 531, + "value": "value_531" + }, + { + "id": 532, + "value": "value_532" + }, + { + "id": 533, + "value": "value_533" + }, + { + "id": 534, + "value": "value_534" + }, + { + "id": 535, + "value": "value_535" + }, + { + "id": 536, + "value": "value_536" + }, + { + "id": 537, + "value": "value_537" + }, + { + "id": 538, + "value": "value_538" + }, + { + "id": 539, + "value": "value_539" + }, + { + "id": 540, + "value": "value_540" + }, + { + "id": 541, + "value": "value_541" + }, + { + "id": 542, + "value": "value_542" + }, + { + "id": 543, + "value": "value_543" + }, + { + "id": 544, + "value": "value_544" + }, + { + "id": 545, + "value": "value_545" + }, + { + "id": 546, + "value": "value_546" + }, + { + "id": 547, + "value": "value_547" + }, + { + "id": 548, + "value": "value_548" + }, + { + "id": 549, + "value": "value_549" + }, + { + "id": 550, + "value": "value_550" + }, + { + "id": 551, + "value": "value_551" + }, + { + "id": 552, + "value": "value_552" + }, + { + "id": 553, + "value": "value_553" + }, + { + "id": 554, + "value": "value_554" + }, + { + "id": 555, + "value": "value_555" + }, + { + "id": 556, + "value": "value_556" + }, + { + "id": 557, + "value": "value_557" + }, + { + "id": 558, + "value": "value_558" + }, + { + "id": 559, + "value": "value_559" + }, + { + "id": 560, + "value": "value_560" + }, + { + "id": 561, + "value": "value_561" + }, + { + "id": 562, + "value": "value_562" + }, + { + "id": 563, + "value": "value_563" + }, + { + "id": 564, + "value": "value_564" + }, + { + "id": 565, + "value": "value_565" + }, + { + "id": 566, + "value": "value_566" + }, + { + "id": 567, + "value": "value_567" + }, + { + "id": 568, + "value": "value_568" + }, + { + "id": 569, + "value": "value_569" + }, + { + "id": 570, + "value": "value_570" + }, + { + "id": 571, + "value": "value_571" + }, + { + "id": 572, + "value": "value_572" + }, + { + "id": 573, + "value": "value_573" + }, + { + "id": 574, + "value": "value_574" + }, + { + "id": 575, + "value": "value_575" + }, + { + "id": 576, + "value": "value_576" + }, + { + "id": 577, + "value": "value_577" + }, + { + "id": 578, + "value": "value_578" + }, + { + "id": 579, + "value": "value_579" + }, + { + "id": 580, + "value": "value_580" + }, + { + "id": 581, + "value": "value_581" + }, + { + "id": 582, + "value": "value_582" + }, + { + "id": 583, + "value": "value_583" + }, + { + "id": 584, + "value": "value_584" + }, + { + "id": 585, + "value": "value_585" + }, + { + "id": 586, + "value": "value_586" + }, + { + "id": 587, + "value": "value_587" + }, + { + "id": 588, + "value": "value_588" + }, + { + "id": 589, + "value": "value_589" + }, + { + "id": 590, + "value": "value_590" + }, + { + "id": 591, + "value": "value_591" + }, + { + "id": 592, + "value": "value_592" + }, + { + "id": 593, + "value": "value_593" + }, + { + "id": 594, + "value": "value_594" + }, + { + "id": 595, + "value": "value_595" + }, + { + "id": 596, + "value": "value_596" + }, + { + "id": 597, + "value": "value_597" + }, + { + "id": 598, + "value": "value_598" + }, + { + "id": 599, + "value": "value_599" + }, + { + "id": 600, + "value": "value_600" + }, + { + "id": 601, + "value": "value_601" + }, + { + "id": 602, + "value": "value_602" + }, + { + "id": 603, + "value": "value_603" + }, + { + "id": 604, + "value": "value_604" + }, + { + "id": 605, + "value": "value_605" + }, + { + "id": 606, + "value": "value_606" + }, + { + "id": 607, + "value": "value_607" + }, + { + "id": 608, + "value": "value_608" + }, + { + "id": 609, + "value": "value_609" + }, + { + "id": 610, + "value": "value_610" + }, + { + "id": 611, + "value": "value_611" + }, + { + "id": 612, + "value": "value_612" + }, + { + "id": 613, + "value": "value_613" + }, + { + "id": 614, + "value": "value_614" + }, + { + "id": 615, + "value": "value_615" + }, + { + "id": 616, + "value": "value_616" + }, + { + "id": 617, + "value": "value_617" + }, + { + "id": 618, + "value": "value_618" + }, + { + "id": 619, + "value": "value_619" + }, + { + "id": 620, + "value": "value_620" + }, + { + "id": 621, + "value": "value_621" + }, + { + "id": 622, + "value": "value_622" + }, + { + "id": 623, + "value": "value_623" + }, + { + "id": 624, + "value": "value_624" + }, + { + "id": 625, + "value": "value_625" + }, + { + "id": 626, + "value": "value_626" + }, + { + "id": 627, + "value": "value_627" + }, + { + "id": 628, + "value": "value_628" + }, + { + "id": 629, + "value": "value_629" + }, + { + "id": 630, + "value": "value_630" + }, + { + "id": 631, + "value": "value_631" + }, + { + "id": 632, + "value": "value_632" + }, + { + "id": 633, + "value": "value_633" + }, + { + "id": 634, + "value": "value_634" + }, + { + "id": 635, + "value": "value_635" + }, + { + "id": 636, + "value": "value_636" + }, + { + "id": 637, + "value": "value_637" + }, + { + "id": 638, + "value": "value_638" + }, + { + "id": 639, + "value": "value_639" + }, + { + "id": 640, + "value": "value_640" + }, + { + "id": 641, + "value": "value_641" + }, + { + "id": 642, + "value": "value_642" + }, + { + "id": 643, + "value": "value_643" + }, + { + "id": 644, + "value": "value_644" + }, + { + "id": 645, + "value": "value_645" + }, + { + "id": 646, + "value": "value_646" + }, + { + "id": 647, + "value": "value_647" + }, + { + "id": 648, + "value": "value_648" + }, + { + "id": 649, + "value": "value_649" + }, + { + "id": 650, + "value": "value_650" + }, + { + "id": 651, + "value": "value_651" + }, + { + "id": 652, + "value": "value_652" + }, + { + "id": 653, + "value": "value_653" + }, + { + "id": 654, + "value": "value_654" + }, + { + "id": 655, + "value": "value_655" + }, + { + "id": 656, + "value": "value_656" + }, + { + "id": 657, + "value": "value_657" + }, + { + "id": 658, + "value": "value_658" + }, + { + "id": 659, + "value": "value_659" + }, + { + "id": 660, + "value": "value_660" + }, + { + "id": 661, + "value": "value_661" + }, + { + "id": 662, + "value": "value_662" + }, + { + "id": 663, + "value": "value_663" + }, + { + "id": 664, + "value": "value_664" + }, + { + "id": 665, + "value": "value_665" + }, + { + "id": 666, + "value": "value_666" + }, + { + "id": 667, + "value": "value_667" + }, + { + "id": 668, + "value": "value_668" + }, + { + "id": 669, + "value": "value_669" + }, + { + "id": 670, + "value": "value_670" + }, + { + "id": 671, + "value": "value_671" + }, + { + "id": 672, + "value": "value_672" + }, + { + "id": 673, + "value": "value_673" + }, + { + "id": 674, + "value": "value_674" + }, + { + "id": 675, + "value": "value_675" + }, + { + "id": 676, + "value": "value_676" + }, + { + "id": 677, + "value": "value_677" + }, + { + "id": 678, + "value": "value_678" + }, + { + "id": 679, + "value": "value_679" + }, + { + "id": 680, + "value": "value_680" + }, + { + "id": 681, + "value": "value_681" + }, + { + "id": 682, + "value": "value_682" + }, + { + "id": 683, + "value": "value_683" + }, + { + "id": 684, + "value": "value_684" + }, + { + "id": 685, + "value": "value_685" + }, + { + "id": 686, + "value": "value_686" + }, + { + "id": 687, + "value": "value_687" + }, + { + "id": 688, + "value": "value_688" + }, + { + "id": 689, + "value": "value_689" + }, + { + "id": 690, + "value": "value_690" + }, + { + "id": 691, + "value": "value_691" + }, + { + "id": 692, + "value": "value_692" + }, + { + "id": 693, + "value": "value_693" + }, + { + "id": 694, + "value": "value_694" + }, + { + "id": 695, + "value": "value_695" + }, + { + "id": 696, + "value": "value_696" + }, + { + "id": 697, + "value": "value_697" + }, + { + "id": 698, + "value": "value_698" + }, + { + "id": 699, + "value": "value_699" + }, + { + "id": 700, + "value": "value_700" + }, + { + "id": 701, + "value": "value_701" + }, + { + "id": 702, + "value": "value_702" + }, + { + "id": 703, + "value": "value_703" + }, + { + "id": 704, + "value": "value_704" + }, + { + "id": 705, + "value": "value_705" + }, + { + "id": 706, + "value": "value_706" + }, + { + "id": 707, + "value": "value_707" + }, + { + "id": 708, + "value": "value_708" + }, + { + "id": 709, + "value": "value_709" + }, + { + "id": 710, + "value": "value_710" + }, + { + "id": 711, + "value": "value_711" + }, + { + "id": 712, + "value": "value_712" + }, + { + "id": 713, + "value": "value_713" + }, + { + "id": 714, + "value": "value_714" + }, + { + "id": 715, + "value": "value_715" + }, + { + "id": 716, + "value": "value_716" + }, + { + "id": 717, + "value": "value_717" + }, + { + "id": 718, + "value": "value_718" + }, + { + "id": 719, + "value": "value_719" + }, + { + "id": 720, + "value": "value_720" + }, + { + "id": 721, + "value": "value_721" + }, + { + "id": 722, + "value": "value_722" + }, + { + "id": 723, + "value": "value_723" + }, + { + "id": 724, + "value": "value_724" + }, + { + "id": 725, + "value": "value_725" + }, + { + "id": 726, + "value": "value_726" + }, + { + "id": 727, + "value": "value_727" + }, + { + "id": 728, + "value": "value_728" + }, + { + "id": 729, + "value": "value_729" + }, + { + "id": 730, + "value": "value_730" + }, + { + "id": 731, + "value": "value_731" + }, + { + "id": 732, + "value": "value_732" + }, + { + "id": 733, + "value": "value_733" + }, + { + "id": 734, + "value": "value_734" + }, + { + "id": 735, + "value": "value_735" + }, + { + "id": 736, + "value": "value_736" + }, + { + "id": 737, + "value": "value_737" + }, + { + "id": 738, + "value": "value_738" + }, + { + "id": 739, + "value": "value_739" + }, + { + "id": 740, + "value": "value_740" + }, + { + "id": 741, + "value": "value_741" + }, + { + "id": 742, + "value": "value_742" + }, + { + "id": 743, + "value": "value_743" + }, + { + "id": 744, + "value": "value_744" + }, + { + "id": 745, + "value": "value_745" + }, + { + "id": 746, + "value": "value_746" + }, + { + "id": 747, + "value": "value_747" + }, + { + "id": 748, + "value": "value_748" + }, + { + "id": 749, + "value": "value_749" + }, + { + "id": 750, + "value": "value_750" + }, + { + "id": 751, + "value": "value_751" + }, + { + "id": 752, + "value": "value_752" + }, + { + "id": 753, + "value": "value_753" + }, + { + "id": 754, + "value": "value_754" + }, + { + "id": 755, + "value": "value_755" + }, + { + "id": 756, + "value": "value_756" + }, + { + "id": 757, + "value": "value_757" + }, + { + "id": 758, + "value": "value_758" + }, + { + "id": 759, + "value": "value_759" + }, + { + "id": 760, + "value": "value_760" + }, + { + "id": 761, + "value": "value_761" + }, + { + "id": 762, + "value": "value_762" + }, + { + "id": 763, + "value": "value_763" + }, + { + "id": 764, + "value": "value_764" + }, + { + "id": 765, + "value": "value_765" + }, + { + "id": 766, + "value": "value_766" + }, + { + "id": 767, + "value": "value_767" + }, + { + "id": 768, + "value": "value_768" + }, + { + "id": 769, + "value": "value_769" + }, + { + "id": 770, + "value": "value_770" + }, + { + "id": 771, + "value": "value_771" + }, + { + "id": 772, + "value": "value_772" + }, + { + "id": 773, + "value": "value_773" + }, + { + "id": 774, + "value": "value_774" + }, + { + "id": 775, + "value": "value_775" + }, + { + "id": 776, + "value": "value_776" + }, + { + "id": 777, + "value": "value_777" + }, + { + "id": 778, + "value": "value_778" + }, + { + "id": 779, + "value": "value_779" + }, + { + "id": 780, + "value": "value_780" + }, + { + "id": 781, + "value": "value_781" + }, + { + "id": 782, + "value": "value_782" + }, + { + "id": 783, + "value": "value_783" + }, + { + "id": 784, + "value": "value_784" + }, + { + "id": 785, + "value": "value_785" + }, + { + "id": 786, + "value": "value_786" + }, + { + "id": 787, + "value": "value_787" + }, + { + "id": 788, + "value": "value_788" + }, + { + "id": 789, + "value": "value_789" + }, + { + "id": 790, + "value": "value_790" + }, + { + "id": 791, + "value": "value_791" + }, + { + "id": 792, + "value": "value_792" + }, + { + "id": 793, + "value": "value_793" + }, + { + "id": 794, + "value": "value_794" + }, + { + "id": 795, + "value": "value_795" + }, + { + "id": 796, + "value": "value_796" + }, + { + "id": 797, + "value": "value_797" + }, + { + "id": 798, + "value": "value_798" + }, + { + "id": 799, + "value": "value_799" + }, + { + "id": 800, + "value": "value_800" + }, + { + "id": 801, + "value": "value_801" + }, + { + "id": 802, + "value": "value_802" + }, + { + "id": 803, + "value": "value_803" + }, + { + "id": 804, + "value": "value_804" + }, + { + "id": 805, + "value": "value_805" + }, + { + "id": 806, + "value": "value_806" + }, + { + "id": 807, + "value": "value_807" + }, + { + "id": 808, + "value": "value_808" + }, + { + "id": 809, + "value": "value_809" + }, + { + "id": 810, + "value": "value_810" + }, + { + "id": 811, + "value": "value_811" + }, + { + "id": 812, + "value": "value_812" + }, + { + "id": 813, + "value": "value_813" + }, + { + "id": 814, + "value": "value_814" + }, + { + "id": 815, + "value": "value_815" + }, + { + "id": 816, + "value": "value_816" + }, + { + "id": 817, + "value": "value_817" + }, + { + "id": 818, + "value": "value_818" + }, + { + "id": 819, + "value": "value_819" + }, + { + "id": 820, + "value": "value_820" + }, + { + "id": 821, + "value": "value_821" + }, + { + "id": 822, + "value": "value_822" + }, + { + "id": 823, + "value": "value_823" + }, + { + "id": 824, + "value": "value_824" + }, + { + "id": 825, + "value": "value_825" + }, + { + "id": 826, + "value": "value_826" + }, + { + "id": 827, + "value": "value_827" + }, + { + "id": 828, + "value": "value_828" + }, + { + "id": 829, + "value": "value_829" + }, + { + "id": 830, + "value": "value_830" + }, + { + "id": 831, + "value": "value_831" + }, + { + "id": 832, + "value": "value_832" + }, + { + "id": 833, + "value": "value_833" + }, + { + "id": 834, + "value": "value_834" + }, + { + "id": 835, + "value": "value_835" + }, + { + "id": 836, + "value": "value_836" + }, + { + "id": 837, + "value": "value_837" + }, + { + "id": 838, + "value": "value_838" + }, + { + "id": 839, + "value": "value_839" + }, + { + "id": 840, + "value": "value_840" + }, + { + "id": 841, + "value": "value_841" + }, + { + "id": 842, + "value": "value_842" + }, + { + "id": 843, + "value": "value_843" + }, + { + "id": 844, + "value": "value_844" + }, + { + "id": 845, + "value": "value_845" + }, + { + "id": 846, + "value": "value_846" + }, + { + "id": 847, + "value": "value_847" + }, + { + "id": 848, + "value": "value_848" + }, + { + "id": 849, + "value": "value_849" + }, + { + "id": 850, + "value": "value_850" + }, + { + "id": 851, + "value": "value_851" + }, + { + "id": 852, + "value": "value_852" + }, + { + "id": 853, + "value": "value_853" + }, + { + "id": 854, + "value": "value_854" + }, + { + "id": 855, + "value": "value_855" + }, + { + "id": 856, + "value": "value_856" + }, + { + "id": 857, + "value": "value_857" + }, + { + "id": 858, + "value": "value_858" + }, + { + "id": 859, + "value": "value_859" + }, + { + "id": 860, + "value": "value_860" + }, + { + "id": 861, + "value": "value_861" + }, + { + "id": 862, + "value": "value_862" + }, + { + "id": 863, + "value": "value_863" + }, + { + "id": 864, + "value": "value_864" + }, + { + "id": 865, + "value": "value_865" + }, + { + "id": 866, + "value": "value_866" + }, + { + "id": 867, + "value": "value_867" + }, + { + "id": 868, + "value": "value_868" + }, + { + "id": 869, + "value": "value_869" + }, + { + "id": 870, + "value": "value_870" + }, + { + "id": 871, + "value": "value_871" + }, + { + "id": 872, + "value": "value_872" + }, + { + "id": 873, + "value": "value_873" + }, + { + "id": 874, + "value": "value_874" + }, + { + "id": 875, + "value": "value_875" + }, + { + "id": 876, + "value": "value_876" + }, + { + "id": 877, + "value": "value_877" + }, + { + "id": 878, + "value": "value_878" + }, + { + "id": 879, + "value": "value_879" + }, + { + "id": 880, + "value": "value_880" + }, + { + "id": 881, + "value": "value_881" + }, + { + "id": 882, + "value": "value_882" + }, + { + "id": 883, + "value": "value_883" + }, + { + "id": 884, + "value": "value_884" + }, + { + "id": 885, + "value": "value_885" + }, + { + "id": 886, + "value": "value_886" + }, + { + "id": 887, + "value": "value_887" + }, + { + "id": 888, + "value": "value_888" + }, + { + "id": 889, + "value": "value_889" + }, + { + "id": 890, + "value": "value_890" + }, + { + "id": 891, + "value": "value_891" + }, + { + "id": 892, + "value": "value_892" + }, + { + "id": 893, + "value": "value_893" + }, + { + "id": 894, + "value": "value_894" + }, + { + "id": 895, + "value": "value_895" + }, + { + "id": 896, + "value": "value_896" + }, + { + "id": 897, + "value": "value_897" + }, + { + "id": 898, + "value": "value_898" + }, + { + "id": 899, + "value": "value_899" + }, + { + "id": 900, + "value": "value_900" + }, + { + "id": 901, + "value": "value_901" + }, + { + "id": 902, + "value": "value_902" + }, + { + "id": 903, + "value": "value_903" + }, + { + "id": 904, + "value": "value_904" + }, + { + "id": 905, + "value": "value_905" + }, + { + "id": 906, + "value": "value_906" + }, + { + "id": 907, + "value": "value_907" + }, + { + "id": 908, + "value": "value_908" + }, + { + "id": 909, + "value": "value_909" + }, + { + "id": 910, + "value": "value_910" + }, + { + "id": 911, + "value": "value_911" + }, + { + "id": 912, + "value": "value_912" + }, + { + "id": 913, + "value": "value_913" + }, + { + "id": 914, + "value": "value_914" + }, + { + "id": 915, + "value": "value_915" + }, + { + "id": 916, + "value": "value_916" + }, + { + "id": 917, + "value": "value_917" + }, + { + "id": 918, + "value": "value_918" + }, + { + "id": 919, + "value": "value_919" + }, + { + "id": 920, + "value": "value_920" + }, + { + "id": 921, + "value": "value_921" + }, + { + "id": 922, + "value": "value_922" + }, + { + "id": 923, + "value": "value_923" + }, + { + "id": 924, + "value": "value_924" + }, + { + "id": 925, + "value": "value_925" + }, + { + "id": 926, + "value": "value_926" + }, + { + "id": 927, + "value": "value_927" + }, + { + "id": 928, + "value": "value_928" + }, + { + "id": 929, + "value": "value_929" + }, + { + "id": 930, + "value": "value_930" + }, + { + "id": 931, + "value": "value_931" + }, + { + "id": 932, + "value": "value_932" + }, + { + "id": 933, + "value": "value_933" + }, + { + "id": 934, + "value": "value_934" + }, + { + "id": 935, + "value": "value_935" + }, + { + "id": 936, + "value": "value_936" + }, + { + "id": 937, + "value": "value_937" + }, + { + "id": 938, + "value": "value_938" + }, + { + "id": 939, + "value": "value_939" + }, + { + "id": 940, + "value": "value_940" + }, + { + "id": 941, + "value": "value_941" + }, + { + "id": 942, + "value": "value_942" + }, + { + "id": 943, + "value": "value_943" + }, + { + "id": 944, + "value": "value_944" + }, + { + "id": 945, + "value": "value_945" + }, + { + "id": 946, + "value": "value_946" + }, + { + "id": 947, + "value": "value_947" + }, + { + "id": 948, + "value": "value_948" + }, + { + "id": 949, + "value": "value_949" + }, + { + "id": 950, + "value": "value_950" + }, + { + "id": 951, + "value": "value_951" + }, + { + "id": 952, + "value": "value_952" + }, + { + "id": 953, + "value": "value_953" + }, + { + "id": 954, + "value": "value_954" + }, + { + "id": 955, + "value": "value_955" + }, + { + "id": 956, + "value": "value_956" + }, + { + "id": 957, + "value": "value_957" + }, + { + "id": 958, + "value": "value_958" + }, + { + "id": 959, + "value": "value_959" + }, + { + "id": 960, + "value": "value_960" + }, + { + "id": 961, + "value": "value_961" + }, + { + "id": 962, + "value": "value_962" + }, + { + "id": 963, + "value": "value_963" + }, + { + "id": 964, + "value": "value_964" + }, + { + "id": 965, + "value": "value_965" + }, + { + "id": 966, + "value": "value_966" + }, + { + "id": 967, + "value": "value_967" + }, + { + "id": 968, + "value": "value_968" + }, + { + "id": 969, + "value": "value_969" + }, + { + "id": 970, + "value": "value_970" + }, + { + "id": 971, + "value": "value_971" + }, + { + "id": 972, + "value": "value_972" + }, + { + "id": 973, + "value": "value_973" + }, + { + "id": 974, + "value": "value_974" + }, + { + "id": 975, + "value": "value_975" + }, + { + "id": 976, + "value": "value_976" + }, + { + "id": 977, + "value": "value_977" + }, + { + "id": 978, + "value": "value_978" + }, + { + "id": 979, + "value": "value_979" + }, + { + "id": 980, + "value": "value_980" + }, + { + "id": 981, + "value": "value_981" + }, + { + "id": 982, + "value": "value_982" + }, + { + "id": 983, + "value": "value_983" + }, + { + "id": 984, + "value": "value_984" + }, + { + "id": 985, + "value": "value_985" + }, + { + "id": 986, + "value": "value_986" + }, + { + "id": 987, + "value": "value_987" + }, + { + "id": 988, + "value": "value_988" + }, + { + "id": 989, + "value": "value_989" + }, + { + "id": 990, + "value": "value_990" + }, + { + "id": 991, + "value": "value_991" + }, + { + "id": 992, + "value": "value_992" + }, + { + "id": 993, + "value": "value_993" + }, + { + "id": 994, + "value": "value_994" + }, + { + "id": 995, + "value": "value_995" + }, + { + "id": 996, + "value": "value_996" + }, + { + "id": 997, + "value": "value_997" + }, + { + "id": 998, + "value": "value_998" + }, + { + "id": 999, + "value": "value_999" + } + ], + "test_inserts.TestYdbInsertsOperations.test_bulk_upsert_same_values": [ + { + "id": 1, + "value": "duplicate_value_2" + }, + { + "id": 2, + "value": "unique_value" + } + ], + "test_inserts.TestYdbInsertsOperations.test_bulk_upsert_same_values_simple": [ + { + "id": 1, + "value": "initial_value" + }, + { + "id": 2, + "value": "unique_value" + } + ], + "test_inserts.TestYdbInsertsOperations.test_bulk_upsert_with_valid_and_invalid_data": [ + { + "count": 0 + } + ], + "test_inserts.TestYdbInsertsOperations.test_concurrent_inserts": [ + { + "count": 100 + } + ], + "test_inserts.TestYdbInsertsOperations.test_transactional_update": [ + { + "value": "transactional_update" + } + ], + "test_sql.TestYdbKvWorkload.test_dynumber": [ + { + "column0": 4 + } + ], + "test_sql.TestYdbKvWorkload.test_minimal_maximal_values[Int32--2147483648-False]": [ + { + "id": 1, + "value": -2147483648 + } + ], + "test_sql.TestYdbKvWorkload.test_minimal_maximal_values[Int32--2147483648-True]": [ + { + "id": 1, + "value": -2147483648 + } + ], + "test_sql.TestYdbKvWorkload.test_minimal_maximal_values[Int32-2147483647-False]": [ + { + "id": 1, + "value": 2147483647 + } + ], + "test_sql.TestYdbKvWorkload.test_minimal_maximal_values[Int32-2147483647-True]": [ + { + "id": 1, + "value": 2147483647 + } + ], + "test_sql.TestYdbKvWorkload.test_minimal_maximal_values[Int64--9223372036854775808-False]": [ + { + "id": 1, + "value": -9223372036854775808 + } + ], + "test_sql.TestYdbKvWorkload.test_minimal_maximal_values[Int64--9223372036854775808-True]": [ + { + "id": 1, + "value": -9223372036854775808 + } + ], + "test_sql.TestYdbKvWorkload.test_minimal_maximal_values[Int64-9223372036854775807-False]": [ + { + "id": 1, + "value": 9223372036854775807 + } + ], + "test_sql.TestYdbKvWorkload.test_minimal_maximal_values[Int64-9223372036854775807-True]": [ + { + "id": 1, + "value": 9223372036854775807 + } + ], + "test_sql.TestYdbKvWorkload.test_minimal_maximal_values[UInt32-0-False]": [ + { + "id": 1, + "value": 0 + } + ], + "test_sql.TestYdbKvWorkload.test_minimal_maximal_values[UInt32-0-True]": [ + { + "id": 1, + "value": 0 + } + ], + "test_sql.TestYdbKvWorkload.test_minimal_maximal_values[UInt32-4294967295-False]": [ + { + "id": 1, + "value": 4294967295 + } + ], + "test_sql.TestYdbKvWorkload.test_minimal_maximal_values[UInt32-4294967295-True]": [ + { + "id": 1, + "value": 4294967295 + } + ], + "test_sql.TestYdbKvWorkload.test_minimal_maximal_values[Uint64-0-False]": [ + { + "id": 1, + "value": 0 + } + ], + "test_sql.TestYdbKvWorkload.test_minimal_maximal_values[Uint64-0-True]": [ + { + "id": 1, + "value": 0 + } + ], + "test_sql.TestYdbKvWorkload.test_minimal_maximal_values[Uint64-18446744073709551615-False]": [ + { + "id": 1, + "value": 18446744073709551615 + } + ], + "test_sql.TestYdbKvWorkload.test_minimal_maximal_values[Uint64-18446744073709551615-True]": [ + { + "id": 1, + "value": 18446744073709551615 + } + ] +} diff --git a/ydb/tests/sql/test_base.py b/ydb/tests/sql/test_base.py new file mode 100644 index 0000000000..63c0acb884 --- /dev/null +++ b/ydb/tests/sql/test_base.py @@ -0,0 +1,52 @@ +import ydb +import os + +from ydb.tests.library.harness.kikimr_runner import KiKiMR +from ydb.tests.library.harness.kikimr_config import KikimrConfigGenerator +from ydb.tests.library.common.types import Erasure +from typing import Callable, Any, List + + +class TestBase: + + @classmethod + def setup_class(cls): + cls.database = "/Root" + cls.cluster = KiKiMR(KikimrConfigGenerator(erasure=Erasure.NONE)) + cls.cluster.start() + cls.driver = ydb.Driver( + ydb.DriverConfig( + database=cls.database, + endpoint="%s:%s" % ( + cls.cluster.nodes[1].host, cls.cluster.nodes[1].port + ) + ) + ) + cls.driver.wait() + cls.pool = ydb.QuerySessionPool(cls.driver) + + @classmethod + def teardown_class(cls): + cls.pool.stop() + cls.driver.stop() + cls.cluster.stop() + + def setup_method(self): + current_test_full_name = os.environ.get("PYTEST_CURRENT_TEST") + self.table_path = "insert_table_" + current_test_full_name.replace("::", ".").removesuffix(" (setup)") + + def query(self, text, tx: ydb.QueryTxContext | None = None) -> List[Any]: + results = [] + if tx is None: + result_sets = self.pool.execute_with_retries(text) + for result_set in result_sets: + results.extend(result_set.rows) + else: + with tx.execute(text) as result_sets: + for result_set in result_sets: + results.extend(result_set.rows) + + return results + + def transactional(self, fn: Callable[[ydb.QuerySession], List[Any]]): + return self.pool.retry_operation_sync(lambda session: fn(session)) diff --git a/ydb/tests/sql/test_crud.py b/ydb/tests/sql/test_crud.py new file mode 100644 index 0000000000..d8bfc509b7 --- /dev/null +++ b/ydb/tests/sql/test_crud.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +from .test_base import TestBase + + +class TestYdbCrudOperations(TestBase): + + def test_crud_operations(self): + """ + Test basic CRUD operations: Create, Read, Update, Delete + """ + + table_name = f"{self.table_path}" + + table_definition = f""" + CREATE TABLE `{table_name}` ( + id Int64 NOT NULL, + value Utf8 NOT NULL, + PRIMARY KEY (id) + ) + PARTITION BY HASH(id) + WITH(STORE=COLUMN) + """ + + self.query(table_definition) + + # Create (Insert) + self.query( + f""" + UPSERT INTO `{table_name}` (id, value) VALUES (1, 'initial_value'); + """ + ) + + # Read + rows = self.query( + f""" + SELECT value FROM `{table_name}` WHERE id = 1; + """ + ) + assert len(rows) == 1, "Expected one row after insert" + assert rows[0].value == 'initial_value', "Value mismatch for inserted data" + + # Update + self.query( + f""" + UPDATE `{table_name}` SET value = 'updated_value' WHERE id = 1; + """ + ) + rows = self.query( + f""" + SELECT value FROM `{table_name}` WHERE id = 1; + """ + ) + assert len(rows) == 1, "Expected one row after update" + assert rows[0].value == 'updated_value', "Value mismatch after update" + + # Delete + self.query( + f""" + DELETE FROM `{table_name}` WHERE id = 1; + """ + ) + rows = self.query( + f""" + SELECT value FROM `{table_name}` WHERE id = 1; + """ + ) + assert len(rows) == 0, "Expected no rows after delete" diff --git a/ydb/tests/sql/test_inserts.py b/ydb/tests/sql/test_inserts.py new file mode 100644 index 0000000000..93cc5477bf --- /dev/null +++ b/ydb/tests/sql/test_inserts.py @@ -0,0 +1,378 @@ +# -*- coding: utf-8 -*- +import ydb +import pytest + +from concurrent.futures import ThreadPoolExecutor +from .test_base import TestBase + + +class TestYdbInsertsOperations(TestBase): + + def test_insert_multiple_rows(self): + """ + Test inserting multiple rows and verify all are present + """ + table_name = f"{self.table_path}_multiple" + + self.query( + f""" + CREATE TABLE `{table_name}` ( + id Int64 NOT NULL, + value Utf8 NOT NULL, + PRIMARY KEY (id) + ) + PARTITION BY HASH(id) + WITH(STORE=COLUMN) + """ + ) + + # Insert multiple rows + for i in range(100): + self.query( + f""" + UPSERT INTO `{table_name}` (id, value) VALUES ({i}, 'value_{i}'); + """ + ) + + # Verify all rows are inserted + rows = self.query( + f""" + SELECT COUNT(*) as count FROM `{table_name}`; + """ + ) + assert len(rows) == 1 and rows[0].count == 100, f"Expected 100 rows, found: {rows[0].count}" + + def test_concurrent_inserts(self): + """ + Test concurrent insertion and verify data integrity + """ + table_name = f"{self.table_path}_concurrent" + + self.query( + f""" + CREATE TABLE `{table_name}` ( + id Int64 NOT NULL, + value Utf8 NOT NULL, + PRIMARY KEY (id) + ) + PARTITION BY HASH(id) + WITH(STORE=COLUMN) + """ + ) + + # Function to insert data in parallel + def insert_data(offset): + for i in range(50): + self.query( + f""" + UPSERT INTO `{table_name}` (id, value) VALUES ({offset + i}, 'value_{offset + i}'); + """ + ) + + # Execute inserts in parallel + with ThreadPoolExecutor(max_workers=2) as executor: + futures = [executor.submit(insert_data, offset) for offset in [0, 50]] + + # Confirm all tasks completed + for future in futures: + future.result() + + # Verify all rows are inserted + rows = self.query( + f""" + SELECT COUNT(*) as count FROM `{table_name}`; + """ + ) + + return rows + + def test_transactional_update(self): + """ + Test updating data with transaction + """ + table_name = f"{self.table_path}_transaction" + + self.pool.execute_with_retries( + f""" + CREATE TABLE `{table_name}` ( + id Int64 NOT NULL, + value Utf8 NOT NULL, + PRIMARY KEY (id) + ) + PARTITION BY HASH(id) + WITH(STORE=COLUMN) + """ + ) + + # Insert initial data + self.query( + f""" + UPSERT INTO `{table_name}` (id, value) VALUES (1, 'initial_value'); + """ + ) + + def process(session): + tx = session.transaction().begin() + self.query( + f""" + UPDATE `{table_name}` SET value = 'transactional_update' WHERE id = 1; + """, + tx + ) + tx.commit() + + tx = session.transaction().begin() + self.query( + f""" + UPDATE `{table_name}` SET value = 'transactional_update_2' WHERE id = 1; + """, + tx + ) + tx.rollback() + + # Transactional Update + self.transactional(process) + + # Verify the update + return self.query( + f""" + SELECT value FROM `{table_name}` WHERE id = 1; + """ + ) + + def test_bulk_upsert(self): + """ + Test bulk upsert functionality + """ + table_name = f"{self.table_path}_bulk" + + # Create table + self.query( + f""" + CREATE TABLE `{table_name}` ( + id Int64 NOT NULL, + value Utf8 NOT NULL, + PRIMARY KEY (id) + ) + PARTITION BY HASH(id) + WITH(STORE=COLUMN) + """ + ) + + # Prepare data for bulk upsert + data = [{'id': i, 'value': f'value_{i}'} for i in range(1000)] + + column_types = ydb.BulkUpsertColumns() + column_types.add_column("id", ydb.PrimitiveType.Int64) + column_types.add_column("value", ydb.PrimitiveType.Utf8) + + # Bulk Upsert + self.driver.table_client.bulk_upsert( + f"{self.database}/{table_name}", + data, + column_types + ) + + return self.query( + f""" + SELECT * FROM `{table_name}` ORDER BY id asc; + """ + ) + + def test_bulk_upsert_same_values(self): + """ + Test bulk upsert functionality + """ + table_name = f"{self.table_path}_bulk" + + # Create table + self.query( + f""" + CREATE TABLE `{table_name}` ( + id Int64 NOT NULL, + value Utf8 NOT NULL, + PRIMARY KEY (id) + ) + PARTITION BY HASH(id) + WITH(STORE=COLUMN) + """ + ) + + # Prepare data with duplicate keys + data = [ + {'id': 1, 'value': 'initial_value'}, + {'id': 1, 'value': 'duplicate_value_1'}, + {'id': 2, 'value': 'unique_value'}, + {'id': 1, 'value': 'duplicate_value_2'} # The last entry with id=1 should prevail + ] + + column_types = ydb.BulkUpsertColumns() + column_types.add_column("id", ydb.PrimitiveType.Int64) + column_types.add_column("value", ydb.PrimitiveType.Utf8) + + # Bulk Upsert + self.driver.table_client.bulk_upsert( + f"{self.database}/{table_name}", + data, + column_types + ) + + # Verify that the last value persists for duplicate key + return self.query( + f""" + SELECT id, value FROM `{table_name}` ORDER BY id ASC; + """ + ) + + def test_bulk_upsert_same_values_simple(self): + """ + Test bulk upsert functionality + """ + table_name = f"{self.table_path}_bulk_simple" + + # Create table + self.query( + f""" + CREATE TABLE `{table_name}` ( + id Int64 NOT NULL, + value Utf8 NOT NULL, + PRIMARY KEY (id) + ) + PARTITION BY HASH(id) + WITH(STORE=COLUMN) + """ + ) + + # Prepare data + data = [ + {'id': 1, 'value': 'initial_value'}, + {'id': 2, 'value': 'unique_value'} + ] + + column_types = ydb.BulkUpsertColumns() + column_types.add_column("id", ydb.PrimitiveType.Int64) + column_types.add_column("value", ydb.PrimitiveType.Utf8) + + # Bulk Upsert + self.driver.table_client.bulk_upsert( + f"{self.database}/{table_name}", + data, + column_types + ) + + # Verify that the last value persists for duplicate key + return self.query( + f""" + SELECT id, value FROM `{table_name}` ORDER BY id ASC; + """ + ) + + def test_bulk_upsert_with_valid_and_invalid_data(self): + """ + Test bulk upsert with a mix of valid and invalid data to ensure no data is inserted if any invalid data is present. + """ + table_name = f"{self.table_path}_bulk_invalid" + + # Create table + self.pool.execute_with_retries( + f""" + CREATE TABLE `{table_name}` ( + id Int64 NOT NULL, + value Utf8 NOT NULL, + PRIMARY KEY (id) + ); + """ + ) + + # Prepare data with one invalid entry + valid_data = [ + {'id': 1, 'value': 'valid_value_1'}, + {'id': 2, 'value': 'valid_value_2'} + ] + invalid_data = [ + {'id': 'invalid_id', 'value': 'invalid_value'} # invalid 'id' type + ] + + # Combine data + combined_data = valid_data + invalid_data + + # Attempt Bulk Upsert + column_types = ydb.BulkUpsertColumns() + column_types.add_column("id", ydb.PrimitiveType.Int64) + column_types.add_column("value", ydb.PrimitiveType.Utf8) + + with pytest.raises(TypeError): + self.driver.table_client.bulk_upsert( + f"{self.database}/{table_name}", + combined_data, + column_types + ) + + # Verify no data was inserted + return self.query( + f""" + SELECT COUNT(*) as count FROM `{table_name}`; + """ + ) + + def test_bulk_upsert_parallel(self): + """ + Test parallel insertion of 100,000 rows using bulk upsert and verify all data is inserted correctly. + """ + table_name = f"{self.table_path}_bulk_parallel" + + # Create table + self.pool.execute_with_retries( + f""" + CREATE TABLE `{table_name}` ( + id Int64 NOT NULL, + value Utf8 NOT NULL, + PRIMARY KEY (id) + ); + """ + ) + + # Function to perform bulk upsert + def bulk_upsert_task(start, end): + data = [{'id': i, 'value': f'value_{i}'} for i in range(start, end)] + + column_types = ydb.BulkUpsertColumns() + column_types.add_column("id", ydb.PrimitiveType.Int64) + column_types.add_column("value", ydb.PrimitiveType.Utf8) + + self.driver.table_client.bulk_upsert( + f"{self.database}/{table_name}", + data, + column_types + ) + + # Number of rows and chunk size + total_rows = 100000 + chunk_size = 10000 # Chunk size for each thread + + # Parallel execution + with ThreadPoolExecutor(max_workers=10) as executor: + futures = [ + executor.submit(bulk_upsert_task, i, i + chunk_size) + for i in range(0, total_rows, chunk_size) + ] + + # Ensure all threads complete + for future in futures: + future.result() + + # Verify the total inserted rows + rows = self.query( + f""" + SELECT id, value FROM `{table_name}` ORDER BY id ASC; + """ + ) + + assert len(rows) == total_rows, f"Expected {total_rows} rows, found: {len(rows)}" + + # Verify each row + for i, row in enumerate(rows): + expected_id = i + expected_value = f"value_{i}" + assert row.id == expected_id, f"Expected id {expected_id}, found: {row.id}" + assert row.value == expected_value, f"Expected value {expected_value}, found: {row.value}" diff --git a/ydb/tests/sql/test_sql.py b/ydb/tests/sql/test_sql.py index cc7501f0b2..7fdca64802 100644 --- a/ydb/tests/sql/test_sql.py +++ b/ydb/tests/sql/test_sql.py @@ -1,84 +1,57 @@ # -*- coding: utf-8 -*- -import os - -import ydb - -from ydb.tests.library.harness.kikimr_runner import KiKiMR -from ydb.tests.library.harness.kikimr_config import KikimrConfigGenerator -from ydb.tests.library.common.types import Erasure - - -class TestYdbKvWorkload(object): - @classmethod - def setup_class(cls): - cls.cluster = KiKiMR(KikimrConfigGenerator(erasure=Erasure.NONE)) - cls.cluster.start() - cls.driver = ydb.Driver( - ydb.DriverConfig( - database='/Root', - endpoint="%s:%s" % ( - cls.cluster.nodes[1].host, cls.cluster.nodes[1].port - ) - ) - ) - cls.driver.wait() - cls.pool = ydb.QuerySessionPool(cls.driver) - - @classmethod - def teardown_class(cls): - cls.pool.stop() - cls.driver.stop() - cls.cluster.stop() - - def setup(self): - current_test_full_name = os.environ.get("PYTEST_CURRENT_TEST") - self.table_path = "table_" + current_test_full_name.replace("::", ".").removesuffix(" (setup)") - - def test_minimal_maximal_values(self): +import pytest +from .test_base import TestBase + + +class TestYdbKvWorkload(TestBase): + + @pytest.mark.parametrize("is_column", [True, False]) + @pytest.mark.parametrize("type_,value", + [ + ("Int32", -2 ** 31), + ("Int32", 2 ** 31 - 1), + ("UInt32", 0), + ("UInt32", 2 ** 32 - 1), + ("Int64", -2 ** 63), + ("Int64", 2 ** 63 - 1), + ("Uint64", 0), + ("Uint64", 2 ** 64 - 1) + ]) + def test_minimal_maximal_values(self, is_column, type_, value): """ Test verifies correctness of handling minimal and maximal values for types """ - type_to_values_to_check = { - "Int32": [-2 ** 31, 2 ** 31 - 1], - "Uint32": [0, 2 ** 32 - 1], - "Int64": [-2 ** 63, 2 ** 63 - 1], - "Uint64": [0, 2 ** 64 - 1], - } + # table_name = table_name = "{}/{}_{}_{}".format(self.table_path, type_, value, is_column) + table_name = f"{self.table_path}" - for type_, values in type_to_values_to_check.items(): - for i, value in enumerate(values): - table_name = table_name = "{}/{}_{}".format(self.table_path, type_, i) + table_definition = f""" + CREATE TABLE `{table_name}` ( + id Int64 NOT NULL, + value {type_} NOT NULL, + PRIMARY KEY (id) + ) """ - self.pool.execute_with_retries( - f""" - CREATE TABLE `{table_name}` ( - id Int64, - value {type_}, - PRIMARY KEY (id) - );""" - ) + if is_column: + table_definition += " PARTITION BY HASH(id) WITH(STORE=COLUMN)" - self.pool.execute_with_retries( - f""" - UPSERT INTO `{table_name}` (id, value) VALUES (1, {value}); - """ - ) + self.query(table_definition) - result = self.pool.execute_with_retries( - f""" - SELECT id, value FROM `{table_name}` WHERE id = 1; - """ - ) + self.query( + f""" + UPSERT INTO `{table_name}` (id, value) VALUES (1, {value}); + """ + ) - rows = result[0].rows - assert len(rows) == 1, "Expected one row" - assert rows[0].id == 1, "ID does not match" - assert rows[0].value == value, "Value does not match" + return self.query( + f""" + SELECT id, value FROM `{table_name}` WHERE id = 1; + """ + ) def test_dynumber(self): table_name = "{}/{}".format(self.table_path, "dynamber") - self.pool.execute_with_retries( + self.query( f""" CREATE TABLE `{table_name}` ( id DyNumber, @@ -86,7 +59,7 @@ class TestYdbKvWorkload(object): );""" ) - self.pool.execute_with_retries( + self.query( f""" UPSERT INTO `{table_name}` (id) VALUES @@ -98,10 +71,8 @@ class TestYdbKvWorkload(object): """ ) - result = self.pool.execute_with_retries( + return self.query( f""" SELECT count(*) FROM `{table_name}`; """ ) - - assert result[0].rows[0][0] == 4 diff --git a/ydb/tests/sql/ya.make b/ydb/tests/sql/ya.make index 3091729c9a..d3d0a58404 100644 --- a/ydb/tests/sql/ya.make +++ b/ydb/tests/sql/ya.make @@ -2,7 +2,10 @@ PY3TEST() ENV(YDB_DRIVER_BINARY="ydb/apps/ydbd/ydbd") TEST_SRCS( + test_base.py test_sql.py + test_crud.py + test_inserts.py ) SIZE(MEDIUM) |