I don't understand what this code does. I really just want an explanation for the part between the
/**********************************/
/**********************************/
It was predominantly found at the following site:
http://www.ch-werner.de/javasqlite/
(the actually code is in the 'test program' link at this site).
You'll notice parts are different because I edited/added parts.
So yeah. What's this myregfun and myaggfun stuff? Around there...thanks in advance.
import SQLite.*;
public class Test implements SQLite.Callback, SQLite.Function, SQLite.Authorizer, SQLite.Trace, SQLite.ProgressHandler {
private StringBuffer acc = new StringBuffer();
public void columns(String col[]) {
System.out.println("#cols = " + col.length);
for (int i = 0; i < col.length; i++) {
System.out.println("col" + i + ": " + col[i]);
}
// throw new java.lang.RuntimeException("boom");
}
public void types(String types[]) {
if (types != null) {
for (int i = 0; i < types.length; i++) {
System.out.println("coltype" + i + ": " + types[i]);
}
}
}
public boolean newrow(String data[]) {
for (int i = 0; i < data.length; i++) {
System.out.println("data" + i + ": " + data[i]);
}
return false;
}
public void function(FunctionContext fc, String args[]) {
System.out.println("function:");
for (int i = 0; i < args.length; i++) {
System.out.println("arg[" + i + "]=" + args[i]);
}
if (args.length > 0) {
fc.set_result(args[0].toLowerCase());
}
}
public void step(FunctionContext fc, String args[]) {
System.out.println("step:");
for (int i = 0; i < args.length; i++) {
acc.append(args[i]);
acc.append(" ");
}
}
public void last_step(FunctionContext fc) {
System.out.println("last_step");
fc.set_result(acc.toString());
acc.setLength(0);
}
public int authorize(int what, String arg1, String arg2, String arg3, String arg4) {
System.out.println("AUTH: " + what + "," + arg1 + "," + arg2 + ","+ arg3 + "," + arg4);
return Constants.SQLITE_OK;
}
public void trace(String stmt) {
System.out.println("TRACE: " + stmt);
}
public boolean progress() {
System.out.println("PROGRESS");
return true;
}
public static void main(String args[]) {
boolean error = true;
System.out.println("LIB version: " + SQLite.Database.version());
SQLite.Database db = new SQLite.Database();
try {
/************************************************************/
db.open("mydatabase", 0666);
//System.out.println("DB version: " + db.dbversion());
db.interrupt();
db.busy_timeout(1000);
db.busy_handler(null);
db.create_function("myregfunc", -1, new Test());
db.function_type("myregfunc", Constants.SQLITE_TEXT);
db.create_aggregate("myaggfunc", 1, new Test());
db.function_type("myaggfunc", Constants.SQLITE_TEXT);
db.exec("PRAGMA show_datatypes = on", null);
/************************************************************/
} catch (java.lang.Exception e) {
System.err.println("error: " + e);
} finally {
try {
System.err.println("cleaning up ...");
db.close();
} catch(java.lang.Exception e) {
System.err.println("error: " + e);
} finally {
System.err.println("done.");
}
}
if (error) {
System.exit(1);
}
}
}
import SQLite.*;
public class Test implements SQLite.Callback, SQLite.Function, SQLite.Authorizer, SQLite.Trace, SQLite.ProgressHandler {
private StringBuffer acc = new StringBuffer();
public void columns(String col[]) {
System.out.println("#cols = " + col.length);
for (int i = 0; i < col.length; i++) {
System.out.println("col" + i + ": " + col[i]);
}
// throw new java.lang.RuntimeException("boom");
}
public void types(String types[]) {
if (types != null) {
for (int i = 0; i < types.length; i++) {
System.out.println("coltype" + i + ": " + types[i]);
}
}
}
public boolean newrow(String data[]) {
for (int i = 0; i < data.length; i++) {
System.out.println("data" + i + ": " + data[i]);
}
return false;
}
public void function(FunctionContext fc, String args[]) {
System.out.println("function:");
for (int i = 0; i < args.length; i++) {
System.out.println("arg[" + i + "]=" + args[i]);
}
if (args.length > 0) {
fc.set_result(args[0].toLowerCase());
}
}
public void step(FunctionContext fc, String args[]) {
System.out.println("step:");
for (int i = 0; i < args.length; i++) {
acc.append(args[i]);
acc.append(" ");
}
}
public void last_step(FunctionContext fc) {
System.out.println("last_step");
fc.set_result(acc.toString());
acc.setLength(0);
}
public int authorize(int what, String arg1, String arg2, String arg3, String arg4) {
System.out.println("AUTH: " + what + "," + arg1 + "," + arg2 + ","+ arg3 + "," + arg4);
return Constants.SQLITE_OK;
}
public void trace(String stmt) {
System.out.println("TRACE: " + stmt);
}
public boolean progress() {
System.out.println("PROGRESS");
return true;
}
public static void main(String args[]) {
boolean error = true;
System.out.println("LIB version: " + SQLite.Database.version());
SQLite.Database db = new SQLite.Database();
try {
/**********************************/
db.open("mydatabase", 0666);
//System.out.println("DB version: " + db.dbversion());
db.interrupt();
db.busy_timeout(1000);
db.busy_handler(null);
db.create_function("myregfunc", -1, new Test());
db.function_type("myregfunc", Constants.SQLITE_TEXT);
db.create_aggregate("myaggfunc", 1, new Test());
db.function_type("myaggfunc", Constants.SQLITE_TEXT);
db.exec("PRAGMA show_datatypes = on", null);
/**********************************/
} catch (java.lang.Exception e) {
System.err.println("error: " + e);
} finally {
try {
System.err.println("cleaning up ...");
db.close();
} catch(java.lang.Exception e) {
System.err.println("error: " + e);
} finally {
System.err.println("done.");
}
}
if (error) {
System.exit(1);
}
}
}