system sh/stop_dnodes.sh

system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c walLevel -v 0
system sh/cfg.sh -n dnode1 -c debugFlag -v 135
system sh/cfg.sh -n dnode1 -c rpcDebugFlag -v 135
system sh/exec.sh -n dnode1 -s start
sleep 1000
sql connect

$dbPrefix = sliding_db
$tbPrefix = sliding_tb
$mtPrefix = sliding_mt
$tbNum = 8
$rowNum = 10000
$totalNum = $tbNum * $rowNum

print =============== sliding.sim
$i = 0
$db = $dbPrefix . $i
$mt = $mtPrefix . $i

$tstart = 946656000000

$i = 0
$db = $dbPrefix . $i
$mt = $mtPrefix . $i

sql drop database if exits $db -x step1
step1:
sql create database if not exists $db tables 4 keep 36500
sql use $db
sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12))

$i = 0
while $i < $tbNum
  $tb = $tbPrefix . $i
  $tg2 = ' . abc
  $tg2 = $tg2 . '
  sql create table $tb using $mt tags( $i , $tg2 )

  $x = 0
  while $x < $rowNum
    $ms = $x . m
    $c = $x / 100
    $c = $c * 100
    $c = $x - $c

    $binary = ' . binary
    $binary = $binary . $c
    $binary = $binary . '

    $nchar = ' . nchar
    $nchar = $nchar . $c
    $nchar = $nchar . '

    sql insert into $tb values ($tstart , $c , $c , $c , $c , $c , $c , $c , $binary , $nchar )
    $tstart = $tstart + 30
    $x = $x + 1
  endw

  $i = $i + 1
  $tstart = 946656000000
endw

sleep 100

$i1 = 1
$i2 = 0

$db = $dbPrefix . $i
$mt = $mtPrefix . $i

$dbPrefix = sliding_db
$tbPrefix = sliding_tb
$mtPrefix = sliding_mt

$tb1 = $tbPrefix . $i1
$tb2 = $tbPrefix . $i2
$ts1 = $tb1 . .ts
$ts2 = $tb2 . .ts

print ===============================interval_sliding query
sql select count(*) from sliding_tb0 interval(30s) sliding(30s);
if $row != 10 then
 return -1
endi

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

if $data01 != 1000 then
 return -1
endi

if $data10 != @00-01-01 00:00:30.000@ then
 return -1
endi

if $data11 != 1000 then
 return -1
endi

sql select stddev(c1) from sliding_tb0 interval(10a) sliding(10a)
if $row != 10000 then
  return -1
endi

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

if $data01 != 0.000000000 then
   return -1
endi

if $data90 != @00-01-01 00:00:00.270@ then
  return -1
endi

if $data91 != 0.000000000 then
  return -1
endi

sql select stddev(c1),count(c2),first(c3),last(c4) from sliding_tb0 interval(10a) sliding(10a) order by ts desc;
if $row != 10000 then
  return -1
endi

if $data00 != @00-01-01 00:04:59.970@ then
 return -1
endi

if $data01 != 0.000000000 then
  return -1
endi

if $data02 != 1 then
  return -1
endi

if $data03 != 99 then
  return -1
endi

if $data04 != 99 then
  return -1
endi

if $data90 != @00-01-01 00:04:59.700@ then
  return -1
endi

if $data91 != 0.000000000 then
  return -1
endi

if $data92 != 1 then
  return -1
endi

if $data93 != 90 then
  return -1
endi

if $data94 != 90 then
  return -1
endi

sql select count(c2),last(c4) from sliding_tb0 interval(30s) sliding(10s) order by ts asc;
if $row != 30 then
  return -1
endi

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

if $data01 != 1000 then
  return -1
endi

if $data02 != 99 then
  return -1
endi

sql select count(c2),stddev(c3),first(c4),last(c4) from sliding_tb0 where ts>'2000-01-01 0:0:0' and ts<'2000-1-1 0:0:31' interval(30s) sliding(30s) order by ts asc;
if $row != 2 then
  return -1
endi

if $data04 != 99 then
  return -1
endi

if $data01 != 999 then
  return -1
endi

if $data02 != 28.837977152 then
  return -1
endi

#interval offset + limit
sql select count(c2), first(c3),stddev(c4) from sliding_tb0 interval(10a) sliding(10a) order by ts desc limit 10 offset 990;
if $row != 10 then
  return -1
endi

if $data00 != @00-01-01 00:04:30.270@ then
  return -1
endi

if $data01 != 1 then
  return -1
endi

if $data02 != 9 then
  return -1
endi

if $data03 != 0.000000000 then
  return -1
endi

if $data90 != @00-01-01 00:04:30.000@ then
  return -1
endi

if $data91 != 1 then
  return -1
endi

if $data92 != 0 then
  return -1
endi

if $data93 != 0.000000000 then
  return -1
endi

#interval offset test
sql select count(c2),last(c4),stddev(c3) from sliding_tb0 interval(30s) sliding(30s) order by ts asc limit 1000 offset 1;
if $row != 9 then
  return -1
