system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/exec.sh -n dnode1 -s start
sql connect

$dbPrefix = m_func_db
$tbPrefix = m_func_tb
$mtPrefix = m_func_mt

$tbNum = 10
$rowNum = 5
$totalNum = $tbNum * $rowNum
$ts0 = 1537146000000
$delta = 600000
print ========== alter.sim
$i = 0
$db = $dbPrefix . $i
$mt = $mtPrefix . $i

sql drop database if exists $db
sql create database $db keep 36500
sql use $db

print =====================================> td-4481
sql create database $db

print =====================================> test case for twa in single block

sql create table t1 (ts timestamp, k float);
sql insert into t1 values('2015-08-18 00:00:00', 2.064);
sql insert into t1 values('2015-08-18 00:06:00', 2.116);
sql insert into t1 values('2015-08-18 00:12:00', 2.028);
sql insert into t1 values('2015-08-18 00:18:00', 2.126);
sql insert into t1 values('2015-08-18 00:24:00', 2.041);
sql insert into t1 values('2015-08-18 00:30:00', 2.051);

sql select twa(k),avg(k),count(1) from t1 where ts>='2015-8-18 00:00:00' and ts<='2015-8-18 00:05:00'
if $rows != 1 then
  return -1
endi
if $data00 != 2.063999891 then
  return -1
endi
if $data01 != 2.063999891 then
  return -1
endi
if $data02 != 1 then
  return -1
endi

sql select twa(k),avg(k),count(1) from t1 where ts>='2015-8-18 00:00:00' and ts<='2015-8-18 00:07:00'
if $rows != 1 then
  return -1
endi
if $data00 != 2.089999914 then
  return -1
endi
if $data01 != 2.089999914 then
  return -1
endi
if $data02 != 2 then
  return -1
endi

sql select _wstart, twa(k),avg(k),count(1) from t1 where ts>='2015-8-18 00:00:00' and ts<='2015-8-18 00:07:00' interval(1m)
if $rows != 2 then
  return -1
endi
if $data00 != @15-08-18 00:00:00.000@ then
  return -1
endi
if $data01 != 2.068333156 then
  print expect 2.068333156, actual: $data01
  return -1
endi
if $data02 != 2.063999891 then
  return -1
endi
if $data03 != 1 then
  return -1
endi
if $data10 != @15-08-18 00:06:00.000@ then
  return -1
endi
if $data11 != 2.115999937 then
  return -1
endi
if $data12 != 2.115999937 then
  return -1
endi
if $data13 != 1 then
  return -1
endi

sql select _wstart, twa(k),avg(k),count(1) from t1 where ts>='2015-8-18 00:00:00' and ts<='2015-8-18 00:07:00' interval(1m)
print $data00 $data01 $data02 $data03 $data04 $data05 $data06
print $data10 $data11 $data12 $data13 $data14 $data15 $data16
print $data20 $data21 $data22 $data23 $data24 $data25 $data26
if $rows != 2 then
 return -1
endi
if $data10 != @15-08-18 00:06:00.000@ then
  return -1
endi
if $data11 != 2.115999937 then
  return -1
endi
if $data12 != 2.115999937 then
  return -1
endi
if $data13 != 1 then
  return -1
endi
if $data01 != 2.068333156 then
  return -1
endi

sql select _wstart, twa(k),avg(k),count(1) from t1 where ts>='2015-8-18 00:00:00' and ts<='2015-8-18 00:27:00' interval(10m)
if $rows != 3 then
 return -1
endi
if $data01 != 2.088666666 then
 return -1
endi
if $data02 != 2.089999914 then
 return -1
endi
if $data03 != 2 then
  return -1
endi
if $data11 != 2.077099980 then
  print expect 2.077099980, actual: $data11
  return -1
endi
if $data12 != 2.077000022 then
  return -1
endi
if $data13 != 2 then
  return -1
endi
if $data21 != 2.069333235 then
  return -1
endi
if $data22 != 2.040999889 then
  return -1
endi
if $data23 != 1 then
  return -1
