- Notifications
You must be signed in to change notification settings - Fork5
Commit26e5664
committed
Attached is a revised patch that removes the static SimpleDateFormat
objects that Thomas pointed out might be a problem.PPS. I have included and updated the comments from the original patchrequest to reflect the changes made in this revised patch.> Attached is a set of patches for a couple of bugs dealing with> timestamps in JDBC.>> Bug#1) Incorrect timestamp stored in DB if client timezone different> than DB.> The buggy implementation of setTimestamp() in PreparedStatement simply> used the toString() method of the java.sql.Timestamp object to convert> to a string to send to the database. The format of this is yyyy-MM-dd> hh:mm:ss.SSS which doesn't include any timezone information. Therefore> the DB assumes its timezone since none is specified. That is OK if the> timezone of the client and server are the same, however if they are> different the wrong timestamp is received by the server. For example if> the client is running in timezone GMT and wants to send the timestamp> for noon to a server running in PST (GMT-8 hours), then the server will> receive 2000-01-12 12:00:00.0 and interprete it as 2000-01-12> 12:00:00-08 which is 2000-01-12 04:00:00 in GMT. The fix is to send a> format to the server that includes the timezone offset. For simplicity> sake the fix uses a SimpleDateFormat object with its timezone set to GMT> so that '+00' can be used as the timezone for postgresql. This is done> as SimpleDateFormat doesn't support formating timezones in the way> postgresql expects.>> Bug#2) Incorrect handling of partial seconds in getting timestamps from> the DB>> When the SimpleDateFormat object parses a string with a format like> yyyy-MM-dd hh:mm:ss.SS it expects the fractional seconds to be three> decimal places (time precision in java is miliseconds = three decimal> places). This seems like a bug in java to me, but it is unlikely to be> fixed anytime soon, so the postgresql code needed modification to> support the java behaviour. So for example a string of '2000-01-12> 12:00:00.12-08' coming from the database was being converted to a> timestamp object with a value of 2000-01-12 12:00:00.012GMT-08:00. The> fix was to check for a '.' in the string and if one is found append on> an extra zero to the fractional seconds part.>>> I also did some cleanup in ResultSet.getTimestamp(). This method has> had multiple patches applied some of which resulted in code that was no> longer needed. For example the ISO timestamp format that postgresql> uses specifies the timezone as an offset like '-08'. Code was added at> one point to convert the postgresql format to the java one which is> GMT-08:00, however the old code was left around which did nothing. So> there was code that looked for yyyy-MM-dd hh:mm:sszzzzzzzzz and> yyyy-MM-dd hh:mm:sszzz. This second format would never be encountered> because zzz (i.e. -08) would be converted into the former (also note> that the SimpleDateFormat object treats zzzzzzzzz and zzz the same, the> number of z's does not matter).>>> There was another problem/fix mentioned on the email lists today by> mcannon@internet.com which is also fixed by this patch:>> Bug#3) Fractional seconds lost when getting timestamp from the DB> A patch by Jan Thomea handled the case of yyyy-MM-dd hh:mm:sszzzzzzzzz> but not the fractional seconds version yyyy-MM-dd hh:mm:ss.SSzzzzzzzzz.> The code is fixed to handle this case as well.Barry Lind1 parent7b9dc71 commit26e5664
File tree
4 files changed
+95
-50
lines changed- src/interfaces/jdbc/org/postgresql
- jdbc1
- jdbc2
4 files changed
+95
-50
lines changedLines changed: 8 additions & 5 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
312 | 312 |
| |
313 | 313 |
| |
314 | 314 |
| |
315 |
| - | |
316 |
| - | |
| 315 | + | |
317 | 316 |
| |
318 |
| - | |
| 317 | + | |
319 | 318 |
| |
320 | 319 |
| |
321 | 320 |
| |
| |||
350 | 349 |
| |
351 | 350 |
| |
352 | 351 |
| |
353 |
| - | |
354 |
| - | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
355 | 358 |
| |
356 | 359 |
| |
357 | 360 |
| |
|
Lines changed: 40 additions & 16 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
462 | 462 |
| |
463 | 463 |
| |
464 | 464 |
| |
465 |
| - | |
466 |
| - | |
467 |
| - | |
468 |
| - | |
469 |
| - | |
470 |
| - | |
| 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 | + | |
471 | 494 |
| |
472 |
| - | |
473 |
| - | |
474 |
| - | |
475 |
| - | |
476 |
| - | |
477 |
| - | |
478 |
| - | |
479 |
| - | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
480 | 504 |
| |
481 |
| - | |
| 505 | + | |
482 | 506 |
| |
483 |
| - | |
| 507 | + | |
484 | 508 |
| |
485 | 509 |
| |
486 | 510 |
| |
|
Lines changed: 9 additions & 5 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
312 | 312 |
| |
313 | 313 |
| |
314 | 314 |
| |
315 |
| - | |
316 |
| - | |
| 315 | + | |
| 316 | + | |
317 | 317 |
| |
318 |
| - | |
| 318 | + | |
319 | 319 |
| |
320 | 320 |
| |
321 | 321 |
| |
| |||
350 | 350 |
| |
351 | 351 |
| |
352 | 352 |
| |
353 |
| - | |
354 |
| - | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
355 | 359 |
| |
356 | 360 |
| |
357 | 361 |
| |
|
Lines changed: 38 additions & 24 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
468 | 468 |
| |
469 | 469 |
| |
470 | 470 |
| |
471 |
| - | |
472 |
| - | |
473 |
| - | |
474 |
| - | |
475 |
| - | |
476 |
| - | |
477 |
| - | |
478 |
| - | |
479 |
| - | |
480 |
| - | |
| 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 | + | |
481 | 499 |
| |
482 | 500 |
| |
483 |
| - | |
484 |
| - | |
485 |
| - | |
486 |
| - | |
487 |
| - | |
488 |
| - | |
489 |
| - | |
490 |
| - | |
491 |
| - | |
492 |
| - | |
493 |
| - | |
494 |
| - | |
495 |
| - | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
496 | 509 |
| |
497 |
| - | |
| 510 | + | |
498 | 511 |
| |
499 | 512 |
| |
500 | 513 |
| |
| |||
504 | 517 |
| |
505 | 518 |
| |
506 | 519 |
| |
| 520 | + | |
507 | 521 |
| |
508 | 522 |
| |
509 | 523 |
| |
|
0 commit comments
Comments
(0)