endi

if $data00 != @00-01-01 00:00:30.000@ then
  return -1
endi

if $data01 != 1000 then
  return -1
endi

if $data02 != 99 then
  return -1
endi

if $data80 != @00-01-01 00:04:30.000@ then
  return -1
endi

if $data81 != 1000 then
  return -1
endi

sql select count(c2),last(c4),stddev(c3) from sliding_tb0 where ts>'2000-1-1 0:0:0' and ts<'2000-1-1 0:0:31' interval(30s) sliding(30s) order by ts asc limit 1000 offset 0;
if $row != 2 then
 return -1
endi

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

if $data01 != 999 then
 return -1
endi

if $data02 != 99 then
 return -1
endi

if $data03 != 28.837977152 then
 return -1
endi

if $data10 != @00-01-01 00:00:30.000@ then
 return -1
endi

if $data11 != 34 then
 return -1
endi

if $data12 != 33 then
 return -1
endi

if $data13 != 9.810708435 then
 return -1
endi

sql select count(c2),last(c4),stddev(c3) from sliding_tb0 interval(30s) sliding(20s) order by ts asc limit 100 offset 1;
if $row != 14 then
 return -1
endi

if $data00 != @00-01-01 00:00:20.000@ then
 return -1
endi

if $data01 != 1000 then
 return -1
endi

if $data02 != 66 then
 return -1
endi

if $data03 != 28.866070048 then
 return -1
endi

if $data90 != @00-01-01 00:03:20.000@ then
 return -1
endi

if $data91 != 1000 then
 return -1
endi

if $data92 != 66 then
 return -1
endi

sql select count(c2),last(c4),stddev(c3) from sliding_tb0 interval(30s) sliding(20s) order by ts asc limit 100 offset 14;
if $row != 1 then
 return -1
endi

sql select count(c2),last(c4),stddev(c3),spread(c3) from sliding_tb0 where c2 = 0 interval(30s) order by ts desc;
if $row != 10 then
 return -1
endi

#00-01-01 00:04:30.000|                   10|       0|              0.000000000|              0.000000000|
if $data00 != @00-01-01 00:04:30.000@ then
 return -1
endi

if $data01 != 10 then
 return -1
endi

if $data02 != 0 then
 return -1
endi

if $data03 != 0.000000000 then
 return -1
endi

sql select count(c2),last(c4),stddev(c3),spread(c3) from sliding_tb0 where c2 = 0 interval(30s) sliding(20s) order by ts desc limit 1 offset 15;
if $row != 0 then
 return -1
endi

sql select count(*),stddev(c1),count(c1),first(c2),last(c3) from sliding_tb0 where ts>'2000-1-1 00:00:00' and ts<'2000-1-1 00:00:01.002' and c2 >= 0 interval(30s) sliding(10a) order by ts asc limit 1000;
if $row != 100 then
 return -1
endi

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

if $data02 != 9.521904571 then
 return -1
endi

if $data05 != 33 then
 return -1
endi

if $data10 != @00-01-01 00:00:00.010@ then
 return -1
endi

if $data12 != 9.521904571 then
 return -1
endi

if $data15 != 33 then
 return -1
endi

if $data95 != 33 then
 return -1
endi

sql select count(*),stddev(c1),count(c1),first(c2),last(c3) from sliding_tb0 where ts>'2000-1-1 00:00:00' and ts<'2000-1-1 00:00:01.002' and c2 >= 0 interval(30s) sliding(10a) order by ts desc limit 1000;
if $row != 100 then
 return -1
endi

if $data00 != @00-01-01 00:00:00.990@ then
 return -1
endi

if $data01 != 1 then
 return -1
endi

if $data02 != 0.000000000 then
 return -1
endi

if $data03 != 1 then
 return -1
endi

if $data90 != @00-01-01 00:00:00.900@ then
 return -1
endi

if $data91 != 4 then
 return -1
endi

if $data92 != 1.118033989 then
 return -1
endi

if $data93 != 4 then
 return -1
endi

if $data94 != 30.00000 then
 return -1
endi

print check boundary check crash at client side
sql select count(*) from sliding_mt0 where ts>now and ts < now-1h;

print ========================query on super table

print ========================error case
sql_error select sum(c1) from sliding_tb0 interval(1a) sliding(1a);
sql_error select sum(c1) from sliding_tb0 interval(10a) sliding(12a);
sql_error select sum(c1) from sliding_tb0 sliding(1n) interval(1y);
sql_error select sum(c1) from sliding_tb0 interval(-1y)  sliding(1n);
sql_error select sum(c1) from sliding_tb0 interval(1y)  sliding(-1n);
sql_error select sum(c1) from sliding_tb0 interval(0)  sliding(0);
sql_error select sum(c1) from sliding_tb0 interval(0m)  sliding(0m);
sql_error select sum(c1) from sliding_tb0 interval(m)  sliding(m);
sql_error select sum(c1) from sliding_tb0 sliding(4m);

system sh/exec.sh -n dnode1 -s stop -x SIGINT
