TestAppendRecno.java [plain text]
package com.sleepycat.test;
import com.sleepycat.db.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.PrintStream;
public class TestAppendRecno
implements DbAppendRecno
{
private static final String FileName = "access.db";
int callback_count = 0;
Db table = null;
public TestAppendRecno()
{
}
private static void usage()
{
System.err.println("usage: TestAppendRecno\n");
System.exit(1);
}
public static void main(String argv[])
{
try
{
TestAppendRecno app = new TestAppendRecno();
app.run();
}
catch (DbException dbe)
{
System.err.println("TestAppendRecno: " + dbe.toString());
System.exit(1);
}
catch (FileNotFoundException fnfe)
{
System.err.println("TestAppendRecno: " + fnfe.toString());
System.exit(1);
}
System.exit(0);
}
public void run()
throws DbException, FileNotFoundException
{
new File(FileName).delete();
table = new Db(null, 0);
table.set_error_stream(System.err);
table.set_errpfx("TestAppendRecno");
table.set_append_recno(this);
table.open(null, FileName, null, Db.DB_RECNO, Db.DB_CREATE, 0644);
for (int i=0; i<10; i++) {
System.out.println("\n*** Iteration " + i );
try {
RecnoDbt key = new RecnoDbt(77+i);
StringDbt data = new StringDbt("data" + i + "_xyz");
table.put(null, key, data, Db.DB_APPEND);
}
catch (DbException dbe) {
System.out.println("dbe: " + dbe);
}
}
Dbc iterator;
iterator = table.cursor(null, 0);
RecnoDbt key = new RecnoDbt();
StringDbt data = new StringDbt();
while (iterator.get(key, data, Db.DB_NEXT) == 0)
{
System.out.println(key.getRecno() + " : " + data.getString());
}
iterator.close();
table.close(0);
System.out.println("Test finished.");
}
public void db_append_recno(Db db, Dbt dbt, int recno)
throws DbException
{
int count = callback_count++;
System.out.println("====\ncallback #" + count);
System.out.println("db is table: " + (db == table));
System.out.println("recno = " + recno);
if (dbt instanceof RecnoDbt) {
System.out.println("dbt = " +
((RecnoDbt)dbt).getRecno());
}
else if (dbt instanceof StringDbt) {
System.out.println("dbt = " +
((StringDbt)dbt).getString());
}
else {
System.out.println("internally created dbt: " +
new StringDbt(dbt) + ", size " +
dbt.get_size());
}
switch (count) {
case 0:
break;
case 1:
dbt.set_size(dbt.get_size() - 1);
break;
case 2:
System.out.println("throwing...");
throw new DbException("append_recno thrown");
case 3:
dbt.set_offset(1);
break;
case 4:
dbt.set_offset(1);
dbt.set_size(dbt.get_size() - 1);
break;
case 5:
dbt.set_offset(1);
dbt.set_size(dbt.get_size() - 2);
break;
case 6:
dbt.set_data(new String("abc").getBytes());
dbt.set_size(3);
break;
case 7:
dbt.set_data(null);
break;
case 8:
dbt.set_data(new String("abc").getBytes());
dbt.set_size(4);
break;
default:
break;
}
}
static
class RecnoDbt extends Dbt
{
RecnoDbt()
{
this(0); }
RecnoDbt(int value)
{
set_flags(Db.DB_DBT_USERMEM); arr = new byte[4];
set_data(arr); set_ulen(4); setRecno(value);
}
public String toString()
{
return String.valueOf(getRecno());
}
void setRecno(int value)
{
set_recno_key_data(value);
set_size(arr.length);
}
int getRecno()
{
return get_recno_key_data();
}
byte arr[];
}
static
class StringDbt extends Dbt
{
StringDbt(Dbt dbt)
{
set_data(dbt.get_data());
set_size(dbt.get_size());
}
StringDbt()
{
set_flags(Db.DB_DBT_MALLOC); }
StringDbt(String value)
{
setString(value);
set_flags(Db.DB_DBT_MALLOC); }
void setString(String value)
{
set_data(value.getBytes());
set_size(value.length());
}
String getString()
{
return new String(get_data(), 0, get_size());
}
public String toString()
{
return getString();
}
}
}