Hi, as requested in the unit tests, I'm here attaching my results for DBD::ODBC's t/ExecuteArray.pm tests in combination with sqlite3odbc.
I *know* it is probably not very useful to use DBD::ODBC in combination with SQLite, as there is already a dedicated DBI driver, but I chose this because I want to package DBD::ODBC for Fedora, and in Fedora the idea is to run as many tests as possible for the packages involved, so someone suggested to use a SQLite test database for use with the DBD::ODBC tests. In case you're interested: Original package review: https://bugzilla.redhat.com/show_bug.cgi?id=441830 my current specfile for DBD::ODBC (without SQLite tests) https://gist.github.com/3155925 Below are the test results from DBD::ODBC. I ran the tests on EL6 with stock perl, DBI and SQLite. t/01base.t ................... ok # # Perl 5.10.1 # osname=linux, osvers=2.6.32-220.el6.x86_64, archname=i386-linux-thread-multi # Using DBI 1.609 # Using DBD::ODBC 1.39 # Using DBMS_NAME 'SQLite' # Using DBMS_VER '3.6.20' # Using DRIVER_NAME 'sqlite3odbc.so' # Using DRIVER_VER '0.97' # odbc_has_unicode 0 # Failed test 'ReadOnly set' # at t/02simple.t line 57. # got: '0' # expected: '1' # Looks like you failed 1 test of 65. t/02simple.t ................. Dubious, test returned 1 (wstat 256, 0x100) Failed 1/65 subtests # # N.B. Some drivers (postgres/cache) may return ODBC 2.0 column names for the SQLTables result-set e.g. TABLE_QUALIFIER instead of TABLE_CAT t/03dbatt.t .................. ok t/05meth.t ................... ok t/07bind.t ................... ok t/08bind2.t .................. ok t/09multi.t .................. ok t/10handler.t ................ ok t/12blob.t ................... ok t/20SqlServer.t .............. ok t/30Oracle.t ................. ok t/40UnicodeRoundTrip.t ....... ok t/41Unicode.t ................ ok t/50_odbc_utf8_on.t .......... ok # # # NOTE: This tests execute_array and execute_for_fetch using DBI's version and not the native DBD::ODBC execute_for_fetch. It should work as it is using nothing special in DBD::ODBC other than the normal methods. t/70execute_array_dbi.t ...... ok # # # NOTE: This is an experimental test. Since DBD::ODBC added the execute_for_fetch method this tests the native method and not DBI's fallback method. If you fail this test it probably means the ODBC driver you are using does not have sufficient support (or is buggy) for array operations. If you pass this test your ODBC Driver seems ok and you can get faster insert/update/delete operations using DBI's execute_array or execute_for_fetch methods by setting the odbc_array_operations to true. # # If this test fails it should not stop you installing DBD::ODBC but if it fails with an error other than something indicating 'connection busy' I'd strongly suggest you don't set odbc_array_operations and stick with DBI's default implementation. # # If this test fails for your driver I'd like to hear about it so I can compile a list of working drivers and perhaps pass bug reports on to the maintainers. Please rerun this test with TEST_VERBOSE set or using prove and send the results to the dbi-users mailing list. # # # Perl 5.10.1 # osname=linux, osvers=2.6.32-220.el6.x86_64, archname=i386-linux-thread-multi # Using DBI 1.609 # Using DBD::ODBC 1.39 # Using DBMS_NAME 'SQLite' # Using DBMS_VER '3.6.20' # Using DRIVER_NAME 'sqlite3odbc.so' # Using DRIVER_VER '0.97' # odbc_has_unicode 0 # Failed test 'row 0 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x956c680)' # expected: '1' # Failed test 'row 1 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x956c700)' # expected: '1' # Failed test 'row 2 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x956c780)' # expected: '1' # Failed test 'row 3 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x956c800)' # expected: '1' # Failed test 'row 4 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x956c880)' # expected: '1' # Failed test 'row 0 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x956cac0)' # expected: '1' # Failed test 'row 1 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x959f998)' # expected: '1' # Failed test 'row 2 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x959fa18)' # expected: '1' # Failed test 'row 3 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x959fa98)' # expected: '1' # Failed test 'row 4 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x959fb18)' # expected: '1' # Failed test 'row 0 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x959fd68)' # expected: '1' # Failed test 'row 1 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a03d8)' # expected: '1' # Failed test 'row 2 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a0a98)' # expected: '1' # Failed test 'row 3 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a0b18)' # expected: '1' # Failed test 'row 4 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a0b98)' # expected: '1' # Failed test 'row 0 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a1448)' # expected: '1' # Failed test 'row 1 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a14c8)' # expected: '1' # Failed test 'row 2 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a1548)' # expected: '1' # Failed test 'row 3 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a15c8)' # expected: '1' # Failed test 'row 4 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a1648)' # expected: '1' # Failed test 'row 0 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a5848)' # expected: '1' # Failed test 'row 1 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a58c8)' # expected: '1' # Failed test 'row 2 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a5948)' # expected: '1' # Failed test 'row 3 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a59c8)' # expected: '1' # Failed test 'row 4 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a5a48)' # expected: '1' # Failed test 'row 0 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a5908)' # expected: '1' # Failed test 'row 1 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a7560)' # expected: '1' # Failed test 'row 2 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a75d0)' # expected: '1' # Failed test 'row 3 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a7650)' # expected: '1' # Failed test 'row 4 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a76d0)' # expected: '1' # Failed test 'row 0 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a78b0)' # expected: '1' # Failed test 'row 1 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a7f20)' # expected: '1' # Failed test 'row 2 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a7fa0)' # expected: '1' # Failed test 'row 3 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a8020)' # expected: '1' # Failed test 'row 4 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a80a0)' # expected: '1' # Failed test 'row 0 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95aa418)' # expected: '1' # Failed test 'row 1 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95aa498)' # expected: '1' # Failed test 'row 2 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95aa518)' # expected: '1' # Failed test 'row 3 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95aa598)' # expected: '1' # Failed test 'row 4 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95aa618)' # expected: '1' # Failed test 'array in array tuple status' # at t/ExecuteArray.pm line 136. # got: '' # expected: 'ARRAY' # Failed test '3 elements in array tuple status error' # at t/ExecuteArray.pm line 137. # got: '0' # expected: '3' # Failed test 'array in array tuple status' # at t/ExecuteArray.pm line 136. # got: '' # expected: 'ARRAY' # Failed test '3 elements in array tuple status error' # at t/ExecuteArray.pm line 137. # got: '0' # expected: '3' # Failed test 'array in array tuple status' # at t/ExecuteArray.pm line 136. # got: '' # expected: 'ARRAY' # Failed test '3 elements in array tuple status error' # at t/ExecuteArray.pm line 137. # got: '0' # expected: '3' # Failed test 'array in array tuple status' # at t/ExecuteArray.pm line 136. # got: '' # expected: 'ARRAY' # Failed test '3 elements in array tuple status error' # at t/ExecuteArray.pm line 137. # got: '0' # expected: '3' # Failed test 'array in array tuple status' # at t/ExecuteArray.pm line 136. # got: '' # expected: 'ARRAY' # Failed test '3 elements in array tuple status error' # at t/ExecuteArray.pm line 137. # got: '0' # expected: '3' # Failed test 'array in array tuple status' # at t/ExecuteArray.pm line 136. # got: '' # expected: 'ARRAY' # Failed test '3 elements in array tuple status error' # at t/ExecuteArray.pm line 137. # got: '0' # expected: '3' # Failed test 'array in array tuple status' # at t/ExecuteArray.pm line 136. # got: '' # expected: 'ARRAY' # Failed test '3 elements in array tuple status error' # at t/ExecuteArray.pm line 137. # got: '0' # expected: '3' # Failed test 'array in array tuple status' # at t/ExecuteArray.pm line 136. # got: '' # expected: 'ARRAY' # Failed test '3 elements in array tuple status error' # at t/ExecuteArray.pm line 137. # got: '0' # expected: '3' # Failed test 'row 0 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a96f8)' # expected: '1' # Failed test 'row 1 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a97a8)' # expected: '1' # Failed test 'row 2 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95a9828)' # expected: '1' # Failed test 'row 3 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95b92a8)' # expected: '1' # Failed test 'row 4 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95b9328)' # expected: '1' # Failed test 'row 0 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95b98a8)' # expected: '1' # Failed test 'row 1 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95b9a18)' # expected: '1' # Failed test 'row 2 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95b99a8)' # expected: '1' # Failed test 'row 3 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95b98f8)' # expected: '1' # Failed test 'row 4 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95b9618)' # expected: '1' # Failed test 'row 0 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95bca68)' # expected: '1' # Failed test 'row 1 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95b9f48)' # expected: '1' # Failed test 'row 2 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95b9dc8)' # expected: '1' # Failed test 'row 3 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95b9688)' # expected: '1' # Failed test 'row 4 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95b9cc8)' # expected: '1' # Failed test 'row 0 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95bce98)' # expected: '1' # Failed test 'row 1 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95bd508)' # expected: '1' # Failed test 'row 2 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95bd588)' # expected: '1' # Failed test 'row 3 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95bd608)' # expected: '1' # Failed test 'row 4 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95bd688)' # expected: '1' # Failed test 'row 0 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95befd0)' # expected: '1' # Failed test 'row 1 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95bf040)' # expected: '1' # Failed test 'row 2 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95bf0c0)' # expected: '1' # Failed test 'row 3 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95bf140)' # expected: '1' # Failed test 'row 4 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95bf1c0)' # expected: '0E0' # Failed test 'row 0 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95bf2d0)' # expected: '4' # Failed test 'row 1 tuple status' # at t/ExecuteArray.pm line 143. # got: 'ARRAY(0x95bf2e0)' # expected: '1' # Looks like you failed 83 tests of 397. t/70execute_array_native.t ... Dubious, test returned 83 (wstat 21248, 0x5300) Failed 83/397 subtests t/80_odbc_diags.t ............ No subtests run t/odbc_describe_parameter.t .. ok t/pod-coverage.t ............. ok t/pod.t ...................... ok t/rt_38977.t ................. ok t/rt_39841.t ................. ok t/rt_39897.t ................. ok t/rt_43384.t ................. ok t/rt_46597.t ................. ok t/rt_50852.t ................. ok # # Some of these tests may fail for your driver - please let me know if they do along with the strings SQLite/sqlite3odbc.so t/rt_57957.t ................. ok t/rt_59621.t ................. ok t/rt_61370.t ................. ok t/rt_62033.t ................. ok t/rt_63550.t ................. ok t/rt_null_nvarchar.t ......... ok t/sql_type_cast.t ............ skipped: DBI version is too old for this test Test Summary Report ------------------- t/02simple.t (Wstat: 256 Tests: 65 Failed: 1) Failed test: 3 Non-zero exit status: 1 t/70execute_array_native.t (Wstat: 21248 Tests: 397 Failed: 83) Failed tests: 7-11, 27-31, 47-51, 67-71, 91-95, 110-114 129-133, 148-152, 173-174, 188-189, 203-204 218-219, 234-235, 250-251, 265-266, 280-281 294-298, 306-310, 326-330, 346-350, 366-370 386-387 Non-zero exit status: 83 t/80_odbc_diags.t (Wstat: 139 Tests: 0 Failed: 0) Non-zero wait status: 139 Parse errors: No plan found in TAP output Files=33, Tests=1307, 5 wallclock secs ( 0.48 usr 0.08 sys + 3.24 cusr 0.61 csys = 4.41 CPU) Result: FAIL