endi

sql select _wstart, twa(k),avg(k),count(1) from t1 where ts>='2015-8-18 00:00:00' and ts<='2015-8-18 00:27:00' interval(10m)
if $rows != 3 then
  return -1
endi
if $data21 != 2.069333235 then
  return -1
endi
if $data11 != 2.077099980 then
  return -1
endi
if $data01 != 2.088666666 then
  return -1
endi

sql select twa(k),avg(k),count(1) from t1 where ts>='2015-8-18 00:00:00' and ts<='2015-8-18 00:30:00'
if $data00 != 2.073699975 then
  return -1
endi
if $data01 != 2.070999980 then
  return -1
endi
if $data02 != 6 then
  return -1
endi

sql select twa(k),avg(k),count(1) from t1 where ts>='2015-8-18 00:00:00' and ts<='2015-8-18 00:30:00'
if $rows != 1 then
  return -1
endi
if $data00 != 2.073699975 then
  return -1
endi
if $data01 != 2.070999980 then
  return -1
endi
if $data02 != 6 then
  return -1
endi

sql select twa(k) from t1 where ts>'2015-8-18 00:00:00' and ts<'2015-8-18 00:00:1'
if $rows != 0 then
  return -1
endi

sql select twa(k),avg(k),count(1) from t1 where ts>='2015-8-18 00:00:00' and ts<='2015-8-18 00:30:00' interval(10m)
sql select twa(k),avg(k),count(1) from t1 where ts>='2015-8-18 00:00:00' and ts<='2015-8-18 00:30:00' interval(10m)

#todo add test case while column filter exists for twa query

#sql select count(*),TWA(k) from tm0 where ts>='1970-1-1 13:43:00' and ts<='1970-1-1 13:44:10' interval(9s)

sql create table tm0 (ts timestamp, k float);
sql insert into tm0 values(100000000, 5);
sql insert into tm0 values(100003000, -9);
sql select twa(k) from tm0 where ts<now
if $rows != 1 then
  return -1
endi

if $data00 != -2.000000000 then
  print expect -2.000000000, actual: $data00
  return -1
endi

sql create table tm1 (ts timestamp,  k int);
sql insert into tm1 values('2020-10-30 18:11:56.680', -1000);
sql insert into tm1 values('2020-11-19 18:11:45.773', NULL);
sql insert into tm1 values('2020-12-09 18:11:17.098', NULL);
sql insert into tm1 values('2020-12-20 18:11:49.412', 1);
sql insert into tm1 values('2020-12-23 18:11:50.412', 2);
sql insert into tm1 values('2020-12-28 18:11:52.412', 3);

print =====================> td-2610
sql select twa(k)from tm1 where ts>='2020-11-19 18:11:45.773' and ts<='2020-12-9 18:11:17.098'
if $rows != 1 then
 return -1
endi
if $data00 != NULL then
  return -1
endi

print =====================> td-2609
sql select apercentile(k, 50) from tm1 where ts>='2020-10-30 18:11:56.680' and ts<='2020-12-09 18:11:17.098'
if $rows != 1 then
  return -1
endi
if $data00 != -1000.000000000 then
  return -1
endi

system sh/exec.sh -n dnode1 -s stop -x SIGINT
system sh/exec.sh -n dnode1 -s start
print ================== server restart completed
sql connect

sql use m_func_db0

print =====================> td-2583
sql select min(k) from tm1 where ts>='2020-11-19 18:11:45.773' and ts<='2020-12-20 18:11:49.412'
if $rows != 1 then
  return -1
endi
if $data00 != 1 then
  print expect 1, actual: $data00
  return -1
endi

print =====================> td-2601
sql select count(*) from tm1 where ts<='2020-6-1 00:00:00' and ts>='2020-1-1 00:00:00' interval(1n) fill(NULL)
if $rows != 0 then
  return -1
endi

print =====================> td-2615
sql select last(ts) from tm1 interval(17a) limit 776 offset 3
if $rows != 3 then
  return -1
