tada / pljava

PL/Java is a free add-on module that brings Java™ Stored Procedures, Triggers, Functions, Aggregates, Operators, Types, etc., to the PostgreSQL™ backend.
http://tada.github.io/pljava/
Other
242 stars 77 forks source link

JVM Crashes when using getTimestamp on java.sql.ResultSet, #47

Closed paulbrasted closed 8 years ago

paulbrasted commented 9 years ago

I have successfully built Pljava using maven on windows against PostgreSQL 9.3 (32 bit), using the latest pull request #29 (Fix to allow building pljava with Microsoft C). Thank you for that ! Everything is working except for.....

(6 lines of code) java.sql.Connection sqlConnection = DriverManager.getConnection("jdbc:default:connection"); sql = "SELECT time_created FROM invoice_batch where id = " + batch.toString(); java.sql.ResultSet result = sqlConnection.createStatement().executeQuery(sql); if (result.next()) { createTimeStamp = result.getTimestamp("time_created"); }

.....where the result.getTimestamp crashes the JVM.

The log file generated by postgreSQL is included below. I think it has all java info needed!

A fatal error has been detected by the Java Runtime Environment:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x006bf940, pid=5520, tid=1832

JRE version: Java(TM) SE Runtime Environment (7.0_80-b15) (build 1.7.0_80-b15)

Java VM: Java HotSpot(TM) Server VM (24.80-b11 mixed mode windows-x86 )

Problematic frame:

C [postgres.exe+0x2bf940]

Failed to write core dump. Minidumps are not enabled by default on client versions of Windows

If you would like to submit a bug report, please visit:

http://bugreport.java.com/bugreport/crash.jsp

The crash happened outside the Java Virtual Machine in native code.

See problematic frame for where to report the bug.

--------------- T H R E A D ---------------

Current thread (0x0cb05400): JavaThread "main" [_thread_in_native, id=1832, stack(0x00860000,0x00c60000)]

siginfo: ExceptionCode=0xc0000005, reading address 0x81d0270f

Registers: EAX=0x00c5f0fc, EBX=0x55d476d0, ECX=0x00c5f0fc, EDX=0x00000000 ESP=0x00c5f0a8, EBP=0x00c5f0c8, ESI=0x81d025ff, EDI=0x0cb05400 EIP=0x006bf940, EFLAGS=0x00010202

Top of Stack: (sp=0x00c5f0a8) 0x00c5f0a8: 13338d20 13338d28 00000008 0c792e28 0x00c5f0b8: 00c5f0c8 5d758bf5 00c5f100 001c2db8 0x00c5f0c8: 00c5f0e0 006bfbe7 00c5f0fc 00000000 0x00c5f0d8: 00851c08 81d025ff 00c5f0f4 5d7624e3 0x00c5f0e8: 00c5f0fc 81d025ff 000f4240 00c5f104 0x00c5f0f8: 5d7624c6 55d476d0 00000000 00c5f13c 0x00c5f108: 5d7627b1 f6bcd6e8 0001c0a7 0000045a 0x00c5f118: 0d6e23e0 00c5f148 5d764e91 0000045a

Instructions: (pc=0x006bf940) 0x006bf920: e5 5d c3 cc cc cc cc cc cc cc cc cc cc cc cc cc 0x006bf930: 55 8b ec 83 ec 18 8b 45 08 53 8b 18 56 8b 75 14 0x006bf940: 83 be 10 01 00 00 00 57 8b 78 04 89 5d f0 89 7d 0x006bf950: f4 74 12 3b be 1c 01 00 00 7c 39 7f 08 3b 9e 18

Register to memory mapping:

EAX=0x00c5f0fc is pointing into the stack for thread: 0x0cb05400 EBX=0x55d476d0 is an unallocated location in the heap ECX=0x00c5f0fc is pointing into the stack for thread: 0x0cb05400 EDX=0x00000000 is an unknown value ESP=0x00c5f0a8 is pointing into the stack for thread: 0x0cb05400 EBP=0x00c5f0c8 is pointing into the stack for thread: 0x0cb05400 ESI=0x81d025ff is an unknown value EDI=0x0cb05400 is a thread

