forked from mysql/mysql-connector-j
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGES
5232 lines (3640 loc) · 230 KB
/
CHANGES
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
# Changelog
# $Id$
06-30-15 - Version 5.1.36
- Add test for new syntax 'ALTER TABLE ... DISCARD|IMPORT PARTITION ...' introduced in MySQL 5.7.4.
- Fix for Bug#20727196, GETPROCEDURECOLUMNS() RETURNS EXCEPTION FOR FUNCTION WHICH RETURNS ENUM/SET TYPE.
- Fix for Bug#19803348, GETPROCEDURES() RETURNS INCORRECT OUTPUT WHEN USEINFORMATIONSCHEMA=FALSE.
- Fix for Bug#21215151, DATABASEMETADATA.GETCATALOGS() FAILS TO SORT RESULTS.
- Fix for Bug#72630 (18758686), NullPointerException during handshake in some situations
- Fix for Bug#20825727, CONNECT FAILURE WHEN TRY TO CONNECT SHA USER WITH DIFFERENT CHARSET.
- Flag RowDataDynamic.isInterrupted removed as it isn't needed.
- Fix for Bug#20518653, XSL FILES IN PACKAGES
- Fix for Bug#20804635, GETTIME() AND GETDATE() FUNCTIONS FAILS WHEN FRACTIONAL PART EXISTS
- Fix for Bug#62452 (16444069), NPE thrown in JDBC4MySQLPooledException when statement is closed.
- Fix for BUG#70927 (17810800), Connector/J COM_CHANGE_USER handling is broken
- Fix for Bug#75335 (20283655), Maven artifact for Connector/J is missing source jar.
- Fix for BUG#75592 (20408891), "SHOW VARIABLES WHERE" is expensive.
- Fix for Bug#75113 (20821888), Fail in failover of the connection in MySQL fabric
- Fix for Bug#72077 (18425861), Fabric connection with username to a server with disabled auth throws NPE
- Add test for already fixed Bug#72546 (18719760), C/J Fabric createGroup() throws ClassCastException
- Fix for Bug#77217 (21184949), ClassCastException when executing a streaming PreparedStatement with Fabric
03-23-15 - Version 5.1.35
- Fix for Bug#19536760, GETSTRING() CALL AFTER RS.RELATIVE() RETURNS NULLPOINTEREXCEPTION
- Fix for BUG#20453712, CLOB.SETSTRING() WITH VALID INPUT RETURNS EXCEPTION
- Fix for BUG#20453671, CLOB.POSITION() API CALL WITH CLOB INPUT RETURNS EXCEPTION
- Fix for Bug#20685022, SSL CONNECTION TO MYSQL 5.7.6 COMMUNITY SERVER FAILS.
- Fix for Bug#20606107, TEST FAILURES WHEN RUNNING AGAINST 5.7.6 SERVER VERSION
- Fix for Bug#20533907, BUG#20204783 FIX EXPOSES WRONG BEAHAVIORS IN FAILOVER CONNECTIONS.
This fix is a refactoring of the default failover feature which is no longer attached to load-balancing support.
- Fix for Bug#20504139, GETFUNCTIONCOLUMNS() AND GETPROCEDURECOLUMNS() RETURNS ERROR FOR VALID INPUTS.
- Expose PreparedStatment.ParseInfo for external usage, with no capture of the connection, which allows for global, highly-concurrent parse caches to be
implemented.
- Fix for Bug#75309 (20272931), mysql connector/J driver in streaming mode will in the blocking state.
- New property 'readOnlyPropagatesToServer' controls the implicit propagation of read only transaction access mode to server.
- Fix for Bug#54095 (11761585), Unnecessary call in newSetTimestampInternal.
Test case only. The bug was fixed as a consequence of the patch for Bug#71084.
- Fix for Bug#67760 (15936413), Deadlock when concurrently executing prepared statements with Timestamp objects.
- Fix for Bug#71084 (18028319), Wrong java.sql.Date stored if client and server time zones differ.
Two connection properties added, "noTimezoneConversionForDateType" and "cacheDefaultTimezone", to define if and how time zone conversions are available to
DATE data type values.
- Fix for Bug#75080 (20217686), NullPointerException during setTimestamp on Fabric connection.
- Fix for Bug#75168 (20204783), loadBalanceExceptionChecker interface cannot work using JDBC4/JDK7.
- Fix for Bug#73595 (19465516), Replace usage of StringBuffer in JDBC driver.
- Fix for Bug#18925727, SQL INJECTION IN MYSQL JDBC DRIVER.
- Fix for Bug#74998 (20112694), readRemainingMultiPackets not computed correctly for rows larger than 16 MB.
11-03-14 - Version 5.1.34
- Fix for Bug#73012 (19219158), Precedence between timezone options is unclear.
- Implement support for connecting through SOCKS proxies (WL#8105). Connection properties supporting this are socksProxyHost, socksProxyPort.
- Ant buildfile reworked to fix incompatibilities with latest Eclipse, to remove dependency from ant-contrib and to improve structure and documentation.
- Fix for Bug#18474141, TESTSUITE.FABRIC TEST CASES FAIL IF NO FABRIC.TESTSUITE PROPERTIES PROVIDED
- Fix for Bug#19383371, CONNECT USING MYSQL_OLD_PASSWORD USER FAILS WHEN PWD IS BLANK
09-29-14 - Version 5.1.33
- Fix for Bug#17441747, C/J DOESN'T SUPPORT XA RECOVER OUTPUT FORMAT CHANGED IN MYSQL 5.7.
Test case was disabled for affected server versions 5.7.0 - 5.7.4.
- Fix for Bug#19145408, Error messages may not be interpreted according to the proper character set
- Fix for Bug#19505524, UNIT TEST SUITE DOES NOT CONSIDER ALL THE PARAMETERS PASSED TO BUILD.XML.
- Fix for Bug#73474 (19365473), Invalid empty line in MANIFEST.MF
- Fix for Bug#70436 (17527948), Incorrect mapping of windows timezone to Olson timezone.
TimeZone mappings were revised in order to use latest data from IANA Time Zone Database and Unicode CLDR.
- Fix for Bug73163 (19171665), IndexOutOfBoundsException thrown preparing statement.
Regression test added. Fix was included in patch from 5.1.32: "Fix for failing tests when running test suite with Java 6+".
- Added support for gb18030 character set
- Fix for Bug#73663 (19479242), utf8mb4 does not work for connector/j >=5.1.13
- Fix for Bug#73594 (19450418), ClassCastException in MysqlXADataSource if pinGlobalTxToPhysicalConnection=true
- Fix for Bug#19354014, changeUser() call results in "packets out of order" error when useCompression=true.
- Fix for Bug#73577 (19443777), CHANGEUSER() CALL WITH USECOMPRESSION=TRUE COULD LEAD TO IO FREEZE
- Fix for Bug#19172037, TEST FAILURES WHEN RUNNING AGAINST 5.6.20 SERVER VERSION
08-04-14 - Version 5.1.32
- Fix for Bug#71923 (18344403), Incorrect generated keys if ON DUPLICATE KEY UPDATE not exact.
Additionally several methods in StringUtils were fixed/upgraded.
- Fix for Bug#72502 (18691866), NullPointerException in isInterfaceJdbc() when using DynaTrace
- Fix for Bug#72890 (18970520), Java jdbc driver returns incorrect return code when it's part of XA transaction.
- Fabric client now supports Fabric 1.5. Older versions are no longer supported.
- Fix for Bug#71672 (18232840), Every SQL statement is checked if it contains "ON DUPLICATE KEY UPDATE" or not.
Thanks to Andrej Golovnin for his contribution.
- Fix for Bug#73070 (19034681), Preparing a stored procedure call with Fabric results in an exception
- Fix for Bug#73053 (19022745), Endless loop in MysqlIO.clearInputStream due to Linux kernel bug.
In the source of this issue is a Linux kernel bug described in the patch "tcp: fix FIONREAD/SIOCINQ"
(https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=a3374c4).
- Fix for Bug#18869381, CHANGEUSER() FOR SHA USER RESULTS IN NULLPOINTEREXCEPTION
- Fix for Bug#62577 (16722757), XA connection fails with ClassCastException
- Fix for Bug#18852587, CONNECT WITH A USER CREATED USING SHA256_PASSWORD PLUGIN FAILS WHEN PWD IS BLANK
- Fix for Bug#18852682, TEST TESTSHA256PASSWORDPLUGIN FAILS WHEN EXECUTE AGAINST COMMERCIAL SERVER
- Fix for failing tests when running test suite with Java 6+.
Includes fix for Bug#35829 (11748301), build.xml check for java6 should use or instead of and.
- Charset mappings refactored.
- Fix for Bug#72712 (18836319), No way to configure Connector JDBC to not do extra queries on connection
06-09-14 - Version 5.1.31
- Fix for Bug#66947 (16004987), Calling ServerPreparedStatement.close() twice corrupts cached statements.
- Fix for Bug#61213 (18009254), ON DUPLICATE KEY UPDATE breaks generated key list when extended INSERT is used
- Test cases updated to comply with MySQL 5.7.4 new STRICT_MODE behavior and no longer supported IGNORE clause in
ALTER TABLE statement.
- Added support for sha256_password authentication with RSA encryption.
- Fix for Bug#71753 (18260918), Bad SSL socket transform.
- Added tests for changes in GET DIAGNOSTIC syntax introduced in MySQL 5.7.0.
- Fix for Bug#67803 (16708231), XA commands sent twice to MySQL server.
Thanks to Andrej Golovnin for his contribution.
- Fix for Bug#55680 (16737192), MySQL Connector/J memory leak
- Fix for Bug#72326 (18598665), Typo in fullDebug.properties - gatherPerMetrics should be gatherPerfMetrics
- Fix for Bug#72023 (18403456), Avoid byte array creation in MysqlIO#unpackBinaryResultSetRow.
Thanks to Andrej Golovnin for his contribution.
- Fix for Bug#72000 (18402873), java.lang.ArrayIndexOutOfBoundsException on java.sql.ResultSet.getInt(String).
- Fix for Bug#71850 (18318197), init() is called twice on exception interceptors
- Fix for Bug#72008 (18389973), Avoid useless object creation in StringUtils#getBytes-methods.
Thanks to Andrej Golovnin for his contribution.
- Fix for Bug#72006 (18403199), Avoid creation of a character array in PreparedStatement$ParseInfo.
Thanks to Andrej Golovnin for his contribution.
Additionally, unneeded StringBuffer replaced by StringBuilder instances in StringUtils.
- Fix for Bug#72301 (18549472), Fabric driver swallows exceptions thrown during connection creation using JDBC4
03-28-14 - Version 5.1.30
- Fix for Bug#71679 (18236388), Avoid iterator creation when invoking statement interceptors in MysqlIO.
Thanks to Andrej Golovnin for his contribution.
- Fix for Bug#70944 (17831255), community and commercial builds should have the same line number tables
- Fix for Bug#71861 (18327245), Avoid manual array copy in MysqlIO and LoadBalancingConnectionProxy.
Thanks to Andrej Golovnin for his contribution.
- Fix for Bug#71623 (18228668), Field#getStringFromBytes() creates useless byte array when using JVM converter.
Thanks to Andrej Golovnin for his contribution.
- Fix for Bug#71621 (18228302), MysqlXAConnection#xidToString(Xid xid) produces too much garbage.
Thanks to Andrej Golovnin for his contribution.
- Fix for Bug#67318 (16722637), SQLException thrown on already closed ResultSet. Thanks to Thomas Manville and Andrej Golovnin for their contribution.
- Fix for Bug#71396 (18110320), setMaxRows (SQL_SELECT_LIMIT) from one query used in later queries (sometimes).
Additionally, SQL_SELECT_LIMIT is no longer sent unnecessarily between consecutive queries.
- Fix for Bug#71432 (18107621), Key store files not closed when making SSL connection
- Reserved words lists updated from latest official SQL:92 and SQL:2003 specifications.
- Fix for Bug#18091639, STRINGINDEXOUTOFBOUNDSEXCEPTION IN PREPAREDSTATEMENT.SETTIMESTAMP WITH 5.6.15
- Added Fabric support
02-10-14 - Version 5.1.29
- Fix for Bug#70701 (17647584), DatabaseMetaData.getSQLKeywords() doesn't match MySQL 5.6 reserved words.
- Fix for Bug#17435879, REMOVE SRC/LIB-NODIST DIRECTORY FROM LAUNCHPAD DISTRIBUTION.
Additional "com.mysql.jdbc.extra.libs" parameter must be used for ant build.
- Fix for Bug#71038, Add an option for custom collations detection.
Added new connection property detectCustomCollations=[true|false], with default false.
Please be aware that these changed the previous default behavior and if you use custom charsets or collations
you need to set detectCustomCollations=true.
- Added tests for new index renaming syntax introduced in 5.7.1.
12-23-13 - Version 5.1.28
- Fix for Bug#69579, DriverManager.setLoginTimeout not honored.
- Fix for Bug#51313, Escape processing is confused by multiple backslashes.
- Fix for Bug#55340, initializeResultsMetadataFromCache fails on second call to stored proc.
- Fix for Bug#70969, Shadow declaration of OperationNotSupportedException in RowDataDynamic.
- Fix for Bug#70835 (17750877), SQLExceptions thrown because of query interruption (KILL QUERY, query timeout, etc.)
didn't extend java.sql.SQLNonTransientException for JDBC4+ deployments.
- Fix for Bug#24344 test case, test fails if it's run with UTC timezone settings.
- Fix for Bug#69777, Setting maxAllowedPacket below 8203 makes blobSendChunkSize negative.
- Fix for Bug#35115, yearIsDateType=false has no effect on result's column type and class.
- Fix for Bug#68916 (16691047), closeOnCompletion doesn't work.
- Fix for Bug #69746 (17164058), ResultSet closed after Statement.close() when dontTrackOpenResources=true
- Fix for Bug#70842 (17753369), Adding live management of replication host topographies.
11-04-13 - Version 5.1.27
- Fix for Bug#17248345, getFunctionColumns() method returns columns of procedure.
- Fix for Bug#69290 (16879239), JDBC Table type "SYSTEM TABLE" is used inconsistently.
- Fix for Bug#68562, Combination rewriteBatchedStatements and useAffectedRows not working as expected.
- Fix for Bug#69452 (17015673), memory size connection property doesn't support large values well.
- Added tests for InnoDB full-text search support introduced in 5.6GA.
- Extended slow query warning with query execution plan for INSERT, REPLACE, UPDATE and DELETE.
- Added tests for IPv6 functions introduced in 5.6GA.
- Added support of authentication data up to 2^64-1 bytes.
- Fix for Bug#38252, ResultSet.absolute(0) is not behaving according to JDBC specification.
- Fix for Bug#62469, JDBC Authentication Fails with Null Byte in Scramble
- Fix for Bug#69506, XAER_DUPID error code is not returned when a duplicate XID is offered in Java.
- Added support for multi-master replication topographies in ReplicationDriver. ReplicationDriver now uses two discrete load-balanced
connections, one each for master and slave connections. The same load-balancing options which apply to load-balanced connections
now also apply to ReplicationConnections. By default, this means that when a ReplicationConnection uses master connections
(because the read-only property of the Connection is false), work may be re-balanced between configured master hosts at transaction
boundaries. As with load-balanced connections, the ReplicationConnection host list may be managed within the JVM (see
com.mysql.jdbc.ReplicationConnectionGroupManager) or optionally via JMX (using replicationEnableJMX configuration option; see
com.mysql.jdbc.jmx.ReplicationGroupManagerMBean). To specify multi-master replication topographies, define each host "type"
property using the following format:
address=(host=hostname)(port=3306)(type=[master|slave])
In the absense of explicit type definitions, the driver will assume a single master listed first, with all subsequently-listed
hosts configured as slaves.
- Fix for Bug#63354 (16443992), JDBC cannot make new connections if master is down.
- Fix for Bug#17003626, REGRESSION TEST FAILURE WITH SERVER VERSION 5.7.1
- Removed ant-contrib.jar from C/J distribution.
- Added tests for GIS precise spatial operations introduced in 5.6GA.
- Fixed META-INF information
- Fix for Bug#17251955, ARRAYINDEXOUTOFBOUNDSEXCEPTION ON LONG MULTI-BYTE DB/USER NAMES
- Fix for Bug#50538, DatabaseMetaData.getDriverVersion() contains unexpanded ${bzr.revision-id}
08-05-13 - Version 5.1.26
- Fix for Bug#69298 (16845965), Methods DatabaseMetaData.getProcedures() and DatabaseMetaData.getProcedureColumns(), in JDBC4,
return stored procedure only or both stored procedures and functions metadata information, depending on the value set in the
connection property "getProceduresReturnsFunctions", having default value 'true'. Several fixes in Functions and
Procedures metadata so that consulting I__S and MySQL/DDL returns the same info.
- Fix for Bug#69308 (16879267), Avoid calling batchedStatement.close() twice, and thus raising and ignoring an undercover SQLException, in methods
PreparedStatement.executeBatchedInserts and PreparedStatement.executePreparedBatchAsMultiStatement.
- Fix for Bug#68400, useCompression=true and connect to server, zip native method cause out of memory.
CompressedInputStream now does not keep reference to connection.
Thank Dominic Tootell for his investigation, proposed solution and all the help he provided.
- Fix for Bug#65871, DatabaseMetaData.getColumns() throws an MySQLSyntaxErrorException.
Delimited names of databases and tables are handled correctly now. The edge case is ANSI quoted
identifiers with leading and trailing "`" symbols, for example CREATE DATABASE "`dbname`". Methods
like DatabaseMetaData.getColumns() allow parameters passed both in unquoted and quoted form,
quoted form is not JDBC-compliant but used by third party tools. So when you pass the indentifier
"`dbname`" in unquoted form (`dbname`) driver handles it as quoted by "`" symbol. To handle such
identifiers correctly a new behavior was added to pedantic mode (connection property pedantic=true),
now if it set to true methods like DatabaseMetaData.getColumns() treat all parameters as unquoted.
- Fix for Bug#45757 (11754192), Don't allow updateRow() to be called when updatable cursor is positioned on insert row.
- Fix for Bug#68098 (16224299), Return indexes sorted by NON_UNIQUE, TYPE, INDEX_NAME, and ORDINAL_POSITION in DatabaseMetaData.getIndexInfo.
- Fix for Bug#68307 (16707803), Return correct COLUMN_TYPE from both getProcedureColumns() and getFunctionColumns().
- Fix for Bug#42267, PreparedStatementWrapper doesn't have a toString() implementation
- Fix for Bug#44451 (11753081), Added missing fields in methods getColumns(), getProcedureColumns(), getTables() and getUDTs().
Methods getClientInfoProperties() and getFunctions() were made available in all *DatabaseMetaDataUsingInfoSchema implementations.
05-06-13 - Version 5.1.25
- Fix for Bug#68801, java webstart mysql-connector-java lib calls -bin library.
- Fix for Bug#16426462, SyntaxRegressionTest failing on C/J 5.1.24 against MySQL 5.6.10
- Fix for Bug#60816, Cannot pass NULL to an INOUT procedure parameter.
- Added support for Connection Attributes when used with MySQL Server versions (5.6+) which support this feature.
By default, the following standard attributes are sent to the server, where they can be seen in the
performance_schema.session_connect_attrs table:
* _client_version : the version of MySQL Connector Java in use
* _client_name : "MySQL Connector Java"
* _runtime_version : the version of the Java runtime environment in which the driver is running
* _runtime_vendor : the name of company which produced the Java runtime environment
Additionally, users may supply their own key/value attributes to be exposed by providing them in
"key1:value1,key2:value2" format in the connectionAttributes connection property.
To avoid sending any connection attributes to the server, set connectionAttributes property to "none".
- Fix for Bug#68763 (16545334), ReplicationConnection.isMasterConnection() returns false always.
- Fix for Bug#68733 (16526938), ReplicationConnection doesn't ping all slaves.
- Fix for Bug#68556, Tomcat can't stop a cleanup thread by clearReferencesStopThreads.
- Fix for Bug#16436511, getDriverName() returns a string with company name "MySQL-AB". Driver name changed to "MySQL Connector Java".
- Fix for Bug#68664 (16486957), Enable packaging of .JAR file from Eclipse.
03-05-13 - Version 5.1.24
- Fix for Bug#64204, ResultSet.close hangs if streaming query is killed.
- Fix for Bug#16224249, Deadlock on concurrently used LoadBalancedMySQLConnection:
1) abortInternal() method was moved from com.mysql.jdbc.MySQLConnection to com.mysql.jdbc.Connection interface;
2) load-balanced/failover proxy now broadcasts abortInternal() to all underlying physical connections;
3) load-balanced/failover proxy now prevents picking of new physical connection after close() or abortInternal() were called explicitly on proxy;
4) connection synchronization mutex was refactored, now mutex is proxy instance for proxied connection or connection instance itself if there is no proxy.
- Fix for Bug#64805, StatementImpl$CancelTask occasionally throws NullPointerExceptions.
- Fixed typos in descriptions of properties.
- Fix for Bug#68011, Invalid error message noDatetimeSync property instead of noDatetimeStringSync.
02-04-13 - Version 5.1.23
- Fix for Bug#35653, executeQuery() in Statement.java let "TRUNCATE" queries being executed. "TRUNCATE" and "RENAME" are now filtered for executeQuery().
- Fix for Bug#65909, referenceThread causes memory leak in Tomcat.
Abandoned connection cleanup thread was refactored to have static shutdown method.
If you encountered this leak problem, your application should implement context listener with
AbandonedConnectionCleanupThread.shutdown() call in contextDestroyed method.
For example:
@WebListener
public class YourThreadsListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent arg0) {
try {
AbandonedConnectionCleanupThread.shutdown();
} catch (InterruptedException e) {
}
}
...
}
Note that if container does not support annotations you should add description to web.xml:
<listener>
<listener-class>user.package.YourThreadsListener</listener-class>
</listener>
- Added tests for explicit partition selection syntax introduced in 5.6GA.
- Added support of password expiration protocol. This introduces new boolean connection property disconnectOnExpiredPasswords.
If disconnectOnExpiredPasswords = true and password expired then connection will be rejected by server with ErrorCode == 1820 (ER_MUST_CHANGE_PASSWORD).
If disconnectOnExpiredPasswords = false then connection will enter to "sandbox" mode,
all commands except SET PASSWORD = ... and SET PASSWORD FOR CURRRENT_USER() = ... will cause an error to be thrown.
- Added tests for EXCHANGE PARTITION syntax introduced in 5.6GA.
- Added tests for transportable tablespaces syntax introduced in 5.6GA.
- Added tests for CREATE TABLE syntax changed in 5.6GA: CREATE TABLE ... DATA DIRECTORY = 'absolute/path/to/directory/'
- Added tests for ALTER TABLE syntax changed in 5.6GA: ALGORITHM and LOCK keywords.
- Fix for Bug#67954, stack trace used for point-of-origin in log and exception messages
causes permgen leak with webapp classloader on application redeploy. We no longer store the entire
stack trace, only the calling class and method, and even then, that only when using the usage advisor
or when profiling.
- Fix for Bug#11237, useCompression=true and LOAD DATA LOCAL INFILE SQL Command.
- Static charset/collation maps were updated.
- Fix for Bug#14260352, difference in Timestamp value returned with rewriteBatchedStatements=true.
- Fix for Bug#60598, nativeSQL() truncates fractional seconds.
- Fix for Bug#40279, Timestamp values get truncated when passed as prepared statement parameters.
This was partly fixed in 5.1.19 but that fix did not cover useLegacyDatetimeCode=true case.
- Fix for Bug#14665141, Diff results returned from ResultSet and CachedRowSet with new password hashing.
Test suite modified to don't perform comparison of PASSWORD() results if old_passwords=2
because with SHA-256 password hashing enabled they are nondeterministic.
- The driver now allows the mechanism for caching MySQL server configuration values replaceable at runtime,
via the "serverConfigCacheFactory" property. The default is an implementation that is a per-VM concurrent
map, keyed by URL. The driver will invalidate cache entries when SQLExceptions that indicate communications
errors are thrown (on the assumption that the server has been or is restarting), or if the server version
that is being connected to, differs from the one that was present when the cached values were populated.
To replace the default implementation, implement CacheAdapterFactory<String, Map<String, String>>, and
use the fully-qualified class name of this implementation for "serverConfigCacheFactory".
- Connection.setReadOnly() will take advantage of server-side support for read-only transactions
present in MySQL-5.6 and newer. Calling .isReadOnly() will incur a round-trip if useLocalSessionState
is not enabled.
09-06-12 - Version 5.1.22
- Fix for Bug#57662, Incorrect Query Duration When useNanosForElapsedTime Enabled.
- Fix for Bug#65503, ResultSets created by PreparedStatement.getGeneratedKeys() are not close()d.
- Fix for Bug#63800, getVersionColumns() does not return timestamp fields; always empty.
Added support of ON UPDATE CURRENT_TIMESTAMP for TIMESTAMP and DATETIME fields.
- Fix for Bug#41752, Can't connect mysqld which character_set_server=ucs2.
- Fix for Bug#65508, getCharsetNameForIndex() should be faster.
- Fix for Bug#14563127, Load-balanced connection fails to select valid host, closes connection
on re-balance.
07-05-12 - Version 5.1.21
- Added new built-in authentication plugin com.mysql.jdbc.authentication.Sha256PasswordPlugin
("sha256_password").
- Fix for Bug#64731, StringUtils.getBytesWrapped throws StringIndexOutOfBoundsException.
- Added new built-in authentication plugin com.mysql.jdbc.authentication.MysqlClearPasswordPlugin
("mysql_clear_password"). It allows C/J based clients to connect to MySQL accounts which use
PAM authentication for example. SSL connection required for this authentication method.
If SSL is not enabled then authentication which requires "mysql_clear_password" will lead to an error.
- Fix for Bug#13980303, Auth plugin's confidentiality requirements are not checked after Auth Switch Request.
- Fix for Bug#64205, Connected through Connector/J 5.1 to MySQL 5.5, the error message is garbled.
- Fix for Bug#37931, Null Pointer Exception Thrown When specifying invalid character_set_results enc.
- Fix for Bug#36662, TimeUtil.java: MEST mapping n/a.
- Fix a scalability/memory footprint issue where Object.finalize() was being used on
ConnectionImpl to clean up the low-level network connection to MySQL should a
connection be abandoned by the application before being cleanly close()d. We now
track connections in a phantom reference queue, and have a single thread per-vm
clean these up when the VM notices the connection is no longer referenced by
anything else.
- Added the ability to add new client-side prepared statement parse info caches by
implementing com.mysql.jdbc.CacheAdapterFactory and telling the driver to use it
when "cachePrepStmts=true" via the "parseInfoCacheFactory" configuration property.
- Implemented JDBC-4.1 methods from Java-7:
- Connection.setSchema(String) - no-op, until we support database==schema in the driver
- Connection.getSchema() - see above
- Connection.abort(Executor executor)
- Connection.setNetworkTimeout(Executor, int)
- Connection.getNetworkTimeout() throws SQLException;
- CallableStatement.getObject(int, Class<T>)
- CallableStatement.getObject(String, Class<T>)
- DBMD.getPseudoColumns() - returns an empty result set
- DBMD.generatedKeyAlwaysReturned() - always true for MySQL
- ResultSet.getObject(int, Class<T>)
- ResultSet.getObject(String, Class<T>)
- Statement.closeOnCompletion()
- Statement.isCloseOnCompletion()
05-02-12 - Version 5.1.20
- Fix for Bug#64983, 5.1.19 not working with JBoss AS 4.2.3.GA.
- Fix for Bug#13960556, java.lang.StringIndexOutOfBoundsException in com.mysql.jdbc.PreparedStatement.formatNanos(int nanos).
- Fix for pluggable authentication tests to run on Windows.
- Fix for Bug#13897714, NPE in testsuite.regression.StatementRegressionTest.testBug1933() with 5.6.5_m8 server.
- Fix for Bug#55962, Savepoint identifier is occasionally considered as floating point numbers.
- Fix for Bug#13955027, SET OPTION syntax was removed starting from 5.6.5 server version.
- Fix for Bug#13958793, ClassCastException in ConnectionImpl.buildCollationMapping() with 4.1 server.
- Fix for Bug#36478, Client prepared statement bugged if word 'limit' included in the query.
04-02-12 - Version 5.1.19
- Fix for Bug#64621, setMaxRows was not correctly processed during CS PS metadata
collection causing entire resultset to be fetched and possibly leading to OOM.
- Fix for Bug#63456, MetaData precision is different when using UTF8 or Latin1 tables.
The problem was in finding maxBytesPerChar through versioned mapping from Java charset to MySQL charset.
That map returns "utf8mb4" instead "utf8" for server versions starting with 5.5.2.
CharsetMapping, ConnectionImpl and Field have been reorganized to use static maps INDEX_TO_MYSQL_CHARSET,
STATIC_CHARSET_TO_NUM_BYTES_MAP instead. Also dynamic maps ConnectionImpl.indexToCustomMysqlCharset
and ConnectionImpl.mysqlCharsetToCustomMblen have been added for custom charsets.
- Added support for pluggable authentication via the com.mysql.jdbc.AuthenticationPlugin
interface (which extends standard "extension" interface). Examples are in
com/mysql/jdbc/authentication and in testsuite.regression.ConnectionRegressionTest.
This introduces three new properties:
authenticationPlugins defines comma-delimited list of classes that implement
com.mysql.jdbc.AuthenticationPlugin and which will be used for authentication
unless disabled by "disabledAuthenticationPlugins" property.
disabledAuthenticationPlugins defines comma-delimited list of classes implementing
com.mysql.jdbc.AuthenticationPlugin or mechanisms, i.e. "mysql_native_password".
The authentication plugins or mechanisms listed will not be used for authentication
which will fail if it requires one of them. It is an error to disable the default
authentication plugin (either the one named by "defaultAuthenticationPlugin" property
or the hard-coded one if "defaultAuthenticationPlugin" propery is not set).
defaultAuthenticationPlugin defines name of a class implementing
com.mysql.jdbc.AuthenticationPlugin which will be used as the default authentication
plugin. It is an error to use a class which is not listed in "authenticationPlugins"
nor it is one of the built-in plugins. It is an error to set as default a plugin
which was disabled with "disabledAuthenticationPlugins" property. It is an error
to set this value to null or the empty string (i.e. there must be at least a valid
default authentication plugin specified for the connection, meeting all constraints
listed above).
- Fix for Bug#63526. The problem happens in com.mysql.jdbc.EscapeProcessor#escapeSQL. The function recognizes the string in the create table statement as an escape sequence (line 136+138). The "if" construct beginning in line 182 tries to match a white-space collapsed version of the string to prefixes for valid jdbc-escapes (till line 300). Since no matching escape sequence is found and no "else" clause is defined, neither the token, nor replacement are added to the resulting escaped SQL string.
- Fix for Bug#61203, noAccessToProcedureBodies does not work anymore.
- Fix for Bug#63811, pointless Socket.bind() when using ephemeral ports and interfaces, which limits scalability on some platforms.
- Connection.changeUser() would not check for closed connections, leading to NPEs when this method was called on a closed connection.
- Fix for Bug#63284, memory leak with Failover proxied Statement/PreparedStatement with DBCP due to improper implementation of equals().
- Prepared statements would needlessly allocate a 4K buffer for converting
streams when no set*Stream() methods had been used.
10-03-11 - Version 5.1.18
- Fix for Bug#12565726, not putting the space between VALUES() and ON DUPLICATE KEY UPDATE
causes C/J a) enter rewriting the query although it has ON UPDATE
and b) to generate the wrong query with multiple ON DUPLICATE KEY
- Fix for Bug#12784170, "process fork failure" errors while running test suite via ant on Windows.
Added new ant flag, com.mysql.jdbc.junit.fork, which controls whether JUnit will fork new processes
for testing ("on", default and legacy behavior) or not ("off", required for Windows).
- Reverting changes made to ConnectionImpl.java,
private boolean characterSetNamesMatches function.
- Added function MYSQL_INDEX_TO_MYSQL_CHARSET to retrieve server charset name
using index instead of parsing variables to CharsetMapping.java.
- Completed fix for Bug#61201/12649557, fixed tests failures.
- Fix for Bug#61201/12649557, Can't establish connection when url has
sessionVariables and characterEncoding. Fix covers only MySQL server 4.1+
- Fix for Bug#61501 - Calling Statement.cancel() on a statement that isn't
currently executing will cause some later-executed query on the same
connection to be cancelled unexpectedly. The driver now guards against this
condition, but it is an underlying server issue. The MySQL statement "KILL QUERY"
(which is what the driver uses to implement Statement.cancel()) is rather
non-deterministic, and thus the use of Statement.cancel() should be avoided
if possible.
- Fix for Bug#61866/12791594 - Calling Statement.getWarnings() after
Statement.clearWarnings() has been called, returns the "old" warnings.
- Fix for Bug#13036537 - LRUCache was really a least-recently-added cache.
- Fix for Bug#13036309, Correcting parameter name in maxPerformance.properties.
07-04-11 - Version 5.1.17
- Fix for Bug#61332 - LIKE not optimized in server when run against I__S tables and no wildcards used.
Databases/tables with "_" and/or "%" in their names (escaped or not) will be handled by this code path,
although slower, since it's rare to find these characters in table names in SQL. If there's a "_" or "%"
in the string, LIKE will take care of that, otherwise we now use = . The only exception is
information_schema database which is handled separately. Patch covers both getTables() and getColumns().
- Fix for Bug#61150 - First call to stored procedure fails with "No Database Selected".
The workaround introduced in DatabaseMetaData.getCallStmtParameterTypes to fix
the bug in server where SHOW CREATE PROCEDURE was not respecting lower-case table names
is misbehaving when connection is not attached to database and on non-casesensitive OS.
- Fix for Bug#61105 - Avoid a concurrent bottleneck in Java's character set
encoding/decoding when converting bytes to/from Strings.
04-21-11 - Version 5.1.16
- Partial fix for BUG#54135 - setQueryTimeout unsafe across VIP. Fix prevents c/J from
killing the right ConnectionID but on wrong server.
- Fix for BUG#57808 - wasNull not set for DATE field with value 0000-00-00
in getDate() although zeroDateTimeBehavior is convertToNull.
- Fix for Bug#54425 - Bypassing the server protocol bug where DB should be null-terminated
whether it exists or not. Affects COM_CHANGE_USER.
- Fix for Bug#60313 (11890729), bug in
com.mysql.jdbc.ResultSetRow.getTimestampFast().
- Fix for bug 11782297, DBMD.getTables (so thus getColumns too) fails with
table names containing dot (like "junk_[Sp:e,c/ C-h+a=.r]").
- Added the ability to determine if the connection is against a server on the
same host via the Connection.isServerLocal() method.
- Fix for bug 12325877, Setting "autoReconnect=true" and
"cacheServerConfiguration=true" would cause connections created after
an existing connection fails to have non-existent values for server
variables which lead to exceeding of max allowed packet exceptions when the
new connections were used.
02-08-11 - Version 5.1.15
- Fix for Bug#38367, parameters metadata did not reflect the fact that NULL is allowed
parameter value. So DatabaseMetaData.getProcedureColumns will set isNullable member to
java.sql.DatabaseMetaData.procedureNullable now.
- Completed fix for Bug#27916.
- Fix for Bug#59224, adding 5.5 reserved words to DatabaseMetaData.getSQLKeywords().
- Fixed an issue where statement comments set via Connection.setStatementComment()
weren't represented in autoGenerateTestcaseScript=true output.
- Added ability to include the current java thread dump in the exception message
given for deadlock/wait lock timeout exceptions, enable with
"includeThreadDumpInDeadlockExceptions=true" in your JDBC url.
- Added ability to include current thread name as a statement comment visible
in MySQL's "SHOW PROCESSLIST" and Innodb deadlock diagnostics, enable with
"includeThreadNamesAsStatementComment=true".
- Added an SLF4J logging adapter. Enable by adding setting the connection
property "logger" to "Slf4JLogger" and placing the appropriate bridge
from SLF4J to the logging framework of choice in your CLASSPATH. As with
other Connector/J logging adapters, the log category name used by the
driver is "MySQL". See http://www.slf4j.org/manual.html for more details.
12-06-10 - Version 5.1.14
- Fix for Bug#58728, NPE in com.mysql.jdbc.jdbc2.optional.StatementWrappe.getResultSet()
if rs is null. Regression test case added to Statement regression tests.
- Fix for Bug#58751, DatabaseMetadata.getIndexInfo() CARDINALITY now clamped
to Integer.MAX_VALUE.
- Fix for BUG#58590
- Testsuite.Simple.DateTest, MetadataTest, NumbersTest and StatementsTest cleaned and fixed.
- Testsuite.simple, ConenctionTest & DataSourceTest are up to date. Major rework on
ConnectionTest.testDeadlockDetection (Sveta) and testUseCompress.
- Testsuite.simple, CallableStatementTest & CharsetTests are up to date.
- Testsuite.regression SubqueriesRegressionTest and StringRegressionTest are up to date.
- Testsuite.regression MicroPerformanceRegressionTest, NumbersRegressionTest, PooledConnectionRegressionTest,
ResultSetRegressionTest are up to date.
- Testsuite.regression.MetaDataRegressionTest up to date.
- Typo in StatementRegressionTest.testLikeWithBackslashes fixed. StatementRegressionTest
is up to date.
- Fix for Bug#58232 - CallableStatement fails to fetch OUT parameter against 5.5 server
- Testsuite.regression.Connection, tests for BUG#45419 refined by Todd so not to cause failures.
- Testsuite.regression.CallableStatement, tests for BUG#26959 failing against 5.5+ server.
- Bringing testsuite.regression.CachedRowsetTest up to date.
- Bringing BLOBregression tests up to date.
- Fix for Bug#58042 - Statements test failure not handled.
- Fix for Bug#57850 - Refresh SELECT statement doesn't use correct data type.
Added Field.valueNeedsQuoting (private final boolean) and protected boolean getvalueNeedsQuoting().
UpdatableResultSet refresher and updater call upon this value now.
- Removing commented source in fix for Bug#57697
- Fix for Bug#57697 - Metadata getTables() was not checking for table_name already been quoted.
- Fix for Bug#57694 - 3byte UTF8 can not be used with 5.5.3+ server.
- Fix for Bug#57701 - StatementsTest.testBatchRewriteErrors() failing on new servers.
- Fix for Bug#54756 - Cannot retrieve data from ResultSet by column name from a Sphinx daemon.
We were relying only on "server version string" passed. Now, determining
server version is done via protocol flags too, where applicable.
- Fix for Bug#57022 - cannot execute a store procedure with output parameters,
database parameter was ignored in db.sp notation. The fix is to "sanitize"
db.sp call just like in patch for noAccessToProcedureBodies. BaseTestCase
extended with createDatabase and dropDatabase. Regression test added.
- Fix for Bug#57262 - "useOldUTF8Behavior" behavior was broken since 5.1.3,
now explicitly sets connection character set to latin1 ("SET NAMES latin1")
during connection post-handshake process.
- Patch for problem where "noAccessToProcedureBodies=true" was causing
"underprivileged" user not to have access to procedures created by him.
- Patch for Bug#56305, unhandled NPE in DatabaseMetaData.java when calling
wrong-cased function without access to mysql.proc. Although simple by
itself, some more enhancements were needed for everything to function
properly. So, along with catching potential NPE due to server bug, a
guard against calling JDBC functions with db_name.proc_name notation was
also added. Necessary changes added to StringUtils.java too.
- Added ability to load-balance while auto-commit is enabled. This
introduces two new properties:
loadBalanceAutoCommitStatementThreshold defines the number of matching
statements which will trigger the driver to (potentially) swap physical
server connections,
loadBalanceAutoCommitStatementRegex defines the regular expression
against which statements must match. The default values (0 and blank,
respectively) retain the previously-established behavior that
connections with auto-commit enabled are never balanced. Feature
request documented in Bug#55723.
- Minor fix in getProcedureColumns() DisplaySize for Bug#51712. Fix for
Bug#41269 is not complete without this. getColumnDisplaySize on a
ResultSet already consisting of metadata is now functional thanks to
Bogdan.
- Minor fix for Bug#55217, return 4 as a result of DataBaseMetadata.getJDBCMajorVersion() as per manual.
- Added support for hosts specified in the URL of the form:
address=(key=value), supported keys are:
(protocol=tcp or pipe (for named pipes on Windows)
(path=[] for named pipes)
(host=[]) for TCP connections
(port=[]) for TCP connections
An example would be:
jdbc:mysql://address=(protocol=tcp)(host=localhost)(port=3306)(user=test)/db
Any other parameters are treated as host-specific properties that follow
the conventions of the JDBC URL properties. This now allows per-host
overrides of any configuration property for multi-host connections
(failover, loadbalance, replication). We do recommend that the overrides
are limited to user, password, network timeouts and statement and
metadata cache sizes. Unexpected behavior may be observed with other
per-host overrides.
- Fix for Bug#56099 - Added support for JDBC4-specific functionality when
using load-balanced connections.
- Fix for Bug#56200 - Added diagnostic information to SQLException message
thrown when a closed load-balanced connection is reused. This
information will identify the conditions which caused the connection to
be closed.
- Fix for Bug#56429 - When using Connector/J configured for failover
(jdbc:mysql://host1,host2,... URLs), the non-primary servers re-balance
and spawned new idle connections when the transactions on the master were
committed or rolled-back, eventually exceeding max_connections. It was
also discovered that session state (autocommit, isolation level, catalog)
wasn't being copied from the primary connection to secondary
connections correctly because of the same changes that caused this bug,
and this was fixed as well.
- Fix for Bug#56706 - Ensure read-only state is synchronized when new
load-balanced connections are selected.
- Fixed Bug#56955 - Connection properties "trustCertificateKeyStoreType"
and "clientCertificateKeyStoreType" have invalid defaults, therefore
connections that specify "useSSL" will sometimes fail with exceptions
from JSSE unless "JKS" has been specified for both of these properties.
The default value for these properties is now "JKS", and thus it no
longer has to be specified.
- Fixed Bug#56979 - Improper connection closing logic leads to TIME_WAIT
sockets on server
- Fixed Bug#57380 - DatabaseMetaData.supportsMultipleResultSets() now returns
true when connected to a 4.1 version or later server.
- Fixed Bug#58706 - Failover connections didn't honor "failOverReadOnly=false", and in some
situations would not fall back.
- Removed logging integrations with log4j and apache-commons-logging due to license
incompatibility. Replacing with SLF4J integration in next release.
06-24-10 - Version 5.1.13
- Minor fix in previous patch for Bug#51904. Function ConnectionImpl.setCatalog() was passed quoted argument thus breaking with "...for the right syntax to use near 'test``'"
- Fix for Bug#51912 - Passing NULL as cat. param to getProcedureColumns with !nullCatalogMeansCurrent
- Fix for Bug#52167 - Can't parse parameter list with special characters inside
- Fix for Bug#51904 - getProcedureColumns() always returns PROCEDURE_CAT result column as NULL
- Fix for Bug#51712 - Display Size is always 0 for columns returned by getProcedureColumns()
- Fix for Bug#51908 - db variable might have end up unassigned when calling
getProcedureColumns()/Functions(). This is a followup on code changes made
for Bug#51022.
- Fixed Bug#51266 - jdbc:mysql:loadbalance:// would stick to the first
host in the list in some cases, especially exacerbated if the host was
down.
- Replaced URLs of the form jdbc:mysql://host-1,host-2 with a composite of
a normal connection and a jdbc:mysql:loadbalance:// connection for more
robustness and cleaner code.
- Fixed BUG#51643 - Connections using jdbc:mysql:loadbalance:// would
have statements (and prepared statements) that did not have their connections
changed upon commit()/rollback(), and thus applications that held statement
instances past commit()/rollback() could have data written to or read from
un-intended connections.
- Fixed BUG#51666 - StatementInterceptors were never "un-safed" after connection
establishment, causing interceptors which returned result sets pre/post execution
would not work.
- Fixed BUG#51783 - Load-balanced connections could throw a SQLException
incorrectly on commit() or rollback(). This was not caused by failures in commit
or rollback, but rather by the possibility that the newly-selected physical
connection was stale. Added logic to catch and retry if this happens, up to
the number of hosts specified for load-balancing. Also added new property,
loadBalanceValidateConnectionOnSwapServer, which controls whether to explicitly
ping the selected host (otherwise, the host is presumed to be up, and will only
be noticed if auto-commit or transaction isolation state needs to be set and
fails).
- Added loadBalancePingTimeout property to allow a specific timeout to be set
for each ping executed against the servers. This ping is executed when the
physical connections are rebalanced (commit/rollback or communication exception),
or when a query starting with (exactly) "/* ping */" is executed. The latter
causes each open underlying physical connection to be pinged.
- Fixed BUG#51776 - Connection.rollback() could swallow exceptions incorrectly.
- Fixed BUG#52231 - Differences in definitions of which SQLExceptions trigger
a failover event could result in failure to try more than a single host in
certain situations.
- Fixed BUG#52534 - Performance regression using load-balanced connection.
- More aggressively purge the statement timeout timers after they've been cancelled to
trade time for memory. This purge only happens if statement timeouts are in use.
- Added management of running load-balanced connections. Statistics can be obtained,
and hosts added/dropped via com.mysql.jdbc.ConnectionGroupManager or the JMX
implementation. This functionality is enabled by setting the new paramenter,
loadBalanceConnectionGroup to the name of the logical grouping of connections.
All load-balanced connections sharing the same loadBalanceConnectionGroup value,
regardless of how the application creates them, will be managed together. To
enable JMX-based management, set loadBalanceEnableJMX=true and ensure that remote
JMX is enabled in the JRE (eg, use -Dcom.sun.management.jmxremote).
- Added loadBalanceExceptionChecker property, which takes a fully-qualified class
name implementing com.mysql.jdbc.LoadBalancedExceptionChecker interface. This
allows custom evaluation of SQLExceptions thrown to determine whether they should
trigger failover to an alternate host in load-balanced deployments. The default
is com.mysql.jdbc.StandardLoadBalanceExceptionChecker.
- Added two new properties which allow more flexibility in determining which
SQLExceptions should trigger failover in a load-balanced deployment. The new
loadBalanceSQLStateFailover property takes a comma-delimited list of SQLState
codes which are compared to the SQLState of the SQLException (matching done
with trailing wildcard), while loadBalanceSQLExceptionSubclassFailover takes
a comma-delimited list of fully-qualified class/interface names, against
which the SQLException is checked to determine if it is an instance of any.
Matches trigger failover to an alternate host.
- Fixed Bug#51704 - Re-written batched statements don't honor escape processing
flag of their creator.
- Fixed Bug#43576 - Sometimes not able to register OUT parameters for
CallableStatements.
- Fixed Bug#54175 - Driver doesn't support utf8mb4 for servers 5.5.2 and newer. The
driver now auto-detects servers configured with character_set_server=utf8mb4 or
treats the Java encoding "utf-8" passed via "characterEncoding=..." as utf8mb4 in
the "SET NAMES=" calls it makes when establishing the connection.
02-18-10 - Version 5.1.12
- NO_INDEX_USED and NO_GOOD_INDEX used were only being set when profileSQL
was set to "true", and in some cases their values were reversed.
- Fix for Bug#51022 - conn.getMetaData().getProcedures("schema",null,"%");
returns all stored procedures from all databases and not only for given
one.
- Fixed Bug#50538 - ${svn.revno} shows up in DBMD.getDriverVersion().
- Removed usage of timestamp nanoseconds in PreparedStatement.setTimestamp(),
as long as Bug#50774 exists in the server and there's no real support
for nanos/micros in TIMESTAMPs, avoid the performance regression usage of
them causes.
01-20-10 - Version 5.1.11
- Fix for BUG#50288 - NullPointerException possible during invalidateCurrentConnection() for load-balanced
connections.
- Fix for BUG#49745 - deleteRow() for updatable result sets can cause full table scan because escaped hex
values are used for primary key identifiers.
- Fix for BUG#49607 - Provide Connection context in ExceptionInterceptor.
- Fix for BUG#48605 - Ping leaves closed connections in liveConnections, causing subsequent Exceptions when
that connection is used.
- Fix for BUG#48442 - Load-balanced Connection object returns inconsistent results for hashCode() and equals()
dependent upon state of underlying connections.
- Fix for BUG#48172 - Batch rewrite requires space immediately after "VALUES"
- Statement Interceptors didn't completely intercept server-side prepared statements.
- Fix for BUG#48486 Cannot use load balanced connections with MysqlConnectionPoolDataSource.
- Fix for Bug#32525 - "noDatetimeStringSync" doesn't work for server-side prepared statements. Now it does.
- Hooked up exception interceptors so they get called now.
- Rev'd the statement interceptor interface to pass on some server flags, warning counts and errors. See
the com.mysql.jdbc.StatementInteceptorsV2 interface for more details. The driver will create adaptors to
transparently convert older implementations to the newer interface at runtime.
- Statement Interceptors are now enabled at connection instantiation, but
can not return result sets (they will be ignored) until the connection
has bootstrapped itself. If during the init() method your interceptor
requires access to the connection itself, it should ensure that methods
that might throw exceptions if the connection is closed should handle
this in a robust manner.