endi
sql select last(ts) from tm1 interval(17a) limit 1000 offset 4
if $rows != 2 then
  return -1
endi
sql select last(ts) from tm1 interval(17a) order by ts desc limit 1000 offset 0
if $rows != 6 then
  return -1
endi

print =============================> TD-6086
sql create stable td6086st(ts timestamp, d double) tags(t nchar(50));
sql create table td6086ct1 using td6086st tags("ct1");
sql create table td6086ct2 using td6086st tags("ct2");

sql SELECT LAST(d),t FROM td6086st WHERE tbname in ('td6086ct1', 'td6086ct2') and ts>="2019-07-30 00:00:00" and ts<="2021-08-31 00:00:00" partition BY tbname interval(1800s) fill(prev);

print ==================> td-2624
sql create table tm2(ts timestamp, k int, b binary(12));
sql insert into tm2 values('2011-01-02 18:42:45.326',      -1,'abc');
sql insert into tm2 values('2020-07-30 17:44:06.283',       0, null);
sql insert into tm2 values('2020-07-30 17:44:19.578', 9999999, null);
sql insert into tm2 values('2020-07-30 17:46:06.417',    NULL, null);
sql insert into tm2 values('2020-11-09 18:42:25.538',       0, null);
sql insert into tm2 values('2020-12-29 17:43:11.641',       0, null);
sql insert into tm2 values('2020-12-29 18:43:17.129',       0, null);
sql insert into tm2 values('2020-12-29 18:46:19.109',    NULL, null);
sql insert into tm2 values('2021-01-03 18:40:40.065',       0, null);

sql select _wstart, twa(k),first(ts) from tm2 where k <50 interval(17s);
if $rows != 6 then
  return -1
endi
if $data00 != @11-01-02 18:42:42.000@ then
  return -1
endi
if $data02 != @11-01-02 18:42:45.326@ then
  return -1
endi
if $data10 != @20-07-30 17:43:59.000@ then
  return -1
endi
if $data21 != 0.000000000 then
  return -1
endi

sql select twa(k),first(ts) from tm2 where k <50 interval(17s);
if $rows != 6 then
  return -1
endi

sql select _wstart, twa(k),first(ts),count(k),first(k) from tm2 interval(17s) limit 20 offset 0;
if $rows != 9 then
  return -1
endi
if $data00 != @11-01-02 18:42:42.000@ then
  return -1
endi
if $data10 != @20-07-30 17:43:59.000@ then
  return -1
endi

print =================>td-2610
sql select stddev(k) from tm2 where ts='2020-12-29 18:46:19.109'
if $rows != 1 then
  print expect 1, actual:$rows
  return -1
endi
sql select twa(k) from tm2 where ts='2020-12-29 18:46:19.109'
if $rows != 1 then
  return -1
endi
if $data00 != NULL then
  return -1
endi

print ========================> TD-1787
sql create table cars(ts timestamp, c int) tags(id int);
sql create table car1 using cars tags(1);
sql create table car2 using cars tags(2);
sql insert into car1 (ts, c) values (now,1) car2(ts, c) values(now, 2);
sql drop table cars;
sql create table cars(ts timestamp, c int) tags(id int);
sql create table car1 using cars tags(1);
sql create table car2 using cars tags(2);
sql insert into car1 (ts, c) values (now,1) car2(ts, c) values(now, 2);

print ========================> TD-2700
sql create table tx(ts timestamp, k int);
sql insert into tx values(1500000001000, 0);
sql select sum(k) from tx interval(1d) sliding(1h);
if $rows != 24 then
  print expect 24, actual:$rows
  return -1
endi

