last_row_cache.py 9.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
###################################################################
#           Copyright (c) 2016 by TAOS Technologies, Inc.
#                     All rights reserved.
#
#  This file is proprietary and confidential to TAOS Technologies.
#  No part of this file may be reproduced, stored, transmitted,
#  disclosed or used in any form or by any means other than as
#  expressly provided by the written permission from Jianhui Tao
#
###################################################################

# -*- coding: utf-8 -*-

import sys
import taos
from util.log import tdLog
from util.cases import tdCases
from util.sql import tdSql
from util.dnodes import tdDnodes

class TDTestCase:
    def init(self, conn, logSql):
        tdLog.debug("start to execute %s" % __file__)
        tdSql.init(conn.cursor(), logSql)

        self.tables = 10
        self.rows = 20
28
        self.columns = 5
29 30 31 32
        self.perfix = 't'
        self.ts = 1601481600000
    
    def insertData(self):
P
Ping Xiao 已提交
33 34 35 36
        print("==============step1")
        sql = "create table st(ts timestamp, "
        for i in range(self.columns - 1):
            sql += "c%d int, " % (i + 1)
37
        sql += "c5 int) tags(t1 int)"
P
Ping Xiao 已提交
38
        tdSql.execute(sql)
39 40 41 42 43
        
        for i in range(self.tables):
            tdSql.execute("create table %s%d using st tags(%d)" % (self.perfix, i, i))
            for j in range(self.rows):
                tc = self.ts + j * 60000
P
Ping Xiao 已提交
44
                tdSql.execute("insert into %s%d(ts, c1) values(%d, %d)" %(self.perfix, i, tc, j))    
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73

    def executeQueries(self):
        print("==============step2")
        tdSql.query("select last_row(c1) from %s%d" % (self.perfix, 1))
        tdSql.checkData(0, 0, 19)

        tdSql.query("select last_row(c1) from %s%d where ts <= %d" % (self.perfix, 1, self.ts + 4 * 60000))
        tdSql.checkData(0, 0, 4)

        tdSql.query("select last_row(c1) as b from %s%d" % (self.perfix, 1))
        tdSql.checkData(0, 0, 19)

        tdSql.query("select last_row(c1) from st")
        tdSql.checkData(0, 0, 19)

        tdSql.query("select last_row(c1) as c from st where ts <= %d" % (self.ts + 4 * 60000))
        tdSql.checkData(0, 0, 4)

        tdSql.query("select last_row(c1) as c from st where t1 < 5")
        tdSql.checkData(0, 0, 19)

        tdSql.query("select last_row(c1) as c from st where t1 <= 5 and ts <= %d" % (self.ts + 4 * 60000))
        tdSql.checkData(0, 0, 4)        

        tdSql.query("select last_row(c1) as c from st group by t1")
        tdSql.checkRows(10)
        tdSql.checkData(0, 0, 19)        

        tc = self.ts + 1 * 3600000
P
Ping Xiao 已提交
74
        tdSql.execute("insert into %s%d(ts, c1) values(%d, %d)" %(self.perfix, 1, tc, 10))
75 76

        tc = self.ts + 3 * 3600000
P
Ping Xiao 已提交
77
        tdSql.execute("insert into %s%d(ts, c1) values(%d, null)" %(self.perfix, 1, tc))
78 79

        tc = self.ts + 5 * 3600000
P
Ping Xiao 已提交
80
        tdSql.execute("insert into %s%d(ts, c1) values(%d, %d)" %(self.perfix, 1, tc, -1))
81 82

        tc = self.ts + 7 * 3600000
P
Ping Xiao 已提交
83
        tdSql.execute("insert into %s%d(ts, c1) values(%d, null)" %(self.perfix, 1, tc))
84 85 86

    def insertData2(self):
        tc = self.ts + 1 * 3600000
P
Ping Xiao 已提交
87
        tdSql.execute("insert into %s%d(ts, c1) values(%d, %d)" %(self.perfix, 1, tc, 10))
