bugfix: substr expr get wrong result length
This commit is contained in:
parent
bff45aaa70
commit
918714528b
@ -111,7 +111,7 @@ int ObExprSubstr::calc_result_length(ObExprResType *types_array,
|
||||
mbmaxlen = 1;
|
||||
}
|
||||
if (start_pos > 0 && substr_len > 0) {
|
||||
if (start_pos + substr_len <= result_len + 1) {
|
||||
if (start_pos <= INT64_MAX - substr_len && start_pos + substr_len <= result_len + 1) {
|
||||
if (is_oracle_mode) {
|
||||
res_len = substr_len * mbmaxlen;
|
||||
} else {
|
||||
|
@ -173,3 +173,37 @@ select substr(3.14159, 2.1, 2.1) from dual;
|
||||
+---------------------------+
|
||||
| .1 |
|
||||
+---------------------------+
|
||||
select substr(1, 1, 9223372036854775807);
|
||||
+-----------------------------------+
|
||||
| substr(1, 1, 9223372036854775807) |
|
||||
+-----------------------------------+
|
||||
| 1 |
|
||||
+-----------------------------------+
|
||||
select substr(123, 2, 9223372036854775806);
|
||||
+-------------------------------------+
|
||||
| substr(123, 2, 9223372036854775806) |
|
||||
+-------------------------------------+
|
||||
| 23 |
|
||||
+-------------------------------------+
|
||||
drop view if exists v1;
|
||||
create view v1 as select substr(123, 2, 9223372036854775807);
|
||||
desc v1;
|
||||
+-------------------------------------+------------+------+-----+---------+-------+
|
||||
| Field | Type | Null | Key | Default | Extra |
|
||||
+-------------------------------------+------------+------+-----+---------+-------+
|
||||
| substr(123, 2, 9223372036854775807) | varchar(2) | NO | | | |
|
||||
+-------------------------------------+------------+------+-----+---------+-------+
|
||||
select * from v1;
|
||||
+-------------------------------------+
|
||||
| substr(123, 2, 9223372036854775807) |
|
||||
+-------------------------------------+
|
||||
| 23 |
|
||||
+-------------------------------------+
|
||||
drop view v1;
|
||||
SELECT NULL ORDER BY SUBSTR ( 9223372036854775807 FROM @@ob_query_timeout FOR 9223372036854775807 );
|
||||
+------+
|
||||
| NULL |
|
||||
+------+
|
||||
| NULL |
|
||||
+------+
|
||||
|
||||
|
@ -47,5 +47,17 @@ select substr(3.14159, 2.9, 2.9) from dual;
|
||||
select substr(3.14159, 2.1, 2.1) from dual;
|
||||
--enable_warnings
|
||||
|
||||
# bug:
|
||||
select substr(1, 1, 9223372036854775807);
|
||||
select substr(123, 2, 9223372036854775806);
|
||||
--disable_warnings
|
||||
drop view if exists v1;
|
||||
--enable_warnings
|
||||
create view v1 as select substr(123, 2, 9223372036854775807);
|
||||
desc v1;
|
||||
select * from v1;
|
||||
drop view v1;
|
||||
SELECT NULL ORDER BY SUBSTR ( 9223372036854775807 FROM @@ob_query_timeout FOR 9223372036854775807 );
|
||||
|
||||
connection syscon;
|
||||
--sleep 2
|
||||
|
Loading…
x
Reference in New Issue
Block a user