print ========================> TD-3948
sql drop table if exists meters
sql create stable meters (ts timestamp, current float, voltage int, phase float) tags (location binary(64), groupId int);
sql_error insert into td3948Err1(phase) using meters tags ("Beijng.Chaoyang", 2) (ts, current) values (now, 10.2);
sql_error insert into td3948Err2(phase, voltage) using meters tags ("Beijng.Chaoyang", 2) (ts, current) values (now, 10.2);
sql_error insert into td3948Err3(phase, current) using meters tags ("Beijng.Chaoyang", 2) (ts, current) values (now, 10.2);
sql insert into td3948 using meters tags ("Beijng.Chaoyang", 2) (ts, current) values (now, 10.2);
sql select count(ts) from td3948;
if $rows != 1 then
  print expect 1, actual:$rows
  return -1
endi

print ========================> TD-2740
sql drop table if exists m1;
sql create table m1(ts timestamp, k int) tags(a int);
sql create table tm10 using m1 tags(0);
sql create table tm11 using m1 tags(1);
sql create table tm12 using m1 tags(2);
sql create table tm13 using m1 tags(3);
sql insert into tm10 values('2020-1-1 1:1:1', 0);
sql insert into tm11 values('2020-1-5 1:1:1', 0);
sql insert into tm12 values('2020-1-7 1:1:1', 0);
sql insert into tm13 values('2020-1-1 1:1:1', 0);
sql select count(*) from m1 where ts='2020-1-1 1:1:1' partition by tbname interval(1h)
if $rows != 2 then
  return -1
endi

sql drop table m1;
sql drop table if exists tm1;
sql drop table if exists tm2;
sql create table m1(ts timestamp, k double, b double, c int, d smallint, e int unsigned) tags(a int);
sql create table tm1 using m1 tags(1);
sql create table tm2 using m1 tags(2);
sql insert into tm1 values('2021-01-27 22:22:39.294', 1, 10, NULL, 110, 123) ('2021-01-27 22:22:40.294', 2, 20, NULL, 120, 124) ('2021-01-27 22:22:41.294', 3, 30, NULL, 130, 125)('2021-01-27 22:22:43.294', 4, 40, NULL, 140, 126)('2021-01-27 22:22:44.294', 5, 50, NULL, 150, 127);
sql insert into tm2 values('2021-01-27 22:22:40.688', 5, 101, NULL, 210, 321) ('2021-01-27 22:22:41.688', 5, 102, NULL, 220, 322) ('2021-01-27 22:22:42.688', 5, 103, NULL, 230, 323)('2021-01-27 22:22:43.688', 5, 104, NULL, 240, 324)('2021-01-27 22:22:44.688', 5, 105, NULL, 250, 325)('2021-01-27 22:22:45.688', 5, 106, NULL, 260, 326);

sql select stddev(k) from m1
if $rows != 1 then
  return -1
endi
if $data00 != 1.378704626 then
  return -1
endi

sql select stddev(c) from m1
if $rows != 1 then
  return -1
endi

sql select stddev(k), stddev(c) from m1
if $rows != 1 then
  return -1
endi
if $data00 != 1.378704626 then
  return -1
endi
if $data01 != NULL then
  return -1;
endi

sql select stddev(b),stddev(b),stddev(k) from m1;
if $rows != 1 then
  return -1
endi
if $data00 != 37.840465463 then
  return -1
endi
if $data01 != 37.840465463 then
  return -1
endi
if $data02 != 1.378704626 then
  return -1
endi

sql select stddev(k), stddev(b), a from m1 group by a order by a
if $rows != 2 then
  return -1
endi
if $data00 != 1.414213562 then
  return -1
endi
if $data01 != 14.142135624 then
  return -1
endi
if $data02 != 1 then
  return -1
endi
if $data10 != 0.000000000 then
  return -1
endi
if $data11 != 1.707825128 then
  return -1
endi
if $data12 != 2 then
  return -1
endi

sql select stddev(k), stddev(b), a from m1 where a= 1 group by a
if $rows != 1 then
  return -1
endi
if $data00 != 1.414213562 then
 return -1
endi
if $data01 != 14.142135624 then
  return -1
endi
if $data02 != 1 then
 return -1
endi

sql select stddev(k), stddev(b), tbname from m1 group by tbname order by tbname
if $rows != 2 then
  return -1
endi
if $data00 != 1.414213562 then
  return -1
