byte[] valid = { (byte) 'f', (byte) 'o', (byte) 'o', (byte) '-', (byte) 0xE7, (byte) 0x94, (byte) 0x9F, (byte) 0xE3, (byte) 0x83, (byte) 0x93, (byte) 0xE3, (byte) 0x83, (byte) 0xBC, (byte) 0xE3, (byte) 0x83, (byte) 0xAB};
ArrayList<Mutation> mutations;
// non-utf8 is fine for data
mutations = new ArrayList<Mutation>();
mutations.add(new Mutation(false, bytes("entry:foo"), invalid));
client.mutateRow(t, bytes("foo"), mutations);
// try empty strings
mutations = new ArrayList<Mutation>();
mutations.add(new Mutation(false, bytes("entry:"), bytes("")));
client.mutateRow(t, bytes(""), mutations);
// this row name is valid utf8
mutations = new ArrayList<Mutation>();
mutations.add(new Mutation(false, bytes("entry:foo"), valid));
client.mutateRow(t, bytes("foo"), mutations);
// non-utf8 is not allowed in row names
try {
mutations = new ArrayList<Mutation>();
mutations.add(new Mutation(false, bytes("entry:foo"), invalid));
client.mutateRow(t, invalid, mutations);
System.out.println("FATAL: shouldn't get here");
System.exit(-1);
} catch (IOError e) {
System.out.println("expected error: " + e.message);
}
// Run a scanner on the rows we just created
ArrayList<byte[]> columnNames = new ArrayList<byte[]>();
columnNames.add(bytes("entry:"));
System.out.println("Starting scanner...");
int scanner = client.scannerOpen(t, bytes(""), columnNames);
try {
while (true) {
TRowResult entry = client.scannerGet(scanner);
printRow(entry);
}
} catch (NotFound nf) {
client.scannerClose(scanner);
System.out.println("Scanner finished");
}
//
// Run some operations on a bunch of rows
//
for (int i = 100; i >= 0; --i) {
// format row keys as "00000" to "00100"
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumIntegerDigits(5);
nf.setGroupingUsed(false);
byte[] row = bytes(nf.format(i));
mutations = new ArrayList<Mutation>();
mutations.add(new Mutation(false, bytes("unused:"), bytes("DELETE_ME")));
client.mutateRow(t, row, mutations);
printRow(client.getRow(t, row));
client.deleteAllRow(t, row);
mutations = new ArrayList<Mutation>();
mutations.add(new Mutation(false, bytes("entry:num"), bytes("0")));
mutations.add(new Mutation(false, bytes("entry:foo"), bytes("FOO")));
client.mutateRow(t, row, mutations);
printRow(client.getRow(t, row));
Mutation m = null;
mutations = new ArrayList<Mutation>();
m = new Mutation();
m.column = bytes("entry:foo");
m.isDelete = true;
mutations.add(m);
m = new Mutation();
m.column = bytes("entry:num");
m.value = bytes("-1");
mutations.add(m);
client.mutateRow(t, row, mutations);
printRow(client.getRow(t, row));
mutations = new ArrayList<Mutation>();
mutations.add(new Mutation(false, bytes("entry:num"), bytes(Integer.toString(i))));
mutations.add(new Mutation(false, bytes("entry:sqr"), bytes(Integer.toString(i * i))));
client.mutateRow(t, row, mutations);
printRow(client.getRow(t, row));
// sleep to force later timestamp
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// no-op
}
mutations.clear();
m = new Mutation();
m.column = bytes("entry:num");
m.value = bytes("-999");
mutations.add(m);
m = new Mutation();
m.column = bytes("entry:sqr");
m.isDelete = true;
client.mutateRowTs(t, row, mutations, 1); // shouldn't override latest
printRow(client.getRow(t, row));