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
8eddd4d4
Commit
8eddd4d4
authored
Dec 14, 2002
by
vva@eagle.mysql.r18.ru
Browse files
Options
Browse Files
Download
Plain Diff
Merge vvagin@work.mysql.com:/home/bk/mysql-4.1
into eagle.mysql.r18.ru:/home/vva/work/VARIANCE/4.1.clone
parents
4963f1c6
b624df72
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
128 additions
and
62 deletions
+128
-62
mysql-test/r/func_group.result
mysql-test/r/func_group.result
+20
-20
mysql-test/r/having.result
mysql-test/r/having.result
+4
-0
mysql-test/r/select.result
mysql-test/r/select.result
+8
-8
mysql-test/t/func_group.test
mysql-test/t/func_group.test
+5
-5
mysql-test/t/having.test
mysql-test/t/having.test
+1
-0
mysql-test/t/select.test
mysql-test/t/select.test
+2
-2
sql/item.cc
sql/item.cc
+1
-1
sql/item.h
sql/item.h
+2
-1
sql/item_sum.cc
sql/item_sum.cc
+33
-11
sql/item_sum.h
sql/item_sum.h
+45
-12
sql/lex.h
sql/lex.h
+1
-0
sql/sql_select.cc
sql/sql_select.cc
+3
-2
sql/sql_yacc.yy
sql/sql_yacc.yy
+3
-0
No files found.
mysql-test/r/func_group.result
View file @
8eddd4d4
...
...
@@ -42,21 +42,21 @@ insert into t1 values (null,null,'');
select count(distinct a),count(distinct grp) from t1;
count(distinct a) count(distinct grp)
6 3
select sum(a),count(a),avg(a),std(a),bit_or(a),bit_and(a),min(a),max(a),min(c),max(c) from t1;
sum(a) count(a) avg(a) std(a) bit_or(a) bit_and(a) min(a) max(a) min(c) max(c)
21 6 3.5000 1.7078 7 0 1 6 E
select grp, sum(a),count(a),avg(a),std(a),bit_or(a),bit_and(a),min(a),max(a),min(c),max(c) from t1 group by grp;
grp sum(a) count(a) avg(a) std(a) bit_or(a) bit_and(a) min(a) max(a) min(c) max(c)
NULL 0 0 NULL NULL 0 0 NULL NULL
1 1 1 1.0000 0.0000 1 1 1 1 a a
2 5 2 2.5000 0.5000 3 2 2 3 b c
3 15 3 5.0000 0.8165 7 4 4 6 C E
select grp, sum(a)+count(a)+avg(a)+std(a)+bit_or(a)+bit_and(a)+min(a)+max(a)+min(c)+max(c) as sum from t1 group by grp;
select sum(a),count(a),avg(a),std(a),
variance(a),
bit_or(a),bit_and(a),min(a),max(a),min(c),max(c) from t1;
sum(a) count(a) avg(a) std(a)
variance(a)
bit_or(a) bit_and(a) min(a) max(a) min(c) max(c)
21 6 3.5000 1.7078
2.9167
7 0 1 6 E
select grp, sum(a),count(a),avg(a),std(a),
variance(a),
bit_or(a),bit_and(a),min(a),max(a),min(c),max(c) from t1 group by grp;
grp sum(a) count(a) avg(a) std(a)
variance(a)
bit_or(a) bit_and(a) min(a) max(a) min(c) max(c)
NULL 0 0 NULL NULL
NULL
0 0 NULL NULL
1 1 1 1.0000 0.0000
0.0000
1 1 1 1 a a
2 5 2 2.5000 0.5000
0.2500
3 2 2 3 b c
3 15 3 5.0000 0.8165
0.6667
7 4 4 6 C E
select grp, sum(a)+count(a)+avg(a)+std(a)+
variance(a)+
bit_or(a)+bit_and(a)+min(a)+max(a)+min(c)+max(c) as sum from t1 group by grp;
grp sum
NULL NULL
1 7
2 20
3 4
4.816496580928
2 20
.25
3 4
5.483163247594
create table t2 (grp int, a bigint unsigned, c char(10));
insert into t2 select grp,max(a)+max(grp),max(c) from t1 group by grp;
replace into t2 select grp, a, c from t1 limit 2,1;
...
...
@@ -72,14 +72,14 @@ CREATE TABLE t1 (id int(11),value1 float(10,2));
INSERT INTO t1 VALUES (1,0.00),(1,1.00), (1,2.00), (2,10.00), (2,11.00), (2,12.00);
CREATE TABLE t2 (id int(11),name char(20));
INSERT INTO t2 VALUES (1,'Set One'),(2,'Set Two');
select id, avg(value1), std(value1) from t1 group by id;
id avg(value1) std(value1)
1 1.000000 0.816497
2 11.000000 0.816497
select name, avg(value1), std(value1) from t1, t2 where t1.id = t2.id group by t1.id;
name avg(value1) std(value1)
Set One 1.000000 0.816497
Set Two 11.000000 0.816497
select id, avg(value1), std(value1)
, variance(value1)
from t1 group by id;
id avg(value1) std(value1)
variance(value1)
1 1.000000 0.816497
0.666667
2 11.000000 0.816497
0.666667
select name, avg(value1), std(value1)
, variance(value1)
from t1, t2 where t1.id = t2.id group by t1.id;
name avg(value1) std(value1)
variance(value1)
Set One 1.000000 0.816497
0.666667
Set Two 11.000000 0.816497
0.666667
drop table t1,t2;
create table t1 (id int not null);
create table t2 (id int not null,rating int null);
...
...
mysql-test/r/having.result
View file @
8eddd4d4
...
...
@@ -62,4 +62,8 @@ select Fld1, max(Fld2) from t1 group by Fld1 having std(Fld2) is not null;
Fld1 max(Fld2)
1 20
3 50
select Fld1, max(Fld2) from t1 group by Fld1 having variance(Fld2) is not null;
Fld1 max(Fld2)
1 20
3 50
drop table t1;
mysql-test/r/select.result
View file @
8eddd4d4
...
...
@@ -2656,14 +2656,14 @@ companynr count(*)
58 23
53 4
50 11
select count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld1) from t2 where companynr = 34 and fld4<>"";
count(*) min(fld4) max(fld4) sum(fld1) avg(fld1) std(fld1)
70 absentee vest 17788966 254128.0857 3272.5940
select companynr,count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld1) from t2 group by companynr limit 3;
companynr count(*) min(fld4) max(fld4) sum(fld1) avg(fld1) std(fld1)
00 82 Anthony windmills 10355753 126289.6707 115550.9757
29 95 abut wetness 14473298 152350.5053 8368.5480
34 70 absentee vest 17788966 254128.0857 3272.5940
select count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld1)
,variance(fld1)
from t2 where companynr = 34 and fld4<>"";
count(*) min(fld4) max(fld4) sum(fld1) avg(fld1) std(fld1)
variance(fld1)
70 absentee vest 17788966 254128.0857 3272.5940
10709871.3069
select companynr,count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld1)
,variance(fld1)
from t2 group by companynr limit 3;
companynr count(*) min(fld4) max(fld4) sum(fld1) avg(fld1) std(fld1)
variance(fld1)
00 82 Anthony windmills 10355753 126289.6707 115550.9757
13352027981.7087
29 95 abut wetness 14473298 152350.5053 8368.5480
70032594.9026
34 70 absentee vest 17788966 254128.0857 3272.5940
10709871.3069
select companynr,t2nr,count(price),sum(price),min(price),max(price),avg(price) from t3 where companynr = 37 group by companynr,t2nr limit 10;
companynr t2nr count(price) sum(price) min(price) max(price) avg(price)
37 1 1 5987435 5987435 5987435 5987435.0000
...
...
mysql-test/t/func_group.test
View file @
8eddd4d4
...
...
@@ -21,9 +21,9 @@ select count(distinct a),count(distinct grp) from t1;
insert
into
t1
values
(
null
,
null
,
''
);
select
count
(
distinct
a
),
count
(
distinct
grp
)
from
t1
;
select
sum
(
a
),
count
(
a
),
avg
(
a
),
std
(
a
),
bit_or
(
a
),
bit_and
(
a
),
min
(
a
),
max
(
a
),
min
(
c
),
max
(
c
)
from
t1
;
select
grp
,
sum
(
a
),
count
(
a
),
avg
(
a
),
std
(
a
),
bit_or
(
a
),
bit_and
(
a
),
min
(
a
),
max
(
a
),
min
(
c
),
max
(
c
)
from
t1
group
by
grp
;
select
grp
,
sum
(
a
)
+
count
(
a
)
+
avg
(
a
)
+
std
(
a
)
+
bit_or
(
a
)
+
bit_and
(
a
)
+
min
(
a
)
+
max
(
a
)
+
min
(
c
)
+
max
(
c
)
as
sum
from
t1
group
by
grp
;
select
sum
(
a
),
count
(
a
),
avg
(
a
),
std
(
a
),
variance
(
a
),
bit_or
(
a
),
bit_and
(
a
),
min
(
a
),
max
(
a
),
min
(
c
),
max
(
c
)
from
t1
;
select
grp
,
sum
(
a
),
count
(
a
),
avg
(
a
),
std
(
a
),
variance
(
a
),
bit_or
(
a
),
bit_and
(
a
),
min
(
a
),
max
(
a
),
min
(
c
),
max
(
c
)
from
t1
group
by
grp
;
select
grp
,
sum
(
a
)
+
count
(
a
)
+
avg
(
a
)
+
std
(
a
)
+
variance
(
a
)
+
bit_or
(
a
)
+
bit_and
(
a
)
+
min
(
a
)
+
max
(
a
)
+
min
(
c
)
+
max
(
c
)
as
sum
from
t1
group
by
grp
;
create
table
t2
(
grp
int
,
a
bigint
unsigned
,
c
char
(
10
));
insert
into
t2
select
grp
,
max
(
a
)
+
max
(
grp
),
max
(
c
)
from
t1
group
by
grp
;
...
...
@@ -40,8 +40,8 @@ CREATE TABLE t1 (id int(11),value1 float(10,2));
INSERT
INTO
t1
VALUES
(
1
,
0.00
),(
1
,
1.00
),
(
1
,
2.00
),
(
2
,
10.00
),
(
2
,
11.00
),
(
2
,
12.00
);
CREATE
TABLE
t2
(
id
int
(
11
),
name
char
(
20
));
INSERT
INTO
t2
VALUES
(
1
,
'Set One'
),(
2
,
'Set Two'
);
select
id
,
avg
(
value1
),
std
(
value1
)
from
t1
group
by
id
;
select
name
,
avg
(
value1
),
std
(
value1
)
from
t1
,
t2
where
t1
.
id
=
t2
.
id
group
by
t1
.
id
;
select
id
,
avg
(
value1
),
std
(
value1
)
,
variance
(
value1
)
from
t1
group
by
id
;
select
name
,
avg
(
value1
),
std
(
value1
)
,
variance
(
value1
)
from
t1
,
t2
where
t1
.
id
=
t2
.
id
group
by
t1
.
id
;
drop
table
t1
,
t2
;
#
...
...
mysql-test/t/having.test
View file @
8eddd4d4
...
...
@@ -59,4 +59,5 @@ select Fld1, max(Fld2) as q from t1 group by Fld1 having q is not null;
select
Fld1
,
max
(
Fld2
)
from
t1
group
by
Fld1
having
max
(
Fld2
)
is
not
null
;
select
Fld1
,
max
(
Fld2
)
from
t1
group
by
Fld1
having
avg
(
Fld2
)
is
not
null
;
select
Fld1
,
max
(
Fld2
)
from
t1
group
by
Fld1
having
std
(
Fld2
)
is
not
null
;
select
Fld1
,
max
(
Fld2
)
from
t1
group
by
Fld1
having
variance
(
Fld2
)
is
not
null
;
drop
table
t1
;
mysql-test/t/select.test
View file @
8eddd4d4
...
...
@@ -1577,8 +1577,8 @@ select fld3 from t2 where (((fld3 like "_%L%" ) or (fld3 like "%ok%")) and ( fld
select
count
(
*
)
from
t1
;
select
companynr
,
count
(
*
),
sum
(
fld1
)
from
t2
group
by
companynr
;
select
companynr
,
count
(
*
)
from
t2
group
by
companynr
order
by
companynr
desc
limit
5
;
select
count
(
*
),
min
(
fld4
),
max
(
fld4
),
sum
(
fld1
),
avg
(
fld1
),
std
(
fld1
)
from
t2
where
companynr
=
34
and
fld4
<>
""
;
select
companynr
,
count
(
*
),
min
(
fld4
),
max
(
fld4
),
sum
(
fld1
),
avg
(
fld1
),
std
(
fld1
)
from
t2
group
by
companynr
limit
3
;
select
count
(
*
),
min
(
fld4
),
max
(
fld4
),
sum
(
fld1
),
avg
(
fld1
),
std
(
fld1
)
,
variance
(
fld1
)
from
t2
where
companynr
=
34
and
fld4
<>
""
;
select
companynr
,
count
(
*
),
min
(
fld4
),
max
(
fld4
),
sum
(
fld1
),
avg
(
fld1
),
std
(
fld1
)
,
variance
(
fld1
)
from
t2
group
by
companynr
limit
3
;
select
companynr
,
t2nr
,
count
(
price
),
sum
(
price
),
min
(
price
),
max
(
price
),
avg
(
price
)
from
t3
where
companynr
=
37
group
by
companynr
,
t2nr
limit
10
;
select
/*! SQL_SMALL_RESULT */
companynr
,
t2nr
,
count
(
price
),
sum
(
price
),
min
(
price
),
max
(
price
),
avg
(
price
)
from
t3
where
companynr
=
37
group
by
companynr
,
t2nr
limit
10
;
select
companynr
,
count
(
price
),
sum
(
price
),
min
(
price
),
max
(
price
),
avg
(
price
)
from
t3
group
by
companynr
;
...
...
sql/item.cc
View file @
8eddd4d4
...
...
@@ -727,7 +727,7 @@ void Item_avg_field::make_field(Send_field *tmp_field)
init_make_field
(
tmp_field
,
FIELD_TYPE_DOUBLE
);
}
void
Item_
std
_field
::
make_field
(
Send_field
*
tmp_field
)
void
Item_
variance
_field
::
make_field
(
Send_field
*
tmp_field
)
{
init_make_field
(
tmp_field
,
FIELD_TYPE_DOUBLE
);
}
...
...
sql/item.h
View file @
8eddd4d4
...
...
@@ -33,7 +33,8 @@ class Item {
enum
Type
{
FIELD_ITEM
,
FUNC_ITEM
,
SUM_FUNC_ITEM
,
STRING_ITEM
,
INT_ITEM
,
REAL_ITEM
,
NULL_ITEM
,
VARBIN_ITEM
,
COPY_STR_ITEM
,
FIELD_AVG_ITEM
,
DEFAULT_ITEM
,
PROC_ITEM
,
COND_ITEM
,
REF_ITEM
,
FIELD_STD_ITEM
,
CONST_ITEM
,
PROC_ITEM
,
COND_ITEM
,
REF_ITEM
,
FIELD_STD_ITEM
,
FIELD_VARIANCE_ITEM
,
CONST_ITEM
,
SUBSELECT_ITEM
,
ROW_ITEM
};
enum
cond_result
{
COND_UNDEF
,
COND_OK
,
COND_TRUE
,
COND_FALSE
};
...
...
sql/item_sum.cc
View file @
8eddd4d4
...
...
@@ -253,12 +253,24 @@ double Item_sum_avg::val()
** Standard deviation
*/
void
Item_sum_std
::
reset
()
double
Item_sum_std
::
val
()
{
sum
=
sum_sqr
=
0.0
;
count
=
0
;
(
void
)
Item_sum_std
::
add
();
double
tmp
=
Item_sum_variance
::
val
();
return
tmp
<=
0.0
?
0.0
:
sqrt
(
tmp
);
}
bool
Item_sum_std
::
add
()
/*
** variance
*/
void
Item_sum_variance
::
reset
()
{
sum
=
sum_sqr
=
0.0
;
count
=
0
;
(
void
)
Item_sum_variance
::
add
();
}
bool
Item_sum_variance
::
add
()
{
double
nr
=
args
[
0
]
->
val
();
if
(
!
args
[
0
]
->
null_value
)
...
...
@@ -270,7 +282,7 @@ bool Item_sum_std::add()
return
0
;
}
double
Item_sum_
std
::
val
()
double
Item_sum_
variance
::
val
()
{
if
(
!
count
)
{
...
...
@@ -281,11 +293,10 @@ double Item_sum_std::val()
/* Avoid problems when the precision isn't good enough */
double
tmp
=
ulonglong2double
(
count
);
double
tmp2
=
(
sum_sqr
-
sum
*
sum
/
tmp
)
/
tmp
;
return
tmp2
<=
0.0
?
0.0
:
sqrt
(
tmp2
)
;
return
tmp2
<=
0.0
?
0.0
:
tmp2
;
}
void
Item_sum_std
::
reset_field
()
void
Item_sum_variance
::
reset_field
()
{
double
nr
=
args
[
0
]
->
val
();
char
*
res
=
result_field
->
ptr
;
...
...
@@ -302,7 +313,7 @@ void Item_sum_std::reset_field()
}
}
void
Item_sum_
std
::
update_field
(
int
offset
)
void
Item_sum_
variance
::
update_field
(
int
offset
)
{
double
nr
,
old_nr
,
old_sqr
;
longlong
field_count
;
...
...
@@ -836,6 +847,17 @@ String *Item_avg_field::val_str(String *str)
}
Item_std_field
::
Item_std_field
(
Item_sum_std
*
item
)
:
Item_variance_field
(
item
)
{
}
double
Item_std_field
::
val
()
{
double
tmp
=
Item_variance_field
::
val
();
return
tmp
<=
0.0
?
0.0
:
sqrt
(
tmp
);
}
Item_variance_field
::
Item_variance_field
(
Item_sum_variance
*
item
)
{
name
=
item
->
name
;
decimals
=
item
->
decimals
;
...
...
@@ -844,7 +866,7 @@ Item_std_field::Item_std_field(Item_sum_std *item)
maybe_null
=
1
;
}
double
Item_
std
_field
::
val
()
double
Item_
variance
_field
::
val
()
{
double
sum
,
sum_sqr
;
longlong
count
;
...
...
@@ -860,10 +882,10 @@ double Item_std_field::val()
null_value
=
0
;
double
tmp
=
(
double
)
count
;
double
tmp2
=
(
sum_sqr
-
sum
*
sum
/
tmp
)
/
tmp
;
return
tmp2
<=
0.0
?
0.0
:
sqrt
(
tmp2
)
;
return
tmp2
<=
0.0
?
0.0
:
tmp2
;
}
String
*
Item_
std
_field
::
val_str
(
String
*
str
)
String
*
Item_
variance
_field
::
val_str
(
String
*
str
)
{
double
nr
=
val
();
if
(
null_value
)
...
...
sql/item_sum.h
View file @
8eddd4d4
...
...
@@ -27,7 +27,7 @@ class Item_sum :public Item_result_field
{
public:
enum
Sumfunctype
{
COUNT_FUNC
,
COUNT_DISTINCT_FUNC
,
SUM_FUNC
,
AVG_FUNC
,
MIN_FUNC
,
MAX_FUNC
,
UNIQUE_USERS_FUNC
,
STD_FUNC
,
SUM_BIT_FUNC
,
MAX_FUNC
,
UNIQUE_USERS_FUNC
,
STD_FUNC
,
VARIANCE_FUNC
,
SUM_BIT_FUNC
,
UDF_SUM_FUNC
};
Item
**
args
,
*
tmp_args
[
2
];
...
...
@@ -235,14 +235,14 @@ class Item_sum_avg :public Item_sum_num
const
char
*
func_name
()
const
{
return
"avg"
;
}
};
class
Item_sum_
std
;
class
Item_sum_
variance
;
class
Item_
std
_field
:
public
Item_result_field
class
Item_
variance
_field
:
public
Item_result_field
{
public:
Field
*
field
;
Item_
std_field
(
Item_sum_std
*
item
);
enum
Type
type
()
const
{
return
FIELD_STD
_ITEM
;
}
Item_
variance_field
(
Item_sum_variance
*
item
);
enum
Type
type
()
const
{
return
FIELD_VARIANCE
_ITEM
;
}
double
val
();
longlong
val_int
()
{
return
(
longlong
)
val
();
}
String
*
val_str
(
String
*
);
...
...
@@ -251,26 +251,59 @@ class Item_std_field :public Item_result_field
void
fix_length_and_dec
()
{}
};
class
Item_sum_std
:
public
Item_sum_num
/*
variance(a) =
= sqrt ( sum (ai - avg(a))^2 / count(a) )
= sqrt ( sum (ai^2 - 2*ai*avg(a) + avg(a)^2) / count(a) )
= sqrt ( (sum(ai^2) - sum(2*ai*avg(a)) + sum(avg(a)^2))/count(a) ) =
= sqrt ( (sum(ai^2) - 2*avg(a)*sum(a) + count(a)*avg(a)^2)/count(a) ) =
= sqrt ( (sum(ai^2) - 2*sum(a)*sum(a)/count(a) + count(a)*sum(a)^2/count(a)^2 )/count(a) ) =
= sqrt ( (sum(ai^2) - 2*sum(a)^2/count(a) + sum(a)^2/count(a) )/count(a) ) =
= sqrt ( (sum(ai^2) - sum(a)^2/count(a))/count(a) )
*/
class
Item_sum_variance
:
public
Item_sum_num
{
double
sum
;
double
sum_sqr
;
double
sum
,
sum_sqr
;
ulonglong
count
;
void
fix_length_and_dec
()
{
decimals
+=
4
;
maybe_null
=
1
;
}
public:
Item_sum_
std
(
Item
*
item_par
)
:
Item_sum_num
(
item_par
),
count
(
0
)
{}
enum
Sumfunctype
sum_func
()
const
{
return
STD
_FUNC
;
}
Item_sum_
variance
(
Item
*
item_par
)
:
Item_sum_num
(
item_par
),
count
(
0
)
{}
enum
Sumfunctype
sum_func
()
const
{
return
VARIANCE
_FUNC
;
}
void
reset
();
bool
add
();
double
val
();
void
reset_field
();
void
update_field
(
int
offset
);
Item
*
result_item
(
Field
*
field
)
{
return
new
Item_
std
_field
(
this
);
}
const
char
*
func_name
()
const
{
return
"
std
"
;
}
{
return
new
Item_
variance
_field
(
this
);
}
const
char
*
func_name
()
const
{
return
"
variance
"
;
}
};
class
Item_sum_std
;
class
Item_std_field
:
public
Item_variance_field
{
public:
Item_std_field
(
Item_sum_std
*
item
);
enum
Type
type
()
const
{
return
FIELD_STD_ITEM
;
}
double
val
();
};
class
Item_sum_std
:
public
Item_sum_variance
{
public:
Item_sum_std
(
Item
*
item_par
)
:
Item_sum_variance
(
item_par
){}
enum
Sumfunctype
sum_func
()
const
{
return
STD_FUNC
;
}
double
val
();
Item
*
result_item
(
Field
*
field
)
{
return
new
Item_std_field
(
this
);
}
const
char
*
func_name
()
const
{
return
"std"
;
}
};
// This class is a string or number function depending on num_func
...
...
sql/lex.h
View file @
8eddd4d4
...
...
@@ -585,6 +585,7 @@ static SYMBOL sql_functions[] = {
{
"UNIX_TIMESTAMP"
,
SYM
(
UNIX_TIMESTAMP
),
0
,
0
},
{
"UPPER"
,
SYM
(
FUNC_ARG1
),
0
,
CREATE_FUNC
(
create_func_ucase
)},
{
"USER"
,
SYM
(
USER
),
0
,
0
},
{
"VARIANCE"
,
SYM
(
VARIANCE_SYM
),
0
,
0
},
{
"VERSION"
,
SYM
(
FUNC_ARG0
),
0
,
CREATE_FUNC
(
create_func_version
)},
{
"WEEK"
,
SYM
(
WEEK_SYM
),
0
,
0
},
{
"WEEKDAY"
,
SYM
(
FUNC_ARG1
),
0
,
CREATE_FUNC
(
create_func_weekday
)},
...
...
sql/sql_select.cc
View file @
8eddd4d4
...
...
@@ -3783,13 +3783,14 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
else
return
new
Field_double
(
item_sum
->
max_length
,
maybe_null
,
item
->
name
,
table
,
item_sum
->
decimals
);
case
Item_sum
:
:
STD_FUNC
:
/* Place for sum & count */
case
Item_sum
:
:
VARIANCE_FUNC
:
/* Place for sum & count */
case
Item_sum
:
:
STD_FUNC
:
if
(
group
)
return
new
Field_string
(
sizeof
(
double
)
*
2
+
sizeof
(
longlong
),
maybe_null
,
item
->
name
,
table
,
my_charset_bin
);
else
return
new
Field_double
(
item_sum
->
max_length
,
maybe_null
,
item
->
name
,
table
,
item_sum
->
decimals
);
item
->
name
,
table
,
item_sum
->
decimals
);
case
Item_sum
:
:
UNIQUE_USERS_FUNC
:
return
new
Field_long
(
9
,
maybe_null
,
item
->
name
,
table
,
1
);
default:
...
...
sql/sql_yacc.yy
View file @
8eddd4d4
...
...
@@ -159,6 +159,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token SQL_THREAD
%token START_SYM
%token STD_SYM
%token VARIANCE_SYM
%token STOP_SYM
%token SUM_SYM
%token SUPER_SYM
...
...
@@ -2339,6 +2340,8 @@ sum_expr:
{ $$=new Item_sum_max($3); }
| STD_SYM '(' in_sum_expr ')'
{ $$=new Item_sum_std($3); }
| VARIANCE_SYM '(' in_sum_expr ')'
{ $$=new Item_sum_variance($3); }
| SUM_SYM '(' in_sum_expr ')'
{ $$=new Item_sum_sum($3); };
...
...
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