Skip to content

Commit b22ba5c

Browse files
update qualified name
1 parent 2563bf5 commit b22ba5c

3 files changed

Lines changed: 21 additions & 19 deletions

File tree

villagesql/schema/descriptor/type_context.cc

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,19 @@
2929
namespace villagesql {
3030

3131
void TypeContext::resolve_cached_values() {
32+
// Build qualified_name_ once: "ext.type" or "ext.type(v1,v2,...)"
33+
qualified_name_ = descriptor_->qualified_base_name();
34+
if (!key_.parameters().empty()) {
35+
qualified_name_ += "(";
36+
const char *delim = "";
37+
for (const auto &[k, v] : key_.parameters().params()) {
38+
qualified_name_ += delim;
39+
qualified_name_ += v;
40+
delim = ",";
41+
}
42+
qualified_name_ += ")";
43+
}
44+
3245
if (!key_.parameters().empty() && descriptor_->resolve_params() != nullptr) {
3346
// Variable-length type with parameters: resolve via callback
3447
const auto &param_map = key_.parameters().params();
@@ -49,7 +62,7 @@ void TypeContext::resolve_cached_values() {
4962
LogVSQL(WARNING_LEVEL,
5063
"resolve_params failed for type '%s' (params: %s): %s. "
5164
"Falling back to descriptor defaults.",
52-
descriptor_->qualified_name().c_str(),
65+
descriptor_->qualified_base_name().c_str(),
5366
key_.parameters().str().c_str(), error_msg);
5467
persisted_length_ = descriptor_->persisted_length();
5568
max_decode_buffer_length_ = descriptor_->max_decode_buffer_length();

villagesql/schema/descriptor/type_context.h

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -228,21 +228,7 @@ class TypeContext {
228228
const std::string &type_name() const { return descriptor_->type_name(); }
229229
// Returns "extension_name.type_name" or "extension_name.type_name(v1,v2,...)"
230230
// when parameters are present (e.g. "vsql_tvector.TVECTOR(3)").
231-
// Values are listed in sorted key order, comma-separated.
232-
std::string qualified_name() const {
233-
if (key_.parameters().empty()) {
234-
return descriptor_->qualified_name();
235-
}
236-
std::string result = descriptor_->qualified_name() + "(";
237-
const char *delim = "";
238-
for (const auto &entry : key_.parameters().params()) {
239-
result += delim;
240-
result += entry.second;
241-
delim = ",";
242-
}
243-
result += ")";
244-
return result;
245-
}
231+
const std::string &qualified_name() const { return qualified_name_; }
246232

247233
// Storage characteristics for this type instantiation.
248234
// For fixed-length types, these are copied from the TypeDescriptor.
@@ -262,7 +248,8 @@ class TypeContext {
262248
// Key for this TypeContext (used by ExtensionObjectMap)
263249
TypeContextKey key_;
264250

265-
// Cached storage characteristics (computed eagerly in constructor)
251+
// Cached values (computed eagerly in resolve_cached_values())
252+
std::string qualified_name_;
266253
int64_t persisted_length_{0};
267254
int64_t max_decode_buffer_length_{0};
268255
};

villagesql/schema/descriptor/type_descriptor.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,10 @@ class TypeDescriptor {
174174
return key_.extension_version();
175175
}
176176

177-
// Returns the fully qualified type name: "extension_name.type_name"
178-
std::string qualified_name() const {
177+
// Returns the qualified base name: "extension_name.type_name"
178+
// Does not include parameters. Use TypeContext::qualified_name() for the
179+
// full name including parameters (e.g. "vsql_tvector.TVECTOR(3)").
180+
std::string qualified_base_name() const {
179181
return extension_name() + "." + type_name();
180182
}
181183

0 commit comments

Comments
 (0)