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.42k stars 4.87k forks source link

There is a logical error in the combination of the BETWEEN expression and the OR expression. #28902

Open LingweiKuang opened 2 days ago

LingweiKuang commented 2 days ago

Bug Description

There is a logical error in the combination of the BETWEEN expression and the OR expression. The abstract expression sequence is: (time BETWEEN CONSTANT AND CONSTANT) OR (TRUE)

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 BETWEEN 1641024000000 AND 1641024000001);

# query 2
SELECT c1 FROM t1 WHERE (time BETWEEN 1641024000000 AND 1641024000001) OR (1 < 2);

Expected Behavior

Query 1 returned result set: 1

Query 2 returned result set: 1

Actual behaviour

Query 1 returned result set: 1

Query 2 returned result set: empty set

Environment

Additional Context

Hello, TDengine team. In Query 1, the BETWEEN expression is used to constrain the values of the time field, yielding correct results. In Query 2, when it is combined with an OR expression and the right-hand expression evaluates to TRUE, a logical error occurs, resulting in an incorrect query outcome.

LingweiKuang commented 2 days ago

There is a logical error in the combination of the BETWEEN expression and the OR expression