I am attempting to create a java UDF with H2 1.4.196 to replicate the 
behavior of TRUNC in Oracle. I think I am pretty close, but I am getting an 
error with the stack trace cut off and I have no idea how to debug it at 
this point.

Here's my code:

create alias trunc_udf as $$
java.util.Date trunc(java.util.Date dateToTrunc, String whereToTrunc) 
throws Exception {
  Calendar cal = Calendar.getInstance();
  if(whereToTrunc.equals("HH")) {
    cal.setTime(dateToTrunc);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    return cal.getTime();
  } else {
    throw new Exception("this H2 UDF only supports HH, please enhance it");
  }
}
$$;

And here's the error message I get back:

Syntax error in SQL statement "/org/h2/dynamic/TRUNC_UDF.java:5: warning: 
Can't initialize javac processor due to (most likely) a class loader 
problem: java.lang.NoClassDefFoundError: 
com/sun/tools/javac/processing/JavacProcessingEnvironment
public class TRUNC_UDF {
       ^
  at lombok.javac.apt.Processor.init(Processor.java:84)
  at 
lombok.core.AnnotationProcessor$JavacDescriptor.want(AnnotationProcessor.java:87)
  at lombok.core.AnnotationProcessor.init(AnnotationProcessor.java:141)
  at 
lombok.launch.AnnotationProcessorHider$AnnotationProcessor.init(AnnotationProcessor.java:53)
  at 
com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.<init>(JavacProcessingEnvironment.java:500)
  at 
com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(JavacProcessingEnvironment.java:597)
  at 
com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:690)
  at 
com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
  at 
com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
  at 
com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176)
  at 
com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
  at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856)
  at com.sun.tools.javac.main.Main.compile(Main.java:523)
  at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129)
  at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138)
  at org.h2.util.SourceCompiler.javaxToolsJavac(SourceCompiler.java:287)
  at org.h2.util.SourceCompiler$1.findClass(SourceCompiler.java:150)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  at org.h2.util.SourceCompiler.getClass(SourceCompiler.java:164)
  at org.h2.util.SourceCompiler.getMethod(SourceCompiler.java:178)
  at org.h2.engine.FunctionAlias.loadFromSource(FunctionAlias.java:131)
  at org.h2.engine.FunctionAlias.load(FunctionAlias.java:119)
  at org.h2.engine.FunctionAlias.init(FunctionAlias.java:106)
  at 
org.h2.engine.FunctionAlias.newInstanceFromSource(FunctionAlias.java:98)
  at 
org.h2.command.ddl.CreateFunctionAlias.update(CreateFunctionAlias.java:53)
  at org.h2.command.CommandContainer.update(CommandContainer.java:101)
  at org.h2.command.Command.executeUpdate(Command.java:260)
  at org.h2.server.TcpServerThread.process(TcpServerThread.java:354)
  at org.h2.server.TcpServerThread.run(TcpServerThread.java:158)
  at java.lang.Thread.run(Thread.java:748)
  Caused by: java.lang.ClassNotFoundException: 
com.sun.tools.javac.processing.JavacProcessingEnvironment
  at java.lang.ClassLoader.findClass(ClassLoader.java:530)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at lombok.launch.ShadowClassLoader.loadClass(ShadowClassLoader.java:418)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  ... 31 more
1 warning
"; SQL statement:
create alias trunc_udf as $$
java.util.Date trunc(java.util.Date dateToTrunc, String whereToTrunc) 
throws Exception {
  Calendar cal = Calendar.getInstance();
  if(whereToTrunc.equals("HH")) {
    cal.setTime(dateToTrunc);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    return cal.getTime();
  } else {
    throw new Exception("this H2 UDF only supports HH, please enhance it");
  }
}
$$;
 [42000-196]

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/d/optout.

Reply via email to