endi
if $data01 != 14.142135624 then
  return -1
endi
if $data02 != @tm1@ then
  return -1
endi
if $data10 != 0.000000000 then
  return -1
endi
if $data11 != 1.707825128 then
  return -1
endi
if $data12 != @tm2@ then
  return -1
endi

sql select stddev(k), stddev(b) from m1 group by tbname,a
if $rows != 2 then
  return -1
endi

sql select stddev(k), stddev(b), stddev(c),tbname, a from m1  group by tbname,a order by a asc
if $rows != 2 then
  return -1
endi
if $data00 != 1.414213562 then
  print expect 1.414213562, actual: $data00
  return -1
endi
if $data01 != 14.142135624 then
  return -1
endi
if $data02 != NULL then
  return -1
endi
if $data03 != @tm1@ then
  return -1
endi
if $data04 != 1 then
  return -1
endi
if $data10 != 0.000000000 then
  return -1
endi
if $data11 != 1.707825128 then
  return -1
endi
if $data12 != NULL then
  return -1
endi
if $data13 != @tm2@ then
  return -1
endi
if $data14 != 2 then
  return -1
endi

sql select _wstart, stddev(k), stddev(b), stddev(c), tbname,a  from m1 partition by tbname, a interval(10s) order by tbname
if $rows != 3 then
  return -1
endi
if $data01 != 0.000000000 then
  return -1
endi
if $data02 != 0.000000000 then
  return -1
endi
if $data03 != NULL then
  return -1
endi
if $data04 != @tm1@ then
  return -1
endi
if $data05 != 1 then
  return -1
endi
if $data11 != 1.118033989 then
  return -1
endi
if $data12 != 11.180339887 then
  return -1
endi
if $data13 != NULL then
  return -1
endi
if $data14 != @tm1@ then
  return -1
endi
if $data22 != 1.707825128 then
  return -1
endi
if $data23 != NULL then
  return -1
endi
if $data24 != @tm2@ then
  return -1
endi
if $data25 != 2 then
  return -1
endi

sql select _wstart, count(*), first(b), stddev(b), stddev(c), a from m1  partition by a interval(10s) order by a
if $rows != 3 then
  return -1
endi
if $data00 != @21-01-27 22:22:30.000@ then
  return -1
endi
if $data01 != 1 then
  return -1
endi
if $data02 != 10.000000000 then
  return -1
endi
if $data03 != 0.000000000 then
  return -1
endi
if $data04 != NULL then
  return -1
endi
if $data05 != 1 then
  return -1
endi
if $data12 != 20.000000000 then
  return -1
endi
if $data13 != 11.180339887 then
  return -1
endi
if $data14 != NULL then
  return -1
endi
if $data23 != 1.707825128 then
  return -1
endi

sql select _wstart, count(*), first(b), stddev(b), stddev(c), tbname, a from m1 partition by tbname, a interval(10s) order by tbname
if $rows != 3 then
  return -1
endi
if $data23 != 1.707825128 then
  return -1
endi
if $data25 != @tm2@ then
  return -1
endi

sql select _wstart, count(*), stddev(b), stddev(b)+20, stddev(c), tbname, a from m1 partition by tbname, a interval(10s) order by tbname
if $rows != 3 then
  return -1
endi
if $data02 != 0.000000000 then
  return -1
endi
if $data03 != 20.000000000 then
  return -1
endi
if $data13 != 31.180339887 then
  return -1
endi
if $data14 != NULL then
  return -1
endi

sql select _wstart, count(*), first(b), stddev(b)+first(b), stddev(c), tbname, a from m1 partition by tbname, a interval(10s) order by tbname
if $rows != 3 then
  return -1
endi
if $data02 != 10.000000000 then
  return -1
endi
if $data03 != 10.000000000 then
  return -1
endi
if $data12 != 20.000000000 then
  return -1
endi
if $data13 != 31.180339887 then
  return -1
endi
if $data22 != 101.000000000 then
  return -1
endi
if $data23 != 102.707825128 then
  return -1