88 89

        tc = self.ts + 3 * 3600000
P
Ping Xiao 已提交
90
        tdSql.execute("insert into %s%d(ts, c1) values(%d, null)" %(self.perfix, 1, tc))
91 92

        tc = self.ts + 5 * 3600000
P
Ping Xiao 已提交
93
        tdSql.execute("insert into %s%d(ts, c1) values(%d, %d)" %(self.perfix, 1, tc, -1))
94 95

        tc = self.ts + 7 * 3600000
P
Ping Xiao 已提交
96
        tdSql.execute("insert into %s%d(ts, c1) values(%d, null)" %(self.perfix, 1, tc))
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143

    def executeQueries2(self): 
        # For stable
        tc = self.ts + 6 * 3600000
        tdSql.query("select last_row(c1) from st where ts < %d " % tc)        
        tdSql.checkData(0, 0, -1)

        tc = self.ts + 8 * 3600000
        tdSql.query("select last_row(*) from st where ts < %d " % tc)        
        tdSql.checkData(0, 1, None)

        tdSql.query("select last_row(*) from st")        
        tdSql.checkData(0, 1, None)

        tc = self.ts + 4 * 3600000
        tdSql.query("select last_row(*) from st where ts < %d " % tc)        
        tdSql.checkData(0, 1, None)

        tc1 = self.ts + 1 * 3600000
        tc2 = self.ts + 4 * 3600000
        tdSql.query("select last_row(*) from st where ts > %d and ts <= %d" % (tc1, tc2))
        tdSql.checkData(0, 1, None)

        # For table
        tc = self.ts + 6 * 3600000
        tdSql.query("select last_row(*) from %s%d where ts <= %d" % (self.perfix, 1, tc))
        tdSql.checkData(0, 1, -1)

        tc = self.ts + 8 * 3600000
        tdSql.query("select last_row(*) from %s%d where ts <= %d" % (self.perfix, 1, tc))
        tdSql.checkData(0, 1, None)

        tdSql.query("select last_row(*) from %s%d" % (self.perfix, 1))
        tdSql.checkData(0, 1, None)

        tc = self.ts + 4 * 3600000
        tdSql.query("select last_row(*) from %s%d where ts <= %d" % (self.perfix, 1, tc))
        tdSql.checkData(0, 1, None)

        tc1 = self.ts + 1 * 3600000
        tc2 = self.ts + 4 * 3600000
        tdSql.query("select last_row(*) from st where ts > %d and ts <= %d" % (tc1, tc2))
        tdSql.checkData(0, 1, None)
        
    def run(self):
        tdSql.prepare()
        
P
Ping Xiao 已提交
144
        print("============== Step1:  last_row_cache_0.sim")
145 146 147 148 149 150
        tdSql.execute("create database test1 cachelast 0")
        tdSql.execute("use test1")
        self.insertData()
        self.executeQueries()
        self.insertData2()
        self.executeQueries2()
151

P
Ping Xiao 已提交
152
        print("============== Step2: alter database test1 cachelast 1")
153 154
        tdSql.execute("alter database test1 cachelast 1")                
        self.executeQueries2()
155
        
P
Ping Xiao 已提交
156
        print("============== Step3: alter database test1 cachelast 2")
157 158 159
        tdSql.execute("alter database test1 cachelast 2")                
        self.executeQueries2()

P
Ping Xiao 已提交
160
        print("============== Step4: alter database test1 cachelast 3")
161 162 163 164
        tdSql.execute("alter database test1 cachelast 3")                
        self.executeQueries2()                

        
P
Ping Xiao 已提交
165
        print("============== Step5: alter database test1 cachelast 0 and restart taosd")
166 167 168 169 170 171
        tdSql.execute("alter database test1 cachelast 0")                
        self.executeQueries2()
        tdDnodes.stop(1)
        tdDnodes.start(1)
        self.executeQueries2()

P
Ping Xiao 已提交
172
        print("============== Step6: alter database test1 cachelast 1 and restart taosd")
