[Groonga-commit] groonga/grnxx at 3fac225 [master] Add a test for key column. (#70)

Back to archive index

susumu.yata null+****@clear*****
Tue Sep 30 17:10:57 JST 2014


susumu.yata	2014-09-30 17:10:57 +0900 (Tue, 30 Sep 2014)

  New Revision: 3fac22574ee52522f0f3750e1b9ef1ddc53a6695
  https://github.com/groonga/grnxx/commit/3fac22574ee52522f0f3750e1b9ef1ddc53a6695

  Message:
    Add a test for key column. (#70)

  Modified files:
    test/test_table.cpp

  Modified: test/test_table.cpp (+68 -2)
===================================================================
--- test/test_table.cpp    2014-09-30 17:10:32 +0900 (322225a)
+++ test/test_table.cpp    2014-09-30 17:10:57 +0900 (9d26b60)
@@ -211,8 +211,74 @@ void test_bitmap() {
 }
 
 void test_key() {
-  // TODO: set_key_column(), unset_key_column(), and find_row() are not
-  //       supported yet.
+  // TODO: find_row() is not supported yet.
+  grnxx::Error error;
+
+  // Create a database with the default options.
+  auto db = grnxx::open_db(&error, "");
+  assert(db);
+
+  // Create a table named "Table".
+  auto table = db->create_table(&error, "Table");
+  assert(table);
+
+  // Create a column named "Column".
+  auto column = table->create_column(&error, "Column", grnxx::INT_DATA);
+  assert(column);
+
+  // Append three rows.
+  grnxx::Int row_id;
+  assert(table->insert_row(&error, grnxx::NULL_ROW_ID,
+                           grnxx::Datum(), &row_id));
+  assert(column->set(&error, row_id, grnxx::Int(1)));
+  assert(table->insert_row(&error, grnxx::NULL_ROW_ID,
+                           grnxx::Datum(), &row_id));
+  assert(column->set(&error, row_id, grnxx::Int(10)));
+  assert(table->insert_row(&error, grnxx::NULL_ROW_ID,
+                           grnxx::Datum(), &row_id));
+  assert(column->set(&error, row_id, grnxx::Int(100)));
+
+  // Set key column.
+  assert(table->set_key_column(&error, "Column"));
+  assert(table->key_column() == column);
+
+  // Duplicate keys must be rejected.
+  assert(!table->insert_row(&error, grnxx::NULL_ROW_ID,
+                            grnxx::Int(1), &row_id));
+  assert(row_id == 1);
+  assert(!table->insert_row(&error, grnxx::NULL_ROW_ID,
+                            grnxx::Int(10), &row_id));
+  assert(row_id == 2);
+  assert(!table->insert_row(&error, grnxx::NULL_ROW_ID,
+                            grnxx::Int(100), &row_id));
+  assert(row_id == 3);
+
+  // Append new keys.
+  grnxx::Datum datum;
+  assert(table->insert_row(&error, grnxx::NULL_ROW_ID,
+                           grnxx::Int(2), &row_id));
+  assert(column->get(&error, row_id, &datum));
+  assert(datum.force_int() == 2);
+  assert(table->insert_row(&error, grnxx::NULL_ROW_ID,
+                           grnxx::Int(20), &row_id));
+  assert(column->get(&error, row_id, &datum));
+  assert(datum.force_int() == 20);
+  assert(table->insert_row(&error, grnxx::NULL_ROW_ID,
+                           grnxx::Int(200), &row_id));
+  assert(column->get(&error, row_id, &datum));
+  assert(datum.force_int() == 200);
+
+  // Find rows by key.
+  assert(table->find_row(&error, grnxx::Int(1)) == 1);
+  assert(table->find_row(&error, grnxx::Int(10)) == 2);
+  assert(table->find_row(&error, grnxx::Int(100)) == 3);
+  assert(table->find_row(&error, grnxx::Int(2)) == 4);
+  assert(table->find_row(&error, grnxx::Int(20)) == 5);
+  assert(table->find_row(&error, grnxx::Int(200)) == 6);
+
+  // Unset key column.
+  assert(table->unset_key_column(&error));
+  assert(!table->key_column());
 }
 
 void test_cursor() {
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index