| 280 | } |
| 281 | |
| 282 | TEST_F(CApiValueTest, CreateList) { |
| 283 | auto connection = getConnection(); |
| 284 | lbug_value* value1 = lbug_value_create_int64(123); |
| 285 | lbug_value* value2 = lbug_value_create_int64(456); |
| 286 | lbug_value* value3 = lbug_value_create_int64(789); |
| 287 | lbug_value* value4 = lbug_value_create_int64(101112); |
| 288 | lbug_value* value5 = lbug_value_create_int64(131415); |
| 289 | lbug_value* elements[] = {value1, value2, value3, value4, value5}; |
| 290 | lbug_value* value = nullptr; |
| 291 | lbug_state state = lbug_value_create_list(5, elements, &value); |
| 292 | ASSERT_EQ(state, LbugSuccess); |
| 293 | // Destroy the original values, the list should still be valid |
| 294 | for (int i = 0; i < 5; ++i) { |
| 295 | lbug_value_destroy(elements[i]); |
| 296 | } |
| 297 | ASSERT_FALSE(value->_is_owned_by_cpp); |
| 298 | lbug_prepared_statement stmt; |
| 299 | state = lbug_connection_prepare(connection, (char*)"RETURN $1", &stmt); |
| 300 | ASSERT_EQ(state, LbugSuccess); |
| 301 | state = lbug_prepared_statement_bind_value(&stmt, "1", value); |
| 302 | ASSERT_EQ(state, LbugSuccess); |
| 303 | lbug_query_result result; |
| 304 | state = lbug_connection_execute(connection, &stmt, &result); |
| 305 | ASSERT_EQ(state, LbugSuccess); |
| 306 | ASSERT_TRUE(lbug_query_result_is_success(&result)); |
| 307 | ASSERT_TRUE(lbug_query_result_has_next(&result)); |
| 308 | lbug_flat_tuple flatTuple; |
| 309 | state = lbug_query_result_get_next(&result, &flatTuple); |
| 310 | ASSERT_EQ(state, LbugSuccess); |
| 311 | lbug_value outValue; |
| 312 | ASSERT_EQ(lbug_flat_tuple_get_value(&flatTuple, 0, &outValue), LbugSuccess); |
| 313 | ASSERT_TRUE(outValue._is_owned_by_cpp); |
| 314 | ASSERT_FALSE(lbug_value_is_null(&outValue)); |
| 315 | uint64_t size; |
| 316 | ASSERT_EQ(lbug_value_get_list_size(&outValue, &size), LbugSuccess); |
| 317 | ASSERT_EQ(size, 5); |
| 318 | lbug_value listElement; |
| 319 | ASSERT_EQ(lbug_value_get_list_element(&outValue, 0, &listElement), LbugSuccess); |
| 320 | ASSERT_TRUE(listElement._is_owned_by_cpp); |
| 321 | int64_t int64Result; |
| 322 | ASSERT_EQ(lbug_value_get_int64(&listElement, &int64Result), LbugSuccess); |
| 323 | ASSERT_EQ(int64Result, 123); |
| 324 | lbug_value_destroy(&listElement); |
| 325 | ASSERT_EQ(lbug_value_get_list_element(&outValue, 1, &listElement), LbugSuccess); |
| 326 | ASSERT_TRUE(listElement._is_owned_by_cpp); |
| 327 | ASSERT_EQ(lbug_value_get_int64(&listElement, &int64Result), LbugSuccess); |
| 328 | ASSERT_EQ(int64Result, 456); |
| 329 | lbug_value_destroy(&listElement); |
| 330 | ASSERT_EQ(lbug_value_get_list_element(&outValue, 2, &listElement), LbugSuccess); |
| 331 | ASSERT_TRUE(listElement._is_owned_by_cpp); |
| 332 | ASSERT_EQ(lbug_value_get_int64(&listElement, &int64Result), LbugSuccess); |
| 333 | ASSERT_EQ(int64Result, 789); |
| 334 | lbug_value_destroy(&listElement); |
| 335 | ASSERT_EQ(lbug_value_get_list_element(&outValue, 3, &listElement), LbugSuccess); |
| 336 | ASSERT_TRUE(listElement._is_owned_by_cpp); |
| 337 | ASSERT_EQ(lbug_value_get_int64(&listElement, &int64Result), LbugSuccess); |
| 338 | ASSERT_EQ(int64Result, 101112); |
| 339 | lbug_value_destroy(&listElement); |
nothing calls this directly
no test coverage detected