contrast to former versions) someday be capable of returning things
like SQL_TIME_STRUCT, SQL_DATE_STRUCT, SQL_TIMESTAMP_STRUCT and
SQL_NUMERIC_STRUCT.
+ However, SQLGetData() is now even more broken than before (if used
on integer columns). It seems, that I failed to understand the API
reference on SQLGetData() completly!
RX syntax. Namely, a lot of code (used to) assume(s) that the
total-number-of-submatches (TSM) quantity is static even for dynamic
regexps.
Specifically, RE-TSM now returns an unspecific value instead of 0 for
non-regexps which should break most of the code that used to just
silently do the wrong thing. It's likely that more examples involving
dynamic sub-regexps will fail.
In the process, I also removed some of Olin's naming craziness (using
"%" signs to convey meaning) which I needed to do to halfway
understand what's going on.
opened by open-input-string could be closed by the GC before the exec().
Now << stores the port in a global variable.
The test to reveal the bug was:
(let lp ()
(run (head) (<< "a"))
(lp))
printing a "closed channel" message after some a few hundred interations.
- dynamic memory allocation for return values in these functions:
- odbc_sql_get_info_string()
- odbc_sql_get_connect_attr_string()
- odbc_sql_get_stmt_attr_string()
- odbc_sql_get_desc_field_string()
- odbc_sql_get_cursor_name()
- odbc_sql_native_sql()
- odbc_sql_get_data()
- odbc_sql_describe_col()
- odbc_sql_get_diag_recs()
- odbc_sql_data_sources() is still broken: sometimes the result string
is truncated. I'm not sure if this not a unixODBC-bug...
- Don't call SQLGetDiagRec() automatically on SQL_ERROR, some ODBC
seem to have a broken SQLGetDiagRec() implementation. Let user call
SQLGetDiagRec() from Scheme at his own risk.
The ODBC documentation thinks it's a good idea to call SQLGetDiagRec()
after each ODBC-call that might return SQL_SUCCESS_WITH_INFO. IMHO
this sucks. However it's now possible to do so in the user's Scheme
code.
(environment-handle, connection-handle, statement-handle,
database-handle)
- make ODBC functions these records
- Tons of constants for SQLGetInfo()
- get rid of some stupid pseudo-highlevel-ODBC-functions
- extend the VM interrupts to distinguish between read and write
events
- add new ADD-PENDING-CHANNEL instruction to the VM
- add WAIT-FOR-CHANNELS procedure to the run-time system
- implement SELECT and SELECT! on top of that in newports.scm
This runs some basic tests, but in general should be considered
largely untested.
Moreover, SELECT/SELECT! never detect any exceptional conditions---the
returned vectors are always empty. This is because the VM doesn't
really track those, and it's unclear whether it would be worth the
effort.
Scheme 48 1.0.1.
Namely, instead of associating a list of queues with every thread, we
associate a single cell, holding the thread. That cell is stored in
thread queues, and once a thread is made runnable again, the cell is
set to #f. The thread-queue accessors ignore cells containing #f.
Implement an experimental OBTAIN-LOCK-MULTIPLE to test the whole
thing.
call s48_extract_integer.
s48_extract_integer can cause a callback for bignums, and, hence, heap
allocation.
This fixes a bug report by Seth Alves <alves@hungry.com> noting
spurious failures in SET-FILE-TIMES.
- tons of function ids for usage with SQLGetFunctions (sql-api-*)
- some key values for SQLGetInfo (sql-get-info-*). Need to be sorted (renamed?) by type of return value.
- minor code cleanups
command levels (as there *are* no command levels for things like scsh
-c):
There's now a new asynchronous event, similar to SPAWN, called NARROW.
It spawns off a new scheduler with just one thread (which runs the
thunk provided as an argument to NARROW) and blocks the current one
until the narrowed scheduler finishes.
For this to work, two schedulers need to be in place: the root
scheduler which performs the housekeeping, and another one inside that
which is the one the program uses---otherwise it's the root scheduler
that's blocked, and that means no housekeeping gets done. This is
trivially the case for interactive mode, as the command-levels all
have their own schedulers, but we also need to make sure scsh's entry
point fires up its own initial scheduler.
- new record type: sql-time (SQL_TIME_STRUCT)
- new record type: sql-timestamp (SQL_TIMESTAMP_STRUCT)
- added type identifier for SQL_C_*-types and SQL_*-types
- import c-functions: odbc_sql_bind_parameter_exec_out, odbc_sql_execute, odbc_sql_execute_direct, odbc_sql_get_data, odbc_sql_fetch
- fixed matching of SQL types in odbc_sql_bin_parameter_exec_out
- added new functions for sql-time<->SQL_TIME_STRUCT conversion
- added new functions for sql-date<->SQL_DATE_STRUCT conversion
- added new functions for sql-timestamp<->SQL_TIMESTAMP_STRUCT conversion
- use functions for sql-time/sql-date/sql-timestamp conversion
- print more debug information in odbc_sql_bin_parameter_exec_out
- added function odbc_sql_execute_direct
- added function odbc_sql_get_data, check_sql_get_data_result
- added function odbc_sql_fetch
- odbc_debug_msgs: do not print native_error
- renamed function odbc_set_env_attr to odbc_sql_set_env_attr
Tested partially: handle allocation, connection, prepare, execute
Missing: Support for SQLBindCol & several catalog functions. The scsh 0.53 API abstraction need
s to be implemented on top of the ODBC 3 API.
Tested partially: handle allocation, connection, prepare, execute
Missing: Support for SQLBindCol & several catalog functions. The scsh 0.53 API abstraction needs to be implemented on top of the ODBC 3 API.
child process, thus preventing other threads from continuing to run.
Both take an additional optional argument that, when true, reverts the
old behavior of continuing all threads.
Moreover, use WITH-CONTINUATION NULL-CONTINUATION in CALL-TERMINALLY
to get us more space.
Previously,
(begin
(display "ha!") (newline)
(fork (lambda ()
'foo)))
would print "ha!" twice because FLUSH-ALL-PORTS would not finish
before the actual FORK.
+ Use wait-lock to glue waiting and the process object together
+ Delete the pid/weak-pointer pair in the process table if the process object
gets finalized