Stack: [0x00860000,0x00c60000], sp=0x00c5f0a8, free space=4092k Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) C [postgres.exe+0x2bf940] C [postgres.exe+0x2bfbe7] C [pljava.dll+0x124e3] C [pljava.dll+0x124c6] C [pljava.dll+0x127b1] C [pljava.dll+0x12753] C [pljava.dll+0x12722] C [pljava.dll+0x14385] C [pljava.dll+0x135e6] C [pljava.dll+0x1369f] j org.postgresql.pljava.internal.Tuple._getObject(JJI)Ljava/lang/Object;+0 j org.postgresql.pljava.internal.Tuple.getObject(Lorg/postgresql/pljava/internal/TupleDesc;I)Ljava/lang/Object;+15 j org.postgresql.pljava.jdbc.SPIResultSet.getObjectValue(I)Ljava/lang/Object;+9 j org.postgresql.pljava.jdbc.ObjectResultSet.getObject(I)Ljava/lang/Object;+2 j org.postgresql.pljava.jdbc.ObjectResultSet.getValue(ILjava/lang/Class;)Ljava/lang/Object;+3 j org.postgresql.pljava.jdbc.ObjectResultSet.getTimestamp(I)Ljava/sql/Timestamp;+5 j org.postgresql.pljava.jdbc.AbstractResultSet.getTimestamp(Ljava/lang/String;)Ljava/sql/Timestamp;+6 j rrapp.Main.exportInvoice(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;[Ljava/lang/Integer;Ljava/lang/String;)Ljava/lang/String;+209 v ~StubRoutines::call_stub V [jvm.dll+0x15559a] V [jvm.dll+0x224c3e] V [jvm.dll+0x15561d] V [jvm.dll+0xd7035] V [jvm.dll+0xe049b] C [pljava.dll+0xb6f4] C [pljava.dll+0x14f17] C [pljava.dll+0x14671] C [pljava.dll+0x8aa6] C [pljava.dll+0x220b] C [pljava.dll+0x205e] C [postgres.exe+0xda585] C [postgres.exe+0xe6424] C [postgres.exe+0xdf1e6] C [postgres.exe+0xdf229] C [postgres.exe+0xe6476] C [postgres.exe+0xd8f59] C [postgres.exe+0xd720c] C [postgres.exe+0xd7f90] C [postgres.exe+0x1d46a1] C [postgres.exe+0x1d4cee] C [postgres.exe+0x1d2d4b] C [postgres.exe+0x1d3626] C [postgres.exe+0x18f306] C [postgres.exe+0x192d4d] C [postgres.exe+0x104b91] C [postgres.exe+0x2c6046] C [kernel32.dll+0x1336a] C [ntdll.dll+0x39882] C [ntdll.dll+0x39855]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) j org.postgresql.pljava.internal.Tuple._getObject(JJI)Ljava/lang/Object;+0 j org.postgresql.pljava.internal.Tuple.getObject(Lorg/postgresql/pljava/internal/TupleDesc;I)Ljava/lang/Object;+15 j org.postgresql.pljava.jdbc.SPIResultSet.getObjectValue(I)Ljava/lang/Object;+9 j org.postgresql.pljava.jdbc.ObjectResultSet.getObject(I)Ljava/lang/Object;+2 j org.postgresql.pljava.jdbc.ObjectResultSet.getValue(ILjava/lang/Class;)Ljava/lang/Object;+3 j org.postgresql.pljava.jdbc.ObjectResultSet.getTimestamp(I)Ljava/sql/Timestamp;+5 j org.postgresql.pljava.jdbc.AbstractResultSet.getTimestamp(Ljava/lang/String;)Ljava/sql/Timestamp;+6 j rrapp.Main.exportInvoice(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;[Ljava/lang/Integer;Ljava/lang/String;)Ljava/lang/String;+209 v ~StubRoutines::call_stub

--------------- P R O C E S S ---------------

Java Threads: ( => current thread ) 0x0c7cf000 JavaThread "Service Thread" daemon [_thread_blocked, id=2176, stack(0x5aa60000,0x5ae60000)] 0x0d981800 JavaThread "C2 CompilerThread1" daemon [_thread_blocked, id=6652, stack(0x5a660000,0x5aa60000)] 0x0d980800 JavaThread "C2 CompilerThread0" daemon [_thread_blocked, id=4428, stack(0x5a260000,0x5a660000)] 0x0d46c800 JavaThread "Attach Listener" daemon [_thread_blocked, id=7116, stack(0x59e60000,0x5a260000)] 0x0c1ee000 JavaThread "Finalizer" daemon [_thread_blocked, id=4552, stack(0x59a60000,0x59e60000)] 0x0d58f400 JavaThread "Reference Handler" daemon [_thread_blocked, id=2188, stack(0x59660000,0x59a60000)] =>0x0cb05400 JavaThread "main" [_thread_in_native, id=1832, stack(0x00860000,0x00c60000)]

Other Threads: 0x0d3b4000 VMThread [stack: 0x59260000,0x59660000] [id=5624] 0x0c60fc00 WatcherThread [stack: 0x5ae60000,0x5b260000] [id=6240]

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap PSYoungGen total 19456K, used 12785K [0x41ac0000, 0x43040000, 0x57040000) eden space 16896K, 60% used [0x41ac0000,0x424be838,0x42b40000) from space 2560K, 99% used [0x42b40000,0x42dbdd18,0x42dc0000) to space 2560K, 0% used [0x42dc0000,0x42dc0000,0x43040000) ParOldGen total 43520K, used 84K [0x17040000, 0x19ac0000, 0x41ac0000) object space 43520K, 0% used [0x17040000,0x170551d0,0x19ac0000) PSPermGen total 16384K, used 3540K [0x13040000, 0x14040000, 0x17040000) object space 16384K, 21% used [0x13040000,0x133b5170,0x14040000)

Card table byte_map: [0x0e4c0000,0x0e6f0000] byte_map_base: 0x0e427e00

Polling page: 0x03160000

Code Cache [0x10030000, 0x10270000, 0x13030000) total_blobs=189 nmethods=56 adapters=88 free_code_cache=48736Kb largest_free_block=49884608

Compilation events (10 events): Event: 0.317 Thread 0x0d981800 52 java.util.Properties$LineReader::readLine (452 bytes) Event: 0.322 Thread 0x0d981800 nmethod 52 0x100950c8 code [0x10095200, 0x10095664] Event: 0.326 Thread 0x0d980800 53 % java.lang.String::equals @ 49 (81 bytes) Event: 0.329 Thread 0x0d980800 nmethod 53% 0x1008a708 code [0x1008a800, 0x1008aa70] Event: 0.329 Thread 0x0d981800 54 java.lang.String::equals (81 bytes) Event: 0.331 Thread 0x0d981800 nmethod 54 0x10092c88 code [0x10092d80, 0x10092f90] Event: 0.335 Thread 0x0d980800 55 java.util.ArrayList::size (5 bytes) Event: 0.335 Thread 0x0d980800 nmethod 55 0x10080348 code [0x10080440, 0x10080490] Event: 0.335 Thread 0x0d981800 56 s! sun.misc.URLClassPath::getLoader (154 bytes) Event: 0.347 Thread 0x0d981800 nmethod 56 0x1009b608 code [0x1009b7e0, 0x1009c5f4]

GC Heap History (2 events): Event: 0.205 GC heap before {Heap before GC invocations=1 (full 0): PSYoungGen total 19456K, used 16886K [0x41ac0000, 0x43040000, 0x57040000) eden space 16896K, 99% used [0x41ac0000,0x42b3d8b0,0x42b40000) from space 2560K, 0% used [0x42dc0000,0x42dc0000,0x43040000) to space 2560K, 0% used [0x42b40000,0x42b40000,0x42dc0000) ParOldGen total 43520K, used 0K [0x17040000, 0x19ac0000, 0x41ac0000) object space 43520K, 0% used [0x17040000,0x17040000,0x19ac0000) PSPermGen total 16384K, used 1766K [0x13040000, 0x14040000, 0x17040000) object space 16384K, 10% used [0x13040000,0x131f9aa0,0x14040000) Event: 0.207 GC heap after Heap after GC invocations=1 (full 0): PSYoungGen total 19456K, used 2551K [0x41ac0000, 0x43040000, 0x57040000) eden space 16896K, 0% used [0x41ac0000,0x41ac0000,0x42b40000) from space 2560K, 99% used [0x42b40000,0x42dbdd18,0x42dc0000) to space 2560K, 0% used [0x42dc0000,0x42dc0000,0x43040000) ParOldGen total 43520K, used 84K [0x17040000, 0x19ac0000, 0x41ac0000) object space 43520K, 0% used [0x17040000,0x170551d0,0x19ac0000) PSPermGen total 16384K, used 1766K [0x13040000, 0x14040000, 0x17040000) object space 16384K, 10% used [0x13040000,0x131f9aa0,0x14040000) }

Deoptimization events (8 events): Event: 0.157 Thread 0x0cb05400 Uncommon trap: reason=null_check action=make_not_entrant pc=0x10087580 method=java.util.jar.Attributes.putValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; @ 13 Event: 0.229 Thread 0x0cb05400 Uncommon trap: reason=unstable_if action=reinterpret pc=0x10082074 method=java.net.URL.(Ljava/net/URL;Ljava/lang/String;Ljava/net/URLStreamHandler;)V @ 170 Event: 0.230 Thread 0x0cb05400 Uncommon trap: reason=unstable_if action=reinterpret pc=0x1007b8c0 method=java.lang.String.replace(CC)Ljava/lang/String; @ 59 Event: 0.232 Thread 0x0cb05400 Uncommon trap: reason=unstable_if action=reinterpret pc=0x10077e8c method=java.lang.String.hashCode()I @ 14 Event: 0.247 Thread 0x0cb05400 Uncommon trap: reason=unstable_if action=reinterpret pc=0x100783f8 method=java.lang.String.indexOf([CII[CIII)I @ 3 Event: 0.252 Thread 0x0cb05400 Uncommon trap: reason=unstable_if action=reinterpret pc=0x1007e320 method=java.lang.String.equals(Ljava/lang/Object;)Z @ 66 Event: 0.282 Thread 0x0cb05400 Uncommon trap: reason=unstable_if action=reinterpret pc=0x100857dc method=java.lang.AbstractStringBuilder.append(Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; @ 1 Event: 0.321 Thread 0x0cb05400 Uncommon trap: reason=unstable_if action=reinterpret pc=0x1007c398 method=java.util.StringTokenizer.scanToken(I)I @ 42

Internal exceptions (10 events): Event: 0.331 Thread 0x0cb05400 Threw 0x423bb958 at C:\re\jdk7u80\2329\hotspot\src\share\vm\prims\jvm.cpp:1319 Event: 0.331 Thread 0x0cb05400 Threw 0x423cb0c8 at C:\re\jdk7u80\2329\hotspot\src\share\vm\prims\jvm.cpp:1319 Event: 0.333 Thread 0x0cb05400 Threw 0x423df780 at C:\re\jdk7u80\2329\hotspot\src\share\vm\prims\jvm.cpp:1319 Event: 0.335 Thread 0x0cb05400 Threw 0x423efdb0 at C:\re\jdk7u80\2329\hotspot\src\share\vm\prims\jvm.cpp:1319 Event: 0.336 Thread 0x0cb05400 Threw 0x42400e88 at C:\re\jdk7u80\2329\hotspot\src\share\vm\prims\jvm.cpp:1319 Event: 0.337 Thread 0x0cb05400 Threw 0x4240fab8 at C:\re\jdk7u80\2329\hotspot\src\share\vm\prims\jvm.cpp:1319 Event: 0.344 Thread 0x0cb05400 Threw 0x42431d48 at C:\re\jdk7u80\2329\hotspot\src\share\vm\prims\jvm.cpp:1319 Event: 0.345 Thread 0x0cb05400 Threw 0x42436bb0 at C:\re\jdk7u80\2329\hotspot\src\share\vm\prims\jvm.cpp:1319 Event: 0.349 Thread 0x0cb05400 Threw 0x4246c7a8 at C:\re\jdk7u80\2329\hotspot\src\share\vm\prims\jvm.cpp:1319 Event: 0.349 Thread 0x0cb05400 Threw 0x42473e10 at C:\re\jdk7u80\2329\hotspot\src\share\vm\prims\jvm.cpp:1319

Events (10 events): Event: 0.350 loading class 0x0d90b6e8 Event: 0.350 loading class 0x0d90b6e8 done Event: 0.350 loading class 0x0d9278d8 Event: 0.350 loading class 0x0d9278d8 done Event: 0.350 loading class 0x0d9277c8 Event: 0.350 loading class 0x0d9277c8 done Event: 0.351 loading class 0x0ddbdb70 Event: 0.351 loading class 0x0d9270f8 Event: 0.351 loading class 0x0d9270f8 done Event: 0.351 loading class 0x0ddbdb70 done

Dynamic libraries: 0x00400000 - 0x0085d000 c:\Program Files (x86)\postgreSQL\9.3\bin\postgres.exe 0x77a50000 - 0x77bd0000 C:\Windows\SysWOW64\ntdll.dll 0x75440000 - 0x75550000 C:\Windows\syswow64\kernel32.dll 0x75f10000 - 0x75f57000 C:\Windows\syswow64\KERNELBASE.dll 0x6d1b0000 - 0x6d1f8000 c:\Program Files (x86)\postgreSQL\9.3\bin\SSLEAY32.dll 0x6d080000 - 0x6d1a2000 c:\Program Files (x86)\postgreSQL\9.3\bin\LIBEAY32.dll 0x77610000 - 0x77645000 C:\Windows\syswow64\WS2_32.dll 0x77200000 - 0x772ac000 C:\Windows\syswow64\msvcrt.dll 0x76fc0000 - 0x770b0000 C:\Windows\syswow64\RPCRT4.dll 0x753c0000 - 0x75420000 C:\Windows\syswow64\SspiCli.dll 0x753b0000 - 0x753bc000 C:\Windows\syswow64\CRYPTBASE.dll 0x76160000 - 0x76179000 C:\Windows\SysWOW64\sechost.dll 0x76130000 - 0x76136000 C:\Windows\syswow64\NSI.dll 0x76e30000 - 0x76ec0000 C:\Windows\syswow64\GDI32.dll 0x76ec0000 - 0x76fc0000 C:\Windows\syswow64\USER32.dll 0x75be0000 - 0x75c81000 C:\Windows\syswow64\ADVAPI32.dll 0x75b30000 - 0x75b3a000 C:\Windows\syswow64\LPK.dll 0x759b0000 - 0x75a4d000 C:\Windows\syswow64\USP10.dll 0x6dd90000 - 0x6de4f000 C:\Windows\system32\MSVCR100.dll 0x6a300000 - 0x6a32b000 c:\Program Files (x86)\postgreSQL\9.3\bin\libintl.dll 0x6ade0000 - 0x6aee1000 c:\Program Files (x86)\postgreSQL\9.3\bin\libxml2.dll 0x73ca0000 - 0x73ca7000 C:\Windows\system32\WSOCK32.dll 0x6af10000 - 0x6aff4000 c:\Program Files (x86)\postgreSQL\9.3\bin\libiconv.dll 0x73c90000 - 0x73c98000 C:\Windows\system32\Secur32.dll 0x775c0000 - 0x77605000 C:\Windows\syswow64\WLDAP32.dll 0x76180000 - 0x761e0000 C:\Windows\system32\IMM32.DLL 0x755d0000 - 0x7569c000 C:\Windows\syswow64\MSCTF.dll 0x74fa0000 - 0x74fdc000 C:\Windows\system32\mswsock.dll 0x74f80000 - 0x74f85000 C:\Windows\System32\wshtcpip.dll 0x74f90000 - 0x74f96000 C:\Windows\System32\wship6.dll 0x10000000 - 0x10024000 c:\Program Files (x86)\postgreSQL\9.3\lib\plpgsql.dll 0x00e10000 - 0x00e3b000 c:\Program Files (x86)\postgreSQL\9.3\lib\pgcrypto.dll 0x63bb0000 - 0x63bc4000 c:\Program Files (x86)\postgreSQL\9.3\bin\zlib1.dll 0x5d750000 - 0x5d777000 c:\Program Files (x86)\postgreSQL\9.3\lib\pljava.dll 0x5c1f0000 - 0x5c7a4000 C:\Program Files (x86)\java\jdk1.7.0_80\jre\bin\server\jvm.dll 0x71ae0000 - 0x71b12000 C:\Windows\system32\WINMM.dll 0x772b0000 - 0x772b5000 C:\Windows\syswow64\PSAPI.DLL 0x6b4f0000 - 0x6b4fc000 C:\Program Files (x86)\java\jdk1.7.0_80\jre\bin\verify.dll 0x5d720000 - 0x5d741000 C:\Program Files (x86)\java\jdk1.7.0_80\jre\bin\java.dll 0x5d700000 - 0x5d713000 C:\Program Files (x86)\java\jdk1.7.0_80\jre\bin\zip.dll 0x5d6e0000 - 0x5d6f4000 C:\Program Files (x86)\Java\jdk1.7.0_80\jre\bin\net.dll 0x6a8c0000 - 0x6a8cf000 C:\Program Files (x86)\Java\jdk1.7.0_80\jre\bin\nio.dll 0x74e90000 - 0x74f7b000 C:\Windows\system32\dbghelp.dll

VM Arguments: jvm_args: -Djava.endorsed.dirs=C:\RRSQL\jar\endorsed -Dhttp.proxyHost=cache.road-runner.net -Dhttp.proxyPort=8081 -Dhttp.nonProxyHosts=localhost|127.0.0.1|soap.ned -Dsqlj.defaultconnection=jdbc:default:connection vfprintf -Xrs java_command: Launcher Type: generic

Environment Variables: JAVA_HOME=C:\Program Files (x86)\java\jdk1.7.0_80 PATH=C:\apache-maven-3.3.3\bin;C:\MinGW\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\DMIX;C:\Program Files (x86)\CVSNT\;C:\Program Files (x86)\Liant\RMCOBOLv11;C:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\GtkSharp\2.12\bin;c:\Program Files (x86)\postgreSQL\9.3\bin;C:\Program Files (x86)\java\jdk1.7.0_80\jre\bin;C:\Program Files (x86)\java\jdk1.7.0_80\jre\bin\server;c:\Program Files\Saxonica\SaxonHE9.4N\bin USERNAME=Paul Brasted OS=Windows_NT PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 37 Stepping 2, GenuineIntel

--------------- S Y S T E M ---------------

OS: Windows 7 , 64 bit Build 7601 Service Pack 1

CPU:total 4 (2 cores per cpu, 2 threads per core) family 6 model 37 stepping 2, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, aes, ht, tsc, tscinvbit

Memory: 4k page, physical 8181064k(4373440k free), swap 16360288k(12290552k free)

vm_info: Java HotSpot(TM) Server VM (24.80-b11) for windows-x86 JRE (1.7.0_80-b15), built on Apr 10 2015 13:27:32 by "java_re" with unknown MS VC++:1600

time: Wed Aug 19 12:30:08 2015 elapsed time: 0 seconds

jcflack commented 8 years ago

Hi @paulbrasted

I don't know whether you are still in a position to give more details on this issue, but I have tried to construct a test case based on what you've reported. Here's what I came up with. The trouble is, in my environment it works as expected and doesn't crash. I wonder if you could try it in an empty db in yours.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;

import java.util.logging.Logger;

import org.postgresql.pljava.annotation.SQLAction;
import org.postgresql.pljava.annotation.SQLActions;
import org.postgresql.pljava.annotation.Function;

@SQLActions({
  @SQLAction(provides="invoice_batch table", install=
    "CREATE TABLE invoice_batch AS " +
    "SELECT now() AS time_created, 42 AS id", remove=
    "DROP TABLE invoice_batch"
  ),
  @SQLAction(requires={"invoice_batch table","whenCreated fn"}, install=
    "SELECT whenCreated(42)"
  )
})
public class ttest
{
  @Function(provides="whenCreated fn")
  public static void whenCreated(Integer batch)
  throws SQLException
  {
    Timestamp createTimeStamp = null;
    java.sql.Connection sqlConnection =
      DriverManager.getConnection("jdbc:default:connection");
    String sql = "SELECT time_created FROM invoice_batch where id = "
      + batch.toString();
    ResultSet result = sqlConnection.createStatement().executeQuery(sql);
    if (result.next()) {
      createTimeStamp = result.getTimestamp("time_created");
    }
    Logger.getAnonymousLogger().warning(String.valueOf(createTimeStamp));
  }
}

If you build a jar from the above, say ttest.jar, you can run the test simply with SELECT sqlj.install_jar('file:///path/to/ttest.jar', 'ttest', true); and if things are working it should produce a WARNING with the timestamp value. In your case, I guess it should crash. Or if it doesn't crash, perhaps you could look for how it is different from your first example and what needs to be changed until it does crash?

Thanks, -Chap

paulbrasted commented 8 years ago

Hi Chap Thanks for response. Give me a couple of days Paul On 5 Oct 2015 04:51, "Chapman Flack" notifications@github.com wrote:

Hi @paulbrasted https://github.com/paulbrasted

I don't know whether you are still in a position to give more details on this issue, but I have tried to construct a test case based on what you've reported. Here's what I came up with. The trouble is, in my environment it works as expected and doesn't crash. I wonder if you could try it in an empty db in yours.

import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Timestamp; import java.util.logging.Logger; import org.postgresql.pljava.annotation.SQLAction;import org.postgresql.pljava.annotation.SQLActions;import org.postgresql.pljava.annotation.Function;

@SQLActions({ @SQLAction(provides="invoice_batch table", install= "CREATE TABLE invoice_batch AS " + "SELECT now() AS time_created, 42 AS id", remove= "DROP TABLE invoice_batch" ), @SQLAction(requires={"invoice_batch table","whenCreated fn"}, install= "SELECT whenCreated(42)" ) })public class ttest { @Function(provides="whenCreated fn") public static void whenCreated(Integer batch) throws SQLException { Timestamp createTimeStamp = null; java.sql.Connection sqlConnection = DriverManager.getConnection("jdbc:default:connection"); String sql = "SELECT time_created FROM invoice_batch where id = "

  • batch.toString(); ResultSet result = sqlConnection.createStatement().executeQuery(sql); if (result.next()) { createTimeStamp = result.getTimestamp("time_created"); } Logger.getAnonymousLogger().warning(String.valueOf(createTimeStamp)); } }

If you build a jar from the above, say ttest.jar, you can run the test simply with SELECT sqlj.install_jar('file:///path/to/ttest.jar', 'ttest', true); and if things are working it should produce a WARNING with the timestamp value. In your case, I guess it should crash. Or if it doesn't crash, perhaps you could look for how it is different from your first example and what needs to be changed until it does crash?

Thanks, -Chap

— Reply to this email directly or view it on GitHub https://github.com/tada/pljava/issues/47#issuecomment-145423088.

jcflack commented 8 years ago

Have not heard from Paul since October, but noticing this involved timestamps and Windows gives it a very strong smell of the MSVC global-variable mislinkage business and I would bet it is fixed by 1f1e8fe.

Closing.