Commit Graph

788 Commits

Author SHA1 Message Date
Evan Miller
90ee7bfcb5 Remove references to dmalloc
There are more modern tools for memory debugging, get rid of DMALLOC
crap in the source code.

I've left one reference in backend.c to prevent a merge conflict but
this can be removed later.
2020-08-20 08:59:08 -04:00
Evan Miller
452cd29343 Get rid of more static memory
* Replace backend_is_init (formerly is_init) with relationships_table

* Remove deprecated functions that used static variables

* Move static "bound" variable to MdbHandle as relationships_values
2020-08-20 08:47:13 -04:00
Evan Miller
588663675e Move backend dictionary and state to MdbHandle
Attempt to make the backend handling logic thread-safe. This removes the
last MDB_CONSTRUCTOR. Also get rid of some JAVA junk and make the
remaining static variables in backend.c constant. Finally remove some
obsolete fields from MdbFile.
2020-08-20 07:58:53 -04:00
Nyall Dawson
d0ea8a9a86 ODBC requires dates formatted in ISO standards 2020-08-20 14:07:17 +10:00
Evan Miller
5d078838ed [API break] Make date/boolean formats thread safe
Store the preferred date and boolean formats in the MdbHandle rather
than in global memory.
2020-08-19 21:26:06 -04:00
Evan Miller
7b51824c89 Consolidate / fix UUID formatting 2020-08-19 20:53:35 -04:00
Evan Miller
673c7700b9 Store OLE strings on the statement object
Also cut MDB_OLE out into its own code path. This removes the last of
the global / thread-local storage in the ODBC driver, I think.
2020-08-19 19:24:40 -04:00
Evan Miller
55e0d4ff07 Store sqlState separtely on ODBC env / handle / stmts
Also fix the fact that "08001" was always returned by SQLError instead
of the actual SQL state.
2020-08-19 17:34:57 -04:00
Evan Miller
00b3ab9571 Store statement and handle errors separately 2020-08-19 17:22:54 -04:00
Evan Miller
a84c07980f Make lastError thread-safe 2020-08-19 17:03:06 -04:00
Evan Miller
e67c8e6d52 Remove obsolete comment about thread safety 2020-08-19 16:32:13 -04:00
Evan Miller
3d63f16fc0 Fix errors
It helps to enable ODBC when testing ODBC :-P
2020-08-19 16:16:25 -04:00
Evan Miller
684fa55781 Fix unused variable warning 2020-08-19 15:50:57 -04:00
Evan Miller
9020ca9a1e Attempt to make the ODBC driver thread-safe
I'm not sure if this is a complete solution - some of the global state
has been moved to thread-local storage. So passing an ODBC handle across
threads may have unexpected results. But at least it's not global state.

Each ODBC handle now has its own iconv_t object.

