-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathChangeLog
2839 lines (2745 loc) · 135 KB
/
ChangeLog
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
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
2.0.0 - removed support for mdbtools
updated to use new rudiments collection model
added sqlrresultsettable class
fixed some missing map clears in postgresql protocol module
fixed NULL-bind in the ODBC driver
updated spec file to build python 3 packages on rhel 7
added support for nested substitutions
updated userlist auth modules to support password files
updates aes128 pwdenc module to use sensitivevalue class instead of
its built-in implementation
updated debug logger to not log null/empty info
fixed a subtle bug that could cause closeResultSet()/clearError() not
to be called between reexecutes if the previous execute resulted
in an error
added error translations framework
migrated tds, oracle, and teradata protocols to public distro
(built but not currently installed though)
removed drop-in replacement modules for mysql and postgresql
refactored testing framework so that it doesn't rely on config or
other supporting files being installed on the build host's
filesystem
fixed a potential reference-after-free in the mysql connection module
updated to use acfirstworks.m4 and acrudiments.m4 from rudiments
added acsqlrelay.m4 for other projects to use in their configure scripts
added some configure fixes for older OS X
added some fixes for older PHP
removed authentication timeout methods/functions
added some hacks for older freetds
added column-mapping to the sqlrimport class
added upper/lower/mixed-case of column names to the sqlrimport class
reamed "translation" modules to "querytranslation" modules
updated configure script to support oracle 18c and 19c instantclient
refactored find-oracle-libs-at-runtime logic
added configure tests for python 3.10+
added configure test for ruby 3+
added -fdeclspec configure test for ruby with clang
fixed potential hangs and short-writes when handoff="proxy"
sqlr-stop uses SIGTERM rather than SIGINT to shut down processes now
servers use the rudiments process class shutdown flag framework now to
avoid calling non-async-signal-safe functions from within
signal handlers
mysql connection supports MariaDB 10.6's updated text/blob lengths
ODBC driver can set autocommit prior to connect now
ODBC driver supports SQLGetInfo for some more 3.8.0 options now
ODBC driver returns SUCCES_WITH_INFO if connect succeeds but
afterwards autocommit or select-db fail now
postgresql connection checks ncols and nrows in noRowsToReturn() now
fetchatonce=0 is the default for postgresql now, and single-stepping
is only used if fetchatonce=1
added singlestep directive to override postgresql fetchatonce option
added support for PDO in PHP 8.1
added affected rows to sqlrsh stats
NULL -> 0 in PostgreSQL function tests
added sqlrcrud class
applied patch from Kyle to use HH24 instead of HH in default
fakeinputbindvariablesdateformat string
removed sqlrresultsetdomnode class
de-consted some things
added detection of newer java versions
if connections=0 and maxconnections is unspecified then it defaults
to 5 now
implemented workaround for broken last-insert-id in libmariadbclient 18
added --with-node-gyp-python configure option
pwdenc_crypt -> pwdenc_des
in sqlrimportcsv, calling setIgnoreColumnsWithEmptyNames(true) and
mapColumnName("foo","") causes column "foo" to be ignored now
fixed some subtle bugs in the replay module
fixed issue causing sqlr-connection not to shut down promptly when
waiting for a suspended client to reconnect
configure looks for python-major-dir in addition to python-dir when
looking for dist/site-packages now
added upsert trigger
fixed bind leak in postgresql connection
applied Dmitry Kasyanov's patch for python binary blobs
moved pwdenc-related stuff into libsqlrutil
moved sqlr-pwdenc from server to cmdline
sqlrsh -id can decrypt two-way encrypted passwords now
fixed bug in cistring patterns translation that caused strings to be
lower-cased
added connectstring auth modules
lots of length -> size conversions
renamed various server-side methods to start with verbs
added sqlrexporttable class
moved table/index-translation into controller
improved replay trigger logging
fixed bug that could cause upserts to be confused with multi-inserts
improved trigger framework
improved affected rows framework
added splitmultiinsert trigger
added event methods to sqlrimport
changed SQLREVENT_QUERY to SQLREVENT_QUERY_EXECUTED
changed SQLREVENT_QUERY_RECEIVED and SQLREVENT_QUERY_PREPARED
updated sql logger with queryevent option
refactored sqlrimport/export class heirarchy
refactored module class heirarchy
refactored parser query/metadata tree methods
fixed "show tables" behavior
.spec file creates log/sqlrelay/debug directory now
refactored autocommit and fake transaction blocks
1.9.2 - ruby cursor constructor marks associated ruby connection object now
updated bad-command and no-cursor-available handling in sqlrclient
protocol module
1.9.1 - backports from 2.0.0 branch:
fixed some missing map clears in postgresql protocol module
fixed NULL-bind in the ODBC driver
updated spec file to build python 3 packages on rhel 7
1.9.0 - added missing inequality operators to end-of-bind detection
fixed commit/begin without commitcount error in sqlrimportcsv
fetch errors aren't returned if sqlrclient protocol version < 2
query-intercept catches "begin transaction" now
query-intercept doesn't intercept various begin-type statements if the
query is actually a block of sql containing commit or rollback
added ncharencoding option to odbc connection to enable UTF-16 values
in SQL Server nchars/nvarchars
fixed a bug that caused output binds of length 8000+ to fail on
SQL Server
begin() runs "begin transaction" instead of just "begin" on SQL Server
fixed a column-count reset bug in odbc, db2, informix, and postgresql
that could cause begin queries to fail when fake transaction
blocks are used
object lists have correct column names for mysql, odbc, and jdbc now
fixed a bug that caused rollback to be called insted of commit when
endofsession="commit" and faketransactionblocks=yes are used
commit/rollback is now called at the end of session when
faketransactoinblocks=yes is used, whether or not the server
believes it's in a transaction block, to catch cases where the
begin-interceptor is intentionally bypassed
sqlrimportcsv handles dates without centuries now
fixed crash in replay module when table name is quoted
mysql explain statements work now
fixed node-gyp.js detection on ubuntu 20.04
added configure options for PHP 8.x
added php/pdo module tweaks for PHP 8
mysql and postgresql protocol modules support TLS now
pushed most of tls/gss code up into sqlrprotocol parent class
fixed subtle issues in mysql/postgresql database modules that could
sometimes cause reexecutes of the same query with the same
bind variables to return no results the second time
the configure script specifically looks for liberl_interface.a now
updated nodejs macros for node 14+
fixed subtle bugs in Python getField, getFieldLength, and
getRowLengthsDictionary functions
added GVL management to the Ruby API
applied patch from Igor to fix configure.vbs VC++ version detection
for non-US versions
1.8.0 - unattended tests
added sqlrresultsetdomnode class to c++ client API
fixed datedelimiters parameter
added support for SQLParamOptions with SQLUINTEGER arguments
sqlr-import detects uppercase .CSV suffix now
fixed a csv number-detection but in sqlr-import
fixed a delete[] of a const in sqlr-import
it's possible to specify a commitcount of 0 with sqlr-import now
moved sqlrimportxml/csv classes into libsqlrclient
moved sqlrexportxml/csv classes into libsqlrclient
csv import/export is consistent now
added some event methods to sqlrexport
migrated parsedatetime functions to rudiments datetime class
different postgresql cursors use different stmtNames now
sqlrimportcsv can create a primary key that's not in the CSV now
sqlrexportcsv quotes 12+ digit numbers now
fixed subtle, count-related issues when validating bind variables on
the client side, that could cause a hang
added an aes128 pwdenc module
applied a patch to fix a crash in the debug logger (missing "%s")
added a tweak to getsitearchdir.rb to fix incorrect lib/lib64 reporting
on some centos x64 systems
fixed mysql getColumnList to distinquish proper db/schema
1.7.0 - added postgresql protocol module
updated postgresql connection module to get column info pre-execute
fixed postgresql connection module type oid bug
added tag filter/moduledata
added moduledata(s)::closeResultSet()/endTransaction()/endSession()
mysql protocol returns empty lobs correctly now (not as nulls)
configure replaces -lfbclient with -lgds on freebsd/firebird-2.0.3
fixed a bug that could cause sqlr-stop to try to kill pid 0
fixed unixodbc detection on solaris 11.4
added configure test for PQdescribePrepared
test improvements
documentation improvements
split sqlrelay-crash directive into its own module
deprecated drop-in replacement libraries in favor of protocol support
fixed various mysql 4.x bugs
sqlr-status creates statistics on heap now instead of stack, to work
on platforms with a small default ulimit stack
mysql stored procedure test is bypassed for older mysql
tls test is bypassed for older openssl
1.6.1 - added NULL handoff socket workaround
improved shutdown/crash handlers for sqlr-listener/connection
fixed hang when more-than-one address was specified in the
instance:addresses attribute
*_null used instead of *_unset on PHP 7.4
1.6.0 - added begin, commit, rollback events
fixed array_init() calls for php-7.3
integrated my_bool fix for mysql 8.0.1+
mysql sslmode=require/prefer + bad sslca/sslcapath generates warning
rather than error now (like the mysql cli)
refactored various routines that parse bind variables out of queries
added bindvariabledelimiters config option to define supported bind
variable delimiters
added fakeinputbindvariablesunicodestrings config option
added bind variable delimiters config methods to c++ api
replay trigger can now run a query (eg. "show engine innodb status")
and log the results to a file when a replay condition occurs
replay trigger doesn't log/replay selects by default now (but this is
configurable)
updated normalize translation to support queries containing binary data
fixed a backslash-escape bug in the normalize translation
refactored some sqlrclient api private methods
refactored various bind-manipulation/detection methods
sqlr-listener creates tmpdir now on start, if it doesn't exist
(because this is often in /run, which is often a tmpfs)
postgresql connection module forces re-fetch of column data after
execute now
everything uses charstring::isYes/isNo now, instead of direct
comparisons against "yes" or "no"
fixed subtle sqlexecdirect bug
fixed subtle sqlserver max-varchar bind length bug
fixed various subtle sqlserver bugs where column-info isn't valid until
after execute
odbc connection module sets column precision = column length if
column precision = -1
when using odbc on front and back end, the object type works in
SQLTables now
result set translations work with "show databases/tables/etc." queries
with an ODBC backend now
increased oid buffer sizes in postgresql connection
fixed typemangling->tablemangling typo in postgresql connection -
tablemangling should work without typemangling now
fixed a '...\\''...' parsing bug
non-odbc connection modules now return odbc-compatible(ish) table lists
client info is no longer reset during endSession
fixed a bug that could cause sqlite "show tables like '...'" to crash
fixed odbc unicode null user/password bug
fixed PyString_AsString for python 3.<3
fixed bug that caused some MSSQL lobs to sometimes be returned as
nulls when using ODBC on the backend
fixed bug that caused some MSSQL date fields to get returned as garbage
fixed a few older sqlrclient compatibility bugs
fixed SQLFetch parameter type mismatch in ODBC api
removed a non-c++17-compliant "register" from custom_nw logger
added support for nodejs 12
SQLDriverConnect can take an inline DSN now
fixed odbc maxcolumncount=-1 crash
odbc, db2, and informix set bind format error now
1.5.0 - spec file tweaks
odbc uses different begin tx queries for different db's now
made skipWhitespaceAndComments NULL-safe
mysql_stmt_reset() called when needed now, improves api=stmt performance
added bulk load framework
added bind variable translation framework
fixed countBindVariables to ignore @@'s
odbc passes length to unicode-conversion routine now, when it can
improved conversion of string bind variables to unicode in odbc
odbc gets column info after prepare (before execute) in call cases now
added error handling to translation frameworks
readded conditional mysql_stmt_reset call to recover from
"Commands out of sync" errors
perl dbi driver allows leading delimiters in bind variable names now
fixed bind_inout_param -> bind_param_inout in perldbi docs
added moduledata framework
added sha1 and sha256 auth modules
moved some common protocol module methods into sqlrprotocol
tweaked nodejs api to support node 11
refactored bind variable translation a bit
consolidated bindVariablePrefix and bindFormat
fetching a row can return an error now
included mysql protocol module and auth modules
added per-tx/session memory pools, migrated sqlrtranslations memory
pool to per-session pool
added controller endTransaction() method
added endTransaction/endSession methods to all modules
added a replay trigger
fixed systemctl enable bug
made mapping of 0-scale decimals to longlong's in mysql protocol
optional, and disabled by default
all tx-queries are intercepted now (including autocommit on/off)
fixed mysql varchar type mapping (from char to varstring)
mysql front-end sets in-tx/autocommit status flags now
bytestring::copy() used now when copying queries between buffers
fixed some subtle bind-realated mysql protocol bugs
mysql connection quotes database name when selecting the db now
added fetch-timings
-Wno-error=date-time is used if supported
fixed firebird int64 datatype decimal problem
fixed firebird blob error
1.4.0 - odbc connection module - trace=yes/no/default now instead of just yes/no
pushed detachbeforelogin parameter up to sqlrserverconnection class
updated to use rudiments container clearAndDelete...() methods
fixed nonsensical uint32_t majorversion>=0 comparison in freetds conn
fixed nonsensical uint16_t isnull==-1 comparison in odbc conn
fixed return NULL in method that returns false in router conn
added manual removal of build directory in nodejs clean target
updated nodejs clean target with - in front of node-gyp clean
fleshed out the installing-sqlrelay-from-packages doc
connect string "timeout" -> "connecttimeout" in docs
dbase="mariadb" works now
docs have been updated to acknowledge mariadb
added configure test to disable ODBC on platforms without SQLULEN
updated mysql_config test to add -L/usr/local/lib if it fails, to deal
with libiconv, which is located there, on newer freebsd
updated mysql drop-in test not to test def_length if def is NULL
added NODEGYPPYTHON flag that can be set manually on netbsd
fixed gcj/gcj3/kaffe detection on older systems
fixed some buggy static module declarations/assignments
sqlr-import can import csv files now
sqlr-export correctly escapes double-quotes now
query translations apply to the select-database query now
added api=stmt/classic option to mysql connection module
added a per-cursor bindpool
added unicode=yes/no opiton to odbc connection module
fixed a bug that could cause stale column metadata to a protocol
module between prepare and execute when binds are being faked
added stalecursors logger
added send()/recv() passthrough operations
made various bind-related buffers per-cursor
added pattern option to query notification event
1.3.0 - updated systemd init file to use SIGINT to kill sqlrelay
fixed several "ocurred" -> "occurred" typo's
client debug hides password now
passing -disable-crash-handler to the scaler passes it to connections
spawned by it now
passing -nodetach to the sqlr-scaler or sqlr-listener works now
added get*Timeout methods to the C++ API
various pdo tweaks to make it more consistent with other pdo drivers
added rudiments version an compile date/time to output of --version
exposed timeouts, client info via custom pdo options
timeouts configurable in pdo connect string now
dsn parameters can be overriden (or supplied outright) in the
connect string now
added \r and ; as possible after-variable characters for fake-binds
added -short, -connection-detail, and -query options to sqlr-status
added initial support for queries that return multiple result sets
lots of various odbc connection module improvements
added parse failed event
updated normalize translation to remove spaces around :=
added noop query framework
added "patterns" query translation
added debug="sql"
fixed subtle bug in normalize translation that could cause problems
with empty strings
moved the memorypool used by the sqlrclient protocol module to
allocate memory for bind variables into the
sqlrservercontroller and exposed it to modules
added docs for tls/ssl backend enc/auth
added directives framework and custom_wf directive
pushed connect timeout parameter up
implemented underpinnings for input/output binds
made SQLGetConnectAttr(SQL_AUTOCOMMIT) not return an error
fixed configure bug causing --disable-server to disable the odbc api
configure.vbs sets versions in vdproj files now
fixed some missing code in the documentation
replaced toFloat() calls with toFloatC()
mysql connection module handles /* ... */ comments correctly when
detecting which API (stmt vs. traditional) to use now
added php conf type for netbsd
added freetds parameter to freetds connection module that sets the
FREETDS/FREETDSCONF environment variables
fixed some subtle SQLGetData bugs in ODBC driver
updated sqlrserver API to support getting the column tables
updated odbc, mysql, postgresql, and sqlite connection modules to
return column table names
updated sqlrclient protocol to send/receive it
added result set header translation framework
added getcolumntables option to odbc connection module
ODBC SQLTables switches to the specified catalog before getting the
table list now (and switches back)
fixed ODBC wchar truncation problem
fixed "show columns odbc" bug in mysql connection module
mysql connection module uses MYSQL_FIELD.name_length if it can now
fixed char * -> const char * bug in python API
added support for openjdk-11 to configure script
removed some unnecessary parentheses in mysql drop-in library that
gcc 8.1.1 doesn't like
1.2.0 - fixed subtle error in sqlr-import that could cause it to skip
empty/NULL fields
implemented getCurrentDatabase for odbc connections
implemented selectDatabaseQuery for odbc connections
added NCHAR, NVARCHAR, NTEXT, XML, and DATETIMEOFFSET types, updated
odbc connection module to recognize them
added --with-windows-version to configure.vbs
enabled "liveconnection" test for "Lost connection to MySQL server
during query" error
made server-side string outputBind() method's valuesize 32-bits
added missing mapColumn() call to sqlrservercontroller::getField()
fixed var directories in Windows deployment projects
added run-as-Admin requirement to Windows installer
implemented ODBC SQLProcedures, SQLProcedureColumns, SQLGetTypeInfo,
SQLPrimaryKeys, and SQLStatistics, though currently they only
work when using the odbc connection module
implemented ODBC SQLTables to get schema and table type lists,
though currently only works when using the odbc connection
module
ODBC SQLProcedures, SQLProcedureColumns, SQLColumns, SQLTables,
SQLGetTypeInfo, SQLPrimaryKeys, and SQLStatistics properly set
the error now if there was one
ODBC SQLError properly cycles through the error records now
updated ODBC SQLGetInfo(SQL_DRIVER_ODBC_VER) to return a value
corresponding to the value set by
SQLSetAttrInfo(SQL_ATTR_ODBC_VERSION)
fixed string outputBind() signature in odbc connection module
fixed a couple of short -> int16_t/uint16_t errors in odbc and mysql
connection modules
ODBC SQLBindParameter(in/out) calls outputBind() now, to work with
apps like Delphi which broadly use in/out for out parameters
refactored odbc connection module's methods to get object lists to
support dot-separated object identifiers
various odbc driver improvements
updated odbc driver to interpret SQL_C_(X)LONG types as (u)int32_t's
rather than long's
updated odbc connection module to use SQL_C_SBIGINT/SQL_BIGINT for
integer binds, rather than SQL_C_LONG/SQL_INTEGER
fixed uninitialized null/blob flags in sqlrclientprotocol::returnRow()
various variables are now properly typed (SQLLEN vs. SQLINTEGER) in the
odbc connection module
added "divider on/off" command to sqlrsh
fixed several cases where microseconds were represented by an int16_t
made them all int32_t's
parsing/generation of fractional seconds pays attention to length of
value/format-string now
fixed a bug that caused fractional seconds to be dropped sometimes
odbc lazy-fetches now
odbc driver fakes SQLBindParameter with data-at-exec by deferring the
execute and buffering the data locally now
bumped odbc MAX_COLUMN_COUNT to 384
added a mars=yes/no flag to enable MS SQL Server MARS when using the
odbc driver for MS SQL Server with the odbc connection module
ODBC SQLGetInfo(SQL_USER_NAME) gets the schema from the backend when
used with the odbc connection module now
increased listen backlogs to 128 from 15/5
normalize translation doesn't remove spaces around _'s any more
implemented output bind null indicators properly for db2/informix
odbc connection supports dynamic maxcolumncount/maxfieldlength now
fixed but that caused the results of non-tree-based query translations
to be concatenated
updated odbc connection to fetch blob columns in chunks and not be
bound by maxitembuffersize
fixed a bug that could cause a buffer overrun when using
maxitembuffersize with odbc, db2, and informix
configure script finagles the multiarch dir for platforms where
gcc -print-multiarch doesn't return anything, but the
multiarch dir is necessary to find python3
configure script can find php-7 on openbsd now
node is used to run node-gyp.js now
configure script looks for /etc/php7 now
configure script looks for node-gyp under
/usr/lib*/node_modules/nmp[6789] now
php pdo api uses zend_long in place of ssize_t now
fixed uninitialized ncols in mysql connection module
1.1.0 - updated to use charstring asprintf analogs
fixed uninitialized sendcolumninfo on server-side
fixed a bug in freetds connection that caused error messages to be
concatenated over and over
added missing quote method to pdo driver
fixed a subtle login/ping bug in the router
fixed a memory leak in the sqlrclient protocol module
postgresql connection uses async functions and fetches one row at a
time now, if available
mysql connection checks for valid stmt before resetting it now
removed various unused methods associated with getting a unique
unix socket
added server api methods to get column flags by numeric type
added rudiments version requirement to configure script
added inTransaction() method to sqlrservercontroller to return
true/false indicating whether we're in a transaction or not
pushed processing of various connect-string parameters up to
sqlrserverconnection class
renamed maxselectlistsize and maxitembuffersize to maxcolumncount and
maxfieldlength (old parameter names still work though)
fetch-at-once, max column count, and max field length are now available
via server API
updated sqlrservercursor to provide preallocated and reused field
pointer buffers to protocol modules
refactored fetchRow/getField and pushed reformatRow/Field up into
sqlrservercontroller
fixed systemd/sysvinit detection on ubuntu
added clientinfolist router module
switched from Semantic Versioning to "intuitive versioning":
Given a version number MAJOR.MINOR.PATCH, increment the:
1. MAJOR when you make very significant changes
and set MINOR and PATCH to 0
2. MINOR when you make backwards-incompatible changes
and set PATCH to 0
3. PATCH when you make backwards-compatible changes
client and server libraries have distinct SONAME_VERSION_INFO now
filters can be run before or after translations now
triggers default to "after" if not specified now
fixed bug that could cause begin/commit/rollback to try to send
nonexistent column info sometimes when faketransactionblocks=yes
getters/setters renamed in the server api re.:
fake input binds
commit/rollback needed
intercept tx queries
fake transaction blocks
general refactoring of the fake-autocommit framework
prepare/execute only does lazy prepares if fake-binds are required
now. thus, for databases that support it, column info is
now exposed to protocol modules post-prepare and pre-execute
db connection modules have been updated not to require that the bind
counts are known at prepare-time now
added sslmode, tlsversion, sslcrl, and sslcrlpath options to mysql
connection module connect-string options
router db connection module supports fetchatonce option now
client info is reset at end-of-session now
router framework has been refactored to allow route() to return errors
server-side error buffering has been refactored
added "use database" router module
firebird, mdbtools, sqlite connection modules can report the current
database now
"use database" works with postgreqsl, firebird, mdbtools, and sqlite
configure script can find python3 on ubuntu 16.04 now
configure script can find mariadb on ubuntu 16.04 now
configure script can find openjdk-1.9.0 correctly now
python 3 is preferred to python 2 now
-Wl,--disable-new-dtags is used (if supported) when linking Oracle,
SAP, DB2, and Informix stuff now, so RPATH will be used instead
of RUNPATH
php ini files are automatically installed on freebsd now
--with-mysql-prefix was being ignored, fixed that
the MYSQLLIBSPATH wasn't being extracted from mysql_config, fixed that
1.0.1 - updated sqlr-bench to create "db"-bench.png
added edoc-generated API docs for the Erlang API
updated some module-load error verbage
added initial support for loading Oracle, SAP/Sybase, DB2, and Informix
libraries on-demand at runtime
overhauled spec file
fixed PDO driver for PHP 7 on 32-bit platforms
added permissions to all open() with O_CREAT calls
added --with-fortify configure option
fixed a segfault on ctrl-D in sqlrsh
fixed uncoordinated access to shared debugstr among listener threads
by using local instances instead
added ping-loop to router connection module's logIn() method to manage
cases where routed-to instances are started after the router
moved .../var/sqlrelay/tmp/*/* to .../var/run/sqlrelay
added .sock extension to sockets, .ipc extension to ipc key files,
.pid extension to pid files, and .up extension to files which
indicate that the db is up
changed mode of listener-connection sockets to 700 from 711
moved .../var/sqlrelay/log to .../var/log/sqlrelay
moved .../var/sqlrelay/cache to .../var/cache/sqlrelay
libmysql*sqlrelay.so and libpqsqlrelay.so are no longer installed
replaced sockseq-generated unix socket with pid-based unix socket
updated ruby api to support unification of Fixnum and Bignum classes
into Integer class
added --with-abs-max-connections configure script parameter
increased default absolute max connections to 4096 (from 512)
updated "can't open ... file" errors to mention user/group
added SQLR_MYSQL_MAP_DATE_TO_DATETIME option to mysql drop-in
replacement library
fixed normalize translation not to remove spaces before unary - and !
updated sqlrsh to set error code correctly and write errors to stderr
sqlr-cachemanager is no longer enabled at boot by default
fixed another subtle bug in the ODBC driver that caused the first row
to be duplicated if columns were not bound
added --disable-wall and --disable-werror configure options
1.0.0 - updated md5 pwdenc to use rudiments md5 class
solved a long-standing hang that could occur if the database password
expired while sqlrelay was running, and the sqlr-scaler
attempted to start new connections
added convertcase, convertcasedoublequotes, and removedoublequotes
parameters to normalize translation module
added ColumnCaseName parameter to ODBC driver
fixed a subtle bug in the ODBC driver that caused the first row to be
skipped if columns were not bound
added -backtrace option for debugging
fixed mysql connection module so it can use the statement API on
Windows
fixed semaphore reference-before-init bug in sqlrservercontroller
added support for db, debug, columnnamecase, dontgetcolumninfo,
nullsasnulls, and lazyconnect connect-string options to all
drivers (though in some they are camel-case and others
lower-case)
in DB-abstraction-layer drivers, the debug, dontgetcolumninfo,
nullsasnulls, lazyconnect, krb, and tls connect-string options
now support any yes/no equivalent such as yes, Yes, y, Y, true,
True, 1, (and similar for no)
fixed a regression that could cause crashes in the C#/ADO driver
when binding null or date values
added all parameters to ODBC config screen
removed calls to mysql_stmt_store_result/mysql_stmt_num_rows from
mysql connection to improve performance. mysql connection
doesn't know the total number of rows prior to full fetch
now (which is consistent with most other databases).
updated postgresql connection to use an unnamed cursor instead of
naming it and having to deallocate it over an over
tweaked skipWhitespaceAndComments and related methods to use
charstring::isNullOrEmpty and character::isWhitespace
replaced regular expression comparisons in sap/freetds connections
with simpler charstring comparisons
updated db2 connection to reuse the statement instead of recreating
it with each prepare
made column-lookup by name case sensitive to improve performance
fixed nagle-disable and sizing of socket read/write buffers
changed default maxcursors to 5
fixed an uninitialized variable in the firebird connection
python api's are installed in dist-packages subdirectory on systems
that have that instead of site-packages
added route-entire-session option to router modules
0.67.0 - general documenation clean-up
added missing all: target to man/Makefile
mysql_info in drop-in library for mysql returns NULL instead of "" now
mysql_errno in the drop-in library now returns the error number from the
DB, instead of CR_UNKNOWN_ERROR, if no error map is provided,
and the backend database is known to be mysql
mysql_refresh in the drop-in library works with options other than
REFRESH_GRANT now
mysql_shutdown/kill in the drop-in library return 1 on failure now
rather than 2000
date/time and timestamp types are recognized as binary types now
year/timestamp types are recognized as unsigned types now
TINY/MEDIUM/LONG_TEXT types are recognized as blobs now
mapping date/time to MYSQL_TYPE_DATE/TIME, rather than
MYSQL_TYPE_DATETIME is the default in the drop-in library now
and SQLR_MAP_DATETIME_TO_DATE has been removed
mysql drop-in library sets column flags correctly now
mysql drop-in library runs appropriate kill/shutdown queries now
mysql connection uses non-stmt api for "show *" queries now
mysql drop-in library runs "show processlist" for mysql_list_processes
mysql drop-in library supports date/time/datetime input binds now
instead of just treating them all as datetimes
connection modules differentiate between date/time/datetime binds now
instead of just treating them all as datetimes
added result set row translation module framework
updated firebird connection module to the fieldstruct.textbuffer
instead of fieldbuffer for non-text to text translations
added support for negative times in mysql connection module and
drop-in library
added translation-failure event
general refactoring of server module API
consolidated sqlr-scaler code
fixed a 1-byte empty-blob memory leak in the client
/etc/alternatives/java_sdk is preferred, if found, now
0.66.0 - fixed mysql set isolation level query
updated mysql connection to run commit/rollback at the end of every
session even if only selects were run, to make sure metadata
locks are released
renamed sqlrclientexitstatus_t to clientsessionexitstatus_t
updated all db connection modules to reinit the column count during
prepare rather than execute
fixed bug where server-side errors set by conn/cursor->setError()
could inadverntantly be overriden during the next call to
conn/cursor->errorMessage()
added several more queries to mysql stmt-api blacklist
configure option --disable-odbc-driver actually works now
filters can specify an error string and error number now
added support for systemd
fixed a memory leak by applying and updating a patch from Dmitry
Kasyanov to deallocate the error message in C++ API destructor
legacy_stdio_definitions.lib is now included when building ODBC with
VS2015
added support for PHP7
added -wait option to sqlr-start for non-Windows
disabled -disable-new-window option to sqlr-start for non-Windows
non-ascii character encodings work with the C# API now
rudiments prompt class is used instead of using readline directly now
renamed "logger-events" to just "events"
added notification framework and "events" module
added connection schedule framework and "cron" module
applied sec/usec patch from samchuck at neowiz to custom_nw logger to
fix subtle time calculation error
applied a patch from samchuck at neowiz to the sqlrclient protocol
module to deallocate storage for bind variables after logging
the query to resolve a reference-after-free bug
added router module framework with "regex", "userlist" and
"clientiplist" modules
when router detects a possible integrity violation now, it raises an
event which can be logged or trigger a notification and
disables the instance
router calls begin, commit, and rollback on all connections now, even
if they're executed as queries rather than using the api methods
removed tls_userlist/krb_userlist auth modules and updated the
userlist auth module to support tls and kerberos auth
converted most of the doc source to wikitext
fixed ODBC driver bug that could corrupt memory and trick the driver
manager into thinking that some basic functions are unavailable
ODBC SQLTables works more correctly now
fixed an ODBC bug that caused the first row to be fetched twice when
using SQLBindCol
added /DPERL_IMPLICIT_SYS macro for windows builds of Perl API
0.65.0 - removed erroneous SQLR_SQLExecute export in ODBC driver
fixed call type of internal ODBC driver functions and made them static
fixed --disable-API flags in configure.vbs
fixed bad user/password copy logic in ODBC SQLConnect function
added missing default implementation of
sqlrservercursor::getColumnTypeName()
added parser debug option
normalize translation can convert foreign decimals now
updated missing-tnsnames.ora warning
updated sqlr-start and sqlr-scaler to run programs using fully
qualified path names
fixed query timer in sqlrsh
add timer="query/command" parameter to slowqueries logger
added odbcversion parameter to ODBC connection
updated erlang api to use the C++ compiler to link (for netbsd 7.0)
added major-version check to node.js api for node 4.x+
ODBC driver's SQLGetData can deal with NULL targetvalue now
fixed normalize || bug
fixed normalize bug that removed spaces around * for "all columns"
improperly
removed freetds warning, modern sybase has different library file names
updates to support python3
added several --disable options to the configure script for unix/linux
removed sqlr-fields/sqlr-query and updated sqlrsh to provide the same
functionality
removed antiquated sqlrelay.dtd
moved default example directory to share/sqlrelay/examples
sqlrelay.conf example is installed under example directory now
Python DB -> Python DB-API in the docs
moved private members and support classes into C++ API's .cpp files
removed -revision during link and adopted Semantic Versioning 2.0
added missing get*List methods to Java API
removed errant information_schema views from getTableList with mysql
refactored listenertimeout to use timed semaphore ops and only fall
back to an alarm if the system doesn't support timed sem ops
and the instance isn't configured to use threads
fixed inode-check in logger modules - works correctly with logrotate
change "an error occurred" to "server closed connection" to reduce
false-positives from log analyzers - "real" errors will still
be reported elsewhere
refactored the config file parser
added support for kerberos authentication and encryption
added krb_userlist auth module
renamed "authentication" to "auth" (for authentication/authorization,
also matches module name prefix) in config file and docs
removed an errant flushWriteBuffer after client auth
moved debugprint stuff into rudiments
added support for tls authentication and encryption
added tls_userlist auth module
fixed long-standing copyrefs bug
when calling after-triggers, "success" flag is set correctly now
fixed bug where after-triggers could mask failed queries
added support for "before and after" triggers
moved call to set stdinput to use blocking mode from
rudiments::stdiofiledescriptor to sqlrsh, as doing it in every
case caused problems with apps like Apache, which need
stdin/out/err to be in non-blocking mode sometimes (fixes bug
where PHP's that used the SQL Relay API would cause apache
workers to hang closing connections after a graceful restart)
made auth_database module always re-login
added auth_proxied module to support Oracle's (and potentially other
databases') n-tier/proxied authentication
fixed a long-standing bug where passwords weren't checked when
switching between oracle n-tier authenticated users
0.64 - fixed bug in sqlrsh that caused it to filter out non-ascii characters
added informix connection module
added shutdown loop detection in sqlr-listener
fixed dbhostname/dbipaddress requests
added bind variable format validation to php pdo driver
added softttl parameter
added db/language detection to configure.vbs
added passwordfunction parameter to "sqlrelay" authentication module
added -disable-crash-handler command line option to server processes
postgresql connection module PQclear()'s the result of PQprepare() now,
fixing a memory leak
updated postgresql connection module to handle invalid bind variables
properly, and without crash
added various missing postgresql functions to the postgresql drop-in
library, most notably PQprepare, PQexecPrepared, PQexecParams
simplified sqlrpaths/sqlrcmdline classes a bit
renamed sqlrconfigfile to sqlrconfig
implemented a modular configuration framework
config files can be loaded over protocols supported by libcurl now
or http if rudiments compiled withougt libcurl support
config files can now be "link files" which just refer to other local
config files, local config directories, or remote config files
updated sqlr-start and sqlr-scaler not to pass the default -config
value if sqlr-start wasn't explicitly started with -config
fixed a bug that could cause sqlrsh to act funny if the last character
prior to the command delimiter was a single or double quote
fixed a stacked result-set translation module bug
applied George Carrette's patch to fix potential PDO null-dereferences
0.63.1 - backported shutdown loop detection
0.63 - suppressed ruby configure warning
fixed glib detection if pkg-config isn't present
fixed mono detection on freebsd
fixed node.js yes/no misreport bug in configure script
added freetds tcl test
fixed slashes in tcl tests for windows
updated docs to mention firebird buffer size parameters
updated MAX_ITEM_BUFFER_SIZE to 32768 for firebird
fixed ruby detection on fedora 22
fixed missing export for setAuth/ResponseTimeout in ruby api
added manual include of inttypes.h in php api to work around issue with
define/undef games, revealed on openbsd 5.7
tweaked ruby cflags script for debian 8
refactored mysql detection
tweaked unixodbc detection to also look in /usr/include/odbc
renamed "oracle8" connection plugin to "oracle"
renamed "sybase" connection plugin to "sap"
updated identity tests in api's/cmdline clients to use
charstring::contains() rather than !charstring::compare()
implemented missing destructors for ADO.NET Data Provider
0.62 - added query filter plugin framework
added regex, string and pattern filters
added normalization translation
added reformatdatetime result set translation
fixed error in sqlrconfigfile class that could cause sqlr-start to
crash if one instance defines addresses but the next doesn't
added query status flag to sqlrservercursor
tweaked odbc driver's SQLGetTypeInfo()
field name is passed into runResultSetTranslations() now
added support for maxitembuffersize, maxselectlistsize,
and maxbindcount for firebird
added native api for node.js
added recognition of bigint, ubigint and uniqueidentifier fields in
freetds/sybase
added nullsasnulls command to sqlrsh
added workaround for freetds empty (but non-null) text fields not
getting properly converted to null-terminated empty strings
fetchatonce, maxitembuffersize and maxselectlistsize are set to
defaulting values if invalid values are given for them
added lazyconnect option to PHP PDO and Perl DBI drivers (defaults to 1)
direct Transact SQL which returns a result set is now supported with
Sybase/SAP/MSSQLServer/FreeTDS
added docs for authentication, query translation, query filter and
result set translation modules
added -fPIC to sqlrserver-config --cflags, if supported
the "default" auth module is now called "userlist"
added database auth module that is analagous to authtier="database"
replaced passwordencryption attribute with passwordencryptionid
added --disable-postgresql8-api configure option
tweaked -Werror detection in configure script
refactored sqlr-bench build to work on windows
documentation, examples and tests are now covered by a license
reflecting modern interpretation of the GPL, The license for
The SQLRelay Server (as designated in COPYING) license now
carries an exception, explicitly allowing it to be linked with
various non-GPL compatible libraries
license is installed now
0.61 - skipped
0.60 - fixed true->false transposition in sqlrservercontroller::interceptQuery
that could lead to a reLogIn loop
disabled -Werror for gcc < 2.7
applied George Carrette's patch to fix PDO connectstring options
migrated directory/file paths info into sqlrpaths class
removed undocumented and not-so-relevent-these-days
MAX_CONNECTIONS/overridemaxconnections failsafe in sqlr-start
fixed java header detection for javac located in /usr/bin
updated java api to support non-null-tolerant implementations of
environment::NewStringUTF()
the perl api builds correctly on OSR5 again
the postgresql sslmode is omitted entirely from the connect string now,
if it's disabled, to prevent problems with older versions of
postgresql that don't support the parameter at all
mono 2.8 or greater is required now
added a datedelimiters attribute to the instance tag in sqlrelay.conf
to limit what date delimiters are used when translating dates
re-added mssqlserver detection, which had been accidentally removed
fixed statically-linked build
fixed mysql lob field bug that could cause a crash
added --disable-postgresql8-api configure option to disable
PQprepare/PQexecPrepared and native bind support
0.59 - updated docs, removed some Cygwin-specific info
added support for login warnings
made bind variable buffers dynamic on the client side
added maxbindvars parameter on the server side
binding a NULL to an integer works with db2 now
moved getting started with DB docs into the cloud
added a semaphore to ensure that the listener doesn't hand off the
client to the connection until the connection is ready,
elimiating a race condition on the handoff socket that could
occur if the connection timed out waiting for the listener
just after the listener had decided to use that connection
oracle temp tables that need to be truncated at the end of the session
are truncated with "truncate table xxx" now rather than
"delete from xxx"
oracle temp tables that need to be dropped at the end of the session
are truncated first, rather than the connection re-logging in
an ora-14452 error (basically indicating that a temp table can only be
dropped after being truncated, or if the current session ends)
does not automatically trigger a re-login any more
updated cachemanager to use directory::read() directly instead of
directory::getChildName(index)
added cache and opencache commands to sqlrsh
made cache ttl a 64-bit number
added enabled="yes"/"no" parameter to logger modules
updated odbc connection code to use new/delete and rudiments methods
rather than malloc/free and native calls
retired Ruby DBI driver
fixed command line client crash when using -id "instance" with an
instance that uses authtier="database"
fixed bugs that could make reexecuted db2 selects fail and cause a
database re-login loop
tweaked spec file to remove empty directories on uninstall
fixed typo that could sometimes cause a listener crash
postgresql and mdbtools return error code of 1 rather than 0 for all
errors now
tweaked odbc driver to work with Oracle Heterogenous Agent (dblinks)
fixed bugs related to autocommit with db's that support transaction
blocks
implemented the ODBC driver-manager dialog for windows
updated windows installer to install ODBC registry settings
ODBC driver copies references now
fixed various bugs in sqlrconfigfile that caused sqlr-start with no
-id to crash or behave strangely sometimes
refactored build process to use nmake and be compatible with many
different versions of MS Visual Studio
updated the slow query logger to show the date/time that the query
was executed
consolidated c, c++ and server source/includes down a few levels
implemented column-remapping for get db/table/column commands to
enable different formats for mysql, odbc, etc.
odbc connection correctly returns database/table lists now
added support for maxselectlistsize/maxitembuffersize to MySQL
connection
updated mysql connection to fetch blob columns in chunks and not be
bound by maxitembuffersize
fixed a misspelling in sqlrelay.dtd
swapped order of init directory detection, looking for /etc/init.d
ahead of /etc/rc.d/init.d to resolve conflict with dkms on
SuSE Enterprise
C# api and tests compile and work under Mono on unix/linux now
sqlr-start spawns a new window on Windows now
added global temp table tracking for firebird
added droptemptables parameter for firebird
added globaltemptables parameter for oracle and firebird
updated mysql connection to allow mysql_init to allocate a mysql
struct on platforms that support mysql_init, rather than
using a static struct
fixed subtle noon/midnight-related bugs in date/time translation
updated mysql connection to get affected rows when not using the
statement api
updated mysql connection not to use the statement API on windows,
for now
disabled mysql_change_user, for now
fixed blob-input binds on firebird
0.58 - updated spawn() calls to detach on windows
added support for sqlrelay.conf.d
removed support for undocumented ~/.sqlrelay.conf
fixed detection of oracle jdk 7 and 8 on debian and ubuntu systems
added ini files for PHP and PDO modules
added resultsetbuffersize, dontgetcolumninfo and nullsasnulls connect
string variables to the PHP PDO driver
refactored sqlr-status and removed dependency on libsqlrserver
cleaned up and refactored server-side classes quite a bit
fixed a bug where sqlrsh was losing the timezone when binding dates
server-devel headers are now installed
removed backupschema script
moved triggers, translations, resultsettranslations and parser into
separate project
blobs work when using fake input binds now
replaced sqlr-stop script with a binary (for Windows)
preliminary support for server components on Windows
sessionhandler="thread" is now forced on Windows
added various compile flags for clang's aggressive -Wall
added support for sybase 16.0
removed unnecessary -lsybdb/-lsybdb64 for sybase 15+
fixed PQreset, PQresetStart, PQresetPoll in postgresql drop-in
replacement lib
added debug-to-file support to PHP PDO driver
fixed subtle row-fetch bug in sybase/freetds drivers that could cause
the total row count to be set to garbage
fixed support for older versions of perl (5.00x)
fixed a bug in the DB2 connoutpection that caused blob input binds to be
truncated at the first null
added support for binding streams to output bind blobs in the PHP PDO
driver
updated PHP PDO guide with notes about bind variable formats
integrated Samat Yusupov's dbh driver methods for PHP PDO
added stmt driver methods for suspending/resuming result sets to the
PHP PDO driver
added row cache to mysql drop-in replacement library to fix issues on
systems with 32-bit pointers
fixed subtle db2 output bind bug where a value stored in the database
using fewer than 64-bits might be copied out incorrectly
fixed a bug that could cause key columns to be duplicated when
describing an oracle table and looking up key data is enabled
added sslmode parameter for postgreql connections
perl DBI fetchall_arrayref work with maxrows parameters now
added begin to perl API and implemented begin_work in perl DBI driver
implemented perl DBI get_info
implemented perl DBI RowCacheSize and RowsInCache
Perl DBI driver buffers the entire result set by default now
implemented an ext_SQLR_Debug database handle attribute for perl DBI