taosdata / TDengine

High-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios
https://tdengine.com
GNU Affero General Public License v3.0
23.45k stars 4.87k forks source link

The combination of the IN operator and the BETWEEN operator contains a logical error. #28989

Open LingweiKuang opened 3 hours ago

LingweiKuang commented 3 hours ago

Bug Description

The abstract expression sequence is: time IN (constant) AND time BETWEEEN (constant) AND (constant)

To Reproduce

Assume that we execute the following statement under a database named testdb.

DROP TABLE IF EXISTS t1;
CREATE TABLE t1(time TIMESTAMP, c1 BIGINT);
INSERT INTO t1(time, c1) VALUES (1641024000000, 1);

# query 1
SELECT c1 FROM t1 WHERE time IN (1) AND time BETWEEN (1741024000000) AND (1741024000000);

Expected Behavior

Query 1 returned result set: empty set

Actual behaviour

Query 1 returned result set: 1

Environment

Additional Context

Hello, TDengine team. When the IN operator and the BETWEEN operator are used on the time field and connected by the AND logical operator, the expressions involving the IN and BETWEEN operators evaluate to FALSE, but the final result still filters out all the data.

LingweiKuang commented 3 hours ago

The combination of the IN operator and the BETWEEN operator contains a logical error