###################################################################
#           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 os
from util.log import *
from util.cases import *
from util.sql import *
from util.dnodes import *


class TDTestCase:
    def init(self, conn, logSql):
        tdLog.debug("start to execute %s" % __file__)
        tdSql.init(conn.cursor(), logSql)
        
        self.ts = 1538548685000
        self.numberOfTables = 10000
        self.numberOfRecords = 100

    def run(self):
        if not os.path.exists("/taosdumptest/tmp1"):
            os.makedirs("/taosdumptest/tmp1")
        else:
            print("目录存在")
        if not os.path.exists("/taosdumptest/tmp2"):
            os.makedirs("/taosdumptest/tmp2")        
        tdSql.execute("drop database if exists db")
        tdSql.execute("create database db  days 11 keep 3649 blocks 8 ")
        tdSql.execute("create database db1  days 12 keep 3640 blocks 7 ")
        tdSql.execute("use db")
        tdSql.execute("create table st(ts timestamp, c1 int, c2 nchar(10)) tags(t1 int, t2 binary(10))")
        tdSql.execute("create table t1 using st tags(1, 'beijing')")        
        sql = "insert into t1 values"
        currts = self.ts
        for i in range(100):
            sql += "(%d, %d, 'nchar%d')" % (currts + i, i % 100, i % 100)
        tdSql.execute(sql)
        tdSql.execute("create table t2 using st tags(2, 'shanghai')")        
        sql = "insert into t2 values"
        currts = self.ts
        for i in range(100):
            sql += "(%d, %d, 'nchar%d')" % (currts + i, i % 100, i % 100)
        tdSql.execute(sql)     
        os.system("taosdump --databases db -o /taosdumptest/tmp1")
        os.system("taosdump --databases db1 -N -o /taosdumptest/tmp2")
       
        tdSql.execute("drop database db")
        tdSql.execute("drop database db1")
        tdSql.query("show databases")
        tdSql.checkRows(0)
        os.system("taosdump -i /taosdumptest/tmp1")
        os.system("taosdump -i /taosdumptest/tmp2")

        tdSql.execute("use db")
        tdSql.query("show databases")
        tdSql.checkRows(2)
        dbresult = tdSql.queryResult
        # 6--days,7--keep0,keep1,keep, 12--block,
        for i in  range(len(dbresult)):
            if dbresult[i][0] == 'db':
                print(dbresult[i])
                print(type(dbresult[i][6]))
                print(type(dbresult[i][7]))
                print(type(dbresult[i][9]))
                assert dbresult[i][6] == 11
                assert dbresult[i][7] == "3649,3649,3649"
                assert dbresult[i][9] == 8
            if dbresult[i][0] == 'db1':
                assert dbresult[i][6] == 10
                assert dbresult[i][7] == "3650,3650,3650"
                assert dbresult[i][9] == 6

        tdSql.query("show stables")
        tdSql.checkRows(1)
        tdSql.checkData(0, 0, 'st')

        tdSql.query("show tables")
        tdSql.checkRows(2)
        tdSql.checkData(0, 0, 't2')
        tdSql.checkData(1, 0, 't1')

        tdSql.query("select * from t1")
        tdSql.checkRows(100)
        for i in range(100):
            tdSql.checkData(i, 1, i)
            tdSql.checkData(i, 2, "nchar%d" % i)

        tdSql.query("select * from t2")
        tdSql.checkRows(100)
        for i in range(100):
            tdSql.checkData(i, 1, i)
            tdSql.checkData(i, 2, "nchar%d" % i)

        # drop all databases，boundary value testing. length(databasename)<=32;length(tablesname)<=192
        tdSql.execute("drop database db")
        tdSql.execute("drop database db1")
        os.system("rm -rf /taosdumptest/tmp1")
        os.system("rm -rf /taosdumptest/tmp2")    
        os.makedirs("/taosdumptest/tmp1")
        tdSql.execute("create database db12312313231231321312312312_323")     
        tdSql.error("create database db12312313231231321312312312_3231")     
        tdSql.execute("use db12312313231231321312312312_323")
        tdSql.execute("create stable st12345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678_9(ts timestamp, c1 int, c2 nchar(10)) tags(t1 int, t2 binary(10))")
        tdSql.error("create stable st_12345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678_9(ts timestamp, c1 int, c2 nchar(10)) tags(t1 int, t2 binary(10))")
        tdSql.execute("create stable st(ts timestamp, c1 int, c2 nchar(10)) tags(t1 int, t2 binary(10))")
        tdSql.execute("create stable st1(ts timestamp, c1 int, col2_012345678901234567890123456789012345678901234567890123456789 nchar(10)) tags(t1 int, t2 binary(10))")

        tdSql.execute("select * from db12312313231231321312312312_323.st12345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678_9")   
        tdSql.error("create table t0_12345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678912345678_9 using st tags(1, 'beijing')")  
        tdSql.query("show stables")
        tdSql.checkRows(3)
        os.system("taosdump --databases db12312313231231321312312312_323 -o /taosdumptest/tmp1")
        tdSql.execute("drop database db12312313231231321312312312_323")       
        os.system("taosdump -i /taosdumptest/tmp1")
        tdSql.execute("use db12312313231231321312312312_323")
        tdSql.query("show stables")
        tdSql.checkRows(3)
        os.system("rm -rf /taosdumptest/tmp1")
        os.system("rm -rf /taosdumptest/tmp2") 
        os.system("rm -rf ./dump_result.txt")
        os.system("rm -rf ./db.csv")      
      

    def stop(self):
        tdSql.close()
        tdLog.success("%s successfully executed" % __file__)


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