Type:
Task
Priority:
Major
Resolution:
Fixed
The following classes use strlen() when handling name related parameters to constructors:
Item_string
Item_blob
Item_empty_string
Examples:
// Constructors with an externally provided item name
Item_string(THD *thd, const char *name_par, const char *str, size_t length,
CHARSET_INFO *cs, Derivation dv= DERIVATION_COERCIBLE)
:Item_literal(thd)
{
str_value.set_or_copy_aligned(str, length, cs);
fix_from_value(dv, Metadata(&str_value));
set_name(thd, name_par,safe_strlen(name_par), system_charset_info);
}
Item_string(THD *thd, const char *name_par, const char *str, size_t length,
CHARSET_INFO *cs, Derivation dv, uint repertoire)
:Item_literal(thd)
{
str_value.set_or_copy_aligned(str, length, cs);
fix_from_value(dv, Metadata(&str_value, repertoire));
set_name(thd, name_par, safe_strlen(name_par), system_charset_info);
}
Item_blob(THD *thd, const char *name_arg, uint length):
Item_partition_func_safe_string(thd, name_arg, (uint) safe_strlen(name_arg),
&my_charset_bin)
{ max_length= length; }
Item_empty_string(THD *thd, const char *header,uint length,
CHARSET_INFO *cs= NULL):
Item_partition_func_safe_string(thd, "" , 0,
cs ? cs : &my_charset_utf8_general_ci)
{
name.str= header;
name.length= strlen (name.str);
max_length= length * collation.collation->mbmaxlen;
}
We should eventually get rid of all strlen().
Under terms of this tasks we'll move strlen() calls to upper level:
change the mentioned constructors to accept LEX_CSTRING instead of a const char pointer
let the caller provide length.
This task is needed to do some upcoming Type_handler related changes easier, e.g. decompose create_schema_table in sql_show.cc into implementations virtual in Type_handler.
Additionally, we'll introduce a new version of Item::set_name() accepting LEX_CSTRING as a parameter:
void set_name(THD *thd, const LEX_CSTRING &str, CHARSET_INFO *cs= system_charset_info)
{
set_name(thd, str.str, str.length, cs);
}
and reuse it in a few places, especially in sql_show.cc , which has a lot calls like this:
field->set_name(thd, field_info->old_name,
strlen (field_info->old_name),
system_charset_info);
Also, let's add methods to ST_FIELD_INFO:
LEX_CSTRING get_name() const
{
return LEX_CSTRING({field_name, strlen (field_name)});
}
LEX_CSTRING get_old_name() const
{
return LEX_CSTRING({old_name, strlen (old_name)});
}
to reuse new set_name() easier.
blocks
MDEV-4912
Data type plugin API version 1
Closed
{"report":{"fcp":797.8999998569489,"ttfb":249.09999990463257,"pageVisibility":"visible","entityId":76201,"key":"jira.project.issue.view-issue","isInitial":true,"threshold":1000,"elementTimings":{},"userDeviceMemory":8,"userDeviceProcessors":64,"apdex":1,"journeyId":"023fb454-be20-4974-84c0-0c36ddaaeb40","navigationType":0,"readyForUser":922.7999999523163,"redirectCount":0,"resourceLoadedEnd":774,"resourceLoadedStart":254.5,"resourceTiming":[{"duration":132.39999985694885,"initiatorType":"link","name":"https://jira.mariadb.org/s/2c21342762a6a02add1c328bed317ffd-CDN/lu2bu7/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/css/_super/batch.css","startTime":254.5,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":254.5,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":386.89999985694885,"responseStart":0,"secureConnectionStart":0},{"duration":132.20000004768372,"initiatorType":"link","name":"https://jira.mariadb.org/s/7ebd35e77e471bc30ff0eba799ebc151-CDN/lu2bu7/820016/12ta74/8679b4946efa1a0bb029a3a22206fb5d/_/download/contextbatch/css/jira.browse.project,project.issue.navigator,jira.view.issue,jira.general,jira.global,atl.general,-_super/batch.css?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&slack-enabled=true","startTime":254.79999995231628,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":254.79999995231628,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":387,"responseStart":0,"secureConnectionStart":0},{"duration":142.59999990463257,"initiatorType":"script","name":"https://jira.mariadb.org/s/fbf975c0cce4b1abf04784eeae9ba1f4-CDN/lu2bu7/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/js/_super/batch.js?locale=en","startTime":254.79999995231628,"connectEnd":254.79999995231628,"connectStart":254.79999995231628,"domainLookupEnd":254.79999995231628,"domainLookupStart":254.79999995231628,"fetchStart":254.79999995231628,"redirectEnd":0,"redirectStart":0,"requestStart":254.79999995231628,"responseEnd":397.39999985694885,"responseStart":397.2999999523163,"secureConnectionStart":254.79999995231628},{"duration":219,"initiatorType":"script","name":"https://jira.mariadb.org/s/099b33461394b8015fc36c0a4b96e19f-CDN/lu2bu7/820016/12ta74/8679b4946efa1a0bb029a3a22206fb5d/_/download/contextbatch/js/jira.browse.project,project.issue.navigator,jira.view.issue,jira.general,jira.global,atl.general,-_super/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&locale=en&slack-enabled=true","startTime":255,"connectEnd":255,"connectStart":255,"domainLookupEnd":255,"domainLookupStart":255,"fetchStart":255,"redirectEnd":0,"redirectStart":0,"requestStart":255,"responseEnd":474,"responseStart":474,"secureConnectionStart":255},{"duration":222.40000009536743,"initiatorType":"script","name":"https://jira.mariadb.org/s/94c15bff32baef80f4096a08aceae8bc-CDN/lu2bu7/820016/12ta74/c92c0caa9a024ae85b0ebdbed7fb4bd7/_/download/contextbatch/js/atl.global,-_super/batch.js?locale=en","startTime":255.09999990463257,"connectEnd":255.09999990463257,"connectStart":255.09999990463257,"domainLookupEnd":255.09999990463257,"domainLookupStart":255.09999990463257,"fetchStart":255.09999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":255.09999990463257,"responseEnd":477.5,"responseStart":477.5,"secureConnectionStart":255.09999990463257},{"duration":223.40000009536743,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bu7/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-en/jira.webresources:calendar-en.js","startTime":255.19999980926514,"connectEnd":255.19999980926514,"connectStart":255.19999980926514,"domainLookupEnd":255.19999980926514,"domainLookupStart":255.19999980926514,"fetchStart":255.19999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":255.19999980926514,"responseEnd":478.59999990463257,"responseStart":478.59999990463257,"secureConnectionStart":255.19999980926514},{"duration":224.10000014305115,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bu7/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-localisation-moment/jira.webresources:calendar-localisation-moment.js","startTime":255.19999980926514,"connectEnd":255.19999980926514,"connectStart":255.19999980926514,"domainLookupEnd":255.19999980926514,"domainLookupStart":255.19999980926514,"fetchStart":255.19999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":255.19999980926514,"responseEnd":479.2999999523163,"responseStart":479.2999999523163,"secureConnectionStart":255.19999980926514},{"duration":224.70000004768372,"initiatorType":"link","name":"https://jira.mariadb.org/s/b04b06a02d1959df322d9cded3aeecc1-CDN/lu2bu7/820016/12ta74/a2ff6aa845ffc9a1d22fe23d9ee791fc/_/download/contextbatch/css/jira.global.look-and-feel,-_super/batch.css","startTime":255.29999995231628,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":255.29999995231628,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":480,"responseStart":0,"secureConnectionStart":0},{"duration":224.5,"initiatorType":"script","name":"https://jira.mariadb.org/rest/api/1.0/shortcuts/820016/47140b6e0a9bc2e4913da06536125810/shortcuts.js?context=issuenavigation&context=issueaction","startTime":255.5,"connectEnd":255.5,"connectStart":255.5,"domainLookupEnd":255.5,"domainLookupStart":255.5,"fetchStart":255.5,"redirectEnd":0,"redirectStart":0,"requestStart":255.5,"responseEnd":480,"responseStart":480,"secureConnectionStart":255.5},{"duration":225,"initiatorType":"link","name":"https://jira.mariadb.org/s/3ac36323ba5e4eb0af2aa7ac7211b4bb-CDN/lu2bu7/820016/12ta74/d176f0986478cc64f24226b3d20c140d/_/download/contextbatch/css/com.atlassian.jira.projects.sidebar.init,-_super,-project.issue.navigator,-jira.view.issue/batch.css?jira.create.linked.issue=true","startTime":255.59999990463257,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":255.59999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":480.59999990463257,"responseStart":0,"secureConnectionStart":0},{"duration":225.10000014305115,"initiatorType":"script","name":"https://jira.mariadb.org/s/3339d87fa2538a859872f2df449bf8d0-CDN/lu2bu7/820016/12ta74/d176f0986478cc64f24226b3d20c140d/_/download/contextbatch/js/com.atlassian.jira.projects.sidebar.init,-_super,-project.issue.navigator,-jira.view.issue/batch.js?jira.create.linked.issue=true&locale=en","startTime":255.69999980926514,"connectEnd":255.69999980926514,"connectStart":255.69999980926514,"domainLookupEnd":255.69999980926514,"domainLookupStart":255.69999980926514,"fetchStart":255.69999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":255.69999980926514,"responseEnd":480.7999999523163,"responseStart":480.7999999523163,"secureConnectionStart":255.69999980926514},{"duration":502.7999999523163,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bu7/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-js/jira.webresources:bigpipe-js.js","startTime":256.5,"connectEnd":256.5,"connectStart":256.5,"domainLookupEnd":256.5,"domainLookupStart":256.5,"fetchStart":256.5,"redirectEnd":0,"redirectStart":0,"requestStart":256.5,"responseEnd":759.2999999523163,"responseStart":759.2999999523163,"secureConnectionStart":256.5},{"duration":517.5,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bu7/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-init/jira.webresources:bigpipe-init.js","startTime":256.5,"connectEnd":256.5,"connectStart":256.5,"domainLookupEnd":256.5,"domainLookupStart":256.5,"fetchStart":256.5,"redirectEnd":0,"redirectStart":0,"requestStart":256.5,"responseEnd":774,"responseStart":774,"secureConnectionStart":256.5},{"duration":157.79999995231628,"initiatorType":"xmlhttprequest","name":"https://jira.mariadb.org/rest/webResources/1.0/resources","startTime":608,"connectEnd":608,"connectStart":608,"domainLookupEnd":608,"domainLookupStart":608,"fetchStart":608,"redirectEnd":0,"redirectStart":0,"requestStart":608,"responseEnd":765.7999999523163,"responseStart":765.7999999523163,"secureConnectionStart":608},{"duration":3.799999952316284,"initiatorType":"script","name":"https://www.google-analytics.com/analytics.js","startTime":776.7999999523163,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":776.7999999523163,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":780.5999999046326,"responseStart":0,"secureConnectionStart":0}],"fetchStart":0,"domainLookupStart":0,"domainLookupEnd":0,"connectStart":0,"connectEnd":0,"requestStart":18,"responseStart":249,"responseEnd":251,"domLoading":252,"domInteractive":984,"domContentLoadedEventStart":984,"domContentLoadedEventEnd":1024,"domComplete":1900,"loadEventStart":1900,"loadEventEnd":1901,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[{"name":"bigPipe.sidebar-id.start","time":963.1999998092651},{"name":"bigPipe.sidebar-id.end","time":964},{"name":"bigPipe.activity-panel-pipe-id.start","time":964.1999998092651},{"name":"bigPipe.activity-panel-pipe-id.end","time":966.5},{"name":"activityTabFullyLoaded","time":1035.5}],"measures":[],"correlationId":"d977e4a37f6807","effectiveType":"4g","downlink":10,"rtt":0,"serverDuration":172,"dbReadsTimeInMs":9,"dbConnsTimeInMs":15,"applicationHash":"9d11dbea5f4be3d4cc21f03a88dd11d8c8687422","experiments":[]}}