See #23
2020-08-19 15:35:02 -04:00
Evan Miller
1ad0dd2d8b Simplify code 2020-08-18 21:20:40 -04:00
Evan Miller
008b3b462b Merge pull request #22 from nyalldawson/no_crash
Don't crash when a table can't be read for some reason
2020-08-18 21:10:52 -04:00
Nyall Dawson
40981d2fc6 Only handle tables in SQLColumns, not other objects 2020-08-19 10:50:12 +10:00
Nyall Dawson
b72ac6b1c0 Don't crash when a table can't be read for some reason 2020-08-19 10:44:17 +10:00
Nyall Dawson
333f4712b9 Fix empty table results
Fixes #19
2020-08-19 10:28:01 +10:00
Evan Miller
5758cd6861 Try fixing Mac build with explicit Yacc output file 2020-08-18 09:06:17 -04:00
Evan Miller
78707f7aa3 Remove second -d flag 2020-08-18 07:48:54 -04:00
Evan Miller
858e1dff49 Merge pull request #16 from nyalldawson/reentrant
Make SQL parser/lexer reentrant
2020-08-18 07:20:35 -04:00
Evan Miller
1e983c70f1 Merge pull request #18 from nyalldawson/fix_limit
Fix LIMIT clause is ignored when executing SQL via ODBC, incorrect behavior with LIMIT 0
2020-08-18 07:02:00 -04:00
Nyall Dawson
083ec7f9e4 SELECT ... LIMIT 0 should return no rows, not all rows 2020-08-18 14:54:38 +10:00
Nyall Dawson
4e3ed3a5fd Fix LIMIT clause is ignored when executing SQL via ODBC 2020-08-18 14:54:19 +10:00
Nyall Dawson
e82c1e9e1b Fix another leak 2020-08-18 14:36:44 +10:00
Nyall Dawson
e8ab7e7ea6 Fix leak after running "SELECT COUNT(*)..." sql query 2020-08-18 12:36:29 +10:00
Nyall Dawson
c65b402348 Fix leak after running "SELECT COUNT(*)..." sql query 2020-08-18 12:31:38 +10:00
Nyall Dawson
86741f4614 More thread safety 2020-08-18 12:28:20 +10:00
Nyall Dawson
e92f14f9c4 Make SQL parser/lexer reentrant
Provides thread safety for mdbtools ODBC driver
2020-08-18 12:23:04 +10:00
Evan Miller
6171472411 Change -Bsymbolic-functions to -Wl,-Bsymbolic-functions 2020-08-14 00:12:07 -04:00
Evan Miller
dfd41f2283 Try fixing unixODBC deadlock with -Bsymbolic-functions
This flag compels the dynamic library to prefer its own function symbols
to those in the global symbol table. This behavior should let us
directly call SQL* functions from inside other SQL* functions without
fear of interference by the host program.
2020-08-13 21:52:03 -04:00
Evan Miller
3c6c8e07db Make mdb-count case-insensitive to table names
This matches the behavior of mdb-export. Thanks to Nicholas Crookston.
2020-08-13 06:32:41 -04:00
Evan Miller
cca922562f Merge pull request #13 from nyalldawson/fix_placeholder
Fix placeholder text used instead of type name in SQLGetData SQLColumns_TYPE_NAME call
2020-08-12 22:48:41 -04:00
Evan Miller
0a72c5407b Merge pull request #14 from nyalldawson/char_len
Correctly return len of character data when SQLColAttributes is called with SQL_COLUMN_TYPE_NAME
2020-08-12 22:46:52 -04:00
Nyall Dawson
6085a89e1d Use ICONV_CONST 2020-08-13 12:42:32 +10:00
Nyall Dawson
3f278f3996 Correctly return len of character data when SQLColAttributes is called with SQL_COLUMN_TYPE_NAME 2020-08-13 12:40:46 +10:00
Nyall Dawson
1fc6d60dfa Fix placeholder text used instead of type name in SQLGetData SQLColumns_TYPE_NAME call 2020-08-13 12:12:57 +10:00
Nyall Dawson
1846fab4e6 Const correctness on src char pointers for unicode/ascii conversion 2020-08-13 12:12:52 +10:00
Nyall Dawson
8202e38155 Don't automatically add terminators when reading data parts
via SQLGetData for OLE fields

if the column type is OLE, then we don't add terminators
see https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlgetdata-function?view=sql-server-ver15
and https://www.ibm.com/support/knowledgecenter/SSEPEK_11.0.0/odbc/src/tpc/db2z_fngetdata.html

"The buffer that the rgbValue argument specifies contains nul-terminated values, unless you retrieve
binary data, or the SQL data type of the column is graphic (DBCS) and the C buffer type is SQL_C_CHAR."
2020-08-13 08:03:00 +10:00
Evan Miller
362938f17c ODBC build fixes
* Require SQLGetPrivateProfileString in ODBC libraries

* Attempt to fix reported deadlock with unixODBC by rearranging
functions
2020-08-12 15:05:25 -04:00
Evan Miller
bd6aa50f73 Merge pull request #11 from nyalldawson/binary_type
Report more accurate field type for OLE fields
2020-08-12 06:26:00 -04:00
Nyall Dawson
9a749e68fd Report more accurate field type for OLE fields 2020-08-12 15:33:54 +10:00
Nyall Dawson
277b49f209 More warning fixes 2020-08-12 13:11:52 +10:00
Nyall Dawson
1639283779 Fix int/guint comparison warnings 2020-08-12 13:04:20 +10:00
Nyall Dawson
68d3104134 pos should finish on data length 2020-08-12 09:51:54 +10:00
Nyall Dawson
2567e57faa Fix incorrect early free of str when reading ole fields 2020-08-12 09:06:04 +10:00
Evan Miller
71e10395fd Try another SQLGetData fix
Set the length of the return value to include the NUL termination
charaacter.
2020-08-11 07:30:33 -04:00
Evan Miller
e330feebd6 Fix for variable-length fields using SQLGetData
See:

brianb/mdbtools#130
brianb/mdbtools#131
evanmiller/mdbtools#6
2020-08-10 21:38:08 -04:00
Evan Miller
02c5544c14 Syntax fix 2020-08-10 19:19:19 -04:00