endi

sql select stddev(e), stddev(k) from m1 where a=1
if $rows != 1 then
  return -1
endi
if $data00 != 1.414213562 then
  return -1
endi
if $data01 != 1.414213562 then
  return -1
endi

sql create stable st1 (ts timestamp, f1 int, f2 int) tags (id int);
sql create table tb1 using st1 tags(1);
sql insert into tb1 values ('2021-07-02 00:00:00', 1, 1);

sql select stddev(f1) from st1 group by f1;
if $rows != 1 then
  return -1
endi
if $data00 != 0.000000000 then
  return -1
endi

sql select count(tbname) from st1
if $rows != 1 then
  return -1
endi
if $data00 != 1 then
  return -1
endi

sql select count(id) from st1
if $rows != 1 then
  return -1
endi
if $data00 != 1 then
  return -1
endi

print ====================> TODO stddev + normal column filter

print ====================> irate
sql select irate(f1) from st1;
sql select irate(f1) from  st1 group by tbname;

sql select irate(k) from t1
if $rows != 1 then
  return -1
endi
if $data00 != 0.000027778 then
  return -1
endi

sql select irate(k) from t1 where ts>='2015-8-18 00:30:00.000'
if $rows != 1 then
  return -1
endi
if $data00 != 0.000000000 then
  print expect 0.000000000, actual $data00
  return -1
endi

sql select irate(k) from t1 where ts>='2015-8-18 00:06:00.000' and ts<='2015-8-18 00:12:00.000';
if $rows != 1 then
  return -1
endi
if $data00 != 0.005633334 then
  print expect 0.005633334, actual: $data00
  return -1
endi

sql select _wstart, irate(k) from t1 interval(10a)
if $rows != 6 then
  return -1
endi
if $data01 != 0.000000000 then
  return -1
endi
if $data11 != 0.000000000 then
  return -1
endi
if $data51 != 0.000000000 then
  return -1
endi

sql select _wstart, count(*), irate(k) from t1 interval(10m)
if $rows != 4 then
  return -1
endi
if $data00 != @15-08-18 00:00:00.000@ then
  return -1
endi
if $data01 != 2 then
  return -1
endi
if $data02 != 0.000144445 then
  return -1
endi
if $data10 != @15-08-18 00:10:00.000@ then
  return -1
endi
if $data11 != 2 then
  return -1
endi
if $data12 != 0.000272222 then
  return -1
endi
if $data20 != @15-08-18 00:20:00.000@ then
  return -1
endi
if $data21 != 1 then
  return -1
endi
if $data22 != 0.000000000 then
  return -1
endi
if $data30 != @15-08-18 00:30:00.000@ then
  return -1
endi
if $data31 != 1 then
  return -1
endi
if $data32 != 0.000000000 then
  return -1
endi

sql select _wstart, count(*),irate(k) from t1 interval(10m) order by _wstart desc
if $rows != 4 then
  return -1
endi
if $data30 != @15-08-18 00:00:00.000@ then
  return -1
endi
if $data31 != 2 then
  return -1
endi
if $data32 != 0.000144445 then
  return -1
endi

print ===========================> derivative
sql drop table t1
sql drop table tx;
sql drop table if exists m1;
sql drop table if exists tm0;
sql drop table if exists tm1;

sql create table tm0(ts timestamp, k double)
sql insert into tm0 values('2015-08-18T00:00:00Z', 2.064) ('2015-08-18T00:06:00Z', 2.116) ('2015-08-18T00:12:00Z', 2.028)
sql insert into tm0 values('2015-08-18T00:18:00Z', 2.126) ('2015-08-18T00:24:00Z', 2.041) ('2015-08-18T00:30:00Z', 2.051)

sql_error select derivative(ts) from tm0;
sql_error select derivative(k) from tm0;
sql_error select derivative(k, 0, 0) from tm0;
sql_error select derivative(k, 1, 911) from tm0;
sql_error select derivative(kx, 1s, 1) from tm0;
sql_error select derivative(k, -20s, 1) from tm0;
sql select derivative(k, 20a, 0) from tm0;
sql select derivative(k, 200a, 0) from tm0;
sql select derivative(k, 999a, 0) from tm0;
sql_error select derivative(k, 20s, -12) from tm0;

