summaryrefslogtreecommitdiff
path: root/doc/src/FAQ/TODO.html
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2005-08-26 18:59:48 +0000
committerBruce Momjian <bruce@momjian.us>2005-08-26 18:59:48 +0000
commit88d7b711a01683da6efe76d01c238c0befd18e4b (patch)
treeb6e94e9b541099d534d59449da85a3cd8373ca8d /doc/src/FAQ/TODO.html
parent9f604687973eafa1476b454d50bc1dceb5b47ccb (diff)
downloadpostgresql-88d7b711a01683da6efe76d01c238c0befd18e4b.tar.gz
Remove completed items:
< * -Allow limits on per-db/role connections 43d41 < * -Prevent dropping user that still owns objects, or auto-drop the objects 49d46 < * -Add the client IP address and port to pg_stat_activity < * -Add session start time and last statement time to pg_stat_activity < * -Add a function that returns the start time of the postmaster 230d224 < o -Allow MIN()/MAX() on arrays < o -Modify array literal representation to handle array index lower bound < of other than one 253d244 < * -Add function to return compressed length of TOAST data values < * -Prevent to_char() on interval from returning meaningless values < < For example, to_char('1 month', 'mon') is meaningless. Basically, < most date-related parameters to to_char() are meaningless for < intervals because interval is not anchored to a date. < < * -Have views on temporary tables exist in the temporary namespace < * -Allow temporary views on non-temporary tables 329d311 < * -Add BETWEEN SYMMETRIC/ASYMMETRIC < * -Add E'' escape string marker so eventually ordinary strings can treat < backslashes literally, for portability < < * -Allow additional tables to be specified in DELETE for joins < < UPDATE already allows this (UPDATE...FROM) but we need similar < functionality in DELETE. It's been agreed that the keyword should < be USING, to avoid anything as confusing as DELETE FROM a FROM b. < 341d313 < * -Allow REINDEX to rebuild all database indexes < * -Add an option to automatically use savepoints for each statement in a < multi-statement transaction. < < When enabled, this would allow errors in multi-statement transactions < to be automatically ignored. < 426d391 < o -Allow FOR UPDATE queries to do NOWAIT locks 473d437 < o -Allow COPY to understand \x as a hex byte < o -Allow COPY to optionally include column headings in the first line < o -Allow COPY FROM ... CSV to interpret newlines and carriage < returns in data 525d485 < o -Have SHOW ALL show descriptions for server-side variables < o -Allow PL/PgSQL's RAISE function to take expressions < < Currently only constants are supported. < < o -Change PL/PgSQL to use palloc() instead of malloc() 545d499 < o -Allow PL/pgSQL EXECUTE query_var INTO record_var; 550d503 < o -Pass arrays natively instead of as text between plperl and postgres 598d550 < o -Add dumping and restoring of LOB comments 638d589 < * -Implement shared row locks and use them in RI triggers 642d592 < * -Allow triggers to be disabled < * -Add two-phase commit < < < * -Prevent inherited tables from expanding temporary subtables of other < sessions < * -Use indexes for MIN() and MAX() < < MIN/MAX queries can already be rewritten as SELECT col FROM tab ORDER < BY col {DESC} LIMIT 1. Completing this item involves doing this < transformation automatically. < < * -Use index to restrict rows returned by multi-key index when used with < non-consecutive keys to reduce heap accesses < < For an index on col1,col2,col3, and a WHERE clause of col1 = 5 and < col3 = 9, spin though the index checking for col1 and col3 matches, < rather than just col1; also called skip-scanning. < < * -Fetch heap pages matching index entries in sequential order < < Rather than randomly accessing heap pages based on index entries, mark < heap pages needing access in a bitmap and do the lookups in sequential < order. Another method would be to sort heap ctids matching the index < before accessing the heap rows. < < * -Allow non-bitmap indexes to be combined by creating bitmaps in memory < < This feature allows separate indexes to be ANDed or ORed together. This < is particularly useful for data warehousing applications that need to < query the database in an many permutations. This feature scans an index < and creates an in-memory bitmap, and allows that bitmap to be combined < with other bitmap created in a similar way. The bitmap can either index < all TIDs, or be lossy, meaning it records just page numbers and each < page tuple has to be checked for validity in a separate pass. < < * -Fix incorrect rtree results due to wrong assumptions about "over" < operator semantics 782d694 < o -Add concurrency to GIST 813d724 < * -Allow multiple blocks to be written to WAL with one write() < * -Consider use of open/fcntl(O_DIRECT) to minimize OS caching, < for WAL writes < < O_DIRECT doesn't have the same media write guarantees as fsync, so it < is in addition to the fsync method, not in place of it. < < * -Cache last known per-tuple offsets to speed long tuple access < * -Allow the size of the buffer cache used by temporary objects to be < specified as a GUC variable < < Larger local buffer cache sizes requires more efficient handling of < local cache lookups. < < * -Improve the background writer < < Allow the background writer to more efficiently write dirty buffers < from the end of the LRU cache and use a clock sweep algorithm to < write other dirty buffers to reduced checkpoint I/O < 897d788 < * -Add a warning when the free space map is too small 917d807 < o -Move into the backend code < * -Make locking of shared data structures more fine-grained < < This requires that more locks be acquired but this would reduce lock < contention, improving concurrency. < < * -Improve SMP performance on i386 machines < < i386-based SMP machines can generate excessive context switching < caused by lock failure in high concurrency situations. This may be < caused by CPU cache line invalidation inefficiencies. < 979d857 < o -Add ability to turn off full page writes < * -Eliminate WAL logging for CREATE TABLE AS when not doing WAL archiving < * -Change WAL to use 32-bit CRC, for performance reasons < < * -Use CHECK constraints to influence optimizer decisions < < CHECK constraints contain information about the distribution of values < within the table. This is also useful for implementing subtables where < a tables content is distributed across several subtables. < 1045d913 < * -ANALYZE should record a pg_statistic entry for an all-NULL column 1099d966 < * -Remove kerberos4 from source tree 1103d969 < * -Make src/port/snprintf.c thread-safe 1118d983 < * -Add C code on Unix to copy directories for use in creating new databases 1133d997 < o -Improve dlerror() reporting string
Diffstat (limited to 'doc/src/FAQ/TODO.html')
-rw-r--r--doc/src/FAQ/TODO.html134
1 files changed, 8 insertions, 126 deletions
diff --git a/doc/src/FAQ/TODO.html b/doc/src/FAQ/TODO.html
index 641c33962f..f967937501 100644
--- a/doc/src/FAQ/TODO.html
+++ b/doc/src/FAQ/TODO.html
@@ -8,7 +8,7 @@
<body bgcolor="#FFFFFF" text="#000000" link="#FF0000" vlink="#A00000" alink="#0000FF">
<h1><a name="section_1">PostgreSQL TODO List</a></h1>
<p>Current maintainer: Bruce Momjian (<a href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>)<br/>
-Last updated: Fri Aug 26 14:52:30 EDT 2005
+Last updated: Fri Aug 26 14:59:39 EDT 2005
</p>
<p>The most recent version of this document can be viewed at<br/>
<a href="http://www.postgresql.org/docs/faqs.TODO.html">http://www.postgresql.org/docs/faqs.TODO.html</a>.
@@ -27,7 +27,6 @@ first.
<ul>
<li>%Remove behavior of postmaster -o after making postmaster/postgres
flags unique
- </li><li>-<em>Allow limits on per-db/role connections</em>
</li><li>%Allow pooled connections to list all prepared queries
<p> This would allow an application inheriting a pooled connection to know
the queries prepared in the current session.
@@ -43,12 +42,10 @@ first.
it is unknown whether other problems exist. This item mostly
requires additional testing rather than of writing any new code.
</p>
- </li><li>-<em>Prevent dropping user that still owns objects, or auto-drop the objects</em>
</li><li>%Set proper permissions on non-system schemas during db creation
<p> Currently all schemas are owned by the super-user because they are
copied from the template1 database.
</p>
- </li><li>-<em>Add the client IP address and port to pg_stat_activity</em>
</li><li>Support table partitioning that allows a single table to be stored
in subtables that are partitioned based on the primary key or a WHERE
clause
@@ -144,8 +141,6 @@ first.
a database for analysis.
</p>
</li><li>%Add ability to monitor the use of temporary sort files
- </li><li>-<em>Add session start time and last statement time to pg_stat_activity</em>
- </li><li>-<em>Add a function that returns the start time of the postmaster</em>
</li><li>Allow server logs to be remotely read and removed using SQL commands
</li></ul>
<h1><a name="section_4">Data Types</a></h1>
@@ -212,11 +207,8 @@ first.
</li><li>Arrays
<ul>
<li>Allow NULLs in arrays
- </li><li>-<em>Allow MIN()/MAX() on arrays</em>
</li><li>Delay resolution of array expression's data type so assignment
coercion can be performed on empty array expressions
- </li><li>-<em>Modify array literal representation to handle array index lower bound</em>
- of other than one
</li></ul>
</li><li>Binary Data
<ul>
@@ -233,8 +225,7 @@ first.
<h1><a name="section_5">Functions</a></h1>
<ul>
- <li>-<em>Add function to return compressed length of TOAST data values</em>
- </li><li>Allow INET subnet tests using non-constants to be indexed
+ <li>Allow INET subnet tests using non-constants to be indexed
</li><li>Add transaction_timestamp(), statement_timestamp(), clock_timestamp()
functionality
<p> Current CURRENT_TIMESTAMP returns the start time of the current
@@ -259,11 +250,6 @@ first.
</li><li>to_char(INTERVAL '43 hours 20 minutes', 'WK:DD:HR:MI') =&gt; 0:1:19:20
</li><li>to_char(INTERVAL '3 years 5 months','MM') =&gt; 41
</li></ul>
- </li><li>-<em>Prevent to_char() on interval from returning meaningless values</em>
-<p> For example, to_char('1 month', 'mon') is meaningless. Basically,
- most date-related parameters to to_char() are meaningless for
- intervals because interval is not anchored to a date.
-</p>
</li><li>Add sleep() function, remove from regress.c
</li></ul>
<h1><a name="section_6">Multi-Language Support</a></h1>
@@ -294,24 +280,13 @@ first.
</p>
</li><li>Add the functionality for WITH CHECK OPTION clause of CREATE VIEW
</li><li>Allow NOTIFY in rules involving conditionals
- </li><li>-<em>Have views on temporary tables exist in the temporary namespace</em>
- </li><li>-<em>Allow temporary views on non-temporary tables</em>
</li><li>Allow VIEW/RULE recompilation when the underlying tables change
</li></ul>
<h1><a name="section_8">SQL Commands</a></h1>
<ul>
- <li>-<em>Add BETWEEN SYMMETRIC/ASYMMETRIC</em>
- </li><li>Change LIMIT/OFFSET and FETCH/MOVE to use int8
- </li><li>-<em>Add E'' escape string marker so eventually ordinary strings can treat</em>
- backslashes literally, for portability
- </li><li>-<em>Allow additional tables to be specified in DELETE for joins</em>
-<p> UPDATE already allows this (UPDATE...FROM) but we need similar
- functionality in DELETE. It's been agreed that the keyword should
- be USING, to avoid anything as confusing as DELETE FROM a FROM b.
-</p>
+ <li>Change LIMIT/OFFSET and FETCH/MOVE to use int8
</li><li>Add CORRESPONDING BY to UNION/INTERSECT/EXCEPT
- </li><li>-<em>Allow REINDEX to rebuild all database indexes</em>
</li><li>Add ROLLUP, CUBE, GROUPING SETS options to GROUP BY
</li><li>%Allow SET CONSTRAINTS to be qualified by schema/table name
</li><li>%Allow TRUNCATE ... CASCADE/RESTRICT
@@ -347,11 +322,6 @@ first.
creation
</li><li>%Add COMMENT ON for all cluster global objects (roles, databases
and tablespaces)
- </li><li>-<em>Add an option to automatically use savepoints for each statement in a</em>
- multi-statement transaction.
-<p> When enabled, this would allow errors in multi-statement transactions
- to be automatically ignored.
-</p>
</li><li>%Make row-wise comparisons work per SQL spec
</li><li>Add RESET CONNECTION command to reset all session state
<p> This would include resetting of all variables (RESET ALL), dropping of
@@ -384,7 +354,6 @@ first.
</p>
</li><li>Allow UPDATE tab SET ROW (col, ...) = (...) for updating multiple
columns
- </li><li>-<em>Allow FOR UPDATE queries to do NOWAIT locks</em>
</li></ul>
</li><li>ALTER
<ul>
@@ -425,11 +394,7 @@ first.
<p> This requires the use of a savepoint before each COPY line is
processed, with ROLLBACK on COPY failure.
</p>
- </li><li>-<em>Allow COPY to understand \x as a hex byte</em>
</li><li>%Have COPY return the number of rows loaded/unloaded?
- </li><li>-<em>Allow COPY to optionally include column headings in the first line</em>
- </li><li>-<em>Allow COPY FROM ... CSV to interpret newlines and carriage</em>
- returns in data
</li></ul>
</li><li>GRANT/REVOKE
<ul>
@@ -472,8 +437,7 @@ first.
</li></ul>
</li><li>SHOW/SET
<ul>
- <li>-<em>Have SHOW ALL show descriptions for server-side variables</em>
- </li><li>Add SET PERFORMANCE_TIPS option to suggest INDEX, VACUUM, VACUUM
+ <li>Add SET PERFORMANCE_TIPS option to suggest INDEX, VACUUM, VACUUM
ANALYZE, and CLUSTER
</li><li>Add SET PATH for schemas?
<p> This is basically the same as SET search_path.
@@ -481,21 +445,15 @@ first.
</li></ul>
</li><li>Server-Side Languages
<ul>
- <li>-<em>Allow PL/PgSQL's RAISE function to take expressions</em>
-<p> Currently only constants are supported.
-</p>
- </li><li>-<em>Change PL/PgSQL to use palloc() instead of malloc()</em>
- </li><li>Fix PL/pgSQL RENAME to work on variables other than OLD/NEW
+ <li>Fix PL/pgSQL RENAME to work on variables other than OLD/NEW
</li><li>Allow function parameters to be passed by name,
get_employee_salary(emp_id =&gt; 12345, tax_year =&gt; 2001)
</li><li>Add Oracle-style packages
</li><li>Add table function support to pltcl, plpython
- </li><li>-<em>Allow PL/pgSQL EXECUTE query_var INTO record_var;</em>
</li><li>Add capability to create and call PROCEDURES
</li><li>Allow PL/pgSQL to handle %TYPE arrays, e.g. tab.col%TYPE[<a href="http://momjian.postgresql.org/cgi-bin/pgtodo?"></a>]
</li><li>Allow function argument names to be queries from PL/PgSQL
</li><li>Add MOVE to PL/pgSQL
- </li><li>-<em>Pass arrays natively instead of as text between plperl and postgres</em>
</li><li>Add support for polymorphic arguments and return types to
languages other than PL/PgSQL
</li><li>Add support for OUT and INOUT parameters to languages other
@@ -539,7 +497,6 @@ first.
</li><li>%Add dumping of comments on index columns
</li><li>%Replace crude DELETE FROM method of pg_dumpall --clean for
cleaning of roles with separate DROP commands
- </li><li>-<em>Add dumping and restoring of LOB comments</em>
</li><li>Stop dumping CASCADE on DROP TYPE commands in clean mode
</li><li>%Add full object name to the tag field. eg. for operators we need
'=(integer, integer)', instead of just '='.
@@ -576,11 +533,9 @@ first.
memory. This could exhaust memory for very large trigger queues.
This item involves dumping large queues into files.
</p>
- </li><li>-<em>Implement shared row locks and use them in RI triggers</em>
</li><li>Change foreign key constraint for array -&gt; element to mean element
in array?
</li><li>Allow DEFERRABLE UNIQUE constraints?
- </li><li>-<em>Allow triggers to be disabled</em>
</li><li>Allow triggers to be disabled in only the current session.
<p> This is currently possible by starting a multi-statement transaction,
modifying the system tables, performing the desired SQL, restoring the
@@ -628,7 +583,6 @@ first.
semantics
<p> This can be done using dblink and two-phase commit.
</p>
- </li><li>-<em>Add two-phase commit</em>
</li><li>Add the features of packages
<ul>
<li>Make private objects accessable only to objects in the same schema
@@ -649,39 +603,11 @@ first.
that can span more than one table.
</p>
</li><li>Allow SELECT ... FOR UPDATE on inherited tables
- </li><li>-<em>Prevent inherited tables from expanding temporary subtables of other</em>
- sessions
</li><li>Add UNIQUE capability to non-btree indexes
- </li><li>-<em>Use indexes for MIN() and MAX()</em>
-<p> MIN/MAX queries can already be rewritten as SELECT col FROM tab ORDER
- BY col {DESC} LIMIT 1. Completing this item involves doing this
- transformation automatically.
-</p>
- </li><li>-<em>Use index to restrict rows returned by multi-key index when used with</em>
- non-consecutive keys to reduce heap accesses
-<p> For an index on col1,col2,col3, and a WHERE clause of col1 = 5 and
- col3 = 9, spin though the index checking for col1 and col3 matches,
- rather than just col1; also called skip-scanning.
-</p>
</li><li>Prevent index uniqueness checks when UPDATE does not modify the column
<p> Uniqueness (index) checks are done when updating a column even if the
column is not modified by the UPDATE.
</p>
- </li><li>-<em>Fetch heap pages matching index entries in sequential order</em>
-<p> Rather than randomly accessing heap pages based on index entries, mark
- heap pages needing access in a bitmap and do the lookups in sequential
- order. Another method would be to sort heap ctids matching the index
- before accessing the heap rows.
-</p>
- </li><li>-<em>Allow non-bitmap indexes to be combined by creating bitmaps in memory</em>
-<p> This feature allows separate indexes to be ANDed or ORed together. This
- is particularly useful for data warehousing applications that need to
- query the database in an many permutations. This feature scans an index
- and creates an in-memory bitmap, and allows that bitmap to be combined
- with other bitmap created in a similar way. The bitmap can either index
- all TIDs, or be lossy, meaning it records just page numbers and each
- page tuple has to be checked for validity in a separate pass.
-</p>
</li><li>Allow the creation of on-disk bitmap indexes which can be quickly
combined with other bitmap indexes
<p> Such indexes could be more compact if there are only a few distinct values.
@@ -695,14 +621,11 @@ first.
one column or expression indexes, perhaps using per-index statistics
</li><li>Add fillfactor to control reserved free space during index creation
</li><li>Allow the creation of indexes with mixed ascending/descending specifiers
- </li><li>-<em>Fix incorrect rtree results due to wrong assumptions about "over"</em>
- operator semantics
</li><li>Allow constraint_exclusion to work for UNIONs like it does for
inheritance, and allow it to work for UPDATE and DELETE queries
</li><li>GIST
<ul>
<li>Add more GIST index support for geometric data types
- </li><li>-<em>Add concurrency to GIST</em>
</li><li>Allow GIST indexes to create certain complex index types, like
digital trees (see Aoki)
</li></ul>
@@ -729,7 +652,6 @@ first.
<p> Ideally this requires a separate test program that can be run
at initdb time or optionally later.
</p>
- </li><li>-<em>Allow multiple blocks to be written to WAL with one write()</em>
</li><li>%Add an option to sync() before fsync()'ing checkpoint files
</li><li>Add program to test if fsync has a delay compared to non-fsync
</li></ul>
@@ -743,12 +665,6 @@ first.
backends that also have the file open, and the feature is not supported
on all operating systems.
</p>
- </li><li>-<em>Consider use of open/fcntl(O_DIRECT) to minimize OS caching,</em>
- for WAL writes
-<p> O_DIRECT doesn't have the same media write guarantees as fsync, so it
- is in addition to the fsync method, not in place of it.
-</p>
- </li><li>-<em>Cache last known per-tuple offsets to speed long tuple access</em>
</li><li>Speed up COUNT(*)
<p> We could use a fixed row count and a +/- count to follow MVCC
visibility rules, or a single cached value could be used and
@@ -771,16 +687,6 @@ first.
</li><li>Query execute plan
</li><li>Query results
</li></ul>
- </li><li>-<em>Allow the size of the buffer cache used by temporary objects to be</em>
- specified as a GUC variable
-<p> Larger local buffer cache sizes requires more efficient handling of
- local cache lookups.
-</p>
- </li><li>-<em>Improve the background writer</em>
-<p> Allow the background writer to more efficiently write dirty buffers
- from the end of the LRU cache and use a clock sweep algorithm to
- write other dirty buffers to reduced checkpoint I/O
-</p>
</li><li>Allow sequential scans to take advantage of other concurrent
sequentiqal scans, also called "Synchronised Scanning"
<p> One possible implementation is to start sequential scans from the lowest
@@ -802,7 +708,6 @@ first.
write lock. However, the read lock promotion to write lock could lead
to deadlock situations.
</p>
- </li><li>-<em>Add a warning when the free space map is too small</em>
</li><li>Maintain a map of recently-expired rows
<p> This allows vacuum to target specific pages for possible free space
without requiring a sequential scan.
@@ -818,8 +723,7 @@ first.
</li><li>%Add system view to show free space map contents
</li><li>Auto-vacuum
<ul>
- <li>-<em>Move into the backend code</em>
- </li><li>Use free-space map information to guide refilling
+ <li>Use free-space map information to guide refilling
</li><li>%Issue log message to suggest VACUUM FULL if a table is nearly
empty?
</li><li>Improve xid wraparound detection by recording per-table rather
@@ -829,22 +733,13 @@ first.
<h1><a name="section_17">Locking</a></h1>
<ul>
- <li>-<em>Make locking of shared data structures more fine-grained</em>
-<p> This requires that more locks be acquired but this would reduce lock
- contention, improving concurrency.
-</p>
- </li><li>Add code to detect an SMP machine and handle spinlocks accordingly
+ <li>Add code to detect an SMP machine and handle spinlocks accordingly
from distributted.net, <a href="http://www1.distributed.net/source">http://www1.distributed.net/source</a>,
in client/common/cpucheck.cpp
<p> On SMP machines, it is possible that locks might be released shortly,
while on non-SMP machines, the backend should sleep so the process
holding the lock can complete and release it.
</p>
- </li><li>-<em>Improve SMP performance on i386 machines</em>
-<p> i386-based SMP machines can generate excessive context switching
- caused by lock failure in high concurrency situations. This may be
- caused by CPU cache line invalidation inefficiencies.
-</p>
</li><li>Research use of sched_yield() for spinlock acquisition failure
</li><li>Fix priority ordering of read and write light-weight locks (Neil)
</li></ul>
@@ -874,8 +769,7 @@ first.
eliminated from point-in-time archive files.
</p>
<ul>
- <li>-Add ability to turn off full page writes
- </li><li>When off, write CRC to WAL and check file system blocks
+ <li>When off, write CRC to WAL and check file system blocks
on recovery
<p> If CRC check fails during recovery, remember the page in case
a later CRC for that page properly matches.
@@ -907,8 +801,6 @@ first.
remove the 'fsync' parameter (which results in an an inconsistent
database) in favor of this capability.
</p>
- </li><li>-<em>Eliminate WAL logging for CREATE TABLE AS when not doing WAL archiving</em>
- </li><li>-<em>Change WAL to use 32-bit CRC, for performance reasons</em>
</li></ul>
<h1><a name="section_20">Optimizer / Executor</a></h1>
@@ -925,15 +817,9 @@ first.
</li><li>Create utility to compute accurate random_page_cost value
</li><li>Improve ability to display optimizer analysis using OPTIMIZER_DEBUG
</li><li>Have EXPLAIN ANALYZE highlight poor optimizer estimates
- </li><li>-<em>Use CHECK constraints to influence optimizer decisions</em>
-<p> CHECK constraints contain information about the distribution of values
- within the table. This is also useful for implementing subtables where
- a tables content is distributed across several subtables.
-</p>
</li><li>Consider using hash buckets to do DISTINCT, rather than sorting
<p> This would be beneficial when there are few distinct values.
</p>
- </li><li>-<em>ANALYZE should record a pg_statistic entry for an all-NULL column</em>
</li><li>Log queries where the optimizer row estimates were dramatically
different from the number of rows actually found?
</li><li>Allow constraint_elimination to be automatically performed
@@ -983,11 +869,9 @@ first.
</li><li>%Promote debug_query_string into a server-side function current_query()
</li><li>%Allow the identifier length to be increased via a configure option
</li><li>Remove Win32 rename/unlink looping if unnecessary
- </li><li>-<em>Remove kerberos4 from source tree</em>
</li><li>Allow cross-compiling by generating the zic database on the target system
</li><li>Improve NLS maintenace of libpgport messages linked onto applications
</li><li>Allow ecpg to work with MSVC and BCC
- </li><li>-<em>Make src/port/snprintf.c thread-safe</em>
</li><li>Add xpath_array() to /contrib/xml2 to return results as an array
</li><li>Allow building in directories containing spaces
<p> This is probably not possible because 'gmake' and other compiler tools
@@ -1000,7 +884,6 @@ first.
spaces and then copy the install to a directory with spaces.
</p>
</li><li>Fix sgmltools so PDFs can be generated with bookmarks
- </li><li>-<em>Add C code on Unix to copy directories for use in creating new databases</em>
</li><li>%Clean up compiler warnings (especially with gcc version 4)
</li><li>Win32
<ul>
@@ -1013,7 +896,6 @@ first.
backslashes
</li><li>Re-enable timezone output on log_line_prefix '%t' when a
shorter timezone string is available
- </li><li>-<em>Improve dlerror() reporting string</em>
</li><li>Fix problem with shared memory on the Win32 Terminal Server
</li><li>%Add support for Unicode
<p> To fix this, the data needs to be converted to/from UTF16/UTF8