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/exec.sh -n dnode1 -s start
sleep 3000
sql connect

$dbPrefix = fl1_db
$tbPrefix = fl1_tb
$stbPrefix = fl1_stb
$tbNum = 10
$rowNum = 10
$totalNum = $tbNum * $rowNum
$ts0 = 1537146000000
$delta = 600000
print ========== fill.sim
$i = 0
$db = $dbPrefix . $i
$stb = $stbPrefix . $i

sql drop database $db -x step1
step1:
sql create database $db
sql use $db
sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int, t2 nchar(20), t3 binary(20), t4 bigint, t5 bool, t6 double)

$i = 0
$ts = $ts0
$halfNum = $tbNum / 2
while $i < $halfNum
  $i1 = $i + $halfNum
  $tb = $tbPrefix . $i
  $tb1 = $tbPrefix . $i1
  $tgstr = 'tb . $i
  $tgstr = $tgstr . '
  $tgstr1 = 'tb . $i1
  $tgstr1 = $tgstr1 . '
  sql create table $tb using $stb tags( $i , $tgstr , $tgstr , $i , $i , $i )
  sql create table $tb1 using $stb tags( $i1 , $tgstr1 , $tgstr1 , $i , $i , $i )
 
  $x = 0
  while $x < $rowNum
    $xs = $x * $delta
    $ts = $ts0 + $xs
    $c = $x / 10
    $c = $c * 10
    $c = $x - $c
    $binary = 'binary . $c
    $binary = $binary . '
    $nchar = 'nchar . $c
    $nchar = $nchar . '
    sql insert into $tb values ( $ts , $c , $c , $c , $c , $c , $c , true, $binary , $nchar ) 
    sql insert into $tb1 values ( $ts , $c , NULL , $c , NULL , $c , $c , true, $binary , $nchar ) 
    $x = $x + 1
  endw 

  $i = $i + 1
endw 
print ====== tables created

# setup
$i = 0
$tb = $tbPrefix . $i
$tsu = $rowNum * $delta
$tsu = $tsu - $delta
$tsu = $tsu + $ts0

#### fill test cases for stables

# NULL values in each group
#sql select count(*) from $stb where ts >= '2018-09-16 00:00:00.000' and ts <= $tsu interval(1d) fill(prev) group by t1
#$val = $tbNum * 2
#if rows != $val then
#  return -1
#endi
#if $data00 != @18-09-16 00:00:00.000@ then
#  return -1
#endi
#if $data01 != NULL then
#  return -1
#endi
#if $data02 != NULL then
#  return -1
#endi
#if $data11 != $rowNum then
#  return -1
#endi
#if $data12 != 0 then
#  return -1
#endi
#if $data20 != @18-09-16 00:00:00.000@ then
#  return -1
#endi
#if $data21 != NULL then
#  return -1
#endi
#if $data22 != NULL then
#  return -1
#endi

# number of fill values exceeds number of selected columns
sql select max(c1), max(c2), max(c3), max(c4), max(c5) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, -1, -2, -3, -4, -5, -6, -7, -8)
$val = $rowNum * 2
$val = $val - 1
if $rows != $val then
  return -1
endi
if $data11 != -1 then
  return -1
endi
if $data12 != -2 then
  return -1
endi
if $data13 != -3.00000 then
  return -1
endi
if $data14 != -4.000000000 then
  return -1
endi
if $data15 != -5 then
  return -1
endi
if $data31 != -1 then
  return -1
endi
if $data52 != -2 then
  return -1
endi
if $data73 != -3.00000 then
  return -1
endi
if $data74 != -4.000000000 then
  return -1
endi
## fill(value) + group by
sql select max(c1), max(c2), max(c3), max(c4), max(c5) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, -1, -2, -3, -4, -5, -6, -7, -8) group by t1
$val = $rowNum * 2
$val = $val - 1
$val = $val * $tbNum
if $rows != $val then
  return -1
endi
if $data06 != 0 then
  return -1
endi
if $data11 != -1 then
  return -1
endi
#if $data16 != 0 then
#  return -1
#endi

# number of fill values is smaller than number of selected columns
sql select max(c1), max(c2), max(c3) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6)
if $data11 != 6 then
  return -1
endi
if $data12 != 6 then
  return -1
endi
if $data13 != 6.00000 then
  return -1
endi
 
# unspecified filling method
sql_error select max(c1), max(c2), max(c3), max(c4), max(c5) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill (6, 6, 6, 6, 6)

# fill_char_values_to_arithmetic_fields
sql_error select sum(c1), avg(c2), max(c3), min(c4), avg(c4), count(c6), last(c7), last(c8) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c')

# fill_multiple_columns
sql_error select sum(c1), avg(c2), min(c3), max(c4), count(c6), first(c7), last(c8) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 99, 99, 99, 99, 99, abc, abc)
sql select sum(c1), avg(c2), min(c3), max(c4) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 99, 99, 99, 99)
$val = $rowNum * 2
$val = $val - 1
if $rows != $val then
  return -1
endi
if $data01 != 0 then
  return -1
endi
if $data11 != 99 then
  return -1
endi

sql select * from $stb
#print data08 = $data08
if $data09 != nchar0 then
  return -1
endi
sql select max(c4) from $stb where t1 > 4 and ts >= $ts0 and ts <= $tsu interval(5m) fill(value, -1) group by t1
if $rows != 0 then
  return -1
endi
sql select min(c1), max(c4) from $stb where t1 > 4 and ts >= $ts0 and ts <= $tsu interval(5m) fill(value, -1)
$val = $rowNum * 2
$val = $val - 1
if $rows != $val then
  return -1
