File: TODO

package info (click to toggle)
sqlrelay 1%3A0.39.4-6
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 14,684 kB
  • ctags: 7,058
  • sloc: cpp: 50,586; sh: 9,064; python: 8,861; ansic: 8,433; php: 8,054; java: 7,935; perl: 7,617; ruby: 7,332; tcl: 4,501; makefile: 3,492
file content (285 lines) | stat: -rw-r--r-- 9,398 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
some versions of unixodbc don't support SQLConnectW or SQLPrepareW,
		use non-unicode for them

some versions of Postgres don't have PQServerVersion,
			maybe can use PQconninfoOption?

Tests:
	php pear db bind formats
	db2 temp tables
	odbc temp tables
	zope
	odbc tests
	mysql_stmt calls in drop-in library
	better pythondb/rubydbi tests
	test init scripts
	test send query w/length
	test upper/lower/mixed column case methods
	need database reconnect tests
	column flags
	getFieldAsXXX
	getOutputBindAsXXX
	Java "getXXXAsByteArray" methods
	check blob/lobs with binary data in them
	perl dbi driver
		execute_array
		bind_param_array
		selectall_arrayref with attr/binds
		selectall_hashref with attr/binds
		selectcol_arrayref with attr/binds
		selectrow_array with attr/binds
		selectrow_arrayref with attr/binds
		selectrow_hashref with attr/binds
		prepare_cached
		fetchall_arrayref with slice
		quote
		err
		errstr
		state
		begin_work
		available_drivers
		data_sources
	oldmysql test files for non-C++ api's

Documentation:
	* timequeries parameter
	* how to use new features of Tony/Erik's perl dbi patch
	* getting started with odbc
	* "how sqlrelay works" with diagrams and animations
	* example sqlrelay.conf's for different configurations
	* performance benchmark charts

Performance/Code Enhancements:
	* db2 first query fails and forces relogin unless detached first
		which causes problems if reloginatstart is not set
		using tcp connections fixes this but is slower
	* Don't fork listener children, use listen() backlog instead
		linux:
			looks like max is 128 on linux 2.0
			2.2/2.4 - /proc/sys/net/ipv4/tcp_max_syn_backlog
				Default is 1024 for systems with more than 128Mb
				of memory, and 128 for low memory machines.
				If you make it greater than 1024, change
				TCP_SYNQ_HSIZE in include/net/tcp.h to keep
				TCP_SYNQ_HSIZE*16<=tcp_max_syn_backlog
				and recompile kernel.
			syn cookies - no max backlog
		solaris:
			/usr/sbin/ndd -set /dev/tcp tcp_conn_req_max 32
	* perl apis -> CPAN
	* if a client connects and the forked listener ends up waiting for a
		connection and the client disconnects, the forked listener has
		no way of knowing that the client has disconnected and can't
		bail
	* semop's can return ENOSPC if the undo list is full which is unhandled
		and causes deadlocks in the sqlr-listeners.  If we get an
		ENOSPC, then we need to send the client an error and the
		sqlr-listener needs to exit.
	* Need to find a way to make connections bleed off.
		If connections=100 and maxconnections=200 and there are
		consistently 150 clients, then the # of connections needs to
		bleed back down to 150 eventually.  Currently, if a spike
		causes it to jump up to 200, then almost all 200 will end up
		staying alive.
	* Need to find a way to re-distribute connections.
		If 2 db's go down and 2nd comes back up first, all log into 2nd
		db and never log out and back into first
	* query router "do something"'s
	* reset autocommit state when new client logs into sqlrelay
	* NLS_LANG-like issues with other db's?
	* client connect timeout
	* store passwords in encrypted form in the config file
	* call endSession() from perl DBD finish method
	* implement column flags as a bitmap
	* persistent cursors - parse query, attach an id to it,
				make it available to other sessions
	* connection daemons could put buffers in shared memory and
		clients could send queries, access buffers using 
		shared memory and semaphores instead of unix sockets
	* api methods to use preallocated buffers for result sets
	* api methods for configuring optimistic buffer sizes
	* result set compression during transmission for distant relays
	* server side result set caching
	* support batch DML in oracle8
	* for databases that can return non-strings in their result sets, 
		send non strings to client
	* seperate modules into standalone builds
	* should be a single sqlr-connection daemon that dlopens the
		appropriate database module 
	* login errors should be printed on the screen by sqlrconnection class,
		not by individual connections
	* api for running queries in the background
		(asynchronous queries w/timeouts)
	* use async queries by default, even if the client runs a synchronous
		query, so the query can be cancelled if the client disconnects
	* support freetds/sybase ct_con_prop/encryption
	* use bandwidth delay product to set tcp send/receive buffer sizes
	* get sid working, document
		how to:
			create db
			create user
			mysql -usiddb -psiddb siddb < siddb
			set up sqlrelay instance to talk to it
			set up another instance to use siddb instance for sid
			populate siddb
			sidparameters:
				sparam=INGRESS - perform ingress filtering
					EGRESS - perform egress filtering
					LISTEN - ???
					VERIFICATION - don't send queries to db
					PREVENTION - send queries to db if ok
				svalue=1/0

			sidingressblist - ingress blacklist
				sql_state - queries to reject
			sidingresswlist - ingress whitelist
				sql_state - queries to accept,
						overrides blacklist
			sidingressldb - ingress learning database
				parsed_sql - ???

			sidegressblist - egress blacklist
				sql_state - "parsed results" to reject
			sidegresswlist - egress whitelist
				sql_state - "parsed results" to accept
						overrides blacklist
			sidegressldb - egress learning database
				parsed_sql - ???

		what are "parsed results" - something to do with column names...

			sidlog - every query is logged here with a message
					about it

