Details
-
Task
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
None
Description
We'll be replacing data type specific constants STRING_ITEM, INT_ITEM, REAL_ITEM, DECIMAL_ITEM, DATE_ITEM to LITERAL_ITEM soon (see MDEV-14630).
Under terms of this task we'll remove usage of STRING_ITEM in Item_func_date_format::fix_length_and_dec() by replacing this condition:
if (arg1->type() == STRING_ITEM) |
to
StringBuffer<STRING_BUFFER_USUAL_SIZE> buffer;
|
String *str;
|
if (args[1]->basic_const_item() && |
(str= args[1]->val_str(&buffer)))
|
The main point in this condition is to catch constants (literals and bound Item_param instances), so calling val_str() can be done directly in fix_length_and_dec() to calculate the result max_length more precisely.
As a good side effect, this change will allow constants of non-string types, to calculate max_length more precisely.
Attachments
Issue Links
- blocks
-
MDEV-4912 Data type plugin API version 1
-
- Closed
-
-
MDEV-14630 Replace {STRING|INT|REAL|DECIMAL|DATE}_ITEM to CONST_ITEM
-
- Closed
-
Activity
Field | Original Value | New Value |
---|---|---|
Link |
This issue blocks |
Description |
We'll be replacing data type specific constants STRING_ITEM, INT_ITEM, REAL_ITEM, DECIMAL_ITEM, DATE_ITEM to LITERAL_ITEM soon (see Under terms of this task we'll remove usage of {{STRING_ITEM}} in Item_func_date_format::fix_length_and_dec() by replacing this condition: {code:cpp} if (arg1->type() == STRING_ITEM) {code} to {code:cpp} StringBuffer<STRING_BUFFER_USUAL_SIZE> buffer; String *str; if (args[1]->basic_const_item() && (str= args[1]->val_str(&buffer))) {code} The main point in this condition is to catch constants (literals and bound Item_param), so calling {{val_str()}} can be done directly in {{fix_length_and_dec()}} to calculate the result {{max_length}} more precisely. As a good side effect, this change will allow constants of non-string types, to calculate {{max_length}} more precisely. |
We'll be replacing data type specific constants STRING_ITEM, INT_ITEM, REAL_ITEM, DECIMAL_ITEM, DATE_ITEM to LITERAL_ITEM soon (see Under terms of this task we'll remove usage of {{STRING_ITEM}} in Item_func_date_format::fix_length_and_dec() by replacing this condition: {code:cpp} if (arg1->type() == STRING_ITEM) {code} to {code:cpp} StringBuffer<STRING_BUFFER_USUAL_SIZE> buffer; String *str; if (args[1]->basic_const_item() && (str= args[1]->val_str(&buffer))) {code} The main point in this condition is to catch constants (literals and bound Item_param instances), so calling {{val_str()}} can be done directly in {{fix_length_and_dec()}} to calculate the result {{max_length}} more precisely. As a good side effect, this change will allow constants of non-string types, to calculate {{max_length}} more precisely. |
issue.field.resolutiondate | 2018-03-28 07:27:40.0 | 2018-03-28 07:27:40.345 |
Fix Version/s | 10.3.6 [ 23003 ] | |
Fix Version/s | 10.3 [ 22126 ] | |
Resolution | Fixed [ 1 ] | |
Status | Open [ 1 ] | Closed [ 6 ] |
Workflow | MariaDB v3 [ 86262 ] | MariaDB v4 [ 133510 ] |