Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
1023a084
Commit
1023a084
authored
Jul 15, 2003
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Merge abotchkov@bk-internal.mysql.com:/home/bk/mysql-4.1
into deer.(none):/home/hf/work/mysql-4.1.2way
parents
15fcd8dc
30087e06
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
36 additions
and
129 deletions
+36
-129
client/mysql.cc
client/mysql.cc
+7
-6
mysql-test/r/func_str.result
mysql-test/r/func_str.result
+2
-2
mysql-test/t/func_str.test
mysql-test/t/func_str.test
+2
-2
sql/item_func.cc
sql/item_func.cc
+12
-43
sql/item_func.h
sql/item_func.h
+1
-20
sql/item_strfunc.cc
sql/item_strfunc.cc
+8
-36
sql/item_strfunc.h
sql/item_strfunc.h
+1
-17
sql/item_timefunc.cc
sql/item_timefunc.cc
+1
-1
sql/sql_yacc.yy
sql/sql_yacc.yy
+2
-2
No files found.
client/mysql.cc
View file @
1023a084
...
...
@@ -1085,7 +1085,7 @@ static bool add_line(String &buffer,char *line,char *in_string,
out
=
line
;
}
}
else
if
(
*
ml_comment
&&
!*
in_string
&&
inchar
==
'*'
&&
*
(
pos
+
1
)
==
'/'
)
else
if
(
*
ml_comment
&&
inchar
==
'*'
&&
*
(
pos
+
1
)
==
'/'
)
{
pos
++
;
*
ml_comment
=
0
;
...
...
@@ -1093,11 +1093,12 @@ static bool add_line(String &buffer,char *line,char *in_string,
else
{
// Add found char to buffer
if
(
inchar
==
*
in_string
)
*
in_string
=
0
;
else
if
(
!*
in_string
&&
(
inchar
==
'\''
||
inchar
==
'"'
||
inchar
==
'`'
))
*
in_string
=
(
char
)
inchar
;
if
(
!
(
*
ml_comment
))
*
out
++
=
(
char
)
inchar
;
*
in_string
=
0
;
else
if
(
!*
ml_comment
&&
!*
in_string
&&
(
inchar
==
'\''
||
inchar
==
'"'
||
inchar
==
'`'
))
*
in_string
=
(
char
)
inchar
;
if
(
!*
ml_comment
)
*
out
++=
(
char
)
inchar
;
}
}
if
(
out
!=
line
||
!
buffer
.
is_empty
())
...
...
mysql-test/r/func_str.result
View file @
1023a084
...
...
@@ -297,9 +297,9 @@ select FIELD('b','A' COLLATE latin1_bin,'B');
FIELD('b','A' COLLATE latin1_bin,'B')
0
select FIELD(_latin2'b','A','B');
ERROR HY000: Illegal mix of collations for operation 'field'
ERROR HY000: Illegal mix of collations
(latin2_general_ci,COERCIBLE), (latin1_swedish_ci,COERCIBLE), (latin1_swedish_ci,COERCIBLE)
for operation 'field'
select FIELD('b',_latin2'A','B');
ERROR HY000: Illegal mix of collations for operation 'field'
ERROR HY000: Illegal mix of collations
(latin1_swedish_ci,COERCIBLE), (latin2_general_ci,COERCIBLE), (latin1_swedish_ci,COERCIBLE)
for operation 'field'
select FIELD('b',_latin2'A','B',1);
FIELD('b',_latin2'A','B',1)
1
...
...
mysql-test/t/func_str.test
View file @
1023a084
...
...
@@ -167,9 +167,9 @@ select FIELD('b','A','B');
select
FIELD
(
'B'
,
'A'
,
'B'
);
select
FIELD
(
'b'
COLLATE
latin1_bin
,
'A'
,
'B'
);
select
FIELD
(
'b'
,
'A'
COLLATE
latin1_bin
,
'B'
);
--
error
126
9
--
error
126
8
select
FIELD
(
_latin2
'b'
,
'A'
,
'B'
);
--
error
126
9
--
error
126
8
select
FIELD
(
'b'
,
_latin2
'A'
,
'B'
);
select
FIELD
(
'b'
,
_latin2
'A'
,
'B'
,
1
);
...
...
sql/item_func.cc
View file @
1023a084
...
...
@@ -1170,32 +1170,32 @@ longlong Item_func_field::val_int()
if
(
cmp_type
==
STRING_RESULT
)
{
String
*
field
;
if
(
!
(
field
=
item
->
val_str
(
&
value
)))
if
(
!
(
field
=
args
[
0
]
->
val_str
(
&
value
)))
return
0
;
// -1 if null ?
for
(
uint
i
=
0
;
i
<
arg_count
;
i
++
)
for
(
uint
i
=
1
;
i
<
arg_count
;
i
++
)
{
String
*
tmp_value
=
args
[
i
]
->
val_str
(
&
tmp
);
if
(
tmp_value
&&
field
->
length
()
==
tmp_value
->
length
()
&&
!
sortcmp
(
field
,
tmp_value
,
cmp_collation
.
collation
))
return
(
longlong
)
(
i
+
1
);
return
(
longlong
)
(
i
);
}
}
else
if
(
cmp_type
==
INT_RESULT
)
{
longlong
val
=
item
->
val_int
();
for
(
uint
i
=
0
;
i
<
arg_count
;
i
++
)
longlong
val
=
args
[
0
]
->
val_int
();
for
(
uint
i
=
1
;
i
<
arg_count
;
i
++
)
{
if
(
val
==
args
[
i
]
->
val_int
())
return
(
longlong
)
(
i
+
1
);
return
(
longlong
)
(
i
);
}
}
else
{
double
val
=
item
->
val
();
for
(
uint
i
=
0
;
i
<
arg_count
;
i
++
)
double
val
=
args
[
0
]
->
val
();
for
(
uint
i
=
1
;
i
<
arg_count
;
i
++
)
{
if
(
val
==
args
[
i
]
->
val
())
return
(
longlong
)
(
i
+
1
);
return
(
longlong
)
(
i
);
}
}
return
0
;
...
...
@@ -1204,42 +1204,11 @@ longlong Item_func_field::val_int()
void
Item_func_field
::
fix_length_and_dec
()
{
maybe_null
=
0
;
max_length
=
3
;
used_tables_cache
|=
item
->
used_tables
();
const_item_cache
&=
item
->
const_item
();
with_sum_func
=
with_sum_func
||
item
->
with_sum_func
;
cmp_type
=
item
->
result_type
();
for
(
uint
i
=
0
;
i
<
arg_count
;
i
++
)
cmp_type
=
args
[
0
]
->
result_type
();
for
(
uint
i
=
1
;
i
<
arg_count
;
i
++
)
cmp_type
=
item_cmp_type
(
cmp_type
,
args
[
i
]
->
result_type
());
if
(
cmp_type
==
STRING_RESULT
)
{
cmp_collation
.
set
(
item
->
collation
);
for
(
uint
i
=
0
;
i
<
arg_count
;
i
++
)
{
if
(
cmp_collation
.
aggregate
(
args
[
i
]
->
collation
))
{
my_error
(
ER_CANT_AGGREGATE_NCOLLATIONS
,
MYF
(
0
),
func_name
());
return
;
}
}
}
}
void
Item_func_field
::
split_sum_func
(
Item
**
ref_pointer_array
,
List
<
Item
>
&
fields
)
{
if
(
item
->
with_sum_func
&&
item
->
type
()
!=
SUM_FUNC_ITEM
)
item
->
split_sum_func
(
ref_pointer_array
,
fields
);
else
if
(
item
->
used_tables
()
||
item
->
type
()
==
SUM_FUNC_ITEM
)
{
uint
el
=
fields
.
elements
;
fields
.
push_front
(
item
);
ref_pointer_array
[
el
]
=
item
;
item
=
new
Item_ref
(
ref_pointer_array
+
el
,
0
,
item
->
name
);
}
Item_func
::
split_sum_func
(
ref_pointer_array
,
fields
);
agg_arg_collations_for_comparison
(
cmp_collation
,
args
,
arg_count
);
}
...
...
sql/item_func.h
View file @
1023a084
...
...
@@ -625,33 +625,14 @@ class Item_func_locate :public Item_int_func
class
Item_func_field
:
public
Item_int_func
{
Item
*
item
;
String
value
,
tmp
;
Item_result
cmp_type
;
DTCollation
cmp_collation
;
public:
Item_func_field
(
Item
*
a
,
List
<
Item
>
&
list
)
:
Item_int_func
(
list
),
item
(
a
)
{}
~
Item_func_field
()
{
delete
item
;
}
Item_func_field
(
List
<
Item
>
&
list
)
:
Item_int_func
(
list
)
{}
longlong
val_int
();
bool
fix_fields
(
THD
*
thd
,
struct
st_table_list
*
tlist
,
Item
**
ref
)
{
return
(
item
->
fix_fields
(
thd
,
tlist
,
&
item
)
||
item
->
check_cols
(
1
)
||
Item_func
::
fix_fields
(
thd
,
tlist
,
ref
));
}
void
split_sum_func
(
Item
**
ref_pointer_array
,
List
<
Item
>
&
fields
);
void
update_used_tables
()
{
item
->
update_used_tables
()
;
Item_func
::
update_used_tables
();
used_tables_cache
|=
item
->
used_tables
();
const_item_cache
&=
item
->
const_item
();
}
const
char
*
func_name
()
const
{
return
"field"
;
}
void
fix_length_and_dec
();
void
set_outer_resolving
()
{
item
->
set_outer_resolving
();
Item_int_func
::
set_outer_resolving
();
}
};
...
...
sql/item_strfunc.cc
View file @
1023a084
...
...
@@ -1660,81 +1660,53 @@ void Item_func_elt::fix_length_and_dec()
max_length
=
0
;
decimals
=
0
;
if
(
agg_arg_collations
(
collation
,
args
,
arg_count
))
if
(
agg_arg_collations
(
collation
,
args
+
1
,
arg_count
-
1
))
return
;
for
(
uint
i
=
0
;
i
<
arg_count
;
i
++
)
for
(
uint
i
=
1
;
i
<
arg_count
;
i
++
)
{
set_if_bigger
(
max_length
,
args
[
i
]
->
max_length
);
set_if_bigger
(
decimals
,
args
[
i
]
->
decimals
);
}
maybe_null
=
1
;
// NULL if wrong first arg
with_sum_func
=
with_sum_func
||
item
->
with_sum_func
;
used_tables_cache
|=
item
->
used_tables
();
const_item_cache
&=
item
->
const_item
();
}
void
Item_func_elt
::
split_sum_func
(
Item
**
ref_pointer_array
,
List
<
Item
>
&
fields
)
{
if
(
item
->
with_sum_func
&&
item
->
type
()
!=
SUM_FUNC_ITEM
)
item
->
split_sum_func
(
ref_pointer_array
,
fields
);
else
if
(
item
->
used_tables
()
||
item
->
type
()
==
SUM_FUNC_ITEM
)
{
uint
el
=
fields
.
elements
;
fields
.
push_front
(
item
);
ref_pointer_array
[
el
]
=
item
;
item
=
new
Item_ref
(
ref_pointer_array
+
el
,
0
,
item
->
name
);
}
Item_str_func
::
split_sum_func
(
ref_pointer_array
,
fields
);
}
void
Item_func_elt
::
update_used_tables
()
{
Item_func
::
update_used_tables
();
item
->
update_used_tables
();
used_tables_cache
|=
item
->
used_tables
();
const_item_cache
&=
item
->
const_item
();
}
double
Item_func_elt
::
val
()
{
uint
tmp
;
if
((
tmp
=
(
uint
)
item
->
val_int
())
==
0
||
tmp
>
arg_count
)
if
((
tmp
=
(
uint
)
args
[
0
]
->
val_int
())
==
0
||
tmp
>=
arg_count
)
{
null_value
=
1
;
return
0.0
;
}
null_value
=
0
;
return
args
[
tmp
-
1
]
->
val
();
return
args
[
tmp
]
->
val
();
}
longlong
Item_func_elt
::
val_int
()
{
uint
tmp
;
if
((
tmp
=
(
uint
)
item
->
val_int
())
==
0
||
tmp
>
arg_count
)
if
((
tmp
=
(
uint
)
args
[
0
]
->
val_int
())
==
0
||
tmp
>=
arg_count
)
{
null_value
=
1
;
return
0
;
}
null_value
=
0
;
return
args
[
tmp
-
1
]
->
val_int
();
return
args
[
tmp
]
->
val_int
();
}
String
*
Item_func_elt
::
val_str
(
String
*
str
)
{
uint
tmp
;
String
*
res
;
if
((
tmp
=
(
uint
)
item
->
val_int
())
==
0
||
tmp
>
arg_count
)
if
((
tmp
=
(
uint
)
args
[
0
]
->
val_int
())
==
0
||
tmp
>=
arg_count
)
{
null_value
=
1
;
return
NULL
;
}
null_value
=
0
;
res
=
args
[
tmp
-
1
]
->
val_str
(
str
);
res
=
args
[
tmp
]
->
val_str
(
str
);
res
->
set_charset
(
charset
());
return
res
;
}
...
...
sql/item_strfunc.h
View file @
1023a084
...
...
@@ -372,29 +372,13 @@ class Item_func_soundex :public Item_str_func
class
Item_func_elt
:
public
Item_str_func
{
Item
*
item
;
public:
Item_func_elt
(
Item
*
a
,
List
<
Item
>
&
list
)
:
Item_str_func
(
list
),
item
(
a
)
{}
~
Item_func_elt
()
{
delete
item
;
}
Item_func_elt
(
List
<
Item
>
&
list
)
:
Item_str_func
(
list
)
{}
double
val
();
longlong
val_int
();
String
*
val_str
(
String
*
str
);
bool
fix_fields
(
THD
*
thd
,
TABLE_LIST
*
tlist
,
Item
**
ref
)
{
return
(
item
->
fix_fields
(
thd
,
tlist
,
&
item
)
||
item
->
check_cols
(
1
)
||
Item_func
::
fix_fields
(
thd
,
tlist
,
ref
));
}
void
split_sum_func
(
Item
**
ref_pointer_array
,
List
<
Item
>
&
fields
);
void
fix_length_and_dec
();
void
update_used_tables
();
const
char
*
func_name
()
const
{
return
"elt"
;
}
void
set_outer_resolving
()
{
item
->
set_outer_resolving
();
Item_str_func
::
set_outer_resolving
();
}
};
...
...
sql/item_timefunc.cc
View file @
1023a084
...
...
@@ -380,7 +380,7 @@ longlong Item_func_time_to_sec::val_int()
static
bool
get_interval_value
(
Item
*
args
,
interval_type
int_type
,
String
*
str_value
,
INTERVAL
*
t
)
{
long
array
[
4
],
value
;
long
array
[
5
],
value
;
const
char
*
str
;
uint32
length
;
LINT_INIT
(
value
);
LINT_INIT
(
str
);
LINT_INIT
(
length
);
...
...
sql/sql_yacc.yy
View file @
1023a084
...
...
@@ -2389,7 +2389,7 @@ simple_expr:
| DAY_SYM '(' expr ')'
{ $$= new Item_func_dayofmonth($3); }
| ELT_FUNC '(' expr ',' expr_list ')'
{ $
$= new Item_func_elt($3,
*$5); }
{ $
5->push_front($3); $$= new Item_func_elt(
*$5); }
| MAKE_SET_SYM '(' expr ',' expr_list ')'
{ $$= new Item_func_make_set($3, *$5); }
| ENCRYPT '(' expr ')'
...
...
@@ -2427,7 +2427,7 @@ simple_expr:
$$= new Item_func_date_format (new Item_func_from_unixtime($3),$5,0);
}
| FIELD_FUNC '(' expr ',' expr_list ')'
{ $
$= new Item_func_field($3,
*$5); }
{ $
5->push_front($3); $$= new Item_func_field(
*$5); }
| GEOMFROMTEXT '(' expr ')'
{ $$= new Item_func_geometry_from_text($3); }
| GEOMFROMTEXT '(' expr ',' expr ')'
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment