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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
b3ee5e87
Commit
b3ee5e87
authored
May 11, 2007
by
holyfoot/hf@hfmain.(none)
Browse files
Options
Browse Files
Download
Plain Diff
Merge mysql.com:/home/hf/work/27921/my50-27921
into mysql.com:/home/hf/work/27921/my51-27921
parents
f646fb0b
d535add0
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
64 additions
and
22 deletions
+64
-22
mysql-test/r/view.result
mysql-test/r/view.result
+13
-0
sql/field.cc
sql/field.cc
+1
-2
sql/item_create.cc
sql/item_create.cc
+13
-7
sql/item_create.h
sql/item_create.h
+3
-3
sql/item_func.cc
sql/item_func.cc
+18
-1
sql/item_func.h
sql/item_func.h
+1
-1
sql/my_decimal.h
sql/my_decimal.h
+11
-0
sql/sql_yacc.yy
sql/sql_yacc.yy
+4
-8
No files found.
mysql-test/r/view.result
View file @
b3ee5e87
...
...
@@ -3346,6 +3346,19 @@ id select_type table type possible_keys key key_len ref rows Extra
NULL UNION RESULT <union1,2> ALL NULL NULL NULL NULL NULL Using filesort
DROP VIEW v1;
DROP TABLE t1;
CREATE VIEW v1 AS SELECT CAST( 1.23456789 AS DECIMAL( 7,5 ) ) AS col;
SELECT * FROM v1;
col
1.23457
DESCRIBE v1;
Field Type Null Key Default Extra
col decimal(7,5) NO 0.00000
DROP VIEW v1;
CREATE VIEW v1 AS SELECT CAST(1.23456789 AS DECIMAL(8,0)) AS col;
SHOW CREATE VIEW v1;
View Create View
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(1.23456789 as decimal(8,0)) AS `col`
DROP VIEW v1;
End of 5.0 tests.
DROP DATABASE IF EXISTS `d-1`;
CREATE DATABASE `d-1`;
...
...
sql/field.cc
View file @
b3ee5e87
...
...
@@ -8772,8 +8772,7 @@ bool create_field::init(THD *thd, char *fld_name, enum_field_types fld_type,
case
MYSQL_TYPE_NULL
:
break
;
case
MYSQL_TYPE_NEWDECIMAL
:
if
(
!
fld_length
&&
!
decimals
)
length
=
10
;
my_decimal_trim
(
&
length
,
&
decimals
);
if
(
length
>
DECIMAL_MAX_PRECISION
)
{
my_error
(
ER_TOO_BIG_PRECISION
,
MYF
(
0
),
length
,
fld_name
,
...
...
sql/item_create.cc
View file @
b3ee5e87
...
...
@@ -3916,6 +3916,7 @@ Create_func_master_pos_wait Create_func_master_pos_wait::s_singleton;
Item
*
Create_func_master_pos_wait
::
create_native
(
THD
*
thd
,
LEX_STRING
name
,
List
<
Item
>
*
item_list
)
{
Item
*
func
=
NULL
;
int
arg_count
=
0
;
...
...
@@ -3946,7 +3947,6 @@ Create_func_master_pos_wait::create_native(THD *thd, LEX_STRING name,
my_error
(
ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
,
MYF
(
0
),
name
.
str
);
break
;
}
}
return
func
;
}
...
...
@@ -4970,11 +4970,15 @@ find_qualified_function_builder(THD *thd)
return
&
Create_sp_func
::
s_singleton
;
}
Item
*
create_func_cast
(
THD
*
thd
,
Item
*
a
,
Cast_target
cast_type
,
int
len
,
int
dec
,
Item
*
create_func_cast
(
Item
*
a
,
Cast_target
cast_type
,
const
char
*
c_len
,
const
char
*
c_dec
,
CHARSET_INFO
*
cs
)
{
Item
*
res
;
ulong
len
;
uint
dec
;
LINT_INIT
(
res
);
switch
(
cast_type
)
{
...
...
@@ -4998,18 +5002,21 @@ create_func_cast(THD *thd, Item *a, Cast_target cast_type, int len, int dec,
break
;
case
ITEM_CAST_DECIMAL
:
{
int
tmp_len
=
(
len
>
0
)
?
len
:
10
;
if
(
tmp_len
<
dec
)
len
=
c_len
?
atoi
(
c_len
)
:
0
;
dec
=
c_dec
?
atoi
(
c_dec
)
:
0
;
my_decimal_trim
(
&
len
,
&
dec
);
if
(
len
<
dec
)
{
my_error
(
ER_M_BIGGER_THAN_D
,
MYF
(
0
),
""
);
return
0
;
}
res
=
new
(
thd
->
mem_root
)
Item_decimal_typecast
(
a
,
tmp_
len
,
dec
);
res
=
new
(
thd
->
mem_root
)
Item_decimal_typecast
(
a
,
len
,
dec
);
break
;
}
case
ITEM_CAST_CHAR
:
{
CHARSET_INFO
*
real_cs
=
(
cs
?
cs
:
thd
->
variables
.
collation_connection
);
len
=
c_len
?
atoi
(
c_len
)
:
-
1
;
res
=
new
(
thd
->
mem_root
)
Item_char_typecast
(
a
,
len
,
real_cs
);
break
;
}
...
...
@@ -5022,4 +5029,3 @@ create_func_cast(THD *thd, Item *a, Cast_target cast_type, int len, int dec,
}
return
res
;
}
sql/item_create.h
View file @
b3ee5e87
...
...
@@ -159,9 +159,9 @@ protected:
@param dec TODO
@param cs The character set
*/
Item
*
create_func_cast
(
THD
*
thd
,
Item
*
a
,
Cast_target
cast_type
,
int
len
,
int
dec
,
Item
*
create_func_cast
(
THD
*
thd
,
Item
*
a
,
Cast_target
cast_type
,
const
char
*
len
,
const
char
*
dec
,
CHARSET_INFO
*
cs
);
#endif
sql/item_func.cc
View file @
b3ee5e87
...
...
@@ -1080,9 +1080,26 @@ err:
void
Item_decimal_typecast
::
print
(
String
*
str
)
{
char
len_buf
[
20
*
3
+
1
];
char
*
end
;
CHARSET_INFO
*
cs
=
str
->
charset
();
uint
precision
=
my_decimal_length_to_precision
(
max_length
,
decimals
,
unsigned_flag
);
str
->
append
(
STRING_WITH_LEN
(
"cast("
));
args
[
0
]
->
print
(
str
);
str
->
append
(
STRING_WITH_LEN
(
" as decimal)"
));
str
->
append
(
STRING_WITH_LEN
(
" as decimal("
));
end
=
int10_to_str
(
precision
,
len_buf
,
10
);
str
->
append
(
len_buf
,
(
uint32
)
(
end
-
len_buf
));
str
->
append
(
','
);
end
=
int10_to_str
(
decimals
,
len_buf
,
10
);
str
->
append
(
len_buf
,
(
uint32
)
(
end
-
len_buf
));
str
->
append
(
')'
);
str
->
append
(
')'
);
}
...
...
sql/item_func.h
View file @
b3ee5e87
...
...
@@ -333,8 +333,8 @@ class Item_decimal_typecast :public Item_func
public:
Item_decimal_typecast
(
Item
*
a
,
int
len
,
int
dec
)
:
Item_func
(
a
)
{
max_length
=
len
+
2
;
decimals
=
dec
;
max_length
=
my_decimal_precision_to_length
(
len
,
dec
,
unsigned_flag
);
}
String
*
val_str
(
String
*
str
);
double
val_real
();
...
...
sql/my_decimal.h
View file @
b3ee5e87
...
...
@@ -395,5 +395,16 @@ int my_decimal_intg(const my_decimal *a)
}
void
my_decimal_trim
(
ulong
*
precision
,
uint
*
scale
)
{
if
(
!
(
*
precision
)
&&
!
(
*
scale
))
{
*
precision
=
10
;
*
scale
=
0
;
return
;
}
}
#endif
/*my_decimal_h*/
sql/sql_yacc.yy
View file @
b3ee5e87
...
...
@@ -6477,15 +6477,13 @@ simple_expr:
}
| BINARY simple_expr %prec NEG
{
$$= create_func_cast(YYTHD, $2, ITEM_CAST_CHAR,
-1, 0
,
$$= create_func_cast(YYTHD, $2, ITEM_CAST_CHAR,
NULL, NULL
,
&my_charset_bin);
}
| CAST_SYM '(' expr AS cast_type ')'
{
LEX *lex= Lex;
$$= create_func_cast(YYTHD, $3, $5,
lex->length ? atoi(lex->length) : -1,
lex->dec ? atoi(lex->dec) : 0,
$$= create_func_cast(YYTHD, $3, $5, lex->length, lex->dec,
lex->charset);
if (!$$)
MYSQL_YYABORT;
...
...
@@ -6494,10 +6492,8 @@ simple_expr:
{ $$= new (YYTHD->mem_root) Item_func_case(* $3, $2, $4 ); }
| CONVERT_SYM '(' expr ',' cast_type ')'
{
$$= create_func_cast(YYTHD, $3, $5,
Lex->length ? atoi(Lex->length) : -1,
Lex->dec ? atoi(Lex->dec) : 0,
Lex->charset);
$$= create_func_cast(YYTHD, $3, $5, Lex->length, Lex->dec,
Lex->charset);
if (!$$)
MYSQL_YYABORT;
}
...
...
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