Commit c9738ea
authored
perf(bigquery-jdbc): optimize getExportedKeys performance using hybrid metadata lookup (#13734)
b/534326814
This PR optimizes `DatabaseMetaData.getExportedKeys()` by restoring the
highly performant `INFORMATION_SCHEMA` SQL lookup path, correcting a
performance regression introduced when the method was migrated to
sequential REST API lookups.
To ensure complete contract safety across both standard native tables
and external REST catalog tables (PCNT tables), we implement a hybrid
routing strategy:
1. **PCNT Early Return (Fast Path)**:
If `schema` contains a dot (`.`), we bypass SQL execution entirely and
return a structured empty `ResultSet` instantly.
2. **Wildcard Fallback (REST API Path)**:
If either `catalog` or `schema` arguments are `null` (representing
wildcard metadata searches), the driver falls back to retrieving
constraints concurrently via the Java Client REST API.
3. **Standard Introspection (SQL Path)**:
For targeted native table queries, the driver executes the optimized
`DatabaseMetaData_GetExportedKeys.sql` query template.1 parent 1bc16bb commit c9738ea
4 files changed
Lines changed: 179 additions & 34 deletions
File tree
- java-bigquery-jdbc/src
- main
- java/com/google/cloud/bigquery/jdbc
- resources/com/google/cloud/bigquery/jdbc
- test/java/com/google/cloud/bigquery/jdbc
- it
Lines changed: 102 additions & 30 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
52 | 52 | | |
53 | 53 | | |
54 | 54 | | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
55 | 59 | | |
56 | 60 | | |
| 61 | + | |
57 | 62 | | |
58 | 63 | | |
59 | 64 | | |
| 65 | + | |
60 | 66 | | |
61 | 67 | | |
62 | 68 | | |
| |||
94 | 100 | | |
95 | 101 | | |
96 | 102 | | |
| 103 | + | |
| 104 | + | |
97 | 105 | | |
98 | 106 | | |
99 | 107 | | |
| |||
2559 | 2567 | | |
2560 | 2568 | | |
2561 | 2569 | | |
2562 | | - | |
2563 | | - | |
| 2570 | + | |
| 2571 | + | |
| 2572 | + | |
| 2573 | + | |
| 2574 | + | |
| 2575 | + | |
| 2576 | + | |
2564 | 2577 | | |
2565 | | - | |
2566 | | - | |
2567 | | - | |
2568 | | - | |
2569 | | - | |
2570 | | - | |
2571 | | - | |
2572 | | - | |
2573 | | - | |
2574 | | - | |
2575 | | - | |
2576 | | - | |
2577 | | - | |
2578 | | - | |
2579 | | - | |
2580 | | - | |
2581 | | - | |
2582 | | - | |
2583 | | - | |
| 2578 | + | |
| 2579 | + | |
| 2580 | + | |
| 2581 | + | |
| 2582 | + | |
| 2583 | + | |
| 2584 | + | |
| 2585 | + | |
| 2586 | + | |
| 2587 | + | |
| 2588 | + | |
| 2589 | + | |
| 2590 | + | |
| 2591 | + | |
| 2592 | + | |
| 2593 | + | |
2584 | 2594 | | |
2585 | | - | |
2586 | | - | |
2587 | | - | |
| 2595 | + | |
| 2596 | + | |
| 2597 | + | |
| 2598 | + | |
| 2599 | + | |
| 2600 | + | |
| 2601 | + | |
| 2602 | + | |
| 2603 | + | |
| 2604 | + | |
| 2605 | + | |
2588 | 2606 | | |
2589 | | - | |
2590 | | - | |
| 2607 | + | |
| 2608 | + | |
2591 | 2609 | | |
2592 | | - | |
2593 | | - | |
2594 | | - | |
2595 | | - | |
| 2610 | + | |
| 2611 | + | |
| 2612 | + | |
| 2613 | + | |
| 2614 | + | |
| 2615 | + | |
| 2616 | + | |
| 2617 | + | |
| 2618 | + | |
| 2619 | + | |
| 2620 | + | |
| 2621 | + | |
| 2622 | + | |
| 2623 | + | |
| 2624 | + | |
| 2625 | + | |
| 2626 | + | |
| 2627 | + | |
| 2628 | + | |
2596 | 2629 | | |
2597 | 2630 | | |
2598 | 2631 | | |
| |||
5355 | 5388 | | |
5356 | 5389 | | |
5357 | 5390 | | |
| 5391 | + | |
| 5392 | + | |
| 5393 | + | |
| 5394 | + | |
| 5395 | + | |
| 5396 | + | |
| 5397 | + | |
| 5398 | + | |
| 5399 | + | |
| 5400 | + | |
| 5401 | + | |
| 5402 | + | |
| 5403 | + | |
| 5404 | + | |
| 5405 | + | |
| 5406 | + | |
| 5407 | + | |
| 5408 | + | |
| 5409 | + | |
| 5410 | + | |
| 5411 | + | |
| 5412 | + | |
| 5413 | + | |
| 5414 | + | |
| 5415 | + | |
| 5416 | + | |
| 5417 | + | |
| 5418 | + | |
| 5419 | + | |
| 5420 | + | |
| 5421 | + | |
| 5422 | + | |
| 5423 | + | |
| 5424 | + | |
| 5425 | + | |
| 5426 | + | |
| 5427 | + | |
| 5428 | + | |
| 5429 | + | |
5358 | 5430 | | |
Lines changed: 50 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 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 | + | |
Lines changed: 25 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
37 | 37 | | |
38 | 38 | | |
39 | 39 | | |
| 40 | + | |
40 | 41 | | |
41 | 42 | | |
42 | 43 | | |
| |||
3522 | 3523 | | |
3523 | 3524 | | |
3524 | 3525 | | |
3525 | | - | |
| 3526 | + | |
| 3527 | + | |
| 3528 | + | |
| 3529 | + | |
| 3530 | + | |
| 3531 | + | |
| 3532 | + | |
| 3533 | + | |
| 3534 | + | |
| 3535 | + | |
| 3536 | + | |
| 3537 | + | |
| 3538 | + | |
| 3539 | + | |
| 3540 | + | |
| 3541 | + | |
| 3542 | + | |
| 3543 | + | |
| 3544 | + | |
| 3545 | + | |
| 3546 | + | |
3526 | 3547 | | |
3527 | 3548 | | |
3528 | 3549 | | |
| |||
3544 | 3565 | | |
3545 | 3566 | | |
3546 | 3567 | | |
3547 | | - | |
| 3568 | + | |
3548 | 3569 | | |
3549 | 3570 | | |
3550 | 3571 | | |
| |||
3572 | 3593 | | |
3573 | 3594 | | |
3574 | 3595 | | |
3575 | | - | |
| 3596 | + | |
3576 | 3597 | | |
3577 | 3598 | | |
3578 | 3599 | | |
3579 | 3600 | | |
3580 | 3601 | | |
3581 | 3602 | | |
3582 | 3603 | | |
3583 | | - | |
| 3604 | + | |
3584 | 3605 | | |
3585 | 3606 | | |
3586 | 3607 | | |
| |||
Lines changed: 2 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
| 60 | + | |
| 61 | + | |
60 | 62 | | |
61 | 63 | | |
62 | 64 | | |
| |||
0 commit comments