173 174 175 176 177 178
        tdSql.execute("alter database test1 cachelast 1")        
        self.executeQueries2()
        tdDnodes.stop(1)
        tdDnodes.start(1)
        self.executeQueries2()

P
Ping Xiao 已提交
179
        print("============== Step7: alter database test1 cachelast 2 and restart taosd")
180 181
        tdSql.execute("alter database test1 cachelast 2")        
        self.executeQueries2()
182 183 184 185
        tdDnodes.stop(1)
        tdDnodes.start(1)
        self.executeQueries2()

P
Ping Xiao 已提交
186
        print("============== Step8: alter database test1 cachelast 3 and restart taosd")
187
        tdSql.execute("alter database test1 cachelast 3")        
188 189 190 191 192
        self.executeQueries2()
        tdDnodes.stop(1)
        tdDnodes.start(1)
        self.executeQueries2()

P
Ping Xiao 已提交
193
        print("============== Step9: create database test2 cachelast 1")
194 195 196 197 198 199
        tdSql.execute("create database test2 cachelast 1")
        tdSql.execute("use test2")
        self.insertData()
        self.executeQueries()
        self.insertData2()
        self.executeQueries2()
P
Ping Xiao 已提交
200 201 202
        tdDnodes.stop(1)
        tdDnodes.start(1)
        self.executeQueries2()
203
        
P
Ping Xiao 已提交
204
        print("============== Step8: alter database test2 cachelast 0")
205
        tdSql.execute("alter database test2 cachelast 0")        
206 207
        self.executeQueries2()                

P
Ping Xiao 已提交
208
        print("============== Step9: alter database test2 cachelast 1")
209 210 211
        tdSql.execute("alter database test2 cachelast 1")        
        self.executeQueries2()

P
Ping Xiao 已提交
212
        print("============== Step10: alter database test2 cachelast 2")
213 214 215
        tdSql.execute("alter database test2 cachelast 2")        
        self.executeQueries2()                

P
Ping Xiao 已提交
216
        print("============== Step11: alter database test2 cachelast 3")
217
        tdSql.execute("alter database test2 cachelast 3")        
218
        self.executeQueries2()
219

P
Ping Xiao 已提交
220
        print("============== Step12: alter database test2 cachelast 0 and restart taosd")
221 222
        tdSql.execute("alter database test2 cachelast 0")        
        self.executeQueries2() 
223 224
        tdDnodes.stop(1)
        tdDnodes.start(1)
225
        self.executeQueries2()               
226

P
Ping Xiao 已提交
227
        print("============== Step13: alter database test2 cachelast 1 and restart taosd")
228 229 230 231 232 233
        tdSql.execute("alter database test2 cachelast 1")        
        self.executeQueries2()
        tdDnodes.stop(1)
        tdDnodes.start(1)
        self.executeQueries2()

P
Ping Xiao 已提交
234
        print("============== Step14: alter database test2 cachelast 2 and restart taosd")
235 236 237 238 239 240
        tdSql.execute("alter database test2 cachelast 2")        
        self.executeQueries2()
        tdDnodes.stop(1)
        tdDnodes.start(1)
        self.executeQueries2()                

P
Ping Xiao 已提交
241
        print("============== Step15: alter database test2 cachelast 3 and restart taosd")
242 243 244 245 246 247
        tdSql.execute("alter database test2 cachelast 3")        
        self.executeQueries2()
        tdDnodes.stop(1)
        tdDnodes.start(1)
        self.executeQueries2()
        
P
Ping Xiao 已提交
248
        print("============== Step16: select last_row(*) from st group by tbname")
249 250 251
        tdSql.query("select last_row(*) from st group by tbname")
        tdSql.checkRows(10)        

252 253 254 255 256 257 258
    def stop(self):
        tdSql.close()
        tdLog.success("%s successfully executed" % __file__)


tdCases.addWindows(__file__, TDTestCase())
tdCases.addLinux(__file__, TDTestCase())