diff --git a/src/query_request.cpp b/src/query_request.cpp index e68f8f930..6b22f0558 100644 --- a/src/query_request.cpp +++ b/src/query_request.cpp @@ -64,6 +64,9 @@ size_t QueryRequest::get_indices(StringRef name, IndexVec* indices) { // No more space left for new named values return 0; } + if (name.size() > 0 && name.front() == '"' && name.back() == '"') { + name = name.substr(1, name.size() - 2); + } indices->push_back(value_names_.add(ValueName(name.to_string()))); } diff --git a/test/integration_tests/src/test_by_name.cpp b/test/integration_tests/src/test_by_name.cpp index 9090dcd7c..fb360094f 100644 --- a/test/integration_tests/src/test_by_name.cpp +++ b/test/integration_tests/src/test_by_name.cpp @@ -24,6 +24,10 @@ #include "cassandra.h" #include "test_utils.hpp" +#define INSERT_BY_NAME "INSERT INTO by_name (key, a, b, c) VALUES (?, ?, ?, ?)" +#define INSERT_BY_NAME_CASE_SENSITIVE "INSERT INTO by_name (key, abc, \"ABC\", \"aBc\") VALUES (?, ?, ?, ?)" +#define INSERT_BY_NAME_NULL "INSERT INTO by_name (key, a, b, c, abc, \"ABC\", \"aBc\") VALUES (?, ?, ?, ?, ?, ?, ?)" + struct ByNameTests : public test_utils::SingleSessionTest { ByNameTests() : test_utils::SingleSessionTest(1, 0) { test_utils::execute_query(session, str(boost::format(test_utils::CREATE_KEYSPACE_SIMPLE_FORMAT) @@ -57,108 +61,148 @@ struct ByNameTests : public test_utils::SingleSessionTest { BOOST_REQUIRE(cass_result_row_count(result.get()) > 0); return result; } -}; -BOOST_FIXTURE_TEST_SUITE(by_name, ByNameTests) + void test_bind_and_get(test_utils::CassStatementPtr statement) { + CassUuid key = test_utils::generate_time_uuid(uuid_gen); -BOOST_AUTO_TEST_CASE(bind_and_get) -{ - test_utils::CassPreparedPtr prepared = test_utils::prepare(session, "INSERT INTO by_name (key, a, b, c) VALUES (?, ?, ?, ?)"); + BOOST_REQUIRE_EQUAL(cass_statement_bind_uuid_by_name(statement.get(), "key", key), CASS_OK); + BOOST_REQUIRE_EQUAL(cass_statement_bind_int32_by_name(statement.get(), "a", 9042), CASS_OK); + BOOST_REQUIRE_EQUAL(cass_statement_bind_bool_by_name(statement.get(), "b", cass_true), CASS_OK); + BOOST_REQUIRE_EQUAL(cass_statement_bind_string_by_name(statement.get(), "c", "xyz"), CASS_OK); - test_utils::CassStatementPtr statement(cass_prepared_bind(prepared.get())); + test_utils::CassFuturePtr future(cass_session_execute(session, statement.get())); + test_utils::wait_and_check_error(future.get()); - CassUuid key = test_utils::generate_time_uuid(uuid_gen); + test_utils::CassResultPtr result = select_all_from_by_name(); - BOOST_REQUIRE_EQUAL(cass_statement_bind_uuid_by_name(statement.get(), "key", key), CASS_OK); - BOOST_REQUIRE_EQUAL(cass_statement_bind_int32_by_name(statement.get(), "a", 9042), CASS_OK); - BOOST_REQUIRE_EQUAL(cass_statement_bind_bool_by_name(statement.get(), "b", cass_true), CASS_OK); - BOOST_REQUIRE_EQUAL(cass_statement_bind_string_by_name(statement.get(), "c", "xyz"), CASS_OK); + const CassRow* row = cass_result_first_row(result.get()); - test_utils::CassFuturePtr future(cass_session_execute(session, statement.get())); - test_utils::wait_and_check_error(future.get()); + const CassValue* value; - test_utils::CassResultPtr result = select_all_from_by_name(); + value = cass_row_get_column_by_name(row, "key"); + BOOST_REQUIRE(value != NULL); - const CassRow* row = cass_result_first_row(result.get()); + CassUuid result_key; + BOOST_REQUIRE_EQUAL(cass_value_get_uuid(value, &result_key), CASS_OK); + BOOST_CHECK(test_utils::Value::equal(result_key, key)); - const CassValue* value; + value = cass_row_get_column_by_name(row, "a"); + BOOST_REQUIRE(value != NULL); - value = cass_row_get_column_by_name(row, "key"); - BOOST_REQUIRE(value != NULL); + cass_int32_t a; + BOOST_REQUIRE_EQUAL(cass_value_get_int32(value, &a), CASS_OK); + BOOST_CHECK_EQUAL(a, 9042); - CassUuid result_key; - BOOST_REQUIRE_EQUAL(cass_value_get_uuid(value, &result_key), CASS_OK); - BOOST_CHECK(test_utils::Value::equal(result_key, key)); + value = cass_row_get_column_by_name(row, "b"); + BOOST_REQUIRE(value != NULL); - value = cass_row_get_column_by_name(row, "a"); - BOOST_REQUIRE(value != NULL); + cass_bool_t b; + BOOST_REQUIRE_EQUAL(cass_value_get_bool(value, &b), CASS_OK); + BOOST_CHECK_EQUAL(b, cass_true); - cass_int32_t a; - BOOST_REQUIRE_EQUAL(cass_value_get_int32(value, &a), CASS_OK); - BOOST_CHECK_EQUAL(a, 9042); + value = cass_row_get_column_by_name(row, "c"); + BOOST_REQUIRE(value != NULL); - value = cass_row_get_column_by_name(row, "b"); - BOOST_REQUIRE(value != NULL); + CassString c; + BOOST_REQUIRE_EQUAL(cass_value_get_string(value, &c.data, &c.length), CASS_OK); + BOOST_CHECK(test_utils::Value::equal(c, "xyz")); + } - cass_bool_t b; - BOOST_REQUIRE_EQUAL(cass_value_get_bool(value, &b), CASS_OK); - BOOST_CHECK_EQUAL(b, cass_true); + void test_bind_and_get_case_sensitive(test_utils::CassStatementPtr statement) { + CassUuid key = test_utils::generate_time_uuid(uuid_gen); - value = cass_row_get_column_by_name(row, "c"); - BOOST_REQUIRE(value != NULL); + BOOST_REQUIRE_EQUAL(cass_statement_bind_uuid_by_name(statement.get(), "key", key), CASS_OK); + BOOST_REQUIRE_EQUAL(cass_statement_bind_float_by_name(statement.get(), "\"abc\"", 1.1f), CASS_OK); + BOOST_REQUIRE_EQUAL(cass_statement_bind_float_by_name(statement.get(), "\"ABC\"", 2.2f), CASS_OK); + BOOST_REQUIRE_EQUAL(cass_statement_bind_float_by_name(statement.get(), "\"aBc\"", 3.3f), CASS_OK); - CassString c; - BOOST_REQUIRE_EQUAL(cass_value_get_string(value, &c.data, &c.length), CASS_OK); - BOOST_CHECK(test_utils::Value::equal(c, "xyz")); -} + test_utils::CassFuturePtr future(cass_session_execute(session, statement.get())); + test_utils::wait_and_check_error(future.get()); -BOOST_AUTO_TEST_CASE(bind_and_get_case_sensitive) -{ - test_utils::CassPreparedPtr prepared = test_utils::prepare(session, "INSERT INTO by_name (key, abc, \"ABC\", \"aBc\") VALUES (?, ?, ?, ?)"); + test_utils::CassResultPtr result = select_all_from_by_name(); - test_utils::CassStatementPtr statement(cass_prepared_bind(prepared.get())); + const CassRow* row = cass_result_first_row(result.get()); - CassUuid key = test_utils::generate_time_uuid(uuid_gen); + const CassValue* value; - BOOST_REQUIRE_EQUAL(cass_statement_bind_uuid_by_name(statement.get(), "key", key), CASS_OK); - BOOST_REQUIRE_EQUAL(cass_statement_bind_float_by_name(statement.get(), "\"abc\"", 1.1f), CASS_OK); - BOOST_REQUIRE_EQUAL(cass_statement_bind_float_by_name(statement.get(), "\"ABC\"", 2.2f), CASS_OK); - BOOST_REQUIRE_EQUAL(cass_statement_bind_float_by_name(statement.get(), "\"aBc\"", 3.3f), CASS_OK); + value = cass_row_get_column_by_name(row, "key"); + BOOST_REQUIRE(value != NULL); - test_utils::CassFuturePtr future(cass_session_execute(session, statement.get())); - test_utils::wait_and_check_error(future.get()); + CassUuid result_key; + BOOST_REQUIRE_EQUAL(cass_value_get_uuid(value, &result_key), CASS_OK); + BOOST_CHECK(test_utils::Value::equal(result_key, key)); - test_utils::CassResultPtr result = select_all_from_by_name(); + value = cass_row_get_column_by_name(row, "\"abc\""); + BOOST_REQUIRE(value != NULL); - const CassRow* row = cass_result_first_row(result.get()); + cass_float_t abc; + BOOST_REQUIRE_EQUAL(cass_value_get_float(value, &abc), CASS_OK); + BOOST_CHECK(abc == 1.1f); - const CassValue* value; + value = cass_row_get_column_by_name(row, "\"ABC\""); + BOOST_REQUIRE(value != NULL); - value = cass_row_get_column_by_name(row, "key"); - BOOST_REQUIRE(value != NULL); + BOOST_REQUIRE_EQUAL(cass_value_get_float(value, &abc), CASS_OK); + BOOST_CHECK(abc == 2.2f); - CassUuid result_key; - BOOST_REQUIRE_EQUAL(cass_value_get_uuid(value, &result_key), CASS_OK); - BOOST_CHECK(test_utils::Value::equal(result_key, key)); + value = cass_row_get_column_by_name(row, "\"aBc\""); + BOOST_REQUIRE(value != NULL); - value = cass_row_get_column_by_name(row, "\"abc\""); - BOOST_REQUIRE(value != NULL); + BOOST_REQUIRE_EQUAL(cass_value_get_float(value, &abc), CASS_OK); + BOOST_CHECK(abc == 3.3f); + } - cass_float_t abc; - BOOST_REQUIRE_EQUAL(cass_value_get_float(value, &abc), CASS_OK); - BOOST_CHECK(abc == 1.1f); + void test_null(test_utils::CassStatementPtr statement) { + CassUuid key = test_utils::generate_time_uuid(uuid_gen); + BOOST_REQUIRE_EQUAL(cass_statement_bind_uuid_by_name(statement.get(), "key", key), CASS_OK); + BOOST_REQUIRE_EQUAL(cass_statement_bind_null_by_name(statement.get(), "a"), CASS_OK); + BOOST_REQUIRE_EQUAL(cass_statement_bind_null_by_name(statement.get(), "b"), CASS_OK); + BOOST_REQUIRE_EQUAL(cass_statement_bind_null_by_name(statement.get(), "c"), CASS_OK); + BOOST_REQUIRE_EQUAL(cass_statement_bind_null_by_name(statement.get(), "abc"), CASS_OK); + BOOST_REQUIRE_EQUAL(cass_statement_bind_null_by_name(statement.get(), "\"ABC\""), CASS_OK); + BOOST_REQUIRE_EQUAL(cass_statement_bind_null_by_name(statement.get(), "\"aBc\""), CASS_OK); + + test_utils::CassFuturePtr future(cass_session_execute(session, statement.get())); + test_utils::wait_and_check_error(future.get()); + + test_utils::CassResultPtr result = select_all_from_by_name(); + const CassRow* row = cass_result_first_row(result.get()); + + BOOST_CHECK(cass_value_is_null(cass_row_get_column_by_name(row, "a"))); + BOOST_CHECK(cass_value_is_null(cass_row_get_column_by_name(row, "b"))); + BOOST_CHECK(cass_value_is_null(cass_row_get_column_by_name(row, "c"))); + BOOST_CHECK(cass_value_is_null(cass_row_get_column_by_name(row, "abc"))); + BOOST_CHECK(cass_value_is_null(cass_row_get_column_by_name(row, "\"ABC\""))); + BOOST_CHECK(cass_value_is_null(cass_row_get_column_by_name(row, "\"aBc\""))); + } +}; - value = cass_row_get_column_by_name(row, "\"ABC\""); - BOOST_REQUIRE(value != NULL); +BOOST_FIXTURE_TEST_SUITE(by_name, ByNameTests) - BOOST_REQUIRE_EQUAL(cass_value_get_float(value, &abc), CASS_OK); - BOOST_CHECK(abc == 2.2f); +BOOST_AUTO_TEST_CASE(bind_and_get_prepared) +{ + test_utils::CassPreparedPtr prepared = test_utils::prepare(session, INSERT_BY_NAME); + test_utils::CassStatementPtr statement(cass_prepared_bind(prepared.get())); + test_bind_and_get(statement); +} - value = cass_row_get_column_by_name(row, "\"aBc\""); - BOOST_REQUIRE(value != NULL); +BOOST_AUTO_TEST_CASE(bind_and_get) +{ + test_utils::CassStatementPtr statement(cass_statement_new(INSERT_BY_NAME, 4)); + test_bind_and_get(statement); +} - BOOST_REQUIRE_EQUAL(cass_value_get_float(value, &abc), CASS_OK); - BOOST_CHECK(abc == 3.3f); +BOOST_AUTO_TEST_CASE(bind_and_get_case_sensitive_prepared) +{ + test_utils::CassPreparedPtr prepared = test_utils::prepare(session, INSERT_BY_NAME_CASE_SENSITIVE); + test_utils::CassStatementPtr statement(cass_prepared_bind(prepared.get())); + test_bind_and_get_case_sensitive(statement); +} + +BOOST_AUTO_TEST_CASE(bind_and_get_case_sensitive) +{ + test_utils::CassStatementPtr statement(cass_statement_new(INSERT_BY_NAME_CASE_SENSITIVE, 4)); + test_bind_and_get_case_sensitive(statement); } BOOST_AUTO_TEST_CASE(bind_multiple_columns) @@ -248,32 +292,17 @@ BOOST_AUTO_TEST_CASE(get_invalid_name) BOOST_CHECK(cass_row_get_column_by_name(row, "\"abC\"") == NULL); } -BOOST_AUTO_TEST_CASE(null) +BOOST_AUTO_TEST_CASE(null_prepared) { - test_utils::CassPreparedPtr prepared = test_utils::prepare(session, "INSERT INTO by_name (key, a, b, c, abc, \"ABC\", \"aBc\") VALUES (?, ?, ?, ?, ?, ?, ?)"); + test_utils::CassPreparedPtr prepared = test_utils::prepare(session, INSERT_BY_NAME_NULL); test_utils::CassStatementPtr statement(cass_prepared_bind(prepared.get())); + test_null(statement); +} - CassUuid key = test_utils::generate_time_uuid(uuid_gen); - BOOST_REQUIRE_EQUAL(cass_statement_bind_uuid_by_name(statement.get(), "key", key), CASS_OK); - BOOST_REQUIRE_EQUAL(cass_statement_bind_null_by_name(statement.get(), "a"), CASS_OK); - BOOST_REQUIRE_EQUAL(cass_statement_bind_null_by_name(statement.get(), "b"), CASS_OK); - BOOST_REQUIRE_EQUAL(cass_statement_bind_null_by_name(statement.get(), "c"), CASS_OK); - BOOST_REQUIRE_EQUAL(cass_statement_bind_null_by_name(statement.get(), "abc"), CASS_OK); - BOOST_REQUIRE_EQUAL(cass_statement_bind_null_by_name(statement.get(), "\"ABC\""), CASS_OK); - BOOST_REQUIRE_EQUAL(cass_statement_bind_null_by_name(statement.get(), "\"aBc\""), CASS_OK); - - test_utils::CassFuturePtr future(cass_session_execute(session, statement.get())); - test_utils::wait_and_check_error(future.get()); - - test_utils::CassResultPtr result = select_all_from_by_name(); - const CassRow* row = cass_result_first_row(result.get()); - - BOOST_CHECK(cass_value_is_null(cass_row_get_column_by_name(row, "a"))); - BOOST_CHECK(cass_value_is_null(cass_row_get_column_by_name(row, "b"))); - BOOST_CHECK(cass_value_is_null(cass_row_get_column_by_name(row, "c"))); - BOOST_CHECK(cass_value_is_null(cass_row_get_column_by_name(row, "abc"))); - BOOST_CHECK(cass_value_is_null(cass_row_get_column_by_name(row, "\"ABC\""))); - BOOST_CHECK(cass_value_is_null(cass_row_get_column_by_name(row, "\"aBc\""))); +BOOST_AUTO_TEST_CASE(null) +{ + test_utils::CassStatementPtr statement(cass_statement_new(INSERT_BY_NAME_NULL, 7)); + test_null(statement); } /**