Exemple #1
0
  void validate_results(const std::string& table_name,
                        size_t num_concurrent_requests,
                        const std::vector<CassUuid>& ids)
  {
    std::string select_query = str(boost::format("SELECT * FROM %s;") % table_name);
    test_utils::CassResultPtr result;
    test_utils::execute_query(session, select_query, &result, CASS_CONSISTENCY_QUORUM);
    BOOST_REQUIRE_EQUAL(cass_result_row_count(result.get()), num_concurrent_requests);

    test_utils::CassIteratorPtr iterator(cass_iterator_from_result(result.get()));

    while (cass_iterator_next(iterator.get())) {
      const CassRow* row = cass_iterator_get_row(iterator.get());
      CassUuid result_id;
      cass_value_get_uuid(cass_row_get_column(row, 0), &result_id);
      BOOST_REQUIRE(std::find(ids.begin(), ids.end(), result_id) != ids.end());
    }
  }
 static CassError get(const CassValue* value, CassUuid* output) {
   return cass_value_get_uuid(value, output);
 }
Exemple #3
0
CassError select_from_udt(CassSession* session) {
  CassError rc = CASS_OK;
  CassStatement* statement = NULL;
  CassFuture* future = NULL;

  const char* query = "SELECT * FROM examples.udt";

  statement = cass_statement_new(query, 0);

  future = cass_session_execute(session, statement);
  cass_future_wait(future);

  rc = cass_future_error_code(future);
  if (rc != CASS_OK) {
    print_error(future);
  } else {
    const CassResult* result = NULL;
    CassIterator* rows = NULL;

    result = cass_future_get_result(future);
    rows = cass_iterator_from_result(result);

    while(cass_iterator_next(rows)) {
      CassUuid id;
      char id_str[CASS_UUID_STRING_LENGTH];
      const CassRow* row = cass_iterator_get_row(rows);
      const CassValue* id_value = cass_row_get_column_by_name(row, "id");
      const CassValue* address_value = cass_row_get_column_by_name(row, "address");
      CassIterator* fields = cass_iterator_fields_from_user_type(address_value);

      cass_value_get_uuid(id_value, &id);
      cass_uuid_string(id, id_str);

      printf("id %s ", id_str);

      while(fields != NULL && cass_iterator_next(fields)) {
        const char* field_name;
        size_t field_name_length;
        const CassValue* field_value = NULL;
        cass_iterator_get_user_type_field_name(fields, &field_name, &field_name_length);
        field_value = cass_iterator_get_user_type_field_value(fields);
        printf("%.*s ", (int)field_name_length, field_name);

        if (!cass_value_is_null(field_value)) {
          if (cass_value_type(field_value) == CASS_VALUE_TYPE_VARCHAR) {
            const char* text;
            size_t text_length;
            cass_value_get_string(field_value, &text, &text_length);
            printf("\"%.*s\" ", (int)text_length, text);
          } else if (cass_value_type(field_value) == CASS_VALUE_TYPE_INT) {
            cass_int32_t i;
            cass_value_get_int32(field_value, &i);
            printf("%d ", i);
          } else if (cass_value_type(field_value) == CASS_VALUE_TYPE_SET) {
            CassIterator* phone_numbers = cass_iterator_from_collection(field_value);
            while (cass_iterator_next(phone_numbers)) {
              const CassValue* phone_value = cass_iterator_get_value(phone_numbers);
              CassIterator* phone_fields = cass_iterator_fields_from_user_type(phone_value);
              assert(cass_value_type(phone_value) == CASS_VALUE_TYPE_UDT);
              while (cass_iterator_next(phone_fields)) {
                const CassValue* phone_number_value = cass_iterator_get_user_type_field_value(phone_fields);
                cass_int32_t i;
                cass_value_get_int32(phone_number_value, &i);
                printf("%d ", i);
              }
            }
          } else {
            printf("<invalid> ");
          }
        } else {
          printf("<null> ");
        }
      }

      printf("\n");
    }

    cass_result_free(result);
    cass_iterator_free(rows);
  }

  cass_future_free(future);
  cass_statement_free(statement);

  return rc;
}
Exemple #4
0
int CassandraFS::getattr(const char* path, struct stat *stbuf, struct cfs_attrs *cfs_attrs) {
    int found = 0;
    memset(stbuf, 0, sizeof(struct stat));
    memset(cfs_attrs, 0, sizeof(struct cfs_attrs));

    CassStatement* statement = cass_statement_new("SELECT mode, modified_at, physical_file_id FROM entries WHERE path = ?", 1);
    cass_statement_bind_string(statement, 0, path);

    CassFuture* result_future = cass_session_execute(ctxt->session, statement);
    cass_statement_free(statement);
    int error = 0;

    if (cass_future_error_code(result_future) == CASS_OK) {
		/* Retrieve result set and iterate over the rows */
		const CassResult* result = cass_future_get_result(result_future);
		CassIterator* rows = cass_iterator_from_result(result);

		if (cass_iterator_next(rows)) {
		    const CassRow* row = cass_iterator_get_row(rows);
		    const CassValue* value = cass_row_get_column_by_name(row, "mode");
		    const CassValue* modified_at_value = cass_row_get_column_by_name(row, "modified_at");

		    int mode;
		    cass_value_get_int32(value, &mode);
		    stbuf->st_mode = mode;
		    
		    // regular file
		    if (S_ISREG(mode)) {
                const CassValue* file_id_value = cass_row_get_column_by_name(row, "physical_file_id");
				if (!cass_value_is_null(file_id_value)) {
		    		cass_value_get_uuid(file_id_value, &(cfs_attrs->physical_file_id));
				}

                CassError phys_err = read_physical_file_info(stbuf, cfs_attrs);

                if (phys_err != CASS_OK) {
                    error = -EIO;
                }
		    }
	    
			if (!cass_value_is_null(modified_at_value)) {
				cass_int64_t modified_at;
				cass_value_get_int64(modified_at_value, &modified_at);
				stbuf->st_mtime = modified_at / 1000;
		    }
		    stbuf->st_nlink = 1;
		    found = 1;
		}
	    
		cass_result_free(result);
		cass_iterator_free(rows);
    } else {
		/* Handle error */
        error = -EIO;
		cassandra_log_error(result_future);
    }
    cass_future_free(result_future);
    
    if (!found) {
		return -ENOENT;
	}

    return error;
}
Exemple #5
0
int CassandraFS::hardlink(const char* from, const char* to) {
    int operation_done = 0;
    CassStatement* statement = cass_statement_new("SELECT mode, created_at, modified_at, physical_file_id FROM entries WHERE path = ?", 1);
    cass_statement_bind_string(statement, 0, from);

    CassFuture* result_future = cass_session_execute(ctxt->session, statement);
    cass_statement_free(statement);
    int error = 0;

    if (cass_future_error_code(result_future) == CASS_OK) {
		/* Retrieve result set and iterate over the rows */
		const CassResult* result = cass_future_get_result(result_future);
		CassIterator* rows = cass_iterator_from_result(result);

		if (cass_iterator_next(rows)) {
		    const CassRow* row = cass_iterator_get_row(rows);
		    const CassValue* mode_value = cass_row_get_column_by_name(row, "mode");
		    const CassValue* modified_at_value = cass_row_get_column_by_name(row, "modified_at");
		    const CassValue* created_at_value = cass_row_get_column_by_name(row, "created_at");
		    const CassValue* physical_file_id_value = cass_row_get_column_by_name(row, "physical_file_id");

		    int mode;
		    cass_value_get_int32(mode_value, &mode);

		    cass_int64_t modified_at;
		    cass_value_get_int64(modified_at_value, &modified_at);

		    cass_int64_t created_at;
		    cass_value_get_int64(created_at_value, &created_at);

            CassUuid physical_file_id;
		    cass_value_get_uuid(physical_file_id_value, &physical_file_id);

            CassStatement* insert_statement = cass_statement_new("INSERT INTO entries(path, mode, created_at, modified_at, physical_file_id) VALUES(?,?,?,?,?)", 5);
            cass_statement_bind_string(insert_statement, 0, to);
            cass_statement_bind_int32(insert_statement, 1, mode);
            cass_statement_bind_int64(insert_statement, 2, created_at);
            cass_statement_bind_int64(insert_statement, 3, modified_at);
            cass_statement_bind_uuid(insert_statement, 4, physical_file_id);
            
            CassFuture* insert_future2 = create_sub_entry(to);

            CassFuture* insert_future = cass_session_execute(ctxt->session, insert_statement);
            cass_statement_free(insert_statement);
            if (cass_future_error_code(insert_future) == CASS_OK) {
                operation_done = 1;
            } else {
                operation_done = 0;
                cassandra_log_error(insert_future);
            }

            if (cass_future_error_code(insert_future2) == CASS_OK) {
                operation_done = 1;
            } else {
                operation_done = 0;
                cassandra_log_error(insert_future2);
            }

            cass_future_free(insert_future);
            cass_future_free(insert_future2);

		}
	    
		cass_result_free(result);
		cass_iterator_free(rows);
    } else {
		/* Handle error */
        error = -EIO;
		cassandra_log_error(result_future);
    }
    cass_future_free(result_future);
    
    if (!operation_done) {
		return -ENOENT;
	}

    return error;
}