Security:
	* SSL encryption, key-based authentication

Features:
	* daemontools compatibility
	* figure out how to get the drop-in client compiled into the mysql PHP
		module like the mysql native client is
	* query router support accessing different db's by specifying a
		different user/password
	* query router support accessing different db's by specifying which
		db to use
	* make fetch buffer sizes run-time configurable for db2 and sybase
	* add "quoting method" call to api, call mysql native function,
		(mysql_escape_string()/mysql_real_escape_string())
	* not sure about other db's
	* hack on postgresql's ecpg to emit SQL Relay code rather than
		Postgresql code
	* sqlite binds, sqlite utf-8/utf-16 functions
	* pythondb output bind variables?
	* zope bind variables?
	* 2-phase commit, use it in query router
	* use PAM if possible as alternative to defining users in sqlrelay.conf
	* support stored procedures that return result sets in interbase, db2
	* could debug logs be logrotate compatible?
	* postgresql drop-in api lacks many features
	* postgresql drop-in needs to parse out ; delimited queries for db's
		that don't support that, execute them seperately
	* mysql drop-in api lacks a few features, stmt functions need
		to be updated
	* sybase/freetds (possibly others) need options for setting chained
		mode and isolation mode when client connects
	* datatype support:
		handle binary data correctly in all databases
		identical long/lob datatype support in all databases
		more advanced long/lob datatype support
		support for array datatypes (oracle collections)
		handle blobs, quads in interbase
		handle timestamps
		handle enum types in mysql
	* front end replication
	* quotas
	* logging
	* handle commit/rollback for named transactions
	* implement API's that handle errors with exceptions
	* better transaction handling for postgresql
	* odbc connection should check the odbc definition
		for connect string arguments - SQLBrowseConnect
	* solaris init script
	* api needs to expose integer column types
	* call dontGetColumnInfo() when doing fetchrow_array calls in DBD driver
	* Some databases (like postgresql) are in auto-commit mode unless you
		manually begin a transaction.  SQL Relay calls commit/rollback
		at the end of a client session, even if the database is in
		auto-commit mode.  For postgresql at least, this is expensive.
		It should only call commit/rollback if the database isn't in
		auto-commit mode.
	* date object binds
	* DML/DDL caching - if db is down, accept queries and run them when the
		db comes back up

Availability:
	connections should ping database server every so often to make sure
		it's up, if it's not, relogin
	failover - master, fallback databases, where connection only goes to
		the fallback if the master is overloaded or down
	if a connection dies mysteriously, a new one should fire up

backends:
	pam_sqlrelay
	mod_auth_sqlrelay for apache
	samba auth module
	bind 9.1 backend
	dhcp backend
	qmail backend
	dbmail backend
	qpopper port
	bugzilla port
	litesql
	dovecot
	courier
	exim
	freeradius

API's:
	JDBC
	ODBC
	QT3
	C# - have a driver, just need to incorporate it
		look at npgsql for .net data provider example
	ADA
	Eiffel
	gnome-db
	D
	dbstep
	ADODB driver
	Ruby-on-rails adapter
	PHP MDB2 driver
	PHP PDO driver  http://wiki.cc/php/PDO
	PHP5 Creole driver

Drop-in replacement libraries:
	Oracle OCI7/8
	Sybase-ct
	Interbase

Native DB Support:
	Informix
	SAP DB
	LocalSQL
	kekedb
	ThinkSQL
	picosql
	shsql
	does clip provide an odbc driver for accessing x-base files?
	daffodildb/one$db
	LK bin DB - http://www.lksoft.cjb.net/en/
	Cache - http://intersystems.com
	Frontbase
	J-stels - stelsdbf, stelscsv (http://www.csv-jdbc.com/)
	intersystems cache db
	yard-sql
	monetdb
	valentina-db

Config Tools:
	gtk2
	QT
	curses
	need keyboard shortcuts
	size should be less than 640x480
	connectstring editor
	wizard