列挙の使用

列挙型はENUM()文を使用して宣言されます。この文を使用する場合は、受入れ可能な列挙値を宣言する必要があります。

主キーがUIDで2番目のフィールドに列挙を持つシンプルな2つのフィールドの表を定義するには、次のスクリプトを使用します。

CREATE TABLE myTable (
    uid INTEGER,
    myEnum ENUM (Apple,Pears,Oranges),
    PRIMARY KEY (uid)
) 

列挙フィールドでは、CHECK制約はサポートされていません。

列挙フィールドでは、DEFAULTおよびNOT NULL制約がサポートされています。詳細は、「DEFAULT」を参照してください。

列挙を書き込むにはRow.putEnum()を使用します。このメソッドとともに使用する列挙値が-enum-valuesパラメータで定義されている値と一致しない場合、IllegalArgumentExceptionがスローされます。

TableAPI tableH = kvstore.getTableAPI();

Table myTable = tableH.getTable("myTable");

Row row = myTable.createRow();
row.put("uid", 12345);

row.putEnum("myEnum", "Pears");

tableH.put(row, null, null); 

列挙を読み込むにはRow.get().asEnum()を使用します。これにより、EnumValueクラス・インスタンスが返されます。次にEnumValue.get()を使用して格納されている列挙値を文字列として取得できます。かわりにEnumValue.getIndex()を使用して、格納されている値の索引の位置を取得できます。

次に例を示します。

TableAPI tableH = kvstore.getTableAPI();

Table myTable = tableH.getTable("myTable");

/* Create a primary key for user id 12345 and get a row */
PrimaryKey key = myTable.createPrimaryKey();
key.put("uid", 12345);
Row row = tableH.get(key, null);

EnumValue ev = row.get("testEnum").asEnum();
System.out.println("enum as string: " + 
                ev.get()); // returns "Pears"
System.out.println("enum index: " + 
                ev.getIndex()); // returns '1'