Commit c03dee8
Resolve describe() via DBMS_UTILITY.NAME_RESOLVE
Replaces the catalog-based `resolve_data_source_name` (single
all_objects query + secondary all_synonyms lookup since rsim#2521) with a
`DBMS_UTILITY.NAME_RESOLVE` call. NAME_RESOLVE chases private and
public synonyms inside the PL/SQL engine and returns
`[owner, object_name]` in one round trip, so the work does not depend
on `ALL_*` dictionary-view cost — the failure mode that rsim#2521's
secondary `all_synonyms` lookup leaves behind on synonym-heavy
schemas.
Now that PR rsim#2513 has landed `DBMS_METADATA.GET_DDL` in the adapter,
using another `DBMS_*` package is no longer a style break.
Benchmark on Oracle 23ai with a 1000-object fixture (700 tables +
100 views + 100 private synonyms + 100 public synonyms):
| case | master | this PR | speedup |
|------------------|---------:|---------:|--------:|
| tables | 0.384ms | 0.300ms | 1.3x |
| views | 0.364ms | 0.303ms | 1.2x |
| private synonyms | 13.031ms | 0.447ms | 29x |
| public synonyms | 1.723ms | 0.454ms | 3.8x |
| all mixed | 0.578ms | 0.265ms | 2.2x |
Implementation:
- OUT-bind plumbing on both the OCI8 path (anonymous PL/SQL block
with named binds) and the JDBC path (`CallableStatement` +
`registerOutParameter`).
- `normalize_name_for_name_resolve` preserves case for already-quoted
identifiers (e.g. `"test_Mixed"`). Previously `%("#{part}")` would
re-quote an already-quoted part, producing `""test_Mixed""` and
raising ORA-01741.
- `resolve_data_source_name` keeps master's contract: raise
`OracleEnhanced::ConnectionException` for a non-existent name so
`data_source_exists?`'s `rescue` returns false.
Benchmark script (`script/benchmark_describe.rb`) carried over from
the POC reference at rsim#2566.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>1 parent e74034e commit c03dee8
4 files changed
Lines changed: 223 additions & 63 deletions
File tree
- lib/active_record/connection_adapters/oracle_enhanced
- spec/active_record/connection_adapters/oracle_enhanced
Lines changed: 24 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
325 | 325 | | |
326 | 326 | | |
327 | 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 | + | |
328 | 352 | | |
329 | 353 | | |
330 | 354 | | |
| |||
Lines changed: 30 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
109 | 109 | | |
110 | 110 | | |
111 | 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 | + | |
112 | 142 | | |
113 | 143 | | |
114 | 144 | | |
| |||
Lines changed: 80 additions & 52 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
967 | 967 | | |
968 | 968 | | |
969 | 969 | | |
970 | | - | |
971 | | - | |
972 | | - | |
973 | | - | |
974 | | - | |
975 | | - | |
976 | | - | |
977 | | - | |
| 970 | + | |
| 971 | + | |
| 972 | + | |
| 973 | + | |
| 974 | + | |
| 975 | + | |
| 976 | + | |
| 977 | + | |
| 978 | + | |
978 | 979 | | |
979 | | - | |
980 | | - | |
981 | | - | |
982 | | - | |
983 | | - | |
984 | | - | |
985 | | - | |
986 | | - | |
987 | | - | |
| 980 | + | |
| 981 | + | |
| 982 | + | |
| 983 | + | |
| 984 | + | |
| 985 | + | |
| 986 | + | |
| 987 | + | |
| 988 | + | |
| 989 | + | |
| 990 | + | |
| 991 | + | |
| 992 | + | |
| 993 | + | |
| 994 | + | |
| 995 | + | |
| 996 | + | |
| 997 | + | |
| 998 | + | |
| 999 | + | |
| 1000 | + | |
| 1001 | + | |
| 1002 | + | |
| 1003 | + | |
| 1004 | + | |
| 1005 | + | |
| 1006 | + | |
| 1007 | + | |
| 1008 | + | |
| 1009 | + | |
| 1010 | + | |
| 1011 | + | |
| 1012 | + | |
| 1013 | + | |
| 1014 | + | |
| 1015 | + | |
| 1016 | + | |
| 1017 | + | |
| 1018 | + | |
| 1019 | + | |
| 1020 | + | |
| 1021 | + | |
| 1022 | + | |
988 | 1023 | | |
| 1024 | + | |
| 1025 | + | |
989 | 1026 | | |
990 | | - | |
991 | | - | |
992 | | - | |
993 | | - | |
994 | | - | |
995 | | - | |
996 | | - | |
997 | | - | |
998 | | - | |
999 | | - | |
1000 | | - | |
1001 | | - | |
1002 | | - | |
1003 | | - | |
1004 | | - | |
1005 | | - | |
1006 | | - | |
1007 | | - | |
1008 | | - | |
1009 | | - | |
1010 | | - | |
1011 | | - | |
1012 | | - | |
1013 | | - | |
1014 | | - | |
1015 | | - | |
1016 | | - | |
1017 | | - | |
1018 | | - | |
1019 | | - | |
1020 | | - | |
1021 | | - | |
1022 | | - | |
1023 | | - | |
| 1027 | + | |
| 1028 | + | |
| 1029 | + | |
| 1030 | + | |
| 1031 | + | |
| 1032 | + | |
| 1033 | + | |
| 1034 | + | |
| 1035 | + | |
| 1036 | + | |
| 1037 | + | |
| 1038 | + | |
| 1039 | + | |
| 1040 | + | |
| 1041 | + | |
| 1042 | + | |
| 1043 | + | |
| 1044 | + | |
| 1045 | + | |
| 1046 | + | |
| 1047 | + | |
| 1048 | + | |
1024 | 1049 | | |
1025 | | - | |
| 1050 | + | |
1026 | 1051 | | |
| 1052 | + | |
1027 | 1053 | | |
| 1054 | + | |
| 1055 | + | |
1028 | 1056 | | |
1029 | 1057 | | |
1030 | 1058 | | |
| |||
Lines changed: 89 additions & 11 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
972 | 972 | | |
973 | 973 | | |
974 | 974 | | |
975 | | - | |
976 | | - | |
977 | | - | |
978 | | - | |
| 975 | + | |
| 976 | + | |
| 977 | + | |
| 978 | + | |
979 | 979 | | |
980 | 980 | | |
981 | 981 | | |
| |||
996 | 996 | | |
997 | 997 | | |
998 | 998 | | |
| 999 | + | |
| 1000 | + | |
| 1001 | + | |
| 1002 | + | |
| 1003 | + | |
| 1004 | + | |
| 1005 | + | |
| 1006 | + | |
| 1007 | + | |
| 1008 | + | |
| 1009 | + | |
| 1010 | + | |
| 1011 | + | |
| 1012 | + | |
| 1013 | + | |
| 1014 | + | |
| 1015 | + | |
| 1016 | + | |
| 1017 | + | |
| 1018 | + | |
| 1019 | + | |
| 1020 | + | |
| 1021 | + | |
| 1022 | + | |
| 1023 | + | |
| 1024 | + | |
| 1025 | + | |
| 1026 | + | |
| 1027 | + | |
| 1028 | + | |
| 1029 | + | |
| 1030 | + | |
| 1031 | + | |
| 1032 | + | |
| 1033 | + | |
| 1034 | + | |
| 1035 | + | |
| 1036 | + | |
| 1037 | + | |
| 1038 | + | |
| 1039 | + | |
| 1040 | + | |
| 1041 | + | |
| 1042 | + | |
| 1043 | + | |
| 1044 | + | |
| 1045 | + | |
| 1046 | + | |
| 1047 | + | |
| 1048 | + | |
| 1049 | + | |
| 1050 | + | |
| 1051 | + | |
| 1052 | + | |
| 1053 | + | |
| 1054 | + | |
| 1055 | + | |
| 1056 | + | |
| 1057 | + | |
| 1058 | + | |
| 1059 | + | |
999 | 1060 | | |
1000 | 1061 | | |
1001 | 1062 | | |
1002 | 1063 | | |
1003 | 1064 | | |
1004 | | - | |
| 1065 | + | |
1005 | 1066 | | |
1006 | 1067 | | |
1007 | 1068 | | |
| |||
1014 | 1075 | | |
1015 | 1076 | | |
1016 | 1077 | | |
1017 | | - | |
| 1078 | + | |
1018 | 1079 | | |
1019 | 1080 | | |
1020 | 1081 | | |
| |||
1026 | 1087 | | |
1027 | 1088 | | |
1028 | 1089 | | |
1029 | | - | |
1030 | | - | |
1031 | | - | |
1032 | | - | |
1033 | | - | |
| 1090 | + | |
| 1091 | + | |
| 1092 | + | |
| 1093 | + | |
| 1094 | + | |
| 1095 | + | |
| 1096 | + | |
| 1097 | + | |
| 1098 | + | |
| 1099 | + | |
| 1100 | + | |
| 1101 | + | |
| 1102 | + | |
| 1103 | + | |
| 1104 | + | |
| 1105 | + | |
| 1106 | + | |
| 1107 | + | |
| 1108 | + | |
| 1109 | + | |
| 1110 | + | |
| 1111 | + | |
1034 | 1112 | | |
1035 | 1113 | | |
1036 | 1114 | | |
| |||
0 commit comments