示例#1
0
void test_internal_type_conversion() {
  // Create a table and insert rows.
  auto db = grnxx::open_db("");
  auto table = db->create_table("Table");
  table->insert_row();
  table->insert_row();
  table->insert_row();
  table->insert_row();

  auto column = table->create_column("Column", GRNXX_INT);

  // Set the first 8-bit integer.
  column->set(grnxx::Int(0), grnxx::Int(int64_t(1) << 0));
  grnxx::Datum datum;
  column->get(grnxx::Int(0), &datum);
  assert(datum.as_int().raw() == (int64_t(1) << 0));

  // Conversion from 8-bit to 16-bit.
  column->set(grnxx::Int(1), grnxx::Int(int64_t(1) << 8));
  column->get(grnxx::Int(0), &datum);
  assert(datum.as_int().raw() == (int64_t(1) << 0));
  column->get(grnxx::Int(1), &datum);
  assert(datum.as_int().raw() == (int64_t(1) << 8));

  // Conversion from 16-bit to 32-bit.
  column->set(grnxx::Int(2), grnxx::Int(int64_t(1) << 16));
  column->get(grnxx::Int(0), &datum);
  assert(datum.as_int().raw() == (int64_t(1) << 0));
  column->get(grnxx::Int(1), &datum);
  assert(datum.as_int().raw() == (int64_t(1) << 8));
  column->get(grnxx::Int(2), &datum);
  assert(datum.as_int().raw() == (int64_t(1) << 16));

  // Conversion from 32-bit to 64-bit.
  column->set(grnxx::Int(3), grnxx::Int(int64_t(1) << 32));
  column->get(grnxx::Int(0), &datum);
  assert(datum.as_int().raw() == (int64_t(1) << 0));
  column->get(grnxx::Int(1), &datum);
  assert(datum.as_int().raw() == (int64_t(1) << 8));
  column->get(grnxx::Int(2), &datum);
  assert(datum.as_int().raw() == (int64_t(1) << 16));
  column->get(grnxx::Int(3), &datum);
  assert(datum.as_int().raw() == (int64_t(1) << 32));

  table->remove_column("Column");
  column = table->create_column("Column", GRNXX_INT);

  // Conversion from 8-bit to 32-bit.
  column->set(grnxx::Int(0), grnxx::Int(int64_t(1) << 0));
  column->set(grnxx::Int(1), grnxx::Int(int64_t(1) << 16));
  column->get(grnxx::Int(0), &datum);
  assert(datum.as_int().raw() == (int64_t(1) << 0));
  column->get(grnxx::Int(1), &datum);
  assert(datum.as_int().raw() == (int64_t(1) << 16));

  table->remove_column("Column");
  column = table->create_column("Column", GRNXX_INT);

  // Conversion from 8-bit to 64-bit.
  column->set(grnxx::Int(0), grnxx::Int(int64_t(1) << 0));
  column->set(grnxx::Int(1), grnxx::Int(int64_t(1) << 32));
  column->get(grnxx::Int(0), &datum);
  assert(datum.as_int().raw() == (int64_t(1) << 0));
  column->get(grnxx::Int(1), &datum);
  assert(datum.as_int().raw() == (int64_t(1) << 32));

  table->remove_column("Column");
  column = table->create_column("Column", GRNXX_INT);

  // Conversion from 16-bit to 64-bit.
  column->set(grnxx::Int(0), grnxx::Int(int64_t(1) << 8));
  column->set(grnxx::Int(1), grnxx::Int(int64_t(1) << 32));
  column->get(grnxx::Int(0), &datum);
  assert(datum.as_int().raw() == (int64_t(1) << 8));
  column->get(grnxx::Int(1), &datum);
  assert(datum.as_int().raw() == (int64_t(1) << 32));
}
示例#2
0
void test_table() {
  // Create a database with the default options.
  auto db = grnxx::open_db("");

  // Create a table named "Table".
  auto table = db->create_table("Table");
  assert(table->db() == db.get());
  assert(table->name() == "Table");
  assert(table->num_columns() == 0);
  assert(!table->key_column());
  assert(table->num_rows() == 0);
  assert(table->max_row_id().is_na());
  assert(table->is_empty());
  assert(table->is_full());

  // Create a column named "Column_1".
  auto column = table->create_column("Column_1", GRNXX_BOOL);
  assert(column->name() == "Column_1");
  assert(table->num_columns() == 1);

  assert(table->get_column(0) == column);
  assert(table->find_column("Column_1") == column);

  // The following create_column() must fail because "Column_1" already exists.
  try {
    table->create_column("Column_1", GRNXX_BOOL);
    assert(false);
  } catch (...) {
  }

  // Create columns named "Column_2" and Column_3".
  table->create_column("Column_2", GRNXX_BOOL);
  table->create_column("Column_3", GRNXX_BOOL);
  assert(table->num_columns() == 3);

  // Remove "Column_2".
  table->remove_column("Column_2");
  assert(table->num_columns() == 2);

  assert(table->get_column(0)->name() == "Column_1");
  assert(table->get_column(1)->name() == "Column_3");

  // Recreate "Column_2".
  table->create_column("Column_2", GRNXX_BOOL);

  // Move "Column_3" to the next to "Column_2".
  table->reorder_column("Column_3", "Column_2");
  assert(table->get_column(0)->name() == "Column_1");
  assert(table->get_column(1)->name() == "Column_2");
  assert(table->get_column(2)->name() == "Column_3");

  // Move "Column_3" to the head.
  table->reorder_column("Column_3", "");
  assert(table->get_column(0)->name() == "Column_3");
  assert(table->get_column(1)->name() == "Column_1");
  assert(table->get_column(2)->name() == "Column_2");

  // Move "Column_2" to the next to "Column3".
  table->reorder_column("Column_2", "Column_3");
  assert(table->get_column(0)->name() == "Column_3");
  assert(table->get_column(1)->name() == "Column_2");
  assert(table->get_column(2)->name() == "Column_1");
}
void Matrix::remove_row_col( int row_idx, int column_idx )
{
  remove_row( row_idx );
  remove_column( column_idx );
}