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
|