1To Do List
2==========
3
4This list is ordered top-to-bottom by priority.
5Things that are broken and need mending are at the top,
6followed by things that should work before the next release,
7followed by features that should be added/fixed/reworked (grouped by library).
8
9Everyone is encouraged to add to the list.  Developers can do it directly;
10anyone else can post a patch to SourceForge.
11In this way we can communicate with each
12other about the project's priorities and needs.
13
14Must be fixed:
15====
16
17* ctlib parameters, handle all case even in tds7
18  * handle and test prepared query
19    (? and @ syntax should be supported)
20* cancellation
21  * ctlib seems to hang reading row while in IDLE state
22    (tds_peek if not in pending state hang... update)
23    Applied but could not test fix from ML 21 May 2008:
24    	"Problem with FreeTDS validating SQL commands
25         (actually a ct_cancel() error)"
26    I don't know if this is still true. Upper libraries
27    should not use tds_peek as it does handle cancellation.
28
29Work in progress:
30====
31
32* be able to disable iconv for BCP (see Sybase documentation)
33  I have a patch to disable it, how to handle NVARCHAR? -- freddy77
34* BCP under ODBC. There is an experimental patch trying to
35  implement it.
36
37For future versions (in priority order within library):
38
39All
40----
41
42* Cache protocol discovery (TDSVER=0.0). Save port/instance into some permanent storage.
43  tsql should report progress in verbose mode.
44* retain values used from freetds.conf, so we can report them.
45* add a way for tsql to report host, port, and TDS version for
46  the connection it's attempting.
47  Actually libTDS does the name resolution in tds_connect and then
48  just connect so there is no way for tsql to report these information.
49* move error message macro/prototype to tds.h.in; use in dblib.c.
50* conversion from ucs2 to utf8, provide for 2+ bytes/character
51* change numeric format to improve performance ??
52  * little/big endian based on platform
53  * already packet at word
54  * correctly aligned to read directly packetized
55* limit copy of data (now wire -> tds -> temp -> client)
56  use a method like zero-copy
57  In token.c getting row should write data even to client
58  (callback, new user types, see ctlib conversion functions)
59  In query.c writing data do the same (use additional column fields?)
60  Situation is much improved in 0.95 version.
61  In ODBC is much better as wire -> tds are never performed and
62  convert extension to give client buffer is used if possible so
63  to avoid the temp step.
64* review the way parameters are packed
65  (too complicate, see ctlib bulk, cf "bulk copy and row buffer")
66* improve cursor support on dblib and ctlib
67* read on partial packet, do not wait entire one
68* detect if realloc accepts NULL pointers (in configure.ac)
69* support for password longer than 30 characters under Sybase
70  (anybody know how ??)
71* under Sybase using prepared statements and BLOBs we shouldn't try to
72  prepare every time (cache failure preparing, see odbc unittests logs,
73  binary_test)
74  done in ODBC ??
75* Native bcp has no iconv support; character bcp files are assumed be encoded
76  with the client's charset.  More flexibility one both sides would be good.
77* date/time on Sybase (from 12.5)
78* encrypted connection for Sybase
79
80db-lib
81----
82
83* add DBTEXTLIMIT (dbsetopt), PHP require it to support textlimit ini value
84
85ct-lib
86----
87
88* dynamic placeholders (DBD::Sybase)
89* ct_option() calls (CS_OPT_ROWCOUNT, CS_OPT_TEXTSIZE, among others)
90* async function, async calls (dbpoll() and friends)
91* support all type of bind in ct_bind (CS_VARBINARY_TYPE and other)
92  search "site:.sybase.com CS_VARBINARY ct_bind" on google for more info
93* complete sqlstate and other field in message (for Python)
94
95odbc
96----
97
98* SQLDescribeParam (Sybase seems to require it)
99  A 100% success for DBD::ODBC require this.
100  Require parsing of the string to extract placeholders ("?") type,
101  something like "INSERT INTO test_table(field_a) VALUES(?)" ->
102  "SELECT field_a FROM test_table(NOLOCK) WHERE 0=1"
103* Star Office complains that these TypeInfo constants are not implemented in SQLGetInfo:
104	47      SQL_USER_NAME
105  (handle environment callbacks)
106  do a "SELECT USER_NAME()". If data pending MS do another connection with
107  same login.
108* SQLNativeSql and fill SQLGetInfo according (mssql7+ handle odbc escapes
109  directly)
110* it seems that if statement it's wrong and we issue SQLPrepare on SQLExecute
111  it try to send unprepared dynamic... state on dynamic??
112* odbc array binding
113  test large field (like image) have language queries some limits?
114  do we have to split large multiple queries?
115* report error just before returning SQL_ERROR from inner function?
116* handle async flags ??
117* handle no termination on odbc_set_string*
118
119Test and fix
120----
121
122* hidden fields (FOR BROWSE select, see flag test on tds)
123 * what happen if we bind to an hidden field??
124 * if we use SQLGetData??
125 * if we request informations with SQLDescribeCol/SQLColAttribute(s)/
126   SQLGetDescField??
127 * as you noted returning # columns hidden fields are not counted (there
128   is however a setting which is a mssql extension which threat hidden
129   columns as normal)
130 (cfr "SQLNumResultCols() is wrong (+1)" Jan 8 2008)
131* test: descriptors work
132  * what happen to SQL_DESC_DATETIME_INTERVAL_CODE and SQL_DESC_CONCISE_TYPE
133    changing only SQL_DESC_TYPE (with SQLSetDescField)
134* test: set SQL_C_DEFAULT and call SQLFetch (numeric, others)
135* test: SQLGetStmtAttr(SQL_ATTR_ROW_NUMBER)
136  * all binded parameters
137  * no bind and sqlgetdata
138  * before first fetch
139  * after last fetch
140
141
142pool
143----
144
145* get connection pooling working with all protocol versions
146* Make pool configuration a non-recompile process
147
148server
149----
150
151* Server API needs more work. It's in a quite ugly state.
152  It's more experimental. Should be disabled by default to state it.
153