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.