sql select ts, derivative(k, 1s, 0) from tm0
if $rows != 5 then
  return -1
endi
if $data00 != @15-08-18 08:06:00.000@ then
  return -1
endi
if $data01 != 0.000144444 then
  print expect 0.000144444, actual: $data01
  return -1
endi
if $data10 != @15-08-18 08:12:00.000@ then
  return -1
endi
if $data11 != -0.000244444 then
  return -1
endi
if $data20 != @15-08-18 08:18:00.000@ then
  return -1
endi
if $data21 != 0.000272222 then
  print expect 0.000272222, actual: $data21
  return -1
endi
if $data30 != @15-08-18 08:24:00.000@ then
  return -1
endi
if $data31 != -0.000236111 then
  print expect 0.000236111, actual: $data31
  return -1
endi

sql select ts ,derivative(k, 6m, 0) from tm0;
if $rows != 5 then
  return -1
endi
if $data00 != @15-08-18 08:06:00.000@ then
  return -1
endi
if $data01 != 0.052000000 then
  print expect 0.052000000, actual: $data01
  return -1
endi
if $data10 != @15-08-18 08:12:00.000@ then
  return -1
endi
if $data11 != -0.088000000 then
  return -1
endi
if $data20 != @15-08-18 08:18:00.000@ then
  return -1
endi
if $data21 != 0.098000000 then
  return -1
endi
if $data30 != @15-08-18 08:24:00.000@ then
  return -1
endi
if $data31 != -0.085000000 then
  return -1
endi

sql select ts, derivative(k, 12m, 0) from tm0;
if $rows != 5 then
  return -1
endi
if $data00 != @15-08-18 08:06:00.000@ then
  return -1
endi
if $data01 != 0.104000000 then
  print expect 0.104000000, actual: $data01
  return -1
endi

sql select derivative(k, 6m, 1) from tm0;
if $rows != 3 then
  return -1
endi

sql_error select derivative(k, 6m, 1) from tm0 interval(1s);
sql_error select derivative(k, 6m, 1) from tm0 session(ts, 1s);
sql_error select derivative(k, 6m, 1) from tm0 group by k;

sql drop table if exists tm0
sql drop table if exists m1

sql create table m1 (ts timestamp, k double ) tags(a int);
sql create table if not exists t0 using m1 tags(1);
sql create table if not exists t1 using m1 tags(2);

sql insert into t0 values('2020-1-1 1:1:1', 1);
sql insert into t0 values('2020-1-1 1:1:3', 3);
sql insert into t0 values('2020-1-1 1:2:4', 4);
sql insert into t0 values('2020-1-1 1:2:5', 5);
sql insert into t0 values('2020-1-1 1:2:6', 6);
sql insert into t0 values('2020-1-1 1:3:7', 7);
sql insert into t0 values('2020-1-1 1:3:8', 8);
sql insert into t0 values('2020-1-1 1:3:9', 9);
sql insert into t0 values('2020-1-1 1:4:10', 10);

sql insert into t1 values('2020-1-1 1:1:2', 2);
print ===========================>td-4739
sql select diff(val) from (select ts, derivative(k, 1s, 0) val from t1);
if $rows != 0 then
  return -1
endi

sql insert into t1 values('2020-1-1 1:1:4', 20);
sql insert into t1 values('2020-1-1 1:1:6', 200);
sql insert into t1 values('2020-1-1 1:1:8', 2000);
sql insert into t1 values('2020-1-1 1:1:10', 20000);

sql select derivative(k, 1s, 0) from m1;
sql_error select derivative(k, 1s, 0) from m1 group by a;
sql_error select derivative(f1, 1s, 0) from (select k from t1);

sql select ts, derivative(k, 1s, 0) from m1
if $rows != 13 then
  return -1