endi
if $data00 != @18-09-17 09:00:00.000@ then
  return -1
endi
if $data01 != 0 then
  return -1
endi
if $data02 != -1.000000000 then
  return -1
endi
if $data11 != -1 then
  return -1
endi
if $data12 != -1.000000000 then
  return -1
endi

# fill_into_nonarithmetic_fieds
sql select first(c7), first(c8), first(c9) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 20000000, 20000000, 20000000)
#if $data11 != 20000000 then
if $data11 != 1 then
  return -1
endi

sql select first(c7), first(c8), first(c9) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 1, 1, 1)
sql select first(c7), first(c8), first(c9) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 1.1, 1.1, 1.1)
sql select first(c7), first(c8), first(c9) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 1e1, 1e1, 1e1)
sql select first(c8), first(c9) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '1e', '1e1')
# fill quoted values into bool column will throw error unless the value is 'true' or 'false' Note:2018-10-24
# fill values into binary or nchar columns will be set to NULL automatically Note:2018-10-24
sql_error select first(c7), first(c8), first(c9) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '1e', '1e1','1e1')
sql select first(c7), first(c8), first(c9) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, true, true, true)
sql select first(c7), first(c8), first(c9) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 'true', 'true','true')


# fill nonarithmetic values into arithmetic fields
sql_error select count(*) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, abc);
sql_error select count(*) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 'true');

sql select count(*) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '2e1');
$val = $rowNum * 2
$val = $val - 1
if $rows != $val then 
  return -1
endi
if $data01 != $rowNum then
  return -1
endi
if $data11 != 20 then 
  return -1
endi

sql select count(*) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 2e1);
if $rows != $val then 
  return -1
endi
if $data01 != $rowNum then
  return -1
endi
if $data11 != 20 then 
  return -1
endi

sql select count(*) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '20');
if $rows != $val then 
  return -1
endi
if $data01 != $rowNum then
  return -1
endi
if $data11 != 20 then 
  return -1
endi

## linear fill
sql select max(c1), min(c2), avg(c3), sum(c4), first(c7), last(c8), first(c9) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(linear) group by t1
$val = $rowNum * 2
$val = $val - 1
$val = $val * $tbNum
if $rows != $val then
  return -1
endi
if $data08 != 0 then
  return -1
endi
if $data15 != NULL then
  return -1
endi
if $data16 != NULL then
  return -1
endi
if $data17 != NULL then
  return -1
endi
if $data18 != 0 then
  return -1
endi

## [TBASE-365]
sql select max(c1), min(c2), avg(c3), sum(c4), first(c7), last(c8), first(c9) from $stb where ts >= $ts0 and ts <= $tsu and t1 > 4 interval(5m) fill(linear) group by t1
if $rows != 95 then
  return -1
endi
#if $data02 != NULL then
#  return -1
#endi
#if $data04 != NULL then
#  return -1
#endi
if $data06 != binary0 then
  return -1
endi
if $data07 != nchar0 then
  return -1
endi
if $data12 != NULL then
  return -1
endi
if $data14 != NULL then
  return -1
endi
if $data16 != NULL then
  return -1
endi
if $data17 != NULL then
  return -1
endi
if $data08 != 5 then
  return -1
endi
if $data18 != 5 then
  return -1
endi

sql select max(c1), min(c2), sum(c3), avg(c4), first(c7), last(c8), first(c9) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(linear)
$val = $rowNum * 2
$val = $val - 1
if $rows != $val then
  return -1
endi
if $data07 != nchar0 then
  return -1
endi
if $data17 != NULL then
  return -1
endi

sql select max(c1), min(c2), sum(c3), avg(c4), first(c9), last(c8), first(c9) from $stb where ts >= '2018-09-16 00:00:00.000' and ts <= '2018-09-18 00:00:00.000' interval(1d) fill(linear)
if $rows != 3 then
  return -1
endi

## previous fill
print fill(prev)
sql select max(c1), min(c2), avg(c3), sum(c4), count(c5), first(c7), last(c8), first(c9) from $stb where ts >= $ts0 and ts <= $tsu and t1 > 4 interval(5m) fill(prev) group by t1 limit 5
if $rows != 25 then 
  return -1
endi
if $data01 != 0 then
  return -1
endi
if $data02 != NULL then
  return -1
endi
if $data04 != NULL then
  return -1
endi
if $data09 != 5 then 
  return -1
endi
if $data12 != NULL then
  return -1
endi
if $data19 != 5 then 
  return -1
endi
if $data18 != nchar0 then
  return -1
endi
if $data59 != 6 then 
  return -1
endi
if $data69 != 6 then
  return -1
endi

## NULL fill
print fill(NULL)
sql select max(c1), min(c2), avg(c3), sum(c4), count(c5), first(c7), last(c8), first(c9) from $stb where ts >= $ts0 and ts <= $tsu and t1 > 4 interval(5m) fill(value, NULL) group by t1 limit 5
if $rows != 25 then 
  return -1
endi
if $data01 != 0 then
  return -1
endi
if $data02 != NULL then
  return -1
endi
if $data04 != NULL then
  return -1
endi
if $data06 != 1 then
  return -1
endi
if $data09 != 5 then 
  return -1
endi
if $data11 != NULL then
  return -1
endi
if $data12 != NULL then
  return -1
endi
if $data19 != 5 then 
  return -1
endi
if $data18 != NULL then
  return -1
endi
if $data59 != 6 then 
  return -1
endi
if $data69 != 6 then
  return -1
endi

print =============== clear
sql drop database $db
sql show databases
if $rows != 0 then 
  return -1
endi
