perl apis -> CPAN

--------------------------------------------------------------------------------

setting backlog:
	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


Tests:
	stored procedures for mysql-5.0
	adodb using peardb driver
	db2 temp tables
	odbc temp tables
	zope
	tcl
	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

cygwin:
	mysql connection crashes on function call
	how to install as a service?
	languages:
		VB wrapper
		how to build a php extension?
			1) need php source 
		active state python
			http://sebsauvage.net/python/mingw.html
		non-cygwin ruby
			creates funny CFLAGS
		active state perl
			PERL5LIB env var points to Oracle's perl installation
			perl -V:prefix return C:\Perl
		active state tcl
			no doubt will have similar problems...
			-I/cygdrive/Tcl/include
			-L/cygdrive/c/Tcl/lib -ltcl84 -ltclstub84
		zope
			/cygdrive/c/Program Files/Zope-2.7.1/lib/python/Products
	databases:
		sqlite
			.dll and .def file wherever
		msql
			won't build, need older bison
	doc
		installing packages
		optional cygwin components
		running sqlrelay clients
		add path to mysql dll to PATH

Compatibility:
	db2 dead-db/relogin doesn't work, query just hangs when db is down
	implement interbase dead-db/relogin
	support @,: or ? for fake bind variables
	rewrite queries with ?'s or @'s for oracle, rewrite
				queries with ?'s or :'s for
	support libmysqlclient_r
	daemontools
	SCO:
		ruby api won't build
		postgresql won't configure
		php api won't build
	mysql 4.1, 5.0 - bind vars
	postgresql 8 - bind vars
	php 5
	de-support lago
	rename interbase stuff firebird
	db2 start/stop script works, but isn't right, should be able to use
		db2start, db2stop
	figure out how to get the drop-in client compiled into the mysql PHP
		module like the mysql native client is

Documentation:
	snippets from tnsnames.ora can be used as ORACLE_SID
	how to use new features of Tony/Erik's perl dbi patch
	issue with sqlrelay.conf permissions and runasuser="nobody"
	getting started with odbc
	how to use pear db driver with adodb
	getting started docs for MS SQL Server
	getting started docs for odbc
	"how sqlrelay works" with diagrams and animations
	example sqlrelay.conf's for different configurations
	recommended settings for each db, scaling
	performance benchmark charts
	HOWTO for linuxdoc.org
	man pages for everything
	setting tds version wrong in freetds.conf can cause:
		Error:  Attempt to initiate a new SQL Server operation
			with results pending.

Performance/Code Enhancements:
	idle client timeout
	client connect timeout
	store passwords in encrypted form in the config file
	use python distutils to build python
	call endSession() from perl DBD finish method
	sqlrclient classes shouldn't inherit from inet/unixclientsocket,
		rather should have member variables for each
	implement column flags as a bitmap
	persistent cursors - parse query, attach an id to it,
				make it available to other sessions
	client-side persistence/socket handoff daemon
	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
	configurable preallocated buffers on the server side
	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

Security:
	SSL encryption

Packages:
	FreeBSD
	NetBSD
	OpenBSD
	Solaris
	OpenServer
	Unixware/OpenUnix

Features:
	distribute selects to slaves, dml/ddl to master:
		If SQL Relay is running in master/slave mode, then when a
		client connects to the listener, the listener could hand it off
		to 2 sqlr-connections.  The client could keep track of these
		2 sqlr-connections and send non-selects to the master and
		selects to the slave.  The application will need to be aware
		that it's operating in a master/slave environment though, and
		either turn on autocommit or execute commit's manually.

		(Since the client needs to wait for 2 connections, the potential
		for the classic dining philosophers deadlock problem exists
		and will need to be addressed)
		
		To decide which database is the master, the sqlr-listener will
		need to know which connectionid is associated with that
		database.  It will detect if the master has gone down and
		attempt to reconnect.  Potentially, the sqlr-listener could
		listen on a socket for "promote/demote" instructions from other
		software.  If the master has gone down and the sqlr-listener
		receives a "demote master, promote slave" instruction and
		a set of connectionids and act accordingly.  The reverse
		could happen when the master comes back up.

	use PAM if possible as alternative to defining users in sqlrelay.conf
	support stored procedures that return result sets in
		sybase, interbase, db2
	support non-string output binds sybase stored procedures
	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
	sybase/freetds (possibly others) need options for setting chained mode 
		and isolation mode when client connects
	sqlr-import/sqlr-export tools
	support vector binds
	handle output binds in Python-DB, Ruby-DBD
	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
		handle blobs, quads in interbase
		handle timestamps
		handle enum types in mysql
	front end replication
	query filtering
	quotas
	logging
	handle commit/rollback for named transactions
	implement API's that handle errors with exceptions
	better transaction handling for postgresql
	query/fields cmdline tools need a timeout option
	maximum allowed clob bind value length should be configurable
	odbc connection should check the odbc definition
		for connect string arguments - SQLBrowseConnect
	solaris init script
	api needs to expose integer column types
	numeric output bind variables
	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.
	need a "relay ping" method that tries to connect to the SQL Relay
		server and returns true/false if that was possible or not

Availability:
	connections should ping database server every so often to make sure
		it's up, if it's not, relogin
	master, fallback databases, where connection only goes to the fallback
		if the master is overloaded or down
	statistics, stat monitoring interface
	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
	qpopper port
	bugzilla port

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
	PHP5 Creole driver
		

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

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