Type:
Task
Priority:
Major
Resolution:
Fixed
Field_str in an abstract class with this hierarchy:
Field_str [*]
Field_longstr
Field_string
Field_varstring [*]
Field_varstring_compressed
Field_blob [*]
Field_blob_compressed
Field_geom [*]
Field_null
Field_row
Field_enum [*]
Field_set
[*] marks classes that their own virtual is_equal() implementation.
Most Field_str descendants completeley override is_equal() and do not share the implementation on the Field_str level.
Only Field_string and Field_null share Field_str::is_equal() .
If we take a look inside Field_str::is_equal() , it actually implements behavior for CHAR .
Under term of this task we'll:
Move the code from Field_str::is_equal() to Field_string::is_equal()
Override Field_null::is_equal() to a simple implementation. The current shared implementation is too exsessive for Field_null , and is going to be even more complex under terms of MDEV-17301 . It can be simplified to something like this:
uint Field_null::is_equal(Create_field *new_field)
{
DBUG_ASSERT(!compression_method());
return new_field->type_handler() == type_handler() &&
new_field->charset == field_charset &&
new_field->length == max_display_length();
}
Remove the default unused implementation Field::is_equal() and define it as a zero pointer:
virtual uint is_equal(Create_field *new_field)= 0;
blocks
MDEV-17301
Change of COLLATE unnecessarily requires ALGORITHM=COPY
Closed
Alexander Barkov
made changes -
2019-04-19 02:59
Description
Field_str in an abstract class with this hierarchy:
{noformat}
Field_str [*]
Field_longstr
Field_string
Field_varstring [*]
Field_varstring_compressed
Field_blob [*]
Field_blob_compressed
Field_geom [*]
Field_null
Field_row
Field_enum [*]
Field_set
{noformat}
{{[*]}} marks classes that their own virtual {{is_equal()}} implementation.
Most {{Field_str}} descendants completeley override {{is_equal()}} and do not share the implementation on the {{Field_str}} level.
Only {{Field_string}} and {{Field_null}} share {{Field_str::is_equal()}}.
If we take a look inside {{Field_str::is_equal()}}, it actually implements behavior for {{CHAR}}.
Under term of this task we'll:
- Move the code from {{Field_str::is_equal()}} to {{Field_string::is_equal()}}
- Override {{Field_null::is_equal()}} to a simple implementation. The current shared implementation is too exsessive for {{Field_null}}, and is going to be even more complex under terms of MDEV-17301 . It can be simplified to something like this:
{code:sql}
uint Field_null::is_equal(Create_field *new_field)
{
DBUG_ASSERT(!compression_method());
return new_field->type_handler() == type_handler() &&
new_field->charset == field_charset &&
new_field->length == max_display_length();
}
{code}
Field_str in an abstract class with this hierarchy:
{noformat}
Field_str [*]
Field_longstr
Field_string
Field_varstring [*]
Field_varstring_compressed
Field_blob [*]
Field_blob_compressed
Field_geom [*]
Field_null
Field_row
Field_enum [*]
Field_set
{noformat}
{{[*]}} marks classes that their own virtual {{is_equal()}} implementation.
Most {{Field_str}} descendants completeley override {{is_equal()}} and do not share the implementation on the {{Field_str}} level.
Only {{Field_string}} and {{Field_null}} share {{Field_str::is_equal()}}.
If we take a look inside {{Field_str::is_equal()}}, it actually implements behavior for {{CHAR}}.
Under term of this task we'll:
- Move the code from {{Field_str::is_equal()}} to {{Field_string::is_equal()}}
- Override {{Field_null::is_equal()}} to a simple implementation. The current shared implementation is too exsessive for {{Field_null}}, and is going to be even more complex under terms of MDEV-17301 . It can be simplified to something like this:
{code:sql}
uint Field_null::is_equal(Create_field *new_field)
{
DBUG_ASSERT(!compression_method());
return new_field->type_handler() == type_handler() &&
new_field->charset == field_charset &&
new_field->length == max_display_length();
}
{code}
- Remove the default unused implementation {{Field::is_equal()}} and define it as a zero pointer:
{code:sql}
virtual uint is_equal(Create_field *new_field)= 0;
{code}
Alexander Barkov
made changes -
2019-04-19 03:54
issue.field.resolutiondate
2019-04-19 03:54:44.0
2019-04-19 03:54:44.315
Alexander Barkov
made changes -
2019-04-19 03:54
Fix Version/s
10.4.5
[ 23311
]
Fix Version/s
10.4
[ 22408
]
Resolution
Fixed
[ 1
]
Status
Open
[ 1
]
Closed
[ 6
]
Sergei Golubchik
made changes -
2021-12-06 21:24
Workflow
MariaDB v3
[ 96209
]
MariaDB v4
[ 133934
]
{"report":{"fcp":940.9000005722046,"ttfb":322.9000005722046,"pageVisibility":"visible","entityId":75456,"key":"jira.project.issue.view-issue","isInitial":true,"threshold":1000,"elementTimings":{},"userDeviceMemory":8,"userDeviceProcessors":64,"apdex":0.5,"journeyId":"496e30b6-5892-40c7-bcd1-c7d657ffb774","navigationType":0,"readyForUser":1096.1999998092651,"redirectCount":0,"resourceLoadedEnd":682.5,"resourceLoadedStart":331.4000005722046,"resourceTiming":[{"duration":22.299999237060547,"initiatorType":"link","name":"https://jira.mariadb.org/s/2c21342762a6a02add1c328bed317ffd-CDN/lu2bv2/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/css/_super/batch.css","startTime":331.4000005722046,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":331.4000005722046,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":353.69999980926514,"responseStart":0,"secureConnectionStart":0},{"duration":23.09999942779541,"initiatorType":"link","name":"https://jira.mariadb.org/s/7ebd35e77e471bc30ff0eba799ebc151-CDN/lu2bv2/820016/12ta74/2380add21a9a1006587582385952de73/_/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":331.6000003814697,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":331.6000003814697,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":354.69999980926514,"responseStart":0,"secureConnectionStart":0},{"duration":179,"initiatorType":"script","name":"https://jira.mariadb.org/s/e9b27a47da5fb0f74a35acd57e9847fb-CDN/lu2bv2/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/js/_super/batch.js?locale=en","startTime":331.80000019073486,"connectEnd":331.80000019073486,"connectStart":331.80000019073486,"domainLookupEnd":331.80000019073486,"domainLookupStart":331.80000019073486,"fetchStart":331.80000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":357.30000019073486,"responseEnd":510.80000019073486,"responseStart":383.5,"secureConnectionStart":331.80000019073486},{"duration":303.30000019073486,"initiatorType":"script","name":"https://jira.mariadb.org/s/c32eb0da7ad9831253f8397e6cc26afd-CDN/lu2bv2/820016/12ta74/2380add21a9a1006587582385952de73/_/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":332,"connectEnd":332,"connectStart":332,"domainLookupEnd":332,"domainLookupStart":332,"fetchStart":332,"redirectEnd":0,"redirectStart":0,"requestStart":356.69999980926514,"responseEnd":635.3000001907349,"responseStart":379.80000019073486,"secureConnectionStart":332},{"duration":59.10000038146973,"initiatorType":"script","name":"https://jira.mariadb.org/s/bc0bcb146314416123c992714ee00ff7-CDN/lu2bv2/820016/12ta74/c92c0caa9a024ae85b0ebdbed7fb4bd7/_/download/contextbatch/js/atl.global,-_super/batch.js?locale=en","startTime":332.19999980926514,"connectEnd":332.19999980926514,"connectStart":332.19999980926514,"domainLookupEnd":332.19999980926514,"domainLookupStart":332.19999980926514,"fetchStart":332.19999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":358.1000003814697,"responseEnd":391.30000019073486,"responseStart":385.80000019073486,"secureConnectionStart":332.19999980926514},{"duration":60.79999923706055,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bv2/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-en/jira.webresources:calendar-en.js","startTime":332.4000005722046,"connectEnd":332.4000005722046,"connectStart":332.4000005722046,"domainLookupEnd":332.4000005722046,"domainLookupStart":332.4000005722046,"fetchStart":332.4000005722046,"redirectEnd":0,"redirectStart":0,"requestStart":360.4000005722046,"responseEnd":393.19999980926514,"responseStart":387.1000003814697,"secureConnectionStart":332.4000005722046},{"duration":63.5,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bv2/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-localisation-moment/jira.webresources:calendar-localisation-moment.js","startTime":332.6000003814697,"connectEnd":332.6000003814697,"connectStart":332.6000003814697,"domainLookupEnd":332.6000003814697,"domainLookupStart":332.6000003814697,"fetchStart":332.6000003814697,"redirectEnd":0,"redirectStart":0,"requestStart":360.80000019073486,"responseEnd":396.1000003814697,"responseStart":391.5,"secureConnectionStart":332.6000003814697},{"duration":27.200000762939453,"initiatorType":"link","name":"https://jira.mariadb.org/s/b04b06a02d1959df322d9cded3aeecc1-CDN/lu2bv2/820016/12ta74/a2ff6aa845ffc9a1d22fe23d9ee791fc/_/download/contextbatch/css/jira.global.look-and-feel,-_super/batch.css","startTime":332.69999980926514,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":332.69999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":359.9000005722046,"responseStart":0,"secureConnectionStart":0},{"duration":63.80000019073486,"initiatorType":"script","name":"https://jira.mariadb.org/rest/api/1.0/shortcuts/820016/47140b6e0a9bc2e4913da06536125810/shortcuts.js?context=issuenavigation&context=issueaction","startTime":333,"connectEnd":333,"connectStart":333,"domainLookupEnd":333,"domainLookupStart":333,"fetchStart":333,"redirectEnd":0,"redirectStart":0,"requestStart":365.9000005722046,"responseEnd":396.80000019073486,"responseStart":393.4000005722046,"secureConnectionStart":333},{"duration":31.300000190734863,"initiatorType":"link","name":"https://jira.mariadb.org/s/3ac36323ba5e4eb0af2aa7ac7211b4bb-CDN/lu2bv2/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":333.19999980926514,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":333.19999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":364.5,"responseStart":0,"secureConnectionStart":0},{"duration":64.60000038146973,"initiatorType":"script","name":"https://jira.mariadb.org/s/719848dd97ebe0663199f49a3936487a-CDN/lu2bv2/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":333.30000019073486,"connectEnd":333.30000019073486,"connectStart":333.30000019073486,"domainLookupEnd":333.30000019073486,"domainLookupStart":333.30000019073486,"fetchStart":333.30000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":368.1000003814697,"responseEnd":397.9000005722046,"responseStart":394.19999980926514,"secureConnectionStart":333.30000019073486},{"duration":347.6000003814697,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bv2/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-js/jira.webresources:bigpipe-js.js","startTime":334.19999980926514,"connectEnd":334.19999980926514,"connectStart":334.19999980926514,"domainLookupEnd":334.19999980926514,"domainLookupStart":334.19999980926514,"fetchStart":334.19999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":490.30000019073486,"responseEnd":681.8000001907349,"responseStart":674.6999998092651,"secureConnectionStart":334.19999980926514},{"duration":348.30000019073486,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bv2/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-init/jira.webresources:bigpipe-init.js","startTime":334.19999980926514,"connectEnd":334.19999980926514,"connectStart":334.19999980926514,"domainLookupEnd":334.19999980926514,"domainLookupStart":334.19999980926514,"fetchStart":334.19999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":510.6000003814697,"responseEnd":682.5,"responseStart":677.5,"secureConnectionStart":334.19999980926514},{"duration":148.5,"initiatorType":"xmlhttprequest","name":"https://jira.mariadb.org/rest/webResources/1.0/resources","startTime":648.8000001907349,"connectEnd":648.8000001907349,"connectStart":648.8000001907349,"domainLookupEnd":648.8000001907349,"domainLookupStart":648.8000001907349,"fetchStart":648.8000001907349,"redirectEnd":0,"redirectStart":0,"requestStart":750.5,"responseEnd":797.3000001907349,"responseStart":796.3000001907349,"secureConnectionStart":648.8000001907349},{"duration":254.29999923706055,"initiatorType":"xmlhttprequest","name":"https://jira.mariadb.org/rest/webResources/1.0/resources","startTime":884.9000005722046,"connectEnd":884.9000005722046,"connectStart":884.9000005722046,"domainLookupEnd":884.9000005722046,"domainLookupStart":884.9000005722046,"fetchStart":884.9000005722046,"redirectEnd":0,"redirectStart":0,"requestStart":1073.1000003814697,"responseEnd":1139.1999998092651,"responseStart":1135.1999998092651,"secureConnectionStart":884.9000005722046},{"duration":216.10000038146973,"initiatorType":"script","name":"https://www.google-analytics.com/analytics.js","startTime":932.1999998092651,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":932.1999998092651,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":1148.3000001907349,"responseStart":0,"secureConnectionStart":0}],"fetchStart":0,"domainLookupStart":0,"domainLookupEnd":0,"connectStart":0,"connectEnd":0,"requestStart":124,"responseStart":323,"responseEnd":329,"domLoading":326,"domInteractive":1180,"domContentLoadedEventStart":1180,"domContentLoadedEventEnd":1243,"domComplete":1629,"loadEventStart":1629,"loadEventEnd":1629,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[{"name":"bigPipe.sidebar-id.start","time":1155},{"name":"bigPipe.sidebar-id.end","time":1155.8000001907349},{"name":"bigPipe.activity-panel-pipe-id.start","time":1156},{"name":"bigPipe.activity-panel-pipe-id.end","time":1158.1000003814697},{"name":"activityTabFullyLoaded","time":1259.3000001907349}],"measures":[],"correlationId":"1947894a96566e","effectiveType":"4g","downlink":9.2,"rtt":0,"serverDuration":111,"dbReadsTimeInMs":17,"dbConnsTimeInMs":25,"applicationHash":"9d11dbea5f4be3d4cc21f03a88dd11d8c8687422","experiments":[]}}