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


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

    def run(self):
        tdSql.prepare()

        print("==============step1")
        tdSql.execute(
            "create table if not exists st (ts timestamp, tagtype int, name nchar(16), col4 binary(16)) tags(dev nchar(50), tag2 binary(16))")
        tdSql.execute(
            'CREATE TABLE if not exists dev_001 using st tags("dev_01", "tag_01")')
        tdSql.execute(
            'CREATE TABLE if not exists dev_002 using st tags("dev_02", "tag_02")')

        print("==============step2")

        tdSql.execute(
            """INSERT INTO dev_001 VALUES('2020-05-13 10:00:00.000', 1, 'first', 'binary1'),('2020-05-13 10:00:00.001', 2, 'second', 'binary2'),
            ('2020-05-13 10:00:00.002', 3, 'third' , 'binary3') dev_002 VALUES('2020-05-13 10:00:00.003', 1, 'first', 'binary4'), ('2020-05-13 10:00:00.004', 2, 'second', 'binary5'),
            ('2020-05-13 10:00:00.005', 3, 'third', 'binary6')""")

        # > for timestamp type
        tdSql.query("select * from db.st where ts > '2020-05-13 10:00:00.002'")
        tdSql.checkRows(3)

        # > for numeric type
        tdSql.query("select * from db.st where tagtype > 2")
        tdSql.checkRows(2)

        # < for timestamp type
        tdSql.query("select * from db.st where ts < '2020-05-13 10:00:00.002'")
        tdSql.checkRows(2)

        # < for numeric type
        tdSql.query("select * from db.st where tagtype < 2")
        tdSql.checkRows(2)

        # >= for timestamp type
        tdSql.query("select * from db.st where ts >= '2020-05-13 10:00:00.002'")
        tdSql.checkRows(4)

        # >= for numeric type
        tdSql.query("select * from db.st where tagtype >= 2")
        tdSql.checkRows(4)

        # <= for timestamp type
        tdSql.query("select * from db.st where ts <= '2020-05-13 10:00:00.002'")
        tdSql.checkRows(3)

        # <= for numeric type
        tdSql.query("select * from db.st where tagtype <= 2")
        tdSql.checkRows(4)

        # = for timestamp type
        tdSql.query("select * from db.st where ts = '2020-05-13 10:00:00.002'")
        tdSql.checkRows(1)

        # = for numeric type
        tdSql.query("select * from db.st where tagtype = 2")
        tdSql.checkRows(2)

        # = for nchar type
        tdSql.query("select * from db.st where name = 'first'")
        tdSql.checkRows(2)

        tdSql.query("select * from db.st where col4 = 1231231")
        tdSql.checkRows(0)

        tdSql.query("select * from db.st where name = 1231231")
        tdSql.checkRows(0)

        # <> for timestamp type not supported for primary timestamp
        tdSql.error("select * from db.st where ts <> '2020-05-13 10:00:00.002'")
        # tdSql.checkRows(4)

        # <> for numeric type
        tdSql.query("select * from db.st where tagtype <> 2")
        tdSql.checkRows(4)

        # <> for nchar type
        tdSql.query("select * from db.st where name <> 'first'")
        tdSql.checkRows(4)

        # % for nchar type
        tdSql.query("select * from db.st where name like 'fi%'")
        tdSql.checkRows(2)

        # - for nchar type
        tdSql.query("select * from db.st where name like '_econd'")
        tdSql.checkRows(2)

        # for tag
        tdSql.query("select * from db.st where dev=1")
        tdSql.checkRows(0)

        tdSql.query("select * from db.st where tag2=1")
        tdSql.checkRows(0)

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


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