endi

print =========================>TD-5190
sql select _wstart, stddev(f1) from st1 where ts>'2021-07-01 1:1:1' and ts<'2021-07-30 00:00:00' interval(1d) fill(NULL);
if $rows != 29 then
  print expect 29, actual: $rows
  return -1
endi

if $data00 != @21-07-01 00:00:00.000@ then
  return -1
endi

if $data01 != NULL then
  return -1
endi

sql select derivative(test_column_alias_name, 1s, 0) from (select _wstart, avg(k) test_column_alias_name from t1 interval(1s));

sql create table smeters (ts timestamp, current float, voltage int) tags (t1 int);
sql create table smeter1 using smeters tags (1);
sql insert into smeter1 values ('2021-08-08 10:10:10', 10, 2);
sql insert into smeter1 values ('2021-08-08 10:10:12', 10, 2);
sql insert into smeter1 values ('2021-08-08 10:10:14', 20, 1);

sql select _wstart, stddev(voltage) from smeters where ts>='2021-08-08 10:10:10.000' and ts < '2021-08-08 10:10:20.000'  and current=10 interval(1000a);
if $rows != 2 then
  return -1
endi
if $data00 != @21-08-08 10:10:10.000@ then
  return -1
endi
if $data01 != 0.000000000 then
  return -1
endi
if $data10 != @21-08-08 10:10:12.000@ then
  return -1
endi
if $data11 != 0.000000000 then
  return -1
endi

sql select stddev(voltage) from smeters where ts>='2021-08-08 10:10:10.000' and ts < '2021-08-08 10:10:20.000'  and current=10;
if $rows != 1 then
  return -1
endi
if $data00 != 0.000000000 then
  return -1
endi

sql create table ft1(ts timestamp, a int, b int , c int, d double);

sql insert into ft1 values(1648791213000,1,2,3,1.0);
sql_error select sum(_wduration), a from ft1 state_window(a);

sql_error select count(_wduration), a from ft1 state_window(a);

sql_error select max(_wduration), a from ft1 state_window(a);

sql_error select sum(1 + _wduration), a from ft1 state_window(a);

sql_error select sum(cast(_wstart as bigint)), a from ft1 state_window(a);

sql_error select sum(cast(_wend as bigint)), a from ft1 state_window(a);

sql_error create stream streams1 trigger at_once  into streamt as select  _wstart, sum(_wduration) from ft1 interval(10s);

sql_error create stream streams1 trigger at_once  into streamt as select  _wstart, sum(cast(_wend as bigint)) from ft1 interval(10s);

sql create database test  vgroups 1;
sql use test;
sql create table t1(ts timestamp, a int, b int , c int, d double);
sql insert into t1 values(1648791213000,1,1,3,1.0);
sql insert into t1 values(1648791223000,1,2,NULL,NULL);

sleep 200

sql select apercentile(c, 50), apercentile(d, 50, "t-digest")  from t1;

if $data00 != 3.000000000 then
  print ======data00=$data00
  return -1
endi

if $data01 != 1.000000000 then
  print ======data01=$data01
  return -1
endi

sql select apercentile(c, 50) a, apercentile(d, 50, "t-digest")  from t1 partition by b session(ts, 5s) order by a desc;

if $data00 != 3.000000000 then
  print ======data00=$data00
  return -1
endi

if $data01 != 1.000000000 then
  print ======data01=$data01
  return -1
endi

if $data10 != NULL then
  print ======data10=$data10
  return -1
endi

if $data11 != NULL then
  print ======data11=$data11
  return -1
endi

sql select apercentile(c, 50) a, apercentile(d, 50, "t-digest")  from t1 state_window(b) order by a desc;

if $data00 != 3.000000000 then
  print ======data00=$data00
  return -1
endi

if $data01 != 1.000000000 then
  print ======data01=$data01
  return -1
endi

if $data10 != NULL then
  print ======data10=$data10
  return -1
endi

if $data11 != NULL then
  print ======data11=$data11
  return -1
endi
